From 998796f26ded870bc414381ee6437774e7011c18 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 20:01:37 +0200 Subject: [PATCH 0001/1497] update readme, add FAQ --- readme.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index bb54feba..01c17288 100644 --- a/readme.md +++ b/readme.md @@ -25,16 +25,23 @@ depending on the game. - Short press makes steam deck sleep - Long press opens steam power menu +*Upcoming v0.2 Features* +- Hiding the original xbox controller! +- HTTP based Configuration + - Right now, functionality can be tweaked through config files + - Not ideal for a portable device + - An HTTP daemon and a plugin system will allow safe, polkit based + access to hardware configuration. + - Profiles will allow swapping configuration per game. + *Planned Features (in that order)*: +- Evdev device emulation + - No weird glyphs + - But partial gyro and back button support - Steam Deck controller emulation - No weird glyphs - TDP Plugin (Legion Go) - Will provide parity with Legion Space, hardware is already reverse engineered -- d-Bus based Configuration - - Right now, functionality can be tweaked through config files - - Not ideal for a portable device - - A d-Bus daemon and a plugin system will allow safe, polkit based - access to hardware configuration. - High-end Over/Downclocking Utility for Ryzen processors - By hooking into the manufacturer ACPI API of the Ryzen platform, it will expose all TDP related parameters manufacturers have access to @@ -45,6 +52,57 @@ depending on the game. (provided you stay within limits). - May require DSDT patch on boot, TBD. +## Frequently Asked Questions (FAQ) +### What does the current version of HHD do? +The current version of HHD maps the x-input mode of the legion go controllers to +a Dualsense 5 Edge controller, which allows using all of the controller functions. +In addition, it adds support for the steam powerbutton action, so you get a wink +when going to sleep mode. +When the controllers are not in x-input mode, HHD adds a shortcuts device so +that combos such as Steam and QAM keep working. + +### I'm seeing three X-BOX controllers, regardless of whether HHD is running +Currently, there is a bug with the Nobara kernels that adds 2 extra random +Steam Controllers, that appear in the system as x-box controllers. +this is unrelated to HHD. + +### Steam reports a Legion Controller and a Shortcuts controller instead of a DS5 +The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, +and FPS). +HHD only remaps the x-input mode of the controllers. +You can cycle through the modes with Legion L + RB. + +X-input and d-input refer to the protocol the controllers operate in. +X-input is a USB controller protocol introduced with the xbox 360 controller and +is widely supported. +Direct input is a competing protocol that works based on USB HID. +Both work the same. +However, d-input has discrete triggers for some reason. + +X-input requires a special udev rule to work, see below. + +### I can not see any controllers before or after installing HHD +You are in a distro that does not officially support Legion Go. +One of the fixes that is included in those distros is a udev rule that binds +the xpad driver to the controllers. +This is expected to be included in a future linux kernel so it is not included +by default by HHD. + +Under `/etc/udev/rules.d/95-hhd.rules` add the following: +```bash +# Enable XPAD for the legion go controllers +ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" +``` + +### I can see the original controller and that is causing issues in X +Hiding the original controller is a complex process, so it was skipped for the +v0.1.* versions of HHD. +However, it is implemented properly in v0.2 which will be released soon. +Some emulators select the original controller as controller 1. + +### Yuzu does not work with the new controller +See above, use yuzu controller settings to select the dual sense controller +and disable steam input. ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PiPy. From 47bda2c359bb53f365da0c95701331ad5a384d32 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 20:04:54 +0200 Subject: [PATCH 0002/1497] fix typos --- readme.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index 01c17288..8ca9a0fd 100644 --- a/readme.md +++ b/readme.md @@ -63,8 +63,9 @@ that combos such as Steam and QAM keep working. ### I'm seeing three X-BOX controllers, regardless of whether HHD is running Currently, there is a bug with the Nobara kernels that adds 2 extra random -Steam Controllers, that appear in the system as x-box controllers. -this is unrelated to HHD. +Steam Controllers. +These controllers appear in the system as X-BOX/Xpad controllers. +This is unrelated to HHD. ### Steam reports a Legion Controller and a Shortcuts controller instead of a DS5 The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, @@ -73,11 +74,15 @@ HHD only remaps the x-input mode of the controllers. You can cycle through the modes with Legion L + RB. X-input and d-input refer to the protocol the controllers operate in. +Both are legacy protocols introduced in the mid-2000s and are included for hardware +support reasons. + X-input is a USB controller protocol introduced with the xbox 360 controller and is widely supported. Direct input is a competing protocol that works based on USB HID. Both work the same. -However, d-input has discrete triggers for some reason. +The only difference between them is that d-input has discrete triggers for some +reason, and some games read the button order wrong. X-input requires a special udev rule to work, see below. @@ -98,11 +103,14 @@ ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RU Hiding the original controller is a complex process, so it was skipped for the v0.1.* versions of HHD. However, it is implemented properly in v0.2 which will be released soon. -Some emulators select the original controller as controller 1. - -### Yuzu does not work with the new controller -See above, use yuzu controller settings to select the dual sense controller -and disable steam input. +Some emulators select the original controller as controller 1, which might +cause issues. +If this is the case, wait for version 2. + +### Yuzu does not work with the DS5 controller +See above. +Use yuzu controller settings to select the dual sense controller and disable +steam input. ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PiPy. From 83b1087373f6eda8581cac797d44714eba1a9ccd Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 20:07:00 +0200 Subject: [PATCH 0003/1497] merge both faq sections --- readme.md | 137 +++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 68 deletions(-) diff --git a/readme.md b/readme.md index 8ca9a0fd..a009537f 100644 --- a/readme.md +++ b/readme.md @@ -52,66 +52,6 @@ depending on the game. (provided you stay within limits). - May require DSDT patch on boot, TBD. -## Frequently Asked Questions (FAQ) -### What does the current version of HHD do? -The current version of HHD maps the x-input mode of the legion go controllers to -a Dualsense 5 Edge controller, which allows using all of the controller functions. -In addition, it adds support for the steam powerbutton action, so you get a wink -when going to sleep mode. -When the controllers are not in x-input mode, HHD adds a shortcuts device so -that combos such as Steam and QAM keep working. - -### I'm seeing three X-BOX controllers, regardless of whether HHD is running -Currently, there is a bug with the Nobara kernels that adds 2 extra random -Steam Controllers. -These controllers appear in the system as X-BOX/Xpad controllers. -This is unrelated to HHD. - -### Steam reports a Legion Controller and a Shortcuts controller instead of a DS5 -The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, -and FPS). -HHD only remaps the x-input mode of the controllers. -You can cycle through the modes with Legion L + RB. - -X-input and d-input refer to the protocol the controllers operate in. -Both are legacy protocols introduced in the mid-2000s and are included for hardware -support reasons. - -X-input is a USB controller protocol introduced with the xbox 360 controller and -is widely supported. -Direct input is a competing protocol that works based on USB HID. -Both work the same. -The only difference between them is that d-input has discrete triggers for some -reason, and some games read the button order wrong. - -X-input requires a special udev rule to work, see below. - -### I can not see any controllers before or after installing HHD -You are in a distro that does not officially support Legion Go. -One of the fixes that is included in those distros is a udev rule that binds -the xpad driver to the controllers. -This is expected to be included in a future linux kernel so it is not included -by default by HHD. - -Under `/etc/udev/rules.d/95-hhd.rules` add the following: -```bash -# Enable XPAD for the legion go controllers -ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" -``` - -### I can see the original controller and that is causing issues in X -Hiding the original controller is a complex process, so it was skipped for the -v0.1.* versions of HHD. -However, it is implemented properly in v0.2 which will be released soon. -Some emulators select the original controller as controller 1, which might -cause issues. -If this is the case, wait for version 2. - -### Yuzu does not work with the DS5 controller -See above. -Use yuzu controller settings to select the dual sense controller and disable -steam input. - ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PiPy. @@ -266,7 +206,73 @@ sudo systemctl restart hhd@$(whoami) sudo systemctl restart hhd_local@$(whoami) ``` -## Quirks +## Frequently Asked Questions (FAQ) +### What does the current version of HHD do? +The current version of HHD maps the x-input mode of the legion go controllers to +a Dualsense 5 Edge controller, which allows using all of the controller functions. +In addition, it adds support for the steam powerbutton action, so you get a wink +when going to sleep mode. +When the controllers are not in x-input mode, HHD adds a shortcuts device so +that combos such as Steam and QAM keep working. + +### I'm seeing three X-BOX controllers, regardless of whether HHD is running +Currently, there is a bug with the Nobara kernels that adds 2 extra random +Steam Controllers. +These controllers appear in the system as X-BOX/Xpad controllers. +This is unrelated to HHD. + +### Steam reports a Legion Controller and a Shortcuts controller instead of a DS5 +The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, +and FPS). +HHD only remaps the x-input mode of the controllers. +You can cycle through the modes with Legion L + RB. + +X-input and d-input refer to the protocol the controllers operate in. +Both are legacy protocols introduced in the mid-2000s and are included for hardware +support reasons. + +X-input is a USB controller protocol introduced with the xbox 360 controller and +is widely supported. +Direct input is a competing protocol that works based on USB HID. +Both work the same. +The only difference between them is that d-input has discrete triggers for some +reason, and some games read the button order wrong. + +X-input requires a special udev rule to work, see below. + +### Other gamepad modes +HHD remaps the xinput mode of the Legion Go controllers into a DS5 controller. +All other modes function as normal. +In addition, HHD adds a shortcuts device that allows remapping the back buttons +and all Legion L, R + button combinations into shortcuts that will work accross +all modes. + +### I can not see any controllers before or after installing HHD +You are in a distro that does not officially support Legion Go. +One of the fixes that is included in those distros is a udev rule that binds +the xpad driver to the controllers. +This is expected to be included in a future linux kernel so it is not included +by default by HHD. + +Under `/etc/udev/rules.d/95-hhd.rules` add the following: +```bash +# Enable XPAD for the legion go controllers +ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" +``` + +### I can see the original controller and that is causing issues in X +Hiding the original controller is a complex process, so it was skipped for the +v0.1.* versions of HHD. +However, it is implemented properly in v0.2 which will be released soon. +Some emulators select the original controller as controller 1, which might +cause issues. +If this is the case, wait for version 2. + +### Yuzu does not work with the DS5 controller +See above. +Use yuzu controller settings to select the dual sense controller and disable +steam input. + ### Playstation Driver There is a small touchpad issue with the playstation driver loaded. Where a cursor might appear when using the touchpad in steam input. @@ -282,13 +288,6 @@ a correct gamepad profile and will not work either. sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/modprobe.d/hhd.conf -o /etc/udev/modprobe.d/hhd.conf ``` -### Other gamepad modes -HHD remaps the xinput mode of the Legion Go controllers into a DS5 controller. -All other modes function as normal. -In addition, HHD adds a shortcuts device that allows remapping the back buttons -and all Legion L, R + button combinations into shortcuts that will work accross -all modes. - ### Freezing Gyro The gyro used for the DS5 controller is found in the display. It may freeze occasionally. This is due to the accelerometer driver being @@ -310,6 +309,8 @@ gyro support. HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not required. In addition, it will break HHD by hiding the controller. You should uninstall it with `sudo pacman -R handygccs-git`. + +You will see the following in the HHD logs if handygccs is enabled. ``` ERROR Device with the following not found: evdev.py:122 Vendor ID: ['17ef'] From 2869a114f75ac5fc4fd466f1aac9b392902bb63b Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 20:13:49 +0200 Subject: [PATCH 0004/1497] add section for screen autorotation --- readme.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/readme.md b/readme.md index a009537f..0a1f9d62 100644 --- a/readme.md +++ b/readme.md @@ -305,6 +305,14 @@ By default, the accelerometer is disabled for this reason. You need to set both `gyro` and `gyro-fix` to `False` in the config to disable gyro support. +### No screen autorotation after install +HHD includes a udev rule that disables screen autorotation, because it interferes +with gyro support. +This is only done specifically to the accelerometer of the legion go. +If you do not need gyro, you can do the local install and modify +`83-hhd.rules` to remove that rule. +The gyro will freeze and will be unusable after that. + ### HandyGCCS HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not required. In addition, it will break HHD by hiding the controller. From 8a85380eb8ef47d310d247cc97f3427460bc8d07 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 20:21:01 +0200 Subject: [PATCH 0005/1497] add touchpad right click --- readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/readme.md b/readme.md index 0a1f9d62..8c64d8ea 100644 --- a/readme.md +++ b/readme.md @@ -313,6 +313,12 @@ If you do not need gyro, you can do the local install and modify `83-hhd.rules` to remove that rule. The gyro will freeze and will be unusable after that. +### Touchpad right click does not work in desktop +HHD remaps the touchpad of the legion go to the DS5 touchpad. +The playstation driver does not support right clicking. +Switch to d-input to enable the touchpad when you're in the desktop. +Next HHD version includes an option for disabling touchpad emulation. + ### HandyGCCS HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not required. In addition, it will break HHD by hiding the controller. From dbdea35ff51d9eee397d30b9ab6ddd8a23dd3d5a Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 21:13:31 +0200 Subject: [PATCH 0006/1497] add setup tools to dependency --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 4a22bee0..77370932 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ dependencies = [ "evdev>=1.6.1", "PyYAML>=6.0.1", "rich>=13.5.2", + "setuptools>=65.5.1", ] [project.urls] From a491899fa62b926152618299f541d5884282e79e Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 21:19:38 +0200 Subject: [PATCH 0007/1497] update readme with common errors --- readme.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8c64d8ea..a6280c9e 100644 --- a/readme.md +++ b/readme.md @@ -260,6 +260,15 @@ Under `/etc/udev/rules.d/95-hhd.rules` add the following: ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" ``` +You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) +if you are missing the xpad rule. +``` + ERROR Device with the following not found: evdev.py:122 + Vendor ID: ['17ef'] + Product ID: ['6182'] + Name: ['Generic X-Box pad'] +``` + ### I can see the original controller and that is causing issues in X Hiding the original controller is a complex process, so it was skipped for the v0.1.* versions of HHD. @@ -324,7 +333,8 @@ HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not required. In addition, it will break HHD by hiding the controller. You should uninstall it with `sudo pacman -R handygccs-git`. -You will see the following in the HHD logs if handygccs is enabled. +You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) +if handygccs is enabled. ``` ERROR Device with the following not found: evdev.py:122 Vendor ID: ['17ef'] From 3813e11406f5f1f3d601bc7e4cf5f760629634c5 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 21:23:47 +0200 Subject: [PATCH 0008/1497] add setup tools to install instructions --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a6280c9e..f0fa605f 100644 --- a/readme.md +++ b/readme.md @@ -104,7 +104,7 @@ cd ~/.local/share/hhd python -m venv venv source venv/bin/activate -pip install hhd +pip install hhd setuptools # Install udev rules and create a service file sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules From 50e7cd8cd96d5c73c4c8bfbb48970e77fa90d451 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 21:34:46 +0200 Subject: [PATCH 0009/1497] add github workflow to pypi --- .github/workflows/python-publish.yml | 40 ++++++++++++++++++++++++++++ src/hhd/settings.yml | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/python-publish.yml diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 00000000..cb0b45d9 --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,40 @@ +# This workflow will upload a Python Package using Twine when a release is created +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Upload to PYPI + +on: + workflow_dispatch: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + environment: prod + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build -s + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 5360851a..a8344c63 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -1,7 +1,7 @@ http: type: container tags: [hhd-http] - title: REST API Configuration + title: REST API Configuration (BETA) hint: >- Settings for configuring the http endpoint of HHD. From 2b799491325ca0acb11a374f7c3c08ce565d2ef5 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 26 Dec 2023 22:04:56 +0200 Subject: [PATCH 0010/1497] add publish to aur --- .github/workflows/python-publish.yml | 45 ++++++++++++++++++---------- PKGBUILD | 30 +++++++++++++++++++ 2 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 PKGBUILD diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index cb0b45d9..7657b14f 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -22,19 +22,32 @@ jobs: environment: prod steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v3 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build - - name: Build package - run: python -m build -s - - name: Publish package - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build -s + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + + - name: Build PKGBUILD + run: sed "s/pkgver=VERSION/pkgver=$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" PKGBUILD > PKGBUILD_UPD + - name: Publish AUR package + uses: KSXGitHub/github-actions-deploy-aur@v2.7.0 + with: + pkgname: hhd + pkgbuild: ./PKGBUILD_UPD + commit_username: ${{ secrets.AUR_USERNAME }} + commit_email: ${{ secrets.AUR_EMAIL }} + ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} + commit_message: Update AUR package + ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 00000000..d8289c17 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Antheas Kapenekakis +pkgname=hhd +pkgver=VERSION +pkgrel=1 +pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' +arch=('x86_64') +url='https://github.com/antheas/hhd' +license=('MIT') +depends=('python' python-setuptools 'python-evdev' 'python-rich' 'python-yaml') +provides=('hhd') +# optdepends=('hhd-user: allows running as a user service') +makedepends=('python-'{'build','installer','setuptools','wheel'}) +source=("https://pypi.python.org/packages/source/h/hhd/hhd-${pkgver}.tar.gz") +sha512sums=('SKIP') + +build() { + cd "hhd-$pkgver" + python -m build --wheel --no-isolation +} + +package() { + cd "hhd-$pkgver" + python -m installer --destdir="$pkgdir" dist/*.whl + + # Install minimally necessary rules for running as a system service + mkdir -p ${pkgdir}/usr/lib/udev/rules.d/ + install -m644 usr/lib/udev/rules.d/83-hhd.rules ${pkgdir}/usr/lib/udev/rules.d/83-hhd.rules + mkdir -p ${pkgdir}/usr/lib/systemd/system/ + install -m644 usr/lib/systemd/system/hhd@.service ${pkgdir}/usr/lib/systemd/system/hhd@.service +} \ No newline at end of file From c3af68d0d794b2a6043eaa4d92d201785dd95e32 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:13:47 +0200 Subject: [PATCH 0011/1497] fix f_notify for multiple directories --- src/hhd/__main__.py | 22 +++++++++++++++------- src/hhd/plugins/settings.py | 9 +++++++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 58f2267b..7235be29 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -161,7 +161,7 @@ def main(): # Monitor config files for changes should_initialize = TEvent() - should_initialize.set() + initial_run = True should_exit = TEvent() signal.signal(signal.SIGPOLL, notifier(should_initialize, cond)) signal.signal(signal.SIGINT, notifier(should_exit, cond)) @@ -173,7 +173,11 @@ def main(): # # Initialize if files changed - if should_initialize.is_set(): + if should_initialize.is_set() or initial_run: + # wait a bit to allow other processes to save files + if not initial_run: + sleep(POLL_DELAY) + initial_run = False set_log_plugin("main") logger.info(f"Reloading configuration.") @@ -197,6 +201,8 @@ def main(): # Profiles profiles = {} templates = {} + os.makedirs(profile_dir, exist_ok=True) + fix_perms(profile_dir, ctx) for fn in os.listdir(profile_dir): if not fn.endswith(".yml"): continue @@ -221,6 +227,7 @@ def main(): # Monitor files for changes for fd in cfg_fds: try: + fcntl.fcntl(fd, fcntl.F_NOTIFY, 0) os.close(fd) except Exception: pass @@ -234,10 +241,13 @@ def main(): fcntl.fcntl( fd, fcntl.F_NOTIFY, - fcntl.DN_CREATE | fcntl.DN_DELETE | fcntl.DN_MODIFY, + fcntl.DN_CREATE + | fcntl.DN_DELETE + | fcntl.DN_MODIFY + | fcntl.DN_RENAME + | fcntl.DN_MULTISHOT, ) cfg_fds.append(fd) - should_initialize.clear() # Initialize http server http_cfg = conf["hhd.http"] @@ -263,9 +273,6 @@ def main(): with open(token_fn, "w") as f: os.chmod(token_fn, 0o600) f.write(token) - - sleep(MODIFY_DELAY) - should_initialize.clear() else: token = None @@ -276,6 +283,7 @@ def main(): update_log_plugins() set_log_plugin("main") + should_initialize.clear() logger.info(f"Initialization Complete!") # diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index d73efbea..497f3522 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -467,25 +467,30 @@ def dump_settings( def save_state_yaml(fn: str, set: HHDSettings, conf: Config): import yaml - if conf.get("version", None) == get_settings_hash(set) and not conf.updated: + shash = get_settings_hash(set) + if conf.get("version", None) == shash and not conf.updated: return False + conf["version"] = shash with open(fn, "w") as f: f.write(dump_comment(set, STATE_HEADER)) yaml.safe_dump( dump_settings(set, conf, "default"), f, width=85, sort_keys=False ) + return True def save_profile_yaml(fn: str, set: HHDSettings, conf: Config | None = None): import yaml + shash = get_settings_hash(set) if conf is None: conf = Config({}) - elif conf.get("version", None) == get_settings_hash(set) and not conf.updated: + elif conf.get("version", None) == shash and not conf.updated: return False + conf["version"] = shash with open(fn, "w") as f: f.write(dump_comment(set, PROFILE_HEADER)) yaml.safe_dump(dump_settings(set, conf, "unset"), f, width=85, sort_keys=False) From 387fe4687e72243fa5cd53f8529a6f42960f144d Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:21:57 +0200 Subject: [PATCH 0012/1497] update services to handle failures --- usr/lib/systemd/system/hhd@.service | 2 ++ usr/lib/systemd/system/hhd_local@.service | 2 ++ 2 files changed, 4 insertions(+) diff --git a/usr/lib/systemd/system/hhd@.service b/usr/lib/systemd/system/hhd@.service index 9f9b1686..9ad6e3bb 100644 --- a/usr/lib/systemd/system/hhd@.service +++ b/usr/lib/systemd/system/hhd@.service @@ -4,6 +4,8 @@ Description=Handheld Daemon Service [Service] ExecStart=/usr/bin/hhd --user %i Nice=-12 +Restart=on-failure +RestartSec=10 [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/usr/lib/systemd/system/hhd_local@.service b/usr/lib/systemd/system/hhd_local@.service index 32cf4bdd..b90d41c9 100644 --- a/usr/lib/systemd/system/hhd_local@.service +++ b/usr/lib/systemd/system/hhd_local@.service @@ -4,6 +4,8 @@ Description=Handheld Daemon Service [Service] ExecStart=/home/%i/.local/share/hhd/venv/bin/hhd --user %i Nice=-12 +Restart=on-failure +RestartSec=10 [Install] WantedBy=multi-user.target \ No newline at end of file From 6522687e4d59a50a90849133130192c8f24ef406 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:22:13 +0200 Subject: [PATCH 0013/1497] separate aur and python --- .github/workflows/aur-publish.yml | 29 ++++++++++++++++++++++++++++ .github/workflows/python-publish.yml | 13 ------------- 2 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/aur-publish.yml diff --git a/.github/workflows/aur-publish.yml b/.github/workflows/aur-publish.yml new file mode 100644 index 00000000..30ddaaf6 --- /dev/null +++ b/.github/workflows/aur-publish.yml @@ -0,0 +1,29 @@ +name: Upload to AUR + +on: + workflow_dispatch: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + environment: prod + + steps: + - uses: actions/checkout@v3 + - name: Build PKGBUILD + run: sed "s/pkgver=VERSION/pkgver=$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" PKGBUILD > PKGBUILD_UPD + - name: Publish AUR package + uses: KSXGitHub/github-actions-deploy-aur@v2.7.0 + with: + pkgname: hhd + pkgbuild: ./PKGBUILD_UPD + commit_username: ${{ secrets.AUR_USERNAME }} + commit_email: ${{ secrets.AUR_EMAIL }} + ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} + commit_message: Update AUR package + ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 7657b14f..15d71c82 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -38,16 +38,3 @@ jobs: with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} - - - name: Build PKGBUILD - run: sed "s/pkgver=VERSION/pkgver=$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" PKGBUILD > PKGBUILD_UPD - - name: Publish AUR package - uses: KSXGitHub/github-actions-deploy-aur@v2.7.0 - with: - pkgname: hhd - pkgbuild: ./PKGBUILD_UPD - commit_username: ${{ secrets.AUR_USERNAME }} - commit_email: ${{ secrets.AUR_EMAIL }} - ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: Update AUR package - ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 From 197ba628e00cb356b06252a9c37cc81a882b06e0 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:22:25 +0200 Subject: [PATCH 0014/1497] prepare readme for v0.2 --- readme.md | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/readme.md b/readme.md index f0fa605f..67f4ec44 100644 --- a/readme.md +++ b/readme.md @@ -104,7 +104,7 @@ cd ~/.local/share/hhd python -m venv venv source venv/bin/activate -pip install hhd setuptools +pip install hhd # Install udev rules and create a service file sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules @@ -192,20 +192,24 @@ user dir, which is the following: ~/.config/hhd ``` -Configuration for plugins will appear in the plugins directory. -Only the legion controller plugin has configuration options for now. +The global configuration for hhd is found in: ```bash -~/.config/hhd/plugins +~/.config/hhd/state.yml ``` +This will allow you to set sticky hhd configuration options, such as emulation +mode. +Once set, hhd will hot-reload the configurations. -Restart `hhd` to reload the configurations afterwards. +HHD allows you to create profiles, that set multiple configurations together, +through the profile directory: ```bash -# Arch -sudo systemctl restart hhd@$(whoami) -# Local install -sudo systemctl restart hhd_local@$(whoami) +~/.config/hhd/profiles ``` +Right now, these profiles can only be set with the experimental HTTP API, +which will be called through a GUI. +This API is disabled by default in the current version of HHD. + ## Frequently Asked Questions (FAQ) ### What does the current version of HHD do? The current version of HHD maps the x-input mode of the legion go controllers to @@ -342,6 +346,19 @@ if handygccs is enabled. Name: ['Generic X-Box pad'] ``` +### Buttons are mapped incorrectly +Buttons mapped in legion space will carry over to linux. +This includes both back buttons and legion swap. +You can reset each controller by holding Legion R + RT + RB, Legion L + LT + LB. +However, we do not know how to reset the legion space legion button swap at +this point, so you need to use Legion Space for that. + +Another set of obscure issues occur depending on how apps hook to the DS5 controller. +If the playstation driver is not active, the linux kernel creates an evdev node +with incorrect mappings (right trigger becomes a stick, etc). +If the app hooks directly into the hidraw of the controller, it works properly. +If it uses the evdev device its incorrect. + ## Contributing You should install from source if you aim to contribute or want to pull from master. ```bash @@ -373,6 +390,4 @@ sudo hhd --user $(whoami) ``` ## License -An open source license will be chosen in the following days. -It will probably be the Apache license, so if that affects your use case reach -out for feedback. \ No newline at end of file +This codebase is MIT licensed and will always have a copy-left license. \ No newline at end of file From cb6d8518d4492f6dd02e3af564c4e84f1b178be8 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:43:25 +0200 Subject: [PATCH 0015/1497] update aur script --- .github/workflows/aur-publish.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/aur-publish.yml b/.github/workflows/aur-publish.yml index 30ddaaf6..b7fe6526 100644 --- a/.github/workflows/aur-publish.yml +++ b/.github/workflows/aur-publish.yml @@ -15,15 +15,18 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Create PKGBUILD dir + run: mkdir -p ./pkg/ - name: Build PKGBUILD - run: sed "s/pkgver=VERSION/pkgver=$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" PKGBUILD > PKGBUILD_UPD + run: sed "s/pkgver=VERSION/pkgver=$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" PKGBUILD > ./pkg/PKGBUILD - name: Publish AUR package uses: KSXGitHub/github-actions-deploy-aur@v2.7.0 with: pkgname: hhd - pkgbuild: ./PKGBUILD_UPD + pkgbuild: ./pkg/PKGBUILD commit_username: ${{ secrets.AUR_USERNAME }} commit_email: ${{ secrets.AUR_EMAIL }} ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: Update AUR package + commit_message: Update to '${{ github.event.release.name }}'' + allow_empty_commits: false ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 From 5ed924c423b9c7c0d2a8cf07704141fab0c8c8b5 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:43:38 +0200 Subject: [PATCH 0016/1497] fix typo --- .github/workflows/aur-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/aur-publish.yml b/.github/workflows/aur-publish.yml index b7fe6526..04f24c29 100644 --- a/.github/workflows/aur-publish.yml +++ b/.github/workflows/aur-publish.yml @@ -27,6 +27,6 @@ jobs: commit_username: ${{ secrets.AUR_USERNAME }} commit_email: ${{ secrets.AUR_EMAIL }} ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: Update to '${{ github.event.release.name }}'' + commit_message: Update to '${{ github.event.release.name }}' allow_empty_commits: false ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 From 92ca308a18d4bdb4a39be8acf7e7efb8a303031c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:56:50 +0200 Subject: [PATCH 0017/1497] fix http server ignoring disable option --- src/hhd/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 7235be29..678fc675 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -255,7 +255,7 @@ def main(): prev_http_cfg = http_cfg if https: https.close() - if http_cfg["enable"]: + if http_cfg["enable"].to(bool): from .http import HHDHTTPServer port = http_cfg["port"].to(int) From 8f0a7dd29b54686c891a0b9d5a0c78a4dfbe69e7 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 02:57:10 +0200 Subject: [PATCH 0018/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 77370932..0714ff6a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.0" +version = "0.2.1" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From b2ec0da00199edc3a0dea3b26f8789914a96a932 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 03:14:54 +0200 Subject: [PATCH 0019/1497] update readme --- readme.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index 67f4ec44..52ebb52a 100644 --- a/readme.md +++ b/readme.md @@ -24,15 +24,11 @@ depending on the game. - Power Button plugin - Short press makes steam deck sleep - Long press opens steam power menu - -*Upcoming v0.2 Features* - Hiding the original xbox controller! - HTTP based Configuration - - Right now, functionality can be tweaked through config files - - Not ideal for a portable device - - An HTTP daemon and a plugin system will allow safe, polkit based - access to hardware configuration. - - Profiles will allow swapping configuration per game. + - Allows configuring HHD over Electron/React apps. + - Token based authentication and limited to localhost. + - With will allow swapping configuration per game. *Planned Features (in that order)*: - Evdev device emulation @@ -330,7 +326,7 @@ The gyro will freeze and will be unusable after that. HHD remaps the touchpad of the legion go to the DS5 touchpad. The playstation driver does not support right clicking. Switch to d-input to enable the touchpad when you're in the desktop. -Next HHD version includes an option for disabling touchpad emulation. +You can also disable touchpad emulation in the config. ### HandyGCCS HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not From fed40de47782a13804fd2d80efe1e445ea21500a Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 03:21:01 +0200 Subject: [PATCH 0020/1497] update readme --- .github/workflows/aur-publish.yml | 2 +- readme.md | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/aur-publish.yml b/.github/workflows/aur-publish.yml index 04f24c29..0436f04f 100644 --- a/.github/workflows/aur-publish.yml +++ b/.github/workflows/aur-publish.yml @@ -27,6 +27,6 @@ jobs: commit_username: ${{ secrets.AUR_USERNAME }} commit_email: ${{ secrets.AUR_EMAIL }} ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: Update to '${{ github.event.release.name }}' + commit_message: update to '${{ github.event.release.name }}' allow_empty_commits: false ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 diff --git a/readme.md b/readme.md index 52ebb52a..431854df 100644 --- a/readme.md +++ b/readme.md @@ -3,11 +3,9 @@ Handheld Daemon is a project that aims to provide utilities for managing handhel devices. With features ranging from TDP controls, to controller remappings, and gamescope session management. -This is done through a plugin system, and a dbus daemon, which will expose the -settings of the plugins in a UI agnostic way. +This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will +expose the settings of the plugins in a UI agnostic way. -For the time being, the daemon is not d-bus based, and relies on static configuration -stored on `~/.config/hhd`. The current version contains a fully functional Dual Sense 5 Edge emulator for the Legion Go (including touchpad, gyro, and LED support). It is the aim of this project to provide generic hid-based emulators for most @@ -46,7 +44,6 @@ depending on the game. - No memory-relaxed requirement - Safer, as it is the method used by manufacturers (provided you stay within limits). - - May require DSDT patch on boot, TBD. ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PiPy. From de5023ef4dbf4496defcd885d5495a7550fc132c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 13:17:42 +0200 Subject: [PATCH 0021/1497] combine publish actions into one --- .../{aur-publish.yml => package-publish.yml} | 27 ++++++++++++- .github/workflows/python-publish.yml | 40 ------------------- 2 files changed, 25 insertions(+), 42 deletions(-) rename .github/workflows/{aur-publish.yml => package-publish.yml} (58%) delete mode 100644 .github/workflows/python-publish.yml diff --git a/.github/workflows/aur-publish.yml b/.github/workflows/package-publish.yml similarity index 58% rename from .github/workflows/aur-publish.yml rename to .github/workflows/package-publish.yml index 0436f04f..93cb7b38 100644 --- a/.github/workflows/aur-publish.yml +++ b/.github/workflows/package-publish.yml @@ -1,4 +1,4 @@ -name: Upload to AUR +name: Upload to PYPI, AUR on: workflow_dispatch: @@ -9,10 +9,33 @@ permissions: contents: read jobs: - deploy: + deploy_pypi: runs-on: ubuntu-latest environment: prod + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build -s + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + + deploy_aur: + runs-on: ubuntu-latest + environment: prod + needs: deploy_pypi + steps: - uses: actions/checkout@v3 - name: Create PKGBUILD dir diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml deleted file mode 100644 index 15d71c82..00000000 --- a/.github/workflows/python-publish.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This workflow will upload a Python Package using Twine when a release is created -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries - -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -name: Upload to PYPI - -on: - workflow_dispatch: - release: - types: [published] - -permissions: - contents: read - -jobs: - deploy: - runs-on: ubuntu-latest - environment: prod - - steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build - - name: Build package - run: python -m build -s - - name: Publish package - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} From dfb7c1f99d3d16a61ac04955b5570a0e8f5a6fd8 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 13:18:34 +0200 Subject: [PATCH 0022/1497] make necessary changes to http api --- pyproject.toml | 2 +- src/hhd/__main__.py | 22 +++++++++++++--------- src/hhd/http/__init__.py | 4 ++++ src/hhd/{http.py => http/api.py} | 15 ++++++++++----- 4 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 src/hhd/http/__init__.py rename src/hhd/{http.py => http/api.py} (95%) diff --git a/pyproject.toml b/pyproject.toml index 0714ff6a..9af6e160 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.1" +version = "0.2.2" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 678fc675..e65bd6ab 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -264,15 +264,19 @@ def main(): # Generate security token if use_token: - import hashlib - import random - - token = hashlib.sha256( - str(random.random()).encode() - ).hexdigest() - with open(token_fn, "w") as f: - os.chmod(token_fn, 0o600) - f.write(token) + if not os.path.isfile(token_fn): + import hashlib + import random + + token = hashlib.sha256( + str(random.random()).encode() + ).hexdigest()[:12] + with open(token_fn, "w") as f: + os.chmod(token_fn, 0o600) + f.write(token) + else: + with open(token_fn, "r") as f: + token = f.read().strip() else: token = None diff --git a/src/hhd/http/__init__.py b/src/hhd/http/__init__.py new file mode 100644 index 00000000..e5ea4809 --- /dev/null +++ b/src/hhd/http/__init__.py @@ -0,0 +1,4 @@ +from .api import HHDHTTPServer + + +__all__ = ["HHDHTTPServer"] diff --git a/src/hhd/http.py b/src/hhd/http/api.py similarity index 95% rename from src/hhd/http.py rename to src/hhd/http/api.py index 455be20f..581caa81 100644 --- a/src/hhd/http.py +++ b/src/hhd/http/api.py @@ -5,7 +5,7 @@ from typing import Any, Mapping from urllib.parse import parse_qs, urlparse -from .plugins import Config, Emitter, HHDSettings +from hhd.plugins import Config, Emitter, HHDSettings logger = logging.getLogger(__name__) @@ -149,15 +149,20 @@ def v1_endpoint(self, content: Any | None): if not segments: return self.send_not_found(f"Empty path.") - if segments[0] != "v1": + if segments[0] != "api": return self.send_not_found( - f"Only v1 endpoint is supported by this version of hhd (requested '{segments[0]}')." + f"Only the API endpoint ('/api/v1') is supported for now." ) - if len(segments) == 1: + if len(segments) < 2 or segments[1] != "v1": + return self.send_not_found( + f"Only v1 endpoint is supported by this version of hhd ('/api/v1')." + ) + + if len(segments) == 2: return self.send_not_found(f"No command provided") - command = segments[1].lower() + command = segments[2].lower() match command: case "profile": self.handle_profile(segments[2:], params, content) From 34191fa88f18c1e5fa273846344bdbe274d33a6f Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 13:30:55 +0200 Subject: [PATCH 0023/1497] add token command --- src/hhd/__main__.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index e65bd6ab..939704d1 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -77,6 +77,23 @@ def _inner(sig, frame): return _inner +def print_token(ctx): + token_fn = expanduser(join(CONFIG_DIR, "token"), ctx) + + try: + with open(token_fn, "r") as f: + token = f.read().strip() + + logger.info(f'Current HHD token (for user "{ctx.name}") is: "{token}"') + except Exception as e: + logger.error(f"Token not found or could not be read, error:\n{e}") + logger.info( + "Enable the http endpoint to generate a token automatically.\n" + + "Or place it under '~/.config/hhd/token' manually.\n" + + "'chown 600 ~/.config/hhd/token' for security reasons!" + ) + + def main(): parser = argparse.ArgumentParser( prog="HHD: Handheld Daemon main interface.", @@ -89,6 +106,12 @@ def main(): help="The user whose home directory will be used to store the files (~/.config/hhd).", dest="user", ) + parser.add_argument( + "command", + nargs='*', + default=[], + help="The command to run. If empty, run as daemon. Right now, only the command token is supported.", + ) args = parser.parse_args() user = args.user @@ -110,6 +133,13 @@ def main(): set_log_plugin("main") setup_logger(join(CONFIG_DIR, "log"), ctx=ctx) + if args.command: + if args.command[0] == "token": + print_token(ctx) + return + else: + logger.error(f"Command '{args.command[0]}' is unknown. Ignoring...") + for autodetect in pkg_resources.iter_entry_points("hhd.plugins"): detectors[autodetect.name] = autodetect.resolve() From 6cc582aba55b9a20fc516d2b912b55a2f9f00301 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 15:03:00 +0200 Subject: [PATCH 0024/1497] add state docs, tweak api --- docs/http.md | 205 +++++++++++++++++++++++++++++++ src/hhd/device/legion_go/base.py | 2 +- src/hhd/http/api.py | 10 +- src/hhd/plugins/settings.py | 22 ++-- src/hhd/settings.yml | 2 +- 5 files changed, 226 insertions(+), 15 deletions(-) create mode 100644 docs/http.md diff --git a/docs/http.md b/docs/http.md new file mode 100644 index 00000000..5f849676 --- /dev/null +++ b/docs/http.md @@ -0,0 +1,205 @@ +# HTTP API Docs (v1) +HHD now has a simple and fully featured HTTP endpoint, which allows configuring +all available settings. +All endpoints below should be prefixed with `/api/v1/`. + +## Authentication +By default, the endpoint is restricted to localhost, and is only available through +the use of a token. +This token is automatically generated in `~/.config/hhd/token` and can be changed +afterwards by the user as well. + +The authentication is achieved through HTTP basic auth with a bearer token. +This means that all requests to `/api/v1` require the header `Authorization` +with content `Bearer `. + +To retrieve the user, you can either ask the user for it (they can retrieve it +with `hhd token`), or read it from `~/.config/hhd/token` with either superuser +or that user's permissions. + +## Settings endpoint (`./api/v1/settings`) +The API is on purpose very simple. +The settings endpoint `settings` returns the currently available settings as a +JSON. +All the available settings types can be found in `src/hhd/plugins.py`. +HHD ensures the json will have all the listed values in plugins.py, so you +may not check if they exist. + +Each setting has a title which is meant to be shown in the UI and an optional +hint meant to be shown under a hover hint or `?` button. + +Each setting may include tags, which work like classes. +For example, a keyboard mapping setting may have the tags +`[razer_lycosa_123, razer_kbd, keyboard, advanced]`, which would allow the UI +to customize the presentation based on the specific device make, manufacturer, +or if neither are supported, show a generic keyboard remapper. +Tags are ordered by specificity, so `razer_lycosa_123` overrides `razer_kbd`. +The tag `advanced` can be used as a hint to hide the setting in simplified UIs (TBD). + +Essentially, under the type `Settings` are all the available settings, which +are self explanatory. +- `event`: Meant to simulate a one off event, like a reset. Set to true and hhd will remove it once it's applied (unused). +- `bool`: Checkbox setting +- `multiple`: Radial/dropdown setting. Options is a dictionary of values to UI friendly titles. +- `discrete`: Allows a number of fixed integer or floating values + (options is listed in increasing order). You may handle the same as multiple. +- `float`: Floating point setting, with optional min, max values +- `int`: Integer setting, same as above +- `color`: Broken and unused right now + +Each setting can be set to a single value coherent for its type (except color, tbd). + +Settings are grouped within containers with a type `container`, which has +an ordered dictionary of children. +The key of the dictionary is the id that will be used for the option. +Containers can be nested within containers, and the id of each container is +appended to the option name. + +HHD features settings sections, which are the outermost layer. +This allows you to only focus at the settings necessary for each UI component +(TDP, controllers, hhd settings). + +Here is an example that you will receive in json form from `/settings` (in yaml): +```yaml +version: +hhd: + http: + type: container + tags: [hhd-http] + title: REST API Configuration (BETA) + hint: >- + Settings for configuring the http endpoint of HHD. + + children: + enable: + type: bool + title: Enable REST API. + hint: >- + Enables the rest API of Handheld Daemon + default: False + port: + type: int + title: REST API Port + hint: >- + Which port should the REST API be on? + min: 1024 + max: 49151 + default: 5335 +``` + +The example above will result in the following default state: +```yaml +hhd: + http: + enable: False + port: 5335 +``` + +Settings can be viewed both as nested dictionaries and as a single dictionary. +The following states are identical according to HHD. +```yaml +hhd.http: + enable: False + port: 5335 +``` +```yaml +hhd.http.enable: False +hhd.http.port: 5335 +``` +```yaml +hhd: + http: + enable: False +hhd.http.port: 5335 +``` + +You also receive a version hex, which contains whether the settings have changed +and would prompt you to redraw your UI. +Currently, HHD settings do not change after service start, but future plugins +that rely on autodetection may start when e.g., a controller is connected. +This will make the settings change. + +HHD always performs validation for the currently loaded settings, so using a stale +state will not create problems. + +The final setting type is `mode`, which is a special type of container. +It is meant to be displayed as an accordion, with a specific sub-container +shown at a time. + +```yaml +controllers.legion_go: + type: container + tags: [lgc] + title: Legion Controllers Configuration + # ... + + children: + xinput: + type: mode + # ... + + default: ds5e + modes: + disabled: + type: container + # ... + + children: + shortcuts: + # ... + ds5e: + type: container + # ... + + children: + led_support: + # ... +``` + +The above will create the following default state: +```yaml +controllers.legion_go.xinput.mode: ds5e +controllers.legion_go.xinput.disabled.shortcuts: disabled +controllers.legion_go.xinput.disabled.led_support: True +``` + +## State endpoint (`./api/v1/state`) +The state endpoint with `GET` returns the current app state in JSON form. +Currently, only the nested dictionary form is returned, e.g.: +```yaml +hhd: + http: + enable: False + port: 5335 +``` +However, a future option will allow returning a single dictionary: +```yaml +hhd.http.enable: False +hhd.http.port: 5335 +``` + +You can also `POST` to the same endpoint with a mixed state presentation, which +may include some options inlined and some as nested dictionaries. +You only need to send changed options and HHD will merge them to the current +state internally. + +The `POST` endpoint will lock, apply the settings under `HHD`, and will return +the updated state. + +> Warning: the post endpoint may lock for up to 5+ seconds. +> Use a separate fetch thread/promise! +> Typically it will be much less than 1s + +## Profile endpoint +TBD + +## Handling Errors +The `v1` API will always return a `JSON` object with status code 200 if called properly. + +When called improperly, it will return the following status codes: + - 401: Unauthorized: your token is invalid. + - 404: The endpoint you tried to access does not exist. + - 400: You supplied invalid parameters. + +The content of the response will be a human readable explanation in text form. +You may choose to display that to the user, through a modal or portal. \ No newline at end of file diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index bf9025b2..a5dc3df1 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -192,7 +192,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): btn_map=LGO_RAW_INTERFACE_BTN_MAP, config_map=LGO_RAW_INTERFACE_CONFIG_MAP, callback=rgb_callback - if conf["xinput.ds5e.led_support"] + if conf["xinput.ds5e.led_support"].to(bool) else None, required=True, ) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 581caa81..87e743fd 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -83,12 +83,12 @@ def set_response_ok(self): self.set_response(200, STANDARD_HEADERS) def send_not_found(self, error: str): - self.set_response(400, ERROR_HEADERS) + self.set_response(404, ERROR_HEADERS) self.wfile.write(b"Handheld Daemon Error (404, invalid endpoint):\n") self.wfile.write(error.encode()) def send_error(self, error: str): - self.set_response(404, ERROR_HEADERS) + self.set_response(400, ERROR_HEADERS) self.wfile.write(b"Handheld Daemon Error:\n") self.wfile.write(error.encode()) @@ -174,9 +174,15 @@ def v1_endpoint(self, content: Any | None): self.set_response_ok() with self.cond: if content: + if not isinstance(content, Mapping): + return self.send_error( + f"State content should be a dictionary." + ) self.emit({"type": "state", "config": Config(content)}) self.cond.wait() self.wfile.write(json.dumps(self.conf.conf).encode()) + case "version": + self.send_json({"version": 1}) case other: self.send_not_found(f"Command '{other}' not supported.") diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 497f3522..f442ba17 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -25,7 +25,7 @@ class ButtonSetting(TypedDict): type: Literal["event"] family: Sequence[str] title: str - hint: str + hint: str | None default: bool | None @@ -36,7 +36,7 @@ class BooleanSetting(TypedDict): type: Literal["bool"] family: Sequence[str] title: str - hint: str + hint: str | None default: bool | None @@ -47,7 +47,7 @@ class MultipleSetting(TypedDict): type: Literal["multiple"] family: Sequence[str] title: str - hint: str + hint: str | None options: Mapping[str, str] default: str | None @@ -59,7 +59,7 @@ class DiscreteSetting(TypedDict): type: Literal["discrete"] family: Sequence[str] title: str - hint: str + hint: str | None options: Sequence[int | float] default: int | float | None @@ -71,7 +71,7 @@ class NumericalSetting(TypedDict): type: Literal["float"] family: Sequence[str] title: str - hint: str + hint: str | None min: float | None max: float | None @@ -81,10 +81,10 @@ class NumericalSetting(TypedDict): class IntegerSetting(TypedDict): """Floating numerical option.""" - type: Literal["integer"] + type: Literal["int"] family: Sequence[str] title: str - hint: str + hint: str | None min: int | None max: int | None @@ -97,7 +97,7 @@ class ColorSetting(TypedDict): type: Literal["color"] family: Sequence[str] title: str - hint: str + hint: str | None default: Mapping | None @@ -123,7 +123,7 @@ class Container(TypedDict): type: Literal["container"] family: Sequence[str] title: str - hint: str + hint: str | None children: MutableMapping[str, "Setting | Container | Mode"] @@ -134,7 +134,7 @@ class Mode(TypedDict): type: Literal["mode"] family: Sequence[str] title: str - hint: str + hint: str | None modes: MutableMapping[str, Container] default: str | None @@ -223,7 +223,7 @@ def fill_in_defaults(s: Setting | Container | Mode): s = copy(s) s["family"] = s.get("family", []) s["title"] = s.get("title", "") - s["hint"] = s.get("hint", "") + s["hint"] = s.get("hint", None) if s["type"] != "container": s["default"] = s.get("default", None) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index a8344c63..17dec412 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -13,7 +13,7 @@ http: Enables the rest API of Handheld Daemon default: False port: - type: integer + type: int title: REST API Port hint: >- Which port should the REST API be on? From aa60de2816b6c21fb0c010ef7cb48a975841f953 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 15:33:43 +0200 Subject: [PATCH 0025/1497] update profile api and readme --- docs/http.md | 121 +++++++++++++++++++++++++++++++++++++- src/hhd/__main__.py | 31 +++++++--- src/hhd/http/api.py | 21 ++++++- src/hhd/plugins/plugin.py | 2 +- 4 files changed, 164 insertions(+), 11 deletions(-) diff --git a/docs/http.md b/docs/http.md index 5f849676..c6f3e664 100644 --- a/docs/http.md +++ b/docs/http.md @@ -163,6 +163,19 @@ controllers.legion_go.xinput.disabled.shortcuts: disabled controllers.legion_go.xinput.disabled.led_support: True ``` +Example call (token disabled): +```bash +curl -i http://localhost:5335/api/v1/settings +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +{"controllers": {"legion_go": ... +``` + ## State endpoint (`./api/v1/state`) The state endpoint with `GET` returns the current app state in JSON form. Currently, only the nested dictionary form is returned, e.g.: @@ -190,8 +203,114 @@ the updated state. > Use a separate fetch thread/promise! > Typically it will be much less than 1s +Example call (token disabled): +```bash +curl -i http://localhost:5335/api/v1/state +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +{"controllers": {"legion_go": {"xinput": {"mode": "ds5e", "disabled": {"shortcuts": true}, "ds5e": {"led_support": true}}, "gyro": true, "accel": true, "gyro_fix": 100, "swap_legion": "disabled", "share_to_qam": true, "touchpad_mode": "crop_end", "debug": false, "shortcuts": true}}, "hhd": {"http": {"enable": true, "port": 5335, "localhost": true, "token": false}}, "version": "af6eb199"}% +``` + ## Profile endpoint -TBD +HHD contains a profile system for changing multiple settings at a time. +This can be done per game, when switching windows, etc. + +The `profile` endpoint has 4 sub-endpoints: `list`, `apply`, `get`, `set`, `del`. + +### `profile/list` Endpoint +The `list` `GET` endpoint returns a list of the available profiles. + +```bash +curl -i http://localhost:5335/api/v1/profile/list +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +["test"]% +``` + +### `profile/apply` Endpoint +The `apply` `GET` endpoint applies the selected profiles in the specified order +and returns the new HHD state. +The applied profiles are supplied as query arguments. +You may apply multiple profiles at a time, by nesting them as query parameters. +```bash +curl -i http://localhost:5335/api/v1/profile/apply\?profile\=\&profile\=test2 +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +{"controllers": {"legion_go": {"xinput": {"mode": "ds5e", "disabled": {"shortcuts": true}, "ds5e": {"led_support": true}}, "gyro": true, "accel": true, "gyro_fix": 100, "swap_legion": "disabled", "share_to_qam": true, "touchpad_mode": "crop_end", "debug": false, "shortcuts": true}}, "hhd": {"http": {"enable": true, "port": 5335, "localhost": true, "token": false}}, "version": "af6eb199"}% +``` + +### `profile/set` Endpoint +The set endpoint allows you to update the contents of a profile. +The response contains the updated profile. +The `set` endpoint replaces the whole profile and validates it, unlike the state +endpoint which merges it to the current state. +```bash +curl -i -X POST -d '{"controllers.legion_go.shortcuts": false}' http://localhost:5335/api/v1/profile/set\?profile\=test +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +{"controllers": {"legion_go": {"shortcuts": false}}, "version": "af6eb199"}% +``` + +### `profile/get` Endpoint +The `get` `GET` endpoint allows you to retrieve the contents of a profile. +```bash +curl -i http://localhost:5335/api/v1/profile/get\?profile\=test +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +{"controllers": {"legion_go": {"shortcuts": false}}, "version": "af6eb199"}% +``` + +### `profile/del` Endpoint +The `del` `GET` endpoint deletes the provided profile. + +```bash +# Profile exists +curl -i http://localhost:5335/api/v1/profile/del\?profile\=test +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +# Profile does not exist +curl -i http://localhost:5335/api/v1/profile/del\?profile\=test +HTTP/1.0 400 Bad Request +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer +Content-type: text / plain + +Handheld Daemon Error: +Profile 'test' not found.% +``` ## Handling Errors The `v1` API will always return a `JSON` object with status code 200 if called properly. diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 939704d1..f8c66554 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -108,7 +108,7 @@ def main(): ) parser.add_argument( "command", - nargs='*', + nargs="*", default=[], help="The command to run. If empty, run as daemon. Right now, only the command token is supported.", ) @@ -331,14 +331,17 @@ def main(): case "settings": settings_changed = True case "profile": - if ev["name"] in profiles: - profiles[ev["name"]].update(ev["config"].conf) - else: + new_conf = ev["config"] + if new_conf: with lock: profiles[ev["name"]] = ev["config"] - validate_config( - profiles[ev["name"]], settings, use_defaults=False - ) + validate_config( + profiles[ev["name"]], settings, use_defaults=False + ) + else: + with lock: + if ev["name"] in profiles: + del profiles[ev["name"]] case "apply": if ev["name"] in profiles: conf.update(profiles[ev["name"]].conf) @@ -388,6 +391,20 @@ def main(): if save_profile_yaml(fn, settings, prof): fix_perms(fn, ctx) saved = True + for prof in os.listdir(profile_dir): + if prof.startswith("_") or not prof.endswith(".yml"): + continue + name = prof[:-4] + if name not in profiles: + fn = join(profile_dir, prof) + try: + new_fn = fn + ".bak" + os.rename(fn, new_fn) + saved = True + except Exception as e: + logger.error( + f"Failed removing profile {name} at:\n{fn}\nWith error:\n{e}" + ) # Add template config if save_profile_yaml( diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 87e743fd..4370e970 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -114,7 +114,7 @@ def handle_profile( case "set": if "profile" not in params: return self.send_error(f"Profile not specified") - if not content: + if not content or not isinstance(content, Mapping): return self.send_error(f"Data for the profile not sent.") profile = params["profile"][0] @@ -129,6 +129,21 @@ def handle_profile( self.send_json(self.profiles[profile].conf) else: self.send_error(f"Applied profile not found (race condition?).") + case "del": + if "profile" not in params: + return self.send_error(f"Profile not specified") + + profile = params["profile"][0] + if profile not in self.profiles: + return self.send_error(f"Profile '{profile}' not found.") + self.emit({"type": "profile", "name": profile, "config": None}) + # Wait for the profile to be processed + self.cond.wait() + + if profile in self.profiles: + self.send_error(f"Applied profile not found (race condition?).") + else: + self.set_response_ok() case "apply": if "profile" not in params: return self.send_error(f"Profile not specified") @@ -143,6 +158,8 @@ def handle_profile( self.cond.wait() # Return the profile self.send_json(self.conf.conf) + case other: + self.send_not_found(f"Command 'profile/{other}' not supported.") def v1_endpoint(self, content: Any | None): segments, params = parse_path(self.path) @@ -165,7 +182,7 @@ def v1_endpoint(self, content: Any | None): command = segments[2].lower() match command: case "profile": - self.handle_profile(segments[2:], params, content) + self.handle_profile(segments[3:], params, content) case "settings": self.set_response_ok() with self.cond: diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 7196a961..38be950b 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -30,7 +30,7 @@ class SettingsEvent(TypedDict): class ProfileEvent(TypedDict): type: Literal["profile"] name: str - config: Config + config: Config | None class ApplyEvent(TypedDict): From 86358c27e51e0912ea83f66d395a7aa0ced2614c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 15:36:58 +0200 Subject: [PATCH 0026/1497] add docs for version --- docs/http.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/http.md b/docs/http.md index c6f3e664..e20e17e3 100644 --- a/docs/http.md +++ b/docs/http.md @@ -321,4 +321,21 @@ When called improperly, it will return the following status codes: - 400: You supplied invalid parameters. The content of the response will be a human readable explanation in text form. -You may choose to display that to the user, through a modal or portal. \ No newline at end of file +You may choose to display that to the user, through a modal or portal. + +## Version endpoint +You can query the version of the HHD V1 Api to determine which features are available +and whether the user should update either your app or HHD. +The version is 1 now and this endpoint requires authentication. +It might not require authentication in the future. +```bash +curl -i http://localhost:5335/api/v1/version +HTTP/1.0 200 OK +Server: BaseHTTP/0.6 Python/3.11.6 +Date: ... +Access-Control-Allow-Origin: * +Access-Control-Allow-Credentials: true +WWW-Authenticate: Bearer + +{"version": 1}% +``` \ No newline at end of file From 15507edffa1c5cb85bc7f546c115730890968c3e Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 15:42:18 +0200 Subject: [PATCH 0027/1497] typos --- docs/http.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/http.md b/docs/http.md index e20e17e3..5c8adeb0 100644 --- a/docs/http.md +++ b/docs/http.md @@ -160,7 +160,7 @@ The above will create the following default state: ```yaml controllers.legion_go.xinput.mode: ds5e controllers.legion_go.xinput.disabled.shortcuts: disabled -controllers.legion_go.xinput.disabled.led_support: True +controllers.legion_go.xinput.ds5e.led_support: True ``` Example call (token disabled): @@ -201,7 +201,7 @@ the updated state. > Warning: the post endpoint may lock for up to 5+ seconds. > Use a separate fetch thread/promise! -> Typically it will be much less than 1s +> Typically, it will be much less than 1 second. Example call (token disabled): ```bash @@ -324,7 +324,7 @@ The content of the response will be a human readable explanation in text form. You may choose to display that to the user, through a modal or portal. ## Version endpoint -You can query the version of the HHD V1 Api to determine which features are available +You can query the version of the HHD V1 API to determine which features are available and whether the user should update either your app or HHD. The version is 1 now and this endpoint requires authentication. It might not require authentication in the future. From c72a31d66351313efe309aee4df641528c7c1c41 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 16:08:48 +0200 Subject: [PATCH 0028/1497] sanitize name to avoid shady disk writes --- docs/http.md | 3 +++ src/hhd/http/api.py | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/http.md b/docs/http.md index 5c8adeb0..5fadad66 100644 --- a/docs/http.md +++ b/docs/http.md @@ -222,6 +222,9 @@ This can be done per game, when switching windows, etc. The `profile` endpoint has 4 sub-endpoints: `list`, `apply`, `get`, `set`, `del`. +Only characters and spaces are supported for the profile name. +HHD will silently strip other characters from the name. + ### `profile/list` Endpoint The `list` `GET` endpoint returns a list of the available profiles. diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 4370e970..8b572dbb 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -3,12 +3,20 @@ from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Condition, Thread from typing import Any, Mapping + from urllib.parse import parse_qs, urlparse from hhd.plugins import Config, Emitter, HHDSettings logger = logging.getLogger(__name__) + +def sanitize_name(n: str): + import re + + return re.sub(r"[^ a-zA-Z0-9]+", "", n) + + STANDARD_HEADERS = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true", @@ -107,7 +115,7 @@ def handle_profile( case "get": if "profile" not in params: return self.send_error(f"Profile not specified") - profile = params["profile"][0] + profile = sanitize_name(params["profile"][0]) if profile not in self.profiles: return self.send_error(f"Profile '{profile}' not found.") self.send_json(self.profiles[profile].conf) @@ -117,7 +125,7 @@ def handle_profile( if not content or not isinstance(content, Mapping): return self.send_error(f"Data for the profile not sent.") - profile = params["profile"][0] + profile = sanitize_name(params["profile"][0]) self.emit( {"type": "profile", "name": profile, "config": Config(content)} ) @@ -133,7 +141,7 @@ def handle_profile( if "profile" not in params: return self.send_error(f"Profile not specified") - profile = params["profile"][0] + profile = sanitize_name(params["profile"][0]) if profile not in self.profiles: return self.send_error(f"Profile '{profile}' not found.") self.emit({"type": "profile", "name": profile, "config": None}) @@ -148,7 +156,7 @@ def handle_profile( if "profile" not in params: return self.send_error(f"Profile not specified") - profiles = params["profile"] + profiles = [sanitize_name(p) for p in params["profile"]] for p in profiles: if p not in self.profiles: return self.send_error(f"Profile '{p}' not found.") From 671155f846dc0962a68479893fb39589c7a6810f Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 16:45:00 +0200 Subject: [PATCH 0029/1497] fix token perms --- src/hhd/__main__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index f8c66554..3e1eeb7e 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -304,6 +304,7 @@ def main(): with open(token_fn, "w") as f: os.chmod(token_fn, 0o600) f.write(token) + fix_perms(token_fn, ctx) else: with open(token_fn, "r") as f: token = f.read().strip() From 2807871cc7e62117e9a55b0bebb121494884fdd4 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 16:45:22 +0200 Subject: [PATCH 0030/1497] add capabilites for most devices --- .../virtual/{uinput.py => uinput/__init__.py} | 59 +-- src/hhd/controller/virtual/uinput/const.py | 378 ++++++++++++++++++ 2 files changed, 382 insertions(+), 55 deletions(-) rename src/hhd/controller/virtual/{uinput.py => uinput/__init__.py} (58%) create mode 100644 src/hhd/controller/virtual/uinput/const.py diff --git a/src/hhd/controller/virtual/uinput.py b/src/hhd/controller/virtual/uinput/__init__.py similarity index 58% rename from src/hhd/controller/virtual/uinput.py rename to src/hhd/controller/virtual/uinput/__init__.py index f662bdab..e347fb6e 100644 --- a/src/hhd/controller/virtual/uinput.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -2,72 +2,21 @@ from typing import Sequence, cast import evdev -from evdev import UInput +from evdev import UInput, AbsInfo from hhd.controller import Axis, Button, Consumer, Producer from hhd.controller.base import Event, can_read - -def B(b: str): - return cast(int, getattr(evdev.ecodes, b)) - +from .const import GAMEPAD_BTN_CAPABILITIES, GAMEPAD_BUTTON_MAP, B, MOTION_CAPABILITIES logger = logging.getLogger(__name__) -GAMEPAD_BTN_CAPABILITIES = { - B("EV_KEY"): [ - B("BTN_TL"), - B("BTN_TR"), - B("BTN_SELECT"), - B("BTN_START"), - B("BTN_MODE"), - B("BTN_THUMBL"), - B("BTN_THUMBR"), - B("BTN_A"), - B("BTN_B"), - B("BTN_X"), - B("BTN_Y"), - B("BTN_MODE"), - B("BTN_TRIGGER_HAPPY1"), - B("BTN_TRIGGER_HAPPY2"), - B("BTN_TRIGGER_HAPPY3"), - B("BTN_TRIGGER_HAPPY4"), - B("BTN_TRIGGER_HAPPY5"), - B("BTN_TRIGGER_HAPPY6"), - ] -} -STANDARD_BUTTON_MAP: dict[Button, int] = { - # Gamepad - "a": B("BTN_A"), - "b": B("BTN_B"), - "x": B("BTN_X"), - "y": B("BTN_Y"), - # Sticks - "ls": B("BTN_THUMBL"), - "rs": B("BTN_THUMBR"), - # Bumpers - "lb": B("BTN_TL"), - "rb": B("BTN_TR"), - # Select - "start": B("BTN_START"), - "select": B("BTN_SELECT"), - # Misc - "mode": B("BTN_MODE"), - # Back buttons - "extra_l1": B("BTN_TRIGGER_HAPPY1"), - "extra_l2": B("BTN_TRIGGER_HAPPY2"), - "extra_l3": B("BTN_TRIGGER_HAPPY5"), - "extra_r1": B("BTN_TRIGGER_HAPPY3"), - "extra_r2": B("BTN_TRIGGER_HAPPY4"), - "extra_r3": B("BTN_TRIGGER_HAPPY6"), -} - class UInputDevice(Consumer, Producer): def __init__( self, capabilities=GAMEPAD_BTN_CAPABILITIES, - btn_map: dict[Button, int] = STANDARD_BUTTON_MAP, + btn_map: dict[Button, int] = GAMEPAD_BUTTON_MAP, axis_map: dict[Axis, int] = {}, vid: int = 2, pid: int = 2, @@ -105,7 +54,7 @@ def consume(self, events: Sequence[Event]): # if ev["code"] in self.axis_map: # self.dev.write(B("EV_ABS"), self.axis_map[ev["code"]], ev['value']) # TODO: figure out normalization - if ev['value']: + if ev["value"]: logger.error(f"Outputing axis not supported yet. Event:\n{ev}") case "button": if ev["code"] in self.btn_map: diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py new file mode 100644 index 00000000..a9ab146c --- /dev/null +++ b/src/hhd/controller/virtual/uinput/const.py @@ -0,0 +1,378 @@ +import logging +from typing import cast, Sequence, NamedTuple + +import evdev +from evdev import AbsInfo + +from hhd.controller import Axis, Button, Consumer, Producer + + +def B(b: str | Sequence[str], num: int | None = None): + if num is not None: + return num + assert b, f"No value provided." + if isinstance(b, Sequence): + b = b[0] + return cast(int, getattr(evdev.ecodes, b)) + + +class AX(NamedTuple): + id: int + scale: float | None = None + offset: float = 0 + + +logger = logging.getLogger(__name__) + +GAMEPAD_BTN_CAPABILITIES = { + B("EV_KEY"): [ + B("BTN_TL"), + B("BTN_TR"), + B("BTN_SELECT"), + B("BTN_START"), + B("BTN_MODE"), + B("BTN_THUMBL"), + B("BTN_THUMBR"), + B("BTN_A"), + B("BTN_B"), + B("BTN_X"), + B("BTN_Y"), + B("BTN_TRIGGER_HAPPY1"), + B("BTN_TRIGGER_HAPPY2"), + B("BTN_TRIGGER_HAPPY3"), + B("BTN_TRIGGER_HAPPY4"), + B("BTN_TRIGGER_HAPPY5"), + B("BTN_TRIGGER_HAPPY6"), + ] +} + +GAMEPAD_CAPABILITIES = { + B("EV_SYN", 0): [ + B("SYN_REPORT", 0), + B("SYN_CONFIG", 1), + B("SYN_DROPPED", 3), + B("?", 21), + ], + B("EV_KEY", 1): [ + B(["BTN_A", "BTN_GAMEPAD", "BTN_SOUTH"], 304), + B(["BTN_B", "BTN_EAST"], 305), + B(["BTN_NORTH", "BTN_X"], 307), + B(["BTN_WEST", "BTN_Y"], 308), + B("BTN_TL", 310), + B("BTN_TR", 311), + B("BTN_SELECT", 314), + B("BTN_START", 315), + B("BTN_MODE", 316), + B("BTN_THUMBL", 317), + B("BTN_THUMBR", 318), + B("BTN_TRIGGER_HAPPY1"), + B("BTN_TRIGGER_HAPPY2"), + B("BTN_TRIGGER_HAPPY3"), + B("BTN_TRIGGER_HAPPY4"), + B("BTN_TRIGGER_HAPPY5"), + B("BTN_TRIGGER_HAPPY6"), + ], + B("EV_ABS", 3): [ + ( + B("ABS_X", 0), + AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), + ), + ( + B("ABS_Y", 1), + AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), + ), + (("ABS_Z", 2), AbsInfo(value=0, min=0, max=255, fuzz=0, flat=0, resolution=0)), + ( + B("ABS_RX", 3), + AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), + ), + ( + B("ABS_RY", 4), + AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), + ), + (("ABS_RZ", 5), AbsInfo(value=0, min=0, max=255, fuzz=0, flat=0, resolution=0)), + ( + B("ABS_HAT0X", 16), + AbsInfo(value=0, min=-1, max=1, fuzz=0, flat=0, resolution=0), + ), + ( + B("ABS_HAT0Y", 17), + AbsInfo(value=0, min=-1, max=1, fuzz=0, flat=0, resolution=0), + ), + ], + B("EV_FF", 21): [ + B(["FF_EFFECT_MIN", "FF_RUMBLE"], 80), + B("FF_PERIODIC", 81), + B(["FF_SQUARE", "FF_WAVEFORM_MIN"], 88), + B("FF_TRIANGLE", 89), + B("FF_SINE", 90), + B(["FF_GAIN", "FF_MAX_EFFECTS"], 96), + ], +} + +MOTION_CAPABILITIES = { + B("EV_SYN", 0): [B("SYN_REPORT", 0), B("SYN_DROPPED", 3), B("?", 4)], + B("EV_ABS", 3): [ + ( + B("ABS_X", 0), + AbsInfo(value=0, min=-32768, max=32768, fuzz=16, flat=0, resolution=8192), + ), + ( + B("ABS_Y", 1), + AbsInfo(value=0, min=-32768, max=32768, fuzz=16, flat=0, resolution=8192), + ), + ( + B("ABS_Z", 2), + AbsInfo(value=0, min=-32768, max=32768, fuzz=16, flat=0, resolution=8192), + ), + ( + B("ABS_RX", 3), + AbsInfo( + value=0, min=-2097152, max=2097152, fuzz=16, flat=0, resolution=1024 + ), + ), + ( + B("ABS_RY", 4), + AbsInfo( + value=0, min=-2097152, max=2097152, fuzz=16, flat=0, resolution=1024 + ), + ), + ( + B("ABS_RZ", 5), + AbsInfo( + value=0, min=-2097152, max=2097152, fuzz=16, flat=0, resolution=1024 + ), + ), + ], + B("EV_MSC", 4): [B("MSC_TIMESTAMP", 5)], +} + +KEYBOARD_CAPABILITIES = { + B("EV_SYN", 0): [ + B("SYN_REPORT", 0), + B("SYN_CONFIG", 1), + B("?", 4), + B("?", 17), + B("?", 20), + ], + B("EV_KEY", 1): [ + B("KEY_ESC", 1), + B("KEY_1", 2), + B("KEY_2", 3), + B("KEY_3", 4), + B("KEY_4", 5), + B("KEY_5", 6), + B("KEY_6", 7), + B("KEY_7", 8), + B("KEY_8", 9), + B("KEY_9", 10), + B("KEY_0", 11), + B("KEY_MINUS", 12), + B("KEY_EQUAL", 13), + B("KEY_BACKSPACE", 14), + B("KEY_TAB", 15), + B("KEY_Q", 16), + B("KEY_W", 17), + B("KEY_E", 18), + B("KEY_R", 19), + B("KEY_T", 20), + B("KEY_Y", 21), + B("KEY_U", 22), + B("KEY_I", 23), + B("KEY_O", 24), + B("KEY_P", 25), + B("KEY_LEFTBRACE", 26), + B("KEY_RIGHTBRACE", 27), + B("KEY_ENTER", 28), + B("KEY_LEFTCTRL", 29), + B("KEY_A", 30), + B("KEY_S", 31), + B("KEY_D", 32), + B("KEY_F", 33), + B("KEY_G", 34), + B("KEY_H", 35), + B("KEY_J", 36), + B("KEY_K", 37), + B("KEY_L", 38), + B("KEY_SEMICOLON", 39), + B("KEY_APOSTROPHE", 40), + B("KEY_GRAVE", 41), + B("KEY_LEFTSHIFT", 42), + B("KEY_BACKSLASH", 43), + B("KEY_Z", 44), + B("KEY_X", 45), + B("KEY_C", 46), + B("KEY_V", 47), + B("KEY_B", 48), + B("KEY_N", 49), + B("KEY_M", 50), + B("KEY_COMMA", 51), + B("KEY_DOT", 52), + B("KEY_SLASH", 53), + B("KEY_RIGHTSHIFT", 54), + B("KEY_KPASTERISK", 55), + B("KEY_LEFTALT", 56), + B("KEY_SPACE", 57), + B("KEY_CAPSLOCK", 58), + B("KEY_F1", 59), + B("KEY_F2", 60), + B("KEY_F3", 61), + B("KEY_F4", 62), + B("KEY_F5", 63), + B("KEY_F6", 64), + B("KEY_F7", 65), + B("KEY_F8", 66), + B("KEY_F9", 67), + B("KEY_F10", 68), + B("KEY_NUMLOCK", 69), + B("KEY_SCROLLLOCK", 70), + B("KEY_KP7", 71), + B("KEY_KP8", 72), + B("KEY_KP9", 73), + B("KEY_KPMINUS", 74), + B("KEY_KP4", 75), + B("KEY_KP5", 76), + B("KEY_KP6", 77), + B("KEY_KPPLUS", 78), + B("KEY_KP1", 79), + B("KEY_KP2", 80), + B("KEY_KP3", 81), + B("KEY_KP0", 82), + B("KEY_KPDOT", 83), + B("KEY_ZENKAKUHANKAKU", 85), + B("KEY_102ND", 86), + B("KEY_F11", 87), + B("KEY_F12", 88), + B("KEY_RO", 89), + B("KEY_KATAKANA", 90), + B("KEY_HIRAGANA", 91), + B("KEY_HENKAN", 92), + B("KEY_KATAKANAHIRAGANA", 93), + B("KEY_MUHENKAN", 94), + B("KEY_KPJPCOMMA", 95), + B("KEY_KPENTER", 96), + B("KEY_RIGHTCTRL", 97), + B("KEY_KPSLASH", 98), + B("KEY_SYSRQ", 99), + B("KEY_RIGHTALT", 100), + B("KEY_HOME", 102), + B("KEY_UP", 103), + B("KEY_PAGEUP", 104), + B("KEY_LEFT", 105), + B("KEY_RIGHT", 106), + B("KEY_END", 107), + B("KEY_DOWN", 108), + B("KEY_PAGEDOWN", 109), + B("KEY_INSERT", 110), + B("KEY_DELETE", 111), + B(["KEY_MIN_INTERESTING", "KEY_MUTE"], 113), + B("KEY_VOLUMEDOWN", 114), + B("KEY_VOLUMEUP", 115), + B("KEY_POWER", 116), + B("KEY_KPEQUAL", 117), + B("KEY_PAUSE", 119), + B("KEY_KPCOMMA", 121), + B(["KEY_HANGEUL", "KEY_HANGUEL"], 122), + B("KEY_HANJA", 123), + B("KEY_YEN", 124), + B("KEY_LEFTMETA", 125), + B("KEY_RIGHTMETA", 126), + B("KEY_COMPOSE", 127), + B("KEY_STOP", 128), + B("KEY_AGAIN", 129), + B("KEY_PROPS", 130), + B("KEY_UNDO", 131), + B("KEY_FRONT", 132), + B("KEY_COPY", 133), + B("KEY_OPEN", 134), + B("KEY_PASTE", 135), + B("KEY_FIND", 136), + B("KEY_CUT", 137), + B("KEY_HELP", 138), + B("KEY_CALC", 140), + B("KEY_SLEEP", 142), + B("KEY_WWW", 150), + B(["KEY_COFFEE", "KEY_SCREENLOCK"], 152), + B("KEY_BACK", 158), + B("KEY_FORWARD", 159), + B("KEY_EJECTCD", 161), + B("KEY_NEXTSONG", 163), + B("KEY_PLAYPAUSE", 164), + B("KEY_PREVIOUSSONG", 165), + B("KEY_STOPCD", 166), + B("KEY_REFRESH", 173), + B("KEY_EDIT", 176), + B("KEY_SCROLLUP", 177), + B("KEY_SCROLLDOWN", 178), + B("KEY_KPLEFTPAREN", 179), + B("KEY_KPRIGHTPAREN", 180), + B("KEY_F13", 183), + B("KEY_F14", 184), + B("KEY_F15", 185), + B("KEY_F16", 186), + B("KEY_F17", 187), + B("KEY_F18", 188), + B("KEY_F19", 189), + B("KEY_F20", 190), + B("KEY_F21", 191), + B("KEY_F22", 192), + B("KEY_F23", 193), + B("KEY_F24", 194), + B("KEY_UNKNOWN", 240), + ], + B("EV_MSC", 4): [B("MSC_SCAN", 4)], + B("EV_LED", 17): [B("LED_NUML", 0), B("LED_CAPSL", 1), B("LED_SCROLLL", 2)], +} + +MOUSE_CAPABILITIES = { + B("EV_SYN", 0): [ + B("SYN_REPORT", 0), + B("SYN_CONFIG", 1), + B("SYN_MT_REPORT", 2), + B("?", 4), + ], + B("EV_KEY", 1): [ + B(["BTN_LEFT", "BTN_MOUSE"], 272), + B("BTN_RIGHT", 273), + B("BTN_MIDDLE", 274), + B("BTN_SIDE", 275), + B("BTN_EXTRA", 276), + ], + B("EV_REL", 2): [ + B("REL_X", 0), + B("REL_Y", 1), + B("REL_WHEEL", 8), + B("REL_WHEEL_HI_RES", 11), + ], + B("EV_MSC", 4): [B("MSC_SCAN", 4)], +} + +GAMEPAD_BUTTON_MAP: dict[Button, int] = { + # Gamepad + "a": B("BTN_A"), + "b": B("BTN_B"), + "x": B("BTN_X"), + "y": B("BTN_Y"), + # Sticks + "ls": B("BTN_THUMBL"), + "rs": B("BTN_THUMBR"), + # Bumpers + "lb": B("BTN_TL"), + "rb": B("BTN_TR"), + # Select + "start": B("BTN_START"), + "select": B("BTN_SELECT"), + # Misc + "mode": B("BTN_MODE"), + # Back buttons + "extra_l1": B("BTN_TRIGGER_HAPPY1"), + "extra_l2": B("BTN_TRIGGER_HAPPY2"), + "extra_l3": B("BTN_TRIGGER_HAPPY5"), + "extra_r1": B("BTN_TRIGGER_HAPPY3"), + "extra_r2": B("BTN_TRIGGER_HAPPY4"), + "extra_r3": B("BTN_TRIGGER_HAPPY6"), +} + +GAMEPAD_AXIS_MAP: dict[Axis, int] = { + +} From 7d1990bc71b986b01701aec09469440f49ec291e Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 16:46:09 +0200 Subject: [PATCH 0031/1497] fix ev bug --- src/hhd/controller/virtual/uinput/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index a9ab146c..99c91815 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -11,7 +11,7 @@ def B(b: str | Sequence[str], num: int | None = None): if num is not None: return num assert b, f"No value provided." - if isinstance(b, Sequence): + if not isinstance(b, str): b = b[0] return cast(int, getattr(evdev.ecodes, b)) @@ -374,5 +374,5 @@ class AX(NamedTuple): } GAMEPAD_AXIS_MAP: dict[Axis, int] = { - + } From 729811074f17e0acc2f4b406bdbed2be693ef1c7 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 17:51:14 +0200 Subject: [PATCH 0032/1497] add uinput virtual device --- src/hhd/controller/const.py | 4 + src/hhd/controller/virtual/uinput/__init__.py | 29 ++++--- src/hhd/controller/virtual/uinput/const.py | 71 ++++++++++------ src/hhd/device/legion_go/base.py | 81 ++++++++++++------- src/hhd/device/legion_go/controllers.yaml | 21 ++--- src/hhd/plugins/settings.py | 32 +++++--- 6 files changed, 151 insertions(+), 87 deletions(-) diff --git a/src/hhd/controller/const.py b/src/hhd/controller/const.py index 1489e3f7..aaffed52 100644 --- a/src/hhd/controller/const.py +++ b/src/hhd/controller/const.py @@ -38,18 +38,22 @@ "left_accel_x", "left_accel_y", "left_accel_z", + "left_accel_ts", "left_gyro_x", "left_gyro_y", "left_gyro_z", + "left_gyro_ts", "left_touchpad_x", "left_touchpad_y", # Right "right_accel_x", "right_accel_y", "right_accel_z", + "right_accel_ts", "right_gyro_x", "right_gyro_y", "right_gyro_z", + "right_gyro_ts", "right_touchpad_x", "right_touchpad_y", ] diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index e347fb6e..8bdb1a12 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -7,7 +7,7 @@ from hhd.controller import Axis, Button, Consumer, Producer from hhd.controller.base import Event, can_read -from .const import GAMEPAD_BTN_CAPABILITIES, GAMEPAD_BUTTON_MAP, B, MOTION_CAPABILITIES +from .const import * logger = logging.getLogger(__name__) @@ -15,12 +15,13 @@ class UInputDevice(Consumer, Producer): def __init__( self, - capabilities=GAMEPAD_BTN_CAPABILITIES, + capabilities=GAMEPAD_CAPABILITIES, btn_map: dict[Button, int] = GAMEPAD_BUTTON_MAP, - axis_map: dict[Axis, int] = {}, - vid: int = 2, - pid: int = 2, - name: str = "HHD Shortcuts Device", + axis_map: dict[Axis, AX] = GAMEPAD_AXIS_MAP, + vid: int = HHD_VID, + pid: int = HHD_PID_GAMEPAD, + name: str = "Handheld Daemon Controller", + phys: str = "phys-hhd-gamepad", ) -> None: self.capabilities = capabilities self.btn_map = btn_map @@ -29,11 +30,16 @@ def __init__( self.name = name self.vid = vid self.pid = pid + self.phys = phys def open(self) -> Sequence[int]: logger.info(f"Opening virtual device '{self.name}'") self.dev = UInput( - events=self.capabilities, name=self.name, vendor=self.vid, product=self.pid + events=self.capabilities, + name=self.name, + vendor=self.vid, + product=self.pid, + phys=self.phys, ) self.fd = self.dev.fd return [self.fd] @@ -51,11 +57,10 @@ def consume(self, events: Sequence[Event]): for ev in events: match ev["type"]: case "axis": - # if ev["code"] in self.axis_map: - # self.dev.write(B("EV_ABS"), self.axis_map[ev["code"]], ev['value']) - # TODO: figure out normalization - if ev["value"]: - logger.error(f"Outputing axis not supported yet. Event:\n{ev}") + if ev["code"] in self.axis_map: + ax = self.axis_map[ev["code"]] + val = int(ax.scale * ev["value"] + ax.offset) + self.dev.write(B("EV_ABS"), ax.id, val) case "button": if ev["code"] in self.btn_map: self.dev.write( diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index 99c91815..0ff0f25f 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -7,6 +7,15 @@ from hhd.controller import Axis, Button, Consumer, Producer +HHD_VID = 0x5335 +HHD_PID_GAMEPAD = 0x01 +HHD_PID_KEYBOARD = 0x02 +HHD_PID_MOUSE = 0x03 +HHD_PID_TOUCHPAD = 0x04 +HHD_PID_MOTION = 0x11 +HHD_PID_VENDOR = 0x7000 + + def B(b: str | Sequence[str], num: int | None = None): if num is not None: return num @@ -18,7 +27,7 @@ def B(b: str | Sequence[str], num: int | None = None): class AX(NamedTuple): id: int - scale: float | None = None + scale: float = 1 offset: float = 0 @@ -47,12 +56,12 @@ class AX(NamedTuple): } GAMEPAD_CAPABILITIES = { - B("EV_SYN", 0): [ - B("SYN_REPORT", 0), - B("SYN_CONFIG", 1), - B("SYN_DROPPED", 3), - B("?", 21), - ], + # B("EV_SYN", 0): [ + # B("SYN_REPORT", 0), + # B("SYN_CONFIG", 1), + # B("SYN_DROPPED", 3), + # B("?", 21), + # ], B("EV_KEY", 1): [ B(["BTN_A", "BTN_GAMEPAD", "BTN_SOUTH"], 304), B(["BTN_B", "BTN_EAST"], 305), @@ -81,7 +90,7 @@ class AX(NamedTuple): B("ABS_Y", 1), AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), ), - (("ABS_Z", 2), AbsInfo(value=0, min=0, max=255, fuzz=0, flat=0, resolution=0)), + (B("ABS_Z", 2), AbsInfo(value=0, min=0, max=255, fuzz=0, flat=0, resolution=0)), ( B("ABS_RX", 3), AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), @@ -90,7 +99,10 @@ class AX(NamedTuple): B("ABS_RY", 4), AbsInfo(value=0, min=-32768, max=32767, fuzz=16, flat=128, resolution=0), ), - (("ABS_RZ", 5), AbsInfo(value=0, min=0, max=255, fuzz=0, flat=0, resolution=0)), + ( + B("ABS_RZ", 5), + AbsInfo(value=0, min=0, max=255, fuzz=0, flat=0, resolution=0), + ), ( B("ABS_HAT0X", 16), AbsInfo(value=0, min=-1, max=1, fuzz=0, flat=0, resolution=0), @@ -111,7 +123,7 @@ class AX(NamedTuple): } MOTION_CAPABILITIES = { - B("EV_SYN", 0): [B("SYN_REPORT", 0), B("SYN_DROPPED", 3), B("?", 4)], + # B("EV_SYN", 0): [B("SYN_REPORT", 0), B("SYN_DROPPED", 3), B("?", 4)], B("EV_ABS", 3): [ ( B("ABS_X", 0), @@ -148,13 +160,13 @@ class AX(NamedTuple): } KEYBOARD_CAPABILITIES = { - B("EV_SYN", 0): [ - B("SYN_REPORT", 0), - B("SYN_CONFIG", 1), - B("?", 4), - B("?", 17), - B("?", 20), - ], + # B("EV_SYN", 0): [ + # B("SYN_REPORT", 0), + # B("SYN_CONFIG", 1), + # B("?", 4), + # B("?", 17), + # B("?", 20), + # ], B("EV_KEY", 1): [ B("KEY_ESC", 1), B("KEY_1", 2), @@ -325,12 +337,12 @@ class AX(NamedTuple): } MOUSE_CAPABILITIES = { - B("EV_SYN", 0): [ - B("SYN_REPORT", 0), - B("SYN_CONFIG", 1), - B("SYN_MT_REPORT", 2), - B("?", 4), - ], + # B("EV_SYN", 0): [ + # B("SYN_REPORT", 0), + # B("SYN_CONFIG", 1), + # B("SYN_MT_REPORT", 2), + # B("?", 4), + # ], B("EV_KEY", 1): [ B(["BTN_LEFT", "BTN_MOUSE"], 272), B("BTN_RIGHT", 273), @@ -373,6 +385,15 @@ class AX(NamedTuple): "extra_r3": B("BTN_TRIGGER_HAPPY6"), } -GAMEPAD_AXIS_MAP: dict[Axis, int] = { - +GAMEPAD_AXIS_MAP: dict[Axis, AX] = { + "ls_x": AX(B("ABS_X"), 2**15 - 1), + "ls_y": AX(B("ABS_Y"), 2**15 - 1), + "rs_x": AX(B("ABS_RX"), 2**15 - 1), + "rs_y": AX(B("ABS_RY"), 2**15 - 1), + "lt": AX(B("ABS_Z"), 2**8 - 1), + "rt": AX(B("ABS_RZ"), 2**8 - 1), + "hat_x": AX(B("ABS_HAT0X")), + "hat_y": AX(B("ABS_HAT0Y")), } + +MOTION_AXIS_MAP: dict[Axis, AX] = {} diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index a5dc3df1..8bf59db3 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -15,7 +15,12 @@ from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import AccelImu, GyroImu from hhd.controller.virtual.ds5 import DualSense5Edge, TouchpadCorrectionType -from hhd.controller.virtual.uinput import UInputDevice +from hhd.controller.virtual.uinput import ( + UInputDevice, + HHD_PID_VENDOR, + HHD_PID_GAMEPAD, + HHD_PID_MOTION, +) from hhd.plugins import Config, Context, Emitter from .const import ( @@ -30,6 +35,7 @@ from .hid import rgb_callback ERROR_DELAY = 1 +SELECT_TIMEOUT = 1 logger = logging.getLogger(__name__) @@ -73,24 +79,29 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven time.sleep(ERROR_DELAY) continue - match controller_mode: - case "xinput": - logger.info("Launching DS5 controller instance.") - if gyro_fixer: - gyro_fixer.open() - controller_loop_xinput(conf, should_exit) - case _: + if controller_mode == "xinput" and conf["xinput"].to(str) != "disabled": + logger.info("Launching DS5 controller instance.") + if gyro_fixer: + gyro_fixer.open() + controller_loop_xinput(conf, should_exit) + else: + if controller_mode == "xinput": logger.info( - f"Controllers in non-supported (yet) mode: {controller_mode}. Launching a shortcuts device." + f"Controllers in non-supported (yet) mode: {controller_mode}." ) - controller_loop_rest( - controller_mode, pid if pid else 2, conf, should_exit + else: + logger.info( + f"Controllers in xinput mode but emulation is disabled." ) + controller_loop_rest( + controller_mode, pid if pid else 2, conf, should_exit + ) except Exception as e: logger.error(f"Received the following error:\n{e}") logger.error( f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." ) + raise e time.sleep(ERROR_DELAY) finally: if gyro_fixer: @@ -99,6 +110,11 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent): debug = conf.get("debug", False) + shortcuts_enabled = conf["shortcuts"].to(bool) + if shortcuts_enabled: + logger.info(f"Launching a shortcuts device.") + else: + logger.info(f"Shortcuts disabled. Waiting for controllers to change modes.") d_raw = SelectivePassthrough( GenericGamepadHidraw( @@ -118,7 +134,11 @@ def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent) trigger="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), ) - d_uinput = UInputDevice(name=f"HHD Shortcuts Device (Legion Mode: {mode})", pid=pid) + d_uinput = UInputDevice( + name=f"HHD Shortcuts (Legion Mode: {mode})", + pid=HHD_PID_VENDOR | 0x0200 | (pid & 0xF), + phys=f"phys-hhd-shortcuts-legion-{mode}", + ) d_shortcuts = GenericGamepadEvdev( vid=[LEN_VID], @@ -131,17 +151,20 @@ def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent) try: fds = [] fds.extend(d_raw.open()) - fds.extend(d_shortcuts.open()) - fds.extend(d_uinput.open()) + if shortcuts_enabled: + fds.extend(d_shortcuts.open()) + fds.extend(d_uinput.open()) while not should_exit.is_set(): - select.select(fds, [], []) - d_shortcuts.produce(fds) - d_uinput.produce(fds) + select.select(fds, [], [], SELECT_TIMEOUT) evs = multiplexer.process(d_raw.produce(fds)) - if debug and evs: - logger.info(evs) - d_uinput.consume(evs) + + if shortcuts_enabled: + d_shortcuts.produce(fds) + d_uinput.produce(fds) + if debug and evs: + logger.info(evs) + d_uinput.consume(evs) finally: d_shortcuts.close(True) d_raw.close(True) @@ -152,9 +175,13 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): debug = conf.get("debug", False) # Output - d_ds5 = DualSense5Edge( - touchpad_method=conf["touchpad_mode"].to(TouchpadCorrectionType) - ) + match conf["xinput.mode"].to(str): + case "ds5e": + d_out = DualSense5Edge( + touchpad_method=conf["touchpad_mode"].to(TouchpadCorrectionType) + ) + case _: + d_out = UInputDevice(phys="phys-hhd-legion") # from hhd.controller.virtual.sd import SteamdeckOLEDController # d_ds5 = SteamdeckOLEDController() @@ -191,9 +218,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): axis_map=LGO_RAW_INTERFACE_AXIS_MAP, btn_map=LGO_RAW_INTERFACE_BTN_MAP, config_map=LGO_RAW_INTERFACE_CONFIG_MAP, - callback=rgb_callback - if conf["xinput.ds5e.led_support"].to(bool) - else None, + callback=rgb_callback if conf["xinput.ds5e.led_support"].to(bool) else None, required=True, ) ) @@ -253,7 +278,7 @@ def prepare(m): if conf["touchpad_mode"].to(str) != "disabled": prepare(d_touch) prepare(d_raw) - prepare(d_ds5) + prepare(d_out) logger.info("DS5 controller instance launched, have fun!") while not should_exit.is_set(): @@ -276,7 +301,7 @@ def prepare(m): d_xinput.consume(evs) d_raw.consume(evs) - d_ds5.consume(evs) + d_out.consume(evs) # If unbounded, the total number of events per second is the sum of all # events generated by the producers. diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index bb8f34fb..6006382e 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -24,15 +24,6 @@ children: title: Disabled hint: >- Does not modify the default controller. - - children: - shortcuts: - type: bool - title: Enable Shortcuts Device - hint: >- - Enables the shortcuts device which will re-enable QAM, Xbox - button, and their combinations. - default: True # # Dual Sense 5 # @@ -52,6 +43,18 @@ children: Passes through the LEDs to the controller, which allows games to control them. default: True + # + # evdev through uinput + # + uinput: + type: container + tags: [lgc_emulation_uinput, uinput] + title: Events Device + hint: >- + Creates a virtual `Handheld Daemon Controller` that can be used normally + in apps. Back buttons are supported but steam will not detect them. + If Gyroscope or Accelerometer are enabled, a Motion device will be + created as well (experimental). # # Common settings diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index f442ba17..e8547a95 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -229,9 +229,14 @@ def fill_in_defaults(s: Setting | Container | Mode): match s["type"]: case "container": - s["children"] = s.get("children", []) + s["children"] = { + k: fill_in_defaults(v) for k, v in s.get("children", {}).items() + } case "mode": - s["modes"] = s.get("modes", {}) + s["modes"] = { + k: cast(Container, fill_in_defaults(v)) + for k, v in s.get("modes", {}).items() + } case "multiple": s["options"] = s.get("options", {}) case "discrete": @@ -251,7 +256,7 @@ def merge_reduce( match a["type"]: case "container": out = cast(Container, dict(b)) - new_children = dict(a["children"]) + new_children = dict(a.get("children", {})) for k, v in b.items(): if k in out: out[k] = merge_reduce(out[k], b[k]) @@ -261,7 +266,7 @@ def merge_reduce( return fill_in_defaults(out) case "mode": out = cast(Mode, dict(b)) - new_children = dict(a["modes"]) + new_children = dict(a.get("modes", {})) for k, v in b.items(): if k in out: out[k] = merge_reduce(out[k], b[k]) @@ -274,29 +279,30 @@ def merge_reduce( def merge_reduce_sec(a: Section, b: Section): - out = dict(a) + out = {k: cast(Container, fill_in_defaults(v)) for k, v in a.items()} for k, v in b.items(): if k in out: - out[k] = cast(Container, merge_reduce(out[k], b[k])) + out[k] = cast(Container, merge_reduce(out[k], v)) else: - out[k] = v + out[k] = cast(Container, fill_in_defaults(v)) return out def merge_reduce_secs(a: HHDSettings, b: HHDSettings): - out = dict(a) + out = {k: merge_reduce_sec({}, v) for k, v in a.items()} for k, v in b.items(): - if k in out: - out[k] = merge_reduce_sec(out[k], b[k]) - else: - out[k] = v + out[k] = merge_reduce_sec(out.get(k, {}), v) return out def merge_settings(sets: Sequence[HHDSettings]): - return reduce(merge_reduce_secs, sets) + if not sets: + return {} + if len(sets) > 1: + return reduce(merge_reduce_secs, sets) + return merge_reduce_secs({}, sets[0]) def generate_desc(s: Setting | Container | Mode): From 07f26d62e4fb9bbadfb6d3ce205b7985e0b33a9e Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 18:04:34 +0200 Subject: [PATCH 0033/1497] cleanup uinput --- src/hhd/controller/virtual/ds5/__init__.py | 2 ++ src/hhd/controller/virtual/uinput/const.py | 4 ++-- src/hhd/device/legion_go/base.py | 11 ++++------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/hhd/controller/virtual/ds5/__init__.py b/src/hhd/controller/virtual/ds5/__init__.py index c67654e1..ea1db8d9 100644 --- a/src/hhd/controller/virtual/ds5/__init__.py +++ b/src/hhd/controller/virtual/ds5/__init__.py @@ -207,6 +207,8 @@ def open(self) -> Sequence[int]: self.touchpad_touch = False self.start = time.perf_counter_ns() self.fd = self.dev.open() + + logger.info(f"Starting '{DS5_EDGE_NAME.decode()}'.") return [self.fd] def close(self, exit: bool) -> bool: diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index 0ff0f25f..1c31db9c 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -390,8 +390,8 @@ class AX(NamedTuple): "ls_y": AX(B("ABS_Y"), 2**15 - 1), "rs_x": AX(B("ABS_RX"), 2**15 - 1), "rs_y": AX(B("ABS_RY"), 2**15 - 1), - "lt": AX(B("ABS_Z"), 2**8 - 1), - "rt": AX(B("ABS_RZ"), 2**8 - 1), + "rt": AX(B("ABS_Z"), 2**8 - 1), + "lt": AX(B("ABS_RZ"), 2**8 - 1), "hat_x": AX(B("ABS_HAT0X")), "hat_y": AX(B("ABS_HAT0Y")), } diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 8bf59db3..25bb04cc 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -79,13 +79,13 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven time.sleep(ERROR_DELAY) continue - if controller_mode == "xinput" and conf["xinput"].to(str) != "disabled": - logger.info("Launching DS5 controller instance.") + if controller_mode == "xinput" and conf["xinput.mode"].to(str) != "disabled": + logger.info("Launching emulated controller.") if gyro_fixer: gyro_fixer.open() controller_loop_xinput(conf, should_exit) else: - if controller_mode == "xinput": + if controller_mode != "xinput": logger.info( f"Controllers in non-supported (yet) mode: {controller_mode}." ) @@ -101,7 +101,6 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven logger.error( f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." ) - raise e time.sleep(ERROR_DELAY) finally: if gyro_fixer: @@ -182,8 +181,6 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): ) case _: d_out = UInputDevice(phys="phys-hhd-legion") - # from hhd.controller.virtual.sd import SteamdeckOLEDController - # d_ds5 = SteamdeckOLEDController() # Imu d_accel = AccelImu() @@ -280,7 +277,7 @@ def prepare(m): prepare(d_raw) prepare(d_out) - logger.info("DS5 controller instance launched, have fun!") + logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): start = time.perf_counter() # Add timeout to call consumers a minimum amount of times per second From 210904666f46e31ffc87cb0c0d44f233591888b6 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 19:11:55 +0200 Subject: [PATCH 0034/1497] add rumble support --- src/hhd/controller/base.py | 69 +------------------ src/hhd/controller/physical/evdev.py | 7 +- src/hhd/controller/virtual/uinput/__init__.py | 49 +++++++++++++ 3 files changed, 53 insertions(+), 72 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index db1e9423..aebdc21d 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -4,72 +4,6 @@ from .const import Axis, Button, Configuration -class EnvelopeEffect(TypedDict): - type: Literal["constant", "ramp"] - attack_length: int - attack_level: int - fade_length: int - fade_level: int - - -class ConditionSide(TypedDict): - # TODO: replace with enums - right_saturation: int - left_saturation: int - right_coeff: int - left_coeff: int - deadband: int - center: int - - -class RumbleEffect(TypedDict): - type: Literal["rumble"] - strong_magnitude: float - weak_magnitude: float - - -class ConditionEffect(TypedDict): - type: Literal["condition"] - left: ConditionSide - right: ConditionSide - - -class PeriodicEffect(TypedDict): - type: Literal["periodic"] - # Todo: replace with enums - waveform: int - period: int - magnitude: int - offset: int - phase: int - - attack_length: int - attack_level: int - fade_length: int - fade_level: int - - custom: bytes - - -class EffectEvent(TypedDict): - # Always effect, better for filterring - type: Literal["effect"] - # Event target. Not part of the standard but required for e.g., DS5. - code: Literal["main", "left", "right"] - - id: int - # TODO: Upgrade to literal - direction: int - - trigger_button: str - trigger_interval: int - - replay_length: int - replay_delay: int - - effect: EnvelopeEffect | ConditionEffect | PeriodicEffect | RumbleEffect - - class RumbleEvent(TypedDict): """In case ev effects is too complicated. If both magnitudes are 0, disable rumble.""" @@ -127,8 +61,7 @@ class ConfigurationEvent(TypedDict): Event = ( - EffectEvent - | ButtonEvent + ButtonEvent | AxisEvent | ConfigurationEvent | RgbLedEvent diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 23eef5e8..bccc0c16 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -10,12 +10,11 @@ import evdev from evdev import ecodes, ff -from hhd.controller import Axis, Button, Consumer, Event, Producer +from hhd.controller import Axis, Button, Consumer, Event, Producer, can_read from hhd.controller.base import Event from hhd.controller.lib.common import hexify, matches_patterns from hhd.controller.lib.hide import hide_gamepad, unhide_gamepad - -from ..const import AbsAxis, GamepadButton, KeyboardButton +from hhd.controller.const import AbsAxis, GamepadButton, KeyboardButton logger = logging.getLogger(__name__) @@ -244,7 +243,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: } ) - while select.select([self.fd], [], [], 0)[0]: + while can_read(self.fd): for e in self.dev.read(): if e.type == B("EV_KEY"): if e.code in self.btn_map: diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 8bdb1a12..9dfc9f2a 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -31,6 +31,7 @@ def __init__( self.vid = vid self.pid = pid self.phys = phys + self.rumble: Event | None = None def open(self) -> Sequence[int]: logger.info(f"Opening virtual device '{self.name}'") @@ -69,3 +70,51 @@ def consume(self, events: Sequence[Event]): 1 if ev["value"] else 0, ) self.dev.syn() + + def produce(self, fds: Sequence[int]) -> Sequence[Event]: + if not self.fd or not self.fd in fds or not self.dev: + return [] + + out: Sequence[Event] = [] + + while can_read(self.fd): + for ev in self.dev.read(): + if ev.type == B("EV_UINPUT"): + if ev.code == B("UI_FF_UPLOAD"): + # Keep uploaded effect to apply on input + upload = self.dev.begin_upload(ev.value) + if upload.effect.type == B("FF_RUMBLE"): + data = upload.effect.u.ff_rumble_effect + + self.rumble = { + "type": "rumble", + "code": "main", + "weak_magnitude": data.weak_magnitude / 0xFFFF, + "strong_magnitude": data.strong_magnitude / 0xFFFF, + } + self.dev.end_upload(upload) + elif ev.code == B("UI_FF_ERASE"): + # Ignore erase events + erase = self.dev.begin_erase(ev.value) + erase.retval = 0 + ev.end_erase(erase) + elif ev.type == B("EV_FF") and ev.value: + if self.rumble: + out.append(self.rumble) + else: + logger.warn( + f"Rumble requested but a rumble effect has not been uploaded." + ) + elif ev.type == B("EV_FF") and not ev.value: + out.append( + { + "type": "rumble", + "code": "main", + "weak_magnitude": 0, + "strong_magnitude": 0, + } + ) + else: + logger.info(f"Controller ev received unhandled event:\n{ev}") + + return out From 7d1b8f9dee4d4968406eb1b0d51a41df54a5bbc0 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 20:12:44 +0200 Subject: [PATCH 0035/1497] add motion controllers through evdev --- src/hhd/controller/virtual/uinput/__init__.py | 26 ++++++++++++++++++- src/hhd/controller/virtual/uinput/const.py | 10 ++++++- src/hhd/device/legion_go/base.py | 25 ++++++++++++++++-- src/hhd/device/legion_go/controllers.yaml | 3 ++- 4 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 9dfc9f2a..cc05a125 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -22,6 +22,7 @@ def __init__( pid: int = HHD_PID_GAMEPAD, name: str = "Handheld Daemon Controller", phys: str = "phys-hhd-gamepad", + output_timestamps: bool = False, ) -> None: self.capabilities = capabilities self.btn_map = btn_map @@ -31,6 +32,10 @@ def __init__( self.vid = vid self.pid = pid self.phys = phys + self.output_timestamps = output_timestamps + self.ofs = 0 + self.sys_ofs = 0 + self.rumble: Event | None = None def open(self) -> Sequence[int]: @@ -61,7 +66,22 @@ def consume(self, events: Sequence[Event]): if ev["code"] in self.axis_map: ax = self.axis_map[ev["code"]] val = int(ax.scale * ev["value"] + ax.offset) + if ax.bounds: + val = min(max(val, ax.bounds[0]), ax.bounds[1]) self.dev.write(B("EV_ABS"), ax.id, val) + elif self.output_timestamps and ev["code"] in ( + "accel_ts", + "gyro_ts", + ): + # We have timestamps with ns accuracy. + # Evdev expects us accuracy + ts = ev["value"] // 1000 + # Use an ofs to avoid overflowing + if ts > self.ofs + 2**30: + self.ofs = ts + ts -= self.ofs + self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) + pass case "button": if ev["code"] in self.btn_map: self.dev.write( @@ -79,7 +99,11 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: while can_read(self.fd): for ev in self.dev.read(): - if ev.type == B("EV_UINPUT"): + if ev.type == B("EV_MSC") and ev.code == B("MSC_TIMESTAMP"): + # Skip timestamp feedback + # TODO: Figure out why it feedbacks + pass + elif ev.type == B("EV_UINPUT"): if ev.code == B("UI_FF_UPLOAD"): # Keep uploaded effect to apply on input upload = self.dev.begin_upload(ev.value) diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index 1c31db9c..8f850ec2 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -29,6 +29,7 @@ class AX(NamedTuple): id: int scale: float = 1 offset: float = 0 + bounds: tuple[int, int] | None = None logger = logging.getLogger(__name__) @@ -396,4 +397,11 @@ class AX(NamedTuple): "hat_y": AX(B("ABS_HAT0Y")), } -MOTION_AXIS_MAP: dict[Axis, AX] = {} +MOTION_AXIS_MAP: dict[Axis, AX] = { + "accel_x": AX(B("ABS_X"), 8192, bounds=(-32768, 32768)), + "accel_y": AX(B("ABS_Y"), 8192, bounds=(-32768, 32768)), + "accel_z": AX(B("ABS_Z"), 8192, bounds=(-32768, 32768)), + "gyro_x": AX(B("ABS_RX"), 1024, bounds=(-2097152, 2097152)), + "gyro_y": AX(B("ABS_RY"), 1024, bounds=(-2097152, 2097152)), + "gyro_z": AX(B("ABS_RZ"), 1024, bounds=(-2097152, 2097152)), +} diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 25bb04cc..7fa3e089 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -19,6 +19,8 @@ UInputDevice, HHD_PID_VENDOR, HHD_PID_GAMEPAD, + MOTION_AXIS_MAP, + MOTION_CAPABILITIES, HHD_PID_MOTION, ) from hhd.plugins import Config, Context, Emitter @@ -79,7 +81,10 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven time.sleep(ERROR_DELAY) continue - if controller_mode == "xinput" and conf["xinput.mode"].to(str) != "disabled": + if ( + controller_mode == "xinput" + and conf["xinput.mode"].to(str) != "disabled" + ): logger.info("Launching emulated controller.") if gyro_fixer: gyro_fixer.open() @@ -179,9 +184,21 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): d_out = DualSense5Edge( touchpad_method=conf["touchpad_mode"].to(TouchpadCorrectionType) ) + d_out2 = None case _: d_out = UInputDevice(phys="phys-hhd-legion") - + if conf["accel"].to(bool) | conf["gyro"].to(bool): + d_out2 = UInputDevice( + name="Handheld Daemon Controller Motion Sensors", + phys="phys-hhd-legion", + capabilities=MOTION_CAPABILITIES, + pid=HHD_PID_MOTION, + btn_map={}, + axis_map=MOTION_AXIS_MAP, + output_timestamps=True, + ) + else: + d_out2 = None # Imu d_accel = AccelImu() d_gyro = GyroImu() @@ -276,6 +293,8 @@ def prepare(m): prepare(d_touch) prepare(d_raw) prepare(d_out) + if d_out2: + prepare(d_out2) logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): @@ -299,6 +318,8 @@ def prepare(m): d_xinput.consume(evs) d_raw.consume(evs) d_out.consume(evs) + if d_out2: + d_out2.consume(evs) # If unbounded, the total number of events per second is the sum of all # events generated by the producers. diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 6006382e..7de58724 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -69,7 +69,8 @@ children: type: bool title: Accelerometer hint: >- - Enables accelerometer support (not currently supported properly). + Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; + if someone asks it will be fixed). default: False gyro_fix: type: discrete From cf5d1ec25ba6e32c7a4917e80658556710576810 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 20:31:40 +0200 Subject: [PATCH 0036/1497] disable fixer when gyro is not active --- src/hhd/controller/virtual/uinput/__init__.py | 2 +- src/hhd/device/legion_go/base.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index cc05a125..af52e7d0 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -39,7 +39,7 @@ def __init__( self.rumble: Event | None = None def open(self) -> Sequence[int]: - logger.info(f"Opening virtual device '{self.name}'") + logger.info(f"Opening virtual device '{self.name}'.") self.dev = UInput( events=self.capabilities, name=self.name, diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 7fa3e089..5311a74e 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -51,7 +51,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): - if gyro_fix := conf.get("gyro_fix", False): + if (gyro_fix := conf.get("gyro_fix", False)) and conf["gyro"].to(bool): gyro_fixer = GyroFixer(int(gyro_fix) if int(gyro_fix) > 10 else 100) else: gyro_fixer = None From 37b63d5f79678610011bcdf29a6983a543e46edd Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 21:20:24 +0200 Subject: [PATCH 0037/1497] add rule for hhd controllers --- usr/lib/udev/rules.d/83-hhd.rules | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/usr/lib/udev/rules.d/83-hhd.rules b/usr/lib/udev/rules.d/83-hhd.rules index c9722362..d621bc0a 100644 --- a/usr/lib/udev/rules.d/83-hhd.rules +++ b/usr/lib/udev/rules.d/83-hhd.rules @@ -10,4 +10,9 @@ KERNELS=="0020:1022:*", SUBSYSTEM=="iio", TEST=="in_accel_x_raw", TEST=="in_acce # Sony DualSense Edge Wireless-Controller; Bluetooth; USB KERNEL=="hidraw*", KERNELS=="*054C:0DF2*", MODE="0666", TAG+="uaccess" -KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0666", TAG+="uaccess" \ No newline at end of file +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0666", TAG+="uaccess" + +# Handheld Daemon Emulated Controllers +# VID is not reserved at the time of this writing +ATTRS{idVendor}=="5335", MODE="0666", TAG+="uaccess" +ATTRS{id/vendor}=="5335", MODE="0666", TAG+="uaccess" \ No newline at end of file From 4afd218fb2d7a50a25f3e3daff57faba0c0a5a74 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 21:20:36 +0200 Subject: [PATCH 0038/1497] fix permissions issue --- src/hhd/__main__.py | 14 +++++++++++++- src/hhd/logging.py | 4 +++- src/hhd/utils.py | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 3e1eeb7e..e7600594 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -31,7 +31,7 @@ save_state_yaml, validate_config, ) -from .utils import expanduser, fix_perms, get_context +from .utils import expanduser, fix_perms, get_context, switch_priviledge logger = logging.getLogger(__name__) @@ -130,6 +130,18 @@ def main(): prev_http_cfg = None try: + # Create nested hhd dir + # This might mess up permissions in upward directories + # So try to deescalate + hhd_dir = expanduser(CONFIG_DIR, ctx) + try: + switch_priviledge(ctx, False) + os.makedirs(hhd_dir, exist_ok=True) + switch_priviledge(ctx, True) + fix_perms(hhd_dir, ctx) + except Exception: + pass + set_log_plugin("main") setup_logger(join(CONFIG_DIR, "log"), ctx=ctx) diff --git a/src/hhd/logging.py b/src/hhd/logging.py index 816a115e..20bf2388 100644 --- a/src/hhd/logging.py +++ b/src/hhd/logging.py @@ -7,7 +7,7 @@ from rich.logging import RichHandler from threading import local, Lock, get_ident, enumerate -from .utils import Context, expanduser +from .utils import Context, expanduser, fix_perms logger = logging.getLogger(__name__) @@ -202,6 +202,8 @@ def setup_logger( handlers.append(PluginRichHandler(PluginLogRender())) if log_dir: os.makedirs(log_dir, exist_ok=True) + if ctx: + fix_perms(log_dir, ctx) handler = UserRotatingFileHandler( os.path.join(log_dir, "hhd.log"), maxBytes=10_000_000, diff --git a/src/hhd/utils.py b/src/hhd/utils.py index 5cfb6c58..85c4a12f 100644 --- a/src/hhd/utils.py +++ b/src/hhd/utils.py @@ -133,4 +133,4 @@ def expanduser(path: str, user: int | str | Context | None = None): def fix_perms(fn: str, ctx: Context): - os.chown(fn, ctx.euid, ctx.gid) + os.chown(fn, ctx.euid, ctx.egid) From 9b2d8603228d3a094b0faaefd966d0c7f2018caf Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 21:20:38 +0200 Subject: [PATCH 0039/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9af6e160..707747b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.2" +version = "0.2.3" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From e4ac32120529118becee41e45b903469e9c70476 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 27 Dec 2023 21:22:20 +0200 Subject: [PATCH 0040/1497] add fixme comment for next versions --- src/hhd/device/legion_go/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 5311a74e..0e3ac1fe 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -115,6 +115,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent): debug = conf.get("debug", False) shortcuts_enabled = conf["shortcuts"].to(bool) + # FIXME: Sleep when shortcuts are disabled instead of polling raw interface if shortcuts_enabled: logger.info(f"Launching a shortcuts device.") else: From 5eae6d6dc5392490cf831b924fa058d9089427a2 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 01:34:38 +0200 Subject: [PATCH 0041/1497] add static serving to http api --- MANIFEST.in | 4 ++- src/hhd/http/api.py | 56 +++++++++++++++++++++++++++++------ src/hhd/http/index.html | 17 +++++++++++ src/hhd/http/static/index.js | 1 + src/hhd/http/static/style.css | 3 ++ 5 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/hhd/http/index.html create mode 100644 src/hhd/http/static/index.js create mode 100644 src/hhd/http/static/style.css diff --git a/MANIFEST.in b/MANIFEST.in index cccc1f4b..694e2fa1 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,5 @@ recursive-include src/hhd *.yml recursive-include src/hhd *.yaml -graft usr/ \ No newline at end of file +graft usr/ +graft src/hhd/http/static +include src/hhd/http/index.html \ No newline at end of file diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 8b572dbb..0f62405c 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -1,12 +1,12 @@ import json import logging +import os from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Condition, Thread from typing import Any, Mapping - from urllib.parse import parse_qs, urlparse -from hhd.plugins import Config, Emitter, HHDSettings +from hhd.plugins import Config, Emitter, HHDSettings, get_relative_fn logger = logging.getLogger(__name__) @@ -17,15 +17,21 @@ def sanitize_name(n: str): return re.sub(r"[^ a-zA-Z0-9]+", "", n) +def sanitize_fn(n: str): + import re + + return re.sub(r"[^ a-zA-Z0-9\._/]+", "", n) + + STANDARD_HEADERS = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true", "WWW-Authenticate": "Bearer", } -ERROR_HEADERS = {**STANDARD_HEADERS, "Content-type": "text / plain"} +ERROR_HEADERS = {**STANDARD_HEADERS, "Content-type": "text/plain"} AUTH_HEADERS = ERROR_HEADERS -OK_HEADERS = {**STANDARD_HEADERS, "Content-type": "text / json"} +OK_HEADERS = {**STANDARD_HEADERS, "Content-type": "text/json"} def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: @@ -76,7 +82,7 @@ def send_authenticate(self): if self.is_authenticated(): return True - self.set_response(401, {"Content-type": "text / plain"}) + self.set_response(401, {"Content-type": "text/plain"}) self.wfile.write( f"Handheld Daemon Error: Authentication is on and you did not supply the proper bearer token.".encode() ) @@ -100,6 +106,22 @@ def send_error(self, error: str): self.wfile.write(b"Handheld Daemon Error:\n") self.wfile.write(error.encode()) + def send_file(self, fn: str): + if not "." in fn: + return self.send_error(f"Invalid file: {fn}") + match fn[fn.rindex(".") :]: + case ".css": + ctype = "text/css" + case ".js": + ctype = "text/javascript" + case ".html" | ".htm" | ".php": + ctype = "text/html" + case other: + return self.send_error(f"File type '{other} of '{fn}' not supported.") + self.set_response(200, {**STANDARD_HEADERS, "Content-type": ctype}) + with open(get_relative_fn(fn), "rb") as f: + self.wfile.write(f.read()) + def handle_profile( self, segments: list[str], params: dict[str, list[str]], content: Any | None ): @@ -212,10 +234,26 @@ def v1_endpoint(self, content: Any | None): self.send_not_found(f"Command '{other}' not supported.") def do_GET(self): - if not self.send_authenticate(): - return - - self.v1_endpoint(None) + # Danger zone unauthenticated + # Be very careful + try: + path = sanitize_fn(urlparse(self.path).path) + if path.startswith("/"): + path = path[1:] + match path.split("/"): + case ["" | "index.html" | "index.php"]: + return self.send_file("./index.html") + case ["static", *other]: + return self.send_file(os.path.join("static", *other)) + case ["api", *other]: + if not self.send_authenticate(): + return + self.v1_endpoint(None) + case other: + return self.send_not_found(f"File not found:\n{path}") + except Exception as e: + logger.error(f"Encountered error while serving unauthenticated request.") + return self.send_error(f"Encountered error while serving request:\n{e}") def do_POST(self): if not self.send_authenticate(): diff --git a/src/hhd/http/index.html b/src/hhd/http/index.html new file mode 100644 index 00000000..ab04011b --- /dev/null +++ b/src/hhd/http/index.html @@ -0,0 +1,17 @@ + + + + + + + + Handheld Daemon Settings + + + + +

This title is red

+ + + + \ No newline at end of file diff --git a/src/hhd/http/static/index.js b/src/hhd/http/static/index.js new file mode 100644 index 00000000..ebaebcf0 --- /dev/null +++ b/src/hhd/http/static/index.js @@ -0,0 +1 @@ +alert('testing!') \ No newline at end of file diff --git a/src/hhd/http/static/style.css b/src/hhd/http/static/style.css new file mode 100644 index 00000000..4717ad4b --- /dev/null +++ b/src/hhd/http/static/style.css @@ -0,0 +1,3 @@ +h1 { + color: red; +} \ No newline at end of file From 5dd59325b305d1ec414fedc6b523a4b0b3928c40 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 18:36:07 +0200 Subject: [PATCH 0042/1497] fix touchpad in evdev, update readme --- readme.md | 9 +++++---- src/hhd/controller/lib/hide.py | 2 +- src/hhd/device/legion_go/base.py | 5 ++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 431854df..6f1d04f5 100644 --- a/readme.md +++ b/readme.md @@ -14,11 +14,15 @@ can pick the best target for their device and its controls, which may change depending on the game. *Current Features*: -- Fully functional Dual Sense 5 Emulator (Legion Go) +- Fully functional Dual Sense Emulator (Legion Go) - All buttons supported - Rumble feedback - Touchpad support (steam input as well) - LED remapping +- Evdev device emulation + - No weird glyphs + - Partial gyro and back button support (only outside steam) + - Touchpad has right click (unlike DSE) - Power Button plugin - Short press makes steam deck sleep - Long press opens steam power menu @@ -29,9 +33,6 @@ depending on the game. - With will allow swapping configuration per game. *Planned Features (in that order)*: -- Evdev device emulation - - No weird glyphs - - But partial gyro and back button support - Steam Deck controller emulation - No weird glyphs - TDP Plugin (Legion Go) diff --git a/src/hhd/controller/lib/hide.py b/src/hhd/controller/lib/hide.py index 6a97b93f..74d44f59 100644 --- a/src/hhd/controller/lib/hide.py +++ b/src/hhd/controller/lib/hide.py @@ -42,7 +42,7 @@ def reload_children(parent: str): return False for action in ["remove", "add"]: stat = subprocess.run( - ["udevadm", "trigger", "--action", action, f"-b", parent], + ["udevadm", "trigger", "--action", action, "-b", parent], capture_output=True, ) if stat.returncode: diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 0e3ac1fe..eea02ff7 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -290,7 +290,10 @@ def prepare(m): if conf.get("gyro", False): prepare(d_gyro) prepare(d_shortcuts) - if conf["touchpad_mode"].to(str) != "disabled": + if ( + conf["touchpad_mode"].to(str) != "disabled" + and conf["xinput.mode"].to(str) == "ds5e" + ): prepare(d_touch) prepare(d_raw) prepare(d_out) From 00da871a0cbeda794c3104b0ed2421be75e23ad7 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 19:15:47 +0200 Subject: [PATCH 0043/1497] remove tag that reports an error --- src/hhd/controller/lib/hide.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/lib/hide.py b/src/hhd/controller/lib/hide.py index 74d44f59..7a5fa9c6 100644 --- a/src/hhd/controller/lib/hide.py +++ b/src/hhd/controller/lib/hide.py @@ -62,7 +62,7 @@ def hide_gamepad(devpath: str): SUBSYSTEMS=="input", KERNELS=="{input_dev}", GOTO="hhd_valid" GOTO="hhd_end" LABEL="hhd_valid" -KERNEL=="js[0-9]*|event[0-9]*", SUBSYSTEM=="input", MODE="000", GROUP="root", TAG="", RUN+="/bin/chmod 000 /dev/input/%k" +KERNEL=="js[0-9]*|event[0-9]*", SUBSYSTEM=="input", MODE="000", GROUP="root", RUN+="/bin/chmod 000 /dev/input/%k" LABEL="hhd_end" """ # , RUN+="/bin/chmod 000 /sys/%p" try: From 082153af09e2115636e29c9437dbcccc6250557a Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 19:42:29 +0200 Subject: [PATCH 0044/1497] update content types --- src/hhd/http/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 0f62405c..f043f8e9 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -31,7 +31,7 @@ def sanitize_fn(n: str): ERROR_HEADERS = {**STANDARD_HEADERS, "Content-type": "text/plain"} AUTH_HEADERS = ERROR_HEADERS -OK_HEADERS = {**STANDARD_HEADERS, "Content-type": "text/json"} +OK_HEADERS = {**STANDARD_HEADERS, "Content-type": "application/json"} def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: @@ -113,7 +113,7 @@ def send_file(self, fn: str): case ".css": ctype = "text/css" case ".js": - ctype = "text/javascript" + ctype = "application/javascript" case ".html" | ".htm" | ".php": ctype = "text/html" case other: From e62f169f6946639b0db86b81123b13fe440a92fd Mon Sep 17 00:00:00 2001 From: LtChipotle Date: Thu, 28 Dec 2023 05:41:55 -0600 Subject: [PATCH 0045/1497] UI for hhd (WIP) --- src/hhd/http/index.html | 18 +++--- src/hhd/http/static/index.js | 114 ++++++++++++++++++++++++++++++++++- 2 files changed, 122 insertions(+), 10 deletions(-) diff --git a/src/hhd/http/index.html b/src/hhd/http/index.html index ab04011b..be83eb91 100644 --- a/src/hhd/http/index.html +++ b/src/hhd/http/index.html @@ -1,17 +1,17 @@ - - - Handheld Daemon Settings - + HHD Settings + + - -

This title is red

- +

HHD Settings

+
+ +
+ - - \ No newline at end of file + diff --git a/src/hhd/http/static/index.js b/src/hhd/http/static/index.js index ebaebcf0..b6ac867e 100644 --- a/src/hhd/http/static/index.js +++ b/src/hhd/http/static/index.js @@ -1 +1,113 @@ -alert('testing!') \ No newline at end of file +async function fetchSettings() { + // Replace this URL with your actual API endpoint + const response = await fetch('/api/v1/settings'); + if (!response.ok) { + throw new Error('Failed to fetch settings'); + } + return await response.json(); +} + +function createInputForSetting(setting) { + let input; + + switch (setting.type) { + case 'bool': + input = document.createElement('input'); + input.type = 'checkbox'; + input.checked = setting.default; + break; + case 'int': + input = document.createElement('input'); + input.type = 'number'; + input.value = setting.default; + input.min = setting.min; + input.max = setting.max; + break; + case 'discrete': + input = document.createElement('select'); + setting.options.forEach(option => { + const optionElement = document.createElement('option'); + optionElement.value = option; + optionElement.textContent = option; + optionElement.selected = option === setting.default; + input.appendChild(optionElement); + }); + break; + case 'multiple': + input = document.createElement('select'); + Object.entries(setting.options).forEach(([key, value]) => { + const optionElement = document.createElement('option'); + optionElement.value = key; + optionElement.textContent = value; + optionElement.selected = key === setting.default; + input.appendChild(optionElement); + }); + break; + // Add other cases as needed + } + + return input; +} + +function createFormSection(children, containerId) { + const sectionContainer = document.createElement('div'); + sectionContainer.id = containerId; + + Object.entries(children).forEach(([key, setting]) => { + // Ensure each setting is processed correctly + if (!setting || typeof setting !== 'object') { + console.log(`Skipping invalid setting: ${key}`); + return; // Skip invalid settings + } + + const label = document.createElement('label'); + label.htmlFor = key; + label.textContent = setting.title; + + const input = createInputForSetting(setting); + if (!input) { + console.log(`Input not created for setting: ${key}`); + return; // Skip settings for which input could not be created + } + + const div = document.createElement('div'); + div.appendChild(label); + div.appendChild(input); + sectionContainer.appendChild(div); + }); + + return sectionContainer; +} + + +async function loadSettings() { + try { + const settings = await fetchSettings(); + + // Assuming 'settings' contains 'hhd' and 'controllers' keys at root level + if (settings.hhd && settings.hhd.http && settings.hhd.http.children) { + console.log('HHD HTTP children:', settings.hhd.http.children); + const hhdSectionForm = createFormSection(settings.hhd.http.children, 'hhd-http-form'); + document.getElementById('settingsContainer').appendChild(hhdSectionForm); + } else { + console.log('No children present in HHD HTTP settings'); + } + + if (settings.controllers && settings.controllers.legion_go && settings.controllers.legion_go.children) { + const controllersSectionForm = createFormSection(settings.controllers.legion_go.children, 'controllers-legion-go-form'); + if (controllersSectionForm) { + document.getElementById('settingsContainer').appendChild(controllersSectionForm); + } else { + console.log('Form section for Controllers Legion Go is not valid'); + } + } else { + console.log('No children present in Controllers Legion Go settings'); + } + } catch (error) { + console.error('Error loading settings:', error); + } +} + + +// Call loadSettings when the document is ready +document.addEventListener('DOMContentLoaded', loadSettings); From fbefe736aee17a7c17153d8c8157cb19609adb5d Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 20:01:59 +0200 Subject: [PATCH 0046/1497] fix api headers --- src/hhd/http/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index f043f8e9..4622f5ba 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -94,7 +94,7 @@ def send_json(self, data: Any): self.wfile.write(json.dumps(data).encode()) def set_response_ok(self): - self.set_response(200, STANDARD_HEADERS) + self.set_response(200, OK_HEADERS) def send_not_found(self, error: str): self.set_response(404, ERROR_HEADERS) From b60f4d871bf854abd076191908f179ea3cbc3c4b Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 20:47:44 +0200 Subject: [PATCH 0047/1497] add plugin blacklist --- src/hhd/__main__.py | 29 +++++++++++++++++++++++++++-- src/hhd/plugins/settings.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index e7600594..9a4fcb76 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -30,6 +30,8 @@ save_profile_yaml, save_state_yaml, validate_config, + load_blacklist_yaml, + save_blacklist_yaml, ) from .utils import expanduser, fix_perms, get_context, switch_priviledge @@ -142,6 +144,14 @@ def main(): except Exception: pass + # Remove old dir + try: + os.rename( + join(hhd_dir, "plugins"), join(hhd_dir, "plugins_old_USE_STATEYML") + ) + except Exception: + pass + set_log_plugin("main") setup_logger(join(CONFIG_DIR, "log"), ctx=ctx) @@ -152,12 +162,27 @@ def main(): else: logger.error(f"Command '{args.command[0]}' is unknown. Ignoring...") + # Use blacklist + blacklist_fn = join(hhd_dir, "plugins.yml") + blacklist = load_blacklist_yaml(blacklist_fn) + + logger.info(f"Running autodetection...") + + detector_names = [] for autodetect in pkg_resources.iter_entry_points("hhd.plugins"): - detectors[autodetect.name] = autodetect.resolve() + name = autodetect.name + detector_names.append(name) + if name in blacklist: + logger.info(f"Skipping blacklisted provider '{name}'.") + else: + detectors[autodetect.name] = autodetect.resolve() + + # Save new blacklist file + save_blacklist_yaml(blacklist_fn, detector_names, blacklist) + fix_perms(blacklist_fn, ctx) logger.info(f"Found plugin providers: {', '.join(list(detectors))}") - logger.info(f"Running autodetection...") for name, autodetect in detectors.items(): plugins[name] = autodetect([]) diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index e8547a95..b7eaf23e 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -487,6 +487,40 @@ def save_state_yaml(fn: str, set: HHDSettings, conf: Config): return True +def save_blacklist_yaml(fn: str, avail: Sequence[str], blacklist: Sequence[str]): + import yaml + + with open(fn, "w") as f: + f.write( + ( + "" + + "# \n" + + "# Plugin blacklist\n" + + "# The plugin providers under blacklist will not run.\n" + + "# \n" + + "# Warning: this file is read only on startup.\n" + + "# `sudo systemctl restart hhd@$(whoami)`\n" + + "# \n" + + "# Available providers:\n" + + f"# [{', '.join(avail)}]\n\n" + ) + ) + yaml.safe_dump({"blacklist": blacklist}, f, width=85, sort_keys=False) + + return True + + +def load_blacklist_yaml(fn: str): + import yaml + + try: + with open(fn, "r") as f: + return yaml.safe_load(f)["blacklist"] + except Exception as e: + logger.warning(f"Plugin blacklist not found, using default (empty).") + return ["myplugin1"] + + def save_profile_yaml(fn: str, set: HHDSettings, conf: Config | None = None): import yaml From e2f9c05d2a48835e34fb7f1d8f046d0e42915c69 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 28 Dec 2023 21:15:08 +0200 Subject: [PATCH 0048/1497] add color type validation and custom type --- docs/http.md | 2 +- src/hhd/__main__.py | 21 ++++++++---- src/hhd/plugins/plugin.py | 3 ++ src/hhd/plugins/settings.py | 67 ++++++++++++++++++++++++++++++++++--- 4 files changed, 81 insertions(+), 12 deletions(-) diff --git a/docs/http.md b/docs/http.md index 5fadad66..6fa5b93a 100644 --- a/docs/http.md +++ b/docs/http.md @@ -28,7 +28,7 @@ may not check if they exist. Each setting has a title which is meant to be shown in the UI and an optional hint meant to be shown under a hover hint or `?` button. -Each setting may include tags, which work like classes. +Each setting may include a family, which has a number of tags that work like classes. For example, a keyboard mapping setting may have the tags `[razer_lycosa_123, razer_kbd, keyboard, advanced]`, which would allow the UI to customize the presentation based on the specific device make, manufacturer, diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 9a4fcb76..de8e6c0c 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -4,9 +4,9 @@ import os import signal from os.path import join -from threading import Condition, RLock +from threading import Condition from threading import Event as TEvent -from threading import Lock +from threading import Lock, RLock from time import sleep from typing import Sequence, cast @@ -23,15 +23,16 @@ load_relative_yaml, ) from .plugins.settings import ( + Validator, get_default_state, + load_blacklist_yaml, load_profile_yaml, load_state_yaml, merge_settings, + save_blacklist_yaml, save_profile_yaml, save_state_yaml, validate_config, - load_blacklist_yaml, - save_blacklist_yaml, ) from .utils import expanduser, fix_perms, get_context, switch_priviledge @@ -198,6 +199,9 @@ def main(): for plugs in plugins.values(): sorted_plugins.extend(plugs) sorted_plugins.sort(key=lambda x: x.priority) + validator: Validator = lambda family, config, value: any( + p.validate(family, config, value) for p in sorted_plugins + ) if not sorted_plugins: logger.error(f"No plugins started, exiting...") @@ -276,7 +280,7 @@ def main(): name = fn.replace(".yml", "") s = load_profile_yaml(join(profile_dir, fn)) if s: - validate_config(s, settings, use_defaults=False) + validate_config(s, settings, validator, use_defaults=False) if name.startswith("_"): templates[name] = s else: @@ -374,7 +378,10 @@ def main(): with lock: profiles[ev["name"]] = ev["config"] validate_config( - profiles[ev["name"]], settings, use_defaults=False + profiles[ev["name"]], + settings, + validator, + use_defaults=False, ) else: with lock: @@ -389,7 +396,7 @@ def main(): logger.error(f"Invalid event type submitted: '{other}'") # Validate config - validate_config(conf, settings) + validate_config(conf, settings, validator) # If settings changed, the configuration needs to reload # but it needs to be saved first diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 38be950b..1daced68 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -75,6 +75,9 @@ def open( def settings(self) -> HHDSettings: return {} + def validate(self, family: Sequence[str], config: Any, value: Any): + return False + def prepare(self, conf: Config): pass diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index b7eaf23e..10712abd 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -8,6 +8,7 @@ Sequence, TypedDict, cast, + Protocol, ) from copy import copy @@ -91,6 +92,12 @@ class IntegerSetting(TypedDict): default: int | None +class Color(TypedDict): + red: int + green: int + blue: int + + class ColorSetting(TypedDict): """RGB color setting.""" @@ -99,7 +106,29 @@ class ColorSetting(TypedDict): title: str hint: str | None - default: Mapping | None + default: Color | None + + +class CustomSetting(TypedDict): + """Custom plugin setting. + + Can be used for any required custom setting that is not covered by the + default ones (e.g., fan curves, deadzones). + + The setting type is defined by family. + Then, the config variable can be used to supply option specific information + (e.g., for fan curves how many temperature points are available). + + To validate this setting, each loaded plugin's validate function is called, + with the family, config data, and the supplied value.""" + + type: Literal["custom"] + family: Sequence[str] + title: str + hint: str | None + + config: Any | None + default: Any | None Setting = ( @@ -110,6 +139,7 @@ class ColorSetting(TypedDict): | NumericalSetting | IntegerSetting | ColorSetting + | CustomSetting ) # @@ -244,6 +274,8 @@ def fill_in_defaults(s: Setting | Container | Mode): case "integer" | "float": s["min"] = s.get("min", None) s["max"] = s.get("max", None) + case "custom": + s["config"] = s.get("config", None) return s @@ -625,7 +657,14 @@ def unravel_options(settings: HHDSettings): return options -def validate_config(conf: Config, settings: HHDSettings, use_defaults: bool = True): +class Validator(Protocol): + def __call__(self, family: Sequence[str], config: Any, value: Any) -> bool: + return False + + +def validate_config( + conf: Config, settings: HHDSettings, validator: Validator, use_defaults: bool = True +): options = unravel_options(settings) for k, d in options.items(): @@ -667,5 +706,25 @@ def validate_config(conf: Config, settings: HHDSettings, use_defaults: bool = Tr if v > d["max"]: conf[k] = d["max"] case "color": - # TODO - pass + invalid = False + + if not isinstance(v, Mapping): + invalid = True + else: + for c in ("red", "green", "blue"): + if c not in v: + invalid = True + elif not (0 <= v[c] < 256): + invalid = True + + if invalid: + if use_defaults: + conf[k] = default + else: + del conf[k] + case "custom": + if not validator(d["family"], d["config"], v): + if use_defaults: + conf[k] = default + else: + del conf[k] From 9b1a9d3d72b0df1841aa903f4408ae0e583c94a1 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 00:01:31 +0200 Subject: [PATCH 0049/1497] tweak ui to say it is not working --- pyproject.toml | 2 +- src/hhd/http/index.html | 1 + src/hhd/http/static/style.css | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 707747b2..b9b25511 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.3" +version = "0.2.4" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/http/index.html b/src/hhd/http/index.html index be83eb91..df7de316 100644 --- a/src/hhd/http/index.html +++ b/src/hhd/http/index.html @@ -9,6 +9,7 @@

HHD Settings

+

Not working yet chief!

diff --git a/src/hhd/http/static/style.css b/src/hhd/http/static/style.css index 4717ad4b..fcddbafe 100644 --- a/src/hhd/http/static/style.css +++ b/src/hhd/http/static/style.css @@ -1,3 +1,3 @@ h1 { - color: red; + color: purple; } \ No newline at end of file From ea39c053b7e8ab34d6c6f6b694723bde44e6b93a Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 01:44:14 +0200 Subject: [PATCH 0050/1497] switch to using tags for the settings universally --- docs/http.md | 2 +- readme.md | 12 +++++++----- src/hhd/__main__.py | 4 ++-- src/hhd/plugins/plugin.py | 2 +- src/hhd/plugins/settings.py | 32 ++++++++++++++++---------------- 5 files changed, 27 insertions(+), 25 deletions(-) diff --git a/docs/http.md b/docs/http.md index 6fa5b93a..3988c019 100644 --- a/docs/http.md +++ b/docs/http.md @@ -28,7 +28,7 @@ may not check if they exist. Each setting has a title which is meant to be shown in the UI and an optional hint meant to be shown under a hover hint or `?` button. -Each setting may include a family, which has a number of tags that work like classes. +Each setting may include a set of tags, that work like classes. For example, a keyboard mapping setting may have the tags `[razer_lycosa_123, razer_kbd, keyboard, advanced]`, which would allow the UI to customize the presentation based on the specific device make, manufacturer, diff --git a/readme.md b/readme.md index 6f1d04f5..a270c158 100644 --- a/readme.md +++ b/readme.md @@ -218,6 +218,7 @@ Currently, there is a bug with the Nobara kernels that adds 2 extra random Steam Controllers. These controllers appear in the system as X-BOX/Xpad controllers. This is unrelated to HHD. +You can verify by running `` ### Steam reports a Legion Controller and a Shortcuts controller instead of a DS5 The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, @@ -270,10 +271,10 @@ if you are missing the xpad rule. ### I can see the original controller and that is causing issues in X Hiding the original controller is a complex process, so it was skipped for the v0.1.* versions of HHD. -However, it is implemented properly in v0.2 which will be released soon. -Some emulators select the original controller as controller 1, which might -cause issues. -If this is the case, wait for version 2. +However, it is implemented properly in v0.2. +Some emulators select the original controller as controller 1, which caused +issues. +This is not the case anymore. ### Yuzu does not work with the DS5 controller See above. @@ -324,7 +325,8 @@ The gyro will freeze and will be unusable after that. HHD remaps the touchpad of the legion go to the DS5 touchpad. The playstation driver does not support right clicking. Switch to d-input to enable the touchpad when you're in the desktop. -You can also disable touchpad emulation in the config. +You can also disable touchpad emulation in the config or use evdev emulation +which does not use the touchpad. ### HandyGCCS HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index de8e6c0c..1b7ecf12 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -199,8 +199,8 @@ def main(): for plugs in plugins.values(): sorted_plugins.extend(plugs) sorted_plugins.sort(key=lambda x: x.priority) - validator: Validator = lambda family, config, value: any( - p.validate(family, config, value) for p in sorted_plugins + validator: Validator = lambda tags, config, value: any( + p.validate(tags, config, value) for p in sorted_plugins ) if not sorted_plugins: diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 1daced68..19c2f0b1 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -75,7 +75,7 @@ def open( def settings(self) -> HHDSettings: return {} - def validate(self, family: Sequence[str], config: Any, value: Any): + def validate(self, tags: Sequence[str], config: Any, value: Any): return False def prepare(self, conf: Config): diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 10712abd..dc7b2b63 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -24,7 +24,7 @@ class ButtonSetting(TypedDict): """Just a button, emits an event. Used for resets, etc.""" type: Literal["event"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -35,7 +35,7 @@ class BooleanSetting(TypedDict): """Checkbox container.""" type: Literal["bool"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -46,7 +46,7 @@ class MultipleSetting(TypedDict): """Select one container.""" type: Literal["multiple"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -58,7 +58,7 @@ class DiscreteSetting(TypedDict): """Ordered and fixed numerical options (etc. tdp).""" type: Literal["discrete"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -70,7 +70,7 @@ class NumericalSetting(TypedDict): """Floating numerical option.""" type: Literal["float"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -83,7 +83,7 @@ class IntegerSetting(TypedDict): """Floating numerical option.""" type: Literal["int"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -102,7 +102,7 @@ class ColorSetting(TypedDict): """RGB color setting.""" type: Literal["color"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -115,15 +115,15 @@ class CustomSetting(TypedDict): Can be used for any required custom setting that is not covered by the default ones (e.g., fan curves, deadzones). - The setting type is defined by family. + The setting type is defined by tags. Then, the config variable can be used to supply option specific information (e.g., for fan curves how many temperature points are available). To validate this setting, each loaded plugin's validate function is called, - with the family, config data, and the supplied value.""" + with the tags, config data, and the supplied value.""" type: Literal["custom"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -151,7 +151,7 @@ class Container(TypedDict): """Holds a variety of settings.""" type: Literal["container"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -162,7 +162,7 @@ class Mode(TypedDict): """Holds a number of containers, only one of whih can be active at a time.""" type: Literal["mode"] - family: Sequence[str] + tags: Sequence[str] title: str hint: str | None @@ -221,7 +221,7 @@ class Mode(TypedDict): ) -Section = MutableMapping[str, Container] +Section = Mapping[str, Container] HHDSettings = Mapping[str, Section] @@ -251,7 +251,7 @@ def parse_defaults(sets: HHDSettings): def fill_in_defaults(s: Setting | Container | Mode): s = copy(s) - s["family"] = s.get("family", []) + s["tags"] = s.get("tags", []) s["title"] = s.get("title", "") s["hint"] = s.get("hint", None) if s["type"] != "container": @@ -658,7 +658,7 @@ def unravel_options(settings: HHDSettings): class Validator(Protocol): - def __call__(self, family: Sequence[str], config: Any, value: Any) -> bool: + def __call__(self, tags: Sequence[str], config: Any, value: Any) -> bool: return False @@ -723,7 +723,7 @@ def validate_config( else: del conf[k] case "custom": - if not validator(d["family"], d["config"], v): + if not validator(d["tags"], d["config"], v): if use_defaults: conf[k] = default else: From 37edfc6026ed0313fe33879defaf60dfa6e9528b Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 02:04:03 +0200 Subject: [PATCH 0051/1497] make hhd remove leftover udev rules when starting/exiting --- pyproject.toml | 2 +- src/hhd/controller/lib/hide.py | 9 +++++++++ src/hhd/controller/physical/evdev.py | 4 +--- src/hhd/device/legion_go/base.py | 6 +++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b9b25511..50c553f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.4" +version = "0.2.5" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/controller/lib/hide.py b/src/hhd/controller/lib/hide.py index 7a5fa9c6..9498da17 100644 --- a/src/hhd/controller/lib/hide.py +++ b/src/hhd/controller/lib/hide.py @@ -85,3 +85,12 @@ def unhide_gamepad(devpath: str): return reload_children(parent) except Exception: return False + + +def unhide_all(): + for rule in os.listdir("/run/udev/rules.d/"): + if rule.startswith("95-hhd-devhide"): + try: + os.remove(os.path.join("/run/udev/rules.d/", rule)) + except Exception: + pass diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index bccc0c16..6382b6ce 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -2,8 +2,6 @@ import logging import os import re -import select -import stat import subprocess from typing import Mapping, Sequence, TypeVar, cast, Collection @@ -13,7 +11,7 @@ from hhd.controller import Axis, Button, Consumer, Event, Producer, can_read from hhd.controller.base import Event from hhd.controller.lib.common import hexify, matches_patterns -from hhd.controller.lib.hide import hide_gamepad, unhide_gamepad +from hhd.controller.lib.hide import hide_gamepad, unhide_gamepad, unhide_all from hhd.controller.const import AbsAxis, GamepadButton, KeyboardButton logger = logging.getLogger(__name__) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index eea02ff7..6b5de771 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -11,7 +11,7 @@ from hhd.controller.base import Multiplexer from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC -from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.evdev import GenericGamepadEvdev, unhide_all from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import AccelImu, GyroImu from hhd.controller.virtual.ds5 import DualSense5Edge, TouchpadCorrectionType @@ -51,6 +51,8 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): + # Remove leftover udev rules + unhide_all() if (gyro_fix := conf.get("gyro_fix", False)) and conf["gyro"].to(bool): gyro_fixer = GyroFixer(int(gyro_fix) if int(gyro_fix) > 10 else 100) else: @@ -110,6 +112,8 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven finally: if gyro_fixer: gyro_fixer.close() + # Remove leftover udev rules + unhide_all() def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent): From c829db8fa5b8003b8907c98c23770dbf7c16fc09 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 02:16:37 +0200 Subject: [PATCH 0052/1497] add vid and pid to udev hiding rule --- src/hhd/controller/lib/hide.py | 4 ++-- src/hhd/controller/physical/evdev.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/lib/hide.py b/src/hhd/controller/lib/hide.py index 9498da17..3b9f919a 100644 --- a/src/hhd/controller/lib/hide.py +++ b/src/hhd/controller/lib/hide.py @@ -50,7 +50,7 @@ def reload_children(parent: str): return True -def hide_gamepad(devpath: str): +def hide_gamepad(devpath: str, vid: int, pid: int): input_dev = get_gamepad_name(devpath) parent = get_parent_sysfs(devpath) if not input_dev or not parent: @@ -59,7 +59,7 @@ def hide_gamepad(devpath: str): rule = f"""\ # Hides device gamepad devices stemming from {input_dev} # Managed by HHD, this file will be autoremoved during configuration changes. -SUBSYSTEMS=="input", KERNELS=="{input_dev}", GOTO="hhd_valid" +SUBSYSTEMS=="input", KERNELS=="{input_dev}", ATTRS{{id/vendor}}=="{vid:04x}", ATTRS{{id/product}}=="{pid:04x}", GOTO="hhd_valid" GOTO="hhd_end" LABEL="hhd_valid" KERNEL=="js[0-9]*|event[0-9]*", SUBSYSTEM=="input", MODE="000", GROUP="root", RUN+="/bin/chmod 000 /dev/input/%k" diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 6382b6ce..e15e0ca3 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -150,7 +150,7 @@ def open(self) -> Sequence[int]: if self.hide: # Check we are root if not os.getuid(): - self.hidden = hide_gamepad(dev.path) + self.hidden = hide_gamepad(dev.path, dev.info.vendor, dev.info.product) if not self.hidden: logger.warning(f"Could not hide device:\n{dev}") else: From 4750957615b44118ac96e29639a342c424c50905 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 11:36:32 +0200 Subject: [PATCH 0053/1497] fix unhide command when list dir doesnt exist --- src/hhd/controller/lib/hide.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/lib/hide.py b/src/hhd/controller/lib/hide.py index 3b9f919a..49cf3965 100644 --- a/src/hhd/controller/lib/hide.py +++ b/src/hhd/controller/lib/hide.py @@ -88,9 +88,9 @@ def unhide_gamepad(devpath: str): def unhide_all(): - for rule in os.listdir("/run/udev/rules.d/"): - if rule.startswith("95-hhd-devhide"): - try: + try: + for rule in os.listdir("/run/udev/rules.d/"): + if rule.startswith("95-hhd-devhide"): os.remove(os.path.join("/run/udev/rules.d/", rule)) - except Exception: - pass + except Exception: + pass From 5e86998fa5f558f8e14634ef62503149afcbab18 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 11:38:30 +0200 Subject: [PATCH 0054/1497] bump version and remove unhide --- pyproject.toml | 2 +- src/hhd/device/legion_go/base.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 50c553f6..40cfd402 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.5" +version = "0.2.6" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 6b5de771..c489ebe5 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -52,7 +52,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): # Remove leftover udev rules - unhide_all() + # unhide_all() if (gyro_fix := conf.get("gyro_fix", False)) and conf["gyro"].to(bool): gyro_fixer = GyroFixer(int(gyro_fix) if int(gyro_fix) > 10 else 100) else: @@ -113,7 +113,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven if gyro_fixer: gyro_fixer.close() # Remove leftover udev rules - unhide_all() + # unhide_all() def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent): From b4dd81aca836a6b29dd7aa0701bed1b4946de28e Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 16:59:45 +0200 Subject: [PATCH 0055/1497] update services --- PKGBUILD | 2 +- usr/lib/modprobe.d/hhd.conf | 3 --- usr/lib/systemd/user/hhd-user.service | 10 ++++++++++ 3 files changed, 11 insertions(+), 4 deletions(-) delete mode 100644 usr/lib/modprobe.d/hhd.conf create mode 100644 usr/lib/systemd/user/hhd-user.service diff --git a/PKGBUILD b/PKGBUILD index d8289c17..9b898a4e 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -8,7 +8,7 @@ url='https://github.com/antheas/hhd' license=('MIT') depends=('python' python-setuptools 'python-evdev' 'python-rich' 'python-yaml') provides=('hhd') -# optdepends=('hhd-user: allows running as a user service') +optdepends=('hhd-user: allows running hhd as a user service.') makedepends=('python-'{'build','installer','setuptools','wheel'}) source=("https://pypi.python.org/packages/source/h/hhd/hhd-${pkgver}.tar.gz") sha512sums=('SKIP') diff --git a/usr/lib/modprobe.d/hhd.conf b/usr/lib/modprobe.d/hhd.conf deleted file mode 100644 index f56f5c4b..00000000 --- a/usr/lib/modprobe.d/hhd.conf +++ /dev/null @@ -1,3 +0,0 @@ -# Blacklist playstation driver to avoid issues with steam -# seeing the touchpad -blacklist hid_playstation \ No newline at end of file diff --git a/usr/lib/systemd/user/hhd-user.service b/usr/lib/systemd/user/hhd-user.service new file mode 100644 index 00000000..70c29765 --- /dev/null +++ b/usr/lib/systemd/user/hhd-user.service @@ -0,0 +1,10 @@ +[Unit] +Description=Handheld Daemon User Service + +[Service] +ExecStart=hhd +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target \ No newline at end of file From b13fafd63d7693ddcc98f8c2b575ae1ea51fe52b Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 19:12:26 +0200 Subject: [PATCH 0056/1497] add adjustor placeholder --- src/hhd/plugins/adjustor/__init__.py | 0 src/hhd/plugins/adjustor/settings.yml | 34 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/hhd/plugins/adjustor/__init__.py create mode 100644 src/hhd/plugins/adjustor/settings.yml diff --git a/src/hhd/plugins/adjustor/__init__.py b/src/hhd/plugins/adjustor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/hhd/plugins/adjustor/settings.yml b/src/hhd/plugins/adjustor/settings.yml new file mode 100644 index 00000000..604e2299 --- /dev/null +++ b/src/hhd/plugins/adjustor/settings.yml @@ -0,0 +1,34 @@ +type: container +tags: [adj] +title: Adjustor +hint: >- + Configuration of the Performance Envelope of the selected system. + +children: + tdp_mode: + type: mode + tags: [adj_plat] + title: TDP Driver + hint: >- + How to control the overall TDP of the provided device. + Which modes are available will depend on the device and available drivers. + + cpu: + type: container + tags: [adj_cpu] + title: CPU Options + hint: >- + Stardard options provided by the CPU linux driver. + children: + # /sys/devices/system/cpu/smt/control + + + amd_gpu: + type: container + tags: [adj_gpu] + title: GPU Options + hint: >- + Standard options provided by the AMD GPU linux driver. + + children: + # power_dpm_force_performance_level \ No newline at end of file From 34caef8ed8fdfcdf57edd666e2135d2493c14150 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 19:47:53 +0200 Subject: [PATCH 0057/1497] fix error handling and cors requests --- src/hhd/http/api.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 4622f5ba..adec7e1a 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -4,7 +4,7 @@ from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Condition, Thread from typing import Any, Mapping -from urllib.parse import parse_qs, urlparse +from urllib.parse import parse_qs, urlparse, quote from hhd.plugins import Config, Emitter, HHDSettings, get_relative_fn @@ -101,11 +101,19 @@ def send_not_found(self, error: str): self.wfile.write(b"Handheld Daemon Error (404, invalid endpoint):\n") self.wfile.write(error.encode()) - def send_error(self, error: str): + def send_error_str(self, error: str): self.set_response(400, ERROR_HEADERS) self.wfile.write(b"Handheld Daemon Error:\n") self.wfile.write(error.encode()) + def send_error(self, *args, **kwargs): + if len(args) == 1: + return self.send_error_str(args[0]) + else: + for title, head in STANDARD_HEADERS.items(): + self.send_header(title, head) + return super().send_error(*args, **kwargs) + def send_file(self, fn: str): if not "." in fn: return self.send_error(f"Invalid file: {fn}") @@ -270,7 +278,10 @@ def do_POST(self): self.v1_endpoint(content_json) def log_message(self, format: str, *args: Any) -> None: - pass + message = format % args + logger.error( + f"Received invalid request from '{self.address_string()}':\n{quote(message)}" + ) class HHDHTTPServer: From 85db008ba9eb0f92693bd8813f4390ed8670fbf2 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 19:55:00 +0200 Subject: [PATCH 0058/1497] tweak how errors are printed --- src/hhd/http/api.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index adec7e1a..ba482af8 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -1,10 +1,11 @@ +import itertools import json import logging import os from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Condition, Thread from typing import Any, Mapping -from urllib.parse import parse_qs, urlparse, quote +from urllib.parse import parse_qs, urlparse from hhd.plugins import Config, Emitter, HHDSettings, get_relative_fn @@ -33,6 +34,10 @@ def sanitize_fn(n: str): AUTH_HEADERS = ERROR_HEADERS OK_HEADERS = {**STANDARD_HEADERS, "Content-type": "application/json"} +# https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes +_control_char_table = str.maketrans( + {c: fr'\x{c:02x}' for c in itertools.chain(range(0x20), range(0x7f,0xa0))}) +_control_char_table[ord('\\')] = r'\\' def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: try: @@ -280,7 +285,7 @@ def do_POST(self): def log_message(self, format: str, *args: Any) -> None: message = format % args logger.error( - f"Received invalid request from '{self.address_string()}':\n{quote(message)}" + f"Received invalid request from '{self.address_string()}':\n{message.translate(_control_char_table)}" ) From 8d2c14443863c548d7dbe550a50b8d61998e604a Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 20:04:41 +0200 Subject: [PATCH 0059/1497] handle invalid request types --- src/hhd/http/api.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index ba482af8..e83ca946 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -36,8 +36,10 @@ def sanitize_fn(n: str): # https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes _control_char_table = str.maketrans( - {c: fr'\x{c:02x}' for c in itertools.chain(range(0x20), range(0x7f,0xa0))}) -_control_char_table[ord('\\')] = r'\\' + {c: rf"\x{c:02x}" for c in itertools.chain(range(0x20), range(0x7F, 0xA0))} +) +_control_char_table[ord("\\")] = r"\\" + def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: try: @@ -288,6 +290,18 @@ def log_message(self, format: str, *args: Any) -> None: f"Received invalid request from '{self.address_string()}':\n{message.translate(_control_char_table)}" ) + def log_request(self, code="-", size="-"): + pass + + def __getattr__(self, val: str): + if not val.startswith("do_"): + raise AttributeError() + + logger.warning( + f"Received request type '{val[3:].translate(_control_char_table)}' from '{self.address_string()}'. Handling as GET." + ) + return self.do_GET + class HHDHTTPServer: def __init__( From 954431274909f10f78a565673c1d423fa512da56 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 20:21:14 +0200 Subject: [PATCH 0060/1497] handle cors protocol --- src/hhd/http/api.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index e83ca946..6a3e264d 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -27,6 +27,9 @@ def sanitize_fn(n: str): STANDARD_HEADERS = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Methods": "POST, GET, OPTIONS, DELETE", + "Access-Control-Allow-Headers": "*", + "Access-Control-Max-Age": "86400", "WWW-Authenticate": "Bearer", } @@ -64,11 +67,20 @@ class RestHandler(BaseHTTPRequestHandler): token: str | None def set_response(self, code: int, headers: dict[str, str] = {}): + # Allow skipping CORS by responding with specific origin + if og := self.headers.get("Origin", None): + headers = {**headers, "Access-Control-Allow-Origin": og} self.send_response(code) for title, head in headers.items(): self.send_header(title, head) self.end_headers() + def do_OPTIONS(self): + self.set_response( + 204, + STANDARD_HEADERS, + ) + def is_authenticated(self): if not self.token: return True From 006286b18df51529b25c7c8aa83e6ae54c96b3e8 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 29 Dec 2023 20:26:53 +0200 Subject: [PATCH 0061/1497] fix context username when user is not provided --- src/hhd/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/utils.py b/src/hhd/utils.py index 85c4a12f..69f875cb 100644 --- a/src/hhd/utils.py +++ b/src/hhd/utils.py @@ -14,13 +14,13 @@ def get_context(user: str | None) -> Context | None: gid = os.getgid() if not user: - if not uid or not gid: + if not uid: print(f"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") print( "Running as root without a specified user (`--user`). Configs will be placed at `/root/.config`." ) print(f"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") - return Context(uid, gid, uid, gid, "root") + return Context(uid, gid, uid, gid, os.getlogin()) euid = int( subprocess.run( From 65f94e410fd154588f856536349dbec86e5c9061 Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Fri, 29 Dec 2023 17:24:45 -0800 Subject: [PATCH 0062/1497] update github org name to hhd-dev --- PKGBUILD | 4 ++-- pyproject.toml | 6 +++--- readme.md | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 9b898a4e..0a183557 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -4,7 +4,7 @@ pkgver=VERSION pkgrel=1 pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' arch=('x86_64') -url='https://github.com/antheas/hhd' +url='https://github.com/hhd-dev/hhd' license=('MIT') depends=('python' python-setuptools 'python-evdev' 'python-rich' 'python-yaml') provides=('hhd') @@ -27,4 +27,4 @@ package() { install -m644 usr/lib/udev/rules.d/83-hhd.rules ${pkgdir}/usr/lib/udev/rules.d/83-hhd.rules mkdir -p ${pkgdir}/usr/lib/systemd/system/ install -m644 usr/lib/systemd/system/hhd@.service ${pkgdir}/usr/lib/systemd/system/hhd@.service -} \ No newline at end of file +} diff --git a/pyproject.toml b/pyproject.toml index 40cfd402..1c2542db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,8 +21,8 @@ dependencies = [ ] [project.urls] -"Homepage" = "https://github.com/antheas/hhd" -"Bug Tracker" = "https://github.com/antheas/hhd/issues" +"Homepage" = "https://github.com/hhd-dev/hhd" +"Bug Tracker" = "https://github.com/hhd-dev/hhd/issues" [project.entry-points."console_scripts"] hhd = "hhd.__main__:main" @@ -38,4 +38,4 @@ build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] # list of folders that contain the packages (["."] by default) -include = ["hhd*"] # package names should match these glob patterns (["*"] by default) \ No newline at end of file +include = ["hhd*"] # package names should match these glob patterns (["*"] by default) diff --git a/readme.md b/readme.md index a270c158..3434aad0 100644 --- a/readme.md +++ b/readme.md @@ -101,8 +101,8 @@ source venv/bin/activate pip install hhd # Install udev rules and create a service file -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service # Start service and reboot sudo systemctl enable hhd_local@$(whoami) @@ -293,7 +293,7 @@ only way to wake up the screen in desktop mode. Games that do not support Dual Sense natively (e.g., wine games) will not have a correct gamepad profile and will not work either. ```bash -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/modprobe.d/hhd.conf -o /etc/udev/modprobe.d/hhd.conf +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/modprobe.d/hhd.conf -o /etc/udev/modprobe.d/hhd.conf ``` ### Freezing Gyro @@ -360,7 +360,7 @@ You should install from source if you aim to contribute or want to pull from mas ```bash # Install hhd to ~/.local/share/hhd mkdir -p ~/.local/share/ -git clone https://github.com/antheas/hhd ~/.local/share/hhd +git clone https://github.com/hhd-dev/hhd ~/.local/share/hhd cd ~/.local/share/hhd python -m venv venv @@ -368,13 +368,13 @@ source venv/bin/activate pip install -e . # Install udev rules and create a service file -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service # Install udev rules to allow running in userspace (optional; great for debugging) -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/udev/rules.d/83-hhd-user.rules -o /etc/udev/rules.d/83-hhd-user.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd-user.rules -o /etc/udev/rules.d/83-hhd-user.rules # Modprobe uhid to avoid rw errors -sudo curl https://raw.githubusercontent.com/antheas/hhd/master/usr/lib/modules-load.d/hhd-user.conf -o /etc/modules-load.d/hhd-user.conf +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/modules-load.d/hhd-user.conf -o /etc/modules-load.d/hhd-user.conf # Reboot sudo reboot @@ -386,4 +386,4 @@ sudo hhd --user $(whoami) ``` ## License -This codebase is MIT licensed and will always have a copy-left license. \ No newline at end of file +This codebase is MIT licensed and will always have a copy-left license. From fefa8e03a16d28688483b7816884c745a089641a Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Fri, 29 Dec 2023 22:49:22 -0800 Subject: [PATCH 0063/1497] add NixOS installation instructions --- readme.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/readme.md b/readme.md index 3434aad0..ef68a206 100644 --- a/readme.md +++ b/readme.md @@ -84,6 +84,19 @@ sudo systemctl enable handygccs sudo reboot ``` +### ❄️ NixOS +Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: + +```nix + inputs = { + nixpkgs.url = "github:appsforartists/nixpkgs/handheld-daemon"; +``` + +and add this line to your `configuration.nix`: +```nix + services.handheldDaemon.enable = true; +``` + ### PyPi Based installation (Nobara/Read only fs) If you have a read only fs or are on a fedora based system, you may opt to install a local version of hhd. From c511f95b620e100fbd049cfc5958be1b550ece87 Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Fri, 29 Dec 2023 23:03:40 -0800 Subject: [PATCH 0064/1497] make the casing of proper nouns consistent in the README There's still lots of clean-up to do, but this is a step in the right direction. --- readme.md | 136 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 75 insertions(+), 61 deletions(-) diff --git a/readme.md b/readme.md index ef68a206..cae8a982 100644 --- a/readme.md +++ b/readme.md @@ -6,33 +6,34 @@ session management. This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will expose the settings of the plugins in a UI agnostic way. -The current version contains a fully functional Dual Sense 5 Edge emulator for -the Legion Go (including touchpad, gyro, and LED support). +The current version contains a fully functional DualSense Edge (PS5) emulator +for the Legion Go (including touchpad, gyro, and LED support). + It is the aim of this project to provide generic hid-based emulators for most -mainstream controllers (xbox Elite, DS4, DS5, Joycons), so that users of devices +mainstream controllers (xbox Elite, DS4, PS5, Joycons), so that users of devices can pick the best target for their device and its controls, which may change depending on the game. -*Current Features*: -- Fully functional Dual Sense Emulator (Legion Go) +*Current Features (Legion Go)*: +- Fully functional DualSense Edge emulation - All buttons supported - Rumble feedback - - Touchpad support (steam input as well) + - Touchpad support (Steam Input as well) - LED remapping - Evdev device emulation - No weird glyphs - - Partial gyro and back button support (only outside steam) - - Touchpad has right click (unlike DSE) + - Partial gyro and back button support (only outside Steam) + - Touchpad has right click (unlike DualSense Edge) - Power Button plugin - - Short press makes steam deck sleep - - Long press opens steam power menu -- Hiding the original xbox controller! + - Short press makes Steam deck sleep + - Long press opens Steam power menu +- Hiding the original Xbox controller - HTTP based Configuration - Allows configuring HHD over Electron/React apps. - - Token based authentication and limited to localhost. - - With will allow swapping configuration per game. + - Token-based authentication and limited to localhost. + - Will allow swapping configuration per game. -*Planned Features (in that order)*: +*Planned Features (in this order)*: - Steam Deck controller emulation - No weird glyphs - TDP Plugin (Legion Go) @@ -47,13 +48,16 @@ depending on the game. (provided you stay within limits). ## Installation Instructions -You can install the latest stable version of `hhd` from AUR or PiPy. +You can install the latest stable version of `hhd` from AUR or PyPi. ### ChimeraOS -ChimeraOS does not ship with `gcc` to compile hhd dependencies and the functionality -of `handygccs` which fixes the QAM button by default conflicts with hhd. -The easiest way to install is to unlock the filesystem, install hhd, and remove -handygccs. + +ChimeraOS does not ship with `gcc` to compile `hhd` dependencies and the +functionality of `handygccs` which fixes the QAM button by default conflicts +with `hhd`. + +The easiest way to install is to unlock the filesystem, install `hhd`, and +remove `handygccs`. ```bash # Unlock filesystem @@ -74,6 +78,7 @@ features as well 😊. #### Uninstall Just run the steps in reverse or switch to a locked Chimera version. + ```bash sudo systemctl disable hhd@$(whoami) @@ -97,15 +102,16 @@ and add this line to your `configuration.nix`: services.handheldDaemon.enable = true; ``` -### PyPi Based installation (Nobara/Read only fs) -If you have a read only fs or are on a fedora based system, you may opt to install -a local version of hhd. +### PyPi Based installation (Nobara or immutable filesystem) +If you have a read-only filesystem or are on a Fedora-based system, you may opt +to install a local version of HHD. + ```bash # (nobara) Install Python Headers since evdev has no wheels # and nobara does not ship them (but arch does) sudo dnf install python-devel -# Install hhd to ~/.local/share/hhd +# Install Handheld Daemon to ~/.local/share/hhd mkdir -p ~/.local/share/hhd cd ~/.local/share/hhd @@ -142,15 +148,15 @@ sudo rm /etc/systemd/system/hhd_local@.service rm -r ~/.config/hhd ``` -> The above should work on read only fs, provided the /etc directory is not read -> only. +> The above should work on read-only filesystem, provided the /etc directory is +> not read-only. ### Arch-based Installation (AUR) ```bash # Install using your AUR package manager sudo pikaur -S hhd sudo yay -S hhd -sudo pacman -S hhd # manjaro only +sudo pacman -S hhd # Manjaro only # Enable and reboot sudo systemctl enable hhd@$(whoami) @@ -159,7 +165,7 @@ sudo reboot But I dont want to reboot... ```bash -# Reload hhd's udev rules +# Reload HHD's udev rules sudo udevadm control --reload-rules && sudo udevadm trigger # Restart iio-proxy-service to stop it # from polling the accelerometer @@ -191,21 +197,25 @@ sudo reboot ``` ## Configuring HHD -The reason you added your username to the hhd service was to bind the hhd daemon -to your user. + +The reason you added your username to the `hhd` service was to bind the `hhd` +daemon to your user. + This allows HHD to add configuration files with appropriate permissions to your user dir, which is the following: + ```bash ~/.config/hhd ``` -The global configuration for hhd is found in: +The global configuration for HHD is found in: ```bash ~/.config/hhd/state.yml ``` -This will allow you to set sticky hhd configuration options, such as emulation +This will allow you to set sticky HHD configuration options, such as emulation mode. -Once set, hhd will hot-reload the configurations. + +Once set, HHD will hot-reload the configurations. HHD allows you to create profiles, that set multiple configurations together, through the profile directory: @@ -219,10 +229,12 @@ This API is disabled by default in the current version of HHD. ## Frequently Asked Questions (FAQ) ### What does the current version of HHD do? -The current version of HHD maps the x-input mode of the legion go controllers to -a Dualsense 5 Edge controller, which allows using all of the controller functions. -In addition, it adds support for the steam powerbutton action, so you get a wink -when going to sleep mode. + +The current version of HHD maps the x-input mode of the Legion Go controllers to +a DualSense 5 Edge controller, which allows using all of the controller +functions. In addition, it adds support for the Steam powerbutton action, so you +get a wink when going to sleep mode. + When the controllers are not in x-input mode, HHD adds a shortcuts device so that combos such as Steam and QAM keep working. @@ -233,7 +245,7 @@ These controllers appear in the system as X-BOX/Xpad controllers. This is unrelated to HHD. You can verify by running `` -### Steam reports a Legion Controller and a Shortcuts controller instead of a DS5 +### Steam reports a Legion Controller and a Shortcuts controller instead of a PS5 The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, and FPS). HHD only remaps the x-input mode of the controllers. @@ -253,7 +265,7 @@ reason, and some games read the button order wrong. X-input requires a special udev rule to work, see below. ### Other gamepad modes -HHD remaps the xinput mode of the Legion Go controllers into a DS5 controller. +HHD remaps the x-input mode of the Legion Go controllers into a PS5 controller. All other modes function as normal. In addition, HHD adds a shortcuts device that allows remapping the back buttons and all Legion L, R + button combinations into shortcuts that will work accross @@ -261,19 +273,21 @@ all modes. ### I can not see any controllers before or after installing HHD You are in a distro that does not officially support Legion Go. -One of the fixes that is included in those distros is a udev rule that binds -the xpad driver to the controllers. -This is expected to be included in a future linux kernel so it is not included +One of the fixes that is included in those distros is a `udev` rule that binds +the `xpad` driver to the controllers. +This is expected to be included in a future Linux kernel so it is not included by default by HHD. Under `/etc/udev/rules.d/95-hhd.rules` add the following: + ```bash -# Enable XPAD for the legion go controllers +# Enable xpad for the Legion Go controllers ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" ``` You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) -if you are missing the xpad rule. +if you are missing the `xpad` rule. + ``` ERROR Device with the following not found: evdev.py:122 Vendor ID: ['17ef'] @@ -289,28 +303,28 @@ Some emulators select the original controller as controller 1, which caused issues. This is not the case anymore. -### Yuzu does not work with the DS5 controller +### Yuzu does not work with the PS5 controller See above. -Use yuzu controller settings to select the dual sense controller and disable -steam input. +Use yuzu controller settings to select the DualSense controller and disable +Steam Input. -### Playstation Driver -There is a small touchpad issue with the playstation driver loaded. -Where a cursor might appear when using the touchpad in steam input. +### PlayStation Driver +There is a small touchpad issue with the PlayStation driver loaded. +Where a cursor might appear when using the touchpad in Steam Input. This should be fixed in the latest version. -If not, you can fix it by blacklisting the playstation driver. -However, you will get a lot of issues if you dont exclusively use steam input +If not, you can fix it by blacklisting the PlayStation driver. +However, you will get a lot of issues if you dont exclusively use Steam Input afterwards so do not do it otherwise. You will not be able to use the touchpad as a touchpad anymore and that is the only way to wake up the screen in desktop mode. -Games that do not support Dual Sense natively (e.g., wine games) will not have +Games that do not support DualSense natively (e.g., wine games) will not have a correct gamepad profile and will not work either. ```bash sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/modprobe.d/hhd.conf -o /etc/udev/modprobe.d/hhd.conf ``` ### Freezing Gyro -The gyro used for the DS5 controller is found in the display. +The gyro used for the PS5 controller is found in the display. It may freeze occasionally. This is due to the accelerometer driver being designed to be polled at 5hz, not 100hz. If that is the case, you need to reboot. @@ -329,14 +343,14 @@ gyro support. ### No screen autorotation after install HHD includes a udev rule that disables screen autorotation, because it interferes with gyro support. -This is only done specifically to the accelerometer of the legion go. +This is only done specifically to the accelerometer of the Legion Go. If you do not need gyro, you can do the local install and modify `83-hhd.rules` to remove that rule. The gyro will freeze and will be unusable after that. ### Touchpad right click does not work in desktop -HHD remaps the touchpad of the legion go to the DS5 touchpad. -The playstation driver does not support right clicking. +HHD remaps the touchpad of the Legion Go to the PS5 touchpad. +The PlayStation driver does not support right clicking. Switch to d-input to enable the touchpad when you're in the desktop. You can also disable touchpad emulation in the config or use evdev emulation which does not use the touchpad. @@ -347,7 +361,7 @@ required. In addition, it will break HHD by hiding the controller. You should uninstall it with `sudo pacman -R handygccs-git`. You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) -if handygccs is enabled. +if HandyGCCS is enabled. ``` ERROR Device with the following not found: evdev.py:122 Vendor ID: ['17ef'] @@ -356,14 +370,14 @@ if handygccs is enabled. ``` ### Buttons are mapped incorrectly -Buttons mapped in legion space will carry over to linux. +Buttons mapped in Legion Space will carry over to Linux. This includes both back buttons and legion swap. You can reset each controller by holding Legion R + RT + RB, Legion L + LT + LB. -However, we do not know how to reset the legion space legion button swap at +However, we do not know how to reset the Legion Space legion button swap at this point, so you need to use Legion Space for that. -Another set of obscure issues occur depending on how apps hook to the DS5 controller. -If the playstation driver is not active, the linux kernel creates an evdev node +Another set of obscure issues occur depending on how apps hook to the PS5 controller. +If the PlayStation driver is not active, the Linux kernel creates an evdev node with incorrect mappings (right trigger becomes a stick, etc). If the app hooks directly into the hidraw of the controller, it works properly. If it uses the evdev device its incorrect. From 53ce30608ef2a821776a364f134f65c9bd33ece6 Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Fri, 29 Dec 2023 23:11:15 -0800 Subject: [PATCH 0065/1497] add link to controller kernel patch --- readme.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index cae8a982..927ddf91 100644 --- a/readme.md +++ b/readme.md @@ -272,14 +272,16 @@ and all Legion L, R + button combinations into shortcuts that will work accross all modes. ### I can not see any controllers before or after installing HHD -You are in a distro that does not officially support Legion Go. -One of the fixes that is included in those distros is a `udev` rule that binds -the `xpad` driver to the controllers. -This is expected to be included in a future Linux kernel so it is not included +Your kernel needs to know to use the `xpad` driver for the Legion Go's +controllers. + +This is expected to be included in a future Linux kernel, so it is not included by default by HHD. -Under `/etc/udev/rules.d/95-hhd.rules` add the following: +In the mean time, [apply the patch](https://github.com/torvalds/linux/compare/master...appsforartists:linux:legion-go-controllers.patch), or add a `udev` +rule: +#### `/etc/udev/rules.d/95-hhd.rules` ```bash # Enable xpad for the Legion Go controllers ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" From b7d196219383dc9c460a9657fb9c6143d1169b93 Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Fri, 29 Dec 2023 23:22:42 -0800 Subject: [PATCH 0066/1497] add link to original source for pyhidapi --- src/hhd/controller/lib/hid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/lib/hid.py b/src/hhd/controller/lib/hid.py index a4a3d799..8b4a0d79 100644 --- a/src/hhd/controller/lib/hid.py +++ b/src/hhd/controller/lib/hid.py @@ -1,4 +1,4 @@ -# Sourced from the library hid, modified. +# Forked from https://github.com/apmorton/pyhidapi/blob/master/hid/__init__.py import os import ctypes import atexit From 3d0984e5d86cf7a6d237da58652e00a1c6b9c55b Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 30 Dec 2023 19:36:35 +0200 Subject: [PATCH 0067/1497] add disable click option --- src/hhd/controller/virtual/ds5/__init__.py | 4 ++++ src/hhd/device/legion_go/base.py | 3 ++- src/hhd/device/legion_go/controllers.yaml | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/virtual/ds5/__init__.py b/src/hhd/controller/virtual/ds5/__init__.py index ea1db8d9..64501e0e 100644 --- a/src/hhd/controller/virtual/ds5/__init__.py +++ b/src/hhd/controller/virtual/ds5/__init__.py @@ -168,6 +168,7 @@ def __init__( touchpad_method: TouchpadCorrectionType = "crop_end", use_bluetooth: bool = True, fake_timestamps: bool = False, + disable_click: bool = False, ) -> None: self.available = False self.report = None @@ -175,6 +176,7 @@ def __init__( self.start = 0 self.use_bluetooth = use_bluetooth self.fake_timestamps = fake_timestamps + self.disable_click = disable_click self.touchpad_method: TouchpadCorrectionType = touchpad_method self.ofs = ( @@ -415,6 +417,8 @@ def consume(self, events: Sequence[Event]): ev["value"] / DS5_EDGE_DELTA_TIME_NS ).to_bytes(8, byteorder="little", signed=False)[:4] case "button": + if self.disable_click and ev["code"] == "touchpad_click": + continue if ev["code"] in self.btn_map: set_button(new_rep, self.btn_map[ev["code"]], ev["value"]) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index c489ebe5..a002b295 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -187,7 +187,8 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): match conf["xinput.mode"].to(str): case "ds5e": d_out = DualSense5Edge( - touchpad_method=conf["touchpad_mode"].to(TouchpadCorrectionType) + touchpad_method=conf["touchpad_mode"].to(TouchpadCorrectionType), + disable_click=conf["xinput.ds5e.disable_click"].to(bool), ) d_out2 = None case _: diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 7de58724..c076a411 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -43,6 +43,14 @@ children: Passes through the LEDs to the controller, which allows games to control them. default: True + disable_click: + type: bool + title: Disable Touchpad Click + hint: >- + Disables the touchpad click when the legion go touchpad is held. + Might be useful in nested-desktop, if you tend to hold down the touchpad. + Consider disabling touchpad emulation altogether, to fix the right click. + default: False # # evdev through uinput # From e100107ee1aef3b78f50788966718204e03015d6 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 30 Dec 2023 19:40:08 +0200 Subject: [PATCH 0068/1497] fix fps mode with shortcuts --- src/hhd/device/legion_go/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index a002b295..189d450c 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -152,7 +152,7 @@ def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent) d_shortcuts = GenericGamepadEvdev( vid=[LEN_VID], pid=list(LEN_PIDS), - # name=[re.compile(r"Legion-Controller \d-.. Keyboard")], + name=[re.compile(r"Legion-Controller \d-.. Keyboard")], capabilities={EC("EV_KEY"): [EC("KEY_1")]}, required=True, ) From 8187f8200749d66bf800c049cbe4f5b06ce64342 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 30 Dec 2023 19:54:12 +0200 Subject: [PATCH 0069/1497] typos --- src/hhd/device/legion_go/controllers.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index c076a411..1c52d673 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -2,7 +2,7 @@ type: container tags: [lgc] title: Legion Controllers Configuration hint: >- - Allows for configuring the legion controllers using the built in firmware + Allows for configuring the Legion controllers using the built in firmware commands and enabling emulation modes for various controller types. children: @@ -102,7 +102,7 @@ children: default: disabled share_to_qam: type: bool - title: Map the Legion L button to QAM (instead of Mute) + title: Map the Legion R button to QAM (instead of Mute). default: True touchpad_mode: type: multiple @@ -129,7 +129,7 @@ children: type: bool title: Debug hint: >- - Output controller events to the console + Output controller events to the console (high CPU use). default: False shortcuts: From 1c05f7ffafad488f591528b555df8ab31d3cf5f2 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 00:10:27 +0200 Subject: [PATCH 0070/1497] update readme --- readme.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index 927ddf91..456cb67d 100644 --- a/readme.md +++ b/readme.md @@ -50,6 +50,11 @@ depending on the game. ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PyPi. +> On boot you might see an xbox controller. There is a bug with hiding the controller +> during the boot process. +> Flicking the fps switch on off fixes it and the controller is hidden until the next +> reboot. + ### ChimeraOS ChimeraOS does not ship with `gcc` to compile `hhd` dependencies and the @@ -85,7 +90,7 @@ sudo systemctl disable hhd@$(whoami) sudo pikaur -S handygccs-git sudo pacman -R hhd -sudo systemctl enable handygccs +sudo systemctl enable handycon sudo reboot ``` @@ -238,13 +243,6 @@ get a wink when going to sleep mode. When the controllers are not in x-input mode, HHD adds a shortcuts device so that combos such as Steam and QAM keep working. -### I'm seeing three X-BOX controllers, regardless of whether HHD is running -Currently, there is a bug with the Nobara kernels that adds 2 extra random -Steam Controllers. -These controllers appear in the system as X-BOX/Xpad controllers. -This is unrelated to HHD. -You can verify by running `` - ### Steam reports a Legion Controller and a Shortcuts controller instead of a PS5 The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, and FPS). @@ -304,6 +302,10 @@ However, it is implemented properly in v0.2. Some emulators select the original controller as controller 1, which caused issues. This is not the case anymore. +On boot you might see an xbox controller. There is a bug with hiding the controller +during the boot process. +Flicking the fps switch on off fixes it and the controller is hidden until the next +reboot. ### Yuzu does not work with the PS5 controller See above. From 01543d651dc7c93455a0299587612991951aba06 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 00:28:36 +0200 Subject: [PATCH 0071/1497] fix power button plugin wording --- readme.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 456cb67d..fa002c11 100644 --- a/readme.md +++ b/readme.md @@ -24,8 +24,8 @@ depending on the game. - No weird glyphs - Partial gyro and back button support (only outside Steam) - Touchpad has right click (unlike DualSense Edge) -- Power Button plugin - - Short press makes Steam deck sleep +- Power Button plugin for Big Picture/Steam Deck Mode + - Short press makes Steam backup saves and wink before suspend. - Long press opens Steam power menu - Hiding the original Xbox controller - HTTP based Configuration @@ -367,7 +367,7 @@ You should uninstall it with `sudo pacman -R handygccs-git`. You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) if HandyGCCS is enabled. ``` - ERROR Device with the following not found: evdev.py:122 + ERROR Device with the following not found: Vendor ID: ['17ef'] Product ID: ['6182'] Name: ['Generic X-Box pad'] @@ -415,6 +415,3 @@ hhd # Add user when running with sudo sudo hhd --user $(whoami) ``` - -## License -This codebase is MIT licensed and will always have a copy-left license. From 97ee662a3a300672889133fe1ee639573efb24c3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 15:04:04 +0200 Subject: [PATCH 0072/1497] fix powerbuttond in user mode --- src/hhd/plugins/powerbutton/base.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index e970a949..8581a461 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -49,14 +49,18 @@ def is_steam_gamescope_running(ctx: Context): def run_steam_command(command: str, ctx: Context): global home_path try: - result = subprocess.run( - [ - "su", - ctx.name, - "-c", - f"{expanduser(STEAM_EXE, ctx)} -ifrunning {command}", - ] - ) + if ctx.euid != ctx.uid: + result = subprocess.run( + [ + "su", + ctx.name, + "-c", + f"{expanduser(STEAM_EXE, ctx)} -ifrunning {command}", + ] + ) + else: + result = subprocess.run([expanduser(STEAM_EXE, ctx), "-ifrunning", command]) + return result.returncode == 0 except Exception as e: logger.error(f"Received error when running steam command `{command}`\n{e}") @@ -158,7 +162,7 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) # Add timeout to release the button if steam exits. r = select.select([press_dev.fd, hold_dev.fd], [], [], STEAM_WAIT_DELAY)[0] - + if not r: continue fd = r[0] # handle one button at a time From ba5cb123f75dcf4049168129013c7840fb9b157f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 18:02:39 +0200 Subject: [PATCH 0073/1497] rework touchpad emulation --- src/hhd/controller/base.py | 55 ++++++++-- src/hhd/controller/const.py | 4 +- src/hhd/controller/virtual/ds5/__init__.py | 23 +++-- src/hhd/controller/virtual/ds5/const.py | 2 +- src/hhd/device/legion_go/base.py | 16 ++- src/hhd/device/legion_go/const.py | 2 +- src/hhd/device/legion_go/controllers.yaml | 113 ++++++++++++++------- 7 files changed, 159 insertions(+), 56 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index aebdc21d..9896a39c 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -60,13 +60,7 @@ class ConfigurationEvent(TypedDict): value: Any -Event = ( - ButtonEvent - | AxisEvent - | ConfigurationEvent - | RgbLedEvent - | RumbleEvent -) +Event = ButtonEvent | AxisEvent | ConfigurationEvent | RgbLedEvent | RumbleEvent class Producer: @@ -104,6 +98,9 @@ def consume(self, events: Sequence[Event]): pass +TouchpadAction = Literal["disabled", "left_click", "right_click"] + + class Multiplexer: QAM_DELAY = 0.2 @@ -118,6 +115,8 @@ def __init__( status: None | Literal["both_to_main"] = None, share_to_qam: bool = False, trigger_discrete_lvl: float = 0.99, + touchpad_short: TouchpadAction = "disabled", + touchpad_right: TouchpadAction = "left_click", ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -127,8 +126,11 @@ def __init__( self.status = status self.trigger_discrete_lvl = trigger_discrete_lvl self.share_to_qam = share_to_qam + self.touchpad_short = touchpad_short + self.touchpad_right = touchpad_right self.state = {} + self.touchpad_down = time.perf_counter() self.queue: list[tuple[Event, float]] = [] assert touchpad is None, "touchpad rewiring not supported yet" @@ -250,6 +252,45 @@ def process(self, events: Sequence[Event]): ), ) + if ev["code"] == "touchpad_right": + match self.touchpad_right: + case "disabled": + # TODO: Cleanup + ev["code"] = "" # type: ignore + case "left_click": + ev["code"] = "touchpad_left" + case "right_click": + pass + + if ev["code"] == "touchpad_touch": + if ev["value"]: + self.touchpad_down = curr + elif self.touchpad_short != "disabled" and curr - self.touchpad_down < 0.14: + action = ( + "touchpad_left" + if self.touchpad_short == "left_click" + else "touchpad_right" + ) + self.queue.append( + ( + { + "type": "button", + "code": action, + "value": True, + }, + curr, + ) + ) + self.queue.append( + ( + { + "type": "button", + "code": action, + "value": False, + }, + curr + self.QAM_DELAY, + ) + ) # append A after QAM_DELAY s # TODO: Make it a proper config option diff --git a/src/hhd/controller/const.py b/src/hhd/controller/const.py index aaffed52..d33bfb76 100644 --- a/src/hhd/controller/const.py +++ b/src/hhd/controller/const.py @@ -93,8 +93,10 @@ # Misc "mode", "share", + # Touchpad "touchpad_touch", - "touchpad_click", + "touchpad_left", + "touchpad_right", ] MouseButton = Literal["btn_left", "btn_right", "btn_middle", "btn_side", "btn_extra"] diff --git a/src/hhd/controller/virtual/ds5/__init__.py b/src/hhd/controller/virtual/ds5/__init__.py index 64501e0e..05104b57 100644 --- a/src/hhd/controller/virtual/ds5/__init__.py +++ b/src/hhd/controller/virtual/ds5/__init__.py @@ -168,7 +168,10 @@ def __init__( touchpad_method: TouchpadCorrectionType = "crop_end", use_bluetooth: bool = True, fake_timestamps: bool = False, - disable_click: bool = False, + short_touch_is_click: bool = False, + long_press_mode: Literal[ + "disabled", "left_click", "right_click" + ] = "left_click", ) -> None: self.available = False self.report = None @@ -176,8 +179,9 @@ def __init__( self.start = 0 self.use_bluetooth = use_bluetooth self.fake_timestamps = fake_timestamps - self.disable_click = disable_click self.touchpad_method: TouchpadCorrectionType = touchpad_method + self.short_touch_is_click = short_touch_is_click + self.long_press_mode = long_press_mode self.ofs = ( DS5_INPUT_REPORT_BT_OFS if use_bluetooth else DS5_INPUT_REPORT_USB_OFS @@ -207,6 +211,7 @@ def open(self) -> Sequence[int]: self.state: dict = defaultdict(lambda: 0) self.rumble = False self.touchpad_touch = False + self.touchpad_down = time.perf_counter() self.start = time.perf_counter_ns() self.fd = self.dev.open() @@ -417,16 +422,20 @@ def consume(self, events: Sequence[Event]): ev["value"] / DS5_EDGE_DELTA_TIME_NS ).to_bytes(8, byteorder="little", signed=False)[:4] case "button": - if self.disable_click and ev["code"] == "touchpad_click": - continue if ev["code"] in self.btn_map: set_button(new_rep, self.btn_map[ev["code"]], ev["value"]) - # Fix touchpad click requiring touch, and also activate second - # button for right click + # Fix touchpad click requiring touch if ev["code"] == "touchpad_touch": self.touchpad_touch = ev["value"] - if ev["code"] == "touchpad_click": + if ev["code"] == "touchpad_left": + set_button( + new_rep, + self.btn_map["touchpad_touch"], + ev["value"] or self.touchpad_touch, + ) + # Also add right click + if ev["code"] == "touchpad_right": set_button( new_rep, self.btn_map["touchpad_touch"], diff --git a/src/hhd/controller/virtual/ds5/const.py b/src/hhd/controller/virtual/ds5/const.py index 27e773c5..2ac9fecd 100644 --- a/src/hhd/controller/virtual/ds5/const.py +++ b/src/hhd/controller/virtual/ds5/const.py @@ -157,7 +157,7 @@ def prefill_ds5_report(bluetooth: bool): "share": BM(((ofs + 9) << 3) + 5), "touchpad_touch": BM(((ofs + 32) << 3), flipped=True), "touchpad_touch2": BM(((ofs + 36) << 3), flipped=True), - "touchpad_click": BM(((ofs + 9) << 3) + 6), + "touchpad_left": BM(((ofs + 9) << 3) + 6), "mode": BM(((ofs + 9) << 3) + 7), } diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 189d450c..f4a916d8 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -5,10 +5,10 @@ import sys import time from threading import Event as TEvent -from typing import Sequence, cast +from typing import Sequence, Literal from hhd.controller import Button, Consumer, Event, Producer -from hhd.controller.base import Multiplexer +from hhd.controller.base import Multiplexer, TouchpadAction from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev, unhide_all @@ -108,6 +108,9 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven logger.error( f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." ) + # Raise exception + if conf.get("debug", False): + raise e time.sleep(ERROR_DELAY) finally: if gyro_fixer: @@ -187,8 +190,9 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): match conf["xinput.mode"].to(str): case "ds5e": d_out = DualSense5Edge( - touchpad_method=conf["touchpad_mode"].to(TouchpadCorrectionType), - disable_click=conf["xinput.ds5e.disable_click"].to(bool), + touchpad_method=conf["touchpad.emulation.correction"].to( + TouchpadCorrectionType + ), ) d_out2 = None case _: @@ -269,6 +273,8 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): led="main_to_sides", status="both_to_main", share_to_qam=conf["share_to_qam"].to(bool), + touchpad_short=conf["touchpad.emulation.short"].to(TouchpadAction), + touchpad_right=conf["touchpad.emulation.hold"].to(TouchpadAction), ) REPORT_FREQ_MIN = 25 @@ -296,7 +302,7 @@ def prepare(m): prepare(d_gyro) prepare(d_shortcuts) if ( - conf["touchpad_mode"].to(str) != "disabled" + conf["touchpad.mode"].to(str) != "disabled" and conf["xinput.mode"].to(str) == "ds5e" ): prepare(d_touch) diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index 052a512f..038f7252 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -5,7 +5,7 @@ LGO_TOUCHPAD_BUTTON_MAP: dict[int, Button] = to_map( { "touchpad_touch": [B("BTN_TOOL_FINGER")], # also BTN_TOUCH - "touchpad_click": [B("BTN_TOOL_DOUBLETAP")], + "touchpad_right": [B("BTN_TOOL_DOUBLETAP")], } ) diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 1c52d673..999d0a0d 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -43,14 +43,6 @@ children: Passes through the LEDs to the controller, which allows games to control them. default: True - disable_click: - type: bool - title: Disable Touchpad Click - hint: >- - Disables the touchpad click when the legion go touchpad is held. - Might be useful in nested-desktop, if you tend to hold down the touchpad. - Consider disabling touchpad emulation altogether, to fix the right click. - default: False # # evdev through uinput # @@ -104,33 +96,79 @@ children: type: bool title: Map the Legion R button to QAM (instead of Mute). default: True - touchpad_mode: - type: multiple - title: Touchpad correction type - hint: >- - The legion touchpad is square, whereas the DS5 one is rectangular. - Therefore, it needs to be corrected. - "Contain" maintain the whole DS5 touchpad and part of the Legion - one is unused. "Crop" uses the full legion touchpad, and limits - the area of the DS5. "Stretch" uses both fully (distorted). - "Crop End" enables use in steam input as the right touchpad. - Set to "Disabled" to not remap. - options: - disabled: "Disabled" - stretch: "Stretch" - crop_center: "Crop Center" - crop_start: "Crop Start" - crop_end: "Crop End" - contain_start: "Contain Start" - contain_end: "Contain End" - contain_center: "Contain Center" - default: crop_end - debug: - type: bool - title: Debug + + touchpad: + type: mode + tags: [touchpad] + title: Touchpad Emulation hint: >- - Output controller events to the console (high CPU use). - default: False + Use an emulated touchpad (currently only on Dualsense controller). + + default: emulation + modes: + # + # No emulation + # + disabled: + type: container + title: Disabled + hint: >- + Does not modify the touchpad. + emulation: + type: container + title: Enabled + hint: >- + Emulates the touchpad. + children: + correction: + type: multiple + title: Correction Type + hint: >- + The legion touchpad is square, whereas the DS5 one is rectangular. + Therefore, it needs to be corrected. + "Contain" maintain the whole DS5 touchpad and part of the Legion + one is unused. "Crop" uses the full legion touchpad, and limits + the area of the DS5. "Stretch" uses both fully (distorted). + "Crop End" enables use in steam input as the right touchpad. + Set to "Disabled" to not remap. + (Dualsense only). + options: + stretch: "Stretch" + crop_center: "Crop Center" + crop_start: "Crop Start" + crop_end: "Crop End" + contain_start: "Contain Start" + contain_end: "Contain End" + contain_center: "Contain Center" + default: crop_end + + short: + type: multiple + title: Short Action + hint: >- + Maps short touches (less than 0.2s) to a touchpad action. + Left click is sent as a physical press of the touchpad. + Right click is sent as a double tap (support varies). + (Dualsense only). + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "disabled" + + hold: + type: multiple + title: Hold Action + hint: >- + What action should be triggered when the legion touchpad is held. + Left click is sent as a physical press of the touchpad. + Right click is sent as a double tap (support varies). + (Dualsense only). + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "left_click" shortcuts: type: bool @@ -139,3 +177,10 @@ children: When in other modes (dinput, dual dinput, and fps), enable a shortcuts controller to restore Guide, QAM, and shortcut functionality. default: True + debug: + type: bool + title: Debug + hint: >- + Output controller events to the console (high CPU use) and raises exceptions + (HHD will crash on errors). + default: False From 5b2984e9fce53f07628c9c77e66dba133dc01a53 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 19:34:56 +0200 Subject: [PATCH 0074/1497] add virtual touchpad --- src/hhd/controller/virtual/ds5/__init__.py | 12 ++--- src/hhd/controller/virtual/uinput/__init__.py | 53 ++++++++++++++++-- src/hhd/controller/virtual/uinput/const.py | 54 +++++++++++++++++++ src/hhd/device/legion_go/base.py | 36 ++++++++++--- src/hhd/device/legion_go/controllers.yaml | 26 +++++---- 5 files changed, 155 insertions(+), 26 deletions(-) diff --git a/src/hhd/controller/virtual/ds5/__init__.py b/src/hhd/controller/virtual/ds5/__init__.py index 05104b57..fb8d3172 100644 --- a/src/hhd/controller/virtual/ds5/__init__.py +++ b/src/hhd/controller/virtual/ds5/__init__.py @@ -168,10 +168,7 @@ def __init__( touchpad_method: TouchpadCorrectionType = "crop_end", use_bluetooth: bool = True, fake_timestamps: bool = False, - short_touch_is_click: bool = False, - long_press_mode: Literal[ - "disabled", "left_click", "right_click" - ] = "left_click", + enable_touchpad: bool = True, ) -> None: self.available = False self.report = None @@ -180,8 +177,7 @@ def __init__( self.use_bluetooth = use_bluetooth self.fake_timestamps = fake_timestamps self.touchpad_method: TouchpadCorrectionType = touchpad_method - self.short_touch_is_click = short_touch_is_click - self.long_press_mode = long_press_mode + self.enable_touchpad = enable_touchpad self.ofs = ( DS5_INPUT_REPORT_BT_OFS if use_bluetooth else DS5_INPUT_REPORT_USB_OFS @@ -375,6 +371,8 @@ def consume(self, events: Sequence[Event]): for ev in events: match ev["type"]: case "axis": + if not self.enable_touchpad and ev["code"].startswith("touchpad"): + continue if ev["code"] in self.axis_map: encode_axis(new_rep, self.axis_map[ev["code"]], ev["value"]) # DPAD is weird @@ -422,6 +420,8 @@ def consume(self, events: Sequence[Event]): ev["value"] / DS5_EDGE_DELTA_TIME_NS ).to_bytes(8, byteorder="little", signed=False)[:4] case "button": + if not self.enable_touchpad and ev["code"].startswith("touchpad"): + continue if ev["code"] in self.btn_map: set_button(new_rep, self.btn_map[ev["code"]], ev["value"]) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index af52e7d0..0aec0102 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -1,8 +1,9 @@ import logging +import time from typing import Sequence, cast import evdev -from evdev import UInput, AbsInfo +from evdev import AbsInfo, UInput from hhd.controller import Axis, Button, Consumer, Producer from hhd.controller.base import Event, can_read @@ -22,6 +23,7 @@ def __init__( pid: int = HHD_PID_GAMEPAD, name: str = "Handheld Daemon Controller", phys: str = "phys-hhd-gamepad", + output_imu_timestamps: bool = False, output_timestamps: bool = False, ) -> None: self.capabilities = capabilities @@ -32,6 +34,7 @@ def __init__( self.vid = vid self.pid = pid self.phys = phys + self.output_imu_timestamps = output_imu_timestamps self.output_timestamps = output_timestamps self.ofs = 0 self.sys_ofs = 0 @@ -47,6 +50,8 @@ def open(self) -> Sequence[int]: product=self.pid, phys=self.phys, ) + self.touchpad_aspect = 1 + self.touch_id = 1 self.fd = self.dev.fd return [self.fd] @@ -65,11 +70,23 @@ def consume(self, events: Sequence[Event]): case "axis": if ev["code"] in self.axis_map: ax = self.axis_map[ev["code"]] - val = int(ax.scale * ev["value"] + ax.offset) + if ev["code"] == "touchpad_x": + val = int( + self.touchpad_aspect + * (ax.scale * ev["value"] + ax.offset) + ) + else: + val = int(ax.scale * ev["value"] + ax.offset) if ax.bounds: val = min(max(val, ax.bounds[0]), ax.bounds[1]) self.dev.write(B("EV_ABS"), ax.id, val) - elif self.output_timestamps and ev["code"] in ( + + if ev["code"] == "touchpad_x": + self.dev.write(B("EV_ABS"), B("ABS_MT_POSITION_X"), val) + elif ev["code"] == "touchpad_y": + self.dev.write(B("EV_ABS"), B("ABS_MT_POSITION_Y"), val) + + elif self.output_imu_timestamps and ev["code"] in ( "accel_ts", "gyro_ts", ): @@ -81,14 +98,42 @@ def consume(self, events: Sequence[Event]): self.ofs = ts ts -= self.ofs self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) - pass case "button": if ev["code"] in self.btn_map: + if ev["code"] == "touchpad_touch": + self.dev.write( + B("EV_ABS"), + B("ABS_MT_TRACKING_ID"), + self.touch_id if ev["value"] else -1, + ) + self.dev.write( + B("EV_KEY"), + B("BTN_TOOL_FINGER"), + 1 if ev["value"] else 0, + ) + self.touch_id += 1 + if self.touch_id > 500: + self.touch_id = 1 self.dev.write( B("EV_KEY"), self.btn_map[ev["code"]], 1 if ev["value"] else 0, ) + + case "configuration": + if ev["code"] == "touchpad_aspect_ratio": + self.touchpad_aspect = float(ev["value"]) + + if self.output_timestamps: + # We have timestamps with ns accuracy. + # Evdev expects us accuracy + ts = time.perf_counter_ns() // 1000 + # Use an ofs to avoid overflowing + if ts > self.ofs + 2**30: + self.ofs = ts + ts -= self.ofs + self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) + self.dev.syn() def produce(self, fds: Sequence[int]) -> Sequence[Event]: diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index 8f850ec2..75b1155d 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -360,6 +360,49 @@ class AX(NamedTuple): B("EV_MSC", 4): [B("MSC_SCAN", 4)], } +TOUCHPAD_CAPABILITIES = { + B("EV_KEY", 1): [ + B(["BTN_LEFT", "BTN_MOUSE"], 272), + B("BTN_RIGHT"), + B("BTN_TOOL_FINGER", 325), + B("BTN_TOUCH", 330), + B("BTN_TOOL_DOUBLETAP", 333), + B("BTN_TOOL_TRIPLETAP", 334), + ], + B("EV_ABS", 3): [ + ( + B("ABS_X", 0), + AbsInfo(value=172, min=0, max=2048, fuzz=0, flat=0, resolution=36), + ), + ( + B("ABS_Y", 1), + AbsInfo(value=472, min=0, max=2048, fuzz=0, flat=0, resolution=36), + ), + ( + B("ABS_MT_SLOT", 47), + AbsInfo(value=0, min=0, max=2, fuzz=0, flat=0, resolution=0), + ), + ( + B("ABS_MT_POSITION_X", 53), + AbsInfo(value=0, min=0, max=2048, fuzz=0, flat=0, resolution=36), + ), + ( + B("ABS_MT_POSITION_Y", 54), + AbsInfo(value=0, min=0, max=2048, fuzz=0, flat=0, resolution=36), + ), + ( + B("ABS_MT_TOOL_TYPE", 55), + AbsInfo(value=0, min=0, max=2, fuzz=0, flat=0, resolution=0), + ), + ( + B("ABS_MT_TRACKING_ID", 57), + AbsInfo(value=0, min=0, max=65535, fuzz=0, flat=0, resolution=0), + ), + ], + B("EV_MSC", 4): [B("MSC_TIMESTAMP", 5)], +} + + GAMEPAD_BUTTON_MAP: dict[Button, int] = { # Gamepad "a": B("BTN_A"), @@ -405,3 +448,14 @@ class AX(NamedTuple): "gyro_y": AX(B("ABS_RY"), 1024, bounds=(-2097152, 2097152)), "gyro_z": AX(B("ABS_RZ"), 1024, bounds=(-2097152, 2097152)), } + +TOUCHPAD_AXIS_MAP: dict[Axis, AX] = { + "touchpad_x": AX(B("ABS_X"), 1023, bounds=(0, 2048)), + "touchpad_y": AX(B("ABS_Y"), 1023, bounds=(0, 2048)), +} + +TOUCHPAD_BUTTON_MAP: dict[Button, int] = { + "touchpad_touch": B("BTN_TOUCH"), + "touchpad_right": B("BTN_RIGHT"), + "touchpad_left": B("BTN_LEFT"), +} diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index f4a916d8..c17851db 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -22,6 +22,10 @@ MOTION_AXIS_MAP, MOTION_CAPABILITIES, HHD_PID_MOTION, + HHD_PID_TOUCHPAD, + TOUCHPAD_CAPABILITIES, + TOUCHPAD_AXIS_MAP, + TOUCHPAD_BUTTON_MAP, ) from hhd.plugins import Config, Context, Emitter @@ -187,12 +191,15 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): debug = conf.get("debug", False) # Output - match conf["xinput.mode"].to(str): + ds5_touch = conf["xinput.ds5e.touchpad"].to(bool) + xmode = conf["xinput.mode"].to(str) + match xmode: case "ds5e": d_out = DualSense5Edge( touchpad_method=conf["touchpad.emulation.correction"].to( TouchpadCorrectionType ), + enable_touchpad=ds5_touch, ) d_out2 = None case _: @@ -205,10 +212,26 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): pid=HHD_PID_MOTION, btn_map={}, axis_map=MOTION_AXIS_MAP, - output_timestamps=True, + output_imu_timestamps=True, ) else: d_out2 = None + + if conf["touchpad.mode"].to(str) == "emulation" and ( + xmode != "ds5e" or not ds5_touch + ): + d_out_touch = UInputDevice( + name="Handheld Daemon Touchpad", + phys="phys-hhd-legion", + capabilities=TOUCHPAD_CAPABILITIES, + pid=HHD_PID_TOUCHPAD, + btn_map=TOUCHPAD_BUTTON_MAP, + axis_map=TOUCHPAD_AXIS_MAP, + output_timestamps=True, + ) + else: + d_out_touch = None + # Imu d_accel = AccelImu() d_gyro = GyroImu() @@ -301,12 +324,11 @@ def prepare(m): if conf.get("gyro", False): prepare(d_gyro) prepare(d_shortcuts) - if ( - conf["touchpad.mode"].to(str) != "disabled" - and conf["xinput.mode"].to(str) == "ds5e" - ): + if conf["touchpad.mode"].to(str) == "emulation": prepare(d_touch) prepare(d_raw) + if d_out_touch: + prepare(d_out_touch) prepare(d_out) if d_out2: prepare(d_out2) @@ -335,6 +357,8 @@ def prepare(m): d_out.consume(evs) if d_out2: d_out2.consume(evs) + if d_out_touch: + d_out_touch.consume(evs) # If unbounded, the total number of events per second is the sum of all # events generated by the producers. diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 999d0a0d..d744de18 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -43,6 +43,14 @@ children: Passes through the LEDs to the controller, which allows games to control them. default: True + + touchpad: + type: bool + title: Remap touchpad + hint: >- + Remaps the DS5 touchpad when touchpad emulation is enabled. + Right click will not work under gamescope. + default: True # # evdev through uinput # @@ -118,7 +126,7 @@ children: type: container title: Enabled hint: >- - Emulates the touchpad. + Adds an emulated touchpad. children: correction: type: multiple @@ -130,8 +138,6 @@ children: one is unused. "Crop" uses the full legion touchpad, and limits the area of the DS5. "Stretch" uses both fully (distorted). "Crop End" enables use in steam input as the right touchpad. - Set to "Disabled" to not remap. - (Dualsense only). options: stretch: "Stretch" crop_center: "Crop Center" @@ -147,9 +153,9 @@ children: title: Short Action hint: >- Maps short touches (less than 0.2s) to a touchpad action. - Left click is sent as a physical press of the touchpad. - Right click is sent as a double tap (support varies). - (Dualsense only). + Emulated touchpad uses virtual buttons. + Dualsense uses a physical press for left and a double tap for + right click. options: disabled: Disabled left_click: Left Click @@ -160,10 +166,10 @@ children: type: multiple title: Hold Action hint: >- - What action should be triggered when the legion touchpad is held. - Left click is sent as a physical press of the touchpad. - Right click is sent as a double tap (support varies). - (Dualsense only). + Maps long touches (more than 2s) to a touchpad action. + Emulated touchpad uses virtual buttons. + Dualsense uses a physical press for left and a double tap for + right click. options: disabled: Disabled left_click: Left Click From ccae6b207cadfbdaef292270c4fc6c855f71ba03 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 19:45:09 +0200 Subject: [PATCH 0075/1497] tweak wording, bump version --- pyproject.toml | 2 +- src/hhd/device/legion_go/controllers.yaml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1c2542db..511d7c4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.6" +version = "0.2.7" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index d744de18..7c411d8f 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -48,7 +48,7 @@ children: type: bool title: Remap touchpad hint: >- - Remaps the DS5 touchpad when touchpad emulation is enabled. + Remaps to the DS5 touchpad when touchpad emulation is enabled. Right click will not work under gamescope. default: True # @@ -110,7 +110,9 @@ children: tags: [touchpad] title: Touchpad Emulation hint: >- - Use an emulated touchpad (currently only on Dualsense controller). + Use an emulated touchpad. + Part of the controller if it is supported (e.g., Dualsense) or a virtual + one if not. default: emulation modes: From 5337d2cca0a62874a7462236dfba7ea737c32455 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 31 Dec 2023 19:54:43 +0200 Subject: [PATCH 0076/1497] enable rest api by default --- src/hhd/settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 17dec412..10c4f75a 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -11,7 +11,7 @@ http: title: Enable REST API. hint: >- Enables the rest API of Handheld Daemon - default: False + default: True port: type: int title: REST API Port From e349dac5e616da4f60394abd6da4afdf04a513ef Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 1 Jan 2024 17:58:21 +0200 Subject: [PATCH 0077/1497] add more trigger buttons, use convention from hid_steam for paddles --- src/hhd/controller/virtual/uinput/const.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index 75b1155d..b6393763 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -81,6 +81,20 @@ class AX(NamedTuple): B("BTN_TRIGGER_HAPPY4"), B("BTN_TRIGGER_HAPPY5"), B("BTN_TRIGGER_HAPPY6"), + B("BTN_TRIGGER_HAPPY7"), + B("BTN_TRIGGER_HAPPY8"), + B("BTN_TRIGGER_HAPPY9"), + B("BTN_TRIGGER_HAPPY10"), + B("BTN_TRIGGER_HAPPY11"), + B("BTN_TRIGGER_HAPPY12"), + B("BTN_TRIGGER_HAPPY13"), + B("BTN_TRIGGER_HAPPY14"), + B("BTN_TRIGGER_HAPPY15"), + B("BTN_TRIGGER_HAPPY16"), + B("BTN_TRIGGER_HAPPY17"), + B("BTN_TRIGGER_HAPPY18"), + B("BTN_TRIGGER_HAPPY19"), + B("BTN_TRIGGER_HAPPY20"), ], B("EV_ABS", 3): [ ( @@ -420,12 +434,13 @@ class AX(NamedTuple): "select": B("BTN_SELECT"), # Misc "mode": B("BTN_MODE"), + "share": B("BTN_TRIGGER_HAPPY20"), # Back buttons "extra_l1": B("BTN_TRIGGER_HAPPY1"), - "extra_l2": B("BTN_TRIGGER_HAPPY2"), - "extra_l3": B("BTN_TRIGGER_HAPPY5"), - "extra_r1": B("BTN_TRIGGER_HAPPY3"), + "extra_r1": B("BTN_TRIGGER_HAPPY2"), + "extra_l2": B("BTN_TRIGGER_HAPPY3"), "extra_r2": B("BTN_TRIGGER_HAPPY4"), + "extra_l3": B("BTN_TRIGGER_HAPPY5"), "extra_r3": B("BTN_TRIGGER_HAPPY6"), } From 90788f91932812a3ded514955359b85f387e1e85 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 1 Jan 2024 21:26:53 +0200 Subject: [PATCH 0078/1497] fix bug which caused old devices to not be removed --- src/hhd/controller/virtual/uinput/__init__.py | 11 +++++++++++ src/hhd/device/legion_go/base.py | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 0aec0102..808af806 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -13,6 +13,16 @@ logger = logging.getLogger(__name__) +# Monkey patch Uinput device to avoid issues +# _find_device() may crash when controllers +# disconnect. We dont use the produced device anyway. +def _patch(*args, **kwargs): + pass + + +UInput._find_device = _patch + + class UInputDevice(Consumer, Producer): def __init__( self, @@ -58,6 +68,7 @@ def open(self) -> Sequence[int]: def close(self, exit: bool) -> bool: if self.dev: self.dev.close() + self.dev = None self.input = None self.fd = None return True diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index c17851db..fca04474 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -182,9 +182,9 @@ def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent) logger.info(evs) d_uinput.consume(evs) finally: + d_uinput.close(True) d_shortcuts.close(True) d_raw.close(True) - d_uinput.close(True) def controller_loop_xinput(conf: Config, should_exit: TEvent): @@ -311,8 +311,8 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): fd_to_dev = {} def prepare(m): - fs = m.open() devs.append(m) + fs = m.open() fds.extend(fs) for f in fs: fd_to_dev[f] = m From 9950a22651fac1fdf14087f1d24851978d37ed5a Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 1 Jan 2024 21:39:04 +0200 Subject: [PATCH 0079/1497] hide unfinished ui, plug hhd-decky if someone visits the API --- src/hhd/http/index.html | 12 ++++++++---- src/hhd/http/static/style.css | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/hhd/http/index.html b/src/hhd/http/index.html index df7de316..da8f6897 100644 --- a/src/hhd/http/index.html +++ b/src/hhd/http/index.html @@ -1,18 +1,22 @@ + HHD Settings - + +

HHD Settings

-

Not working yet chief!

+

Not ready yet chief!

+

But the API works, check out hhd-decky.

- + - + + \ No newline at end of file diff --git a/src/hhd/http/static/style.css b/src/hhd/http/static/style.css index fcddbafe..ba01b21f 100644 --- a/src/hhd/http/static/style.css +++ b/src/hhd/http/static/style.css @@ -1,3 +1,7 @@ h1 { color: purple; +} + +body { + font-family: Arial, Helvetica, sans-serif; } \ No newline at end of file From 2d504cebac464042c70893ee3b69c8060d4f8032 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 1 Jan 2024 21:40:15 +0200 Subject: [PATCH 0080/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 511d7c4e..71eab39b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.7" +version = "0.2.8" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 020024c0d769f3a2a10118e0c2a5f0fc45c1a4e4 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 03:12:56 +0200 Subject: [PATCH 0081/1497] add disclaimer to touchpad config --- src/hhd/device/legion_go/controllers.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 7c411d8f..71fa77e3 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -157,7 +157,8 @@ children: Maps short touches (less than 0.2s) to a touchpad action. Emulated touchpad uses virtual buttons. Dualsense uses a physical press for left and a double tap for - right click. + right click (support for double tap varies; enable tap to click + in touchpad settings). options: disabled: Disabled left_click: Left Click @@ -171,7 +172,8 @@ children: Maps long touches (more than 2s) to a touchpad action. Emulated touchpad uses virtual buttons. Dualsense uses a physical press for left and a double tap for - right click. + right click (support for double tap varies; enable tap to click + in touchpad settings). options: disabled: Disabled left_click: Left Click From bcfb5a90bc3531ed9c6f4c9bad1b7ea4423a0b0c Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 10:31:08 +0200 Subject: [PATCH 0082/1497] switch to getpass to avoid obscure errors --- src/hhd/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/utils.py b/src/hhd/utils.py index 69f875cb..4e4e6adf 100644 --- a/src/hhd/utils.py +++ b/src/hhd/utils.py @@ -2,6 +2,7 @@ import os import subprocess from typing import NamedTuple +import getpass from hhd.plugins import Context @@ -20,7 +21,7 @@ def get_context(user: str | None) -> Context | None: "Running as root without a specified user (`--user`). Configs will be placed at `/root/.config`." ) print(f"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") - return Context(uid, gid, uid, gid, os.getlogin()) + return Context(uid, gid, uid, gid, getpass.getuser()) euid = int( subprocess.run( From ee58d55703b721e78b506761a95f692eb532a45d Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 17:38:05 +0200 Subject: [PATCH 0083/1497] cleanup touchpad config, restructure project to prepare for more devs --- src/hhd/controller/__init__.py | 15 +- src/hhd/controller/base.py | 131 +++++++++++- src/hhd/controller/outputs.py | 71 +++++++ .../virtual/{ds5 => dualsense}/__init__.py | 192 ++++-------------- .../virtual/{ds5 => dualsense}/const.py | 1 - src/hhd/controller/virtual/uinput/__init__.py | 7 +- src/hhd/controller/virtual/uinput/const.py | 2 +- src/hhd/device/legion_go/base.py | 86 ++------ src/hhd/device/legion_go/controllers.yaml | 94 ++++++--- 9 files changed, 340 insertions(+), 259 deletions(-) create mode 100644 src/hhd/controller/outputs.py rename src/hhd/controller/virtual/{ds5 => dualsense}/__init__.py (73%) rename src/hhd/controller/virtual/{ds5 => dualsense}/const.py (99%) diff --git a/src/hhd/controller/__init__.py b/src/hhd/controller/__init__.py index 66894a3e..a509d332 100644 --- a/src/hhd/controller/__init__.py +++ b/src/hhd/controller/__init__.py @@ -1,4 +1,13 @@ -from .base import Consumer, Event, Producer, can_read +from .base import ( + Consumer, + Event, + Producer, + can_read, + TouchpadCorrectionType, + TouchpadCorrection, + correct_touchpad, +) +from .outputs import get_outputs from .const import Axis, Button, Configuration __all__ = [ @@ -9,4 +18,8 @@ "Consumer", "Producer", "can_read", + "TouchpadCorrectionType", + "TouchpadCorrection", + "correct_touchpad", + "get_outputs", ] diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 9896a39c..7c0b8c11 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -1,8 +1,12 @@ +import logging import select -from typing import Any, Literal, Sequence, TypedDict import time +from typing import Any, Literal, NamedTuple, Sequence, TypedDict + from .const import Axis, Button, Configuration +logger = logging.getLogger(__name__) + class RumbleEvent(TypedDict): """In case ev effects is too complicated. If both magnitudes are 0, disable rumble.""" @@ -63,6 +67,126 @@ class ConfigurationEvent(TypedDict): Event = ButtonEvent | AxisEvent | ConfigurationEvent | RgbLedEvent | RumbleEvent +class TouchpadCorrection(NamedTuple): + x_mult: float = 1 + x_ofs: float = 0 + x_clamp: tuple[float, float] = (0, 1) + y_mult: float = 1 + y_ofs: float = 0 + y_clamp: tuple[float, float] = (0, 1) + + +TouchpadCorrectionType = Literal[ + "stretch", + "crop_center", + "crop_start", + "crop_end", + "contain_start", + "contain_end", + "contain_center", + "disabled", +] + + +def correct_touchpad( + width: int, height: int, aspect: float, method: TouchpadCorrectionType +): + dst = width / height + src = aspect + ratio = dst / src + + match method: + case "crop_center": + if ratio > 1: + new_width = width / ratio + return TouchpadCorrection( + x_mult=new_width, + x_ofs=(width - new_width) / 2, + y_mult=height, + y_ofs=0, + ) + else: + new_height = height * ratio + return TouchpadCorrection( + x_mult=width, + x_ofs=0, + y_mult=new_height, + y_ofs=(height - new_height) / 2, + ) + case "crop_start": + if ratio > 1: + new_width = width / ratio + return TouchpadCorrection( + x_mult=new_width, + x_ofs=0, + y_mult=height, + y_ofs=0, + ) + else: + new_height = height * ratio + return TouchpadCorrection( + x_mult=width, + x_ofs=0, + y_mult=new_height, + y_ofs=0, + ) + case "crop_end": + if ratio > 1: + new_width = width / ratio + return TouchpadCorrection( + x_mult=new_width, + x_ofs=(width - new_width), + y_mult=height, + y_ofs=0, + ) + else: + new_height = height * ratio + return TouchpadCorrection( + x_mult=width, + x_ofs=0, + y_mult=new_height, + y_ofs=(height - new_height), + ) + case "contain_center": + if ratio > 1: + bound = (ratio - 1) / ratio / 2 + return TouchpadCorrection( + x_mult=width, y_mult=height, y_clamp=(bound, 1 - bound) + ) + else: + bound = (1 - ratio) / 2 + return TouchpadCorrection( + x_mult=width, y_mult=height, x_clamp=(bound, 1 - bound) + ) + case "contain_start": + if ratio > 1: + bound = (ratio - 1) / ratio + return TouchpadCorrection( + x_mult=width, y_mult=height, y_clamp=(0, 1 - bound) + ) + else: + bound = (1 - ratio) / 2 + return TouchpadCorrection( + x_mult=width, y_mult=height, x_clamp=(0, 1 - bound) + ) + case "contain_end": + if ratio > 1: + bound = (ratio - 1) / ratio + return TouchpadCorrection( + x_mult=width, y_mult=height, y_clamp=(bound, 1) + ) + else: + bound = (1 - ratio) / 2 + return TouchpadCorrection( + x_mult=width, y_mult=height, x_clamp=(bound, 1) + ) + case "stretch" | "disabled": + return TouchpadCorrection(x_mult=width, y_mult=height) + + logger.error(f"Touchpad correction method '{method}' not found.") + return TouchpadCorrection(x_mult=width, y_mult=height) + + class Producer: def open(self) -> Sequence[int]: """Opens and returns a list of file descriptors that should be listened to.""" @@ -265,7 +389,10 @@ def process(self, events: Sequence[Event]): if ev["code"] == "touchpad_touch": if ev["value"]: self.touchpad_down = curr - elif self.touchpad_short != "disabled" and curr - self.touchpad_down < 0.14: + elif ( + self.touchpad_short != "disabled" + and curr - self.touchpad_down < 0.14 + ): action = ( "touchpad_left" if self.touchpad_short == "left_click" diff --git a/src/hhd/controller/outputs.py b/src/hhd/controller/outputs.py new file mode 100644 index 00000000..9e2f1303 --- /dev/null +++ b/src/hhd/controller/outputs.py @@ -0,0 +1,71 @@ +from typing import Any, Mapping, Sequence + +from .base import Consumer, Producer +from .virtual.dualsense import DualsenseEdge, TouchpadCorrectionType +from .virtual.uinput import ( + HHD_PID_MOTION, + HHD_PID_TOUCHPAD, + MOTION_AXIS_MAP, + MOTION_CAPABILITIES, + TOUCHPAD_AXIS_MAP, + TOUCHPAD_BUTTON_MAP, + TOUCHPAD_CAPABILITIES, + UInputDevice, +) + + +def get_outputs( + conf, touch_conf, motion: bool = False +) -> tuple[Sequence[Producer], Sequence[Consumer], Mapping[str, Any]]: + producers = [] + consumers = [] + + controller = conf["mode"].to(str) + touchpad = touch_conf["mode"].to(str) + uses_touch = False + match controller: + case "dualsense": + uses_touch = touchpad == "controller" + d = DualsenseEdge( + touchpad_method=touch_conf["controller.correction"].to( + TouchpadCorrectionType + ), + enable_touchpad=uses_touch, + enable_rgb=conf["dualsense.led_support"], + ) + producers.append(d) + consumers.append(d) + case "uinput": + d = UInputDevice(phys="phys-hhd-main") + producers.append(d) + consumers.append(d) + if motion: + d = UInputDevice( + name="Handheld Daemon Controller Motion Sensors", + phys="phys-hhd-main", + capabilities=MOTION_CAPABILITIES, + pid=HHD_PID_MOTION, + btn_map={}, + axis_map=MOTION_AXIS_MAP, + output_imu_timestamps=True, + ) + producers.append(d) + consumers.append(d) + case _: + raise RuntimeError(f"Invalid controller type: '{controller}'.") + + if touchpad == "emulation": + d = UInputDevice( + name="Handheld Daemon Touchpad", + phys="phys-hhd-main", + capabilities=TOUCHPAD_CAPABILITIES, + pid=HHD_PID_TOUCHPAD, + btn_map=TOUCHPAD_BUTTON_MAP, + axis_map=TOUCHPAD_AXIS_MAP, + output_timestamps=True, + ) + producers.append(d) + consumers.append(d) + uses_touch = True + + return producers, consumers, {"uses_touch": uses_touch, "is_dual": False} diff --git a/src/hhd/controller/virtual/ds5/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py similarity index 73% rename from src/hhd/controller/virtual/ds5/__init__.py rename to src/hhd/controller/virtual/dualsense/__init__.py index fb8d3172..6cb7362d 100644 --- a/src/hhd/controller/virtual/ds5/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -3,17 +3,19 @@ from collections import defaultdict from typing import Literal, NamedTuple, Sequence, cast -from hhd.controller import Consumer, Event, Producer +from hhd.controller import ( + Consumer, + Event, + Producer, + TouchpadCorrectionType, + correct_touchpad, +) from hhd.controller.lib.common import encode_axis, set_button -from hhd.controller.lib.uhid import UhidDevice, BUS_USB, BUS_BLUETOOTH +from hhd.controller.lib.uhid import BUS_BLUETOOTH, BUS_USB, UhidDevice from .const import ( - DS5_USB_AXIS_MAP, - DS5_USB_BTN_MAP, DS5_BT_AXIS_MAP, DS5_BT_BTN_MAP, - DS5_INPUT_REPORT_BT_OFS, - DS5_INPUT_REPORT_USB_OFS, DS5_EDGE_COUNTRY, DS5_EDGE_DELTA_TIME_NS, DS5_EDGE_DESCRIPTOR_BT, @@ -22,17 +24,21 @@ DS5_EDGE_MIN_REPORT_FREQ, DS5_EDGE_NAME, DS5_EDGE_PRODUCT, - prefill_ds5_report, DS5_EDGE_STOCK_REPORTS, DS5_EDGE_TOUCH_HEIGHT, - sign_crc32_append, - DS5_FEATURE_CRC32_SEED, - DS5_INPUT_CRC32_SEED, - sign_crc32_inplace, DS5_EDGE_TOUCH_WIDTH, DS5_EDGE_VENDOR, DS5_EDGE_VERSION, + DS5_FEATURE_CRC32_SEED, + DS5_INPUT_CRC32_SEED, + DS5_INPUT_REPORT_BT_OFS, + DS5_INPUT_REPORT_USB_OFS, + DS5_USB_AXIS_MAP, + DS5_USB_BTN_MAP, patch_dpad_val, + prefill_ds5_report, + sign_crc32_append, + sign_crc32_inplace, ) REPORT_MAX_DELAY = 1 / DS5_EDGE_MIN_REPORT_FREQ @@ -42,133 +48,14 @@ logger = logging.getLogger(__name__) -class TouchpadCorrection(NamedTuple): - x_mult: float = 1 - x_ofs: float = 0 - x_clamp: tuple[float, float] = (0, 1) - y_mult: float = 1 - y_ofs: float = 0 - y_clamp: tuple[float, float] = (0, 1) - - -TouchpadCorrectionType = Literal[ - "stretch", - "crop_center", - "crop_start", - "crop_end", - "contain_start", - "contain_end", - "contain_center", - "disabled", -] - - -def correct_touchpad( - width: int, height: int, aspect: float, method: TouchpadCorrectionType -): - dst = width / height - src = aspect - ratio = dst / src - - match method: - case "crop_center": - if ratio > 1: - new_width = width / ratio - return TouchpadCorrection( - x_mult=new_width, - x_ofs=(width - new_width) / 2, - y_mult=height, - y_ofs=0, - ) - else: - new_height = height * ratio - return TouchpadCorrection( - x_mult=width, - x_ofs=0, - y_mult=new_height, - y_ofs=(height - new_height) / 2, - ) - case "crop_start": - if ratio > 1: - new_width = width / ratio - return TouchpadCorrection( - x_mult=new_width, - x_ofs=0, - y_mult=height, - y_ofs=0, - ) - else: - new_height = height * ratio - return TouchpadCorrection( - x_mult=width, - x_ofs=0, - y_mult=new_height, - y_ofs=0, - ) - case "crop_end": - if ratio > 1: - new_width = width / ratio - return TouchpadCorrection( - x_mult=new_width, - x_ofs=(width - new_width), - y_mult=height, - y_ofs=0, - ) - else: - new_height = height * ratio - return TouchpadCorrection( - x_mult=width, - x_ofs=0, - y_mult=new_height, - y_ofs=(height - new_height), - ) - case "contain_center": - if ratio > 1: - bound = (ratio - 1) / ratio / 2 - return TouchpadCorrection( - x_mult=width, y_mult=height, y_clamp=(bound, 1 - bound) - ) - else: - bound = (1 - ratio) / 2 - return TouchpadCorrection( - x_mult=width, y_mult=height, x_clamp=(bound, 1 - bound) - ) - case "contain_start": - if ratio > 1: - bound = (ratio - 1) / ratio - return TouchpadCorrection( - x_mult=width, y_mult=height, y_clamp=(0, 1 - bound) - ) - else: - bound = (1 - ratio) / 2 - return TouchpadCorrection( - x_mult=width, y_mult=height, x_clamp=(0, 1 - bound) - ) - case "contain_end": - if ratio > 1: - bound = (ratio - 1) / ratio - return TouchpadCorrection( - x_mult=width, y_mult=height, y_clamp=(bound, 1) - ) - else: - bound = (1 - ratio) / 2 - return TouchpadCorrection( - x_mult=width, y_mult=height, x_clamp=(bound, 1) - ) - case "stretch" | "disabled": - return TouchpadCorrection(x_mult=width, y_mult=height) - - logger.error(f"Touchpad correction method '{method}' not found.") - return TouchpadCorrection(x_mult=width, y_mult=height) - - -class DualSense5Edge(Producer, Consumer): +class DualsenseEdge(Producer, Consumer): def __init__( self, touchpad_method: TouchpadCorrectionType = "crop_end", use_bluetooth: bool = True, fake_timestamps: bool = False, enable_touchpad: bool = True, + enable_rgb: bool = True, ) -> None: self.available = False self.report = None @@ -178,6 +65,7 @@ def __init__( self.fake_timestamps = fake_timestamps self.touchpad_method: TouchpadCorrectionType = touchpad_method self.enable_touchpad = enable_touchpad + self.enable_rgb = enable_rgb self.ofs = ( DS5_INPUT_REPORT_BT_OFS if use_bluetooth else DS5_INPUT_REPORT_USB_OFS @@ -288,7 +176,9 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: else: rep = rep[0:1] + rep[3:] - if rep[2] & 4: # DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE + if ( + rep[2] & 4 and self.enable_rgb + ): # DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE # Led data is being set led_brightness = rep[43] player_leds = rep[44] @@ -319,24 +209,24 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: "green": green, } ) - elif (rep[39] & 2) and (rep[42] & 2): - # flag2 is DS_OUTPUT_VALID_FLAG2_LIGHTBAR_SETUP_CONTROL_ENABLE - # lightbar_setup is DS_OUTPUT_LIGHTBAR_SETUP_LIGHT_OUT - # FIXME: Disable for now to avoid hid_playstation messing - # with the leds - # out.append( - # { - # "type": "led", - # "code": "main", - # "mode": "disable", - # "brightness": 0, - # "speed": 0, - # "red": 0, - # "blue": 0, - # "green": 0, - # } - # ) - pass + # elif (rep[39] & 2) and (rep[42] & 2): + # # flag2 is DS_OUTPUT_VALID_FLAG2_LIGHTBAR_SETUP_CONTROL_ENABLE + # # lightbar_setup is DS_OUTPUT_LIGHTBAR_SETUP_LIGHT_OUT + # # FIXME: Disable for now to avoid hid_playstation messing + # # with the leds + # out.append( + # { + # "type": "led", + # "code": "main", + # "mode": "disable", + # "brightness": 0, + # "speed": 0, + # "red": 0, + # "blue": 0, + # "green": 0, + # } + # ) + # pass if rep[1] & 0x02: right = rep[3] diff --git a/src/hhd/controller/virtual/ds5/const.py b/src/hhd/controller/virtual/dualsense/const.py similarity index 99% rename from src/hhd/controller/virtual/ds5/const.py rename to src/hhd/controller/virtual/dualsense/const.py index 2ac9fecd..32530462 100644 --- a/src/hhd/controller/virtual/ds5/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -1,6 +1,5 @@ from binascii import crc32 -from hhd.controller import Axis, Button from hhd.controller.lib.common import AM, BM DS5_EDGE_VENDOR = 0x054C diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 808af806..2371525d 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -2,11 +2,10 @@ import time from typing import Sequence, cast -import evdev -from evdev import AbsInfo, UInput +from evdev import UInput -from hhd.controller import Axis, Button, Consumer, Producer -from hhd.controller.base import Event, can_read +from hhd.controller.base import Consumer, Event, Producer, can_read +from hhd.controller.const import Axis, Button from .const import * diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index b6393763..b1f4ced4 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -4,7 +4,7 @@ import evdev from evdev import AbsInfo -from hhd.controller import Axis, Button, Consumer, Producer +from hhd.controller.const import Axis, Button HHD_VID = 0x5335 diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index fca04474..cefc458e 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -7,25 +7,16 @@ from threading import Event as TEvent from typing import Sequence, Literal -from hhd.controller import Button, Consumer, Event, Producer +from hhd.controller import Button, Consumer, Event, Producer, get_outputs from hhd.controller.base import Multiplexer, TouchpadAction from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC -from hhd.controller.physical.evdev import GenericGamepadEvdev, unhide_all +from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import AccelImu, GyroImu -from hhd.controller.virtual.ds5 import DualSense5Edge, TouchpadCorrectionType from hhd.controller.virtual.uinput import ( UInputDevice, HHD_PID_VENDOR, - HHD_PID_GAMEPAD, - MOTION_AXIS_MAP, - MOTION_CAPABILITIES, - HHD_PID_MOTION, - HHD_PID_TOUCHPAD, - TOUCHPAD_CAPABILITIES, - TOUCHPAD_AXIS_MAP, - TOUCHPAD_BUTTON_MAP, ) from hhd.plugins import Config, Context, Emitter @@ -191,46 +182,10 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): debug = conf.get("debug", False) # Output - ds5_touch = conf["xinput.ds5e.touchpad"].to(bool) - xmode = conf["xinput.mode"].to(str) - match xmode: - case "ds5e": - d_out = DualSense5Edge( - touchpad_method=conf["touchpad.emulation.correction"].to( - TouchpadCorrectionType - ), - enable_touchpad=ds5_touch, - ) - d_out2 = None - case _: - d_out = UInputDevice(phys="phys-hhd-legion") - if conf["accel"].to(bool) | conf["gyro"].to(bool): - d_out2 = UInputDevice( - name="Handheld Daemon Controller Motion Sensors", - phys="phys-hhd-legion", - capabilities=MOTION_CAPABILITIES, - pid=HHD_PID_MOTION, - btn_map={}, - axis_map=MOTION_AXIS_MAP, - output_imu_timestamps=True, - ) - else: - d_out2 = None - - if conf["touchpad.mode"].to(str) == "emulation" and ( - xmode != "ds5e" or not ds5_touch - ): - d_out_touch = UInputDevice( - name="Handheld Daemon Touchpad", - phys="phys-hhd-legion", - capabilities=TOUCHPAD_CAPABILITIES, - pid=HHD_PID_TOUCHPAD, - btn_map=TOUCHPAD_BUTTON_MAP, - axis_map=TOUCHPAD_AXIS_MAP, - output_timestamps=True, - ) - else: - d_out_touch = None + motion = conf["accel"].to(bool) or conf["gyro"].to(bool) + d_producers, d_outs, d_params = get_outputs( + conf["xinput"], conf["touchpad"], motion + ) # Imu d_accel = AccelImu() @@ -265,7 +220,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): axis_map=LGO_RAW_INTERFACE_AXIS_MAP, btn_map=LGO_RAW_INTERFACE_BTN_MAP, config_map=LGO_RAW_INTERFACE_CONFIG_MAP, - callback=rgb_callback if conf["xinput.ds5e.led_support"].to(bool) else None, + callback=rgb_callback, required=True, ) ) @@ -289,6 +244,12 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): case val: assert False, f"Invalid value for `swap_legion`: {val}" + touch_actions = ( + conf["touchpad.controller"] + if conf["touchpad.mode"].to(TouchpadAction) == "controller" + else conf["touchpad.emulation"] + ) + multiplexer = Multiplexer( swap_guide=swap_guide, trigger="analog_to_discrete", @@ -296,8 +257,8 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): led="main_to_sides", status="both_to_main", share_to_qam=conf["share_to_qam"].to(bool), - touchpad_short=conf["touchpad.emulation.short"].to(TouchpadAction), - touchpad_right=conf["touchpad.emulation.hold"].to(TouchpadAction), + touchpad_short=touch_actions["short"].to(TouchpadAction), + touchpad_right=touch_actions["hold"].to(TouchpadAction), ) REPORT_FREQ_MIN = 25 @@ -324,14 +285,11 @@ def prepare(m): if conf.get("gyro", False): prepare(d_gyro) prepare(d_shortcuts) - if conf["touchpad.mode"].to(str) == "emulation": + if d_params["uses_touch"]: prepare(d_touch) prepare(d_raw) - if d_out_touch: - prepare(d_out_touch) - prepare(d_out) - if d_out2: - prepare(d_out2) + for d in d_producers: + prepare(d) logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): @@ -354,12 +312,8 @@ def prepare(m): d_xinput.consume(evs) d_raw.consume(evs) - d_out.consume(evs) - if d_out2: - d_out2.consume(evs) - if d_out_touch: - d_out_touch.consume(evs) - + for d in d_outs: + d.consume(evs) # If unbounded, the total number of events per second is the sum of all # events generated by the producers. # For Legion go, that would be 100 + 100 + 500 + 30 = 730 diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 71fa77e3..928ad44a 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -13,7 +13,7 @@ children: hint: >- Emulate different controller types when the Legion Controllers are in X-Input mode. - default: ds5e + default: dualsense modes: # # No emulation @@ -25,14 +25,26 @@ children: hint: >- Does not modify the default controller. # + # evdev through uinput + # + uinput: + type: container + tags: [lgc_emulation_uinput, uinput] + title: Virtual Controller + hint: >- + Creates a virtual `Handheld Daemon Controller` that can be used normally + in apps. Back buttons are supported but steam will not detect them. + If Gyroscope or Accelerometer are enabled, a Motion device will be + created as well (experimental; works in Dolphin). + # # Dual Sense 5 # - ds5e: + dualsense: type: container - tags: [lgc_emulation_ds5e, ds5e] - title: Dual Sense 5 Edge + tags: [lgc_emulation_dualsense, dualsense] + title: Dualsense Edge hint: >- - Emulates the expensive DS5 Edge sony controller that maps 1-1 to + Emulates the expensive Dualsense Edge Sony controller that maps 1-1 to the legion go. children: @@ -44,26 +56,6 @@ children: to control them. default: True - touchpad: - type: bool - title: Remap touchpad - hint: >- - Remaps to the DS5 touchpad when touchpad emulation is enabled. - Right click will not work under gamescope. - default: True - # - # evdev through uinput - # - uinput: - type: container - tags: [lgc_emulation_uinput, uinput] - title: Events Device - hint: >- - Creates a virtual `Handheld Daemon Controller` that can be used normally - in apps. Back buttons are supported but steam will not detect them. - If Gyroscope or Accelerometer are enabled, a Motion device will be - created as well (experimental). - # # Common settings # @@ -123,12 +115,50 @@ children: type: container title: Disabled hint: >- - Does not modify the touchpad. + Does not modify the touchpad. Short + holding presses will not work + within gamescope. + # + # Virtual emulation + # emulation: type: container title: Enabled hint: >- - Adds an emulated touchpad. + Adds an emulated touchpad. This touchpad is meant to be for desktop + use and has left, right click support by default, within gamescope and + outside of it, regardless of the "Tap to Click" setting. + children: + short: + type: multiple + title: Short Action + hint: >- + Maps short touches (less than 0.2s) to a virtual touchpad button. + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "left_click" + hold: + type: multiple + title: Hold Action + hint: >- + Maps long touches (more than 2s) to a virtual touchpad button. + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "right_click" + # + # Controller emulation + # + controller: + type: container + title: Controller + hint: >- + Uses the touchpad of the emulated controller (if it exists). + Otherwise, the touchpad remains unmapped. + Meant to be used as steam input, so short press is unassigned by + default and long press simulates trackpad click. children: correction: type: multiple @@ -155,10 +185,9 @@ children: title: Short Action hint: >- Maps short touches (less than 0.2s) to a touchpad action. - Emulated touchpad uses virtual buttons. Dualsense uses a physical press for left and a double tap for - right click (support for double tap varies; enable tap to click - in touchpad settings). + right click (support for double tap varies; enable "Tap to Click" + in your desktop's touchpad settings). options: disabled: Disabled left_click: Left Click @@ -170,10 +199,9 @@ children: title: Hold Action hint: >- Maps long touches (more than 2s) to a touchpad action. - Emulated touchpad uses virtual buttons. Dualsense uses a physical press for left and a double tap for - right click (support for double tap varies; enable tap to click - in touchpad settings). + right click (support for double tap varies; enable "Tap to Click" + in your desktop's touchpad settings). options: disabled: Disabled left_click: Left Click From cf0d4b998718da1754908fc0d3cc5eb2c2cfc021 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 17:49:41 +0200 Subject: [PATCH 0084/1497] fix button reset when pressing legion buttons --- src/hhd/device/legion_go/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index cefc458e..c3192421 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -373,9 +373,9 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: out.append(ev) elif ev["type"] == "button" and ev["code"] in self.passthrough: out.append(ev) - elif ev["type"] == "button": + elif ev["type"] == "button" and self.state: self.to_disable_btn.add(ev["code"]) - elif ev["type"] == "axis": + elif ev["type"] == "axis" and self.state: self.to_disable_axis.add(ev["code"]) if self.state: From c00c59bdc5128cd6d188aaca577870efc4f17107 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 18:36:20 +0200 Subject: [PATCH 0085/1497] fix dualsense led bug --- src/hhd/controller/outputs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/outputs.py b/src/hhd/controller/outputs.py index 9e2f1303..39650acd 100644 --- a/src/hhd/controller/outputs.py +++ b/src/hhd/controller/outputs.py @@ -31,7 +31,7 @@ def get_outputs( TouchpadCorrectionType ), enable_touchpad=uses_touch, - enable_rgb=conf["dualsense.led_support"], + enable_rgb=conf["dualsense.led_support"].to(bool), ) producers.append(d) consumers.append(d) From 82a71ca43fd6e2aee4a026e51508c968b07b53b6 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 18:52:31 +0200 Subject: [PATCH 0086/1497] add keyboard reverse, fix disabling leds --- src/hhd/controller/physical/evdev.py | 340 +++++++++--------- .../controller/virtual/dualsense/__init__.py | 6 +- 2 files changed, 174 insertions(+), 172 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index e15e0ca3..45e727a2 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -150,7 +150,9 @@ def open(self) -> Sequence[int]: if self.hide: # Check we are root if not os.getuid(): - self.hidden = hide_gamepad(dev.path, dev.info.vendor, dev.info.product) + self.hidden = hide_gamepad( + dev.path, dev.info.vendor, dev.info.product + ) if not self.hidden: logger.warning(f"Could not hide device:\n{dev}") else: @@ -269,172 +271,174 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: return out -KEYBOARD_MAP: dict[int, KeyboardButton] = to_map( - { - "key_esc": [B("KEY_ESC")], # 1 - "key_enter": [B("KEY_ENTER")], # 28 - "key_leftctrl": [B("KEY_LEFTCTRL")], # 29 - "key_leftshift": [B("KEY_LEFTSHIFT")], # 42 - "key_leftalt": [B("KEY_LEFTALT")], # 56 - "key_rightctrl": [B("KEY_RIGHTCTRL")], # 97 - "key_rightshift": [B("KEY_RIGHTSHIFT")], # 54 - "key_rightalt": [B("KEY_RIGHTALT")], # 100 - "key_leftmeta": [B("KEY_LEFTMETA")], # 125 - "key_rightmeta": [B("KEY_RIGHTMETA")], # 126 - "key_capslock": [B("KEY_CAPSLOCK")], # 58 - "key_numlock": [B("KEY_NUMLOCK")], # 69 - "key_scrolllock": [B("KEY_SCROLLLOCK")], # 70 - "key_sysrq": [B("KEY_SYSRQ")], # 99 - "key_minus": [B("KEY_MINUS")], # 12 - "key_equal": [B("KEY_EQUAL")], # 13 - "key_backspace": [B("KEY_BACKSPACE")], # 14 - "key_tab": [B("KEY_TAB")], # 15 - "key_leftbrace": [B("KEY_LEFTBRACE")], # 26 - "key_rightbrace": [B("KEY_RIGHTBRACE")], # 27 - "key_space": [B("KEY_SPACE")], # 57 - "key_up": [B("KEY_UP")], # 103 - "key_left": [B("KEY_LEFT")], # 105 - "key_right": [B("KEY_RIGHT")], # 106 - "key_down": [B("KEY_DOWN")], # 108 - "key_home": [B("KEY_HOME")], # 102 - "key_end": [B("KEY_END")], # 107 - "key_pageup": [B("KEY_PAGEUP")], # 104 - "key_pagedown": [B("KEY_PAGEDOWN")], # 109 - "key_insert": [B("KEY_INSERT")], # 110 - "key_delete": [B("KEY_DELETE")], # 111 - "key_semicolon": [B("KEY_SEMICOLON")], # 39 - "key_apostrophe": [B("KEY_APOSTROPHE")], # 40 - "key_grave": [B("KEY_GRAVE")], # 41 - "key_backslash": [B("KEY_BACKSLASH")], # 43 - "key_comma": [B("KEY_COMMA")], # 51 - "key_dot": [B("KEY_DOT")], # 52 - "key_slash": [B("KEY_SLASH")], # 53 - "key_102nd": [B("KEY_102ND")], # 86 - "key_ro": [B("KEY_RO")], # 89 - "key_power": [B("KEY_POWER")], # 116 - "key_compose": [B("KEY_COMPOSE")], # 127 - "key_stop": [B("KEY_STOP")], # 128 - "key_again": [B("KEY_AGAIN")], # 129 - "key_props": [B("KEY_PROPS")], # 130 - "key_undo": [B("KEY_UNDO")], # 131 - "key_front": [B("KEY_FRONT")], # 132 - "key_copy": [B("KEY_COPY")], # 133 - "key_open": [B("KEY_OPEN")], # 134 - "key_paste": [B("KEY_PASTE")], # 135 - "key_cut": [B("KEY_CUT")], # 137 - "key_find": [B("KEY_FIND")], # 136 - "key_help": [B("KEY_HELP")], # 138 - "key_calc": [B("KEY_CALC")], # 140 - "key_sleep": [B("KEY_SLEEP")], # 142 - "key_www": [B("KEY_WWW")], # 150 - "key_screenlock": [B("KEY_SCREENLOCK")], # 152 - "key_back": [B("KEY_BACK")], # 158 - "key_refresh": [B("KEY_REFRESH")], # 173 - "key_edit": [B("KEY_EDIT")], # 176 - "key_scrollup": [B("KEY_SCROLLUP")], # 177 - "key_scrolldown": [B("KEY_SCROLLDOWN")], # 178 - "key_1": [B("KEY_1")], # 2 - "key_2": [B("KEY_2")], # 3 - "key_3": [B("KEY_3")], # 4 - "key_4": [B("KEY_4")], # 5 - "key_5": [B("KEY_5")], # 6 - "key_6": [B("KEY_6")], # 7 - "key_7": [B("KEY_7")], # 8 - "key_8": [B("KEY_8")], # 9 - "key_9": [B("KEY_9")], # 10 - "key_0": [B("KEY_0")], # 11 - "key_a": [B("KEY_A")], # 30 - "key_b": [B("KEY_B")], # 48 - "key_c": [B("KEY_C")], # 46 - "key_d": [B("KEY_D")], # 32 - "key_e": [B("KEY_E")], # 18 - "key_f": [B("KEY_F")], # 33 - "key_g": [B("KEY_G")], # 34 - "key_h": [B("KEY_H")], # 35 - "key_i": [B("KEY_I")], # 23 - "key_j": [B("KEY_J")], # 36 - "key_k": [B("KEY_K")], # 37 - "key_l": [B("KEY_L")], # 38 - "key_m": [B("KEY_M")], # 50 - "key_n": [B("KEY_N")], # 49 - "key_o": [B("KEY_O")], # 24 - "key_p": [B("KEY_P")], # 25 - "key_q": [B("KEY_Q")], # 16 - "key_r": [B("KEY_R")], # 19 - "key_s": [B("KEY_S")], # 31 - "key_t": [B("KEY_T")], # 20 - "key_u": [B("KEY_U")], # 22 - "key_v": [B("KEY_V")], # 47 - "key_w": [B("KEY_W")], # 17 - "key_x": [B("KEY_X")], # 45 - "key_y": [B("KEY_Y")], # 21 - "key_z": [B("KEY_Z")], # 44 - "key_kpasterisk": [B("KEY_KPASTERISK")], # 55 - "key_kpminus": [B("KEY_KPMINUS")], # 74 - "key_kpplus": [B("KEY_KPPLUS")], # 78 - "key_kpdot": [B("KEY_KPDOT")], # 83 - "key_kpjpcomma": [B("KEY_KPJPCOMMA")], # 95 - "key_kpenter": [B("KEY_KPENTER")], # 96 - "key_kpslash": [B("KEY_KPSLASH")], # 98 - "key_kpequal": [B("KEY_KPEQUAL")], # 117 - "key_kpcomma": [B("KEY_KPCOMMA")], # 121 - "key_kpleftparen": [B("KEY_KPLEFTPAREN")], # 179 - "key_kprightparen": [B("KEY_KPRIGHTPAREN")], # 180 - "key_kp0": [B("KEY_KP0")], # 82 - "key_kp1": [B("KEY_KP1")], # 79 - "key_kp2": [B("KEY_KP2")], # 80 - "key_kp3": [B("KEY_KP3")], # 81 - "key_kp4": [B("KEY_KP4")], # 75 - "key_kp5": [B("KEY_KP5")], # 76 - "key_kp6": [B("KEY_KP6")], # 77 - "key_kp7": [B("KEY_KP7")], # 71 - "key_kp8": [B("KEY_KP8")], # 72 - "key_kp9": [B("KEY_KP9")], # 73 - "key_f1": [B("KEY_F1")], # 59 - "key_f2": [B("KEY_F2")], # 60 - "key_f3": [B("KEY_F3")], # 61 - "key_f4": [B("KEY_F4")], # 62 - "key_f5": [B("KEY_F5")], # 63 - "key_f6": [B("KEY_F6")], # 64 - "key_f7": [B("KEY_F7")], # 65 - "key_f8": [B("KEY_F8")], # 66 - "key_f9": [B("KEY_F9")], # 67 - "key_f11": [B("KEY_F11")], # 87 - "key_f12": [B("KEY_F12")], # 88 - "key_f10": [B("KEY_F10")], # 68 - "key_f13": [B("KEY_F13")], # 183 - "key_f14": [B("KEY_F14")], # 184 - "key_f15": [B("KEY_F15")], # 185 - "key_f16": [B("KEY_F16")], # 186 - "key_f17": [B("KEY_F17")], # 187 - "key_f18": [B("KEY_F18")], # 188 - "key_f19": [B("KEY_F19")], # 189 - "key_f20": [B("KEY_F20")], # 190 - "key_f21": [B("KEY_F21")], # 191 - "key_f22": [B("KEY_F22")], # 192 - "key_f23": [B("KEY_F23")], # 193 - "key_f24": [B("KEY_F24")], # 194 - "key_playpause": [B("KEY_PLAYPAUSE")], # 164 - "key_pause": [B("KEY_PAUSE")], # 119 - "key_mute": [B("KEY_MUTE")], # 113 - "key_stopcd": [B("KEY_STOPCD")], # 166 - "key_forward": [B("KEY_FORWARD")], # 159 - "key_ejectcd": [B("KEY_EJECTCD")], # 161 - "key_nextsong": [B("KEY_NEXTSONG")], # 163 - "key_previoussong": [B("KEY_PREVIOUSSONG")], # 165 - "key_volumedown": [B("KEY_VOLUMEDOWN")], # 114 - "key_volumeup": [B("KEY_VOLUMEUP")], # 115 - "key_katakana": [B("KEY_KATAKANA")], # 90 - "key_hiragana": [B("KEY_HIRAGANA")], # 91 - "key_henkan": [B("KEY_HENKAN")], # 92 - "key_katakanahiragana": [B("KEY_KATAKANAHIRAGANA")], # 93 - "key_muhenkan": [B("KEY_MUHENKAN")], # 94 - "key_zenkakuhankaku": [B("KEY_ZENKAKUHANKAKU")], # 85 - "key_hanguel": [B("KEY_HANGUEL")], # 122 - "key_hanja": [B("KEY_HANJA")], # 123 - "key_yen": [B("KEY_YEN")], # 124 - "key_unknown": [B("KEY_UNKNOWN")], # 240, - } -) +_kbd_raw: dict[KeyboardButton, Sequence[int]] = { + "key_esc": [B("KEY_ESC")], # 1 + "key_enter": [B("KEY_ENTER")], # 28 + "key_leftctrl": [B("KEY_LEFTCTRL")], # 29 + "key_leftshift": [B("KEY_LEFTSHIFT")], # 42 + "key_leftalt": [B("KEY_LEFTALT")], # 56 + "key_rightctrl": [B("KEY_RIGHTCTRL")], # 97 + "key_rightshift": [B("KEY_RIGHTSHIFT")], # 54 + "key_rightalt": [B("KEY_RIGHTALT")], # 100 + "key_leftmeta": [B("KEY_LEFTMETA")], # 125 + "key_rightmeta": [B("KEY_RIGHTMETA")], # 126 + "key_capslock": [B("KEY_CAPSLOCK")], # 58 + "key_numlock": [B("KEY_NUMLOCK")], # 69 + "key_scrolllock": [B("KEY_SCROLLLOCK")], # 70 + "key_sysrq": [B("KEY_SYSRQ")], # 99 + "key_minus": [B("KEY_MINUS")], # 12 + "key_equal": [B("KEY_EQUAL")], # 13 + "key_backspace": [B("KEY_BACKSPACE")], # 14 + "key_tab": [B("KEY_TAB")], # 15 + "key_leftbrace": [B("KEY_LEFTBRACE")], # 26 + "key_rightbrace": [B("KEY_RIGHTBRACE")], # 27 + "key_space": [B("KEY_SPACE")], # 57 + "key_up": [B("KEY_UP")], # 103 + "key_left": [B("KEY_LEFT")], # 105 + "key_right": [B("KEY_RIGHT")], # 106 + "key_down": [B("KEY_DOWN")], # 108 + "key_home": [B("KEY_HOME")], # 102 + "key_end": [B("KEY_END")], # 107 + "key_pageup": [B("KEY_PAGEUP")], # 104 + "key_pagedown": [B("KEY_PAGEDOWN")], # 109 + "key_insert": [B("KEY_INSERT")], # 110 + "key_delete": [B("KEY_DELETE")], # 111 + "key_semicolon": [B("KEY_SEMICOLON")], # 39 + "key_apostrophe": [B("KEY_APOSTROPHE")], # 40 + "key_grave": [B("KEY_GRAVE")], # 41 + "key_backslash": [B("KEY_BACKSLASH")], # 43 + "key_comma": [B("KEY_COMMA")], # 51 + "key_dot": [B("KEY_DOT")], # 52 + "key_slash": [B("KEY_SLASH")], # 53 + "key_102nd": [B("KEY_102ND")], # 86 + "key_ro": [B("KEY_RO")], # 89 + "key_power": [B("KEY_POWER")], # 116 + "key_compose": [B("KEY_COMPOSE")], # 127 + "key_stop": [B("KEY_STOP")], # 128 + "key_again": [B("KEY_AGAIN")], # 129 + "key_props": [B("KEY_PROPS")], # 130 + "key_undo": [B("KEY_UNDO")], # 131 + "key_front": [B("KEY_FRONT")], # 132 + "key_copy": [B("KEY_COPY")], # 133 + "key_open": [B("KEY_OPEN")], # 134 + "key_paste": [B("KEY_PASTE")], # 135 + "key_cut": [B("KEY_CUT")], # 137 + "key_find": [B("KEY_FIND")], # 136 + "key_help": [B("KEY_HELP")], # 138 + "key_calc": [B("KEY_CALC")], # 140 + "key_sleep": [B("KEY_SLEEP")], # 142 + "key_www": [B("KEY_WWW")], # 150 + "key_screenlock": [B("KEY_SCREENLOCK")], # 152 + "key_back": [B("KEY_BACK")], # 158 + "key_refresh": [B("KEY_REFRESH")], # 173 + "key_edit": [B("KEY_EDIT")], # 176 + "key_scrollup": [B("KEY_SCROLLUP")], # 177 + "key_scrolldown": [B("KEY_SCROLLDOWN")], # 178 + "key_1": [B("KEY_1")], # 2 + "key_2": [B("KEY_2")], # 3 + "key_3": [B("KEY_3")], # 4 + "key_4": [B("KEY_4")], # 5 + "key_5": [B("KEY_5")], # 6 + "key_6": [B("KEY_6")], # 7 + "key_7": [B("KEY_7")], # 8 + "key_8": [B("KEY_8")], # 9 + "key_9": [B("KEY_9")], # 10 + "key_0": [B("KEY_0")], # 11 + "key_a": [B("KEY_A")], # 30 + "key_b": [B("KEY_B")], # 48 + "key_c": [B("KEY_C")], # 46 + "key_d": [B("KEY_D")], # 32 + "key_e": [B("KEY_E")], # 18 + "key_f": [B("KEY_F")], # 33 + "key_g": [B("KEY_G")], # 34 + "key_h": [B("KEY_H")], # 35 + "key_i": [B("KEY_I")], # 23 + "key_j": [B("KEY_J")], # 36 + "key_k": [B("KEY_K")], # 37 + "key_l": [B("KEY_L")], # 38 + "key_m": [B("KEY_M")], # 50 + "key_n": [B("KEY_N")], # 49 + "key_o": [B("KEY_O")], # 24 + "key_p": [B("KEY_P")], # 25 + "key_q": [B("KEY_Q")], # 16 + "key_r": [B("KEY_R")], # 19 + "key_s": [B("KEY_S")], # 31 + "key_t": [B("KEY_T")], # 20 + "key_u": [B("KEY_U")], # 22 + "key_v": [B("KEY_V")], # 47 + "key_w": [B("KEY_W")], # 17 + "key_x": [B("KEY_X")], # 45 + "key_y": [B("KEY_Y")], # 21 + "key_z": [B("KEY_Z")], # 44 + "key_kpasterisk": [B("KEY_KPASTERISK")], # 55 + "key_kpminus": [B("KEY_KPMINUS")], # 74 + "key_kpplus": [B("KEY_KPPLUS")], # 78 + "key_kpdot": [B("KEY_KPDOT")], # 83 + "key_kpjpcomma": [B("KEY_KPJPCOMMA")], # 95 + "key_kpenter": [B("KEY_KPENTER")], # 96 + "key_kpslash": [B("KEY_KPSLASH")], # 98 + "key_kpequal": [B("KEY_KPEQUAL")], # 117 + "key_kpcomma": [B("KEY_KPCOMMA")], # 121 + "key_kpleftparen": [B("KEY_KPLEFTPAREN")], # 179 + "key_kprightparen": [B("KEY_KPRIGHTPAREN")], # 180 + "key_kp0": [B("KEY_KP0")], # 82 + "key_kp1": [B("KEY_KP1")], # 79 + "key_kp2": [B("KEY_KP2")], # 80 + "key_kp3": [B("KEY_KP3")], # 81 + "key_kp4": [B("KEY_KP4")], # 75 + "key_kp5": [B("KEY_KP5")], # 76 + "key_kp6": [B("KEY_KP6")], # 77 + "key_kp7": [B("KEY_KP7")], # 71 + "key_kp8": [B("KEY_KP8")], # 72 + "key_kp9": [B("KEY_KP9")], # 73 + "key_f1": [B("KEY_F1")], # 59 + "key_f2": [B("KEY_F2")], # 60 + "key_f3": [B("KEY_F3")], # 61 + "key_f4": [B("KEY_F4")], # 62 + "key_f5": [B("KEY_F5")], # 63 + "key_f6": [B("KEY_F6")], # 64 + "key_f7": [B("KEY_F7")], # 65 + "key_f8": [B("KEY_F8")], # 66 + "key_f9": [B("KEY_F9")], # 67 + "key_f11": [B("KEY_F11")], # 87 + "key_f12": [B("KEY_F12")], # 88 + "key_f10": [B("KEY_F10")], # 68 + "key_f13": [B("KEY_F13")], # 183 + "key_f14": [B("KEY_F14")], # 184 + "key_f15": [B("KEY_F15")], # 185 + "key_f16": [B("KEY_F16")], # 186 + "key_f17": [B("KEY_F17")], # 187 + "key_f18": [B("KEY_F18")], # 188 + "key_f19": [B("KEY_F19")], # 189 + "key_f20": [B("KEY_F20")], # 190 + "key_f21": [B("KEY_F21")], # 191 + "key_f22": [B("KEY_F22")], # 192 + "key_f23": [B("KEY_F23")], # 193 + "key_f24": [B("KEY_F24")], # 194 + "key_playpause": [B("KEY_PLAYPAUSE")], # 164 + "key_pause": [B("KEY_PAUSE")], # 119 + "key_mute": [B("KEY_MUTE")], # 113 + "key_stopcd": [B("KEY_STOPCD")], # 166 + "key_forward": [B("KEY_FORWARD")], # 159 + "key_ejectcd": [B("KEY_EJECTCD")], # 161 + "key_nextsong": [B("KEY_NEXTSONG")], # 163 + "key_previoussong": [B("KEY_PREVIOUSSONG")], # 165 + "key_volumedown": [B("KEY_VOLUMEDOWN")], # 114 + "key_volumeup": [B("KEY_VOLUMEUP")], # 115 + "key_katakana": [B("KEY_KATAKANA")], # 90 + "key_hiragana": [B("KEY_HIRAGANA")], # 91 + "key_henkan": [B("KEY_HENKAN")], # 92 + "key_katakanahiragana": [B("KEY_KATAKANAHIRAGANA")], # 93 + "key_muhenkan": [B("KEY_MUHENKAN")], # 94 + "key_zenkakuhankaku": [B("KEY_ZENKAKUHANKAKU")], # 85 + "key_hanguel": [B("KEY_HANGUEL")], # 122 + "key_hanja": [B("KEY_HANJA")], # 123 + "key_yen": [B("KEY_YEN")], # 124 + "key_unknown": [B("KEY_UNKNOWN")], # 240, +} + +KEYBOARD_MAP_REV: dict[KeyboardButton, int] = {k: v[0] for k, v in _kbd_raw.items()} + +KEYBOARD_MAP: dict[int, KeyboardButton] = to_map(_kbd_raw) __all__ = ["GenericGamepadEvdev", "XBOX_BUTTON_MAP", "XBOX_AXIS_MAP", "B", "to_map"] diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 6cb7362d..c4e462b6 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -147,7 +147,6 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # Check report num if ev["report"] != 0x01: invalid = True - # Check report ids depending on modes if not self.use_bluetooth and ev["data"][0] != 0x02: invalid = True @@ -161,7 +160,6 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: continue rep = ev["data"] - if self.use_bluetooth: # skip seq_tag, tag sent by bluetooth report # rest is the same @@ -176,8 +174,8 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: else: rep = rep[0:1] + rep[3:] - if ( - rep[2] & 4 and self.enable_rgb + if self.enable_rgb and ( + rep[2] & 4 ): # DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE # Led data is being set led_brightness = rep[43] From f55bb1c4dc2161aee1b958184c36ab4dce13f5b3 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 19:06:28 +0200 Subject: [PATCH 0087/1497] add minimum report output to avoid steam hanging --- src/hhd/controller/outputs.py | 1 + src/hhd/device/legion_go/base.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/outputs.py b/src/hhd/controller/outputs.py index 39650acd..7775c40e 100644 --- a/src/hhd/controller/outputs.py +++ b/src/hhd/controller/outputs.py @@ -32,6 +32,7 @@ def get_outputs( ), enable_touchpad=uses_touch, enable_rgb=conf["dualsense.led_support"].to(bool), + fake_timestamps=not motion ) producers.append(d) consumers.append(d) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index c3192421..ecf469fb 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -312,8 +312,9 @@ def prepare(m): d_xinput.consume(evs) d_raw.consume(evs) - for d in d_outs: - d.consume(evs) + + for d in d_outs: + d.consume(evs) # If unbounded, the total number of events per second is the sum of all # events generated by the producers. # For Legion go, that would be 100 + 100 + 500 + 30 = 730 From 309b805f074534cd2202655102f126c5cdbb197a Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 21:50:36 +0200 Subject: [PATCH 0088/1497] fix rumble scaling --- src/hhd/controller/virtual/dualsense/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index c4e462b6..5f58c53a 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -233,8 +233,8 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: { "type": "rumble", "code": "main", - "strong_magnitude": left / 63, - "weak_magnitude": right / 63, + "strong_magnitude": left / 255, + "weak_magnitude": right / 255, } ) self.rumble = True From 422b2a838736ddd97f7b54cc573a2f6cf72298fc Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 22:08:55 +0200 Subject: [PATCH 0089/1497] use 7 bit accuracy for rumble --- src/hhd/controller/virtual/dualsense/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 5f58c53a..fdc93966 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -233,8 +233,9 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: { "type": "rumble", "code": "main", - "strong_magnitude": left / 255, - "weak_magnitude": right / 255, + # For some reason goes to 127 + "strong_magnitude": left / 127, + "weak_magnitude": right / 127, } ) self.rumble = True From 5ba39cb41e410aef2ba840ce98feac3d9907dd15 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 2 Jan 2024 22:28:52 +0200 Subject: [PATCH 0090/1497] fix vibration scale depending on flag --- src/hhd/controller/virtual/dualsense/__init__.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index fdc93966..f454f0be 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -160,6 +160,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: continue rep = ev["data"] + # flag2 = rep... if self.use_bluetooth: # skip seq_tag, tag sent by bluetooth report # rest is the same @@ -174,8 +175,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: else: rep = rep[0:1] + rep[3:] + flag0 = rep[1] + flag1 = rep[2] if self.enable_rgb and ( - rep[2] & 4 + flag1 & 4 ): # DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE # Led data is being set led_brightness = rep[43] @@ -226,16 +229,20 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # ) # pass - if rep[1] & 0x02: + if flag0 & 0x02: right = rep[3] left = rep[4] + + # If vibration mode is in flag0 use different scale + scale = 2 if flag0 & 0x01 else 1 + out.append( { "type": "rumble", "code": "main", # For some reason goes to 127 - "strong_magnitude": left / 127, - "weak_magnitude": right / 127, + "strong_magnitude": left / 255 * scale, + "weak_magnitude": right / 255 * scale, } ) self.rumble = True From 542cbad83b34ec967adf5c007c909102f5b6f186 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 11:23:26 +0200 Subject: [PATCH 0091/1497] add protocol option for dualsense --- src/hhd/controller/outputs.py | 3 ++- src/hhd/device/legion_go/controllers.yaml | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/outputs.py b/src/hhd/controller/outputs.py index 7775c40e..3c147663 100644 --- a/src/hhd/controller/outputs.py +++ b/src/hhd/controller/outputs.py @@ -30,9 +30,10 @@ def get_outputs( touchpad_method=touch_conf["controller.correction"].to( TouchpadCorrectionType ), + use_bluetooth=conf["dualsense.bluetooth_mode"].to(bool), enable_touchpad=uses_touch, enable_rgb=conf["dualsense.led_support"].to(bool), - fake_timestamps=not motion + fake_timestamps=not motion, ) producers.append(d) consumers.append(d) diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index 928ad44a..f12cab5a 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -55,6 +55,17 @@ children: Passes through the LEDs to the controller, which allows games to control them. default: True + + bluetooth_mode: + type: bool + title: Use + hint: >- + Emulates the controller in bluetooth mode instead of USB mode. + This is the default as it causes less issues with how apps + interact with the controller. + However, using USB mode can improve LED support (?) in some games. + Test and report back! + default: True # # Common settings From 4818d3d779be1a13d69b77afd2cb7fa8787799c1 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 13:14:19 +0200 Subject: [PATCH 0092/1497] add normal dualsense variant, refactor output code, switch dualsense name to default --- src/hhd/controller/__init__.py | 2 - .../controller/virtual/dualsense/__init__.py | 18 ++++-- src/hhd/controller/virtual/dualsense/const.py | 6 +- src/hhd/device/legion_go/__init__.py | 15 ++++- src/hhd/device/legion_go/base.py | 11 ++-- src/hhd/device/legion_go/controllers.yaml | 54 ---------------- src/hhd/plugins/__init__.py | 26 ++------ src/hhd/{controller => plugins}/outputs.py | 14 +++-- src/hhd/plugins/outputs.yml | 63 +++++++++++++++++++ src/hhd/plugins/utils.py | 20 ++++++ usr/lib/udev/rules.d/83-hhd.rules | 4 ++ 11 files changed, 134 insertions(+), 99 deletions(-) rename src/hhd/{controller => plugins}/outputs.py (85%) create mode 100644 src/hhd/plugins/outputs.yml create mode 100644 src/hhd/plugins/utils.py diff --git a/src/hhd/controller/__init__.py b/src/hhd/controller/__init__.py index a509d332..2a4e9866 100644 --- a/src/hhd/controller/__init__.py +++ b/src/hhd/controller/__init__.py @@ -7,7 +7,6 @@ TouchpadCorrection, correct_touchpad, ) -from .outputs import get_outputs from .const import Axis, Button, Configuration __all__ = [ @@ -21,5 +20,4 @@ "TouchpadCorrectionType", "TouchpadCorrection", "correct_touchpad", - "get_outputs", ] diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index f454f0be..f8b95381 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -23,18 +23,20 @@ DS5_EDGE_MAX_REPORT_FREQ, DS5_EDGE_MIN_REPORT_FREQ, DS5_EDGE_NAME, + DS5_NAME, DS5_EDGE_PRODUCT, DS5_EDGE_STOCK_REPORTS, DS5_EDGE_TOUCH_HEIGHT, DS5_EDGE_TOUCH_WIDTH, - DS5_EDGE_VENDOR, DS5_EDGE_VERSION, DS5_FEATURE_CRC32_SEED, DS5_INPUT_CRC32_SEED, DS5_INPUT_REPORT_BT_OFS, DS5_INPUT_REPORT_USB_OFS, + DS5_PRODUCT, DS5_USB_AXIS_MAP, DS5_USB_BTN_MAP, + DS5_VENDOR, patch_dpad_val, prefill_ds5_report, sign_crc32_append, @@ -48,10 +50,11 @@ logger = logging.getLogger(__name__) -class DualsenseEdge(Producer, Consumer): +class Dualsense(Producer, Consumer): def __init__( self, touchpad_method: TouchpadCorrectionType = "crop_end", + edge_mode: bool = True, use_bluetooth: bool = True, fake_timestamps: bool = False, enable_touchpad: bool = True, @@ -62,6 +65,7 @@ def __init__( self.dev = None self.start = 0 self.use_bluetooth = use_bluetooth + self.edge_mode = edge_mode self.fake_timestamps = fake_timestamps self.touchpad_method: TouchpadCorrectionType = touchpad_method self.enable_touchpad = enable_touchpad @@ -77,12 +81,12 @@ def open(self) -> Sequence[int]: self.available = False self.report = bytearray(prefill_ds5_report(self.use_bluetooth)) self.dev = UhidDevice( - vid=DS5_EDGE_VENDOR, - pid=DS5_EDGE_PRODUCT, + vid=DS5_VENDOR, + pid=DS5_EDGE_PRODUCT if self.edge_mode else DS5_PRODUCT, bus=BUS_BLUETOOTH if self.use_bluetooth else BUS_USB, version=DS5_EDGE_VERSION, country=DS5_EDGE_COUNTRY, - name=DS5_EDGE_NAME, + name=DS5_EDGE_NAME if self.edge_mode else DS5_NAME, report_descriptor=DS5_EDGE_DESCRIPTOR_BT if self.use_bluetooth else DS5_EDGE_DESCRIPTOR_USB, @@ -99,7 +103,9 @@ def open(self) -> Sequence[int]: self.start = time.perf_counter_ns() self.fd = self.dev.open() - logger.info(f"Starting '{DS5_EDGE_NAME.decode()}'.") + logger.info( + f"Starting '{(DS5_EDGE_NAME if self.edge_mode else DS5_NAME).decode()}'." + ) return [self.fd] def close(self, exit: bool) -> bool: diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index 32530462..443f77ff 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -2,11 +2,13 @@ from hhd.controller.lib.common import AM, BM -DS5_EDGE_VENDOR = 0x054C +DS5_VENDOR = 0x054C +DS5_PRODUCT = 0x0CE6 DS5_EDGE_PRODUCT = 0x0DF2 DS5_EDGE_VERSION = 256 DS5_EDGE_COUNTRY = 0 -DS5_EDGE_NAME = b"Emulated Sony DS5 Edge Controller" +DS5_NAME = b"Sony Interactive Entertainment DualSense Wireless Controller" +DS5_EDGE_NAME = b"Sony Interactive Entertainment DualSense Edge Wireless Controller" DS5_EDGE_MIN_REPORT_FREQ = 25 DS5_EDGE_MAX_REPORT_FREQ = 1000 diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index dfc7eb5b..c7a5b197 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -1,7 +1,14 @@ from threading import Event, Thread from typing import Any, Sequence -from hhd.plugins import Config, Context, Emitter, HHDPlugin, load_relative_yaml +from hhd.plugins import ( + Config, + Context, + Emitter, + HHDPlugin, + load_relative_yaml, + get_outputs_config, +) from hhd.plugins.settings import HHDSettings @@ -24,7 +31,11 @@ def open( self.prev = None def settings(self) -> HHDSettings: - return {"controllers": {"legion_go": load_relative_yaml("controllers.yaml")}} + base = {"controllers": {"legion_go": load_relative_yaml("controllers.yaml")}} + base["controllers"]["legion_go"]["children"]["xinput"].update( + get_outputs_config() + ) + return base def update(self, conf: Config): if conf["controllers.legion_go"] == self.prev: diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index ecf469fb..9ac614e6 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -5,20 +5,17 @@ import sys import time from threading import Event as TEvent -from typing import Sequence, Literal +from typing import Literal, Sequence -from hhd.controller import Button, Consumer, Event, Producer, get_outputs +from hhd.controller import Button, Consumer, Event, Producer from hhd.controller.base import Multiplexer, TouchpadAction from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import AccelImu, GyroImu -from hhd.controller.virtual.uinput import ( - UInputDevice, - HHD_PID_VENDOR, -) -from hhd.plugins import Config, Context, Emitter +from hhd.controller.virtual.uinput import HHD_PID_VENDOR, UInputDevice +from hhd.plugins import Config, Context, Emitter, get_outputs from .const import ( LGO_RAW_INTERFACE_AXIS_MAP, diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yaml index f12cab5a..b406281c 100644 --- a/src/hhd/device/legion_go/controllers.yaml +++ b/src/hhd/device/legion_go/controllers.yaml @@ -13,60 +13,6 @@ children: hint: >- Emulate different controller types when the Legion Controllers are in X-Input mode. - default: dualsense - modes: - # - # No emulation - # - disabled: - type: container - tags: [lgc_emulation_disabled] - title: Disabled - hint: >- - Does not modify the default controller. - # - # evdev through uinput - # - uinput: - type: container - tags: [lgc_emulation_uinput, uinput] - title: Virtual Controller - hint: >- - Creates a virtual `Handheld Daemon Controller` that can be used normally - in apps. Back buttons are supported but steam will not detect them. - If Gyroscope or Accelerometer are enabled, a Motion device will be - created as well (experimental; works in Dolphin). - # - # Dual Sense 5 - # - dualsense: - type: container - tags: [lgc_emulation_dualsense, dualsense] - title: Dualsense Edge - hint: >- - Emulates the expensive Dualsense Edge Sony controller that maps 1-1 to - the legion go. - - children: - led_support: - type: bool - title: LED Support - hint: >- - Passes through the LEDs to the controller, which allows games - to control them. - default: True - - bluetooth_mode: - type: bool - title: Use - hint: >- - Emulates the controller in bluetooth mode instead of USB mode. - This is the default as it causes less issues with how apps - interact with the controller. - However, using USB mode can improve LED support (?) in some games. - Test and report back! - default: True - # # Common settings # diff --git a/src/hhd/plugins/__init__.py b/src/hhd/plugins/__init__.py index 4d21942c..74d959e7 100644 --- a/src/hhd/plugins/__init__.py +++ b/src/hhd/plugins/__init__.py @@ -1,28 +1,8 @@ from .conf import Config from .plugin import HHDAutodetect, HHDPlugin, Context, Emitter, Event from .settings import HHDSettings - - -def get_relative_fn(fn: str): - """Returns the directory of a file relative to the script calling this function.""" - import inspect - import os - - script_fn = inspect.currentframe().f_back.f_globals["__file__"] # type: ignore - dirname = os.path.dirname(script_fn) - return os.path.join(dirname, fn) - - -def load_relative_yaml(fn: str): - """Returns the yaml data of a file in the relative dir provided.""" - import inspect - import os - import yaml - - script_fn = inspect.currentframe().f_back.f_globals["__file__"] # type: ignore - dirname = os.path.dirname(script_fn) - with open(os.path.join(dirname, fn), "r") as f: - return yaml.safe_load(f) +from .utils import get_relative_fn, load_relative_yaml +from .outputs import get_outputs_config, get_outputs __all__ = [ @@ -35,4 +15,6 @@ def load_relative_yaml(fn: str): "Emitter", "Event", "Context", + "get_outputs_config", + "get_outputs", ] diff --git a/src/hhd/controller/outputs.py b/src/hhd/plugins/outputs.py similarity index 85% rename from src/hhd/controller/outputs.py rename to src/hhd/plugins/outputs.py index 3c147663..80f54e64 100644 --- a/src/hhd/controller/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -1,8 +1,9 @@ from typing import Any, Mapping, Sequence -from .base import Consumer, Producer -from .virtual.dualsense import DualsenseEdge, TouchpadCorrectionType -from .virtual.uinput import ( +from .utils import load_relative_yaml +from ..controller.base import Consumer, Producer +from ..controller.virtual.dualsense import Dualsense, TouchpadCorrectionType +from ..controller.virtual.uinput import ( HHD_PID_MOTION, HHD_PID_TOUCHPAD, MOTION_AXIS_MAP, @@ -26,10 +27,11 @@ def get_outputs( match controller: case "dualsense": uses_touch = touchpad == "controller" - d = DualsenseEdge( + d = Dualsense( touchpad_method=touch_conf["controller.correction"].to( TouchpadCorrectionType ), + edge_mode=conf["dualsense.edge_mode"].to(bool), use_bluetooth=conf["dualsense.bluetooth_mode"].to(bool), enable_touchpad=uses_touch, enable_rgb=conf["dualsense.led_support"].to(bool), @@ -71,3 +73,7 @@ def get_outputs( uses_touch = True return producers, consumers, {"uses_touch": uses_touch, "is_dual": False} + + +def get_outputs_config(): + return load_relative_yaml("outputs.yml") diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml new file mode 100644 index 00000000..4f376cf3 --- /dev/null +++ b/src/hhd/plugins/outputs.yml @@ -0,0 +1,63 @@ +default: dualsense +modes: + # + # No emulation + # + disabled: + type: container + tags: [lgc_emulation_disabled] + title: Disabled + hint: >- + Does not modify the default controller. + # + # evdev through uinput + # + uinput: + type: container + tags: [lgc_emulation_uinput, uinput] + title: Virtual Controller + hint: >- + Creates a virtual `Handheld Daemon Controller` that can be used normally + in apps. Back buttons are supported but steam will not detect them. + If Gyroscope or Accelerometer are enabled, a Motion device will be + created as well (experimental; works in Dolphin). + # + # Dual Sense 5 + # + dualsense: + type: container + tags: [lgc_emulation_dualsense, dualsense] + title: Dualsense + hint: >- + Emulates the expensive Dualsense Sony controller, both Edge and non-edge + variants. + + children: + led_support: + type: bool + title: LED Support + hint: >- + Passes through the LEDs to the controller, which allows games + to control them. + default: True + + bluetooth_mode: + type: bool + title: Bluetooth Mode + hint: >- + Emulates the controller in bluetooth mode instead of USB mode. + This is the default as it causes less issues with how apps + interact with the controller. + However, using USB mode can improve LED support (?) in some games. + Test and report back! + default: True + + edge_mode: + type: bool + title: Edge Mode + hint: >- + Uses the edge product ID which enables paddle support. + The edge controller is a bit obscure, so some games might not + support it correctly. + You can disable this to use normal Dualsense (no paddle support). + default: True diff --git a/src/hhd/plugins/utils.py b/src/hhd/plugins/utils.py new file mode 100644 index 00000000..d0e2c859 --- /dev/null +++ b/src/hhd/plugins/utils.py @@ -0,0 +1,20 @@ +def get_relative_fn(fn: str): + """Returns the directory of a file relative to the script calling this function.""" + import inspect + import os + + script_fn = inspect.currentframe().f_back.f_globals["__file__"] # type: ignore + dirname = os.path.dirname(script_fn) + return os.path.join(dirname, fn) + + +def load_relative_yaml(fn: str): + """Returns the yaml data of a file in the relative dir provided.""" + import inspect + import os + import yaml + + script_fn = inspect.currentframe().f_back.f_globals["__file__"] # type: ignore + dirname = os.path.dirname(script_fn) + with open(os.path.join(dirname, fn), "r") as f: + return yaml.safe_load(f) diff --git a/usr/lib/udev/rules.d/83-hhd.rules b/usr/lib/udev/rules.d/83-hhd.rules index d621bc0a..54f5b67f 100644 --- a/usr/lib/udev/rules.d/83-hhd.rules +++ b/usr/lib/udev/rules.d/83-hhd.rules @@ -8,6 +8,10 @@ KERNELS=="0020:1022:*", SUBSYSTEM=="iio", TEST=="in_accel_x_raw", TEST=="in_acce # Allow steam to access the raw controllers # +# Sony DualSense Wireless-Controller; Bluetooth; USB +KERNEL=="hidraw*", KERNELS=="*054C:0CE6*", MODE="0660", TAG+="uaccess" +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0660", TAG+="uaccess" + # Sony DualSense Edge Wireless-Controller; Bluetooth; USB KERNEL=="hidraw*", KERNELS=="*054C:0DF2*", MODE="0666", TAG+="uaccess" KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0666", TAG+="uaccess" From 837f887a53dcf7908d761615780508cf40fe22fd Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 13:18:30 +0200 Subject: [PATCH 0093/1497] relax ds5 perms --- usr/lib/udev/rules.d/83-hhd.rules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usr/lib/udev/rules.d/83-hhd.rules b/usr/lib/udev/rules.d/83-hhd.rules index 54f5b67f..bd520dfe 100644 --- a/usr/lib/udev/rules.d/83-hhd.rules +++ b/usr/lib/udev/rules.d/83-hhd.rules @@ -9,8 +9,8 @@ KERNELS=="0020:1022:*", SUBSYSTEM=="iio", TEST=="in_accel_x_raw", TEST=="in_acce # # Sony DualSense Wireless-Controller; Bluetooth; USB -KERNEL=="hidraw*", KERNELS=="*054C:0CE6*", MODE="0660", TAG+="uaccess" -KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0660", TAG+="uaccess" +KERNEL=="hidraw*", KERNELS=="*054C:0CE6*", MODE="0666", TAG+="uaccess" +KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0666", TAG+="uaccess" # Sony DualSense Edge Wireless-Controller; Bluetooth; USB KERNEL=="hidraw*", KERNELS=="*054C:0DF2*", MODE="0666", TAG+="uaccess" From cbfcb6fdff46bab3bf588a11cac328bffd9e1776 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 13:48:09 +0200 Subject: [PATCH 0094/1497] cleanup power button daemon to prepare for other devices --- src/hhd/plugins/powerbutton/base.py | 44 ++++++++++------------------ src/hhd/plugins/powerbutton/const.py | 22 +++++++------- 2 files changed, 26 insertions(+), 40 deletions(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 8581a461..3f14272d 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -11,7 +11,7 @@ from hhd.utils import Context, expanduser -from .const import SUPPORTED_DEVICES, PowerButtonConfig +from .const import DEFAULT_DEVICE, SUPPORTED_DEVICES, PowerButtonConfig logger = logging.getLogger(__name__) @@ -69,26 +69,28 @@ def run_steam_command(command: str, ctx: Context): def register_power_button(b: PowerButtonConfig) -> evdev.InputDevice | None: for device in [evdev.InputDevice(path) for path in evdev.list_devices()]: - if str(device.phys).startswith(b.phys): - device.grab() - logger.info(f"Captured power button '{device.name}': '{device.phys}'") - return device + for phys in b.phys: + if str(device.phys).startswith(phys): + device.grab() + logger.info(f"Captured power button '{device.name}': '{device.phys}'") + return device return None def register_hold_button(b: PowerButtonConfig) -> evdev.InputDevice | None: - if not b.hold_phys or not b.hold_events or b.hold_grab is None: + if not b.hold_phys or not b.hold_code: logger.error( f"Device configuration tuple does not contain required parameters:\n{b}" ) return None for device in [evdev.InputDevice(path) for path in evdev.list_devices()]: - if str(device.phys).startswith(b.hold_phys): - if b.hold_grab: - device.grab() - logger.info(f"Captured hold keyboard '{device.name}': '{device.phys}'") - return device + for phys in b.hold_phys: + if str(device.phys).startswith(phys): + if b.hold_grab: + device.grab() + logger.info(f"Captured hold keyboard '{device.name}': '{device.phys}'") + return device return None @@ -100,7 +102,7 @@ def get_config() -> PowerButtonConfig | None: if d.prod_name == prod: return d - return None + return DEFAULT_DEVICE def run_steam_shortpress(perms: Context): @@ -128,14 +130,9 @@ def power_button_run(cfg: PowerButtonConfig, ctx: Context, should_exit: Event): def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event): - if not cfg.hold_events: - logger.error(f"Invalid hold events in config. Exiting.\n:{cfg.hold_events}") - return - press_dev = None hold_dev = None try: - hold_state = 0 while not should_exit.is_set(): # Initial check for steam if not is_steam_gamescope_running(perms): @@ -176,18 +173,7 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) issue_systemctl = not run_steam_shortpress(perms) elif fd == hold_dev.fd: ev = hold_dev.read_one() - chk = (ev.type, ev.code, ev.value) - - if hold_state >= len(cfg.hold_events): - hold_state = 0 - - if chk == cfg.hold_events[hold_state]: - hold_state += 1 - else: - hold_state = 0 - - if hold_state == len(cfg.hold_events): - hold_state = 0 + if ev.type == B("EV_KEY") and ev.code == cfg.hold_code and ev.value: logger.info("Executing long press.") issue_systemctl = not run_steam_longpress(perms) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 4b448fe2..05c90bc9 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -3,13 +3,12 @@ class PowerButtonConfig(NamedTuple): device: str - type: Literal["hold_emitted", "hold_isa"] prod_name: str - phys: str - hold_phys: str | None = None - hold_grab: bool | None = None - # ev.type, ev.code, ev.value pairs - hold_events: Sequence[tuple[int, int, int]] | None = None + type: Literal["hold_emitted", "hold_isa"] = "hold_isa" + phys: Sequence[str] = ["LNXPWRBN", "PNP0C0C"] + hold_phys: Sequence[str] = ["phys-hhd-powerbutton", "isa0060"] + hold_grab: bool = False + hold_code: int = 125 # left meta # POWER_BUTTON_NAMES = ["Power Button"] @@ -20,15 +19,16 @@ class PowerButtonConfig(NamedTuple): SUPPORTED_DEVICES: Sequence[PowerButtonConfig] = [ PBC( "Legion Go", - "hold_isa", "83E1", - "PNP0C0C", - "isa0060", - False, - [(4, 4, 219), (1, 125, 1), (0, 0, 0)], ) ] +DEFAULT_DEVICE: PowerButtonConfig = PBC( + "uknown", + "NA", +) + + # Legion go # At device with phys=isa0060/serio0/input0 # From d0b5e486cc11d5e190f8776eec1e22383fa51b9a Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 15:26:44 +0200 Subject: [PATCH 0095/1497] add initial scaffold for rog ally --- pyproject.toml | 1 + src/hhd/__main__.py | 2 + src/hhd/controller/__init__.py | 8 +- src/hhd/controller/base.py | 47 ++++ src/hhd/controller/physical/imu.py | 224 ++++++++++-------- src/hhd/device/legion_go/__init__.py | 2 +- src/hhd/device/legion_go/base.py | 2 +- .../{controllers.yaml => controllers.yml} | 0 src/hhd/device/rog_ally/__init__.py | 76 ++++++ src/hhd/device/rog_ally/base.py | 166 +++++++++++++ src/hhd/device/rog_ally/controllers.yml | 44 ++++ 11 files changed, 475 insertions(+), 97 deletions(-) rename src/hhd/device/legion_go/{controllers.yaml => controllers.yml} (100%) create mode 100644 src/hhd/device/rog_ally/__init__.py create mode 100644 src/hhd/device/rog_ally/base.py create mode 100644 src/hhd/device/rog_ally/controllers.yml diff --git a/pyproject.toml b/pyproject.toml index 71eab39b..2ff7939f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,7 @@ hhd = "hhd.__main__:main" [project.entry-points."hhd.plugins"] legion_go = "hhd.device.legion_go:autodetect" +rog_ally = "hhd.device.rog_ally:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" [build-system] diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 1b7ecf12..0f0806b3 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -189,6 +189,8 @@ def main(): plugin_str = "Loaded the following plugins:" for pkg_name, sub_plugins in plugins.items(): + if not sub_plugins: + continue plugin_str += ( f"\n - {pkg_name:>8s}: {', '.join(p.name for p in sub_plugins)}" ) diff --git a/src/hhd/controller/__init__.py b/src/hhd/controller/__init__.py index 2a4e9866..b1f76158 100644 --- a/src/hhd/controller/__init__.py +++ b/src/hhd/controller/__init__.py @@ -1,10 +1,12 @@ from .base import ( Consumer, Event, + KeyboardWrapper, + Multiplexer, Producer, - can_read, - TouchpadCorrectionType, TouchpadCorrection, + TouchpadCorrectionType, + can_read, correct_touchpad, ) from .const import Axis, Button, Configuration @@ -20,4 +22,6 @@ "TouchpadCorrectionType", "TouchpadCorrection", "correct_touchpad", + "KeyboardWrapper", + "Multiplexer", ] diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 7c0b8c11..c6bd3b47 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -483,5 +483,52 @@ def process(self, events: Sequence[Event]): return out +class KeyboardWrapper(Producer, Consumer): + def __init__( + self, parent: Producer, button_map: Sequence[tuple[set[Button], Button]] + ) -> None: + self.parent = parent + self.button_map = button_map + + self.active_in: set[Button] = set() + self.active_out: set[Button] = set() + + def open(self) -> Sequence[int]: + self.active_in: set[Button] = set() + self.active_out: set[Button] = set() + return self.parent.open() + + def close(self, exit: bool) -> bool: + return self.parent.close(exit) + + def produce(self, fds: Sequence[int]) -> Sequence[Event]: + evs: Sequence[Event] = self.parent.produce(fds) + # Update in map + for ev in evs: + if ev["type"] == "button": + if ev["value"]: + self.active_in.add(ev["code"]) + elif ev["code"] in self.active_in: + self.active_in.remove(ev["code"]) + + # Debounce and output + out: Sequence[Event] = [] + for bset, action in self.button_map: + is_sub = bset.issubset(self.active_in) + is_active = action in self.active_out + if is_sub and not is_active: + self.active_out.add(action) + out.append({"type": "button", "code": action, "value": True}) + elif not is_sub and is_active: + self.active_out.remove(action) + out.append({"type": "button", "code": action, "value": False}) + + return out + + def consume(self, events: Sequence[Event]): + if isinstance(self.parent, Consumer): + return self.parent.consume(events) + + def can_read(fd: int): return select.select([fd], [], [], 0)[0] diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 0cd93508..a8f68991 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -30,21 +30,35 @@ class DeviceInfo(NamedTuple): sysfs: str -ACCEL_MAPPINGS: dict[str, tuple[Axis, float | None]] = { - "accel_x": ("accel_z", 3), - "accel_y": ("accel_x", 3), - "accel_z": ("accel_y", 3), - "timestamp": ("accel_ts", None), +ACCEL_NAMES = ["accel_3d"] +GYRO_NAMES = ["gyro_3d"] +IMU_NAMES = ["bmi323-imu"] + +ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { + "accel_x": ("accel_z", "accel", 3), + "accel_y": ("accel_x", "accel", 3), + "accel_z": ("accel_y", "accel", 3), + "timestamp": ("accel_ts", "accel", None), } -GYRO_MAPPINGS: dict[str, tuple[Axis, float | None]] = { - "anglvel_x": ("gyro_z", None), - "anglvel_y": ("gyro_x", None), - "anglvel_z": ("gyro_y", None), - "timestamp": ("gyro_ts", None), +GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { + "anglvel_x": ("gyro_z", "anglvel", None), + "anglvel_y": ("gyro_x", "anglvel", None), + "anglvel_z": ("gyro_y", "anglvel", None), + "timestamp": ("gyro_ts", "anglvel", None), +} + +BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { + "accel_x": ("accel_z", "accel", 3), + "accel_y": ("accel_x", "accel", 3), + "accel_z": ("accel_y", "accel", 3), + "anglvel_x": ("gyro_z", "anglvel", None), + "anglvel_y": ("gyro_x", "anglvel", None), + "anglvel_z": ("gyro_y", "anglvel", None), + "timestamp": ("gyro_ts", "anglvel", None), } -def find_sensor(sensor: str): +def find_sensor(sensors: Sequence[str]): IIO_BASE_DIR = "/sys/bus/iio/devices/" for d in os.listdir(IIO_BASE_DIR): @@ -58,13 +72,13 @@ def find_sensor(sensor: str): continue with open(name_fn, "r") as f: - name = f.read() + name = f.read().strip() - if name.strip() == sensor: - logger.info(f"Found device '{sensor}' at\n{sensor_dir}") - return sensor_dir + if name in sensors: + logger.info(f"Found device '{name}' at\n{sensor_dir}") + return sensor_dir, name - return None + return None, None def write_sysfs(dir: str, fn: str, val: Any): @@ -80,9 +94,9 @@ def read_sysfs(dir: str, fn: str): def prepare_dev( sensor_dir: str, type: str, - attr: str, - freq: int | None, - mappings: dict[str, tuple[Axis, float | None]], + attr: Sequence[str], + freq: Sequence[int] | None, + mappings: dict[str, tuple[Axis, str | None, float | None]], update_trigger: bool, ) -> DeviceInfo | None: # Prepare device buffer @@ -92,9 +106,10 @@ def prepare_dev( # Set sampling frequency if freq is not None: - sfn = os.path.join(sensor_dir, f"in_{attr}_sampling_frequency") - if os.path.isfile(sfn): - write_sysfs(sensor_dir, f"in_{attr}_sampling_frequency", freq) + for a, f in zip(attr, freq): + sfn = os.path.join(sensor_dir, f"in_{a}_sampling_frequency") + if os.path.isfile(sfn): + write_sysfs(sensor_dir, f"in_{a}_sampling_frequency", f) # Set trigger if update_trigger: @@ -139,15 +154,16 @@ def prepare_dev( # Prepare scan metadata if fn in mappings: - ax, max_val = mappings[fn] + ax, atr, max_val = mappings[fn] + if atr: + offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset")) + scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale")) + else: + offset = 0 + scale = 1 write_sysfs(sensor_dir, f"scan_elements/in_{fn}_en", 1) else: ax = max_val = None - - if fn != "timestamp": - offset = float(read_sysfs(sensor_dir, f"in_{attr}_offset")) - scale = float(read_sysfs(sensor_dir, f"in_{attr}_scale")) - else: offset = 0 scale = 1 @@ -177,13 +193,13 @@ def get_size(dev: DeviceInfo): class IioReader(Producer): def __init__( self, - type: str, - attr: str, - freq: int | None, - mappings: dict[str, tuple[Axis, float | None]], + types: Sequence[str], + attr: Sequence[str], + freq: Sequence[int] | None, + mappings: dict[str, tuple[Axis, str | None, float | None]], update_trigger: bool = False, ) -> None: - self.type = type + self.types = types self.attr = attr self.freq = freq self.mappings = mappings @@ -191,13 +207,13 @@ def __init__( self.fd = 0 def open(self): - sens_dir = find_sensor(self.type) - if not sens_dir: + sens_dir, type = find_sensor(self.types) + if not sens_dir or not type: return [] dev = prepare_dev( sens_dir, - self.type, + type, self.attr, self.freq, self.mappings, @@ -278,12 +294,26 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: class AccelImu(IioReader): def __init__(self, freq=None) -> None: - super().__init__("accel_3d", "accel", freq, ACCEL_MAPPINGS) + super().__init__( + ACCEL_NAMES, ["accel"], [freq] if freq else None, ACCEL_MAPPINGS + ) class GyroImu(IioReader): def __init__(self, freq=None) -> None: - super().__init__("gyro_3d", "anglvel", freq, GYRO_MAPPINGS) + super().__init__( + GYRO_NAMES, ["anglvel"], [freq] if freq else None, GYRO_MAPPINGS + ) + + +class CombinedImu(IioReader): + def __init__(self, freq: int = 400) -> None: + super().__init__( + IMU_NAMES, + ["anglvel", "accel"], + [freq, freq] if freq else None, + BMI_MAPPINGS, + ) class ForcedSampler: @@ -296,7 +326,7 @@ def open(self): self.fds = [] self.paths = [] for d in self.devices: - f = find_sensor(d) + f, _ = find_sensor(d) if not f: continue if "accel" in d: @@ -326,60 +356,68 @@ def close(self): os.close(fd) -# class SoftwareTrigger(IioReader): -# BEGIN_ID: int = 72 -# ATTEMPTS: int = 3 - -# def __init__(self, devices: Sequence[str]) -> None: -# self.devices = devices -# self.old_triggers = {} - -# def open(self): -# for id in range( -# SoftwareTrigger.BEGIN_ID, -# SoftwareTrigger.BEGIN_ID + SoftwareTrigger.ATTEMPTS, -# ): -# try: -# with open( -# "/sys/bus/iio/devices/iio_sysfs_trigger/add_trigger", "w" -# ) as f: -# f.write(str(id)) -# break -# except Exception as e: -# print(e) -# else: -# logger.error(f"Failed to create software trigger.") -# return -# self.id = id - -# self.old_triggers = {} -# for d in self.devices: -# s = find_sensor(d) -# if not s: -# continue -# with open(os.path.join(s, "buffer/enable"), "w") as f: -# f.write("0") -# trig_fn = os.path.join(s, "trigger/current_trigger") -# with open(trig_fn, "r") as f: -# self.old_triggers[trig_fn] = f.read() -# with open(trig_fn, "w") as f: -# f.write(f"sysfstrig{self.id}") - -# def close(self): -# for trig, name in self.old_triggers.items(): -# try: -# with open(trig, "w") as f: -# f.write(name) -# except Exception: -# logger.error(f"Could not restore original trigger:\n{trig} to {name}") - -# try: -# with open( -# "/sys/bus/iio/devices/iio_sysfs_trigger/remove_trigger", "w" -# ) as f: -# f.write(str(self.id)) -# except Exception: -# logger.error(f"Could not delete sysfs trigger with id {self.id}") +class SoftwareTrigger(IioReader): + BEGIN_ID: int = 72 + ATTEMPTS: int = 3 + + def __init__( + self, devices: Sequence[Sequence[str]] = [IMU_NAMES, GYRO_NAMES, ACCEL_NAMES] + ) -> None: + self.devices = devices + self.old_triggers = {} + + def open(self): + try: + os.system("modprobe iio-trig-sysfs") + except Exception: + logger.warning(f"Could not modprobe software triggers") + + for id in range( + SoftwareTrigger.BEGIN_ID, + SoftwareTrigger.BEGIN_ID + SoftwareTrigger.ATTEMPTS, + ): + try: + with open( + "/sys/bus/iio/devices/iio_sysfs_trigger/add_trigger", "w" + ) as f: + f.write(str(id)) + break + except Exception as e: + print(e) + else: + logger.error(f"Failed to create software trigger.") + return + self.id = id + + self.old_triggers = {} + for d in self.devices: + s, _ = find_sensor(d) + if not s: + continue + + with open(os.path.join(s, "buffer/enable"), "w") as f: + f.write("0") + trig_fn = os.path.join(s, "trigger/current_trigger") + with open(trig_fn, "r") as f: + self.old_triggers[trig_fn] = f.read() + with open(trig_fn, "w") as f: + f.write(f"sysfstrig{self.id}") + + def close(self): + for trig, name in self.old_triggers.items(): + try: + with open(trig, "w") as f: + f.write(name) + except Exception: + logger.error(f"Could not restore original trigger:\n{trig} to {name}") + + try: + with open( + "/sys/bus/iio/devices/iio_sysfs_trigger/remove_trigger", "w" + ) as f: + f.write(str(self.id)) + except Exception: + logger.error(f"Could not delete sysfs trigger with id {self.id}") __all__ = ["IioReader", "AccelImu", "GyroImu"] diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index c7a5b197..28154033 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -31,7 +31,7 @@ def open( self.prev = None def settings(self) -> HHDSettings: - base = {"controllers": {"legion_go": load_relative_yaml("controllers.yaml")}} + base = {"controllers": {"legion_go": load_relative_yaml("controllers.yml")}} base["controllers"]["legion_go"]["children"]["xinput"].update( get_outputs_config() ) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 9ac614e6..8b20c9cd 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -356,7 +356,7 @@ def open(self) -> Sequence[int]: return self.parent.open() def close(self, exit: bool) -> bool: - return super().close(exit) + return self.parent.close(exit) def produce(self, fds: Sequence[int]) -> Sequence[Event]: evs: Sequence[Event] = self.parent.produce(fds) diff --git a/src/hhd/device/legion_go/controllers.yaml b/src/hhd/device/legion_go/controllers.yml similarity index 100% rename from src/hhd/device/legion_go/controllers.yaml rename to src/hhd/device/legion_go/controllers.yml diff --git a/src/hhd/device/rog_ally/__init__.py b/src/hhd/device/rog_ally/__init__.py new file mode 100644 index 00000000..b2e9d29e --- /dev/null +++ b/src/hhd/device/rog_ally/__init__.py @@ -0,0 +1,76 @@ +from threading import Event, Thread +from typing import Any, Sequence + +from hhd.plugins import ( + Config, + Context, + Emitter, + HHDPlugin, + load_relative_yaml, + get_outputs_config, +) +from hhd.plugins.settings import HHDSettings + + +class RogAllyControllersPlugin(HHDPlugin): + name = "rog_ally_controllers" + priority = 18 + log = "ally" + + def __init__(self) -> None: + self.t = None + self.event = None + + def open( + self, + emit: Emitter, + context: Context, + ): + self.emit = emit + self.context = context + self.prev = None + + def settings(self) -> HHDSettings: + base = {"controllers": {"rog_ally": load_relative_yaml("controllers.yml")}} + base["controllers"]["rog_ally"]["children"]["controller_mode"].update( + get_outputs_config() + ) + return base + + def update(self, conf: Config): + if conf["controllers.rog_ally"] == self.prev: + return + self.prev = conf["controllers.rog_ally"] + + self.start(self.prev) + + def start(self, conf): + from .base import plugin_run + + self.close() + self.event = Event() + self.t = Thread( + target=plugin_run, + args=(conf, self.emit, self.context, self.event), + ) + self.t.start() + + def close(self): + if not self.event or not self.t: + return + self.event.set() + self.t.join() + self.event = None + self.t = None + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + # Match just product number, should be enough for now + with open("/sys/devices/virtual/dmi/id/product_name") as f: + if not f.read().strip() == "ROG Ally RC71L_RC71L": + return [] + + return [RogAllyControllersPlugin()] diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py new file mode 100644 index 00000000..ec29d7c6 --- /dev/null +++ b/src/hhd/device/rog_ally/base.py @@ -0,0 +1,166 @@ +import argparse +import logging +import select +import time +from threading import Event as TEvent + +from hhd.controller import Multiplexer, KeyboardWrapper +from hhd.controller.physical.evdev import B as EC +from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.hidraw import GenericGamepadHidraw +from hhd.controller.physical.imu import CombinedImu +from hhd.controller.virtual.uinput import HHD_PID_VENDOR, UInputDevice +from hhd.plugins import Config, Context, Emitter, get_outputs + +ERROR_DELAY = 1 +SELECT_TIMEOUT = 1 + +logger = logging.getLogger(__name__) + +ASUS_VID = 0x0B05 +ASUS_KBD_PID = 0x1ABE +GAMEPAD_VID = 0x045E +GAMEPAD_PID = 0x028E + +ASUS_KBD_1_MAP = [] +ASUS_KBD_2_MAP = [] + + +def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): + while not should_exit.is_set(): + try: + logger.info("Launching emulated controller.") + controller_loop(conf, should_exit) + except Exception as e: + logger.error(f"Received the following error:\n{e}") + logger.error( + f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." + ) + # Raise exception + if conf.get("debug", False): + raise e + time.sleep(ERROR_DELAY) + + +def controller_loop(conf: Config, should_exit: TEvent): + debug = conf.get("debug", False) + + # Output + motion = conf["accel"].to(bool) or conf["gyro"].to(bool) + d_producers, d_outs, d_params = get_outputs( + conf["xinput"], conf["touchpad"], motion + ) + + # Imu + d_imu = CombinedImu(conf["imu_hz"].to(int)) + + # Inputs + d_xinput = GenericGamepadEvdev( + vid=[GAMEPAD_VID], + pid=[GAMEPAD_PID], + # name=["Generic X-Box pad"], + capabilities={EC("EV_KEY"): [EC("BTN_A")]}, + required=True, + hide=True, + ) + + # Grab shortcut keyboards + d_kbd_1 = KeyboardWrapper( + GenericGamepadEvdev( + vid=[ASUS_VID], + pid=[ASUS_KBD_PID], + capabilities={EC("EV_KEY"): [EC("KEY_1")]}, + required=True, + ), + ASUS_KBD_1_MAP, + ) + d_kbd_2 = KeyboardWrapper( + GenericGamepadEvdev( + vid=[ASUS_VID], + pid=[ASUS_KBD_PID], + capabilities={EC("EV_KEY"): [EC("KEY_1")]}, + # report_size=64, + required=True, + ), + ASUS_KBD_2_MAP, + ) + + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + share_to_qam=conf["share_to_qam"].to(bool), + ) + + REPORT_FREQ_MIN = 25 + REPORT_FREQ_MAX = 400 + + if conf["imu"].to(bool): + REPORT_FREQ_MAX = max(REPORT_FREQ_MAX, conf["imu_hz"].to(float)) + + REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN + REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX + + fds = [] + devs = [] + fd_to_dev = {} + + def prepare(m): + devs.append(m) + fs = m.open() + fds.extend(fs) + for f in fs: + fd_to_dev[f] = m + + try: + prepare(d_xinput) + if conf.get("imu", False): + prepare(d_imu) + prepare(d_kbd_1) + prepare(d_kbd_2) + for d in d_producers: + prepare(d) + + logger.info("Emulated controller launched, have fun!") + while not should_exit.is_set(): + start = time.perf_counter() + # Add timeout to call consumers a minimum amount of times per second + r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) + evs = [] + to_run = set() + for f in r: + to_run.add(id(fd_to_dev[f])) + + for d in devs: + if id(d) in to_run: + evs.extend(d.produce(r)) + + evs = multiplexer.process(evs) + if evs: + if debug: + logger.info(evs) + + d_xinput.consume(evs) + + for d in d_outs: + d.consume(evs) + + # If unbounded, the total number of events per second is the sum of all + # events generated by the producers. + # For Legion go, that would be 100 + 100 + 500 + 30 = 730 + # Since the controllers of the legion go only update at 500hz, this is + # wasteful. + # By setting a target refresh rate for the report and sleeping at the + # end, we ensure that even if multiple fds become ready close to each other + # they are combined to the same report, limiting resource use. + # Ideally, this rate is smaller than the report rate of the hardware controller + # to ensure there is always a report from that ready during refresh + t = time.perf_counter() + elapsed = t - start + if elapsed < REPORT_DELAY_MIN: + time.sleep(REPORT_DELAY_MIN - elapsed) + + except KeyboardInterrupt: + raise + finally: + for d in reversed(devs): + d.close(True) diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml new file mode 100644 index 00000000..807a4dcc --- /dev/null +++ b/src/hhd/device/rog_ally/controllers.yml @@ -0,0 +1,44 @@ +type: container +tags: [lgc] +title: Ally Controller Configuration +hint: >- + Allows for configuring the ROG Ally controllers to a unified output. + +children: + controller_mode: + type: mode + tags: [rog_controller_mode] + title: Controller Emulation + hint: >- + Emulate different controller types to fuse ROG features. + + # + # Common settings + # + imu: + type: bool + title: Motion Support + hint: >- + Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) + default: True + + imu_hz: + type: discrete + title: Motion Hz + hint: >- + Sets the sampling frequency for the IMU. + options: [12.5 25 50 100 200 400 800] + default: 200 + + share_to_qam: + type: bool + title: Map Armory to QAM. + default: True + + debug: + type: bool + title: Debug + hint: >- + Output controller events to the console (high CPU use) and raises exceptions + (HHD will crash on errors). + default: False From 2b64b411738172ee40f61e6e1eee53f8d7c095be Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 15:32:26 +0200 Subject: [PATCH 0096/1497] fix config issues --- src/hhd/device/rog_ally/base.py | 3 +-- src/hhd/plugins/outputs.py | 12 ++++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index ec29d7c6..158f6a9a 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -46,9 +46,8 @@ def controller_loop(conf: Config, should_exit: TEvent): debug = conf.get("debug", False) # Output - motion = conf["accel"].to(bool) or conf["gyro"].to(bool) d_producers, d_outs, d_params = get_outputs( - conf["xinput"], conf["touchpad"], motion + conf["controller_mode"], None, conf["imu"].to(bool) ) # Imu diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 80f54e64..2ece3412 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -22,15 +22,19 @@ def get_outputs( consumers = [] controller = conf["mode"].to(str) - touchpad = touch_conf["mode"].to(str) + if touch_conf is not None: + touchpad = touch_conf["mode"].to(str) + correction = touch_conf["controller.correction"].to(TouchpadCorrectionType) + else: + touchpad = "disabled" + correction = "disabled" + uses_touch = False match controller: case "dualsense": uses_touch = touchpad == "controller" d = Dualsense( - touchpad_method=touch_conf["controller.correction"].to( - TouchpadCorrectionType - ), + touchpad_method=correction, edge_mode=conf["dualsense.edge_mode"].to(bool), use_bluetooth=conf["dualsense.bluetooth_mode"].to(bool), enable_touchpad=uses_touch, From 3522f6e6e02538f0d4df551b8ef205971994954c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 16:24:46 +0200 Subject: [PATCH 0097/1497] add hrtimer for ally --- src/hhd/controller/physical/imu.py | 94 +++++++++++++++++++++++++++++- src/hhd/device/rog_ally/base.py | 6 +- 2 files changed, 97 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index a8f68991..239fdf52 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -356,7 +356,99 @@ def close(self): os.close(fd) +class HrtimerTrigger(IioReader): + def __init__( + self, + freq: int, + devices: Sequence[Sequence[str]] = [IMU_NAMES, GYRO_NAMES, ACCEL_NAMES], + ) -> None: + self.freq = freq + self.devices = devices + self.old_triggers = {} + + def open(self): + import subprocess + + # Initialize modules + try: + subprocess.run(["modprobe", "industrialio-sw-trigger"], capture_output=True) + subprocess.run(["modprobe", "iio-trig-sysfs"], capture_output=True) + subprocess.run(["modprobe", "iio-trig-hrtimer"], capture_output=True) + os.makedirs("/config", exist_ok=True) + subprocess.run( + ["mount", "-t", "configfs", "none", "/config"], capture_output=True + ) + except Exception as e: + logger.warning( + f"Could not initialize software hrtimer. It may be initialized. Error:\n{e}" + ) + + # Create trigger + try: + os.makedirs("/config/iio/triggers/hrtimer/hhd", exist_ok=True) + except Exception as e: + logger.error( + f"Could not create 'hhd' trigger. IMU will not work. Error:\n{e}" + ) + return + + # Find trigger + trig = None + for fn in os.listdir("/sys/bus/iio/devices"): + if not fn.startswith("trigger"): + continue + with open(os.path.join("/sys/bus/iio/devices", fn, "name"), "r") as f: + if f.read().strip() == "hhd": + trig = fn + break + if not trig: + logger.warning("Imu timer trigger not found, IMU will not work.") + return + + # Set frequency + try: + with open( + os.path.join("/sys/bus/iio/devices", trig, "sampling_frequency"), "w" + ) as f: + f.write(str(self.freq)) + except Exception as e: + logger.warning("Could not set sampling frequency, IMU will not work.") + return + + self.old_triggers = {} + for d in self.devices: + s, _ = find_sensor(d) + if not s: + continue + + buff_fn = os.path.join(s, "buffer/enable") + trig_fn = os.path.join(s, "trigger/current_trigger") + with open(buff_fn, "w") as f: + f.write("0") + with open(trig_fn, "r") as f: + self.old_triggers[trig_fn] = (f.read(), buff_fn) + with open(trig_fn, "w") as f: + f.write(f"hhd") + + def close(self): + for trig, (name, buff) in self.old_triggers.items(): + try: + with open(buff, "w") as f: + f.write("0") + with open(trig, "w") as f: + f.write(name) + except Exception: + logger.error(f"Could not restore original trigger:\n{trig} to {name}") + + try: + os.rmdir("/config/iio/triggers/hrtimer/hhd") + except Exception as e: + logger.error(f"Could not delete hrtimer trigger. Error:\n{e}") + + class SoftwareTrigger(IioReader): + """Unfinished""" + BEGIN_ID: int = 72 ATTEMPTS: int = 3 @@ -420,4 +512,4 @@ def close(self): logger.error(f"Could not delete sysfs trigger with id {self.id}") -__all__ = ["IioReader", "AccelImu", "GyroImu"] +__all__ = ["IioReader", "AccelImu", "GyroImu", "HrtimerTrigger"] diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 158f6a9a..272a9da7 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -8,8 +8,7 @@ from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw -from hhd.controller.physical.imu import CombinedImu -from hhd.controller.virtual.uinput import HHD_PID_VENDOR, UInputDevice +from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs ERROR_DELAY = 1 @@ -52,6 +51,7 @@ def controller_loop(conf: Config, should_exit: TEvent): # Imu d_imu = CombinedImu(conf["imu_hz"].to(int)) + d_timer = HrtimerTrigger(conf["imu_hz"].to(int)) # Inputs d_xinput = GenericGamepadEvdev( @@ -118,6 +118,7 @@ def prepare(m): prepare(d_kbd_2) for d in d_producers: prepare(d) + d_timer.open() logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): @@ -161,5 +162,6 @@ def prepare(m): except KeyboardInterrupt: raise finally: + d_timer.close() for d in reversed(devs): d.close(True) From 6ff540b3a036822590be18644db2b742ede44e38 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 16:26:30 +0200 Subject: [PATCH 0098/1497] disable keyboards until capability match --- src/hhd/device/rog_ally/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 272a9da7..6acc4f6b 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -114,8 +114,8 @@ def prepare(m): prepare(d_xinput) if conf.get("imu", False): prepare(d_imu) - prepare(d_kbd_1) - prepare(d_kbd_2) + # prepare(d_kbd_1) + # prepare(d_kbd_2) for d in d_producers: prepare(d) d_timer.open() From 8334172532072278dbca7cbe1554cd53040efe76 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 16:44:29 +0200 Subject: [PATCH 0099/1497] enable mode and share on the ally --- src/hhd/controller/const.py | 3 +++ src/hhd/controller/physical/evdev.py | 2 ++ src/hhd/device/rog_ally/base.py | 15 +++++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/hhd/controller/const.py b/src/hhd/controller/const.py index d33bfb76..c96db933 100644 --- a/src/hhd/controller/const.py +++ b/src/hhd/controller/const.py @@ -276,6 +276,9 @@ "key_yen", # 124 # ? "key_unknown", # 240, + # Prog for the ally + "key_prog1", + "key_prog2", ] Axis = AbsAxis | RelAxis diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 45e727a2..6b50c6ff 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -435,6 +435,8 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: "key_hanja": [B("KEY_HANJA")], # 123 "key_yen": [B("KEY_YEN")], # 124 "key_unknown": [B("KEY_UNKNOWN")], # 240, + "key_prog1": [B("KEY_PROG1")], # 148 + "key_prog2": [B("KEY_PROG2")], # 149, } KEYBOARD_MAP_REV: dict[KeyboardButton, int] = {k: v[0] for k, v in _kbd_raw.items()} diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 6acc4f6b..91218b8b 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -1,10 +1,10 @@ -import argparse import logging import select import time from threading import Event as TEvent +from typing import Sequence -from hhd.controller import Multiplexer, KeyboardWrapper +from hhd.controller import Multiplexer, KeyboardWrapper, Button from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw @@ -21,8 +21,11 @@ GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -ASUS_KBD_1_MAP = [] -ASUS_KBD_2_MAP = [] +ASUS_KBD_1_MAP: Sequence[tuple[set[Button], Button]] = [ + ({"key_prog1"}, "share"), # Armory button + ({"key_f16"}, "mode"), # Control center +] +ASUS_KBD_2_MAP: Sequence[tuple[set[Button], Button]] = [] def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): @@ -68,7 +71,7 @@ def controller_loop(conf: Config, should_exit: TEvent): GenericGamepadEvdev( vid=[ASUS_VID], pid=[ASUS_KBD_PID], - capabilities={EC("EV_KEY"): [EC("KEY_1")]}, + capabilities={EC("EV_KEY"): [EC("KEY_PROG1")]}, required=True, ), ASUS_KBD_1_MAP, @@ -114,7 +117,7 @@ def prepare(m): prepare(d_xinput) if conf.get("imu", False): prepare(d_imu) - # prepare(d_kbd_1) + prepare(d_kbd_1) # prepare(d_kbd_2) for d in d_producers: prepare(d) From 140f23254341b3920264618b5cfd118ba6070280 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 17:11:57 +0200 Subject: [PATCH 0100/1497] add ally rgb support (unused) --- src/hhd/device/rog_ally/base.py | 17 ++- src/hhd/device/rog_ally/hid.py | 219 ++++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 src/hhd/device/rog_ally/hid.py diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 91218b8b..552dbc42 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -4,13 +4,15 @@ from threading import Event as TEvent from typing import Sequence -from hhd.controller import Multiplexer, KeyboardWrapper, Button +from hhd.controller import Button, KeyboardWrapper, Multiplexer from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs +from .hid import rgb_callback + ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -66,6 +68,17 @@ def controller_loop(conf: Config, should_exit: TEvent): hide=True, ) + # Vendor + d_vend = GenericGamepadHidraw( + vid=[ASUS_VID], + pid=[ASUS_KBD_PID], + # usage_page=[0xFFA0], + # usage=[0x0001], + report_size=167, + required=True, + callback=rgb_callback, + ) + # Grab shortcut keyboards d_kbd_1 = KeyboardWrapper( GenericGamepadEvdev( @@ -122,6 +135,7 @@ def prepare(m): for d in d_producers: prepare(d) d_timer.open() + # d_vend.open() # Open once hid validation is complete logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): @@ -166,5 +180,6 @@ def prepare(m): raise finally: d_timer.close() + d_vend.close(True) for d in reversed(devs): d.close(True) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py new file mode 100644 index 00000000..7b3286b0 --- /dev/null +++ b/src/hhd/device/rog_ally/hid.py @@ -0,0 +1,219 @@ +from typing import Literal, Sequence + +from hhd.controller import Event +from hhd.controller.lib.hid import Device + +Side = Literal["left", "right"] +RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] + + +def rgb_brightness(): + return [ # Brightness Command + bytes( + [ + 0x5A, + 0xBA, + 0xC5, + 0xC4, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + ] + + +def rgb_command(side: Side, mode: RgbMode, red: int, green: int, blue: int): + match side: + case "left": + c_side = 0x01 + case "right": + c_side = 0x00 + case _: + c_side = 0x00 + + match mode: + case "solid": + # Static + c_mode = 0x00 + case "pulse": + # Breathing + c_mode = 0x01 + case "dynamic": + # Color cycle + c_mode = 0x02 + case "spiral": + # Rainbow + c_mode = 0x03 + # case "adsf": + # # Strobing + # c_mode = 0x0A + # case "asdf": + # # Direct (?) + # c_mode = 0xFF + case _: + c_mode = 0x00 + + return [ + bytes( # Color Command + [ + 0x5A, + 0xB3, + 0x00, + c_mode, + red, + green, + blue, + 0x00, + c_side, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + ] + + +def rgb_set_both(mode: RgbMode, red: int, green: int, blue: int): + return [ + *rgb_brightness(), + *rgb_command("left", mode, red, green, blue), + *rgb_command("right", mode, red, green, blue), + ] + + +def rgb_callback(dev: Device, events: Sequence[Event]): + for ev in events: + if ev["type"] == "led": + if ev["mode"] == "disable": + reps = rgb_set_both("solid", 0, 0, 0) + else: + match ev["mode"]: + case "blinking": + mode = "pulse" + case "rainbow": + mode = "dynamic" + case "solid": + mode = "solid" + case "spiral": + mode = "spiral" + case _: + assert False, f"Mode '{ev['mode']}' not supported." + reps = rgb_set_both( + mode, + ev["red"], + ev["green"], + ev["blue"], + ) + + for r in reps: + dev.write(r) From f374b31cc0464821416c290f9a9bde9ed4554bba Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 17:25:35 +0200 Subject: [PATCH 0101/1497] fix imu bug --- src/hhd/controller/physical/imu.py | 1 + src/hhd/device/rog_ally/base.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 239fdf52..63b2f299 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -205,6 +205,7 @@ def __init__( self.mappings = mappings self.update_trigger = update_trigger self.fd = 0 + self.dev = None def open(self): sens_dir, type = find_sensor(self.types) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 552dbc42..bd7cdfba 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -156,6 +156,7 @@ def prepare(m): if debug: logger.info(evs) + d_vend.consume(evs) d_xinput.consume(evs) for d in d_outs: From 80e6c0f5da752239677559350d69d27e1a41313c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 18:16:40 +0200 Subject: [PATCH 0102/1497] add vendor info --- src/hhd/controller/physical/imu.py | 6 +++--- src/hhd/device/rog_ally/base.py | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 63b2f299..63a7468b 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -232,12 +232,12 @@ def open(self): return [self.fd] def close(self, exit: bool): - if self.fd: - os.close(self.fd) - self.fd = 0 if self.dev: close_dev(self.dev) self.dev = None + if self.fd: + os.close(self.fd) + self.fd = 0 return True def produce(self, fds: Sequence[int]) -> Sequence[Event]: diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index bd7cdfba..eedc6137 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -72,9 +72,8 @@ def controller_loop(conf: Config, should_exit: TEvent): d_vend = GenericGamepadHidraw( vid=[ASUS_VID], pid=[ASUS_KBD_PID], - # usage_page=[0xFFA0], - # usage=[0x0001], - report_size=167, + usage_page=[0xFF31], + usage=[0x0080], required=True, callback=rgb_callback, ) @@ -135,7 +134,7 @@ def prepare(m): for d in d_producers: prepare(d) d_timer.open() - # d_vend.open() # Open once hid validation is complete + d_vend.open() # Open once hid validation is complete logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): From 6bc8a3ce45d29242a6bc1d5d823a3721af596392 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 18:17:54 +0200 Subject: [PATCH 0103/1497] dont open hid last to avoid issues --- src/hhd/device/rog_ally/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index eedc6137..18b6aaca 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -126,6 +126,8 @@ def prepare(m): fd_to_dev[f] = m try: + d_timer.open() + d_vend.open() # Open once hid validation is complete prepare(d_xinput) if conf.get("imu", False): prepare(d_imu) @@ -133,8 +135,6 @@ def prepare(m): # prepare(d_kbd_2) for d in d_producers: prepare(d) - d_timer.open() - d_vend.open() # Open once hid validation is complete logger.info("Emulated controller launched, have fun!") while not should_exit.is_set(): From 41402587ae0b0885c0a7d76f1b7a22827f3c54a5 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 18:23:38 +0200 Subject: [PATCH 0104/1497] add defaults to avoid crashing on the ally --- src/hhd/controller/physical/imu.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 63a7468b..6ca47f4b 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -86,10 +86,14 @@ def write_sysfs(dir: str, fn: str, val: Any): f.write(str(val)) -def read_sysfs(dir: str, fn: str): - with open(os.path.join(dir, fn), "r") as f: - return f.read().strip() - +def read_sysfs(dir: str, fn: str, default: int | None = None): + try: + with open(os.path.join(dir, fn), "r") as f: + return f.read().strip() + except Exception as e: + if default is not None: + return default + raise e def prepare_dev( sensor_dir: str, @@ -156,8 +160,8 @@ def prepare_dev( if fn in mappings: ax, atr, max_val = mappings[fn] if atr: - offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset")) - scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale")) + offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset", 0)) + scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale", 1)) else: offset = 0 scale = 1 From 565ecad81da891bff041f2952eea80617b3b6578 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 18:37:17 +0200 Subject: [PATCH 0105/1497] prepare for per device maps --- src/hhd/controller/physical/imu.py | 73 +++++++++++++++++++----------- src/hhd/device/rog_ally/base.py | 15 +++++- 2 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 6ca47f4b..dc93ec2a 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -22,6 +22,7 @@ class ScanElement(NamedTuple): scale: float offset: float max_val: float | None + flip: bool class DeviceInfo(NamedTuple): @@ -34,27 +35,27 @@ class DeviceInfo(NamedTuple): GYRO_NAMES = ["gyro_3d"] IMU_NAMES = ["bmi323-imu"] -ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { - "accel_x": ("accel_z", "accel", 3), - "accel_y": ("accel_x", "accel", 3), - "accel_z": ("accel_y", "accel", 3), - "timestamp": ("accel_ts", "accel", None), +ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float | None, bool]] = { + "accel_x": ("accel_z", "accel", 3, False), + "accel_y": ("accel_x", "accel", 3, False), + "accel_z": ("accel_y", "accel", 3, False), + "timestamp": ("accel_ts", "accel", None, False), } -GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { - "anglvel_x": ("gyro_z", "anglvel", None), - "anglvel_y": ("gyro_x", "anglvel", None), - "anglvel_z": ("gyro_y", "anglvel", None), - "timestamp": ("gyro_ts", "anglvel", None), +GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float | None, bool]] = { + "anglvel_x": ("gyro_z", "anglvel", None, False), + "anglvel_y": ("gyro_x", "anglvel", None, False), + "anglvel_z": ("gyro_y", "anglvel", None, False), + "timestamp": ("gyro_ts", "anglvel", None, False), } -BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { - "accel_x": ("accel_z", "accel", 3), - "accel_y": ("accel_x", "accel", 3), - "accel_z": ("accel_y", "accel", 3), - "anglvel_x": ("gyro_z", "anglvel", None), - "anglvel_y": ("gyro_x", "anglvel", None), - "anglvel_z": ("gyro_y", "anglvel", None), - "timestamp": ("gyro_ts", "anglvel", None), +BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float | None, bool]] = { + "accel_x": ("accel_z", "accel", 3, False), + "accel_y": ("accel_x", "accel", 3, False), + "accel_z": ("accel_y", "accel", 3, False), + "anglvel_x": ("gyro_z", "anglvel", None, False), + "anglvel_y": ("gyro_x", "anglvel", None, False), + "anglvel_z": ("gyro_y", "anglvel", None, False), + "timestamp": ("gyro_ts", "anglvel", None, False), } @@ -86,7 +87,7 @@ def write_sysfs(dir: str, fn: str, val: Any): f.write(str(val)) -def read_sysfs(dir: str, fn: str, default: int | None = None): +def read_sysfs(dir: str, fn: str, default: str | None = None): try: with open(os.path.join(dir, fn), "r") as f: return f.read().strip() @@ -95,12 +96,13 @@ def read_sysfs(dir: str, fn: str, default: int | None = None): return default raise e + def prepare_dev( sensor_dir: str, type: str, attr: Sequence[str], freq: Sequence[int] | None, - mappings: dict[str, tuple[Axis, str | None, float | None]], + mappings: dict[str, tuple[Axis, str | None, float | None, bool]], update_trigger: bool, ) -> DeviceInfo | None: # Prepare device buffer @@ -158,21 +160,31 @@ def prepare_dev( # Prepare scan metadata if fn in mappings: - ax, atr, max_val = mappings[fn] + ax, atr, max_val, flip = mappings[fn] if atr: - offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset", 0)) - scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale", 1)) + offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset")) + scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale")) else: offset = 0 scale = 1 write_sysfs(sensor_dir, f"scan_elements/in_{fn}_en", 1) else: ax = max_val = None + flip = False offset = 0 scale = 1 axis[idx] = ScanElement( - ax, endianness, signed, bits, storage_bits, shift, scale, offset, max_val + ax, + endianness, + signed, + bits, + storage_bits, + shift, + scale, + offset, + max_val, + flip, ) write_sysfs(sensor_dir, "buffer/enable", 1) @@ -200,7 +212,7 @@ def __init__( types: Sequence[str], attr: Sequence[str], freq: Sequence[int] | None, - mappings: dict[str, tuple[Axis, str | None, float | None]], + mappings: dict[str, tuple[Axis, str | None, float | None, bool]], update_trigger: bool = False, ) -> None: self.types = types @@ -279,6 +291,9 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: else: d = max(d, -se.max_val) + if se.flip: + d = -d + if se.axis not in self.prev or self.prev[se.axis] != d: out.append( { @@ -312,12 +327,16 @@ def __init__(self, freq=None) -> None: class CombinedImu(IioReader): - def __init__(self, freq: int = 400) -> None: + def __init__( + self, + freq: int = 400, + map: dict[str, tuple[Axis, str | None, float | None, bool]] | None = None, + ) -> None: super().__init__( IMU_NAMES, ["anglvel", "accel"], [freq, freq] if freq else None, - BMI_MAPPINGS, + map if map is not None else BMI_MAPPINGS, ) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 18b6aaca..392312e0 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -4,7 +4,7 @@ from threading import Event as TEvent from typing import Sequence -from hhd.controller import Button, KeyboardWrapper, Multiplexer +from hhd.controller import Axis, Button, KeyboardWrapper, Multiplexer from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw @@ -30,6 +30,17 @@ ASUS_KBD_2_MAP: Sequence[tuple[set[Button], Button]] = [] +ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { + "accel_x": ("accel_z", "accel", 3), + "accel_y": ("accel_x", "accel", 3), + "accel_z": ("accel_y", "accel", 3), + "anglvel_x": ("gyro_z", "anglvel", None), + "anglvel_y": ("gyro_x", "anglvel", None), + "anglvel_z": ("gyro_y", "anglvel", None), + "timestamp": ("gyro_ts", "anglvel", None), +} + + def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): while not should_exit.is_set(): try: @@ -126,10 +137,10 @@ def prepare(m): fd_to_dev[f] = m try: - d_timer.open() d_vend.open() # Open once hid validation is complete prepare(d_xinput) if conf.get("imu", False): + d_timer.open() prepare(d_imu) prepare(d_kbd_1) # prepare(d_kbd_2) From 012a30bc0c59c8d43c21dfff132b22e242779398 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 18:38:19 +0200 Subject: [PATCH 0106/1497] add default for offset --- src/hhd/controller/physical/imu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index dc93ec2a..dc25aec1 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -162,7 +162,7 @@ def prepare_dev( if fn in mappings: ax, atr, max_val, flip = mappings[fn] if atr: - offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset")) + offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset", "0")) scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale")) else: offset = 0 From 83440695759098e4647405adf32e85732eb0c970 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 19:54:30 +0200 Subject: [PATCH 0107/1497] handle mode, qam for the ally, initial --- src/hhd/device/rog_ally/base.py | 96 +++++++++++++++++++++++++-------- 1 file changed, 74 insertions(+), 22 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 392312e0..6e0d2e23 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -2,12 +2,23 @@ import select import time from threading import Event as TEvent -from typing import Sequence - -from hhd.controller import Axis, Button, KeyboardWrapper, Multiplexer +from typing import Literal, Sequence + +from hhd.controller import ( + Axis, + Button, + Configuration, + Event, + KeyboardWrapper, + Multiplexer, + can_read, +) +from hhd.controller.base import Event +from hhd.controller.lib.common import AM, BM, CM +from hhd.controller.lib.hid import MAX_REPORT_SIZE from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.hidraw import GenericGamepadHidraw +from hhd.controller.physical.hidraw import EventCallback, GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs @@ -23,11 +34,10 @@ GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -ASUS_KBD_1_MAP: Sequence[tuple[set[Button], Button]] = [ +ASUS_KBD_MAP: Sequence[tuple[set[Button], Button]] = [ ({"key_prog1"}, "share"), # Armory button ({"key_f16"}, "mode"), # Control center ] -ASUS_KBD_2_MAP: Sequence[tuple[set[Button], Button]] = [] ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { @@ -40,6 +50,58 @@ "timestamp": ("gyro_ts", "anglvel", None), } +MODE_DELAY = 0.3 + + +class AllyHidraw(GenericGamepadHidraw): + def open(self) -> Sequence[int]: + self.queue: list[tuple[Event, float]] = [] + return super().open() + + def produce(self, fds: Sequence[int]) -> Sequence[Event]: + # If we can not read return + if not self.fd or self.fd not in fds or not self.dev: + return [] + + # Process events + curr = time.perf_counter() + out: Sequence[Event] = [] + + # Remove events that have been queued + while len(self.queue): + ev, ofs = self.queue[0] + if ofs + MODE_DELAY < curr: + out.append(ev) + out.pop(0) + else: + break + + # Read new events + while can_read(self.fd): + rep = self.dev.read(self.report_size) + logger.warning(f"Received the following report from ALLY:\n{rep.hex()}") + if rep[0] != 0x33: + continue + + match rep[2]: + case 0x38: + # action = "left" + out.append({"type": "button", "code": "mode", "value": True}) + self.queue.append( + ({"type": "button", "code": "mode", "value": False}, curr) + ) + case 0x56: + # action = "right" + out.append({"type": "button", "code": "share", "value": True}) + self.queue.append( + ({"type": "button", "code": "share", "value": False}, curr) + ) + case 0x57: + # action = "right_hold" + pass # TODO: mode switch + + return [] + def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): while not should_exit.is_set(): @@ -80,7 +142,7 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Vendor - d_vend = GenericGamepadHidraw( + d_vend = AllyHidraw( vid=[ASUS_VID], pid=[ASUS_KBD_PID], usage_page=[0xFF31], @@ -97,17 +159,7 @@ def controller_loop(conf: Config, should_exit: TEvent): capabilities={EC("EV_KEY"): [EC("KEY_PROG1")]}, required=True, ), - ASUS_KBD_1_MAP, - ) - d_kbd_2 = KeyboardWrapper( - GenericGamepadEvdev( - vid=[ASUS_VID], - pid=[ASUS_KBD_PID], - capabilities={EC("EV_KEY"): [EC("KEY_1")]}, - # report_size=64, - required=True, - ), - ASUS_KBD_2_MAP, + ASUS_KBD_MAP, ) multiplexer = Multiplexer( @@ -137,13 +189,12 @@ def prepare(m): fd_to_dev[f] = m try: - d_vend.open() # Open once hid validation is complete + d_vend.open() prepare(d_xinput) if conf.get("imu", False): d_timer.open() prepare(d_imu) - prepare(d_kbd_1) - # prepare(d_kbd_2) + # prepare(d_kbd_1) for d in d_producers: prepare(d) @@ -160,6 +211,7 @@ def prepare(m): for d in devs: if id(d) in to_run: evs.extend(d.produce(r)) + evs.extend(d_vend.produce(r)) evs = multiplexer.process(evs) if evs: @@ -190,7 +242,7 @@ def prepare(m): except KeyboardInterrupt: raise finally: - d_timer.close() d_vend.close(True) + d_timer.close() for d in reversed(devs): d.close(True) From a852862ad2031e6eccf3b653cbffeff0e0496cf4 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 20:01:07 +0200 Subject: [PATCH 0108/1497] remove fd check --- src/hhd/device/rog_ally/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 6e0d2e23..1c646b20 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -60,7 +60,7 @@ def open(self) -> Sequence[int]: def produce(self, fds: Sequence[int]) -> Sequence[Event]: # If we can not read return - if not self.fd or self.fd not in fds or not self.dev: + if not self.fd or not self.dev: return [] # Process events From 94c521aa026ae725e269d072d3efdbb9febf824f Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 20:09:17 +0200 Subject: [PATCH 0109/1497] fix button map --- src/hhd/device/rog_ally/base.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 1c646b20..08e9fa2f 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -79,26 +79,29 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # Read new events while can_read(self.fd): rep = self.dev.read(self.report_size) - logger.warning(f"Received the following report from ALLY:\n{rep.hex()}") - if rep[0] != 0x33: + logger.warning(f"Received the following report (debug):\n{rep.hex()}") + if rep[0] != 0x58: continue match rep[2]: - case 0x38: + case 0xA6: # action = "left" out.append({"type": "button", "code": "mode", "value": True}) self.queue.append( ({"type": "button", "code": "mode", "value": False}, curr) ) - case 0x56: + case 0x38: # action = "right" out.append({"type": "button", "code": "share", "value": True}) self.queue.append( ({"type": "button", "code": "share", "value": False}, curr) ) - case 0x57: + case 0xA7: # action = "right_hold" pass # TODO: mode switch + case 0xA8: + # action = "right_hold_release" + pass # TODO: mode switch return [] From 3cda8c8fbc21cbbcb4623843ecc2d65734e4ae60 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 20:11:41 +0200 Subject: [PATCH 0110/1497] tweak rog map --- src/hhd/device/rog_ally/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 08e9fa2f..a3fdf731 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -80,10 +80,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: while can_read(self.fd): rep = self.dev.read(self.report_size) logger.warning(f"Received the following report (debug):\n{rep.hex()}") - if rep[0] != 0x58: + if rep[0] != 0x5a: continue - match rep[2]: + match rep[1]: case 0xA6: # action = "left" out.append({"type": "button", "code": "mode", "value": True}) From 65a16fadb28ea3122b8266aa8d5f09ffb13d2c17 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 20:12:06 +0200 Subject: [PATCH 0111/1497] actually return output --- src/hhd/device/rog_ally/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index a3fdf731..72867803 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -103,7 +103,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # action = "right_hold_release" pass # TODO: mode switch - return [] + return out def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): From 9b4042ffd5c89276d9cd5b235bcc9de6a6a18157 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 20:17:45 +0200 Subject: [PATCH 0112/1497] add keyboard logs, fix queue bug --- src/hhd/controller/base.py | 1 + src/hhd/device/rog_ally/base.py | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index c6bd3b47..c58cbfeb 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -505,6 +505,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: evs: Sequence[Event] = self.parent.produce(fds) # Update in map for ev in evs: + logger.info(ev) if ev["type"] == "button": if ev["value"]: self.active_in.add(ev["code"]) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 72867803..d3873516 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -72,7 +72,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: ev, ofs = self.queue[0] if ofs + MODE_DELAY < curr: out.append(ev) - out.pop(0) + self.queue.pop(0) else: break @@ -80,7 +80,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: while can_read(self.fd): rep = self.dev.read(self.report_size) logger.warning(f"Received the following report (debug):\n{rep.hex()}") - if rep[0] != 0x5a: + if rep[0] != 0x5A: continue match rep[1]: @@ -159,8 +159,8 @@ def controller_loop(conf: Config, should_exit: TEvent): GenericGamepadEvdev( vid=[ASUS_VID], pid=[ASUS_KBD_PID], - capabilities={EC("EV_KEY"): [EC("KEY_PROG1")]}, - required=True, + capabilities={EC("EV_KEY"): [EC("KEY_DELETE")]}, + required=False, ), ASUS_KBD_MAP, ) @@ -197,7 +197,7 @@ def prepare(m): if conf.get("imu", False): d_timer.open() prepare(d_imu) - # prepare(d_kbd_1) + prepare(d_kbd_1) for d in d_producers: prepare(d) From 796accd0036789ba656475bed2014c2924944c5a Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 3 Jan 2024 23:08:23 +0200 Subject: [PATCH 0113/1497] fix capability match for rogue keyboard --- src/hhd/controller/base.py | 2 +- src/hhd/device/rog_ally/base.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index c58cbfeb..03ca6446 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -505,7 +505,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: evs: Sequence[Event] = self.parent.produce(fds) # Update in map for ev in evs: - logger.info(ev) + logger.info(f"Internal kbd event: {ev}") if ev["type"] == "button": if ev["value"]: self.active_in.add(ev["code"]) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index d3873516..6e6d2a7e 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -159,7 +159,7 @@ def controller_loop(conf: Config, should_exit: TEvent): GenericGamepadEvdev( vid=[ASUS_VID], pid=[ASUS_KBD_PID], - capabilities={EC("EV_KEY"): [EC("KEY_DELETE")]}, + capabilities={EC("EV_KEY"): [EC("KEY_MEDIA")]}, required=False, ), ASUS_KBD_MAP, From f24915615e822694bafa8ae8f3b7739dd0e782be Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 01:38:52 +0200 Subject: [PATCH 0114/1497] add mode switch for rog ally --- src/hhd/device/rog_ally/base.py | 25 +- src/hhd/device/rog_ally/const.py | 4700 ++++++++++++++++++++++++++++++ src/hhd/device/rog_ally/hid.py | 17 + 3 files changed, 4734 insertions(+), 8 deletions(-) create mode 100644 src/hhd/device/rog_ally/const.py diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 6e6d2a7e..f706ef18 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -7,7 +7,6 @@ from hhd.controller import ( Axis, Button, - Configuration, Event, KeyboardWrapper, Multiplexer, @@ -22,7 +21,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import rgb_callback +from .hid import rgb_callback, switch_mode ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -35,8 +34,8 @@ GAMEPAD_PID = 0x028E ASUS_KBD_MAP: Sequence[tuple[set[Button], Button]] = [ - ({"key_prog1"}, "share"), # Armory button - ({"key_f16"}, "mode"), # Control center + ({"key_f16"}, "extra_l1"), + ({"key_f18"}, "extra_r1"), ] @@ -56,7 +55,11 @@ class AllyHidraw(GenericGamepadHidraw): def open(self) -> Sequence[int]: self.queue: list[tuple[Event, float]] = [] - return super().open() + a = super().open() + if self.dev: + switch_mode(self.dev, "default") + self.mouse_mode = False + return a def produce(self, fds: Sequence[int]) -> Sequence[Event]: # If we can not read return @@ -97,11 +100,17 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: ({"type": "button", "code": "share", "value": False}, curr) ) case 0xA7: - # action = "right_hold" - pass # TODO: mode switch + # right hold + # Mode switch + if self.mouse_mode: + switch_mode(self.dev, "default") + self.mouse_mode = False + else: + switch_mode(self.dev, "mouse") + self.mouse_mode = True case 0xA8: # action = "right_hold_release" - pass # TODO: mode switch + pass # kind of useless return out diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py new file mode 100644 index 00000000..8f5e5ac0 --- /dev/null +++ b/src/hhd/device/rog_ally/const.py @@ -0,0 +1,4700 @@ +MODE_DEFAULT = [ + bytes( + [ + 0x5A, + 0xD1, + 0x01, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x01, + 0x2C, + 0x01, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x8C, + 0x88, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x02, + 0x2C, + 0x01, + 0x0B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x23, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0C, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x03, + 0x2C, + 0x01, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x08, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x04, + 0x2C, + 0x01, + 0x05, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x06, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x05, + 0x2C, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x02, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x31, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x06, + 0x2C, + 0x01, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x4D, + 0x00, + 0x00, + 0x00, + 0x01, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x1E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x07, + 0x2C, + 0x01, + 0x11, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x09, + 0x2C, + 0x01, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0F, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x06, + 0x02, + 0x64, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x04, + 0x04, + 0x00, + 0x64, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x05, + 0x04, + 0x00, + 0x64, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), +] + +MODE_MOUSE = [ + bytes( + [ + 0x5A, + 0xD1, + 0x01, + 0x01, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x01, + 0x2C, + 0x02, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x8C, + 0x88, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x02, + 0x2C, + 0x02, + 0x00, + 0x9A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x23, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x9B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x03, + 0x2C, + 0x02, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x04, + 0x2C, + 0x02, + 0x00, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x05, + 0x2C, + 0x02, + 0x00, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x31, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x06, + 0x2C, + 0x02, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x4D, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x1E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x07, + 0x2C, + 0x01, + 0x11, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x09, + 0x2C, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x88, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0F, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x06, + 0x02, + 0x64, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x04, + 0x04, + 0x00, + 0x64, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x05, + 0x04, + 0x00, + 0x64, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), +] + +MODE_MACRO = [ + bytes( + [ + 0x5A, + 0xD1, + 0x01, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x01, + 0x2C, + 0x01, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x8C, + 0x88, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x02, + 0x2C, + 0x01, + 0x0B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x23, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0C, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x03, + 0x2C, + 0x01, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x08, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x04, + 0x2C, + 0x01, + 0x05, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x06, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x05, + 0x2C, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x02, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x31, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x06, + 0x2C, + 0x01, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x4D, + 0x00, + 0x00, + 0x00, + 0x01, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x1E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x07, + 0x2C, + 0x01, + 0x11, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x8E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x8E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x8F, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x8F, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0A, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x02, + 0x09, + 0x2C, + 0x01, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x0F, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x06, + 0x02, + 0x64, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x04, + 0x04, + 0x00, + 0x64, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xD1, + 0x05, + 0x04, + 0x00, + 0x64, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), +] diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 7b3286b0..ffeb1979 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -2,9 +2,11 @@ from hhd.controller import Event from hhd.controller.lib.hid import Device +from .const import MODE_DEFAULT, MODE_MACRO, MODE_MOUSE Side = Literal["left", "right"] RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] +GamepadMode = Literal["default", "mouse", "macro"] def rgb_brightness(): @@ -217,3 +219,18 @@ def rgb_callback(dev: Device, events: Sequence[Event]): for r in reps: dev.write(r) + + +def switch_mode(dev: Device, mode: GamepadMode): + match mode: + case "default": + cmds = MODE_DEFAULT + case "macro": + cmds = MODE_MACRO + case "mouse": + cmds = MODE_MOUSE + case _: + assert False, f"Mode '{mode}' not supported." + + for cmd in cmds: + dev.write(cmd) From 004f8ffc6d13ce0ee3eb1891306eb9140b7fa2e4 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 02:03:37 +0200 Subject: [PATCH 0115/1497] allow tweaking scale for imu --- src/hhd/controller/physical/imu.py | 51 +++++++++---------- src/hhd/controller/virtual/dualsense/const.py | 2 +- src/hhd/device/rog_ally/base.py | 20 ++++---- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index dc25aec1..9730bf01 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -22,7 +22,6 @@ class ScanElement(NamedTuple): scale: float offset: float max_val: float | None - flip: bool class DeviceInfo(NamedTuple): @@ -35,27 +34,27 @@ class DeviceInfo(NamedTuple): GYRO_NAMES = ["gyro_3d"] IMU_NAMES = ["bmi323-imu"] -ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float | None, bool]] = { - "accel_x": ("accel_z", "accel", 3, False), - "accel_y": ("accel_x", "accel", 3, False), - "accel_z": ("accel_y", "accel", 3, False), - "timestamp": ("accel_ts", "accel", None, False), +ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "timestamp": ("accel_ts", "accel", 1, None), } -GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float | None, bool]] = { - "anglvel_x": ("gyro_z", "anglvel", None, False), - "anglvel_y": ("gyro_x", "anglvel", None, False), - "anglvel_z": ("gyro_y", "anglvel", None, False), - "timestamp": ("gyro_ts", "anglvel", None, False), +GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "anglvel_x": ("gyro_z", "anglvel", 1, None), + "anglvel_y": ("gyro_x", "anglvel", 1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", "anglvel", 1, None), } -BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float | None, bool]] = { - "accel_x": ("accel_z", "accel", 3, False), - "accel_y": ("accel_x", "accel", 3, False), - "accel_z": ("accel_y", "accel", 3, False), - "anglvel_x": ("gyro_z", "anglvel", None, False), - "anglvel_y": ("gyro_x", "anglvel", None, False), - "anglvel_z": ("gyro_y", "anglvel", None, False), - "timestamp": ("gyro_ts", "anglvel", None, False), +BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", 1, None), + "anglvel_y": ("gyro_x", "anglvel", 1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", "anglvel", 1, None), } @@ -102,7 +101,7 @@ def prepare_dev( type: str, attr: Sequence[str], freq: Sequence[int] | None, - mappings: dict[str, tuple[Axis, str | None, float | None, bool]], + mappings: dict[str, tuple[Axis, str | None, float, float | None]], update_trigger: bool, ) -> DeviceInfo | None: # Prepare device buffer @@ -160,17 +159,17 @@ def prepare_dev( # Prepare scan metadata if fn in mappings: - ax, atr, max_val, flip = mappings[fn] + ax, atr, scale_usr, max_val = mappings[fn] if atr: offset = float(read_sysfs(sensor_dir, f"in_{atr}_offset", "0")) scale = float(read_sysfs(sensor_dir, f"in_{atr}_scale")) else: offset = 0 scale = 1 + scale *= scale_usr write_sysfs(sensor_dir, f"scan_elements/in_{fn}_en", 1) else: ax = max_val = None - flip = False offset = 0 scale = 1 @@ -184,7 +183,6 @@ def prepare_dev( scale, offset, max_val, - flip, ) write_sysfs(sensor_dir, "buffer/enable", 1) @@ -212,7 +210,7 @@ def __init__( types: Sequence[str], attr: Sequence[str], freq: Sequence[int] | None, - mappings: dict[str, tuple[Axis, str | None, float | None, bool]], + mappings: dict[str, tuple[Axis, str | None, float, float | None]], update_trigger: bool = False, ) -> None: self.types = types @@ -291,9 +289,6 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: else: d = max(d, -se.max_val) - if se.flip: - d = -d - if se.axis not in self.prev or self.prev[se.axis] != d: out.append( { @@ -330,7 +325,7 @@ class CombinedImu(IioReader): def __init__( self, freq: int = 400, - map: dict[str, tuple[Axis, str | None, float | None, bool]] | None = None, + map: dict[str, tuple[Axis, str | None, float, float | None]] | None = None, ) -> None: super().__init__( IMU_NAMES, diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index 443f77ff..fd0fd2c5 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -128,7 +128,7 @@ def prefill_ds5_report(bluetooth: bool): "lt": AM(((ofs + 5) << 3), "u8"), "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20), "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20), - "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20, flipped=True), + "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20), "accel_x": AM(((ofs + 21) << 3), "i16", scale=10000), "accel_y": AM(((ofs + 23) << 3), "i16", scale=10000), "accel_z": AM(((ofs + 25) << 3), "i16", scale=10000), diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index f706ef18..cd799986 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -38,15 +38,14 @@ ({"key_f18"}, "extra_r1"), ] - -ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float | None]] = { - "accel_x": ("accel_z", "accel", 3), - "accel_y": ("accel_x", "accel", 3), - "accel_z": ("accel_y", "accel", 3), - "anglvel_x": ("gyro_z", "anglvel", None), - "anglvel_y": ("gyro_x", "anglvel", None), - "anglvel_z": ("gyro_y", "anglvel", None), - "timestamp": ("gyro_ts", "anglvel", None), +ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", 0.1, None), + "anglvel_y": ("gyro_x", "anglvel", 0.1, None), + "anglvel_z": ("gyro_y", "anglvel", -0.1, None), + "timestamp": ("gyro_ts", "anglvel", 1, None), } MODE_DELAY = 0.3 @@ -57,6 +56,7 @@ def open(self) -> Sequence[int]: self.queue: list[tuple[Event, float]] = [] a = super().open() if self.dev: + logger.info(f"Switching ROG Ally to gamepad mode.") switch_mode(self.dev, "default") self.mouse_mode = False return a @@ -140,7 +140,7 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Imu - d_imu = CombinedImu(conf["imu_hz"].to(int)) + d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS) d_timer = HrtimerTrigger(conf["imu_hz"].to(int)) # Inputs From 79ff19d339906e27228352706a1b7a85a7ad0e70 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 02:09:09 +0200 Subject: [PATCH 0116/1497] fix timestamp regression --- src/hhd/controller/physical/imu.py | 8 ++++---- src/hhd/device/rog_ally/base.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 9730bf01..cd04d4d1 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -38,13 +38,13 @@ class DeviceInfo(NamedTuple): "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), "accel_z": ("accel_y", "accel", 1, 3), - "timestamp": ("accel_ts", "accel", 1, None), + "timestamp": ("accel_ts", None, 1, None), } GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "anglvel_x": ("gyro_z", "anglvel", 1, None), "anglvel_y": ("gyro_x", "anglvel", 1, None), - "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", "anglvel", 1, None), + "anglvel_z": ("gyro_y", "anglvel", 1, None), + "timestamp": ("gyro_ts", None, 1, None), } BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { @@ -54,7 +54,7 @@ class DeviceInfo(NamedTuple): "anglvel_x": ("gyro_z", "anglvel", 1, None), "anglvel_y": ("gyro_x", "anglvel", 1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", "anglvel", 1, None), + "timestamp": ("gyro_ts", None, 1, None), } diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index cd799986..b1aa5020 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -45,7 +45,7 @@ "anglvel_x": ("gyro_z", "anglvel", 0.1, None), "anglvel_y": ("gyro_x", "anglvel", 0.1, None), "anglvel_z": ("gyro_y", "anglvel", -0.1, None), - "timestamp": ("gyro_ts", "anglvel", 1, None), + "timestamp": ("gyro_ts", None, 1, None), } MODE_DELAY = 0.3 From 2f13acd77729b39c47093b495ab7c7447cf83ce7 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 03:04:10 +0200 Subject: [PATCH 0117/1497] add paddles to touchpad --- src/hhd/controller/base.py | 21 +++++++++++++++++++++ src/hhd/device/legion_go/base.py | 1 + src/hhd/device/legion_go/controllers.yml | 8 ++++++++ src/hhd/device/rog_ally/base.py | 1 + src/hhd/device/rog_ally/controllers.yml | 9 +++++++++ 5 files changed, 40 insertions(+) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 03ca6446..af2c5f0f 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -241,6 +241,7 @@ def __init__( trigger_discrete_lvl: float = 0.99, touchpad_short: TouchpadAction = "disabled", touchpad_right: TouchpadAction = "left_click", + paddles_to_touchpad: bool = False, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -252,6 +253,7 @@ def __init__( self.share_to_qam = share_to_qam self.touchpad_short = touchpad_short self.touchpad_right = touchpad_right + self.paddles_to_touchpad = paddles_to_touchpad self.state = {} self.touchpad_down = time.perf_counter() @@ -305,6 +307,25 @@ def process(self, events: Sequence[Event]): } ) case "button": + if self.paddles_to_touchpad and ev["code"] in ( + "extra_l1", + "extra_r1", + ): + # Position fingers + if ev["value"]: + out.append( + {"type": "axis", "code": "touchpad_y", "value": 0.5} + ) + out.append( + { + "type": "axis", + "code": "touchpad_x", + "value": 0.25 if ev["code"] == "extra_l1" else 0.75, + } + ) + # Stub current event to click + ev["code"] = "touchpad_left" + if self.trigger == "discrete_to_analog" and ev["code"] in ( "lt", "rt", diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 8b20c9cd..d9c81779 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -256,6 +256,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): share_to_qam=conf["share_to_qam"].to(bool), touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_right=touch_actions["hold"].to(TouchpadAction), + paddles_to_touchpad=conf["paddles_to_touchpad"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index b406281c..be845542 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -165,6 +165,14 @@ children: right_click: Right Click default: "left_click" + paddles_to_touchpad: + type: bool + title: Paddles as Touchpad Clicks + hint: >- + Makes the top left paddle click the left side of the touchpad + and the top right paddle the right side, instead of being the back paddles. + Useful with dualsense. + default: False shortcuts: type: bool title: Enable Shortcuts Controller diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index b1aa5020..69cb2b5e 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -178,6 +178,7 @@ def controller_loop(conf: Config, should_exit: TEvent): trigger="analog_to_discrete", dpad="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), + paddles_to_touchpad=conf["paddles_to_touchpad"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 807a4dcc..8ac8cf48 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -35,6 +35,15 @@ children: title: Map Armory to QAM. default: True + paddles_to_touchpad: + type: bool + title: Paddles as Touchpad Clicks + hint: >- + Makes the left paddle click the left side of the touchpad + and the right paddle the right side, instead of being the edge paddles. + Useful with dualsense. + default: False + debug: type: bool title: Debug From 599da78cd3ce01e0f6f33cbe5420aa46e5bae9a6 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 03:29:29 +0200 Subject: [PATCH 0118/1497] fix options for gyro hz --- src/hhd/device/rog_ally/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 8ac8cf48..78cbbfff 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -27,7 +27,7 @@ children: title: Motion Hz hint: >- Sets the sampling frequency for the IMU. - options: [12.5 25 50 100 200 400 800] + options: [25, 50, 100, 200, 400, 800] default: 200 share_to_qam: From 795e0002a9c6bad12596de2ef674c9d2facc295c Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 03:50:33 +0200 Subject: [PATCH 0119/1497] correct axis and add scale option --- src/hhd/controller/physical/imu.py | 24 ++++++++++++++++++++---- src/hhd/device/rog_ally/base.py | 8 ++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index cd04d4d1..b7806397 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -101,6 +101,7 @@ def prepare_dev( type: str, attr: Sequence[str], freq: Sequence[int] | None, + scales: Sequence[str | None] | None, mappings: dict[str, tuple[Axis, str | None, float, float | None]], update_trigger: bool, ) -> DeviceInfo | None: @@ -116,6 +117,15 @@ def prepare_dev( if os.path.isfile(sfn): write_sysfs(sensor_dir, f"in_{a}_sampling_frequency", f) + # Set scale + if scales is not None: + for a, s in zip(attr, scales): + if not s: + continue + sfn = os.path.join(sensor_dir, f"in_{a}_scale") + if os.path.isfile(sfn): + write_sysfs(sensor_dir, f"in_{a}_scale", s) + # Set trigger if update_trigger: trig = None @@ -210,12 +220,14 @@ def __init__( types: Sequence[str], attr: Sequence[str], freq: Sequence[int] | None, + scale: Sequence[str | None] | None, mappings: dict[str, tuple[Axis, str | None, float, float | None]], update_trigger: bool = False, ) -> None: self.types = types self.attr = attr self.freq = freq + self.scale = scale self.mappings = mappings self.update_trigger = update_trigger self.fd = 0 @@ -231,6 +243,7 @@ def open(self): type, self.attr, self.freq, + self.scale, self.mappings, self.update_trigger, ) @@ -308,16 +321,16 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: class AccelImu(IioReader): - def __init__(self, freq=None) -> None: + def __init__(self, freq=None, scale=None) -> None: super().__init__( - ACCEL_NAMES, ["accel"], [freq] if freq else None, ACCEL_MAPPINGS + ACCEL_NAMES, ["accel"], [freq] if freq else None, [scale], ACCEL_MAPPINGS ) class GyroImu(IioReader): - def __init__(self, freq=None) -> None: + def __init__(self, freq=None, scale=None) -> None: super().__init__( - GYRO_NAMES, ["anglvel"], [freq] if freq else None, GYRO_MAPPINGS + GYRO_NAMES, ["anglvel"], [freq] if freq else None, [scale], GYRO_MAPPINGS ) @@ -326,11 +339,14 @@ def __init__( self, freq: int = 400, map: dict[str, tuple[Axis, str | None, float, float | None]] | None = None, + gyro_scale: str | None = None, + accel_scale: str | None = None, ) -> None: super().__init__( IMU_NAMES, ["anglvel", "accel"], [freq, freq] if freq else None, + [gyro_scale, accel_scale], map if map is not None else BMI_MAPPINGS, ) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 69cb2b5e..f9f25fb4 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -42,9 +42,9 @@ "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", 0.1, None), - "anglvel_y": ("gyro_x", "anglvel", 0.1, None), - "anglvel_z": ("gyro_y", "anglvel", -0.1, None), + "anglvel_x": ("gyro_x", "anglvel", 0.1, None), + "anglvel_y": ("gyro_y", "anglvel", -0.1, None), + "anglvel_z": ("gyro_z", "anglvel", -0.1, None), "timestamp": ("gyro_ts", None, 1, None), } @@ -140,7 +140,7 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Imu - d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS) + d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS, gyro_scale="0.000266") d_timer = HrtimerTrigger(conf["imu_hz"].to(int)) # Inputs From b7465fa45212be315996eb91b2f748c012d93a0f Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 04:17:55 +0200 Subject: [PATCH 0120/1497] match and fix keyboard --- src/hhd/device/rog_ally/base.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index f9f25fb4..748dedcb 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -33,11 +33,6 @@ GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -ASUS_KBD_MAP: Sequence[tuple[set[Button], Button]] = [ - ({"key_f16"}, "extra_l1"), - ({"key_f18"}, "extra_r1"), -] - ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), @@ -164,14 +159,14 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Grab shortcut keyboards - d_kbd_1 = KeyboardWrapper( + d_kbd_1 = ( GenericGamepadEvdev( vid=[ASUS_VID], pid=[ASUS_KBD_PID], - capabilities={EC("EV_KEY"): [EC("KEY_MEDIA")]}, + capabilities={EC("EV_KEY"): [EC("KEY_F23")]}, required=False, + btn_map={EC("KEY_F17"): "extra_l1", EC("KEY_F18"): "extra_r1"}, ), - ASUS_KBD_MAP, ) multiplexer = Multiplexer( From 4e513591a1465a3b8e458ff9acd0ed83342b0d45 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 04:19:00 +0200 Subject: [PATCH 0121/1497] fix typo --- src/hhd/device/rog_ally/base.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 748dedcb..2cb0c19a 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -159,14 +159,12 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Grab shortcut keyboards - d_kbd_1 = ( - GenericGamepadEvdev( - vid=[ASUS_VID], - pid=[ASUS_KBD_PID], - capabilities={EC("EV_KEY"): [EC("KEY_F23")]}, - required=False, - btn_map={EC("KEY_F17"): "extra_l1", EC("KEY_F18"): "extra_r1"}, - ), + d_kbd_1 = GenericGamepadEvdev( + vid=[ASUS_VID], + pid=[ASUS_KBD_PID], + capabilities={EC("EV_KEY"): [EC("KEY_F23")]}, + required=False, + btn_map={EC("KEY_F17"): "extra_l1", EC("KEY_F18"): "extra_r1"}, ) multiplexer = Multiplexer( From c5cce55f9f824b519fb6ab084fc89f28ab284eda Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 15:43:53 +0200 Subject: [PATCH 0122/1497] make powerbutton only work on ally and go --- src/hhd/plugins/powerbutton/base.py | 2 +- src/hhd/plugins/powerbutton/const.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 3f14272d..9dcdc551 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -102,7 +102,7 @@ def get_config() -> PowerButtonConfig | None: if d.prod_name == prod: return d - return DEFAULT_DEVICE + return None def run_steam_shortpress(perms: Context): diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 05c90bc9..e05fbdd7 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -20,7 +20,11 @@ class PowerButtonConfig(NamedTuple): PBC( "Legion Go", "83E1", - ) + ), + PBC( + "ROG Ally", + "ROG Ally RC71L_RC71L", + ), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 0cb181609cfc4a0bd6c0083cefe72e4364794069 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 15:44:04 +0200 Subject: [PATCH 0123/1497] tweak touchpad error --- src/hhd/device/legion_go/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index be845542..d53b8ca9 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -113,7 +113,7 @@ children: title: Controller hint: >- Uses the touchpad of the emulated controller (if it exists). - Otherwise, the touchpad remains unmapped. + Otherwise, the touchpad remains unmapped (will still show up in the system). Meant to be used as steam input, so short press is unassigned by default and long press simulates trackpad click. children: From 0cb9c8a1f1a6b5efe2c53978a0511a1e2888dfba Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 15:44:49 +0200 Subject: [PATCH 0124/1497] add vibration on mode switch and unhide keyboard --- src/hhd/controller/physical/evdev.py | 5 ++- src/hhd/controller/physical/imu.py | 4 +++ src/hhd/device/legion_go/base.py | 2 +- src/hhd/device/rog_ally/base.py | 50 +++++++++++++++++++--------- 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 6b50c6ff..f7232eb6 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -108,6 +108,7 @@ def __init__( aspect_ratio: float | None = None, required: bool = True, hide: bool = False, + grab: bool = True, ) -> None: self.vid = vid self.pid = pid @@ -122,6 +123,7 @@ def __init__( self.fd = 0 self.required = required self.hide = hide + self.grab = grab self.hidden = False def open(self) -> Sequence[int]: @@ -161,7 +163,8 @@ def open(self) -> Sequence[int]: ) self.dev = dev - self.dev.grab() + if self.grab: + self.dev.grab() self.ranges = { a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore } diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index b7806397..943f1a42 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -392,6 +392,10 @@ def close(self): class HrtimerTrigger(IioReader): + ACCEL_NAMES = ACCEL_NAMES + GYRO_NAMES = GYRO_NAMES + IMU_NAMES = IMU_NAMES + def __init__( self, freq: int, diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index d9c81779..b21b04bb 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -96,7 +96,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven controller_mode, pid if pid else 2, conf, should_exit ) except Exception as e: - logger.error(f"Received the following error:\n{e}") + logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." ) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 2cb0c19a..d0b000d4 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -6,18 +6,14 @@ from hhd.controller import ( Axis, - Button, Event, - KeyboardWrapper, Multiplexer, can_read, ) from hhd.controller.base import Event -from hhd.controller.lib.common import AM, BM, CM -from hhd.controller.lib.hid import MAX_REPORT_SIZE from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.hidraw import EventCallback, GenericGamepadHidraw +from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs @@ -44,6 +40,19 @@ } MODE_DELAY = 0.3 +VIBRATION_DELAY = 0.1 +VIBRATION_ON: Event = { + "type": "rumble", + "code": "main", + "strong_magnitude": 0.5, + "weak_magnitude": 0.5, +} +VIBRATION_OFF: Event = { + "type": "rumble", + "code": "main", + "strong_magnitude": 0, + "weak_magnitude": 0, +} class AllyHidraw(GenericGamepadHidraw): @@ -65,19 +74,17 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: curr = time.perf_counter() out: Sequence[Event] = [] - # Remove events that have been queued - while len(self.queue): + # Remove up to one queued event + if len(self.queue): ev, ofs = self.queue[0] - if ofs + MODE_DELAY < curr: + if ofs < curr: out.append(ev) self.queue.pop(0) - else: - break # Read new events while can_read(self.fd): rep = self.dev.read(self.report_size) - logger.warning(f"Received the following report (debug):\n{rep.hex()}") + # logger.warning(f"Received the following report (debug):\n{rep.hex()}") if rep[0] != 0x5A: continue @@ -86,13 +93,19 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # action = "left" out.append({"type": "button", "code": "mode", "value": True}) self.queue.append( - ({"type": "button", "code": "mode", "value": False}, curr) + ( + {"type": "button", "code": "mode", "value": False}, + curr + MODE_DELAY, + ) ) case 0x38: # action = "right" out.append({"type": "button", "code": "share", "value": True}) self.queue.append( - ({"type": "button", "code": "share", "value": False}, curr) + ( + {"type": "button", "code": "share", "value": False}, + curr + MODE_DELAY, + ) ) case 0xA7: # right hold @@ -100,9 +113,15 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: if self.mouse_mode: switch_mode(self.dev, "default") self.mouse_mode = False + out.append(VIBRATION_ON) + self.queue.append((VIBRATION_OFF, curr + VIBRATION_DELAY)) else: switch_mode(self.dev, "mouse") self.mouse_mode = True + out.append(VIBRATION_ON) + self.queue.append((VIBRATION_OFF, curr + VIBRATION_DELAY)) + self.queue.append((VIBRATION_ON, curr + 2 * VIBRATION_DELAY)) + self.queue.append((VIBRATION_OFF, curr + 3 * VIBRATION_DELAY)) case 0xA8: # action = "right_hold_release" pass # kind of useless @@ -116,7 +135,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven logger.info("Launching emulated controller.") controller_loop(conf, should_exit) except Exception as e: - logger.error(f"Received the following error:\n{e}") + logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." ) @@ -136,7 +155,7 @@ def controller_loop(conf: Config, should_exit: TEvent): # Imu d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS, gyro_scale="0.000266") - d_timer = HrtimerTrigger(conf["imu_hz"].to(int)) + d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) # Inputs d_xinput = GenericGamepadEvdev( @@ -164,6 +183,7 @@ def controller_loop(conf: Config, should_exit: TEvent): pid=[ASUS_KBD_PID], capabilities={EC("EV_KEY"): [EC("KEY_F23")]}, required=False, + grab=False, btn_map={EC("KEY_F17"): "extra_l1", EC("KEY_F18"): "extra_r1"}, ) From f6a5b919195ccb93be81ffb53ddb1caa0f6f2e21 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 18:27:02 +0200 Subject: [PATCH 0125/1497] update toml for v1 release --- pyproject.toml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2ff7939f..8d64c26b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "0.2.8" +version = "1.0.0" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] @@ -8,9 +8,11 @@ description = "Handheld Daemon, a tool for configuring handheld devices." readme = "readme.md" requires-python = ">=3.10" classifiers = [ - "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Operating System :: POSIX :: Linux", ] dependencies = [ From ac27af3bee0796b4a24719fc056c5259ba26f4d7 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 21:45:56 +0200 Subject: [PATCH 0126/1497] add brightness slider --- pyproject.toml | 1 + src/hhd/device/legion_go/controllers.yml | 2 +- src/hhd/device/rog_ally/controllers.yml | 2 +- src/hhd/plugins/display/__init__.py | 107 +++++++++++++++++++++++ src/hhd/plugins/display/settings.yml | 17 ++++ 5 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 src/hhd/plugins/display/__init__.py create mode 100644 src/hhd/plugins/display/settings.yml diff --git a/pyproject.toml b/pyproject.toml index 8d64c26b..519e9d69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" +display = "hhd.plugins.display:autodetect" [build-system] requires = ["setuptools>=61.0", "wheel"] diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index d53b8ca9..551ca7c8 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -1,6 +1,6 @@ type: container tags: [lgc] -title: Legion Controllers Configuration +title: Legion Controllers hint: >- Allows for configuring the Legion controllers using the built in firmware commands and enabling emulation modes for various controller types. diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 78cbbfff..bd3118ee 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -1,6 +1,6 @@ type: container tags: [lgc] -title: Ally Controller Configuration +title: Ally Controller hint: >- Allows for configuring the ROG Ally controllers to a unified output. diff --git a/src/hhd/plugins/display/__init__.py b/src/hhd/plugins/display/__init__.py new file mode 100644 index 00000000..13e7852b --- /dev/null +++ b/src/hhd/plugins/display/__init__.py @@ -0,0 +1,107 @@ +from typing import Any, Sequence, TYPE_CHECKING +import os +from hhd.plugins import ( + HHDPlugin, + Context, +) +from time import sleep +from hhd.plugins import HHDSettings, load_relative_yaml +import logging + +from hhd.plugins.conf import Config + +logger = logging.getLogger(__name__) +BACKLIGHT_DIR = "/sys/class/backlight/" +LEVELS = [0, 5, 10, 15, 20, 35, 50, 75, 90, 100] + + +def write_sysfs(dir: str, fn: str, val: Any): + with open(os.path.join(dir, fn), "w") as f: + f.write(str(val)) + + +def read_sysfs(dir: str, fn: str, default: str | None = None): + try: + with open(os.path.join(dir, fn), "r") as f: + return f.read().strip() + except Exception as e: + if default is not None: + return default + raise e + + +class DisplayPlugin(HHDPlugin): + def __init__(self) -> None: + self.name = f"displayd" + self.priority = 4 + self.log = "disp" + + self.display = None + self.max_brightness = 255 + + def settings(self) -> HHDSettings: + if self.display: + s = {"general": {"display": load_relative_yaml("settings.yml")}} + s["general"]["display"]["children"]["brightness"]["options"] = LEVELS + return s + else: + return {} + + def open( + self, + emit, + context: Context, + ): + self.display = None + self.prev = None + for d in os.listdir(BACKLIGHT_DIR): + ddir = os.path.join(BACKLIGHT_DIR, d) + try: + read_sysfs(ddir, "brightness") + max_bright = int(read_sysfs(ddir, "max_brightness")) + self.display = ddir + self.max_brightness = max_bright + except Exception: + pass + + if self.display is None: + logger.warning(f"Display with variable brightness not found. Exitting.") + + def update(self, conf: Config): + if not self.display: + return + + try: + requested = conf["general.display.brightness"].to(float | None) + # Set brightness + if requested and requested != -1 and requested != self.prev: + logger.info(f"Setting brightness to {requested}") + write_sysfs( + self.display, + "brightness", + int(self.max_brightness * requested / 100), + ) + # Wait a bit + sleep(0.1) + + # Get brightness + curr = ( + int(read_sysfs(self.display, "brightness", None)) + * 100 + / self.max_brightness + ) + discr = min(LEVELS, key=lambda x: abs(x - curr)) + conf["general.display.brightness"] = discr + self.prev = discr + except Exception as e: + logger.error(f"Error while processing display settings:\n{type(e)}: {e}") + + def close(self): + pass + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + return [DisplayPlugin()] diff --git a/src/hhd/plugins/display/settings.yml b/src/hhd/plugins/display/settings.yml new file mode 100644 index 00000000..fac056ed --- /dev/null +++ b/src/hhd/plugins/display/settings.yml @@ -0,0 +1,17 @@ +type: container +tags: [display] +title: Display Settings +hint: >- + Basic display settings. Brightness (and framerate TBD). + This pane is meant to replace + +children: + brightness: + type: discrete + tags: [display_brightness] + title: Brightness + hint: >- + Sets the brightness level of a display. Only one display is supported and + it is the one that was read. + options: null + default: -1 From f41d7a6f8bbc3a5e3071b7e301c856c2ffa14e4b Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 21:51:09 +0200 Subject: [PATCH 0127/1497] fix touchpad default settings for rogue --- src/hhd/plugins/outputs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 2ece3412..71c85b52 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -26,8 +26,8 @@ def get_outputs( touchpad = touch_conf["mode"].to(str) correction = touch_conf["controller.correction"].to(TouchpadCorrectionType) else: - touchpad = "disabled" - correction = "disabled" + touchpad = "controller" + correction = "stretch" uses_touch = False match controller: From 80cdc7e2a26c1849cef520f97fbb2ab72e309885 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 22:28:49 +0200 Subject: [PATCH 0128/1497] change scale --- src/hhd/device/rog_ally/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index d0b000d4..7673223a 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -154,7 +154,7 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Imu - d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS, gyro_scale="0.000266") + d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS, gyro_scale="0.000066") d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) # Inputs From 6b4b0ef7e9fec75299c548a8fc0c707cea7ce235 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 22:32:25 +0200 Subject: [PATCH 0129/1497] undo sensitivity change --- src/hhd/device/rog_ally/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 7673223a..d0b000d4 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -154,7 +154,7 @@ def controller_loop(conf: Config, should_exit: TEvent): ) # Imu - d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS, gyro_scale="0.000066") + d_imu = CombinedImu(conf["imu_hz"].to(int), ALLY_MAPPINGS, gyro_scale="0.000266") d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) # Inputs From c629ba7fd58cf5a46345d045ab85805fc68e2eac Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 22:35:35 +0200 Subject: [PATCH 0130/1497] swap z and x --- src/hhd/device/rog_ally/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index d0b000d4..eb25ac29 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -33,9 +33,9 @@ "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_x", "anglvel", 0.1, None), + "anglvel_x": ("gyro_z", "anglvel", 0.1, None), "anglvel_y": ("gyro_y", "anglvel", -0.1, None), - "anglvel_z": ("gyro_z", "anglvel", -0.1, None), + "anglvel_z": ("gyro_x", "anglvel", -0.1, None), "timestamp": ("gyro_ts", None, 1, None), } From 8f96080b4d00fc0c6aad8325b1d900465de85329 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 23:31:46 +0200 Subject: [PATCH 0131/1497] update matrix and tweak scaling --- src/hhd/controller/virtual/dualsense/const.py | 6 +++--- src/hhd/device/rog_ally/base.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index fd0fd2c5..28e6c332 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -126,9 +126,9 @@ def prefill_ds5_report(bluetooth: bool): "rs_y": AM(((ofs + 3) << 3), "m8"), "rt": AM(((ofs + 4) << 3), "u8"), "lt": AM(((ofs + 5) << 3), "u8"), - "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20), - "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20), - "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20), + "gyro_x": AM(((ofs + 15) << 3), "i16", scale=10000), + "gyro_y": AM(((ofs + 17) << 3), "i16", scale=10000), + "gyro_z": AM(((ofs + 19) << 3), "i16", scale=10000), "accel_x": AM(((ofs + 21) << 3), "i16", scale=10000), "accel_y": AM(((ofs + 23) << 3), "i16", scale=10000), "accel_z": AM(((ofs + 25) << 3), "i16", scale=10000), diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index eb25ac29..25926f67 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -33,9 +33,9 @@ "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", 0.1, None), - "anglvel_y": ("gyro_y", "anglvel", -0.1, None), - "anglvel_z": ("gyro_x", "anglvel", -0.1, None), + "anglvel_x": ("gyro_x", "anglvel", 1, None), + "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), "timestamp": ("gyro_ts", None, 1, None), } From fff70f09021cb0da604605b83424ac03a66483f3 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 23:35:36 +0200 Subject: [PATCH 0132/1497] convert from rad to degress --- src/hhd/controller/virtual/dualsense/const.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index 28e6c332..a4abbae7 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -126,9 +126,9 @@ def prefill_ds5_report(bluetooth: bool): "rs_y": AM(((ofs + 3) << 3), "m8"), "rt": AM(((ofs + 4) << 3), "u8"), "lt": AM(((ofs + 5) << 3), "u8"), - "gyro_x": AM(((ofs + 15) << 3), "i16", scale=10000), - "gyro_y": AM(((ofs + 17) << 3), "i16", scale=10000), - "gyro_z": AM(((ofs + 19) << 3), "i16", scale=10000), + "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20*180/3.14), + "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20*180/3.14), + "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20*180/3.14), "accel_x": AM(((ofs + 21) << 3), "i16", scale=10000), "accel_y": AM(((ofs + 23) << 3), "i16", scale=10000), "accel_z": AM(((ofs + 25) << 3), "i16", scale=10000), From f5ae775d40e9bb83058205874bc5885c14f98f27 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 23:42:50 +0200 Subject: [PATCH 0133/1497] tweak go sensitivity --- src/hhd/controller/physical/imu.py | 8 ++++++-- src/hhd/device/legion_go/base.py | 12 ++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 943f1a42..f073c8d7 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -328,9 +328,13 @@ def __init__(self, freq=None, scale=None) -> None: class GyroImu(IioReader): - def __init__(self, freq=None, scale=None) -> None: + def __init__(self, freq=None, scale=None, map=None) -> None: super().__init__( - GYRO_NAMES, ["anglvel"], [freq] if freq else None, [scale], GYRO_MAPPINGS + GYRO_NAMES, + ["anglvel"], + [freq] if freq else None, + [scale], + map if map else GYRO_MAPPINGS, ) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index b21b04bb..a7006fce 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -7,7 +7,7 @@ from threading import Event as TEvent from typing import Literal, Sequence -from hhd.controller import Button, Consumer, Event, Producer +from hhd.controller import Button, Consumer, Event, Producer, Axis from hhd.controller.base import Multiplexer, TouchpadAction from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC @@ -41,6 +41,14 @@ 0x6185: "fps", } +# Legion go has a bit lower sensitivity than it should +GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "anglvel_x": ("gyro_z", "anglvel", 6, None), + "anglvel_y": ("gyro_x", "anglvel", 6, None), + "anglvel_z": ("gyro_y", "anglvel", 6, None), + "timestamp": ("gyro_ts", None, 1, None), +} + def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): # Remove leftover udev rules @@ -186,7 +194,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): # Imu d_accel = AccelImu() - d_gyro = GyroImu() + d_gyro = GyroImu(map=GYRO_MAPPINGS) # Inputs d_xinput = GenericGamepadEvdev( From d7d2668154d0758c05826511a2e048b09b18000d Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 4 Jan 2024 23:48:56 +0200 Subject: [PATCH 0134/1497] change to 400hz, allow for 1600hz --- src/hhd/device/rog_ally/controllers.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index bd3118ee..33c884b0 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -27,8 +27,10 @@ children: title: Motion Hz hint: >- Sets the sampling frequency for the IMU. - options: [25, 50, 100, 200, 400, 800] - default: 200 + 1600 requires an IMU patch. + Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. + options: [25, 50, 100, 200, 400, 800, 1600] + default: 400 share_to_qam: type: bool From 8a862d176727648a4ffeb4873f8a87616e8560d5 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 02:01:37 +0200 Subject: [PATCH 0135/1497] init leds with asusctl --- src/hhd/device/rog_ally/base.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 25926f67..2a056412 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -1,15 +1,11 @@ import logging import select +import subprocess import time from threading import Event as TEvent from typing import Literal, Sequence -from hhd.controller import ( - Axis, - Event, - Multiplexer, - can_read, -) +from hhd.controller import Axis, Event, Multiplexer, can_read from hhd.controller.base import Event from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev @@ -63,6 +59,7 @@ def open(self) -> Sequence[int]: logger.info(f"Switching ROG Ally to gamepad mode.") switch_mode(self.dev, "default") self.mouse_mode = False + return a def produce(self, fds: Sequence[int]) -> Sequence[Event]: @@ -148,6 +145,16 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven def controller_loop(conf: Config, should_exit: TEvent): debug = conf.get("debug", False) + # Init the leds + try: + subprocess.run( + ["asusctl", "led-mode", "static", "-c", "000000"], capture_output=True + ) + except Exception as e: + logger.warning( + f"Could not initialize the LEDS with `asusctl`. LEDS might not work. Install asusctl to fix." + ) + # Output d_producers, d_outs, d_params = get_outputs( conf["controller_mode"], None, conf["imu"].to(bool) From dfa5bb940babecf65807196171d7b4ebf317bd08 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 02:04:34 +0200 Subject: [PATCH 0136/1497] move init to boot, to avoid flashing on mode changes --- src/hhd/device/rog_ally/base.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 2a056412..a210d684 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -60,6 +60,16 @@ def open(self) -> Sequence[int]: switch_mode(self.dev, "default") self.mouse_mode = False + # Init the leds + try: + subprocess.run( + ["asusctl", "led-mode", "static", "-c", "000000"], capture_output=True + ) + except Exception as e: + logger.warning( + f"Could not initialize the LEDS with `asusctl`. LEDS might not work. Install asusctl to fix." + ) + return a def produce(self, fds: Sequence[int]) -> Sequence[Event]: @@ -145,16 +155,6 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven def controller_loop(conf: Config, should_exit: TEvent): debug = conf.get("debug", False) - # Init the leds - try: - subprocess.run( - ["asusctl", "led-mode", "static", "-c", "000000"], capture_output=True - ) - except Exception as e: - logger.warning( - f"Could not initialize the LEDS with `asusctl`. LEDS might not work. Install asusctl to fix." - ) - # Output d_producers, d_outs, d_params = get_outputs( conf["controller_mode"], None, conf["imu"].to(bool) From bcc704b912504aa7992442d3efb29b35f73c9786 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 02:57:21 +0200 Subject: [PATCH 0137/1497] add init commands --- src/hhd/device/rog_ally/base.py | 23 +++-- src/hhd/device/rog_ally/hid.py | 171 +++++++++++++++++++++++++++++++- 2 files changed, 182 insertions(+), 12 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index a210d684..17590a31 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -13,7 +13,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import rgb_callback, switch_mode +from .hid import rgb_callback, switch_mode, rgb_initialize ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -60,15 +60,18 @@ def open(self) -> Sequence[int]: switch_mode(self.dev, "default") self.mouse_mode = False - # Init the leds - try: - subprocess.run( - ["asusctl", "led-mode", "static", "-c", "000000"], capture_output=True - ) - except Exception as e: - logger.warning( - f"Could not initialize the LEDS with `asusctl`. LEDS might not work. Install asusctl to fix." - ) + # # Init the leds + # try: + # subprocess.run( + # ["asusctl", "led-mode", "static", "-c", "000000"], capture_output=True + # ) + # except Exception as e: + # logger.warning( + # f"Could not initialize the LEDS with `asusctl`. LEDS might not work. Install asusctl to fix." + # ) + + # Initializing leds + rgb_initialize() return a diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index ffeb1979..59b19d57 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -9,6 +9,169 @@ GamepadMode = Literal["default", "mouse", "macro"] +# usb_buf[0x00] = ; +# usb_buf[0x01] = ; +# usb_buf[0x02] = ; +# usb_buf[0x03] = ; +# usb_buf[0x04] = ; +# usb_buf[0x05] = ; +# usb_buf[0x06] = ; +# usb_buf[0x07] = ; +# usb_buf[0x08] = ; +# usb_buf[0x09] = ; +# usb_buf[0x0A] = ; +# usb_buf[0x0B] = ; +# usb_buf[0x0C] = ; +# usb_buf[0x0D] = ; +# usb_buf[0x0E] = ; + + +def rgb_init(): + return [ # Brightness Command + bytes( + [ + 0x5D, + 0x41, + 0x53, + 0x55, + 0x53, + 0x20, + 0x54, + 0x65, + 0x63, + 0x68, + 0x2E, + 0x49, + 0x6E, + 0x63, + 0x2E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + ] + + +def rgb_save(): + return [ # Brightness Command + bytes( + [ + 0x5A, + 0xB4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ] + ), + ] + + def rgb_brightness(): return [ # Brightness Command bytes( @@ -185,10 +348,14 @@ def rgb_command(side: Side, mode: RgbMode, red: int, green: int, blue: int): ] +def rgb_initialize(): + return [*rgb_init(), *rgb_brightness(), *rgb_save()] + + def rgb_set_both(mode: RgbMode, red: int, green: int, blue: int): return [ - *rgb_brightness(), - *rgb_command("left", mode, red, green, blue), + # *rgb_brightness(), + # *rgb_command("left", mode, red, green, blue), *rgb_command("right", mode, red, green, blue), ] From 1106b25350d3f01512640e2bad78c938c0d97e8c Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 03:04:13 +0200 Subject: [PATCH 0138/1497] remove unecessary 0s, add mode set to init --- src/hhd/device/rog_ally/hid.py | 255 ++------------------------------- 1 file changed, 14 insertions(+), 241 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 59b19d57..07facb55 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -45,55 +45,6 @@ def rgb_init(): 0x6E, 0x63, 0x2E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, ] ), ] @@ -101,147 +52,13 @@ def rgb_init(): def rgb_save(): return [ # Brightness Command - bytes( - [ - 0x5A, - 0xB4, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), + bytes([0x5A, 0xB4]), ] def rgb_brightness(): return [ # Brightness Command - bytes( - [ - 0x5A, - 0xBA, - 0xC5, - 0xC4, - 0x03, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), + bytes([0x5A, 0xBA, 0xC5, 0xC4, 0x03]), ] @@ -288,68 +105,24 @@ def rgb_command(side: Side, mode: RgbMode, red: int, green: int, blue: int): blue, 0x00, c_side, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, + ] + ), + bytes( + [ + 0x5A, + 0xB5, ] ), ] def rgb_initialize(): - return [*rgb_init(), *rgb_brightness(), *rgb_save()] + return [ + *rgb_init(), + *rgb_brightness(), + *rgb_command("right", "solid", 0, 0, 0), + *rgb_save(), + ] def rgb_set_both(mode: RgbMode, red: int, green: int, blue: int): From 7688a587d93a2aba0167e5175462e2bbbd8b012e Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 03:07:53 +0200 Subject: [PATCH 0139/1497] cleanup, add touchpad udev rule --- readme.md | 9 +++++++++ src/hhd/device/rog_ally/hid.py | 17 ----------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index fa002c11..7d2f16b6 100644 --- a/readme.md +++ b/readme.md @@ -386,6 +386,15 @@ with incorrect mappings (right trigger becomes a stick, etc). If the app hooks directly into the hidraw of the controller, it works properly. If it uses the evdev device its incorrect. +### Disable Dualsense touchpad +The Dualsense touchpad may interfere with games or steam input. +You can disable it with the following udev rule. +Place it under `/etc/udev/rules.d/99-hhd-playstation-touchpad.rules` +```bash +# Disables all playstation touchpads from use as touchpads. +ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="*Wireless Controller Touchpad", ENV{LIBINPUT_IGNORE_DEVICE}="1" +``` + ## Contributing You should install from source if you aim to contribute or want to pull from master. ```bash diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 07facb55..2c564952 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -9,23 +9,6 @@ GamepadMode = Literal["default", "mouse", "macro"] -# usb_buf[0x00] = ; -# usb_buf[0x01] = ; -# usb_buf[0x02] = ; -# usb_buf[0x03] = ; -# usb_buf[0x04] = ; -# usb_buf[0x05] = ; -# usb_buf[0x06] = ; -# usb_buf[0x07] = ; -# usb_buf[0x08] = ; -# usb_buf[0x09] = ; -# usb_buf[0x0A] = ; -# usb_buf[0x0B] = ; -# usb_buf[0x0C] = ; -# usb_buf[0x0D] = ; -# usb_buf[0x0E] = ; - - def rgb_init(): return [ # Brightness Command bytes( From c89c0dea8ab420c2f2d0287f06b9358212c1d8c7 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 03:12:34 +0200 Subject: [PATCH 0140/1497] hide display plugin --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 519e9d69..ebe08f44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" -display = "hhd.plugins.display:autodetect" +# display = "hhd.plugins.display:autodetect" [build-system] requires = ["setuptools>=61.0", "wheel"] From b4d00191258f914875e85ea7364f228c78f00d2a Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 13:28:33 +0200 Subject: [PATCH 0141/1497] update led initialization --- src/hhd/device/rog_ally/base.py | 17 +- src/hhd/device/rog_ally/const.py | 5183 +++--------------------------- src/hhd/device/rog_ally/hid.py | 167 +- 3 files changed, 573 insertions(+), 4794 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 17590a31..207e120d 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -58,21 +58,10 @@ def open(self) -> Sequence[int]: if self.dev: logger.info(f"Switching ROG Ally to gamepad mode.") switch_mode(self.dev, "default") - self.mouse_mode = False - - # # Init the leds - # try: - # subprocess.run( - # ["asusctl", "led-mode", "static", "-c", "000000"], capture_output=True - # ) - # except Exception as e: - # logger.warning( - # f"Could not initialize the LEDS with `asusctl`. LEDS might not work. Install asusctl to fix." - # ) - - # Initializing leds - rgb_initialize() + logger.info(f"Initializing leds.") + rgb_initialize(self.dev) + self.mouse_mode = False return a def produce(self, fds: Sequence[int]) -> Sequence[Event]: diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 8f5e5ac0..d7d0a4eb 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -1,4700 +1,493 @@ -MODE_DEFAULT = [ - bytes( - [ - 0x5A, - 0xD1, - 0x01, - 0x01, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x01, - 0x2C, - 0x01, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x19, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x03, - 0x8C, - 0x88, - 0x76, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x02, - 0x2C, - 0x01, - 0x0B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x23, - 0x00, - 0x00, - 0x00, - 0x01, - 0x0C, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x03, - 0x2C, - 0x01, - 0x07, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x08, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x04, - 0x2C, - 0x01, - 0x05, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x06, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x05, - 0x2C, - 0x01, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x02, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x31, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x06, - 0x2C, - 0x01, - 0x03, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x4D, - 0x00, - 0x00, - 0x00, - 0x01, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x1E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x07, - 0x2C, - 0x01, - 0x11, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x12, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x08, - 0x2C, - 0x02, - 0x00, - 0x28, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x30, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x09, - 0x2C, - 0x01, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x0E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0F, - 0x20, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x06, - 0x02, - 0x64, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x04, - 0x04, - 0x00, - 0x64, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x05, - 0x04, - 0x00, - 0x64, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), +def buf(x): + return bytes(x) + bytes(64 - len(x)) + + +MODE_GAME = buf([0x5A, 0xD1, 0x01, 0x01, 0x01]) + +MODE_MOUSE = buf([0x5A, 0xD1, 0x01, 0x01, 0x03]) + +REMAP_DPAD_UD = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x01, + 0x2C, + 0x01, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x8C, + 0x88, + 0x76, + ] +) + +REMAP_DPAD_LR = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x02, + 0x2C, + 0x01, + 0x0B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x23, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0C, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x0D, + ] +) + +REMAP_JOYSTICKS = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x03, + 0x2C, + 0x01, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x08, + ] +) + +REMAP_SHOULDERS = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x04, + 0x2C, + 0x01, + 0x05, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x06, + ] +) + +REMAP_AB = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x05, + 0x2C, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x02, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x31, + ] +) + +REMAP_XY = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x06, + 0x2C, + 0x01, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x4D, + 0x00, + 0x00, + 0x00, + 0x01, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x1E, + ] +) + +REMAP_VIEW_MENU = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x07, + 0x2C, + 0x01, + 0x11, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x12, + ] +) + +REMAP_M1M2_DEFAULT = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x8E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x8E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x8F, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x8F, + ] +) + +REMAP_M1M2_F17F18 = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x30, + ] +) + +REMAP_TRIGGERS = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x09, + 0x2C, + 0x01, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x0E, + ] +) + + +FLUSH_BUFFER = buf([0x5A, 0xD1, 0x0A, 0x01]) + +COMMIT_RESET = [ + buf([0x5A, 0xD1, 0x0F, 0x20]), + buf([0x5A, 0xD1, 0x06, 0x02, 0x64, 0x64]), + buf([0x5A, 0xD1, 0x04, 0x04, 0x00, 0x64, 0x00, 0x64]), + buf([0x5A, 0xD1, 0x05, 0x04, 0x00, 0x64, 0x00, 0x64]), ] -MODE_MOUSE = [ - bytes( - [ - 0x5A, - 0xD1, - 0x01, - 0x01, - 0x03, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x01, - 0x2C, - 0x02, - 0x00, - 0x98, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x19, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x99, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x03, - 0x8C, - 0x88, - 0x76, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x02, - 0x2C, - 0x02, - 0x00, - 0x9A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x23, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x9B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x03, - 0x2C, - 0x02, - 0x00, - 0x88, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x03, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x04, - 0x2C, - 0x02, - 0x00, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x03, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x05, - 0x2C, - 0x02, - 0x00, - 0x5A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x76, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x31, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x06, - 0x2C, - 0x02, - 0x00, - 0x97, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x4D, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x96, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x1E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x07, - 0x2C, - 0x01, - 0x11, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x12, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x08, - 0x2C, - 0x02, - 0x00, - 0x28, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x30, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x09, - 0x2C, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x88, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x03, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0F, - 0x20, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x06, - 0x02, - 0x64, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x04, - 0x04, - 0x00, - 0x64, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x05, - 0x04, - 0x00, - 0x64, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), +COMMANDS_INIT = [ + # Switch to game mode + MODE_GAME, + FLUSH_BUFFER, + # Reset to defaults + REMAP_DPAD_LR, + FLUSH_BUFFER, + REMAP_DPAD_UD, + FLUSH_BUFFER, + REMAP_JOYSTICKS, + FLUSH_BUFFER, + REMAP_SHOULDERS, + FLUSH_BUFFER, + REMAP_AB, + FLUSH_BUFFER, + REMAP_XY, + FLUSH_BUFFER, + REMAP_VIEW_MENU, + FLUSH_BUFFER, + REMAP_M1M2_F17F18, + FLUSH_BUFFER, + REMAP_TRIGGERS, + FLUSH_BUFFER, + *COMMIT_RESET, ] -MODE_MACRO = [ - bytes( - [ - 0x5A, - 0xD1, - 0x01, - 0x01, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x01, - 0x2C, - 0x01, - 0x09, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x19, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x0A, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x03, - 0x8C, - 0x88, - 0x76, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x02, - 0x2C, - 0x01, - 0x0B, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x23, - 0x00, - 0x00, - 0x00, - 0x01, - 0x0C, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x03, - 0x2C, - 0x01, - 0x07, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x08, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x04, - 0x2C, - 0x01, - 0x05, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x06, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x05, - 0x2C, - 0x01, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x16, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x02, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x31, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x06, - 0x2C, - 0x01, - 0x03, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x82, - 0x4D, - 0x00, - 0x00, - 0x00, - 0x01, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x1E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x07, - 0x2C, - 0x01, - 0x11, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x12, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x08, - 0x2C, - 0x02, - 0x00, - 0x8E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x8E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x8F, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x8F, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0A, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x02, - 0x09, - 0x2C, - 0x01, - 0x0D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x0E, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x0F, - 0x20, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x06, - 0x02, - 0x64, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x04, - 0x04, - 0x00, - 0x64, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), - bytes( - [ - 0x5A, - 0xD1, - 0x05, - 0x04, - 0x00, - 0x64, - 0x00, - 0x64, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - ] - ), +COMMANDS_GAME = [ + MODE_GAME, + FLUSH_BUFFER, ] + +COMMANDS_MOUSE = [MODE_MOUSE, FLUSH_BUFFER] + +RGB_APPLY = buf([0x5A, 0xB4]) +RGB_SET = buf([0x5A, 0xB5]) + +RGB_INIT = buf( + [ + 0x5D, + 0x41, + 0x53, + 0x55, + 0x53, + 0x20, + 0x54, + 0x65, + 0x63, + 0x68, + 0x2E, + 0x49, + 0x6E, + 0x63, + 0x2E, + ] +) + +RGB_BRIGHTNESS_MAX = buf([0x5A, 0xBA, 0xC5, 0xC4, 0x03]) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 2c564952..949f04e9 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -2,58 +2,22 @@ from hhd.controller import Event from hhd.controller.lib.hid import Device -from .const import MODE_DEFAULT, MODE_MACRO, MODE_MOUSE - -Side = Literal["left", "right"] +from .const import ( + COMMANDS_GAME, + COMMANDS_MOUSE, + RGB_APPLY, + RGB_SET, + RGB_INIT, + buf, + RGB_BRIGHTNESS_MAX, +) + +Zone = Literal["all", "left_left", "left_right", "right_left", "right_right"] RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] GamepadMode = Literal["default", "mouse", "macro"] -def rgb_init(): - return [ # Brightness Command - bytes( - [ - 0x5D, - 0x41, - 0x53, - 0x55, - 0x53, - 0x20, - 0x54, - 0x65, - 0x63, - 0x68, - 0x2E, - 0x49, - 0x6E, - 0x63, - 0x2E, - ] - ), - ] - - -def rgb_save(): - return [ # Brightness Command - bytes([0x5A, 0xB4]), - ] - - -def rgb_brightness(): - return [ # Brightness Command - bytes([0x5A, 0xBA, 0xC5, 0xC4, 0x03]), - ] - - -def rgb_command(side: Side, mode: RgbMode, red: int, green: int, blue: int): - match side: - case "left": - c_side = 0x01 - case "right": - c_side = 0x00 - case _: - c_side = 0x00 - +def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): match mode: case "solid": # Static @@ -76,51 +40,79 @@ def rgb_command(side: Side, mode: RgbMode, red: int, green: int, blue: int): case _: c_mode = 0x00 - return [ - bytes( # Color Command + match zone: + case "left_left": + c_zone = 0x01 + case "left_right": + c_zone = 0x02 + case "right_left": + c_zone = 0x03 + case "right_right": + c_zone = 0x04 + case _: + c_zone = 0x00 + + return ( + buf( [ 0x5A, 0xB3, - 0x00, - c_mode, + c_zone, # zone + c_mode, # mode + red, + green, + blue, + 0x00, # speed + 0x00, # direction + 0x00, # breathing red, green, blue, - 0x00, - c_side, - ] - ), - bytes( - [ - 0x5A, - 0xB5, ] ), - ] + ) -def rgb_initialize(): - return [ - *rgb_init(), - *rgb_brightness(), - *rgb_command("right", "solid", 0, 0, 0), - *rgb_save(), - ] +def rgb_set( + side: Literal["main", "left", "right"], + mode: RgbMode, + red: int, + green: int, + blue: int, + quick: bool = False, +): + match side: + case "left": + return [ + rgb_command("left_left", mode, red, green, blue), + rgb_command("left_right", mode, red, green, blue), + ] + case "right": + return [ + rgb_command("right_right", mode, red, green, blue), + rgb_command("right_left", mode, red, green, blue), + ] + case _: + return [ + rgb_command("all", mode, red, green, blue), + ] -def rgb_set_both(mode: RgbMode, red: int, green: int, blue: int): - return [ - # *rgb_brightness(), - # *rgb_command("left", mode, red, green, blue), - *rgb_command("right", mode, red, green, blue), - ] +def rgb_initialize( + dev: Device, +): + for cmd in [ + RGB_INIT, # what does this do ? + RGB_BRIGHTNESS_MAX, + ]: + dev.write(cmd) def rgb_callback(dev: Device, events: Sequence[Event]): for ev in events: if ev["type"] == "led": if ev["mode"] == "disable": - reps = rgb_set_both("solid", 0, 0, 0) + reps = rgb_set(ev["code"], "solid", 0, 0, 0) else: match ev["mode"]: case "blinking": @@ -133,12 +125,17 @@ def rgb_callback(dev: Device, events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." - reps = rgb_set_both( - mode, - ev["red"], - ev["green"], - ev["blue"], - ) + reps = [ + *rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ), + RGB_APPLY, + RGB_SET, + ] for r in reps: dev.write(r) @@ -147,11 +144,11 @@ def rgb_callback(dev: Device, events: Sequence[Event]): def switch_mode(dev: Device, mode: GamepadMode): match mode: case "default": - cmds = MODE_DEFAULT - case "macro": - cmds = MODE_MACRO + cmds = COMMANDS_GAME + # case "macro": + # cmds = MODE_MACRO case "mouse": - cmds = MODE_MOUSE + cmds = COMMANDS_MOUSE case _: assert False, f"Mode '{mode}' not supported." From ea56e3acd19bb31a9fac39932e04f8bf8a8722af Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 13:31:15 +0200 Subject: [PATCH 0142/1497] fix nested tuple --- src/hhd/device/rog_ally/hid.py | 36 ++++++++++++++++------------------ 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 949f04e9..358c958d 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -52,24 +52,22 @@ def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): case _: c_zone = 0x00 - return ( - buf( - [ - 0x5A, - 0xB3, - c_zone, # zone - c_mode, # mode - red, - green, - blue, - 0x00, # speed - 0x00, # direction - 0x00, # breathing - red, - green, - blue, - ] - ), + return buf( + [ + 0x5A, + 0xB3, + c_zone, # zone + c_mode, # mode + red, + green, + blue, + 0x00, # speed + 0x00, # direction + 0x00, # breathing + red, + green, + blue, + ] ) @@ -102,7 +100,7 @@ def rgb_initialize( dev: Device, ): for cmd in [ - RGB_INIT, # what does this do ? + RGB_INIT, # what does this do ? RGB_BRIGHTNESS_MAX, ]: dev.write(cmd) From cb0e3e2e6651d30a10a4f0ee7669e4ca5b35f628 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 13:46:22 +0200 Subject: [PATCH 0143/1497] add proper initialization --- src/hhd/device/rog_ally/base.py | 8 ++++---- src/hhd/device/rog_ally/const.py | 3 --- src/hhd/device/rog_ally/hid.py | 7 ++++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 207e120d..736db17d 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -13,7 +13,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import rgb_callback, switch_mode, rgb_initialize +from .hid import rgb_callback, switch_mode, rgb_initialize, initialize ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -56,9 +56,9 @@ def open(self) -> Sequence[int]: self.queue: list[tuple[Event, float]] = [] a = super().open() if self.dev: - logger.info(f"Switching ROG Ally to gamepad mode.") - switch_mode(self.dev, "default") - logger.info(f"Initializing leds.") + logger.info(f"Initializing ROG Ally.") + initialize(self.dev) + logger.info(f"Initializing ROG Ally LEDs.") rgb_initialize(self.dev) self.mouse_mode = False diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index d7d0a4eb..b7e173a5 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -435,9 +435,6 @@ def buf(x): ] COMMANDS_INIT = [ - # Switch to game mode - MODE_GAME, - FLUSH_BUFFER, # Reset to defaults REMAP_DPAD_LR, FLUSH_BUFFER, diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 358c958d..bd59bc4b 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -3,6 +3,7 @@ from hhd.controller import Event from hhd.controller.lib.hid import Device from .const import ( + COMMANDS_INIT, COMMANDS_GAME, COMMANDS_MOUSE, RGB_APPLY, @@ -77,7 +78,6 @@ def rgb_set( red: int, green: int, blue: int, - quick: bool = False, ): match side: case "left": @@ -139,6 +139,11 @@ def rgb_callback(dev: Device, events: Sequence[Event]): dev.write(r) +def initialize(dev: Device): + for cmd in COMMANDS_INIT: + dev.write(cmd) + + def switch_mode(dev: Device, mode: GamepadMode): match mode: case "default": From 44b01c9e2a61f3a5215cc069b88b35ebc9cc5f24 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 15:09:30 +0200 Subject: [PATCH 0144/1497] add option for disabling initialing ally controller --- src/hhd/device/rog_ally/base.py | 26 +++++++++++++++++++------ src/hhd/device/rog_ally/controllers.yml | 8 ++++++++ src/hhd/plugins/outputs.py | 10 ++++++++-- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 736db17d..8add092b 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -1,15 +1,16 @@ import logging import select -import subprocess import time from threading import Event as TEvent from typing import Literal, Sequence from hhd.controller import Axis, Event, Multiplexer, can_read from hhd.controller.base import Event +from hhd.controller.lib.common import AM, BM, CM +from hhd.controller.lib.hid import MAX_REPORT_SIZE from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.hidraw import GenericGamepadHidraw +from hhd.controller.physical.hidraw import EventCallback, GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs @@ -52,14 +53,25 @@ class AllyHidraw(GenericGamepadHidraw): + def __init__( + self, *args, init_leds: bool = False, init_controller: bool = False, **kwargs + ) -> None: + self.init_leds = init_leds + self.init_controller = init_controller + super().__init__(*args, **kwargs) + def open(self) -> Sequence[int]: self.queue: list[tuple[Event, float]] = [] a = super().open() if self.dev: - logger.info(f"Initializing ROG Ally.") - initialize(self.dev) - logger.info(f"Initializing ROG Ally LEDs.") - rgb_initialize(self.dev) + if self.init_controller: + logger.info(f"Initializing Ally Controllers.") + initialize(self.dev) + logger.info(f"Switching Ally Controllers to gamepad mode.") + switch_mode(self.dev, "default") + if self.init_leds: + logger.info(f"Initializing ROG Ally LEDs.") + rgb_initialize(self.dev) self.mouse_mode = False return a @@ -174,6 +186,8 @@ def controller_loop(conf: Config, should_exit: TEvent): usage=[0x0080], required=True, callback=rgb_callback, + init_leds=d_params["uses_leds"], + init_controller=conf["initialize"].to(bool), ) # Grab shortcut keyboards diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 33c884b0..c2329573 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -46,6 +46,14 @@ children: Useful with dualsense. default: False + initialize: + type: bool + title: Initialize on start + hint: >- + Initializes the Ally controller on start, resetting bindings etc. + Disable if you adjust them yourself (with Armory Crate, asusctl, etc). + default: True + debug: type: bool title: Debug diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 71c85b52..8e6dccd2 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -30,15 +30,17 @@ def get_outputs( correction = "stretch" uses_touch = False + uses_leds = False match controller: case "dualsense": uses_touch = touchpad == "controller" + uses_leds = conf["dualsense.led_support"].to(bool) d = Dualsense( touchpad_method=correction, edge_mode=conf["dualsense.edge_mode"].to(bool), use_bluetooth=conf["dualsense.bluetooth_mode"].to(bool), enable_touchpad=uses_touch, - enable_rgb=conf["dualsense.led_support"].to(bool), + enable_rgb=uses_leds, fake_timestamps=not motion, ) producers.append(d) @@ -76,7 +78,11 @@ def get_outputs( consumers.append(d) uses_touch = True - return producers, consumers, {"uses_touch": uses_touch, "is_dual": False} + return ( + producers, + consumers, + {"uses_touch": uses_touch, "uses_leds": uses_leds, "is_dual": False}, + ) def get_outputs_config(): From ebb27b1aaf0a9aa4da5171b7530d1d9aab285a04 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 15:13:12 +0200 Subject: [PATCH 0145/1497] move yaml header to the bottom --- src/hhd/plugins/settings.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index dc7b2b63..85944add 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -176,6 +176,7 @@ class Mode(TypedDict): + "#\n" + "# This file contains plugin software-only configuration that will be retained\n" + "# across reboots. You may edit this file in lueu of using a frontend.\n" + + "# This header is on the bottom to make editing easier with e.g., nano.\n" + "#\n" + "# Parameters that are stored in hardware (TDP, RGB colors, etc) and\n" + "# risky parameters that might cause instability and should be reset\n" @@ -199,6 +200,7 @@ class Mode(TypedDict): + "#\n" + "# This file contains the configuration options that will be set when\n" + "# applying the profile which shares this file name.\n" + + "# This header is on the bottom to make editing easier with e.g., nano.\n" + "#\n" + "# Settings are applied once, when applying the profile, and only the ones\n" + "# that are stated change. Therefore, they may drift as the system state changes\n" @@ -412,7 +414,7 @@ def dump_comment(set: HHDSettings, header: str = STATE_HEADER): next_ofs = max(min(next_ofs, ofs), 0) out += f"\n# {'│' * next_ofs}{'└' * (ofs - next_ofs)} {lines[-1]}" out += f"\n# {'│' * next_ofs}" - out += "\n\n" + # out += "\n\n" return out @@ -511,10 +513,11 @@ def save_state_yaml(fn: str, set: HHDSettings, conf: Config): conf["version"] = shash with open(fn, "w") as f: - f.write(dump_comment(set, STATE_HEADER)) yaml.safe_dump( dump_settings(set, conf, "default"), f, width=85, sort_keys=False ) + f.write("\n") + f.write(dump_comment(set, STATE_HEADER)) return True @@ -564,8 +567,9 @@ def save_profile_yaml(fn: str, set: HHDSettings, conf: Config | None = None): conf["version"] = shash with open(fn, "w") as f: - f.write(dump_comment(set, PROFILE_HEADER)) yaml.safe_dump(dump_settings(set, conf, "unset"), f, width=85, sort_keys=False) + f.write("\n") + f.write(dump_comment(set, PROFILE_HEADER)) return True From 397fae77c45ccc9fc3cf6ca3ce3e07219cd2af59 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 15:51:56 +0200 Subject: [PATCH 0146/1497] tweak rgb set --- src/hhd/device/rog_ally/hid.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index bd59bc4b..24e2934c 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -102,6 +102,9 @@ def rgb_initialize( for cmd in [ RGB_INIT, # what does this do ? RGB_BRIGHTNESS_MAX, + *rgb_set("main", "solid", 0, 0, 0), + RGB_APPLY, + RGB_SET, ]: dev.write(cmd) @@ -123,17 +126,13 @@ def rgb_callback(dev: Device, events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." - reps = [ - *rgb_set( - ev["code"], - mode, - ev["red"], - ev["green"], - ev["blue"], - ), - RGB_APPLY, - RGB_SET, - ] + reps = rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ) for r in reps: dev.write(r) From dc5b7769124c9ae493313fd65969538b93945e9e Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:03:54 +0200 Subject: [PATCH 0147/1497] always apply --- src/hhd/device/rog_ally/hid.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 24e2934c..31419572 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -126,13 +126,16 @@ def rgb_callback(dev: Device, events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." - reps = rgb_set( - ev["code"], - mode, - ev["red"], - ev["green"], - ev["blue"], - ) + reps = [ + *rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ), + RGB_APPLY, + ] for r in reps: dev.write(r) From 0476cb29882f84dd084d0398386acde6e16499ce Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:08:38 +0200 Subject: [PATCH 0148/1497] remove extra color switching --- src/hhd/device/rog_ally/hid.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 31419572..69f9cb1e 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -65,9 +65,9 @@ def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): 0x00, # speed 0x00, # direction 0x00, # breathing - red, - green, - blue, + # red, + # green, + # blue, ] ) From 762d3dccbae6b3a7a3b8dbc26300065d09a3fa33 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:14:35 +0200 Subject: [PATCH 0149/1497] remove rgb set from ally --- src/hhd/device/rog_ally/hid.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 69f9cb1e..71931093 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -84,16 +84,16 @@ def rgb_set( return [ rgb_command("left_left", mode, red, green, blue), rgb_command("left_right", mode, red, green, blue), + RGB_APPLY, ] case "right": return [ rgb_command("right_right", mode, red, green, blue), rgb_command("right_left", mode, red, green, blue), + RGB_APPLY, ] case _: - return [ - rgb_command("all", mode, red, green, blue), - ] + return [rgb_command("all", mode, red, green, blue), RGB_APPLY] def rgb_initialize( @@ -103,8 +103,6 @@ def rgb_initialize( RGB_INIT, # what does this do ? RGB_BRIGHTNESS_MAX, *rgb_set("main", "solid", 0, 0, 0), - RGB_APPLY, - RGB_SET, ]: dev.write(cmd) @@ -126,16 +124,13 @@ def rgb_callback(dev: Device, events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." - reps = [ - *rgb_set( - ev["code"], - mode, - ev["red"], - ev["green"], - ev["blue"], - ), - RGB_APPLY, - ] + reps = rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ) for r in reps: dev.write(r) From af52f9173abf3f7ab6d059c3314ae9c3d9781a5e Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:16:02 +0200 Subject: [PATCH 0150/1497] switch to set instead of apply --- src/hhd/device/rog_ally/base.py | 2 +- src/hhd/device/rog_ally/hid.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 8add092b..4d225a87 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -70,7 +70,7 @@ def open(self) -> Sequence[int]: logger.info(f"Switching Ally Controllers to gamepad mode.") switch_mode(self.dev, "default") if self.init_leds: - logger.info(f"Initializing ROG Ally LEDs.") + logger.info(f"Initializing Ally LEDs.") rgb_initialize(self.dev) self.mouse_mode = False diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 71931093..7d60a46f 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -84,16 +84,16 @@ def rgb_set( return [ rgb_command("left_left", mode, red, green, blue), rgb_command("left_right", mode, red, green, blue), - RGB_APPLY, + RGB_SET, ] case "right": return [ rgb_command("right_right", mode, red, green, blue), rgb_command("right_left", mode, red, green, blue), - RGB_APPLY, + RGB_SET, ] case _: - return [rgb_command("all", mode, red, green, blue), RGB_APPLY] + return [rgb_command("all", mode, red, green, blue), RGB_SET] def rgb_initialize( From 1849269c762dfd8d332639a8ec4d8b4c6e3c6a2f Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:18:44 +0200 Subject: [PATCH 0151/1497] add extra init --- src/hhd/device/rog_ally/const.py | 3 ++- src/hhd/device/rog_ally/hid.py | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index b7e173a5..9a463919 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -467,7 +467,8 @@ def buf(x): RGB_APPLY = buf([0x5A, 0xB4]) RGB_SET = buf([0x5A, 0xB5]) -RGB_INIT = buf( +RGB_INIT_1 = buf([0x5D, 0xB9]) +RGB_INIT_2 = buf( [ 0x5D, 0x41, diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 7d60a46f..a818adc0 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -8,7 +8,8 @@ COMMANDS_MOUSE, RGB_APPLY, RGB_SET, - RGB_INIT, + RGB_INIT_1, + RGB_INIT_2, buf, RGB_BRIGHTNESS_MAX, ) @@ -100,9 +101,10 @@ def rgb_initialize( dev: Device, ): for cmd in [ - RGB_INIT, # what does this do ? + RGB_INIT_1, + RGB_INIT_2, RGB_BRIGHTNESS_MAX, - *rgb_set("main", "solid", 0, 0, 0), + # *rgb_set("main", "solid", 0, 0, 0), ]: dev.write(cmd) From 2e58c47e04fd885ade83e5e12fa3240d27122013 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:24:28 +0200 Subject: [PATCH 0152/1497] add second side --- src/hhd/device/rog_ally/hid.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index a818adc0..e465a890 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -66,9 +66,9 @@ def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): 0x00, # speed 0x00, # direction 0x00, # breathing - # red, - # green, - # blue, + red, + green, + blue, ] ) From a45c4d7c99b16f89b904977c98e1e6c0a708d631 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:27:35 +0200 Subject: [PATCH 0153/1497] read solid off on init --- src/hhd/device/rog_ally/hid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index e465a890..e46b82a7 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -104,7 +104,7 @@ def rgb_initialize( RGB_INIT_1, RGB_INIT_2, RGB_BRIGHTNESS_MAX, - # *rgb_set("main", "solid", 0, 0, 0), + *rgb_set("main", "solid", 0, 0, 0), ]: dev.write(cmd) From 0fa2a3021fd4cafeff31debf3818dc2738d10b44 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:29:52 +0200 Subject: [PATCH 0154/1497] add logger --- src/hhd/device/rog_ally/hid.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index e46b82a7..8aa49764 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -1,22 +1,25 @@ +import logging from typing import Literal, Sequence from hhd.controller import Event from hhd.controller.lib.hid import Device + from .const import ( - COMMANDS_INIT, COMMANDS_GAME, + COMMANDS_INIT, COMMANDS_MOUSE, RGB_APPLY, - RGB_SET, + RGB_BRIGHTNESS_MAX, RGB_INIT_1, RGB_INIT_2, + RGB_SET, buf, - RGB_BRIGHTNESS_MAX, ) Zone = Literal["all", "left_left", "left_right", "right_left", "right_right"] RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] GamepadMode = Literal["default", "mouse", "macro"] +logger = logging.getLogger(__name__) def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): @@ -135,6 +138,8 @@ def rgb_callback(dev: Device, events: Sequence[Event]): ) for r in reps: + logger.warning(f"Sending led commands") + logger.warning(r.hex()) dev.write(r) From 45a4e66344ec56c6ff3b65986607194bf382d56e Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:35:12 +0200 Subject: [PATCH 0155/1497] add apply, set and speed --- src/hhd/device/rog_ally/hid.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 8aa49764..c6715920 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -66,7 +66,7 @@ def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): red, green, blue, - 0x00, # speed + 0xEB, # speed 0x00, # direction 0x00, # breathing red, @@ -88,16 +88,18 @@ def rgb_set( return [ rgb_command("left_left", mode, red, green, blue), rgb_command("left_right", mode, red, green, blue), + RGB_APPLY, RGB_SET, ] case "right": return [ rgb_command("right_right", mode, red, green, blue), rgb_command("right_left", mode, red, green, blue), + RGB_APPLY, RGB_SET, ] case _: - return [rgb_command("all", mode, red, green, blue), RGB_SET] + return [rgb_command("all", mode, red, green, blue), RGB_APPLY, RGB_SET] def rgb_initialize( From 698bb96efc759765651570b4d6a1542a86c9d178 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:37:23 +0200 Subject: [PATCH 0156/1497] always send brightness --- src/hhd/device/rog_ally/hid.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index c6715920..e65346e1 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -86,6 +86,7 @@ def rgb_set( match side: case "left": return [ + RGB_BRIGHTNESS_MAX, rgb_command("left_left", mode, red, green, blue), rgb_command("left_right", mode, red, green, blue), RGB_APPLY, @@ -93,13 +94,19 @@ def rgb_set( ] case "right": return [ + RGB_BRIGHTNESS_MAX, rgb_command("right_right", mode, red, green, blue), rgb_command("right_left", mode, red, green, blue), RGB_APPLY, RGB_SET, ] case _: - return [rgb_command("all", mode, red, green, blue), RGB_APPLY, RGB_SET] + return [ + RGB_BRIGHTNESS_MAX, + rgb_command("all", mode, red, green, blue), + RGB_APPLY, + RGB_SET, + ] def rgb_initialize( @@ -108,7 +115,6 @@ def rgb_initialize( for cmd in [ RGB_INIT_1, RGB_INIT_2, - RGB_BRIGHTNESS_MAX, *rgb_set("main", "solid", 0, 0, 0), ]: dev.write(cmd) @@ -139,8 +145,8 @@ def rgb_callback(dev: Device, events: Sequence[Event]): ev["blue"], ) + logger.warning(f"Sending led commands") for r in reps: - logger.warning(f"Sending led commands") logger.warning(r.hex()) dev.write(r) From a252073bf535ca606efa9b8a316c23645db0f4c4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:44:32 +0200 Subject: [PATCH 0157/1497] use single command for setting leds --- src/hhd/device/rog_ally/hid.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index e65346e1..86ff101f 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -86,26 +86,17 @@ def rgb_set( match side: case "left": return [ - RGB_BRIGHTNESS_MAX, rgb_command("left_left", mode, red, green, blue), rgb_command("left_right", mode, red, green, blue), - RGB_APPLY, - RGB_SET, ] case "right": return [ - RGB_BRIGHTNESS_MAX, rgb_command("right_right", mode, red, green, blue), rgb_command("right_left", mode, red, green, blue), - RGB_APPLY, - RGB_SET, ] case _: return [ - RGB_BRIGHTNESS_MAX, rgb_command("all", mode, red, green, blue), - RGB_APPLY, - RGB_SET, ] @@ -115,7 +106,10 @@ def rgb_initialize( for cmd in [ RGB_INIT_1, RGB_INIT_2, + RGB_BRIGHTNESS_MAX, *rgb_set("main", "solid", 0, 0, 0), + RGB_APPLY, + RGB_SET, ]: dev.write(cmd) From e89f524bec129c2d56fa17de3c79bce8fd791373 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:51:44 +0200 Subject: [PATCH 0158/1497] add set command in case another process overrides leds --- src/hhd/device/rog_ally/hid.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 86ff101f..590732e5 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -19,7 +19,6 @@ Zone = Literal["all", "left_left", "left_right", "right_left", "right_right"] RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] GamepadMode = Literal["default", "mouse", "macro"] -logger = logging.getLogger(__name__) def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): @@ -131,17 +130,18 @@ def rgb_callback(dev: Device, events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." - reps = rgb_set( - ev["code"], - mode, - ev["red"], - ev["green"], - ev["blue"], - ) - - logger.warning(f"Sending led commands") + reps = [ + *rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ), + RGB_SET, # set to avoid issues + ] + for r in reps: - logger.warning(r.hex()) dev.write(r) From 01ab158f8a1faf67279b6305b6cadbf3a27e9f00 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:56:06 +0200 Subject: [PATCH 0159/1497] reset all zones --- src/hhd/device/rog_ally/hid.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 590732e5..e8327f4b 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -107,6 +107,8 @@ def rgb_initialize( RGB_INIT_2, RGB_BRIGHTNESS_MAX, *rgb_set("main", "solid", 0, 0, 0), + *rgb_set("left", "solid", 0, 0, 0), + *rgb_set("right", "solid", 0, 0, 0), RGB_APPLY, RGB_SET, ]: @@ -138,7 +140,7 @@ def rgb_callback(dev: Device, events: Sequence[Event]): ev["green"], ev["blue"], ), - RGB_SET, # set to avoid issues + RGB_SET, # set to avoid issues ] for r in reps: From 028f54f107201c5650e5026599f161b671c36b34 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 16:59:34 +0200 Subject: [PATCH 0160/1497] add logger --- src/hhd/device/rog_ally/hid.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index e8327f4b..ef227f17 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -20,6 +20,7 @@ RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] GamepadMode = Literal["default", "mouse", "macro"] +logger = logging.getLogger(__name__) def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): match mode: @@ -65,7 +66,7 @@ def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): red, green, blue, - 0xEB, # speed + 0x00, # speed 0x00, # direction 0x00, # breathing red, @@ -143,7 +144,9 @@ def rgb_callback(dev: Device, events: Sequence[Event]): RGB_SET, # set to avoid issues ] + logger.warning(f"Setting leds") for r in reps: + logger.warning(r.hex()) dev.write(r) From e730d26fb791a4436689c209e995d81969215f78 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:05:11 +0200 Subject: [PATCH 0161/1497] add apply set every time --- src/hhd/device/rog_ally/hid.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index ef227f17..259d17e0 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -22,6 +22,7 @@ logger = logging.getLogger(__name__) + def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): match mode: case "solid": @@ -107,9 +108,9 @@ def rgb_initialize( RGB_INIT_1, RGB_INIT_2, RGB_BRIGHTNESS_MAX, - *rgb_set("main", "solid", 0, 0, 0), *rgb_set("left", "solid", 0, 0, 0), *rgb_set("right", "solid", 0, 0, 0), + *rgb_set("main", "solid", 0, 0, 0), RGB_APPLY, RGB_SET, ]: @@ -141,7 +142,8 @@ def rgb_callback(dev: Device, events: Sequence[Event]): ev["green"], ev["blue"], ), - RGB_SET, # set to avoid issues + RGB_APPLY, + RGB_SET, ] logger.warning(f"Setting leds") From 0f5c8f2d40fa7a3395468c727a36d06d8e1f2a5b Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:08:30 +0200 Subject: [PATCH 0162/1497] remove apply and set --- src/hhd/device/rog_ally/hid.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 259d17e0..87d042ef 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -142,8 +142,6 @@ def rgb_callback(dev: Device, events: Sequence[Event]): ev["green"], ev["blue"], ), - RGB_APPLY, - RGB_SET, ] logger.warning(f"Setting leds") From e098c1d4ea8cacfdfc3f9205e0e0ed4e876e312d Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:24:34 +0200 Subject: [PATCH 0163/1497] periodically initialize leds --- src/hhd/device/rog_ally/base.py | 7 +-- src/hhd/device/rog_ally/hid.py | 76 +++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 4d225a87..900dfb41 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -14,7 +14,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import rgb_callback, switch_mode, rgb_initialize, initialize +from .hid import RgbCallback, switch_mode, rgb_initialize, initialize ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -69,9 +69,6 @@ def open(self) -> Sequence[int]: initialize(self.dev) logger.info(f"Switching Ally Controllers to gamepad mode.") switch_mode(self.dev, "default") - if self.init_leds: - logger.info(f"Initializing Ally LEDs.") - rgb_initialize(self.dev) self.mouse_mode = False return a @@ -185,7 +182,7 @@ def controller_loop(conf: Config, should_exit: TEvent): usage_page=[0xFF31], usage=[0x0080], required=True, - callback=rgb_callback, + callback=RgbCallback(), init_leds=d_params["uses_leds"], init_controller=conf["initialize"].to(bool), ) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 87d042ef..173cd245 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -3,6 +3,7 @@ from hhd.controller import Event from hhd.controller.lib.hid import Device +import time from .const import ( COMMANDS_GAME, @@ -108,8 +109,6 @@ def rgb_initialize( RGB_INIT_1, RGB_INIT_2, RGB_BRIGHTNESS_MAX, - *rgb_set("left", "solid", 0, 0, 0), - *rgb_set("right", "solid", 0, 0, 0), *rgb_set("main", "solid", 0, 0, 0), RGB_APPLY, RGB_SET, @@ -117,37 +116,48 @@ def rgb_initialize( dev.write(cmd) -def rgb_callback(dev: Device, events: Sequence[Event]): - for ev in events: - if ev["type"] == "led": - if ev["mode"] == "disable": - reps = rgb_set(ev["code"], "solid", 0, 0, 0) - else: - match ev["mode"]: - case "blinking": - mode = "pulse" - case "rainbow": - mode = "dynamic" - case "solid": - mode = "solid" - case "spiral": - mode = "spiral" - case _: - assert False, f"Mode '{ev['mode']}' not supported." - reps = [ - *rgb_set( - ev["code"], - mode, - ev["red"], - ev["green"], - ev["blue"], - ), - ] - - logger.warning(f"Setting leds") - for r in reps: - logger.warning(r.hex()) - dev.write(r) +INIT_EVERY_S = 10 + + +class RgbCallback: + def __init__(self) -> None: + self.last_update = None + + def __call__(self, dev: Device, events: Sequence[Event]): + curr = time.perf_counter() + if not self.last_update or self.last_update + INIT_EVERY_S > curr: + rgb_initialize(dev) + + for ev in events: + if ev["type"] == "led": + if ev["mode"] == "disable": + reps = rgb_set(ev["code"], "solid", 0, 0, 0) + else: + match ev["mode"]: + case "blinking": + mode = "pulse" + case "rainbow": + mode = "dynamic" + case "solid": + mode = "solid" + case "spiral": + mode = "spiral" + case _: + assert False, f"Mode '{ev['mode']}' not supported." + reps = [ + *rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ), + ] + + logger.warning(f"Setting leds") + for r in reps: + logger.warning(r.hex()) + dev.write(r) def initialize(dev: Device): From 78e1c0c8a88c3030e6fb4033917d14010568e043 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:34:06 +0200 Subject: [PATCH 0164/1497] add periodic initialization properly --- src/hhd/device/rog_ally/base.py | 8 +-- src/hhd/device/rog_ally/hid.py | 91 +++++++++++++++++---------------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 900dfb41..a411ed3c 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -14,7 +14,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import RgbCallback, switch_mode, rgb_initialize, initialize +from .hid import RgbCallback, switch_mode, initialize ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -53,10 +53,7 @@ class AllyHidraw(GenericGamepadHidraw): - def __init__( - self, *args, init_leds: bool = False, init_controller: bool = False, **kwargs - ) -> None: - self.init_leds = init_leds + def __init__(self, *args, init_controller: bool = False, **kwargs) -> None: self.init_controller = init_controller super().__init__(*args, **kwargs) @@ -183,7 +180,6 @@ def controller_loop(conf: Config, should_exit: TEvent): usage=[0x0080], required=True, callback=RgbCallback(), - init_leds=d_params["uses_leds"], init_controller=conf["initialize"].to(bool), ) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 173cd245..121d6393 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -102,21 +102,37 @@ def rgb_set( ] -def rgb_initialize( - dev: Device, -): - for cmd in [ - RGB_INIT_1, - RGB_INIT_2, - RGB_BRIGHTNESS_MAX, - *rgb_set("main", "solid", 0, 0, 0), - RGB_APPLY, - RGB_SET, - ]: - dev.write(cmd) +INIT_EVERY_S = 10 -INIT_EVERY_S = 10 +def process_events(events: Sequence[Event]): + cmds = [] + for ev in events: + if ev["type"] == "led": + if ev["mode"] == "disable": + cmds.extend(rgb_set(ev["code"], "solid", 0, 0, 0)) + else: + match ev["mode"]: + case "blinking": + mode = "pulse" + case "rainbow": + mode = "dynamic" + case "solid": + mode = "solid" + case "spiral": + mode = "spiral" + case _: + assert False, f"Mode '{ev['mode']}' not supported." + reps = [ + *rgb_set( + ev["code"], + mode, + ev["red"], + ev["green"], + ev["blue"], + ), + ] + return cmds class RgbCallback: @@ -124,40 +140,25 @@ def __init__(self) -> None: self.last_update = None def __call__(self, dev: Device, events: Sequence[Event]): + cmds = process_events(events) + if not cmds: + return + curr = time.perf_counter() if not self.last_update or self.last_update + INIT_EVERY_S > curr: - rgb_initialize(dev) - - for ev in events: - if ev["type"] == "led": - if ev["mode"] == "disable": - reps = rgb_set(ev["code"], "solid", 0, 0, 0) - else: - match ev["mode"]: - case "blinking": - mode = "pulse" - case "rainbow": - mode = "dynamic" - case "solid": - mode = "solid" - case "spiral": - mode = "spiral" - case _: - assert False, f"Mode '{ev['mode']}' not supported." - reps = [ - *rgb_set( - ev["code"], - mode, - ev["red"], - ev["green"], - ev["blue"], - ), - ] - - logger.warning(f"Setting leds") - for r in reps: - logger.warning(r.hex()) - dev.write(r) + self.last_update = curr + cmds = [ + RGB_INIT_1, + RGB_INIT_2, + RGB_BRIGHTNESS_MAX, + *cmds, + RGB_APPLY, + RGB_SET, + ] + + for r in cmds: + logger.warning(r.hex()) + dev.write(r) def initialize(dev: Device): From 92bd8b995aa912ac7e0fc7ec9a1fe02cc156c43f Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:35:43 +0200 Subject: [PATCH 0165/1497] fix bug --- src/hhd/device/rog_ally/hid.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 121d6393..4e7da625 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -123,15 +123,15 @@ def process_events(events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." - reps = [ - *rgb_set( + cmds.extend( + rgb_set( ev["code"], mode, ev["red"], ev["green"], ev["blue"], - ), - ] + ) + ) return cmds From b7e9593e409626feec4fe37b63d31faa4763037c Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:36:44 +0200 Subject: [PATCH 0166/1497] fix update sign --- src/hhd/device/rog_ally/hid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 4e7da625..ffe1db05 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -145,7 +145,7 @@ def __call__(self, dev: Device, events: Sequence[Event]): return curr = time.perf_counter() - if not self.last_update or self.last_update + INIT_EVERY_S > curr: + if not self.last_update or self.last_update + INIT_EVERY_S < curr: self.last_update = curr cmds = [ RGB_INIT_1, From 3b731ff212f857e1aae9f743eababd566a8982a6 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 17:41:10 +0200 Subject: [PATCH 0167/1497] use lazy init and init on mode changes --- src/hhd/device/rog_ally/hid.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index ffe1db05..81419bab 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -107,6 +107,7 @@ def rgb_set( def process_events(events: Sequence[Event]): cmds = [] + mode = None for ev in events: if ev["type"] == "led": if ev["mode"] == "disable": @@ -123,6 +124,7 @@ def process_events(events: Sequence[Event]): mode = "spiral" case _: assert False, f"Mode '{ev['mode']}' not supported." + cmds.extend( rgb_set( ev["code"], @@ -132,21 +134,22 @@ def process_events(events: Sequence[Event]): ev["blue"], ) ) - return cmds + return cmds, mode class RgbCallback: def __init__(self) -> None: - self.last_update = None + self.prev_mode = None def __call__(self, dev: Device, events: Sequence[Event]): - cmds = process_events(events) + cmds, mode = process_events(events) if not cmds: return - - curr = time.perf_counter() - if not self.last_update or self.last_update + INIT_EVERY_S < curr: - self.last_update = curr + + if mode != self.prev_mode: + self.prev_mode = mode + # Init on start or when the mode + # changes cmds = [ RGB_INIT_1, RGB_INIT_2, From 8a754c98b6e0a647e5206ce9d6c39a17545ebce6 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 18:18:24 +0200 Subject: [PATCH 0168/1497] add hhd updater --- src/hhd/__main__.py | 81 ++++++++++++++++++++++- src/hhd/plugins/settings.py | 30 +++++++-- src/hhd/settings.yml | 34 ++++++++++ usr/lib/systemd/system/hhd@.service | 2 +- usr/lib/systemd/system/hhd_local@.service | 2 +- 5 files changed, 139 insertions(+), 10 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 0f0806b3..12043fc0 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -9,6 +9,7 @@ from threading import Lock, RLock from time import sleep from typing import Sequence, cast +import subprocess import pkg_resources @@ -131,6 +132,7 @@ def main(): # HTTP data https = None prev_http_cfg = None + updated = True try: # Create nested hhd dir @@ -271,6 +273,13 @@ def main(): else: conf = new_conf + try: + from importlib.metadata import version + + conf["hhd.version.version"] = version("hhd") + except Exception: + pass + # Profiles profiles = {} templates = {} @@ -471,6 +480,70 @@ def main(): if https: https.update(settings, conf, profiles, emit) + upd_stable = conf.get("hhd.version.update_stable", False) + upd_beta = conf.get("hhd.version.update_beta", False) + upd_decky = conf.get("hhd.version.update_decky", False) + + if upd_stable or upd_beta or upd_decky: + set_log_plugin("main") + conf["hhd.version.update_stable"] = False + conf["hhd.version.update_beta"] = False + conf.get("hhd.version.update_decky", False) + + switch_priviledge(ctx, False) + if upd_decky: + logger.info("Updating Decky Plugin") + try: + subprocess.check_call( + "curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh", + shell=True, + ) + except Exception as e: + logger.error(f"Error while updating decky plugin:\n{e}") + else: + import sys + + # Check we are in a virtual environment + # TODO: Improve + exe_python = sys.executable + + try: + logger.info(f"Updating Handheld Daemon.") + if "venv" in exe_python: + subprocess.check_call( + [ + exe_python, + "-m", + "pip", + "uninstall", + "-y", + "hhd", + ] + ) + subprocess.check_call( + [ + exe_python, + "-m", + "pip", + "install", + "--upgrade", + "git+https://github.com/hhd-dev/hhd" + if upd_beta + else "hhd", + ] + ) + else: + logger.error( + f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" + ) + except Exception as e: + logger.error(f"Error while updating:\n{e}") + switch_priviledge(ctx, True) + + if upd_stable or upd_beta: + updated = True + should_exit.set() + # Wait for events with lock: if ( @@ -482,7 +555,7 @@ def main(): cond.wait(timeout=POLL_DELAY) set_log_plugin("main") - logger.info(f"HHD Daemon received interrupt, stopping plugins and exiting.") + logger.info(f"Received interrupt or updated. Stopping plugins and exiting.") finally: for fd in cfg_fds: try: @@ -500,6 +573,12 @@ def main(): set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") p.close() + if updated: + # Use error code to restart service + import sys + + sys.exit(-1) + if __name__ == "__main__": main() diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 85944add..9e09d5e1 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -23,13 +23,11 @@ class ButtonSetting(TypedDict): """Just a button, emits an event. Used for resets, etc.""" - type: Literal["event"] + type: Literal["action"] tags: Sequence[str] title: str hint: str | None - default: bool | None - class BooleanSetting(TypedDict): """Checkbox container.""" @@ -109,6 +107,18 @@ class ColorSetting(TypedDict): default: Color | None +class DisplaySetting(TypedDict): + """Shows a text value in the UI.""" + + type: Literal["display"] + tags: Sequence[str] + title: str + hint: str | None + + config: Any | None + default: Any | None + + class CustomSetting(TypedDict): """Custom plugin setting. @@ -140,6 +150,7 @@ class CustomSetting(TypedDict): | IntegerSetting | ColorSetting | CustomSetting + | DisplaySetting ) # @@ -256,7 +267,7 @@ def fill_in_defaults(s: Setting | Container | Mode): s["tags"] = s.get("tags", []) s["title"] = s.get("title", "") s["hint"] = s.get("hint", None) - if s["type"] != "container": + if s["type"] != "container" and s["type"] != "action": s["default"] = s.get("default", None) match s["type"]: @@ -362,6 +373,8 @@ def generate_desc(s: Setting | Container | Mode): desc += f"- boolean: [False, True]\n" case "multiple" | "discrete": desc += f"- options: [{', '.join(map(str, s['options']))}]\n" + case "action": + desc += f"- action: Set to True to run.\n" if (d := s.get("default", None)) is not None: desc += f"- default: {d}\n" @@ -673,10 +686,13 @@ def validate_config( for k, d in options.items(): v = conf.get(k, None) - default = d["default"] + if d["type"] == "action": + default = False + else: + default = d["default"] if v is None: if use_defaults and default is not None: - conf[k] = v + conf[k] = default continue match d["type"]: @@ -686,7 +702,7 @@ def validate_config( conf[k] = default else: del conf[k] - case "bool" | "event": + case "bool" | "action": if v not in (False, True): conf[k] = bool(v) case "multiple" | "discrete": diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 10c4f75a..009ffd23 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -1,3 +1,34 @@ +version: + type: container + tags: [hhd-version] + title: Version Information + hint: "Handheld Daemon version manager (local install only)." + + children: + version: + type: display + tags: [hhd-version-display, text] + title: Version + hint: "Displays the Handheld Daemon version." + + update_stable: + type: action + tags: [hhd-update-stable] + title: Update (Stable) + hint: "Updates to the latest version from PyPi (local install only)." + + update_beta: + type: action + tags: [hhd-update-beta] + title: Update (Beta) + hint: "Updates to the master branch from git (local install only)." + + update_decky: + type: action + tags: [hhd-update-beta] + title: Update Decky + hint: "Updates the Decky plugin to the latest release." + http: type: container tags: [hhd-http] @@ -9,12 +40,14 @@ http: enable: type: bool title: Enable REST API. + tags: [advanced] hint: >- Enables the rest API of Handheld Daemon default: True port: type: int title: REST API Port + tags: [advanced, hhd-port, port, dropdown] hint: >- Which port should the REST API be on? min: 1024 @@ -29,6 +62,7 @@ http: token: type: bool title: Use Security token + tags: [advanced] hint: >- Generates a security token in `~/.config/hhd/token` that is required for authentication. diff --git a/usr/lib/systemd/system/hhd@.service b/usr/lib/systemd/system/hhd@.service index 9ad6e3bb..6af5f39e 100644 --- a/usr/lib/systemd/system/hhd@.service +++ b/usr/lib/systemd/system/hhd@.service @@ -5,7 +5,7 @@ Description=Handheld Daemon Service ExecStart=/usr/bin/hhd --user %i Nice=-12 Restart=on-failure -RestartSec=10 +RestartSec=5 [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/usr/lib/systemd/system/hhd_local@.service b/usr/lib/systemd/system/hhd_local@.service index b90d41c9..8e4da15a 100644 --- a/usr/lib/systemd/system/hhd_local@.service +++ b/usr/lib/systemd/system/hhd_local@.service @@ -5,7 +5,7 @@ Description=Handheld Daemon Service ExecStart=/home/%i/.local/share/hhd/venv/bin/hhd --user %i Nice=-12 Restart=on-failure -RestartSec=10 +RestartSec=5 [Install] WantedBy=multi-user.target \ No newline at end of file From b9fdf905a53e6e4a43e365c7702038ec47b7af44 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 18:21:33 +0200 Subject: [PATCH 0169/1497] tweak touchpad wording --- src/hhd/device/legion_go/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 551ca7c8..6e93f704 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -79,7 +79,7 @@ children: # emulation: type: container - title: Enabled + title: Virtual hint: >- Adds an emulated touchpad. This touchpad is meant to be for desktop use and has left, right click support by default, within gamescope and From 5961d5d1ceb370e988802477d2fba0b1b9bc6a29 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 18:48:29 +0200 Subject: [PATCH 0170/1497] fix updater cache dir --- src/hhd/__main__.py | 13 ++++++++----- src/hhd/settings.yml | 12 ++++++------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 12043fc0..765fd24b 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -132,7 +132,7 @@ def main(): # HTTP data https = None prev_http_cfg = None - updated = True + updated = False try: # Create nested hhd dir @@ -488,14 +488,15 @@ def main(): set_log_plugin("main") conf["hhd.version.update_stable"] = False conf["hhd.version.update_beta"] = False - conf.get("hhd.version.update_decky", False) + conf["hhd.version.update_decky"] = False switch_priviledge(ctx, False) if upd_decky: logger.info("Updating Decky Plugin") try: + home = expanduser("~/", ctx) subprocess.check_call( - "curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh", + f'curl -L https://github.com/hhd-dev/hhd-decky/raw/main/update.sh | HOME="{home}" sh', shell=True, ) except Exception as e: @@ -527,11 +528,14 @@ def main(): "pip", "install", "--upgrade", + "--cache-dir", + "/tmp/__hhd_update_cache", "git+https://github.com/hhd-dev/hhd" if upd_beta else "hhd", ] ) + updated = True else: logger.error( f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" @@ -540,8 +544,7 @@ def main(): logger.error(f"Error while updating:\n{e}") switch_priviledge(ctx, True) - if upd_stable or upd_beta: - updated = True + if updated: should_exit.set() # Wait for events diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 009ffd23..1c656fdb 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -17,18 +17,18 @@ version: title: Update (Stable) hint: "Updates to the latest version from PyPi (local install only)." + update_decky: + type: action + tags: [hhd-update-decky] + title: Update Decky + hint: "Updates the Decky plugin to the latest release." + update_beta: type: action tags: [hhd-update-beta] title: Update (Beta) hint: "Updates to the master branch from git (local install only)." - update_decky: - type: action - tags: [hhd-update-beta] - title: Update Decky - hint: "Updates the Decky plugin to the latest release." - http: type: container tags: [hhd-http] From e34bb280e66598923d3473a845ce6b84e71dc2c4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 19:16:22 +0200 Subject: [PATCH 0171/1497] boost sensitivity --- src/hhd/device/legion_go/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index a7006fce..f0ce019c 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -43,9 +43,9 @@ # Legion go has a bit lower sensitivity than it should GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "anglvel_x": ("gyro_z", "anglvel", 6, None), - "anglvel_y": ("gyro_x", "anglvel", 6, None), - "anglvel_z": ("gyro_y", "anglvel", 6, None), + "anglvel_x": ("gyro_z", "anglvel", 10, None), + "anglvel_y": ("gyro_x", "anglvel", 10, None), + "anglvel_z": ("gyro_y", "anglvel", 10, None), "timestamp": ("gyro_ts", None, 1, None), } From 7ea79622e64d6275c1dc5e4f15cbed183b053bcc Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 19:27:53 +0200 Subject: [PATCH 0172/1497] hide update settings if the install is not local --- src/hhd/__main__.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 765fd24b..ca27a631 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -3,13 +3,14 @@ import logging import os import signal +import subprocess +import sys from os.path import join from threading import Condition from threading import Event as TEvent from threading import Lock, RLock from time import sleep from typing import Sequence, cast -import subprocess import pkg_resources @@ -134,6 +135,10 @@ def main(): prev_http_cfg = None updated = False + # Check we are in a virtual environment + # TODO: Improve + exe_python = sys.executable + try: # Create nested hhd dir # This might mess up permissions in upward directories @@ -258,6 +263,13 @@ def main(): # Settings hhd_settings = {"hhd": load_relative_yaml("settings.yml")} + # TODO: Improve check + try: + if not "venv" in exe_python or True: + del hhd_settings["hhd"]["version"]["children"]["update_stable"] + del hhd_settings["hhd"]["version"]["children"]["update_beta"] + except Exception as e: + logger.warning(f"Could not hide update settings. Error:\n{e}") settings = merge_settings( [*[p.settings() for p in sorted_plugins], hhd_settings] ) @@ -502,12 +514,6 @@ def main(): except Exception as e: logger.error(f"Error while updating decky plugin:\n{e}") else: - import sys - - # Check we are in a virtual environment - # TODO: Improve - exe_python = sys.executable - try: logger.info(f"Updating Handheld Daemon.") if "venv" in exe_python: @@ -578,8 +584,6 @@ def main(): if updated: # Use error code to restart service - import sys - sys.exit(-1) From bf8ea2b6e4fc91855ee6262d974974f02da3ab65 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 19:38:32 +0200 Subject: [PATCH 0173/1497] add decky version settings --- src/hhd/settings.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 1c656fdb..6e7738e8 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -17,6 +17,12 @@ version: title: Update (Stable) hint: "Updates to the latest version from PyPi (local install only)." + decky_version: + type: display + tags: [hhd-version-display-decky, text] + title: Decky Version + hint: "Displays the Handheld Daemon Decky plugin version." + update_decky: type: action tags: [hhd-update-decky] @@ -26,7 +32,7 @@ version: update_beta: type: action tags: [hhd-update-beta] - title: Update (Beta) + title: Update (Beta !!!) hint: "Updates to the master branch from git (local install only)." http: From 902de05f80d85f56d4d392f55615655265555780 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 19:46:07 +0200 Subject: [PATCH 0174/1497] boost sensitivity --- src/hhd/device/legion_go/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index f0ce019c..c994ee93 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -43,9 +43,9 @@ # Legion go has a bit lower sensitivity than it should GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "anglvel_x": ("gyro_z", "anglvel", 10, None), - "anglvel_y": ("gyro_x", "anglvel", 10, None), - "anglvel_z": ("gyro_y", "anglvel", 10, None), + "anglvel_x": ("gyro_z", "anglvel", 22, None), + "anglvel_y": ("gyro_x", "anglvel", 22, None), + "anglvel_z": ("gyro_y", "anglvel", 22, None), "timestamp": ("gyro_ts", None, 1, None), } From 886d3409c531c51ba216721e131c732a142a3312 Mon Sep 17 00:00:00 2001 From: Aarron Lee Date: Fri, 5 Jan 2024 10:16:45 -0500 Subject: [PATCH 0175/1497] chimeraOS readme updates --- readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 7d2f16b6..e697497e 100644 --- a/readme.md +++ b/readme.md @@ -70,11 +70,12 @@ sudo frzr-unlock # Run installer sudo pacman -S base-devel +sudo systemctl disable --now handycon.service +sudo pikaur -R handygccs-git sudo pikaur -S hhd -sudo pacman -R handygccs-git # Enable and reboot -sudo systemctl enable hhd@$(whoami) +sudo systemctl enable --now hhd@$(whoami) sudo reboot ``` @@ -90,7 +91,7 @@ sudo systemctl disable hhd@$(whoami) sudo pikaur -S handygccs-git sudo pacman -R hhd -sudo systemctl enable handycon +sudo systemctl enable --now handycon.service sudo reboot ``` @@ -117,8 +118,7 @@ to install a local version of HHD. sudo dnf install python-devel # Install Handheld Daemon to ~/.local/share/hhd -mkdir -p ~/.local/share/hhd -cd ~/.local/share/hhd +mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd python -m venv venv source venv/bin/activate From 166a1b457732927d1889fc930ccaa3b34220da9b Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 20:23:18 +0200 Subject: [PATCH 0176/1497] update readme with new recommendations --- readme.md | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index e697497e..708db266 100644 --- a/readme.md +++ b/readme.md @@ -6,38 +6,39 @@ session management. This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will expose the settings of the plugins in a UI agnostic way. -The current version contains a fully functional DualSense Edge (PS5) emulator -for the Legion Go (including touchpad, gyro, and LED support). - It is the aim of this project to provide generic hid-based emulators for most mainstream controllers (xbox Elite, DS4, PS5, Joycons), so that users of devices can pick the best target for their device and its controls, which may change depending on the game. -*Current Features (Legion Go)*: +*Current Features (for both ROG Ally and Legion Go)*: - Fully functional DualSense Edge emulation - All buttons supported - Rumble feedback - Touchpad support (Steam Input as well) - LED remapping -- Evdev device emulation +- Virtual Input device emulation - No weird glyphs - - Partial gyro and back button support (only outside Steam) - - Touchpad has right click (unlike DualSense Edge) + - Gyro and back button support (outside Steam) +- Touchpad Emulation + - Fixes left and right clicks within gamescope when using the Legion Go + touchpad. - Power Button plugin for Big Picture/Steam Deck Mode - Short press makes Steam backup saves and wink before suspend. - - Long press opens Steam power menu -- Hiding the original Xbox controller + - Long press opens Steam power menu. +- Hides the original Xbox controller - HTTP based Configuration - Allows configuring HHD over Electron/React apps. - Token-based authentication and limited to localhost. - Will allow swapping configuration per game. +- Built-in updater (soon to become available from Decky). *Planned Features (in this order)*: - Steam Deck controller emulation - No weird glyphs -- TDP Plugin (Legion Go) - - Will provide parity with Legion Space, hardware is already reverse engineered +- TDP Plugin + - Will provide parity with Legion Space/Armory crate, hardware is already reverse + engineered for the Legion Go - High-end Over/Downclocking Utility for Ryzen processors - By hooking into the manufacturer ACPI API of the Ryzen platform, it will expose all TDP related parameters manufacturers have access to @@ -50,10 +51,10 @@ depending on the game. ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PyPi. -> On boot you might see an xbox controller. There is a bug with hiding the controller +> On boot you might see an xbox controller. There is a bug with hiding the controller > during the boot process. -> Flicking the fps switch on off fixes it and the controller is hidden until the next -> reboot. +> Flicking the fps switch on off on the Go fixes it and the controller is hidden +> until the next reboot. For the ally, you can change a setting in decky. ### ChimeraOS @@ -108,14 +109,16 @@ and add this line to your `configuration.nix`: services.handheldDaemon.enable = true; ``` -### PyPi Based installation (Nobara or immutable filesystem) -If you have a read-only filesystem or are on a Fedora-based system, you may opt -to install a local version of HHD. +### Local Installation (from PyPi) +You can also install HHD using a local package, which enables auto-updating. +`curl` script coming soon! ```bash # (nobara) Install Python Headers since evdev has no wheels # and nobara does not ship them (but arch does) sudo dnf install python-devel +# (Chimera, Arch) In case you dont have gcc. +sudo pacman -S base-devel # Install Handheld Daemon to ~/.local/share/hhd mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd @@ -123,6 +126,9 @@ mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd python -m venv venv source venv/bin/activate pip install hhd +# Substitute with the following to pull from here +# (if you are asked by devs; the master branch is not guaranteed to always work) +# pip install git+https://github.com/hhd-dev/hhd # Install udev rules and create a service file sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules From 69e83e9892b3d69a5d94fce3eb346d15767fa1d0 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 20:58:47 +0200 Subject: [PATCH 0177/1497] fix brightness bar --- pyproject.toml | 2 +- src/hhd/plugins/display/__init__.py | 59 ++++++++++++++++++---------- src/hhd/plugins/display/settings.yml | 6 +-- src/hhd/plugins/settings.py | 5 +++ 4 files changed, 47 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ebe08f44..519e9d69 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" -# display = "hhd.plugins.display:autodetect" +display = "hhd.plugins.display:autodetect" [build-system] requires = ["setuptools>=61.0", "wheel"] diff --git a/src/hhd/plugins/display/__init__.py b/src/hhd/plugins/display/__init__.py index 13e7852b..0e3adf6f 100644 --- a/src/hhd/plugins/display/__init__.py +++ b/src/hhd/plugins/display/__init__.py @@ -12,7 +12,6 @@ logger = logging.getLogger(__name__) BACKLIGHT_DIR = "/sys/class/backlight/" -LEVELS = [0, 5, 10, 15, 20, 35, 50, 75, 90, 100] def write_sysfs(dir: str, fn: str, val: Any): @@ -41,9 +40,7 @@ def __init__(self) -> None: def settings(self) -> HHDSettings: if self.display: - s = {"general": {"display": load_relative_yaml("settings.yml")}} - s["general"]["display"]["children"]["brightness"]["options"] = LEVELS - return s + return {"general": {"display": load_relative_yaml("settings.yml")}} else: return {} @@ -72,27 +69,47 @@ def update(self, conf: Config): return try: - requested = conf["general.display.brightness"].to(float | None) - # Set brightness - if requested and requested != -1 and requested != self.prev: - logger.info(f"Setting brightness to {requested}") - write_sysfs( - self.display, - "brightness", - int(self.max_brightness * requested / 100), - ) - # Wait a bit - sleep(0.1) - - # Get brightness - curr = ( + requested = conf["general.display.brightness"].to(int | None) + + curr = int( int(read_sysfs(self.display, "brightness", None)) * 100 / self.max_brightness ) - discr = min(LEVELS, key=lambda x: abs(x - curr)) - conf["general.display.brightness"] = discr - self.prev = discr + + # Set brightness + if requested and requested != self.prev: + changed = False + # If the change is too low the display might not make the + # change, so while loop and increase requested values + while not changed and (requested >= 0 and requested <= 100): + logger.info(f"Setting brightness to {requested}") + write_sysfs( + self.display, + "brightness", + int(self.max_brightness * requested / 100), + ) + # Wait a bit + sleep(0.1) + + # Get brightness + new_curr = int( + int(read_sysfs(self.display, "brightness", None)) + * 100 + / self.max_brightness + ) + changed = new_curr != curr + curr = new_curr + + # In case the brightness did not change + # increase request + if curr > requested: + requested -= 1 + else: + requested += 1 + + conf["general.display.brightness"] = curr + self.prev = curr except Exception as e: logger.error(f"Error while processing display settings:\n{type(e)}: {e}") diff --git a/src/hhd/plugins/display/settings.yml b/src/hhd/plugins/display/settings.yml index fac056ed..a853b548 100644 --- a/src/hhd/plugins/display/settings.yml +++ b/src/hhd/plugins/display/settings.yml @@ -7,11 +7,11 @@ hint: >- children: brightness: - type: discrete + type: int tags: [display_brightness] title: Brightness hint: >- Sets the brightness level of a display. Only one display is supported and it is the one that was read. - options: null - default: -1 + min: 0 + max: 100 diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 9e09d5e1..e2936c8a 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -74,6 +74,8 @@ class NumericalSetting(TypedDict): min: float | None max: float | None + step: int | None + default: float | None @@ -87,6 +89,8 @@ class IntegerSetting(TypedDict): min: int | None max: int | None + step: int | None + default: int | None @@ -287,6 +291,7 @@ def fill_in_defaults(s: Setting | Container | Mode): case "integer" | "float": s["min"] = s.get("min", None) s["max"] = s.get("max", None) + s["step"] = s.get("step", None) case "custom": s["config"] = s.get("config", None) return s From 0be2f1a1c25721c9966ca99e773ecfcc9fb23df4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 21:02:08 +0200 Subject: [PATCH 0178/1497] add gyro scaling --- src/hhd/device/legion_go/base.py | 15 +++++++-------- src/hhd/device/legion_go/controllers.yml | 11 +++++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index c994ee93..8bc3e14e 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -41,14 +41,6 @@ 0x6185: "fps", } -# Legion go has a bit lower sensitivity than it should -GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "anglvel_x": ("gyro_z", "anglvel", 22, None), - "anglvel_y": ("gyro_x", "anglvel", 22, None), - "anglvel_z": ("gyro_y", "anglvel", 22, None), - "timestamp": ("gyro_ts", None, 1, None), -} - def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): # Remove leftover udev rules @@ -194,6 +186,13 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): # Imu d_accel = AccelImu() + # Legion go has a bit lower sensitivity than it should + GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "anglvel_x": ("gyro_z", "anglvel", conf["gyro_scaling"].to(int), None), + "anglvel_y": ("gyro_x", "anglvel", conf["gyro_scaling"].to(int), None), + "anglvel_z": ("gyro_y", "anglvel", conf["gyro_scaling"].to(int), None), + "timestamp": ("gyro_ts", None, 1, None), + } d_gyro = GyroImu(map=GYRO_MAPPINGS) # Inputs diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 6e93f704..1bce33cf 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -39,6 +39,17 @@ children: 100hz. options: [0, 40, 60, 75, 100, 125, 200, 300] default: 100 + gyro_scaling: + type: int + title: Gyro Scale + hint: >- + Applies a scaling factor to the legion go gyroscope (since it is misconfigured + by the driver). Try different values to see what works best. + Low values cause a deadzone and high values will clip when moving the + Go abruptly. + min: 15 + max: 40 + default: 22 swap_legion: type: multiple title: Swap Legion Buttons with Start/Select From ea46dc42b5c06f31a38929bfd99cdfa5d2d66f73 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 21:15:50 +0200 Subject: [PATCH 0179/1497] add better logging --- src/hhd/plugins/display/__init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/display/__init__.py b/src/hhd/plugins/display/__init__.py index 0e3adf6f..60a3922c 100644 --- a/src/hhd/plugins/display/__init__.py +++ b/src/hhd/plugins/display/__init__.py @@ -78,12 +78,12 @@ def update(self, conf: Config): ) # Set brightness - if requested and requested != self.prev: + if requested is not None and requested != self.prev: changed = False # If the change is too low the display might not make the # change, so while loop and increase requested values + logger.info(f"Setting brightness to {requested}") while not changed and (requested >= 0 and requested <= 100): - logger.info(f"Setting brightness to {requested}") write_sysfs( self.display, "brightness", @@ -103,10 +103,14 @@ def update(self, conf: Config): # In case the brightness did not change # increase request + requested_old = requested if curr > requested: requested -= 1 else: requested += 1 + + if not changed: + logger.warning(f"Could not set brightness to {requested_old}. Trying {requested}.") conf["general.display.brightness"] = curr self.prev = curr From a53b413fa1ac53de5f269b5dcb68b9aefb7f95bb Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 5 Jan 2024 23:47:16 +0200 Subject: [PATCH 0180/1497] flip legion go z --- src/hhd/device/legion_go/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 8bc3e14e..d85fd001 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -188,7 +188,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent): d_accel = AccelImu() # Legion go has a bit lower sensitivity than it should GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "anglvel_x": ("gyro_z", "anglvel", conf["gyro_scaling"].to(int), None), + "anglvel_x": ("gyro_z", "anglvel", -conf["gyro_scaling"].to(int), None), "anglvel_y": ("gyro_x", "anglvel", conf["gyro_scaling"].to(int), None), "anglvel_z": ("gyro_y", "anglvel", conf["gyro_scaling"].to(int), None), "timestamp": ("gyro_ts", None, 1, None), From 1c2bed15196ac5ee41b2fb7cf5097a3faa0a8e36 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 01:36:17 +0200 Subject: [PATCH 0181/1497] update settings, dont hide hhd update --- src/hhd/__main__.py | 2 +- src/hhd/settings.yml | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index ca27a631..7cec1bda 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -265,7 +265,7 @@ def main(): hhd_settings = {"hhd": load_relative_yaml("settings.yml")} # TODO: Improve check try: - if not "venv" in exe_python or True: + if "venv" not in exe_python: del hhd_settings["hhd"]["version"]["children"]["update_stable"] del hhd_settings["hhd"]["version"]["children"]["update_beta"] except Exception as e: diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 6e7738e8..4556695a 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -5,10 +5,22 @@ version: hint: "Handheld Daemon version manager (local install only)." children: + decky_version: + type: display + tags: [hhd-version-display-decky, text] + title: Decky Plugin Version + hint: "Displays the Handheld Daemon Decky plugin version." + + update_decky: + type: action + tags: [hhd-update-decky] + title: "Update Decky\nRestarts session" + hint: "Updates the Decky plugin to the latest release." + version: type: display tags: [hhd-version-display, text] - title: Version + title: Handheld Daemon Version hint: "Displays the Handheld Daemon version." update_stable: @@ -17,28 +29,16 @@ version: title: Update (Stable) hint: "Updates to the latest version from PyPi (local install only)." - decky_version: - type: display - tags: [hhd-version-display-decky, text] - title: Decky Version - hint: "Displays the Handheld Daemon Decky plugin version." - - update_decky: - type: action - tags: [hhd-update-decky] - title: Update Decky - hint: "Updates the Decky plugin to the latest release." - update_beta: type: action tags: [hhd-update-beta] - title: Update (Beta !!!) + title: Update (Unstable) hint: "Updates to the master branch from git (local install only)." http: type: container tags: [hhd-http] - title: REST API Configuration (BETA) + title: API Configuration hint: >- Settings for configuring the http endpoint of HHD. @@ -68,7 +68,7 @@ http: token: type: bool title: Use Security token - tags: [advanced] + tags: [] hint: >- Generates a security token in `~/.config/hhd/token` that is required for authentication. From bf5a902a4e488570c71dab9313fc7ce629e2a97d Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 01:37:01 +0200 Subject: [PATCH 0182/1497] fix typo --- src/hhd/settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 4556695a..dbb6618a 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -14,7 +14,7 @@ version: update_decky: type: action tags: [hhd-update-decky] - title: "Update Decky\nRestarts session" + title: "Update Decky" hint: "Updates the Decky plugin to the latest release." version: From af86b1ab53de3a8c552819c92bb1cd8781622ab2 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 01:58:11 +0200 Subject: [PATCH 0183/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 519e9d69..3a3b2931 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.0" +version = "1.0.1" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 64f725f2a01f7f659f18ad8e5a4d9106ebe82242 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 02:31:15 +0200 Subject: [PATCH 0184/1497] fix profile bug with default values --- src/hhd/plugins/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index e2936c8a..4debf009 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -458,7 +458,7 @@ def dump_setting( m = conf.get([*prev, child_name], None) # Skip writing default values default = child.get("default", None) - if default is None: + if default is None and unmark != "unset": out[child_name] = None elif m is None: out[child_name] = unmark From e593a8b00380b20b498da035cbcba22b35e50913 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 10:52:02 +0200 Subject: [PATCH 0185/1497] remove sleep from display --- src/hhd/plugins/display/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hhd/plugins/display/__init__.py b/src/hhd/plugins/display/__init__.py index 60a3922c..92cbcd82 100644 --- a/src/hhd/plugins/display/__init__.py +++ b/src/hhd/plugins/display/__init__.py @@ -89,8 +89,6 @@ def update(self, conf: Config): "brightness", int(self.max_brightness * requested / 100), ) - # Wait a bit - sleep(0.1) # Get brightness new_curr = int( From 46313a97a0f42ce749d57311a5548744a79fa93c Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 11:28:32 +0200 Subject: [PATCH 0186/1497] lower refresh time for controller plugin --- src/hhd/device/legion_go/__init__.py | 21 +++++++++++++++------ src/hhd/device/legion_go/base.py | 20 +++++++++++++------- src/hhd/device/rog_ally/__init__.py | 21 +++++++++++++++------ src/hhd/device/rog_ally/base.py | 9 +++++---- src/hhd/plugins/conf.py | 3 +++ 5 files changed, 51 insertions(+), 23 deletions(-) diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index 28154033..19e17f62 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -19,7 +19,10 @@ class LegionControllersPlugin(HHDPlugin): def __init__(self) -> None: self.t = None - self.event = None + self.should_exit = None + self.updated = Event() + self.started = False + self.t = None def open( self, @@ -43,24 +46,30 @@ def update(self, conf: Config): self.prev = conf["controllers.legion_go"] self.start(self.prev) + conf.update(self.prev.conf) + self.updated.set() def start(self, conf): from .base import plugin_run + if self.started: + return + self.started = True + self.close() - self.event = Event() + self.should_exit = Event() self.t = Thread( target=plugin_run, - args=(conf, self.emit, self.context, self.event), + args=(conf, self.emit, self.context, self.should_exit, self.updated), ) self.t.start() def close(self): - if not self.event or not self.t: + if not self.should_exit or not self.t: return - self.event.set() + self.should_exit.set() self.t.join() - self.event = None + self.should_exit = None self.t = None diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index d85fd001..2ce0c769 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -42,7 +42,9 @@ } -def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): +def plugin_run( + conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent +): # Remove leftover udev rules # unhide_all() if (gyro_fix := conf.get("gyro_fix", False)) and conf["gyro"].to(bool): @@ -75,6 +77,8 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven time.sleep(ERROR_DELAY) continue + conf_copy = conf.copy() + updated.clear() if ( controller_mode == "xinput" and conf["xinput.mode"].to(str) != "disabled" @@ -82,7 +86,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven logger.info("Launching emulated controller.") if gyro_fixer: gyro_fixer.open() - controller_loop_xinput(conf, should_exit) + controller_loop_xinput(conf_copy, should_exit, updated) else: if controller_mode != "xinput": logger.info( @@ -93,7 +97,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven f"Controllers in xinput mode but emulation is disabled." ) controller_loop_rest( - controller_mode, pid if pid else 2, conf, should_exit + controller_mode, pid if pid else 2, conf_copy, should_exit, updated ) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") @@ -111,7 +115,9 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven # unhide_all() -def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent): +def controller_loop_rest( + mode: str, pid: int, conf: Config, should_exit: TEvent, updated: TEvent +): debug = conf.get("debug", False) shortcuts_enabled = conf["shortcuts"].to(bool) # FIXME: Sleep when shortcuts are disabled instead of polling raw interface @@ -159,7 +165,7 @@ def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent) fds.extend(d_shortcuts.open()) fds.extend(d_uinput.open()) - while not should_exit.is_set(): + while not should_exit.is_set() and not updated.is_set(): select.select(fds, [], [], SELECT_TIMEOUT) evs = multiplexer.process(d_raw.produce(fds)) @@ -175,7 +181,7 @@ def controller_loop_rest(mode: str, pid: int, conf: Config, should_exit: TEvent) d_raw.close(True) -def controller_loop_xinput(conf: Config, should_exit: TEvent): +def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): debug = conf.get("debug", False) # Output @@ -297,7 +303,7 @@ def prepare(m): prepare(d) logger.info("Emulated controller launched, have fun!") - while not should_exit.is_set(): + while not should_exit.is_set() and not updated.is_set(): start = time.perf_counter() # Add timeout to call consumers a minimum amount of times per second r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) diff --git a/src/hhd/device/rog_ally/__init__.py b/src/hhd/device/rog_ally/__init__.py index b2e9d29e..622c317f 100644 --- a/src/hhd/device/rog_ally/__init__.py +++ b/src/hhd/device/rog_ally/__init__.py @@ -19,7 +19,10 @@ class RogAllyControllersPlugin(HHDPlugin): def __init__(self) -> None: self.t = None - self.event = None + self.should_exit = None + self.updated = Event() + self.started = False + self.t = None def open( self, @@ -43,24 +46,30 @@ def update(self, conf: Config): self.prev = conf["controllers.rog_ally"] self.start(self.prev) + conf.update(self.prev.conf) + self.updated.set() def start(self, conf): from .base import plugin_run + if self.started: + return + self.started = True + self.close() - self.event = Event() + self.should_exit = Event() self.t = Thread( target=plugin_run, - args=(conf, self.emit, self.context, self.event), + args=(conf, self.emit, self.context, self.should_exit, self.updated), ) self.t.start() def close(self): - if not self.event or not self.t: + if not self.should_exit or not self.t: return - self.event.set() + self.should_exit.set() self.t.join() - self.event = None + self.should_exit = None self.t = None diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index a411ed3c..4093867a 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -134,11 +134,12 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: return out -def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent): +def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent): while not should_exit.is_set(): try: logger.info("Launching emulated controller.") - controller_loop(conf, should_exit) + updated.clear() + controller_loop(conf.copy(), should_exit, updated) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( @@ -150,7 +151,7 @@ def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEven time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent): +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): debug = conf.get("debug", False) # Output @@ -231,7 +232,7 @@ def prepare(m): prepare(d) logger.info("Emulated controller launched, have fun!") - while not should_exit.is_set(): + while not should_exit.is_set() and not updated.is_set(): start = time.perf_counter() # Add timeout to call consumers a minimum amount of times per second r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) diff --git a/src/hhd/plugins/conf.py b/src/hhd/plugins/conf.py index 02439cfb..89406b14 100644 --- a/src/hhd/plugins/conf.py +++ b/src/hhd/plugins/conf.py @@ -174,6 +174,9 @@ def get(self, key, default: A) -> A: def to(self, t: type[A]) -> A: return cast(t, self.conf) + def copy(self): + return Config([self.conf]) + @property def conf(self): with self._lock: From 9891ebd22dbfd397a88e09864e448171864de141 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 11:33:20 +0200 Subject: [PATCH 0187/1497] remove modify delay --- src/hhd/__main__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 7cec1bda..963c80cb 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -44,7 +44,6 @@ ERROR_DELAY = 5 POLL_DELAY = 2 -MODIFY_DELAY = 0.1 class EmitHolder(Emitter): @@ -485,7 +484,6 @@ def main(): if not has_new and saved: # We triggered the interrupt, clear - sleep(MODIFY_DELAY) should_initialize.clear() # Notify that events were applied From 798b5f98c70084dc502d24815f36679f656555a8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 11:43:00 +0200 Subject: [PATCH 0188/1497] cache settings hash --- src/hhd/__main__.py | 8 ++++++-- src/hhd/plugins/display/__init__.py | 9 +++++++-- src/hhd/plugins/settings.py | 12 ++++++++---- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 963c80cb..28b66b2f 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -33,6 +33,7 @@ merge_settings, save_blacklist_yaml, save_profile_yaml, + get_settings_hash, save_state_yaml, validate_config, ) @@ -229,6 +230,7 @@ def main(): state_fn = expanduser(join(CONFIG_DIR, "state.yml"), ctx) token_fn = expanduser(join(CONFIG_DIR, "token"), ctx) settings: HHDSettings = {} + shash = None # Load profiles profiles = {} @@ -272,6 +274,7 @@ def main(): settings = merge_settings( [*[p.settings() for p in sorted_plugins], hhd_settings] ) + shash = get_settings_hash(hhd_settings) # State new_conf = load_state_yaml(state_fn, settings) @@ -450,12 +453,12 @@ def main(): has_new = should_initialize.is_set() saved = False # Save existing profiles if open - if save_state_yaml(state_fn, settings, conf): + if save_state_yaml(state_fn, settings, conf, shash): fix_perms(state_fn, ctx) saved = True for name, prof in profiles.items(): fn = join(profile_dir, name + ".yml") - if save_profile_yaml(fn, settings, prof): + if save_profile_yaml(fn, settings, prof, shash): fix_perms(fn, ctx) saved = True for prof in os.listdir(profile_dir): @@ -478,6 +481,7 @@ def main(): join(profile_dir, "_template.yml"), settings, templates.get("_template", None), + shash, ): fix_perms(join(profile_dir, "_template.yml"), ctx) saved = True diff --git a/src/hhd/plugins/display/__init__.py b/src/hhd/plugins/display/__init__.py index 92cbcd82..a7497632 100644 --- a/src/hhd/plugins/display/__init__.py +++ b/src/hhd/plugins/display/__init__.py @@ -68,6 +68,7 @@ def update(self, conf: Config): if not self.display: return + curr = None try: requested = conf["general.display.brightness"].to(int | None) @@ -106,14 +107,18 @@ def update(self, conf: Config): requested -= 1 else: requested += 1 - + if not changed: - logger.warning(f"Could not set brightness to {requested_old}. Trying {requested}.") + logger.warning( + f"Could not set brightness to {requested_old}. Trying {requested}." + ) conf["general.display.brightness"] = curr self.prev = curr except Exception as e: logger.error(f"Error while processing display settings:\n{type(e)}: {e}") + # Set conf to avoid repeated updates + conf["general.display.brightness"] = curr def close(self): pass diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 4debf009..bb1df62a 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -522,10 +522,11 @@ def dump_settings( return merge_dicts({"version": None, **cast(Mapping, conf.conf)}, out) -def save_state_yaml(fn: str, set: HHDSettings, conf: Config): +def save_state_yaml(fn: str, set: HHDSettings, conf: Config, shash=None): import yaml - shash = get_settings_hash(set) + if shash is None: + shash = get_settings_hash(set) if conf.get("version", None) == shash and not conf.updated: return False @@ -574,10 +575,13 @@ def load_blacklist_yaml(fn: str): return ["myplugin1"] -def save_profile_yaml(fn: str, set: HHDSettings, conf: Config | None = None): +def save_profile_yaml( + fn: str, set: HHDSettings, conf: Config | None = None, shash=None +): import yaml - shash = get_settings_hash(set) + if shash is None: + shash = get_settings_hash(set) if conf is None: conf = Config({}) elif conf.get("version", None) == shash and not conf.updated: From f6e02a007cd1cfccf8fd63bb833294818ce40af7 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 12:35:30 +0200 Subject: [PATCH 0189/1497] fix configuration issues --- src/hhd/__main__.py | 6 ++++-- src/hhd/device/legion_go/__init__.py | 12 ++++++++---- src/hhd/device/rog_ally/__init__.py | 11 +++++++---- src/hhd/plugins/conf.py | 3 ++- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 28b66b2f..34b8d84d 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -8,9 +8,9 @@ from os.path import join from threading import Condition from threading import Event as TEvent -from threading import Lock, RLock +from threading import RLock from time import sleep -from typing import Sequence, cast +from typing import Sequence import pkg_resources @@ -456,11 +456,13 @@ def main(): if save_state_yaml(state_fn, settings, conf, shash): fix_perms(state_fn, ctx) saved = True + conf.updated = False for name, prof in profiles.items(): fn = join(profile_dir, name + ".yml") if save_profile_yaml(fn, settings, prof, shash): fix_perms(fn, ctx) saved = True + prof.updated = False for prof in os.listdir(profile_dir): if prof.startswith("_") or not prof.endswith(".yml"): continue diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index 19e17f62..26043abc 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -23,6 +23,7 @@ def __init__(self) -> None: self.updated = Event() self.started = False self.t = None + self.prev = None def open( self, @@ -41,13 +42,16 @@ def settings(self) -> HHDSettings: return base def update(self, conf: Config): - if conf["controllers.legion_go"] == self.prev: + new_conf = conf["controllers.legion_go"] + if new_conf == self.prev: return - self.prev = conf["controllers.legion_go"] + if self.prev is None: + self.prev = new_conf + else: + self.prev.update(new_conf.conf) - self.start(self.prev) - conf.update(self.prev.conf) self.updated.set() + self.start(self.prev) def start(self, conf): from .base import plugin_run diff --git a/src/hhd/device/rog_ally/__init__.py b/src/hhd/device/rog_ally/__init__.py index 622c317f..9ddbb9fc 100644 --- a/src/hhd/device/rog_ally/__init__.py +++ b/src/hhd/device/rog_ally/__init__.py @@ -41,13 +41,16 @@ def settings(self) -> HHDSettings: return base def update(self, conf: Config): - if conf["controllers.rog_ally"] == self.prev: + new_conf = conf["controllers.rog_ally"] + if new_conf == self.prev: return - self.prev = conf["controllers.rog_ally"] + if self.prev is None: + self.prev = new_conf + else: + self.prev.update(new_conf.conf) - self.start(self.prev) - conf.update(self.prev.conf) self.updated.set() + self.start(self.prev) def start(self, conf): from .base import plugin_run diff --git a/src/hhd/plugins/conf.py b/src/hhd/plugins/conf.py index 89406b14..771c83d7 100644 --- a/src/hhd/plugins/conf.py +++ b/src/hhd/plugins/conf.py @@ -134,7 +134,8 @@ def __setitem__(self, key: str | tuple[str, ...], val): parse_conf(cont, self._conf) else: self._conf = cont - self.updated = True + if self._conf != cont: + self.updated = True def __contains__(self, key: str | tuple[str, ...]): with self._lock: From 5a469778b7f5ab697da50f80a0be585a67aea802 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 12:44:12 +0200 Subject: [PATCH 0190/1497] remove width --- src/hhd/plugins/settings.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index bb1df62a..6da4192e 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -10,6 +10,7 @@ cast, Protocol, ) +import time from copy import copy from .conf import Config @@ -470,7 +471,7 @@ def dump_setting( m = conf.get([*prev, "mode"], None) # Skip writing default values default = set.get("default", None) - if default is None: + if default is None and unmark != "unset": out["mode"] = None elif m is None: out["mode"] = unmark @@ -533,7 +534,7 @@ def save_state_yaml(fn: str, set: HHDSettings, conf: Config, shash=None): conf["version"] = shash with open(fn, "w") as f: yaml.safe_dump( - dump_settings(set, conf, "default"), f, width=85, sort_keys=False + dump_settings(set, conf, "default"), f, sort_keys=False ) f.write("\n") f.write(dump_comment(set, STATE_HEADER)) From 33510c5dc5b530eb157d213a2c5469d141570255 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 12:51:47 +0200 Subject: [PATCH 0191/1497] tweak setting wording --- src/hhd/device/legion_go/controllers.yml | 2 +- src/hhd/device/rog_ally/controllers.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 1bce33cf..99d9642c 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -62,7 +62,7 @@ children: default: disabled share_to_qam: type: bool - title: Map the Legion R button to QAM (instead of Mute). + title: Legion R to QAM default: True touchpad: diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index c2329573..26d365e3 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -29,7 +29,7 @@ children: Sets the sampling frequency for the IMU. 1600 requires an IMU patch. Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. - options: [25, 50, 100, 200, 400, 800, 1600] + options: [100, 200, 400, 800, 1600] default: 400 share_to_qam: From a59ad3dcd058d5569323876e44b5d8e234c8c224 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 12:53:28 +0200 Subject: [PATCH 0192/1497] remove debug from decky --- src/hhd/device/legion_go/controllers.yml | 1 + src/hhd/device/rog_ally/controllers.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 99d9642c..72a6cf81 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -194,6 +194,7 @@ children: debug: type: bool title: Debug + tags: [advanced] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 26d365e3..7c6660dc 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -57,6 +57,7 @@ children: debug: type: bool title: Debug + tags: [advanced] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). From 929624b81c1f5d4a38bed8c8ba2a81b5f051bc1c Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 13:01:49 +0200 Subject: [PATCH 0193/1497] disable brightness slider --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3a3b2931..6c3fef0d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" -display = "hhd.plugins.display:autodetect" +# display = "hhd.plugins.display:autodetect" [build-system] requires = ["setuptools>=61.0", "wheel"] From 3f46e37e0bb2e1ac52c5942b45032f3fbcf7e2bc Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 13:09:29 +0200 Subject: [PATCH 0194/1497] cleanup legion settings a bit more --- src/hhd/device/legion_go/controllers.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 72a6cf81..e3a214c0 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -25,6 +25,7 @@ children: accel: type: bool title: Accelerometer + tags: [advanced] hint: >- Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; if someone asks it will be fixed). @@ -52,7 +53,7 @@ children: default: 22 swap_legion: type: multiple - title: Swap Legion Buttons with Start/Select + title: Swap Legion with Start/Select hint: >- Swaps the legion buttons with start select. options: From e2b0230b659f9ff2597df9d656aad2131d46dcf9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 13:29:17 +0200 Subject: [PATCH 0195/1497] hide more settings --- src/hhd/device/legion_go/controllers.yml | 3 +++ src/hhd/device/rog_ally/controllers.yml | 2 ++ src/hhd/settings.yml | 5 +++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index e3a214c0..1510ca97 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -100,6 +100,7 @@ children: short: type: multiple title: Short Action + tags: [advanced] hint: >- Maps short touches (less than 0.2s) to a virtual touchpad button. options: @@ -110,6 +111,7 @@ children: hold: type: multiple title: Hold Action + tags: [advanced] hint: >- Maps long touches (more than 2s) to a virtual touchpad button. options: @@ -152,6 +154,7 @@ children: short: type: multiple title: Short Action + tags: [advanced] hint: >- Maps short touches (less than 0.2s) to a touchpad action. Dualsense uses a physical press for left and a double tap for diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 7c6660dc..7c51aa93 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -35,6 +35,7 @@ children: share_to_qam: type: bool title: Map Armory to QAM. + tags: [advanced] default: True paddles_to_touchpad: @@ -49,6 +50,7 @@ children: initialize: type: bool title: Initialize on start + tags: [advanced] hint: >- Initializes the Ally controller on start, resetting bindings etc. Disable if you adjust them yourself (with Armory Crate, asusctl, etc). diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index dbb6618a..9cb69e27 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -37,7 +37,7 @@ version: http: type: container - tags: [hhd-http] + tags: [hhd-http, advanced] title: API Configuration hint: >- Settings for configuring the http endpoint of HHD. @@ -62,13 +62,14 @@ http: localhost: type: bool title: Limit Access to localhost + tags: [advanced] hint: >- Sets the API target to '127.0.0.1' instead '0.0.0.0'. default: True token: type: bool title: Use Security token - tags: [] + tags: [advanced] hint: >- Generates a security token in `~/.config/hhd/token` that is required for authentication. From 609202d4a4355b97d9f1ed4e88d7ac46165678a9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 14:14:17 +0200 Subject: [PATCH 0196/1497] rework touchpad to paddles and build it to non-edge --- src/hhd/controller/base.py | 21 ------------------- .../controller/virtual/dualsense/__init__.py | 15 +++++++++++++ src/hhd/device/legion_go/base.py | 1 - src/hhd/device/legion_go/controllers.yml | 8 ------- src/hhd/device/rog_ally/base.py | 1 - src/hhd/device/rog_ally/controllers.yml | 9 -------- src/hhd/plugins/outputs.yml | 4 +++- 7 files changed, 18 insertions(+), 41 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index af2c5f0f..03ca6446 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -241,7 +241,6 @@ def __init__( trigger_discrete_lvl: float = 0.99, touchpad_short: TouchpadAction = "disabled", touchpad_right: TouchpadAction = "left_click", - paddles_to_touchpad: bool = False, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -253,7 +252,6 @@ def __init__( self.share_to_qam = share_to_qam self.touchpad_short = touchpad_short self.touchpad_right = touchpad_right - self.paddles_to_touchpad = paddles_to_touchpad self.state = {} self.touchpad_down = time.perf_counter() @@ -307,25 +305,6 @@ def process(self, events: Sequence[Event]): } ) case "button": - if self.paddles_to_touchpad and ev["code"] in ( - "extra_l1", - "extra_r1", - ): - # Position fingers - if ev["value"]: - out.append( - {"type": "axis", "code": "touchpad_y", "value": 0.5} - ) - out.append( - { - "type": "axis", - "code": "touchpad_x", - "value": 0.25 if ev["code"] == "extra_l1" else 0.75, - } - ) - # Stub current event to click - ev["code"] = "touchpad_left" - if self.trigger == "discrete_to_analog" and ev["code"] in ( "lt", "rt", diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index f8b95381..f918e1d6 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -324,6 +324,21 @@ def consume(self, events: Sequence[Event]): case "button": if not self.enable_touchpad and ev["code"].startswith("touchpad"): continue + if not self.edge_mode and (ev["code"] == "extra_l1"): + # Place finger on correct place and click + new_rep[self.ofs + 33] = 0x80 + new_rep[self.ofs + 34] = 0x01 + new_rep[self.ofs + 35] = 0x20 + # Replace code with click + ev = {**ev, "code": "touchpad_left"} + if not self.edge_mode and (ev["code"] == "extra_r1"): + # Place finger on correct place and click + new_rep[self.ofs + 33] = 0x00 + new_rep[self.ofs + 34] = 0x06 + new_rep[self.ofs + 35] = 0x20 + # Replace code with click + ev = {**ev, "code": "touchpad_left"} + if ev["code"] in self.btn_map: set_button(new_rep, self.btn_map[ev["code"]], ev["value"]) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 2ce0c769..70930f0b 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -269,7 +269,6 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): share_to_qam=conf["share_to_qam"].to(bool), touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_right=touch_actions["hold"].to(TouchpadAction), - paddles_to_touchpad=conf["paddles_to_touchpad"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 1510ca97..5cda2a95 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -180,14 +180,6 @@ children: right_click: Right Click default: "left_click" - paddles_to_touchpad: - type: bool - title: Paddles as Touchpad Clicks - hint: >- - Makes the top left paddle click the left side of the touchpad - and the top right paddle the right side, instead of being the back paddles. - Useful with dualsense. - default: False shortcuts: type: bool title: Enable Shortcuts Controller diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 4093867a..93bd88ff 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -198,7 +198,6 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): trigger="analog_to_discrete", dpad="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), - paddles_to_touchpad=conf["paddles_to_touchpad"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 7c51aa93..0b98a378 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -38,15 +38,6 @@ children: tags: [advanced] default: True - paddles_to_touchpad: - type: bool - title: Paddles as Touchpad Clicks - hint: >- - Makes the left paddle click the left side of the touchpad - and the right paddle the right side, instead of being the edge paddles. - Useful with dualsense. - default: False - initialize: type: bool title: Initialize on start diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 4f376cf3..31e29708 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -44,6 +44,7 @@ modes: bluetooth_mode: type: bool title: Bluetooth Mode + tags: [advanced] hint: >- Emulates the controller in bluetooth mode instead of USB mode. This is the default as it causes less issues with how apps @@ -59,5 +60,6 @@ modes: Uses the edge product ID which enables paddle support. The edge controller is a bit obscure, so some games might not support it correctly. - You can disable this to use normal Dualsense (no paddle support). + You can disable this to use normal Dualsense. + The paddles are then remapped to touchpad clicks (left, right). default: True From 67f9a89c7501ab451f0f47a9d8cd3c9fae5ded56 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 14:19:56 +0200 Subject: [PATCH 0197/1497] notify events before saving to reduce delay --- src/hhd/__main__.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 34b8d84d..7551ffa4 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -446,6 +446,11 @@ def main(): update_log_plugins() set_log_plugin("ukwn") + # Notify that events were applied + # Before saving to reduce delay (yaml files take 100ms :( ) + if https: + https.update(settings, conf, profiles, emit) + # # Save loop # @@ -492,10 +497,6 @@ def main(): # We triggered the interrupt, clear should_initialize.clear() - # Notify that events were applied - if https: - https.update(settings, conf, profiles, emit) - upd_stable = conf.get("hhd.version.update_stable", False) upd_beta = conf.get("hhd.version.update_beta", False) upd_decky = conf.get("hhd.version.update_decky", False) From deebd0b0ad18cdc90fa799a2f7a40aba1bb66680 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 14:28:07 +0200 Subject: [PATCH 0198/1497] move remapping f17 f18 to the end --- src/hhd/device/rog_ally/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 9a463919..08c825b3 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -450,11 +450,11 @@ def buf(x): FLUSH_BUFFER, REMAP_VIEW_MENU, FLUSH_BUFFER, - REMAP_M1M2_F17F18, - FLUSH_BUFFER, REMAP_TRIGGERS, FLUSH_BUFFER, *COMMIT_RESET, + REMAP_M1M2_F17F18, + FLUSH_BUFFER, ] COMMANDS_GAME = [ From 5170016f8e183b40280558351196408ad06a3c2d Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 14:35:16 +0200 Subject: [PATCH 0199/1497] out of precaution, switch mode on boot for ally --- src/hhd/device/rog_ally/base.py | 8 +++++--- src/hhd/device/rog_ally/const.py | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 93bd88ff..46768601 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -61,11 +61,11 @@ def open(self) -> Sequence[int]: self.queue: list[tuple[Event, float]] = [] a = super().open() if self.dev: + logger.info(f"Switching Ally Controllers to gamepad mode.") + switch_mode(self.dev, "default") if self.init_controller: logger.info(f"Initializing Ally Controllers.") initialize(self.dev) - logger.info(f"Switching Ally Controllers to gamepad mode.") - switch_mode(self.dev, "default") self.mouse_mode = False return a @@ -134,7 +134,9 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: return out -def plugin_run(conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent): +def plugin_run( + conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent +): while not should_exit.is_set(): try: logger.info("Launching emulated controller.") diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 08c825b3..9a463919 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -450,11 +450,11 @@ def buf(x): FLUSH_BUFFER, REMAP_VIEW_MENU, FLUSH_BUFFER, + REMAP_M1M2_F17F18, + FLUSH_BUFFER, REMAP_TRIGGERS, FLUSH_BUFFER, *COMMIT_RESET, - REMAP_M1M2_F17F18, - FLUSH_BUFFER, ] COMMANDS_GAME = [ From 3724c1c5a2963da6d6129ad8d36d98c16caecbea Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 14:46:19 +0200 Subject: [PATCH 0200/1497] remove flush before reset commit --- src/hhd/device/rog_ally/const.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 9a463919..93565980 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -453,7 +453,6 @@ def buf(x): REMAP_M1M2_F17F18, FLUSH_BUFFER, REMAP_TRIGGERS, - FLUSH_BUFFER, *COMMIT_RESET, ] From 9aaa5d82f81847149714c250b3f95907525e8a3f Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 14:59:18 +0200 Subject: [PATCH 0201/1497] initialize every switch to gamemode --- src/hhd/device/rog_ally/base.py | 6 +++--- src/hhd/device/rog_ally/const.py | 6 +++++- src/hhd/device/rog_ally/hid.py | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 46768601..7a82a5be 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -63,9 +63,9 @@ def open(self) -> Sequence[int]: if self.dev: logger.info(f"Switching Ally Controllers to gamepad mode.") switch_mode(self.dev, "default") - if self.init_controller: - logger.info(f"Initializing Ally Controllers.") - initialize(self.dev) + # if self.init_controller: + # logger.info(f"Initializing Ally Controllers.") + # initialize(self.dev) self.mouse_mode = False return a diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 93565980..3abe77e3 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -459,9 +459,13 @@ def buf(x): COMMANDS_GAME = [ MODE_GAME, FLUSH_BUFFER, + *COMMANDS_INIT, ] -COMMANDS_MOUSE = [MODE_MOUSE, FLUSH_BUFFER] +COMMANDS_MOUSE = [ + MODE_MOUSE, + FLUSH_BUFFER, +] RGB_APPLY = buf([0x5A, 0xB4]) RGB_SET = buf([0x5A, 0xB5]) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 81419bab..59867d04 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -145,7 +145,7 @@ def __call__(self, dev: Device, events: Sequence[Event]): cmds, mode = process_events(events) if not cmds: return - + if mode != self.prev_mode: self.prev_mode = mode # Init on start or when the mode From 9fc889275e071ad320149fda5b1b6d982b649f4d Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 15:05:11 +0200 Subject: [PATCH 0202/1497] add remapping paddles to mouse mode --- src/hhd/device/rog_ally/const.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 3abe77e3..505e56e9 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -465,6 +465,8 @@ def buf(x): COMMANDS_MOUSE = [ MODE_MOUSE, FLUSH_BUFFER, + REMAP_M1M2_F17F18, + FLUSH_BUFFER, ] RGB_APPLY = buf([0x5A, 0xB4]) From 04870aa08bc099ba788a9185ff9f7307db98b508 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 15:09:45 +0200 Subject: [PATCH 0203/1497] rework rog ally commands --- src/hhd/device/rog_ally/base.py | 9 ++------- src/hhd/device/rog_ally/const.py | 13 +++++-------- src/hhd/device/rog_ally/controllers.yml | 9 --------- src/hhd/device/rog_ally/hid.py | 5 ----- 4 files changed, 7 insertions(+), 29 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 7a82a5be..365a7607 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -14,7 +14,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import RgbCallback, switch_mode, initialize +from .hid import RgbCallback, switch_mode ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -53,8 +53,7 @@ class AllyHidraw(GenericGamepadHidraw): - def __init__(self, *args, init_controller: bool = False, **kwargs) -> None: - self.init_controller = init_controller + def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) def open(self) -> Sequence[int]: @@ -63,9 +62,6 @@ def open(self) -> Sequence[int]: if self.dev: logger.info(f"Switching Ally Controllers to gamepad mode.") switch_mode(self.dev, "default") - # if self.init_controller: - # logger.info(f"Initializing Ally Controllers.") - # initialize(self.dev) self.mouse_mode = False return a @@ -183,7 +179,6 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): usage=[0x0080], required=True, callback=RgbCallback(), - init_controller=conf["initialize"].to(bool), ) # Grab shortcut keyboards diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 505e56e9..362e2a2c 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -434,8 +434,9 @@ def buf(x): buf([0x5A, 0xD1, 0x05, 0x04, 0x00, 0x64, 0x00, 0x64]), ] -COMMANDS_INIT = [ - # Reset to defaults +COMMANDS_GAME = [ + MODE_GAME, + FLUSH_BUFFER, REMAP_DPAD_LR, FLUSH_BUFFER, REMAP_DPAD_UD, @@ -456,17 +457,13 @@ def buf(x): *COMMIT_RESET, ] -COMMANDS_GAME = [ - MODE_GAME, - FLUSH_BUFFER, - *COMMANDS_INIT, -] - COMMANDS_MOUSE = [ MODE_MOUSE, FLUSH_BUFFER, + # FIXME: Add mouse init REMAP_M1M2_F17F18, FLUSH_BUFFER, + *COMMIT_RESET, ] RGB_APPLY = buf([0x5A, 0xB4]) diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 0b98a378..afb4059a 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -38,15 +38,6 @@ children: tags: [advanced] default: True - initialize: - type: bool - title: Initialize on start - tags: [advanced] - hint: >- - Initializes the Ally controller on start, resetting bindings etc. - Disable if you adjust them yourself (with Armory Crate, asusctl, etc). - default: True - debug: type: bool title: Debug diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 59867d04..b24a540b 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -164,11 +164,6 @@ def __call__(self, dev: Device, events: Sequence[Event]): dev.write(r) -def initialize(dev: Device): - for cmd in COMMANDS_INIT: - dev.write(cmd) - - def switch_mode(dev: Device, mode: GamepadMode): match mode: case "default": From 4a70b795d52eb14b5c91b10060ac0ffab5f6d6db Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 15:21:49 +0200 Subject: [PATCH 0204/1497] read mouse commands --- src/hhd/device/rog_ally/const.py | 381 ++++++++++++++++++++++++++++++- 1 file changed, 379 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 362e2a2c..6a2d0018 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -460,9 +460,386 @@ def buf(x): COMMANDS_MOUSE = [ MODE_MOUSE, FLUSH_BUFFER, - # FIXME: Add mouse init - REMAP_M1M2_F17F18, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x01, + 0x2C, + 0x02, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x8C, + 0x88, + 0x76, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x02, + 0x2C, + 0x02, + 0x00, + 0x9A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x23, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x9B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x0D, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x03, + 0x2C, + 0x02, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x01, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x04, + 0x2C, + 0x02, + 0x00, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x01, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x05, + 0x2C, + 0x02, + 0x00, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x31, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x06, + 0x2C, + 0x02, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x82, + 0x4D, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x1E, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x07, + 0x2C, + 0x01, + 0x11, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x12, + ] + ), + FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x30, + ] + ), FLUSH_BUFFER, + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x09, + 0x2C, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x88, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + ] + ), *COMMIT_RESET, ] From e4d72beaad78ec83b45cc4f6638e2ebb8fa330b3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 15:23:58 +0200 Subject: [PATCH 0205/1497] rename mouse m1m2 command --- src/hhd/device/rog_ally/const.py | 72 ++++++++++++++++---------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 6a2d0018..e1824f18 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -423,7 +423,42 @@ def buf(x): 0x0E, ] ) - +REMAP_M1M2_F17F18_MOUSE = ( + buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x30, + ] + ), +) FLUSH_BUFFER = buf([0x5A, 0xD1, 0x0A, 0x01]) @@ -769,40 +804,7 @@ def buf(x): ] ), FLUSH_BUFFER, - buf( - [ - 0x5A, - 0xD1, - 0x02, - 0x08, - 0x2C, - 0x02, - 0x00, - 0x28, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x30, - ] - ), + REMAP_M1M2_F17F18_MOUSE, FLUSH_BUFFER, buf( [ From 59d966c14f67540225697fa93dfb364afed989c5 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 15:24:17 +0200 Subject: [PATCH 0206/1497] add comment --- src/hhd/device/rog_ally/const.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index e1824f18..6dceb197 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -423,6 +423,8 @@ def buf(x): 0x0E, ] ) + +# Not verified this is the case REMAP_M1M2_F17F18_MOUSE = ( buf( [ From 3686a596f39f87ac6180d2d36031d07d061ef044 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 15:26:59 +0200 Subject: [PATCH 0207/1497] fix invalid report --- src/hhd/device/rog_ally/hid.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index b24a540b..88a1b545 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -7,7 +7,6 @@ from .const import ( COMMANDS_GAME, - COMMANDS_INIT, COMMANDS_MOUSE, RGB_APPLY, RGB_BRIGHTNESS_MAX, From 1e7c4789795bccbec88129932f0f5ffc3f8a85be Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 17:58:22 +0200 Subject: [PATCH 0208/1497] fix trailing comma --- src/hhd/device/rog_ally/const.py | 68 ++++++++++++++++---------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 6dceb197..1063608a 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -425,41 +425,39 @@ def buf(x): ) # Not verified this is the case -REMAP_M1M2_F17F18_MOUSE = ( - buf( - [ - 0x5A, - 0xD1, - 0x02, - 0x08, - 0x2C, - 0x02, - 0x00, - 0x28, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x02, - 0x00, - 0x30, - ] - ), +REMAP_M1M2_F17F18_MOUSE = buf( + [ + 0x5A, + 0xD1, + 0x02, + 0x08, + 0x2C, + 0x02, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x30, + ] ) FLUSH_BUFFER = buf([0x5A, 0xD1, 0x0A, 0x01]) From a6c15f64061254c13fc696a83d744683d20cbb70 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 18:00:34 +0200 Subject: [PATCH 0209/1497] tweak mac address to be hhd specific --- src/hhd/controller/virtual/dualsense/const.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index a4abbae7..3a122c26 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -126,9 +126,9 @@ def prefill_ds5_report(bluetooth: bool): "rs_y": AM(((ofs + 3) << 3), "m8"), "rt": AM(((ofs + 4) << 3), "u8"), "lt": AM(((ofs + 5) << 3), "u8"), - "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20*180/3.14), - "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20*180/3.14), - "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20*180/3.14), + "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20 * 180 / 3.14), + "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20 * 180 / 3.14), + "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20 * 180 / 3.14), "accel_x": AM(((ofs + 21) << 3), "i16", scale=10000), "accel_y": AM(((ofs + 23) << 3), "i16", scale=10000), "accel_z": AM(((ofs + 25) << 3), "i16", scale=10000), @@ -992,7 +992,7 @@ def prefill_ds5_report(bluetooth: bool): ] ) -DS5_EDGE_MAC_ADDR = [0x74, 0xE7, 0xD6, 0x3A, 0x47, 0xE8] +DS5_EDGE_MAC_ADDR = [0x74, 0xE7, 0xD6, 0x3A, 0x53, 0x35] # 0x47, 0xE8] DS5_EDGE_STOCK_REPORTS = { 0x09: bytes( # Pairing [ From c8ada4b404fe3498c6690a9b9180cba38a894d69 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 19:19:33 +0200 Subject: [PATCH 0210/1497] patch rumble --- src/hhd/controller/virtual/dualsense/__init__.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index f918e1d6..6e6decb2 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -166,7 +166,6 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: continue rep = ev["data"] - # flag2 = rep... if self.use_bluetooth: # skip seq_tag, tag sent by bluetooth report # rest is the same @@ -183,6 +182,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: flag0 = rep[1] flag1 = rep[2] + flag2 = rep[39] if self.enable_rgb and ( flag1 & 4 ): # DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE @@ -235,7 +235,14 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # ) # pass - if flag0 & 0x02: + # Rumble + # Flag 1 + # Death stranding uses 0x40 to turn on vibration + # SDL uses 0x02 to disable audio haptics + # old version used flag0 & 0x02 + # Initial compatibility rumble is flag0 0x01 + # Improved is flag2 0x04 + if flag0 & 0x01 or flag2 & 0x04: right = rep[3] left = rep[4] From d55dbe4c5ed5c75b8dcd54f3daa83ce63229053f Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 21:14:21 +0200 Subject: [PATCH 0211/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6c3fef0d..d43dc8c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.1" +version = "1.0.2" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From c782bfa46c62cdec7d579ac78094045b72927d26 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 6 Jan 2024 11:38:16 -0800 Subject: [PATCH 0212/1497] Add hhd.spec file for RPM packaging --- hhd.spec | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 hhd.spec diff --git a/hhd.spec b/hhd.spec new file mode 100644 index 00000000..dde878a6 --- /dev/null +++ b/hhd.spec @@ -0,0 +1,45 @@ +Name: hhd +Version: 1.0.1 +Release: 1%{?dist} +Summary: Handheld Daemon, a tool for configuring handheld devices. + +License: MIT +URL: https://github.com/hhd-dev/hhd +Source: https://pypi.python.org/packages/source/h/%{name}/%{name}-%{version}.tar.gz + +BuildArch: noarch +BuildRequires: systemd-rpm-macros +BuildRequires: python3-devel +BuildRequires: python3-build +BuildRequires: python3-installer +BuildRequires: python3-setuptools +BuildRequires: python3-wheel + +Requires: python3 +Requires: python3-evdev +Requires: python3-rich +Requires: python3-yaml + +%description +Handheld Daemon is a project that aims to provide utilities for managing handheld devices. With features ranging from TDP controls, to controller remappings, and gamescope session management. This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will expose the settings of the plugins in a UI agnostic way. + +%prep +%autosetup -n %{name}-%{version} + +%build +%{python3} -m build --wheel --no-isolation + +%install +%{python3} -m installer --destdir="%{buildroot}" dist/*.whl +mkdir -p %{buildroot}%{_udevrulesdir} +install -m644 usr/lib/udev/rules.d/83-%{name}.rules %{buildroot}%{_udevrulesdir}/83-%{name}.rules +mkdir -p %{buildroot}%{_unitdir} +install -m644 usr/lib/systemd/system/%{name}@.service %{buildroot}%{_unitdir}/%{name}@.service + +%files +%doc readme.md +%license LICENSE +%{_bindir}/%{name}* +%{python3_sitelib}/%{name}* +%{_udevrulesdir}/83-%{name}.rules +%{_unitdir}/%{name}@.service From 48d7b6e1bc986ecfad2a40b95ff5ed6265e36854 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 6 Jan 2024 12:07:42 -0800 Subject: [PATCH 0213/1497] Update to 1.0.2 --- hhd.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hhd.spec b/hhd.spec index dde878a6..e67f1a10 100644 --- a/hhd.spec +++ b/hhd.spec @@ -1,5 +1,5 @@ Name: hhd -Version: 1.0.1 +Version: 1.0.2 Release: 1%{?dist} Summary: Handheld Daemon, a tool for configuring handheld devices. From 2d9e6694361aa7982b09361ad09fdbb43a402d50 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 22:28:20 +0200 Subject: [PATCH 0214/1497] never cache reports to avoid errors with disabled gyros --- src/hhd/controller/virtual/dualsense/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 6e6decb2..bade6d50 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -391,9 +391,9 @@ def consume(self, events: Sequence[Event]): ) # Cache - if new_rep == self.report and not self.fake_timestamps: - return - self.report = new_rep + # if new_rep == self.report and not self.fake_timestamps: + # return + # self.report = new_rep if self.fake_timestamps: new_rep[self.ofs + 27 : self.ofs + 31] = int( From e953d30c25020ca81116522221a05febd33e7947 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 6 Jan 2024 22:29:37 +0200 Subject: [PATCH 0215/1497] undo small change --- src/hhd/controller/virtual/dualsense/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index bade6d50..92bdb1b1 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -391,9 +391,11 @@ def consume(self, events: Sequence[Event]): ) # Cache + # Caching can cause issues since receivers expect reports + # at least a couple of times per second # if new_rep == self.report and not self.fake_timestamps: # return - # self.report = new_rep + self.report = new_rep if self.fake_timestamps: new_rep[self.ofs + 27 : self.ofs + 31] = int( From 5ef267e6fe24e0ece84e4d2f3e1c783f71b3d566 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:12:44 +0200 Subject: [PATCH 0216/1497] modify spec to template version --- hhd.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hhd.spec b/hhd.spec index e67f1a10..4cc3745c 100644 --- a/hhd.spec +++ b/hhd.spec @@ -1,5 +1,5 @@ Name: hhd -Version: 1.0.2 +Version: REPLACE_VERSION Release: 1%{?dist} Summary: Handheld Daemon, a tool for configuring handheld devices. From 465cf5191b33948a268f3048d34ec1be789fdcfb Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:25:28 +0200 Subject: [PATCH 0217/1497] add copr deploy action --- .github/workflows/package-publish.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index 93cb7b38..728ba4c8 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -53,3 +53,21 @@ jobs: commit_message: update to '${{ github.event.release.name }}' allow_empty_commits: false ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 + + deploy_copr: + runs-on: ubuntu-latest + environment: prod + needs: deploy_pypi + + steps: + - uses: actions/checkout@v3 + - name: Create spec file dir + run: mkdir -p ./pkg/ + - name: Build spec file + run: sed "s/REPLACE_VERSION/$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" hhd.spec > ./pkg/hhd.spec + - name: Publish to COPR repo + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.COPR_TOKEN }} + repository: hhd-dev/hhd-copr + directory: ./pkg From 8cb12750d8dcd2716953a5319b9d927f913c4bde Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:30:15 +0200 Subject: [PATCH 0218/1497] switch to ssh --- .github/workflows/package-publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index 728ba4c8..6fd5559b 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -71,3 +71,4 @@ jobs: github_token: ${{ secrets.COPR_TOKEN }} repository: hhd-dev/hhd-copr directory: ./pkg + ssh: true \ No newline at end of file From 6a3d644fd63badeb561e1a68b916441125e27f68 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:42:32 +0200 Subject: [PATCH 0219/1497] add separate copr action --- .github/workflows/package-publish.yml | 2 +- .github/workflows/publish-copr.yml | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/publish-copr.yml diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index 6fd5559b..e5ee1c87 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -1,4 +1,4 @@ -name: Upload to PYPI, AUR +name: Upload to PYPI, AUR, COPR on: workflow_dispatch: diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml new file mode 100644 index 00000000..8374e424 --- /dev/null +++ b/.github/workflows/publish-copr.yml @@ -0,0 +1,23 @@ +name: Push to COPR + +permissions: + contents: read + +jobs: + deploy_copr: + runs-on: ubuntu-latest + environment: prod + + steps: + - uses: actions/checkout@v3 + - name: Create spec file dir + run: mkdir -p ./pkg/ + - name: Build spec file + run: sed "s/REPLACE_VERSION/$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" hhd.spec > ./pkg/hhd.spec + - name: Publish to COPR repo + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.COPR_TOKEN }} + repository: hhd-dev/hhd-copr + directory: ./pkg + ssh: true From 77c58047a9303d70579a026641264584f791b413 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:44:12 +0200 Subject: [PATCH 0220/1497] add on workflow dispatch for copr --- .github/workflows/publish-copr.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml index 8374e424..9bccdebb 100644 --- a/.github/workflows/publish-copr.yml +++ b/.github/workflows/publish-copr.yml @@ -1,5 +1,8 @@ name: Push to COPR +on: + workflow_dispatch: + permissions: contents: read From dcf865ca14411fab198ce5832ba35c5b6df053bc Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:53:09 +0200 Subject: [PATCH 0221/1497] use ssh key tag --- .github/workflows/publish-copr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml index 9bccdebb..8ec9a787 100644 --- a/.github/workflows/publish-copr.yml +++ b/.github/workflows/publish-copr.yml @@ -20,7 +20,7 @@ jobs: - name: Publish to COPR repo uses: ad-m/github-push-action@master with: - github_token: ${{ secrets.COPR_TOKEN }} + ssh-key: ${{ secrets.COPR_TOKEN }} repository: hhd-dev/hhd-copr directory: ./pkg ssh: true From bb136e185f13c273d2204534d0acb9724eada23f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 02:57:38 +0200 Subject: [PATCH 0222/1497] switch to token --- .github/workflows/publish-copr.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml index 8ec9a787..7e279265 100644 --- a/.github/workflows/publish-copr.yml +++ b/.github/workflows/publish-copr.yml @@ -20,7 +20,6 @@ jobs: - name: Publish to COPR repo uses: ad-m/github-push-action@master with: - ssh-key: ${{ secrets.COPR_TOKEN }} + github_token: ${{ secrets.COPR_TOKEN }} repository: hhd-dev/hhd-copr directory: ./pkg - ssh: true From d4e6a265797170c1f8c073f0871c643fbacbf281 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:22:12 +0200 Subject: [PATCH 0223/1497] remove content read perm --- .github/workflows/publish-copr.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml index 7e279265..d319d160 100644 --- a/.github/workflows/publish-copr.yml +++ b/.github/workflows/publish-copr.yml @@ -3,9 +3,6 @@ name: Push to COPR on: workflow_dispatch: -permissions: - contents: read - jobs: deploy_copr: runs-on: ubuntu-latest From a51ec3ced67db27d12f2c513679466d51fc69e68 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:30:34 +0200 Subject: [PATCH 0224/1497] change action --- .github/workflows/publish-copr.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml index d319d160..ba310334 100644 --- a/.github/workflows/publish-copr.yml +++ b/.github/workflows/publish-copr.yml @@ -1,4 +1,4 @@ -name: Push to COPR +name: Publish to COPR on: workflow_dispatch: @@ -15,8 +15,10 @@ jobs: - name: Build spec file run: sed "s/REPLACE_VERSION/$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" hhd.spec > ./pkg/hhd.spec - name: Publish to COPR repo - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.COPR_TOKEN }} - repository: hhd-dev/hhd-copr - directory: ./pkg + uses: s0/git-publish-subdir-action@develop + env: + REPO: git@github.com:hhd-dev/hhd-copr.git + BRANCH: main + FOLDER: pkg + SSH_PRIVATE_KEY: ${{ secrets.COPR_SSH_PRIVATE_KEY }} + MESSAGE: update to '${{ github.event.release.name }}' From 73bd22b6854cf2cce094d9d344b5d581fd5b1fa8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:37:20 +0200 Subject: [PATCH 0225/1497] make copr not delete files --- .github/workflows/publish-copr.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish-copr.yml b/.github/workflows/publish-copr.yml index ba310334..73c84e9f 100644 --- a/.github/workflows/publish-copr.yml +++ b/.github/workflows/publish-copr.yml @@ -22,3 +22,6 @@ jobs: FOLDER: pkg SSH_PRIVATE_KEY: ${{ secrets.COPR_SSH_PRIVATE_KEY }} MESSAGE: update to '${{ github.event.release.name }}' + SKIP_EMPTY_COMMITS: true + # Do not clear any files + CLEAR_GLOBS_FILE: .github/workflows/copr_glob.txt From 1c1bd42a57fffbc8ccd1270bc458dd473774f734 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:37:40 +0200 Subject: [PATCH 0226/1497] add independent actions for other releases --- .github/workflows/copr_glob.txt | 0 .github/workflows/publish-aur.yml | 30 ++++++++++++++++++++++++++++++ .github/workflows/publish-pipy.yml | 30 ++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 .github/workflows/copr_glob.txt create mode 100644 .github/workflows/publish-aur.yml create mode 100644 .github/workflows/publish-pipy.yml diff --git a/.github/workflows/copr_glob.txt b/.github/workflows/copr_glob.txt new file mode 100644 index 00000000..e69de29b diff --git a/.github/workflows/publish-aur.yml b/.github/workflows/publish-aur.yml new file mode 100644 index 00000000..8adaa13c --- /dev/null +++ b/.github/workflows/publish-aur.yml @@ -0,0 +1,30 @@ +name: Publish to AUR + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + deploy_aur: + runs-on: ubuntu-latest + environment: prod + + steps: + - uses: actions/checkout@v3 + - name: Create PKGBUILD dir + run: mkdir -p ./pkg/ + - name: Build PKGBUILD + run: sed "s/pkgver=VERSION/pkgver=$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" PKGBUILD > ./pkg/PKGBUILD + - name: Publish AUR package + uses: KSXGitHub/github-actions-deploy-aur@v2.7.0 + with: + pkgname: hhd + pkgbuild: ./pkg/PKGBUILD + commit_username: ${{ secrets.AUR_USERNAME }} + commit_email: ${{ secrets.AUR_EMAIL }} + ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} + commit_message: update to '${{ github.event.release.name }}' + allow_empty_commits: false + ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 diff --git a/.github/workflows/publish-pipy.yml b/.github/workflows/publish-pipy.yml new file mode 100644 index 00000000..0832942e --- /dev/null +++ b/.github/workflows/publish-pipy.yml @@ -0,0 +1,30 @@ +name: Publish to PiPy + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + deploy_aur: + runs-on: ubuntu-latest + environment: prod + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install build + - name: Build package + run: python -m build -s + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} From ce8016563f053b59a1c4a74952a90357d29a004d Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:40:25 +0200 Subject: [PATCH 0227/1497] update copr on auto publish action --- .github/workflows/package-publish.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index e5ee1c87..7ba6ecff 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -1,4 +1,4 @@ -name: Upload to PYPI, AUR, COPR +name: Publish to PyPi, AUR, COPR on: workflow_dispatch: @@ -57,7 +57,6 @@ jobs: deploy_copr: runs-on: ubuntu-latest environment: prod - needs: deploy_pypi steps: - uses: actions/checkout@v3 @@ -66,9 +65,13 @@ jobs: - name: Build spec file run: sed "s/REPLACE_VERSION/$(cat pyproject.toml | grep -E 'version = "[0-9\.]+"' -o | grep -E "[0-9\.]+" -o)/" hhd.spec > ./pkg/hhd.spec - name: Publish to COPR repo - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.COPR_TOKEN }} - repository: hhd-dev/hhd-copr - directory: ./pkg - ssh: true \ No newline at end of file + uses: s0/git-publish-subdir-action@develop + env: + REPO: git@github.com:hhd-dev/hhd-copr.git + BRANCH: main + FOLDER: pkg + SSH_PRIVATE_KEY: ${{ secrets.COPR_SSH_PRIVATE_KEY }} + MESSAGE: update to '${{ github.event.release.name }}' + SKIP_EMPTY_COMMITS: true + # Do not clear any files + CLEAR_GLOBS_FILE: .github/workflows/copr_glob.txt From bf9ad75f41f9ae2cbdd1a3439fcb54baac104ed3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:41:00 +0200 Subject: [PATCH 0228/1497] bump version for testing --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d43dc8c4..715a6f16 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.2" +version = "1.0.3" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 439e083f51787ab6dc095858b4c37d7b43228a91 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 03:51:42 +0200 Subject: [PATCH 0229/1497] fix needs dependency --- .github/workflows/package-publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index 7ba6ecff..e304cd71 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -57,6 +57,7 @@ jobs: deploy_copr: runs-on: ubuntu-latest environment: prod + needs: deploy_pypi steps: - uses: actions/checkout@v3 From 78c36b6e47bd97ca5d986418f4c668169632ba64 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 04:05:19 +0200 Subject: [PATCH 0230/1497] add sleep and chain differently --- .github/workflows/package-publish.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index e304cd71..b49e8e3f 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -37,6 +37,9 @@ jobs: needs: deploy_pypi steps: + - name: Sleep for 15 minutes + run: sleep 900s + shell: bash - uses: actions/checkout@v3 - name: Create PKGBUILD dir run: mkdir -p ./pkg/ @@ -57,7 +60,7 @@ jobs: deploy_copr: runs-on: ubuntu-latest environment: prod - needs: deploy_pypi + needs: deploy_aur steps: - uses: actions/checkout@v3 From dc81f94b312f8d046ce026571b9754f2ae6f9c06 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 04:12:50 +0200 Subject: [PATCH 0231/1497] move the waiting to the publish action --- .github/workflows/package-publish.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index b49e8e3f..717ea0a3 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -30,6 +30,9 @@ jobs: with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} + - name: Sleep for 15 minutes + run: sleep 900s + shell: bash deploy_aur: runs-on: ubuntu-latest @@ -37,9 +40,6 @@ jobs: needs: deploy_pypi steps: - - name: Sleep for 15 minutes - run: sleep 900s - shell: bash - uses: actions/checkout@v3 - name: Create PKGBUILD dir run: mkdir -p ./pkg/ @@ -60,7 +60,7 @@ jobs: deploy_copr: runs-on: ubuntu-latest environment: prod - needs: deploy_aur + needs: deploy_pypi steps: - uses: actions/checkout@v3 From 75cd87800d7f4ace6afa862ae9943af36002ffeb Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 05:11:04 +0200 Subject: [PATCH 0232/1497] optimize legion go rgb speed --- src/hhd/device/legion_go/base.py | 4 +-- src/hhd/device/legion_go/hid.py | 57 ++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 70930f0b..faa7d0da 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -26,7 +26,7 @@ LGO_TOUCHPAD_BUTTON_MAP, ) from .gyro_fix import GyroFixer -from .hid import rgb_callback +from .hid import RgbCallback ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -230,7 +230,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): axis_map=LGO_RAW_INTERFACE_AXIS_MAP, btn_map=LGO_RAW_INTERFACE_BTN_MAP, config_map=LGO_RAW_INTERFACE_CONFIG_MAP, - callback=rgb_callback, + callback=RgbCallback(), required=True, ) ) diff --git a/src/hhd/device/legion_go/hid.py b/src/hhd/device/legion_go/hid.py index 65f7ef6a..85fce925 100644 --- a/src/hhd/device/legion_go/hid.py +++ b/src/hhd/device/legion_go/hid.py @@ -110,10 +110,17 @@ def rgb_multi_load_settings( blue: int, brightness: float = 1, speed: float = 1, + init: bool = True, ): - return [ + base = [ rgb_set_profile("right", profile, mode, red, green, blue, brightness, speed), rgb_set_profile("left", profile, mode, red, green, blue, brightness, speed), + ] + if not init: + return base + + return [ + *base, rgb_load_profile("left", profile), rgb_load_profile("right", profile), rgb_enable("left", True), @@ -128,23 +135,32 @@ def rgb_multi_disable(): ] -def rgb_callback(dev: Device, events: Sequence[Event]): - for ev in events: - if ev["type"] == "led": - if ev["mode"] == "disable": - reps = rgb_multi_disable() - else: - match ev["mode"]: - case "blinking": - mode = "pulse" - case "rainbow": - mode = "dynamic" - case "solid": - mode = "solid" - case "spiral": - mode = "spiral" - case _: - assert False, f"Mode '{ev['mode']}' not supported." +class RgbCallback: + def __init__(self) -> None: + self.prev_mode = None + + def __call__(self, dev: Device, events: Sequence[Event]): + for ev in events: + if ev["type"] != "led": + continue + + reps = None + mode = None + match ev["mode"]: + case "disable": + pass + case "blinking": + mode = "pulse" + case "rainbow": + mode = "dynamic" + case "solid": + mode = "solid" + case "spiral": + mode = "spiral" + case _: + pass + + if mode: reps = rgb_multi_load_settings( mode, 0x03, @@ -153,7 +169,12 @@ def rgb_callback(dev: Device, events: Sequence[Event]): ev["blue"], ev["brightness"], ev["speed"], + self.prev_mode != mode, ) + # Only init sparingly, to speed up execution + self.prev_mode = mode + else: + reps = rgb_multi_disable() for r in reps: dev.write(r) From 190625662df6b1ef19043e8552d5c45dc661c6d5 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 12:37:57 +0200 Subject: [PATCH 0233/1497] reorder output settings --- src/hhd/plugins/outputs.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 31e29708..9d4b5427 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -15,7 +15,7 @@ modes: uinput: type: container tags: [lgc_emulation_uinput, uinput] - title: Virtual Controller + title: Gamepad hint: >- Creates a virtual `Handheld Daemon Controller` that can be used normally in apps. Back buttons are supported but steam will not detect them. @@ -33,12 +33,15 @@ modes: variants. children: - led_support: + edge_mode: type: bool - title: LED Support + title: Edge Mode hint: >- - Passes through the LEDs to the controller, which allows games - to control them. + Uses the edge product ID which enables paddle support. + The edge controller is a bit obscure, so some games might not + support it correctly. + You can disable this to use normal Dualsense. + The paddles are then remapped to touchpad clicks (left, right). default: True bluetooth_mode: @@ -53,13 +56,10 @@ modes: Test and report back! default: True - edge_mode: + led_support: type: bool - title: Edge Mode + title: LED Support hint: >- - Uses the edge product ID which enables paddle support. - The edge controller is a bit obscure, so some games might not - support it correctly. - You can disable this to use normal Dualsense. - The paddles are then remapped to touchpad clicks (left, right). + Passes through the LEDs to the controller, which allows games + to control them. default: True From 33ed61ebb8b4009e67425dd223e4e33d2902700d Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 12:40:43 +0200 Subject: [PATCH 0234/1497] disable disabling controllers for rog --- src/hhd/device/rog_ally/__init__.py | 2 +- src/hhd/plugins/outputs.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/__init__.py b/src/hhd/device/rog_ally/__init__.py index 9ddbb9fc..3d98794d 100644 --- a/src/hhd/device/rog_ally/__init__.py +++ b/src/hhd/device/rog_ally/__init__.py @@ -36,7 +36,7 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"rog_ally": load_relative_yaml("controllers.yml")}} base["controllers"]["rog_ally"]["children"]["controller_mode"].update( - get_outputs_config() + get_outputs_config(can_disable=False) ) return base diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 8e6dccd2..5a82658d 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -85,5 +85,8 @@ def get_outputs( ) -def get_outputs_config(): - return load_relative_yaml("outputs.yml") +def get_outputs_config(can_disable: bool = False): + s = load_relative_yaml("outputs.yml") + if can_disable: + del s['modes']['disabled'] + return s From 4fbd24a657601086ec83748c3e1afd356e1cb2df Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 12:46:54 +0200 Subject: [PATCH 0235/1497] flip can disable --- src/hhd/plugins/outputs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 5a82658d..07c45f09 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -87,6 +87,6 @@ def get_outputs( def get_outputs_config(can_disable: bool = False): s = load_relative_yaml("outputs.yml") - if can_disable: + if not can_disable: del s['modes']['disabled'] return s From efb69c57441a2c3f23a55d2fad53b64bcdb7b9ba Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 16:28:22 +0200 Subject: [PATCH 0236/1497] add led brightness option --- src/hhd/device/rog_ally/base.py | 4 ++-- src/hhd/device/rog_ally/const.py | 2 -- src/hhd/device/rog_ally/controllers.yml | 14 ++++++++++++++ src/hhd/device/rog_ally/hid.py | 20 +++++++++++++++++--- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 365a7607..9538859e 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -14,7 +14,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .hid import RgbCallback, switch_mode +from .hid import RgbCallback, switch_mode, Brightness ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -178,7 +178,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): usage_page=[0xFF31], usage=[0x0080], required=True, - callback=RgbCallback(), + callback=RgbCallback(conf["led_brightness"].to(Brightness)), ) # Grab shortcut keyboards diff --git a/src/hhd/device/rog_ally/const.py b/src/hhd/device/rog_ally/const.py index 1063608a..afab6fd7 100644 --- a/src/hhd/device/rog_ally/const.py +++ b/src/hhd/device/rog_ally/const.py @@ -868,5 +868,3 @@ def buf(x): 0x2E, ] ) - -RGB_BRIGHTNESS_MAX = buf([0x5A, 0xBA, 0xC5, 0xC4, 0x03]) diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index afb4059a..145223f8 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -31,6 +31,20 @@ children: Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. options: [100, 200, 400, 800, 1600] default: 400 + + led_brightness: + type: multiple + title: Led Brightness + hint: >- + When LEDs are configured, set their brightness. + High does not work below 30% brightness. + options: + off: "Off" + low: "Low" + medium: "Medium" + high: "High (!!)" + default: medium + share_to_qam: type: bool diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 88a1b545..8adce4a2 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -9,7 +9,6 @@ COMMANDS_GAME, COMMANDS_MOUSE, RGB_APPLY, - RGB_BRIGHTNESS_MAX, RGB_INIT_1, RGB_INIT_2, RGB_SET, @@ -19,10 +18,24 @@ Zone = Literal["all", "left_left", "left_right", "right_left", "right_right"] RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] GamepadMode = Literal["default", "mouse", "macro"] +Brightness = Literal["off", "low", "medium", "high"] logger = logging.getLogger(__name__) +def rgb_set_brightness(brightness: Brightness): + match brightness: + case "high": + c = 0x03 + case "medium": + c = 0x02 + case "low": + c = 0x01 + case _: + c = 0x00 + return buf([0x5A, 0xBA, 0xC5, 0xC4, c]) + + def rgb_command(zone: Zone, mode: RgbMode, red: int, green: int, blue: int): match mode: case "solid": @@ -137,8 +150,9 @@ def process_events(events: Sequence[Event]): class RgbCallback: - def __init__(self) -> None: + def __init__(self, brightness: Brightness) -> None: self.prev_mode = None + self.brightness: Brightness = brightness def __call__(self, dev: Device, events: Sequence[Event]): cmds, mode = process_events(events) @@ -152,7 +166,7 @@ def __call__(self, dev: Device, events: Sequence[Event]): cmds = [ RGB_INIT_1, RGB_INIT_2, - RGB_BRIGHTNESS_MAX, + rgb_set_brightness(self.brightness), *cmds, RGB_APPLY, RGB_SET, From 89cbca1ef9de7544087afa47414221fcc9921faf Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 16:56:18 +0200 Subject: [PATCH 0237/1497] add hold select to reboot option --- src/hhd/controller/base.py | 56 +++++++++++++++++++++++- src/hhd/device/legion_go/base.py | 1 + src/hhd/device/legion_go/controllers.yml | 6 +++ src/hhd/device/rog_ally/base.py | 1 + src/hhd/device/rog_ally/controllers.yml | 4 ++ 5 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 03ca6446..cd23d339 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -227,6 +227,11 @@ def consume(self, events: Sequence[Event]): class Multiplexer: QAM_DELAY = 0.2 + REBOOT_HOLD = 6 + REBOOT_VIBRATION_STRENGTH = 0.8 + REBOOT_VIBRATION_ON = 0.35 + REBOOT_VIBRATION_OFF = 0.5 + REBOOT_VIBRATION_NUM = 3 def __init__( self, @@ -241,6 +246,7 @@ def __init__( trigger_discrete_lvl: float = 0.99, touchpad_short: TouchpadAction = "disabled", touchpad_right: TouchpadAction = "left_click", + select_reboots: bool = False, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -252,10 +258,12 @@ def __init__( self.share_to_qam = share_to_qam self.touchpad_short = touchpad_short self.touchpad_right = touchpad_right + self.select_reboots = select_reboots self.state = {} self.touchpad_down = time.perf_counter() - self.queue: list[tuple[Event, float]] = [] + self.queue: list[tuple[Event | Literal["reboot"], float]] = [] + self.select_pressed = None assert touchpad is None, "touchpad rewiring not supported yet" @@ -265,7 +273,45 @@ def process(self, events: Sequence[Event]): curr = time.perf_counter() while len(self.queue) and self.queue[0][1] < curr: - out.append(self.queue.pop(0)[0]) + ev = self.queue.pop(0)[0] + if ev == "reboot": + try: + import os + os.system('systemctl reboot') + except Exception as e: + logger.error(f"Rebooting failed with error:\n{type(e)}:{e}") + else: + out.append(ev) + + if self.select_pressed and self.select_pressed + self.REBOOT_HOLD < curr: + self.select_pressed = None + for i in range(self.REBOOT_VIBRATION_NUM): + self.queue.append( + ( + { + "type": "rumble", + "code": "main", + "strong_magnitude": self.REBOOT_VIBRATION_STRENGTH, + "weak_magnitude": self.REBOOT_VIBRATION_STRENGTH, + }, + curr + + i * (self.REBOOT_VIBRATION_ON + self.REBOOT_VIBRATION_OFF), + ) + ) + self.queue.append( + ( + { + "type": "rumble", + "code": "main", + "strong_magnitude": 0, + "weak_magnitude": 0, + }, + curr + + i * (self.REBOOT_VIBRATION_ON + self.REBOOT_VIBRATION_OFF) + + self.REBOOT_VIBRATION_ON, + ) + ) + self.queue.append(("reboot", curr)) for ev in events: match ev["type"]: @@ -339,6 +385,12 @@ def process(self, events: Sequence[Event]): else: ev["code"] = "start" + if self.select_reboots and ev["code"] == "select": + if ev["value"]: + self.select_pressed = curr + else: + self.select_pressed = None + if self.share_to_qam and ev["code"] == "share": if ev["value"]: ev["code"] = "mode" diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index faa7d0da..f8a6ffbc 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -269,6 +269,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): share_to_qam=conf["share_to_qam"].to(bool), touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_right=touch_actions["hold"].to(TouchpadAction), + select_reboots=conf["select_reboots"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 5cda2a95..2d42ff55 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -61,6 +61,12 @@ children: l_is_start: "Left is Start" l_is_select: "Left is Select" default: disabled + + select_reboots: + type: bool + title: Hold Select to Reboot + default: True + share_to_qam: type: bool title: Legion R to QAM diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 9538859e..57f5e6e3 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -195,6 +195,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): trigger="analog_to_discrete", dpad="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), + select_reboots=conf["select_reboots"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 145223f8..b047fdd7 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -45,6 +45,10 @@ children: high: "High (!!)" default: medium + select_reboots: + type: bool + title: Hold Select to Reboot + default: True share_to_qam: type: bool From 1ec3eac4e3978eb79681211941c7d22b8f701b8c Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 17:09:26 +0200 Subject: [PATCH 0238/1497] tweak vibration strength --- src/hhd/controller/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index cd23d339..2229f630 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -228,8 +228,8 @@ def consume(self, events: Sequence[Event]): class Multiplexer: QAM_DELAY = 0.2 REBOOT_HOLD = 6 - REBOOT_VIBRATION_STRENGTH = 0.8 - REBOOT_VIBRATION_ON = 0.35 + REBOOT_VIBRATION_STRENGTH = 0.6 + REBOOT_VIBRATION_ON = 0.3 REBOOT_VIBRATION_OFF = 0.5 REBOOT_VIBRATION_NUM = 3 From c60fea65369bee7f0bc4df0be2a4871e2ef17acb Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 19:36:16 +0200 Subject: [PATCH 0239/1497] allow cancelling reboot --- src/hhd/controller/base.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 2229f630..d6cc01ee 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -227,10 +227,10 @@ def consume(self, events: Sequence[Event]): class Multiplexer: QAM_DELAY = 0.2 - REBOOT_HOLD = 6 + REBOOT_HOLD = 4 REBOOT_VIBRATION_STRENGTH = 0.6 REBOOT_VIBRATION_ON = 0.3 - REBOOT_VIBRATION_OFF = 0.5 + REBOOT_VIBRATION_OFF = 0.8 REBOOT_VIBRATION_NUM = 3 def __init__( @@ -264,6 +264,7 @@ def __init__( self.touchpad_down = time.perf_counter() self.queue: list[tuple[Event | Literal["reboot"], float]] = [] self.select_pressed = None + self.select_is_held = False assert touchpad is None, "touchpad rewiring not supported yet" @@ -275,12 +276,15 @@ def process(self, events: Sequence[Event]): while len(self.queue) and self.queue[0][1] < curr: ev = self.queue.pop(0)[0] if ev == "reboot": - try: - import os - os.system('systemctl reboot') - except Exception as e: - logger.error(f"Rebooting failed with error:\n{type(e)}:{e}") - else: + if self.select_is_held: + try: + import os + + os.system("systemctl reboot") + logger.info("rebooting") + except Exception as e: + logger.error(f"Rebooting failed with error:\n{type(e)}:{e}") + elif self.select_is_held or not ev.get("from_reboot", False): out.append(ev) if self.select_pressed and self.select_pressed + self.REBOOT_HOLD < curr: @@ -293,7 +297,8 @@ def process(self, events: Sequence[Event]): "code": "main", "strong_magnitude": self.REBOOT_VIBRATION_STRENGTH, "weak_magnitude": self.REBOOT_VIBRATION_STRENGTH, - }, + "from_reboot": True, + }, # type: ignore curr + i * (self.REBOOT_VIBRATION_ON + self.REBOOT_VIBRATION_OFF), ) @@ -387,8 +392,10 @@ def process(self, events: Sequence[Event]): if self.select_reboots and ev["code"] == "select": if ev["value"]: + self.select_is_held = True self.select_pressed = curr else: + self.select_is_held = False self.select_pressed = None if self.share_to_qam and ev["code"] == "share": From aa01a377d2e0ac3f75a13fc976b95ea9c5286e4a Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 22:19:08 +0200 Subject: [PATCH 0240/1497] bump version, rename uinput controller --- pyproject.toml | 2 +- src/hhd/plugins/outputs.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 715a6f16..aecf1764 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.3" +version = "1.0.4" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 9d4b5427..28e4ee64 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -15,7 +15,7 @@ modes: uinput: type: container tags: [lgc_emulation_uinput, uinput] - title: Gamepad + title: Xbox hint: >- Creates a virtual `Handheld Daemon Controller` that can be used normally in apps. Back buttons are supported but steam will not detect them. From dd62a1a56869595ab8ee97d2a66b7c3d8fdb1195 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 22:45:15 +0200 Subject: [PATCH 0241/1497] tweak xinput name --- src/hhd/device/legion_go/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 2d42ff55..b4465c9e 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -9,7 +9,7 @@ children: xinput: type: mode tags: [lgc_xinput] - title: X-input Emulation Mode + title: Emulation Mode (X-Input) hint: >- Emulate different controller types when the Legion Controllers are in X-Input mode. From 38cd9675a87d7a65d6d97293846d6a8ab72fd4af Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 7 Jan 2024 22:48:55 +0200 Subject: [PATCH 0242/1497] tweak api setting wording --- src/hhd/settings.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 9cb69e27..aa8595a9 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -45,17 +45,17 @@ http: children: enable: type: bool - title: Enable REST API. + title: Enable the API tags: [advanced] hint: >- - Enables the rest API of Handheld Daemon + Enables the API of Handheld Daemon (required for decky and ui). default: True port: type: int - title: REST API Port + title: API Port tags: [advanced, hhd-port, port, dropdown] hint: >- - Which port should the REST API be on? + Which port should the API be on? min: 1024 max: 49151 default: 5335 From 468d16d62271a9888cc007ff8358703eab9f2ce3 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 00:02:14 +0200 Subject: [PATCH 0243/1497] fix the controller hiding bug --- src/hhd/controller/lib/hide.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/lib/hide.py b/src/hhd/controller/lib/hide.py index 49cf3965..ff8aa281 100644 --- a/src/hhd/controller/lib/hide.py +++ b/src/hhd/controller/lib/hide.py @@ -62,7 +62,7 @@ def hide_gamepad(devpath: str, vid: int, pid: int): SUBSYSTEMS=="input", KERNELS=="{input_dev}", ATTRS{{id/vendor}}=="{vid:04x}", ATTRS{{id/product}}=="{pid:04x}", GOTO="hhd_valid" GOTO="hhd_end" LABEL="hhd_valid" -KERNEL=="js[0-9]*|event[0-9]*", SUBSYSTEM=="input", MODE="000", GROUP="root", RUN+="/bin/chmod 000 /dev/input/%k" +KERNEL=="js[0-9]*|event[0-9]*", SUBSYSTEM=="input", MODE="000", GROUP="root", TAG="", RUN+="/bin/chmod 000 /dev/input/%k" LABEL="hhd_end" """ # , RUN+="/bin/chmod 000 /sys/%p" try: From dfe55d8b4428df13efe7a7e7240885baae12096c Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 00:02:31 +0200 Subject: [PATCH 0244/1497] use dualsense non-edge by default due to not broad compatibility --- src/hhd/plugins/outputs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 28e4ee64..7c56960e 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -42,7 +42,7 @@ modes: support it correctly. You can disable this to use normal Dualsense. The paddles are then remapped to touchpad clicks (left, right). - default: True + default: False bluetooth_mode: type: bool From 3761bb41d126df1436fd2ae7ae1e97955f4d4c31 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 00:03:42 +0200 Subject: [PATCH 0245/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index aecf1764..3e03607f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.4" +version = "1.0.5" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 8eb9e87f0cd1b6b282cae0f0845a10aea7a17b69 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 01:24:48 +0200 Subject: [PATCH 0246/1497] patch leds to always update --- src/hhd/device/legion_go/hid.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/legion_go/hid.py b/src/hhd/device/legion_go/hid.py index 85fce925..00696ad7 100644 --- a/src/hhd/device/legion_go/hid.py +++ b/src/hhd/device/legion_go/hid.py @@ -113,11 +113,13 @@ def rgb_multi_load_settings( init: bool = True, ): base = [ - rgb_set_profile("right", profile, mode, red, green, blue, brightness, speed), rgb_set_profile("left", profile, mode, red, green, blue, brightness, speed), + rgb_set_profile("right", profile, mode, red, green, blue, brightness, speed), ] - if not init: - return base + # Always update + # Old firmware has issues with new way + # if not init: + # return base return [ *base, From d74c36af1b5b9964984684a6a12f16eac44c4c12 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 17:45:22 +0200 Subject: [PATCH 0247/1497] fix api settings not being reflected --- src/hhd/__main__.py | 78 ++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 7551ffa4..55bd55cf 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -345,48 +345,48 @@ def main(): ) cfg_fds.append(fd) - # Initialize http server - http_cfg = conf["hhd.http"] - if http_cfg != prev_http_cfg: - prev_http_cfg = http_cfg - if https: - https.close() - if http_cfg["enable"].to(bool): - from .http import HHDHTTPServer - - port = http_cfg["port"].to(int) - localhost = http_cfg["localhost"].to(bool) - use_token = http_cfg["token"].to(bool) - - # Generate security token - if use_token: - if not os.path.isfile(token_fn): - import hashlib - import random - - token = hashlib.sha256( - str(random.random()).encode() - ).hexdigest()[:12] - with open(token_fn, "w") as f: - os.chmod(token_fn, 0o600) - f.write(token) - fix_perms(token_fn, ctx) - else: - with open(token_fn, "r") as f: - token = f.read().strip() - else: - token = None - - set_log_plugin("rest") - https = HHDHTTPServer(localhost, port, token) - https.update(settings, conf, profiles, emit) - https.open() - update_log_plugins() - set_log_plugin("main") - should_initialize.clear() logger.info(f"Initialization Complete!") + # Initialize http server + http_cfg = conf["hhd.http"] + if http_cfg != prev_http_cfg: + prev_http_cfg = http_cfg + if https: + https.close() + if http_cfg["enable"].to(bool): + from .http import HHDHTTPServer + + port = http_cfg["port"].to(int) + localhost = http_cfg["localhost"].to(bool) + use_token = http_cfg["token"].to(bool) + + # Generate security token + if use_token: + if not os.path.isfile(token_fn): + import hashlib + import random + + token = hashlib.sha256( + str(random.random()).encode() + ).hexdigest()[:12] + with open(token_fn, "w") as f: + os.chmod(token_fn, 0o600) + f.write(token) + fix_perms(token_fn, ctx) + else: + with open(token_fn, "r") as f: + token = f.read().strip() + else: + token = None + + set_log_plugin("rest") + https = HHDHTTPServer(localhost, port, token) + https.update(settings, conf, profiles, emit) + https.open() + update_log_plugins() + set_log_plugin("main") + # # Plugin loop # From 4bdea6682e523d2a2b141eab9f47536aa66edfe5 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 17:45:40 +0200 Subject: [PATCH 0248/1497] add settings version to settings response --- src/hhd/http/api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 6a3e264d..501ba64d 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -112,8 +112,8 @@ def send_json(self, data: Any): self.set_response_ok() self.wfile.write(json.dumps(data).encode()) - def set_response_ok(self): - self.set_response(200, OK_HEADERS) + def set_response_ok(self, extra_headers={}): + self.set_response(200, {**OK_HEADERS, **extra_headers}) def send_not_found(self, error: str): self.set_response(404, ERROR_HEADERS) @@ -241,7 +241,7 @@ def v1_endpoint(self, content: Any | None): case "profile": self.handle_profile(segments[3:], params, content) case "settings": - self.set_response_ok() + self.set_response_ok({"Version": self.conf.get("version", "")}) with self.cond: self.wfile.write(json.dumps(self.settings).encode()) case "state": From 2c8bc653e5faf6e8f79e00edaaa9874354234d57 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 17:59:20 +0200 Subject: [PATCH 0249/1497] separate edge into its own controller --- src/hhd/device/rog_ally/controllers.yml | 2 +- src/hhd/plugins/outputs.py | 17 +++++++++-- src/hhd/plugins/outputs.yml | 40 ++++++++++++++++++------- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index b047fdd7..1ae608c3 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -42,7 +42,7 @@ children: off: "Off" low: "Low" medium: "Medium" - high: "High (!!)" + high: "High" default: medium select_reboots: diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 07c45f09..8ffabd1b 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -32,12 +32,25 @@ def get_outputs( uses_touch = False uses_leds = False match controller: + case "dualsense_edge": + uses_touch = touchpad == "controller" + uses_leds = conf["dualsense_edge.led_support"].to(bool) + d = Dualsense( + touchpad_method=correction, + edge_mode=True, + use_bluetooth=conf["dualsense_edge.bluetooth_mode"].to(bool), + enable_touchpad=uses_touch, + enable_rgb=uses_leds, + fake_timestamps=not motion, + ) + producers.append(d) + consumers.append(d) case "dualsense": uses_touch = touchpad == "controller" uses_leds = conf["dualsense.led_support"].to(bool) d = Dualsense( touchpad_method=correction, - edge_mode=conf["dualsense.edge_mode"].to(bool), + edge_mode=False, use_bluetooth=conf["dualsense.bluetooth_mode"].to(bool), enable_touchpad=uses_touch, enable_rgb=uses_leds, @@ -88,5 +101,5 @@ def get_outputs( def get_outputs_config(can_disable: bool = False): s = load_relative_yaml("outputs.yml") if not can_disable: - del s['modes']['disabled'] + del s["modes"]["disabled"] return s diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 7c56960e..13864e44 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -29,20 +29,18 @@ modes: tags: [lgc_emulation_dualsense, dualsense] title: Dualsense hint: >- - Emulates the expensive Dualsense Sony controller, both Edge and non-edge - variants. + Emulates the Dualsense Sony controller from the Playstation 5. + Since this controller does not have paddles, the paddles are mapped + to left and right touchpad clicks. children: - edge_mode: + led_support: type: bool - title: Edge Mode + title: LED Support hint: >- - Uses the edge product ID which enables paddle support. - The edge controller is a bit obscure, so some games might not - support it correctly. - You can disable this to use normal Dualsense. - The paddles are then remapped to touchpad clicks (left, right). - default: False + Passes through the LEDs to the controller, which allows games + to control them. + default: True bluetooth_mode: type: bool @@ -56,6 +54,16 @@ modes: Test and report back! default: True + dualsense_edge: + type: container + tags: [lgc_emulation_dualsense_edge, dualsense_edge] + title: Dualsense Edge + hint: >- + Emulates the expensive Dualsense Sony controller which enables paddle support. + The edge controller is a bit obscure, so some games might not + support it correctly. + + children: led_support: type: bool title: LED Support @@ -63,3 +71,15 @@ modes: Passes through the LEDs to the controller, which allows games to control them. default: True + + bluetooth_mode: + type: bool + title: Bluetooth Mode + tags: [advanced] + hint: >- + Emulates the controller in bluetooth mode instead of USB mode. + This is the default as it causes less issues with how apps + interact with the controller. + However, using USB mode can improve LED support (?) in some games. + Test and report back! + default: True \ No newline at end of file From a038446d84d8eb50b2448664e0cfdf0e5f4bdce1 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 17:59:51 +0200 Subject: [PATCH 0250/1497] check if dir exists to avoid errors with timer --- src/hhd/controller/physical/imu.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index f073c8d7..69f6071f 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -428,7 +428,8 @@ def open(self): # Create trigger try: - os.makedirs("/config/iio/triggers/hrtimer/hhd", exist_ok=True) + if not os.path.isdir("/config/iio/triggers/hrtimer/hhd"): + os.makedirs("/config/iio/triggers/hrtimer/hhd", exist_ok=True) except Exception as e: logger.error( f"Could not create 'hhd' trigger. IMU will not work. Error:\n{e}" From a3f7efc36d3134a769c86f7d9546a151f7195c39 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 8 Jan 2024 20:58:28 +0200 Subject: [PATCH 0251/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3e03607f..f3d29ba5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.5" +version = "1.0.6" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From a0ca34f252859e94946d54d3e2da2b91fdf10f61 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 16:35:48 +0200 Subject: [PATCH 0252/1497] relax setup tools version requirement --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f3d29ba5..f59b4ecb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,7 +19,7 @@ dependencies = [ "evdev>=1.6.1", "PyYAML>=6.0.1", "rich>=13.5.2", - "setuptools>=65.5.1", + "setuptools>=65.5.0", ] [project.urls] From 3549b763864c22b056aa299f4455c238c0df335d Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 16:35:51 +0200 Subject: [PATCH 0253/1497] update readme --- install.sh | 28 ++++++ readme.md | 253 +++++++++++++++++++++++++++------------------------ uninstall.sh | 28 ++++++ 3 files changed, 190 insertions(+), 119 deletions(-) create mode 100755 install.sh create mode 100755 uninstall.sh diff --git a/install.sh b/install.sh new file mode 100755 index 00000000..66fe8019 --- /dev/null +++ b/install.sh @@ -0,0 +1,28 @@ +#!/usr/bin/bash +# Installs Handheld Daemon to ~/.local/share/hhd + +if [ "$EUID" -eq 0 ] + then echo "You should run this script as your user, not root (sudo)." + exit +fi + +# Install Handheld Daemon to ~/.local/share/hhd +mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd + +python -m venv --system-site-packages venv +source venv/bin/activate +pip install --upgrade hhd + +# Install udev rules and create a service file +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service + +# Start service and reboot +sudo systemctl enable hhd_local@$(whoami) + +echo "" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!! Do not forget to remove HandyGCCS/Handycon if your distro has it. !!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "" +echo "Reboot to start Handheld Daemon!" \ No newline at end of file diff --git a/readme.md b/readme.md index 708db266..dd66b3b2 100644 --- a/readme.md +++ b/readme.md @@ -3,8 +3,11 @@ Handheld Daemon is a project that aims to provide utilities for managing handhel devices. With features ranging from TDP controls, to controller remappings, and gamescope session management. -This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will -expose the settings of the plugins in a UI agnostic way. + +This configuration is exposed through an API, and there is already a Decky +plugin for it ([hhd-decky](https://github.com/hhd-dev/hhd-decky)) and a web +app for it ([hhd.dev](https://hhd.dev)) that also works locally with Electron +([hhd-ui](https://github.com/hhd-dev/hhd-ui)). It is the aim of this project to provide generic hid-based emulators for most mainstream controllers (xbox Elite, DS4, PS5, Joycons), so that users of devices @@ -12,33 +15,33 @@ can pick the best target for their device and its controls, which may change depending on the game. *Current Features (for both ROG Ally and Legion Go)*: -- Fully functional DualSense Edge emulation +- Fully functional DualSense and Dualsense Edge emulation - All buttons supported - Rumble feedback - Touchpad support (Steam Input as well) - LED remapping -- Virtual Input device emulation +- Xbox 360 Style device emulation - No weird glyphs - Gyro and back button support (outside Steam) -- Touchpad Emulation +- Virtual Touchpad Emulation - Fixes left and right clicks within gamescope when using the Legion Go touchpad. - Power Button plugin for Big Picture/Steam Deck Mode - Short press makes Steam backup saves and wink before suspend. - Long press opens Steam power menu. - Hides the original Xbox controller -- HTTP based Configuration - - Allows configuring HHD over Electron/React apps. - - Token-based authentication and limited to localhost. - - Will allow swapping configuration per game. -- Built-in updater (soon to become available from Decky). +- UI based Configuration + - Generic API that can be used from bash scripts (through `curl`) + - Decky Plugin + - Webpac +- Built-in updater. *Planned Features (in this order)*: - Steam Deck controller emulation - No weird glyphs - TDP Plugin - Will provide parity with Legion Space/Armory crate, hardware is already reverse - engineered for the Legion Go + engineered for the Legion Go. - High-end Over/Downclocking Utility for Ryzen processors - By hooking into the manufacturer ACPI API of the Ryzen platform, it will expose all TDP related parameters manufacturers have access to @@ -51,83 +54,59 @@ depending on the game. ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PyPi. -> On boot you might see an xbox controller. There is a bug with hiding the controller -> during the boot process. -> Flicking the fps switch on off on the Go fixes it and the controller is hidden -> until the next reboot. For the ally, you can change a setting in decky. - -### ChimeraOS +> To ensure the gyro of the Legion Go with AMD SFH runs smoothly, +> a udev rule is included that disables the use of the accelerometer by the +> system (e.g., iio-sensor-proxy). +> This limitation will be lifted in the future, if a new driver is written for +> amd-sfh. +> +> If you want display auto rotation to work, use the local steps and +> modify the `83-hhd.rules` file +> to remove the iio udev rule. However, the gyro will not work properly. -ChimeraOS does not ship with `gcc` to compile `hhd` dependencies and the -functionality of `handygccs` which fixes the QAM button by default conflicts -with `hhd`. +### Automatic Local Install +You can use the following bash scripts to install and uninstall Handheld Daemon +(experimental). +Then, update from Decky or the UI. -The easiest way to install is to unlock the filesystem, install `hhd`, and -remove `handygccs`. +> If your distro uses HandyGCCS/Handycon to fix certain key bindings by default +> you need to uninstall it. Disabling it is not enough, since it is autostarted +> by certain sessions (such as `gamescope-session-plus`). +> This includes both ChimeraOS and Nobara (see [Installation Issues](#issues)). ```bash -# Unlock filesystem -sudo frzr-unlock +# Install +curl -L https://github.com/hhd-dev/hhd/raw/main/install.sh | sh -# Run installer -sudo pacman -S base-devel -sudo systemctl disable --now handycon.service -sudo pikaur -R handygccs-git -sudo pikaur -S hhd - -# Enable and reboot -sudo systemctl enable --now hhd@$(whoami) -sudo reboot +# Uninstall +curl -L https://github.com/hhd-dev/hhd/raw/main/uninstall.sh | sh ``` -Then, repeat every time you update Chimera. As a bonus, you will get new HHD -features as well 😊. - -#### Uninstall -Just run the steps in reverse or switch to a locked Chimera version. - +You can also install the Decky plugin. ```bash -sudo systemctl disable hhd@$(whoami) - -sudo pikaur -S handygccs-git -sudo pacman -R hhd - -sudo systemctl enable --now handycon.service -sudo reboot +curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh ``` -### ❄️ NixOS -Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: +Then, reboot and go to [hhd.dev](https://hhd.dev) to configure or read more in +the configuration section. -```nix - inputs = { - nixpkgs.url = "github:appsforartists/nixpkgs/handheld-daemon"; -``` - -and add this line to your `configuration.nix`: -```nix - services.handheldDaemon.enable = true; -``` - -### Local Installation (from PyPi) -You can also install HHD using a local package, which enables auto-updating. -`curl` script coming soon! +### Manual Local Installation +You can also install Handheld Daemon using a local package, which enables auto-updating. +These are the same steps as done in the Automatic Install (also see +[Installation Issues](#issues)). ```bash -# (nobara) Install Python Headers since evdev has no wheels -# and nobara does not ship them (but arch does) -sudo dnf install python-devel -# (Chimera, Arch) In case you dont have gcc. -sudo pacman -S base-devel +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# !!!! Delete HandyGCCS to avoid issues if you have it. !!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # Install Handheld Daemon to ~/.local/share/hhd mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd -python -m venv venv +python -m venv --system-site-packages venv source venv/bin/activate -pip install hhd -# Substitute with the following to pull from here -# (if you are asked by devs; the master branch is not guaranteed to always work) +pip install --upgrade hhd +# Substitute with the following to pull from github (may not always work) # pip install git+https://github.com/hhd-dev/hhd # Install udev rules and create a service file @@ -140,7 +119,9 @@ sudo reboot ``` #### Update Instructions -Of course, you will want to update HHD to catch up to latest features +Of course, you will want to update Handheld Daemon to catch up to latest features. +You can either use the commands below or press `Update (Stable)` in one of the UIs +(which runs these commands). ```bash sudo systemctl stop hhd_local@$(whoami) ~/.local/share/hhd/venv/bin/pip install --upgrade hhd @@ -159,24 +140,78 @@ sudo rm /etc/systemd/system/hhd_local@.service rm -r ~/.config/hhd ``` -> The above should work on read-only filesystem, provided the /etc directory is -> not read-only. +### Common Issues with Install +#### Missing Python Evdev +In case you have installation issues, you might be missing the package `python-evdev`. +You can either install it as part of your distribution (included by Nobara +and ChimeraOS) or automatically through `pip` with the commands above. +However, installing this package through `pip` requires `base-devel` on Arch and +`python-devel` on Nobara. +```bash +# Nobara/Fedora +sudo dnf install python-evdev +# Arch based distros (included by ChimeraOs) +sudo pacman -S python-evdev + +# OR -### Arch-based Installation (AUR) +# (nobara) Install Python Headers since evdev has no wheels +# and nobara does not ship them (but arch does) +sudo dnf install python-devel +# (Chimera, Arch) In case you dont have gcc. +sudo pacman -S base-devel +``` + +#### Having HandyGCCS Installed +If your distro ships with HandyGCCS Handheld Daemon will not work, you have to uninstall it. +```bash +# ChimeraOS +sudo frzr-unlock +sudo systemctl disable --now handycon.service +sudo pacman -R handygccs-git + +# Nobara +sudo systemctl disable --now handycon.service +sudo dnf remove handygccs-git # (verify ?) +``` + +### ❄️ NixOS (experimental) +Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: + +```nix + inputs = { + nixpkgs.url = "github:appsforartists/nixpkgs/handheld-daemon"; +``` + +and add this line to your `configuration.nix`: +```nix + services.handheldDaemon.enable = true; +``` + + +### Distribution Installation (not recommended) +You can install Handheld Daemon from [AUR](https://aur.archlinux.org/packages/hhd) +(Arch) or [COPR](https://copr.fedorainfracloud.org/coprs/hhd-dev/hhd/) (Fedora). +Both update automatically every time there is a new release. + +But, the auto-updater will not work, which is an important feature with devices +without a keyboard... ```bash -# Install using your AUR package manager -sudo pikaur -S hhd -sudo yay -S hhd -sudo pacman -S hhd # Manjaro only +# Arch +yay -S hhd + +# Fedora +sudo dnf copr enable hhd-dev/hhd +sudo dnf install hhd # Enable and reboot sudo systemctl enable hhd@$(whoami) sudo reboot ``` -But I dont want to reboot... +In case you do not want to reboot. ```bash -# Reload HHD's udev rules +# Reload Handheld Daemon's udev rules sudo udevadm control --reload-rules && sudo udevadm trigger # Restart iio-proxy-service to stop it # from polling the accelerometer @@ -185,36 +220,28 @@ sudo systemctl restart iio-sensor-proxy sudo systemctl start hhd@$(whoami) ``` -> To ensure the gyro of the Legion Go and other devices with AMD SFH runs smoothly, -> a udev rule is included that disables the use of the accelerometer by the -> system (e.g., iio-sensor-proxy). -> This limitation will be lifted in the future, if a new driver is written for -> amd-sfh. - -#### Updating/Uninstalling in Arch -HHD will update automatically with your system from then on, or you can update it -manually with your AUR package manager. -To uninstall, just uninstall the package and reboot. - -```bash -# Update using your AUR package manager -sudo pikaur -S hhd -sudo yay -S hhd -sudo pacman -S hhd # manjaro only - -# Remove to uninstall -sudo pacman -R hhd -sudo reboot +## Configuration +### UI Based +Go to [hhd.dev](https://hhd.dev) and enter your device token +(`~/.config/hhd/token`). +That is it! +You can also install the Electron version ([hhd-ui](https://github.com/hhd-dev/hhd-ui)) to use locally. + +### Using Decky +If you have decky installed, you can use the following command to +install the Handheld Daemon decky plugin (visit +[hhd-decky](https://github.com/hhd-dev/hhd-decky) for details). ``` +curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh +``` +Then, just open up steam. -## Configuring HHD - +### File based The reason you added your username to the `hhd` service was to bind the `hhd` daemon to your user. -This allows HHD to add configuration files with appropriate permissions to your -user dir, which is the following: - +This allows Handheld Daemon to add configuration files with appropriate +permissions to your user, in the following directory: ```bash ~/.config/hhd ``` @@ -223,20 +250,8 @@ The global configuration for HHD is found in: ```bash ~/.config/hhd/state.yml ``` -This will allow you to set sticky HHD configuration options, such as emulation -mode. - -Once set, HHD will hot-reload the configurations. - -HHD allows you to create profiles, that set multiple configurations together, -through the profile directory: -```bash -~/.config/hhd/profiles -``` -Right now, these profiles can only be set with the experimental HTTP API, -which will be called through a GUI. -This API is disabled by default in the current version of HHD. +You can modify it and it will hot-reload upon saving. ## Frequently Asked Questions (FAQ) ### What does the current version of HHD do? @@ -295,7 +310,7 @@ You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami) if you are missing the `xpad` rule. ``` - ERROR Device with the following not found: evdev.py:122 + ERROR Device with the following not found: Vendor ID: ['17ef'] Product ID: ['6182'] Name: ['Generic X-Box pad'] diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 00000000..6f55ef29 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,28 @@ +#!/usr/bin/bash +# Removes handheld daemon from ~/.local/share/hhd + +if [ "$EUID" -eq 0 ] + then echo "You should run this script as your user, not root (sudo)." + exit +fi + +# Disable Service +sudo systemctl disable hhd_local@$(whoami) +sudo systemctl stop hhd_local@$(whoami) + +# Remove Binary +rm -rf ~/.local/share/hhd + +# Remove /etc files +sudo rm -f /etc/udev/rules.d/83-hhd.rules +sudo rm -f /etc/systemd/system/hhd_local@.service + +# # Delete your configuration +# rm -rf ~/.config/hhd + +echo "" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!! Do not forget to re-enable HandyGCCS/Handycon if your device relies on it. !!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "" +echo "Handheld Daemon Uninstalled. Reboot!" \ No newline at end of file From 6b1f4c6511d87fec5c1493db9a8a1c6fc73950fe Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 16:45:01 +0200 Subject: [PATCH 0254/1497] update faq + typos --- readme.md | 77 +++++++------------------- usr/lib/udev/rules.d/83-hhd-user.rules | 5 +- 2 files changed, 23 insertions(+), 59 deletions(-) diff --git a/readme.md b/readme.md index dd66b3b2..0c90d562 100644 --- a/readme.md +++ b/readme.md @@ -195,7 +195,7 @@ You can install Handheld Daemon from [AUR](https://aur.archlinux.org/packages/hh Both update automatically every time there is a new release. But, the auto-updater will not work, which is an important feature with devices -without a keyboard... +without a keyboard. ```bash # Arch yay -S hhd @@ -316,38 +316,11 @@ if you are missing the `xpad` rule. Name: ['Generic X-Box pad'] ``` -### I can see the original controller and that is causing issues in X -Hiding the original controller is a complex process, so it was skipped for the -v0.1.* versions of HHD. -However, it is implemented properly in v0.2. -Some emulators select the original controller as controller 1, which caused -issues. -This is not the case anymore. -On boot you might see an xbox controller. There is a bug with hiding the controller -during the boot process. -Flicking the fps switch on off fixes it and the controller is hidden until the next -reboot. - ### Yuzu does not work with the PS5 controller See above. Use yuzu controller settings to select the DualSense controller and disable Steam Input. -### PlayStation Driver -There is a small touchpad issue with the PlayStation driver loaded. -Where a cursor might appear when using the touchpad in Steam Input. -This should be fixed in the latest version. -If not, you can fix it by blacklisting the PlayStation driver. -However, you will get a lot of issues if you dont exclusively use Steam Input -afterwards so do not do it otherwise. -You will not be able to use the touchpad as a touchpad anymore and that is the -only way to wake up the screen in desktop mode. -Games that do not support DualSense natively (e.g., wine games) will not have -a correct gamepad profile and will not work either. -```bash -sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/modprobe.d/hhd.conf -o /etc/udev/modprobe.d/hhd.conf -``` - ### Freezing Gyro The gyro used for the PS5 controller is found in the display. It may freeze occasionally. This is due to the accelerometer driver being @@ -360,10 +333,6 @@ However, a udev rule that is installed by default disables this. If you do not need gyro support, you should disable it for a .2% cpu utilisation reduction. -By default, the accelerometer is disabled for this reason. - -You need to set both `gyro` and `gyro-fix` to `False` in the config to disable -gyro support. ### No screen autorotation after install HHD includes a udev rule that disables screen autorotation, because it interferes @@ -373,12 +342,13 @@ If you do not need gyro, you can do the local install and modify `83-hhd.rules` to remove that rule. The gyro will freeze and will be unusable after that. -### Touchpad right click does not work in desktop -HHD remaps the touchpad of the Legion Go to the PS5 touchpad. -The PlayStation driver does not support right clicking. -Switch to d-input to enable the touchpad when you're in the desktop. -You can also disable touchpad emulation in the config or use evdev emulation -which does not use the touchpad. +### Touchpad Behavior is different after install/is not part of dualsense +By default, in the Legion Go the handheld daemon uses a virtual touchpad +with proper left/right clicks, which work in gamescope. +If you use your device outside gamescope and find this problematic, switch +`Touchpad Emulation` to `Disabled`. +If you want to use your touchpad for steam input, set the option to `Controller` +and use the `Right Touchpad` under steam. ### HandyGCCS HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not @@ -401,13 +371,11 @@ You can reset each controller by holding Legion R + RT + RB, Legion L + LT + LB. However, we do not know how to reset the Legion Space legion button swap at this point, so you need to use Legion Space for that. -Another set of obscure issues occur depending on how apps hook to the PS5 controller. -If the PlayStation driver is not active, the Linux kernel creates an evdev node -with incorrect mappings (right trigger becomes a stick, etc). -If the app hooks directly into the hidraw of the controller, it works properly. -If it uses the evdev device its incorrect. +Another set of obscure issues occur depending on how apps hook to the Dualsense controller. +Certain versions of gamescope and certain games do not support the edge controller, +so switch to `Dualsense` or `Xbox` emulation modes if you are having issues. -### Disable Dualsense touchpad +### Disabling Dualsense touchpad The Dualsense touchpad may interfere with games or steam input. You can disable it with the following udev rule. Place it under `/etc/udev/rules.d/99-hhd-playstation-touchpad.rules` @@ -417,29 +385,22 @@ ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="*Wireless Controller ``` ## Contributing -You should install from source if you aim to contribute or want to pull from master. +Either follow `Automatic Install` or `Manual Local Install` to install the base rules. +Then, clone, optionally install the userspace rules, and run. ```bash -# Install hhd to ~/.local/share/hhd -mkdir -p ~/.local/share/ -git clone https://github.com/hhd-dev/hhd ~/.local/share/hhd - -cd ~/.local/share/hhd +# Clone Handheld Daemon +git clone https://github.com/hhd-dev/hhd +cd hhd python -m venv venv source venv/bin/activate pip install -e . -# Install udev rules and create a service file -sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules -sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service - -# Install udev rules to allow running in userspace (optional; great for debugging) +# Install udev rules to allow running in userspace +# optional; great for debugging sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd-user.rules -o /etc/udev/rules.d/83-hhd-user.rules # Modprobe uhid to avoid rw errors sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/modules-load.d/hhd-user.conf -o /etc/modules-load.d/hhd-user.conf -# Reboot -sudo reboot - # You can now run hhd in userspace! hhd # Add user when running with sudo diff --git a/usr/lib/udev/rules.d/83-hhd-user.rules b/usr/lib/udev/rules.d/83-hhd-user.rules index 250bd3ce..c194007a 100644 --- a/usr/lib/udev/rules.d/83-hhd-user.rules +++ b/usr/lib/udev/rules.d/83-hhd-user.rules @@ -17,4 +17,7 @@ KERNELS=="input[0-9]*", SUBSYSTEMS=="input", ATTRS{phys}=="isa0060*", MODE="0666 # Enable access to uhid and uinput KERNEL=="uinput", MODE="0666", TAG+="uaccess" -KERNEL=="uhid", MODE="0666", TAG+="uaccess" \ No newline at end of file +KERNEL=="uhid", MODE="0666", TAG+="uaccess" + +# Allow access to brightness controls +ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chgrp video $sys$devpath/brightness", RUN+="/bin/chmod g+w $sys$devpath/brightness" \ No newline at end of file From 07f361c38b5cb8aad41d6e49ccf63bbec2772c01 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 16:46:55 +0200 Subject: [PATCH 0255/1497] fix urls to point to master --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 0c90d562..402a5a7d 100644 --- a/readme.md +++ b/readme.md @@ -76,10 +76,10 @@ Then, update from Decky or the UI. ```bash # Install -curl -L https://github.com/hhd-dev/hhd/raw/main/install.sh | sh +curl -L https://github.com/hhd-dev/hhd/raw/master/install.sh | sh # Uninstall -curl -L https://github.com/hhd-dev/hhd/raw/main/uninstall.sh | sh +curl -L https://github.com/hhd-dev/hhd/raw/master/uninstall.sh | sh ``` You can also install the Decky plugin. From cd2ff78da78185789ee25d5fb05308b8d226de54 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 16:48:35 +0200 Subject: [PATCH 0256/1497] link to configuration --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 402a5a7d..91b01e22 100644 --- a/readme.md +++ b/readme.md @@ -88,7 +88,7 @@ curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh ``` Then, reboot and go to [hhd.dev](https://hhd.dev) to configure or read more in -the configuration section. +the [configuration section](#configuration). ### Manual Local Installation You can also install Handheld Daemon using a local package, which enables auto-updating. From 6aa7bc4dd78c4091a816c859e7803b9064c307d1 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 16:50:11 +0200 Subject: [PATCH 0257/1497] update ui based description --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 91b01e22..c8ca6f31 100644 --- a/readme.md +++ b/readme.md @@ -225,7 +225,8 @@ sudo systemctl start hhd@$(whoami) Go to [hhd.dev](https://hhd.dev) and enter your device token (`~/.config/hhd/token`). That is it! -You can also install the Electron version ([hhd-ui](https://github.com/hhd-dev/hhd-ui)) to use locally. +You can also install the Electron version ([hhd-ui](https://github.com/hhd-dev/hhd-ui)) +to use completely offline or as an app (updating it has to be done manually for now). ### Using Decky If you have decky installed, you can use the following command to From 5f4b7c1a030309f61113a919dfe487345819cc0f Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 19:59:34 +0200 Subject: [PATCH 0258/1497] separate touchpad input options for use with gpd --- src/hhd/device/legion_go/__init__.py | 2 + src/hhd/device/legion_go/controllers.yml | 112 ----------------------- src/hhd/plugins/__init__.py | 2 + src/hhd/plugins/inputs.py | 5 + src/hhd/plugins/touchpad.yml | 112 +++++++++++++++++++++++ 5 files changed, 121 insertions(+), 112 deletions(-) create mode 100644 src/hhd/plugins/inputs.py create mode 100644 src/hhd/plugins/touchpad.yml diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index 26043abc..87467273 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -8,6 +8,7 @@ HHDPlugin, load_relative_yaml, get_outputs_config, + get_touchpad_config, ) from hhd.plugins.settings import HHDSettings @@ -39,6 +40,7 @@ def settings(self) -> HHDSettings: base["controllers"]["legion_go"]["children"]["xinput"].update( get_outputs_config() ) + base["controllers"]["legion_go"]["children"]["touchpad"] = get_touchpad_config() return base def update(self, conf: Config): diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index b4465c9e..c9d08469 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -73,118 +73,6 @@ children: default: True touchpad: - type: mode - tags: [touchpad] - title: Touchpad Emulation - hint: >- - Use an emulated touchpad. - Part of the controller if it is supported (e.g., Dualsense) or a virtual - one if not. - - default: emulation - modes: - # - # No emulation - # - disabled: - type: container - title: Disabled - hint: >- - Does not modify the touchpad. Short + holding presses will not work - within gamescope. - # - # Virtual emulation - # - emulation: - type: container - title: Virtual - hint: >- - Adds an emulated touchpad. This touchpad is meant to be for desktop - use and has left, right click support by default, within gamescope and - outside of it, regardless of the "Tap to Click" setting. - children: - short: - type: multiple - title: Short Action - tags: [advanced] - hint: >- - Maps short touches (less than 0.2s) to a virtual touchpad button. - options: - disabled: Disabled - left_click: Left Click - right_click: Right Click - default: "left_click" - hold: - type: multiple - title: Hold Action - tags: [advanced] - hint: >- - Maps long touches (more than 2s) to a virtual touchpad button. - options: - disabled: Disabled - left_click: Left Click - right_click: Right Click - default: "right_click" - # - # Controller emulation - # - controller: - type: container - title: Controller - hint: >- - Uses the touchpad of the emulated controller (if it exists). - Otherwise, the touchpad remains unmapped (will still show up in the system). - Meant to be used as steam input, so short press is unassigned by - default and long press simulates trackpad click. - children: - correction: - type: multiple - title: Correction Type - hint: >- - The legion touchpad is square, whereas the DS5 one is rectangular. - Therefore, it needs to be corrected. - "Contain" maintain the whole DS5 touchpad and part of the Legion - one is unused. "Crop" uses the full legion touchpad, and limits - the area of the DS5. "Stretch" uses both fully (distorted). - "Crop End" enables use in steam input as the right touchpad. - options: - stretch: "Stretch" - crop_center: "Crop Center" - crop_start: "Crop Start" - crop_end: "Crop End" - contain_start: "Contain Start" - contain_end: "Contain End" - contain_center: "Contain Center" - default: crop_end - - short: - type: multiple - title: Short Action - tags: [advanced] - hint: >- - Maps short touches (less than 0.2s) to a touchpad action. - Dualsense uses a physical press for left and a double tap for - right click (support for double tap varies; enable "Tap to Click" - in your desktop's touchpad settings). - options: - disabled: Disabled - left_click: Left Click - right_click: Right Click - default: "disabled" - - hold: - type: multiple - title: Hold Action - hint: >- - Maps long touches (more than 2s) to a touchpad action. - Dualsense uses a physical press for left and a double tap for - right click (support for double tap varies; enable "Tap to Click" - in your desktop's touchpad settings). - options: - disabled: Disabled - left_click: Left Click - right_click: Right Click - default: "left_click" shortcuts: type: bool diff --git a/src/hhd/plugins/__init__.py b/src/hhd/plugins/__init__.py index 74d959e7..d5b7cad3 100644 --- a/src/hhd/plugins/__init__.py +++ b/src/hhd/plugins/__init__.py @@ -3,6 +3,7 @@ from .settings import HHDSettings from .utils import get_relative_fn, load_relative_yaml from .outputs import get_outputs_config, get_outputs +from .inputs import get_touchpad_config __all__ = [ @@ -17,4 +18,5 @@ "Context", "get_outputs_config", "get_outputs", + "get_touchpad_config", ] diff --git a/src/hhd/plugins/inputs.py b/src/hhd/plugins/inputs.py new file mode 100644 index 00000000..a2ad4023 --- /dev/null +++ b/src/hhd/plugins/inputs.py @@ -0,0 +1,5 @@ +from .utils import load_relative_yaml + + +def get_touchpad_config(): + return load_relative_yaml("touchpad.yml") diff --git a/src/hhd/plugins/touchpad.yml b/src/hhd/plugins/touchpad.yml new file mode 100644 index 00000000..d34dae67 --- /dev/null +++ b/src/hhd/plugins/touchpad.yml @@ -0,0 +1,112 @@ +type: mode +tags: [touchpad] +title: Touchpad Emulation +hint: >- + Use an emulated touchpad. + Part of the controller if it is supported (e.g., Dualsense) or a virtual + one if not. + +default: emulation +modes: + # + # No emulation + # + disabled: + type: container + title: Disabled + hint: >- + Does not modify the touchpad. Short + holding presses will not work + within gamescope. + # + # Virtual emulation + # + emulation: + type: container + title: Virtual + hint: >- + Adds an emulated touchpad. This touchpad is meant to be for desktop + use and has left, right click support by default, within gamescope and + outside of it, regardless of the "Tap to Click" setting. + children: + short: + type: multiple + title: Short Action + tags: [advanced] + hint: >- + Maps short touches (less than 0.2s) to a virtual touchpad button. + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "left_click" + hold: + type: multiple + title: Hold Action + tags: [advanced] + hint: >- + Maps long touches (more than 2s) to a virtual touchpad button. + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "right_click" + # + # Controller emulation + # + controller: + type: container + title: Controller + hint: >- + Uses the touchpad of the emulated controller (if it exists). + Otherwise, the touchpad remains unmapped (will still show up in the system). + Meant to be used as steam input, so short press is unassigned by + default and long press simulates trackpad click. + children: + correction: + type: multiple + title: Correction Type + hint: >- + The legion touchpad is square, whereas the DS5 one is rectangular. + Therefore, it needs to be corrected. + "Contain" maintain the whole DS5 touchpad and part of the Legion + one is unused. "Crop" uses the full legion touchpad, and limits + the area of the DS5. "Stretch" uses both fully (distorted). + "Crop End" enables use in steam input as the right touchpad. + options: + stretch: "Stretch" + crop_center: "Crop Center" + crop_start: "Crop Start" + crop_end: "Crop End" + contain_start: "Contain Start" + contain_end: "Contain End" + contain_center: "Contain Center" + default: crop_end + + short: + type: multiple + title: Short Action + tags: [advanced] + hint: >- + Maps short touches (less than 0.2s) to a touchpad action. + Dualsense uses a physical press for left and a double tap for + right click (support for double tap varies; enable "Tap to Click" + in your desktop's touchpad settings). + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "disabled" + + hold: + type: multiple + title: Hold Action + hint: >- + Maps long touches (more than 2s) to a touchpad action. + Dualsense uses a physical press for left and a double tap for + right click (support for double tap varies; enable "Tap to Click" + in your desktop's touchpad settings). + options: + disabled: Disabled + left_click: Left Click + right_click: Right Click + default: "left_click" \ No newline at end of file From 23ad89e4a99020fc2d95d0cd6adc67a039e3d818 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 20:22:33 +0200 Subject: [PATCH 0259/1497] grab all power buttons --- src/hhd/plugins/powerbutton/base.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 9dcdc551..09feeb3a 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -67,14 +67,18 @@ def run_steam_command(command: str, ctx: Context): return False -def register_power_button(b: PowerButtonConfig) -> evdev.InputDevice | None: +def register_power_buttons(b: PowerButtonConfig) -> list[evdev.InputDevice]: + out = [] for device in [evdev.InputDevice(path) for path in evdev.list_devices()]: + capture = False for phys in b.phys: if str(device.phys).startswith(phys): - device.grab() - logger.info(f"Captured power button '{device.name}': '{device.phys}'") - return device - return None + capture = True + if capture: + device.grab() + logger.info(f"Captured power button '{device.name}': '{device.phys}'") + out.append(device) + return out def register_hold_button(b: PowerButtonConfig) -> evdev.InputDevice | None: @@ -131,6 +135,7 @@ def power_button_run(cfg: PowerButtonConfig, ctx: Context, should_exit: Event): def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event): press_dev = None + press_devs = [] hold_dev = None try: while not should_exit.is_set(): @@ -151,7 +156,8 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) if not press_dev or not hold_dev: logger.info(f"Steam is running, hooking power button.") - press_dev = register_power_button(cfg) + press_devs = register_power_buttons(cfg) + press_dev = press_devs[0] if press_devs else None hold_dev = register_hold_button(cfg) if not press_dev or not hold_dev: logger.error(f"Power button interfaces not found, disabling plugin.") @@ -190,6 +196,7 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Event): dev = None + devs = [] try: pressed_time = None while not should_exit.is_set(): @@ -205,7 +212,8 @@ def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Even if not dev: logger.info(f"Steam is running, hooking power button.") - dev = register_power_button(cfg) + devs = register_power_buttons(cfg) + dev = devs[0] if devs else None if not dev: logger.error(f"Power button not found, disabling plugin.") return From d2bd4274a55770752af9a5fe27a0e3562cf91de3 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 9 Jan 2024 20:25:49 +0200 Subject: [PATCH 0260/1497] add gpt win 4 to dmi match --- src/hhd/plugins/powerbutton/const.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index e05fbdd7..60f7f223 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -17,14 +17,9 @@ class PowerButtonConfig(NamedTuple): PBC = PowerButtonConfig SUPPORTED_DEVICES: Sequence[PowerButtonConfig] = [ - PBC( - "Legion Go", - "83E1", - ), - PBC( - "ROG Ally", - "ROG Ally RC71L_RC71L", - ), + PBC("Legion Go", "83E1"), + PBC("ROG Ally", "ROG Ally RC71L_RC71L"), + PBC("GPT Win 4", "G1618-04"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 3ddb265318ec8cc17a7bbeca5b899027b4c4d49d Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 10 Jan 2024 00:27:52 +0200 Subject: [PATCH 0261/1497] fix sysrq button handling --- src/hhd/controller/physical/evdev.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index f7232eb6..b029823a 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -254,7 +254,8 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: { "type": "button", "code": self.btn_map[e.code], - "value": bool(e.value), + # Only 1 is valid for press (look at sysrq) + "value": e.value == 1, } ) elif e.type == B("EV_ABS"): From 709ce59f15bd1daef9732395e6858408182b75ca Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 10 Jan 2024 00:29:34 +0200 Subject: [PATCH 0262/1497] ignore key events other than 0 and 1 properly --- src/hhd/controller/physical/evdev.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index b029823a..749d491d 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -250,14 +250,15 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: for e in self.dev.read(): if e.type == B("EV_KEY"): if e.code in self.btn_map: - out.append( - { - "type": "button", - "code": self.btn_map[e.code], - # Only 1 is valid for press (look at sysrq) - "value": e.value == 1, - } - ) + # Only 1 is valid for press (look at sysrq) + if e.value == 0 or e.value == 1: + out.append( + { + "type": "button", + "code": self.btn_map[e.code], + "value": bool(e.value), + } + ) elif e.type == B("EV_ABS"): if e.code in self.axis_map: # Normalize From 1109f0b5aace38802c80ef3e7a148f69839ece74 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 11 Jan 2024 11:25:36 +0100 Subject: [PATCH 0263/1497] tweak readme --- readme.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index c8ca6f31..0e2e1975 100644 --- a/readme.md +++ b/readme.md @@ -46,10 +46,8 @@ depending on the game. - By hooking into the manufacturer ACPI API of the Ryzen platform, it will expose all TDP related parameters manufacturers have access to when spec'ing laptops. - - RyzenAdj Successor - - No memory-relaxed requirement - - Safer, as it is the method used by manufacturers - (provided you stay within limits). + - No memory-relaxed requirement + - Safe, as it is the method used by manufacturers (provided you stay within limits). ## Installation Instructions You can install the latest stable version of `hhd` from AUR or PyPi. From 5d10406557ea829dbf4eb5743a7bc8105b95e749 Mon Sep 17 00:00:00 2001 From: Aarron Lee Date: Thu, 11 Jan 2024 13:14:31 -0500 Subject: [PATCH 0264/1497] gpd win 4 with hidraw for l4/r4 --- pyproject.toml | 1 + src/hhd/device/gpd/win4/__init__.py | 88 ++++++++ src/hhd/device/gpd/win4/base.py | 267 ++++++++++++++++++++++++ src/hhd/device/gpd/win4/controllers.yml | 26 +++ 4 files changed, 382 insertions(+) create mode 100644 src/hhd/device/gpd/win4/__init__.py create mode 100644 src/hhd/device/gpd/win4/base.py create mode 100644 src/hhd/device/gpd/win4/controllers.yml diff --git a/pyproject.toml b/pyproject.toml index f59b4ecb..d1b09aa9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,7 @@ hhd = "hhd.__main__:main" [project.entry-points."hhd.plugins"] legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" +gpd_win4 = "hhd.device.gpd.win4:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/device/gpd/win4/__init__.py b/src/hhd/device/gpd/win4/__init__.py new file mode 100644 index 00000000..b1025c05 --- /dev/null +++ b/src/hhd/device/gpd/win4/__init__.py @@ -0,0 +1,88 @@ +from threading import Event, Thread +from typing import Any, Sequence + +from hhd.plugins import ( + Config, + Context, + Emitter, + HHDPlugin, + load_relative_yaml, + get_outputs_config, +) +from hhd.plugins.settings import HHDSettings + + +class GpdWin4ControllersPlugin(HHDPlugin): + name = "gpd_win_4_controllers" + priority = 18 + log = "gpd_win_4" + + def __init__(self) -> None: + self.t = None + self.should_exit = None + self.updated = Event() + self.started = False + self.t = None + + def open( + self, + emit: Emitter, + context: Context, + ): + self.emit = emit + self.context = context + self.prev = None + + def settings(self) -> HHDSettings: + base = {"controllers": {"gpd_win_4": load_relative_yaml("controllers.yml")}} + base["controllers"]["gpd_win_4"]["children"]["controller_mode"].update( + get_outputs_config(can_disable=False) + ) + return base + + def update(self, conf: Config): + new_conf = conf["controllers.gpd_win_4"] + if new_conf == self.prev: + return + if self.prev is None: + self.prev = new_conf + else: + self.prev.update(new_conf.conf) + + self.updated.set() + self.start(self.prev) + + def start(self, conf): + from .base import plugin_run + + if self.started: + return + self.started = True + + self.close() + self.should_exit = Event() + self.t = Thread( + target=plugin_run, + args=(conf, self.emit, self.context, self.should_exit, self.updated), + ) + self.t.start() + + def close(self): + if not self.should_exit or not self.t: + return + self.should_exit.set() + self.t.join() + self.should_exit = None + self.t = None + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + # Match just product number, should be enough for now + with open("/sys/devices/virtual/dmi/id/product_name") as f: + if not f.read().strip() == "G1618-04": + return [] + + return [GpdWin4ControllersPlugin()] diff --git a/src/hhd/device/gpd/win4/base.py b/src/hhd/device/gpd/win4/base.py new file mode 100644 index 00000000..6ee077cc --- /dev/null +++ b/src/hhd/device/gpd/win4/base.py @@ -0,0 +1,267 @@ +import logging +import select +import time +from threading import Event as TEvent +from typing import Sequence + +from hhd.controller import Event, Multiplexer, can_read +from hhd.controller.base import Event +from hhd.controller.physical.evdev import B as EC +from hhd.controller.physical.hidraw import GenericGamepadHidraw +from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.plugins import Config, Context, Emitter, get_outputs + +ERROR_DELAY = 1 +SELECT_TIMEOUT = 1 + +logger = logging.getLogger(__name__) + +GPD_WIN_4_VID = 0x2f24 +GPD_WIN_4_PID = 0x0135 +GAMEPAD_VID = 0x045E +GAMEPAD_PID = 0x028E + +BACK_BUTTON_DELAY = 0.3 + +# /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 +# bus: 0003, vendor 045e, product 028e, version 0101 + +# back buttons +# /dev/input/event15 Mouse for Windows usb-0000:73:00.3-4.2/input1 +# bus: 0003, vendor 2f24, product 0135, version 0110 + +# physical keyboard +# /dev/input/event13 Mouse for Windows usb-0000:73:00.3-4.2/input0 +# bus: 0003, vendor 2f24, product 0135, version 0110 + +# hidraw back buttons {'path': b'/dev/hidraw6', +# 'vendor_id': 12068, 'product_id': 309, 'serial_number': '', +# 'release_number': 256, 'manufacturer_string': ' ', +# 'product_string': 'Mouse for Windows', +# 'usage_page': 1, 'usage': 6, 'interface_number': 1}, + +class GpdWin4Hidraw(GenericGamepadHidraw): + l4_prev_timestamp = None + r4_prev_timestamp = None + + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + def open(self) -> Sequence[int]: + self.queue: list[tuple[Event, float]] = [] + a = super().open() + + return a + + def produce(self, fds: Sequence[int]) -> Sequence[Event]: + # If we can not read return + if not self.fd or not self.dev: + return [] + + # Process events + curr = time.perf_counter() + out: Sequence[Event] = [] + + # Remove up to one queued event + if len(self.queue): + ev, ofs = self.queue[0] + if ofs < curr: + out.append(ev) + self.queue.pop(0) + + # Read new events + while can_read(self.fd): + resolve_lambda = None + rep = self.dev.read(self.report_size) + + # l4 = 0x46 + # r4 = 0x48 + # both = l4 + r4 + # when both l4/r4 held, rep[2] and rep[3] will both be active + # they will be the same known values for l4 and r4 + # but the order is not guaranteed to be consistent + + check = rep[2] + rep[3] + + match check: + case 0x46: + # action = "left/l4" + if self.l4_prev_timestamp == None: + out.append({"type": "button", "code": "extra_l1", "value": True}) + self.l4_prev_timestamp = curr + + case 0x48: + # action = "right/r4" + if self.r4_prev_timestamp == None: + out.append({"type": "button", "code": "extra_r1", "value": True}) + self.r4_prev_timestamp = curr + + case 0x8e: + # both l4 and r4 are being pressed + if not self.r4_prev_timestamp: + out.append({"type": "button", "code": "extra_r1", "value": True}) + + if not self.l4_prev_timestamp: + out.append({"type": "button", "code": "extra_l1", "value": True}) + + self.r4_prev_timestamp = curr + self.l4_prev_timestamp = curr + case 0x00: + + if self.l4_prev_timestamp: + # release l4, zero out timestamp + self.queue.append( + ( + {"type": "button", "code": "extra_l1", "value": False}, + curr + BACK_BUTTON_DELAY, + ) + ) + self.l4_prev_timestamp = None + if self.r4_prev_timestamp: + # release r4, zero out timestamp + self.queue.append( + ( + {"type": "button", "code": "extra_r1", "value": False}, + curr + BACK_BUTTON_DELAY, + ) + ) + self.r4_prev_timestamp = None + + pass + + return out + + +def plugin_run( + conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent +): + while not should_exit.is_set(): + try: + logger.info("Launching emulated controller.") + updated.clear() + controller_loop(conf.copy(), should_exit, updated) + except Exception as e: + logger.error(f"Received the following error:\n{type(e)}: {e}") + logger.error( + f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." + ) + # Raise exception + if conf.get("debug", False): + raise e + time.sleep(ERROR_DELAY) + + +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): + debug = conf.get("debug", False) + + # Output + d_producers, d_outs, d_params = get_outputs( + conf["controller_mode"], None, None + ) + + # Inputs + d_xinput = GenericGamepadEvdev( + vid=[GAMEPAD_VID], + pid=[GAMEPAD_PID], + # name=["Generic X-Box pad"], + capabilities={EC("EV_KEY"): [EC("BTN_A")]}, + required=True, + hide=True, + ) + + # Vendor + d_vend = GpdWin4Hidraw( + vid=[GPD_WIN_4_VID], + pid=[GPD_WIN_4_PID], + usage_page=[0x0001], + usage=[0x0006], + required=True, + ) + + d_kbd_1 = GenericGamepadEvdev( + vid=[GPD_WIN_4_VID], + pid=[GPD_WIN_4_PID], + # capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, + required=True, + grab=True, + # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, + ) + + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + ) + + REPORT_FREQ_MIN = 25 + REPORT_FREQ_MAX = 400 + + + REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN + REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX + + + fds = [] + devs = [] + fd_to_dev = {} + + def prepare(m): + devs.append(m) + fs = m.open() + fds.extend(fs) + for f in fs: + fd_to_dev[f] = m + + try: + d_vend.open() + prepare(d_xinput) + prepare(d_kbd_1) + for d in d_producers: + prepare(d) + + logger.info("Emulated controller launched, have fun!") + while not should_exit.is_set() and not updated.is_set(): + start = time.perf_counter() + # Add timeout to call consumers a minimum amount of times per second + r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) + evs = [] + to_run = set() + for f in r: + to_run.add(id(fd_to_dev[f])) + + for d in devs: + if id(d) in to_run: + evs.extend(d.produce(r)) + evs.extend(d_vend.produce(r)) + + evs = multiplexer.process(evs) + if evs: + if debug: + logger.info(evs) + + d_vend.consume(evs) + d_xinput.consume(evs) + + for d in d_outs: + d.consume(evs) + + # If unbounded, the total number of events per second is the sum of all + # events generated by the producers. + # For Legion go, that would be 100 + 100 + 500 + 30 = 730 + # Since the controllers of the legion go only update at 500hz, this is + # wasteful. + # By setting a target refresh rate for the report and sleeping at the + # end, we ensure that even if multiple fds become ready close to each other + # they are combined to the same report, limiting resource use. + # Ideally, this rate is smaller than the report rate of the hardware controller + # to ensure there is always a report from that ready during refresh + t = time.perf_counter() + elapsed = t - start + if elapsed < REPORT_DELAY_MIN: + time.sleep(REPORT_DELAY_MIN - elapsed) + + except KeyboardInterrupt: + raise + finally: + d_vend.close(True) + for d in reversed(devs): + d.close(True) diff --git a/src/hhd/device/gpd/win4/controllers.yml b/src/hhd/device/gpd/win4/controllers.yml new file mode 100644 index 00000000..a952e56f --- /dev/null +++ b/src/hhd/device/gpd/win4/controllers.yml @@ -0,0 +1,26 @@ +type: container +tags: [lgc] +title: GPD Controller +hint: >- + Allows for configuring the gpd win controllers to a unified output. + +children: + controller_mode: + type: mode + tags: [gpd_gen_3_controller_mode] + title: Controller Emulation + hint: >- + Emulate different controller types to fuse gpd features. + + # + # Common settings + # + + debug: + type: bool + title: Debug + tags: [advanced] + hint: >- + Output controller events to the console (high CPU use) and raises exceptions + (HHD will crash on errors). + default: False From cf6fcaa02e5f946f2a6d79c95d8200cfb4cf423b Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 11 Jan 2024 20:36:11 +0200 Subject: [PATCH 0265/1497] generalize name to reuse drivers for all gpd win devices --- pyproject.toml | 2 +- src/hhd/device/gpd/{win4 => win}/__init__.py | 10 +++++----- src/hhd/device/gpd/{win4 => win}/base.py | 0 src/hhd/device/gpd/{win4 => win}/controllers.yml | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename src/hhd/device/gpd/{win4 => win}/__init__.py (91%) rename src/hhd/device/gpd/{win4 => win}/base.py (100%) rename src/hhd/device/gpd/{win4 => win}/controllers.yml (100%) diff --git a/pyproject.toml b/pyproject.toml index d1b09aa9..3cd0e2a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ hhd = "hhd.__main__:main" [project.entry-points."hhd.plugins"] legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" -gpd_win4 = "hhd.device.gpd.win4:autodetect" +gpd_win = "hhd.device.gpd.win:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/device/gpd/win4/__init__.py b/src/hhd/device/gpd/win/__init__.py similarity index 91% rename from src/hhd/device/gpd/win4/__init__.py rename to src/hhd/device/gpd/win/__init__.py index b1025c05..65d54eb4 100644 --- a/src/hhd/device/gpd/win4/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -12,10 +12,10 @@ from hhd.plugins.settings import HHDSettings -class GpdWin4ControllersPlugin(HHDPlugin): - name = "gpd_win_4_controllers" +class GpdWinControllersPlugin(HHDPlugin): + name = "gpd_win_controllers" priority = 18 - log = "gpd_win_4" + log = "gpdw" def __init__(self) -> None: self.t = None @@ -41,7 +41,7 @@ def settings(self) -> HHDSettings: return base def update(self, conf: Config): - new_conf = conf["controllers.gpd_win_4"] + new_conf = conf["controllers.gpd_win"] if new_conf == self.prev: return if self.prev is None: @@ -85,4 +85,4 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if not f.read().strip() == "G1618-04": return [] - return [GpdWin4ControllersPlugin()] + return [GpdWinControllersPlugin()] diff --git a/src/hhd/device/gpd/win4/base.py b/src/hhd/device/gpd/win/base.py similarity index 100% rename from src/hhd/device/gpd/win4/base.py rename to src/hhd/device/gpd/win/base.py diff --git a/src/hhd/device/gpd/win4/controllers.yml b/src/hhd/device/gpd/win/controllers.yml similarity index 100% rename from src/hhd/device/gpd/win4/controllers.yml rename to src/hhd/device/gpd/win/controllers.yml From 59b402db78e568bf4da8a72900853d01d3bb1645 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 11 Jan 2024 21:04:06 +0200 Subject: [PATCH 0266/1497] update gpd win back button logic --- src/hhd/device/gpd/win/base.py | 120 +++++++++++++++------------------ 1 file changed, 55 insertions(+), 65 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 6ee077cc..a06b2835 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -16,12 +16,12 @@ logger = logging.getLogger(__name__) -GPD_WIN_4_VID = 0x2f24 +GPD_WIN_4_VID = 0x2F24 GPD_WIN_4_PID = 0x0135 GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -BACK_BUTTON_DELAY = 0.3 +BACK_BUTTON_DELAY = 0.05 # /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 # bus: 0003, vendor 045e, product 028e, version 0101 @@ -40,18 +40,18 @@ # 'product_string': 'Mouse for Windows', # 'usage_page': 1, 'usage': 6, 'interface_number': 1}, -class GpdWin4Hidraw(GenericGamepadHidraw): - l4_prev_timestamp = None - r4_prev_timestamp = None +class GpdWin4Hidraw(GenericGamepadHidraw): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) def open(self) -> Sequence[int]: - self.queue: list[tuple[Event, float]] = [] - a = super().open() + self.left_pressed = None + self.right_pressed = None + self.clear_ts = None - return a + self.queue: list[tuple[Event, float]] = [] + return super().open() def produce(self, fds: Sequence[int]) -> Sequence[Event]: # If we can not read return @@ -62,16 +62,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: curr = time.perf_counter() out: Sequence[Event] = [] - # Remove up to one queued event - if len(self.queue): - ev, ofs = self.queue[0] - if ofs < curr: - out.append(ev) - self.queue.pop(0) - # Read new events + left_pressed = None + right_pressed = None while can_read(self.fd): - resolve_lambda = None rep = self.dev.read(self.report_size) # l4 = 0x46 @@ -80,55 +74,55 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # when both l4/r4 held, rep[2] and rep[3] will both be active # they will be the same known values for l4 and r4 # but the order is not guaranteed to be consistent - check = rep[2] + rep[3] - match check: case 0x46: # action = "left/l4" - if self.l4_prev_timestamp == None: - out.append({"type": "button", "code": "extra_l1", "value": True}) - self.l4_prev_timestamp = curr - + left_pressed = True + right_pressed = False + self.clear_ts = None case 0x48: # action = "right/r4" - if self.r4_prev_timestamp == None: - out.append({"type": "button", "code": "extra_r1", "value": True}) - self.r4_prev_timestamp = curr - - case 0x8e: + left_pressed = False + right_pressed = True + self.clear_ts = None + case 0x8E: # both l4 and r4 are being pressed - if not self.r4_prev_timestamp: - out.append({"type": "button", "code": "extra_r1", "value": True}) - - if not self.l4_prev_timestamp: - out.append({"type": "button", "code": "extra_l1", "value": True}) - - self.r4_prev_timestamp = curr - self.l4_prev_timestamp = curr - case 0x00: - - if self.l4_prev_timestamp: - # release l4, zero out timestamp - self.queue.append( - ( - {"type": "button", "code": "extra_l1", "value": False}, - curr + BACK_BUTTON_DELAY, - ) - ) - self.l4_prev_timestamp = None - if self.r4_prev_timestamp: - # release r4, zero out timestamp - self.queue.append( - ( - {"type": "button", "code": "extra_r1", "value": False}, - curr + BACK_BUTTON_DELAY, - ) - ) - self.r4_prev_timestamp = None - - pass - + left_pressed = True + right_pressed = True + self.clear_ts = None + case _: # 0x00: + left_pressed = False + right_pressed = False + if self.clear_ts is None: + # Only update timeout if none + self.clear_ts = curr + BACK_BUTTON_DELAY + + if self.clear_ts and self.clear_ts < curr: + # Reset after timeout + if self.left_pressed: + out.append({"type": "button", "code": "extra_l1", "value": False}) + self.left_pressed = False + if self.right_pressed: + out.append({"type": "button", "code": "extra_r1", "value": False}) + self.right_pressed = False + self.clear_ts = None + else: + # If no timeout, update + # Left, right will be none if no events were received + # If they were, they will be true/false + # If that conflicts with the saved values, send events. + if left_pressed is not None and self.left_pressed != left_pressed: + out.append( + {"type": "button", "code": "extra_l1", "value": left_pressed} + ) + self.left_pressed = left_pressed + + if right_pressed is not None and self.right_pressed != right_pressed: + out.append( + {"type": "button", "code": "extra_r1", "value": right_pressed} + ) + self.right_pressed = right_pressed return out @@ -155,9 +149,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): debug = conf.get("debug", False) # Output - d_producers, d_outs, d_params = get_outputs( - conf["controller_mode"], None, None - ) + d_producers, d_outs, d_params = get_outputs(conf["controller_mode"], None, False) # Inputs d_xinput = GenericGamepadEvdev( @@ -182,7 +174,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): vid=[GPD_WIN_4_VID], pid=[GPD_WIN_4_PID], # capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, - required=True, + required=False, grab=True, # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, ) @@ -195,11 +187,9 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 400 - REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX - fds = [] devs = [] fd_to_dev = {} @@ -238,7 +228,7 @@ def prepare(m): if debug: logger.info(evs) - d_vend.consume(evs) + # d_vend.consume(evs) d_xinput.consume(evs) for d in d_outs: From 085cb0f33e76f5882428da0cf2e23747b9a4639b Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 11 Jan 2024 21:09:08 +0200 Subject: [PATCH 0267/1497] fix name --- src/hhd/device/gpd/win/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 65d54eb4..cc41cc13 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -34,8 +34,8 @@ def open( self.prev = None def settings(self) -> HHDSettings: - base = {"controllers": {"gpd_win_4": load_relative_yaml("controllers.yml")}} - base["controllers"]["gpd_win_4"]["children"]["controller_mode"].update( + base = {"controllers": {"gpd_win": load_relative_yaml("controllers.yml")}} + base["controllers"]["gpd_win"]["children"]["controller_mode"].update( get_outputs_config(can_disable=False) ) return base From ed0f2dc983a75ee71aecd537c94373064974d700 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 11 Jan 2024 21:42:10 +0200 Subject: [PATCH 0268/1497] try to fix false flip bug --- src/hhd/device/gpd/win/base.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index a06b2835..2222bbed 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -21,7 +21,7 @@ GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -BACK_BUTTON_DELAY = 0.05 +BACK_BUTTON_DELAY = 0.1 # /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 # bus: 0003, vendor 045e, product 028e, version 0101 @@ -92,11 +92,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: right_pressed = True self.clear_ts = None case _: # 0x00: - left_pressed = False - right_pressed = False - if self.clear_ts is None: - # Only update timeout if none - self.clear_ts = curr + BACK_BUTTON_DELAY + self.clear_ts = curr + BACK_BUTTON_DELAY if self.clear_ts and self.clear_ts < curr: # Reset after timeout From a5f94235e7746a9a5f95fa6365af92cd275f9434 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 11 Jan 2024 22:11:08 +0200 Subject: [PATCH 0269/1497] fix gpd buttons when both are held --- src/hhd/device/gpd/win/base.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 2222bbed..184bd34d 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -48,6 +48,7 @@ def __init__(self, *args, **kwargs) -> None: def open(self) -> Sequence[int]: self.left_pressed = None self.right_pressed = None + self.last_pressed = None self.clear_ts = None self.queue: list[tuple[Event, float]] = [] @@ -79,12 +80,12 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: case 0x46: # action = "left/l4" left_pressed = True - right_pressed = False + self.last_pressed = "left" self.clear_ts = None case 0x48: # action = "right/r4" - left_pressed = False right_pressed = True + self.last_pressed = "right" self.clear_ts = None case 0x8E: # both l4 and r4 are being pressed @@ -92,6 +93,12 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: right_pressed = True self.clear_ts = None case _: # 0x00: + # This occurs only when one button is pressed + # So in case both are remove one + if self.last_pressed == "right" and self.left_pressed: + left_pressed = False + if self.last_pressed == "left" and self.right_pressed: + right_pressed = False self.clear_ts = curr + BACK_BUTTON_DELAY if self.clear_ts and self.clear_ts < curr: From 9c97d820ef2844b83dd53214ae0decb107bab010 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 12 Jan 2024 13:57:18 +0200 Subject: [PATCH 0270/1497] re-add report caching --- src/hhd/controller/virtual/dualsense/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 92bdb1b1..0682f07d 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -393,8 +393,8 @@ def consume(self, events: Sequence[Event]): # Cache # Caching can cause issues since receivers expect reports # at least a couple of times per second - # if new_rep == self.report and not self.fake_timestamps: - # return + if new_rep == self.report and not self.fake_timestamps: + return self.report = new_rep if self.fake_timestamps: From 1bc1ddff3e988d3e41d7ceb93704e30827962690 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 12 Jan 2024 20:32:12 +0200 Subject: [PATCH 0271/1497] disable m2 by default --- src/hhd/controller/base.py | 4 +++- src/hhd/device/legion_go/base.py | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index d6cc01ee..2f3a5eb9 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -246,6 +246,7 @@ def __init__( trigger_discrete_lvl: float = 0.99, touchpad_short: TouchpadAction = "disabled", touchpad_right: TouchpadAction = "left_click", + r3_to_share: bool = False, select_reboots: bool = False, ) -> None: self.swap_guide = swap_guide @@ -259,6 +260,7 @@ def __init__( self.touchpad_short = touchpad_short self.touchpad_right = touchpad_right self.select_reboots = select_reboots + self.r3_to_share = r3_to_share self.state = {} self.touchpad_down = time.perf_counter() @@ -481,7 +483,7 @@ def process(self, events: Sequence[Event]): # TODO: Make it a proper config option # Remap M2 to the mute button - if ev["code"] == "extra_r3": + if self.r3_to_share and ev["code"] == "extra_r3": ev["code"] = "share" case "led": if self.led == "left_to_main" and ev["code"] == "left": diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index f8a6ffbc..714fa729 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -270,6 +270,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_right=touch_actions["hold"].to(TouchpadAction), select_reboots=conf["select_reboots"].to(bool), + r3_to_share=conf["m2_to_mute"].to(bool), ) REPORT_FREQ_MIN = 25 From 663a691e2dbab88008e4872dc9e5962022ea3397 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 12 Jan 2024 20:32:22 +0200 Subject: [PATCH 0272/1497] add gyro sync option for latest steam release --- .../controller/virtual/dualsense/__init__.py | 13 ++++++++--- src/hhd/device/legion_go/controllers.yml | 10 ++++++++- src/hhd/plugins/outputs.py | 2 ++ src/hhd/plugins/outputs.yml | 22 +++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 0682f07d..5f2d6dbf 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -59,6 +59,7 @@ def __init__( fake_timestamps: bool = False, enable_touchpad: bool = True, enable_rgb: bool = True, + sync_gyro: bool = False, ) -> None: self.available = False self.report = None @@ -70,6 +71,7 @@ def __init__( self.touchpad_method: TouchpadCorrectionType = touchpad_method self.enable_touchpad = enable_touchpad self.enable_rgb = enable_rgb + self.sync_gyro = sync_gyro self.ofs = ( DS5_INPUT_REPORT_BT_OFS if use_bluetooth else DS5_INPUT_REPORT_USB_OFS @@ -275,6 +277,9 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: def consume(self, events: Sequence[Event]): assert self.dev and self.report + # To fix gyro to mouse in latest steam + # only send updates when gyro sends a timestamp + send = not self.sync_gyro new_rep = bytearray(self.report) for ev in events: @@ -325,6 +330,7 @@ def consume(self, events: Sequence[Event]): ) new_rep[self.ofs + 35] = y >> 4 case "gyro_ts": + send = True new_rep[self.ofs + 27 : self.ofs + 31] = int( ev["value"] / DS5_EDGE_DELTA_TIME_NS ).to_bytes(8, byteorder="little", signed=False)[:4] @@ -393,8 +399,8 @@ def consume(self, events: Sequence[Event]): # Cache # Caching can cause issues since receivers expect reports # at least a couple of times per second - if new_rep == self.report and not self.fake_timestamps: - return + # if new_rep == self.report and not self.fake_timestamps: + # return self.report = new_rep if self.fake_timestamps: @@ -413,4 +419,5 @@ def consume(self, events: Sequence[Event]): if self.use_bluetooth: sign_crc32_inplace(self.report, DS5_INPUT_CRC32_SEED) - self.dev.send_input_report(self.report) + if send: + self.dev.send_input_report(self.report) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index c9d08469..20ff9fee 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -32,7 +32,7 @@ children: default: False gyro_fix: type: discrete - title: Gyro Fix (hz) + title: Gyro Hz hint: >- Adds polling to the legion go gyroscope, to fix the low polling rate (required for gyroscope support). Set to 0 to disable. @@ -62,6 +62,14 @@ children: l_is_select: "Left is Select" default: disabled + m2_to_mute: + type: bool + title: M2 As Mute + hint: >- + Maps the M2 to the mute button on Dualsense and the HAPPY_TRIGGER_20 + on Xbox. + default: False + select_reboots: type: bool title: Hold Select to Reboot diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 8ffabd1b..ee7bae3d 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -42,6 +42,7 @@ def get_outputs( enable_touchpad=uses_touch, enable_rgb=uses_leds, fake_timestamps=not motion, + sync_gyro=conf["dualsense_edge.sync_gyro"].to(bool), ) producers.append(d) consumers.append(d) @@ -55,6 +56,7 @@ def get_outputs( enable_touchpad=uses_touch, enable_rgb=uses_leds, fake_timestamps=not motion, + sync_gyro=conf["dualsense.sync_gyro"].to(bool), ) producers.append(d) consumers.append(d) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 13864e44..b8234e13 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -42,6 +42,17 @@ modes: to control them. default: True + sync_gyro: + type: bool + title: Gyro to Mouse Fix + hint: >- + In the latest steam update, `Gyro to Mouse [BETA]` misbehaves if a report is + sent without a new imu timestamp. + This option makes it so reports are sent only when there is a new + gyro timestamp, effectively limiting the responsiveness of the + controller to that of the IMU (e.g., for Legion Go 100hz instead of 400hz). + If the IMU is not working, this setting will break the controller. + bluetooth_mode: type: bool title: Bluetooth Mode @@ -72,6 +83,17 @@ modes: to control them. default: True + sync_gyro: + type: bool + title: Gyro to Mouse Fix + hint: >- + In the latest steam update, `Gyro to Mouse [BETA]` misbehaves if a report is + sent without a new imu timestamp. + This option makes it so reports are sent only when there is a new + gyro timestamp, effectively limiting the responsiveness of the + controller to that of the IMU (e.g., for Legion Go 100hz instead of 400hz). + If the IMU is not working, this setting will break the controller. + bluetooth_mode: type: bool title: Bluetooth Mode From 21c2796cc76dc233119eba4f6a0272c43383564a Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 12 Jan 2024 22:52:27 +0200 Subject: [PATCH 0273/1497] add default value to sync_gyro --- src/hhd/plugins/outputs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index b8234e13..afce2b63 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -52,6 +52,7 @@ modes: gyro timestamp, effectively limiting the responsiveness of the controller to that of the IMU (e.g., for Legion Go 100hz instead of 400hz). If the IMU is not working, this setting will break the controller. + default: False bluetooth_mode: type: bool @@ -93,6 +94,7 @@ modes: gyro timestamp, effectively limiting the responsiveness of the controller to that of the IMU (e.g., for Legion Go 100hz instead of 400hz). If the IMU is not working, this setting will break the controller. + default: False bluetooth_mode: type: bool From 3a87c9393bf866caafc5bea7d87d50a331860160 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 12 Jan 2024 23:02:59 +0200 Subject: [PATCH 0274/1497] add dmi check for win mini --- src/hhd/device/gpd/win/__init__.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index cc41cc13..92c18d85 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -17,13 +17,16 @@ class GpdWinControllersPlugin(HHDPlugin): priority = 18 log = "gpdw" - def __init__(self) -> None: + def __init__(self, dmi: str, name: str) -> None: self.t = None self.should_exit = None self.updated = Event() self.started = False self.t = None + self.dmi = dmi + self.name = f"powerbuttond@'{name}'" + def open( self, emit: Emitter, @@ -36,7 +39,7 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"gpd_win": load_relative_yaml("controllers.yml")}} base["controllers"]["gpd_win"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=False) + get_outputs_config(can_disable=True) ) return base @@ -76,13 +79,18 @@ def close(self): self.t = None +GPD_WMIS = {"G1618-04": "GPD Win 4", "G1617-01": "GPD Win Mini"} + + def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing # Match just product number, should be enough for now with open("/sys/devices/virtual/dmi/id/product_name") as f: - if not f.read().strip() == "G1618-04": + dmi = f.read().strip() + name = GPD_WMIS.get(dmi) + if not name: return [] - return [GpdWinControllersPlugin()] + return [GpdWinControllersPlugin(name, dmi)] From 92d63fb54b527463296ac434e07d96ec467b84b5 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 12 Jan 2024 22:21:01 +0100 Subject: [PATCH 0275/1497] disable can_disable until it can be fixed --- src/hhd/device/gpd/win/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 92c18d85..69f3ddea 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -39,7 +39,7 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"gpd_win": load_relative_yaml("controllers.yml")}} base["controllers"]["gpd_win"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=True) + get_outputs_config(can_disable=False) ) return base From 1cdc3b861bac81c7e52dd39fb35ac221f397f77a Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 13 Jan 2024 10:36:59 +0100 Subject: [PATCH 0276/1497] tweak display but still disable it --- pyproject.toml | 2 +- src/hhd/plugins/display/__init__.py | 4 ++-- src/hhd/plugins/display/settings.yml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3cd0e2a4..9278abce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ hhd = "hhd.__main__:main" [project.entry-points."hhd.plugins"] legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" -gpd_win = "hhd.device.gpd.win:autodetect" +# gpd_win = "hhd.device.gpd.win:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/plugins/display/__init__.py b/src/hhd/plugins/display/__init__.py index a7497632..55177fc6 100644 --- a/src/hhd/plugins/display/__init__.py +++ b/src/hhd/plugins/display/__init__.py @@ -40,7 +40,7 @@ def __init__(self) -> None: def settings(self) -> HHDSettings: if self.display: - return {"general": {"display": load_relative_yaml("settings.yml")}} + return {"system": {"display": load_relative_yaml("settings.yml")}} else: return {} @@ -70,7 +70,7 @@ def update(self, conf: Config): curr = None try: - requested = conf["general.display.brightness"].to(int | None) + requested = conf["system.display.brightness"].to(int | None) curr = int( int(read_sysfs(self.display, "brightness", None)) diff --git a/src/hhd/plugins/display/settings.yml b/src/hhd/plugins/display/settings.yml index a853b548..b2781e44 100644 --- a/src/hhd/plugins/display/settings.yml +++ b/src/hhd/plugins/display/settings.yml @@ -1,6 +1,6 @@ type: container -tags: [display] -title: Display Settings +tags: [system, non_steamdeck] +title: System hint: >- Basic display settings. Brightness (and framerate TBD). This pane is meant to replace @@ -8,7 +8,7 @@ hint: >- children: brightness: type: int - tags: [display_brightness] + tags: [display_brightness, non_steamdeck] title: Brightness hint: >- Sets the brightness level of a display. Only one display is supported and From 43832cc084583bd2a1868e749a97792d57a81a25 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 13 Jan 2024 10:42:40 +0100 Subject: [PATCH 0277/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9278abce..4a48f626 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.6" +version = "1.0.7" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From af783d3cd3b315dbc640694257fe28d31fcb0f90 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 13 Jan 2024 10:56:53 +0100 Subject: [PATCH 0278/1497] update readme with info for the ally --- readme.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/readme.md b/readme.md index 0e2e1975..99152225 100644 --- a/readme.md +++ b/readme.md @@ -173,6 +173,19 @@ sudo systemctl disable --now handycon.service sudo dnf remove handygccs-git # (verify ?) ``` +#### Issues on ROG Ally +Using the gyroscope on the Ally requires a kernel that is patched to enable IMU +support. +See [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes) for IMU the +patches. + +Without an up-to-date `asus-wmi` kernel driver the usb device of the controller +does not wake up after sleep so Handheld Daemon stops working. + +In addition, without a patched kernel with `asus-hid`/`asus-wmi`, LEDs might not +initialize properly (theoretically they should work). +This is currently under investigation. + ### ❄️ NixOS (experimental) Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: From d7353ed6444334cd249e5884d9e899ff6f8a5556 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 13 Jan 2024 11:24:37 +0100 Subject: [PATCH 0279/1497] remove adjustor stub --- src/hhd/plugins/adjustor/__init__.py | 0 src/hhd/plugins/adjustor/settings.yml | 34 --------------------------- 2 files changed, 34 deletions(-) delete mode 100644 src/hhd/plugins/adjustor/__init__.py delete mode 100644 src/hhd/plugins/adjustor/settings.yml diff --git a/src/hhd/plugins/adjustor/__init__.py b/src/hhd/plugins/adjustor/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/hhd/plugins/adjustor/settings.yml b/src/hhd/plugins/adjustor/settings.yml deleted file mode 100644 index 604e2299..00000000 --- a/src/hhd/plugins/adjustor/settings.yml +++ /dev/null @@ -1,34 +0,0 @@ -type: container -tags: [adj] -title: Adjustor -hint: >- - Configuration of the Performance Envelope of the selected system. - -children: - tdp_mode: - type: mode - tags: [adj_plat] - title: TDP Driver - hint: >- - How to control the overall TDP of the provided device. - Which modes are available will depend on the device and available drivers. - - cpu: - type: container - tags: [adj_cpu] - title: CPU Options - hint: >- - Stardard options provided by the CPU linux driver. - children: - # /sys/devices/system/cpu/smt/control - - - amd_gpu: - type: container - tags: [adj_gpu] - title: GPU Options - hint: >- - Standard options provided by the AMD GPU linux driver. - - children: - # power_dpm_force_performance_level \ No newline at end of file From 6cc5458d5c433f481a442edf3de9eab3b52fa819 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 14 Jan 2024 20:12:01 +0100 Subject: [PATCH 0280/1497] add name match for touchpad --- src/hhd/device/legion_go/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 714fa729..0553fb23 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -213,7 +213,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): d_touch = GenericGamepadEvdev( vid=[0x17EF], pid=[0x6182], - # name=[" Legion Controller for Windows Touchpad"], + name=[re.compile(".+Touchpad")], # " Legion Controller for Windows Touchpad" capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, btn_map=LGO_TOUCHPAD_BUTTON_MAP, axis_map=LGO_TOUCHPAD_AXIS_MAP, From 6cb83a9833eebc81bd27bed57eb68ece15cdd7a6 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Wed, 17 Jan 2024 16:29:41 +0100 Subject: [PATCH 0281/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4a48f626..aaaf32e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.7" +version = "1.0.8" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From e32f775f78777081c932771f21c215dd4cbd10d8 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 14 Jan 2024 20:36:14 +0800 Subject: [PATCH 0282/1497] add win mini to power button support devices --- src/hhd/plugins/powerbutton/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 60f7f223..3e6a48c7 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -20,6 +20,7 @@ class PowerButtonConfig(NamedTuple): PBC("Legion Go", "83E1"), PBC("ROG Ally", "ROG Ally RC71L_RC71L"), PBC("GPT Win 4", "G1618-04"), + PBC("GPD Win Mini", "G1617-01"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 7c5334f9500edc3634d542354adb0619fa5f8de4 Mon Sep 17 00:00:00 2001 From: Justin Weiss Date: Wed, 17 Jan 2024 22:24:14 -0800 Subject: [PATCH 0283/1497] Add IMU support for the GPD Win Mini This requires the BMI260 kernel module driver. --- pyproject.toml | 2 +- src/hhd/controller/physical/imu.py | 4 ++-- src/hhd/device/gpd/win/base.py | 23 +++++++++++++++++++++-- src/hhd/device/gpd/win/controllers.yml | 15 +++++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index aaaf32e9..e9c9f3d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ hhd = "hhd.__main__:main" [project.entry-points."hhd.plugins"] legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" -# gpd_win = "hhd.device.gpd.win:autodetect" +gpd_win = "hhd.device.gpd.win:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 69f6071f..cbab2757 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -32,7 +32,7 @@ class DeviceInfo(NamedTuple): ACCEL_NAMES = ["accel_3d"] GYRO_NAMES = ["gyro_3d"] -IMU_NAMES = ["bmi323-imu"] +IMU_NAMES = ["bmi323-imu", "BMI0160"] ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), @@ -74,7 +74,7 @@ def find_sensor(sensors: Sequence[str]): with open(name_fn, "r") as f: name = f.read().strip() - if name in sensors: + if any(sensor in name for sensor in sensors): logger.info(f"Found device '{name}' at\n{sensor_dir}") return sensor_dir, name diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 184bd34d..73df6ec5 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -4,11 +4,12 @@ from threading import Event as TEvent from typing import Sequence -from hhd.controller import Event, Multiplexer, can_read +from hhd.controller import Axis, Event, Multiplexer, can_read from hhd.controller.base import Event from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.imu import CombinedImu from hhd.plugins import Config, Context, Emitter, get_outputs ERROR_DELAY = 1 @@ -21,6 +22,16 @@ GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E +GPD_WIN_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_x", "anglvel", 1, None), + "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} + BACK_BUTTON_DELAY = 0.1 # /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 @@ -152,7 +163,10 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): debug = conf.get("debug", False) # Output - d_producers, d_outs, d_params = get_outputs(conf["controller_mode"], None, False) + d_producers, d_outs, d_params = get_outputs(conf["controller_mode"], None, conf["imu"].to(bool)) + + # Imu + d_imu = CombinedImu(conf["imu_hz"].to(int), GPD_WIN_MAPPINGS, gyro_scale="0.000266") # Inputs d_xinput = GenericGamepadEvdev( @@ -190,6 +204,9 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 400 + if conf["imu"].to(bool): + REPORT_FREQ_MAX = max(REPORT_FREQ_MAX, conf["imu_hz"].to(float)) + REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX @@ -207,6 +224,8 @@ def prepare(m): try: d_vend.open() prepare(d_xinput) + if conf.get("imu", False): + prepare(d_imu) prepare(d_kbd_1) for d in d_producers: prepare(d) diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index a952e56f..c544f454 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -15,6 +15,21 @@ children: # # Common settings # + imu: + type: bool + title: Motion Support + hint: >- + Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) + default: True + + imu_hz: + type: discrete + title: Motion Hz + hint: >- + Sets the sampling frequency for the IMU. + Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. + options: [50, 100, 200, 400, 800, 1600] + default: 400 debug: type: bool From eef65b7f9b81fed406ff90ecfd95c87b1944e939 Mon Sep 17 00:00:00 2001 From: Justin Weiss Date: Thu, 18 Jan 2024 22:38:00 -0800 Subject: [PATCH 0284/1497] Add support for virtual / controller trackpad to Win Mini This enables tap-to-click when using the virtual trackpad. I haven't been able to get hold / long press actions to work. --- src/hhd/device/gpd/win/__init__.py | 9 ++++- src/hhd/device/gpd/win/base.py | 51 +++++++++++++++++++++++--- src/hhd/device/gpd/win/const.py | 16 ++++++++ src/hhd/device/gpd/win/controllers.yml | 2 + 4 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 src/hhd/device/gpd/win/const.py diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 69f3ddea..877c97ee 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -8,6 +8,7 @@ HHDPlugin, load_relative_yaml, get_outputs_config, + get_touchpad_config, ) from hhd.plugins.settings import HHDSettings @@ -41,6 +42,12 @@ def settings(self) -> HHDSettings: base["controllers"]["gpd_win"]["children"]["controller_mode"].update( get_outputs_config(can_disable=False) ) + + if self.dmi == "G1617-01": + base["controllers"]["gpd_win"]["children"]["touchpad"] = get_touchpad_config() + else: + del base["controllers"]["gpd_win"]["children"]["touchpad"] + return base def update(self, conf: Config): @@ -93,4 +100,4 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if not name: return [] - return [GpdWinControllersPlugin(name, dmi)] + return [GpdWinControllersPlugin(dmi, name)] diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 73df6ec5..3303f38b 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -1,17 +1,23 @@ import logging +import re import select import time from threading import Event as TEvent from typing import Sequence from hhd.controller import Axis, Event, Multiplexer, can_read -from hhd.controller.base import Event +from hhd.controller.base import Event, TouchpadAction from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.imu import CombinedImu from hhd.plugins import Config, Context, Emitter, get_outputs +from .const import ( + GPD_TOUCHPAD_AXIS_MAP, + GPD_TOUCHPAD_BUTTON_MAP, +) + ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -21,6 +27,8 @@ GPD_WIN_4_PID = 0x0135 GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E +TOUCHPAD_PID = 0x0255 +TOUCHPAD_VID = 0x093A GPD_WIN_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), @@ -161,9 +169,12 @@ def plugin_run( def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): debug = conf.get("debug", False) + has_touchpad = "touchpad" in conf # Output - d_producers, d_outs, d_params = get_outputs(conf["controller_mode"], None, conf["imu"].to(bool)) + d_producers, d_outs, d_params = get_outputs( + conf["controller_mode"], conf["touchpad"] if has_touchpad else None, conf["imu"].to(bool) + ) # Imu d_imu = CombinedImu(conf["imu_hz"].to(int), GPD_WIN_MAPPINGS, gyro_scale="0.000266") @@ -178,6 +189,18 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): hide=True, ) + if has_touchpad: + d_touch = GenericGamepadEvdev( + vid=[TOUCHPAD_VID], + pid=[TOUCHPAD_PID], + name=[re.compile(".+Touchpad")], # "PNP0C50:00 093A:0255 Touchpad" + capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, + btn_map=GPD_TOUCHPAD_BUTTON_MAP, + axis_map=GPD_TOUCHPAD_AXIS_MAP, + aspect_ratio=1.333, + required=False, + ) + # Vendor d_vend = GpdWin4Hidraw( vid=[GPD_WIN_4_VID], @@ -196,10 +219,24 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, ) - multiplexer = Multiplexer( - trigger="analog_to_discrete", - dpad="analog_to_discrete", - ) + if has_touchpad: + touch_actions = ( + conf["touchpad.controller"] + if conf["touchpad.mode"].to(TouchpadAction) == "controller" + else conf["touchpad.emulation"] + ) + + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + touchpad_short=touch_actions["short"].to(TouchpadAction), + touchpad_right=touch_actions["hold"].to(TouchpadAction), + ) + else: + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + ) REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 400 @@ -226,6 +263,8 @@ def prepare(m): prepare(d_xinput) if conf.get("imu", False): prepare(d_imu) + if has_touchpad and d_params["uses_touch"]: + prepare(d_touch) prepare(d_kbd_1) for d in d_producers: prepare(d) diff --git a/src/hhd/device/gpd/win/const.py b/src/hhd/device/gpd/win/const.py new file mode 100644 index 00000000..5451c2b0 --- /dev/null +++ b/src/hhd/device/gpd/win/const.py @@ -0,0 +1,16 @@ +from hhd.controller import Axis, Button, Configuration +from hhd.controller.physical.evdev import B, to_map + +GPD_TOUCHPAD_BUTTON_MAP: dict[int, Button] = to_map( + { + "touchpad_touch": [B("BTN_TOOL_FINGER")], # also BTN_TOUCH + "touchpad_right": [B("BTN_TOOL_DOUBLETAP")], + } +) + +GPD_TOUCHPAD_AXIS_MAP: dict[int, Axis] = to_map( + { + "touchpad_x": [B("ABS_X")], # also ABS_MT_POSITION_X + "touchpad_y": [B("ABS_Y")], # also ABS_MT_POSITION_Y + } +) diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index c544f454..dedf4639 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -31,6 +31,8 @@ children: options: [50, 100, 200, 400, 800, 1600] default: 400 + touchpad: + debug: type: bool title: Debug From 25e4345ba493aea80408cc1eda6bd797d89a229a Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 19 Jan 2024 19:45:07 +0100 Subject: [PATCH 0285/1497] fix forced sampler regression --- src/hhd/controller/physical/imu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index cbab2757..064fa009 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -32,7 +32,7 @@ class DeviceInfo(NamedTuple): ACCEL_NAMES = ["accel_3d"] GYRO_NAMES = ["gyro_3d"] -IMU_NAMES = ["bmi323-imu", "BMI0160"] +IMU_NAMES = ["bmi323-imu", "BMI0160", "BMI0260"] ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), @@ -365,7 +365,7 @@ def open(self): self.fds = [] self.paths = [] for d in self.devices: - f, _ = find_sensor(d) + f, _ = find_sensor([d]) if not f: continue if "accel" in d: From a4792090def7d617b57c22b30ce529d50e6beaf3 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 19 Jan 2024 19:49:03 +0100 Subject: [PATCH 0286/1497] hide leds, fix unbound linter error --- src/hhd/device/gpd/win/__init__.py | 6 ++++-- src/hhd/device/gpd/win/base.py | 21 ++++++++++----------- src/hhd/plugins/outputs.py | 9 ++++++--- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 877c97ee..4b336251 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -40,11 +40,13 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"gpd_win": load_relative_yaml("controllers.yml")}} base["controllers"]["gpd_win"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=False) + get_outputs_config(can_disable=False, has_leds=False) ) if self.dmi == "G1617-01": - base["controllers"]["gpd_win"]["children"]["touchpad"] = get_touchpad_config() + base["controllers"]["gpd_win"]["children"][ + "touchpad" + ] = get_touchpad_config() else: del base["controllers"]["gpd_win"]["children"]["touchpad"] diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 3303f38b..8e03a118 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -189,17 +189,16 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): hide=True, ) - if has_touchpad: - d_touch = GenericGamepadEvdev( - vid=[TOUCHPAD_VID], - pid=[TOUCHPAD_PID], - name=[re.compile(".+Touchpad")], # "PNP0C50:00 093A:0255 Touchpad" - capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, - btn_map=GPD_TOUCHPAD_BUTTON_MAP, - axis_map=GPD_TOUCHPAD_AXIS_MAP, - aspect_ratio=1.333, - required=False, - ) + d_touch = GenericGamepadEvdev( + vid=[TOUCHPAD_VID], + pid=[TOUCHPAD_PID], + name=[re.compile(".+Touchpad")], # "PNP0C50:00 093A:0255 Touchpad" + capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, + btn_map=GPD_TOUCHPAD_BUTTON_MAP, + axis_map=GPD_TOUCHPAD_AXIS_MAP, + aspect_ratio=1.333, + required=False, + ) # Vendor d_vend = GpdWin4Hidraw( diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index ee7bae3d..0a8d9212 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -34,7 +34,7 @@ def get_outputs( match controller: case "dualsense_edge": uses_touch = touchpad == "controller" - uses_leds = conf["dualsense_edge.led_support"].to(bool) + uses_leds = conf.get("dualsense_edge.led_support", False) d = Dualsense( touchpad_method=correction, edge_mode=True, @@ -48,7 +48,7 @@ def get_outputs( consumers.append(d) case "dualsense": uses_touch = touchpad == "controller" - uses_leds = conf["dualsense.led_support"].to(bool) + uses_leds = conf.get("dualsense.led_support", False) d = Dualsense( touchpad_method=correction, edge_mode=False, @@ -100,8 +100,11 @@ def get_outputs( ) -def get_outputs_config(can_disable: bool = False): +def get_outputs_config(can_disable: bool = False, has_leds: bool = True): s = load_relative_yaml("outputs.yml") if not can_disable: del s["modes"]["disabled"] + if not has_leds: + del s["modes"]["dualsense"]["children"]["led_support"] + del s["modes"]["dualsense_edge"]["children"]["led_support"] return s From 8e02e6be86c3098d341cfb57abd3d46ed8295219 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 19 Jan 2024 20:19:01 +0100 Subject: [PATCH 0287/1497] add touchpad hold action, use position for tap to click --- src/hhd/controller/base.py | 69 ++++++++++++++++++++++++++++++---- src/hhd/device/gpd/win/base.py | 6 ++- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 2f3a5eb9..dedf7ff5 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -246,6 +246,7 @@ def __init__( trigger_discrete_lvl: float = 0.99, touchpad_short: TouchpadAction = "disabled", touchpad_right: TouchpadAction = "left_click", + touchpad_hold: TouchpadAction = "disabled", r3_to_share: bool = False, select_reboots: bool = False, ) -> None: @@ -258,12 +259,15 @@ def __init__( self.trigger_discrete_lvl = trigger_discrete_lvl self.share_to_qam = share_to_qam self.touchpad_short = touchpad_short + self.touchpad_hold = touchpad_hold self.touchpad_right = touchpad_right self.select_reboots = select_reboots self.r3_to_share = r3_to_share self.state = {} - self.touchpad_down = time.perf_counter() + self.touchpad_x = 0 + self.touchpad_y = 0 + self.touchpad_down = None self.queue: list[tuple[Event | Literal["reboot"], float]] = [] self.select_pressed = None self.select_is_held = False @@ -273,6 +277,7 @@ def __init__( def process(self, events: Sequence[Event]): out: list[Event] = [] status_events = set() + touched = False curr = time.perf_counter() while len(self.queue) and self.queue[0][1] < curr: @@ -320,6 +325,40 @@ def process(self, events: Sequence[Event]): ) self.queue.append(("reboot", curr)) + if ( + self.touchpad_hold != "disabled" + and self.touchpad_down + and curr - self.touchpad_down[0] > 0.8 + and abs(self.touchpad_down[1] - self.touchpad_x) < 0.1 + and abs(self.touchpad_down[2] - self.touchpad_y) < 0.1 + ): + action = ( + "touchpad_left" + if self.touchpad_hold == "left_click" + else "touchpad_right" + ) + self.queue.append( + ( + { + "type": "button", + "code": action, + "value": True, + }, + curr, + ) + ) + self.queue.append( + ( + { + "type": "button", + "code": action, + "value": False, + }, + curr + self.QAM_DELAY, + ) + ) + self.touchpad_down = None + for ev in events: match ev["type"]: case "axis": @@ -357,6 +396,10 @@ def process(self, events: Sequence[Event]): "value": ev["value"] < -0.5, } ) + if ev["code"] == "touchpad_x": + self.touchpad_x = ev["value"] + if ev["code"] == "touchpad_y": + self.touchpad_y = ev["value"] case "button": if self.trigger == "discrete_to_analog" and ev["code"] in ( "lt", @@ -448,11 +491,13 @@ def process(self, events: Sequence[Event]): pass if ev["code"] == "touchpad_touch": - if ev["value"]: - self.touchpad_down = curr - elif ( + if ( self.touchpad_short != "disabled" - and curr - self.touchpad_down < 0.14 + and not ev["value"] + and self.touchpad_down + and curr - self.touchpad_down[0] < 0.2 + and abs(self.touchpad_down[1] - self.touchpad_x) < 0.04 + and abs(self.touchpad_down[2] - self.touchpad_y) < 0.04 ): action = ( "touchpad_left" @@ -479,10 +524,13 @@ def process(self, events: Sequence[Event]): curr + self.QAM_DELAY, ) ) + + if ev["value"]: + touched = True + else: + self.touchpad_down = None # append A after QAM_DELAY s - # TODO: Make it a proper config option - # Remap M2 to the mute button if self.r3_to_share and ev["code"] == "extra_r3": ev["code"] = "share" case "led": @@ -504,6 +552,13 @@ def process(self, events: Sequence[Event]): case "is_connected_left" | "is_connected_right": status_events.add("is_connected") + if touched: + self.touchpad_down = ( + curr, + self.touchpad_x, + self.touchpad_y, + ) + for s in status_events: match s: case "battery": diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 8e03a118..82c70cc9 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -173,7 +173,9 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): # Output d_producers, d_outs, d_params = get_outputs( - conf["controller_mode"], conf["touchpad"] if has_touchpad else None, conf["imu"].to(bool) + conf["controller_mode"], + conf["touchpad"] if has_touchpad else None, + conf["imu"].to(bool), ) # Imu @@ -229,7 +231,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): trigger="analog_to_discrete", dpad="analog_to_discrete", touchpad_short=touch_actions["short"].to(TouchpadAction), - touchpad_right=touch_actions["hold"].to(TouchpadAction), + touchpad_hold=touch_actions["hold"].to(TouchpadAction), ) else: multiplexer = Multiplexer( From abe34c6841476f5b41afe30ee18ff3e510402d68 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 20 Jan 2024 18:02:42 +0100 Subject: [PATCH 0288/1497] bump version and update readme --- pyproject.toml | 2 +- readme.md | 94 ++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 76 insertions(+), 20 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e9c9f3d2..de45cb2f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.0.8" +version = "1.1.0" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/readme.md b/readme.md index 99152225..015bca4d 100644 --- a/readme.md +++ b/readme.md @@ -14,7 +14,12 @@ mainstream controllers (xbox Elite, DS4, PS5, Joycons), so that users of devices can pick the best target for their device and its controls, which may change depending on the game. -*Current Features (for both ROG Ally and Legion Go)*: +*Supported Devices*: +- Legion Go +- ROG Ally +- GPD Win 4 and Mini + +*Current Features*: - Fully functional DualSense and Dualsense Edge emulation - All buttons supported - Rumble feedback @@ -33,7 +38,7 @@ depending on the game. - UI based Configuration - Generic API that can be used from bash scripts (through `curl`) - Decky Plugin - - Webpac + - Webapp on https://hhd.dev and through Electron - Built-in updater. *Planned Features (in this order)*: @@ -88,6 +93,15 @@ curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh Then, reboot and go to [hhd.dev](https://hhd.dev) to configure or read more in the [configuration section](#configuration). +#### Using an older version +If you find any issues with the latest version of Handheld Daemon +you can use any version by specifying it with the command below. +```bash +sudo systemctl stop hhd_local@$(whoami) +~/.local/share/hhd/venv/bin/pip install hhd==1.0.6 +sudo systemctl start hhd_local@$(whoami) +``` + ### Manual Local Installation You can also install Handheld Daemon using a local package, which enables auto-updating. These are the same steps as done in the Automatic Install (also see @@ -116,6 +130,15 @@ sudo systemctl enable hhd_local@$(whoami) sudo reboot ``` +#### Using an older version +If you find any issues with the latest version of Handheld Daemon +you can use any version by specifying it with the command below. +```bash +sudo systemctl stop hhd_local@$(whoami) +~/.local/share/hhd/venv/bin/pip install hhd==1.0.6 +sudo systemctl start hhd_local@$(whoami) +``` + #### Update Instructions Of course, you will want to update Handheld Daemon to catch up to latest features. You can either use the commands below or press `Update (Stable)` in one of the UIs @@ -139,6 +162,45 @@ rm -r ~/.config/hhd ``` ### Common Issues with Install +#### Extra steps for ROG Ally +Using the gyroscope on the Ally requires a kernel that is patched to enable IMU +support. +See [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes) for IMU the +patches themselves (IMU 0001-0005) and Fedora kernel binaries +(install with `sudo rmp -i .rpm`) +and [rog-ally-gaming/linux-chimeraos](https://github.com/rog-ally-gaming/linux-chimeraos) +for Arch distribution binaries (install with `sudo pacman -U .tar.xz`; except 6.1 kernels). + +If you compile your own kernel, your kernel config should also enable the +modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and +`High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. +Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. + +Without an up-to-date `asus-wmi` kernel driver the usb device of the controller +does not wake up after sleep so Handheld Daemon stops working. + +In addition, without a patched kernel with `asus-hid`/`asus-wmi`, LEDs might not +initialize properly (theoretically they should work). +This is currently under investigation. + +#### Extra steps GPD Win Devices +In order for the back buttons in GPD Win Devices to work, you need to map the +back buttons to Left: Pause, Right: Printscreen using Windows. +This is the default mapping, so if you never remapped them using Windows you +will not have to. +Handheld Daemon automatically handles the interval to enable being able to hold +the button. + +Here is how the button settings should look: +``` +Left-key: PrtSc + 0ms + NC + 0ms + NC + 0ms + NC +Right-key: Pausc + 0ms + NC + 0ms + NC + 0ms + NC +``` + +To use the gyro, you will need a [dkms package](github.com/hhd-dev/bmi260) +for the Bosch 260 IMU Driver. +Follow the instructions in that repository to install it. + #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara @@ -173,19 +235,6 @@ sudo systemctl disable --now handycon.service sudo dnf remove handygccs-git # (verify ?) ``` -#### Issues on ROG Ally -Using the gyroscope on the Ally requires a kernel that is patched to enable IMU -support. -See [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes) for IMU the -patches. - -Without an up-to-date `asus-wmi` kernel driver the usb device of the controller -does not wake up after sleep so Handheld Daemon stops working. - -In addition, without a patched kernel with `asus-hid`/`asus-wmi`, LEDs might not -initialize properly (theoretically they should work). -This is currently under investigation. - ### ❄️ NixOS (experimental) Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: @@ -295,14 +344,14 @@ reason, and some games read the button order wrong. X-input requires a special udev rule to work, see below. -### Other gamepad modes -HHD remaps the x-input mode of the Legion Go controllers into a PS5 controller. +### Other Legion Go gamepad modes +Handheld Daemon remaps the x-input mode of the Legion Go controllers into a PS5 controller. All other modes function as normal. -In addition, HHD adds a shortcuts device that allows remapping the back buttons +In addition, Handheld Daemon adds a shortcuts device that allows remapping the back buttons and all Legion L, R + button combinations into shortcuts that will work accross all modes. -### I can not see any controllers before or after installing HHD +### I can not see any Legion Controllers controllers before or after installing Your kernel needs to know to use the `xpad` driver for the Legion Go's controllers. @@ -387,6 +436,13 @@ Another set of obscure issues occur depending on how apps hook to the Dualsense Certain versions of gamescope and certain games do not support the edge controller, so switch to `Dualsense` or `Xbox` emulation modes if you are having issues. +If Steam itself is broken and can not see the controllers properly (e.g., you +can not see led/gyro settings or the Edge controller mapping is wrong), you +should update your distribution and if that does not fix it consider re-installing. +There are certain gamescope/distro issues that cause this and we are unsure of +the cause at this moment. +ChimeraOS 44 and certain versions of Nobara 38 have this issue. + ### Disabling Dualsense touchpad The Dualsense touchpad may interfere with games or steam input. You can disable it with the following udev rule. From f2a34a4d541ad30cce9af8920324d5d487d938ff Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 20 Jan 2024 18:15:25 +0100 Subject: [PATCH 0289/1497] update install instructions --- readme.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 015bca4d..2e69fb1f 100644 --- a/readme.md +++ b/readme.md @@ -75,7 +75,7 @@ Then, update from Decky or the UI. > If your distro uses HandyGCCS/Handycon to fix certain key bindings by default > you need to uninstall it. Disabling it is not enough, since it is autostarted > by certain sessions (such as `gamescope-session-plus`). -> This includes both ChimeraOS and Nobara (see [Installation Issues](#issues)). +> This includes both ChimeraOS and Nobara (see [Common Issues after Install](#issues)). ```bash # Install @@ -86,6 +86,7 @@ curl -L https://github.com/hhd-dev/hhd/raw/master/uninstall.sh | sh ``` You can also install the Decky plugin. +Having Decky installed is a prerequisite ([instructions](https://github.com/SteamDeckHomebrew/decky-loader#-installation)). ```bash curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh ``` @@ -93,6 +94,14 @@ curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh Then, reboot and go to [hhd.dev](https://hhd.dev) to configure or read more in the [configuration section](#configuration). +> Before creating an issue, make sure you are using the latest Handheld Daemon +> version and that you read the extra information for each setting in +> either [hhd.dev](https://hhd.dev) or the `state.yml` file. +> +> The context is required to understand what each setting does and is +> not included in the current version of the Decky Plugin +> due to UI limitations. + #### Using an older version If you find any issues with the latest version of Handheld Daemon you can use any version by specifying it with the command below. @@ -105,12 +114,12 @@ sudo systemctl start hhd_local@$(whoami) ### Manual Local Installation You can also install Handheld Daemon using a local package, which enables auto-updating. These are the same steps as done in the Automatic Install (also see -[Installation Issues](#issues)). +[Common Issues after Install](#issues)). ```bash -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -# !!!! Delete HandyGCCS to avoid issues if you have it. !!!! -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# !!!! Uninstall HandyGCCS to avoid issues if you have it. !!!! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # Install Handheld Daemon to ~/.local/share/hhd mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd From b14fd26a0d3ac542a41cf7483d894d60f56e7b11 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 20 Jan 2024 20:26:45 +0100 Subject: [PATCH 0290/1497] add gpd win max 2 --- src/hhd/device/gpd/win/__init__.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 4b336251..e900890f 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -12,6 +12,14 @@ ) from hhd.plugins.settings import HHDSettings +GPD_WMIS = { + "G1618-04": "GPD Win 4", + "G1617-01": "GPD Win Mini", + "G1619-05": "GPD Win Max 2 2023", +} + +GPD_TOUCHPAD = ["G1617-01", "G1619-05"] + class GpdWinControllersPlugin(HHDPlugin): name = "gpd_win_controllers" @@ -43,7 +51,7 @@ def settings(self) -> HHDSettings: get_outputs_config(can_disable=False, has_leds=False) ) - if self.dmi == "G1617-01": + if self.dmi in GPD_TOUCHPAD: base["controllers"]["gpd_win"]["children"][ "touchpad" ] = get_touchpad_config() @@ -88,9 +96,6 @@ def close(self): self.t = None -GPD_WMIS = {"G1618-04": "GPD Win 4", "G1617-01": "GPD Win Mini"} - - def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing From f5b8672afe8dc186c75f4c921f13891e010312a8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 20 Jan 2024 20:28:51 +0100 Subject: [PATCH 0291/1497] add gpd win max 2023 to powerbutton handler --- src/hhd/plugins/powerbutton/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 3e6a48c7..f8620372 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -21,6 +21,7 @@ class PowerButtonConfig(NamedTuple): PBC("ROG Ally", "ROG Ally RC71L_RC71L"), PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), + PBC("GPD Win Max 2 2023", "G1619-05"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From b577080d4214066e4eae9cfdb1a853891f820178 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 20 Jan 2024 20:59:07 +0100 Subject: [PATCH 0292/1497] add win max 2 touchpad --- src/hhd/device/gpd/win/base.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 82c70cc9..e57975f3 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -191,9 +191,11 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): hide=True, ) + # "PNP0C50:00 0911:5288 Touchpad" on Win Max 2 2023 + # "PNP0C50:00 093A:0255 Touchpad" on Win Mini d_touch = GenericGamepadEvdev( - vid=[TOUCHPAD_VID], - pid=[TOUCHPAD_PID], + vid=[TOUCHPAD_VID, 0x0911], + pid=[TOUCHPAD_PID, 0x5288], name=[re.compile(".+Touchpad")], # "PNP0C50:00 093A:0255 Touchpad" capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, btn_map=GPD_TOUCHPAD_BUTTON_MAP, From ee58cb92c27715844a6f97bab8bcc405086a9bc9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 22:04:10 +0100 Subject: [PATCH 0293/1497] add hrtimer to gpd win --- src/hhd/controller/physical/imu.py | 6 ++++++ src/hhd/device/gpd/win/__init__.py | 11 ++++++++++- src/hhd/device/gpd/win/base.py | 17 +++++++++++++---- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 064fa009..3f4f8e31 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -408,6 +408,7 @@ def __init__( self.freq = freq self.devices = devices self.old_triggers = {} + self.opened = False def open(self): import subprocess @@ -435,6 +436,7 @@ def open(self): f"Could not create 'hhd' trigger. IMU will not work. Error:\n{e}" ) return + self.opened = True # Find trigger trig = None @@ -475,6 +477,10 @@ def open(self): f.write(f"hhd") def close(self): + if not self.opened: + return + self.opened = False + for trig, (name, buff) in self.old_triggers.items(): try: with open(buff, "w") as f: diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index e900890f..bc2a9fcd 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -18,6 +18,8 @@ "G1619-05": "GPD Win Max 2 2023", } +GPD_CONFS = {"G1619-05": {"hrtimer": True}} + GPD_TOUCHPAD = ["G1617-01", "G1619-05"] @@ -83,7 +85,14 @@ def start(self, conf): self.should_exit = Event() self.t = Thread( target=plugin_run, - args=(conf, self.emit, self.context, self.should_exit, self.updated), + args=( + conf, + self.emit, + self.context, + self.should_exit, + self.updated, + GPD_CONFS.get(self.dmi, {}), + ), ) self.t.start() diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index e57975f3..2d45220e 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -10,7 +10,7 @@ from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.imu import CombinedImu +from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs from .const import ( @@ -149,13 +149,18 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: def plugin_run( - conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent + conf: Config, + emit: Emitter, + context: Context, + should_exit: TEvent, + updated: TEvent, + dconf: dict, ): while not should_exit.is_set(): try: logger.info("Launching emulated controller.") updated.clear() - controller_loop(conf.copy(), should_exit, updated) + controller_loop(conf.copy(), should_exit, updated, dconf) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( @@ -167,7 +172,7 @@ def plugin_run( time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): debug = conf.get("debug", False) has_touchpad = "touchpad" in conf @@ -180,6 +185,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): # Imu d_imu = CombinedImu(conf["imu_hz"].to(int), GPD_WIN_MAPPINGS, gyro_scale="0.000266") + d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) # Inputs d_xinput = GenericGamepadEvdev( @@ -265,6 +271,8 @@ def prepare(m): d_vend.open() prepare(d_xinput) if conf.get("imu", False): + if dconf.get("hrtimer", False): + d_timer.open() prepare(d_imu) if has_touchpad and d_params["uses_touch"]: prepare(d_touch) @@ -317,5 +325,6 @@ def prepare(m): raise finally: d_vend.close(True) + d_timer.close() for d in reversed(devs): d.close(True) From 9f09d7b5936d52181cb60cf92b098a0d9d4ad8a1 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 22:08:36 +0100 Subject: [PATCH 0294/1497] cleanup touchpad pid vid --- src/hhd/device/gpd/win/base.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 2d45220e..5f707e5c 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -27,8 +27,11 @@ GPD_WIN_4_PID = 0x0135 GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -TOUCHPAD_PID = 0x0255 + TOUCHPAD_VID = 0x093A +TOUCHPAD_PID = 0x0255 +TOUCHPAD_VID_2 = 0x0911 +TOUCHPAD_PID_2 = 0x5288 GPD_WIN_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), @@ -200,9 +203,9 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # "PNP0C50:00 0911:5288 Touchpad" on Win Max 2 2023 # "PNP0C50:00 093A:0255 Touchpad" on Win Mini d_touch = GenericGamepadEvdev( - vid=[TOUCHPAD_VID, 0x0911], - pid=[TOUCHPAD_PID, 0x5288], - name=[re.compile(".+Touchpad")], # "PNP0C50:00 093A:0255 Touchpad" + vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], + pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], + name=[re.compile(".+Touchpad")], capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, btn_map=GPD_TOUCHPAD_BUTTON_MAP, axis_map=GPD_TOUCHPAD_AXIS_MAP, From f57bef7c47e75246e59af817a8dd05897a376783 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 23:15:56 +0100 Subject: [PATCH 0295/1497] add capability check to back button keyboard --- src/hhd/device/gpd/win/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 5f707e5c..429912eb 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -225,7 +225,8 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d d_kbd_1 = GenericGamepadEvdev( vid=[GPD_WIN_4_VID], pid=[GPD_WIN_4_PID], - # capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, + # TODO: Verify capability check does not cause regressions + capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, required=False, grab=True, # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, From be77213b1f8e5cbd1fa7a76738804a3a2938a32e Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 23:27:36 +0100 Subject: [PATCH 0296/1497] add events for gpd touchpad --- src/hhd/device/gpd/win/const.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/gpd/win/const.py b/src/hhd/device/gpd/win/const.py index 5451c2b0..92d334bd 100644 --- a/src/hhd/device/gpd/win/const.py +++ b/src/hhd/device/gpd/win/const.py @@ -4,7 +4,8 @@ GPD_TOUCHPAD_BUTTON_MAP: dict[int, Button] = to_map( { "touchpad_touch": [B("BTN_TOOL_FINGER")], # also BTN_TOUCH - "touchpad_right": [B("BTN_TOOL_DOUBLETAP")], + "touchpad_right": [B("BTN_TOOL_DOUBLETAP"), B("BTN_RIGHT")], + "touchpad_left": [B("BTN_MOUSE")], } ) From 8be64261017fdf4c29597c0b7e82f7e3ac83705f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 23:47:24 +0100 Subject: [PATCH 0297/1497] stop spamming the log in mouse mode --- src/hhd/device/gpd/win/base.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 429912eb..ac8b1363 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -7,6 +7,7 @@ from hhd.controller import Axis, Event, Multiplexer, can_read from hhd.controller.base import Event, TouchpadAction +from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.evdev import GenericGamepadEvdev @@ -159,7 +160,15 @@ def plugin_run( updated: TEvent, dconf: dict, ): + first = True while not should_exit.is_set(): + devs = enumerate_unique(GAMEPAD_VID, GAMEPAD_PID) + if not devs: + time.sleep(ERROR_DELAY) + if first: + logger.warning("Controller in Mouse mode. Waiting...") + first = False + try: logger.info("Launching emulated controller.") updated.clear() @@ -169,6 +178,7 @@ def plugin_run( logger.error( f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." ) + first = True # Raise exception if conf.get("debug", False): raise e From 92556bfd584017a7bc73ec08c1f376a02bc65c04 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 23:47:50 +0100 Subject: [PATCH 0298/1497] add continue --- src/hhd/device/gpd/win/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index ac8b1363..490057e7 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -168,6 +168,7 @@ def plugin_run( if first: logger.warning("Controller in Mouse mode. Waiting...") first = False + continue try: logger.info("Launching emulated controller.") From 3ac04a6cdaebb14192eb43e4eebd85862ae2e6ac Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 21 Jan 2024 23:57:58 +0100 Subject: [PATCH 0299/1497] tweak controller check --- src/hhd/device/gpd/win/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 490057e7..cbe90d3b 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -162,8 +162,8 @@ def plugin_run( ): first = True while not should_exit.is_set(): - devs = enumerate_unique(GAMEPAD_VID, GAMEPAD_PID) - if not devs: + devs = enumerate_unique(GAMEPAD_VID) + if not any(d.get("product_id", None) == GAMEPAD_PID for d in devs): time.sleep(ERROR_DELAY) if first: logger.warning("Controller in Mouse mode. Waiting...") From 0129925927d5787dacdb490a7c61ac18ae3aa7ef Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 22 Jan 2024 00:04:32 +0100 Subject: [PATCH 0300/1497] tweak check again --- src/hhd/device/gpd/win/base.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index cbe90d3b..c3fdd903 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -162,8 +162,14 @@ def plugin_run( ): first = True while not should_exit.is_set(): - devs = enumerate_unique(GAMEPAD_VID) - if not any(d.get("product_id", None) == GAMEPAD_PID for d in devs): + devs = enumerate_unique() + if not any( + ( + d.get("vendor_id", None) == GAMEPAD_VID + and d.get("product_id", None) == GAMEPAD_PID + ) + for d in devs + ): time.sleep(ERROR_DELAY) if first: logger.warning("Controller in Mouse mode. Waiting...") From 5180b403f29bed6c34c2fdaf3c8a1ee0c4e96850 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 22 Jan 2024 00:12:27 +0100 Subject: [PATCH 0301/1497] switch to evdev based check --- src/hhd/device/gpd/win/base.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index c3fdd903..7d7a18c4 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -5,19 +5,17 @@ from threading import Event as TEvent from typing import Sequence +import evdev + from hhd.controller import Axis, Event, Multiplexer, can_read from hhd.controller.base import Event, TouchpadAction -from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC -from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .const import ( - GPD_TOUCHPAD_AXIS_MAP, - GPD_TOUCHPAD_BUTTON_MAP, -) +from .const import GPD_TOUCHPAD_AXIS_MAP, GPD_TOUCHPAD_BUTTON_MAP ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -162,14 +160,17 @@ def plugin_run( ): first = True while not should_exit.is_set(): - devs = enumerate_unique() - if not any( - ( - d.get("vendor_id", None) == GAMEPAD_VID - and d.get("product_id", None) == GAMEPAD_PID - ) - for d in devs - ): + found_gamepad = False + try: + for d in evdev.list_devices(): + dev = evdev.InputDevice(d) + if dev.info.vendor == GAMEPAD_VID and dev.info.product == GAMEPAD_PID: + found_gamepad = True + except Exception: + logger.warning("Failed finding device, skipping check.") + found_gamepad = True + + if not found_gamepad: time.sleep(ERROR_DELAY) if first: logger.warning("Controller in Mouse mode. Waiting...") From 6ca4f06d55c1f860eb6d684982f5ad0d8d419282 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 22 Jan 2024 15:23:32 +0100 Subject: [PATCH 0302/1497] add hrtimer for the win 4 --- src/hhd/device/gpd/win/__init__.py | 2 +- src/hhd/device/gpd/win/base.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index bc2a9fcd..b2eace78 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -18,7 +18,7 @@ "G1619-05": "GPD Win Max 2 2023", } -GPD_CONFS = {"G1619-05": {"hrtimer": True}} +GPD_CONFS = {"G1619-05": {"hrtimer": True}, "G1618-04": {"hrtimer": True}} GPD_TOUCHPAD = ["G1617-01", "G1619-05"] diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 7d7a18c4..3ba221d5 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -166,6 +166,7 @@ def plugin_run( dev = evdev.InputDevice(d) if dev.info.vendor == GAMEPAD_VID and dev.info.product == GAMEPAD_PID: found_gamepad = True + break except Exception: logger.warning("Failed finding device, skipping check.") found_gamepad = True From c2d0106f2a97398df667e737560e99272e2d9c84 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 23 Jan 2024 18:36:09 +0100 Subject: [PATCH 0303/1497] bump version --- pyproject.toml | 2 +- src/hhd/device/gpd/win/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index de45cb2f..ac1fd702 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.1.0" +version = "1.1.1" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index b2eace78..7bb735f2 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -36,7 +36,7 @@ def __init__(self, dmi: str, name: str) -> None: self.t = None self.dmi = dmi - self.name = f"powerbuttond@'{name}'" + self.name = f"gpd_win_controllers@'{name}'" def open( self, From 145422a3332cfd9949bb3dfd76356a66923ed588 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 23 Jan 2024 18:51:22 +0100 Subject: [PATCH 0304/1497] add nintendo mode --- src/hhd/controller/base.py | 13 +++++++++++++ src/hhd/device/gpd/win/base.py | 2 ++ src/hhd/device/gpd/win/controllers.yml | 7 +++++++ src/hhd/device/legion_go/base.py | 2 ++ src/hhd/device/legion_go/controllers.yml | 7 +++++++ src/hhd/device/rog_ally/base.py | 1 + src/hhd/device/rog_ally/controllers.yml | 7 +++++++ 7 files changed, 39 insertions(+) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index dedf7ff5..94458506 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -249,6 +249,7 @@ def __init__( touchpad_hold: TouchpadAction = "disabled", r3_to_share: bool = False, select_reboots: bool = False, + nintendo_mode: bool = False, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -263,6 +264,7 @@ def __init__( self.touchpad_right = touchpad_right self.select_reboots = select_reboots self.r3_to_share = r3_to_share + self.nintendo_mode = nintendo_mode self.state = {} self.touchpad_x = 0 @@ -533,6 +535,17 @@ def process(self, events: Sequence[Event]): if self.r3_to_share and ev["code"] == "extra_r3": ev["code"] = "share" + + if self.nintendo_mode: + match ev["code"]: + case "a": + ev["code"] = "b" + case "b": + ev["code"] = "a" + case "x": + ev["code"] = "y" + case "y": + ev["code"] = "x" case "led": if self.led == "left_to_main" and ev["code"] == "left": out.append({**ev, "code": "main"}) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 3ba221d5..63cbfe6b 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -263,11 +263,13 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d dpad="analog_to_discrete", touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_hold=touch_actions["hold"].to(TouchpadAction), + nintendo_mode=conf["nintendo_mode"].to(bool), ) else: multiplexer = Multiplexer( trigger="analog_to_discrete", dpad="analog_to_discrete", + nintendo_mode=conf["nintendo_mode"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index dedf4639..4b7aa584 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -32,6 +32,13 @@ children: default: 400 touchpad: + + nintendo_mode: + type: bool + title: Nintendo Mode (A-B Swap) + hint: >- + Swaps A with B and X with Y. + default: False debug: type: bool diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 0553fb23..5dda8e56 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -143,6 +143,7 @@ def controller_loop_rest( dpad="analog_to_discrete", trigger="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), + nintendo_mode=conf["nintendo_mode"].to(bool), ) d_uinput = UInputDevice( name=f"HHD Shortcuts (Legion Mode: {mode})", @@ -271,6 +272,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): touchpad_right=touch_actions["hold"].to(TouchpadAction), select_reboots=conf["select_reboots"].to(bool), r3_to_share=conf["m2_to_mute"].to(bool), + nintendo_mode=conf["nintendo_mode"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 20ff9fee..a1de6dda 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -62,6 +62,13 @@ children: l_is_select: "Left is Select" default: disabled + nintendo_mode: + type: bool + title: Nintendo Mode (A-B Swap) + hint: >- + Swaps A with B and X with Y. + default: False + m2_to_mute: type: bool title: M2 As Mute diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 57f5e6e3..92999153 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -196,6 +196,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): dpad="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), select_reboots=conf["select_reboots"].to(bool), + nintendo_mode=conf["nintendo_mode"].to(bool), ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 1ae608c3..8c6410e6 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -49,6 +49,13 @@ children: type: bool title: Hold Select to Reboot default: True + + nintendo_mode: + type: bool + title: Nintendo Mode (A-B Swap) + hint: >- + Swaps A with B and X with Y. + default: False share_to_qam: type: bool From 2a6ee8a133996941d581667b517180e7ed540dbc Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Mon, 22 Jan 2024 12:04:46 -0800 Subject: [PATCH 0305/1497] Change service name in NixOS to kebab-case --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2e69fb1f..8c98c08e 100644 --- a/readme.md +++ b/readme.md @@ -254,7 +254,7 @@ Update the `nixpkgs.url` input in your flake to point at [the PR](https://github and add this line to your `configuration.nix`: ```nix - services.handheldDaemon.enable = true; + services.handheld-daemon.enable = true; ``` From d50e59afb0180a70cb9ff4204fe589032e6b082f Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 24 Jan 2024 16:12:39 +0100 Subject: [PATCH 0306/1497] update gpd win 4 gyro matrix --- src/hhd/device/gpd/win/__init__.py | 34 +++++++++++++++++------------- src/hhd/device/gpd/win/base.py | 24 ++++++++++----------- src/hhd/device/gpd/win/const.py | 20 ++++++++++++++++++ src/hhd/device/rog_ally/hid.py | 1 - 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 7bb735f2..6e64e341 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -12,23 +12,26 @@ ) from hhd.plugins.settings import HHDSettings -GPD_WMIS = { - "G1618-04": "GPD Win 4", - "G1617-01": "GPD Win Mini", - "G1619-05": "GPD Win Max 2 2023", +from .const import GPD_WIN_MAX_2_2023_MAPPINGS + +GPD_CONFS = { + "G1618-04": {"name": "GPD Win 4", "hrtimer": True}, + "G1617-01": {"name": "GPD Win Mini", "touchpad": True}, + "G1619-05": { + "name": "GPD Win Max 2 2023", + "hrtimer": True, + "touchpad": True, + "mapping": GPD_WIN_MAX_2_2023_MAPPINGS, + }, } -GPD_CONFS = {"G1619-05": {"hrtimer": True}, "G1618-04": {"hrtimer": True}} - -GPD_TOUCHPAD = ["G1617-01", "G1619-05"] - class GpdWinControllersPlugin(HHDPlugin): name = "gpd_win_controllers" priority = 18 log = "gpdw" - def __init__(self, dmi: str, name: str) -> None: + def __init__(self, dmi: str, dconf: dict) -> None: self.t = None self.should_exit = None self.updated = Event() @@ -36,7 +39,8 @@ def __init__(self, dmi: str, name: str) -> None: self.t = None self.dmi = dmi - self.name = f"gpd_win_controllers@'{name}'" + self.dconf = dconf + self.name = f"gpd_win_controllers@'{dconf.get('name', 'ukn')}'" def open( self, @@ -53,7 +57,7 @@ def settings(self) -> HHDSettings: get_outputs_config(can_disable=False, has_leds=False) ) - if self.dmi in GPD_TOUCHPAD: + if self.dconf.get("touchpad", False): base["controllers"]["gpd_win"]["children"][ "touchpad" ] = get_touchpad_config() @@ -91,7 +95,7 @@ def start(self, conf): self.context, self.should_exit, self.updated, - GPD_CONFS.get(self.dmi, {}), + self.dconf, ), ) self.t.start() @@ -112,8 +116,8 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: # Match just product number, should be enough for now with open("/sys/devices/virtual/dmi/id/product_name") as f: dmi = f.read().strip() - name = GPD_WMIS.get(dmi) - if not name: + dconf = GPD_CONFS.get(dmi, None) + if not dconf: return [] - return [GpdWinControllersPlugin(dmi, name)] + return [GpdWinControllersPlugin(dmi, dconf)] diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 63cbfe6b..7c32deb3 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -15,7 +15,11 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs -from .const import GPD_TOUCHPAD_AXIS_MAP, GPD_TOUCHPAD_BUTTON_MAP +from .const import ( + GPD_TOUCHPAD_AXIS_MAP, + GPD_TOUCHPAD_BUTTON_MAP, + GPD_WIN_DEFAULT_MAPPINGS, +) ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -32,16 +36,6 @@ TOUCHPAD_VID_2 = 0x0911 TOUCHPAD_PID_2 = 0x5288 -GPD_WIN_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_x", "anglvel", 1, None), - "anglvel_y": ("gyro_z", "anglvel", -1, None), - "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), -} - BACK_BUTTON_DELAY = 0.1 # /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 @@ -174,7 +168,7 @@ def plugin_run( if not found_gamepad: time.sleep(ERROR_DELAY) if first: - logger.warning("Controller in Mouse mode. Waiting...") + logger.info("Controller in Mouse mode. Waiting...") first = False continue @@ -206,7 +200,11 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d ) # Imu - d_imu = CombinedImu(conf["imu_hz"].to(int), GPD_WIN_MAPPINGS, gyro_scale="0.000266") + d_imu = CombinedImu( + conf["imu_hz"].to(int), + dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS), + # gyro_scale="0.000266", #TODO: Find what this affects + ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) # Inputs diff --git a/src/hhd/device/gpd/win/const.py b/src/hhd/device/gpd/win/const.py index 92d334bd..fefcaf55 100644 --- a/src/hhd/device/gpd/win/const.py +++ b/src/hhd/device/gpd/win/const.py @@ -15,3 +15,23 @@ "touchpad_y": [B("ABS_Y")], # also ABS_MT_POSITION_Y } ) + +GPD_WIN_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_x", "anglvel", 1, None), + "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} + +GPD_WIN_MAX_2_2023_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", 1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} diff --git a/src/hhd/device/rog_ally/hid.py b/src/hhd/device/rog_ally/hid.py index 8adce4a2..9e063ae4 100644 --- a/src/hhd/device/rog_ally/hid.py +++ b/src/hhd/device/rog_ally/hid.py @@ -173,7 +173,6 @@ def __call__(self, dev: Device, events: Sequence[Event]): ] for r in cmds: - logger.warning(r.hex()) dev.write(r) From 8cc8c7143a5f35c6dd0c6036c6058f05220c2834 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Thu, 25 Jan 2024 20:32:08 +0100 Subject: [PATCH 0307/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ac1fd702..c538da15 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.1.1" +version = "1.1.2" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 115e91749cae6cd2eedacc98443d6b5ad07adbfa Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 19:02:03 +0100 Subject: [PATCH 0308/1497] move around check to avoid leaving udev traces --- src/hhd/controller/physical/evdev.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 749d491d..ed1266bd 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -149,6 +149,17 @@ def open(self) -> Sequence[int]: if not matches: continue + self.dev = dev + if self.grab: + self.dev.grab() + self.ranges = { + a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore + } + self.fd = dev.fd + self.started = True + self.effect_id = -1 + + # Run after init to avoid having leftover rules if self.hide: # Check we are root if not os.getuid(): @@ -162,15 +173,6 @@ def open(self) -> Sequence[int]: f"Not running as root, device '{dev.name}' could not be hid." ) - self.dev = dev - if self.grab: - self.dev.grab() - self.ranges = { - a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore - } - self.fd = dev.fd - self.started = True - self.effect_id = -1 return [self.fd] err = f"Device with the following not found:\n" From 49db14eadce135cd13ab1b5529bf8ad15d237d21 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 19:02:27 +0100 Subject: [PATCH 0309/1497] update readme for bazzite --- readme.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 8c98c08e..03780fb6 100644 --- a/readme.md +++ b/readme.md @@ -55,7 +55,11 @@ depending on the game. - Safe, as it is the method used by manufacturers (provided you stay within limits). ## Installation Instructions -You can install the latest stable version of `hhd` from AUR or PyPi. +You can install the latest stable version of `hhd` from PyPi (recommended), AUR, +or COPR. +The easiest way to use Handheld Daemon is to install Bazzite which +comes pre-installed with the latest version and all required kernel +fixes for supported devices, see [here](#bazzite). > To ensure the gyro of the Legion Go with AMD SFH runs smoothly, > a udev rule is included that disables the use of the accelerometer by the @@ -71,6 +75,7 @@ You can install the latest stable version of `hhd` from AUR or PyPi. You can use the following bash scripts to install and uninstall Handheld Daemon (experimental). Then, update from Decky or the UI. +These steps do not work on Bazzite, see [here](#bazzite). > If your distro uses HandyGCCS/Handycon to fix certain key bindings by default > you need to uninstall it. Disabling it is not enough, since it is autostarted @@ -115,6 +120,7 @@ sudo systemctl start hhd_local@$(whoami) You can also install Handheld Daemon using a local package, which enables auto-updating. These are the same steps as done in the Automatic Install (also see [Common Issues after Install](#issues)). +These steps do not work on Bazzite, see [here](#bazzite). ```bash # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -210,6 +216,11 @@ To use the gyro, you will need a [dkms package](github.com/hhd-dev/bmi260) for the Bosch 260 IMU Driver. Follow the instructions in that repository to install it. +In addition, for devices other than the Win Mini, your kernel config should also +enable the modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and +`High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. +Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. + #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara @@ -244,6 +255,19 @@ sudo systemctl disable --now handycon.service sudo dnf remove handygccs-git # (verify ?) ``` +### Bazzite +Handheld Daemon comes pre-installed on Bazzite and updates along-side the system. +The latest version of Handheld Daemon becomes available at the latest the next +day after release, and can be managed through the Bazzite updater. +In addition, Bazzite contains all the required patches for the Handheld Daemon +supported devices, so it is the recommended distro to use Handheld Daemon with. + +In addition, Bazzite has some incompatibilities with the current install steps, +so they will not work if you follow them. +Essentially, a new service file needs to be written for it that contains the +correct home path (`/var/home`) and then you can disable the built-in version +service and use the new one instead. + ### ❄️ NixOS (experimental) Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: @@ -450,7 +474,7 @@ can not see led/gyro settings or the Edge controller mapping is wrong), you should update your distribution and if that does not fix it consider re-installing. There are certain gamescope/distro issues that cause this and we are unsure of the cause at this moment. -ChimeraOS 44 and certain versions of Nobara 38 have this issue. +ChimeraOS 44 and certain versions of Nobara 38 and 39 have this issue. ### Disabling Dualsense touchpad The Dualsense touchpad may interfere with games or steam input. From 310f3457ff27e59b8d36c8a95d41b808c7be5d3e Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 19:05:15 +0100 Subject: [PATCH 0310/1497] fix typos --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 03780fb6..81081dc1 100644 --- a/readme.md +++ b/readme.md @@ -262,9 +262,9 @@ day after release, and can be managed through the Bazzite updater. In addition, Bazzite contains all the required patches for the Handheld Daemon supported devices, so it is the recommended distro to use Handheld Daemon with. -In addition, Bazzite has some incompatibilities with the current install steps, -so they will not work if you follow them. -Essentially, a new service file needs to be written for it that contains the +If you need to use a different Handheld Daemon version or a custom one, the +install steps do not currently work for it, but this will be fixed in the future. +Essentially, a new service file needs to be written for Bazzite that contains the correct home path (`/var/home`) and then you can disable the built-in version service and use the new one instead. From 92aeb3222c1e032248fd920b77961f3bb8cb6f4b Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 19:07:44 +0100 Subject: [PATCH 0311/1497] add decky ujust --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index 81081dc1..0f372051 100644 --- a/readme.md +++ b/readme.md @@ -262,6 +262,9 @@ day after release, and can be managed through the Bazzite updater. In addition, Bazzite contains all the required patches for the Handheld Daemon supported devices, so it is the recommended distro to use Handheld Daemon with. +After install, you can use `ujust` to install Decky and the Handheld Daemon Decky +plugin with the commands `ujust get-decky`, `ujust get-hhd-decky`. + If you need to use a different Handheld Daemon version or a custom one, the install steps do not currently work for it, but this will be fixed in the future. Essentially, a new service file needs to be written for Bazzite that contains the From 2164dbb18c8a1b1871de17cb316df6cd4b936df6 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 19:08:33 +0100 Subject: [PATCH 0312/1497] update supported gpd devices --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0f372051..2eb5f655 100644 --- a/readme.md +++ b/readme.md @@ -17,7 +17,7 @@ depending on the game. *Supported Devices*: - Legion Go - ROG Ally -- GPD Win 4 and Mini +- GPD Win 4, Win Mini, and Win Max 2 2023 *Current Features*: - Fully functional DualSense and Dualsense Edge emulation From 009d98d06d481c6ca50580eee3f1610c20979bda Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 19:09:22 +0100 Subject: [PATCH 0313/1497] fix typo --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2eb5f655..1ef757af 100644 --- a/readme.md +++ b/readme.md @@ -266,7 +266,7 @@ After install, you can use `ujust` to install Decky and the Handheld Daemon Deck plugin with the commands `ujust get-decky`, `ujust get-hhd-decky`. If you need to use a different Handheld Daemon version or a custom one, the -install steps do not currently work for it, but this will be fixed in the future. +install steps do not currently work for Bazzite, but this will be fixed in the future. Essentially, a new service file needs to be written for Bazzite that contains the correct home path (`/var/home`) and then you can disable the built-in version service and use the new one instead. From 4fb1b4b7750f44ddca46ee2e52e95a69823486fd Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 26 Jan 2024 22:40:46 +0100 Subject: [PATCH 0314/1497] add lizard mode + update readme for rog ally --- readme.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 1ef757af..b1523e1c 100644 --- a/readme.md +++ b/readme.md @@ -193,10 +193,14 @@ Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I Without an up-to-date `asus-wmi` kernel driver the usb device of the controller does not wake up after sleep so Handheld Daemon stops working. +This patch is included with Linux kernel 6.7. -In addition, without a patched kernel with `asus-hid`/`asus-wmi`, LEDs might not -initialize properly (theoretically they should work). -This is currently under investigation. +Without the patch series for the IMU (where patches 0001, and 0002 are included +in kernel 6.8), the gyro will not work and if the `Motion` option is enabled, +LEDs will not work either, so that should be turned off. + +You can hold the ROG Crate button to switch to the ROG Ally's Mouse mode to turn +the right stick into a mouse. #### Extra steps GPD Win Devices In order for the back buttons in GPD Win Devices to work, you need to map the From e7d68972216eec922b3f461a49501565c85e48e0 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 27 Jan 2024 19:47:46 +0100 Subject: [PATCH 0315/1497] add driver template for ayaneo --- pyproject.toml | 1 + src/hhd/device/ayaneo/__init__.py | 121 +++++++++ src/hhd/device/ayaneo/base.py | 353 ++++++++++++++++++++++++++ src/hhd/device/ayaneo/const.py | 27 ++ src/hhd/device/ayaneo/controllers.yml | 50 ++++ src/hhd/device/rog_ally/base.py | 4 +- 6 files changed, 554 insertions(+), 2 deletions(-) create mode 100644 src/hhd/device/ayaneo/__init__.py create mode 100644 src/hhd/device/ayaneo/base.py create mode 100644 src/hhd/device/ayaneo/const.py create mode 100644 src/hhd/device/ayaneo/controllers.yml diff --git a/pyproject.toml b/pyproject.toml index c538da15..82b6f076 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" gpd_win = "hhd.device.gpd.win:autodetect" +ayaneo = "hhd.device.ayaneo:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py new file mode 100644 index 00000000..c47aa1a2 --- /dev/null +++ b/src/hhd/device/ayaneo/__init__.py @@ -0,0 +1,121 @@ +from threading import Event, Thread +from typing import Any, Sequence + +from hhd.plugins import ( + Config, + Context, + Emitter, + HHDPlugin, + load_relative_yaml, + get_outputs_config, + get_touchpad_config, +) +from hhd.plugins.settings import HHDSettings + +AYANEO_CONFS = { + # "G1618-04": {"name": "GPD Win 4", "hrtimer": True}, + # "G1617-01": {"name": "GPD Win Mini", "touchpad": True}, + # "G1619-05": { + # "name": "GPD Win Max 2 2023", + # "hrtimer": True, + # "touchpad": True, + # "mapping": ayaneo_MAX_2_2023_MAPPINGS, + # }, +} + + +class AyaneoControllersPlugin(HHDPlugin): + name = "ayaneo_controllers" + priority = 18 + log = "ayan" + + def __init__(self, dmi: str, dconf: dict) -> None: + self.t = None + self.should_exit = None + self.updated = Event() + self.started = False + self.t = None + + self.dmi = dmi + self.dconf = dconf + self.name = f"ayaneo_controllers@'{dconf.get('name', 'ukn')}'" + + def open( + self, + emit: Emitter, + context: Context, + ): + self.emit = emit + self.context = context + self.prev = None + + def settings(self) -> HHDSettings: + base = {"controllers": {"ayaneo": load_relative_yaml("controllers.yml")}} + base["controllers"]["ayaneo"]["children"]["controller_mode"].update( + get_outputs_config(can_disable=False, has_leds=False) + ) + + if self.dconf.get("touchpad", False): + base["controllers"]["ayaneo"]["children"][ + "touchpad" + ] = get_touchpad_config() + else: + del base["controllers"]["ayaneo"]["children"]["touchpad"] + + return base + + def update(self, conf: Config): + new_conf = conf["controllers.ayaneo"] + if new_conf == self.prev: + return + if self.prev is None: + self.prev = new_conf + else: + self.prev.update(new_conf.conf) + + self.updated.set() + self.start(self.prev) + + def start(self, conf): + from .base import plugin_run + + if self.started: + return + self.started = True + + self.close() + self.should_exit = Event() + self.t = Thread( + target=plugin_run, + args=( + conf, + self.emit, + self.context, + self.should_exit, + self.updated, + self.dconf, + ), + ) + self.t.start() + + def close(self): + if not self.should_exit or not self.t: + return + self.should_exit.set() + self.t.join() + self.should_exit = None + self.t = None + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + # Match just product number, should be enough for now + with open("/sys/devices/virtual/dmi/id/product_name") as f: + dmi = f.read().strip() + dconf = AYANEO_CONFS.get(dmi, None) + if not dconf: + return [] + + return [AyaneoControllersPlugin(dmi, dconf)] diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py new file mode 100644 index 00000000..3c4fc513 --- /dev/null +++ b/src/hhd/device/ayaneo/base.py @@ -0,0 +1,353 @@ +import logging +import re +import select +import time +from threading import Event as TEvent +from typing import Sequence + +import evdev + +from hhd.controller import Axis, Event, Multiplexer, can_read +from hhd.controller.base import Event, TouchpadAction +from hhd.controller.physical.evdev import B as EC +from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.hidraw import GenericGamepadHidraw +from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.plugins import Config, Context, Emitter, get_outputs + +from .const import ( + AYANEO_TOUCHPAD_AXIS_MAP, + AYANEO_TOUCHPAD_BUTTON_MAP, + AYANEO_DEFAULT_MAPPINGS, +) + +ERROR_DELAY = 1 +SELECT_TIMEOUT = 1 + +logger = logging.getLogger(__name__) + +GPD_WIN_4_VID = 0x2F24 +GPD_WIN_4_PID = 0x0135 +GAMEPAD_VID = 0x045E +GAMEPAD_PID = 0x028E + +TOUCHPAD_VID = 0x093A +TOUCHPAD_PID = 0x0255 +TOUCHPAD_VID_2 = 0x0911 +TOUCHPAD_PID_2 = 0x5288 + +BACK_BUTTON_DELAY = 0.1 + +# /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 +# bus: 0003, vendor 045e, product 028e, version 0101 + +# back buttons +# /dev/input/event15 Mouse for Windows usb-0000:73:00.3-4.2/input1 +# bus: 0003, vendor 2f24, product 0135, version 0110 + +# physical keyboard +# /dev/input/event13 Mouse for Windows usb-0000:73:00.3-4.2/input0 +# bus: 0003, vendor 2f24, product 0135, version 0110 + +# hidraw back buttons {'path': b'/dev/hidraw6', +# 'vendor_id': 12068, 'product_id': 309, 'serial_number': '', +# 'release_number': 256, 'manufacturer_string': ' ', +# 'product_string': 'Mouse for Windows', +# 'usage_page': 1, 'usage': 6, 'interface_number': 1}, + + +class GpdWin4Hidraw(GenericGamepadHidraw): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + def open(self) -> Sequence[int]: + self.left_pressed = None + self.right_pressed = None + self.last_pressed = None + self.clear_ts = None + + self.queue: list[tuple[Event, float]] = [] + return super().open() + + def produce(self, fds: Sequence[int]) -> Sequence[Event]: + # If we can not read return + if not self.fd or not self.dev: + return [] + + # Process events + curr = time.perf_counter() + out: Sequence[Event] = [] + + # Read new events + left_pressed = None + right_pressed = None + while can_read(self.fd): + rep = self.dev.read(self.report_size) + + # l4 = 0x46 + # r4 = 0x48 + # both = l4 + r4 + # when both l4/r4 held, rep[2] and rep[3] will both be active + # they will be the same known values for l4 and r4 + # but the order is not guaranteed to be consistent + check = rep[2] + rep[3] + match check: + case 0x46: + # action = "left/l4" + left_pressed = True + self.last_pressed = "left" + self.clear_ts = None + case 0x48: + # action = "right/r4" + right_pressed = True + self.last_pressed = "right" + self.clear_ts = None + case 0x8E: + # both l4 and r4 are being pressed + left_pressed = True + right_pressed = True + self.clear_ts = None + case _: # 0x00: + # This occurs only when one button is pressed + # So in case both are remove one + if self.last_pressed == "right" and self.left_pressed: + left_pressed = False + if self.last_pressed == "left" and self.right_pressed: + right_pressed = False + self.clear_ts = curr + BACK_BUTTON_DELAY + + if self.clear_ts and self.clear_ts < curr: + # Reset after timeout + if self.left_pressed: + out.append({"type": "button", "code": "extra_l1", "value": False}) + self.left_pressed = False + if self.right_pressed: + out.append({"type": "button", "code": "extra_r1", "value": False}) + self.right_pressed = False + self.clear_ts = None + else: + # If no timeout, update + # Left, right will be none if no events were received + # If they were, they will be true/false + # If that conflicts with the saved values, send events. + if left_pressed is not None and self.left_pressed != left_pressed: + out.append( + {"type": "button", "code": "extra_l1", "value": left_pressed} + ) + self.left_pressed = left_pressed + + if right_pressed is not None and self.right_pressed != right_pressed: + out.append( + {"type": "button", "code": "extra_r1", "value": right_pressed} + ) + self.right_pressed = right_pressed + return out + + +def plugin_run( + conf: Config, + emit: Emitter, + context: Context, + should_exit: TEvent, + updated: TEvent, + dconf: dict, +): + first = True + while not should_exit.is_set(): + found_gamepad = False + try: + for d in evdev.list_devices(): + dev = evdev.InputDevice(d) + if dev.info.vendor == GAMEPAD_VID and dev.info.product == GAMEPAD_PID: + found_gamepad = True + break + except Exception: + logger.warning("Failed finding device, skipping check.") + found_gamepad = True + + if not found_gamepad: + time.sleep(ERROR_DELAY) + if first: + logger.info("Controller in Mouse mode. Waiting...") + first = False + continue + + try: + logger.info("Launching emulated controller.") + updated.clear() + controller_loop(conf.copy(), should_exit, updated, dconf) + except Exception as e: + logger.error(f"Received the following error:\n{type(e)}: {e}") + logger.error( + f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." + ) + first = True + # Raise exception + if conf.get("debug", False): + raise e + time.sleep(ERROR_DELAY) + + +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): + debug = conf.get("debug", False) + has_touchpad = "touchpad" in conf + + # Output + d_producers, d_outs, d_params = get_outputs( + conf["controller_mode"], + conf["touchpad"] if has_touchpad else None, + conf["imu"].to(bool), + ) + + # Imu + d_imu = CombinedImu( + conf["imu_hz"].to(int), + dconf.get("mapping", AYANEO_DEFAULT_MAPPINGS), + # gyro_scale="0.000266", #TODO: Find what this affects + ) + d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) + + # Inputs + d_xinput = GenericGamepadEvdev( + vid=[GAMEPAD_VID], + pid=[GAMEPAD_PID], + # name=["Generic X-Box pad"], + capabilities={EC("EV_KEY"): [EC("BTN_A")]}, + required=True, + hide=True, + ) + + # "PNP0C50:00 0911:5288 Touchpad" on Win Max 2 2023 + # "PNP0C50:00 093A:0255 Touchpad" on Win Mini + d_touch = GenericGamepadEvdev( + vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], + pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], + name=[re.compile(".+Touchpad")], + capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, + btn_map=AYANEO_TOUCHPAD_BUTTON_MAP, + axis_map=AYANEO_TOUCHPAD_AXIS_MAP, + aspect_ratio=1.333, + required=False, + ) + + # Vendor + d_vend = GpdWin4Hidraw( + vid=[GPD_WIN_4_VID], + pid=[GPD_WIN_4_PID], + usage_page=[0x0001], + usage=[0x0006], + required=True, + ) + + d_kbd_1 = GenericGamepadEvdev( + vid=[GPD_WIN_4_VID], + pid=[GPD_WIN_4_PID], + # TODO: Verify capability check does not cause regressions + capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, + required=False, + grab=True, + # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, + ) + + if has_touchpad: + touch_actions = ( + conf["touchpad.controller"] + if conf["touchpad.mode"].to(TouchpadAction) == "controller" + else conf["touchpad.emulation"] + ) + + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + touchpad_short=touch_actions["short"].to(TouchpadAction), + touchpad_hold=touch_actions["hold"].to(TouchpadAction), + nintendo_mode=conf["nintendo_mode"].to(bool), + ) + else: + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + nintendo_mode=conf["nintendo_mode"].to(bool), + ) + + REPORT_FREQ_MIN = 25 + REPORT_FREQ_MAX = 400 + + if conf["imu"].to(bool): + REPORT_FREQ_MAX = max(REPORT_FREQ_MAX, conf["imu_hz"].to(float)) + + REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN + REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX + + fds = [] + devs = [] + fd_to_dev = {} + + def prepare(m): + devs.append(m) + fs = m.open() + fds.extend(fs) + for f in fs: + fd_to_dev[f] = m + + try: + d_vend.open() + prepare(d_xinput) + if conf.get("imu", False): + if dconf.get("hrtimer", False): + d_timer.open() + prepare(d_imu) + if has_touchpad and d_params["uses_touch"]: + prepare(d_touch) + prepare(d_kbd_1) + for d in d_producers: + prepare(d) + + logger.info("Emulated controller launched, have fun!") + while not should_exit.is_set() and not updated.is_set(): + start = time.perf_counter() + # Add timeout to call consumers a minimum amount of times per second + r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) + evs = [] + to_run = set() + for f in r: + to_run.add(id(fd_to_dev[f])) + + for d in devs: + if id(d) in to_run: + evs.extend(d.produce(r)) + evs.extend(d_vend.produce(r)) + + evs = multiplexer.process(evs) + if evs: + if debug: + logger.info(evs) + + # d_vend.consume(evs) + d_xinput.consume(evs) + + for d in d_outs: + d.consume(evs) + + # If unbounded, the total number of events per second is the sum of all + # events generated by the producers. + # For Legion go, that would be 100 + 100 + 500 + 30 = 730 + # Since the controllers of the legion go only update at 500hz, this is + # wasteful. + # By setting a target refresh rate for the report and sleeping at the + # end, we ensure that even if multiple fds become ready close to each other + # they are combined to the same report, limiting resource use. + # Ideally, this rate is smaller than the report rate of the hardware controller + # to ensure there is always a report from that ready during refresh + t = time.perf_counter() + elapsed = t - start + if elapsed < REPORT_DELAY_MIN: + time.sleep(REPORT_DELAY_MIN - elapsed) + + except KeyboardInterrupt: + raise + finally: + d_vend.close(True) + d_timer.close() + for d in reversed(devs): + d.close(True) diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py new file mode 100644 index 00000000..35b3660d --- /dev/null +++ b/src/hhd/device/ayaneo/const.py @@ -0,0 +1,27 @@ +from hhd.controller import Axis, Button, Configuration +from hhd.controller.physical.evdev import B, to_map + +AYANEO_TOUCHPAD_BUTTON_MAP: dict[int, Button] = to_map( + { + "touchpad_touch": [B("BTN_TOOL_FINGER")], # also BTN_TOUCH + "touchpad_right": [B("BTN_TOOL_DOUBLETAP"), B("BTN_RIGHT")], + "touchpad_left": [B("BTN_MOUSE")], + } +) + +AYANEO_TOUCHPAD_AXIS_MAP: dict[int, Axis] = to_map( + { + "touchpad_x": [B("ABS_X")], # also ABS_MT_POSITION_X + "touchpad_y": [B("ABS_Y")], # also ABS_MT_POSITION_Y + } +) + +AYANEO_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_x", "anglvel", 1, None), + "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} \ No newline at end of file diff --git a/src/hhd/device/ayaneo/controllers.yml b/src/hhd/device/ayaneo/controllers.yml new file mode 100644 index 00000000..0c624a70 --- /dev/null +++ b/src/hhd/device/ayaneo/controllers.yml @@ -0,0 +1,50 @@ +type: container +tags: [lgc] +title: Ayaneo Controller +hint: >- + Allows for configuring the gpd win controllers to a unified output. + +children: + controller_mode: + type: mode + tags: [gpd_gen_3_controller_mode] + title: Controller Emulation + hint: >- + Emulate different controller types to fuse gpd features. + + # + # Common settings + # + imu: + type: bool + title: Motion Support + hint: >- + Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) + default: True + + imu_hz: + type: discrete + title: Motion Hz + hint: >- + Sets the sampling frequency for the IMU. + Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. + options: [50, 100, 200, 400, 800, 1600] + default: 400 + + touchpad: + + nintendo_mode: + type: bool + title: Nintendo Mode (A-B Swap) + hint: >- + Swaps A with B and X with Y. + default: False + + debug: + type: bool + title: Debug + tags: [advanced] + hint: >- + Output controller events to the console (high CPU use) and raises exceptions + (HHD will crash on errors). + default: False diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 92999153..efff109e 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -249,8 +249,8 @@ def prepare(m): if debug: logger.info(evs) - d_vend.consume(evs) - d_xinput.consume(evs) + d_vend.consume(evs) + d_xinput.consume(evs) for d in d_outs: d.consume(evs) From 97a0b0e8ac54de92fa66d89a3d97b98fa4e3fea3 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 28 Jan 2024 03:30:55 +0800 Subject: [PATCH 0316/1497] init ayaneo --- src/hhd/device/ayaneo/__init__.py | 11 +--- src/hhd/device/ayaneo/base.py | 90 ++++++++++++--------------- src/hhd/device/ayaneo/controllers.yml | 18 ++++-- src/hhd/plugins/powerbutton/const.py | 1 + 4 files changed, 54 insertions(+), 66 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index c47aa1a2..7d7a1fce 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -12,18 +12,11 @@ ) from hhd.plugins.settings import HHDSettings + AYANEO_CONFS = { - # "G1618-04": {"name": "GPD Win 4", "hrtimer": True}, - # "G1617-01": {"name": "GPD Win Mini", "touchpad": True}, - # "G1619-05": { - # "name": "GPD Win Max 2 2023", - # "hrtimer": True, - # "touchpad": True, - # "mapping": ayaneo_MAX_2_2023_MAPPINGS, - # }, + "AIR Plus": {"name": "AIR Plus", "hrtimer": True}, } - class AyaneoControllersPlugin(HHDPlugin): name = "ayaneo_controllers" priority = 18 diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index 3c4fc513..178bda03 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -26,37 +26,19 @@ logger = logging.getLogger(__name__) -GPD_WIN_4_VID = 0x2F24 -GPD_WIN_4_PID = 0x0135 +from .const import ( + AYANEO_DEFAULT_MAPPINGS, +) + GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E -TOUCHPAD_VID = 0x093A -TOUCHPAD_PID = 0x0255 -TOUCHPAD_VID_2 = 0x0911 -TOUCHPAD_PID_2 = 0x5288 +KBD_VID = 0x0001 +KBD_PID = 0x0001 BACK_BUTTON_DELAY = 0.1 -# /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 -# bus: 0003, vendor 045e, product 028e, version 0101 - -# back buttons -# /dev/input/event15 Mouse for Windows usb-0000:73:00.3-4.2/input1 -# bus: 0003, vendor 2f24, product 0135, version 0110 - -# physical keyboard -# /dev/input/event13 Mouse for Windows usb-0000:73:00.3-4.2/input0 -# bus: 0003, vendor 2f24, product 0135, version 0110 - -# hidraw back buttons {'path': b'/dev/hidraw6', -# 'vendor_id': 12068, 'product_id': 309, 'serial_number': '', -# 'release_number': 256, 'manufacturer_string': ' ', -# 'product_string': 'Mouse for Windows', -# 'usage_page': 1, 'usage': 6, 'interface_number': 1}, - - -class GpdWin4Hidraw(GenericGamepadHidraw): +class AyaneoHidraw(GenericGamepadHidraw): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) @@ -143,7 +125,6 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: self.right_pressed = right_pressed return out - def plugin_run( conf: Config, emit: Emitter, @@ -219,34 +200,39 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # "PNP0C50:00 0911:5288 Touchpad" on Win Max 2 2023 # "PNP0C50:00 093A:0255 Touchpad" on Win Mini - d_touch = GenericGamepadEvdev( - vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], - pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], - name=[re.compile(".+Touchpad")], - capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, - btn_map=AYANEO_TOUCHPAD_BUTTON_MAP, - axis_map=AYANEO_TOUCHPAD_AXIS_MAP, - aspect_ratio=1.333, - required=False, - ) + # d_touch = GenericGamepadEvdev( + # vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], + # pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], + # name=[re.compile(".+Touchpad")], + # capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, + # btn_map=AYANEO_TOUCHPAD_BUTTON_MAP, + # axis_map=AYANEO_TOUCHPAD_AXIS_MAP, + # aspect_ratio=1.333, + # required=False, + # ) # Vendor - d_vend = GpdWin4Hidraw( - vid=[GPD_WIN_4_VID], - pid=[GPD_WIN_4_PID], - usage_page=[0x0001], - usage=[0x0006], - required=True, - ) + # d_vend = AyaneoHidraw( + # vid=[KBD_VID], + # pid=[KBD_PID], + # usage_page=[0x0001], + # usage=[0x0006], + # required=True, + # ) d_kbd_1 = GenericGamepadEvdev( - vid=[GPD_WIN_4_VID], - pid=[GPD_WIN_4_PID], + vid=[KBD_VID], + pid=[KBD_PID], # TODO: Verify capability check does not cause regressions capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, required=False, grab=True, - # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, + btn_map={ + EC("KEY_F15"): "extra_l1", + EC("KEY_F16"): "extra_r1", + EC("KEY_F17"): "mode", + EC("KEY_D"): "share" + }, ) if has_touchpad: @@ -259,6 +245,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d multiplexer = Multiplexer( trigger="analog_to_discrete", dpad="analog_to_discrete", + share_to_qam=conf["share_to_qam"].to(bool), touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_hold=touch_actions["hold"].to(TouchpadAction), nintendo_mode=conf["nintendo_mode"].to(bool), @@ -267,6 +254,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d multiplexer = Multiplexer( trigger="analog_to_discrete", dpad="analog_to_discrete", + share_to_qam=conf["share_to_qam"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), ) @@ -291,14 +279,14 @@ def prepare(m): fd_to_dev[f] = m try: - d_vend.open() + # d_vend.open() prepare(d_xinput) if conf.get("imu", False): if dconf.get("hrtimer", False): d_timer.open() prepare(d_imu) - if has_touchpad and d_params["uses_touch"]: - prepare(d_touch) + # if has_touchpad and d_params["uses_touch"]: + # prepare(d_touch) prepare(d_kbd_1) for d in d_producers: prepare(d) @@ -316,7 +304,7 @@ def prepare(m): for d in devs: if id(d) in to_run: evs.extend(d.produce(r)) - evs.extend(d_vend.produce(r)) + # evs.extend(d_vend.produce(r)) evs = multiplexer.process(evs) if evs: @@ -347,7 +335,7 @@ def prepare(m): except KeyboardInterrupt: raise finally: - d_vend.close(True) + # d_vend.close(True) d_timer.close() for d in reversed(devs): d.close(True) diff --git a/src/hhd/device/ayaneo/controllers.yml b/src/hhd/device/ayaneo/controllers.yml index 0c624a70..6886a6e7 100644 --- a/src/hhd/device/ayaneo/controllers.yml +++ b/src/hhd/device/ayaneo/controllers.yml @@ -1,16 +1,16 @@ type: container tags: [lgc] -title: Ayaneo Controller +title: AYANEO Controller hint: >- - Allows for configuring the gpd win controllers to a unified output. + Allows for configuring the ayaneo controllers to a unified output. children: controller_mode: type: mode - tags: [gpd_gen_3_controller_mode] + tags: [ayaneo_controller_mode] title: Controller Emulation hint: >- - Emulate different controller types to fuse gpd features. + Emulate different controller types to fuse AYANEO features. # # Common settings @@ -30,9 +30,9 @@ children: Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. options: [50, 100, 200, 400, 800, 1600] default: 400 - - touchpad: + touchpad: + nintendo_mode: type: bool title: Nintendo Mode (A-B Swap) @@ -40,6 +40,12 @@ children: Swaps A with B and X with Y. default: False + share_to_qam: + type: bool + title: Map small buttom to QAM. + tags: [advanced] + default: True + debug: type: bool title: Debug diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index f8620372..b2fd1d2a 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -22,6 +22,7 @@ class PowerButtonConfig(NamedTuple): PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), + PBC("AYANEO AIR Plus", "AIR Plus"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 5fdd8c3208daf05037d1104cfacd8fac6a9f3ffe Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 28 Jan 2024 03:41:25 +0800 Subject: [PATCH 0317/1497] disable AIR Plus PowerButton --- src/hhd/plugins/powerbutton/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index b2fd1d2a..c7c8ba62 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -22,7 +22,7 @@ class PowerButtonConfig(NamedTuple): PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), - PBC("AYANEO AIR Plus", "AIR Plus"), + # PBC("AYANEO AIR Plus", "AIR Plus"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From d407c6098c51eeb974cc7e986515589d8e4e8764 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 28 Jan 2024 03:54:21 +0800 Subject: [PATCH 0318/1497] Clean code --- src/hhd/device/ayaneo/base.py | 99 +---------------------------------- 1 file changed, 1 insertion(+), 98 deletions(-) diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index 178bda03..732b03b6 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -38,93 +38,6 @@ BACK_BUTTON_DELAY = 0.1 -class AyaneoHidraw(GenericGamepadHidraw): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - def open(self) -> Sequence[int]: - self.left_pressed = None - self.right_pressed = None - self.last_pressed = None - self.clear_ts = None - - self.queue: list[tuple[Event, float]] = [] - return super().open() - - def produce(self, fds: Sequence[int]) -> Sequence[Event]: - # If we can not read return - if not self.fd or not self.dev: - return [] - - # Process events - curr = time.perf_counter() - out: Sequence[Event] = [] - - # Read new events - left_pressed = None - right_pressed = None - while can_read(self.fd): - rep = self.dev.read(self.report_size) - - # l4 = 0x46 - # r4 = 0x48 - # both = l4 + r4 - # when both l4/r4 held, rep[2] and rep[3] will both be active - # they will be the same known values for l4 and r4 - # but the order is not guaranteed to be consistent - check = rep[2] + rep[3] - match check: - case 0x46: - # action = "left/l4" - left_pressed = True - self.last_pressed = "left" - self.clear_ts = None - case 0x48: - # action = "right/r4" - right_pressed = True - self.last_pressed = "right" - self.clear_ts = None - case 0x8E: - # both l4 and r4 are being pressed - left_pressed = True - right_pressed = True - self.clear_ts = None - case _: # 0x00: - # This occurs only when one button is pressed - # So in case both are remove one - if self.last_pressed == "right" and self.left_pressed: - left_pressed = False - if self.last_pressed == "left" and self.right_pressed: - right_pressed = False - self.clear_ts = curr + BACK_BUTTON_DELAY - - if self.clear_ts and self.clear_ts < curr: - # Reset after timeout - if self.left_pressed: - out.append({"type": "button", "code": "extra_l1", "value": False}) - self.left_pressed = False - if self.right_pressed: - out.append({"type": "button", "code": "extra_r1", "value": False}) - self.right_pressed = False - self.clear_ts = None - else: - # If no timeout, update - # Left, right will be none if no events were received - # If they were, they will be true/false - # If that conflicts with the saved values, send events. - if left_pressed is not None and self.left_pressed != left_pressed: - out.append( - {"type": "button", "code": "extra_l1", "value": left_pressed} - ) - self.left_pressed = left_pressed - - if right_pressed is not None and self.right_pressed != right_pressed: - out.append( - {"type": "button", "code": "extra_r1", "value": right_pressed} - ) - self.right_pressed = right_pressed - return out - def plugin_run( conf: Config, emit: Emitter, @@ -198,8 +111,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d hide=True, ) - # "PNP0C50:00 0911:5288 Touchpad" on Win Max 2 2023 - # "PNP0C50:00 093A:0255 Touchpad" on Win Mini + # d_touch = GenericGamepadEvdev( # vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], # pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], @@ -211,15 +123,6 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # required=False, # ) - # Vendor - # d_vend = AyaneoHidraw( - # vid=[KBD_VID], - # pid=[KBD_PID], - # usage_page=[0x0001], - # usage=[0x0006], - # required=True, - # ) - d_kbd_1 = GenericGamepadEvdev( vid=[KBD_VID], pid=[KBD_PID], From e65bb04e83816c0571d1c2d49bf95de0ef56f7c2 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 28 Jan 2024 04:48:31 +0800 Subject: [PATCH 0319/1497] type hold_emitted --- src/hhd/plugins/powerbutton/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index c7c8ba62..fabd658f 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -22,7 +22,7 @@ class PowerButtonConfig(NamedTuple): PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), - # PBC("AYANEO AIR Plus", "AIR Plus"), + PBC("AYANEO AIR Plus", "AIR Plus", type="hold_emitted"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From e1797f8c6138aef1be296c76f8fc3bccfb06f170 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 28 Jan 2024 05:08:39 +0800 Subject: [PATCH 0320/1497] add KEY_VOLUMEUP and KEY_VOLUMEDOWN --- src/hhd/device/ayaneo/base.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index 732b03b6..cefd09f6 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -13,6 +13,7 @@ from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.controller.virtual.uinput import UInputDevice from hhd.plugins import Config, Context, Emitter, get_outputs from .const import ( @@ -123,11 +124,20 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # required=False, # ) + d_volume_btn = UInputDevice( + name="AYANEO Volume Button", + phys="phys-hhd-ayaneo-volume-button", + capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, + pid=KBD_PID, + vid=KBD_VID, + output_timestamps=True, + ) + d_kbd_1 = GenericGamepadEvdev( vid=[KBD_VID], pid=[KBD_PID], # TODO: Verify capability check does not cause regressions - capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, + # capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, required=False, grab=True, btn_map={ @@ -193,6 +203,7 @@ def prepare(m): prepare(d_kbd_1) for d in d_producers: prepare(d) + logger.info("Emulated controller launched, have fun!") while not should_exit.is_set() and not updated.is_set(): From a25dfab5cb396d7e0e8c6e959b6a8b782bb46447 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 27 Jan 2024 23:33:33 +0100 Subject: [PATCH 0321/1497] add volume button handling --- src/hhd/device/ayaneo/base.py | 41 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index cefd09f6..c549843c 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -39,6 +39,7 @@ BACK_BUTTON_DELAY = 0.1 + def plugin_run( conf: Config, emit: Emitter, @@ -112,7 +113,6 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d hide=True, ) - # d_touch = GenericGamepadEvdev( # vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], # pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], @@ -124,27 +124,18 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # required=False, # ) - d_volume_btn = UInputDevice( - name="AYANEO Volume Button", - phys="phys-hhd-ayaneo-volume-button", - capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, - pid=KBD_PID, - vid=KBD_VID, - output_timestamps=True, - ) - d_kbd_1 = GenericGamepadEvdev( vid=[KBD_VID], pid=[KBD_PID], - # TODO: Verify capability check does not cause regressions - # capabilities={EC("EV_KEY"): [EC("KEY_SYSRQ"), EC("KEY_PAUSE")]}, required=False, grab=True, btn_map={ - EC("KEY_F15"): "extra_l1", - EC("KEY_F16"): "extra_r1", - EC("KEY_F17"): "mode", - EC("KEY_D"): "share" + EC("KEY_F15"): "extra_l1", + EC("KEY_F16"): "extra_r1", + EC("KEY_F17"): "mode", + EC("KEY_D"): "share", + EC("KEY_VOLUMEUP"): "key_volumeup", + EC("KEY_VOLUMEDOWN"): "key_volumedown", }, ) @@ -171,6 +162,19 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d nintendo_mode=conf["nintendo_mode"].to(bool), ) + d_volume_btn = UInputDevice( + name="Handheld Daemon Volume Keyboard (Ayaneo)", + phys="phys-hhd-ayaneo-vbtn", + capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, + btn_map={ + "key_volumeup": EC("KEY_VOLUMEUP"), + "key_volumedown": EC("KEY_VOLUMEDOWN"), + }, + pid=KBD_PID, + vid=KBD_VID, + output_timestamps=True, + ) + REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 400 @@ -200,10 +204,10 @@ def prepare(m): prepare(d_imu) # if has_touchpad and d_params["uses_touch"]: # prepare(d_touch) + prepare(d_volume_btn) prepare(d_kbd_1) for d in d_producers: prepare(d) - logger.info("Emulated controller launched, have fun!") while not should_exit.is_set() and not updated.is_set(): @@ -218,14 +222,13 @@ def prepare(m): for d in devs: if id(d) in to_run: evs.extend(d.produce(r)) - # evs.extend(d_vend.produce(r)) evs = multiplexer.process(evs) if evs: if debug: logger.info(evs) - # d_vend.consume(evs) + d_volume_btn.consume(evs) d_xinput.consume(evs) for d in d_outs: From d6cb9057fc3eac739ac7f62aca7fd2f6e97d9263 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 00:57:17 +0100 Subject: [PATCH 0322/1497] catch imu error to prevent crashes --- pyproject.toml | 2 +- src/hhd/controller/physical/imu.py | 31 ++++++++++++++++++------------ src/hhd/device/ayaneo/base.py | 6 ++++-- src/hhd/device/gpd/win/base.py | 6 ++++-- src/hhd/device/rog_ally/base.py | 4 ++-- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 82b6f076..4ddc31a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.1.2" +version = "1.1.3" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 3f4f8e31..11916016 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -238,15 +238,20 @@ def open(self): if not sens_dir or not type: return [] - dev = prepare_dev( - sens_dir, - type, - self.attr, - self.freq, - self.scale, - self.mappings, - self.update_trigger, - ) + try: + dev = prepare_dev( + sens_dir, + type, + self.attr, + self.freq, + self.scale, + self.mappings, + self.update_trigger, + ) + except Exception as e: + logger.error(f"Could not open IMU with error:\n{e}") + return [] + if not dev: return [] @@ -435,7 +440,7 @@ def open(self): logger.error( f"Could not create 'hhd' trigger. IMU will not work. Error:\n{e}" ) - return + return False self.opened = True # Find trigger @@ -449,7 +454,7 @@ def open(self): break if not trig: logger.warning("Imu timer trigger not found, IMU will not work.") - return + return False # Set frequency try: @@ -459,7 +464,7 @@ def open(self): f.write(str(self.freq)) except Exception as e: logger.warning("Could not set sampling frequency, IMU will not work.") - return + return False self.old_triggers = {} for d in self.devices: @@ -476,6 +481,8 @@ def open(self): with open(trig_fn, "w") as f: f.write(f"hhd") + return True + def close(self): if not self.opened: return diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index c549843c..30f13408 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -199,9 +199,11 @@ def prepare(m): # d_vend.open() prepare(d_xinput) if conf.get("imu", False): + start_imu = True if dconf.get("hrtimer", False): - d_timer.open() - prepare(d_imu) + start_imu = d_timer.open() + if start_imu: + prepare(d_imu) # if has_touchpad and d_params["uses_touch"]: # prepare(d_touch) prepare(d_volume_btn) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 7c32deb3..f145f335 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -294,9 +294,11 @@ def prepare(m): d_vend.open() prepare(d_xinput) if conf.get("imu", False): + start_imu = True if dconf.get("hrtimer", False): - d_timer.open() - prepare(d_imu) + start_imu = d_timer.open() + if start_imu: + prepare(d_imu) if has_touchpad and d_params["uses_touch"]: prepare(d_touch) prepare(d_kbd_1) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index efff109e..ced148f0 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -223,8 +223,8 @@ def prepare(m): d_vend.open() prepare(d_xinput) if conf.get("imu", False): - d_timer.open() - prepare(d_imu) + if d_timer.open(): + prepare(d_imu) prepare(d_kbd_1) for d in d_producers: prepare(d) From 9acc7019a28b24889fd2076b77c1739aa1a61d7e Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 11:18:26 +0100 Subject: [PATCH 0323/1497] remove imu check to avoid imu not launching properly --- src/hhd/controller/physical/imu.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 11916016..2a40a6dc 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -238,19 +238,15 @@ def open(self): if not sens_dir or not type: return [] - try: - dev = prepare_dev( - sens_dir, - type, - self.attr, - self.freq, - self.scale, - self.mappings, - self.update_trigger, - ) - except Exception as e: - logger.error(f"Could not open IMU with error:\n{e}") - return [] + dev = prepare_dev( + sens_dir, + type, + self.attr, + self.freq, + self.scale, + self.mappings, + self.update_trigger, + ) if not dev: return [] From 63fd6ea0443437a213e5cdb1032655bd65296ee3 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 28 Jan 2024 19:55:37 +0800 Subject: [PATCH 0324/1497] fix groy mappings for air plus --- src/hhd/device/ayaneo/__init__.py | 7 ++++++- src/hhd/device/ayaneo/const.py | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index 7d7a1fce..c2463761 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -1,5 +1,6 @@ from threading import Event, Thread from typing import Any, Sequence +from .const import AYANEO_AIR_PLUS_MAPPINGS from hhd.plugins import ( Config, @@ -14,7 +15,11 @@ AYANEO_CONFS = { - "AIR Plus": {"name": "AIR Plus", "hrtimer": True}, + "AIR Plus": { + "name": "AYANEO AIR Plus", + "hrtimer": True, + "mapping": AYANEO_AIR_PLUS_MAPPINGS, + }, } class AyaneoControllersPlugin(HHDPlugin): diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index 35b3660d..526951d9 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -24,4 +24,14 @@ "anglvel_y": ("gyro_z", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), "timestamp": ("gyro_ts", None, 1, None), +} + +AYANEO_AIR_PLUS_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", 1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", 1, None), + "timestamp": ("gyro_ts", None, 1, None), } \ No newline at end of file From 6b07f788c20e03e2ee8a840cb867f82d0365d8c0 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 17:30:04 +0100 Subject: [PATCH 0325/1497] fix holding power button devices open --- src/hhd/plugins/powerbutton/base.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 09feeb3a..643ccdcf 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -203,9 +203,13 @@ def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Even # Initial check for steam if not is_steam_gamescope_running(perms): # Close devices - if dev: - dev.close() - dev = None + if devs: + for d in devs: + d.close() + devs = [] + if dev: + dev.close() + dev = None logger.info(f"Waiting for steam to launch.") while not is_steam_gamescope_running(perms): sleep(STEAM_WAIT_DELAY) @@ -274,3 +278,6 @@ def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Even finally: if dev: dev.close() + if devs: + for d in devs: + d.close() From 8d0a03170abd3845e0d2ba374979b8b63ab9bfad Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 18:08:13 +0100 Subject: [PATCH 0326/1497] swtich to var for the sysfs config --- src/hhd/controller/physical/imu.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 2a40a6dc..4e2c3777 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -33,6 +33,7 @@ class DeviceInfo(NamedTuple): ACCEL_NAMES = ["accel_3d"] GYRO_NAMES = ["gyro_3d"] IMU_NAMES = ["bmi323-imu", "BMI0160", "BMI0260"] +SYSFS_TRIG_CONFIG_DIR = os.environ.get("HHD_MOUNT_TRIG_SYSFS", "/var/trig_sysfs_config") ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), @@ -419,9 +420,10 @@ def open(self): subprocess.run(["modprobe", "industrialio-sw-trigger"], capture_output=True) subprocess.run(["modprobe", "iio-trig-sysfs"], capture_output=True) subprocess.run(["modprobe", "iio-trig-hrtimer"], capture_output=True) - os.makedirs("/config", exist_ok=True) + os.makedirs(SYSFS_TRIG_CONFIG_DIR, exist_ok=True) subprocess.run( - ["mount", "-t", "configfs", "none", "/config"], capture_output=True + ["mount", "-t", "configfs", "none", SYSFS_TRIG_CONFIG_DIR], + capture_output=True, ) except Exception as e: logger.warning( @@ -430,8 +432,9 @@ def open(self): # Create trigger try: - if not os.path.isdir("/config/iio/triggers/hrtimer/hhd"): - os.makedirs("/config/iio/triggers/hrtimer/hhd", exist_ok=True) + trig_dir = os.path.join(SYSFS_TRIG_CONFIG_DIR, "iio/triggers/hrtimer/hhd") + if not os.path.isdir(trig_dir): + os.makedirs(trig_dir, exist_ok=True) except Exception as e: logger.error( f"Could not create 'hhd' trigger. IMU will not work. Error:\n{e}" @@ -494,7 +497,8 @@ def close(self): logger.error(f"Could not restore original trigger:\n{trig} to {name}") try: - os.rmdir("/config/iio/triggers/hrtimer/hhd") + trig_dir = os.path.join(SYSFS_TRIG_CONFIG_DIR, "iio/triggers/hrtimer/hhd") + os.rmdir(trig_dir) except Exception as e: logger.error(f"Could not delete hrtimer trigger. Error:\n{e}") From a6024a5052a6a500d5876dcc54af1b00b68fc58d Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 18:30:19 +0100 Subject: [PATCH 0327/1497] try undoing hide change --- src/hhd/controller/physical/evdev.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index ed1266bd..1f7d6007 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -149,16 +149,6 @@ def open(self) -> Sequence[int]: if not matches: continue - self.dev = dev - if self.grab: - self.dev.grab() - self.ranges = { - a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore - } - self.fd = dev.fd - self.started = True - self.effect_id = -1 - # Run after init to avoid having leftover rules if self.hide: # Check we are root @@ -173,6 +163,16 @@ def open(self) -> Sequence[int]: f"Not running as root, device '{dev.name}' could not be hid." ) + self.dev = dev + if self.grab: + self.dev.grab() + self.ranges = { + a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore + } + self.fd = dev.fd + self.started = True + self.effect_id = -1 + return [self.fd] err = f"Device with the following not found:\n" From 2eeedcff9d67639649abed69aa911e09ac0da94e Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 18:33:20 +0100 Subject: [PATCH 0328/1497] undo switch --- src/hhd/controller/physical/evdev.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 1f7d6007..ed1266bd 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -149,6 +149,16 @@ def open(self) -> Sequence[int]: if not matches: continue + self.dev = dev + if self.grab: + self.dev.grab() + self.ranges = { + a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore + } + self.fd = dev.fd + self.started = True + self.effect_id = -1 + # Run after init to avoid having leftover rules if self.hide: # Check we are root @@ -163,16 +173,6 @@ def open(self) -> Sequence[int]: f"Not running as root, device '{dev.name}' could not be hid." ) - self.dev = dev - if self.grab: - self.dev.grab() - self.ranges = { - a: (i.min, i.max) for a, i in self.dev.capabilities().get(B("EV_ABS"), []) # type: ignore - } - self.fd = dev.fd - self.started = True - self.effect_id = -1 - return [self.fd] err = f"Device with the following not found:\n" From fc9c4d2bd690738a6af288211808cb2be8a13dc3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 18:58:56 +0100 Subject: [PATCH 0329/1497] update readme --- readme.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index b1523e1c..40ccb95a 100644 --- a/readme.md +++ b/readme.md @@ -18,6 +18,7 @@ depending on the game. - Legion Go - ROG Ally - GPD Win 4, Win Mini, and Win Max 2 2023 +- Ayaneo Air Plus *Current Features*: - Fully functional DualSense and Dualsense Edge emulation @@ -29,8 +30,7 @@ depending on the game. - No weird glyphs - Gyro and back button support (outside Steam) - Virtual Touchpad Emulation - - Fixes left and right clicks within gamescope when using the Legion Go - touchpad. + - Fixes left and right clicks within gamescope when using the device touchpad. - Power Button plugin for Big Picture/Steam Deck Mode - Short press makes Steam backup saves and wink before suspend. - Long press opens Steam power menu. @@ -38,7 +38,7 @@ depending on the game. - UI based Configuration - Generic API that can be used from bash scripts (through `curl`) - Decky Plugin - - Webapp on https://hhd.dev and through Electron + - Webapp on https://hhd.dev and through Electron. - Built-in updater. *Planned Features (in this order)*: @@ -61,19 +61,20 @@ The easiest way to use Handheld Daemon is to install Bazzite which comes pre-installed with the latest version and all required kernel fixes for supported devices, see [here](#bazzite). +> [!WARNING] +> There is a bug that breaks how Dualsense controllers are parsed in Steam in various +> distros, which causes Gyro, LEDs, and paddles to not be detected in Steam, +> and the Dualsense Edge mapping being very wrong. +> ChimeraOS 45, and certain versions of Nobara 38, and 39 also have this issue. +> It is being investigated. + > To ensure the gyro of the Legion Go with AMD SFH runs smoothly, > a udev rule is included that disables the use of the accelerometer by the > system (e.g., iio-sensor-proxy). -> This limitation will be lifted in the future, if a new driver is written for -> amd-sfh. -> -> If you want display auto rotation to work, use the local steps and -> modify the `83-hhd.rules` file -> to remove the iio udev rule. However, the gyro will not work properly. +> If you want display auto rotation to work, see manual local steps. ### Automatic Local Install -You can use the following bash scripts to install and uninstall Handheld Daemon -(experimental). +You can use the following bash scripts to install and uninstall Handheld Daemon. Then, update from Decky or the UI. These steps do not work on Bazzite, see [here](#bazzite). @@ -138,6 +139,10 @@ pip install --upgrade hhd # Install udev rules and create a service file sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules + +# Change rules to re-enable display autorotation if you do not want gyro support. +# sudo nano /etc/udev/rules.d/83-hhd.rules + sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service # Start service and reboot From d7c06533cd072ef4eec563ead67b8db38e512abd Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 28 Jan 2024 20:17:41 +0100 Subject: [PATCH 0330/1497] add QAM button to GPD devices --- src/hhd/controller/base.py | 7 +++++-- src/hhd/device/gpd/win/base.py | 10 ++++++++++ src/hhd/device/gpd/win/controllers.yml | 9 +++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 94458506..8ce23206 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -250,6 +250,7 @@ def __init__( r3_to_share: bool = False, select_reboots: bool = False, nintendo_mode: bool = False, + qam_button: str | None = None, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -258,7 +259,6 @@ def __init__( self.touchpad = touchpad self.status = status self.trigger_discrete_lvl = trigger_discrete_lvl - self.share_to_qam = share_to_qam self.touchpad_short = touchpad_short self.touchpad_hold = touchpad_hold self.touchpad_right = touchpad_right @@ -273,6 +273,9 @@ def __init__( self.queue: list[tuple[Event | Literal["reboot"], float]] = [] self.select_pressed = None self.select_is_held = False + self.qam_button = qam_button + if share_to_qam: + self.qam_button = "share" assert touchpad is None, "touchpad rewiring not supported yet" @@ -445,7 +448,7 @@ def process(self, events: Sequence[Event]): self.select_is_held = False self.select_pressed = None - if self.share_to_qam and ev["code"] == "share": + if self.qam_button is not None and ev["code"] == self.qam_button: if ev["value"]: ev["code"] = "mode" self.queue.append( diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index f145f335..fc3e1d47 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -249,6 +249,14 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # btn_map={EC("KEY_SYSRQ"): "extra_l1", EC("KEY_PAUSE"): "extra_r1"}, ) + match conf["l4r4_to_qam"].to(str): + case "l4": + qam_button = "extra_l1" + case "r4": + qam_button = "extra_r1" + case _: + qam_button = None + if has_touchpad: touch_actions = ( conf["touchpad.controller"] @@ -262,12 +270,14 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d touchpad_short=touch_actions["short"].to(TouchpadAction), touchpad_hold=touch_actions["hold"].to(TouchpadAction), nintendo_mode=conf["nintendo_mode"].to(bool), + qam_button=qam_button, ) else: multiplexer = Multiplexer( trigger="analog_to_discrete", dpad="analog_to_discrete", nintendo_mode=conf["nintendo_mode"].to(bool), + qam_button=qam_button, ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index 4b7aa584..ddaf535f 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -40,6 +40,15 @@ children: Swaps A with B and X with Y. default: False + l4r4_to_qam: + type: multiple + title: Map L4/R4 to QAM. + options: + disabled: "Disabled" + l4: "L4" + r4: "R4" + default: disabled + debug: type: bool title: Debug From c074cb0e3e13ab18fd150eb36df70044ede45038 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 29 Jan 2024 17:06:57 +0100 Subject: [PATCH 0331/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4ddc31a2..d7c4aee3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.1.3" +version = "1.1.4" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From a7271eef4d1dbbaebd5a5bbfe7ddf0a70328a9f0 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 30 Jan 2024 19:15:18 +0100 Subject: [PATCH 0332/1497] fix bug caused by adjustor settings --- src/hhd/plugins/settings.py | 118 ++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 60 deletions(-) diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 6da4192e..0cee8ecb 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -267,75 +267,75 @@ def parse_defaults(sets: HHDSettings): return out -def fill_in_defaults(s: Setting | Container | Mode): - s = copy(s) - s["tags"] = s.get("tags", []) - s["title"] = s.get("title", "") - s["hint"] = s.get("hint", None) - if s["type"] != "container" and s["type"] != "action": - s["default"] = s.get("default", None) +def pick_tag(tag, default, a, b): + if not b: + return a.get(tag, default) + return b.get(tag, a.get(tag, default)) - match s["type"]: - case "container": - s["children"] = { - k: fill_in_defaults(v) for k, v in s.get("children", {}).items() - } - case "mode": - s["modes"] = { - k: cast(Container, fill_in_defaults(v)) - for k, v in s.get("modes", {}).items() - } - case "multiple": - s["options"] = s.get("options", {}) - case "discrete": - s["options"] = s.get("options", []) - case "integer" | "float": - s["min"] = s.get("min", None) - s["max"] = s.get("max", None) - s["step"] = s.get("step", None) - case "custom": - s["config"] = s.get("config", None) - return s + +DEFAULT_TAGS = { + "type": None, + "title": "", + "hint": "", + "tags": [], + "default": None, +} + +TYPE_TAGS = { + "multiple": {"options": {}}, + "discrete": {"options": []}, + "int": {"min": None, "max": None, "step": None}, + "float": {"min": None, "max": None, "step": None}, + "custom": {"config": None}, +} def merge_reduce( - a: Setting | Container | Mode, b: Setting | Container | Mode -) -> Setting | Container | Mode: - if a["type"] != b["type"]: - return fill_in_defaults(b) + a: Setting | Container | Mode, b: Setting | Container | Mode | None = None +): + s = {} + for tag, default in DEFAULT_TAGS.items(): + s[tag] = pick_tag(tag, default, a, b) + + for tag, default in TYPE_TAGS.get(a["type"], {}).items(): + s[tag] = pick_tag(tag, default, a, b) + + if b and b.get("type", None) == a.get("type", None): + match s["type"]: + case "container": + new_children = dict(a.get("children", {})) + for k, v in b.get("children", {}).items(): + if k in new_children: + new_children[k] = merge_reduce(new_children[k], v) # type: ignore + else: + new_children[k] = v + s["children"] = new_children + case "mode": + new_children = dict(a.get("modes", {})) + for k, v in b.get("modes", {}).items(): + if k in new_children: + new_children[k] = merge_reduce(new_children[k], v) # type: ignore + else: + new_children[k] = v + s["modes"] = new_children + else: + if a.get("type", None) == "container": + s["children"] = { + k: merge_reduce(v) for k, v in a.get("children", {}).items() + } - match a["type"]: - case "container": - out = cast(Container, dict(b)) - new_children = dict(a.get("children", {})) - for k, v in b.items(): - if k in out: - out[k] = merge_reduce(out[k], b[k]) - else: - out[k] = v - out["children"] = new_children - return fill_in_defaults(out) - case "mode": - out = cast(Mode, dict(b)) - new_children = dict(a.get("modes", {})) - for k, v in b.items(): - if k in out: - out[k] = merge_reduce(out[k], b[k]) - else: - out[k] = v - out["modes"] = new_children - return fill_in_defaults(out) - case _: - return fill_in_defaults(b) + if a.get("type", None) == "mode": + s["modes"] = {k: merge_reduce(v) for k, v in a.get("modes", {}).items()} + return s def merge_reduce_sec(a: Section, b: Section): - out = {k: cast(Container, fill_in_defaults(v)) for k, v in a.items()} + out = {k: cast(Container, merge_reduce(v)) for k, v in a.items()} for k, v in b.items(): if k in out: out[k] = cast(Container, merge_reduce(out[k], v)) else: - out[k] = cast(Container, fill_in_defaults(v)) + out[k] = cast(Container, merge_reduce(v)) return out @@ -533,9 +533,7 @@ def save_state_yaml(fn: str, set: HHDSettings, conf: Config, shash=None): conf["version"] = shash with open(fn, "w") as f: - yaml.safe_dump( - dump_settings(set, conf, "default"), f, sort_keys=False - ) + yaml.safe_dump(dump_settings(set, conf, "default"), f, sort_keys=False) f.write("\n") f.write(dump_comment(set, STATE_HEADER)) From f43c322de674d5462f59ce3e9aeacff573952994 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 30 Jan 2024 20:08:18 +0100 Subject: [PATCH 0333/1497] fix incorrect order --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 40ccb95a..275a14c7 100644 --- a/readme.md +++ b/readme.md @@ -209,7 +209,7 @@ the right stick into a mouse. #### Extra steps GPD Win Devices In order for the back buttons in GPD Win Devices to work, you need to map the -back buttons to Left: Pause, Right: Printscreen using Windows. +back buttons to Left: Printscreen, Right: Pause using Windows. This is the default mapping, so if you never remapped them using Windows you will not have to. Handheld Daemon automatically handles the interval to enable being able to hold From 3bea4346c24aba89e4e1db41533592a6d6e98842 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 30 Jan 2024 21:05:38 +0100 Subject: [PATCH 0334/1497] add dualsense motion rules for (mostly) dolphin --- usr/lib/udev/rules.d/83-hhd.rules | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/usr/lib/udev/rules.d/83-hhd.rules b/usr/lib/udev/rules.d/83-hhd.rules index bd520dfe..d21061be 100644 --- a/usr/lib/udev/rules.d/83-hhd.rules +++ b/usr/lib/udev/rules.d/83-hhd.rules @@ -19,4 +19,8 @@ KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0666 # Handheld Daemon Emulated Controllers # VID is not reserved at the time of this writing ATTRS{idVendor}=="5335", MODE="0666", TAG+="uaccess" -ATTRS{id/vendor}=="5335", MODE="0666", TAG+="uaccess" \ No newline at end of file +ATTRS{id/vendor}=="5335", MODE="0666", TAG+="uaccess" + +# The following rule is required for the Dualsense evdev to be used from userspace +# (e.g., Dolphin) +SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="*Motion Sensors", MODE="0666", TAG+="uaccess" \ No newline at end of file From eb1c005e70391bf9b1314fe36c95a7b9f5d59573 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 30 Jan 2024 23:56:08 +0100 Subject: [PATCH 0335/1497] update readme with new tag --- readme.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 275a14c7..eac10b37 100644 --- a/readme.md +++ b/readme.md @@ -181,7 +181,7 @@ sudo rm /etc/systemd/system/hhd_local@.service rm -r ~/.config/hhd ``` -### Common Issues with Install +### After Install Instructions #### Extra steps for ROG Ally Using the gyroscope on the Ally requires a kernel that is patched to enable IMU support. @@ -207,6 +207,10 @@ LEDs will not work either, so that should be turned off. You can hold the ROG Crate button to switch to the ROG Ally's Mouse mode to turn the right stick into a mouse. +#### Extra steps for Ayaneo +Ayaneo uses the same gyroscope with the same configuration as the ally, so +reference the Ally's IMU steps to enable gyroscope support. + #### Extra steps GPD Win Devices In order for the back buttons in GPD Win Devices to work, you need to map the back buttons to Left: Printscreen, Right: Pause using Windows. From 5dbc9026f1be41dc3968067e0a6ead7036aa55a4 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 31 Jan 2024 00:49:32 +0100 Subject: [PATCH 0336/1497] add setup tools to requires --- hhd.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/hhd.spec b/hhd.spec index 4cc3745c..3b3aff56 100644 --- a/hhd.spec +++ b/hhd.spec @@ -19,6 +19,7 @@ Requires: python3 Requires: python3-evdev Requires: python3-rich Requires: python3-yaml +Requires: python3-setuptools %description Handheld Daemon is a project that aims to provide utilities for managing handheld devices. With features ranging from TDP controls, to controller remappings, and gamescope session management. This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will expose the settings of the plugins in a UI agnostic way. From 06b04cd755ec2c062251d5806df4af639594c81c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 31 Jan 2024 17:59:25 +0100 Subject: [PATCH 0337/1497] add powerbutton fix for isa --- src/hhd/plugins/powerbutton/base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 643ccdcf..81139249 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -142,6 +142,10 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) # Initial check for steam if not is_steam_gamescope_running(perms): # Close devices + if press_devs: + for d in press_devs: + d.close() + press_devs = [] if press_dev: press_dev.close() press_dev = None From 7817b69038302bd63a48f2a8a9241b54e6a060f9 Mon Sep 17 00:00:00 2001 From: honjow Date: Thu, 1 Feb 2024 03:04:41 +0800 Subject: [PATCH 0338/1497] add ayaneo2 support --- src/hhd/device/ayaneo/__init__.py | 20 +++++++++++++++++++- src/hhd/device/ayaneo/base.py | 9 +-------- src/hhd/device/ayaneo/const.py | 16 ++++++++++++++++ src/hhd/plugins/powerbutton/const.py | 4 ++++ 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index c2463761..078a3d3f 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -1,6 +1,8 @@ from threading import Event, Thread from typing import Any, Sequence -from .const import AYANEO_AIR_PLUS_MAPPINGS +from .const import ( + AYANEO_AIR_PLUS_MAPPINGS, +) from hhd.plugins import ( Config, @@ -20,6 +22,22 @@ "hrtimer": True, "mapping": AYANEO_AIR_PLUS_MAPPINGS, }, + "AYANEO 2": { + "name": "AYANEO 2", + "hrtimer": True, + }, + "GEEK": { + "name": "AYANEO GEEK", + "hrtimer": True, + }, + "AYANEO 2S": { + "name": "AYANEO S2", + "hrtimer": True, + }, + "GEEK 1S": { + "name": "AYANEO GEEK 1S", + "hrtimer": True, + }, } class AyaneoControllersPlugin(HHDPlugin): diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index 30f13408..14f43fb3 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -129,14 +129,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d pid=[KBD_PID], required=False, grab=True, - btn_map={ - EC("KEY_F15"): "extra_l1", - EC("KEY_F16"): "extra_r1", - EC("KEY_F17"): "mode", - EC("KEY_D"): "share", - EC("KEY_VOLUMEUP"): "key_volumeup", - EC("KEY_VOLUMEDOWN"): "key_volumedown", - }, + btn_map=dconf.get("btn_mapping", AYANEO_DEFAULT_MAPPINGS), ) if has_touchpad: diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index 526951d9..6cf121a0 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -34,4 +34,20 @@ "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", 1, None), "timestamp": ("gyro_ts", None, 1, None), +} + +AYANEO_DEFAULT_BTN_MAPPINGS: dict[int, str] = { + B("KEY_F15"): "extra_l1", + B("KEY_F16"): "extra_r1", + B("KEY_F17"): "mode", + B("KEY_D"): "share", + B("KEY_VOLUMEUP"): "key_volumeup", + B("KEY_VOLUMEDOWN"): "key_volumedown", +} + +AYANEO_NEXT_BTN_MAPPINGS: dict[int, str] = { + B("KEY_VOLUMEUP"): "key_volumeup", + B("KEY_VOLUMEDOWN"): "key_volumedown", + B("D"): "share", + B("KEY_F12"): "mode", } \ No newline at end of file diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index fabd658f..88d6f043 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -23,6 +23,10 @@ class PowerButtonConfig(NamedTuple): PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), PBC("AYANEO AIR Plus", "AIR Plus", type="hold_emitted"), + PBC("AYANEO 2", "AYANEO 2", type="hold_emitted"), + PBC("AYANEO GEEK", "GEEK", type="hold_emitted"), + PBC("AYANEO 2S", "AYANEO 2S", type="hold_emitted"), + PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 386e7aac9d673df37a703c888f059e6a83e26847 Mon Sep 17 00:00:00 2001 From: honjow Date: Thu, 1 Feb 2024 04:09:16 +0800 Subject: [PATCH 0339/1497] add AYANEO_2021_BTN_MAPPINGS --- src/hhd/device/ayaneo/__init__.py | 20 ++++---------------- src/hhd/device/ayaneo/base.py | 3 ++- src/hhd/device/ayaneo/const.py | 21 +++++++++++++++------ 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index 078a3d3f..dac4e704 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -22,22 +22,10 @@ "hrtimer": True, "mapping": AYANEO_AIR_PLUS_MAPPINGS, }, - "AYANEO 2": { - "name": "AYANEO 2", - "hrtimer": True, - }, - "GEEK": { - "name": "AYANEO GEEK", - "hrtimer": True, - }, - "AYANEO 2S": { - "name": "AYANEO S2", - "hrtimer": True, - }, - "GEEK 1S": { - "name": "AYANEO GEEK 1S", - "hrtimer": True, - }, + "AYANEO 2": {"name": "AYANEO 2", "hrtimer": True}, + "AYANEO 2S": {"name": "AYANEO S2", "hrtimer": True}, + "GEEK": {"name": "AYANEO GEEK", "hrtimer": True}, + "GEEK 1S": {"name": "AYANEO GEEK 1S", "hrtimer": True}, } class AyaneoControllersPlugin(HHDPlugin): diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index 14f43fb3..ab489239 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -20,6 +20,7 @@ AYANEO_TOUCHPAD_AXIS_MAP, AYANEO_TOUCHPAD_BUTTON_MAP, AYANEO_DEFAULT_MAPPINGS, + AYANEO_DEFAULT_BTN_MAPPINGS, ) ERROR_DELAY = 1 @@ -129,7 +130,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d pid=[KBD_PID], required=False, grab=True, - btn_map=dconf.get("btn_mapping", AYANEO_DEFAULT_MAPPINGS), + btn_map=dconf.get("btn_mapping", AYANEO_DEFAULT_BTN_MAPPINGS), ) if has_touchpad: diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index 6cf121a0..e388ed33 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -37,10 +37,10 @@ } AYANEO_DEFAULT_BTN_MAPPINGS: dict[int, str] = { - B("KEY_F15"): "extra_l1", - B("KEY_F16"): "extra_r1", - B("KEY_F17"): "mode", - B("KEY_D"): "share", + B("KEY_F15"): "extra_l1", # LC Button + B("KEY_F16"): "extra_r1", # RC Button + B("KEY_F17"): "mode", # Big Button + B("KEY_D"): "share", # Small Button B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", } @@ -48,6 +48,15 @@ AYANEO_NEXT_BTN_MAPPINGS: dict[int, str] = { B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", - B("D"): "share", - B("KEY_F12"): "mode", + B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] + B("KEY_F12"): "mode", # Big Button [[96, 105, 133], [88, 97, 125]] +} + +AYANEO_2021_BTN_MAPPINGS: dict[int, str] = { + B("KEY_VOLUMEUP"): "key_volumeup", + B("KEY_VOLUMEDOWN"): "key_volumedown", + B("KEY_DELETE"): "share", # TM Button [97,100,111] + B("KEY_ESC"): "extra_l1", # ESC Button [1] + B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] + # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button } \ No newline at end of file From 1522f3eeafc13f3481e7d1854196735df8c452cc Mon Sep 17 00:00:00 2001 From: honjow Date: Thu, 1 Feb 2024 21:23:52 +0800 Subject: [PATCH 0340/1497] update ayaneo2 groy mappings --- src/hhd/device/ayaneo/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index e388ed33..dfed1380 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -20,8 +20,8 @@ "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_x", "anglvel", 1, None), - "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_x": ("gyro_z", "anglvel", -1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), "timestamp": ("gyro_ts", None, 1, None), } From 3481750162d8a38bb822af9053648d34ce1c5e9d Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Thu, 1 Feb 2024 22:57:28 +0100 Subject: [PATCH 0341/1497] update ally detection for refurb units --- src/hhd/device/rog_ally/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/__init__.py b/src/hhd/device/rog_ally/__init__.py index 3d98794d..33846b7d 100644 --- a/src/hhd/device/rog_ally/__init__.py +++ b/src/hhd/device/rog_ally/__init__.py @@ -82,7 +82,8 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: # Match just product number, should be enough for now with open("/sys/devices/virtual/dmi/id/product_name") as f: - if not f.read().strip() == "ROG Ally RC71L_RC71L": + # Different variants of the ally can have an additional _RC71L or not + if "ROG Ally RC71L" not in f.read().strip(): return [] return [RogAllyControllersPlugin()] From 7a4c54d4c1698d7c014e7b514c6b8829a3ae0497 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Thu, 1 Feb 2024 23:44:43 +0100 Subject: [PATCH 0342/1497] add sd logic to powerbutton daemon and default --- src/hhd/plugins/powerbutton/__init__.py | 4 ++-- src/hhd/plugins/powerbutton/base.py | 18 ++++++++++++++---- src/hhd/plugins/powerbutton/const.py | 5 ++++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/hhd/plugins/powerbutton/__init__.py b/src/hhd/plugins/powerbutton/__init__.py index b2d70b89..50941ae5 100644 --- a/src/hhd/plugins/powerbutton/__init__.py +++ b/src/hhd/plugins/powerbutton/__init__.py @@ -49,10 +49,10 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing - from .base import get_config + from .base import get_config, DEFAULT_DEVICE cfg = get_config() if not cfg: - return [] + return [PowerbuttondPlugin(DEFAULT_DEVICE)] return [PowerbuttondPlugin(cfg)] diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 81139249..ab4e9be2 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -80,6 +80,16 @@ def register_power_buttons(b: PowerButtonConfig) -> list[evdev.InputDevice]: out.append(device) return out +def pick_closest_button(btns: list[evdev.InputDevice], cfg: PowerButtonConfig): + for phys in cfg.phys: + for b in btns: + if str(device.phys).startswith(phys): + return b + + if btns: + return btns[0] + return None + def register_hold_button(b: PowerButtonConfig) -> evdev.InputDevice | None: if not b.hold_phys or not b.hold_code: @@ -163,12 +173,12 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) press_devs = register_power_buttons(cfg) press_dev = press_devs[0] if press_devs else None hold_dev = register_hold_button(cfg) - if not press_dev or not hold_dev: + if not press_dev: logger.error(f"Power button interfaces not found, disabling plugin.") return # Add timeout to release the button if steam exits. - r = select.select([press_dev.fd, hold_dev.fd], [], [], STEAM_WAIT_DELAY)[0] + r = select.select([press_dev.fd, hold_dev.fd] if hold_dev else [press_dev.fd], [], [], STEAM_WAIT_DELAY)[0] if not r: continue @@ -181,7 +191,7 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) if ev.type == B("EV_KEY") and ev.code == B("KEY_POWER") and ev.value: logger.info("Executing short press.") issue_systemctl = not run_steam_shortpress(perms) - elif fd == hold_dev.fd: + elif hold_dev and fd == hold_dev.fd: ev = hold_dev.read_one() if ev.type == B("EV_KEY") and ev.code == cfg.hold_code and ev.value: logger.info("Executing long press.") @@ -221,7 +231,7 @@ def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Even if not dev: logger.info(f"Steam is running, hooking power button.") devs = register_power_buttons(cfg) - dev = devs[0] if devs else None + dev = pick_closest_button(devs, cfg) if not dev: logger.error(f"Power button not found, disabling plugin.") return diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index fabd658f..d50f7a92 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -5,7 +5,7 @@ class PowerButtonConfig(NamedTuple): device: str prod_name: str type: Literal["hold_emitted", "hold_isa"] = "hold_isa" - phys: Sequence[str] = ["LNXPWRBN", "PNP0C0C"] + phys: Sequence[str] = ["PNP0C0C", "LNXPWRBN"] hold_phys: Sequence[str] = ["phys-hhd-powerbutton", "isa0060"] hold_grab: bool = False hold_code: int = 125 # left meta @@ -19,10 +19,13 @@ class PowerButtonConfig(NamedTuple): SUPPORTED_DEVICES: Sequence[PowerButtonConfig] = [ PBC("Legion Go", "83E1"), PBC("ROG Ally", "ROG Ally RC71L_RC71L"), + PBC("ROG Ally", "ROG Ally RC71L"), PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), PBC("AYANEO AIR Plus", "AIR Plus", type="hold_emitted"), + PBC("Steam Deck LCD", "SDL", type="hold_emitted", phys=["isa0060", "PNP0C0C", "LNXPWRBN"]), + PBC("Steam Deck OLED", "SDLD", type="hold_emitted", phys=["isa0060", "PNP0C0C", "LNXPWRBN"]), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 5ff640233b4c99619e3362af7e98c4862d3577ac Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Mon, 29 Jan 2024 21:19:47 -0800 Subject: [PATCH 0343/1497] update nixpkgs to point at unstable channel --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index eac10b37..81f60682 100644 --- a/readme.md +++ b/readme.md @@ -284,12 +284,12 @@ Essentially, a new service file needs to be written for Bazzite that contains th correct home path (`/var/home`) and then you can disable the built-in version service and use the new one instead. -### ❄️ NixOS (experimental) -Update the `nixpkgs.url` input in your flake to point at [the PR](https://github.com/NixOS/nixpkgs/pull/277661/) branch: +### ❄️ NixOS +Ensure your `nixpkgs` is on the `unstable` channel (as of Feb 2024): ```nix inputs = { - nixpkgs.url = "github:appsforartists/nixpkgs/handheld-daemon"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; ``` and add this line to your `configuration.nix`: From bf8a76f0b14b6321d66c2b7756ce26b5aa601eb5 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Thu, 1 Feb 2024 23:48:44 +0100 Subject: [PATCH 0344/1497] fix protocol error --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 81f60682..5dd5dfdd 100644 --- a/readme.md +++ b/readme.md @@ -225,7 +225,7 @@ Left-key: PrtSc + 0ms + NC + 0ms + NC + 0ms + NC Right-key: Pausc + 0ms + NC + 0ms + NC + 0ms + NC ``` -To use the gyro, you will need a [dkms package](github.com/hhd-dev/bmi260) +To use the gyro, you will need a [dkms package](https://github.com/hhd-dev/bmi260) for the Bosch 260 IMU Driver. Follow the instructions in that repository to install it. From c980f91e6bd01b10b767f13a090ffe4e1fa15ea5 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 1 Feb 2024 23:57:05 +0100 Subject: [PATCH 0345/1497] add sd dmis --- src/hhd/plugins/powerbutton/base.py | 12 +++++++++--- src/hhd/plugins/powerbutton/const.py | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index ab4e9be2..3883ab59 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -80,12 +80,13 @@ def register_power_buttons(b: PowerButtonConfig) -> list[evdev.InputDevice]: out.append(device) return out + def pick_closest_button(btns: list[evdev.InputDevice], cfg: PowerButtonConfig): for phys in cfg.phys: for b in btns: - if str(device.phys).startswith(phys): + if str(b.phys).startswith(phys): return b - + if btns: return btns[0] return None @@ -178,7 +179,12 @@ def power_button_isa(cfg: PowerButtonConfig, perms: Context, should_exit: Event) return # Add timeout to release the button if steam exits. - r = select.select([press_dev.fd, hold_dev.fd] if hold_dev else [press_dev.fd], [], [], STEAM_WAIT_DELAY)[0] + r = select.select( + [press_dev.fd, hold_dev.fd] if hold_dev else [press_dev.fd], + [], + [], + STEAM_WAIT_DELAY, + )[0] if not r: continue diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 2020f7ca..9c0408ac 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -28,8 +28,18 @@ class PowerButtonConfig(NamedTuple): PBC("AYANEO GEEK", "GEEK", type="hold_emitted"), PBC("AYANEO 2S", "AYANEO 2S", type="hold_emitted"), PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), - PBC("Steam Deck LCD", "SDL", type="hold_emitted", phys=["isa0060", "PNP0C0C", "LNXPWRBN"]), - PBC("Steam Deck OLED", "SDLD", type="hold_emitted", phys=["isa0060", "PNP0C0C", "LNXPWRBN"]), + PBC( + "Steam Deck LCD", + "Jupiter", + type="hold_emitted", + phys=["isa0060", "PNP0C0C", "LNXPWRBN"], + ), + PBC( + "Steam Deck OLED", + "Galileo", + type="hold_emitted", + phys=["isa0060", "PNP0C0C", "LNXPWRBN"], + ), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 12d0cc5c9437bf959e6d63fb758be8d8720cefe4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 2 Feb 2024 13:47:02 +0100 Subject: [PATCH 0346/1497] remove unneeded provides --- PKGBUILD | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 0a183557..53864e8f 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -6,8 +6,7 @@ pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' arch=('x86_64') url='https://github.com/hhd-dev/hhd' license=('MIT') -depends=('python' python-setuptools 'python-evdev' 'python-rich' 'python-yaml') -provides=('hhd') +depends=('python' 'python-setuptools' 'python-evdev' 'python-rich' 'python-yaml') optdepends=('hhd-user: allows running hhd as a user service.') makedepends=('python-'{'build','installer','setuptools','wheel'}) source=("https://pypi.python.org/packages/source/h/hhd/hhd-${pkgver}.tar.gz") From d94eeba6b2b8977b8cb958de40ba34f9cbe4d6b4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 2 Feb 2024 13:57:40 +0100 Subject: [PATCH 0347/1497] combine ayaneo drivers --- src/hhd/device/ayaneo/__init__.py | 33 ++++++++++++++++++++++------ src/hhd/device/ayaneo/base.py | 9 +++----- src/hhd/device/ayaneo/const.py | 36 +++++++++++++------------------ 3 files changed, 44 insertions(+), 34 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index dac4e704..c4f479fe 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -18,8 +18,8 @@ AYANEO_CONFS = { "AIR Plus": { - "name": "AYANEO AIR Plus", - "hrtimer": True, + "name": "AYANEO AIR Plus", + "hrtimer": True, "mapping": AYANEO_AIR_PLUS_MAPPINGS, }, "AYANEO 2": {"name": "AYANEO 2", "hrtimer": True}, @@ -28,6 +28,15 @@ "GEEK 1S": {"name": "AYANEO GEEK 1S", "hrtimer": True}, } + +def get_default_config(product_name: str): + return { + "name": product_name, + "hrtimer": True, + "untested": True, + } + + class AyaneoControllersPlugin(HHDPlugin): name = "ayaneo_controllers" priority = 18 @@ -115,11 +124,21 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing - # Match just product number, should be enough for now + # Match just product name + # if a device exists here its officially supported with open("/sys/devices/virtual/dmi/id/product_name") as f: dmi = f.read().strip() - dconf = AYANEO_CONFS.get(dmi, None) - if not dconf: - return [] + + dconf = AYANEO_CONFS.get(dmi, None) + if dconf: + return [AyaneoControllersPlugin(dmi, dconf)] + + # Fallback to chassis vendor since aya contains no usb devices + with open("/sys/class/dmi/id/chassis_vendor") as f: + vendor = f.read().strip() + + if "ayaneo" in vendor.lower().strip(): + return [AyaneoControllersPlugin(dmi, get_default_config(dmi))] + + return [] - return [AyaneoControllersPlugin(dmi, dconf)] diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index ab489239..cf10baa8 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -17,10 +17,10 @@ from hhd.plugins import Config, Context, Emitter, get_outputs from .const import ( + AYANEO_BTN_MAPPINGS, + AYANEO_DEFAULT_MAPPINGS, AYANEO_TOUCHPAD_AXIS_MAP, AYANEO_TOUCHPAD_BUTTON_MAP, - AYANEO_DEFAULT_MAPPINGS, - AYANEO_DEFAULT_BTN_MAPPINGS, ) ERROR_DELAY = 1 @@ -28,9 +28,6 @@ logger = logging.getLogger(__name__) -from .const import ( - AYANEO_DEFAULT_MAPPINGS, -) GAMEPAD_VID = 0x045E GAMEPAD_PID = 0x028E @@ -130,7 +127,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d pid=[KBD_PID], required=False, grab=True, - btn_map=dconf.get("btn_mapping", AYANEO_DEFAULT_BTN_MAPPINGS), + btn_map=dconf.get("btn_mapping", AYANEO_BTN_MAPPINGS), ) if has_touchpad: diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index dfed1380..4abfbb47 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -36,27 +36,21 @@ "timestamp": ("gyro_ts", None, 1, None), } -AYANEO_DEFAULT_BTN_MAPPINGS: dict[int, str] = { - B("KEY_F15"): "extra_l1", # LC Button - B("KEY_F16"): "extra_r1", # RC Button - B("KEY_F17"): "mode", # Big Button - B("KEY_D"): "share", # Small Button - B("KEY_VOLUMEUP"): "key_volumeup", - B("KEY_VOLUMEDOWN"): "key_volumedown", -} - -AYANEO_NEXT_BTN_MAPPINGS: dict[int, str] = { +AYANEO_BTN_MAPPINGS: dict[int, str] = { + # Volume buttons come from the same keyboard B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", - B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] - B("KEY_F12"): "mode", # Big Button [[96, 105, 133], [88, 97, 125]] -} - -AYANEO_2021_BTN_MAPPINGS: dict[int, str] = { - B("KEY_VOLUMEUP"): "key_volumeup", - B("KEY_VOLUMEDOWN"): "key_volumedown", - B("KEY_DELETE"): "share", # TM Button [97,100,111] - B("KEY_ESC"): "extra_l1", # ESC Button [1] - B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] + # Air Plus mappings + B("KEY_F17"): "mode", # Big Button + B("KEY_D"): "share", # Small Button + B("KEY_F15"): "extra_l1", # LC Button + B("KEY_F16"): "extra_r1", # RC Button + # NEXT mappings + B("KEY_F12"): "mode", # Big Button [[96, 105, 133], [88, 97, 125]] + # B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] + # 2021 Mappings + B("KEY_DELETE"): "share", # TM Button [97,100,111] + B("KEY_ESC"): "extra_l1", # ESC Button [1] + B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button -} \ No newline at end of file +} From 55d47848f9bf3e1a49d691699862c2951065ec86 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 2 Feb 2024 14:32:58 +0100 Subject: [PATCH 0348/1497] add extra dmi for gpd win max --- src/hhd/device/gpd/win/__init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 6e64e341..30a2fae1 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -17,8 +17,15 @@ GPD_CONFS = { "G1618-04": {"name": "GPD Win 4", "hrtimer": True}, "G1617-01": {"name": "GPD Win Mini", "touchpad": True}, + # TODO: GPD Win Max has multiple product names, switch to partial match + "G1619-04": { + "name": "GPD Win Max 2 2023 (04)", + "hrtimer": True, + "touchpad": True, + "mapping": GPD_WIN_MAX_2_2023_MAPPINGS, + }, "G1619-05": { - "name": "GPD Win Max 2 2023", + "name": "GPD Win Max 2 2023 (05)", "hrtimer": True, "touchpad": True, "mapping": GPD_WIN_MAX_2_2023_MAPPINGS, From 21bbc0af41dceb84a4764325ff1df92c95f6e6d6 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 2 Feb 2024 15:45:51 +0100 Subject: [PATCH 0349/1497] add ayaneo air extra buttons --- src/hhd/device/ayaneo/const.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index 4abfbb47..d4f20b78 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -53,4 +53,8 @@ B("KEY_ESC"): "extra_l1", # ESC Button [1] B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button + # Older than air devices without the hwdb rule by opengamepadui + B("KEY_F8"): "extra_l1", # LC Button 66 + B("KEY_F9"): "extra_r1", # RC Button 67 + B("KEY_F10"): "mode", # Big Button 68 } From 237336b95e87140fd6c7477087aed7230e4b5396 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 2 Feb 2024 15:56:00 +0100 Subject: [PATCH 0350/1497] undo change --- src/hhd/device/ayaneo/const.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py index d4f20b78..4abfbb47 100644 --- a/src/hhd/device/ayaneo/const.py +++ b/src/hhd/device/ayaneo/const.py @@ -53,8 +53,4 @@ B("KEY_ESC"): "extra_l1", # ESC Button [1] B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button - # Older than air devices without the hwdb rule by opengamepadui - B("KEY_F8"): "extra_l1", # LC Button 66 - B("KEY_F9"): "extra_r1", # RC Button 67 - B("KEY_F10"): "mode", # Big Button 68 } From a00aaab9be8883214188859cef7aef7a398915e6 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 2 Feb 2024 19:57:04 +0100 Subject: [PATCH 0351/1497] add gyro config file --- src/hhd/plugins/gyro.yml | 46 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/hhd/plugins/gyro.yml diff --git a/src/hhd/plugins/gyro.yml b/src/hhd/plugins/gyro.yml new file mode 100644 index 00000000..493a4ad2 --- /dev/null +++ b/src/hhd/plugins/gyro.yml @@ -0,0 +1,46 @@ +type: mode +title: Gyro Axis + +default: default +modes: + default: + type: container + title: Default + hint: >- + The default axis loaded for this device. + remapped: + type: container + title: Configure + hint: >- + Remap and invert the axis of your device. If the axis of your device are + wrong, please submit a picture or a text version of the following. + children: + product_name: + type: display + title: Product + x_axis: &axis + type: multiple + options: + x: "X" + y: "Y" + z: "Z" + title: Axis X + default: "x" + x_invert: &invert + type: bool + default: False + title: Invert X + y_axis: + <<: *axis + title: Axis Y + default: "y" + y_invert: + <<: *invert + title: Invert Y + z_axis: + <<: *axis + title: Axis Z + default: "z" + z_invert: + <<: *invert + title: Invert Z From a080bf3b795da83c79bbf2404a8045df2dfd4b15 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 02:01:33 +0100 Subject: [PATCH 0352/1497] switch to name match for keyboard --- src/hhd/device/legion_go/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 5dda8e56..80c606cd 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -239,8 +239,8 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): d_shortcuts = GenericGamepadEvdev( vid=[LEN_VID], pid=list(LEN_PIDS), - # name=[" Legion Controller for Windows Keyboard"], - capabilities={EC("EV_KEY"): [EC("KEY_1")]}, + name=[re.compile(".+Keyboard")], # " Legion Controller for Windows Keyboard" + # capabilities={EC("EV_KEY"): [EC("KEY_1")]}, # report_size=64, required=True, ) From 6447bed7d5884a2aecd84071dcb2d9f115f5738a Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 02:02:03 +0100 Subject: [PATCH 0353/1497] remove blank allow for aya, add readme disclaimer --- readme.md | 4 ++++ src/hhd/device/ayaneo/__init__.py | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 5dd5dfdd..c345bec4 100644 --- a/readme.md +++ b/readme.md @@ -211,6 +211,10 @@ the right stick into a mouse. Ayaneo uses the same gyroscope with the same configuration as the ally, so reference the Ally's IMU steps to enable gyroscope support. +Ayaneo support is still in the preliminary stages. +The buttons of these devices do not emit hold information, and due to this reason +they may fail to register in certain use-cases. + #### Extra steps GPD Win Devices In order for the back buttons in GPD Win Devices to work, you need to map the back buttons to Left: Printscreen, Right: Pause using Windows. diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index c4f479fe..a9ec55ff 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -134,11 +134,11 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: return [AyaneoControllersPlugin(dmi, dconf)] # Fallback to chassis vendor since aya contains no usb devices - with open("/sys/class/dmi/id/chassis_vendor") as f: - vendor = f.read().strip() + # with open("/sys/class/dmi/id/chassis_vendor") as f: + # vendor = f.read().strip() - if "ayaneo" in vendor.lower().strip(): - return [AyaneoControllersPlugin(dmi, get_default_config(dmi))] + # if "ayaneo" in vendor.lower().strip(): + # return [AyaneoControllersPlugin(dmi, get_default_config(dmi))] return [] From b2ee190f48bab9240d8b10d3eec39f3240a4bcf8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 02:02:08 +0100 Subject: [PATCH 0354/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d7c4aee3..63f90d9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.1.4" +version = "1.1.5" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From abd5689e7b695806c663702d0addef714bf21993 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 16:00:57 +0100 Subject: [PATCH 0355/1497] tweak power button order --- src/hhd/plugins/powerbutton/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 9c0408ac..e20a4066 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -5,7 +5,7 @@ class PowerButtonConfig(NamedTuple): device: str prod_name: str type: Literal["hold_emitted", "hold_isa"] = "hold_isa" - phys: Sequence[str] = ["PNP0C0C", "LNXPWRBN"] + phys: Sequence[str] = ["LNXPWRBN", "PNP0C0C"] hold_phys: Sequence[str] = ["phys-hhd-powerbutton", "isa0060"] hold_grab: bool = False hold_code: int = 125 # left meta From 5d70d4b1bc8c97bef8d9482e1774d9c37b34be9c Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 16:03:14 +0100 Subject: [PATCH 0356/1497] add generic gyro axis override --- src/hhd/plugins/__init__.py | 4 +- src/hhd/plugins/gyro.yml | 7 ++- src/hhd/plugins/inputs.py | 108 ++++++++++++++++++++++++++++++++++++ src/hhd/settings.yml | 2 +- 4 files changed, 117 insertions(+), 4 deletions(-) diff --git a/src/hhd/plugins/__init__.py b/src/hhd/plugins/__init__.py index d5b7cad3..bf107303 100644 --- a/src/hhd/plugins/__init__.py +++ b/src/hhd/plugins/__init__.py @@ -3,7 +3,7 @@ from .settings import HHDSettings from .utils import get_relative_fn, load_relative_yaml from .outputs import get_outputs_config, get_outputs -from .inputs import get_touchpad_config +from .inputs import get_touchpad_config, get_gyro_config, get_gyro_state __all__ = [ @@ -19,4 +19,6 @@ "get_outputs_config", "get_outputs", "get_touchpad_config", + "get_gyro_config", + "get_gyro_state", ] diff --git a/src/hhd/plugins/gyro.yml b/src/hhd/plugins/gyro.yml index 493a4ad2..22335ed9 100644 --- a/src/hhd/plugins/gyro.yml +++ b/src/hhd/plugins/gyro.yml @@ -10,12 +10,15 @@ modes: The default axis loaded for this device. remapped: type: container - title: Configure + title: Override hint: >- Remap and invert the axis of your device. If the axis of your device are wrong, please submit a picture or a text version of the following. children: - product_name: + manufacturer: + type: display + title: Manufacturer + product: type: display title: Product x_axis: &axis diff --git a/src/hhd/plugins/inputs.py b/src/hhd/plugins/inputs.py index a2ad4023..577d37a6 100644 --- a/src/hhd/plugins/inputs.py +++ b/src/hhd/plugins/inputs.py @@ -1,5 +1,113 @@ +from typing import cast + +from hhd.controller import Axis + +from .conf import Config from .utils import load_relative_yaml +def get_product(): + try: + with open("/sys/devices/virtual/dmi/id/product_name", "r") as f: + return f.read().strip() + except Exception: + return "Uknown" + + +def get_vendor(): + try: + with open("/sys/devices/virtual/dmi/id/chassis_vendor", "r") as f: + return f.read().strip() + except Exception: + return "Uknown" + + def get_touchpad_config(): return load_relative_yaml("touchpad.yml") + + +def get_gyro_config( + mapping: dict[str, tuple[Axis, str | None, float, float | None]] | None +): + g = load_relative_yaml("gyro.yml") + g["modes"]["remapped"]["children"]["manufacturer"]["default"] = f'"{get_vendor()}"' + g["modes"]["remapped"]["children"]["product"]["default"] = f'"{get_product()}"' + if mapping: + for key, (ax, _, scale, _) in mapping.items(): + match key: + case "anglvel_x": + setting = "x" + case "anglvel_y": + setting = "y" + case "anglvel_z": + setting = "z" + case _: + setting = None + match ax: + case "gyro_x": + default = "x" + case "gyro_y": + default = "y" + case "gyro_z": + default = "z" + case _: + default = None + invert = scale < 0 + + if setting and default: + g["modes"]["remapped"]["children"][f"{setting}_axis"][ + "default" + ] = default + g["modes"]["remapped"]["children"][f"{setting}_invert"][ + "default" + ] = invert + return g + + +def get_gyro_state( + conf: Config, + default: dict[str, tuple[Axis, str | None, float, float | None]], +) -> dict[str, tuple[Axis, str | None, float, float | None]]: + if conf["mode"].to(str) == "default": + return default + + rem = conf.get("remapped", {}) + return { + "timestamp": ("gyro_ts", None, 1, None), + "accel_x": ( + cast(Axis, f"accel_{rem.get('x_axis', 'x')}"), + "accel", + -1 if rem.get("x_invert", False) else 1, + 3, + ), + "accel_y": ( + cast(Axis, f"accel_{rem.get('y_axis', 'y')}"), + "accel", + -1 if rem.get("y_invert", False) else 1, + 3, + ), + "accel_z": ( + cast(Axis, f"accel_{rem.get('z_axis', 'z')}"), + "accel", + -1 if rem.get("z_invert", False) else 1, + 3, + ), + "anglvel_x": ( + cast(Axis, f"gyro_{rem.get('x_axis', 'x')}"), + "anglvel", + -1 if rem.get("x_invert", False) else 1, + None, + ), + "anglvel_y": ( + cast(Axis, f"gyro_{rem.get('y_axis', 'y')}"), + "anglvel", + -1 if rem.get("y_invert", False) else 1, + None, + ), + "anglvel_z": ( + cast(Axis, f"gyro_{rem.get('z_axis', 'z')}"), + "anglvel", + -1 if rem.get("z_invert", False) else 1, + None, + ), + } diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index aa8595a9..ca31779c 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -13,7 +13,7 @@ version: update_decky: type: action - tags: [hhd-update-decky] + tags: [hhd-update-decky, decky] title: "Update Decky" hint: "Updates the Decky plugin to the latest release." From 5992c91b15a54fb8658be94a6e9442c4fd253494 Mon Sep 17 00:00:00 2001 From: honjow Date: Sat, 3 Feb 2024 17:33:20 +0800 Subject: [PATCH 0357/1497] add aokzoe support --- pyproject.toml | 1 + src/hhd/device/aokzoe/__init__.py | 118 +++++++++++++ src/hhd/device/aokzoe/base.py | 230 ++++++++++++++++++++++++++ src/hhd/device/aokzoe/const.py | 22 +++ src/hhd/device/aokzoe/controllers.yml | 54 ++++++ src/hhd/plugins/powerbutton/const.py | 5 + 6 files changed, 430 insertions(+) create mode 100644 src/hhd/device/aokzoe/__init__.py create mode 100644 src/hhd/device/aokzoe/base.py create mode 100644 src/hhd/device/aokzoe/const.py create mode 100644 src/hhd/device/aokzoe/controllers.yml diff --git a/pyproject.toml b/pyproject.toml index 63f90d9f..169bb389 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,7 @@ legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" gpd_win = "hhd.device.gpd.win:autodetect" ayaneo = "hhd.device.ayaneo:autodetect" +aokzoe = "hhd.device.aokzoe:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/device/aokzoe/__init__.py b/src/hhd/device/aokzoe/__init__.py new file mode 100644 index 00000000..3675f7ee --- /dev/null +++ b/src/hhd/device/aokzoe/__init__.py @@ -0,0 +1,118 @@ +from threading import Event, Thread +from typing import Any, Sequence + +from hhd.plugins import ( + Config, + Context, + Emitter, + HHDPlugin, + load_relative_yaml, + get_outputs_config, +) +from hhd.plugins.settings import HHDSettings + + +AOKZOE_CONFS = { + "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, +} + + +def get_default_config(product_name: str): + return { + "name": product_name, + "hrtimer": True, + "untested": True, + } + + +class AokzoeControllersPlugin(HHDPlugin): + name = "aokzoe_controllers" + priority = 18 + log = "zokz" + + def __init__(self, dmi: str, dconf: dict) -> None: + self.t = None + self.should_exit = None + self.updated = Event() + self.started = False + self.t = None + + self.dmi = dmi + self.dconf = dconf + self.name = f"aokzoe_controllers@'{dconf.get('name', 'ukn')}'" + + def open( + self, + emit: Emitter, + context: Context, + ): + self.emit = emit + self.context = context + self.prev = None + + def settings(self) -> HHDSettings: + base = {"controllers": {"aokzoe": load_relative_yaml("controllers.yml")}} + base["controllers"]["aokzoe"]["children"]["controller_mode"].update( + get_outputs_config(can_disable=False, has_leds=False) + ) + + return base + + def update(self, conf: Config): + new_conf = conf["controllers.aokzoe"] + if new_conf == self.prev: + return + if self.prev is None: + self.prev = new_conf + else: + self.prev.update(new_conf.conf) + + self.updated.set() + self.start(self.prev) + + def start(self, conf): + from .base import plugin_run + + if self.started: + return + self.started = True + + self.close() + self.should_exit = Event() + self.t = Thread( + target=plugin_run, + args=( + conf, + self.emit, + self.context, + self.should_exit, + self.updated, + self.dconf, + ), + ) + self.t.start() + + def close(self): + if not self.should_exit or not self.t: + return + self.should_exit.set() + self.t.join() + self.should_exit = None + self.t = None + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + # Match just product name + # if a device exists here its officially supported + with open("/sys/devices/virtual/dmi/id/product_name") as f: + dmi = f.read().strip() + + dconf = AOKZOE_CONFS.get(dmi, None) + if dconf: + return [AokzoeControllersPlugin(dmi, dconf)] + + return [] + diff --git a/src/hhd/device/aokzoe/base.py b/src/hhd/device/aokzoe/base.py new file mode 100644 index 00000000..755429eb --- /dev/null +++ b/src/hhd/device/aokzoe/base.py @@ -0,0 +1,230 @@ +import logging +import os +import select +import time +from threading import Event as TEvent +from typing import Sequence + +import evdev + +from hhd.controller import Axis, Event, Multiplexer, can_read +from hhd.controller.base import Event, TouchpadAction +from hhd.controller.physical.evdev import B as EC +from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.hidraw import GenericGamepadHidraw +from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.controller.virtual.uinput import UInputDevice +from hhd.plugins import Config, Context, Emitter, get_outputs + +from .const import ( + AOKZOE_BTN_MAPPINGS, + AOKZOE_DEFAULT_MAPPINGS, +) + +ERROR_DELAY = 1 +SELECT_TIMEOUT = 1 + +logger = logging.getLogger(__name__) + + +GAMEPAD_VID = 0x045E +GAMEPAD_PID = 0x028E + +KBD_VID = 0x0001 +KBD_PID = 0x0001 + +BACK_BUTTON_DELAY = 0.1 + + +def plugin_run( + conf: Config, + emit: Emitter, + context: Context, + should_exit: TEvent, + updated: TEvent, + dconf: dict, +): + first = True + while not should_exit.is_set(): + found_gamepad = False + try: + for d in evdev.list_devices(): + dev = evdev.InputDevice(d) + if dev.info.vendor == GAMEPAD_VID and dev.info.product == GAMEPAD_PID: + found_gamepad = True + break + except Exception: + logger.warning("Failed finding device, skipping check.") + found_gamepad = True + + if not found_gamepad: + time.sleep(ERROR_DELAY) + if first: + logger.info("Controller in Mouse mode. Waiting...") + first = False + continue + + # copy from handygccs + if os.path.exists('/sys/devices/platform/oxp-platform/tt_toggle'): + command = f'echo 1 > /sys/devices/platform/oxp-platform/tt_toggle' + os.popen(command, 'r', 1).read().strip() + logger.info(f'Turbo button takeover enabled') + else: + logger.warn( + f'Turbo takeover failed. Ensure you have the latest oxp-sensors driver installed.') + + try: + logger.info("Launching emulated controller.") + updated.clear() + controller_loop(conf.copy(), should_exit, updated, dconf) + except Exception as e: + logger.error(f"Received the following error:\n{type(e)}: {e}") + logger.error( + f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." + ) + first = True + # Raise exception + if conf.get("debug", False): + raise e + time.sleep(ERROR_DELAY) + + +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): + debug = conf.get("debug", False) + + # Output + d_producers, d_outs, d_params = get_outputs( + conf["controller_mode"], + None, + conf["imu"].to(bool), + ) + + # Imu + d_imu = CombinedImu( + conf["imu_hz"].to(int), + dconf.get("mapping", AOKZOE_DEFAULT_MAPPINGS), + # gyro_scale="0.000266", #TODO: Find what this affects + ) + d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) + + # Inputs + d_xinput = GenericGamepadEvdev( + vid=[GAMEPAD_VID], + pid=[GAMEPAD_PID], + # name=["Generic X-Box pad"], + capabilities={EC("EV_KEY"): [EC("BTN_A")]}, + required=True, + hide=True, + ) + + d_kbd_1 = GenericGamepadEvdev( + vid=[KBD_VID], + pid=[KBD_PID], + required=False, + grab=True, + btn_map=dconf.get("btn_mapping", AOKZOE_BTN_MAPPINGS), + ) + + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + share_to_qam=conf["share_to_qam"].to(bool), + nintendo_mode=conf["nintendo_mode"].to(bool), + ) + + d_volume_btn = UInputDevice( + name="Handheld Daemon Volume Keyboard (Aokzoe)", + phys="phys-hhd-aokzoe-vbtn", + capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, + btn_map={ + "key_volumeup": EC("KEY_VOLUMEUP"), + "key_volumedown": EC("KEY_VOLUMEDOWN"), + }, + pid=KBD_PID, + vid=KBD_VID, + output_timestamps=True, + ) + + REPORT_FREQ_MIN = 25 + REPORT_FREQ_MAX = 400 + + if conf["imu"].to(bool): + REPORT_FREQ_MAX = max(REPORT_FREQ_MAX, conf["imu_hz"].to(float)) + + REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN + REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX + + fds = [] + devs = [] + fd_to_dev = {} + + def prepare(m): + devs.append(m) + fs = m.open() + fds.extend(fs) + for f in fs: + fd_to_dev[f] = m + + try: + # d_vend.open() + prepare(d_xinput) + if conf.get("imu", False): + start_imu = True + if dconf.get("hrtimer", False): + start_imu = d_timer.open() + if start_imu: + prepare(d_imu) + # if has_touchpad and d_params["uses_touch"]: + # prepare(d_touch) + prepare(d_volume_btn) + prepare(d_kbd_1) + for d in d_producers: + prepare(d) + + logger.info("Emulated controller launched, have fun!") + while not should_exit.is_set() and not updated.is_set(): + start = time.perf_counter() + # Add timeout to call consumers a minimum amount of times per second + r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) + evs = [] + to_run = set() + for f in r: + to_run.add(id(fd_to_dev[f])) + + for d in devs: + if id(d) in to_run: + evs.extend(d.produce(r)) + + evs = multiplexer.process(evs) + if evs: + if debug: + logger.info(evs) + + d_volume_btn.consume(evs) + d_xinput.consume(evs) + + for d in d_outs: + d.consume(evs) + + # If unbounded, the total number of events per second is the sum of all + # events generated by the producers. + # For Legion go, that would be 100 + 100 + 500 + 30 = 730 + # Since the controllers of the legion go only update at 500hz, this is + # wasteful. + # By setting a target refresh rate for the report and sleeping at the + # end, we ensure that even if multiple fds become ready close to each other + # they are combined to the same report, limiting resource use. + # Ideally, this rate is smaller than the report rate of the hardware controller + # to ensure there is always a report from that ready during refresh + t = time.perf_counter() + elapsed = t - start + if elapsed < REPORT_DELAY_MIN: + time.sleep(REPORT_DELAY_MIN - elapsed) + + except KeyboardInterrupt: + raise + finally: + # d_vend.close(True) + d_timer.close() + for d in reversed(devs): + d.close(True) diff --git a/src/hhd/device/aokzoe/const.py b/src/hhd/device/aokzoe/const.py new file mode 100644 index 00000000..330bcf1d --- /dev/null +++ b/src/hhd/device/aokzoe/const.py @@ -0,0 +1,22 @@ +from hhd.controller import Axis, Button, Configuration +from hhd.controller.physical.evdev import B, to_map + +AOKZOE_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", -1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} + +AOKZOE_BTN_MAPPINGS: dict[int, str] = { + # Volume buttons come from the same keyboard + B("KEY_VOLUMEUP"): "key_volumeup", + B("KEY_VOLUMEDOWN"): "key_volumedown", + # A1 mappings + B("KEY_LEFTALT"): "share", # Turbo Button [29, 56, 125] KEY_LEFTCTRL + KEY_LEFTALT + KEY_LEFTMETA + B("KEY_D"): "mode", # Short press orange [32, 125] KEY_D + KEY_LEFTMETA + B("KEY_O"): "extra_l1", # KB Button [24, 97, 125] KEY_O + KEY_RIGHTCTRL + KEY_LEFTMETA +} diff --git a/src/hhd/device/aokzoe/controllers.yml b/src/hhd/device/aokzoe/controllers.yml new file mode 100644 index 00000000..0e545d05 --- /dev/null +++ b/src/hhd/device/aokzoe/controllers.yml @@ -0,0 +1,54 @@ +type: container +tags: [lgc] +title: AOKZOE Controller +hint: >- + Allows for configuring the aokzoe controllers to a unified output. + +children: + controller_mode: + type: mode + tags: [aokzoe_controller_mode] + title: Controller Emulation + hint: >- + Emulate different controller types to fuse AOKZOE features. + + # + # Common settings + # + imu: + type: bool + title: Motion Support + hint: >- + Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) + default: True + + imu_hz: + type: discrete + title: Motion Hz + hint: >- + Sets the sampling frequency for the IMU. + Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. + options: [50, 100, 200, 400, 800, 1600] + default: 400 + + nintendo_mode: + type: bool + title: Nintendo Mode (A-B Swap) + hint: >- + Swaps A with B and X with Y. + default: False + + share_to_qam: + type: bool + title: Map buttom to QAM. + tags: [advanced] + default: True + + debug: + type: bool + title: Debug + tags: [advanced] + hint: >- + Output controller events to the console (high CPU use) and raises exceptions + (HHD will crash on errors). + default: False diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index e20a4066..92653489 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -40,6 +40,11 @@ class PowerButtonConfig(NamedTuple): type="hold_emitted", phys=["isa0060", "PNP0C0C", "LNXPWRBN"], ), + PBC("AOKZOE A1", + "AOKZOE A1 AR07", + type="hold_emitted", + phys=["LNXPWRBN"], + ), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 00c7e9a5a664df78ce67a714897e2312d22ca398 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 16:11:53 +0100 Subject: [PATCH 0358/1497] add gyro axis remapping, do chassis detection for ayaneo --- src/hhd/device/ayaneo/__init__.py | 25 +++++++++++++++---------- src/hhd/device/ayaneo/base.py | 5 ++--- src/hhd/device/gpd/win/__init__.py | 6 +++++- src/hhd/device/gpd/win/base.py | 5 ++--- src/hhd/device/legion_go/__init__.py | 4 +++- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index a9ec55ff..31cfc588 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -1,8 +1,6 @@ from threading import Event, Thread from typing import Any, Sequence -from .const import ( - AYANEO_AIR_PLUS_MAPPINGS, -) +from .const import AYANEO_AIR_PLUS_MAPPINGS, AYANEO_DEFAULT_MAPPINGS from hhd.plugins import ( Config, @@ -12,6 +10,7 @@ load_relative_yaml, get_outputs_config, get_touchpad_config, + get_gyro_config, ) from hhd.plugins.settings import HHDSettings @@ -75,6 +74,10 @@ def settings(self) -> HHDSettings: else: del base["controllers"]["ayaneo"]["children"]["touchpad"] + base["controllers"]["ayaneo"]["children"]["gyro"] = get_gyro_config( + self.dconf.get("mapping", AYANEO_DEFAULT_MAPPINGS) + ) + return base def update(self, conf: Config): @@ -128,17 +131,19 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: # if a device exists here its officially supported with open("/sys/devices/virtual/dmi/id/product_name") as f: dmi = f.read().strip() - + dconf = AYANEO_CONFS.get(dmi, None) if dconf: return [AyaneoControllersPlugin(dmi, dconf)] - + # Fallback to chassis vendor since aya contains no usb devices - # with open("/sys/class/dmi/id/chassis_vendor") as f: - # vendor = f.read().strip() + try: + with open("/sys/class/dmi/id/chassis_vendor") as f: + vendor = f.read().lower().strip() - # if "ayaneo" in vendor.lower().strip(): - # return [AyaneoControllersPlugin(dmi, get_default_config(dmi))] + if "ayaneo" in vendor: + return [AyaneoControllersPlugin(dmi, get_default_config(dmi))] + except Exception: + return [] return [] - diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index cf10baa8..d3f20d10 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -14,7 +14,7 @@ from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.controller.virtual.uinput import UInputDevice -from hhd.plugins import Config, Context, Emitter, get_outputs +from hhd.plugins import Config, Context, Emitter, get_outputs, get_gyro_state from .const import ( AYANEO_BTN_MAPPINGS, @@ -96,8 +96,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # Imu d_imu = CombinedImu( conf["imu_hz"].to(int), - dconf.get("mapping", AYANEO_DEFAULT_MAPPINGS), - # gyro_scale="0.000266", #TODO: Find what this affects + get_gyro_state(conf["gyro"], dconf.get("mapping", AYANEO_DEFAULT_MAPPINGS)), ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 30a2fae1..4f3f38ee 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -9,10 +9,11 @@ load_relative_yaml, get_outputs_config, get_touchpad_config, + get_gyro_config, ) from hhd.plugins.settings import HHDSettings -from .const import GPD_WIN_MAX_2_2023_MAPPINGS +from .const import GPD_WIN_MAX_2_2023_MAPPINGS, GPD_WIN_DEFAULT_MAPPINGS GPD_CONFS = { "G1618-04": {"name": "GPD Win 4", "hrtimer": True}, @@ -71,6 +72,9 @@ def settings(self) -> HHDSettings: else: del base["controllers"]["gpd_win"]["children"]["touchpad"] + base["controllers"]["gpd_win"]["children"]["gyro"] = get_gyro_config( + self.dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS) + ) return base def update(self, conf: Config): diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index fc3e1d47..63e698c4 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -13,7 +13,7 @@ from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger -from hhd.plugins import Config, Context, Emitter, get_outputs +from hhd.plugins import Config, Context, Emitter, get_outputs, get_gyro_state from .const import ( GPD_TOUCHPAD_AXIS_MAP, @@ -202,8 +202,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # Imu d_imu = CombinedImu( conf["imu_hz"].to(int), - dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS), - # gyro_scale="0.000266", #TODO: Find what this affects + get_gyro_state(conf["gyro"], dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS)), ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index 87467273..7a25097d 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -9,9 +9,11 @@ load_relative_yaml, get_outputs_config, get_touchpad_config, + get_gyro_state, + get_gyro_config ) from hhd.plugins.settings import HHDSettings - +from hhd.controller.physical.imu import BMI_MAPPINGS class LegionControllersPlugin(HHDPlugin): name = "legion_go_controllers" From 77696eceb878079732c32e60847c96d69ff023fd Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 16:17:39 +0100 Subject: [PATCH 0359/1497] add usb autodetection to gpd --- src/hhd/device/gpd/win/__init__.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index 4f3f38ee..a2611f70 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -12,6 +12,7 @@ get_gyro_config, ) from hhd.plugins.settings import HHDSettings +from hhd.controller.lib.hid import enumerate_unique from .const import GPD_WIN_MAX_2_2023_MAPPINGS, GPD_WIN_DEFAULT_MAPPINGS @@ -34,6 +35,14 @@ } +def get_default_config(product_name: str): + return { + "name": product_name, + "hrtimer": True, + "untested": True, + } + + class GpdWinControllersPlugin(HHDPlugin): name = "gpd_win_controllers" priority = 18 @@ -128,7 +137,15 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: with open("/sys/devices/virtual/dmi/id/product_name") as f: dmi = f.read().strip() dconf = GPD_CONFS.get(dmi, None) - if not dconf: - return [] - - return [GpdWinControllersPlugin(dmi, dconf)] + if dconf: + return [GpdWinControllersPlugin(dmi, dconf)] + + # Perform dmi agnostic detection + GPD_WIN_VID = 0x2F24 + GPD_WIN_PID = 0x0135 + try: + if len(enumerate_unique(GPD_WIN_VID, GPD_WIN_PID)): + return [GpdWinControllersPlugin(dmi, get_default_config(dmi))] + except Exception: + pass + return [] From cbc7ff6a92f87b8e8e1aeb9e86e16ad7342ead69 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 16:23:20 +0100 Subject: [PATCH 0360/1497] default to disabled on untested devices --- src/hhd/device/ayaneo/__init__.py | 6 +++++- src/hhd/device/ayaneo/base.py | 4 ++++ src/hhd/device/gpd/win/__init__.py | 6 +++++- src/hhd/device/gpd/win/base.py | 4 ++++ src/hhd/plugins/outputs.py | 7 ++++++- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index 31cfc588..c48c21fa 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -64,7 +64,11 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"ayaneo": load_relative_yaml("controllers.yml")}} base["controllers"]["ayaneo"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=False, has_leds=False) + get_outputs_config( + can_disable=True, + has_leds=False, + start_disabled=self.dconf.get("untested", False), + ) ) if self.dconf.get("touchpad", False): diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index d3f20d10..b0474f46 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -48,6 +48,10 @@ def plugin_run( ): first = True while not should_exit.is_set(): + if conf["controller_mode"].to(str) == "disabled": + time.sleep(ERROR_DELAY) + continue + found_gamepad = False try: for d in evdev.list_devices(): diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index a2611f70..c6fd0249 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -71,7 +71,11 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"gpd_win": load_relative_yaml("controllers.yml")}} base["controllers"]["gpd_win"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=False, has_leds=False) + get_outputs_config( + can_disable=True, + has_leds=False, + start_disabled=self.dconf.get("untested", False), + ) ) if self.dconf.get("touchpad", False): diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 63e698c4..364341f0 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -154,6 +154,10 @@ def plugin_run( ): first = True while not should_exit.is_set(): + if conf["controller_mode"].to(str) == "disabled": + time.sleep(ERROR_DELAY) + continue + found_gamepad = False try: for d in evdev.list_devices(): diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 0a8d9212..2ba10ee5 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -100,11 +100,16 @@ def get_outputs( ) -def get_outputs_config(can_disable: bool = False, has_leds: bool = True): +def get_outputs_config( + can_disable: bool = False, has_leds: bool = True, start_disabled: bool = False +): s = load_relative_yaml("outputs.yml") if not can_disable: del s["modes"]["disabled"] if not has_leds: del s["modes"]["dualsense"]["children"]["led_support"] del s["modes"]["dualsense_edge"]["children"]["led_support"] + + if start_disabled: + s["default"] = "disabled" return s From 45b68f151a7a586b717356a70d86d95ed3ed4666 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 16:55:41 +0100 Subject: [PATCH 0361/1497] switch to board vendor --- src/hhd/device/ayaneo/__init__.py | 2 +- src/hhd/plugins/inputs.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index c48c21fa..391e6d71 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -142,7 +142,7 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: # Fallback to chassis vendor since aya contains no usb devices try: - with open("/sys/class/dmi/id/chassis_vendor") as f: + with open("/sys/class/dmi/id/board_vendor") as f: vendor = f.read().lower().strip() if "ayaneo" in vendor: diff --git a/src/hhd/plugins/inputs.py b/src/hhd/plugins/inputs.py index 577d37a6..3d96620f 100644 --- a/src/hhd/plugins/inputs.py +++ b/src/hhd/plugins/inputs.py @@ -16,7 +16,7 @@ def get_product(): def get_vendor(): try: - with open("/sys/devices/virtual/dmi/id/chassis_vendor", "r") as f: + with open("/sys/devices/virtual/dmi/id/board_vendor", "r") as f: return f.read().strip() except Exception: return "Uknown" From ce58212fb0fabe54bd3cbfb6605fcf5cc4387739 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 17:03:56 +0100 Subject: [PATCH 0362/1497] add capture scripts for contributing --- src/hhd/__main__.py | 2 +- src/hhd/contrib/__init__.py | 0 src/hhd/contrib/__main__.py | 100 ++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/hhd/contrib/__init__.py create mode 100644 src/hhd/contrib/__main__.py diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 55bd55cf..d5bd25af 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -115,7 +115,7 @@ def main(): "command", nargs="*", default=[], - help="The command to run. If empty, run as daemon. Right now, only the command token is supported.", + help="The command to run. If empty, run as daemon. Right now, only the command `token` is supported.", ) args = parser.parse_args() user = args.user diff --git a/src/hhd/contrib/__init__.py b/src/hhd/contrib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/hhd/contrib/__main__.py b/src/hhd/contrib/__main__.py new file mode 100644 index 00000000..0455f0a6 --- /dev/null +++ b/src/hhd/contrib/__main__.py @@ -0,0 +1,100 @@ +import argparse + + +def evdev(): + from evdev import list_devices, InputDevice + from time import sleep + + print("Available Devices with the Current Permissions") + avail = list_devices() + for i, d in enumerate(avail): + print(f"{i + 1}:", InputDevice(d)) + + print() + sel = None + while sel not in avail: + sel = input("Enter device path (/dev/input/event# or #): ") + try: + sel = avail[int(sel) - 1] + except Exception as e: + pass + + print() + d = InputDevice(sel) + print(f"Selected device `{d}`.") + print("Capabilities") + print(d.capabilities(verbose=True)) + + try: + print("Attempting to grab device.") + d.grab() + except Exception as e: + print("Could not grab device, error:") + print(e) + print() + + for ev in d.read_loop(): + print(ev) + sleep(0.001) + + +def hidraw(): + from hhd.controller.lib.hid import enumerate_unique, Device + from hhd.controller.lib.common import hexify + from time import sleep + + print("Available Devices with the Current Permissions") + avail = [] + for i, d in enumerate(enumerate_unique()): + avail.append(d["path"]) + print( + f"{i + 1}:", + f"{str(d['path'])} {hexify(d['vendor_id'])}:{hexify(d['product_id'])}:" + + f" Usage Page: 0x{hexify(d['usage_page'])} Usage: 0x{hexify(d['usage'])}" + + f" Names '{d['manufacturer_string']}': '{d['product_string']}'", + ) + + print() + sel = None + while sel not in avail: + sel = input("Enter device path (/dev/input/event# or #): ") + try: + sel = avail[int(sel) - 1] + except Exception as e: + sel = sel.encode() + + print() + d = Device(path=sel) + print(f"Selected device `{str(sel)}`.") + + for i in range(100000000): + print(f"{i:6d}:", d.read().hex()) + sleep(0.001) + + +def main(): + parser = argparse.ArgumentParser( + prog="HHD: Handheld Daemon contribution helper scripts", + description="Scripts to automate the capture of events, etc.", + ) + parser.add_argument( + "command", + nargs="+", + default=[], + help="Supported commands: `evdev`, `hidraw`", + ) + args = parser.parse_args() + + try: + match c := args.command[0]: + case "evdev": + evdev() + case "hidraw": + hidraw() + case _: + print(f"Command `{c}` not supported.") + except KeyboardInterrupt: + pass + +if __name__ == "__main__": + main() From 1a22e9a840ec1ff04b690bdeef5c04a615124d3a Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 17:09:31 +0100 Subject: [PATCH 0363/1497] update install scripts to add hhd to path --- install.sh | 10 +++++++--- uninstall.sh | 9 ++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 66fe8019..54f252b0 100755 --- a/install.sh +++ b/install.sh @@ -17,12 +17,16 @@ pip install --upgrade hhd sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service +# Add hhd to user path +mkdir -p ~/.local/bin +ln -s ~/.local/share/hhd/venv/bin/hhd ~/.local/bin/hhd + # Start service and reboot sudo systemctl enable hhd_local@$(whoami) echo "" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "!!! Do not forget to remove HandyGCCS/Handycon if your distro has it. !!!" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!! Do not forget to remove HandyGCCS/Bundled HHD if your distro preinstalls it. !!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "" echo "Reboot to start Handheld Daemon!" \ No newline at end of file diff --git a/uninstall.sh b/uninstall.sh index 6f55ef29..0d6982cd 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -13,6 +13,9 @@ sudo systemctl stop hhd_local@$(whoami) # Remove Binary rm -rf ~/.local/share/hhd +# Remove bin link +rm -f ~/.local/bin/hhd + # Remove /etc files sudo rm -f /etc/udev/rules.d/83-hhd.rules sudo rm -f /etc/systemd/system/hhd_local@.service @@ -21,8 +24,8 @@ sudo rm -f /etc/systemd/system/hhd_local@.service # rm -rf ~/.config/hhd echo "" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "!!! Do not forget to re-enable HandyGCCS/Handycon if your device relies on it. !!!" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!! Do not forget to re-enable HandyGCCS/Bundled HHD if your device relies on it. !!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "" echo "Handheld Daemon Uninstalled. Reboot!" \ No newline at end of file From 9672e5336bf8879260e094db26a9b067b6c1760b Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 17:38:02 +0100 Subject: [PATCH 0364/1497] nit --- src/hhd/contrib/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/contrib/__main__.py b/src/hhd/contrib/__main__.py index 0455f0a6..623cbee6 100644 --- a/src/hhd/contrib/__main__.py +++ b/src/hhd/contrib/__main__.py @@ -60,7 +60,7 @@ def hidraw(): sel = input("Enter device path (/dev/input/event# or #): ") try: sel = avail[int(sel) - 1] - except Exception as e: + except Exception: sel = sel.encode() print() From ef286c71a83e69dc44973993905a2b6bad33cfe3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 17:46:15 +0100 Subject: [PATCH 0365/1497] add aokzoe A1 Pro --- src/hhd/device/aokzoe/__init__.py | 2 +- src/hhd/plugins/powerbutton/const.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/aokzoe/__init__.py b/src/hhd/device/aokzoe/__init__.py index 3675f7ee..13ce188f 100644 --- a/src/hhd/device/aokzoe/__init__.py +++ b/src/hhd/device/aokzoe/__init__.py @@ -14,6 +14,7 @@ AOKZOE_CONFS = { "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, + "AOKZOE A1 Pro": {"name": "AOKZOE A1 Pro", "hrtimer": True}, } @@ -115,4 +116,3 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: return [AokzoeControllersPlugin(dmi, dconf)] return [] - diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 92653489..4e05e9d5 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -40,11 +40,18 @@ class PowerButtonConfig(NamedTuple): type="hold_emitted", phys=["isa0060", "PNP0C0C", "LNXPWRBN"], ), - PBC("AOKZOE A1", + PBC( + "AOKZOE A1", "AOKZOE A1 AR07", type="hold_emitted", phys=["LNXPWRBN"], ), + PBC( + "AOKZOE A1 Pro", + "AOKZOE A1 Pro", + type="hold_emitted", + phys=["LNXPWRBN"], + ), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 6fa7e71f5a123ea14a1c1bc1e313d1203c786853 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 17:46:54 +0100 Subject: [PATCH 0366/1497] fix touchpad condition --- src/hhd/device/ayaneo/base.py | 2 +- src/hhd/device/gpd/win/base.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index b0474f46..e1203359 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -88,7 +88,7 @@ def plugin_run( def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): debug = conf.get("debug", False) - has_touchpad = "touchpad" in conf + has_touchpad = conf.get("touchpad", False) # Output d_producers, d_outs, d_params = get_outputs( diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 364341f0..7c6d5e3d 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -194,7 +194,7 @@ def plugin_run( def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): debug = conf.get("debug", False) - has_touchpad = "touchpad" in conf + has_touchpad = dconf.get("touchpad", False) # Output d_producers, d_outs, d_params = get_outputs( From ffe51abff215af5a1bcd9dbb5ca4f26b53bc4a48 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 18:18:34 +0100 Subject: [PATCH 0367/1497] add timer on contrib --- src/hhd/contrib/__main__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hhd/contrib/__main__.py b/src/hhd/contrib/__main__.py index 623cbee6..27a05c64 100644 --- a/src/hhd/contrib/__main__.py +++ b/src/hhd/contrib/__main__.py @@ -41,7 +41,7 @@ def evdev(): def hidraw(): from hhd.controller.lib.hid import enumerate_unique, Device from hhd.controller.lib.common import hexify - from time import sleep + from time import sleep, time print("Available Devices with the Current Permissions") avail = [] @@ -67,8 +67,9 @@ def hidraw(): d = Device(path=sel) print(f"Selected device `{str(sel)}`.") + start = time() for i in range(100000000): - print(f"{i:6d}:", d.read().hex()) + print(f"{i:6d}: {time() - start:7.4f}", d.read().hex()) sleep(0.001) From 65f1a05c440600cd9b443fc22fe6424b1fa41196 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 18:33:15 +0100 Subject: [PATCH 0368/1497] add msc handling --- src/hhd/controller/physical/evdev.py | 44 ++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index ed1266bd..e0ea3985 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -3,16 +3,17 @@ import os import re import subprocess -from typing import Mapping, Sequence, TypeVar, cast, Collection +import time +from typing import Collection, Mapping, Sequence, TypeVar, cast import evdev from evdev import ecodes, ff from hhd.controller import Axis, Button, Consumer, Event, Producer, can_read from hhd.controller.base import Event -from hhd.controller.lib.common import hexify, matches_patterns -from hhd.controller.lib.hide import hide_gamepad, unhide_gamepad, unhide_all from hhd.controller.const import AbsAxis, GamepadButton, KeyboardButton +from hhd.controller.lib.common import hexify, matches_patterns +from hhd.controller.lib.hide import hide_gamepad, unhide_all, unhide_gamepad logger = logging.getLogger(__name__) @@ -109,6 +110,8 @@ def __init__( required: bool = True, hide: bool = False, grab: bool = True, + msc_map: Mapping[int, Button] = {}, + msc_delay: float = 0.1, ) -> None: self.vid = vid self.pid = pid @@ -117,6 +120,8 @@ def __init__( self.btn_map = btn_map self.axis_map = axis_map + self.msc_map = msc_map + self.msc_delay = msc_delay self.aspect_ratio = aspect_ratio self.dev: evdev.InputDevice | None = None @@ -125,6 +130,7 @@ def __init__( self.hide = hide self.grab = grab self.hidden = False + self.queue = [] def open(self) -> Sequence[int]: for d in evdev.list_devices(): @@ -158,6 +164,7 @@ def open(self) -> Sequence[int]: self.fd = dev.fd self.started = True self.effect_id = -1 + self.queue = [] # Run after init to avoid having leftover rules if self.hide: @@ -234,10 +241,17 @@ def consume(self, events: Sequence[Event]): self.dev.write(getattr(ecodes, "EV_FF"), self.effect_id, 1) def produce(self, fds: Sequence[int]) -> Sequence[Event]: + out: list[Event] = [] + curr = time.time() + if self.queue: + ev, t = self.queue[0] + if curr >= t: + out.append(ev) + self.queue.pop(0) + if not self.dev or not self.fd in fds: - return [] + return out - out: list[Event] = [] if self.started and self.aspect_ratio is not None: self.started = False out.append( @@ -275,6 +289,26 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: "value": val, } ) + elif e.type == B("EV_MSC"): + if e.code in self.msc_map: + out.append( + { + "type": "button", + "code": self.btn_map[e.code], + "value": True, + } + ) + self.queue.append( + ( + { + "type": "button", + "code": self.btn_map[e.code], + "value": False, + }, + curr + self.msc_delay, + ) + ) + return out From 42eda27e24dc6cd8867b3e387eb89f0268b02b98 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 18:50:25 +0100 Subject: [PATCH 0369/1497] add ayaneo hardware rule --- PKGBUILD | 2 ++ hhd.spec | 2 ++ install.sh | 3 +++ usr/lib/udev/hwdb.d/83-hhd.hwdb | 7 +++++++ 4 files changed, 14 insertions(+) create mode 100644 usr/lib/udev/hwdb.d/83-hhd.hwdb diff --git a/PKGBUILD b/PKGBUILD index 53864e8f..7f36c042 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -24,6 +24,8 @@ package() { # Install minimally necessary rules for running as a system service mkdir -p ${pkgdir}/usr/lib/udev/rules.d/ install -m644 usr/lib/udev/rules.d/83-hhd.rules ${pkgdir}/usr/lib/udev/rules.d/83-hhd.rules + mkdir -p ${pkgdir}/usr/lib/udev/hwdb.d/ + install -m644 usr/lib/udev/hwdb.d/83-hhd.rules ${pkgdir}/usr/lib/udev/hwdb.d/83-hhd.rules mkdir -p ${pkgdir}/usr/lib/systemd/system/ install -m644 usr/lib/systemd/system/hhd@.service ${pkgdir}/usr/lib/systemd/system/hhd@.service } diff --git a/hhd.spec b/hhd.spec index 3b3aff56..190918a7 100644 --- a/hhd.spec +++ b/hhd.spec @@ -34,6 +34,8 @@ Handheld Daemon is a project that aims to provide utilities for managing handhel %{python3} -m installer --destdir="%{buildroot}" dist/*.whl mkdir -p %{buildroot}%{_udevrulesdir} install -m644 usr/lib/udev/rules.d/83-%{name}.rules %{buildroot}%{_udevrulesdir}/83-%{name}.rules +mkdir -p %{buildroot}%{_sysconfdir}/udev/hwdb.d +install -m644 usr/lib/udev/hwdb.d/83-%{name}.rules %{buildroot}%{_sysconfdir}/udev/hwdb.d/83-%{name}.rules mkdir -p %{buildroot}%{_unitdir} install -m644 usr/lib/systemd/system/%{name}@.service %{buildroot}%{_unitdir}/%{name}@.service diff --git a/install.sh b/install.sh index 54f252b0..7809299d 100755 --- a/install.sh +++ b/install.sh @@ -14,7 +14,10 @@ source venv/bin/activate pip install --upgrade hhd # Install udev rules and create a service file +sudo mkdir -p /etc/udev/rules.d/ +sudo mkdir -p /etc/udev/hwdb.d/ sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/hwdb.d/83-hhd.rules -o /etc/udev/hwdb.d/83-hhd.rules sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service # Add hhd to user path diff --git a/usr/lib/udev/hwdb.d/83-hhd.hwdb b/usr/lib/udev/hwdb.d/83-hhd.hwdb new file mode 100644 index 00000000..63d35c78 --- /dev/null +++ b/usr/lib/udev/hwdb.d/83-hhd.hwdb @@ -0,0 +1,7 @@ +# Add f buttons to Ayaneo devices +evdev:name:AT Translated Set 2 keyboard:dmi:*:svnAYANEO:* + FORCE_INPUT_UACCESS=1 + KEYBOARD_KEY_66=f15 + KEYBOARD_KEY_67=f16 + KEYBOARD_KEY_68=f17 +# KEYBOARD_KEY_69=f18 From cf35d90023d2b7703019b9a88aef2f7abbe9c988 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 18:51:29 +0100 Subject: [PATCH 0370/1497] add f18 to rule --- usr/lib/udev/hwdb.d/83-hhd.hwdb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/lib/udev/hwdb.d/83-hhd.hwdb b/usr/lib/udev/hwdb.d/83-hhd.hwdb index 63d35c78..264b6471 100644 --- a/usr/lib/udev/hwdb.d/83-hhd.hwdb +++ b/usr/lib/udev/hwdb.d/83-hhd.hwdb @@ -4,4 +4,4 @@ evdev:name:AT Translated Set 2 keyboard:dmi:*:svnAYANEO:* KEYBOARD_KEY_66=f15 KEYBOARD_KEY_67=f16 KEYBOARD_KEY_68=f17 -# KEYBOARD_KEY_69=f18 + KEYBOARD_KEY_69=f18 From da4a93b0bf6e6047fa915546b4ee13fa14e0fe21 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 19:05:12 +0100 Subject: [PATCH 0371/1497] update readme and bump version --- pyproject.toml | 2 +- readme.md | 64 +++++++++++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 169bb389..ae4c5458 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.1.5" +version = "1.2.0" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/readme.md b/readme.md index c345bec4..b2d17c16 100644 --- a/readme.md +++ b/readme.md @@ -1,24 +1,19 @@ # Handheld Daemon (HHD) Handheld Daemon is a project that aims to provide utilities for managing handheld devices. -With features ranging from TDP controls, to controller remappings, and gamescope -session management. +Right now, it features a fully functional controller emulator that exposes gyro, +paddles, LEDs and QAM across Steam, Yuzu, Dolphin and others. +It brings all supported devices up to parity with Steam Deck. +Read [supported devices](#supported-devices) to see if your device is supported. This configuration is exposed through an API, and there is already a Decky plugin for it ([hhd-decky](https://github.com/hhd-dev/hhd-decky)) and a web app for it ([hhd.dev](https://hhd.dev)) that also works locally with Electron ([hhd-ui](https://github.com/hhd-dev/hhd-ui)). -It is the aim of this project to provide generic hid-based emulators for most -mainstream controllers (xbox Elite, DS4, PS5, Joycons), so that users of devices -can pick the best target for their device and its controls, which may change -depending on the game. - -*Supported Devices*: -- Legion Go -- ROG Ally -- GPD Win 4, Win Mini, and Win Max 2 2023 -- Ayaneo Air Plus +In addition, a new TDP plugin (currently non-functional) is in the works, that +will allow both vendor specific and vendor independent TDP controls. +Check out [adjustor](https://github.com/hhd-dev/adjustor)!. *Current Features*: - Fully functional DualSense and Dualsense Edge emulation @@ -41,18 +36,39 @@ depending on the game. - Webapp on https://hhd.dev and through Electron. - Built-in updater. -*Planned Features (in this order)*: -- Steam Deck controller emulation - - No weird glyphs -- TDP Plugin - - Will provide parity with Legion Space/Armory crate, hardware is already reverse - engineered for the Legion Go. -- High-end Over/Downclocking Utility for Ryzen processors - - By hooking into the manufacturer ACPI API of the Ryzen platform, - it will expose all TDP related parameters manufacturers have access to - when spec'ing laptops. - - No memory-relaxed requirement - - Safe, as it is the method used by manufacturers (provided you stay within limits). +## Supported Devices +The following devices have been verified to work correctly, with QAM, RGB remapping, +Touchpad, and Gyro support. + +- Legion Go +- ROG Ally +- GPD Win + - Win 4 + - Win Mini + - Win Max 2 2023 +- Ayaneo + - Air Plus + - 2/2s (experimental) + - GEEK, GEEK 1S (experimental) +- AOKZOE + - A1 + - A1 Pro (experimental) + +In addition, Handheld Daemon will attempt to work on Ayaneo and GPD Win devices +that have not been verified to work (controller emulation will be off on first start). +If everything works and you fix the gyro axis for your device, open an issue +so that your device can be added to the supported list. +The touchpad will not work without being on the supported list on the current version. + +RGB support is not yet available for GPD Win 4 and Ayaneo devices, but is +being investigated. +The RGB settings of Ayaneo require direct writes to the Embedded Computer, which +is considered dangerous. +GPD Win 4 does not support RGB remapping on Windows, but there is a chance it +is possible. + +Ayaneo devices do not currently have support for holding the power button to open +the steam menu settings. ## Installation Instructions You can install the latest stable version of `hhd` from PyPi (recommended), AUR, From 17a3642b4ac7d458bfcf668e3267d0e1af3e8c72 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 19:42:55 +0100 Subject: [PATCH 0372/1497] fix hwdb file extension --- PKGBUILD | 2 +- hhd.spec | 3 ++- install.sh | 2 +- pyproject.toml | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 7f36c042..3823ff68 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -25,7 +25,7 @@ package() { mkdir -p ${pkgdir}/usr/lib/udev/rules.d/ install -m644 usr/lib/udev/rules.d/83-hhd.rules ${pkgdir}/usr/lib/udev/rules.d/83-hhd.rules mkdir -p ${pkgdir}/usr/lib/udev/hwdb.d/ - install -m644 usr/lib/udev/hwdb.d/83-hhd.rules ${pkgdir}/usr/lib/udev/hwdb.d/83-hhd.rules + install -m644 usr/lib/udev/hwdb.d/83-hhd.hwdb ${pkgdir}/usr/lib/udev/hwdb.d/83-hhd.hwdb mkdir -p ${pkgdir}/usr/lib/systemd/system/ install -m644 usr/lib/systemd/system/hhd@.service ${pkgdir}/usr/lib/systemd/system/hhd@.service } diff --git a/hhd.spec b/hhd.spec index 190918a7..19f71806 100644 --- a/hhd.spec +++ b/hhd.spec @@ -35,7 +35,7 @@ Handheld Daemon is a project that aims to provide utilities for managing handhel mkdir -p %{buildroot}%{_udevrulesdir} install -m644 usr/lib/udev/rules.d/83-%{name}.rules %{buildroot}%{_udevrulesdir}/83-%{name}.rules mkdir -p %{buildroot}%{_sysconfdir}/udev/hwdb.d -install -m644 usr/lib/udev/hwdb.d/83-%{name}.rules %{buildroot}%{_sysconfdir}/udev/hwdb.d/83-%{name}.rules +install -m644 usr/lib/udev/hwdb.d/83-%{name}.hwdb %{buildroot}%{_sysconfdir}/udev/hwdb.d/83-%{name}.hwdb mkdir -p %{buildroot}%{_unitdir} install -m644 usr/lib/systemd/system/%{name}@.service %{buildroot}%{_unitdir}/%{name}@.service @@ -45,4 +45,5 @@ install -m644 usr/lib/systemd/system/%{name}@.service %{buildroot}%{_unitdir}/%{ %{_bindir}/%{name}* %{python3_sitelib}/%{name}* %{_udevrulesdir}/83-%{name}.rules +%{_sysconfdir}/udev/hwdb.d/83-%{name}.hwdb %{_unitdir}/%{name}@.service diff --git a/install.sh b/install.sh index 7809299d..a57d1a56 100755 --- a/install.sh +++ b/install.sh @@ -17,7 +17,7 @@ pip install --upgrade hhd sudo mkdir -p /etc/udev/rules.d/ sudo mkdir -p /etc/udev/hwdb.d/ sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules -sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/hwdb.d/83-hhd.rules -o /etc/udev/hwdb.d/83-hhd.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/hwdb.d/83-hhd.hwdb -o /etc/udev/hwdb.d/83-hhd.hwdb sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service # Add hhd to user path diff --git a/pyproject.toml b/pyproject.toml index ae4c5458..f8e43a41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.2.0" +version = "1.2.1" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 5540e1862d8b2b84fc8972c5013eade035e65985 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 21:06:32 +0100 Subject: [PATCH 0373/1497] tweak readme --- readme.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index b2d17c16..678454b7 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ paddles, LEDs and QAM across Steam, Yuzu, Dolphin and others. It brings all supported devices up to parity with Steam Deck. Read [supported devices](#supported-devices) to see if your device is supported. -This configuration is exposed through an API, and there is already a Decky +Handheld Daemon exposes configuration through an API, and there is already a Decky plugin for it ([hhd-decky](https://github.com/hhd-dev/hhd-decky)) and a web app for it ([hhd.dev](https://hhd.dev)) that also works locally with Electron ([hhd-ui](https://github.com/hhd-dev/hhd-ui)). @@ -76,13 +76,13 @@ or COPR. The easiest way to use Handheld Daemon is to install Bazzite which comes pre-installed with the latest version and all required kernel fixes for supported devices, see [here](#bazzite). +Nobara also packages hhd and it will become the default for supported devices soon. > [!WARNING] > There is a bug that breaks how Dualsense controllers are parsed in Steam in various > distros, which causes Gyro, LEDs, and paddles to not be detected in Steam, > and the Dualsense Edge mapping being very wrong. -> ChimeraOS 45, and certain versions of Nobara 38, and 39 also have this issue. -> It is being investigated. +> It is being investigated, please open an issue for it with your distro information. > To ensure the gyro of the Legion Go with AMD SFH runs smoothly, > a udev rule is included that disables the use of the accelerometer by the @@ -226,10 +226,7 @@ the right stick into a mouse. #### Extra steps for Ayaneo Ayaneo uses the same gyroscope with the same configuration as the ally, so reference the Ally's IMU steps to enable gyroscope support. - Ayaneo support is still in the preliminary stages. -The buttons of these devices do not emit hold information, and due to this reason -they may fail to register in certain use-cases. #### Extra steps GPD Win Devices In order for the back buttons in GPD Win Devices to work, you need to map the @@ -254,6 +251,9 @@ enable the modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and `High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. +There is a sporadic bug currently where gyro will stop working after suspend, +just switch between mouse mode and not to fix while a fix is being developed. + #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara From 46da15f574d26fa4fb8012a836a482f3ea567e78 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 23:14:14 +0100 Subject: [PATCH 0374/1497] test checksums --- .github/workflows/publish-aur.yml | 3 ++- PKGBUILD | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-aur.yml b/.github/workflows/publish-aur.yml index 8adaa13c..b4ba2c5e 100644 --- a/.github/workflows/publish-aur.yml +++ b/.github/workflows/publish-aur.yml @@ -25,6 +25,7 @@ jobs: commit_username: ${{ secrets.AUR_USERNAME }} commit_email: ${{ secrets.AUR_EMAIL }} ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - commit_message: update to '${{ github.event.release.name }}' + commit_message: manual update allow_empty_commits: false ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 + updpkgsums: true diff --git a/PKGBUILD b/PKGBUILD index 3823ff68..309352ba 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Antheas Kapenekakis pkgname=hhd pkgver=VERSION -pkgrel=1 +pkgrel=2 pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' arch=('x86_64') url='https://github.com/hhd-dev/hhd' From 9783cc863fc383d0bee2819fd7ba47f2bcf7c8fd Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 3 Feb 2024 23:16:35 +0100 Subject: [PATCH 0375/1497] add checksums to aur deployment --- .github/workflows/package-publish.yml | 1 + PKGBUILD | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/package-publish.yml b/.github/workflows/package-publish.yml index 717ea0a3..91ebac7d 100644 --- a/.github/workflows/package-publish.yml +++ b/.github/workflows/package-publish.yml @@ -56,6 +56,7 @@ jobs: commit_message: update to '${{ github.event.release.name }}' allow_empty_commits: false ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 + updpkgsums: true deploy_copr: runs-on: ubuntu-latest diff --git a/PKGBUILD b/PKGBUILD index 309352ba..3823ff68 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Antheas Kapenekakis pkgname=hhd pkgver=VERSION -pkgrel=2 +pkgrel=1 pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' arch=('x86_64') url='https://github.com/hhd-dev/hhd' From 2e67a1ea5e697dbe691bf143c44b8be62a4f7ab2 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 01:59:43 +0100 Subject: [PATCH 0376/1497] add sysfs trig --- src/hhd/controller/physical/imu.py | 109 ++++++++++++++++++++++++----- 1 file changed, 93 insertions(+), 16 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 4e2c3777..071a3708 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -1,10 +1,10 @@ +import logging +import os import select +from threading import Event as TEvent, Thread from typing import Any, Generator, Literal, NamedTuple, Sequence -from hhd.controller import Axis, Event, Axis, Producer -import os - -import logging +from hhd.controller import Axis, Event, Producer logger = logging.getLogger(__name__) @@ -503,19 +503,61 @@ def close(self): logger.error(f"Could not delete hrtimer trigger. Error:\n{e}") -class SoftwareTrigger(IioReader): - """Unfinished""" +def _sysfs_trig_sampler(ev: TEvent, trigger: int, rate: int = 65): + import time - BEGIN_ID: int = 72 - ATTEMPTS: int = 3 + trig = None + for fn in os.listdir("/sys/bus/iio/devices/"): + if not fn.startswith("trigger"): + continue + tmp = os.path.join("/sys/bus/iio/devices/", fn) + with open(os.path.join(tmp, "name")) as f: + name = f.read().strip() + + if name == f"sysfstrig{trigger}": + trig = os.path.join(tmp, "trigger_now") + break + + if trig is None: + logger.warning(f"Trigger `sysfstrig{trigger}` not found.") + return + + g = None + delay = 1 / rate + try: + with open(trig, "w") as f: + while not ev.is_set(): + f.seek(0) + f.write("1") + time.sleep(delay) + except KeyboardInterrupt: + raise + except Exception as e: + logger.warning(f"Trig sampler failed with error:\n{e}") + finally: + if g: + g.close() + + +class SoftwareTrigger(IioReader): + BEGIN_ID: int = 5335 + ATTEMPTS: int = 900 def __init__( - self, devices: Sequence[Sequence[str]] = [IMU_NAMES, GYRO_NAMES, ACCEL_NAMES] + self, + freq: int, + devices: Sequence[Sequence[str]] = [IMU_NAMES, GYRO_NAMES, ACCEL_NAMES], ) -> None: self.devices = devices self.old_triggers = {} + self.freq = freq + self.opened = False + self.ev = None + self.thread = None def open(self): + import time + try: os.system("modprobe iio-trig-sysfs") except Exception: @@ -525,17 +567,27 @@ def open(self): SoftwareTrigger.BEGIN_ID, SoftwareTrigger.BEGIN_ID + SoftwareTrigger.ATTEMPTS, ): + # Try to remove stale trigger + try: + with open( + "/sys/bus/iio/devices/iio_sysfs_trigger/remove_trigger", "w" + ) as f: + f.write(str(id)) + except Exception: + pass + # Add new trigger try: with open( "/sys/bus/iio/devices/iio_sysfs_trigger/add_trigger", "w" ) as f: f.write(str(id)) break - except Exception as e: - print(e) + except Exception: + pass + time.sleep(0.02) else: logger.error(f"Failed to create software trigger.") - return + return False self.id = id self.old_triggers = {} @@ -544,23 +596,48 @@ def open(self): if not s: continue - with open(os.path.join(s, "buffer/enable"), "w") as f: - f.write("0") + buff_fn = os.path.join(s, "buffer/enable") trig_fn = os.path.join(s, "trigger/current_trigger") + with open(buff_fn, "w") as f: + f.write("0") with open(trig_fn, "r") as f: - self.old_triggers[trig_fn] = f.read() + self.old_triggers[trig_fn] = (f.read(), buff_fn) with open(trig_fn, "w") as f: f.write(f"sysfstrig{self.id}") + self.ev = TEvent() + self.thread = Thread(target=_sysfs_trig_sampler, args=(self.ev, id, self.freq)) + self.thread.start() + self.opened = True + + return True + def close(self): - for trig, name in self.old_triggers.items(): + if not self.opened: + return + + # Stop trigger + self.opened = False + if self.ev: + self.ev.set() + if self.thread: + self.thread.join() + self.ev = None + self.thread = None + + # Remove from current sensors + for trig, (name, buff) in self.old_triggers.items(): try: + with open(buff, "w") as f: + f.write("0") with open(trig, "w") as f: f.write(name) except Exception: logger.error(f"Could not restore original trigger:\n{trig} to {name}") + # Delete trigger try: + logger.info(f"Closing trigger {self.id}") with open( "/sys/bus/iio/devices/iio_sysfs_trigger/remove_trigger", "w" ) as f: From ff88f558656f52ddf826415afce66c3b9aad3654 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 02:01:20 +0100 Subject: [PATCH 0377/1497] switch gpd to software timer (experimental) --- src/hhd/controller/physical/imu.py | 4 ++++ src/hhd/device/gpd/win/base.py | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 071a3708..062547b6 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -540,6 +540,10 @@ def _sysfs_trig_sampler(ev: TEvent, trigger: int, rate: int = 65): class SoftwareTrigger(IioReader): + ACCEL_NAMES = ACCEL_NAMES + GYRO_NAMES = GYRO_NAMES + IMU_NAMES = IMU_NAMES + BEGIN_ID: int = 5335 ATTEMPTS: int = 900 diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 7c6d5e3d..b09df989 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -12,7 +12,7 @@ from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw -from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.controller.physical.imu import CombinedImu, SoftwareTrigger from hhd.plugins import Config, Context, Emitter, get_outputs, get_gyro_state from .const import ( @@ -208,7 +208,8 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d conf["imu_hz"].to(int), get_gyro_state(conf["gyro"], dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS)), ) - d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) + # d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) + d_timer = SoftwareTrigger(conf["imu_hz"].to(int), [SoftwareTrigger.IMU_NAMES]) # Inputs d_xinput = GenericGamepadEvdev( From c2bbb73662ed77ee018c55d984b110871552b6a6 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 02:21:47 +0100 Subject: [PATCH 0378/1497] switch to os.write --- src/hhd/controller/physical/imu.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 062547b6..3e2fb2c5 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -522,28 +522,28 @@ def _sysfs_trig_sampler(ev: TEvent, trigger: int, rate: int = 65): logger.warning(f"Trigger `sysfstrig{trigger}` not found.") return - g = None + fd = -1 delay = 1 / rate try: - with open(trig, "w") as f: - while not ev.is_set(): - f.seek(0) - f.write("1") - time.sleep(delay) + fd = os.open(trig, os.O_RDWR | os.O_NONBLOCK) + while not ev.is_set(): + os.write(fd, b"1") + os.lseek(fd, 0, os.SEEK_SET) + time.sleep(delay) except KeyboardInterrupt: raise except Exception as e: logger.warning(f"Trig sampler failed with error:\n{e}") finally: - if g: - g.close() + if fd != -1: + os.close(fd) class SoftwareTrigger(IioReader): ACCEL_NAMES = ACCEL_NAMES GYRO_NAMES = GYRO_NAMES IMU_NAMES = IMU_NAMES - + BEGIN_ID: int = 5335 ATTEMPTS: int = 900 From d1fd5c9d45573f64af37d811f12eba89c0d0ef4f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 02:25:19 +0100 Subject: [PATCH 0379/1497] fix file permission --- src/hhd/controller/physical/imu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 3e2fb2c5..25722c27 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -525,7 +525,7 @@ def _sysfs_trig_sampler(ev: TEvent, trigger: int, rate: int = 65): fd = -1 delay = 1 / rate try: - fd = os.open(trig, os.O_RDWR | os.O_NONBLOCK) + fd = os.open(trig, os.O_WRONLY) while not ev.is_set(): os.write(fd, b"1") os.lseek(fd, 0, os.SEEK_SET) From 3f4d010bd506548829d6de7786f4ec908694ede3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 02:35:44 +0100 Subject: [PATCH 0380/1497] undo sysfs trigger timer --- src/hhd/device/gpd/win/base.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index b09df989..7c6d5e3d 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -12,7 +12,7 @@ from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.hidraw import GenericGamepadHidraw -from hhd.controller.physical.imu import CombinedImu, SoftwareTrigger +from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.plugins import Config, Context, Emitter, get_outputs, get_gyro_state from .const import ( @@ -208,8 +208,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d conf["imu_hz"].to(int), get_gyro_state(conf["gyro"], dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS)), ) - # d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) - d_timer = SoftwareTrigger(conf["imu_hz"].to(int), [SoftwareTrigger.IMU_NAMES]) + d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) # Inputs d_xinput = GenericGamepadEvdev( From 4df95fe0cd09d9f53319e4da23d807a534265dc3 Mon Sep 17 00:00:00 2001 From: honjow Date: Sun, 4 Feb 2024 21:17:25 +0800 Subject: [PATCH 0381/1497] Add ONEXPLAYER Mini Pro --- src/hhd/device/aokzoe/__init__.py | 1 + src/hhd/device/aokzoe/const.py | 2 +- src/hhd/plugins/powerbutton/const.py | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/aokzoe/__init__.py b/src/hhd/device/aokzoe/__init__.py index 13ce188f..433bc672 100644 --- a/src/hhd/device/aokzoe/__init__.py +++ b/src/hhd/device/aokzoe/__init__.py @@ -15,6 +15,7 @@ AOKZOE_CONFS = { "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, "AOKZOE A1 Pro": {"name": "AOKZOE A1 Pro", "hrtimer": True}, + "ONEXPLAYER Mini Pro": {"name": "ONEXPLAYER Mini Pro", "hrtimer": True}, } diff --git a/src/hhd/device/aokzoe/const.py b/src/hhd/device/aokzoe/const.py index 330bcf1d..9a54dcee 100644 --- a/src/hhd/device/aokzoe/const.py +++ b/src/hhd/device/aokzoe/const.py @@ -15,7 +15,7 @@ # Volume buttons come from the same keyboard B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", - # A1 mappings + # A1 mappings And onexplayer mini pro mappings B("KEY_LEFTALT"): "share", # Turbo Button [29, 56, 125] KEY_LEFTCTRL + KEY_LEFTALT + KEY_LEFTMETA B("KEY_D"): "mode", # Short press orange [32, 125] KEY_D + KEY_LEFTMETA B("KEY_O"): "extra_l1", # KB Button [24, 97, 125] KEY_O + KEY_RIGHTCTRL + KEY_LEFTMETA diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 4e05e9d5..1bdcfea9 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -52,6 +52,12 @@ class PowerButtonConfig(NamedTuple): type="hold_emitted", phys=["LNXPWRBN"], ), + PBC( + "ONEXPLAYER Mini Pro", + "ONEXPLAYER Mini Pro", + type="hold_emitted", + phys=["LNXPWRBN"], + ), ] DEFAULT_DEVICE: PowerButtonConfig = PBC( From 4cb55e505f881d6db814d3afd310ab31ffc311bd Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 16:41:17 +0100 Subject: [PATCH 0382/1497] make aokzoe into a generic driver --- src/hhd/device/{aokzoe => generic}/__init__.py | 12 ++++++------ src/hhd/device/{aokzoe => generic}/base.py | 12 ++++++------ src/hhd/device/{aokzoe => generic}/const.py | 4 ++-- src/hhd/device/{aokzoe => generic}/controllers.yml | 8 ++++---- 4 files changed, 18 insertions(+), 18 deletions(-) rename src/hhd/device/{aokzoe => generic}/__init__.py (91%) rename src/hhd/device/{aokzoe => generic}/base.py (96%) rename src/hhd/device/{aokzoe => generic}/const.py (87%) rename src/hhd/device/{aokzoe => generic}/controllers.yml (83%) diff --git a/src/hhd/device/aokzoe/__init__.py b/src/hhd/device/generic/__init__.py similarity index 91% rename from src/hhd/device/aokzoe/__init__.py rename to src/hhd/device/generic/__init__.py index 433bc672..b79a5ae8 100644 --- a/src/hhd/device/aokzoe/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -12,7 +12,7 @@ from hhd.plugins.settings import HHDSettings -AOKZOE_CONFS = { +CONFS = { "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, "AOKZOE A1 Pro": {"name": "AOKZOE A1 Pro", "hrtimer": True}, "ONEXPLAYER Mini Pro": {"name": "ONEXPLAYER Mini Pro", "hrtimer": True}, @@ -27,8 +27,8 @@ def get_default_config(product_name: str): } -class AokzoeControllersPlugin(HHDPlugin): - name = "aokzoe_controllers" +class GenericControllersPlugin(HHDPlugin): + name = "generic_controllers" priority = 18 log = "zokz" @@ -41,7 +41,7 @@ def __init__(self, dmi: str, dconf: dict) -> None: self.dmi = dmi self.dconf = dconf - self.name = f"aokzoe_controllers@'{dconf.get('name', 'ukn')}'" + self.name = f"generic_controllers@'{dconf.get('name', 'ukn')}'" def open( self, @@ -112,8 +112,8 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: with open("/sys/devices/virtual/dmi/id/product_name") as f: dmi = f.read().strip() - dconf = AOKZOE_CONFS.get(dmi, None) + dconf = CONFS.get(dmi, None) if dconf: - return [AokzoeControllersPlugin(dmi, dconf)] + return [GenericControllersPlugin(dmi, dconf)] return [] diff --git a/src/hhd/device/aokzoe/base.py b/src/hhd/device/generic/base.py similarity index 96% rename from src/hhd/device/aokzoe/base.py rename to src/hhd/device/generic/base.py index 755429eb..e0dfb714 100644 --- a/src/hhd/device/aokzoe/base.py +++ b/src/hhd/device/generic/base.py @@ -17,8 +17,8 @@ from hhd.plugins import Config, Context, Emitter, get_outputs from .const import ( - AOKZOE_BTN_MAPPINGS, - AOKZOE_DEFAULT_MAPPINGS, + BTN_MAPPINGS, + DEFAULT_MAPPINGS, ) ERROR_DELAY = 1 @@ -102,7 +102,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # Imu d_imu = CombinedImu( conf["imu_hz"].to(int), - dconf.get("mapping", AOKZOE_DEFAULT_MAPPINGS), + dconf.get("mapping", DEFAULT_MAPPINGS), # gyro_scale="0.000266", #TODO: Find what this affects ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) @@ -122,7 +122,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d pid=[KBD_PID], required=False, grab=True, - btn_map=dconf.get("btn_mapping", AOKZOE_BTN_MAPPINGS), + btn_map=dconf.get("btn_mapping", BTN_MAPPINGS), ) multiplexer = Multiplexer( @@ -133,8 +133,8 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d ) d_volume_btn = UInputDevice( - name="Handheld Daemon Volume Keyboard (Aokzoe)", - phys="phys-hhd-aokzoe-vbtn", + name="Handheld Daemon Volume Keyboard", + phys="phys-hhd-vbtn", capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, btn_map={ "key_volumeup": EC("KEY_VOLUMEUP"), diff --git a/src/hhd/device/aokzoe/const.py b/src/hhd/device/generic/const.py similarity index 87% rename from src/hhd/device/aokzoe/const.py rename to src/hhd/device/generic/const.py index 9a54dcee..441a0e02 100644 --- a/src/hhd/device/aokzoe/const.py +++ b/src/hhd/device/generic/const.py @@ -1,7 +1,7 @@ from hhd.controller import Axis, Button, Configuration from hhd.controller.physical.evdev import B, to_map -AOKZOE_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { +DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), "accel_y": ("accel_x", "accel", 1, 3), "accel_z": ("accel_y", "accel", 1, 3), @@ -11,7 +11,7 @@ "timestamp": ("gyro_ts", None, 1, None), } -AOKZOE_BTN_MAPPINGS: dict[int, str] = { +BTN_MAPPINGS: dict[int, str] = { # Volume buttons come from the same keyboard B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", diff --git a/src/hhd/device/aokzoe/controllers.yml b/src/hhd/device/generic/controllers.yml similarity index 83% rename from src/hhd/device/aokzoe/controllers.yml rename to src/hhd/device/generic/controllers.yml index 0e545d05..02f52a1a 100644 --- a/src/hhd/device/aokzoe/controllers.yml +++ b/src/hhd/device/generic/controllers.yml @@ -1,16 +1,16 @@ type: container tags: [lgc] -title: AOKZOE Controller +title: Handheld Controller hint: >- - Allows for configuring the aokzoe controllers to a unified output. + Allows for configuring your handheld's controller to a unified output. children: controller_mode: type: mode - tags: [aokzoe_controller_mode] + tags: [controller_mode] title: Controller Emulation hint: >- - Emulate different controller types to fuse AOKZOE features. + Emulate different controller types to fuse your device's features. # # Common settings From 811a4e967c84432eb003d3ca0ed1b9ba4d1c9bf5 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 16:53:51 +0100 Subject: [PATCH 0383/1497] add loki max --- src/hhd/device/generic/__init__.py | 1 + src/hhd/device/generic/const.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index b79a5ae8..c659f9cb 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -16,6 +16,7 @@ "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, "AOKZOE A1 Pro": {"name": "AOKZOE A1 Pro", "hrtimer": True}, "ONEXPLAYER Mini Pro": {"name": "ONEXPLAYER Mini Pro", "hrtimer": True}, + "Loki Max": {"name": "Loki Max", "hrtimer": True}, } diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 441a0e02..d4794cec 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -16,7 +16,13 @@ B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", # A1 mappings And onexplayer mini pro mappings - B("KEY_LEFTALT"): "share", # Turbo Button [29, 56, 125] KEY_LEFTCTRL + KEY_LEFTALT + KEY_LEFTMETA - B("KEY_D"): "mode", # Short press orange [32, 125] KEY_D + KEY_LEFTMETA - B("KEY_O"): "extra_l1", # KB Button [24, 97, 125] KEY_O + KEY_RIGHTCTRL + KEY_LEFTMETA + B( + "KEY_LEFTALT" + ): "share", # Turbo Button [29, 56, 125] KEY_LEFTCTRL + KEY_LEFTALT + KEY_LEFTMETA + B("KEY_D"): "mode", # Short press orange [32, 125] KEY_D + KEY_LEFTMETA + B( + "KEY_O" + ): "extra_l1", # KB Button [24, 97, 125] KEY_O + KEY_RIGHTCTRL + KEY_LEFTMETA + # Loki Max + B("KEY_T"): "share", # T + LCTRL + LSHFT + LALT } From 5f0133066a230800d67a201e5c063159af12e5b5 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 17:04:48 +0100 Subject: [PATCH 0384/1497] add fuzzy match for ayn and onexplayer --- src/hhd/device/generic/__init__.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index c659f9cb..6b636b0b 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -20,9 +20,10 @@ } -def get_default_config(product_name: str): +def get_default_config(product_name: str, manufacturer: str): return { "name": product_name, + "manufacturer": manufacturer, "hrtimer": True, "untested": True, } @@ -112,9 +113,21 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: # if a device exists here its officially supported with open("/sys/devices/virtual/dmi/id/product_name") as f: dmi = f.read().strip() - + dconf = CONFS.get(dmi, None) if dconf: return [GenericControllersPlugin(dmi, dconf)] + # Begin hw agnostic dmi match + if "ONEXPLAYER" in dmi: + return [GenericControllersPlugin(dmi, get_default_config(dmi, "ONEXPLAYER"))] + + try: + with open("/sys/devices/virtual/dmi/id/sys_vendor") as f: + vendor = f.read().strip().lower() + if vendor == "ayn": + return [GenericControllersPlugin(dmi, get_default_config(dmi, "AYN"))] + except Exception: + pass + return [] From 1ce84269285ce13703e944cf673c9ae1e46e54be Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 17:32:48 +0100 Subject: [PATCH 0385/1497] add led support for ayn devices --- src/hhd/controller/physical/rgb.py | 101 +++++++++++++++++++++++++++++ src/hhd/device/generic/__init__.py | 4 +- src/hhd/device/generic/base.py | 22 ++++--- 3 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 src/hhd/controller/physical/rgb.py diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py new file mode 100644 index 00000000..40723427 --- /dev/null +++ b/src/hhd/controller/physical/rgb.py @@ -0,0 +1,101 @@ +import os +import time +from typing import TYPE_CHECKING, Any, Sequence + +if TYPE_CHECKING: + from hhd.controller.base import RgbLedEvent, Event + +from hhd.controller import Consumer + + +def write_sysfs(dir: str, fn: str, val: Any): + with open(os.path.join(dir, fn), "w") as f: + f.write(str(val)) + + +def read_sysfs(dir: str, fn: str, default: str | None = None): + try: + with open(os.path.join(dir, fn), "r") as f: + return f.read().strip() + except Exception as e: + if default is not None: + return default + raise e + + +def chassis_led_sysfs_path(): + old_path = "/sys/class/leds/multicolor:chassis/device" + new_path = "/sys/class/leds/multicolor:chassis/" + + if os.path.exists(old_path): + return old_path + + if os.path.exists(new_path): + return new_path + + return None + + +def is_led_supported(): + return chassis_led_sysfs_path() is not None + + +def chassis_led_set(path: str, ev: RgbLedEvent): + if ev["type"] != "led": + return + + match ev["mode"]: + case "solid": + r_mode = 1 + case _: + r_mode = 0 + + r_brightness = min(max(int(ev["brightness"] * 255), 255), 0) + r_red = min(max(ev["red"], 255), 0) + r_green = min(max(ev["green"], 255), 0) + r_blue = min(max(ev["blue"], 255), 0) + + write_sysfs(path, "led_mode", r_mode) + write_sysfs(path, "brightness", r_brightness) + write_sysfs(path, "multi_intensity", f"{r_red} {r_green} {r_blue}") + + +class LedDevice(Consumer): + def __init__(self, rate_limit: float = 4) -> None: + self.path = chassis_led_sysfs_path() + self.supported = self.path is not None + self.min_delay = 1 / rate_limit + self.queued = None + self.last = time.time() - self.min_delay + + def consume(self, events: Sequence[Event]): + if not self.path: + return + + curr = time.time() + ev = None + + # Pop queued event if possible + if self.queued: + e, t = self.queued + if curr > t: + e = ev + self.queued = None + + # Find newer event if it exists + for e in events: + if e["type"] == "led": + ev = e + # Clear queue since there + # is a newer event + self.queued = None + + # If no led event return + if ev is None: + return + + if curr > self.last + self.min_delay: + chassis_led_set(self.path, ev) + self.last = curr + else: + self.queued = (ev, curr + self.min_delay) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index 6b636b0b..e421582f 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -10,7 +10,7 @@ get_outputs_config, ) from hhd.plugins.settings import HHDSettings - +from hhd.controller.physical.rgb import is_led_supported CONFS = { "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, @@ -57,7 +57,7 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"aokzoe": load_relative_yaml("controllers.yml")}} base["controllers"]["aokzoe"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=False, has_leds=False) + get_outputs_config(can_disable=False, has_leds=is_led_supported()) ) return base diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index e0dfb714..bd9a2a6d 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -3,16 +3,14 @@ import select import time from threading import Event as TEvent -from typing import Sequence import evdev -from hhd.controller import Axis, Event, Multiplexer, can_read -from hhd.controller.base import Event, TouchpadAction +from hhd.controller import Multiplexer from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.controller.physical.rgb import LedDevice from hhd.controller.virtual.uinput import UInputDevice from hhd.plugins import Config, Context, Emitter, get_outputs @@ -65,13 +63,14 @@ def plugin_run( continue # copy from handygccs - if os.path.exists('/sys/devices/platform/oxp-platform/tt_toggle'): - command = f'echo 1 > /sys/devices/platform/oxp-platform/tt_toggle' - os.popen(command, 'r', 1).read().strip() - logger.info(f'Turbo button takeover enabled') + if os.path.exists("/sys/devices/platform/oxp-platform/tt_toggle"): + command = f"echo 1 > /sys/devices/platform/oxp-platform/tt_toggle" + os.popen(command, "r", 1).read().strip() + logger.info(f"Turbo button takeover enabled") else: logger.warn( - f'Turbo takeover failed. Ensure you have the latest oxp-sensors driver installed.') + f"Turbo takeover failed. Ensure you have the latest oxp-sensors driver installed." + ) try: logger.info("Launching emulated controller.") @@ -145,6 +144,10 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d output_timestamps=True, ) + d_rgb = LedDevice() + if d_rgb.supported: + logger.info(f"RGB Support activated through kernel driver.") + REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 400 @@ -203,6 +206,7 @@ def prepare(m): d_volume_btn.consume(evs) d_xinput.consume(evs) + d_rgb.consume(evs) for d in d_outs: d.consume(evs) From 80a5f91fa8549fc7082c340714f92ca778900f5e Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 17:39:11 +0100 Subject: [PATCH 0386/1497] add rgb support to ayaneo --- src/hhd/device/ayaneo/__init__.py | 3 ++- src/hhd/device/ayaneo/base.py | 22 ++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py index 391e6d71..1033f154 100644 --- a/src/hhd/device/ayaneo/__init__.py +++ b/src/hhd/device/ayaneo/__init__.py @@ -13,6 +13,7 @@ get_gyro_config, ) from hhd.plugins.settings import HHDSettings +from hhd.controller.physical.rgb import is_led_supported AYANEO_CONFS = { @@ -66,7 +67,7 @@ def settings(self) -> HHDSettings: base["controllers"]["ayaneo"]["children"]["controller_mode"].update( get_outputs_config( can_disable=True, - has_leds=False, + has_leds=is_led_supported(), start_disabled=self.dconf.get("untested", False), ) ) diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py index e1203359..659a836a 100644 --- a/src/hhd/device/ayaneo/base.py +++ b/src/hhd/device/ayaneo/base.py @@ -1,27 +1,20 @@ import logging -import re import select import time from threading import Event as TEvent -from typing import Sequence import evdev -from hhd.controller import Axis, Event, Multiplexer, can_read -from hhd.controller.base import Event, TouchpadAction +from hhd.controller import Multiplexer +from hhd.controller.base import TouchpadAction from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.controller.physical.rgb import LedDevice from hhd.controller.virtual.uinput import UInputDevice -from hhd.plugins import Config, Context, Emitter, get_outputs, get_gyro_state +from hhd.plugins import Config, Context, Emitter, get_gyro_state, get_outputs -from .const import ( - AYANEO_BTN_MAPPINGS, - AYANEO_DEFAULT_MAPPINGS, - AYANEO_TOUCHPAD_AXIS_MAP, - AYANEO_TOUCHPAD_BUTTON_MAP, -) +from .const import AYANEO_BTN_MAPPINGS, AYANEO_DEFAULT_MAPPINGS ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -169,6 +162,10 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d output_timestamps=True, ) + d_rgb = LedDevice() + if d_rgb.supported: + logger.info(f"RGB Support activated through kernel driver.") + REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 400 @@ -227,6 +224,7 @@ def prepare(m): d_volume_btn.consume(evs) d_xinput.consume(evs) + d_rgb.consume(evs) for d in d_outs: d.consume(evs) From 04d7eb9fbe71f6cd90b6ae002fb542a89b4472fa Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 17:54:15 +0100 Subject: [PATCH 0387/1497] merge aya driver into generic one --- src/hhd/device/ayaneo/__init__.py | 154 --------------- src/hhd/device/ayaneo/base.py | 252 ------------------------- src/hhd/device/ayaneo/const.py | 56 ------ src/hhd/device/ayaneo/controllers.yml | 56 ------ src/hhd/device/generic/__init__.py | 28 ++- src/hhd/device/generic/base.py | 4 +- src/hhd/device/generic/const.py | 99 +++++++++- src/hhd/device/generic/controllers.yml | 2 +- 8 files changed, 105 insertions(+), 546 deletions(-) delete mode 100644 src/hhd/device/ayaneo/__init__.py delete mode 100644 src/hhd/device/ayaneo/base.py delete mode 100644 src/hhd/device/ayaneo/const.py delete mode 100644 src/hhd/device/ayaneo/controllers.yml diff --git a/src/hhd/device/ayaneo/__init__.py b/src/hhd/device/ayaneo/__init__.py deleted file mode 100644 index 1033f154..00000000 --- a/src/hhd/device/ayaneo/__init__.py +++ /dev/null @@ -1,154 +0,0 @@ -from threading import Event, Thread -from typing import Any, Sequence -from .const import AYANEO_AIR_PLUS_MAPPINGS, AYANEO_DEFAULT_MAPPINGS - -from hhd.plugins import ( - Config, - Context, - Emitter, - HHDPlugin, - load_relative_yaml, - get_outputs_config, - get_touchpad_config, - get_gyro_config, -) -from hhd.plugins.settings import HHDSettings -from hhd.controller.physical.rgb import is_led_supported - - -AYANEO_CONFS = { - "AIR Plus": { - "name": "AYANEO AIR Plus", - "hrtimer": True, - "mapping": AYANEO_AIR_PLUS_MAPPINGS, - }, - "AYANEO 2": {"name": "AYANEO 2", "hrtimer": True}, - "AYANEO 2S": {"name": "AYANEO S2", "hrtimer": True}, - "GEEK": {"name": "AYANEO GEEK", "hrtimer": True}, - "GEEK 1S": {"name": "AYANEO GEEK 1S", "hrtimer": True}, -} - - -def get_default_config(product_name: str): - return { - "name": product_name, - "hrtimer": True, - "untested": True, - } - - -class AyaneoControllersPlugin(HHDPlugin): - name = "ayaneo_controllers" - priority = 18 - log = "ayan" - - def __init__(self, dmi: str, dconf: dict) -> None: - self.t = None - self.should_exit = None - self.updated = Event() - self.started = False - self.t = None - - self.dmi = dmi - self.dconf = dconf - self.name = f"ayaneo_controllers@'{dconf.get('name', 'ukn')}'" - - def open( - self, - emit: Emitter, - context: Context, - ): - self.emit = emit - self.context = context - self.prev = None - - def settings(self) -> HHDSettings: - base = {"controllers": {"ayaneo": load_relative_yaml("controllers.yml")}} - base["controllers"]["ayaneo"]["children"]["controller_mode"].update( - get_outputs_config( - can_disable=True, - has_leds=is_led_supported(), - start_disabled=self.dconf.get("untested", False), - ) - ) - - if self.dconf.get("touchpad", False): - base["controllers"]["ayaneo"]["children"][ - "touchpad" - ] = get_touchpad_config() - else: - del base["controllers"]["ayaneo"]["children"]["touchpad"] - - base["controllers"]["ayaneo"]["children"]["gyro"] = get_gyro_config( - self.dconf.get("mapping", AYANEO_DEFAULT_MAPPINGS) - ) - - return base - - def update(self, conf: Config): - new_conf = conf["controllers.ayaneo"] - if new_conf == self.prev: - return - if self.prev is None: - self.prev = new_conf - else: - self.prev.update(new_conf.conf) - - self.updated.set() - self.start(self.prev) - - def start(self, conf): - from .base import plugin_run - - if self.started: - return - self.started = True - - self.close() - self.should_exit = Event() - self.t = Thread( - target=plugin_run, - args=( - conf, - self.emit, - self.context, - self.should_exit, - self.updated, - self.dconf, - ), - ) - self.t.start() - - def close(self): - if not self.should_exit or not self.t: - return - self.should_exit.set() - self.t.join() - self.should_exit = None - self.t = None - - -def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: - if len(existing): - return existing - - # Match just product name - # if a device exists here its officially supported - with open("/sys/devices/virtual/dmi/id/product_name") as f: - dmi = f.read().strip() - - dconf = AYANEO_CONFS.get(dmi, None) - if dconf: - return [AyaneoControllersPlugin(dmi, dconf)] - - # Fallback to chassis vendor since aya contains no usb devices - try: - with open("/sys/class/dmi/id/board_vendor") as f: - vendor = f.read().lower().strip() - - if "ayaneo" in vendor: - return [AyaneoControllersPlugin(dmi, get_default_config(dmi))] - except Exception: - return [] - - return [] diff --git a/src/hhd/device/ayaneo/base.py b/src/hhd/device/ayaneo/base.py deleted file mode 100644 index 659a836a..00000000 --- a/src/hhd/device/ayaneo/base.py +++ /dev/null @@ -1,252 +0,0 @@ -import logging -import select -import time -from threading import Event as TEvent - -import evdev - -from hhd.controller import Multiplexer -from hhd.controller.base import TouchpadAction -from hhd.controller.physical.evdev import B as EC -from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger -from hhd.controller.physical.rgb import LedDevice -from hhd.controller.virtual.uinput import UInputDevice -from hhd.plugins import Config, Context, Emitter, get_gyro_state, get_outputs - -from .const import AYANEO_BTN_MAPPINGS, AYANEO_DEFAULT_MAPPINGS - -ERROR_DELAY = 1 -SELECT_TIMEOUT = 1 - -logger = logging.getLogger(__name__) - - -GAMEPAD_VID = 0x045E -GAMEPAD_PID = 0x028E - -KBD_VID = 0x0001 -KBD_PID = 0x0001 - -BACK_BUTTON_DELAY = 0.1 - - -def plugin_run( - conf: Config, - emit: Emitter, - context: Context, - should_exit: TEvent, - updated: TEvent, - dconf: dict, -): - first = True - while not should_exit.is_set(): - if conf["controller_mode"].to(str) == "disabled": - time.sleep(ERROR_DELAY) - continue - - found_gamepad = False - try: - for d in evdev.list_devices(): - dev = evdev.InputDevice(d) - if dev.info.vendor == GAMEPAD_VID and dev.info.product == GAMEPAD_PID: - found_gamepad = True - break - except Exception: - logger.warning("Failed finding device, skipping check.") - found_gamepad = True - - if not found_gamepad: - time.sleep(ERROR_DELAY) - if first: - logger.info("Controller in Mouse mode. Waiting...") - first = False - continue - - try: - logger.info("Launching emulated controller.") - updated.clear() - controller_loop(conf.copy(), should_exit, updated, dconf) - except Exception as e: - logger.error(f"Received the following error:\n{type(e)}: {e}") - logger.error( - f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." - ) - first = True - # Raise exception - if conf.get("debug", False): - raise e - time.sleep(ERROR_DELAY) - - -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): - debug = conf.get("debug", False) - has_touchpad = conf.get("touchpad", False) - - # Output - d_producers, d_outs, d_params = get_outputs( - conf["controller_mode"], - conf["touchpad"] if has_touchpad else None, - conf["imu"].to(bool), - ) - - # Imu - d_imu = CombinedImu( - conf["imu_hz"].to(int), - get_gyro_state(conf["gyro"], dconf.get("mapping", AYANEO_DEFAULT_MAPPINGS)), - ) - d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) - - # Inputs - d_xinput = GenericGamepadEvdev( - vid=[GAMEPAD_VID], - pid=[GAMEPAD_PID], - # name=["Generic X-Box pad"], - capabilities={EC("EV_KEY"): [EC("BTN_A")]}, - required=True, - hide=True, - ) - - # d_touch = GenericGamepadEvdev( - # vid=[TOUCHPAD_VID, TOUCHPAD_VID_2], - # pid=[TOUCHPAD_PID, TOUCHPAD_PID_2], - # name=[re.compile(".+Touchpad")], - # capabilities={EC("EV_KEY"): [EC("BTN_MOUSE")]}, - # btn_map=AYANEO_TOUCHPAD_BUTTON_MAP, - # axis_map=AYANEO_TOUCHPAD_AXIS_MAP, - # aspect_ratio=1.333, - # required=False, - # ) - - d_kbd_1 = GenericGamepadEvdev( - vid=[KBD_VID], - pid=[KBD_PID], - required=False, - grab=True, - btn_map=dconf.get("btn_mapping", AYANEO_BTN_MAPPINGS), - ) - - if has_touchpad: - touch_actions = ( - conf["touchpad.controller"] - if conf["touchpad.mode"].to(TouchpadAction) == "controller" - else conf["touchpad.emulation"] - ) - - multiplexer = Multiplexer( - trigger="analog_to_discrete", - dpad="analog_to_discrete", - share_to_qam=conf["share_to_qam"].to(bool), - touchpad_short=touch_actions["short"].to(TouchpadAction), - touchpad_hold=touch_actions["hold"].to(TouchpadAction), - nintendo_mode=conf["nintendo_mode"].to(bool), - ) - else: - multiplexer = Multiplexer( - trigger="analog_to_discrete", - dpad="analog_to_discrete", - share_to_qam=conf["share_to_qam"].to(bool), - nintendo_mode=conf["nintendo_mode"].to(bool), - ) - - d_volume_btn = UInputDevice( - name="Handheld Daemon Volume Keyboard (Ayaneo)", - phys="phys-hhd-ayaneo-vbtn", - capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, - btn_map={ - "key_volumeup": EC("KEY_VOLUMEUP"), - "key_volumedown": EC("KEY_VOLUMEDOWN"), - }, - pid=KBD_PID, - vid=KBD_VID, - output_timestamps=True, - ) - - d_rgb = LedDevice() - if d_rgb.supported: - logger.info(f"RGB Support activated through kernel driver.") - - REPORT_FREQ_MIN = 25 - REPORT_FREQ_MAX = 400 - - if conf["imu"].to(bool): - REPORT_FREQ_MAX = max(REPORT_FREQ_MAX, conf["imu_hz"].to(float)) - - REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN - REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX - - fds = [] - devs = [] - fd_to_dev = {} - - def prepare(m): - devs.append(m) - fs = m.open() - fds.extend(fs) - for f in fs: - fd_to_dev[f] = m - - try: - # d_vend.open() - prepare(d_xinput) - if conf.get("imu", False): - start_imu = True - if dconf.get("hrtimer", False): - start_imu = d_timer.open() - if start_imu: - prepare(d_imu) - # if has_touchpad and d_params["uses_touch"]: - # prepare(d_touch) - prepare(d_volume_btn) - prepare(d_kbd_1) - for d in d_producers: - prepare(d) - - logger.info("Emulated controller launched, have fun!") - while not should_exit.is_set() and not updated.is_set(): - start = time.perf_counter() - # Add timeout to call consumers a minimum amount of times per second - r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) - evs = [] - to_run = set() - for f in r: - to_run.add(id(fd_to_dev[f])) - - for d in devs: - if id(d) in to_run: - evs.extend(d.produce(r)) - - evs = multiplexer.process(evs) - if evs: - if debug: - logger.info(evs) - - d_volume_btn.consume(evs) - d_xinput.consume(evs) - - d_rgb.consume(evs) - for d in d_outs: - d.consume(evs) - - # If unbounded, the total number of events per second is the sum of all - # events generated by the producers. - # For Legion go, that would be 100 + 100 + 500 + 30 = 730 - # Since the controllers of the legion go only update at 500hz, this is - # wasteful. - # By setting a target refresh rate for the report and sleeping at the - # end, we ensure that even if multiple fds become ready close to each other - # they are combined to the same report, limiting resource use. - # Ideally, this rate is smaller than the report rate of the hardware controller - # to ensure there is always a report from that ready during refresh - t = time.perf_counter() - elapsed = t - start - if elapsed < REPORT_DELAY_MIN: - time.sleep(REPORT_DELAY_MIN - elapsed) - - except KeyboardInterrupt: - raise - finally: - # d_vend.close(True) - d_timer.close() - for d in reversed(devs): - d.close(True) diff --git a/src/hhd/device/ayaneo/const.py b/src/hhd/device/ayaneo/const.py deleted file mode 100644 index 4abfbb47..00000000 --- a/src/hhd/device/ayaneo/const.py +++ /dev/null @@ -1,56 +0,0 @@ -from hhd.controller import Axis, Button, Configuration -from hhd.controller.physical.evdev import B, to_map - -AYANEO_TOUCHPAD_BUTTON_MAP: dict[int, Button] = to_map( - { - "touchpad_touch": [B("BTN_TOOL_FINGER")], # also BTN_TOUCH - "touchpad_right": [B("BTN_TOOL_DOUBLETAP"), B("BTN_RIGHT")], - "touchpad_left": [B("BTN_MOUSE")], - } -) - -AYANEO_TOUCHPAD_AXIS_MAP: dict[int, Axis] = to_map( - { - "touchpad_x": [B("ABS_X")], # also ABS_MT_POSITION_X - "touchpad_y": [B("ABS_Y")], # also ABS_MT_POSITION_Y - } -) - -AYANEO_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", -1, None), - "anglvel_y": ("gyro_x", "anglvel", -1, None), - "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), -} - -AYANEO_AIR_PLUS_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", 1, None), - "anglvel_y": ("gyro_x", "anglvel", -1, None), - "anglvel_z": ("gyro_y", "anglvel", 1, None), - "timestamp": ("gyro_ts", None, 1, None), -} - -AYANEO_BTN_MAPPINGS: dict[int, str] = { - # Volume buttons come from the same keyboard - B("KEY_VOLUMEUP"): "key_volumeup", - B("KEY_VOLUMEDOWN"): "key_volumedown", - # Air Plus mappings - B("KEY_F17"): "mode", # Big Button - B("KEY_D"): "share", # Small Button - B("KEY_F15"): "extra_l1", # LC Button - B("KEY_F16"): "extra_r1", # RC Button - # NEXT mappings - B("KEY_F12"): "mode", # Big Button [[96, 105, 133], [88, 97, 125]] - # B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] - # 2021 Mappings - B("KEY_DELETE"): "share", # TM Button [97,100,111] - B("KEY_ESC"): "extra_l1", # ESC Button [1] - B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] - # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button -} diff --git a/src/hhd/device/ayaneo/controllers.yml b/src/hhd/device/ayaneo/controllers.yml deleted file mode 100644 index 6886a6e7..00000000 --- a/src/hhd/device/ayaneo/controllers.yml +++ /dev/null @@ -1,56 +0,0 @@ -type: container -tags: [lgc] -title: AYANEO Controller -hint: >- - Allows for configuring the ayaneo controllers to a unified output. - -children: - controller_mode: - type: mode - tags: [ayaneo_controller_mode] - title: Controller Emulation - hint: >- - Emulate different controller types to fuse AYANEO features. - - # - # Common settings - # - imu: - type: bool - title: Motion Support - hint: >- - Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) - default: True - - imu_hz: - type: discrete - title: Motion Hz - hint: >- - Sets the sampling frequency for the IMU. - Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. - options: [50, 100, 200, 400, 800, 1600] - default: 400 - - touchpad: - - nintendo_mode: - type: bool - title: Nintendo Mode (A-B Swap) - hint: >- - Swaps A with B and X with Y. - default: False - - share_to_qam: - type: bool - title: Map small buttom to QAM. - tags: [advanced] - default: True - - debug: - type: bool - title: Debug - tags: [advanced] - hint: >- - Output controller events to the console (high CPU use) and raises exceptions - (HHD will crash on errors). - default: False diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index e421582f..ec452c12 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -12,27 +12,13 @@ from hhd.plugins.settings import HHDSettings from hhd.controller.physical.rgb import is_led_supported -CONFS = { - "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, - "AOKZOE A1 Pro": {"name": "AOKZOE A1 Pro", "hrtimer": True}, - "ONEXPLAYER Mini Pro": {"name": "ONEXPLAYER Mini Pro", "hrtimer": True}, - "Loki Max": {"name": "Loki Max", "hrtimer": True}, -} - - -def get_default_config(product_name: str, manufacturer: str): - return { - "name": product_name, - "manufacturer": manufacturer, - "hrtimer": True, - "untested": True, - } +from .const import CONFS, get_default_config class GenericControllersPlugin(HHDPlugin): name = "generic_controllers" priority = 18 - log = "zokz" + log = "genc" def __init__(self, dmi: str, dconf: dict) -> None: self.t = None @@ -130,4 +116,14 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: except Exception: pass + # Fallback to chassis vendor for aya + try: + with open("/sys/class/dmi/id/board_vendor") as f: + vendor = f.read().lower().strip() + + if "ayaneo" in vendor: + return [GenericControllersPlugin(dmi, get_default_config(dmi, "AYA"))] + except Exception: + return [] + return [] diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index bd9a2a6d..c2b0e1fa 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -58,7 +58,7 @@ def plugin_run( if not found_gamepad: time.sleep(ERROR_DELAY) if first: - logger.info("Controller in Mouse mode. Waiting...") + logger.info("Controller not found. Waiting...") first = False continue @@ -177,8 +177,6 @@ def prepare(m): start_imu = d_timer.open() if start_imu: prepare(d_imu) - # if has_touchpad and d_params["uses_touch"]: - # prepare(d_touch) prepare(d_volume_btn) prepare(d_kbd_1) for d in d_producers: diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index d4794cec..2fbf787d 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -15,14 +15,97 @@ # Volume buttons come from the same keyboard B("KEY_VOLUMEUP"): "key_volumeup", B("KEY_VOLUMEDOWN"): "key_volumedown", - # A1 mappings And onexplayer mini pro mappings - B( - "KEY_LEFTALT" - ): "share", # Turbo Button [29, 56, 125] KEY_LEFTCTRL + KEY_LEFTALT + KEY_LEFTMETA - B("KEY_D"): "mode", # Short press orange [32, 125] KEY_D + KEY_LEFTMETA - B( - "KEY_O" - ): "extra_l1", # KB Button [24, 97, 125] KEY_O + KEY_RIGHTCTRL + KEY_LEFTMETA + # + # AOKZOE A1 mappings And onexplayer mini pro mappings + # + # Turbo Button [29, 56, 125] KEY_LEFTCTRL + KEY_LEFTALT + KEY_LEFTMETA + B("KEY_LEFTALT"): "share", + # Short press orange [32, 125] KEY_D + KEY_LEFTMETA + B("KEY_D"): "mode", + # KB Button [24, 97, 125] KEY_O + KEY_RIGHTCTRL + KEY_LEFTMETA + B("KEY_O"): "extra_l1", + # # Loki Max + # B("KEY_T"): "share", # T + LCTRL + LSHFT + LALT } + +AYANEO_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", -1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} + +AYANEO_AIR_PLUS_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", 1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", 1, None), + "timestamp": ("gyro_ts", None, 1, None), +} + +AYANEO_BTN_MAPPINGS: dict[int, str] = { + # Volume buttons come from the same keyboard + B("KEY_VOLUMEUP"): "key_volumeup", + B("KEY_VOLUMEDOWN"): "key_volumedown", + # Air Plus mappings + B("KEY_F17"): "mode", # Big Button + B("KEY_D"): "share", # Small Button + B("KEY_F15"): "extra_l1", # LC Button + B("KEY_F16"): "extra_r1", # RC Button + # NEXT mappings + B("KEY_F12"): "mode", # Big Button [[96, 105, 133], [88, 97, 125]] + # B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] + # 2021 Mappings + B("KEY_DELETE"): "share", # TM Button [97,100,111] + B("KEY_ESC"): "extra_l1", # ESC Button [1] + B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] + # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button +} + +AYA_DEFAULT_CONF = { + "hrtimer": True, + "btn": AYANEO_BTN_MAPPINGS, + "mapping": AYANEO_DEFAULT_MAPPINGS, +} + +CONFS = { + # Aokzoe + "AOKZOE A1 AR07": {"name": "AOKZOE A1", "hrtimer": True}, + "AOKZOE A1 Pro": {"name": "AOKZOE A1 Pro", "hrtimer": True}, + # Onexplayer + "ONEXPLAYER Mini Pro": {"name": "ONEXPLAYER Mini Pro", "hrtimer": True}, + # Ayn + "Loki Max": {"name": "Loki Max", "hrtimer": True}, + # Ayaneo + "AIR Plus": { + "name": "AYANEO AIR Plus", + **AYA_DEFAULT_CONF, + "mapping": AYANEO_AIR_PLUS_MAPPINGS, + }, + "AYANEO 2": {"name": "AYANEO 2", **AYA_DEFAULT_CONF}, + "AYANEO 2S": {"name": "AYANEO S2", **AYA_DEFAULT_CONF}, + "GEEK": {"name": "AYANEO GEEK", **AYA_DEFAULT_CONF}, + "GEEK 1S": {"name": "AYANEO GEEK 1S", **AYA_DEFAULT_CONF}, +} + + +def get_default_config(product_name: str, manufacturer: str): + out = { + "name": product_name, + "manufacturer": manufacturer, + "hrtimer": True, + "untested": True, + } + + if manufacturer == "AYA": + out["btn"] = AYANEO_BTN_MAPPINGS + out["mapping"] = AYANEO_DEFAULT_MAPPINGS + + return out diff --git a/src/hhd/device/generic/controllers.yml b/src/hhd/device/generic/controllers.yml index 02f52a1a..b3d22967 100644 --- a/src/hhd/device/generic/controllers.yml +++ b/src/hhd/device/generic/controllers.yml @@ -40,7 +40,7 @@ children: share_to_qam: type: bool - title: Map buttom to QAM. + title: Map share buttom to QAM. tags: [advanced] default: True From b1bc45b31bf735b5b72b2ccc426203719a7012f0 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:01:17 +0100 Subject: [PATCH 0388/1497] fix typos --- src/hhd/device/generic/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 2fbf787d..0fb4bdcb 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -71,7 +71,7 @@ AYA_DEFAULT_CONF = { "hrtimer": True, - "btn": AYANEO_BTN_MAPPINGS, + "btn_mapping": AYANEO_BTN_MAPPINGS, "mapping": AYANEO_DEFAULT_MAPPINGS, } @@ -105,7 +105,7 @@ def get_default_config(product_name: str, manufacturer: str): } if manufacturer == "AYA": - out["btn"] = AYANEO_BTN_MAPPINGS + out["btn_mapping"] = AYANEO_BTN_MAPPINGS out["mapping"] = AYANEO_DEFAULT_MAPPINGS return out From cb77935de630781b0ab256fea799d98b48969fd9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:06:45 +0100 Subject: [PATCH 0389/1497] fix toml for generic driver --- pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f8e43a41..b59363b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,8 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" gpd_win = "hhd.device.gpd.win:autodetect" -ayaneo = "hhd.device.ayaneo:autodetect" -aokzoe = "hhd.device.aokzoe:autodetect" +generic = "hhd.device.generic:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" From 34b8c7c4a1f4324159386e72e7e26c7287889d08 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:10:53 +0100 Subject: [PATCH 0390/1497] fix led support --- src/hhd/controller/physical/rgb.py | 37 ++++++++++++------------------ 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 40723427..439e03c9 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -7,6 +7,8 @@ from hhd.controller import Consumer +LED_PATH = "/sys/class/leds/multicolor:chassis/" + def write_sysfs(dir: str, fn: str, val: Any): with open(os.path.join(dir, fn), "w") as f: @@ -23,24 +25,11 @@ def read_sysfs(dir: str, fn: str, default: str | None = None): raise e -def chassis_led_sysfs_path(): - old_path = "/sys/class/leds/multicolor:chassis/device" - new_path = "/sys/class/leds/multicolor:chassis/" - - if os.path.exists(old_path): - return old_path - - if os.path.exists(new_path): - return new_path - - return None - - def is_led_supported(): - return chassis_led_sysfs_path() is not None + return os.path.exists(LED_PATH) -def chassis_led_set(path: str, ev: RgbLedEvent): +def chassis_led_set(ev: RgbLedEvent): if ev["type"] != "led": return @@ -55,21 +44,25 @@ def chassis_led_set(path: str, ev: RgbLedEvent): r_green = min(max(ev["green"], 255), 0) r_blue = min(max(ev["blue"], 255), 0) - write_sysfs(path, "led_mode", r_mode) - write_sysfs(path, "brightness", r_brightness) - write_sysfs(path, "multi_intensity", f"{r_red} {r_green} {r_blue}") + try: + # Try to write to the old driver path + # TODO: Remove + write_sysfs(LED_PATH, "device/led_mode", r_mode) + except Exception: + write_sysfs(LED_PATH, "led_mode", r_mode) + write_sysfs(LED_PATH, "brightness", r_brightness) + write_sysfs(LED_PATH, "multi_intensity", f"{r_red} {r_green} {r_blue}") class LedDevice(Consumer): def __init__(self, rate_limit: float = 4) -> None: - self.path = chassis_led_sysfs_path() - self.supported = self.path is not None + self.supported = is_led_supported() self.min_delay = 1 / rate_limit self.queued = None self.last = time.time() - self.min_delay def consume(self, events: Sequence[Event]): - if not self.path: + if not self.supported: return curr = time.time() @@ -95,7 +88,7 @@ def consume(self, events: Sequence[Event]): return if curr > self.last + self.min_delay: - chassis_led_set(self.path, ev) + chassis_led_set(ev) self.last = curr else: self.queued = (ev, curr + self.min_delay) From 76a033983f80a05494f9f1b224df2c25fce33698 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:17:53 +0100 Subject: [PATCH 0391/1497] fix linter error --- src/hhd/controller/physical/rgb.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 439e03c9..9c71f607 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -1,11 +1,9 @@ import os import time -from typing import TYPE_CHECKING, Any, Sequence - -if TYPE_CHECKING: - from hhd.controller.base import RgbLedEvent, Event +from typing import Any, Sequence from hhd.controller import Consumer +from hhd.controller.base import Event, RgbLedEvent LED_PATH = "/sys/class/leds/multicolor:chassis/" From 5be90d29bfce0a95bd48e244d0ef875683f4af66 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:39:51 +0100 Subject: [PATCH 0392/1497] prevent writing to leds after crash --- src/hhd/controller/physical/rgb.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 9c71f607..e6dbfcd7 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -1,3 +1,4 @@ +import logging import os import time from typing import Any, Sequence @@ -7,6 +8,8 @@ LED_PATH = "/sys/class/leds/multicolor:chassis/" +logger = logging.getLogger(__name__) + def write_sysfs(dir: str, fn: str, val: Any): with open(os.path.join(dir, fn), "w") as f: @@ -86,7 +89,12 @@ def consume(self, events: Sequence[Event]): return if curr > self.last + self.min_delay: - chassis_led_set(ev) + try: + chassis_led_set(ev) + except Exception as e: + logger.error(f"Setting leds failed with error:\n{e}") + # Turn off support + self.supported = False self.last = curr else: self.queued = (ev, curr + self.min_delay) From 3161a6efcaedd3fd9b1f5f6e5849e86d248b7f59 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:40:48 +0100 Subject: [PATCH 0393/1497] add logger to led writes --- src/hhd/controller/physical/rgb.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index e6dbfcd7..af719a84 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -12,6 +12,7 @@ def write_sysfs(dir: str, fn: str, val: Any): + logger.warning(f"Writing `{str(val)}` to \n{os.path.join(dir, fn)}") with open(os.path.join(dir, fn), "w") as f: f.write(str(val)) From 017bab7fb34a6ad37cfe749b7310066ab38565e4 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:48:38 +0100 Subject: [PATCH 0394/1497] fix limits (were opposite) --- src/hhd/controller/physical/rgb.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index af719a84..e43d3bdf 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -42,9 +42,9 @@ def chassis_led_set(ev: RgbLedEvent): r_mode = 0 r_brightness = min(max(int(ev["brightness"] * 255), 255), 0) - r_red = min(max(ev["red"], 255), 0) - r_green = min(max(ev["green"], 255), 0) - r_blue = min(max(ev["blue"], 255), 0) + r_red = max(min(ev["red"], 255), 0) + r_green = max(min(ev["green"], 255), 0) + r_blue = max(min(ev["blue"], 255), 0) try: # Try to write to the old driver path From 1f6b4009d93e4838b974c19bfd2195d5db21a3f7 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 18:49:09 +0100 Subject: [PATCH 0395/1497] fix brightness limit too --- src/hhd/controller/physical/rgb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index e43d3bdf..637c82a5 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -41,7 +41,7 @@ def chassis_led_set(ev: RgbLedEvent): case _: r_mode = 0 - r_brightness = min(max(int(ev["brightness"] * 255), 255), 0) + r_brightness = max(min(int(ev["brightness"] * 255), 255), 0) r_red = max(min(ev["red"], 255), 0) r_green = max(min(ev["green"], 255), 0) r_blue = max(min(ev["blue"], 255), 0) From cea8ed1c8962cd28bdaebd3cc94fbd39d142bf41 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 19:05:14 +0100 Subject: [PATCH 0396/1497] switch write to info --- src/hhd/controller/physical/rgb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 637c82a5..657df94e 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -12,7 +12,7 @@ def write_sysfs(dir: str, fn: str, val: Any): - logger.warning(f"Writing `{str(val)}` to \n{os.path.join(dir, fn)}") + logger.info(f"Writing `{str(val)}` to \n{os.path.join(dir, fn)}") with open(os.path.join(dir, fn), "w") as f: f.write(str(val)) From c2323b61ca2c124e9b400bff9e9cf4beba45de5d Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 19:28:04 +0100 Subject: [PATCH 0397/1497] add gyro axis config to generic driver --- src/hhd/device/generic/__init__.py | 17 +++++++++++------ src/hhd/device/generic/base.py | 5 ++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index ec452c12..bb9ac42b 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -1,18 +1,19 @@ from threading import Event, Thread from typing import Any, Sequence +from hhd.controller.physical.rgb import is_led_supported from hhd.plugins import ( Config, Context, Emitter, HHDPlugin, - load_relative_yaml, + get_gyro_config, get_outputs_config, + load_relative_yaml, ) from hhd.plugins.settings import HHDSettings -from hhd.controller.physical.rgb import is_led_supported -from .const import CONFS, get_default_config +from .const import CONFS, DEFAULT_MAPPINGS, get_default_config class GenericControllersPlugin(HHDPlugin): @@ -41,15 +42,19 @@ def open( self.prev = None def settings(self) -> HHDSettings: - base = {"controllers": {"aokzoe": load_relative_yaml("controllers.yml")}} - base["controllers"]["aokzoe"]["children"]["controller_mode"].update( + base = {"controllers": {"handheld": load_relative_yaml("controllers.yml")}} + base["controllers"]["handheld"]["children"]["controller_mode"].update( get_outputs_config(can_disable=False, has_leds=is_led_supported()) ) + base["controllers"]["ayaneo"]["children"]["gyro"] = get_gyro_config( + self.dconf.get("mapping", DEFAULT_MAPPINGS) + ) + return base def update(self, conf: Config): - new_conf = conf["controllers.aokzoe"] + new_conf = conf["controllers.handheld"] if new_conf == self.prev: return if self.prev is None: diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index c2b0e1fa..d9877347 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -12,7 +12,7 @@ from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.controller.physical.rgb import LedDevice from hhd.controller.virtual.uinput import UInputDevice -from hhd.plugins import Config, Context, Emitter, get_outputs +from hhd.plugins import Config, Context, Emitter, get_outputs, get_gyro_state from .const import ( BTN_MAPPINGS, @@ -101,8 +101,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # Imu d_imu = CombinedImu( conf["imu_hz"].to(int), - dconf.get("mapping", DEFAULT_MAPPINGS), - # gyro_scale="0.000266", #TODO: Find what this affects + get_gyro_state(conf["gyro"], dconf.get("mapping", DEFAULT_MAPPINGS)), ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) From 750e3e0a3a8c09ab52a7217c9d7b117db1899bd8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 19:30:04 +0100 Subject: [PATCH 0398/1497] rename gyro axis setting --- src/hhd/device/generic/__init__.py | 2 +- src/hhd/device/generic/base.py | 2 +- src/hhd/device/generic/controllers.yml | 2 ++ src/hhd/plugins/gyro.yml | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index bb9ac42b..2db46aa7 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -47,7 +47,7 @@ def settings(self) -> HHDSettings: get_outputs_config(can_disable=False, has_leds=is_led_supported()) ) - base["controllers"]["ayaneo"]["children"]["gyro"] = get_gyro_config( + base["controllers"]["ayaneo"]["children"]["imu_axis"] = get_gyro_config( self.dconf.get("mapping", DEFAULT_MAPPINGS) ) diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index d9877347..06c1a7db 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -101,7 +101,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # Imu d_imu = CombinedImu( conf["imu_hz"].to(int), - get_gyro_state(conf["gyro"], dconf.get("mapping", DEFAULT_MAPPINGS)), + get_gyro_state(conf["imu_axis"], dconf.get("mapping", DEFAULT_MAPPINGS)), ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) diff --git a/src/hhd/device/generic/controllers.yml b/src/hhd/device/generic/controllers.yml index b3d22967..559219e8 100644 --- a/src/hhd/device/generic/controllers.yml +++ b/src/hhd/device/generic/controllers.yml @@ -30,6 +30,8 @@ children: Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. options: [50, 100, 200, 400, 800, 1600] default: 400 + + imu_axis: nintendo_mode: type: bool diff --git a/src/hhd/plugins/gyro.yml b/src/hhd/plugins/gyro.yml index 22335ed9..06ffc5a0 100644 --- a/src/hhd/plugins/gyro.yml +++ b/src/hhd/plugins/gyro.yml @@ -1,5 +1,5 @@ type: mode -title: Gyro Axis +title: Motion Axis default: default modes: From dc4b97a3735ed444a01372c737141f28f34bbd90 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 19:31:44 +0100 Subject: [PATCH 0399/1497] backport to gpd --- src/hhd/device/gpd/win/__init__.py | 2 +- src/hhd/device/gpd/win/base.py | 4 +++- src/hhd/device/gpd/win/controllers.yml | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/gpd/win/__init__.py b/src/hhd/device/gpd/win/__init__.py index c6fd0249..2cd7572b 100644 --- a/src/hhd/device/gpd/win/__init__.py +++ b/src/hhd/device/gpd/win/__init__.py @@ -85,7 +85,7 @@ def settings(self) -> HHDSettings: else: del base["controllers"]["gpd_win"]["children"]["touchpad"] - base["controllers"]["gpd_win"]["children"]["gyro"] = get_gyro_config( + base["controllers"]["gpd_win"]["children"]["imu_axis"] = get_gyro_config( self.dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS) ) return base diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 7c6d5e3d..546b7cdc 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -206,7 +206,9 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d # Imu d_imu = CombinedImu( conf["imu_hz"].to(int), - get_gyro_state(conf["gyro"], dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS)), + get_gyro_state( + conf["imu_axis"], dconf.get("mapping", GPD_WIN_DEFAULT_MAPPINGS) + ), ) d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index ddaf535f..8ca8a873 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -31,6 +31,8 @@ children: options: [50, 100, 200, 400, 800, 1600] default: 400 + imu_axis: + touchpad: nintendo_mode: From 0e6a95c27529eaf98ae986e57200d92e737870ff Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 19:43:49 +0100 Subject: [PATCH 0400/1497] fix typo --- src/hhd/device/generic/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index 2db46aa7..0cca90ac 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -47,7 +47,7 @@ def settings(self) -> HHDSettings: get_outputs_config(can_disable=False, has_leds=is_led_supported()) ) - base["controllers"]["ayaneo"]["children"]["imu_axis"] = get_gyro_config( + base["controllers"]["handheld"]["children"]["imu_axis"] = get_gyro_config( self.dconf.get("mapping", DEFAULT_MAPPINGS) ) From cf6cb28bd3e356f9fd7c985bf71fab91feeab00b Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 19:51:09 +0100 Subject: [PATCH 0401/1497] update readme and bump version --- pyproject.toml | 2 +- readme.md | 75 ++++++++++++++++++++++++-------------------------- 2 files changed, 37 insertions(+), 40 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b59363b7..ae2bdeed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.2.1" +version = "1.3.1" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/readme.md b/readme.md index 678454b7..420fe56e 100644 --- a/readme.md +++ b/readme.md @@ -53,22 +53,21 @@ Touchpad, and Gyro support. - AOKZOE - A1 - A1 Pro (experimental) - -In addition, Handheld Daemon will attempt to work on Ayaneo and GPD Win devices -that have not been verified to work (controller emulation will be off on first start). +- Ayn + - Loki Max +- Onexplayer + - Mini Pro + +In addition, Handheld Daemon will attempt to work on Ayaneo, Ayn, Onexplayer, and +GPD Win devices that have not been verified to work +(controller emulation will be off on first start). If everything works and you fix the gyro axis for your device, open an issue so that your device can be added to the supported list. -The touchpad will not work without being on the supported list on the current version. - -RGB support is not yet available for GPD Win 4 and Ayaneo devices, but is -being investigated. -The RGB settings of Ayaneo require direct writes to the Embedded Computer, which -is considered dangerous. -GPD Win 4 does not support RGB remapping on Windows, but there is a chance it -is possible. +The touchpad will not work for devices not on the supported list. -Ayaneo devices do not currently have support for holding the power button to open -the steam menu settings. +RGB support is not yet available for GPD Win 4, it is currently being investigated. +Some devices do not support holding the power button to open steam settings on +the current version, this will be fixed in a future release. ## Installation Instructions You can install the latest stable version of `hhd` from PyPi (recommended), AUR, @@ -77,6 +76,8 @@ The easiest way to use Handheld Daemon is to install Bazzite which comes pre-installed with the latest version and all required kernel fixes for supported devices, see [here](#bazzite). Nobara also packages hhd and it will become the default for supported devices soon. +However, it only packages fixes for the Ally and Legion Go at the time of this +writing. > [!WARNING] > There is a bug that breaks how Dualsense controllers are parsed in Steam in various @@ -199,23 +200,11 @@ rm -r ~/.config/hhd ### After Install Instructions #### Extra steps for ROG Ally -Using the gyroscope on the Ally requires a kernel that is patched to enable IMU -support. -See [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes) for IMU the -patches themselves (IMU 0001-0005) and Fedora kernel binaries -(install with `sudo rmp -i .rpm`) -and [rog-ally-gaming/linux-chimeraos](https://github.com/rog-ally-gaming/linux-chimeraos) -for Arch distribution binaries (install with `sudo pacman -U .tar.xz`; except 6.1 kernels). - -If you compile your own kernel, your kernel config should also enable the -modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and -`High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. -Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. - Without an up-to-date `asus-wmi` kernel driver the usb device of the controller does not wake up after sleep so Handheld Daemon stops working. This patch is included with Linux kernel 6.7. +See [here](#gyro) for the required kernel patches. Without the patch series for the IMU (where patches 0001, and 0002 are included in kernel 6.8), the gyro will not work and if the `Motion` option is enabled, LEDs will not work either, so that should be turned off. @@ -223,11 +212,6 @@ LEDs will not work either, so that should be turned off. You can hold the ROG Crate button to switch to the ROG Ally's Mouse mode to turn the right stick into a mouse. -#### Extra steps for Ayaneo -Ayaneo uses the same gyroscope with the same configuration as the ally, so -reference the Ally's IMU steps to enable gyroscope support. -Ayaneo support is still in the preliminary stages. - #### Extra steps GPD Win Devices In order for the back buttons in GPD Win Devices to work, you need to map the back buttons to Left: Printscreen, Right: Pause using Windows. @@ -242,18 +226,31 @@ Left-key: PrtSc + 0ms + NC + 0ms + NC + 0ms + NC Right-key: Pausc + 0ms + NC + 0ms + NC + 0ms + NC ``` -To use the gyro, you will need a [dkms package](https://github.com/hhd-dev/bmi260) -for the Bosch 260 IMU Driver. -Follow the instructions in that repository to install it. - -In addition, for devices other than the Win Mini, your kernel config should also +#### Extra steps for Ayaneo/Ayn/Onexplayer +See [here](#gyro) for the required kernel patches. +For led support in Ayaneo, you will need the +[ayaneo-platform](https://github.com/ShadowBlip/ayaneo-platform) +driver, and for Ayn, the [ayn-platform](https://github.com/ShadowBlip/ayn-platform). +Provided these drivers are installed and are supported by your device, +LED support will be enabled by default. + +The paddles of the Ayn Loki Max are not remappable as far as we know. + +#### Gyro Kernel Drivers +Which kernel patch is required will depend on your device's bosch module. +For the Bosch 260 IMU, you will need the +[bmi260-dkms](https://github.com/hhd-dev/bmi260) driver. +For the Bosch 160 IMU and certain devices, you will need the following bmi160 +[kernel patch](https://github.com/pastaq/bmi160-aya-neo/blob/main/bmi160_ayaneo.patch). +Ayaneo Air Plus and Ally use the Bosch 323 and need the patch series from +this repository: [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes). +The Legion Go does not need kernel patches. + +In addition, for most devices, your kernel config should also enable the modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and `High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. -There is a sporadic bug currently where gyro will stop working after suspend, -just switch between mouse mode and not to fix while a fix is being developed. - #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara From 06675ea6b79b919409c5d0683b20fcbffe30932f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 20:40:29 +0100 Subject: [PATCH 0402/1497] add function for defining states in a cleaner way --- src/hhd/device/generic/const.py | 7 ++++- src/hhd/plugins/__init__.py | 3 +- src/hhd/plugins/inputs.py | 49 ++++++++++++++++++++++++++++++++- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 0fb4bdcb..92c134e4 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -1,5 +1,6 @@ from hhd.controller import Axis, Button, Configuration from hhd.controller.physical.evdev import B, to_map +from hhd.plugins import gen_gyro_state DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "accel_x": ("accel_z", "accel", 1, 3), @@ -82,7 +83,11 @@ # Onexplayer "ONEXPLAYER Mini Pro": {"name": "ONEXPLAYER Mini Pro", "hrtimer": True}, # Ayn - "Loki Max": {"name": "Loki Max", "hrtimer": True}, + "Loki Max": { + "name": "Loki Max", + "hrtimer": True, + "mappings": gen_gyro_state("x", False, "y", True, "z", False), + }, # Ayaneo "AIR Plus": { "name": "AYANEO AIR Plus", diff --git a/src/hhd/plugins/__init__.py b/src/hhd/plugins/__init__.py index bf107303..f5021984 100644 --- a/src/hhd/plugins/__init__.py +++ b/src/hhd/plugins/__init__.py @@ -3,7 +3,7 @@ from .settings import HHDSettings from .utils import get_relative_fn, load_relative_yaml from .outputs import get_outputs_config, get_outputs -from .inputs import get_touchpad_config, get_gyro_config, get_gyro_state +from .inputs import get_touchpad_config, get_gyro_config, get_gyro_state, gen_gyro_state __all__ = [ @@ -21,4 +21,5 @@ "get_touchpad_config", "get_gyro_config", "get_gyro_state", + "gen_gyro_state", ] diff --git a/src/hhd/plugins/inputs.py b/src/hhd/plugins/inputs.py index 3d96620f..3ad478e7 100644 --- a/src/hhd/plugins/inputs.py +++ b/src/hhd/plugins/inputs.py @@ -1,4 +1,4 @@ -from typing import cast +from typing import cast, Literal from hhd.controller import Axis @@ -111,3 +111,50 @@ def get_gyro_state( None, ), } + + +AxChoice = Literal["x", "y", "z"] + + +def gen_gyro_state( + x: AxChoice, inv_x: bool, y: AxChoice, inv_y: bool, z: AxChoice, inv_z: bool +): + return { + "timestamp": ("gyro_ts", None, 1, None), + "accel_x": ( + cast(Axis, f"accel_{x}"), + "accel", + -1 if inv_x else 1, + 3, + ), + "accel_y": ( + cast(Axis, f"accel_{y}"), + "accel", + -1 if inv_y else 1, + 3, + ), + "accel_z": ( + cast(Axis, f"accel_{z}"), + "accel", + -1 if inv_z else 1, + 3, + ), + "anglvel_x": ( + cast(Axis, f"gyro_{x}"), + "anglvel", + -1 if inv_x else 1, + None, + ), + "anglvel_y": ( + cast(Axis, f"gyro_{y}"), + "anglvel", + -1 if inv_y else 1, + None, + ), + "anglvel_z": ( + cast(Axis, f"gyro_{z}"), + "anglvel", + -1 if inv_z else 1, + None, + ), + } From a1d309dbd2c4b6d0ac14f0e44968760495ca7070 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 21:09:03 +0100 Subject: [PATCH 0403/1497] update readme with gyro contribution and update loki gyro config --- readme.md | 45 ++++++++++++++++++++++++++++++--- src/hhd/device/generic/const.py | 2 +- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 420fe56e..09c67872 100644 --- a/readme.md +++ b/readme.md @@ -251,6 +251,16 @@ enable the modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and `High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. +#### Broken Steam Gyro Calibration +Steam gyro calibration does not corrently work due to an issue with the accelerometer +scale (bottom bar). +Since the accelerometer is not currently used for anything this is not a high +priority fix. +The gyro will work fine in games. + +If you get drift, you can turn on `Auto-Calibrate Gyro Drift when Stationary` and +then move the top bar (gyro) right until it covers the noise. + #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara @@ -519,6 +529,33 @@ ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="*Wireless Controller ``` ## Contributing +### Finding the correct axis for your device +To figure the correct axis from your device, go to desktop and open the steam +calibration settings. +Then, go to https://hhd.dev , switch `Motion Axis` to `Override` and tweak only +the axis (without invert) of your device until they match the glyphs in steam. + +> [!WARNING] +> Do not try to interpret what each axis means. Just change them randomly until +> the glyphs line up with how you move your controller. +> If you set multiple axis to a single one (such as X to Y, and Y to Y), +> the X to Y option will be ignored. + +Then, jump in a first person game and turn on `Gyro to Mouse` or `Camera`. +For `Gyro to Mouse`, use `Gyro to Mouse fix` if you get issues with the camera +jumping around. +By default, rotating your device like a steering wheel should turn left to right, +and rotating it to face down or up should look up or down. +Fix the invert settings of the axis so that it is intuitive. +Finally, switch the setting `Gyro Turning Axis` from `Yaw` (rotate like a steering +wheel) to `Roll` (turn left to right), and fix the remaining axis inversion. + +You can now either take a picture of your screen or translate the settings into +text (e.g., x is k, y is l inverted, z is j) and open an issue. +The override setting also displays the make and model of your device, which +are required to add the mappings to Handheld Daemon. + +### Creating a Local Repo version Either follow `Automatic Install` or `Manual Local Install` to install the base rules. Then, clone, optionally install the userspace rules, and run. ```bash @@ -529,14 +566,14 @@ python -m venv venv source venv/bin/activate pip install -e . -# Install udev rules to allow running in userspace -# optional; great for debugging +# Install udev rules to allow running without sudo (optional) +# but great for debugging (not all devices will run properly, the rules need to be expanded) sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd-user.rules -o /etc/udev/rules.d/83-hhd-user.rules # Modprobe uhid to avoid rw errors sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/modules-load.d/hhd-user.conf -o /etc/modules-load.d/hhd-user.conf - # You can now run hhd in userspace! hhd -# Add user when running with sudo + +# Use the following to run with sudo sudo hhd --user $(whoami) ``` diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 92c134e4..e47d2a2c 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -86,7 +86,7 @@ "Loki Max": { "name": "Loki Max", "hrtimer": True, - "mappings": gen_gyro_state("x", False, "y", True, "z", False), + "mappings": gen_gyro_state("x", False, "y", False, "z", False), }, # Ayaneo "AIR Plus": { From b3747c249b2003358696990e24814a429b1c9bbc Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 21:24:46 +0100 Subject: [PATCH 0404/1497] add section names as a response --- src/hhd/http/api.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 501ba64d..46aefe0a 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -256,7 +256,16 @@ def v1_endpoint(self, content: Any | None): self.cond.wait() self.wfile.write(json.dumps(self.conf.conf).encode()) case "version": - self.send_json({"version": 1}) + self.send_json({"version": 2}) + case "sections": + self.send_json( + { + "system": "System", + "tdp": "TDP", + "controller": "Controller", + "hhd": "About", + } + ) case other: self.send_not_found(f"Command '{other}' not supported.") From 6a2c574347639bbd0e7c6d4b8f1b762bc048ea74 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 21:39:38 +0100 Subject: [PATCH 0405/1497] update readme --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 09c67872..9a71be82 100644 --- a/readme.md +++ b/readme.md @@ -538,8 +538,8 @@ the axis (without invert) of your device until they match the glyphs in steam. > [!WARNING] > Do not try to interpret what each axis means. Just change them randomly until > the glyphs line up with how you move your controller. -> If you set multiple axis to a single one (such as X to Y, and Y to Y), -> the X to Y option will be ignored. +> If you set multiple axis to a single one (e.g., X to Y, and Y to Y), +> the first option (e.g., X to Y) option will be ignored. Then, jump in a first person game and turn on `Gyro to Mouse` or `Camera`. For `Gyro to Mouse`, use `Gyro to Mouse fix` if you get issues with the camera From d6679c64ec82dcdd778a4165d35666910fb29545 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 21:53:10 +0100 Subject: [PATCH 0406/1497] tweak loki config --- src/hhd/device/generic/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index e47d2a2c..ba3c4c20 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -86,7 +86,7 @@ "Loki Max": { "name": "Loki Max", "hrtimer": True, - "mappings": gen_gyro_state("x", False, "y", False, "z", False), + "mappings": gen_gyro_state("x", False, "z", True, "y", True), }, # Ayaneo "AIR Plus": { From beeed12ce127732cb1a5ea01093dc797b88c9fd8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 22:08:35 +0100 Subject: [PATCH 0407/1497] fix typo --- src/hhd/device/generic/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index ba3c4c20..2b831e90 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -86,7 +86,7 @@ "Loki Max": { "name": "Loki Max", "hrtimer": True, - "mappings": gen_gyro_state("x", False, "z", True, "y", True), + "mapping": gen_gyro_state("x", False, "z", True, "y", True), }, # Ayaneo "AIR Plus": { From 2b5609b624b56cb226e52c4aea972d179d654f01 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 22:17:54 +0100 Subject: [PATCH 0408/1497] update bazzite section --- readme.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 9a71be82..a34d9f92 100644 --- a/readme.md +++ b/readme.md @@ -198,7 +198,7 @@ sudo rm /etc/systemd/system/hhd_local@.service rm -r ~/.config/hhd ``` -### After Install Instructions +### After Install Instructions #### Extra steps for ROG Ally Without an up-to-date `asus-wmi` kernel driver the usb device of the controller does not wake up after sleep so Handheld Daemon stops working. @@ -295,11 +295,11 @@ sudo systemctl disable --now handycon.service sudo dnf remove handygccs-git # (verify ?) ``` -### Bazzite +### Bazzite Handheld Daemon comes pre-installed on Bazzite and updates along-side the system. The latest version of Handheld Daemon becomes available at the latest the next day after release, and can be managed through the Bazzite updater. -In addition, Bazzite contains all the required patches for the Handheld Daemon +In addition, Bazzite contains all the required kernel patches for the Handheld Daemon supported devices, so it is the recommended distro to use Handheld Daemon with. After install, you can use `ujust` to install Decky and the Handheld Daemon Decky @@ -311,6 +311,9 @@ Essentially, a new service file needs to be written for Bazzite that contains th correct home path (`/var/home`) and then you can disable the built-in version service and use the new one instead. +See [supported devices](#supported-devices) to check the status of your device and +[after install](#issues) for specific device quirks. + ### ❄️ NixOS Ensure your `nixpkgs` is on the `unstable` channel (as of Feb 2024): From 99cbd8aae80fa9f76fe4bce1ade51971dfa0bc54 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 22:31:55 +0100 Subject: [PATCH 0409/1497] add disabled as default for generic driver for unsupported devices --- src/hhd/device/generic/__init__.py | 6 +++++- src/hhd/device/generic/base.py | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/generic/__init__.py b/src/hhd/device/generic/__init__.py index 0cca90ac..c2d9fa77 100644 --- a/src/hhd/device/generic/__init__.py +++ b/src/hhd/device/generic/__init__.py @@ -44,7 +44,11 @@ def open( def settings(self) -> HHDSettings: base = {"controllers": {"handheld": load_relative_yaml("controllers.yml")}} base["controllers"]["handheld"]["children"]["controller_mode"].update( - get_outputs_config(can_disable=False, has_leds=is_led_supported()) + get_outputs_config( + can_disable=True, + has_leds=is_led_supported(), + start_disabled=self.dconf.get("untested", False), + ) ) base["controllers"]["handheld"]["children"]["imu_axis"] = get_gyro_config( diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index 06c1a7db..7d04c906 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -44,6 +44,10 @@ def plugin_run( ): first = True while not should_exit.is_set(): + if conf["controller_mode"].to(str) == "disabled": + time.sleep(ERROR_DELAY) + continue + found_gamepad = False try: for d in evdev.list_devices(): From 52476d79c747e6241db202ae1a92632b7707d263 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 22:41:16 +0100 Subject: [PATCH 0410/1497] add disabled option as default for non-supported controllers --- pyproject.toml | 2 +- src/hhd/device/generic/base.py | 4 ++-- src/hhd/device/gpd/win/base.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ae2bdeed..d8b0e335 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.1" +version = "1.3.2" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index 7d04c906..bb79c911 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -44,7 +44,7 @@ def plugin_run( ): first = True while not should_exit.is_set(): - if conf["controller_mode"].to(str) == "disabled": + if conf["controller_mode.mode"].to(str) == "disabled": time.sleep(ERROR_DELAY) continue @@ -60,9 +60,9 @@ def plugin_run( found_gamepad = True if not found_gamepad: - time.sleep(ERROR_DELAY) if first: logger.info("Controller not found. Waiting...") + time.sleep(ERROR_DELAY) first = False continue diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 546b7cdc..73055e2c 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -154,7 +154,7 @@ def plugin_run( ): first = True while not should_exit.is_set(): - if conf["controller_mode"].to(str) == "disabled": + if conf["controller_mode.mode"].to(str) == "disabled": time.sleep(ERROR_DELAY) continue @@ -170,9 +170,9 @@ def plugin_run( found_gamepad = True if not found_gamepad: - time.sleep(ERROR_DELAY) if first: logger.info("Controller in Mouse mode. Waiting...") + time.sleep(ERROR_DELAY) first = False continue From 8fad061c8f7bafbd08f175e4709887fd76a05987 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 23:18:18 +0100 Subject: [PATCH 0411/1497] add checks for led_mode --- src/hhd/controller/physical/rgb.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 657df94e..108b0aaa 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -46,12 +46,14 @@ def chassis_led_set(ev: RgbLedEvent): r_green = max(min(ev["green"], 255), 0) r_blue = max(min(ev["blue"], 255), 0) + # Mode only exists on ayn devices try: - # Try to write to the old driver path - # TODO: Remove - write_sysfs(LED_PATH, "device/led_mode", r_mode) + if os.path.exists(os.path.join(LED_PATH, "device/led_mode")): + write_sysfs(LED_PATH, "device/led_mode", r_mode) except Exception: - write_sysfs(LED_PATH, "led_mode", r_mode) + if os.path.exists(os.path.join(LED_PATH, "led_mode")): + write_sysfs(LED_PATH, "led_mode", r_mode) + write_sysfs(LED_PATH, "brightness", r_brightness) write_sysfs(LED_PATH, "multi_intensity", f"{r_red} {r_green} {r_blue}") From 711c1f1f85544775844e3e946d64d58ec71f1fe9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 23:22:53 +0100 Subject: [PATCH 0412/1497] update gpd win 4 limitations --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index a34d9f92..dd380aef 100644 --- a/readme.md +++ b/readme.md @@ -66,6 +66,8 @@ so that your device can be added to the supported list. The touchpad will not work for devices not on the supported list. RGB support is not yet available for GPD Win 4, it is currently being investigated. +In addition, GPD Win 4's touch point acts like a mouse, so it unfortunately can not +be used for steam input. Some devices do not support holding the power button to open steam settings on the current version, this will be fixed in a future release. From 0ff882e1246a8fb9b824e7b1cc57ea8c5e5c8aa8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 4 Feb 2024 23:23:00 +0100 Subject: [PATCH 0413/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d8b0e335..3ca0730a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.2" +version = "1.3.3" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 6a35d208364236d562fdacc2bb6e3076a290fb2d Mon Sep 17 00:00:00 2001 From: honjow Date: Mon, 5 Feb 2024 13:43:08 +0800 Subject: [PATCH 0414/1497] add ayaneo air --- src/hhd/device/generic/const.py | 8 +++++++- src/hhd/plugins/powerbutton/const.py | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 2b831e90..252900a4 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -61,13 +61,17 @@ B("KEY_F15"): "extra_l1", # LC Button B("KEY_F16"): "extra_r1", # RC Button # NEXT mappings - B("KEY_F12"): "mode", # Big Button [[96, 105, 133], [88, 97, 125]] + B("KEY_F12"): "mode", # Big Button NEXT:[[96, 105, 133], [88, 97, 125]] ; Air [88, 97, 125] # B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] # 2021 Mappings B("KEY_DELETE"): "share", # TM Button [97,100,111] B("KEY_ESC"): "extra_l1", # ESC Button [1] B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button + # Air mappings + B("KEY_F11"): "extra_l1", # LC Button [87, 97, 125] F11 + LCTRL + LMETA + B("KEY_F10"): "extra_l2", # Rc Button [68, 97, 125] F10 + LCTRL + LMETA + } AYA_DEFAULT_CONF = { @@ -98,6 +102,8 @@ "AYANEO 2S": {"name": "AYANEO S2", **AYA_DEFAULT_CONF}, "GEEK": {"name": "AYANEO GEEK", **AYA_DEFAULT_CONF}, "GEEK 1S": {"name": "AYANEO GEEK 1S", **AYA_DEFAULT_CONF}, + "AIR": {"name": "AYANEO AIR", **AYA_DEFAULT_CONF}, + "AIR Pro": {"name": "AYANEO AIR Pro", **AYA_DEFAULT_CONF}, } diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 1bdcfea9..68805ee7 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -28,6 +28,8 @@ class PowerButtonConfig(NamedTuple): PBC("AYANEO GEEK", "GEEK", type="hold_emitted"), PBC("AYANEO 2S", "AYANEO 2S", type="hold_emitted"), PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), + PBC("AYANEO AIR", "AIR", type="hold_emitted"), + PBC("AYANEO AIR Pro", "AIR Pro", type="hold_emitted"), PBC( "Steam Deck LCD", "Jupiter", From 56941fe31afe74150c3e5229c99e7ef74582dada Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 16:43:48 +0100 Subject: [PATCH 0415/1497] fix ayaneo leds --- pyproject.toml | 2 +- src/hhd/controller/physical/rgb.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3ca0730a..364e16d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.3" +version = "1.3.4" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 108b0aaa..13f6d192 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -48,11 +48,13 @@ def chassis_led_set(ev: RgbLedEvent): # Mode only exists on ayn devices try: - if os.path.exists(os.path.join(LED_PATH, "device/led_mode")): - write_sysfs(LED_PATH, "device/led_mode", r_mode) + write_sysfs(LED_PATH, "led_mode", r_mode) except Exception: - if os.path.exists(os.path.join(LED_PATH, "led_mode")): - write_sysfs(LED_PATH, "led_mode", r_mode) + logger.info("Could not write led_mode (not applicable for Ayaneo, only Ayn).") + try: + write_sysfs(LED_PATH, "device/led_mode", r_mode) + except Exception: + logger.info("Could not write led_mode to secondary path.") write_sysfs(LED_PATH, "brightness", r_brightness) write_sysfs(LED_PATH, "multi_intensity", f"{r_red} {r_green} {r_blue}") From ef408268b8203232a715f79b175fb59aa271acc8 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 16:44:05 +0100 Subject: [PATCH 0416/1497] add touchpad input to after install --- readme.md | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index dd380aef..d808c2e1 100644 --- a/readme.md +++ b/readme.md @@ -263,6 +263,25 @@ The gyro will work fine in games. If you get drift, you can turn on `Auto-Calibrate Gyro Drift when Stationary` and then move the top bar (gyro) right until it covers the noise. +#### High Touchpad Steam Input +By default, the Dualsense kernel driver exposes the Dualsense trackpad as a normal +trackpad. +This means that if you go to use it as steam input, you still get the normal +trackpad input. +This leads to double input. + +You can either disable it with the package `ds-inhibit` which detects if steam +is running and mutes it (still works in desktop) or with the following udev rule +(does not work in desktop). +Place it under `/etc/udev/rules.d/99-hhd-playstation-touchpad.rules` +```bash +# Disables all playstation touchpads from use as touchpads. +ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="*Wireless Controller Touchpad", ENV{LIBINPUT_IGNORE_DEVICE}="1" +``` + +The package `ds-inhibit` is available in AUR, packaged for Nobara, and enabled +by default in Bazzite. + #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara @@ -524,15 +543,6 @@ There are certain gamescope/distro issues that cause this and we are unsure of the cause at this moment. ChimeraOS 44 and certain versions of Nobara 38 and 39 have this issue. -### Disabling Dualsense touchpad -The Dualsense touchpad may interfere with games or steam input. -You can disable it with the following udev rule. -Place it under `/etc/udev/rules.d/99-hhd-playstation-touchpad.rules` -```bash -# Disables all playstation touchpads from use as touchpads. -ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="*Wireless Controller Touchpad", ENV{LIBINPUT_IGNORE_DEVICE}="1" -``` - ## Contributing ### Finding the correct axis for your device To figure the correct axis from your device, go to desktop and open the steam From e901e73c352c5293cddcfcbfa3d754690ce17cc2 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 16:57:38 +0100 Subject: [PATCH 0417/1497] add extra ayaneo devices --- src/hhd/device/generic/const.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 252900a4..f6326a9d 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -61,7 +61,9 @@ B("KEY_F15"): "extra_l1", # LC Button B("KEY_F16"): "extra_r1", # RC Button # NEXT mappings - B("KEY_F12"): "mode", # Big Button NEXT:[[96, 105, 133], [88, 97, 125]] ; Air [88, 97, 125] + B( + "KEY_F12" + ): "mode", # Big Button NEXT:[[96, 105, 133], [88, 97, 125]] ; Air [88, 97, 125] # B("KEY_D"): "share", # Small Button [[40, 133], [32, 125]] # 2021 Mappings B("KEY_DELETE"): "share", # TM Button [97,100,111] @@ -71,7 +73,6 @@ # Air mappings B("KEY_F11"): "extra_l1", # LC Button [87, 97, 125] F11 + LCTRL + LMETA B("KEY_F10"): "extra_l2", # Rc Button [68, 97, 125] F10 + LCTRL + LMETA - } AYA_DEFAULT_CONF = { @@ -98,6 +99,8 @@ **AYA_DEFAULT_CONF, "mapping": AYANEO_AIR_PLUS_MAPPINGS, }, + "AIR 1S": {"name": "AIR 1S", **AYA_DEFAULT_CONF}, + "AIR 1S Limited": {"name": "AIR 1S Limited", **AYA_DEFAULT_CONF}, "AYANEO 2": {"name": "AYANEO 2", **AYA_DEFAULT_CONF}, "AYANEO 2S": {"name": "AYANEO S2", **AYA_DEFAULT_CONF}, "GEEK": {"name": "AYANEO GEEK", **AYA_DEFAULT_CONF}, From 8a1e8e008b3313362fdc6146734186ec22b7263b Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 17:17:52 +0100 Subject: [PATCH 0418/1497] add hhd.contrib to bin, fix uninstall not removing hwdb --- install.sh | 1 + pyproject.toml | 2 +- src/hhd/contrib/__init__.py | 3 ++ src/hhd/contrib/__main__.py | 99 +------------------------------------ src/hhd/contrib/dev.py | 99 +++++++++++++++++++++++++++++++++++++ uninstall.sh | 2 + 6 files changed, 107 insertions(+), 99 deletions(-) create mode 100644 src/hhd/contrib/dev.py diff --git a/install.sh b/install.sh index a57d1a56..e0617eed 100755 --- a/install.sh +++ b/install.sh @@ -23,6 +23,7 @@ sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/s # Add hhd to user path mkdir -p ~/.local/bin ln -s ~/.local/share/hhd/venv/bin/hhd ~/.local/bin/hhd +ln -s ~/.local/share/hhd/venv/bin/hhd.contrib ~/.local/bin/hhd.contrib # Start service and reboot sudo systemctl enable hhd_local@$(whoami) diff --git a/pyproject.toml b/pyproject.toml index 364e16d4..9ac579f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ [project.entry-points."console_scripts"] hhd = "hhd.__main__:main" -"hhd.legion_go" = "hhd.device.legion_go:main" +"hhd.contrib" = "hhd.contrib:main" [project.entry-points."hhd.plugins"] legion_go = "hhd.device.legion_go:autodetect" diff --git a/src/hhd/contrib/__init__.py b/src/hhd/contrib/__init__.py index e69de29b..e5d6edd5 100644 --- a/src/hhd/contrib/__init__.py +++ b/src/hhd/contrib/__init__.py @@ -0,0 +1,3 @@ +from .dev import main + +__all__ = ["main"] diff --git a/src/hhd/contrib/__main__.py b/src/hhd/contrib/__main__.py index 27a05c64..82af6c5f 100644 --- a/src/hhd/contrib/__main__.py +++ b/src/hhd/contrib/__main__.py @@ -1,101 +1,4 @@ -import argparse - - -def evdev(): - from evdev import list_devices, InputDevice - from time import sleep - - print("Available Devices with the Current Permissions") - avail = list_devices() - for i, d in enumerate(avail): - print(f"{i + 1}:", InputDevice(d)) - - print() - sel = None - while sel not in avail: - sel = input("Enter device path (/dev/input/event# or #): ") - try: - sel = avail[int(sel) - 1] - except Exception as e: - pass - - print() - d = InputDevice(sel) - print(f"Selected device `{d}`.") - print("Capabilities") - print(d.capabilities(verbose=True)) - - try: - print("Attempting to grab device.") - d.grab() - except Exception as e: - print("Could not grab device, error:") - print(e) - print() - - for ev in d.read_loop(): - print(ev) - sleep(0.001) - - -def hidraw(): - from hhd.controller.lib.hid import enumerate_unique, Device - from hhd.controller.lib.common import hexify - from time import sleep, time - - print("Available Devices with the Current Permissions") - avail = [] - for i, d in enumerate(enumerate_unique()): - avail.append(d["path"]) - print( - f"{i + 1}:", - f"{str(d['path'])} {hexify(d['vendor_id'])}:{hexify(d['product_id'])}:" - + f" Usage Page: 0x{hexify(d['usage_page'])} Usage: 0x{hexify(d['usage'])}" - + f" Names '{d['manufacturer_string']}': '{d['product_string']}'", - ) - - print() - sel = None - while sel not in avail: - sel = input("Enter device path (/dev/input/event# or #): ") - try: - sel = avail[int(sel) - 1] - except Exception: - sel = sel.encode() - - print() - d = Device(path=sel) - print(f"Selected device `{str(sel)}`.") - - start = time() - for i in range(100000000): - print(f"{i:6d}: {time() - start:7.4f}", d.read().hex()) - sleep(0.001) - - -def main(): - parser = argparse.ArgumentParser( - prog="HHD: Handheld Daemon contribution helper scripts", - description="Scripts to automate the capture of events, etc.", - ) - parser.add_argument( - "command", - nargs="+", - default=[], - help="Supported commands: `evdev`, `hidraw`", - ) - args = parser.parse_args() - - try: - match c := args.command[0]: - case "evdev": - evdev() - case "hidraw": - hidraw() - case _: - print(f"Command `{c}` not supported.") - except KeyboardInterrupt: - pass +from .dev import main if __name__ == "__main__": main() diff --git a/src/hhd/contrib/dev.py b/src/hhd/contrib/dev.py new file mode 100644 index 00000000..191cb774 --- /dev/null +++ b/src/hhd/contrib/dev.py @@ -0,0 +1,99 @@ +import argparse + + +def evdev(): + from evdev import list_devices, InputDevice + from time import sleep + + print("Available Devices with the Current Permissions") + avail = list_devices() + for i, d in enumerate(avail): + print(f"{i + 1}:", InputDevice(d)) + + print() + sel = None + while sel not in avail: + sel = input("Enter device path (/dev/input/event# or #): ") + try: + sel = avail[int(sel) - 1] + except Exception as e: + pass + + print() + d = InputDevice(sel) + print(f"Selected device `{d}`.") + print("Capabilities") + print(d.capabilities(verbose=True)) + + try: + print("Attempting to grab device.") + d.grab() + except Exception as e: + print("Could not grab device, error:") + print(e) + print() + + for ev in d.read_loop(): + print(ev) + sleep(0.001) + + +def hidraw(): + from hhd.controller.lib.hid import enumerate_unique, Device + from hhd.controller.lib.common import hexify + from time import sleep, time + + print("Available Devices with the Current Permissions") + avail = [] + for i, d in enumerate(enumerate_unique()): + avail.append(d["path"]) + print( + f"{i + 1}:", + f"{str(d['path'])} {hexify(d['vendor_id'])}:{hexify(d['product_id'])}:" + + f" Usage Page: 0x{hexify(d['usage_page'])} Usage: 0x{hexify(d['usage'])}" + + f" Names '{d['manufacturer_string']}': '{d['product_string']}'", + ) + + print() + sel = None + while sel not in avail: + sel = input("Enter device path (/dev/input/event# or #): ") + try: + sel = avail[int(sel) - 1] + except Exception: + sel = sel.encode() + + print() + d = Device(path=sel) + print(f"Selected device `{str(sel)}`.") + + start = time() + for i in range(100000000): + print(f"{i:6d}: {time() - start:7.4f}", d.read().hex()) + sleep(0.001) + + +def main(): + parser = argparse.ArgumentParser( + prog="HHD: Handheld Daemon contribution helper scripts", + description="Scripts to automate the capture of events, etc.", + ) + parser.add_argument( + "command", + nargs="+", + default=[], + help="Supported commands: `evdev`, `hidraw`", + ) + args = parser.parse_args() + + try: + match c := args.command[0]: + case "evdev": + evdev() + case "hidraw": + hidraw() + case _: + print(f"Command `{c}` not supported.") + except KeyboardInterrupt: + pass + diff --git a/uninstall.sh b/uninstall.sh index 0d6982cd..a930ecd5 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -15,9 +15,11 @@ rm -rf ~/.local/share/hhd # Remove bin link rm -f ~/.local/bin/hhd +rm -f ~/.local/bin/hhd.contrib # Remove /etc files sudo rm -f /etc/udev/rules.d/83-hhd.rules +sudo rm -f /etc/udev/hwdb.d/83-hhd.hwdb sudo rm -f /etc/systemd/system/hhd_local@.service # # Delete your configuration From c1da5dcdb5f4c9dd1053eee3c964ebe3659ab60a Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 17:28:51 +0100 Subject: [PATCH 0419/1497] switch to not using isa keyboard by default --- src/hhd/plugins/powerbutton/const.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 68805ee7..ef0acfa1 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -62,10 +62,7 @@ class PowerButtonConfig(NamedTuple): ), ] -DEFAULT_DEVICE: PowerButtonConfig = PBC( - "uknown", - "NA", -) +DEFAULT_DEVICE: PowerButtonConfig = PBC("uknown", "NA", "hold_emitted") # Legion go From c88447756bddf1c450e20cdcdd5f2469d0ef61ac Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 17:33:21 +0100 Subject: [PATCH 0420/1497] remove default hold emitted for now --- src/hhd/plugins/powerbutton/const.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index ef0acfa1..b7e95dc4 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -23,13 +23,15 @@ class PowerButtonConfig(NamedTuple): PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), - PBC("AYANEO AIR Plus", "AIR Plus", type="hold_emitted"), - PBC("AYANEO 2", "AYANEO 2", type="hold_emitted"), - PBC("AYANEO GEEK", "GEEK", type="hold_emitted"), - PBC("AYANEO 2S", "AYANEO 2S", type="hold_emitted"), - PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), - PBC("AYANEO AIR", "AIR", type="hold_emitted"), - PBC("AYANEO AIR Pro", "AIR Pro", type="hold_emitted"), + # TODO: Remove these when correct behavior is verified + # TODO: Fix isa handling to only work when only shift is active + # PBC("AYANEO AIR Plus", "AIR Plus", type="hold_emitted"), + # PBC("AYANEO 2", "AYANEO 2", type="hold_emitted"), + # PBC("AYANEO GEEK", "GEEK", type="hold_emitted"), + # PBC("AYANEO 2S", "AYANEO 2S", type="hold_emitted"), + # PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), + # PBC("AYANEO AIR", "AIR", type="hold_emitted"), + # PBC("AYANEO AIR Pro", "AIR Pro", type="hold_emitted"), PBC( "Steam Deck LCD", "Jupiter", From 5d1211bb3544ffe7d14afe36ab86180707341150 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 17:52:35 +0100 Subject: [PATCH 0421/1497] add playstation glyph themes to readme --- readme.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index d808c2e1..e8834bbf 100644 --- a/readme.md +++ b/readme.md @@ -282,6 +282,15 @@ ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{name}=="*Wireless Controller The package `ds-inhibit` is available in AUR, packaged for Nobara, and enabled by default in Bazzite. +#### Playstation Glyphs and Controller Image +If you do not want playstation glyphs in Steam, you can use https://github.com/frazse/PS5-to-Xbox-glyphs +as a CSS Loader plugin to switch them to Xbox. +Then, there are CSS plugins for the Legion Go and Ally controller images in +https://github.com/frazse/SBP-Legion-Go-Theme and +https://github.com/semakusut/SBP-ROG-Ally respectively. +If you are using Bazzite, you can also find a `ujust` version of the commands in +the Bazzite readme. + #### Missing Python Evdev In case you have installation issues, you might be missing the package `python-evdev`. You can either install it as part of your distribution (included by Nobara @@ -591,4 +600,4 @@ hhd # Use the following to run with sudo sudo hhd --user $(whoami) -``` +``` \ No newline at end of file From 5f6c0b45802c4caef769169c988c48e2b054a8f4 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 18:04:06 +0100 Subject: [PATCH 0422/1497] rewrite tt_toggle --- src/hhd/device/generic/base.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index bb79c911..cf367b98 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -66,15 +66,16 @@ def plugin_run( first = False continue - # copy from handygccs + # Use the oxp-platform driver if available if os.path.exists("/sys/devices/platform/oxp-platform/tt_toggle"): - command = f"echo 1 > /sys/devices/platform/oxp-platform/tt_toggle" - os.popen(command, "r", 1).read().strip() + try: + with open("/sys/devices/platform/oxp-platform/tt_toggle", "w") as f: + f.write("1") + except Exception: + logger.warn( + f"Turbo takeover failed. Ensure you have the latest oxp-sensors driver installed." + ) logger.info(f"Turbo button takeover enabled") - else: - logger.warn( - f"Turbo takeover failed. Ensure you have the latest oxp-sensors driver installed." - ) try: logger.info("Launching emulated controller.") From d53a0a1e3d1f551992b6369b6e48f9b6eacafb46 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 19:11:15 +0100 Subject: [PATCH 0423/1497] move tt message up --- src/hhd/device/generic/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index cf367b98..c7223577 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -71,11 +71,11 @@ def plugin_run( try: with open("/sys/devices/platform/oxp-platform/tt_toggle", "w") as f: f.write("1") + logger.info(f"Turbo button takeover enabled") except Exception: logger.warn( f"Turbo takeover failed. Ensure you have the latest oxp-sensors driver installed." ) - logger.info(f"Turbo button takeover enabled") try: logger.info("Launching emulated controller.") From 993dc4eade6a6f24f76538696349db4a24fa0c48 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 19:15:46 +0100 Subject: [PATCH 0424/1497] update readme with new devices --- readme.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index e8834bbf..7dd011f4 100644 --- a/readme.md +++ b/readme.md @@ -39,6 +39,10 @@ Check out [adjustor](https://github.com/hhd-dev/adjustor)!. ## Supported Devices The following devices have been verified to work correctly, with QAM, RGB remapping, Touchpad, and Gyro support. +The gyro axis might be incorrect for some of those devices, and can be easily +fixed in the configuration menu by following [these steps](#gyro). +If you do take the time, please open an issue with the correct mapping so it +is added to your device. - Legion Go - ROG Ally @@ -47,12 +51,13 @@ Touchpad, and Gyro support. - Win Mini - Win Max 2 2023 - Ayaneo - - Air Plus - - 2/2s (experimental) - - GEEK, GEEK 1S (experimental) + - Air Standard/Plus/Pro + - 1S/1S Limited + - 2/2S + - GEEK, GEEK 1S - AOKZOE - A1 - - A1 Pro (experimental) + - A1 Pro - Ayn - Loki Max - Onexplayer @@ -553,7 +558,7 @@ the cause at this moment. ChimeraOS 44 and certain versions of Nobara 38 and 39 have this issue. ## Contributing -### Finding the correct axis for your device +### Finding the correct axis for your device To figure the correct axis from your device, go to desktop and open the steam calibration settings. Then, go to https://hhd.dev , switch `Motion Axis` to `Override` and tweak only From 8a0b5ea3f1d4b5956c2b91d43ae1674f2d7a1705 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 20:45:37 +0100 Subject: [PATCH 0425/1497] add threading to rgb code --- src/hhd/controller/physical/rgb.py | 35 ++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 13f6d192..05e8b5ef 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -1,6 +1,8 @@ import logging import os import time +from threading import Event as TEvent +from threading import Thread from typing import Any, Sequence from hhd.controller import Consumer @@ -60,6 +62,17 @@ def chassis_led_set(ev: RgbLedEvent): write_sysfs(LED_PATH, "multi_intensity", f"{r_red} {r_green} {r_blue}") +def thread_chassis_led_set(ev: RgbLedEvent, pending: TEvent, error: TEvent): + try: + chassis_led_set(ev) + except Exception as e: + logger.error(f"Setting leds failed with error:\n{e}") + # Turn off support + error.set() + chassis_led_set(ev) + pending.clear() + + class LedDevice(Consumer): def __init__(self, rate_limit: float = 4) -> None: self.supported = is_led_supported() @@ -67,10 +80,19 @@ def __init__(self, rate_limit: float = 4) -> None: self.queued = None self.last = time.time() - self.min_delay + self.pending = TEvent() + self.pending.set() + self.error = TEvent() + self.t = None + def consume(self, events: Sequence[Event]): if not self.supported: return + if self.error.isSet(): + self.supported = False + return + curr = time.time() ev = None @@ -93,13 +115,12 @@ def consume(self, events: Sequence[Event]): if ev is None: return - if curr > self.last + self.min_delay: - try: - chassis_led_set(ev) - except Exception as e: - logger.error(f"Setting leds failed with error:\n{e}") - # Turn off support - self.supported = False + if curr > self.last + self.min_delay and not self.pending.is_set(): + self.pending.set() + self.t = Thread( + target=thread_chassis_led_set, args=(ev, self.pending, self.error) + ) + self.t.start() self.last = curr else: self.queued = (ev, curr + self.min_delay) From 2e7ad6eb96ce96c950ad990bc9715ab6ae606645 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 20:55:43 +0100 Subject: [PATCH 0426/1497] make threading optional --- src/hhd/controller/physical/rgb.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 05e8b5ef..aa38c66e 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -74,14 +74,14 @@ def thread_chassis_led_set(ev: RgbLedEvent, pending: TEvent, error: TEvent): class LedDevice(Consumer): - def __init__(self, rate_limit: float = 4) -> None: + def __init__(self, rate_limit: float = 4, threading: bool = True) -> None: self.supported = is_led_supported() self.min_delay = 1 / rate_limit self.queued = None self.last = time.time() - self.min_delay + self.threading = threading self.pending = TEvent() - self.pending.set() self.error = TEvent() self.t = None @@ -116,11 +116,19 @@ def consume(self, events: Sequence[Event]): return if curr > self.last + self.min_delay and not self.pending.is_set(): - self.pending.set() - self.t = Thread( - target=thread_chassis_led_set, args=(ev, self.pending, self.error) - ) - self.t.start() + if self.threading: + self.pending.set() + self.t = Thread( + target=thread_chassis_led_set, args=(ev, self.pending, self.error) + ) + self.t.start() + else: + try: + chassis_led_set(ev) + except Exception as e: + logger.error(f"Setting leds failed with error:\n{e}") + # Turn off support + self.supported = False self.last = curr else: self.queued = (ev, curr + self.min_delay) From 7c4930299cb5aed9ed86398f61eace4912efafc1 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 21:06:14 +0100 Subject: [PATCH 0427/1497] tweak printing path to console --- src/hhd/controller/physical/rgb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index aa38c66e..5842962a 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -14,7 +14,7 @@ def write_sysfs(dir: str, fn: str, val: Any): - logger.info(f"Writing `{str(val)}` to \n{os.path.join(dir, fn)}") + logger.info(f'Writing `{str(val)}` to \n"{os.path.join(dir, fn)}"') with open(os.path.join(dir, fn), "w") as f: f.write(str(val)) From b13607aa333b9957cc05cbfaee3d9fb9ecd50332 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 21:14:31 +0100 Subject: [PATCH 0428/1497] disable threading --- src/hhd/controller/physical/rgb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 5842962a..6081b055 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -74,7 +74,7 @@ def thread_chassis_led_set(ev: RgbLedEvent, pending: TEvent, error: TEvent): class LedDevice(Consumer): - def __init__(self, rate_limit: float = 4, threading: bool = True) -> None: + def __init__(self, rate_limit: float = 4, threading: bool = False) -> None: self.supported = is_led_supported() self.min_delay = 1 / rate_limit self.queued = None From 1f695e9b346ecd93f73438cdf77f9ad13ea2af6a Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 21:25:49 +0100 Subject: [PATCH 0429/1497] set low values to 0 preemptively --- src/hhd/controller/physical/rgb.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 6081b055..94038020 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -48,6 +48,10 @@ def chassis_led_set(ev: RgbLedEvent): r_green = max(min(ev["green"], 255), 0) r_blue = max(min(ev["blue"], 255), 0) + # Set low values to 0 + if r_red < 3 and r_green < 3 and r_blue < 3: + r_brightness = 0 + # Mode only exists on ayn devices try: write_sysfs(LED_PATH, "led_mode", r_mode) From cfc5f6e86f731c1d783faa03b873f8369a951aa2 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 21:26:26 +0100 Subject: [PATCH 0430/1497] bump turn off numbers --- src/hhd/controller/physical/rgb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 94038020..a503b826 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -49,7 +49,7 @@ def chassis_led_set(ev: RgbLedEvent): r_blue = max(min(ev["blue"], 255), 0) # Set low values to 0 - if r_red < 3 and r_green < 3 and r_blue < 3: + if r_red < 5 and r_green < 5 and r_blue < 5: r_brightness = 0 # Mode only exists on ayn devices From ae2db3783dee7453a478797d322faa466e35b661 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 21:42:38 +0100 Subject: [PATCH 0431/1497] make brightness workaround central --- src/hhd/controller/physical/rgb.py | 4 ---- .../controller/virtual/dualsense/__init__.py | 22 ++++++++++++++----- src/hhd/device/legion_go/hid.py | 6 ++++- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index a503b826..6081b055 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -48,10 +48,6 @@ def chassis_led_set(ev: RgbLedEvent): r_green = max(min(ev["green"], 255), 0) r_blue = max(min(ev["blue"], 255), 0) - # Set low values to 0 - if r_red < 5 and r_green < 5 and r_blue < 5: - r_brightness = 0 - # Mode only exists on ayn devices try: write_sysfs(LED_PATH, "led_mode", r_mode) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 5f2d6dbf..6466f65a 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -89,9 +89,11 @@ def open(self) -> Sequence[int]: version=DS5_EDGE_VERSION, country=DS5_EDGE_COUNTRY, name=DS5_EDGE_NAME if self.edge_mode else DS5_NAME, - report_descriptor=DS5_EDGE_DESCRIPTOR_BT - if self.use_bluetooth - else DS5_EDGE_DESCRIPTOR_USB, + report_descriptor=( + DS5_EDGE_DESCRIPTOR_BT + if self.use_bluetooth + else DS5_EDGE_DESCRIPTOR_USB + ), ) self.touch_correction = correct_touchpad( @@ -204,14 +206,22 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # Skip rare SDL led initialization that is offset continue logger.info(f"Changing leds to RGB: {red} {green} {blue}") + + # Crunch lower values since steam is bugged + if red < 3 and green < 3 and blue < 3: + red = 0 + green = 0 + blue = 0 + out.append( { "type": "led", "code": "main", "mode": "solid", - "brightness": led_brightness / 63 - if led_brightness - else 1, + # "brightness": led_brightness / 63 + # if led_brightness + # else 1, + "brightness": 1, "speed": 0, "red": red, "blue": blue, diff --git a/src/hhd/device/legion_go/hid.py b/src/hhd/device/legion_go/hid.py index 00696ad7..8ff86380 100644 --- a/src/hhd/device/legion_go/hid.py +++ b/src/hhd/device/legion_go/hid.py @@ -156,7 +156,11 @@ def __call__(self, dev: Device, events: Sequence[Event]): case "rainbow": mode = "dynamic" case "solid": - mode = "solid" + if ev["red"] or ev['green'] or ev['blue']: + mode = "solid" + else: + # Disable if brightness is 0 + mode = None case "spiral": mode = "spiral" case _: From 9239a081226e6b274d327e33871a6fd321cf3872 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 21:50:51 +0100 Subject: [PATCH 0432/1497] cleanup readme --- faq.md | 123 +++++++++++++++++++++++++++++++++++++++++++++ readme.md | 146 ++++++------------------------------------------------ 2 files changed, 139 insertions(+), 130 deletions(-) create mode 100644 faq.md diff --git a/faq.md b/faq.md new file mode 100644 index 00000000..6f8aba79 --- /dev/null +++ b/faq.md @@ -0,0 +1,123 @@ +## Frequently Asked Questions (Old) + +### What does the current version of Handheld Daemon do? +The current version of HHD maps the x-input mode of the Legion Go controllers to +a DualSense 5 Edge controller, which allows using all of the controller +functions. In addition, it adds support for the Steam powerbutton action, so you +get a wink when going to sleep mode. + +When the controllers are not in x-input mode, HHD adds a shortcuts device so +that combos such as Steam and QAM keep working. + +### Steam reports a Legion Controller and a Shortcuts controller instead of a PS5 +The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, +and FPS). +HHD only remaps the x-input mode of the controllers. +You can cycle through the modes with Legion L + RB. + +X-input and d-input refer to the protocol the controllers operate in. +Both are legacy protocols introduced in the mid-2000s and are included for hardware +support reasons. + +X-input is a USB controller protocol introduced with the xbox 360 controller and +is widely supported. +Direct input is a competing protocol that works based on USB HID. +Both work the same. +The only difference between them is that d-input has discrete triggers for some +reason, and some games read the button order wrong. + +X-input requires a special udev rule to work, see below. + +### Other Legion Go gamepad modes +Handheld Daemon remaps the x-input mode of the Legion Go controllers into a PS5 controller. +All other modes function as normal. +In addition, Handheld Daemon adds a shortcuts device that allows remapping the back buttons +and all Legion L, R + button combinations into shortcuts that will work accross +all modes. + +### I can not see any Legion Controllers controllers before or after installing +Your kernel needs to know to use the `xpad` driver for the Legion Go's +controllers. + +This is expected to be included in a future Linux kernel, so it is not included +by default by HHD. + +In the mean time, [apply the patch](https://github.com/torvalds/linux/compare/master...appsforartists:linux:legion-go-controllers.patch), or add a `udev` +rule: + + +You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) +if you are missing the `xpad` rule. + +``` + ERROR Device with the following not found: + Vendor ID: ['17ef'] + Product ID: ['6182'] + Name: ['Generic X-Box pad'] +``` + +### Yuzu does not work with the PS5 controller +See above. +Use yuzu controller settings to select the DualSense controller and disable +Steam Input. + +### Freezing Gyro +The gyro used for the PS5 controller is found in the display. +It may freeze occasionally. This is due to the accelerometer driver being +designed to be polled at 5hz, not 100hz. +If that is the case, you need to reboot. + +The gyro may exhibit stutters when being polled by `iio-sensor-proxy` to determine +screen orientation. +However, a udev rule that is installed by default disables this. + +If you do not need gyro support, you should disable it for a .2% cpu utilisation +reduction. + +### No screen autorotation after install +HHD includes a udev rule that disables screen autorotation, because it interferes +with gyro support. +This is only done specifically to the accelerometer of the Legion Go. +If you do not need gyro, you can do the local install and modify +`83-hhd.rules` to remove that rule. +The gyro will freeze and will be unusable after that. + +### Touchpad Behavior is different after install/is not part of dualsense +By default, in the Legion Go the handheld daemon uses a virtual touchpad +with proper left/right clicks, which work in gamescope. +If you use your device outside gamescope and find this problematic, switch +`Touchpad Emulation` to `Disabled`. +If you want to use your touchpad for steam input, set the option to `Controller` +and use the `Right Touchpad` under steam. + +### HandyGCCS +HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not +required. In addition, it will break HHD by hiding the controller. +You should uninstall it with `sudo pacman -R handygccs-git`. + +You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) +if HandyGCCS is enabled. +``` + ERROR Device with the following not found: + Vendor ID: ['17ef'] + Product ID: ['6182'] + Name: ['Generic X-Box pad'] +``` + +### Buttons are mapped incorrectly +Buttons mapped in Legion Space will carry over to Linux. +This includes both back buttons and legion swap. +You can reset each controller by holding Legion R + RT + RB, Legion L + LT + LB. +However, we do not know how to reset the Legion Space legion button swap at +this point, so you need to use Legion Space for that. + +Another set of obscure issues occur depending on how apps hook to the Dualsense controller. +Certain versions of gamescope and certain games do not support the edge controller, +so switch to `Dualsense` or `Xbox` emulation modes if you are having issues. + +If Steam itself is broken and can not see the controllers properly (e.g., you +can not see led/gyro settings or the Edge controller mapping is wrong), you +should update your distribution and if that does not fix it consider re-installing. +There are certain gamescope/distro issues that cause this and we are unsure of +the cause at this moment. +ChimeraOS 44 and certain versions of Nobara 38 and 39 have this issue. diff --git a/readme.md b/readme.md index 7dd011f4..a1d9b0b3 100644 --- a/readme.md +++ b/readme.md @@ -242,6 +242,22 @@ Provided these drivers are installed and are supported by your device, LED support will be enabled by default. The paddles of the Ayn Loki Max are not remappable as far as we know. +If the gyro driver is not installed and Motion is turned on, LED setting might +not work. + +#### Extra steps for Legion Go +If you are using a kernel older than 6.8 and you are not on a gaming distro +(ChimeraOS, Nobara, Bazzite), you need the following rule for the controllers +to be recognized. +```bash +# Enable xpad for the Legion Go controllers +ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" +``` + +If you have set any mappings on Legion Space, they will interfere with Handheld +Daemon. +In this case, you may reset your controllers by holding Legion R + RT + RB, +and then Legion L + LT + LB or booting into windows. #### Gyro Kernel Drivers Which kernel patch is required will depend on your device's bosch module. @@ -362,7 +378,6 @@ and add this line to your `configuration.nix`: services.handheld-daemon.enable = true; ``` - ### Distribution Installation (not recommended) You can install Handheld Daemon from [AUR](https://aur.archlinux.org/packages/hhd) (Arch) or [COPR](https://copr.fedorainfracloud.org/coprs/hhd-dev/hhd/) (Fedora). @@ -428,135 +443,6 @@ The global configuration for HHD is found in: You can modify it and it will hot-reload upon saving. -## Frequently Asked Questions (FAQ) -### What does the current version of HHD do? - -The current version of HHD maps the x-input mode of the Legion Go controllers to -a DualSense 5 Edge controller, which allows using all of the controller -functions. In addition, it adds support for the Steam powerbutton action, so you -get a wink when going to sleep mode. - -When the controllers are not in x-input mode, HHD adds a shortcuts device so -that combos such as Steam and QAM keep working. - -### Steam reports a Legion Controller and a Shortcuts controller instead of a PS5 -The Legion controllers have multiple modes (namely x-input, d-input, dual d-input, -and FPS). -HHD only remaps the x-input mode of the controllers. -You can cycle through the modes with Legion L + RB. - -X-input and d-input refer to the protocol the controllers operate in. -Both are legacy protocols introduced in the mid-2000s and are included for hardware -support reasons. - -X-input is a USB controller protocol introduced with the xbox 360 controller and -is widely supported. -Direct input is a competing protocol that works based on USB HID. -Both work the same. -The only difference between them is that d-input has discrete triggers for some -reason, and some games read the button order wrong. - -X-input requires a special udev rule to work, see below. - -### Other Legion Go gamepad modes -Handheld Daemon remaps the x-input mode of the Legion Go controllers into a PS5 controller. -All other modes function as normal. -In addition, Handheld Daemon adds a shortcuts device that allows remapping the back buttons -and all Legion L, R + button combinations into shortcuts that will work accross -all modes. - -### I can not see any Legion Controllers controllers before or after installing -Your kernel needs to know to use the `xpad` driver for the Legion Go's -controllers. - -This is expected to be included in a future Linux kernel, so it is not included -by default by HHD. - -In the mean time, [apply the patch](https://github.com/torvalds/linux/compare/master...appsforartists:linux:legion-go-controllers.patch), or add a `udev` -rule: - -#### `/etc/udev/rules.d/95-hhd.rules` -```bash -# Enable xpad for the Legion Go controllers -ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 17ef 6182 > /sys/bus/usb/drivers/xpad/new_id'" -``` - -You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) -if you are missing the `xpad` rule. - -``` - ERROR Device with the following not found: - Vendor ID: ['17ef'] - Product ID: ['6182'] - Name: ['Generic X-Box pad'] -``` - -### Yuzu does not work with the PS5 controller -See above. -Use yuzu controller settings to select the DualSense controller and disable -Steam Input. - -### Freezing Gyro -The gyro used for the PS5 controller is found in the display. -It may freeze occasionally. This is due to the accelerometer driver being -designed to be polled at 5hz, not 100hz. -If that is the case, you need to reboot. - -The gyro may exhibit stutters when being polled by `iio-sensor-proxy` to determine -screen orientation. -However, a udev rule that is installed by default disables this. - -If you do not need gyro support, you should disable it for a .2% cpu utilisation -reduction. - -### No screen autorotation after install -HHD includes a udev rule that disables screen autorotation, because it interferes -with gyro support. -This is only done specifically to the accelerometer of the Legion Go. -If you do not need gyro, you can do the local install and modify -`83-hhd.rules` to remove that rule. -The gyro will freeze and will be unusable after that. - -### Touchpad Behavior is different after install/is not part of dualsense -By default, in the Legion Go the handheld daemon uses a virtual touchpad -with proper left/right clicks, which work in gamescope. -If you use your device outside gamescope and find this problematic, switch -`Touchpad Emulation` to `Disabled`. -If you want to use your touchpad for steam input, set the option to `Controller` -and use the `Right Touchpad` under steam. - -### HandyGCCS -HHD replicates all functionality of HandyGCCS for the Legion Go, so it is not -required. In addition, it will break HHD by hiding the controller. -You should uninstall it with `sudo pacman -R handygccs-git`. - -You will see the following in the HHD logs (`sudo systemctl status hhd@$(whoami)`) -if HandyGCCS is enabled. -``` - ERROR Device with the following not found: - Vendor ID: ['17ef'] - Product ID: ['6182'] - Name: ['Generic X-Box pad'] -``` - -### Buttons are mapped incorrectly -Buttons mapped in Legion Space will carry over to Linux. -This includes both back buttons and legion swap. -You can reset each controller by holding Legion R + RT + RB, Legion L + LT + LB. -However, we do not know how to reset the Legion Space legion button swap at -this point, so you need to use Legion Space for that. - -Another set of obscure issues occur depending on how apps hook to the Dualsense controller. -Certain versions of gamescope and certain games do not support the edge controller, -so switch to `Dualsense` or `Xbox` emulation modes if you are having issues. - -If Steam itself is broken and can not see the controllers properly (e.g., you -can not see led/gyro settings or the Edge controller mapping is wrong), you -should update your distribution and if that does not fix it consider re-installing. -There are certain gamescope/distro issues that cause this and we are unsure of -the cause at this moment. -ChimeraOS 44 and certain versions of Nobara 38 and 39 have this issue. - ## Contributing ### Finding the correct axis for your device To figure the correct axis from your device, go to desktop and open the steam From 4b4e307c93c1c0c6fe22b0274d56097922dd25aa Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 22:28:28 +0100 Subject: [PATCH 0433/1497] fix uinput bug --- src/hhd/controller/virtual/uinput/__init__.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 2371525d..834a2777 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -75,6 +75,8 @@ def close(self, exit: bool) -> bool: def consume(self, events: Sequence[Event]): if not self.dev: return + + wrote = False for ev in events: match ev["type"]: case "axis": @@ -90,6 +92,7 @@ def consume(self, events: Sequence[Event]): if ax.bounds: val = min(max(val, ax.bounds[0]), ax.bounds[1]) self.dev.write(B("EV_ABS"), ax.id, val) + wrote = True if ev["code"] == "touchpad_x": self.dev.write(B("EV_ABS"), B("ABS_MT_POSITION_X"), val) @@ -108,6 +111,7 @@ def consume(self, events: Sequence[Event]): self.ofs = ts ts -= self.ofs self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) + wrote = True case "button": if ev["code"] in self.btn_map: if ev["code"] == "touchpad_touch": @@ -129,12 +133,13 @@ def consume(self, events: Sequence[Event]): self.btn_map[ev["code"]], 1 if ev["value"] else 0, ) + wrote = True case "configuration": if ev["code"] == "touchpad_aspect_ratio": self.touchpad_aspect = float(ev["value"]) - if self.output_timestamps: + if wrote and self.output_timestamps: # We have timestamps with ns accuracy. # Evdev expects us accuracy ts = time.perf_counter_ns() // 1000 @@ -144,7 +149,8 @@ def consume(self, events: Sequence[Event]): ts -= self.ofs self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) - self.dev.syn() + if wrote: + self.dev.syn() def produce(self, fds: Sequence[int]) -> Sequence[Event]: if not self.fd or not self.fd in fds or not self.dev: From 2eaf97eb10cb16f6c9483f259a611fe845a8c9c6 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 22:32:44 +0100 Subject: [PATCH 0434/1497] fix broken gyro led bug --- pyproject.toml | 2 +- src/hhd/controller/virtual/dualsense/const.py | 5 +++++ src/hhd/device/legion_go/base.py | 11 +---------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9ac579f5..e045cd53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.4" +version = "1.3.5" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index 3a122c26..666c1887 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -116,6 +116,11 @@ def prefill_ds5_report(bluetooth: bool): # bat = 10*lvl + 5 d[ofs + 52] = (0x0 << 4) + 8 + # Add dummy data in case the gyro is broken + d[ofs + 27 : ofs + 31] = int(28742700000000 / DS5_EDGE_DELTA_TIME_NS).to_bytes( + 8, byteorder="little", signed=False + )[:4] + return bytes(d) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 80c606cd..94b8ad49 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -329,16 +329,7 @@ def prepare(m): for d in d_outs: d.consume(evs) - # If unbounded, the total number of events per second is the sum of all - # events generated by the producers. - # For Legion go, that would be 100 + 100 + 500 + 30 = 730 - # Since the controllers of the legion go only update at 500hz, this is - # wasteful. - # By setting a target refresh rate for the report and sleeping at the - # end, we ensure that even if multiple fds become ready close to each other - # they are combined to the same report, limiting resource use. - # Ideally, this rate is smaller than the report rate of the hardware controller - # to ensure there is always a report from that ready during refresh + t = time.perf_counter() elapsed = t - start if elapsed < REPORT_DELAY_MIN: From ce940eb2959154ee734aef5eaa7d0fddc0a455a3 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 5 Feb 2024 22:34:38 +0100 Subject: [PATCH 0435/1497] update readme --- readme.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/readme.md b/readme.md index a1d9b0b3..a1531d8a 100644 --- a/readme.md +++ b/readme.md @@ -213,8 +213,7 @@ This patch is included with Linux kernel 6.7. See [here](#gyro) for the required kernel patches. Without the patch series for the IMU (where patches 0001, and 0002 are included -in kernel 6.8), the gyro will not work and if the `Motion` option is enabled, -LEDs will not work either, so that should be turned off. +in kernel 6.8), the gyro will not work. You can hold the ROG Crate button to switch to the ROG Ally's Mouse mode to turn the right stick into a mouse. @@ -242,8 +241,6 @@ Provided these drivers are installed and are supported by your device, LED support will be enabled by default. The paddles of the Ayn Loki Max are not remappable as far as we know. -If the gyro driver is not installed and Motion is turned on, LED setting might -not work. #### Extra steps for Legion Go If you are using a kernel older than 6.8 and you are not on a gaming distro From 2d2f855c36286653313d43ae2999d4a16ab04184 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 6 Feb 2024 19:41:07 +0100 Subject: [PATCH 0436/1497] add decky update deprecation warning --- src/hhd/settings.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index ca31779c..f8e7a0a0 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -11,6 +11,12 @@ version: title: Decky Plugin Version hint: "Displays the Handheld Daemon Decky plugin version." + decky_deprecation: + type: display + tags: [hhd-version-display-decky, text] + title: "WARNING: This button will be removed soon, update Decky now!" + default: " " + update_decky: type: action tags: [hhd-update-decky, decky] From b5b06a9740fbe3ba9f8a26f3d3f470908d4f86b2 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 6 Feb 2024 19:59:56 +0100 Subject: [PATCH 0437/1497] fix powerbutton bug in holding code --- src/hhd/plugins/powerbutton/__init__.py | 4 ++-- src/hhd/plugins/powerbutton/base.py | 15 +++------------ src/hhd/plugins/powerbutton/const.py | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/hhd/plugins/powerbutton/__init__.py b/src/hhd/plugins/powerbutton/__init__.py index 50941ae5..c96c7ab8 100644 --- a/src/hhd/plugins/powerbutton/__init__.py +++ b/src/hhd/plugins/powerbutton/__init__.py @@ -49,10 +49,10 @@ def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing - from .base import get_config, DEFAULT_DEVICE + from .const import get_config, get_default_config cfg = get_config() if not cfg: - return [PowerbuttondPlugin(DEFAULT_DEVICE)] + return [PowerbuttondPlugin(get_default_config())] return [PowerbuttondPlugin(cfg)] diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 3883ab59..6018e29f 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -11,7 +11,7 @@ from hhd.utils import Context, expanduser -from .const import DEFAULT_DEVICE, SUPPORTED_DEVICES, PowerButtonConfig +from .const import PowerButtonConfig logger = logging.getLogger(__name__) @@ -109,17 +109,6 @@ def register_hold_button(b: PowerButtonConfig) -> evdev.InputDevice | None: return None -def get_config() -> PowerButtonConfig | None: - with open("/sys/devices/virtual/dmi/id/product_name") as f: - prod = f.read().strip() - - for d in SUPPORTED_DEVICES: - if d.prod_name == prod: - return d - - return None - - def run_steam_shortpress(perms: Context): return run_steam_command("steam://shortpowerpress", perms) @@ -232,6 +221,8 @@ def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Even dev = None logger.info(f"Waiting for steam to launch.") while not is_steam_gamescope_running(perms): + if should_exit.is_set(): + return sleep(STEAM_WAIT_DELAY) if not dev: diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index b7e95dc4..59168053 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -64,7 +64,21 @@ class PowerButtonConfig(NamedTuple): ), ] -DEFAULT_DEVICE: PowerButtonConfig = PBC("uknown", "NA", "hold_emitted") + +def get_config() -> PowerButtonConfig | None: + with open("/sys/devices/virtual/dmi/id/product_name") as f: + prod = f.read().strip() + + for d in SUPPORTED_DEVICES: + if d.prod_name == prod: + return d + + return None + + +def get_default_config(): + # Prepare for per-manufacturer customization + return PBC("uknown", "NA", "hold_emitted") # Legion go From 09d0290bd4335b9929319df7167429f390ef9fbc Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 6 Feb 2024 21:03:45 +0100 Subject: [PATCH 0438/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e045cd53..83a2b078 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.5" +version = "1.3.6" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From ad968c82193878cbf482f4fac2cdc44b44de6430 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 6 Feb 2024 21:57:46 +0100 Subject: [PATCH 0439/1497] update readme --- readme.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index a1531d8a..5d532bb2 100644 --- a/readme.md +++ b/readme.md @@ -86,12 +86,7 @@ Nobara also packages hhd and it will become the default for supported devices so However, it only packages fixes for the Ally and Legion Go at the time of this writing. -> [!WARNING] -> There is a bug that breaks how Dualsense controllers are parsed in Steam in various -> distros, which causes Gyro, LEDs, and paddles to not be detected in Steam, -> and the Dualsense Edge mapping being very wrong. -> It is being investigated, please open an issue for it with your distro information. - +> [!IMPORTANT] > To ensure the gyro of the Legion Go with AMD SFH runs smoothly, > a udev rule is included that disables the use of the accelerometer by the > system (e.g., iio-sensor-proxy). @@ -281,7 +276,7 @@ The gyro will work fine in games. If you get drift, you can turn on `Auto-Calibrate Gyro Drift when Stationary` and then move the top bar (gyro) right until it covers the noise. -#### High Touchpad Steam Input +#### High Touchpad Sensitivity in Steam Input By default, the Dualsense kernel driver exposes the Dualsense trackpad as a normal trackpad. This means that if you go to use it as steam input, you still get the normal @@ -448,7 +443,8 @@ Then, go to https://hhd.dev , switch `Motion Axis` to `Override` and tweak only the axis (without invert) of your device until they match the glyphs in steam. > [!WARNING] -> Do not try to interpret what each axis means. Just change them randomly until +> Do not try to interpret what each axis means. You will get a headache. +> Just change them randomly until > the glyphs line up with how you move your controller. > If you set multiple axis to a single one (e.g., X to Y, and Y to Y), > the first option (e.g., X to Y) option will be ignored. From bc70368093443f20807256b893546c87f4bc35b5 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 6 Feb 2024 21:59:41 +0100 Subject: [PATCH 0440/1497] touchup readme --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 5d532bb2..5dde1866 100644 --- a/readme.md +++ b/readme.md @@ -37,10 +37,10 @@ Check out [adjustor](https://github.com/hhd-dev/adjustor)!. - Built-in updater. ## Supported Devices -The following devices have been verified to work correctly, with QAM, RGB remapping, -Touchpad, and Gyro support. +The following devices have been verified to work correctly, with QAM, +Paddles/extra buttons, RGB remapping, Touchpad, and Gyro support. The gyro axis might be incorrect for some of those devices, and can be easily -fixed in the configuration menu by following [these steps](#gyro). +fixed in the configuration menu by following [these steps](#axis). If you do take the time, please open an issue with the correct mapping so it is added to your device. @@ -436,7 +436,7 @@ The global configuration for HHD is found in: You can modify it and it will hot-reload upon saving. ## Contributing -### Finding the correct axis for your device +### Finding the correct axis for your device To figure the correct axis from your device, go to desktop and open the steam calibration settings. Then, go to https://hhd.dev , switch `Motion Axis` to `Override` and tweak only From efeb46ff4514268dd0cae5795678f0e591939ea0 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 6 Feb 2024 23:03:35 +0100 Subject: [PATCH 0441/1497] fix gyro to mouse fix breaking controller when gyro is disabled --- src/hhd/plugins/outputs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 2ba10ee5..6202b71f 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -42,7 +42,7 @@ def get_outputs( enable_touchpad=uses_touch, enable_rgb=uses_leds, fake_timestamps=not motion, - sync_gyro=conf["dualsense_edge.sync_gyro"].to(bool), + sync_gyro=conf["dualsense_edge.sync_gyro"].to(bool) and motion, ) producers.append(d) consumers.append(d) @@ -56,7 +56,7 @@ def get_outputs( enable_touchpad=uses_touch, enable_rgb=uses_leds, fake_timestamps=not motion, - sync_gyro=conf["dualsense.sync_gyro"].to(bool), + sync_gyro=conf["dualsense.sync_gyro"].to(bool) and motion, ) producers.append(d) consumers.append(d) From 88a0a1703b88bc0f0aaa513605f6e317e8b0d68e Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 7 Feb 2024 00:11:03 +0100 Subject: [PATCH 0442/1497] bump ayn/ayaneo led updates to 10hz --- src/hhd/controller/physical/rgb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index 6081b055..ddfac440 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -74,7 +74,7 @@ def thread_chassis_led_set(ev: RgbLedEvent, pending: TEvent, error: TEvent): class LedDevice(Consumer): - def __init__(self, rate_limit: float = 4, threading: bool = False) -> None: + def __init__(self, rate_limit: float = 10, threading: bool = False) -> None: self.supported = is_led_supported() self.min_delay = 1 / rate_limit self.queued = None From 5a67f39eed985e7e94b999388478fcb0962afbd8 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 7 Feb 2024 00:42:00 +0100 Subject: [PATCH 0443/1497] skip brightness, mode after first write --- src/hhd/controller/physical/rgb.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/hhd/controller/physical/rgb.py b/src/hhd/controller/physical/rgb.py index ddfac440..5844f708 100644 --- a/src/hhd/controller/physical/rgb.py +++ b/src/hhd/controller/physical/rgb.py @@ -33,7 +33,7 @@ def is_led_supported(): return os.path.exists(LED_PATH) -def chassis_led_set(ev: RgbLedEvent): +def chassis_led_set(ev: RgbLedEvent, init: bool = True): if ev["type"] != "led": return @@ -49,16 +49,19 @@ def chassis_led_set(ev: RgbLedEvent): r_blue = max(min(ev["blue"], 255), 0) # Mode only exists on ayn devices - try: - write_sysfs(LED_PATH, "led_mode", r_mode) - except Exception: - logger.info("Could not write led_mode (not applicable for Ayaneo, only Ayn).") + if init: try: - write_sysfs(LED_PATH, "device/led_mode", r_mode) + write_sysfs(LED_PATH, "led_mode", r_mode) except Exception: - logger.info("Could not write led_mode to secondary path.") - - write_sysfs(LED_PATH, "brightness", r_brightness) + logger.info( + "Could not write led_mode (not applicable for Ayaneo, only Ayn)." + ) + try: + write_sysfs(LED_PATH, "device/led_mode", r_mode) + except Exception: + logger.info("Could not write led_mode to secondary path.") + + write_sysfs(LED_PATH, "brightness", r_brightness) write_sysfs(LED_PATH, "multi_intensity", f"{r_red} {r_green} {r_blue}") @@ -84,6 +87,7 @@ def __init__(self, rate_limit: float = 10, threading: bool = False) -> None: self.pending = TEvent() self.error = TEvent() self.t = None + self.init = False def consume(self, events: Sequence[Event]): if not self.supported: @@ -124,7 +128,8 @@ def consume(self, events: Sequence[Event]): self.t.start() else: try: - chassis_led_set(ev) + chassis_led_set(ev, not self.init) + self.init = True except Exception as e: logger.error(f"Setting leds failed with error:\n{e}") # Turn off support From f6aac1b73165ac43008cff1e79ea8c540ba18933 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 7 Feb 2024 17:28:35 +0100 Subject: [PATCH 0444/1497] add text extraction through babel for localization --- i18n/babel.cfg | 3 + i18n/el_gr/LC_MESSAGES/hhd.po | 789 ++++++++++++++++++++++++++++++++++ i18n/template.pot | 788 +++++++++++++++++++++++++++++++++ i18n/zh_cn/LC_MESSAGES/hhd.po | 789 ++++++++++++++++++++++++++++++++++ locale.pot | 19 + pyproject.toml | 7 +- readme.md | 24 ++ src/hhd/contrib/i18n.py | 59 +++ src/hhd/http/api.py | 12 +- src/hhd/sections.yml | 5 + 10 files changed, 2485 insertions(+), 10 deletions(-) create mode 100644 i18n/babel.cfg create mode 100644 i18n/el_gr/LC_MESSAGES/hhd.po create mode 100644 i18n/template.pot create mode 100644 i18n/zh_cn/LC_MESSAGES/hhd.po create mode 100644 locale.pot create mode 100644 src/hhd/contrib/i18n.py create mode 100644 src/hhd/sections.yml diff --git a/i18n/babel.cfg b/i18n/babel.cfg new file mode 100644 index 00000000..0f486deb --- /dev/null +++ b/i18n/babel.cfg @@ -0,0 +1,3 @@ +[hhd_yaml: **.yml] + +[hhd_yaml: **.yaml] \ No newline at end of file diff --git a/i18n/el_gr/LC_MESSAGES/hhd.po b/i18n/el_gr/LC_MESSAGES/hhd.po new file mode 100644 index 00000000..fcb84394 --- /dev/null +++ b/i18n/el_gr/LC_MESSAGES/hhd.po @@ -0,0 +1,789 @@ +# Greek (Greece) translations for PROJECT. +# Copyright (C) 2024 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-02-07 17:22+0100\n" +"PO-Revision-Date: 2024-02-07 17:26+0100\n" +"Last-Translator: FULL NAME \n" +"Language: el_GR\n" +"Language-Team: el_GR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.14.0\n" + +#. Section Name for: system +#. Setting: System +#. Field: title +msgid "System" +msgstr "" + +#. Section Name for: tdp +msgid "TDP" +msgstr "" + +#. Section Name for: controller +#. Setting: Controller +#. Field: title +msgid "Controller" +msgstr "" + +#. Section Name for: hhd +msgid "About" +msgstr "" + +#. Setting: Version Information +#. Field: title +msgid "Version Information" +msgstr "" + +#. Setting: Version Information +#. Field: hint +msgid "Handheld Daemon version manager (local install only)." +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: title +msgid "Decky Plugin Version" +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: hint +msgid "Displays the Handheld Daemon Decky plugin version." +msgstr "" + +#. Setting: WARNING: This button will be removed soon, update Decky now! +#. Field: title +msgid "WARNING: This button will be removed soon, update Decky now!" +msgstr "" + +#. Setting: Update Decky +#. Field: title +msgid "Update Decky" +msgstr "" + +#. Setting: Update Decky +#. Field: hint +msgid "Updates the Decky plugin to the latest release." +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: title +msgid "Handheld Daemon Version" +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: hint +msgid "Displays the Handheld Daemon version." +msgstr "" + +#. Setting: Update (Stable) +#. Field: title +msgid "Update (Stable)" +msgstr "" + +#. Setting: Update (Stable) +#. Field: hint +msgid "Updates to the latest version from PyPi (local install only)." +msgstr "" + +#. Setting: Update (Unstable) +#. Field: title +msgid "Update (Unstable)" +msgstr "" + +#. Setting: Update (Unstable) +#. Field: hint +msgid "Updates to the master branch from git (local install only)." +msgstr "" + +#. Setting: API Configuration +#. Field: title +msgid "API Configuration" +msgstr "" + +#. Setting: API Configuration +#. Field: hint +msgid "Settings for configuring the http endpoint of HHD." +msgstr "" + +#. Setting: Enable the API +#. Field: title +msgid "Enable the API" +msgstr "" + +#. Setting: Enable the API +#. Field: hint +msgid "Enables the API of Handheld Daemon (required for decky and ui)." +msgstr "" + +#. Setting: API Port +#. Field: title +msgid "API Port" +msgstr "" + +#. Setting: API Port +#. Field: hint +msgid "Which port should the API be on?" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: title +msgid "Limit Access to localhost" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: hint +msgid "Sets the API target to '127.0.0.1' instead '0.0.0.0'." +msgstr "" + +#. Setting: Use Security token +#. Field: title +msgid "Use Security token" +msgstr "" + +#. Setting: Use Security token +#. Field: hint +msgid "" +"Generates a security token in `~/.config/hhd/token` that is required for " +"authentication." +msgstr "" + +#. Setting: Handheld Controller +#. Field: title +msgid "Handheld Controller" +msgstr "" + +#. Setting: Handheld Controller +#. Field: hint +msgid "Allows for configuring your handheld's controller to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: title +msgid "Controller Emulation" +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse your device's features." +msgstr "" + +#. Setting: Motion Support +#. Field: title +msgid "Motion Support" +msgstr "" + +#. Setting: Motion Support +#. Field: hint +msgid "Enable gyroscope/accelerometer (IMU) support (.3% background CPU use)" +msgstr "" + +#. Setting: Motion Hz +#. Field: title +msgid "Motion Hz" +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: title +msgid "Nintendo Mode (A-B Swap)" +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: hint +msgid "Swaps A with B and X with Y." +msgstr "" + +#. Setting: Map share buttom to QAM. +#. Field: title +msgid "Map share buttom to QAM." +msgstr "" + +#. Setting: Debug +#. Field: title +msgid "Debug" +msgstr "" + +#. Setting: Debug +#. Field: hint +msgid "" +"Output controller events to the console (high CPU use) and raises " +"exceptions (HHD will crash on errors)." +msgstr "" + +#. Setting: GPD Controller +#. Field: title +msgid "GPD Controller" +msgstr "" + +#. Setting: GPD Controller +#. Field: hint +msgid "Allows for configuring the gpd win controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse gpd features." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Field: title +msgid "Map L4/R4 to QAM." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: disabled +#. Setting: Swap Legion with Start/Select +#. Setting: Disabled +#. Field: title +#. Setting: Short Action +#. Setting: Hold Action +msgid "Disabled" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: l4 +msgid "L4" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: r4 +msgid "R4" +msgstr "" + +#. Setting: Legion Controllers +#. Field: title +msgid "Legion Controllers" +msgstr "" + +#. Setting: Legion Controllers +#. Field: hint +msgid "" +"Allows for configuring the Legion controllers using the built in firmware" +" commands and enabling emulation modes for various controller types." +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: title +msgid "Emulation Mode (X-Input)" +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: hint +msgid "" +"Emulate different controller types when the Legion Controllers are in " +"X-Input mode." +msgstr "" + +#. Setting: Gyroscope +#. Field: title +msgid "Gyroscope" +msgstr "" + +#. Setting: Gyroscope +#. Field: hint +msgid "Enables gyroscope support (.3% background CPU use)" +msgstr "" + +#. Setting: Accelerometer +#. Field: title +msgid "Accelerometer" +msgstr "" + +#. Setting: Accelerometer +#. Field: hint +msgid "" +"Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; " +"if someone asks it will be fixed)." +msgstr "" + +#. Setting: Gyro Hz +#. Field: title +msgid "Gyro Hz" +msgstr "" + +#. Setting: Gyro Hz +#. Field: hint +msgid "" +"Adds polling to the legion go gyroscope, to fix the low polling rate " +"(required for gyroscope support). Set to 0 to disable. Due to hardware " +"limitations, there is a marginal difference above 100hz." +msgstr "" + +#. Setting: Gyro Scale +#. Field: title +msgid "Gyro Scale" +msgstr "" + +#. Setting: Gyro Scale +#. Field: hint +msgid "" +"Applies a scaling factor to the legion go gyroscope (since it is " +"misconfigured by the driver). Try different values to see what works " +"best. Low values cause a deadzone and high values will clip when moving " +"the Go abruptly." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: title +msgid "Swap Legion with Start/Select" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: hint +msgid "Swaps the legion buttons with start select." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_start +msgid "Left is Start" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_select +msgid "Left is Select" +msgstr "" + +#. Setting: M2 As Mute +#. Field: title +msgid "M2 As Mute" +msgstr "" + +#. Setting: M2 As Mute +#. Field: hint +msgid "" +"Maps the M2 to the mute button on Dualsense and the HAPPY_TRIGGER_20 on " +"Xbox." +msgstr "" + +#. Setting: Hold Select to Reboot +#. Field: title +msgid "Hold Select to Reboot" +msgstr "" + +#. Setting: Legion R to QAM +#. Field: title +msgid "Legion R to QAM" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: title +msgid "Enable Shortcuts Controller" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: hint +msgid "" +"When in other modes (dinput, dual dinput, and fps), enable a shortcuts " +"controller to restore Guide, QAM, and shortcut functionality." +msgstr "" + +#. Setting: Ally Controller +#. Field: title +msgid "Ally Controller" +msgstr "" + +#. Setting: Ally Controller +#. Field: hint +msgid "Allows for configuring the ROG Ally controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse ROG features." +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. 1600 requires an IMU patch. " +"Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Led Brightness +#. Field: title +msgid "Led Brightness" +msgstr "" + +#. Setting: Led Brightness +#. Field: hint +msgid "" +"When LEDs are configured, set their brightness. High does not work below " +"30% brightness." +msgstr "" + +#. Setting: Led Brightness +#. Option: False +msgid "Off" +msgstr "" + +#. Setting: Led Brightness +#. Option: low +msgid "Low" +msgstr "" + +#. Setting: Led Brightness +#. Option: medium +msgid "Medium" +msgstr "" + +#. Setting: Led Brightness +#. Option: high +msgid "High" +msgstr "" + +#. Setting: Map Armory to QAM. +#. Field: title +msgid "Map Armory to QAM." +msgstr "" + +#. Setting: Motion Axis +#. Field: title +msgid "Motion Axis" +msgstr "" + +#. Setting: Default +#. Field: title +msgid "Default" +msgstr "" + +#. Setting: Default +#. Field: hint +msgid "The default axis loaded for this device." +msgstr "" + +#. Setting: Override +#. Field: title +msgid "Override" +msgstr "" + +#. Setting: Override +#. Field: hint +msgid "" +"Remap and invert the axis of your device. If the axis of your device are " +"wrong, please submit a picture or a text version of the following." +msgstr "" + +#. Setting: Manufacturer +#. Field: title +msgid "Manufacturer" +msgstr "" + +#. Setting: Product +#. Field: title +msgid "Product" +msgstr "" + +#. Setting: Axis X +#. Field: title +msgid "Axis X" +msgstr "" + +#. Setting: Axis X +#. Option: x +#. Setting: Axis Y +#. Setting: Axis Z +msgid "X" +msgstr "" + +#. Setting: Axis X +#. Option: y +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Y" +msgstr "" + +#. Setting: Axis X +#. Option: z +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Z" +msgstr "" + +#. Setting: Invert X +#. Field: title +msgid "Invert X" +msgstr "" + +#. Setting: Axis Y +#. Field: title +msgid "Axis Y" +msgstr "" + +#. Setting: Invert Y +#. Field: title +msgid "Invert Y" +msgstr "" + +#. Setting: Axis Z +#. Field: title +msgid "Axis Z" +msgstr "" + +#. Setting: Invert Z +#. Field: title +msgid "Invert Z" +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "Does not modify the default controller." +msgstr "" + +#. Setting: Xbox +#. Field: title +msgid "Xbox" +msgstr "" + +#. Setting: Xbox +#. Field: hint +msgid "" +"Creates a virtual `Handheld Daemon Controller` that can be used normally " +"in apps. Back buttons are supported but steam will not detect them. If " +"Gyroscope or Accelerometer are enabled, a Motion device will be created " +"as well (experimental; works in Dolphin)." +msgstr "" + +#. Setting: Dualsense +#. Field: title +msgid "Dualsense" +msgstr "" + +#. Setting: Dualsense +#. Field: hint +msgid "" +"Emulates the Dualsense Sony controller from the Playstation 5. Since this" +" controller does not have paddles, the paddles are mapped to left and " +"right touchpad clicks." +msgstr "" + +#. Setting: LED Support +#. Field: title +msgid "LED Support" +msgstr "" + +#. Setting: LED Support +#. Field: hint +msgid "" +"Passes through the LEDs to the controller, which allows games to control " +"them." +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: title +msgid "Gyro to Mouse Fix" +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: hint +msgid "" +"In the latest steam update, `Gyro to Mouse [BETA]` misbehaves if a report" +" is sent without a new imu timestamp. This option makes it so reports are" +" sent only when there is a new gyro timestamp, effectively limiting the " +"responsiveness of the controller to that of the IMU (e.g., for Legion Go " +"100hz instead of 400hz). If the IMU is not working, this setting will " +"break the controller." +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: title +msgid "Bluetooth Mode" +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: hint +msgid "" +"Emulates the controller in bluetooth mode instead of USB mode. This is " +"the default as it causes less issues with how apps interact with the " +"controller. However, using USB mode can improve LED support (?) in some " +"games. Test and report back!" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: title +msgid "Dualsense Edge" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: hint +msgid "" +"Emulates the expensive Dualsense Sony controller which enables paddle " +"support. The edge controller is a bit obscure, so some games might not " +"support it correctly." +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: title +msgid "Touchpad Emulation" +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: hint +msgid "" +"Use an emulated touchpad. Part of the controller if it is supported " +"(e.g., Dualsense) or a virtual one if not." +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "" +"Does not modify the touchpad. Short + holding presses will not work " +"within gamescope." +msgstr "" + +#. Setting: Virtual +#. Field: title +msgid "Virtual" +msgstr "" + +#. Setting: Virtual +#. Field: hint +msgid "" +"Adds an emulated touchpad. This touchpad is meant to be for desktop use " +"and has left, right click support by default, within gamescope and " +"outside of it, regardless of the \"Tap to Click\" setting." +msgstr "" + +#. Setting: Short Action +#. Field: title +msgid "Short Action" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "Maps short touches (less than 0.2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Short Action +#. Option: left_click +#. Setting: Hold Action +msgid "Left Click" +msgstr "" + +#. Setting: Short Action +#. Option: right_click +#. Setting: Hold Action +msgid "Right Click" +msgstr "" + +#. Setting: Hold Action +#. Field: title +msgid "Hold Action" +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "Maps long touches (more than 2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Controller +#. Field: hint +msgid "" +"Uses the touchpad of the emulated controller (if it exists). Otherwise, " +"the touchpad remains unmapped (will still show up in the system). Meant " +"to be used as steam input, so short press is unassigned by default and " +"long press simulates trackpad click." +msgstr "" + +#. Setting: Correction Type +#. Field: title +msgid "Correction Type" +msgstr "" + +#. Setting: Correction Type +#. Field: hint +msgid "" +"The legion touchpad is square, whereas the DS5 one is rectangular. " +"Therefore, it needs to be corrected. \"Contain\" maintain the whole DS5 " +"touchpad and part of the Legion one is unused. \"Crop\" uses the full " +"legion touchpad, and limits the area of the DS5. \"Stretch\" uses both " +"fully (distorted). \"Crop End\" enables use in steam input as the right " +"touchpad." +msgstr "" + +#. Setting: Correction Type +#. Option: stretch +msgid "Stretch" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_center +msgid "Crop Center" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_start +msgid "Crop Start" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_end +msgid "Crop End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_start +msgid "Contain Start" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_end +msgid "Contain End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_center +msgid "Contain Center" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "" +"Maps short touches (less than 0.2s) to a touchpad action. Dualsense uses " +"a physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "" +"Maps long touches (more than 2s) to a touchpad action. Dualsense uses a " +"physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: System +#. Field: hint +msgid "" +"Basic display settings. Brightness (and framerate TBD). This pane is " +"meant to replace " +msgstr "" + +#. Setting: Brightness +#. Field: title +msgid "Brightness" +msgstr "" + +#. Setting: Brightness +#. Field: hint +msgid "" +"Sets the brightness level of a display. Only one display is supported and" +" it is the one that was read." +msgstr "" + diff --git a/i18n/template.pot b/i18n/template.pot new file mode 100644 index 00000000..49185ac2 --- /dev/null +++ b/i18n/template.pot @@ -0,0 +1,788 @@ +# Translations template for PROJECT. +# Copyright (C) 2024 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-02-07 17:22+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.14.0\n" + +#. Section Name for: system +#. Setting: System +#. Field: title +msgid "System" +msgstr "" + +#. Section Name for: tdp +msgid "TDP" +msgstr "" + +#. Section Name for: controller +#. Setting: Controller +#. Field: title +msgid "Controller" +msgstr "" + +#. Section Name for: hhd +msgid "About" +msgstr "" + +#. Setting: Version Information +#. Field: title +msgid "Version Information" +msgstr "" + +#. Setting: Version Information +#. Field: hint +msgid "Handheld Daemon version manager (local install only)." +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: title +msgid "Decky Plugin Version" +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: hint +msgid "Displays the Handheld Daemon Decky plugin version." +msgstr "" + +#. Setting: WARNING: This button will be removed soon, update Decky now! +#. Field: title +msgid "WARNING: This button will be removed soon, update Decky now!" +msgstr "" + +#. Setting: Update Decky +#. Field: title +msgid "Update Decky" +msgstr "" + +#. Setting: Update Decky +#. Field: hint +msgid "Updates the Decky plugin to the latest release." +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: title +msgid "Handheld Daemon Version" +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: hint +msgid "Displays the Handheld Daemon version." +msgstr "" + +#. Setting: Update (Stable) +#. Field: title +msgid "Update (Stable)" +msgstr "" + +#. Setting: Update (Stable) +#. Field: hint +msgid "Updates to the latest version from PyPi (local install only)." +msgstr "" + +#. Setting: Update (Unstable) +#. Field: title +msgid "Update (Unstable)" +msgstr "" + +#. Setting: Update (Unstable) +#. Field: hint +msgid "Updates to the master branch from git (local install only)." +msgstr "" + +#. Setting: API Configuration +#. Field: title +msgid "API Configuration" +msgstr "" + +#. Setting: API Configuration +#. Field: hint +msgid "Settings for configuring the http endpoint of HHD." +msgstr "" + +#. Setting: Enable the API +#. Field: title +msgid "Enable the API" +msgstr "" + +#. Setting: Enable the API +#. Field: hint +msgid "Enables the API of Handheld Daemon (required for decky and ui)." +msgstr "" + +#. Setting: API Port +#. Field: title +msgid "API Port" +msgstr "" + +#. Setting: API Port +#. Field: hint +msgid "Which port should the API be on?" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: title +msgid "Limit Access to localhost" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: hint +msgid "Sets the API target to '127.0.0.1' instead '0.0.0.0'." +msgstr "" + +#. Setting: Use Security token +#. Field: title +msgid "Use Security token" +msgstr "" + +#. Setting: Use Security token +#. Field: hint +msgid "" +"Generates a security token in `~/.config/hhd/token` that is required for " +"authentication." +msgstr "" + +#. Setting: Handheld Controller +#. Field: title +msgid "Handheld Controller" +msgstr "" + +#. Setting: Handheld Controller +#. Field: hint +msgid "Allows for configuring your handheld's controller to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: title +msgid "Controller Emulation" +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse your device's features." +msgstr "" + +#. Setting: Motion Support +#. Field: title +msgid "Motion Support" +msgstr "" + +#. Setting: Motion Support +#. Field: hint +msgid "Enable gyroscope/accelerometer (IMU) support (.3% background CPU use)" +msgstr "" + +#. Setting: Motion Hz +#. Field: title +msgid "Motion Hz" +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: title +msgid "Nintendo Mode (A-B Swap)" +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: hint +msgid "Swaps A with B and X with Y." +msgstr "" + +#. Setting: Map share buttom to QAM. +#. Field: title +msgid "Map share buttom to QAM." +msgstr "" + +#. Setting: Debug +#. Field: title +msgid "Debug" +msgstr "" + +#. Setting: Debug +#. Field: hint +msgid "" +"Output controller events to the console (high CPU use) and raises " +"exceptions (HHD will crash on errors)." +msgstr "" + +#. Setting: GPD Controller +#. Field: title +msgid "GPD Controller" +msgstr "" + +#. Setting: GPD Controller +#. Field: hint +msgid "Allows for configuring the gpd win controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse gpd features." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Field: title +msgid "Map L4/R4 to QAM." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: disabled +#. Setting: Swap Legion with Start/Select +#. Setting: Disabled +#. Field: title +#. Setting: Short Action +#. Setting: Hold Action +msgid "Disabled" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: l4 +msgid "L4" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: r4 +msgid "R4" +msgstr "" + +#. Setting: Legion Controllers +#. Field: title +msgid "Legion Controllers" +msgstr "" + +#. Setting: Legion Controllers +#. Field: hint +msgid "" +"Allows for configuring the Legion controllers using the built in firmware" +" commands and enabling emulation modes for various controller types." +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: title +msgid "Emulation Mode (X-Input)" +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: hint +msgid "" +"Emulate different controller types when the Legion Controllers are in " +"X-Input mode." +msgstr "" + +#. Setting: Gyroscope +#. Field: title +msgid "Gyroscope" +msgstr "" + +#. Setting: Gyroscope +#. Field: hint +msgid "Enables gyroscope support (.3% background CPU use)" +msgstr "" + +#. Setting: Accelerometer +#. Field: title +msgid "Accelerometer" +msgstr "" + +#. Setting: Accelerometer +#. Field: hint +msgid "" +"Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; " +"if someone asks it will be fixed)." +msgstr "" + +#. Setting: Gyro Hz +#. Field: title +msgid "Gyro Hz" +msgstr "" + +#. Setting: Gyro Hz +#. Field: hint +msgid "" +"Adds polling to the legion go gyroscope, to fix the low polling rate " +"(required for gyroscope support). Set to 0 to disable. Due to hardware " +"limitations, there is a marginal difference above 100hz." +msgstr "" + +#. Setting: Gyro Scale +#. Field: title +msgid "Gyro Scale" +msgstr "" + +#. Setting: Gyro Scale +#. Field: hint +msgid "" +"Applies a scaling factor to the legion go gyroscope (since it is " +"misconfigured by the driver). Try different values to see what works " +"best. Low values cause a deadzone and high values will clip when moving " +"the Go abruptly." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: title +msgid "Swap Legion with Start/Select" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: hint +msgid "Swaps the legion buttons with start select." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_start +msgid "Left is Start" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_select +msgid "Left is Select" +msgstr "" + +#. Setting: M2 As Mute +#. Field: title +msgid "M2 As Mute" +msgstr "" + +#. Setting: M2 As Mute +#. Field: hint +msgid "" +"Maps the M2 to the mute button on Dualsense and the HAPPY_TRIGGER_20 on " +"Xbox." +msgstr "" + +#. Setting: Hold Select to Reboot +#. Field: title +msgid "Hold Select to Reboot" +msgstr "" + +#. Setting: Legion R to QAM +#. Field: title +msgid "Legion R to QAM" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: title +msgid "Enable Shortcuts Controller" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: hint +msgid "" +"When in other modes (dinput, dual dinput, and fps), enable a shortcuts " +"controller to restore Guide, QAM, and shortcut functionality." +msgstr "" + +#. Setting: Ally Controller +#. Field: title +msgid "Ally Controller" +msgstr "" + +#. Setting: Ally Controller +#. Field: hint +msgid "Allows for configuring the ROG Ally controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse ROG features." +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. 1600 requires an IMU patch. " +"Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Led Brightness +#. Field: title +msgid "Led Brightness" +msgstr "" + +#. Setting: Led Brightness +#. Field: hint +msgid "" +"When LEDs are configured, set their brightness. High does not work below " +"30% brightness." +msgstr "" + +#. Setting: Led Brightness +#. Option: False +msgid "Off" +msgstr "" + +#. Setting: Led Brightness +#. Option: low +msgid "Low" +msgstr "" + +#. Setting: Led Brightness +#. Option: medium +msgid "Medium" +msgstr "" + +#. Setting: Led Brightness +#. Option: high +msgid "High" +msgstr "" + +#. Setting: Map Armory to QAM. +#. Field: title +msgid "Map Armory to QAM." +msgstr "" + +#. Setting: Motion Axis +#. Field: title +msgid "Motion Axis" +msgstr "" + +#. Setting: Default +#. Field: title +msgid "Default" +msgstr "" + +#. Setting: Default +#. Field: hint +msgid "The default axis loaded for this device." +msgstr "" + +#. Setting: Override +#. Field: title +msgid "Override" +msgstr "" + +#. Setting: Override +#. Field: hint +msgid "" +"Remap and invert the axis of your device. If the axis of your device are " +"wrong, please submit a picture or a text version of the following." +msgstr "" + +#. Setting: Manufacturer +#. Field: title +msgid "Manufacturer" +msgstr "" + +#. Setting: Product +#. Field: title +msgid "Product" +msgstr "" + +#. Setting: Axis X +#. Field: title +msgid "Axis X" +msgstr "" + +#. Setting: Axis X +#. Option: x +#. Setting: Axis Y +#. Setting: Axis Z +msgid "X" +msgstr "" + +#. Setting: Axis X +#. Option: y +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Y" +msgstr "" + +#. Setting: Axis X +#. Option: z +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Z" +msgstr "" + +#. Setting: Invert X +#. Field: title +msgid "Invert X" +msgstr "" + +#. Setting: Axis Y +#. Field: title +msgid "Axis Y" +msgstr "" + +#. Setting: Invert Y +#. Field: title +msgid "Invert Y" +msgstr "" + +#. Setting: Axis Z +#. Field: title +msgid "Axis Z" +msgstr "" + +#. Setting: Invert Z +#. Field: title +msgid "Invert Z" +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "Does not modify the default controller." +msgstr "" + +#. Setting: Xbox +#. Field: title +msgid "Xbox" +msgstr "" + +#. Setting: Xbox +#. Field: hint +msgid "" +"Creates a virtual `Handheld Daemon Controller` that can be used normally " +"in apps. Back buttons are supported but steam will not detect them. If " +"Gyroscope or Accelerometer are enabled, a Motion device will be created " +"as well (experimental; works in Dolphin)." +msgstr "" + +#. Setting: Dualsense +#. Field: title +msgid "Dualsense" +msgstr "" + +#. Setting: Dualsense +#. Field: hint +msgid "" +"Emulates the Dualsense Sony controller from the Playstation 5. Since this" +" controller does not have paddles, the paddles are mapped to left and " +"right touchpad clicks." +msgstr "" + +#. Setting: LED Support +#. Field: title +msgid "LED Support" +msgstr "" + +#. Setting: LED Support +#. Field: hint +msgid "" +"Passes through the LEDs to the controller, which allows games to control " +"them." +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: title +msgid "Gyro to Mouse Fix" +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: hint +msgid "" +"In the latest steam update, `Gyro to Mouse [BETA]` misbehaves if a report" +" is sent without a new imu timestamp. This option makes it so reports are" +" sent only when there is a new gyro timestamp, effectively limiting the " +"responsiveness of the controller to that of the IMU (e.g., for Legion Go " +"100hz instead of 400hz). If the IMU is not working, this setting will " +"break the controller." +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: title +msgid "Bluetooth Mode" +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: hint +msgid "" +"Emulates the controller in bluetooth mode instead of USB mode. This is " +"the default as it causes less issues with how apps interact with the " +"controller. However, using USB mode can improve LED support (?) in some " +"games. Test and report back!" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: title +msgid "Dualsense Edge" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: hint +msgid "" +"Emulates the expensive Dualsense Sony controller which enables paddle " +"support. The edge controller is a bit obscure, so some games might not " +"support it correctly." +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: title +msgid "Touchpad Emulation" +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: hint +msgid "" +"Use an emulated touchpad. Part of the controller if it is supported " +"(e.g., Dualsense) or a virtual one if not." +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "" +"Does not modify the touchpad. Short + holding presses will not work " +"within gamescope." +msgstr "" + +#. Setting: Virtual +#. Field: title +msgid "Virtual" +msgstr "" + +#. Setting: Virtual +#. Field: hint +msgid "" +"Adds an emulated touchpad. This touchpad is meant to be for desktop use " +"and has left, right click support by default, within gamescope and " +"outside of it, regardless of the \"Tap to Click\" setting." +msgstr "" + +#. Setting: Short Action +#. Field: title +msgid "Short Action" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "Maps short touches (less than 0.2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Short Action +#. Option: left_click +#. Setting: Hold Action +msgid "Left Click" +msgstr "" + +#. Setting: Short Action +#. Option: right_click +#. Setting: Hold Action +msgid "Right Click" +msgstr "" + +#. Setting: Hold Action +#. Field: title +msgid "Hold Action" +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "Maps long touches (more than 2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Controller +#. Field: hint +msgid "" +"Uses the touchpad of the emulated controller (if it exists). Otherwise, " +"the touchpad remains unmapped (will still show up in the system). Meant " +"to be used as steam input, so short press is unassigned by default and " +"long press simulates trackpad click." +msgstr "" + +#. Setting: Correction Type +#. Field: title +msgid "Correction Type" +msgstr "" + +#. Setting: Correction Type +#. Field: hint +msgid "" +"The legion touchpad is square, whereas the DS5 one is rectangular. " +"Therefore, it needs to be corrected. \"Contain\" maintain the whole DS5 " +"touchpad and part of the Legion one is unused. \"Crop\" uses the full " +"legion touchpad, and limits the area of the DS5. \"Stretch\" uses both " +"fully (distorted). \"Crop End\" enables use in steam input as the right " +"touchpad." +msgstr "" + +#. Setting: Correction Type +#. Option: stretch +msgid "Stretch" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_center +msgid "Crop Center" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_start +msgid "Crop Start" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_end +msgid "Crop End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_start +msgid "Contain Start" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_end +msgid "Contain End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_center +msgid "Contain Center" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "" +"Maps short touches (less than 0.2s) to a touchpad action. Dualsense uses " +"a physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "" +"Maps long touches (more than 2s) to a touchpad action. Dualsense uses a " +"physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: System +#. Field: hint +msgid "" +"Basic display settings. Brightness (and framerate TBD). This pane is " +"meant to replace " +msgstr "" + +#. Setting: Brightness +#. Field: title +msgid "Brightness" +msgstr "" + +#. Setting: Brightness +#. Field: hint +msgid "" +"Sets the brightness level of a display. Only one display is supported and" +" it is the one that was read." +msgstr "" + diff --git a/i18n/zh_cn/LC_MESSAGES/hhd.po b/i18n/zh_cn/LC_MESSAGES/hhd.po new file mode 100644 index 00000000..e34b8e17 --- /dev/null +++ b/i18n/zh_cn/LC_MESSAGES/hhd.po @@ -0,0 +1,789 @@ +# Chinese (Simplified, China) translations for PROJECT. +# Copyright (C) 2024 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-02-07 17:22+0100\n" +"PO-Revision-Date: 2024-02-07 17:27+0100\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans_CN\n" +"Language-Team: zh_Hans_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.14.0\n" + +#. Section Name for: system +#. Setting: System +#. Field: title +msgid "System" +msgstr "" + +#. Section Name for: tdp +msgid "TDP" +msgstr "" + +#. Section Name for: controller +#. Setting: Controller +#. Field: title +msgid "Controller" +msgstr "" + +#. Section Name for: hhd +msgid "About" +msgstr "" + +#. Setting: Version Information +#. Field: title +msgid "Version Information" +msgstr "" + +#. Setting: Version Information +#. Field: hint +msgid "Handheld Daemon version manager (local install only)." +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: title +msgid "Decky Plugin Version" +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: hint +msgid "Displays the Handheld Daemon Decky plugin version." +msgstr "" + +#. Setting: WARNING: This button will be removed soon, update Decky now! +#. Field: title +msgid "WARNING: This button will be removed soon, update Decky now!" +msgstr "" + +#. Setting: Update Decky +#. Field: title +msgid "Update Decky" +msgstr "" + +#. Setting: Update Decky +#. Field: hint +msgid "Updates the Decky plugin to the latest release." +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: title +msgid "Handheld Daemon Version" +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: hint +msgid "Displays the Handheld Daemon version." +msgstr "" + +#. Setting: Update (Stable) +#. Field: title +msgid "Update (Stable)" +msgstr "" + +#. Setting: Update (Stable) +#. Field: hint +msgid "Updates to the latest version from PyPi (local install only)." +msgstr "" + +#. Setting: Update (Unstable) +#. Field: title +msgid "Update (Unstable)" +msgstr "" + +#. Setting: Update (Unstable) +#. Field: hint +msgid "Updates to the master branch from git (local install only)." +msgstr "" + +#. Setting: API Configuration +#. Field: title +msgid "API Configuration" +msgstr "" + +#. Setting: API Configuration +#. Field: hint +msgid "Settings for configuring the http endpoint of HHD." +msgstr "" + +#. Setting: Enable the API +#. Field: title +msgid "Enable the API" +msgstr "" + +#. Setting: Enable the API +#. Field: hint +msgid "Enables the API of Handheld Daemon (required for decky and ui)." +msgstr "" + +#. Setting: API Port +#. Field: title +msgid "API Port" +msgstr "" + +#. Setting: API Port +#. Field: hint +msgid "Which port should the API be on?" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: title +msgid "Limit Access to localhost" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: hint +msgid "Sets the API target to '127.0.0.1' instead '0.0.0.0'." +msgstr "" + +#. Setting: Use Security token +#. Field: title +msgid "Use Security token" +msgstr "" + +#. Setting: Use Security token +#. Field: hint +msgid "" +"Generates a security token in `~/.config/hhd/token` that is required for " +"authentication." +msgstr "" + +#. Setting: Handheld Controller +#. Field: title +msgid "Handheld Controller" +msgstr "" + +#. Setting: Handheld Controller +#. Field: hint +msgid "Allows for configuring your handheld's controller to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: title +msgid "Controller Emulation" +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse your device's features." +msgstr "" + +#. Setting: Motion Support +#. Field: title +msgid "Motion Support" +msgstr "" + +#. Setting: Motion Support +#. Field: hint +msgid "Enable gyroscope/accelerometer (IMU) support (.3% background CPU use)" +msgstr "" + +#. Setting: Motion Hz +#. Field: title +msgid "Motion Hz" +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: title +msgid "Nintendo Mode (A-B Swap)" +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: hint +msgid "Swaps A with B and X with Y." +msgstr "" + +#. Setting: Map share buttom to QAM. +#. Field: title +msgid "Map share buttom to QAM." +msgstr "" + +#. Setting: Debug +#. Field: title +msgid "Debug" +msgstr "" + +#. Setting: Debug +#. Field: hint +msgid "" +"Output controller events to the console (high CPU use) and raises " +"exceptions (HHD will crash on errors)." +msgstr "" + +#. Setting: GPD Controller +#. Field: title +msgid "GPD Controller" +msgstr "" + +#. Setting: GPD Controller +#. Field: hint +msgid "Allows for configuring the gpd win controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse gpd features." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Field: title +msgid "Map L4/R4 to QAM." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: disabled +#. Setting: Swap Legion with Start/Select +#. Setting: Disabled +#. Field: title +#. Setting: Short Action +#. Setting: Hold Action +msgid "Disabled" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: l4 +msgid "L4" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: r4 +msgid "R4" +msgstr "" + +#. Setting: Legion Controllers +#. Field: title +msgid "Legion Controllers" +msgstr "" + +#. Setting: Legion Controllers +#. Field: hint +msgid "" +"Allows for configuring the Legion controllers using the built in firmware" +" commands and enabling emulation modes for various controller types." +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: title +msgid "Emulation Mode (X-Input)" +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: hint +msgid "" +"Emulate different controller types when the Legion Controllers are in " +"X-Input mode." +msgstr "" + +#. Setting: Gyroscope +#. Field: title +msgid "Gyroscope" +msgstr "" + +#. Setting: Gyroscope +#. Field: hint +msgid "Enables gyroscope support (.3% background CPU use)" +msgstr "" + +#. Setting: Accelerometer +#. Field: title +msgid "Accelerometer" +msgstr "" + +#. Setting: Accelerometer +#. Field: hint +msgid "" +"Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; " +"if someone asks it will be fixed)." +msgstr "" + +#. Setting: Gyro Hz +#. Field: title +msgid "Gyro Hz" +msgstr "" + +#. Setting: Gyro Hz +#. Field: hint +msgid "" +"Adds polling to the legion go gyroscope, to fix the low polling rate " +"(required for gyroscope support). Set to 0 to disable. Due to hardware " +"limitations, there is a marginal difference above 100hz." +msgstr "" + +#. Setting: Gyro Scale +#. Field: title +msgid "Gyro Scale" +msgstr "" + +#. Setting: Gyro Scale +#. Field: hint +msgid "" +"Applies a scaling factor to the legion go gyroscope (since it is " +"misconfigured by the driver). Try different values to see what works " +"best. Low values cause a deadzone and high values will clip when moving " +"the Go abruptly." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: title +msgid "Swap Legion with Start/Select" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: hint +msgid "Swaps the legion buttons with start select." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_start +msgid "Left is Start" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_select +msgid "Left is Select" +msgstr "" + +#. Setting: M2 As Mute +#. Field: title +msgid "M2 As Mute" +msgstr "" + +#. Setting: M2 As Mute +#. Field: hint +msgid "" +"Maps the M2 to the mute button on Dualsense and the HAPPY_TRIGGER_20 on " +"Xbox." +msgstr "" + +#. Setting: Hold Select to Reboot +#. Field: title +msgid "Hold Select to Reboot" +msgstr "" + +#. Setting: Legion R to QAM +#. Field: title +msgid "Legion R to QAM" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: title +msgid "Enable Shortcuts Controller" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: hint +msgid "" +"When in other modes (dinput, dual dinput, and fps), enable a shortcuts " +"controller to restore Guide, QAM, and shortcut functionality." +msgstr "" + +#. Setting: Ally Controller +#. Field: title +msgid "Ally Controller" +msgstr "" + +#. Setting: Ally Controller +#. Field: hint +msgid "Allows for configuring the ROG Ally controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse ROG features." +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. 1600 requires an IMU patch. " +"Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Led Brightness +#. Field: title +msgid "Led Brightness" +msgstr "" + +#. Setting: Led Brightness +#. Field: hint +msgid "" +"When LEDs are configured, set their brightness. High does not work below " +"30% brightness." +msgstr "" + +#. Setting: Led Brightness +#. Option: False +msgid "Off" +msgstr "" + +#. Setting: Led Brightness +#. Option: low +msgid "Low" +msgstr "" + +#. Setting: Led Brightness +#. Option: medium +msgid "Medium" +msgstr "" + +#. Setting: Led Brightness +#. Option: high +msgid "High" +msgstr "" + +#. Setting: Map Armory to QAM. +#. Field: title +msgid "Map Armory to QAM." +msgstr "" + +#. Setting: Motion Axis +#. Field: title +msgid "Motion Axis" +msgstr "" + +#. Setting: Default +#. Field: title +msgid "Default" +msgstr "" + +#. Setting: Default +#. Field: hint +msgid "The default axis loaded for this device." +msgstr "" + +#. Setting: Override +#. Field: title +msgid "Override" +msgstr "" + +#. Setting: Override +#. Field: hint +msgid "" +"Remap and invert the axis of your device. If the axis of your device are " +"wrong, please submit a picture or a text version of the following." +msgstr "" + +#. Setting: Manufacturer +#. Field: title +msgid "Manufacturer" +msgstr "" + +#. Setting: Product +#. Field: title +msgid "Product" +msgstr "" + +#. Setting: Axis X +#. Field: title +msgid "Axis X" +msgstr "" + +#. Setting: Axis X +#. Option: x +#. Setting: Axis Y +#. Setting: Axis Z +msgid "X" +msgstr "" + +#. Setting: Axis X +#. Option: y +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Y" +msgstr "" + +#. Setting: Axis X +#. Option: z +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Z" +msgstr "" + +#. Setting: Invert X +#. Field: title +msgid "Invert X" +msgstr "" + +#. Setting: Axis Y +#. Field: title +msgid "Axis Y" +msgstr "" + +#. Setting: Invert Y +#. Field: title +msgid "Invert Y" +msgstr "" + +#. Setting: Axis Z +#. Field: title +msgid "Axis Z" +msgstr "" + +#. Setting: Invert Z +#. Field: title +msgid "Invert Z" +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "Does not modify the default controller." +msgstr "" + +#. Setting: Xbox +#. Field: title +msgid "Xbox" +msgstr "" + +#. Setting: Xbox +#. Field: hint +msgid "" +"Creates a virtual `Handheld Daemon Controller` that can be used normally " +"in apps. Back buttons are supported but steam will not detect them. If " +"Gyroscope or Accelerometer are enabled, a Motion device will be created " +"as well (experimental; works in Dolphin)." +msgstr "" + +#. Setting: Dualsense +#. Field: title +msgid "Dualsense" +msgstr "" + +#. Setting: Dualsense +#. Field: hint +msgid "" +"Emulates the Dualsense Sony controller from the Playstation 5. Since this" +" controller does not have paddles, the paddles are mapped to left and " +"right touchpad clicks." +msgstr "" + +#. Setting: LED Support +#. Field: title +msgid "LED Support" +msgstr "" + +#. Setting: LED Support +#. Field: hint +msgid "" +"Passes through the LEDs to the controller, which allows games to control " +"them." +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: title +msgid "Gyro to Mouse Fix" +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: hint +msgid "" +"In the latest steam update, `Gyro to Mouse [BETA]` misbehaves if a report" +" is sent without a new imu timestamp. This option makes it so reports are" +" sent only when there is a new gyro timestamp, effectively limiting the " +"responsiveness of the controller to that of the IMU (e.g., for Legion Go " +"100hz instead of 400hz). If the IMU is not working, this setting will " +"break the controller." +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: title +msgid "Bluetooth Mode" +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: hint +msgid "" +"Emulates the controller in bluetooth mode instead of USB mode. This is " +"the default as it causes less issues with how apps interact with the " +"controller. However, using USB mode can improve LED support (?) in some " +"games. Test and report back!" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: title +msgid "Dualsense Edge" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: hint +msgid "" +"Emulates the expensive Dualsense Sony controller which enables paddle " +"support. The edge controller is a bit obscure, so some games might not " +"support it correctly." +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: title +msgid "Touchpad Emulation" +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: hint +msgid "" +"Use an emulated touchpad. Part of the controller if it is supported " +"(e.g., Dualsense) or a virtual one if not." +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "" +"Does not modify the touchpad. Short + holding presses will not work " +"within gamescope." +msgstr "" + +#. Setting: Virtual +#. Field: title +msgid "Virtual" +msgstr "" + +#. Setting: Virtual +#. Field: hint +msgid "" +"Adds an emulated touchpad. This touchpad is meant to be for desktop use " +"and has left, right click support by default, within gamescope and " +"outside of it, regardless of the \"Tap to Click\" setting." +msgstr "" + +#. Setting: Short Action +#. Field: title +msgid "Short Action" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "Maps short touches (less than 0.2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Short Action +#. Option: left_click +#. Setting: Hold Action +msgid "Left Click" +msgstr "" + +#. Setting: Short Action +#. Option: right_click +#. Setting: Hold Action +msgid "Right Click" +msgstr "" + +#. Setting: Hold Action +#. Field: title +msgid "Hold Action" +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "Maps long touches (more than 2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Controller +#. Field: hint +msgid "" +"Uses the touchpad of the emulated controller (if it exists). Otherwise, " +"the touchpad remains unmapped (will still show up in the system). Meant " +"to be used as steam input, so short press is unassigned by default and " +"long press simulates trackpad click." +msgstr "" + +#. Setting: Correction Type +#. Field: title +msgid "Correction Type" +msgstr "" + +#. Setting: Correction Type +#. Field: hint +msgid "" +"The legion touchpad is square, whereas the DS5 one is rectangular. " +"Therefore, it needs to be corrected. \"Contain\" maintain the whole DS5 " +"touchpad and part of the Legion one is unused. \"Crop\" uses the full " +"legion touchpad, and limits the area of the DS5. \"Stretch\" uses both " +"fully (distorted). \"Crop End\" enables use in steam input as the right " +"touchpad." +msgstr "" + +#. Setting: Correction Type +#. Option: stretch +msgid "Stretch" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_center +msgid "Crop Center" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_start +msgid "Crop Start" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_end +msgid "Crop End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_start +msgid "Contain Start" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_end +msgid "Contain End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_center +msgid "Contain Center" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "" +"Maps short touches (less than 0.2s) to a touchpad action. Dualsense uses " +"a physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "" +"Maps long touches (more than 2s) to a touchpad action. Dualsense uses a " +"physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: System +#. Field: hint +msgid "" +"Basic display settings. Brightness (and framerate TBD). This pane is " +"meant to replace " +msgstr "" + +#. Setting: Brightness +#. Field: title +msgid "Brightness" +msgstr "" + +#. Setting: Brightness +#. Field: hint +msgid "" +"Sets the brightness level of a display. Only one display is supported and" +" it is the one that was read." +msgstr "" + diff --git a/locale.pot b/locale.pot new file mode 100644 index 00000000..a3ee0bec --- /dev/null +++ b/locale.pot @@ -0,0 +1,19 @@ +# Translations template for PROJECT. +# Copyright (C) 2024 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-02-07 14:43+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.14.0\n" + diff --git a/pyproject.toml b/pyproject.toml index 83a2b078..c1793327 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,10 +38,15 @@ generic = "hhd.device.generic:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" +[project.entry-points."hhd.i18n"] + +[project.entry-points."babel.extractors"] +hhd_yaml = "hhd.contrib.i18n:extract_hhd_yaml" + [build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] # list of folders that contain the packages (["."] by default) -include = ["hhd*"] # package names should match these glob patterns (["*"] by default) +include = ["hhd*"] # package names should match these glob patterns (["*"] by default) \ No newline at end of file diff --git a/readme.md b/readme.md index 5dde1866..f36f111c 100644 --- a/readme.md +++ b/readme.md @@ -463,6 +463,30 @@ text (e.g., x is k, y is l inverted, z is j) and open an issue. The override setting also displays the make and model of your device, which are required to add the mappings to Handheld Daemon. +### Localizing Handheld Daemon +You can find `pot` and `po` files for Handheld Daemon under the `i18n` directory. +You can clone/download this repository and open the `./i18n` directory. +Then, just copy the `template.pot` file into `/LC_MESSAGES/messages.po` +and begin translating with your favorite text editor, or by using +tool such as [Lokalize](https://apps.kde.org/lokalize/). + +The files can be updated for a new version with the following commands: +```bash +# Prepare dev environment +git clone https://github.com/hhd-dev/hhd +cd hhd +python -m venv venv +pip install babel +pip install -e . + +# Generate POT file +pybabel extract --no-location -F i18n/babel.cfg -o i18n/template.pot src/hhd +# Update current pot files +pybabel update -i i18n/template.pot -d i18n -D hhd +# Generate PO files for your language (essentially a copy with a header change) +pybabel init -i i18n/template.pot -l el_gr -d i18n -D hhd +``` + ### Creating a Local Repo version Either follow `Automatic Install` or `Manual Local Install` to install the base rules. Then, clone, optionally install the userspace rules, and run. diff --git a/src/hhd/contrib/i18n.py b/src/hhd/contrib/i18n.py new file mode 100644 index 00000000..c54286f4 --- /dev/null +++ b/src/hhd/contrib/i18n.py @@ -0,0 +1,59 @@ +from typing import Sequence, Mapping, Any + +KEYWORDS = ["title", "hint", "options"] + + +def parse(data: Any, names: Sequence[str] = []): + if not isinstance(data, Mapping): + return [] + + if "sections" in data and isinstance(data["sections"], Mapping): + return [ + (0, None, v, [f"Section Name for: {k}"]) + for k, v in data["sections"].items() + ] + + out = [] + fun_name = ".".join(names) + comment = f"Setting: '{fun_name}'" + messages = [] + if "title" in data: + comment = f"Setting: {data['title']}" + messages.append(("Field: title", data["title"])) + if "hint" in data: + messages.append(("Field: hint", data["hint"])) + + if "options" in data and isinstance(data["options"], Mapping): + messages.extend([(f"Option: {k}", v) for k, v in data["options"].items()]) + + for field, msg in messages: + out.append((0, None, msg, [comment, field])) + + for k, v in data.items(): + out.extend(parse(v, [*names, k] if k not in ("modes", "children") else names)) + + return out + + +def extract_hhd_yaml( + fileobj, + keywords: Sequence[str] = [], + comment_tags: Sequence[str] = [], + options: Mapping[str, Any] = {}, +): + """Extract messages from XXX files. + + :param fileobj: the file-like object the messages should be extracted + from + :param keywords: a list of keywords (i.e. function names) that should + be recognized as translation functions + :param comment_tags: a list of translator tags to search for and + include in the results + :param options: a dictionary of additional options (optional) + :return: an iterator over ``(lineno, funcname, message, comments)`` + tuples + :rtype: ``iterator`` + """ + import yaml + + return parse(yaml.safe_load(fileobj)) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 46aefe0a..87df173a 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -7,7 +7,7 @@ from typing import Any, Mapping from urllib.parse import parse_qs, urlparse -from hhd.plugins import Config, Emitter, HHDSettings, get_relative_fn +from hhd.plugins import Config, Emitter, HHDSettings, get_relative_fn, load_relative_yaml logger = logging.getLogger(__name__) @@ -43,6 +43,7 @@ def sanitize_fn(n: str): ) _control_char_table[ord("\\")] = r"\\" +SECTIONS = load_relative_yaml('../sections.yml')['sections'] def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: try: @@ -258,14 +259,7 @@ def v1_endpoint(self, content: Any | None): case "version": self.send_json({"version": 2}) case "sections": - self.send_json( - { - "system": "System", - "tdp": "TDP", - "controller": "Controller", - "hhd": "About", - } - ) + self.send_json(SECTIONS) case other: self.send_not_found(f"Command '{other}' not supported.") diff --git a/src/hhd/sections.yml b/src/hhd/sections.yml new file mode 100644 index 00000000..72f84e99 --- /dev/null +++ b/src/hhd/sections.yml @@ -0,0 +1,5 @@ +sections: + system: System + tdp: TDP + controller: Controller + hhd: About From 8d419eae3657083df9dcd3e189080d22f27b04b6 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 7 Feb 2024 22:43:38 +0100 Subject: [PATCH 0445/1497] add spanish --- i18n/es_mx/LC_MESSAGES/hhd.po | 789 ++++++++++++++++++++++++++++++++++ 1 file changed, 789 insertions(+) create mode 100644 i18n/es_mx/LC_MESSAGES/hhd.po diff --git a/i18n/es_mx/LC_MESSAGES/hhd.po b/i18n/es_mx/LC_MESSAGES/hhd.po new file mode 100644 index 00000000..fa019b09 --- /dev/null +++ b/i18n/es_mx/LC_MESSAGES/hhd.po @@ -0,0 +1,789 @@ +# Spanish (Mexico) translations for PROJECT. +# Copyright (C) 2024 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-02-07 17:22+0100\n" +"PO-Revision-Date: 2024-02-07 22:43+0100\n" +"Last-Translator: FULL NAME \n" +"Language: es_MX\n" +"Language-Team: es_MX \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.14.0\n" + +#. Section Name for: system +#. Setting: System +#. Field: title +msgid "System" +msgstr "" + +#. Section Name for: tdp +msgid "TDP" +msgstr "" + +#. Section Name for: controller +#. Setting: Controller +#. Field: title +msgid "Controller" +msgstr "" + +#. Section Name for: hhd +msgid "About" +msgstr "" + +#. Setting: Version Information +#. Field: title +msgid "Version Information" +msgstr "" + +#. Setting: Version Information +#. Field: hint +msgid "Handheld Daemon version manager (local install only)." +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: title +msgid "Decky Plugin Version" +msgstr "" + +#. Setting: Decky Plugin Version +#. Field: hint +msgid "Displays the Handheld Daemon Decky plugin version." +msgstr "" + +#. Setting: WARNING: This button will be removed soon, update Decky now! +#. Field: title +msgid "WARNING: This button will be removed soon, update Decky now!" +msgstr "" + +#. Setting: Update Decky +#. Field: title +msgid "Update Decky" +msgstr "" + +#. Setting: Update Decky +#. Field: hint +msgid "Updates the Decky plugin to the latest release." +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: title +msgid "Handheld Daemon Version" +msgstr "" + +#. Setting: Handheld Daemon Version +#. Field: hint +msgid "Displays the Handheld Daemon version." +msgstr "" + +#. Setting: Update (Stable) +#. Field: title +msgid "Update (Stable)" +msgstr "" + +#. Setting: Update (Stable) +#. Field: hint +msgid "Updates to the latest version from PyPi (local install only)." +msgstr "" + +#. Setting: Update (Unstable) +#. Field: title +msgid "Update (Unstable)" +msgstr "" + +#. Setting: Update (Unstable) +#. Field: hint +msgid "Updates to the master branch from git (local install only)." +msgstr "" + +#. Setting: API Configuration +#. Field: title +msgid "API Configuration" +msgstr "" + +#. Setting: API Configuration +#. Field: hint +msgid "Settings for configuring the http endpoint of HHD." +msgstr "" + +#. Setting: Enable the API +#. Field: title +msgid "Enable the API" +msgstr "" + +#. Setting: Enable the API +#. Field: hint +msgid "Enables the API of Handheld Daemon (required for decky and ui)." +msgstr "" + +#. Setting: API Port +#. Field: title +msgid "API Port" +msgstr "" + +#. Setting: API Port +#. Field: hint +msgid "Which port should the API be on?" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: title +msgid "Limit Access to localhost" +msgstr "" + +#. Setting: Limit Access to localhost +#. Field: hint +msgid "Sets the API target to '127.0.0.1' instead '0.0.0.0'." +msgstr "" + +#. Setting: Use Security token +#. Field: title +msgid "Use Security token" +msgstr "" + +#. Setting: Use Security token +#. Field: hint +msgid "" +"Generates a security token in `~/.config/hhd/token` that is required for " +"authentication." +msgstr "" + +#. Setting: Handheld Controller +#. Field: title +msgid "Handheld Controller" +msgstr "" + +#. Setting: Handheld Controller +#. Field: hint +msgid "Allows for configuring your handheld's controller to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: title +msgid "Controller Emulation" +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse your device's features." +msgstr "" + +#. Setting: Motion Support +#. Field: title +msgid "Motion Support" +msgstr "" + +#. Setting: Motion Support +#. Field: hint +msgid "Enable gyroscope/accelerometer (IMU) support (.3% background CPU use)" +msgstr "" + +#. Setting: Motion Hz +#. Field: title +msgid "Motion Hz" +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: title +msgid "Nintendo Mode (A-B Swap)" +msgstr "" + +#. Setting: Nintendo Mode (A-B Swap) +#. Field: hint +msgid "Swaps A with B and X with Y." +msgstr "" + +#. Setting: Map share buttom to QAM. +#. Field: title +msgid "Map share buttom to QAM." +msgstr "" + +#. Setting: Debug +#. Field: title +msgid "Debug" +msgstr "" + +#. Setting: Debug +#. Field: hint +msgid "" +"Output controller events to the console (high CPU use) and raises " +"exceptions (HHD will crash on errors)." +msgstr "" + +#. Setting: GPD Controller +#. Field: title +msgid "GPD Controller" +msgstr "" + +#. Setting: GPD Controller +#. Field: hint +msgid "Allows for configuring the gpd win controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse gpd features." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Field: title +msgid "Map L4/R4 to QAM." +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: disabled +#. Setting: Swap Legion with Start/Select +#. Setting: Disabled +#. Field: title +#. Setting: Short Action +#. Setting: Hold Action +msgid "Disabled" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: l4 +msgid "L4" +msgstr "" + +#. Setting: Map L4/R4 to QAM. +#. Option: r4 +msgid "R4" +msgstr "" + +#. Setting: Legion Controllers +#. Field: title +msgid "Legion Controllers" +msgstr "" + +#. Setting: Legion Controllers +#. Field: hint +msgid "" +"Allows for configuring the Legion controllers using the built in firmware" +" commands and enabling emulation modes for various controller types." +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: title +msgid "Emulation Mode (X-Input)" +msgstr "" + +#. Setting: Emulation Mode (X-Input) +#. Field: hint +msgid "" +"Emulate different controller types when the Legion Controllers are in " +"X-Input mode." +msgstr "" + +#. Setting: Gyroscope +#. Field: title +msgid "Gyroscope" +msgstr "" + +#. Setting: Gyroscope +#. Field: hint +msgid "Enables gyroscope support (.3% background CPU use)" +msgstr "" + +#. Setting: Accelerometer +#. Field: title +msgid "Accelerometer" +msgstr "" + +#. Setting: Accelerometer +#. Field: hint +msgid "" +"Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; " +"if someone asks it will be fixed)." +msgstr "" + +#. Setting: Gyro Hz +#. Field: title +msgid "Gyro Hz" +msgstr "" + +#. Setting: Gyro Hz +#. Field: hint +msgid "" +"Adds polling to the legion go gyroscope, to fix the low polling rate " +"(required for gyroscope support). Set to 0 to disable. Due to hardware " +"limitations, there is a marginal difference above 100hz." +msgstr "" + +#. Setting: Gyro Scale +#. Field: title +msgid "Gyro Scale" +msgstr "" + +#. Setting: Gyro Scale +#. Field: hint +msgid "" +"Applies a scaling factor to the legion go gyroscope (since it is " +"misconfigured by the driver). Try different values to see what works " +"best. Low values cause a deadzone and high values will clip when moving " +"the Go abruptly." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: title +msgid "Swap Legion with Start/Select" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Field: hint +msgid "Swaps the legion buttons with start select." +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_start +msgid "Left is Start" +msgstr "" + +#. Setting: Swap Legion with Start/Select +#. Option: l_is_select +msgid "Left is Select" +msgstr "" + +#. Setting: M2 As Mute +#. Field: title +msgid "M2 As Mute" +msgstr "" + +#. Setting: M2 As Mute +#. Field: hint +msgid "" +"Maps the M2 to the mute button on Dualsense and the HAPPY_TRIGGER_20 on " +"Xbox." +msgstr "" + +#. Setting: Hold Select to Reboot +#. Field: title +msgid "Hold Select to Reboot" +msgstr "" + +#. Setting: Legion R to QAM +#. Field: title +msgid "Legion R to QAM" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: title +msgid "Enable Shortcuts Controller" +msgstr "" + +#. Setting: Enable Shortcuts Controller +#. Field: hint +msgid "" +"When in other modes (dinput, dual dinput, and fps), enable a shortcuts " +"controller to restore Guide, QAM, and shortcut functionality." +msgstr "" + +#. Setting: Ally Controller +#. Field: title +msgid "Ally Controller" +msgstr "" + +#. Setting: Ally Controller +#. Field: hint +msgid "Allows for configuring the ROG Ally controllers to a unified output." +msgstr "" + +#. Setting: Controller Emulation +#. Field: hint +msgid "Emulate different controller types to fuse ROG features." +msgstr "" + +#. Setting: Motion Hz +#. Field: hint +msgid "" +"Sets the sampling frequency for the IMU. 1600 requires an IMU patch. " +"Check " +"`/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`." +msgstr "" + +#. Setting: Led Brightness +#. Field: title +msgid "Led Brightness" +msgstr "" + +#. Setting: Led Brightness +#. Field: hint +msgid "" +"When LEDs are configured, set their brightness. High does not work below " +"30% brightness." +msgstr "" + +#. Setting: Led Brightness +#. Option: False +msgid "Off" +msgstr "" + +#. Setting: Led Brightness +#. Option: low +msgid "Low" +msgstr "" + +#. Setting: Led Brightness +#. Option: medium +msgid "Medium" +msgstr "" + +#. Setting: Led Brightness +#. Option: high +msgid "High" +msgstr "" + +#. Setting: Map Armory to QAM. +#. Field: title +msgid "Map Armory to QAM." +msgstr "" + +#. Setting: Motion Axis +#. Field: title +msgid "Motion Axis" +msgstr "" + +#. Setting: Default +#. Field: title +msgid "Default" +msgstr "" + +#. Setting: Default +#. Field: hint +msgid "The default axis loaded for this device." +msgstr "" + +#. Setting: Override +#. Field: title +msgid "Override" +msgstr "" + +#. Setting: Override +#. Field: hint +msgid "" +"Remap and invert the axis of your device. If the axis of your device are " +"wrong, please submit a picture or a text version of the following." +msgstr "" + +#. Setting: Manufacturer +#. Field: title +msgid "Manufacturer" +msgstr "" + +#. Setting: Product +#. Field: title +msgid "Product" +msgstr "" + +#. Setting: Axis X +#. Field: title +msgid "Axis X" +msgstr "" + +#. Setting: Axis X +#. Option: x +#. Setting: Axis Y +#. Setting: Axis Z +msgid "X" +msgstr "" + +#. Setting: Axis X +#. Option: y +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Y" +msgstr "" + +#. Setting: Axis X +#. Option: z +#. Setting: Axis Y +#. Setting: Axis Z +msgid "Z" +msgstr "" + +#. Setting: Invert X +#. Field: title +msgid "Invert X" +msgstr "" + +#. Setting: Axis Y +#. Field: title +msgid "Axis Y" +msgstr "" + +#. Setting: Invert Y +#. Field: title +msgid "Invert Y" +msgstr "" + +#. Setting: Axis Z +#. Field: title +msgid "Axis Z" +msgstr "" + +#. Setting: Invert Z +#. Field: title +msgid "Invert Z" +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "Does not modify the default controller." +msgstr "" + +#. Setting: Xbox +#. Field: title +msgid "Xbox" +msgstr "" + +#. Setting: Xbox +#. Field: hint +msgid "" +"Creates a virtual `Handheld Daemon Controller` that can be used normally " +"in apps. Back buttons are supported but steam will not detect them. If " +"Gyroscope or Accelerometer are enabled, a Motion device will be created " +"as well (experimental; works in Dolphin)." +msgstr "" + +#. Setting: Dualsense +#. Field: title +msgid "Dualsense" +msgstr "" + +#. Setting: Dualsense +#. Field: hint +msgid "" +"Emulates the Dualsense Sony controller from the Playstation 5. Since this" +" controller does not have paddles, the paddles are mapped to left and " +"right touchpad clicks." +msgstr "" + +#. Setting: LED Support +#. Field: title +msgid "LED Support" +msgstr "" + +#. Setting: LED Support +#. Field: hint +msgid "" +"Passes through the LEDs to the controller, which allows games to control " +"them." +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: title +msgid "Gyro to Mouse Fix" +msgstr "" + +#. Setting: Gyro to Mouse Fix +#. Field: hint +msgid "" +"In the latest steam update, `Gyro to Mouse [BETA]` misbehaves if a report" +" is sent without a new imu timestamp. This option makes it so reports are" +" sent only when there is a new gyro timestamp, effectively limiting the " +"responsiveness of the controller to that of the IMU (e.g., for Legion Go " +"100hz instead of 400hz). If the IMU is not working, this setting will " +"break the controller." +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: title +msgid "Bluetooth Mode" +msgstr "" + +#. Setting: Bluetooth Mode +#. Field: hint +msgid "" +"Emulates the controller in bluetooth mode instead of USB mode. This is " +"the default as it causes less issues with how apps interact with the " +"controller. However, using USB mode can improve LED support (?) in some " +"games. Test and report back!" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: title +msgid "Dualsense Edge" +msgstr "" + +#. Setting: Dualsense Edge +#. Field: hint +msgid "" +"Emulates the expensive Dualsense Sony controller which enables paddle " +"support. The edge controller is a bit obscure, so some games might not " +"support it correctly." +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: title +msgid "Touchpad Emulation" +msgstr "" + +#. Setting: Touchpad Emulation +#. Field: hint +msgid "" +"Use an emulated touchpad. Part of the controller if it is supported " +"(e.g., Dualsense) or a virtual one if not." +msgstr "" + +#. Setting: Disabled +#. Field: hint +msgid "" +"Does not modify the touchpad. Short + holding presses will not work " +"within gamescope." +msgstr "" + +#. Setting: Virtual +#. Field: title +msgid "Virtual" +msgstr "" + +#. Setting: Virtual +#. Field: hint +msgid "" +"Adds an emulated touchpad. This touchpad is meant to be for desktop use " +"and has left, right click support by default, within gamescope and " +"outside of it, regardless of the \"Tap to Click\" setting." +msgstr "" + +#. Setting: Short Action +#. Field: title +msgid "Short Action" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "Maps short touches (less than 0.2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Short Action +#. Option: left_click +#. Setting: Hold Action +msgid "Left Click" +msgstr "" + +#. Setting: Short Action +#. Option: right_click +#. Setting: Hold Action +msgid "Right Click" +msgstr "" + +#. Setting: Hold Action +#. Field: title +msgid "Hold Action" +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "Maps long touches (more than 2s) to a virtual touchpad button." +msgstr "" + +#. Setting: Controller +#. Field: hint +msgid "" +"Uses the touchpad of the emulated controller (if it exists). Otherwise, " +"the touchpad remains unmapped (will still show up in the system). Meant " +"to be used as steam input, so short press is unassigned by default and " +"long press simulates trackpad click." +msgstr "" + +#. Setting: Correction Type +#. Field: title +msgid "Correction Type" +msgstr "" + +#. Setting: Correction Type +#. Field: hint +msgid "" +"The legion touchpad is square, whereas the DS5 one is rectangular. " +"Therefore, it needs to be corrected. \"Contain\" maintain the whole DS5 " +"touchpad and part of the Legion one is unused. \"Crop\" uses the full " +"legion touchpad, and limits the area of the DS5. \"Stretch\" uses both " +"fully (distorted). \"Crop End\" enables use in steam input as the right " +"touchpad." +msgstr "" + +#. Setting: Correction Type +#. Option: stretch +msgid "Stretch" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_center +msgid "Crop Center" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_start +msgid "Crop Start" +msgstr "" + +#. Setting: Correction Type +#. Option: crop_end +msgid "Crop End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_start +msgid "Contain Start" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_end +msgid "Contain End" +msgstr "" + +#. Setting: Correction Type +#. Option: contain_center +msgid "Contain Center" +msgstr "" + +#. Setting: Short Action +#. Field: hint +msgid "" +"Maps short touches (less than 0.2s) to a touchpad action. Dualsense uses " +"a physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: Hold Action +#. Field: hint +msgid "" +"Maps long touches (more than 2s) to a touchpad action. Dualsense uses a " +"physical press for left and a double tap for right click (support for " +"double tap varies; enable \"Tap to Click\" in your desktop's touchpad " +"settings)." +msgstr "" + +#. Setting: System +#. Field: hint +msgid "" +"Basic display settings. Brightness (and framerate TBD). This pane is " +"meant to replace " +msgstr "" + +#. Setting: Brightness +#. Field: title +msgid "Brightness" +msgstr "" + +#. Setting: Brightness +#. Field: hint +msgid "" +"Sets the brightness level of a display. Only one display is supported and" +" it is the one that was read." +msgstr "" + From fa85533b41e92020344dbdc9864a7bd19d5fc6f4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 9 Feb 2024 15:54:32 +0100 Subject: [PATCH 0446/1497] fix power button hold on steam deck --- src/hhd/plugins/powerbutton/base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/plugins/powerbutton/base.py b/src/hhd/plugins/powerbutton/base.py index 6018e29f..b4d0b0df 100644 --- a/src/hhd/plugins/powerbutton/base.py +++ b/src/hhd/plugins/powerbutton/base.py @@ -18,7 +18,7 @@ STEAM_PID = "~/.steam/steam.pid" STEAM_EXE = "~/.steam/root/ubuntu12_32/steam" STEAM_WAIT_DELAY = 0.5 -LONG_PRESS_DELAY = 2.5 +LONG_PRESS_DELAY = 2.0 def B(b: str): @@ -260,6 +260,7 @@ def power_button_timer(cfg: PowerButtonConfig, perms: Context, should_exit: Even # Button was pressed but we hit a timeout, that means # it is a long press press_type = "long_press" + pressed_time = None else: # Otherwise, no press press_type = "no_press" From 00a9e7b92107a2f28345043b45df703c205e3c7d Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 9 Feb 2024 15:56:38 +0100 Subject: [PATCH 0447/1497] remove erronious pot file --- locale.pot | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 locale.pot diff --git a/locale.pot b/locale.pot deleted file mode 100644 index a3ee0bec..00000000 --- a/locale.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2024 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2024. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2024-02-07 14:43+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.14.0\n" - From 99f021042dcc9939d476003dee4d0117a92520ca Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 10 Feb 2024 18:50:12 +0100 Subject: [PATCH 0448/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c1793327..e61acc7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.6" +version = "1.3.7" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From f29c21b8cfb97ed3eec11233e66d110897e93ec4 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 15 Feb 2024 20:05:27 +0100 Subject: [PATCH 0449/1497] tweak ally accelerometer --- src/hhd/device/rog_ally/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index ced148f0..9b9e7e78 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -27,9 +27,9 @@ GAMEPAD_PID = 0x028E ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), + "accel_x": ("gyro_x", "accel", 1, 3), + "accel_y": ("gyro_z", "accel", -1, 3), + "accel_z": ("gyro_y", "accel", -1, 3), "anglvel_x": ("gyro_x", "anglvel", 1, None), "anglvel_y": ("gyro_z", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), From a00b7cf3a523441b138f044b0ba28ed5df905202 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 16 Feb 2024 22:26:24 +0100 Subject: [PATCH 0450/1497] merge initial OPI support --- pyproject.toml | 1 + src/hhd/controller/physical/evdev.py | 43 ++++- src/hhd/device/orange_pi/__init__.py | 121 ++++++++++++ src/hhd/device/orange_pi/base.py | 224 +++++++++++++++++++++++ src/hhd/device/orange_pi/const.py | 36 ++++ src/hhd/device/orange_pi/controllers.yml | 56 ++++++ src/hhd/plugins/outputs.py | 7 +- src/hhd/plugins/powerbutton/const.py | 2 + usr/lib/udev/hwdb.d/83-hhd.hwdb | 13 ++ 9 files changed, 497 insertions(+), 6 deletions(-) create mode 100644 src/hhd/device/orange_pi/__init__.py create mode 100644 src/hhd/device/orange_pi/base.py create mode 100644 src/hhd/device/orange_pi/const.py create mode 100644 src/hhd/device/orange_pi/controllers.yml diff --git a/pyproject.toml b/pyproject.toml index e61acc7d..ab1e9527 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ hhd = "hhd.__main__:main" legion_go = "hhd.device.legion_go:autodetect" rog_ally = "hhd.device.rog_ally:autodetect" gpd_win = "hhd.device.gpd.win:autodetect" +orange_pi = "hhd.device.orange_pi:autodetect" generic = "hhd.device.generic:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" # display = "hhd.plugins.display:autodetect" diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index e0ea3985..3d55aec9 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -74,6 +74,30 @@ def to_map(b: dict[A, Sequence[int]]) -> dict[int, A]: } ) +DINPUT_AXIS_MAP: dict[int, Axis] = to_map( + { + # Sticks + # Values should range from -1 to 1 + "ls_x": [B("ABS_X")], + "ls_y": [B("ABS_Y")], + "rs_x": [B("ABS_Z")], + "rs_y": [B("ABS_RZ")], + # Triggers + # Values should range from -1 to 1 + "rt": [B("ABS_BRAKE")], + "lt": [B("ABS_GAS")], + # Hat, implemented as axis. Either -1, 0, or 1 + "hat_x": [B("ABS_HAT0X")], + "hat_y": [B("ABS_HAT0Y")], + } +) +DINPUT_AXIS_POSTPROCESS = { + "ls_x": {"zero_is_middle": True}, + "ls_y": {"zero_is_middle": True}, + "rs_x": {"zero_is_middle": True}, + "rs_y": {"zero_is_middle": True}, +} + def list_joysticks(input_device_dir="/dev/input"): return glob.glob(f"{input_device_dir}/js*") @@ -112,6 +136,7 @@ def __init__( grab: bool = True, msc_map: Mapping[int, Button] = {}, msc_delay: float = 0.1, + postprocess: dict[str, dict] = {}, ) -> None: self.vid = vid self.pid = pid @@ -131,6 +156,7 @@ def __init__( self.grab = grab self.hidden = False self.queue = [] + self.postprocess = postprocess def open(self) -> Sequence[int]: for d in evdev.list_devices(): @@ -277,15 +303,22 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: ) elif e.type == B("EV_ABS"): if e.code in self.axis_map: - # Normalize - val = e.value / abs( - self.ranges[e.code][1 if e.value >= 0 else 0] - ) + ax = self.axis_map[e.code] + if ax in self.postprocess and self.postprocess[ax].get( + "zero_is_middle", False + ): + mmax = self.ranges[e.code][1] + 1 + val = (e.value - mmax // 2 + 1) / mmax * 2 + else: + # Normalize + val = e.value / abs( + self.ranges[e.code][1 if e.value >= 0 else 0] + ) out.append( { "type": "axis", - "code": self.axis_map[e.code], + "code": ax, "value": val, } ) diff --git a/src/hhd/device/orange_pi/__init__.py b/src/hhd/device/orange_pi/__init__.py new file mode 100644 index 00000000..a86acc07 --- /dev/null +++ b/src/hhd/device/orange_pi/__init__.py @@ -0,0 +1,121 @@ +from threading import Event, Thread +from typing import Any, Sequence + +from hhd.controller.physical.rgb import is_led_supported +from hhd.plugins import ( + Config, + Context, + Emitter, + HHDPlugin, + get_gyro_config, + get_outputs_config, + load_relative_yaml, +) +from hhd.plugins.settings import HHDSettings + +from .const import CONFS, DEFAULT_MAPPINGS, get_default_config + + +class GenericControllersPlugin(HHDPlugin): + name = "orange_pi_controllers" + priority = 18 + log = "orpi" + + def __init__(self, dmi: str, dconf: dict) -> None: + self.t = None + self.should_exit = None + self.updated = Event() + self.started = False + self.t = None + + self.dmi = dmi + self.dconf = dconf + self.name = f"orange_pi_controllers@'{dconf.get('name', 'ukn')}'" + + def open( + self, + emit: Emitter, + context: Context, + ): + self.emit = emit + self.context = context + self.prev = None + + def settings(self) -> HHDSettings: + base = {"controllers": {"handheld": load_relative_yaml("controllers.yml")}} + base["controllers"]["handheld"]["children"]["controller_mode"].update( + get_outputs_config( + can_disable=True, + has_leds=is_led_supported(), + start_disabled=self.dconf.get("untested", False), + default_device="uinput", + ) + ) + + base["controllers"]["handheld"]["children"]["imu_axis"] = get_gyro_config( + self.dconf.get("mapping", DEFAULT_MAPPINGS) + ) + + return base + + def update(self, conf: Config): + new_conf = conf["controllers.handheld"] + if new_conf == self.prev: + return + if self.prev is None: + self.prev = new_conf + else: + self.prev.update(new_conf.conf) + + self.updated.set() + self.start(self.prev) + + def start(self, conf): + from .base import plugin_run + + if self.started: + return + self.started = True + + self.close() + self.should_exit = Event() + self.t = Thread( + target=plugin_run, + args=( + conf, + self.emit, + self.context, + self.should_exit, + self.updated, + self.dconf, + ), + ) + self.t.start() + + def close(self): + if not self.should_exit or not self.t: + return + self.should_exit.set() + self.t.join() + self.should_exit = None + self.t = None + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + # Match vendor first to avoid issues + try: + with open("/sys/class/dmi/id/sys_vendor", "r") as f: + vendor = f.read().lower().strip() + + if "orangepi" not in vendor: + return [] + except Exception: + return [] + + with open("/sys/devices/virtual/dmi/id/product_name", "r") as f: + dmi = f.read().strip() + + return [GenericControllersPlugin(dmi, CONFS.get(dmi, get_default_config(dmi)))] diff --git a/src/hhd/device/orange_pi/base.py b/src/hhd/device/orange_pi/base.py new file mode 100644 index 00000000..51920e81 --- /dev/null +++ b/src/hhd/device/orange_pi/base.py @@ -0,0 +1,224 @@ +import logging +import os +import select +import time +from threading import Event as TEvent + +import evdev + +from hhd.controller import Multiplexer +from hhd.controller.physical.evdev import DINPUT_AXIS_MAP, DINPUT_AXIS_POSTPROCESS +from hhd.controller.physical.evdev import B as EC +from hhd.controller.physical.evdev import GenericGamepadEvdev +from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger +from hhd.controller.physical.rgb import LedDevice +from hhd.controller.virtual.uinput import UInputDevice +from hhd.plugins import Config, Context, Emitter, get_gyro_state, get_outputs + +from .const import BTN_MAPPINGS, DEFAULT_MAPPINGS + +ERROR_DELAY = 1 +SELECT_TIMEOUT = 1 + +logger = logging.getLogger(__name__) + +GAMEPAD_VIDS = [0x045E, 0x0079] +GAMEPAD_PIDS = [0x028E, 0x181C] + +KBD_VID = 0x0001 +KBD_PID = 0x0001 + +BACK_BUTTON_DELAY = 0.1 + + +def plugin_run( + conf: Config, + emit: Emitter, + context: Context, + should_exit: TEvent, + updated: TEvent, + dconf: dict, +): + first = True + while not should_exit.is_set(): + if conf["controller_mode.mode"].to(str) == "disabled": + time.sleep(ERROR_DELAY) + continue + + found_gamepad = False + try: + for d in evdev.list_devices(): + dev = evdev.InputDevice(d) + if dev.info.vendor in GAMEPAD_VIDS and dev.info.product in GAMEPAD_PIDS: + found_gamepad = True + break + except Exception: + logger.warning("Failed finding device, skipping check.") + found_gamepad = True + + if not found_gamepad: + if first: + logger.info("Controller not found. Waiting...") + time.sleep(ERROR_DELAY) + first = False + continue + + try: + logger.info("Launching emulated controller.") + updated.clear() + controller_loop(conf.copy(), should_exit, updated, dconf) + except Exception as e: + logger.error(f"Received the following error:\n{type(e)}: {e}") + logger.error( + f"Assuming controllers disconnected, restarting after {ERROR_DELAY}s." + ) + first = True + # Raise exception + if conf.get("debug", False): + raise e + time.sleep(ERROR_DELAY) + + +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): + debug = conf.get("debug", False) + + # Output + d_producers, d_outs, d_params = get_outputs( + conf["controller_mode"], + None, + conf["imu"].to(bool), + ) + + # Imu + d_imu = CombinedImu( + conf["imu_hz"].to(int), + get_gyro_state(conf["imu_axis"], dconf.get("mapping", DEFAULT_MAPPINGS)), + ) + d_timer = HrtimerTrigger(conf["imu_hz"].to(int), [HrtimerTrigger.IMU_NAMES]) + + # Inputs + d_xinput = GenericGamepadEvdev( + vid=GAMEPAD_VIDS, + pid=GAMEPAD_PIDS, + # name=["Generic X-Box pad"], + capabilities={EC("EV_KEY"): [EC("BTN_A")]}, + required=True, + axis_map=DINPUT_AXIS_MAP, + hide=True, + postprocess=DINPUT_AXIS_POSTPROCESS, + ) + + d_kbd_1 = GenericGamepadEvdev( + vid=[KBD_VID], + pid=[KBD_PID], + required=False, + # grab=True, + btn_map=dconf.get("btn_mapping", BTN_MAPPINGS), + ) + + multiplexer = Multiplexer( + trigger="analog_to_discrete", + dpad="analog_to_discrete", + share_to_qam=conf["share_to_qam"].to(bool), + nintendo_mode=conf["nintendo_mode"].to(bool), + ) + + # d_volume_btn = UInputDevice( + # name="Handheld Daemon Volume Keyboard", + # phys="phys-hhd-vbtn", + # capabilities={EC("EV_KEY"): [EC("KEY_VOLUMEUP"), EC("KEY_VOLUMEDOWN")]}, + # btn_map={ + # "key_volumeup": EC("KEY_VOLUMEUP"), + # "key_volumedown": EC("KEY_VOLUMEDOWN"), + # }, + # pid=KBD_PID, + # vid=KBD_VID, + # output_timestamps=True, + # ) + + d_rgb = LedDevice() + if d_rgb.supported: + logger.info(f"RGB Support activated through kernel driver.") + + REPORT_FREQ_MIN = 25 + REPORT_FREQ_MAX = 400 + + if conf["imu"].to(bool): + REPORT_FREQ_MAX = max(REPORT_FREQ_MAX, conf["imu_hz"].to(float)) + + REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN + REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX + + fds = [] + devs = [] + fd_to_dev = {} + + def prepare(m): + devs.append(m) + fs = m.open() + fds.extend(fs) + for f in fs: + fd_to_dev[f] = m + + try: + # d_vend.open() + prepare(d_xinput) + if conf.get("imu", False): + start_imu = True + if dconf.get("hrtimer", False): + start_imu = d_timer.open() + if start_imu: + prepare(d_imu) + # prepare(d_volume_btn) + prepare(d_kbd_1) + for d in d_producers: + prepare(d) + + logger.info("Emulated controller launched, have fun!") + while not should_exit.is_set() and not updated.is_set(): + start = time.perf_counter() + # Add timeout to call consumers a minimum amount of times per second + r, _, _ = select.select(fds, [], [], REPORT_DELAY_MAX) + evs = [] + to_run = set() + for f in r: + to_run.add(id(fd_to_dev[f])) + + for d in devs: + if id(d) in to_run: + evs.extend(d.produce(r)) + + evs = multiplexer.process(evs) + if evs: + if debug: + logger.info(evs) + + # d_volume_btn.consume(evs) + d_xinput.consume(evs) + + d_rgb.consume(evs) + for d in d_outs: + d.consume(evs) + + # If unbounded, the total number of events per second is the sum of all + # events generated by the producers. + # For Legion go, that would be 100 + 100 + 500 + 30 = 730 + # Since the controllers of the legion go only update at 500hz, this is + # wasteful. + # By setting a target refresh rate for the report and sleeping at the + # end, we ensure that even if multiple fds become ready close to each other + # they are combined to the same report, limiting resource use. + # Ideally, this rate is smaller than the report rate of the hardware controller + # to ensure there is always a report from that ready during refresh + t = time.perf_counter() + elapsed = t - start + if elapsed < REPORT_DELAY_MIN: + time.sleep(REPORT_DELAY_MIN - elapsed) + + except KeyboardInterrupt: + raise + finally: + # d_vend.close(True) + d_timer.close() + for d in reversed(devs): + d.close(True) diff --git a/src/hhd/device/orange_pi/const.py b/src/hhd/device/orange_pi/const.py new file mode 100644 index 00000000..9ba212bd --- /dev/null +++ b/src/hhd/device/orange_pi/const.py @@ -0,0 +1,36 @@ +from hhd.controller import Axis, Button, Configuration +from hhd.controller.physical.evdev import B, to_map +from hhd.plugins import gen_gyro_state + +DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { + "accel_x": ("accel_z", "accel", 1, 3), + "accel_y": ("accel_x", "accel", 1, 3), + "accel_z": ("accel_y", "accel", 1, 3), + "anglvel_x": ("gyro_z", "anglvel", -1, None), + "anglvel_y": ("gyro_x", "anglvel", -1, None), + "anglvel_z": ("gyro_y", "anglvel", -1, None), + "timestamp": ("gyro_ts", None, 1, None), +} + +BTN_MAPPINGS: dict[int, str] = { + # Volume buttons come from the same keyboard + B("KEY_F16"): "mode", # Big Button + B("KEY_F15"): "share", # Small Button + B("KEY_F17"): "extra_l1", # LC Button + B("KEY_F18"): "extra_r1", # RC Button +} + +CONFS = { + "G1621-02": {"name": "OrangePi G1621-02/G1621-02", "hrtimer": True}, + "NEO-01": {"name": "OrangePi NEO-01/NEO-01", "hrtimer": True}, +} + + +def get_default_config(product_name: str): + out = { + "name": product_name, + "hrtimer": True, + "untested": True, + } + + return out diff --git a/src/hhd/device/orange_pi/controllers.yml b/src/hhd/device/orange_pi/controllers.yml new file mode 100644 index 00000000..559219e8 --- /dev/null +++ b/src/hhd/device/orange_pi/controllers.yml @@ -0,0 +1,56 @@ +type: container +tags: [lgc] +title: Handheld Controller +hint: >- + Allows for configuring your handheld's controller to a unified output. + +children: + controller_mode: + type: mode + tags: [controller_mode] + title: Controller Emulation + hint: >- + Emulate different controller types to fuse your device's features. + + # + # Common settings + # + imu: + type: bool + title: Motion Support + hint: >- + Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) + default: True + + imu_hz: + type: discrete + title: Motion Hz + hint: >- + Sets the sampling frequency for the IMU. + Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. + options: [50, 100, 200, 400, 800, 1600] + default: 400 + + imu_axis: + + nintendo_mode: + type: bool + title: Nintendo Mode (A-B Swap) + hint: >- + Swaps A with B and X with Y. + default: False + + share_to_qam: + type: bool + title: Map share buttom to QAM. + tags: [advanced] + default: True + + debug: + type: bool + title: Debug + tags: [advanced] + hint: >- + Output controller events to the console (high CPU use) and raises exceptions + (HHD will crash on errors). + default: False diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 6202b71f..d9103cf3 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -101,7 +101,10 @@ def get_outputs( def get_outputs_config( - can_disable: bool = False, has_leds: bool = True, start_disabled: bool = False + can_disable: bool = False, + has_leds: bool = True, + start_disabled: bool = False, + default_device: str | None = None, ): s = load_relative_yaml("outputs.yml") if not can_disable: @@ -110,6 +113,8 @@ def get_outputs_config( del s["modes"]["dualsense"]["children"]["led_support"] del s["modes"]["dualsense_edge"]["children"]["led_support"] + if default_device: + s["default"] = default_device if start_disabled: s["default"] = "disabled" return s diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 59168053..dcaed3bf 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -32,6 +32,8 @@ class PowerButtonConfig(NamedTuple): # PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), # PBC("AYANEO AIR", "AIR", type="hold_emitted"), # PBC("AYANEO AIR Pro", "AIR Pro", type="hold_emitted"), + PBC("OrangePi G1621-02/G1621-02", "G1621-02"), + PBC("OrangePi NEO-01/NEO-01", "NEO-01"), PBC( "Steam Deck LCD", "Jupiter", diff --git a/usr/lib/udev/hwdb.d/83-hhd.hwdb b/usr/lib/udev/hwdb.d/83-hhd.hwdb index 264b6471..bb97c826 100644 --- a/usr/lib/udev/hwdb.d/83-hhd.hwdb +++ b/usr/lib/udev/hwdb.d/83-hhd.hwdb @@ -5,3 +5,16 @@ evdev:name:AT Translated Set 2 keyboard:dmi:*:svnAYANEO:* KEYBOARD_KEY_67=f16 KEYBOARD_KEY_68=f17 KEYBOARD_KEY_69=f18 + +## OrangePi G1621-02/NEO-01 (OrangePi Neo) (to be placed to /usr/lib/udev/hwdb.d/) +evdev:name:AT Translated Set 2 keyboard:dmi:*:svnOrangePi:pnG1621-02:* + KEYBOARD_KEY_64=f15 + KEYBOARD_KEY_65=f16 + KEYBOARD_KEY_66=f15 + KEYBOARD_KEY_67=f16 + KEYBOARD_KEY_68=f17 + KEYBOARD_KEY_69=f18 + +evdev:name:AT Translated Set 2 keyboard:dmi:*:svnOrangePi:pnNEO-01:* + KEYBOARD_KEY_66=f15 + KEYBOARD_KEY_67=f16 \ No newline at end of file From f47c3b8f3803944f31f05021a497cd9c7e813bf0 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 16 Feb 2024 22:59:19 +0100 Subject: [PATCH 0451/1497] remove decky updater --- src/hhd/__main__.py | 91 ++++++++++++++++--------------------- src/hhd/plugins/settings.py | 4 +- src/hhd/settings.yml | 20 ++------ 3 files changed, 45 insertions(+), 70 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index d5bd25af..4626538b 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -267,8 +267,8 @@ def main(): # TODO: Improve check try: if "venv" not in exe_python: - del hhd_settings["hhd"]["version"]["children"]["update_stable"] - del hhd_settings["hhd"]["version"]["children"]["update_beta"] + del hhd_settings["hhd"]["settings"]["children"]["update_stable"] + del hhd_settings["hhd"]["settings"]["children"]["update_beta"] except Exception as e: logger.warning(f"Could not hide update settings. Error:\n{e}") settings = merge_settings( @@ -290,7 +290,7 @@ def main(): try: from importlib.metadata import version - conf["hhd.version.version"] = version("hhd") + conf["hhd.settings.version"] = version("hhd") except Exception: pass @@ -497,62 +497,51 @@ def main(): # We triggered the interrupt, clear should_initialize.clear() - upd_stable = conf.get("hhd.version.update_stable", False) - upd_beta = conf.get("hhd.version.update_beta", False) - upd_decky = conf.get("hhd.version.update_decky", False) + upd_stable = conf.get("hhd.settings.update_stable", False) + upd_beta = conf.get("hhd.settings.update_beta", False) - if upd_stable or upd_beta or upd_decky: + if upd_stable or upd_beta: set_log_plugin("main") - conf["hhd.version.update_stable"] = False - conf["hhd.version.update_beta"] = False - conf["hhd.version.update_decky"] = False + conf["hhd.settings.update_stable"] = False + conf["hhd.settings.update_beta"] = False switch_priviledge(ctx, False) - if upd_decky: - logger.info("Updating Decky Plugin") - try: - home = expanduser("~/", ctx) + try: + logger.info(f"Updating Handheld Daemon.") + if "venv" in exe_python: subprocess.check_call( - f'curl -L https://github.com/hhd-dev/hhd-decky/raw/main/update.sh | HOME="{home}" sh', - shell=True, + [ + exe_python, + "-m", + "pip", + "uninstall", + "-y", + "hhd", + ] ) - except Exception as e: - logger.error(f"Error while updating decky plugin:\n{e}") - else: - try: - logger.info(f"Updating Handheld Daemon.") - if "venv" in exe_python: - subprocess.check_call( - [ - exe_python, - "-m", - "pip", - "uninstall", - "-y", - "hhd", - ] - ) - subprocess.check_call( - [ - exe_python, - "-m", - "pip", - "install", - "--upgrade", - "--cache-dir", - "/tmp/__hhd_update_cache", + subprocess.check_call( + [ + exe_python, + "-m", + "pip", + "install", + "--upgrade", + "--cache-dir", + "/tmp/__hhd_update_cache", + ( "git+https://github.com/hhd-dev/hhd" if upd_beta - else "hhd", - ] - ) - updated = True - else: - logger.error( - f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" - ) - except Exception as e: - logger.error(f"Error while updating:\n{e}") + else "hhd" + ), + ] + ) + updated = True + else: + logger.error( + f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" + ) + except Exception as e: + logger.error(f"Error while updating:\n{e}") switch_priviledge(ctx, True) if updated: diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 0cee8ecb..5e38ab10 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -308,7 +308,7 @@ def merge_reduce( if k in new_children: new_children[k] = merge_reduce(new_children[k], v) # type: ignore else: - new_children[k] = v + new_children[k] = merge_reduce(v) # type: ignore s["children"] = new_children case "mode": new_children = dict(a.get("modes", {})) @@ -316,7 +316,7 @@ def merge_reduce( if k in new_children: new_children[k] = merge_reduce(new_children[k], v) # type: ignore else: - new_children[k] = v + new_children[k] = merge_reduce(v) # type: ignore s["modes"] = new_children else: if a.get("type", None) == "container": diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index f8e7a0a0..939e410d 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -1,28 +1,14 @@ -version: +settings: type: container - tags: [hhd-version] - title: Version Information - hint: "Handheld Daemon version manager (local install only)." + title: About children: - decky_version: - type: display - tags: [hhd-version-display-decky, text] - title: Decky Plugin Version - hint: "Displays the Handheld Daemon Decky plugin version." - decky_deprecation: type: display tags: [hhd-version-display-decky, text] - title: "WARNING: This button will be removed soon, update Decky now!" + title: "It is no longer possible to update Decky from here. If you see this, update the Decky plugin manually." default: " " - update_decky: - type: action - tags: [hhd-update-decky, decky] - title: "Update Decky" - hint: "Updates the Decky plugin to the latest release." - version: type: display tags: [hhd-version-display, text] From d818eddd7356afddca557869eb905cf4a43cd620 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 16 Feb 2024 23:02:58 +0100 Subject: [PATCH 0452/1497] make steam power button handler optional --- src/hhd/plugins/powerbutton/__init__.py | 49 +++++++++++++++++------- src/hhd/plugins/powerbutton/const.py | 28 +++++++------- src/hhd/plugins/powerbutton/settings.yml | 9 +++++ 3 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 src/hhd/plugins/powerbutton/settings.yml diff --git a/src/hhd/plugins/powerbutton/__init__.py b/src/hhd/plugins/powerbutton/__init__.py index c96c7ab8..17bc7b56 100644 --- a/src/hhd/plugins/powerbutton/__init__.py +++ b/src/hhd/plugins/powerbutton/__init__.py @@ -1,12 +1,13 @@ -from typing import Any, Sequence, TYPE_CHECKING +import logging +from typing import TYPE_CHECKING, Any, Sequence -from hhd.plugins import ( - HHDPlugin, - Context, -) +from hhd.plugins import Config, Context, HHDPlugin, load_relative_yaml + +logger = logging.getLogger(__name__) if TYPE_CHECKING: from .const import PowerButtonConfig + from threading import Event, Thread @@ -20,7 +21,7 @@ class PowerbuttondPlugin(HHDPlugin): def __init__(self, cfg: "PowerButtonConfig") -> None: self.name = f"powerbuttond@'{cfg.device}'" self.priority = 20 - self.log = 'pbtn' + self.log = "pbtn" self.cfg = cfg self.t = None self.event = None @@ -30,29 +31,49 @@ def open( emit, context: Context, ): + self.started = False + self.context = context + + def settings(self): + d = {"hhd": load_relative_yaml("settings.yml")} + if self.cfg.unsupported: + d["hhd"]["settings"]["children"]["powerbuttond"]["default"] = False + return d + + def update(self, conf: Config): + if conf["hhd.settings.powerbuttond"].to(bool) and not self.started: + self.start() + elif not conf["hhd.settings.powerbuttond"].to(bool) and self.started: + self.stop() + logger.info('Stopping Steam Powerbutton Handler.') + + def start(self): from .base import power_button_run self.event = Event() - self.t = Thread(target=power_button_run, args=(self.cfg, context, self.event)) + self.t = Thread( + target=power_button_run, args=(self.cfg, self.context, self.event) + ) self.t.start() + self.started = True - def close(self): + def stop(self): if not self.event or not self.t: return self.event.set() self.t.join() self.event = None self.t = None + self.started = False + + def close(self): + self.stop() def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing - from .const import get_config, get_default_config - - cfg = get_config() - if not cfg: - return [PowerbuttondPlugin(get_default_config())] + from .const import get_config - return [PowerbuttondPlugin(cfg)] + return [PowerbuttondPlugin(get_config())] diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index dcaed3bf..e02b3d30 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -9,6 +9,7 @@ class PowerButtonConfig(NamedTuple): hold_phys: Sequence[str] = ["phys-hhd-powerbutton", "isa0060"] hold_grab: bool = False hold_code: int = 125 # left meta + unsupported: bool = False # POWER_BUTTON_NAMES = ["Power Button"] @@ -23,15 +24,6 @@ class PowerButtonConfig(NamedTuple): PBC("GPT Win 4", "G1618-04"), PBC("GPD Win Mini", "G1617-01"), PBC("GPD Win Max 2 2023", "G1619-05"), - # TODO: Remove these when correct behavior is verified - # TODO: Fix isa handling to only work when only shift is active - # PBC("AYANEO AIR Plus", "AIR Plus", type="hold_emitted"), - # PBC("AYANEO 2", "AYANEO 2", type="hold_emitted"), - # PBC("AYANEO GEEK", "GEEK", type="hold_emitted"), - # PBC("AYANEO 2S", "AYANEO 2S", type="hold_emitted"), - # PBC("AYANEO GEEK 1S", "GEEK 1S", type="hold_emitted"), - # PBC("AYANEO AIR", "AIR", type="hold_emitted"), - # PBC("AYANEO AIR Pro", "AIR Pro", type="hold_emitted"), PBC("OrangePi G1621-02/G1621-02", "G1621-02"), PBC("OrangePi NEO-01/NEO-01", "NEO-01"), PBC( @@ -67,20 +59,28 @@ class PowerButtonConfig(NamedTuple): ] -def get_config() -> PowerButtonConfig | None: +def get_config() -> PowerButtonConfig: with open("/sys/devices/virtual/dmi/id/product_name") as f: prod = f.read().strip() + try: + with open("/sys/devices/virtual/dmi/id/sys_vendor") as f: + sys = f.read().strip() + except Exception: + sys = None + for d in SUPPORTED_DEVICES: if d.prod_name == prod: return d - return None + if "ONEXPLAYER" in prod or "AOKZOE" in prod: + return PBC(prod, prod, type="hold_emitted", phys=["LNXPWRBN"], unsupported=True) + if sys == "AYA" or sys == "AYN": + # TODO: Fix isa handling to only work when only shift is active + return PBC(prod, prod, type="hold_emitted") -def get_default_config(): - # Prepare for per-manufacturer customization - return PBC("uknown", "NA", "hold_emitted") + return PBC("uknown", "NA", "hold_emitted", unsupported=True) # Legion go diff --git a/src/hhd/plugins/powerbutton/settings.yml b/src/hhd/plugins/powerbutton/settings.yml new file mode 100644 index 00000000..94d519b4 --- /dev/null +++ b/src/hhd/plugins/powerbutton/settings.yml @@ -0,0 +1,9 @@ +settings: + type: container + + children: + powerbuttond: + type: bool + title: Steam Powerbutton Handler + hint: "Enables the Steam Powerbutton handler (responsible for the wink and powerbutton menu)." + default: True \ No newline at end of file From 39cbff5f0c8d82ecda6463b2edd98deb2433183d Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 16 Feb 2024 23:11:53 +0100 Subject: [PATCH 0453/1497] add optional unit to sliders --- src/hhd/http/api.py | 2 +- src/hhd/plugins/settings.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 87df173a..54404e09 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -257,7 +257,7 @@ def v1_endpoint(self, content: Any | None): self.cond.wait() self.wfile.write(json.dumps(self.conf.conf).encode()) case "version": - self.send_json({"version": 2}) + self.send_json({"version": 3}) case "sections": self.send_json(SECTIONS) case other: diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 5e38ab10..0f7bbaa3 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -72,6 +72,7 @@ class NumericalSetting(TypedDict): tags: Sequence[str] title: str hint: str | None + unit: str | None min: float | None max: float | None @@ -87,6 +88,7 @@ class IntegerSetting(TypedDict): tags: Sequence[str] title: str hint: str | None + unit: str | None min: int | None max: int | None @@ -284,8 +286,8 @@ def pick_tag(tag, default, a, b): TYPE_TAGS = { "multiple": {"options": {}}, "discrete": {"options": []}, - "int": {"min": None, "max": None, "step": None}, - "float": {"min": None, "max": None, "step": None}, + "int": {"min": None, "max": None, "step": None, "unit": None}, + "float": {"min": None, "max": None, "step": None, "unit": None}, "custom": {"config": None}, } From f41bfd2acc9b23fe39831d80e854d69f1cb4b5e5 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 01:24:37 +0100 Subject: [PATCH 0454/1497] add initial logo concept --- art/logo.svg | 304 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) create mode 100644 art/logo.svg diff --git a/art/logo.svg b/art/logo.svg new file mode 100644 index 00000000..86e659a2 --- /dev/null +++ b/art/logo.svg @@ -0,0 +1,304 @@ + + + + From 9b197c7348367bac2bc0a479b74080bf6e6b7351 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 01:36:07 +0100 Subject: [PATCH 0455/1497] add exports --- art/logo.svg | 176 +++++++++++++++++++++------------------------ art/logo_dark.svg | 39 ++++++++++ art/logo_light.svg | 39 ++++++++++ art/poster.png | Bin 0 -> 66643 bytes art/poster.svg | 128 +++++++++++++++++++++++++++++++++ 5 files changed, 287 insertions(+), 95 deletions(-) create mode 100644 art/logo_dark.svg create mode 100644 art/logo_light.svg create mode 100644 art/poster.png create mode 100644 art/poster.svg diff --git a/art/logo.svg b/art/logo.svg index 86e659a2..03b96221 100644 --- a/art/logo.svg +++ b/art/logo.svg @@ -2,9 +2,9 @@ + id="path27" /> diff --git a/art/logo_dark.svg b/art/logo_dark.svg new file mode 100644 index 00000000..18331b6a --- /dev/null +++ b/art/logo_dark.svg @@ -0,0 +1,39 @@ + + + + diff --git a/art/logo_light.svg b/art/logo_light.svg new file mode 100644 index 00000000..b4d90212 --- /dev/null +++ b/art/logo_light.svg @@ -0,0 +1,39 @@ + + + + diff --git a/art/poster.png b/art/poster.png new file mode 100644 index 0000000000000000000000000000000000000000..a591b19c009eef97c22d19df256b04e20e8cfe03 GIT binary patch literal 66643 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 z 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 + + + From d736b93db8ab2a2ca78b25c7d3705311c0cced65 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 18:11:17 +0100 Subject: [PATCH 0456/1497] update logo --- art/logo.svg | 495 ++++++++++++++++++++++++++++++++++++--------- art/logo_dark.svg | 42 ++-- art/logo_light.svg | 41 ++-- art/poster.png | Bin 66643 -> 66807 bytes art/poster.svg | 193 ++++++++++++------ art/poster_oem.png | Bin 0 -> 111394 bytes 6 files changed, 580 insertions(+), 191 deletions(-) create mode 100644 art/poster_oem.png diff --git a/art/logo.svg b/art/logo.svg index 03b96221..a9f89d38 100644 --- a/art/logo.svg +++ b/art/logo.svg @@ -24,15 +24,16 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#505050" inkscape:document-units="px" - inkscape:zoom="0.6494472" - inkscape:cx="284.08776" - inkscape:cy="361.8462" - inkscape:window-width="2223" - inkscape:window-height="1478" + inkscape:zoom="0.45922852" + inkscape:cx="507.37267" + inkscape:cy="456.19989" + inkscape:window-width="2782" + inkscape:window-height="1587" inkscape:window-x="26" inkscape:window-y="23" inkscape:window-maximized="0" - inkscape:current-layer="g20"> + id="path82" + inkscape:label="white" /> diff --git a/art/logo_dark.svg b/art/logo_dark.svg index 18331b6a..2d33dbd0 100644 --- a/art/logo_dark.svg +++ b/art/logo_dark.svg @@ -18,22 +18,26 @@ width="515.67297" height="279.05045" x="1525.9523" - y="33.480999" /> + y="33.480999" /> diff --git a/art/logo_light.svg b/art/logo_light.svg index b4d90212..fe632401 100644 --- a/art/logo_light.svg +++ b/art/logo_light.svg @@ -11,29 +11,32 @@ xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + d="m 1951.308,102.56035 c 0.3887,1.00446 18.2427,36.6966 18.2427,36.6966 l -46.8782,86.2714 -78.9619,0.7116 -0.3133,-6.03433 -3.929,12.57741 87.4794,-0.81995 49.6145,-92.29589 -16.9812,-37.1297 7.5448,-5.673419 -68.5406,0.0078 -7.2001,0.0096 6.5358,6.127989 -4.7273,10.05409 -13.0852,25.9755 -50.6137,104.65964 11.0824,-7.2873 60.0582,-124.06983 4.7514,-9.64791 z" + id="path33" /> diff --git a/art/poster.png b/art/poster.png index a591b19c009eef97c22d19df256b04e20e8cfe03..8022254ec1035efbe20e067da9acae871c38a148 100644 GIT binary patch literal 66807 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 z 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

&Jc8B|2 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 literal 66643 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 z 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 + id="path82" /> diff --git a/art/poster_oem.png b/art/poster_oem.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1ca8dfad5e7f11931d657f9fc32f2e72b74c2c GIT binary patch literal 111394 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 z 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 a*vJi|@Q3Za9l#}AhY&^| literal 0 HcmV?d00001 From 2e63175a52047484ef12888ec162ae142b7217c6 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 18:13:22 +0100 Subject: [PATCH 0457/1497] correct the export --- art/poster.svg | 117 ++++++++----------------- art/poster_oem.svg | 207 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 242 insertions(+), 82 deletions(-) create mode 100644 art/poster_oem.svg diff --git a/art/poster.svg b/art/poster.svg index 47beafe6..c144f43f 100644 --- a/art/poster.svg +++ b/art/poster.svg @@ -12,13 +12,13 @@ xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> + id="path27" /> diff --git a/art/poster_oem.svg b/art/poster_oem.svg new file mode 100644 index 00000000..47beafe6 --- /dev/null +++ b/art/poster_oem.svg @@ -0,0 +1,207 @@ + + + + From 02a33c06d62715fbee84da596e0d7603fb1a76f6 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 18:23:59 +0100 Subject: [PATCH 0458/1497] update readme with logo --- readme.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f36f111c..079fd62d 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,17 @@ -# Handheld Daemon (HHD) +

+ + + + Handheld Daemon Logo. + +

+ +[![PyPI package version](https://badge.fury.io/py/hhd.svg)](https://pypi.org/project/hhd/) +[![Python version 3.10+](https://img.shields.io/badge/python-3.10%2B-informational.svg)](https://pypi.org/project/pasteur/) +[![Code style is Black](https://img.shields.io/badge/code%20style-black-black.svg)](https://github.com/psf/black) + + +# Handheld Daemon Handheld Daemon is a project that aims to provide utilities for managing handheld devices. Right now, it features a fully functional controller emulator that exposes gyro, From a7394939b593c6444d43ad6405217f54f9cee2ce Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 18:31:21 +0100 Subject: [PATCH 0459/1497] make paddles to clicks optional --- src/hhd/controller/virtual/dualsense/__init__.py | 6 ++++-- src/hhd/plugins/outputs.py | 2 ++ src/hhd/plugins/outputs.yml | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 6466f65a..b9bbdf7a 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -60,6 +60,7 @@ def __init__( enable_touchpad: bool = True, enable_rgb: bool = True, sync_gyro: bool = False, + paddles_to_clicks: bool = False, ) -> None: self.available = False self.report = None @@ -72,6 +73,7 @@ def __init__( self.enable_touchpad = enable_touchpad self.enable_rgb = enable_rgb self.sync_gyro = sync_gyro + self.paddles_to_clicks = paddles_to_clicks self.ofs = ( DS5_INPUT_REPORT_BT_OFS if use_bluetooth else DS5_INPUT_REPORT_USB_OFS @@ -347,14 +349,14 @@ def consume(self, events: Sequence[Event]): case "button": if not self.enable_touchpad and ev["code"].startswith("touchpad"): continue - if not self.edge_mode and (ev["code"] == "extra_l1"): + if self.paddles_to_clicks and (ev["code"] == "extra_l1"): # Place finger on correct place and click new_rep[self.ofs + 33] = 0x80 new_rep[self.ofs + 34] = 0x01 new_rep[self.ofs + 35] = 0x20 # Replace code with click ev = {**ev, "code": "touchpad_left"} - if not self.edge_mode and (ev["code"] == "extra_r1"): + if self.paddles_to_clicks and (ev["code"] == "extra_r1"): # Place finger on correct place and click new_rep[self.ofs + 33] = 0x00 new_rep[self.ofs + 34] = 0x06 diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index d9103cf3..c051ac4a 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -43,6 +43,7 @@ def get_outputs( enable_rgb=uses_leds, fake_timestamps=not motion, sync_gyro=conf["dualsense_edge.sync_gyro"].to(bool) and motion, + paddles_to_clicks=False, ) producers.append(d) consumers.append(d) @@ -57,6 +58,7 @@ def get_outputs( enable_rgb=uses_leds, fake_timestamps=not motion, sync_gyro=conf["dualsense.sync_gyro"].to(bool) and motion, + paddles_to_clicks=conf["dualsense.paddles_to_clicks"].to(bool), ) producers.append(d) consumers.append(d) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index afce2b63..867f647e 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -41,6 +41,16 @@ modes: Passes through the LEDs to the controller, which allows games to control them. default: True + + paddles_to_clicks: + type: bool + title: Paddles to Clicks + hint: >- + Maps the paddles of the device to left and right touchpad clicks + making them usable in Steam. + If more than 2 paddles (e.g., Legion Go) uses the top ones. + If extra buttons (e.g., Ayaneo, GPD), uses them instead. + default: True sync_gyro: type: bool From e4af97682006413f982dbbdeb88b395aefde2572 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 19:04:20 +0100 Subject: [PATCH 0460/1497] remove margins from logo --- art/logo.svg | 115 ++++++++++++++++++++++++++++++++------------- art/logo_dark.png | Bin 0 -> 12724 bytes art/logo_dark.svg | 12 +++-- art/logo_light.png | Bin 0 -> 13579 bytes art/logo_light.svg | 9 ++-- 5 files changed, 95 insertions(+), 41 deletions(-) create mode 100644 art/logo_dark.png create mode 100644 art/logo_light.png diff --git a/art/logo.svg b/art/logo.svg index a9f89d38..9e64d7aa 100644 --- a/art/logo.svg +++ b/art/logo.svg @@ -24,34 +24,34 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#505050" inkscape:document-units="px" - inkscape:zoom="0.45922852" - inkscape:cx="507.37267" - inkscape:cy="456.19989" - inkscape:window-width="2782" - inkscape:window-height="1587" + inkscape:zoom="0.70710678" + inkscape:cx="-94.045201" + inkscape:cy="596.79812" + inkscape:window-width="2699" + inkscape:window-height="1846" inkscape:window-x="26" inkscape:window-y="23" inkscape:window-maximized="0" - inkscape:current-layer="g38" + inkscape:current-layer="g11" showguides="false"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 C%<8oO literal 0 HcmV?d00001 diff --git a/art/logo_dark.svg b/art/logo_dark.svg index 2d33dbd0..12320b5d 100644 --- a/art/logo_dark.svg +++ b/art/logo_dark.svg @@ -2,9 +2,9 @@ xPXS#d(%nesoltM!$Lo@@b?|S~d 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 JrKmx`{{Uk^>`DLt literal 0 HcmV?d00001 diff --git a/art/logo_light.svg b/art/logo_light.svg index fe632401..68ed4ef1 100644 --- a/art/logo_light.svg +++ b/art/logo_light.svg @@ -2,9 +2,9 @@

- - - Handheld Daemon Logo. + + + Handheld Daemon Logo.

From 90cb73d5aeaabba283d3b9ec86619a6b6d6ad9e1 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 17 Feb 2024 19:11:13 +0100 Subject: [PATCH 0462/1497] add favicon --- art/favicon.svg | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 art/favicon.svg diff --git a/art/favicon.svg b/art/favicon.svg new file mode 100644 index 00000000..27db9789 --- /dev/null +++ b/art/favicon.svg @@ -0,0 +1,39 @@ + + + + From 5790968317fd0bc8e572782edac1f3093419d715 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 18 Feb 2024 01:22:42 +0100 Subject: [PATCH 0463/1497] add smin and smax handling --- src/hhd/plugins/settings.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 0f7bbaa3..7c4bed7e 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -76,6 +76,8 @@ class NumericalSetting(TypedDict): min: float | None max: float | None + smin: int | None + smax: int | None step: int | None default: float | None @@ -92,6 +94,8 @@ class IntegerSetting(TypedDict): min: int | None max: int | None + smin: int | None + smax: int | None step: int | None default: int | None @@ -286,8 +290,8 @@ def pick_tag(tag, default, a, b): TYPE_TAGS = { "multiple": {"options": {}}, "discrete": {"options": []}, - "int": {"min": None, "max": None, "step": None, "unit": None}, - "float": {"min": None, "max": None, "step": None, "unit": None}, + "int": {"min": None, "max": None, "step": None, "unit": None, "smin": None, "smax": None}, + "float": {"min": None, "max": None, "step": None, "unit": None, "smin": None, "smax": None}, "custom": {"config": None}, } From 5ee7d3ee1189419cf013570a55668c8e70263aa5 Mon Sep 17 00:00:00 2001 From: honjow Date: Mon, 19 Feb 2024 18:01:26 +0800 Subject: [PATCH 0464/1497] add ayaneo NEXT --- src/hhd/device/generic/const.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index f6326a9d..c08bdc0a 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -107,6 +107,10 @@ "GEEK 1S": {"name": "AYANEO GEEK 1S", **AYA_DEFAULT_CONF}, "AIR": {"name": "AYANEO AIR", **AYA_DEFAULT_CONF}, "AIR Pro": {"name": "AYANEO AIR Pro", **AYA_DEFAULT_CONF}, + "NEXT Advance": {"name": "AYANEO NEXT Advance", **AYA_DEFAULT_CONF}, + "NEXT Lite": {"name": "AYANEO NEXT Lite", **AYA_DEFAULT_CONF}, + "NEXT Pro": {"name": "AYANEO NEXT Pro", **AYA_DEFAULT_CONF}, + "NEXT": {"name": "AYANEO NEXT", **AYA_DEFAULT_CONF}, } From a6977860e66351e13f556a35fd5c0e13aedc945a Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 19 Feb 2024 18:09:57 +0100 Subject: [PATCH 0465/1497] fix logo, powerbutton priority --- readme.md | 2 +- src/hhd/plugins/powerbutton/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 506a1966..6c3e156d 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ - Handheld Daemon Logo. + Handheld Daemon Logo.

diff --git a/src/hhd/plugins/powerbutton/__init__.py b/src/hhd/plugins/powerbutton/__init__.py index 17bc7b56..4c92cc1b 100644 --- a/src/hhd/plugins/powerbutton/__init__.py +++ b/src/hhd/plugins/powerbutton/__init__.py @@ -20,7 +20,7 @@ def run(**config: Any): class PowerbuttondPlugin(HHDPlugin): def __init__(self, cfg: "PowerButtonConfig") -> None: self.name = f"powerbuttond@'{cfg.device}'" - self.priority = 20 + self.priority = 90 self.log = "pbtn" self.cfg = cfg self.t = None From 0a7babcfbff91fcf8c479592268480dea97ff1d4 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 19 Feb 2024 18:46:55 +0100 Subject: [PATCH 0466/1497] add new section names and bump version --- pyproject.toml | 2 +- src/hhd/sections.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ab1e9527..d0bb7c57 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.7" +version = "1.3.8" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/sections.yml b/src/hhd/sections.yml index 72f84e99..044c75a7 100644 --- a/src/hhd/sections.yml +++ b/src/hhd/sections.yml @@ -3,3 +3,5 @@ sections: tdp: TDP controller: Controller hhd: About + bazzite: Bazzite + utilities: Utilities From 58a82c0bcc6751ee406ff6da4d21a2bd730a25e0 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 19 Feb 2024 18:52:04 +0100 Subject: [PATCH 0467/1497] add ayaneo to readme --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index 6c3e156d..1a6d409d 100644 --- a/readme.md +++ b/readme.md @@ -68,6 +68,7 @@ is added to your device. - 1S/1S Limited - 2/2S - GEEK, GEEK 1S + - NEXT Lite/Pro/Advance - AOKZOE - A1 - A1 Pro From d2e97d6bf1e68c4520a42fd775db5911a5c32e01 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 20 Feb 2024 14:44:29 +0100 Subject: [PATCH 0468/1497] fix linting for settings --- src/hhd/plugins/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 19c2f0b1..59b19fb4 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -52,7 +52,7 @@ class InputEvent(TypedDict): conf_state: Mapping[Configuration, Any] -Event = ConfigEvent | InputEvent | ProfileEvent | ApplyEvent +Event = ConfigEvent | InputEvent | ProfileEvent | ApplyEvent | SettingsEvent class Emitter(Protocol): From df0bed40a80db2d7b352f266eee5073eddf472d3 Mon Sep 17 00:00:00 2001 From: antheas Date: Tue, 20 Feb 2024 18:55:30 +0100 Subject: [PATCH 0469/1497] lower fs delay to make tdp enable faster --- src/hhd/__main__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 4626538b..3ef4aa17 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -44,6 +44,7 @@ CONFIG_DIR = os.environ.get("HHD_CONFIG_DIR", "~/.config/hhd") ERROR_DELAY = 5 +INIT_DELAY = 0.4 POLL_DELAY = 2 @@ -257,7 +258,7 @@ def main(): if should_initialize.is_set() or initial_run: # wait a bit to allow other processes to save files if not initial_run: - sleep(POLL_DELAY) + sleep(INIT_DELAY) initial_run = False set_log_plugin("main") logger.info(f"Reloading configuration.") From 6ce0fd0f70a5bdb7260ae40eb1b4f1d47a9d566c Mon Sep 17 00:00:00 2001 From: honjow Date: Wed, 21 Feb 2024 16:10:49 +0800 Subject: [PATCH 0470/1497] add ayaneo slide --- src/hhd/device/generic/const.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index c08bdc0a..1ed55c67 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -111,6 +111,11 @@ "NEXT Lite": {"name": "AYANEO NEXT Lite", **AYA_DEFAULT_CONF}, "NEXT Pro": {"name": "AYANEO NEXT Pro", **AYA_DEFAULT_CONF}, "NEXT": {"name": "AYANEO NEXT", **AYA_DEFAULT_CONF}, + "SLIDE": { + "name": "AYANEO SLIDE", + **AYA_DEFAULT_CONF, + "mapping": gen_gyro_state("z", True, "x", False, "y", False), + }, } From fdb9e6529973d0a95d641592e983147b6372921e Mon Sep 17 00:00:00 2001 From: honjow Date: Wed, 21 Feb 2024 18:06:11 +0800 Subject: [PATCH 0471/1497] fix sys_vendor for ayaneo --- src/hhd/plugins/powerbutton/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index e02b3d30..45efab1b 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -76,7 +76,7 @@ def get_config() -> PowerButtonConfig: if "ONEXPLAYER" in prod or "AOKZOE" in prod: return PBC(prod, prod, type="hold_emitted", phys=["LNXPWRBN"], unsupported=True) - if sys == "AYA" or sys == "AYN": + if sys == "AYANEO" or sys == "AYN": # TODO: Fix isa handling to only work when only shift is active return PBC(prod, prod, type="hold_emitted") From d48eb6cdebf6aa8c151c04f4eff2e425246dbf88 Mon Sep 17 00:00:00 2001 From: honjow Date: Wed, 21 Feb 2024 18:32:13 +0800 Subject: [PATCH 0472/1497] Keep the original aya sys_vendor --- src/hhd/plugins/powerbutton/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/powerbutton/const.py b/src/hhd/plugins/powerbutton/const.py index 45efab1b..bc83b57f 100644 --- a/src/hhd/plugins/powerbutton/const.py +++ b/src/hhd/plugins/powerbutton/const.py @@ -76,7 +76,7 @@ def get_config() -> PowerButtonConfig: if "ONEXPLAYER" in prod or "AOKZOE" in prod: return PBC(prod, prod, type="hold_emitted", phys=["LNXPWRBN"], unsupported=True) - if sys == "AYANEO" or sys == "AYN": + if sys == "AYA" or sys == "AYANEO" or sys == "AYN": # TODO: Fix isa handling to only work when only shift is active return PBC(prod, prod, type="hold_emitted") From cb92d7112b1e9a8cd7741a5827521f12fcaf8533 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 21 Feb 2024 12:56:44 +0100 Subject: [PATCH 0473/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d0bb7c57..2bf162d1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.8" +version = "1.3.9" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 3b78ecbfba582e2fe34baa2aa247d7df7ef7c63d Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 21 Feb 2024 13:02:17 +0100 Subject: [PATCH 0474/1497] add ayaneo slide to readme --- readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 1a6d409d..4df9db06 100644 --- a/readme.md +++ b/readme.md @@ -69,11 +69,12 @@ is added to your device. - 2/2S - GEEK, GEEK 1S - NEXT Lite/Pro/Advance + - SLIDE +- Ayn + - Loki Max - AOKZOE - A1 - A1 Pro -- Ayn - - Loki Max - Onexplayer - Mini Pro From 8c68b1647855353434badc6abb59f5402e71411e Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 21 Feb 2024 14:35:12 +0100 Subject: [PATCH 0475/1497] hide version hash in returned settings --- src/hhd/http/api.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 54404e09..488b7a74 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -2,12 +2,19 @@ import json import logging import os +from copy import deepcopy from http.server import BaseHTTPRequestHandler, HTTPServer from threading import Condition, Thread from typing import Any, Mapping from urllib.parse import parse_qs, urlparse -from hhd.plugins import Config, Emitter, HHDSettings, get_relative_fn, load_relative_yaml +from hhd.plugins import ( + Config, + Emitter, + HHDSettings, + get_relative_fn, + load_relative_yaml, +) logger = logging.getLogger(__name__) @@ -29,6 +36,7 @@ def sanitize_fn(n: str): "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "POST, GET, OPTIONS, DELETE", "Access-Control-Allow-Headers": "*", + "Access-Control-Expose-Headers": "*, Version", "Access-Control-Max-Age": "86400", "WWW-Authenticate": "Bearer", } @@ -43,7 +51,8 @@ def sanitize_fn(n: str): ) _control_char_table[ord("\\")] = r"\\" -SECTIONS = load_relative_yaml('../sections.yml')['sections'] +SECTIONS = load_relative_yaml("../sections.yml")["sections"] + def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: try: @@ -242,9 +251,15 @@ def v1_endpoint(self, content: Any | None): case "profile": self.handle_profile(segments[3:], params, content) case "settings": - self.set_response_ok({"Version": self.conf.get("version", "")}) + v = self.conf.get("version", "") + self.set_response_ok({"Version": v}) with self.cond: - self.wfile.write(json.dumps(self.settings).encode()) + s = dict(deepcopy(self.settings)) + try: + s["hhd"]["version"] = {"type": "version", "value": v} # type: ignore + except Exception as e: + logger.error(f"Error while writing version hash to response.") + self.wfile.write(json.dumps(s).encode()) case "state": self.set_response_ok() with self.cond: @@ -257,7 +272,7 @@ def v1_endpoint(self, content: Any | None): self.cond.wait() self.wfile.write(json.dumps(self.conf.conf).encode()) case "version": - self.send_json({"version": 3}) + self.send_json({"version": 4}) case "sections": self.send_json(SECTIONS) case other: From d96eada406072b21ebec0a1646287d988cc69628 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 21 Feb 2024 15:48:19 +0100 Subject: [PATCH 0476/1497] remove expose headers for now --- src/hhd/http/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 488b7a74..60d6e1b7 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -36,7 +36,7 @@ def sanitize_fn(n: str): "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "POST, GET, OPTIONS, DELETE", "Access-Control-Allow-Headers": "*", - "Access-Control-Expose-Headers": "*, Version", + # "Access-Control-Expose-Headers": "*, Version", "Access-Control-Max-Age": "86400", "WWW-Authenticate": "Bearer", } From 3689536274ad7cd8fc1d1b7dcdd2bd5fbeb31754 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 21 Feb 2024 19:39:21 +0100 Subject: [PATCH 0477/1497] fix hash bug --- src/hhd/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 3ef4aa17..18a99c6e 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -275,7 +275,7 @@ def main(): settings = merge_settings( [*[p.settings() for p in sorted_plugins], hhd_settings] ) - shash = get_settings_hash(hhd_settings) + shash = get_settings_hash(settings) # State new_conf = load_state_yaml(state_fn, settings) From 77013f9d6cbb5965a81c86f9295b6e2607ed4747 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 22 Feb 2024 17:47:32 +0100 Subject: [PATCH 0478/1497] add expert tags --- src/hhd/device/generic/controllers.yml | 2 +- src/hhd/device/gpd/win/controllers.yml | 2 +- src/hhd/device/legion_go/controllers.yml | 4 ++-- src/hhd/device/orange_pi/controllers.yml | 2 +- src/hhd/settings.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hhd/device/generic/controllers.yml b/src/hhd/device/generic/controllers.yml index 559219e8..a681cdf8 100644 --- a/src/hhd/device/generic/controllers.yml +++ b/src/hhd/device/generic/controllers.yml @@ -49,7 +49,7 @@ children: debug: type: bool title: Debug - tags: [advanced] + tags: [advanced, expert] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index 8ca8a873..2fe08a2f 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -54,7 +54,7 @@ children: debug: type: bool title: Debug - tags: [advanced] + tags: [advanced, expert] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index a1de6dda..3bba8b4c 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -25,7 +25,7 @@ children: accel: type: bool title: Accelerometer - tags: [advanced] + tags: [advanced, expert] hint: >- Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; if someone asks it will be fixed). @@ -99,7 +99,7 @@ children: debug: type: bool title: Debug - tags: [advanced] + tags: [advanced, expert] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). diff --git a/src/hhd/device/orange_pi/controllers.yml b/src/hhd/device/orange_pi/controllers.yml index 559219e8..a681cdf8 100644 --- a/src/hhd/device/orange_pi/controllers.yml +++ b/src/hhd/device/orange_pi/controllers.yml @@ -49,7 +49,7 @@ children: debug: type: bool title: Debug - tags: [advanced] + tags: [advanced, expert] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 939e410d..923f93eb 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -29,7 +29,7 @@ settings: http: type: container - tags: [hhd-http, advanced] + tags: [hhd-http, advanced, expert] title: API Configuration hint: >- Settings for configuring the http endpoint of HHD. From 334c38334f432ff2eb2f2c4f45602bca87ba5ee1 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 22 Feb 2024 18:13:21 +0100 Subject: [PATCH 0479/1497] fix updating state values saving to file --- src/hhd/plugins/conf.py | 6 +++++- src/hhd/plugins/settings.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/hhd/plugins/conf.py b/src/hhd/plugins/conf.py index 771c83d7..9ebc61ec 100644 --- a/src/hhd/plugins/conf.py +++ b/src/hhd/plugins/conf.py @@ -131,11 +131,15 @@ def __setitem__(self, key: str | tuple[str, ...], val): d[seq[-1]] = val if isinstance(self._conf, MutableMapping): + init = deepcopy(self._conf) parse_conf(cont, self._conf) + # FIXME: verify no regressions + if init != self._conf: + self._updated = True else: self._conf = cont if self._conf != cont: - self.updated = True + self._updated = True def __contains__(self, key: str | tuple[str, ...]): with self._lock: diff --git a/src/hhd/plugins/settings.py b/src/hhd/plugins/settings.py index 7c4bed7e..73273ec0 100644 --- a/src/hhd/plugins/settings.py +++ b/src/hhd/plugins/settings.py @@ -659,9 +659,9 @@ def load_profile_yaml(fn: str): def get_settings_hash(set: HHDSettings): - import hashlib + import hashlib, json - return hashlib.md5(dump_comment(set).encode()).hexdigest()[:8] + return hashlib.md5(json.dumps(set).encode()).hexdigest()[:8] def unravel(d: Setting | Container | Mode, prev: Sequence[str], out: MutableMapping): From 50130fa3f993a040fd69262f309e521cec846187 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 23 Feb 2024 00:54:22 +0100 Subject: [PATCH 0480/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2bf162d1..03a7d379 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.9" +version = "1.3.10" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From f7e135db0eb3e7aafeda1ca59b91e60f1e9516be Mon Sep 17 00:00:00 2001 From: honjow Date: Fri, 23 Feb 2024 21:38:49 +0800 Subject: [PATCH 0481/1497] fix ayaneo button mappings --- src/hhd/device/generic/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index 1ed55c67..e5611987 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -68,11 +68,11 @@ # 2021 Mappings B("KEY_DELETE"): "share", # TM Button [97,100,111] B("KEY_ESC"): "extra_l1", # ESC Button [1] - B("KEY_O"): "extra_l2", # KB Button [97, 24, 125] + B("KEY_O"): "extra_r1", # KB Button [97, 24, 125] # B("KEY_LEFTMETA"): "extra_r1", # Win Button [125], Conflict with KB Button # Air mappings B("KEY_F11"): "extra_l1", # LC Button [87, 97, 125] F11 + LCTRL + LMETA - B("KEY_F10"): "extra_l2", # Rc Button [68, 97, 125] F10 + LCTRL + LMETA + B("KEY_F10"): "extra_r1", # Rc Button [68, 97, 125] F10 + LCTRL + LMETA } AYA_DEFAULT_CONF = { From a42a1f1f1d6465b31807bf35776e025d2fa5122f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 25 Feb 2024 18:51:52 +0100 Subject: [PATCH 0482/1497] do not re-initialize every settings change --- src/hhd/__main__.py | 56 ++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 18a99c6e..35c8a140 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -26,6 +26,7 @@ ) from .plugins.settings import ( Validator, + parse_defaults, get_default_state, load_blacklist_yaml, load_profile_yaml, @@ -393,6 +394,7 @@ def main(): # # Process events + set_log_plugin("main") settings_changed = False for ev in emit.get_events(): match ev["type"]: @@ -421,31 +423,43 @@ def main(): case other: logger.error(f"Invalid event type submitted: '{other}'") - # Validate config - validate_config(conf, settings, validator) - # If settings changed, the configuration needs to reload # but it needs to be saved first if settings_changed: - should_initialize.set() - - # Plugins are promised that once they emit a - # settings change they are not called with the old settings - if not settings_changed: - # - # Plugin event loop - # - - for p in reversed(sorted_plugins): - set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") - p.prepare(conf) - update_log_plugins() + logger.info(f"Reloading settings.") - for p in sorted_plugins: - set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") - p.update(conf) - update_log_plugins() - set_log_plugin("ukwn") + # Settings + hhd_settings = {"hhd": load_relative_yaml("settings.yml")} + # TODO: Improve check + try: + if "venv" not in exe_python: + del hhd_settings["hhd"]["settings"]["children"]["update_stable"] + del hhd_settings["hhd"]["settings"]["children"]["update_beta"] + except Exception as e: + logger.warning(f"Could not hide update settings. Error:\n{e}") + settings = merge_settings( + [*[p.settings() for p in sorted_plugins], hhd_settings] + ) + shash = get_settings_hash(settings) + + # Validate config + conf = Config([parse_defaults(settings), conf.conf]) + validate_config(conf, settings, validator) + + # + # Plugin event loop + # + + for p in reversed(sorted_plugins): + set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") + p.prepare(conf) + update_log_plugins() + + for p in sorted_plugins: + set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") + p.update(conf) + update_log_plugins() + set_log_plugin("ukwn") # Notify that events were applied # Before saving to reduce delay (yaml files take 100ms :( ) From bd646129c4110e613187c39f706c628ca78c0346 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 25 Feb 2024 22:04:20 +0100 Subject: [PATCH 0483/1497] update install instructions for debian --- install.sh | 4 ++-- readme.md | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/install.sh b/install.sh index e0617eed..e62c044a 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # Installs Handheld Daemon to ~/.local/share/hhd -if [ "$EUID" -eq 0 ] +if [ "$EUID" = 0 ] then echo "You should run this script as your user, not root (sudo)." exit fi @@ -9,7 +9,7 @@ fi # Install Handheld Daemon to ~/.local/share/hhd mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd -python -m venv --system-site-packages venv +python3 -m venv --system-site-packages venv source venv/bin/activate pip install --upgrade hhd diff --git a/readme.md b/readme.md index 4df9db06..c56696ce 100644 --- a/readme.md +++ b/readme.md @@ -165,7 +165,7 @@ These steps do not work on Bazzite, see [here](#bazzite). # Install Handheld Daemon to ~/.local/share/hhd mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd -python -m venv --system-site-packages venv +python3 -m venv --system-site-packages venv source venv/bin/activate pip install --upgrade hhd # Substitute with the following to pull from github (may not always work) @@ -173,12 +173,12 @@ pip install --upgrade hhd # Install udev rules and create a service file sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/hwdb.d/83-hhd.hwdb -o /etc/udev/hwdb.d/83-hhd.hwdb +sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service # Change rules to re-enable display autorotation if you do not want gyro support. # sudo nano /etc/udev/rules.d/83-hhd.rules -sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/systemd/system/hhd_local%40.service -o /etc/systemd/system/hhd_local@.service - # Start service and reboot sudo systemctl enable hhd_local@$(whoami) sudo reboot @@ -208,9 +208,12 @@ To uninstall, simply stop the service and remove the added files. ```bash sudo systemctl disable hhd_local@$(whoami) sudo systemctl stop hhd_local@$(whoami) + rm -rf ~/.local/share/hhd sudo rm /etc/udev/rules.d/83-hhd.rules +sudo rm /etc/udev/hwdb.d/83-hhd.hwdb sudo rm /etc/systemd/system/hhd_local@.service + # Delete your configuration rm -r ~/.config/hhd ``` From 414be66b25761ec684099ba4414bee99082daa39 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 28 Feb 2024 18:23:38 +0100 Subject: [PATCH 0484/1497] add qam handling --- src/hhd/controller/__init__.py | 2 + src/hhd/controller/base.py | 141 +++++++++++++++++++++++---------- src/hhd/plugins/plugin.py | 6 +- src/hhd/settings.yml | 2 +- 4 files changed, 106 insertions(+), 45 deletions(-) diff --git a/src/hhd/controller/__init__.py b/src/hhd/controller/__init__.py index b1f76158..d3deb800 100644 --- a/src/hhd/controller/__init__.py +++ b/src/hhd/controller/__init__.py @@ -8,6 +8,7 @@ TouchpadCorrectionType, can_read, correct_touchpad, + SpecialEvent, ) from .const import Axis, Button, Configuration @@ -24,4 +25,5 @@ "correct_touchpad", "KeyboardWrapper", "Multiplexer", + "SpecialEvent", ] diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 8ce23206..83ff27c7 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -1,13 +1,18 @@ import logging import select import time -from typing import Any, Literal, NamedTuple, Sequence, TypedDict +from typing import Any, Literal, NamedTuple, Sequence, TypedDict, Callable from .const import Axis, Button, Configuration logger = logging.getLogger(__name__) +class SpecialEvent(TypedDict): + type: Literal["special"] + event: Literal["qam_single", "qam_double", "qam_tripple", "qam_hold"] + + class RumbleEvent(TypedDict): """In case ev effects is too complicated. If both magnitudes are 0, disable rumble.""" @@ -224,6 +229,9 @@ def consume(self, events: Sequence[Event]): TouchpadAction = Literal["disabled", "left_click", "right_click"] +QAM_HOLD_TIME = 1 +QAM_MULTI_PRESS_DELAY = 0.3 + class Multiplexer: QAM_DELAY = 0.2 @@ -239,8 +247,9 @@ def __init__( trigger: None | Literal["analog_to_discrete", "discrete_to_analogue"] = None, dpad: None | Literal["analog_to_discrete"] = None, led: None | Literal["left_to_main", "right_to_main", "main_to_sides"] = None, - touchpad: None - | Literal["left_to_main", "right_to_main", "main_to_sides"] = None, + touchpad: ( + None | Literal["left_to_main", "right_to_main", "main_to_sides"] + ) = None, status: None | Literal["both_to_main"] = None, share_to_qam: bool = False, trigger_discrete_lvl: float = 0.99, @@ -251,6 +260,7 @@ def __init__( select_reboots: bool = False, nintendo_mode: bool = False, qam_button: str | None = None, + emit: Callable[[SpecialEvent], None] | None = None, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -265,6 +275,7 @@ def __init__( self.select_reboots = select_reboots self.r3_to_share = r3_to_share self.nintendo_mode = nintendo_mode + self.emit = emit self.state = {} self.touchpad_x = 0 @@ -277,6 +288,10 @@ def __init__( if share_to_qam: self.qam_button = "share" + self.qam_pressed = None + self.qam_released = None + self.qam_times = 0 + assert touchpad is None, "touchpad rewiring not supported yet" def process(self, events: Sequence[Event]): @@ -386,18 +401,20 @@ def process(self, events: Sequence[Event]): out.append( { "type": "button", - "code": "dpad_up" - if ev["code"] == "hat_y" - else "dpad_right", + "code": ( + "dpad_up" if ev["code"] == "hat_y" else "dpad_right" + ), "value": ev["value"] > 0.5, } ) out.append( { "type": "button", - "code": "dpad_down" - if ev["code"] == "hat_y" - else "dpad_left", + "code": ( + "dpad_down" + if ev["code"] == "hat_y" + else "dpad_left" + ), "value": ev["value"] < -0.5, } ) @@ -449,41 +466,16 @@ def process(self, events: Sequence[Event]): self.select_pressed = None if self.qam_button is not None and ev["code"] == self.qam_button: + ev["code"] = "" # type: ignore if ev["value"]: - ev["code"] = "mode" - self.queue.append( - ( - { - "type": "button", - "code": "a", - "value": True, - }, - curr + self.QAM_DELAY, - ) - ) + self.qam_pressed = curr + self.qam_released = None + self.qam_times += 1 else: - # TODO: Clean this up - ev["code"] = "" # type: ignore - self.queue.append( - ( - { - "type": "button", - "code": "mode", - "value": False, - }, - curr + self.QAM_DELAY, - ), - ) - self.queue.append( - ( - { - "type": "button", - "code": "a", - "value": False, - }, - curr + self.QAM_DELAY, - ), - ) + # Only apply if qam_pressed was not yanked + if self.qam_pressed: + self.qam_released = curr + self.qam_pressed = None if ev["code"] == "touchpad_right": match self.touchpad_right: @@ -575,6 +567,71 @@ def process(self, events: Sequence[Event]): self.touchpad_y, ) + # Handle QAM button + qam_apply = False + if self.qam_pressed and curr - self.qam_pressed > QAM_HOLD_TIME: + qam_apply = True + if self.qam_released and curr - self.qam_released > QAM_MULTI_PRESS_DELAY: + qam_apply = True + + if qam_apply and self.qam_released and self.qam_times == 1: + out.append( + { + "type": "button", + "code": "mode", + "value": True, + }, + ) + self.queue.append( + ( + { + "type": "button", + "code": "a", + "value": True, + }, + curr + self.QAM_DELAY, + ) + ) + self.queue.append( + ( + { + "type": "button", + "code": "a", + "value": False, + }, + curr + 2 * self.QAM_DELAY, + ), + ) + self.queue.append( + ( + { + "type": "button", + "code": "mode", + "value": False, + }, + curr + 2 * self.QAM_DELAY, + ), + ) + if qam_apply and self.emit: + if self.qam_pressed: + self.emit({"type": "special", "event": "qam_hold"}) + else: + match self.qam_times: + case 0: + pass + case 1: + self.emit({"type": "special", "event": "qam_single"}) + case 2: + self.emit({"type": "special", "event": "qam_double"}) + case _: + self.emit({"type": "special", "event": "qam_tripple"}) + if qam_apply: + held = " then held" if self.qam_pressed else "" + logger.info(f"QAM Pressed {self.qam_times}{held}.") + self.qam_pressed = None + self.qam_released = None + self.qam_times = 0 + for s in status_events: match s: case "battery": diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 59b19fb4..007644e0 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -8,7 +8,7 @@ TypedDict, ) -from hhd.controller import Axis, Button, Configuration +from hhd.controller import Axis, Button, Configuration, SpecialEvent from .conf import Config from .settings import HHDSettings @@ -52,7 +52,9 @@ class InputEvent(TypedDict): conf_state: Mapping[Configuration, Any] -Event = ConfigEvent | InputEvent | ProfileEvent | ApplyEvent | SettingsEvent +Event = ( + ConfigEvent | InputEvent | ProfileEvent | ApplyEvent | SettingsEvent | SpecialEvent +) class Emitter(Protocol): diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 923f93eb..f359297e 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -1,6 +1,6 @@ settings: type: container - title: About + title: Handheld Daemon Settings children: decky_deprecation: From fefdf15e351a4bfaa8d744835e74f89e446535b9 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 29 Feb 2024 00:18:58 +0100 Subject: [PATCH 0485/1497] add emitter for QAM --- src/hhd/device/generic/base.py | 7 +++++-- src/hhd/device/gpd/win/base.py | 5 +++-- src/hhd/device/legion_go/base.py | 22 ++++++++++++++++++---- src/hhd/device/orange_pi/base.py | 7 +++++-- src/hhd/device/rog_ally/base.py | 5 +++-- 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index c7223577..e04b7825 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -80,7 +80,7 @@ def plugin_run( try: logger.info("Launching emulated controller.") updated.clear() - controller_loop(conf.copy(), should_exit, updated, dconf) + controller_loop(conf.copy(), should_exit, updated, dconf, emit) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( @@ -93,7 +93,9 @@ def plugin_run( time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): +def controller_loop( + conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict, emit: Emitter +): debug = conf.get("debug", False) # Output @@ -133,6 +135,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d dpad="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), + emit=emit, ) d_volume_btn = UInputDevice( diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index 73055e2c..bb9e8214 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -179,7 +179,7 @@ def plugin_run( try: logger.info("Launching emulated controller.") updated.clear() - controller_loop(conf.copy(), should_exit, updated, dconf) + controller_loop(conf.copy(), should_exit, updated, dconf, emit) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( @@ -192,7 +192,7 @@ def plugin_run( time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict, emit: Emitter): debug = conf.get("debug", False) has_touchpad = dconf.get("touchpad", False) @@ -283,6 +283,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d dpad="analog_to_discrete", nintendo_mode=conf["nintendo_mode"].to(bool), qam_button=qam_button, + emit=emit ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 94b8ad49..80403fea 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -86,7 +86,7 @@ def plugin_run( logger.info("Launching emulated controller.") if gyro_fixer: gyro_fixer.open() - controller_loop_xinput(conf_copy, should_exit, updated) + controller_loop_xinput(conf_copy, should_exit, updated, emit) else: if controller_mode != "xinput": logger.info( @@ -97,7 +97,12 @@ def plugin_run( f"Controllers in xinput mode but emulation is disabled." ) controller_loop_rest( - controller_mode, pid if pid else 2, conf_copy, should_exit, updated + controller_mode, + pid if pid else 2, + conf_copy, + should_exit, + updated, + emit, ) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") @@ -116,7 +121,12 @@ def plugin_run( def controller_loop_rest( - mode: str, pid: int, conf: Config, should_exit: TEvent, updated: TEvent + mode: str, + pid: int, + conf: Config, + should_exit: TEvent, + updated: TEvent, + emit: Emitter, ): debug = conf.get("debug", False) shortcuts_enabled = conf["shortcuts"].to(bool) @@ -144,6 +154,7 @@ def controller_loop_rest( trigger="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), + emit=emit, ) d_uinput = UInputDevice( name=f"HHD Shortcuts (Legion Mode: {mode})", @@ -182,7 +193,9 @@ def controller_loop_rest( d_raw.close(True) -def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): +def controller_loop_xinput( + conf: Config, should_exit: TEvent, updated: TEvent, emit: Emitter +): debug = conf.get("debug", False) # Output @@ -273,6 +286,7 @@ def controller_loop_xinput(conf: Config, should_exit: TEvent, updated: TEvent): select_reboots=conf["select_reboots"].to(bool), r3_to_share=conf["m2_to_mute"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), + emit=emit, ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/orange_pi/base.py b/src/hhd/device/orange_pi/base.py index 51920e81..8187fcd1 100644 --- a/src/hhd/device/orange_pi/base.py +++ b/src/hhd/device/orange_pi/base.py @@ -66,7 +66,7 @@ def plugin_run( try: logger.info("Launching emulated controller.") updated.clear() - controller_loop(conf.copy(), should_exit, updated, dconf) + controller_loop(conf.copy(), should_exit, updated, dconf, emit) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( @@ -79,7 +79,9 @@ def plugin_run( time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict): +def controller_loop( + conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict, emit: Emitter +): debug = conf.get("debug", False) # Output @@ -121,6 +123,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d dpad="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), + emit=emit, ) # d_volume_btn = UInputDevice( diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 9b9e7e78..c517bf3e 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -137,7 +137,7 @@ def plugin_run( try: logger.info("Launching emulated controller.") updated.clear() - controller_loop(conf.copy(), should_exit, updated) + controller_loop(conf.copy(), should_exit, updated, emit) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") logger.error( @@ -149,7 +149,7 @@ def plugin_run( time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): +def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, emit: Emitter): debug = conf.get("debug", False) # Output @@ -197,6 +197,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent): share_to_qam=conf["share_to_qam"].to(bool), select_reboots=conf["select_reboots"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), + emit=emit, ) REPORT_FREQ_MIN = 25 From 4bdb64cafe667ff05f908259e34f98282ea9b397 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 29 Feb 2024 00:25:34 +0100 Subject: [PATCH 0486/1497] add notify loop for plugins --- src/hhd/__main__.py | 11 ++++++++++- src/hhd/plugins/plugin.py | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 35c8a140..733e58da 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -396,7 +396,8 @@ def main(): # Process events set_log_plugin("main") settings_changed = False - for ev in emit.get_events(): + events = emit.get_events() + for ev in events: match ev["type"]: case "settings": settings_changed = True @@ -450,11 +451,19 @@ def main(): # Plugin event loop # + # Allow plugins to process events + for p in sorted_plugins: + set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") + p.notify(events) + update_log_plugins() + + # Run prepare loop for p in reversed(sorted_plugins): set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") p.prepare(conf) update_log_plugins() + # Run update loop for p in sorted_plugins: set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") p.update(conf) diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 007644e0..02e53146 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -86,6 +86,9 @@ def prepare(self, conf: Config): def update(self, conf: Config): pass + def notify(self, events: Sequence[Event]): + pass + def close(self): pass From 104c4dfb60ac5addea4f9917d59726095e71398d Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 29 Feb 2024 00:31:45 +0100 Subject: [PATCH 0487/1497] add overlay boilerplate --- pyproject.toml | 1 + src/hhd/plugins/overlay/__init__.py | 46 ++++++++++++++++++++++++++++ src/hhd/plugins/overlay/settings.yml | 0 3 files changed, 47 insertions(+) create mode 100644 src/hhd/plugins/overlay/__init__.py create mode 100644 src/hhd/plugins/overlay/settings.yml diff --git a/pyproject.toml b/pyproject.toml index 03a7d379..36e619dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ gpd_win = "hhd.device.gpd.win:autodetect" orange_pi = "hhd.device.orange_pi:autodetect" generic = "hhd.device.generic:autodetect" powerbuttond = "hhd.plugins.powerbutton:autodetect" +overlay = "hhd.plugins.overlay:autodetect" # display = "hhd.plugins.display:autodetect" [project.entry-points."hhd.i18n"] diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py new file mode 100644 index 00000000..fb62434a --- /dev/null +++ b/src/hhd/plugins/overlay/__init__.py @@ -0,0 +1,46 @@ +import logging +from typing import TYPE_CHECKING, Any, Sequence + +from hhd.plugins import Config, Context, HHDPlugin, load_relative_yaml + +logger = logging.getLogger(__name__) + + +class OverlayPlugin(HHDPlugin): + def __init__(self) -> None: + self.name = f"overlay" + self.priority = 95 + self.log = "ovrl" + + def open( + self, + emit, + context: Context, + ): + self.started = False + self.context = context + + def settings(self): + d = {"hhd": {"overlay": load_relative_yaml("settings.yml")}} + # if self.cfg.unsupported: + # d["hhd"]["overlay"]["children"]["powerbuttond"]["default"] = False + return d + + def update(self, conf: Config): + pass + + def start(self): + pass + + def stop(self): + pass + + def close(self): + self.stop() + + +def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: + if len(existing): + return existing + + return [] diff --git a/src/hhd/plugins/overlay/settings.yml b/src/hhd/plugins/overlay/settings.yml new file mode 100644 index 00000000..e69de29b From 0f48f75da182ceb2cc90200aaf4afcac08dd46e1 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 13:11:38 +0100 Subject: [PATCH 0488/1497] fix updates not triggering a config change --- src/hhd/__main__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 733e58da..9689b410 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -443,8 +443,11 @@ def main(): ) shash = get_settings_hash(settings) + # Add new defaults + conf = Config([parse_defaults(settings), conf.conf]) + conf.updated = True + # Validate config - conf = Config([parse_defaults(settings), conf.conf]) validate_config(conf, settings, validator) # From 7b004480be648ebe95ff622eb161b96e77075236 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 19:41:28 +0100 Subject: [PATCH 0489/1497] add initial overlay code --- src/hhd/__main__.py | 11 +- src/hhd/controller/base.py | 7 +- src/hhd/controller/virtual/uinput/__init__.py | 4 +- src/hhd/plugins/overlay/__init__.py | 63 +++-- src/hhd/plugins/overlay/base.py | 216 ++++++++++++++++++ src/hhd/plugins/overlay/overlay.py | 28 +++ src/hhd/plugins/overlay/settings.yml | 8 + src/hhd/plugins/overlay/x11.py | 173 ++++++++++++++ 8 files changed, 489 insertions(+), 21 deletions(-) create mode 100644 src/hhd/plugins/overlay/base.py create mode 100644 src/hhd/plugins/overlay/overlay.py create mode 100644 src/hhd/plugins/overlay/x11.py diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 9689b410..6051a30f 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -421,6 +421,8 @@ def main(): conf.update(profiles[ev["name"]].conf) case "state": conf.update(ev["config"].conf) + case "special": + pass case other: logger.error(f"Invalid event type submitted: '{other}'") @@ -455,10 +457,11 @@ def main(): # # Allow plugins to process events - for p in sorted_plugins: - set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") - p.notify(events) - update_log_plugins() + if events: + for p in sorted_plugins: + set_log_plugin(getattr(p, "log") if hasattr(p, "log") else "ukwn") + p.notify(events) + update_log_plugins() # Run prepare loop for p in reversed(sorted_plugins): diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 83ff27c7..87340b78 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -10,7 +10,7 @@ class SpecialEvent(TypedDict): type: Literal["special"] - event: Literal["qam_single", "qam_double", "qam_tripple", "qam_hold"] + event: Literal["guide", "qam_single", "qam_double", "qam_tripple", "qam_hold"] class RumbleEvent(TypedDict): @@ -465,6 +465,11 @@ def process(self, events: Sequence[Event]): self.select_is_held = False self.select_pressed = None + if self.emit and ev["code"] == "guide" and ev["value"]: + # Steam might do weirdness, emit an event to prepare + # the overlay + self.emit({"type": "special", "event": "guide"}) + if self.qam_button is not None and ev["code"] == self.qam_button: ev["code"] = "" # type: ignore if ev["value"]: diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 834a2777..37a81cc7 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -1,6 +1,6 @@ import logging import time -from typing import Sequence, cast +from typing import Sequence from evdev import UInput @@ -188,7 +188,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: out.append(self.rumble) else: logger.warn( - f"Rumble requested but a rumble effect has not been uploaded." + f"Rumble requested but a rumble effect has not been uploaded.\n{ev}" ) elif ev.type == B("EV_FF") and not ev.value: out.append( diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py index fb62434a..54b86693 100644 --- a/src/hhd/plugins/overlay/__init__.py +++ b/src/hhd/plugins/overlay/__init__.py @@ -1,7 +1,7 @@ import logging from typing import TYPE_CHECKING, Any, Sequence -from hhd.plugins import Config, Context, HHDPlugin, load_relative_yaml +from hhd.plugins import Config, Context, HHDPlugin, load_relative_yaml, Event logger = logging.getLogger(__name__) @@ -11,36 +11,71 @@ def __init__(self) -> None: self.name = f"overlay" self.priority = 95 self.log = "ovrl" + self.ovf = None + self.enabled = False def open( self, emit, context: Context, ): - self.started = False - self.context = context + try: + from .base import OverlayService + + self.ovf = OverlayService(context) + except Exception as e: + logger.warning( + f"Could not init overlay service, is python-xlib installed? Error:\n{e}" + ) + self.ovf = None def settings(self): - d = {"hhd": {"overlay": load_relative_yaml("settings.yml")}} - # if self.cfg.unsupported: - # d["hhd"]["overlay"]["children"]["powerbuttond"]["default"] = False - return d + if not self.ovf: + return {} + return {"hhd": {"overlay": load_relative_yaml("settings.yml")}} def update(self, conf: Config): - pass + # Or with self.enabled to require restart + self.enabled = self.enabled or conf["hhd.overlay.enabled"].to(bool) + + def notify(self, events: Sequence[Event]): + if not self.ovf or not self.enabled: + return + + for ev in events: + if ev["type"] != "special": + continue - def start(self): - pass + match ev["event"]: + case "guide": + # Close to avoid issues with steam + cmd = "close" + case "qam_single": + # Close to avoid issues with steam + cmd = "close" + case "qam_hold": + # Open QAM with hold for accessibility + cmd = "open_qam" + case "qam_double": + # Preferred bind for QAM is dual press + cmd = "open_qam" + case "qam_tripple": + # Allow opening expanded menu with tripple press + cmd = "open_expanded" + case _: + cmd = None - def stop(self): - pass + if cmd: + logger.info(f"Executing overlay command: '{cmd}'") + self.ovf.update(cmd) def close(self): - self.stop() + if self.ovf: + self.ovf.close() def autodetect(existing: Sequence[HHDPlugin]) -> Sequence[HHDPlugin]: if len(existing): return existing - return [] + return [OverlayPlugin()] diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py new file mode 100644 index 00000000..76de56bb --- /dev/null +++ b/src/hhd/plugins/overlay/base.py @@ -0,0 +1,216 @@ +import logging +import select +import subprocess +import time +from threading import Event as TEvent +from threading import Thread +from typing import Literal, cast + +from Xlib import display + +from hhd.plugins import Context +from hhd.utils import restore_priviledge, switch_priviledge + +from .overlay import find_overlay_exe, inject_overlay +from .x11 import ( + find_hhd, + find_steam, + get_gamescope_displays, + get_overlay_display, + hide_hhd, + is_steam_shown, + prepare_hhd, + show_hhd, +) + +logger = logging.getLogger(__name__) +Command = Literal["close", "open_qam", "open_expanded", "open_notification"] +Status = Literal["closed", "qam", "expanded", "notification"] + +GUARD_CHECK = 0.5 +STARTUP_MAX_DELAY = 10 +LOOP_SLEEP = 0.1 + + +def update_status(proc: subprocess.Popen, cmd: Command): + if not proc.stdin: + logger.warning(f"Could not update overlay because stdin not found.") + return False + + try: + proc.stdin.write(f"\ncmd:{cmd}\n") + return True + except Exception as e: + logger.warning(f"Could not update overlay status with error:\n{e}") + return False + + +def loop_manage_overlay( + disp: display.Display, proc: subprocess.Popen, should_exit: TEvent +): + try: + status: Status = "closed" + + assert proc.stderr and proc.stdout + + fd_out = proc.stdout.fileno() + fd_err = proc.stderr.fileno() + + # Give electron time to warmup + start = time.perf_counter() + curr = start + while ( + curr - start < STARTUP_MAX_DELAY + and not find_hhd(disp) + and not should_exit.is_set() + ): + time.sleep(GUARD_CHECK) + curr = time.perf_counter() + + hhd = find_hhd(disp) + steam = find_steam(disp) + old = None + shown = False + + if hhd: + logger.info(f"UI window found in gamescope, starting handler.") + prepare_hhd(disp, hhd) + + while not should_exit.is_set(): + if not hhd: + logger.error(f"UI Window not found, exitting overlay.") + break + if not steam: + logger.error(f"Steam window not found, exitting overlay.") + break + + r, _, _ = select.select([fd_out, fd_err], [], [], GUARD_CHECK) + + if shown and is_steam_shown(disp, steam): + logger.warning( + f"Steam overlay shown while hhd-ui is active. Hiding UI to avoid issues." + ) + hide_hhd(disp, hhd, steam, None) + shown = False + + if fd_err in r: + l = proc.stderr.readline()[:-1] + if l: + logger.info(f"Electron: {l}") + + if fd_out in r: + cmd = proc.stdout.readline() + logger.info(cmd) + if cmd.startswith("stat:"): + status = cast(Status, cmd[4:]) + if status == "closed": + if shown: + hide_hhd(disp, hhd, steam, old) + shown = False + else: + if not shown: + old = show_hhd(disp, hhd, steam) + shown = True + + # Sleep a bit to avoid waking up too much + time.sleep(LOOP_SLEEP) + finally: + logger.info(f"Stopping overlay process.") + proc.kill() + + +class OverlayService: + def __init__(self, ctx: Context) -> None: + self.ctx = ctx + self.started = False + self.t = None + self.should_exit = None + self.failed = False + + def _start(self): + # Should not be called by outsiders + # requires special permissions and error handling by update + if self.started: + return True + logger.info("Attempting to launch overlay.") + + exe = find_overlay_exe() + if not exe: + logger.warning("Overlay is not installed, not launching.") + return + logger.info(f"Found overlay executable '{exe}'") + + displays = get_gamescope_displays() + if not displays: + logger.warning("Could not find overlay displays, gamescope is not active.") + return + logger.debug(f"Found the following gamescope displays: {displays}") + + res = get_overlay_display(displays) + if not res: + logger.error( + f"Could not find overlay display in gamescope displays. This should never happen." + ) + return + disp, name = res + logger.debug(f"Overlay display is the folling: DISPLAY={name}") + + self.proc = inject_overlay(exe, name, self.ctx) + self.should_exit = TEvent() + self.t = Thread( + target=loop_manage_overlay, args=(disp, self.proc, self.should_exit) + ) + self.t.start() + + self.started = True + logger.info("Overlay launched.") + return True + + def close(self): + if self.should_exit and self.t: + self.should_exit.set() + self.t.join() + self.should_exit = None + self.t = None + self.started = False + + def is_healthy(self): + if not self.t or not self.should_exit: + logger.error("'is_healthy' called before 'start'") + return False + + if not self.t.is_alive(): + logger.error("Overlay thread died") + return False + + return True + + def update(self, cmd: Command): + # Accessing the user's display requires the user's priviledges + old = switch_priviledge(self.ctx, False) + if self.failed: + return + try: + + if not self._start(): + self.failed = True + return + if not self.is_healthy(): + logger.warning(f"Overlay service died, attempting to restart.") + self.close() + if not self._start(): + logger.warning(f"Restarting failed, disabling overlay.") + self.failed = True + return + + if not self.proc: + logger.error("Overlay subprocess is null. Should never happen.") + return + + update_status(self.proc, cmd) + except Exception as e: + logger.error(f"Failed launching overlay with error:\n{e}") + self.failed = True + self.close() + restore_priviledge(old) + raise e diff --git a/src/hhd/plugins/overlay/overlay.py b/src/hhd/plugins/overlay/overlay.py new file mode 100644 index 00000000..009d3247 --- /dev/null +++ b/src/hhd/plugins/overlay/overlay.py @@ -0,0 +1,28 @@ +import os +import shutil + +from hhd.plugins import Context +from hhd.utils import expanduser +import subprocess + + +def find_overlay_exe(): + INSTALLED_PATHS = ["hhd-ui-dbg", "hhd-ui"] + + for fn in INSTALLED_PATHS: + if shutil.which(fn): + return fn + + +def inject_overlay(fn: str, display: str, ctx: Context): + out = subprocess.Popen( + [fn], + env={"HOME": expanduser("~", ctx), "DISPLAY": display, "STEAM_OVERLAY": "1"}, + text=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + user=ctx.euid, + group=ctx.egid, + ) + return out diff --git a/src/hhd/plugins/overlay/settings.yml b/src/hhd/plugins/overlay/settings.yml index e69de29b..ef5e12dd 100644 --- a/src/hhd/plugins/overlay/settings.yml +++ b/src/hhd/plugins/overlay/settings.yml @@ -0,0 +1,8 @@ +type: container +title: Overlay Settings + +children: + enabled: + type: bool + title: "Overlay with QAM Double/Tripple press (requires restart)" + default: True \ No newline at end of file diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py new file mode 100644 index 00000000..86623834 --- /dev/null +++ b/src/hhd/plugins/overlay/x11.py @@ -0,0 +1,173 @@ +import logging +import subprocess +from typing import Sequence + +from Xlib import Xatom, display, error + +logger = logging.getLogger(__name__) + +X11_DIR = b"/tmp/.X11-unix/" + + +def get_gamescope_displays(): + """Returns X11 UNIX sockets from gamescope opened under /tmp""" + files = subprocess.run(["lsof", "-c", "gamescope-wl", "-Fn"], capture_output=True) + out = [] + for ln in files.stdout.splitlines(): + if len(ln) < 1: + continue + ln = ln[1:] + + if not ln.startswith(X11_DIR): + continue + + fn = ln.split(b" ")[0] + disp = ":" + fn[len(X11_DIR) + 1 :].decode() + out.append(disp) + return out + + +def get_overlay_display(displays: Sequence[str]): + """Probes the provided gamescope displays to find the overlay one.""" + for disp in displays: + d = display.Display(disp) + + atoms = [d.get_atom_name(v) for v in d.screen().root.list_properties()] + if "GAMESCOPE_FOCUSED_WINDOW" in atoms: + return d, disp + + d.close() + + +def find_win(display: display.Display, win: str): + n = display.get_atom("WM_CLASS") + for w in display.screen().root.query_tree().children: + v = w.get_property(n, Xatom.STRING, 0, 50) + if not v: + continue + if not v.value: + continue + if win in v.value.decode(): + return w + + +def find_hhd(display: display.Display): + return find_win(display, "dev.hhd.hhd-ui") + + +def find_steam(display: display.Display): + return find_win(display, "steamwebhelper") + + +def print_data(display: display.Display): + for w in (find_hhd(display), find_steam(display), display.screen().root): + if not w: + continue + for p in w.list_properties(): + req = w.get_property(p, Xatom.CARDINAL, 0, 100) + if req: + v = list(req.value) if req.value else None + else: + v = None + print(f"{p:4d}-{display.get_atom_name(p):>40s}: {v}") + print() + + +def print_debug(display: display.Display): + d = display + r = display.screen().root + + print("ATOMS:") + for v in r.list_properties(): + print(f"{v: 4d}: {d.get_atom_name(v)}") + + print() + print("WINDOWS:") + for i, w in enumerate(r.query_tree().children): + print(f"{i:02d}", end="") + for p in w.list_properties(): + n = d.get_atom_name(p) + if "WM_NAME" == n: + print( + f" {w.get_property(p, Xatom.STRING, 0, 100).value.decode()}", end="" + ) + print(f":", end="") + for p in w.list_properties(): + n = d.get_atom_name(p) + if "STEAM" in n or "GAMESCOPE" in n: + print( + f" {n}: {list(w.get_property(p, Xatom.CARDINAL, 0, 15).value)},", + end="", + ) + + print() + for p in w.list_properties(): + n = d.get_atom_name(p) + if "STEAM" not in n and "GAMESCOPE" not in n: + print( + f"- {n}: {list(w.get_property(p, Xatom.CARDINAL, 0, 15).value) or w.get_property(p, Xatom.STRING, 0, 15).value},", + ) + + +def prepare_hhd(display, hhd): + hhd.change_property(display.get_atom("STEAM_GAME"), Xatom.CARDINAL, 32, [5335]) + hhd.change_property(display.get_atom("STEAM_NOTIFICATION"), Xatom.CARDINAL, 32, [0]) + hhd.change_property(display.get_atom("STEAM_BIGPICTURE"), Xatom.CARDINAL, 32, [1]) + + +def show_hhd(display, hhd, steam): + stat_focus = display.get_atom("STEAM_INPUT_FOCUS") + stat_overlay = display.get_atom("STEAM_OVERLAY") + + old = ( + steam.get_property(stat_focus, Xatom.CARDINAL, 0, 15), + steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 15), + ) + + hhd.change_property(stat_focus, Xatom.CARDINAL, 32, [1]) + hhd.change_property(stat_overlay, Xatom.CARDINAL, 32, [1]) + steam.change_property(stat_focus, Xatom.CARDINAL, 32, [0]) + steam.change_property(stat_overlay, Xatom.CARDINAL, 32, [0]) + + # Force the values to refresh + hhd.get_property(stat_focus, Xatom.CARDINAL, 0, 5) + hhd.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) + steam.get_property(stat_focus, Xatom.CARDINAL, 0, 5) + steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) + + return old + + +def is_steam_shown(display, steam): + stat_focus = display.get_atom("STEAM_INPUT_FOCUS") + stat_overlay = display.get_atom("STEAM_OVERLAY") + try: + v1 = steam.get_property(stat_focus, Xatom.CARDINAL, 0, 5).value[0] + v2 = steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 5).value[0] + return bool(v1 or v2) + except Exception as e: + logger.warning(f"Could not read steam overlay status with error:\n{e}") + return False + + +def hide_hhd(display, hhd, steam, old): + stat_focus = display.get_atom("STEAM_INPUT_FOCUS") + stat_overlay = display.get_atom("STEAM_OVERLAY") + + # Set values + hhd.change_property(stat_focus, Xatom.CARDINAL, 32, [0]) + hhd.change_property(stat_overlay, Xatom.CARDINAL, 32, [0]) + # Refresh values + hhd.get_property(stat_focus, Xatom.CARDINAL, 0, 5) + hhd.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) + + # Restore steam + if not old: + return + + if old[0]: + steam.change_property(stat_focus, Xatom.CARDINAL, 32, old[0].value) + steam.get_property(stat_focus, Xatom.CARDINAL, 0, 5) + if old[1]: + steam.change_property(stat_overlay, Xatom.CARDINAL, 32, old[1].value) + steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) From a826be4020d6fdecc1dc8c991b44dfa0b32c66a7 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 20:13:27 +0100 Subject: [PATCH 0490/1497] add flushing --- src/hhd/plugins/overlay/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 76de56bb..3496438f 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -39,6 +39,7 @@ def update_status(proc: subprocess.Popen, cmd: Command): try: proc.stdin.write(f"\ncmd:{cmd}\n") + proc.stdin.flush() return True except Exception as e: logger.warning(f"Could not update overlay status with error:\n{e}") @@ -96,11 +97,10 @@ def loop_manage_overlay( if fd_err in r: l = proc.stderr.readline()[:-1] if l: - logger.info(f"Electron: {l}") + logger.info(f"UI: {l}") if fd_out in r: cmd = proc.stdout.readline() - logger.info(cmd) if cmd.startswith("stat:"): status = cast(Status, cmd[4:]) if status == "closed": From 9f0fcbb1611afe2ddcf98406d1a28451fbe8fe17 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 20:18:04 +0100 Subject: [PATCH 0491/1497] avoid loading overlay unless the user asks for it --- src/hhd/plugins/overlay/__init__.py | 6 ++++-- src/hhd/plugins/overlay/base.py | 9 ++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py index 54b86693..ae75dfe6 100644 --- a/src/hhd/plugins/overlay/__init__.py +++ b/src/hhd/plugins/overlay/__init__.py @@ -66,8 +66,10 @@ def notify(self, events: Sequence[Event]): cmd = None if cmd: - logger.info(f"Executing overlay command: '{cmd}'") - self.ovf.update(cmd) + init = cmd != "close" + if init: + logger.info(f"Executing overlay command: '{cmd}'") + self.ovf.update(cmd, init) def close(self): if self.ovf: diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 3496438f..98881b76 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -185,13 +185,16 @@ def is_healthy(self): return True - def update(self, cmd: Command): + def update(self, cmd: Command, init: bool): # Accessing the user's display requires the user's priviledges + if not self.started and not init: + # This function is called with QAM single presses and guide presses + # do not initialize for those. + return old = switch_priviledge(self.ctx, False) if self.failed: return try: - if not self._start(): self.failed = True return @@ -212,5 +215,5 @@ def update(self, cmd: Command): logger.error(f"Failed launching overlay with error:\n{e}") self.failed = True self.close() + finally: restore_priviledge(old) - raise e From 67a6179a36708ec43bb7c2483476ddb9b718a9e7 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 20:29:52 +0100 Subject: [PATCH 0492/1497] fix restore bug --- src/hhd/plugins/overlay/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 98881b76..0d3bc1ae 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -100,9 +100,9 @@ def loop_manage_overlay( logger.info(f"UI: {l}") if fd_out in r: - cmd = proc.stdout.readline() + cmd = proc.stdout.readline()[:-1] if cmd.startswith("stat:"): - status = cast(Status, cmd[4:]) + status = cast(Status, cmd[5:]) if status == "closed": if shown: hide_hhd(disp, hhd, steam, old) From 37854ef3c305992f667f600e0b0673f4750c791c Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 21:03:33 +0100 Subject: [PATCH 0493/1497] latch to correct window --- src/hhd/plugins/overlay/base.py | 19 +++++++++---------- src/hhd/plugins/overlay/x11.py | 15 +++++++++++---- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 0d3bc1ae..c828d953 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -87,6 +87,10 @@ def loop_manage_overlay( r, _, _ = select.select([fd_out, fd_err], [], [], GUARD_CHECK) + if proc.poll() is not None: + logger.warning(f"Overlay stopped (steam may have restarted). Closing.") + return + if shown and is_steam_shown(disp, steam): logger.warning( f"Steam overlay shown while hhd-ui is active. Hiding UI to avoid issues." @@ -117,6 +121,7 @@ def loop_manage_overlay( finally: logger.info(f"Stopping overlay process.") proc.kill() + proc.wait() class OverlayService: @@ -125,7 +130,6 @@ def __init__(self, ctx: Context) -> None: self.started = False self.t = None self.should_exit = None - self.failed = False def _start(self): # Should not be called by outsiders @@ -137,13 +141,13 @@ def _start(self): exe = find_overlay_exe() if not exe: logger.warning("Overlay is not installed, not launching.") - return + return False logger.info(f"Found overlay executable '{exe}'") displays = get_gamescope_displays() if not displays: logger.warning("Could not find overlay displays, gamescope is not active.") - return + return False logger.debug(f"Found the following gamescope displays: {displays}") res = get_overlay_display(displays) @@ -151,7 +155,7 @@ def _start(self): logger.error( f"Could not find overlay display in gamescope displays. This should never happen." ) - return + return False disp, name = res logger.debug(f"Overlay display is the folling: DISPLAY={name}") @@ -192,18 +196,14 @@ def update(self, cmd: Command, init: bool): # do not initialize for those. return old = switch_priviledge(self.ctx, False) - if self.failed: - return try: if not self._start(): - self.failed = True return if not self.is_healthy(): logger.warning(f"Overlay service died, attempting to restart.") self.close() if not self._start(): - logger.warning(f"Restarting failed, disabling overlay.") - self.failed = True + logger.warning(f"Restarting overlay failed.") return if not self.proc: @@ -213,7 +213,6 @@ def update(self, cmd: Command, init: bool): update_status(self.proc, cmd) except Exception as e: logger.error(f"Failed launching overlay with error:\n{e}") - self.failed = True self.close() finally: restore_priviledge(old) diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index 86623834..4d73efde 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -39,7 +39,7 @@ def get_overlay_display(displays: Sequence[str]): d.close() -def find_win(display: display.Display, win: str): +def find_win(display: display.Display, win: list[str]): n = display.get_atom("WM_CLASS") for w in display.screen().root.query_tree().children: v = w.get_property(n, Xatom.STRING, 0, 50) @@ -47,16 +47,23 @@ def find_win(display: display.Display, win: str): continue if not v.value: continue - if win in v.value.decode(): + + classes = [c.decode() for c in v.value.split(b"\00") if c] + found = True + for val in win: + if val not in classes: + found = False + + if found: return w def find_hhd(display: display.Display): - return find_win(display, "dev.hhd.hhd-ui") + return find_win(display, ["dev.hhd.hhd-ui"]) def find_steam(display: display.Display): - return find_win(display, "steamwebhelper") + return find_win(display, ["steamwebhelper", "steam"]) def print_data(display: display.Display): From b7fed430429cdf0b39ae8542ed3f2bb3e9fbdfdc Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 21:11:29 +0100 Subject: [PATCH 0494/1497] fix race condition with pressing guide --- src/hhd/controller/base.py | 2 +- src/hhd/plugins/overlay/__init__.py | 2 +- src/hhd/plugins/overlay/base.py | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 87340b78..0c5587c6 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -465,7 +465,7 @@ def process(self, events: Sequence[Event]): self.select_is_held = False self.select_pressed = None - if self.emit and ev["code"] == "guide" and ev["value"]: + if self.emit and ev["code"] == "mode" and not ev["value"]: # Steam might do weirdness, emit an event to prepare # the overlay self.emit({"type": "special", "event": "guide"}) diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py index ae75dfe6..2c2ee88b 100644 --- a/src/hhd/plugins/overlay/__init__.py +++ b/src/hhd/plugins/overlay/__init__.py @@ -49,7 +49,7 @@ def notify(self, events: Sequence[Event]): match ev["event"]: case "guide": # Close to avoid issues with steam - cmd = "close" + cmd = "close_now" case "qam_single": # Close to avoid issues with steam cmd = "close" diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index c828d953..302d3d1e 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -24,7 +24,9 @@ ) logger = logging.getLogger(__name__) -Command = Literal["close", "open_qam", "open_expanded", "open_notification"] +Command = Literal[ + "close_now", "close", "open_qam", "open_expanded", "open_notification" +] Status = Literal["closed", "qam", "expanded", "notification"] GUARD_CHECK = 0.5 From 3c5611b7905c923d9c7651bb53e2fd03d60a65bc Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 21:43:07 +0100 Subject: [PATCH 0495/1497] add python-xlib and libusb to dependencies --- PKGBUILD | 2 +- hhd.spec | 2 ++ pyproject.toml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/PKGBUILD b/PKGBUILD index 3823ff68..6f3d4191 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -6,7 +6,7 @@ pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' arch=('x86_64') url='https://github.com/hhd-dev/hhd' license=('MIT') -depends=('python' 'python-setuptools' 'python-evdev' 'python-rich' 'python-yaml') +depends=('python' 'python-setuptools' 'python-evdev' 'python-rich' 'python-yaml' 'python-xlib' 'libusb') optdepends=('hhd-user: allows running hhd as a user service.') makedepends=('python-'{'build','installer','setuptools','wheel'}) source=("https://pypi.python.org/packages/source/h/hhd/hhd-${pkgver}.tar.gz") diff --git a/hhd.spec b/hhd.spec index 19f71806..0a73b0e0 100644 --- a/hhd.spec +++ b/hhd.spec @@ -20,6 +20,8 @@ Requires: python3-evdev Requires: python3-rich Requires: python3-yaml Requires: python3-setuptools +Requires: python3-xlib +Requires: libusb1 %description Handheld Daemon is a project that aims to provide utilities for managing handheld devices. With features ranging from TDP controls, to controller remappings, and gamescope session management. This will be done through a plugin system and an HTTP(/d-bus?) daemon, which will expose the settings of the plugins in a UI agnostic way. diff --git a/pyproject.toml b/pyproject.toml index 36e619dd..28b1b32f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ dependencies = [ "PyYAML>=6.0.1", "rich>=13.5.2", "setuptools>=65.5.0", + "python-xlib>=0.33" ] [project.urls] From af6590f17bd32a90368bb2ad2da366ac97f98a40 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 21:51:07 +0100 Subject: [PATCH 0496/1497] fix overlay starting incorrectly on startup --- src/hhd/plugins/overlay/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py index 2c2ee88b..ca87f892 100644 --- a/src/hhd/plugins/overlay/__init__.py +++ b/src/hhd/plugins/overlay/__init__.py @@ -66,7 +66,7 @@ def notify(self, events: Sequence[Event]): cmd = None if cmd: - init = cmd != "close" + init = "close" not in cmd if init: logger.info(f"Executing overlay command: '{cmd}'") self.ovf.update(cmd, init) From f1bc6fa46490d8f049bf3e3a56a817758b7ca604 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 21:53:03 +0100 Subject: [PATCH 0497/1497] hand on polling updates --- src/hhd/http/api.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 60d6e1b7..f5532d94 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -62,7 +62,9 @@ def parse_path(path: str) -> tuple[list, dict[str, list[str]]]: else: segments = [] - params = {k: v for k, v in parse_qs(url.query).items() if v} + params = { + k: v for k, v in parse_qs(url.query, keep_blank_values=True).items() if v + } return segments, params except Exception: return [], {} @@ -270,9 +272,12 @@ def v1_endpoint(self, content: Any | None): ) self.emit({"type": "state", "config": Config(content)}) self.cond.wait() + elif "poll" in params: + # Hang for the next update if the UI requests it. + self.cond.wait() self.wfile.write(json.dumps(self.conf.conf).encode()) case "version": - self.send_json({"version": 4}) + self.send_json({"version": 5}) case "sections": self.send_json(SECTIONS) case other: From b6eb98604593f8d429fb8a1a46a42c430aadc522 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 22:55:21 +0100 Subject: [PATCH 0498/1497] handle power events --- src/hhd/__main__.py | 2 ++ src/hhd/plugins/plugin.py | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 6051a30f..d7a82ddd 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -423,6 +423,8 @@ def main(): conf.update(ev["config"].conf) case "special": pass + case "power": + pass case other: logger.error(f"Invalid event type submitted: '{other}'") diff --git a/src/hhd/plugins/plugin.py b/src/hhd/plugins/plugin.py index 02e53146..1e94bc21 100644 --- a/src/hhd/plugins/plugin.py +++ b/src/hhd/plugins/plugin.py @@ -27,6 +27,11 @@ class SettingsEvent(TypedDict): type: Literal["settings"] +class PowerEvent(TypedDict): + type: Literal["acpi"] + event: Literal["ac", "dc", "tdp", "battery"] + + class ProfileEvent(TypedDict): type: Literal["profile"] name: str @@ -53,7 +58,13 @@ class InputEvent(TypedDict): Event = ( - ConfigEvent | InputEvent | ProfileEvent | ApplyEvent | SettingsEvent | SpecialEvent + ConfigEvent + | InputEvent + | ProfileEvent + | ApplyEvent + | SettingsEvent + | SpecialEvent + | PowerEvent ) From 1d72eb61c0badebd94641f46b66c203467e49e4c Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 22:56:50 +0100 Subject: [PATCH 0499/1497] use correct name --- src/hhd/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index d7a82ddd..41e29bc5 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -423,7 +423,7 @@ def main(): conf.update(ev["config"].conf) case "special": pass - case "power": + case "acpi": pass case other: logger.error(f"Invalid event type submitted: '{other}'") From c3d640efd10c9f26f1ce56fc3ae0282a4bf373c0 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 1 Mar 2024 23:31:42 +0100 Subject: [PATCH 0500/1497] update error handling to not polute the logs --- src/hhd/http/api.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index f5532d94..e8ea7477 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -302,8 +302,12 @@ def do_GET(self): case other: return self.send_not_found(f"File not found:\n{path}") except Exception as e: - logger.error(f"Encountered error while serving unauthenticated request.") - return self.send_error(f"Encountered error while serving request:\n{e}") + logger.debug(f"Encountered error while serving unauthenticated request.") + try: + return self.send_error(f"Encountered error while serving request:\n{e}") + except Exception: + # Generated due to polling website going in the background + pass def do_POST(self): if not self.send_authenticate(): From 6879f16740e773547822f46a699756ddc9d8f8b3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 00:58:25 +0100 Subject: [PATCH 0501/1497] tweak double press delay --- src/hhd/controller/base.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 0c5587c6..b69121ff 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -229,12 +229,11 @@ def consume(self, events: Sequence[Event]): TouchpadAction = Literal["disabled", "left_click", "right_click"] -QAM_HOLD_TIME = 1 -QAM_MULTI_PRESS_DELAY = 0.3 - class Multiplexer: - QAM_DELAY = 0.2 + QAM_HOLD_TIME = 1 + QAM_MULTI_PRESS_DELAY = 0.25 + QAM_DELAY = 0.1 REBOOT_HOLD = 4 REBOOT_VIBRATION_STRENGTH = 0.6 REBOOT_VIBRATION_ON = 0.3 @@ -574,9 +573,9 @@ def process(self, events: Sequence[Event]): # Handle QAM button qam_apply = False - if self.qam_pressed and curr - self.qam_pressed > QAM_HOLD_TIME: + if self.qam_pressed and curr - self.qam_pressed > self.QAM_HOLD_TIME: qam_apply = True - if self.qam_released and curr - self.qam_released > QAM_MULTI_PRESS_DELAY: + if self.qam_released and curr - self.qam_released > self.QAM_MULTI_PRESS_DELAY: qam_apply = True if qam_apply and self.qam_released and self.qam_times == 1: From 410ebf408503f0bea736a51ca7ec3d2799a0150a Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 11:12:32 +0100 Subject: [PATCH 0502/1497] escalate before getting gamescope displays --- src/hhd/plugins/overlay/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 302d3d1e..d77603ed 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -146,11 +146,14 @@ def _start(self): return False logger.info(f"Found overlay executable '{exe}'") + # FIXME: Find why this command sometimes fails with user priviledges + switch_priviledge(self.ctx, True) displays = get_gamescope_displays() if not displays: logger.warning("Could not find overlay displays, gamescope is not active.") return False logger.debug(f"Found the following gamescope displays: {displays}") + switch_priviledge(self.ctx, False) res = get_overlay_display(displays) if not res: From b9d67caa3e1eb05a50a90bd0770117efaab7de71 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 16:07:01 +0100 Subject: [PATCH 0503/1497] add http api error --- src/hhd/__main__.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 41e29bc5..38a667a0 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -385,7 +385,15 @@ def main(): set_log_plugin("rest") https = HHDHTTPServer(localhost, port, token) https.update(settings, conf, profiles, emit) - https.open() + try: + https.open() + except Exception as e: + logger.error( + f"Could not start http API on port {port}.\n" + + "Is another version of Handheld Daemon open?" + + "Closing." + ) + return update_log_plugins() set_log_plugin("main") From 6eb31b78726e5c0ac9bc956a406075aaa2c607f1 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 16:25:20 +0100 Subject: [PATCH 0504/1497] remove using root to get gamescope display --- src/hhd/plugins/overlay/base.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index d77603ed..81c1b4b9 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -147,13 +147,11 @@ def _start(self): logger.info(f"Found overlay executable '{exe}'") # FIXME: Find why this command sometimes fails with user priviledges - switch_priviledge(self.ctx, True) displays = get_gamescope_displays() if not displays: logger.warning("Could not find overlay displays, gamescope is not active.") return False logger.debug(f"Found the following gamescope displays: {displays}") - switch_priviledge(self.ctx, False) res = get_overlay_display(displays) if not res: From 61d719a106d4aa649518df856596b0c0c7ffc199 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 16:33:05 +0100 Subject: [PATCH 0505/1497] move overlay enable into general settings --- src/hhd/plugins/overlay/__init__.py | 6 +++--- src/hhd/plugins/overlay/settings.yml | 3 +-- src/hhd/settings.yml | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py index ca87f892..420bcdae 100644 --- a/src/hhd/plugins/overlay/__init__.py +++ b/src/hhd/plugins/overlay/__init__.py @@ -9,7 +9,7 @@ class OverlayPlugin(HHDPlugin): def __init__(self) -> None: self.name = f"overlay" - self.priority = 95 + self.priority = 75 self.log = "ovrl" self.ovf = None self.enabled = False @@ -32,11 +32,11 @@ def open( def settings(self): if not self.ovf: return {} - return {"hhd": {"overlay": load_relative_yaml("settings.yml")}} + return {"hhd": {"settings": load_relative_yaml("settings.yml")}} def update(self, conf: Config): # Or with self.enabled to require restart - self.enabled = self.enabled or conf["hhd.overlay.enabled"].to(bool) + self.enabled = self.enabled or conf["hhd.settings.overlay_enabled"].to(bool) def notify(self, events: Sequence[Event]): if not self.ovf or not self.enabled: diff --git a/src/hhd/plugins/overlay/settings.yml b/src/hhd/plugins/overlay/settings.yml index ef5e12dd..d4cc0c07 100644 --- a/src/hhd/plugins/overlay/settings.yml +++ b/src/hhd/plugins/overlay/settings.yml @@ -1,8 +1,7 @@ type: container -title: Overlay Settings children: - enabled: + overlay_enabled: type: bool title: "Overlay with QAM Double/Tripple press (requires restart)" default: True \ No newline at end of file diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index f359297e..863eb397 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -1,6 +1,6 @@ settings: type: container - title: Handheld Daemon Settings + title: Core Settings children: decky_deprecation: From e5b2758ccce273d8d87abdf7d5365071c00d3126 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 16:43:30 +0100 Subject: [PATCH 0506/1497] add non-essential tag for hiding stuff from QAM --- src/hhd/device/generic/controllers.yml | 6 ++++-- src/hhd/device/gpd/win/controllers.yml | 2 ++ src/hhd/device/legion_go/controllers.yml | 8 ++++++++ src/hhd/device/orange_pi/controllers.yml | 3 +++ src/hhd/device/rog_ally/controllers.yml | 5 +++++ src/hhd/plugins/gyro.yml | 1 + src/hhd/plugins/outputs.yml | 4 ++-- src/hhd/settings.yml | 1 + 8 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/hhd/device/generic/controllers.yml b/src/hhd/device/generic/controllers.yml index a681cdf8..2366a505 100644 --- a/src/hhd/device/generic/controllers.yml +++ b/src/hhd/device/generic/controllers.yml @@ -1,6 +1,6 @@ type: container tags: [lgc] -title: Handheld Controller +title: Handheld hint: >- Allows for configuring your handheld's controller to a unified output. @@ -25,6 +25,7 @@ children: imu_hz: type: discrete title: Motion Hz + tags: [ non-essential ] hint: >- Sets the sampling frequency for the IMU. Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. @@ -36,6 +37,7 @@ children: nintendo_mode: type: bool title: Nintendo Mode (A-B Swap) + tags: [ non-essential ] hint: >- Swaps A with B and X with Y. default: False @@ -49,7 +51,7 @@ children: debug: type: bool title: Debug - tags: [advanced, expert] + tags: [advanced, expert, non-essential] hint: >- Output controller events to the console (high CPU use) and raises exceptions (HHD will crash on errors). diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index 2fe08a2f..51c44808 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -37,6 +37,7 @@ children: nintendo_mode: type: bool + tags: [ non-essential ] title: Nintendo Mode (A-B Swap) hint: >- Swaps A with B and X with Y. @@ -44,6 +45,7 @@ children: l4r4_to_qam: type: multiple + tags: [ non-essential ] title: Map L4/R4 to QAM. options: disabled: "Disabled" diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 3bba8b4c..58108e37 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -33,6 +33,7 @@ children: gyro_fix: type: discrete title: Gyro Hz + tags: [ non-essential ] hint: >- Adds polling to the legion go gyroscope, to fix the low polling rate (required for gyroscope support). Set to 0 to disable. @@ -43,6 +44,7 @@ children: gyro_scaling: type: int title: Gyro Scale + tags: [ non-essential ] hint: >- Applies a scaling factor to the legion go gyroscope (since it is misconfigured by the driver). Try different values to see what works best. @@ -54,6 +56,7 @@ children: swap_legion: type: multiple title: Swap Legion with Start/Select + tags: [ non-essential ] hint: >- Swaps the legion buttons with start select. options: @@ -65,6 +68,7 @@ children: nintendo_mode: type: bool title: Nintendo Mode (A-B Swap) + tags: [ non-essential ] hint: >- Swaps A with B and X with Y. default: False @@ -72,6 +76,7 @@ children: m2_to_mute: type: bool title: M2 As Mute + tags: [ non-essential ] hint: >- Maps the M2 to the mute button on Dualsense and the HAPPY_TRIGGER_20 on Xbox. @@ -80,11 +85,13 @@ children: select_reboots: type: bool title: Hold Select to Reboot + tags: [ non-essential ] default: True share_to_qam: type: bool title: Legion R to QAM + tags: [ non-essential ] default: True touchpad: @@ -92,6 +99,7 @@ children: shortcuts: type: bool title: Enable Shortcuts Controller + tags: [ non-essential ] hint: >- When in other modes (dinput, dual dinput, and fps), enable a shortcuts controller to restore Guide, QAM, and shortcut functionality. diff --git a/src/hhd/device/orange_pi/controllers.yml b/src/hhd/device/orange_pi/controllers.yml index a681cdf8..4507bb83 100644 --- a/src/hhd/device/orange_pi/controllers.yml +++ b/src/hhd/device/orange_pi/controllers.yml @@ -18,6 +18,7 @@ children: imu: type: bool title: Motion Support + tags: [ non-essential ] hint: >- Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) default: True @@ -25,6 +26,7 @@ children: imu_hz: type: discrete title: Motion Hz + tags: [ non-essential ] hint: >- Sets the sampling frequency for the IMU. Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. @@ -36,6 +38,7 @@ children: nintendo_mode: type: bool title: Nintendo Mode (A-B Swap) + tags: [ non-essential ] hint: >- Swaps A with B and X with Y. default: False diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 8c6410e6..14ef2d02 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -25,6 +25,7 @@ children: imu_hz: type: discrete title: Motion Hz + tags: [ non-essential ] hint: >- Sets the sampling frequency for the IMU. 1600 requires an IMU patch. @@ -35,6 +36,7 @@ children: led_brightness: type: multiple title: Led Brightness + tags: [ non-essential ] hint: >- When LEDs are configured, set their brightness. High does not work below 30% brightness. @@ -47,11 +49,13 @@ children: select_reboots: type: bool + tags: [ non-essential ] title: Hold Select to Reboot default: True nintendo_mode: type: bool + tags: [ non-essential ] title: Nintendo Mode (A-B Swap) hint: >- Swaps A with B and X with Y. @@ -59,6 +63,7 @@ children: share_to_qam: type: bool + tags: [ non-essential ] title: Map Armory to QAM. tags: [advanced] default: True diff --git a/src/hhd/plugins/gyro.yml b/src/hhd/plugins/gyro.yml index 06ffc5a0..698e12ed 100644 --- a/src/hhd/plugins/gyro.yml +++ b/src/hhd/plugins/gyro.yml @@ -2,6 +2,7 @@ type: mode title: Motion Axis default: default +tags: [ non-essential ] modes: default: type: container diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 867f647e..3c2f024e 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -26,7 +26,7 @@ modes: # dualsense: type: container - tags: [lgc_emulation_dualsense, dualsense] + tags: [lgc_emulation_dualsense, dualsense, non-essential] title: Dualsense hint: >- Emulates the Dualsense Sony controller from the Playstation 5. @@ -78,7 +78,7 @@ modes: dualsense_edge: type: container - tags: [lgc_emulation_dualsense_edge, dualsense_edge] + tags: [lgc_emulation_dualsense_edge, dualsense_edge, non-essential] title: Dualsense Edge hint: >- Emulates the expensive Dualsense Sony controller which enables paddle support. diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index 863eb397..d2adf235 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -1,6 +1,7 @@ settings: type: container title: Core Settings + tags: [non-essential] children: decky_deprecation: From ca90e501b7a1d86b138ecba0e12ed9500a876a89 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 16:51:33 +0100 Subject: [PATCH 0507/1497] rename hhd section --- src/hhd/sections.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/sections.yml b/src/hhd/sections.yml index 044c75a7..b466cd9a 100644 --- a/src/hhd/sections.yml +++ b/src/hhd/sections.yml @@ -2,6 +2,6 @@ sections: system: System tdp: TDP controller: Controller - hhd: About + hhd: Settings bazzite: Bazzite utilities: Utilities From be3b3f37dcb6395623131f24ddc15c47fbd0fdff Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 17:14:54 +0100 Subject: [PATCH 0508/1497] fix version breaking hiding --- src/hhd/http/api.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index e8ea7477..07a66858 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -258,7 +258,11 @@ def v1_endpoint(self, content: Any | None): with self.cond: s = dict(deepcopy(self.settings)) try: - s["hhd"]["version"] = {"type": "version", "value": v} # type: ignore + s["hhd"]["version"] = { # type: ignore + "type": "version", + "tags": ["non-essential", "advanced", "expert", "hide"], + "value": v, + } except Exception as e: logger.error(f"Error while writing version hash to response.") self.wfile.write(json.dumps(s).encode()) From fbaeb30ef32ab00647aa2f13cad6647ad126edd3 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 17:23:28 +0100 Subject: [PATCH 0509/1497] add non-essential tag to touchpad --- src/hhd/plugins/touchpad.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hhd/plugins/touchpad.yml b/src/hhd/plugins/touchpad.yml index d34dae67..0da1ab26 100644 --- a/src/hhd/plugins/touchpad.yml +++ b/src/hhd/plugins/touchpad.yml @@ -23,6 +23,7 @@ modes: emulation: type: container title: Virtual + tags: [non-essential] hint: >- Adds an emulated touchpad. This touchpad is meant to be for desktop use and has left, right click support by default, within gamescope and @@ -56,6 +57,7 @@ modes: controller: type: container title: Controller + tags: [non-essential] hint: >- Uses the touchpad of the emulated controller (if it exists). Otherwise, the touchpad remains unmapped (will still show up in the system). From 8fd41790d1c2b42e8b1e9166f04c180d023ea122 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 18:05:23 +0100 Subject: [PATCH 0510/1497] add multithreading to api to stop blocking --- src/hhd/http/api.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/hhd/http/api.py b/src/hhd/http/api.py index 07a66858..98bf9ea5 100644 --- a/src/hhd/http/api.py +++ b/src/hhd/http/api.py @@ -4,6 +4,7 @@ import os from copy import deepcopy from http.server import BaseHTTPRequestHandler, HTTPServer +from socketserver import ThreadingMixIn from threading import Condition, Thread from typing import Any, Mapping from urllib.parse import parse_qs, urlparse @@ -346,6 +347,10 @@ def __getattr__(self, val: str): return self.do_GET +class ThreadingSimpleServer(ThreadingMixIn, HTTPServer): + pass + + class HHDHTTPServer: def __init__( self, @@ -383,7 +388,7 @@ def update( self.cond.notify_all() def open(self): - self.https = HTTPServer( + self.https = ThreadingSimpleServer( ("127.0.0.1" if self.localhost else "", self.port), self.handler ) self.t = Thread(target=self.https.serve_forever) From 9ce972c054bcb73dec6bf4ca83f998ebcf5650d4 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 20:19:20 +0100 Subject: [PATCH 0511/1497] Revert "remove using root to get gamescope display" This reverts commit 6eb31b78726e5c0ac9bc956a406075aaa2c607f1. --- src/hhd/plugins/overlay/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 81c1b4b9..d77603ed 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -147,11 +147,13 @@ def _start(self): logger.info(f"Found overlay executable '{exe}'") # FIXME: Find why this command sometimes fails with user priviledges + switch_priviledge(self.ctx, True) displays = get_gamescope_displays() if not displays: logger.warning("Could not find overlay displays, gamescope is not active.") return False logger.debug(f"Found the following gamescope displays: {displays}") + switch_priviledge(self.ctx, False) res = get_overlay_display(displays) if not res: From 074f8a506ce1430b632ea4f8c621a33eca73e739 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 21:20:39 +0100 Subject: [PATCH 0512/1497] fix legion go gyro --- src/hhd/controller/physical/imu.py | 11 ++++++++++- src/hhd/device/legion_go/base.py | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 25722c27..71ac5f4f 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -224,6 +224,7 @@ def __init__( scale: Sequence[str | None] | None, mappings: dict[str, tuple[Axis, str | None, float, float | None]], update_trigger: bool = False, + legion_fix: bool = False, ) -> None: self.types = types self.attr = attr @@ -233,6 +234,7 @@ def __init__( self.update_trigger = update_trigger self.fd = 0 self.dev = None + self.legion_fix = legion_fix def open(self): sens_dir, type = find_sensor(self.types) @@ -294,6 +296,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # TODO: Implement parsing iio fully, by adding shifting and cutoff d = data[ofs >> 3 : (ofs >> 3) + (se.storage_bits >> 3)] d = int.from_bytes(d, byteorder=se.endianness, signed=se.signed) + if self.legion_fix and d == -124: + # Legion go likes to overflow to -124 in both directions + # skip this number to avoid jitters + continue # d = d >> se.shift # d &= (1 << se.bits) - 1 d = d * se.scale + se.offset @@ -330,13 +336,16 @@ def __init__(self, freq=None, scale=None) -> None: class GyroImu(IioReader): - def __init__(self, freq=None, scale=None, map=None) -> None: + def __init__( + self, freq=None, scale=None, map=None, legion_fix: bool = False + ) -> None: super().__init__( GYRO_NAMES, ["anglvel"], [freq] if freq else None, [scale], map if map else GYRO_MAPPINGS, + legion_fix=legion_fix, ) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 80403fea..d69307ce 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -213,7 +213,7 @@ def controller_loop_xinput( "anglvel_z": ("gyro_y", "anglvel", conf["gyro_scaling"].to(int), None), "timestamp": ("gyro_ts", None, 1, None), } - d_gyro = GyroImu(map=GYRO_MAPPINGS) + d_gyro = GyroImu(map=GYRO_MAPPINGS, legion_fix=True) # Inputs d_xinput = GenericGamepadEvdev( From fccbb8c3450e63baaaddb056fcd135af3bee41fe Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 22:08:38 +0100 Subject: [PATCH 0513/1497] add option for inverting roll axis --- .../controller/virtual/dualsense/__init__.py | 8 +++++++ src/hhd/plugins/outputs.py | 2 ++ src/hhd/plugins/outputs.yml | 22 +++++++++++++++++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index b9bbdf7a..0eceb0d7 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -60,6 +60,7 @@ def __init__( enable_touchpad: bool = True, enable_rgb: bool = True, sync_gyro: bool = False, + flip_z: bool = True, paddles_to_clicks: bool = False, ) -> None: self.available = False @@ -73,6 +74,7 @@ def __init__( self.enable_touchpad = enable_touchpad self.enable_rgb = enable_rgb self.sync_gyro = sync_gyro + self.flip_z = flip_z self.paddles_to_clicks = paddles_to_clicks self.ofs = ( @@ -300,6 +302,12 @@ def consume(self, events: Sequence[Event]): if not self.enable_touchpad and ev["code"].startswith("touchpad"): continue if ev["code"] in self.axis_map: + if not self.flip_z and ev["code"] == "gyro_z": + # Due to hhd's initial focus on steam input, all + # devices were calibrated with an inverted x axis + # compared to a real dualsense controller + # So to not invert x, you have to invert x. + ev["value"] = -ev["value"] encode_axis(new_rep, self.axis_map[ev["code"]], ev["value"]) # DPAD is weird match ev["code"]: diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index c051ac4a..c3b59176 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -44,6 +44,7 @@ def get_outputs( fake_timestamps=not motion, sync_gyro=conf["dualsense_edge.sync_gyro"].to(bool) and motion, paddles_to_clicks=False, + flip_z=conf["dualsense_edge.flip_z"].to(bool), ) producers.append(d) consumers.append(d) @@ -59,6 +60,7 @@ def get_outputs( fake_timestamps=not motion, sync_gyro=conf["dualsense.sync_gyro"].to(bool) and motion, paddles_to_clicks=conf["dualsense.paddles_to_clicks"].to(bool), + flip_z=conf["dualsense.flip_z"].to(bool), ) producers.append(d) consumers.append(d) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 3c2f024e..07a81daa 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -41,7 +41,7 @@ modes: Passes through the LEDs to the controller, which allows games to control them. default: True - + paddles_to_clicks: type: bool title: Paddles to Clicks @@ -64,6 +64,15 @@ modes: If the IMU is not working, this setting will break the controller. default: False + flip_z: + type: bool + title: Invert Roll Axis + default: True + hint: >- + Inverts the roll (Z) axis compared to a real Dualsense controller. + Useful for Steam Input, since you want it to be inverted to look + left to right, but an issue in emulators. + bluetooth_mode: type: bool title: Bluetooth Mode @@ -106,6 +115,15 @@ modes: If the IMU is not working, this setting will break the controller. default: False + flip_z: + type: bool + title: Invert Roll Axis + default: True + hint: >- + Inverts the roll (Z) axis compared to a real Dualsense controller. + Useful for Steam Input, since you want it to be inverted to look + left to right, but an issue in emulators. + bluetooth_mode: type: bool title: Bluetooth Mode @@ -116,4 +134,4 @@ modes: interact with the controller. However, using USB mode can improve LED support (?) in some games. Test and report back! - default: True \ No newline at end of file + default: True From 328f0abdcec557495e992d5dead6809210483106 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 22:08:50 +0100 Subject: [PATCH 0514/1497] hide bluetooth mode more --- src/hhd/plugins/outputs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/outputs.yml b/src/hhd/plugins/outputs.yml index 07a81daa..2998d13d 100644 --- a/src/hhd/plugins/outputs.yml +++ b/src/hhd/plugins/outputs.yml @@ -76,7 +76,7 @@ modes: bluetooth_mode: type: bool title: Bluetooth Mode - tags: [advanced] + tags: [advanced, expert] hint: >- Emulates the controller in bluetooth mode instead of USB mode. This is the default as it causes less issues with how apps @@ -127,7 +127,7 @@ modes: bluetooth_mode: type: bool title: Bluetooth Mode - tags: [advanced] + tags: [advanced, expert] hint: >- Emulates the controller in bluetooth mode instead of USB mode. This is the default as it causes less issues with how apps From 81a2ce13f923b92e9a00d31728bf2d4e36f66632 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 23:20:05 +0100 Subject: [PATCH 0515/1497] fix regression due to legion gyro fix --- src/hhd/controller/physical/imu.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 71ac5f4f..67fe7f84 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -295,14 +295,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: if se.axis: # TODO: Implement parsing iio fully, by adding shifting and cutoff d = data[ofs >> 3 : (ofs >> 3) + (se.storage_bits >> 3)] - d = int.from_bytes(d, byteorder=se.endianness, signed=se.signed) - if self.legion_fix and d == -124: - # Legion go likes to overflow to -124 in both directions - # skip this number to avoid jitters - continue + d_raw = int.from_bytes(d, byteorder=se.endianness, signed=se.signed) # d = d >> se.shift # d &= (1 << se.bits) - 1 - d = d * se.scale + se.offset + d = d_raw * se.scale + se.offset if se.max_val is not None: if d > 0: @@ -311,13 +307,16 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: d = max(d, -se.max_val) if se.axis not in self.prev or self.prev[se.axis] != d: - out.append( - { - "type": "axis", - "code": se.axis, - "value": d, - } - ) + if not (self.legion_fix and d_raw == -124): + # Legion go likes to overflow to -124 in both directions + # skip this number to avoid jitters + out.append( + { + "type": "axis", + "code": se.axis, + "value": d, + } + ) self.prev[se.axis] = d ofs += se.storage_bits From 548b70c7399c37602394b69f9ae88bca69db6818 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 2 Mar 2024 23:28:05 +0100 Subject: [PATCH 0516/1497] bump max sensitivity for gyro --- src/hhd/device/legion_go/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 58108e37..568fac83 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -51,7 +51,7 @@ children: Low values cause a deadzone and high values will clip when moving the Go abruptly. min: 15 - max: 40 + max: 50 default: 22 swap_legion: type: multiple From 75cfc636de0e72bf8d1543f02b9687fd10ae7aea Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 3 Mar 2024 00:27:13 +0100 Subject: [PATCH 0517/1497] tweak controller yml files --- src/hhd/device/gpd/win/controllers.yml | 1 + src/hhd/device/orange_pi/controllers.yml | 1 - src/hhd/device/rog_ally/controllers.yml | 3 +-- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index 51c44808..bd95c8bd 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -25,6 +25,7 @@ children: imu_hz: type: discrete title: Motion Hz + tags: [ non-essential ] hint: >- Sets the sampling frequency for the IMU. Check `/sys/bus/iio/devices/iio:device0/in_anglvel_sampling_frequency_available`. diff --git a/src/hhd/device/orange_pi/controllers.yml b/src/hhd/device/orange_pi/controllers.yml index 4507bb83..7193fea2 100644 --- a/src/hhd/device/orange_pi/controllers.yml +++ b/src/hhd/device/orange_pi/controllers.yml @@ -18,7 +18,6 @@ children: imu: type: bool title: Motion Support - tags: [ non-essential ] hint: >- Enable gyroscope/accelerometer (IMU) support (.3% background CPU use) default: True diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index 14ef2d02..baf74345 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -63,9 +63,8 @@ children: share_to_qam: type: bool - tags: [ non-essential ] + tags: [ advanced ] title: Map Armory to QAM. - tags: [advanced] default: True debug: From 0e8b0245798767044ffac0a897e19405b19b9030 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 3 Mar 2024 00:31:04 +0100 Subject: [PATCH 0518/1497] update opi controller --- src/hhd/device/orange_pi/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/orange_pi/controllers.yml b/src/hhd/device/orange_pi/controllers.yml index 7193fea2..3909467c 100644 --- a/src/hhd/device/orange_pi/controllers.yml +++ b/src/hhd/device/orange_pi/controllers.yml @@ -1,6 +1,6 @@ type: container tags: [lgc] -title: Handheld Controller +title: Handheld hint: >- Allows for configuring your handheld's controller to a unified output. From 2938388c5fdee1f90ebb9e72594d55bcd4ea8099 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 3 Mar 2024 00:36:13 +0100 Subject: [PATCH 0519/1497] rename to orange pi neo --- src/hhd/device/orange_pi/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/orange_pi/controllers.yml b/src/hhd/device/orange_pi/controllers.yml index 3909467c..fecc185e 100644 --- a/src/hhd/device/orange_pi/controllers.yml +++ b/src/hhd/device/orange_pi/controllers.yml @@ -1,6 +1,6 @@ type: container tags: [lgc] -title: Handheld +title: Orange Pi Neo hint: >- Allows for configuring your handheld's controller to a unified output. From 9c3ece256e8236bf79f0d8678b5e66b7b9d7cfa9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 3 Mar 2024 18:31:37 +0100 Subject: [PATCH 0520/1497] apply legion fix to patched kernel --- src/hhd/controller/physical/imu.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 67fe7f84..7ccf4a4c 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -307,9 +307,16 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: d = max(d, -se.max_val) if se.axis not in self.prev or self.prev[se.axis] != d: - if not (self.legion_fix and d_raw == -124): + if not ( + self.legion_fix and (d_raw == -124 or d_raw // 1000 == -125) + ): # Legion go likes to overflow to -124 in both directions # skip this number to avoid jitters + # With a kernel patch to allow higher resolution, this happens + # with the following numbers + # 4d 95 f3 c7: -124715 + # 33 97 f3 c7: -124718 + # Reported by hhd: -124422, -124419 out.append( { "type": "axis", From d2398e9f43dbfd8e01273fe59ae9596dad44c8c6 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 3 Mar 2024 22:07:56 +0100 Subject: [PATCH 0521/1497] add comment for printing axis --- src/hhd/controller/physical/imu.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index 7ccf4a4c..d729dc36 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -317,6 +317,10 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # 4d 95 f3 c7: -124715 # 33 97 f3 c7: -124718 # Reported by hhd: -124422, -124419 + # Legion go axis tester + # import time + # if se.axis == "gyro_x": + # print(f"{time.time() % 1:.3f} {d_raw}") out.append( { "type": "axis", From c4a0407c09ccdf53d03c32b19349a5b66dfe8484 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 3 Mar 2024 22:36:26 +0100 Subject: [PATCH 0522/1497] bump max sensitivity to 80 --- src/hhd/device/legion_go/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 568fac83..4c90f2b3 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -51,7 +51,7 @@ children: Low values cause a deadzone and high values will clip when moving the Go abruptly. min: 15 - max: 50 + max: 80 default: 22 swap_legion: type: multiple From db54ac0b1c4d246e586cfa52dd9a88dee3fae31c Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 4 Mar 2024 16:23:31 +0100 Subject: [PATCH 0523/1497] allow changing the overlay executable with env variables and using a local version --- src/hhd/plugins/overlay/base.py | 2 +- src/hhd/plugins/overlay/overlay.py | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index d77603ed..951b5a25 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -140,7 +140,7 @@ def _start(self): return True logger.info("Attempting to launch overlay.") - exe = find_overlay_exe() + exe = find_overlay_exe(self.ctx) if not exe: logger.warning("Overlay is not installed, not launching.") return False diff --git a/src/hhd/plugins/overlay/overlay.py b/src/hhd/plugins/overlay/overlay.py index 009d3247..d217cb8f 100644 --- a/src/hhd/plugins/overlay/overlay.py +++ b/src/hhd/plugins/overlay/overlay.py @@ -6,12 +6,27 @@ import subprocess -def find_overlay_exe(): +def find_overlay_exe(ctx: Context): INSTALLED_PATHS = ["hhd-ui-dbg", "hhd-ui"] + usr = os.environ.get("HHD_OVERLAY") + if usr: + if os.path.exists(usr): + return usr + INSTALLED_PATHS.insert(0, usr) + + # FIXME: Potential priviledge escalation attack! + # Runs as the user in `inject_overlay`, so this should + # not be the case. Will still be executed. + for fn in INSTALLED_PATHS: + local = shutil.which(fn, path=expanduser("~/.local/bin", ctx)) + if local: + return local + for fn in INSTALLED_PATHS: - if shutil.which(fn): - return fn + system = shutil.which(fn) + if system: + return system def inject_overlay(fn: str, display: str, ctx: Context): From afa24e1a6c143fc9d180a62585833144451818b9 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 4 Mar 2024 17:01:19 +0100 Subject: [PATCH 0524/1497] switch to press to avoid closing the overly when reloading the controller --- src/hhd/controller/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index b69121ff..bc071383 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -464,7 +464,7 @@ def process(self, events: Sequence[Event]): self.select_is_held = False self.select_pressed = None - if self.emit and ev["code"] == "mode" and not ev["value"]: + if self.emit and ev["code"] == "mode" and ev["value"]: # Steam might do weirdness, emit an event to prepare # the overlay self.emit({"type": "special", "event": "guide"}) From 00802eec553cb67c6441f6e1f1650f6dbb449bda Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 4 Mar 2024 18:44:49 +0100 Subject: [PATCH 0525/1497] fix ally accelerometer regression --- src/hhd/device/rog_ally/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index c517bf3e..a25ff9cd 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -27,9 +27,9 @@ GAMEPAD_PID = 0x028E ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("gyro_x", "accel", 1, 3), - "accel_y": ("gyro_z", "accel", -1, 3), - "accel_z": ("gyro_y", "accel", -1, 3), + "accel_x": ("accel_x", "accel", 1, 3), + "accel_y": ("accel_z", "accel", -1, 3), + "accel_z": ("accel_y", "accel", 1, 3), "anglvel_x": ("gyro_x", "anglvel", 1, None), "anglvel_y": ("gyro_z", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), From 6a25a54b4b2c3b0beeb196fdd257709203d245b2 Mon Sep 17 00:00:00 2001 From: Pat Connors <121328689+nicknamenamenick@users.noreply.github.com> Date: Tue, 5 Mar 2024 22:59:16 -0500 Subject: [PATCH 0526/1497] chore(readme): Update ujust commands for Bazzite Deprecation moment... --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index c56696ce..d174e27d 100644 --- a/readme.md +++ b/readme.md @@ -364,7 +364,7 @@ In addition, Bazzite contains all the required kernel patches for the Handheld D supported devices, so it is the recommended distro to use Handheld Daemon with. After install, you can use `ujust` to install Decky and the Handheld Daemon Decky -plugin with the commands `ujust get-decky`, `ujust get-hhd-decky`. +plugin with the commands `ujust setup-decky`, `ujust setup-decky hhd-decky`. If you need to use a different Handheld Daemon version or a custom one, the install steps do not currently work for Bazzite, but this will be fixed in the future. @@ -526,4 +526,4 @@ hhd # Use the following to run with sudo sudo hhd --user $(whoami) -``` \ No newline at end of file +``` From 734d24e2abd5dff76c851da9adbd74bc0b891fc9 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 8 Mar 2024 19:23:14 +0100 Subject: [PATCH 0527/1497] fix overlay on gpd --- src/hhd/device/gpd/win/base.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index bb9e8214..a6a2d87f 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -36,7 +36,7 @@ TOUCHPAD_VID_2 = 0x0911 TOUCHPAD_PID_2 = 0x5288 -BACK_BUTTON_DELAY = 0.1 +BACK_BUTTON_DELAY = 0.07 # /dev/input/event17 Microsoft X-Box 360 pad usb-0000:73:00.3-4.1/input0 # bus: 0003, vendor 045e, product 028e, version 0101 @@ -192,7 +192,9 @@ def plugin_run( time.sleep(ERROR_DELAY) -def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict, emit: Emitter): +def controller_loop( + conf: Config, should_exit: TEvent, updated: TEvent, dconf: dict, emit: Emitter +): debug = conf.get("debug", False) has_touchpad = dconf.get("touchpad", False) @@ -276,6 +278,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d touchpad_hold=touch_actions["hold"].to(TouchpadAction), nintendo_mode=conf["nintendo_mode"].to(bool), qam_button=qam_button, + emit=emit, ) else: multiplexer = Multiplexer( @@ -283,7 +286,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, dconf: d dpad="analog_to_discrete", nintendo_mode=conf["nintendo_mode"].to(bool), qam_button=qam_button, - emit=emit + emit=emit, ) REPORT_FREQ_MIN = 25 From e89d944be15684bc9f7e8b9c707825717708f0a6 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 19:58:20 +0100 Subject: [PATCH 0528/1497] add skeleton for per-controller gyro + factory reset --- src/hhd/controller/base.py | 2 + src/hhd/device/legion_go/__init__.py | 24 ++++-- src/hhd/device/legion_go/base.py | 89 ++++++++++++++------- src/hhd/device/legion_go/controllers.yml | 99 +++++++++++++++--------- src/hhd/device/legion_go/hid.py | 87 ++++++++++++++++++++- 5 files changed, 232 insertions(+), 69 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index bc071383..235daba2 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -260,6 +260,7 @@ def __init__( nintendo_mode: bool = False, qam_button: str | None = None, emit: Callable[[SpecialEvent], None] | None = None, + imu: None | Literal["left_to_main", "right_to_main", "main_to_sides"] = None, ) -> None: self.swap_guide = swap_guide self.trigger = trigger @@ -275,6 +276,7 @@ def __init__( self.r3_to_share = r3_to_share self.nintendo_mode = nintendo_mode self.emit = emit + self.imu = imu self.state = {} self.touchpad_x = 0 diff --git a/src/hhd/device/legion_go/__init__.py b/src/hhd/device/legion_go/__init__.py index 7a25097d..a0c579a0 100644 --- a/src/hhd/device/legion_go/__init__.py +++ b/src/hhd/device/legion_go/__init__.py @@ -10,11 +10,12 @@ get_outputs_config, get_touchpad_config, get_gyro_state, - get_gyro_config + get_gyro_config, ) from hhd.plugins.settings import HHDSettings from hhd.controller.physical.imu import BMI_MAPPINGS + class LegionControllersPlugin(HHDPlugin): name = "legion_go_controllers" priority = 18 @@ -47,6 +48,9 @@ def settings(self) -> HHDSettings: def update(self, conf: Config): new_conf = conf["controllers.legion_go"] + reset = conf["controllers.legion_go.factory_reset"].to(bool) + conf["controllers.legion_go.factory_reset"] = False + if new_conf == self.prev: return if self.prev is None: @@ -54,10 +58,13 @@ def update(self, conf: Config): else: self.prev.update(new_conf.conf) - self.updated.set() - self.start(self.prev) + if reset: + self.started = False + else: + self.updated.set() + self.start(self.prev, reset) - def start(self, conf): + def start(self, conf, reset=False): from .base import plugin_run if self.started: @@ -68,7 +75,14 @@ def start(self, conf): self.should_exit = Event() self.t = Thread( target=plugin_run, - args=(conf, self.emit, self.context, self.should_exit, self.updated), + args=( + conf, + self.emit, + self.context, + self.should_exit, + self.updated, + {"reset": reset}, + ), ) self.t.start() diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index d69307ce..da3e4a1d 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -1,18 +1,15 @@ -import argparse import logging import re import select -import sys import time from threading import Event as TEvent -from typing import Literal, Sequence +from typing import Sequence -from hhd.controller import Button, Consumer, Event, Producer, Axis +from hhd.controller import Axis, Button, Consumer, Event, Producer from hhd.controller.base import Multiplexer, TouchpadAction from hhd.controller.lib.hid import enumerate_unique from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev -from hhd.controller.physical.hidraw import GenericGamepadHidraw from hhd.controller.physical.imu import AccelImu, GyroImu from hhd.controller.virtual.uinput import HHD_PID_VENDOR, UInputDevice from hhd.plugins import Config, Context, Emitter, get_outputs @@ -26,7 +23,7 @@ LGO_TOUCHPAD_BUTTON_MAP, ) from .gyro_fix import GyroFixer -from .hid import RgbCallback +from .hid import LegionHidraw, RgbCallback ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -43,11 +40,19 @@ def plugin_run( - conf: Config, emit: Emitter, context: Context, should_exit: TEvent, updated: TEvent + conf: Config, + emit: Emitter, + context: Context, + should_exit: TEvent, + updated: TEvent, + others: dict, ): - # Remove leftover udev rules - # unhide_all() - if (gyro_fix := conf.get("gyro_fix", False)) and conf["gyro"].to(bool): + reset = others.get("reset", False) + if ( + conf["imu.mode"].to(str) == "display" + and (gyro_fix := conf.get("imu.display.gyro_fix", False)) + and conf["imu.display.gyro"].to(bool) + ): gyro_fixer = GyroFixer(int(gyro_fix) if int(gyro_fix) > 10 else 100) else: gyro_fixer = None @@ -86,7 +91,7 @@ def plugin_run( logger.info("Launching emulated controller.") if gyro_fixer: gyro_fixer.open() - controller_loop_xinput(conf_copy, should_exit, updated, emit) + controller_loop_xinput(conf_copy, should_exit, updated, emit, reset) else: if controller_mode != "xinput": logger.info( @@ -103,6 +108,7 @@ def plugin_run( should_exit, updated, emit, + reset, ) except Exception as e: logger.error(f"Received the following error:\n{type(e)}: {e}") @@ -116,8 +122,7 @@ def plugin_run( finally: if gyro_fixer: gyro_fixer.close() - # Remove leftover udev rules - # unhide_all() + reset = False def controller_loop_rest( @@ -127,6 +132,7 @@ def controller_loop_rest( should_exit: TEvent, updated: TEvent, emit: Emitter, + reset: bool, ): debug = conf.get("debug", False) shortcuts_enabled = conf["shortcuts"].to(bool) @@ -137,7 +143,7 @@ def controller_loop_rest( logger.info(f"Shortcuts disabled. Waiting for controllers to change modes.") d_raw = SelectivePassthrough( - GenericGamepadHidraw( + LegionHidraw( vid=[LEN_VID], pid=list(LEN_PIDS), usage_page=[0xFFA0], @@ -146,7 +152,7 @@ def controller_loop_rest( axis_map=LGO_RAW_INTERFACE_AXIS_MAP, btn_map=LGO_RAW_INTERFACE_BTN_MAP, required=True, - ) + ).with_settings(None, reset) ) multiplexer = Multiplexer( @@ -194,12 +200,17 @@ def controller_loop_rest( def controller_loop_xinput( - conf: Config, should_exit: TEvent, updated: TEvent, emit: Emitter + conf: Config, should_exit: TEvent, updated: TEvent, emit: Emitter, reset: bool ): debug = conf.get("debug", False) # Output - motion = conf["accel"].to(bool) or conf["gyro"].to(bool) + dimu = conf["imu.mode"].to(str) + motion = ( + dimu != "display" + or conf["imu.display.accel"].to(bool) + or conf["imu.display.gyro"].to(bool) + ) d_producers, d_outs, d_params = get_outputs( conf["xinput"], conf["touchpad"], motion ) @@ -208,9 +219,24 @@ def controller_loop_xinput( d_accel = AccelImu() # Legion go has a bit lower sensitivity than it should GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "anglvel_x": ("gyro_z", "anglvel", -conf["gyro_scaling"].to(int), None), - "anglvel_y": ("gyro_x", "anglvel", conf["gyro_scaling"].to(int), None), - "anglvel_z": ("gyro_y", "anglvel", conf["gyro_scaling"].to(int), None), + "anglvel_x": ( + "gyro_z", + "anglvel", + -conf["imu.display.gyro_scaling"].to(int), + None, + ), + "anglvel_y": ( + "gyro_x", + "anglvel", + conf["imu.display.gyro_scaling"].to(int), + None, + ), + "anglvel_z": ( + "gyro_y", + "anglvel", + conf["imu.display.gyro_scaling"].to(int), + None, + ), "timestamp": ("gyro_ts", None, 1, None), } d_gyro = GyroImu(map=GYRO_MAPPINGS, legion_fix=True) @@ -235,7 +261,7 @@ def controller_loop_xinput( required=True, ) d_raw = SelectivePassthrough( - GenericGamepadHidraw( + LegionHidraw( vid=[LEN_VID], pid=list(LEN_PIDS), usage_page=[0xFFA0], @@ -246,8 +272,9 @@ def controller_loop_xinput( config_map=LGO_RAW_INTERFACE_CONFIG_MAP, callback=RgbCallback(), required=True, - ) + ).with_settings(dimu, reset) ) + # Mute keyboard shortcuts, mute d_shortcuts = GenericGamepadEvdev( vid=[LEN_VID], @@ -274,6 +301,14 @@ def controller_loop_xinput( else conf["touchpad.emulation"] ) + match dimu: + case "left": + simu = "left_to_main" + case "right": + simu = "right_to_main" + case _: + simu = None + multiplexer = Multiplexer( swap_guide=swap_guide, trigger="analog_to_discrete", @@ -287,6 +322,7 @@ def controller_loop_xinput( r3_to_share=conf["m2_to_mute"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), emit=emit, + imu=simu, ) REPORT_FREQ_MIN = 25 @@ -308,10 +344,11 @@ def prepare(m): try: prepare(d_xinput) - if conf.get("accel", False): - prepare(d_accel) - if conf.get("gyro", False): - prepare(d_gyro) + if motion and dimu == "display": + if conf.get("imu.display.accel", False): + prepare(d_accel) + if conf.get("imu.display.gyro", False): + prepare(d_gyro) prepare(d_shortcuts) if d_params["uses_touch"]: prepare(d_touch) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 4c90f2b3..8fde1c4c 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -16,43 +16,60 @@ children: # # Common settings # - gyro: - type: bool - title: Gyroscope - hint: >- - Enables gyroscope support (.3% background CPU use) - default: True - accel: - type: bool - title: Accelerometer - tags: [advanced, expert] - hint: >- - Enables accelerometer support (CURRENTLY BROKEN; interferes with gyro; - if someone asks it will be fixed). - default: False - gyro_fix: - type: discrete - title: Gyro Hz - tags: [ non-essential ] - hint: >- - Adds polling to the legion go gyroscope, to fix the low polling rate - (required for gyroscope support). Set to 0 to disable. - Due to hardware limitations, there is a marginal difference above - 100hz. - options: [0, 40, 60, 75, 100, 125, 200, 300] - default: 100 - gyro_scaling: - type: int - title: Gyro Scale - tags: [ non-essential ] - hint: >- - Applies a scaling factor to the legion go gyroscope (since it is misconfigured - by the driver). Try different values to see what works best. - Low values cause a deadzone and high values will clip when moving the - Go abruptly. - min: 15 - max: 80 - default: 22 + imu: + type: mode + title: Motions Device + default: display + tags: [non-essential] + + modes: + display: + type: container + title: Display + children: + gyro: + type: bool + title: Gyroscope + hint: >- + Enables gyroscope support (.3% background CPU use) + default: True + accel: + type: bool + title: Accelerometer + tags: [advanced, expert] + hint: >- + Enables accelerometer support (CURRENTLY BROKEN). + default: False + gyro_fix: + type: discrete + title: Gyro Hz + tags: [ non-essential ] + hint: >- + Adds polling to the legion go gyroscope, to fix the low polling rate + (required for gyroscope support). Set to 0 to disable. + Due to hardware limitations, there is a marginal difference above + 100hz. + options: [0, 40, 60, 75, 100, 125, 200, 300] + default: 100 + gyro_scaling: + type: int + title: Gyro Scale + tags: [ non-essential ] + hint: >- + Applies a scaling factor to the legion go gyroscope (since it is misconfigured + by the driver). Try different values to see what works best. + Low values cause a deadzone and high values will clip when moving the + Go abruptly. + min: 15 + max: 80 + default: 22 + left: + type: container + title: Left Controller + right: + type: container + title: Right Controller + swap_legion: type: multiple title: Swap Legion with Start/Select @@ -104,6 +121,14 @@ children: When in other modes (dinput, dual dinput, and fps), enable a shortcuts controller to restore Guide, QAM, and shortcut functionality. default: True + + factory_reset: + type: action + title: Factory Reset Controllers + tags: [ non-essential ] + hint: >- + Resets the controllers to factory settings. + debug: type: bool title: Debug diff --git a/src/hhd/device/legion_go/hid.py b/src/hhd/device/legion_go/hid.py index 8ff86380..02c714e9 100644 --- a/src/hhd/device/legion_go/hid.py +++ b/src/hhd/device/legion_go/hid.py @@ -1,8 +1,12 @@ +import logging from enum import Enum from typing import Literal, Sequence from hhd.controller import Event from hhd.controller.lib.hid import Device +from hhd.controller.physical.hidraw import GenericGamepadHidraw + +logger = logging.getLogger(__name__) Controller = Literal["left", "right"] RgbMode = Literal["solid", "pulse", "dynamic", "spiral"] @@ -12,6 +16,10 @@ RGB_MODE_SPIRAL = 0x04 +def to_bytes(s: str): + return bytes.fromhex(s.replace(" ", "")) + + def _get_controller(c: Controller): if c == "left": return 0x03 @@ -102,6 +110,40 @@ def rgb_enable(controller: Controller, enable: bool): ) +def controller_enable_gyro(controller: Controller): + rc = _get_controller(controller) + EN = 0x01 + M = 0x02 + return [ + # Enable the gyro if its disabled + bytes([0x05, 0x06, 0x6A, 0x02, rc, EN, 0x01]), + # Enable high quality report + bytes([0x05, 0x06, 0x6A, 0x07, rc, M, 0x01]), + ] + + +def controller_disable_gyro(controller: Controller): + rc = _get_controller(controller) + M = 0x01 + return [ + # Disable high quality report + bytes([0x05, 0x06, 0x6A, 0x07, rc, M, 0x01]), + ] + + +def controller_factory_reset(): + return [ + # RX + to_bytes("0405 05 01 01 01 01"), + # Dongle (?) + to_bytes("0405 05 01 01 02 01"), + # Left + to_bytes("0405 05 01 01 03 01"), + # Right + to_bytes("0405 05 01 01 04 01"), + ] + + def rgb_multi_load_settings( mode: RgbMode, profile: Literal[1, 2, 3], @@ -156,7 +198,7 @@ def __call__(self, dev: Device, events: Sequence[Event]): case "rainbow": mode = "dynamic" case "solid": - if ev["red"] or ev['green'] or ev['blue']: + if ev["red"] or ev["green"] or ev["blue"]: mode = "solid" else: # Disable if brightness is 0 @@ -184,3 +226,46 @@ def __call__(self, dev: Device, events: Sequence[Event]): for r in reps: dev.write(r) + + +class LegionHidraw(GenericGamepadHidraw): + def with_settings(self, gyro: str | None, reset: bool): + self.gyro = gyro + self.reset = reset + return self + + def open(self): + out = super().open() + if not out: + return out + if not self.dev: + return out + + cmds = [] + + if self.gyro == "left": + cmds.extend(controller_enable_gyro("left")) + if self.gyro == "right": + cmds.extend(controller_enable_gyro("right")) + if self.reset: + logger.warning(f"Factory Resetting controllers") + cmds.extend(controller_factory_reset()) + + for r in cmds: + self.dev.write(r) + + return out + + def close(self, exit: bool) -> bool: + if not self.dev: + return super().close(exit) + + cmds = [] + if self.gyro == "left": + cmds.extend(controller_disable_gyro("left")) + if self.gyro == "right": + cmds.extend(controller_disable_gyro("right")) + for r in cmds: + self.dev.write(r) + + return super().close(exit) From 8de7bc0370bd46800c79cfae3a3dd569d7ced3aa Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 20:41:02 +0100 Subject: [PATCH 0529/1497] add bit maps for controller imus --- src/hhd/controller/const.py | 11 +++++------ src/hhd/device/legion_go/base.py | 7 +++++++ src/hhd/device/legion_go/const.py | 18 ++++++++++++++++++ src/hhd/device/legion_go/hid.py | 8 ++++---- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/hhd/controller/const.py b/src/hhd/controller/const.py index c96db933..423e745c 100644 --- a/src/hhd/controller/const.py +++ b/src/hhd/controller/const.py @@ -20,13 +20,14 @@ "accel_x", "accel_y", "accel_z", - "accel_ts", + "accel_ts", # deprecated # Gyroscope # Values should be in deg/s "gyro_x", "gyro_y", "gyro_z", - "gyro_ts", + "gyro_ts", # deprecated + "imu_ts", # Touchpad # Both width and height should go from [0, 1]. Aspect ratio is a setting. # It is up to the device whether to stretch, crop and how to crop (either @@ -38,22 +39,20 @@ "left_accel_x", "left_accel_y", "left_accel_z", - "left_accel_ts", "left_gyro_x", "left_gyro_y", "left_gyro_z", - "left_gyro_ts", + "left_imu_ts", "left_touchpad_x", "left_touchpad_y", # Right "right_accel_x", "right_accel_y", "right_accel_z", - "right_accel_ts", "right_gyro_x", "right_gyro_y", "right_gyro_z", - "right_gyro_ts", + "right_imu_ts", "right_touchpad_x", "right_touchpad_y", ] diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index da3e4a1d..12ab4b9d 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -430,6 +430,13 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: out.append(ev) elif ev["type"] == "button" and ev["code"] in self.passthrough: out.append(ev) + elif ( + ev["type"] == "axis" + and "imu" in ev["code"] + or "accel" in ev["code"] + or "gyro" in ev["code"] + ): + out.append(ev) elif ev["type"] == "button" and self.state: self.to_disable_btn.add(ev["code"]) elif ev["type"] == "axis" and self.state: diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index 038f7252..6cbef8f9 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -80,10 +80,28 @@ # "mouse_wheel": AM(25 << 3, "m8", scale=1), # TODO: Fix weird behavior # "touchpad_x": AM(26 << 3, "u16"), # "touchpad_y": AM(28 << 3, "u16"), + # Legacy # "left_gyro_x": AM(30 << 3, "m8"), # "left_gyro_y": AM(31 << 3, "m8"), # "right_gyro_x": AM(32 << 3, "m8"), # "right_gyro_y": AM(33 << 3, "m8"), + # Per controller IMU + # Left + "left_imu_ts": AM(34 << 3, "u8", scale=1), + "left_accel_x": AM(35 << 3, "i16", scale=1), + "left_accel_y": AM(37 << 3, "i16", scale=1), + "left_accel_z": AM(39 << 3, "i16", scale=1), + "left_gyro_x": AM(41 << 3, "i16", scale=1), + "left_gyro_y": AM(43 << 3, "i16", scale=1), + "left_gyro_z": AM(45 << 3, "i16", scale=1), + # Right + "right_imu_ts": AM(47 << 3, "u8", scale=1), + "right_accel_x": AM(48 << 3, "i16", scale=1), + "right_accel_y": AM(50 << 3, "i16", scale=1), + "right_accel_z": AM(52 << 3, "i16", scale=1), + "right_gyro_x": AM(54 << 3, "i16", scale=1), + "right_gyro_y": AM(56 << 3, "i16", scale=1), + "right_gyro_z": AM(58 << 3, "i16", scale=1), } } diff --git a/src/hhd/device/legion_go/hid.py b/src/hhd/device/legion_go/hid.py index 02c714e9..12936639 100644 --- a/src/hhd/device/legion_go/hid.py +++ b/src/hhd/device/legion_go/hid.py @@ -261,10 +261,10 @@ def close(self, exit: bool) -> bool: return super().close(exit) cmds = [] - if self.gyro == "left": - cmds.extend(controller_disable_gyro("left")) - if self.gyro == "right": - cmds.extend(controller_disable_gyro("right")) + # Always reset both gyros to avoid leaving them on + # in case they use battery + cmds.extend(controller_disable_gyro("left")) + cmds.extend(controller_disable_gyro("right")) for r in cmds: self.dev.write(r) From 337bc6cc48b63797832bc248b07ce7ad023bf6b8 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 21:18:16 +0100 Subject: [PATCH 0530/1497] handle timestamps --- src/hhd/device/legion_go/base.py | 46 +++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 12ab4b9d..54edfa1b 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -48,16 +48,18 @@ def plugin_run( others: dict, ): reset = others.get("reset", False) - if ( - conf["imu.mode"].to(str) == "display" - and (gyro_fix := conf.get("imu.display.gyro_fix", False)) - and conf["imu.display.gyro"].to(bool) - ): - gyro_fixer = GyroFixer(int(gyro_fix) if int(gyro_fix) > 10 else 100) - else: - gyro_fixer = None + gyro_fixer = None while not should_exit.is_set(): + if ( + conf["imu.mode"].to(str) == "display" + and (gyro_fix := conf.get("imu.display.gyro_fix", False)) + and conf["imu.display.gyro"].to(bool) + ): + gyro_fixer = GyroFixer(int(gyro_fix) if int(gyro_fix) > 10 else 100) + else: + gyro_fixer = None + try: controller_mode = None pid = None @@ -326,7 +328,7 @@ def controller_loop_xinput( ) REPORT_FREQ_MIN = 25 - REPORT_FREQ_MAX = 400 + REPORT_FREQ_MAX = 500 REPORT_DELAY_MAX = 1 / REPORT_FREQ_MIN REPORT_DELAY_MIN = 1 / REPORT_FREQ_MAX @@ -356,6 +358,10 @@ def prepare(m): for d in d_producers: prepare(d) + # begin = time.perf_counter() + ts_count: dict[str, int] = {"left_imu_ts": 0, "right_imu_ts": 0} + ts_last: dict[str, int] = {"left_imu_ts": 0, "right_imu_ts": 0} + logger.info("Emulated controller launched, have fun!") while not should_exit.is_set() and not updated.is_set(): start = time.perf_counter() @@ -370,7 +376,29 @@ def prepare(m): if id(d) in to_run: evs.extend(d.produce(r)) + # Patch timestamps to convert them to ns + for ev in evs: + if ev["type"] == "axis" and "_imu_ts" in ev["code"]: + # Find diff between previous event + last = ts_last[ev["code"]] + curr = ev["value"] + diff = curr - last + if curr < last: + diff += 256 + ts_last[ev["code"]] = curr + # 8ms per count + ts_count[ev["code"]] += diff * 8_000_000 + ev["value"] = ts_count[ev["code"]] + evs = multiplexer.process(evs) + # curr = time.perf_counter() - begin + # for ev in evs: + # if "ts" not in ev["code"]: + # continue + # print( + # f"{curr:7.3f}: {ev['type']:7s} {ev['code']:15s} {ev.get('value', 0):7d}" + # ) + if evs: if debug: logger.info(evs) From 51cb56b74b43fedd54a87cca3e8cac2fadc3df31 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 21:30:35 +0100 Subject: [PATCH 0531/1497] fix gyro scaling --- src/hhd/device/legion_go/base.py | 8 -------- src/hhd/device/legion_go/const.py | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 54edfa1b..926c1fa9 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -358,7 +358,6 @@ def prepare(m): for d in d_producers: prepare(d) - # begin = time.perf_counter() ts_count: dict[str, int] = {"left_imu_ts": 0, "right_imu_ts": 0} ts_last: dict[str, int] = {"left_imu_ts": 0, "right_imu_ts": 0} @@ -391,13 +390,6 @@ def prepare(m): ev["value"] = ts_count[ev["code"]] evs = multiplexer.process(evs) - # curr = time.perf_counter() - begin - # for ev in evs: - # if "ts" not in ev["code"]: - # continue - # print( - # f"{curr:7.3f}: {ev['type']:7s} {ev['code']:15s} {ev.get('value', 0):7d}" - # ) if evs: if debug: diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index 6cbef8f9..c376e62e 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -88,20 +88,20 @@ # Per controller IMU # Left "left_imu_ts": AM(34 << 3, "u8", scale=1), - "left_accel_x": AM(35 << 3, "i16", scale=1), - "left_accel_y": AM(37 << 3, "i16", scale=1), - "left_accel_z": AM(39 << 3, "i16", scale=1), - "left_gyro_x": AM(41 << 3, "i16", scale=1), - "left_gyro_y": AM(43 << 3, "i16", scale=1), - "left_gyro_z": AM(45 << 3, "i16", scale=1), + "left_accel_x": AM(35 << 3, "i16", scale=0.002, order="big"), + "left_accel_y": AM(37 << 3, "i16", scale=0.002, order="big"), + "left_accel_z": AM(39 << 3, "i16", scale=0.002, order="big"), + "left_gyro_x": AM(41 << 3, "i16", scale=1, order="big"), + "left_gyro_y": AM(43 << 3, "i16", scale=1, order="big"), + "left_gyro_z": AM(45 << 3, "i16", scale=1, order="big"), # Right "right_imu_ts": AM(47 << 3, "u8", scale=1), - "right_accel_x": AM(48 << 3, "i16", scale=1), - "right_accel_y": AM(50 << 3, "i16", scale=1), - "right_accel_z": AM(52 << 3, "i16", scale=1), - "right_gyro_x": AM(54 << 3, "i16", scale=1), - "right_gyro_y": AM(56 << 3, "i16", scale=1), - "right_gyro_z": AM(58 << 3, "i16", scale=1), + "right_accel_x": AM(48 << 3, "i16", scale=0.002, order="big"), + "right_accel_y": AM(50 << 3, "i16", scale=0.002, order="big"), + "right_accel_z": AM(52 << 3, "i16", scale=0.002, order="big"), + "right_gyro_x": AM(54 << 3, "i16", scale=1, order="big"), + "right_gyro_y": AM(56 << 3, "i16", scale=1, order="big"), + "right_gyro_z": AM(58 << 3, "i16", scale=1, order="big"), } } From c931ac8b0513181a9418b9027224a352d1c5f153 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 21:52:50 +0100 Subject: [PATCH 0532/1497] route controllers and fix scaling --- src/hhd/__main__.py | 2 +- src/hhd/controller/base.py | 57 +++++++++++++++++++ .../controller/virtual/dualsense/__init__.py | 7 ++- src/hhd/controller/virtual/dualsense/const.py | 6 +- src/hhd/controller/virtual/uinput/__init__.py | 1 + src/hhd/device/legion_go/base.py | 1 - src/hhd/device/legion_go/const.py | 24 ++++---- 7 files changed, 79 insertions(+), 19 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 38a667a0..c7101502 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -390,7 +390,7 @@ def main(): except Exception as e: logger.error( f"Could not start http API on port {port}.\n" - + "Is another version of Handheld Daemon open?" + + "Is another version of Handheld Daemon open?\n" + "Closing." ) return diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 235daba2..e3877bdb 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -383,6 +383,63 @@ def process(self, events: Sequence[Event]): for ev in events: match ev["type"]: case "axis": + match self.imu: + case "left_to_main": + match ev["code"]: + case "left_accel_x": + ev["code"] = "accel_x" + case "left_accel_y": + ev["code"] = "accel_y" + case "left_accel_z": + ev["code"] = "accel_z" + case "left_gyro_x": + ev["code"] = "gyro_x" + case "left_gyro_y": + ev["code"] = "gyro_y" + case "left_gyro_z": + ev["code"] = "gyro_z" + case "left_imu_ts": + ev["code"] = "imu_ts" + case "right_to_main": + match ev["code"]: + case "right_accel_x": + ev["code"] = "accel_x" + case "right_accel_y": + ev["code"] = "accel_y" + case "right_accel_z": + ev["code"] = "accel_z" + case "right_gyro_x": + ev["code"] = "gyro_x" + case "right_gyro_y": + ev["code"] = "gyro_y" + case "right_gyro_z": + ev["code"] = "gyro_z" + case "right_imu_ts": + ev["code"] = "imu_ts" + case "main_to_sides": + match ev["code"]: + case "accel_x": + ev["code"] = "right_accel_x" + ev["code"] = "left_accel_x" + case "accel_y": + ev["code"] = "right_accel_y" + ev["code"] = "left_accel_y" + case "accel_z": + ev["code"] = "right_accel_z" + ev["code"] = "left_accel_z" + case "gyro_x": + ev["code"] = "right_gyro_x" + ev["code"] = "left_gyro_x" + case "gyro_y": + ev["code"] = "right_gyro_y" + ev["code"] = "left_gyro_y" + case "gyro_z": + ev["code"] = "right_gyro_z" + ev["code"] = "left_gyro_z" + case "imu_ts": + ev["code"] = "right_imu_ts" + ev["code"] = "left_imu_ts" + if self.trigger == "analog_to_discrete" and ev["code"] in ( "lt", "rt", diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 0eceb0d7..40f9ed8c 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -308,7 +308,10 @@ def consume(self, events: Sequence[Event]): # compared to a real dualsense controller # So to not invert x, you have to invert x. ev["value"] = -ev["value"] - encode_axis(new_rep, self.axis_map[ev["code"]], ev["value"]) + try: + encode_axis(new_rep, self.axis_map[ev["code"]], ev["value"]) + except Exception: + logger.warning(f"Encoding '{ev['code']}' with {ev['value']} overflowed.") # DPAD is weird match ev["code"]: case "hat_x": @@ -349,7 +352,7 @@ def consume(self, events: Sequence[Event]): (y & 0x0F) << 4 ) new_rep[self.ofs + 35] = y >> 4 - case "gyro_ts": + case "gyro_ts" | "accel_ts" | "imu_ts": send = True new_rep[self.ofs + 27 : self.ofs + 31] = int( ev["value"] / DS5_EDGE_DELTA_TIME_NS diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index 666c1887..bac67828 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -134,9 +134,9 @@ def prefill_ds5_report(bluetooth: bool): "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20 * 180 / 3.14), "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20 * 180 / 3.14), "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20 * 180 / 3.14), - "accel_x": AM(((ofs + 21) << 3), "i16", scale=10000), - "accel_y": AM(((ofs + 23) << 3), "i16", scale=10000), - "accel_z": AM(((ofs + 25) << 3), "i16", scale=10000), + "accel_x": AM(((ofs + 21) << 3), "i16", scale=1000), + "accel_y": AM(((ofs + 23) << 3), "i16", scale=1000), + "accel_z": AM(((ofs + 25) << 3), "i16", scale=1000), } DS5_BT_AXIS_MAP = get_axis_map(DS5_INPUT_REPORT_BT_OFS) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 37a81cc7..afde3327 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -102,6 +102,7 @@ def consume(self, events: Sequence[Event]): elif self.output_imu_timestamps and ev["code"] in ( "accel_ts", "gyro_ts", + "imu_ts", ): # We have timestamps with ns accuracy. # Evdev expects us accuracy diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 926c1fa9..1edd7ef1 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -388,7 +388,6 @@ def prepare(m): # 8ms per count ts_count[ev["code"]] += diff * 8_000_000 ev["value"] = ts_count[ev["code"]] - evs = multiplexer.process(evs) if evs: diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index c376e62e..c64c0105 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -88,20 +88,20 @@ # Per controller IMU # Left "left_imu_ts": AM(34 << 3, "u8", scale=1), - "left_accel_x": AM(35 << 3, "i16", scale=0.002, order="big"), - "left_accel_y": AM(37 << 3, "i16", scale=0.002, order="big"), - "left_accel_z": AM(39 << 3, "i16", scale=0.002, order="big"), - "left_gyro_x": AM(41 << 3, "i16", scale=1, order="big"), - "left_gyro_y": AM(43 << 3, "i16", scale=1, order="big"), - "left_gyro_z": AM(45 << 3, "i16", scale=1, order="big"), + "left_accel_x": AM(35 << 3, "i16", scale=0.001197, order="big"), + "left_accel_y": AM(37 << 3, "i16", scale=0.001197, order="big"), + "left_accel_z": AM(39 << 3, "i16", scale=0.001197, order="big"), + "left_gyro_x": AM(41 << 3, "i16", scale=0.000066, order="big"), + "left_gyro_y": AM(43 << 3, "i16", scale=0.000066, order="big"), + "left_gyro_z": AM(45 << 3, "i16", scale=0.000066, order="big"), # Right "right_imu_ts": AM(47 << 3, "u8", scale=1), - "right_accel_x": AM(48 << 3, "i16", scale=0.002, order="big"), - "right_accel_y": AM(50 << 3, "i16", scale=0.002, order="big"), - "right_accel_z": AM(52 << 3, "i16", scale=0.002, order="big"), - "right_gyro_x": AM(54 << 3, "i16", scale=1, order="big"), - "right_gyro_y": AM(56 << 3, "i16", scale=1, order="big"), - "right_gyro_z": AM(58 << 3, "i16", scale=1, order="big"), + "right_accel_x": AM(48 << 3, "i16", scale=0.001197, order="big"), + "right_accel_y": AM(50 << 3, "i16", scale=0.001197, order="big"), + "right_accel_z": AM(52 << 3, "i16", scale=0.001197, order="big"), + "right_gyro_x": AM(54 << 3, "i16", scale=0.000066, order="big"), + "right_gyro_y": AM(56 << 3, "i16", scale=0.000066, order="big"), + "right_gyro_z": AM(58 << 3, "i16", scale=0.000066, order="big"), } } From 86289efea101616f3949b4e6753b13b94603711c Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 22:42:18 +0100 Subject: [PATCH 0533/1497] fix axis --- src/hhd/controller/physical/hidraw.py | 10 ++++++++-- src/hhd/device/legion_go/base.py | 7 ++----- src/hhd/device/legion_go/const.py | 24 ++++++++++++------------ 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/hhd/controller/physical/hidraw.py b/src/hhd/controller/physical/hidraw.py index 6a1ba34d..59d3b78a 100644 --- a/src/hhd/controller/physical/hidraw.py +++ b/src/hhd/controller/physical/hidraw.py @@ -47,6 +47,7 @@ def __init__( callback: EventCallback | None = None, report_size: int = MAX_REPORT_SIZE, required: bool = True, + lossless: bool = True, ) -> None: self.vid = vid self.pid = pid @@ -61,6 +62,7 @@ def __init__( self.config_map = config_map self.callback = callback self.required = required + self.lossless = lossless self.path = None self.dev: Device | None = None @@ -119,9 +121,13 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: return [] rep = None - # Throw away stale events - while can_read(self.fd): + if self.lossless: + # Keep all events rep = self.dev.read(self.report_size) + else: + # Throw away stale events + while can_read(self.fd): + rep = self.dev.read(self.report_size) # If we could not read (?) return if not rep: diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 1edd7ef1..044bdc4f 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -449,11 +449,8 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: out.append(ev) elif ev["type"] == "button" and ev["code"] in self.passthrough: out.append(ev) - elif ( - ev["type"] == "axis" - and "imu" in ev["code"] - or "accel" in ev["code"] - or "gyro" in ev["code"] + elif ev["type"] == "axis" and ( + "imu" in ev["code"] or "accel" in ev["code"] or "gyro" in ev["code"] ): out.append(ev) elif ev["type"] == "button" and self.state: diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index c64c0105..f2c2db63 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -88,20 +88,20 @@ # Per controller IMU # Left "left_imu_ts": AM(34 << 3, "u8", scale=1), - "left_accel_x": AM(35 << 3, "i16", scale=0.001197, order="big"), - "left_accel_y": AM(37 << 3, "i16", scale=0.001197, order="big"), - "left_accel_z": AM(39 << 3, "i16", scale=0.001197, order="big"), - "left_gyro_x": AM(41 << 3, "i16", scale=0.000066, order="big"), - "left_gyro_y": AM(43 << 3, "i16", scale=0.000066, order="big"), - "left_gyro_z": AM(45 << 3, "i16", scale=0.000066, order="big"), + "left_accel_x": AM(35 << 3, "i16", scale=-0.001197, order="big"), + "left_accel_z": AM(37 << 3, "i16", scale=-0.001197, order="big"), + "left_accel_y": AM(39 << 3, "i16", scale=-0.001197, order="big"), + "left_gyro_x": AM(41 << 3, "i16", scale=-0.000066, order="big"), + "left_gyro_z": AM(43 << 3, "i16", scale=0.000066, order="big"), + "left_gyro_y": AM(45 << 3, "i16", scale=-0.000066, order="big"), # Right "right_imu_ts": AM(47 << 3, "u8", scale=1), - "right_accel_x": AM(48 << 3, "i16", scale=0.001197, order="big"), - "right_accel_y": AM(50 << 3, "i16", scale=0.001197, order="big"), - "right_accel_z": AM(52 << 3, "i16", scale=0.001197, order="big"), - "right_gyro_x": AM(54 << 3, "i16", scale=0.000066, order="big"), - "right_gyro_y": AM(56 << 3, "i16", scale=0.000066, order="big"), - "right_gyro_z": AM(58 << 3, "i16", scale=0.000066, order="big"), + "right_accel_z": AM(48 << 3, "i16", scale=0.001197, order="big"), + "right_accel_x": AM(50 << 3, "i16", scale=-0.001197, order="big"), + "right_accel_y": AM(52 << 3, "i16", scale=-0.001197, order="big"), + "right_gyro_z": AM(54 << 3, "i16", scale=-0.000066, order="big"), + "right_gyro_x": AM(56 << 3, "i16", scale=-0.000066, order="big"), + "right_gyro_y": AM(58 << 3, "i16", scale=-0.000066, order="big"), } } From 4974461d59d9b2f8342b1cfead2c9509443a88b9 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 9 Mar 2024 23:32:54 +0100 Subject: [PATCH 0534/1497] bump scale --- src/hhd/device/legion_go/const.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index f2c2db63..a3221f2a 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -91,17 +91,17 @@ "left_accel_x": AM(35 << 3, "i16", scale=-0.001197, order="big"), "left_accel_z": AM(37 << 3, "i16", scale=-0.001197, order="big"), "left_accel_y": AM(39 << 3, "i16", scale=-0.001197, order="big"), - "left_gyro_x": AM(41 << 3, "i16", scale=-0.000066, order="big"), - "left_gyro_z": AM(43 << 3, "i16", scale=0.000066, order="big"), - "left_gyro_y": AM(45 << 3, "i16", scale=-0.000066, order="big"), + "left_gyro_x": AM(41 << 3, "i16", scale=-0.000133, order="big"), + "left_gyro_z": AM(43 << 3, "i16", scale=0.000133, order="big"), + "left_gyro_y": AM(45 << 3, "i16", scale=-0.000133, order="big"), # Right "right_imu_ts": AM(47 << 3, "u8", scale=1), "right_accel_z": AM(48 << 3, "i16", scale=0.001197, order="big"), "right_accel_x": AM(50 << 3, "i16", scale=-0.001197, order="big"), "right_accel_y": AM(52 << 3, "i16", scale=-0.001197, order="big"), - "right_gyro_z": AM(54 << 3, "i16", scale=-0.000066, order="big"), - "right_gyro_x": AM(56 << 3, "i16", scale=-0.000066, order="big"), - "right_gyro_y": AM(58 << 3, "i16", scale=-0.000066, order="big"), + "right_gyro_z": AM(54 << 3, "i16", scale=-0.000133, order="big"), + "right_gyro_x": AM(56 << 3, "i16", scale=-0.000133, order="big"), + "right_gyro_y": AM(58 << 3, "i16", scale=-0.000133, order="big"), } } From 02a3045fa30a1eaba61388d544f4f05e49bb2c1f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 10 Mar 2024 00:17:11 +0100 Subject: [PATCH 0535/1497] fix acce axis, flip roll axis for all devices --- src/hhd/controller/physical/imu.py | 18 +++++----- .../controller/virtual/dualsense/__init__.py | 6 +--- src/hhd/device/generic/const.py | 34 +++++++++---------- src/hhd/device/gpd/win/const.py | 20 +++++------ src/hhd/device/legion_go/base.py | 2 +- src/hhd/device/orange_pi/const.py | 10 +++--- src/hhd/device/rog_ally/base.py | 10 +++--- src/hhd/plugins/inputs.py | 10 +++--- 8 files changed, 53 insertions(+), 57 deletions(-) diff --git a/src/hhd/controller/physical/imu.py b/src/hhd/controller/physical/imu.py index d729dc36..008cc482 100644 --- a/src/hhd/controller/physical/imu.py +++ b/src/hhd/controller/physical/imu.py @@ -36,26 +36,26 @@ class DeviceInfo(NamedTuple): SYSFS_TRIG_CONFIG_DIR = os.environ.get("HHD_MOUNT_TRIG_SYSFS", "/var/trig_sysfs_config") ACCEL_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), + "accel_x": ("accel_z", "accel", 1, None), + "accel_y": ("accel_x", "accel", 1, None), + "accel_z": ("accel_y", "accel", 1, None), "timestamp": ("accel_ts", None, 1, None), } GYRO_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { "anglvel_x": ("gyro_z", "anglvel", 1, None), "anglvel_y": ("gyro_x", "anglvel", 1, None), "anglvel_z": ("gyro_y", "anglvel", 1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } BMI_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", 1, None), + "accel_x": ("accel_z", "accel", -1, None), + "accel_y": ("accel_x", "accel", 1, None), + "accel_z": ("accel_y", "accel", -1, None), + "anglvel_x": ("gyro_z", "anglvel", -1, None), "anglvel_y": ("gyro_x", "anglvel", 1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 40f9ed8c..8cb368cf 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -302,11 +302,7 @@ def consume(self, events: Sequence[Event]): if not self.enable_touchpad and ev["code"].startswith("touchpad"): continue if ev["code"] in self.axis_map: - if not self.flip_z and ev["code"] == "gyro_z": - # Due to hhd's initial focus on steam input, all - # devices were calibrated with an inverted x axis - # compared to a real dualsense controller - # So to not invert x, you have to invert x. + if self.flip_z and ev["code"] == "gyro_z": ev["value"] = -ev["value"] try: encode_axis(new_rep, self.axis_map[ev["code"]], ev["value"]) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index e5611987..c37a6616 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -3,13 +3,13 @@ from hhd.plugins import gen_gyro_state DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", -1, None), + "accel_x": ("accel_z", "accel", 1, None), + "accel_y": ("accel_x", "accel", -1, None), + "accel_z": ("accel_y", "accel", -1, None), + "anglvel_x": ("gyro_z", "anglvel", 1, None), "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } BTN_MAPPINGS: dict[int, str] = { @@ -32,23 +32,23 @@ } AYANEO_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", -1, None), + "accel_x": ("accel_z", "accel", 1, None), + "accel_y": ("accel_x", "accel", -1, None), + "accel_z": ("accel_y", "accel", -1, None), + "anglvel_x": ("gyro_z", "anglvel", 1, None), "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } AYANEO_AIR_PLUS_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", 1, None), + "accel_x": ("accel_z", "accel", -1, None), + "accel_y": ("accel_x", "accel", -1, None), + "accel_z": ("accel_y", "accel", 1, None), + "anglvel_x": ("gyro_z", "anglvel", -1, None), "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", 1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } AYANEO_BTN_MAPPINGS: dict[int, str] = { @@ -91,7 +91,7 @@ "Loki Max": { "name": "Loki Max", "hrtimer": True, - "mapping": gen_gyro_state("x", False, "z", True, "y", True), + "mapping": gen_gyro_state("x", False, "z", False, "y", True), }, # Ayaneo "AIR Plus": { @@ -114,7 +114,7 @@ "SLIDE": { "name": "AYANEO SLIDE", **AYA_DEFAULT_CONF, - "mapping": gen_gyro_state("z", True, "x", False, "y", False), + "mapping": gen_gyro_state("z", False, "x", False, "y", False), }, } diff --git a/src/hhd/device/gpd/win/const.py b/src/hhd/device/gpd/win/const.py index fefcaf55..2d825777 100644 --- a/src/hhd/device/gpd/win/const.py +++ b/src/hhd/device/gpd/win/const.py @@ -17,21 +17,21 @@ ) GPD_WIN_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), + "accel_x": ("accel_x", "accel", 1, None), + "accel_y": ("accel_z", "accel", 1, None), + "accel_z": ("accel_y", "accel", -1, None), "anglvel_x": ("gyro_x", "anglvel", 1, None), - "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_y": ("gyro_z", "anglvel", 1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } GPD_WIN_MAX_2_2023_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", 1, None), + "accel_x": ("accel_z", "accel", -1, None), + "accel_y": ("accel_x", "accel", -1, None), + "accel_z": ("accel_y", "accel", -1, None), + "anglvel_x": ("gyro_z", "anglvel", -1, None), "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 044bdc4f..67de6ccb 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -239,7 +239,7 @@ def controller_loop_xinput( conf["imu.display.gyro_scaling"].to(int), None, ), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } d_gyro = GyroImu(map=GYRO_MAPPINGS, legion_fix=True) diff --git a/src/hhd/device/orange_pi/const.py b/src/hhd/device/orange_pi/const.py index 9ba212bd..aaeaeee2 100644 --- a/src/hhd/device/orange_pi/const.py +++ b/src/hhd/device/orange_pi/const.py @@ -3,13 +3,13 @@ from hhd.plugins import gen_gyro_state DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_z", "accel", 1, 3), - "accel_y": ("accel_x", "accel", 1, 3), - "accel_z": ("accel_y", "accel", 1, 3), - "anglvel_x": ("gyro_z", "anglvel", -1, None), + "accel_x": ("accel_z", "accel", 1, None), + "accel_y": ("accel_x", "accel", -1, None), + "accel_z": ("accel_y", "accel", -1, None), + "anglvel_x": ("gyro_z", "anglvel", 1, None), "anglvel_y": ("gyro_x", "anglvel", -1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } BTN_MAPPINGS: dict[int, str] = { diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index a25ff9cd..2f7d24b7 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -27,13 +27,13 @@ GAMEPAD_PID = 0x028E ALLY_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { - "accel_x": ("accel_x", "accel", 1, 3), - "accel_y": ("accel_z", "accel", -1, 3), - "accel_z": ("accel_y", "accel", 1, 3), + "accel_x": ("accel_x", "accel", 1, None), + "accel_y": ("accel_z", "accel", 1, None), + "accel_z": ("accel_y", "accel", -1, None), "anglvel_x": ("gyro_x", "anglvel", 1, None), - "anglvel_y": ("gyro_z", "anglvel", -1, None), + "anglvel_y": ("gyro_z", "anglvel", 1, None), "anglvel_z": ("gyro_y", "anglvel", -1, None), - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), } MODE_DELAY = 0.3 diff --git a/src/hhd/plugins/inputs.py b/src/hhd/plugins/inputs.py index 3ad478e7..81ff9344 100644 --- a/src/hhd/plugins/inputs.py +++ b/src/hhd/plugins/inputs.py @@ -73,7 +73,7 @@ def get_gyro_state( rem = conf.get("remapped", {}) return { - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), "accel_x": ( cast(Axis, f"accel_{rem.get('x_axis', 'x')}"), "accel", @@ -120,24 +120,24 @@ def gen_gyro_state( x: AxChoice, inv_x: bool, y: AxChoice, inv_y: bool, z: AxChoice, inv_z: bool ): return { - "timestamp": ("gyro_ts", None, 1, None), + "timestamp": ("imu_ts", None, 1, None), "accel_x": ( cast(Axis, f"accel_{x}"), "accel", -1 if inv_x else 1, - 3, + None, ), "accel_y": ( cast(Axis, f"accel_{y}"), "accel", -1 if inv_y else 1, - 3, + None, ), "accel_z": ( cast(Axis, f"accel_{z}"), "accel", -1 if inv_z else 1, - 3, + None, ), "anglvel_x": ( cast(Axis, f"gyro_{x}"), From 9a26ded746824365598644407e35e279516e029a Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 10 Mar 2024 09:46:18 +0100 Subject: [PATCH 0536/1497] invert gyro z on the go --- src/hhd/device/legion_go/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index a3221f2a..cf6e3ff8 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -92,14 +92,14 @@ "left_accel_z": AM(37 << 3, "i16", scale=-0.001197, order="big"), "left_accel_y": AM(39 << 3, "i16", scale=-0.001197, order="big"), "left_gyro_x": AM(41 << 3, "i16", scale=-0.000133, order="big"), - "left_gyro_z": AM(43 << 3, "i16", scale=0.000133, order="big"), + "left_gyro_z": AM(43 << 3, "i16", scale=-0.000133, order="big"), "left_gyro_y": AM(45 << 3, "i16", scale=-0.000133, order="big"), # Right "right_imu_ts": AM(47 << 3, "u8", scale=1), "right_accel_z": AM(48 << 3, "i16", scale=0.001197, order="big"), "right_accel_x": AM(50 << 3, "i16", scale=-0.001197, order="big"), "right_accel_y": AM(52 << 3, "i16", scale=-0.001197, order="big"), - "right_gyro_z": AM(54 << 3, "i16", scale=-0.000133, order="big"), + "right_gyro_z": AM(54 << 3, "i16", scale=0.000133, order="big"), "right_gyro_x": AM(56 << 3, "i16", scale=-0.000133, order="big"), "right_gyro_y": AM(58 << 3, "i16", scale=-0.000133, order="big"), } From a2518671e66965f417e49ef42b80abc0bcb2cca0 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 10 Mar 2024 14:39:27 +0100 Subject: [PATCH 0537/1497] switch mac address based on gyro --- .../controller/virtual/dualsense/__init__.py | 19 +++++++++++--- src/hhd/controller/virtual/dualsense/const.py | 26 +++++++++++++++++++ src/hhd/device/legion_go/base.py | 23 +++++++++------- src/hhd/plugins/outputs.py | 4 ++- 4 files changed, 58 insertions(+), 14 deletions(-) diff --git a/src/hhd/controller/virtual/dualsense/__init__.py b/src/hhd/controller/virtual/dualsense/__init__.py index 8cb368cf..bb011b9a 100644 --- a/src/hhd/controller/virtual/dualsense/__init__.py +++ b/src/hhd/controller/virtual/dualsense/__init__.py @@ -23,8 +23,9 @@ DS5_EDGE_MAX_REPORT_FREQ, DS5_EDGE_MIN_REPORT_FREQ, DS5_EDGE_NAME, - DS5_NAME, DS5_EDGE_PRODUCT, + DS5_EDGE_REPORT_PAIRING, + DS5_EDGE_REPORT_PAIRING_ID, DS5_EDGE_STOCK_REPORTS, DS5_EDGE_TOUCH_HEIGHT, DS5_EDGE_TOUCH_WIDTH, @@ -33,6 +34,7 @@ DS5_INPUT_CRC32_SEED, DS5_INPUT_REPORT_BT_OFS, DS5_INPUT_REPORT_USB_OFS, + DS5_NAME, DS5_PRODUCT, DS5_USB_AXIS_MAP, DS5_USB_BTN_MAP, @@ -62,6 +64,7 @@ def __init__( sync_gyro: bool = False, flip_z: bool = True, paddles_to_clicks: bool = False, + controller_id: int = 0, ) -> None: self.available = False self.report = None @@ -76,6 +79,7 @@ def __init__( self.sync_gyro = sync_gyro self.flip_z = flip_z self.paddles_to_clicks = paddles_to_clicks + self.controller_id = controller_id self.ofs = ( DS5_INPUT_REPORT_BT_OFS if use_bluetooth else DS5_INPUT_REPORT_USB_OFS @@ -144,7 +148,14 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: self.available = False case "get_report": if ev["rnum"] in DS5_EDGE_STOCK_REPORTS: - rep = DS5_EDGE_STOCK_REPORTS[ev["rnum"]] + num = ev["rnum"] + if num == DS5_EDGE_REPORT_PAIRING_ID: + # Customize pairing report to have per-controller + # calibration + rep = DS5_EDGE_REPORT_PAIRING(self.controller_id) + else: + rep = DS5_EDGE_STOCK_REPORTS[num] + if self.use_bluetooth: rep = sign_crc32_append(rep, DS5_FEATURE_CRC32_SEED) self.dev.send_get_report_reply(ev["id"], 0, rep) @@ -307,7 +318,9 @@ def consume(self, events: Sequence[Event]): try: encode_axis(new_rep, self.axis_map[ev["code"]], ev["value"]) except Exception: - logger.warning(f"Encoding '{ev['code']}' with {ev['value']} overflowed.") + logger.warning( + f"Encoding '{ev['code']}' with {ev['value']} overflowed." + ) # DPAD is weird match ev["code"]: case "hat_x": diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index bac67828..20126f7e 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -998,6 +998,32 @@ def prefill_ds5_report(bluetooth: bool): ) DS5_EDGE_MAC_ADDR = [0x74, 0xE7, 0xD6, 0x3A, 0x53, 0x35] # 0x47, 0xE8] +DS5_EDGE_REPORT_PAIRING_ID = 9 +DS5_EDGE_REPORT_PAIRING = lambda idx: bytes( + # Customize Pairing Report Id + [ + 0x09, + DS5_EDGE_MAC_ADDR[0], + DS5_EDGE_MAC_ADDR[1], + DS5_EDGE_MAC_ADDR[2], + idx or DS5_EDGE_MAC_ADDR[3], + DS5_EDGE_MAC_ADDR[4], + DS5_EDGE_MAC_ADDR[5], + 0x08, + 0x25, + 0x00, + 0x1E, + 0x00, + 0xEE, + 0x74, + 0xD0, + 0xBC, + 0x00, + 0x00, + 0x00, + 0x00, + ] +) DS5_EDGE_STOCK_REPORTS = { 0x09: bytes( # Pairing [ diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 67de6ccb..02b5ef7e 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -208,13 +208,25 @@ def controller_loop_xinput( # Output dimu = conf["imu.mode"].to(str) + + match dimu: + case "left": + simu = "left_to_main" + cidx = 1 + case "right": + simu = "right_to_main" + cidx = 2 + case _: + simu = None + cidx = 0 + motion = ( dimu != "display" or conf["imu.display.accel"].to(bool) or conf["imu.display.gyro"].to(bool) ) d_producers, d_outs, d_params = get_outputs( - conf["xinput"], conf["touchpad"], motion + conf["xinput"], conf["touchpad"], motion, controller_id=cidx ) # Imu @@ -302,15 +314,6 @@ def controller_loop_xinput( if conf["touchpad.mode"].to(TouchpadAction) == "controller" else conf["touchpad.emulation"] ) - - match dimu: - case "left": - simu = "left_to_main" - case "right": - simu = "right_to_main" - case _: - simu = None - multiplexer = Multiplexer( swap_guide=swap_guide, trigger="analog_to_discrete", diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index c3b59176..650424b9 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -16,7 +16,7 @@ def get_outputs( - conf, touch_conf, motion: bool = False + conf, touch_conf, motion: bool = False, *, controller_id: int = 0 ) -> tuple[Sequence[Producer], Sequence[Consumer], Mapping[str, Any]]: producers = [] consumers = [] @@ -45,6 +45,7 @@ def get_outputs( sync_gyro=conf["dualsense_edge.sync_gyro"].to(bool) and motion, paddles_to_clicks=False, flip_z=conf["dualsense_edge.flip_z"].to(bool), + controller_id=controller_id, ) producers.append(d) consumers.append(d) @@ -61,6 +62,7 @@ def get_outputs( sync_gyro=conf["dualsense.sync_gyro"].to(bool) and motion, paddles_to_clicks=conf["dualsense.paddles_to_clicks"].to(bool), flip_z=conf["dualsense.flip_z"].to(bool), + controller_id=controller_id, ) producers.append(d) consumers.append(d) From 2438fe3ae216a4038f964270a13900fb594bb32f Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 10 Mar 2024 21:15:33 +0100 Subject: [PATCH 0538/1497] flip legion go gyro axis --- src/hhd/device/legion_go/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 02b5ef7e..0caf1132 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -236,7 +236,7 @@ def controller_loop_xinput( "anglvel_x": ( "gyro_z", "anglvel", - -conf["imu.display.gyro_scaling"].to(int), + conf["imu.display.gyro_scaling"].to(int), None, ), "anglvel_y": ( From b9c47e0422a13d48e3b47a0e3edd30bfe90bf374 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 15:49:46 +0100 Subject: [PATCH 0539/1497] add proper scaling for the legion go --- src/hhd/controller/lib/common.py | 3 +++ src/hhd/controller/virtual/dualsense/const.py | 12 +++++++--- src/hhd/device/legion_go/const.py | 24 +++++++++---------- src/hhd/device/legion_go/controllers.yml | 6 ++--- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/hhd/controller/lib/common.py b/src/hhd/controller/lib/common.py index 23f5a5fe..7efc2dfe 100644 --- a/src/hhd/controller/lib/common.py +++ b/src/hhd/controller/lib/common.py @@ -24,6 +24,7 @@ class AM(NamedTuple): scale: float | None = None offset: float = 0 flipped: bool = False + bounds: tuple[int, int] | None = None class CM(NamedTuple): @@ -103,6 +104,8 @@ def encode_axis(buff: bytearray, t: AM, val: float): if t.scale: new_val = int(t.scale * val + t.offset) + if t.bounds: + new_val = min(max(new_val, t.bounds[0]), t.bounds[1]) else: new_val = None diff --git a/src/hhd/controller/virtual/dualsense/const.py b/src/hhd/controller/virtual/dualsense/const.py index 20126f7e..d5ace1f7 100644 --- a/src/hhd/controller/virtual/dualsense/const.py +++ b/src/hhd/controller/virtual/dualsense/const.py @@ -134,9 +134,15 @@ def prefill_ds5_report(bluetooth: bool): "gyro_x": AM(((ofs + 15) << 3), "i16", scale=20 * 180 / 3.14), "gyro_y": AM(((ofs + 17) << 3), "i16", scale=20 * 180 / 3.14), "gyro_z": AM(((ofs + 19) << 3), "i16", scale=20 * 180 / 3.14), - "accel_x": AM(((ofs + 21) << 3), "i16", scale=1000), - "accel_y": AM(((ofs + 23) << 3), "i16", scale=1000), - "accel_z": AM(((ofs + 25) << 3), "i16", scale=1000), + "accel_x": AM( + ((ofs + 21) << 3), "i16", scale=1019, bounds=(-(2**15) + 2, 2**15 - 1) + ), + "accel_y": AM( + ((ofs + 23) << 3), "i16", scale=1019, bounds=(-(2**15) + 2, 2**15 - 1) + ), + "accel_z": AM( + ((ofs + 25) << 3), "i16", scale=1019, bounds=(-(2**15) + 2, 2**15 - 1) + ), } DS5_BT_AXIS_MAP = get_axis_map(DS5_INPUT_REPORT_BT_OFS) diff --git a/src/hhd/device/legion_go/const.py b/src/hhd/device/legion_go/const.py index cf6e3ff8..c6d6841d 100644 --- a/src/hhd/device/legion_go/const.py +++ b/src/hhd/device/legion_go/const.py @@ -88,20 +88,20 @@ # Per controller IMU # Left "left_imu_ts": AM(34 << 3, "u8", scale=1), - "left_accel_x": AM(35 << 3, "i16", scale=-0.001197, order="big"), - "left_accel_z": AM(37 << 3, "i16", scale=-0.001197, order="big"), - "left_accel_y": AM(39 << 3, "i16", scale=-0.001197, order="big"), - "left_gyro_x": AM(41 << 3, "i16", scale=-0.000133, order="big"), - "left_gyro_z": AM(43 << 3, "i16", scale=-0.000133, order="big"), - "left_gyro_y": AM(45 << 3, "i16", scale=-0.000133, order="big"), + "left_accel_x": AM(35 << 3, "i16", scale=-0.00212, order="big"), + "left_accel_z": AM(37 << 3, "i16", scale=-0.00212, order="big"), + "left_accel_y": AM(39 << 3, "i16", scale=-0.00212, order="big"), + "left_gyro_x": AM(41 << 3, "i16", scale=-0.001065, order="big"), + "left_gyro_z": AM(43 << 3, "i16", scale=-0.001065, order="big"), + "left_gyro_y": AM(45 << 3, "i16", scale=-0.001065, order="big"), # Right "right_imu_ts": AM(47 << 3, "u8", scale=1), - "right_accel_z": AM(48 << 3, "i16", scale=0.001197, order="big"), - "right_accel_x": AM(50 << 3, "i16", scale=-0.001197, order="big"), - "right_accel_y": AM(52 << 3, "i16", scale=-0.001197, order="big"), - "right_gyro_z": AM(54 << 3, "i16", scale=0.000133, order="big"), - "right_gyro_x": AM(56 << 3, "i16", scale=-0.000133, order="big"), - "right_gyro_y": AM(58 << 3, "i16", scale=-0.000133, order="big"), + "right_accel_z": AM(48 << 3, "i16", scale=0.00212, order="big"), + "right_accel_x": AM(50 << 3, "i16", scale=-0.00212, order="big"), + "right_accel_y": AM(52 << 3, "i16", scale=-0.00212, order="big"), + "right_gyro_z": AM(54 << 3, "i16", scale=0.001065, order="big"), + "right_gyro_x": AM(56 << 3, "i16", scale=-0.001065, order="big"), + "right_gyro_y": AM(58 << 3, "i16", scale=-0.001065, order="big"), } } diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 8fde1c4c..e17e0143 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -60,9 +60,9 @@ children: by the driver). Try different values to see what works best. Low values cause a deadzone and high values will clip when moving the Go abruptly. - min: 15 - max: 80 - default: 22 + min: 45 + max: 120 + default: 76 left: type: container title: Left Controller From 7495fd439f284e91280d5f5bdbd05dd4cd3229e6 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 16:06:48 +0100 Subject: [PATCH 0540/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 28b1b32f..6d51b65b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "1.3.10" +version = "2.0.0" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From bffd7ddf771680a2ed8186522e1650b889782f9c Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 18:04:43 +0100 Subject: [PATCH 0541/1497] make overlay handling aggressive --- src/hhd/plugins/overlay/__init__.py | 14 ++--- src/hhd/plugins/overlay/base.py | 38 +++++++++---- src/hhd/plugins/overlay/x11.py | 84 ++++++++++++++++++++--------- 3 files changed, 95 insertions(+), 41 deletions(-) diff --git a/src/hhd/plugins/overlay/__init__.py b/src/hhd/plugins/overlay/__init__.py index 420bcdae..ff30fbfb 100644 --- a/src/hhd/plugins/overlay/__init__.py +++ b/src/hhd/plugins/overlay/__init__.py @@ -47,12 +47,14 @@ def notify(self, events: Sequence[Event]): continue match ev["event"]: - case "guide": - # Close to avoid issues with steam - cmd = "close_now" - case "qam_single": - # Close to avoid issues with steam - cmd = "close" + # We can listen to steam and mute it + # So we can ignore QAM and Guide presses + # case "guide": + # # Close to avoid issues with steam + # cmd = "close_now" + # case "qam_single": + # # Close to avoid issues with steam + # cmd = "close" case "qam_hold": # Open QAM with hold for accessibility cmd = "open_qam" diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 951b5a25..964c6af6 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -18,9 +18,11 @@ get_gamescope_displays, get_overlay_display, hide_hhd, - is_steam_shown, prepare_hhd, + process_events, + register_changes, show_hhd, + update_steam_values, ) logger = logging.getLogger(__name__) @@ -58,6 +60,7 @@ def loop_manage_overlay( fd_out = proc.stdout.fileno() fd_err = proc.stderr.fileno() + fd_disp = disp.fileno() # Give electron time to warmup start = time.perf_counter() @@ -74,10 +77,13 @@ def loop_manage_overlay( steam = find_steam(disp) old = None shown = False + applied_changes = False if hhd: logger.info(f"UI window found in gamescope, starting handler.") prepare_hhd(disp, hhd) + if steam: + register_changes(disp, steam) while not should_exit.is_set(): if not hhd: @@ -87,24 +93,33 @@ def loop_manage_overlay( logger.error(f"Steam window not found, exitting overlay.") break - r, _, _ = select.select([fd_out, fd_err], [], [], GUARD_CHECK) + r, _, _ = select.select([fd_out, fd_err, fd_disp], [], [], GUARD_CHECK) if proc.poll() is not None: logger.warning(f"Overlay stopped (steam may have restarted). Closing.") return - if shown and is_steam_shown(disp, steam): - logger.warning( - f"Steam overlay shown while hhd-ui is active. Hiding UI to avoid issues." - ) - hide_hhd(disp, hhd, steam, None) - shown = False - + # If steam tries to appear while the overlay is active + # yank its focus + updated = process_events(disp) + if shown and updated and not applied_changes: + old, was_shown = update_steam_values(disp, steam) + if was_shown: + show_hhd(disp, hhd, steam) + logger.warning("Steam opened, hiding it.") + applied_changes = True + elif fd_disp in r and updated: + # We just processed the update events, + # start listening to steam again + applied_changes = False + + # Process system logs if fd_err in r: l = proc.stderr.readline()[:-1] if l: logger.info(f"UI: {l}") + # Update overlay status if fd_out in r: cmd = proc.stdout.readline()[:-1] if cmd.startswith("stat:"): @@ -112,10 +127,13 @@ def loop_manage_overlay( if status == "closed": if shown: hide_hhd(disp, hhd, steam, old) + applied_changes = True shown = False else: if not shown: - old = show_hhd(disp, hhd, steam) + old, _ = update_steam_values(disp, steam) + show_hhd(disp, hhd, steam) + applied_changes = True shown = True # Sleep a bit to avoid waking up too much diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index 4d73efde..294ddf30 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -1,7 +1,8 @@ import logging import subprocess -from typing import Sequence +from typing import Any, NamedTuple, Sequence +import Xlib from Xlib import Xatom, display, error logger = logging.getLogger(__name__) @@ -9,6 +10,12 @@ X11_DIR = b"/tmp/.X11-unix/" +class CachedValues(NamedTuple): + overlay: bool + focus: bool + notify: bool + + def get_gamescope_displays(): """Returns X11 UNIX sockets from gamescope opened under /tmp""" files = subprocess.run(["lsof", "-c", "gamescope-wl", "-Fn"], capture_output=True) @@ -58,6 +65,12 @@ def find_win(display: display.Display, win: list[str]): return w +def register_changes(display, win): + win.change_attributes(event_mask=Xlib.X.PropertyChangeMask) + display.flush() + display.sync() + + def find_hhd(display: display.Display): return find_win(display, ["dev.hhd.hhd-ui"]) @@ -120,29 +133,51 @@ def prepare_hhd(display, hhd): hhd.change_property(display.get_atom("STEAM_GAME"), Xatom.CARDINAL, 32, [5335]) hhd.change_property(display.get_atom("STEAM_NOTIFICATION"), Xatom.CARDINAL, 32, [0]) hhd.change_property(display.get_atom("STEAM_BIGPICTURE"), Xatom.CARDINAL, 32, [1]) + display.flush() + display.sync() -def show_hhd(display, hhd, steam): +def process_events(disp): + try: + for _ in range(disp.pending_events()): + if "STEAM" in disp.get_atom_name(disp.next_event().atom): + return True + return False + except Exception as e: + logger.warning(f"Failed to process display events with error:\n{e}") + return True + + +def update_steam_values(display, steam): stat_focus = display.get_atom("STEAM_INPUT_FOCUS") stat_overlay = display.get_atom("STEAM_OVERLAY") + stat_notify = display.get_atom("STEAM_NOTIFICATION") + + def was_set(v): + prop = steam.get_property(stat_focus, Xatom.CARDINAL, 0, 15) + return prop and prop.value and prop.value[0] - old = ( - steam.get_property(stat_focus, Xatom.CARDINAL, 0, 15), - steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 15), + out = CachedValues( + focus=was_set(stat_focus), + overlay=was_set(stat_overlay), + notify=was_set(stat_notify), ) + return out, out.focus or out.overlay or out.notify + + +def show_hhd(display, hhd, steam): + stat_focus = display.get_atom("STEAM_INPUT_FOCUS") + stat_overlay = display.get_atom("STEAM_OVERLAY") + stat_notify = display.get_atom("STEAM_NOTIFICATION") hhd.change_property(stat_focus, Xatom.CARDINAL, 32, [1]) hhd.change_property(stat_overlay, Xatom.CARDINAL, 32, [1]) steam.change_property(stat_focus, Xatom.CARDINAL, 32, [0]) steam.change_property(stat_overlay, Xatom.CARDINAL, 32, [0]) + steam.change_property(stat_notify, Xatom.CARDINAL, 32, [0]) - # Force the values to refresh - hhd.get_property(stat_focus, Xatom.CARDINAL, 0, 5) - hhd.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) - steam.get_property(stat_focus, Xatom.CARDINAL, 0, 5) - steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) - - return old + display.flush() + display.sync() def is_steam_shown(display, steam): @@ -157,24 +192,23 @@ def is_steam_shown(display, steam): return False -def hide_hhd(display, hhd, steam, old): +def hide_hhd(display, hhd, steam, old: CachedValues | None): stat_focus = display.get_atom("STEAM_INPUT_FOCUS") stat_overlay = display.get_atom("STEAM_OVERLAY") + stat_notify = display.get_atom("STEAM_NOTIFICATION") # Set values hhd.change_property(stat_focus, Xatom.CARDINAL, 32, [0]) hhd.change_property(stat_overlay, Xatom.CARDINAL, 32, [0]) - # Refresh values - hhd.get_property(stat_focus, Xatom.CARDINAL, 0, 5) - hhd.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) # Restore steam - if not old: - return - - if old[0]: - steam.change_property(stat_focus, Xatom.CARDINAL, 32, old[0].value) - steam.get_property(stat_focus, Xatom.CARDINAL, 0, 5) - if old[1]: - steam.change_property(stat_overlay, Xatom.CARDINAL, 32, old[1].value) - steam.get_property(stat_overlay, Xatom.CARDINAL, 0, 5) + if old: + if old.overlay: + steam.change_property(stat_focus, Xatom.CARDINAL, 32, [1]) + if old.focus: + steam.change_property(stat_overlay, Xatom.CARDINAL, 32, [1]) + if old.notify: + steam.change_property(stat_notify, Xatom.CARDINAL, 32, [1]) + + display.flush() + display.sync() From dbc3da7cf08a77ce5b3ec3067ca4279a861cdc9d Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 18:09:22 +0100 Subject: [PATCH 0542/1497] fix raw exception printed to the console --- src/hhd/plugins/overlay/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 964c6af6..9f5c6bae 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -138,6 +138,8 @@ def loop_manage_overlay( # Sleep a bit to avoid waking up too much time.sleep(LOOP_SLEEP) + except Exception as e: + logger.warning(f"The overlay process ended with an exception:\n{e}") finally: logger.info(f"Stopping overlay process.") proc.kill() From 0ded8d3083fa598af1ad1a7f2de77745181760a6 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 18:48:07 +0100 Subject: [PATCH 0543/1497] add gyro device to qam --- src/hhd/device/legion_go/controllers.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index e17e0143..efaf3735 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -20,7 +20,6 @@ children: type: mode title: Motions Device default: display - tags: [non-essential] modes: display: From 8ff8c6fe2a584535467b91b7e4b8ca6c3eba53b6 Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 19:06:55 +0100 Subject: [PATCH 0544/1497] fix atom error --- src/hhd/plugins/overlay/x11.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index 294ddf30..6db0d1ce 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -140,7 +140,8 @@ def prepare_hhd(display, hhd): def process_events(disp): try: for _ in range(disp.pending_events()): - if "STEAM" in disp.get_atom_name(disp.next_event().atom): + ev = disp.next_event() + if ev and hasattr(ev, "atom") and "STEAM" in disp.get_atom_name(ev.atom): return True return False except Exception as e: From 7a8f0d01e5bec7c7dc025186868dde132db80e0b Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 20:04:39 +0100 Subject: [PATCH 0545/1497] tune loop sleep to avoid having steam flashing --- src/hhd/plugins/overlay/base.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 9f5c6bae..b4e3b804 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -33,7 +33,7 @@ GUARD_CHECK = 0.5 STARTUP_MAX_DELAY = 10 -LOOP_SLEEP = 0.1 +LOOP_SLEEP = 0.05 def update_status(proc: subprocess.Popen, cmd: Command): @@ -93,6 +93,7 @@ def loop_manage_overlay( logger.error(f"Steam window not found, exitting overlay.") break + start = time.perf_counter() r, _, _ = select.select([fd_out, fd_err, fd_disp], [], [], GUARD_CHECK) if proc.poll() is not None: @@ -136,8 +137,12 @@ def loop_manage_overlay( applied_changes = True shown = True - # Sleep a bit to avoid waking up too much - time.sleep(LOOP_SLEEP) + # Sleep a bit to avoid running too often + # Only do so if the earlier sleep was too short to avoid having + # steam slipping in the UI and flashing the screen + elapsed = time.perf_counter() - start + if elapsed < LOOP_SLEEP: + time.sleep(LOOP_SLEEP - elapsed) except Exception as e: logger.warning(f"The overlay process ended with an exception:\n{e}") finally: From af34ba0e2e99d0fb68c67143e849eada9df4262c Mon Sep 17 00:00:00 2001 From: antheas Date: Mon, 11 Mar 2024 20:41:00 +0100 Subject: [PATCH 0546/1497] tweak hiding process --- src/hhd/plugins/overlay/base.py | 1 + src/hhd/plugins/overlay/x11.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index b4e3b804..9dbe8552 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -128,6 +128,7 @@ def loop_manage_overlay( if status == "closed": if shown: hide_hhd(disp, hhd, steam, old) + old = None applied_changes = True shown = False else: diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index 6db0d1ce..e3853bcc 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -139,11 +139,12 @@ def prepare_hhd(display, hhd): def process_events(disp): try: + found = False for _ in range(disp.pending_events()): ev = disp.next_event() if ev and hasattr(ev, "atom") and "STEAM" in disp.get_atom_name(ev.atom): - return True - return False + found = True + return found except Exception as e: logger.warning(f"Failed to process display events with error:\n{e}") return True From 95679136f3e1b0db596564dbce50732185ed6cc7 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 15:40:01 +0100 Subject: [PATCH 0547/1497] update license --- LICENSE | 697 +++++++++++++++++++++++++++++++-- PKGBUILD | 2 +- hhd.spec | 2 +- readme.md | 6 + src/hhd/controller/lib/hid.py | 1 + src/hhd/controller/lib/uhid.py | 2 +- 6 files changed, 684 insertions(+), 26 deletions(-) diff --git a/LICENSE b/LICENSE index 330dc700..f288702d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,23 +1,674 @@ -MIT License - -Copyright (c) 2023 Antheas Kapenekakis -Copyright (c) 2020 Filipe Laíns (initial ./src/hhd/controller/lib/uhid.py) -Copyright (c) 2019 Austin Morton (initial ./src/hhd/controller/lib/hid.py) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + 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 +. diff --git a/PKGBUILD b/PKGBUILD index 6f3d4191..1e8b43e5 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,7 +5,7 @@ pkgrel=1 pkgdesc='Handheld Daemon. A tool for managing the quirks of handheld devices.' arch=('x86_64') url='https://github.com/hhd-dev/hhd' -license=('MIT') +license=('GPL-3.0-or-later' 'MIT') depends=('python' 'python-setuptools' 'python-evdev' 'python-rich' 'python-yaml' 'python-xlib' 'libusb') optdepends=('hhd-user: allows running hhd as a user service.') makedepends=('python-'{'build','installer','setuptools','wheel'}) diff --git a/hhd.spec b/hhd.spec index 0a73b0e0..5a7c2392 100644 --- a/hhd.spec +++ b/hhd.spec @@ -3,7 +3,7 @@ Version: REPLACE_VERSION Release: 1%{?dist} Summary: Handheld Daemon, a tool for configuring handheld devices. -License: MIT +License: GPL-3.0-or-later AND MIT URL: https://github.com/hhd-dev/hhd Source: https://pypi.python.org/packages/source/h/%{name}/%{name}-%{version}.tar.gz diff --git a/readme.md b/readme.md index d174e27d..6b8f22c9 100644 --- a/readme.md +++ b/readme.md @@ -527,3 +527,9 @@ hhd # Use the following to run with sudo sudo hhd --user $(whoami) ``` + +# License +Handheld Daemon is licensed under THE GNU GPLv3+. See LICENSE for details. +A small number of files are dual licensed with MIT, and contain +SPDX headers denoting so. +Versions prior to and excluding 2.0.0 are licensed using MIT. \ No newline at end of file diff --git a/src/hhd/controller/lib/hid.py b/src/hhd/controller/lib/hid.py index 8b4a0d79..b7e9b53f 100644 --- a/src/hhd/controller/lib/hid.py +++ b/src/hhd/controller/lib/hid.py @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: MIT and GPL-3.0-only # Forked from https://github.com/apmorton/pyhidapi/blob/master/hid/__init__.py import os import ctypes diff --git a/src/hhd/controller/lib/uhid.py b/src/hhd/controller/lib/uhid.py index e756ddef..1b9c2b37 100644 --- a/src/hhd/controller/lib/uhid.py +++ b/src/hhd/controller/lib/uhid.py @@ -1,4 +1,4 @@ -# SPDX-License-Identifier: MIT +# SPDX-License-Identifier: MIT and GPL-3.0-only # Sourced from library python-uhid from __future__ import annotations From 2b44e5306f0fa7b42a658d1d3099c1ae60e5a6a8 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 15:40:47 +0100 Subject: [PATCH 0548/1497] add beta to controller gyros --- src/hhd/device/legion_go/controllers.yml | 4 ++-- src/hhd/plugins/overlay/x11.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index efaf3735..6ca3fdaa 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -64,10 +64,10 @@ children: default: 76 left: type: container - title: Left Controller + title: Left Controller [BETA] right: type: container - title: Right Controller + title: Right Controller [BETA] swap_legion: type: multiple diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index e3853bcc..5eb589db 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -103,7 +103,7 @@ def print_debug(display: display.Display): print() print("WINDOWS:") - for i, w in enumerate(r.query_tree().children): + for i, w in enumerate([r, *r.query_tree().children]): print(f"{i:02d}", end="") for p in w.list_properties(): n = d.get_atom_name(p) From 66a73d192cbf1bab98d66e3f42f9639eb99d12f9 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 16:28:59 +0100 Subject: [PATCH 0549/1497] show version for all hhd components --- src/hhd/__main__.py | 52 ++++++++++++++++++++++++++---- src/hhd/plugins/overlay/overlay.py | 19 ++++++++++- src/hhd/settings.yml | 12 +++++++ 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index c7101502..618a7d1e 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -289,13 +289,38 @@ def main(): else: conf = new_conf - try: - from importlib.metadata import version + from importlib.metadata import version - conf["hhd.settings.version"] = version("hhd") + try: + ver = version("hhd") + conf["hhd.settings.version"] = ver + logger.info(f"Handheld Daemon Version: {ver}") except Exception: pass + try: + ver = version("adjustor") + conf["hhd.settings.version_adj"] = ver + logger.info(f"Adjustor Version: {ver}") + except Exception: + logger.info(f"Adjustor not installed") + + try: + from hhd.plugins.overlay.overlay import ( + find_overlay_exe, + get_overlay_version, + ) + + exe = find_overlay_exe(ctx) + if exe: + ver = get_overlay_version(exe, ctx) + conf["hhd.settings.version_ui"] = ver + logger.info(f"Overlay Version: {ver}") + else: + logger.info(f"Overlay not installed") + except Exception: + logger.info(exe) + # Profiles profiles = {} templates = {} @@ -556,7 +581,7 @@ def main(): "pip", "uninstall", "-y", - "hhd", + "hhd adjustor", ] ) subprocess.check_call( @@ -569,12 +594,27 @@ def main(): "--cache-dir", "/tmp/__hhd_update_cache", ( - "git+https://github.com/hhd-dev/hhd" + "git+https://github.com/hhd-dev/hhd git+https://github.com/hhd-dev/adjustor" if upd_beta - else "hhd" + else "hhd adjustor" ), ] ) + + import urllib.request, json + + with urllib.request.urlopen( + "https://api.github.com/repos/hhd-dev/hhd-ui/releases/latest" + ) as f: + release_data = json.load(f) + + for asset in release_data: + if "hhd-ui.AppImage" == asset["name"]: + urllib.request.urlretrieve( + asset["browser_download_url"], + expanduser("~/.local/bin/hhd-ui.AppImage", ctx), + ) + break updated = True else: logger.error( diff --git a/src/hhd/plugins/overlay/overlay.py b/src/hhd/plugins/overlay/overlay.py index d217cb8f..e82d1340 100644 --- a/src/hhd/plugins/overlay/overlay.py +++ b/src/hhd/plugins/overlay/overlay.py @@ -7,7 +7,7 @@ def find_overlay_exe(ctx: Context): - INSTALLED_PATHS = ["hhd-ui-dbg", "hhd-ui"] + INSTALLED_PATHS = ["hhd-ui.AppImage", "hhd-ui-dbg", "hhd-ui"] usr = os.environ.get("HHD_OVERLAY") if usr: @@ -41,3 +41,20 @@ def inject_overlay(fn: str, display: str, ctx: Context): group=ctx.egid, ) return out + + +def get_overlay_version(fn: str, ctx: Context): + return ( + subprocess.run( + [fn, "--version"], + env={"HOME": expanduser("~", ctx)}, + text=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + user=ctx.euid, + group=ctx.egid, + timeout=5, + ) + .stdout.strip() + ) diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index d2adf235..e444cb5c 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -16,6 +16,18 @@ settings: title: Handheld Daemon Version hint: "Displays the Handheld Daemon version." + version_ui: + type: display + tags: [hhd-version-display, text] + title: Handheld Daemon UI Version + hint: "Displays the Handheld Daemon version." + + version_adj: + type: display + tags: [hhd-version-display, text] + title: Adjustor (TDP) Version + hint: "Displays the Handheld Daemon version." + update_stable: type: action tags: [hhd-update-stable] From 7c1a367d887cfd975d9108531527214e1f56435c Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 16:30:40 +0100 Subject: [PATCH 0550/1497] add not installed hint and make local bin if it doesnt exist --- src/hhd/__main__.py | 3 +++ src/hhd/device/legion_go/base.py | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 618a7d1e..7721160a 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -303,6 +303,7 @@ def main(): conf["hhd.settings.version_adj"] = ver logger.info(f"Adjustor Version: {ver}") except Exception: + conf["hhd.settings.version_adj"] = "Not Installed" logger.info(f"Adjustor not installed") try: @@ -317,6 +318,7 @@ def main(): conf["hhd.settings.version_ui"] = ver logger.info(f"Overlay Version: {ver}") else: + conf["hhd.settings.version_ui"] = "Not Installed" logger.info(f"Overlay not installed") except Exception: logger.info(exe) @@ -609,6 +611,7 @@ def main(): release_data = json.load(f) for asset in release_data: + os.makedirs(expanduser("~/.local/bin", ctx), exist_ok=True) if "hhd-ui.AppImage" == asset["name"]: urllib.request.urlretrieve( asset["browser_download_url"], diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 0caf1132..c098c9a5 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -379,6 +379,17 @@ def prepare(m): evs.extend(d.produce(r)) # Patch timestamps to convert them to ns + # for d in ('x', 'y', 'z'): + # p = False + # for ev in evs: + # if f"accel_{d}" in ev["code"]: + # print( + # f"{ev['code'].split('accel_')[1]}: {ev['value']:12.5e} ", end="" + # ) + # p = True + # if not p: + # print(f"{d}: ", end='') + # print() for ev in evs: if ev["type"] == "axis" and "_imu_ts" in ev["code"]: # Find diff between previous event @@ -392,7 +403,6 @@ def prepare(m): ts_count[ev["code"]] += diff * 8_000_000 ev["value"] = ts_count[ev["code"]] evs = multiplexer.process(evs) - if evs: if debug: logger.info(evs) From 35ad5d880ed90c5b19b105a0ace34424fef801c9 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 16:49:37 +0100 Subject: [PATCH 0551/1497] fix updater and add error --- src/hhd/__main__.py | 15 +++++++++++---- src/hhd/settings.yml | 5 +++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 7721160a..01b22c2c 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -583,7 +583,8 @@ def main(): "pip", "uninstall", "-y", - "hhd adjustor", + "hhd", + "adjustor", ] ) subprocess.check_call( @@ -596,9 +597,14 @@ def main(): "--cache-dir", "/tmp/__hhd_update_cache", ( - "git+https://github.com/hhd-dev/hhd git+https://github.com/hhd-dev/adjustor" + "git+https://github.com/hhd-dev/hhd" if upd_beta - else "hhd adjustor" + else "hhd" + ), + ( + "git+https://github.com/hhd-dev/adjustor" + if upd_beta + else "adjustor" ), ] ) @@ -624,7 +630,8 @@ def main(): f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" ) except Exception as e: - logger.error(f"Error while updating:\n{e}") + err = f"Error while updating:\n{e}" + logger.error(err) switch_priviledge(ctx, True) if updated: diff --git a/src/hhd/settings.yml b/src/hhd/settings.yml index e444cb5c..228e4bd0 100644 --- a/src/hhd/settings.yml +++ b/src/hhd/settings.yml @@ -40,6 +40,11 @@ settings: title: Update (Unstable) hint: "Updates to the master branch from git (local install only)." + update_error: + title: Update Error + type: display + tags: [ error, non-essential ] + http: type: container tags: [hhd-http, advanced, expert] From d6ac94a8317d704e1309c36b0a246be53e625628 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 16:52:53 +0100 Subject: [PATCH 0552/1497] tweak updater --- src/hhd/__main__.py | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 01b22c2c..419e0b04 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -609,28 +609,33 @@ def main(): ] ) - import urllib.request, json - - with urllib.request.urlopen( - "https://api.github.com/repos/hhd-dev/hhd-ui/releases/latest" - ) as f: - release_data = json.load(f) - - for asset in release_data: - os.makedirs(expanduser("~/.local/bin", ctx), exist_ok=True) - if "hhd-ui.AppImage" == asset["name"]: - urllib.request.urlretrieve( - asset["browser_download_url"], - expanduser("~/.local/bin/hhd-ui.AppImage", ctx), + if not upd_beta: + # No beta version for the UI yet, skip updating it + import urllib.request, json + + with urllib.request.urlopen( + "https://api.github.com/repos/hhd-dev/hhd-ui/releases/latest" + ) as f: + release_data = json.load(f) + + for asset in release_data["assets"]: + os.makedirs( + expanduser("~/.local/bin", ctx), exist_ok=True ) - break - updated = True + if "hhd-ui.AppImage" == asset["name"]: + urllib.request.urlretrieve( + asset["browser_download_url"], + expanduser("~/.local/bin/hhd-ui.AppImage", ctx), + ) + break + updated = True else: logger.error( f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" ) except Exception as e: err = f"Error while updating:\n{e}" + conf["hhd.settings.update_error"] = err logger.error(err) switch_priviledge(ctx, True) From d9d3de47dd9e6522bd6f8fb47716ef88930d7b8e Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 17:01:27 +0100 Subject: [PATCH 0553/1497] add progressbar for overlay --- src/hhd/__main__.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 419e0b04..581696e9 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -623,9 +623,21 @@ def main(): expanduser("~/.local/bin", ctx), exist_ok=True ) if "hhd-ui.AppImage" == asset["name"]: + REPORT_POINTS = 8 + + def progress(idx, blockSize, total): + interval = int( + total / blockSize / REPORT_POINTS + ) + if idx % interval == 0: + logger.info( + f"Downloading overlay: {100*idx*blockSize / total:.1f}%" + ) + urllib.request.urlretrieve( asset["browser_download_url"], expanduser("~/.local/bin/hhd-ui.AppImage", ctx), + reporthook=progress, ) break updated = True From b60214bb9186a447a0e5f883bf27215c7044a091 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 17:15:02 +0100 Subject: [PATCH 0554/1497] switch image path and make executable --- src/hhd/__main__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 581696e9..60932c7b 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -634,11 +634,15 @@ def progress(idx, blockSize, total): f"Downloading overlay: {100*idx*blockSize / total:.1f}%" ) + out_fn = expanduser("~/.local/bin/hhd-ui", ctx) urllib.request.urlretrieve( asset["browser_download_url"], - expanduser("~/.local/bin/hhd-ui.AppImage", ctx), + out_fn, reporthook=progress, ) + + st = os.stat(out_fn) + os.chmod(out_fn, st.st_mode | os.stat.S_IEXEC) break updated = True else: From 3c2312cbe8fe2b926ff79ff3972259873415f3b4 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 17:16:14 +0100 Subject: [PATCH 0555/1497] fix stat error --- src/hhd/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index 60932c7b..c6d2fcee 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -611,7 +611,7 @@ def main(): if not upd_beta: # No beta version for the UI yet, skip updating it - import urllib.request, json + import urllib.request, json, stat with urllib.request.urlopen( "https://api.github.com/repos/hhd-dev/hhd-ui/releases/latest" @@ -642,7 +642,7 @@ def progress(idx, blockSize, total): ) st = os.stat(out_fn) - os.chmod(out_fn, st.st_mode | os.stat.S_IEXEC) + os.chmod(out_fn, st.st_mode | stat.S_IEXEC) break updated = True else: From b46783e1845eb81d0773e3d51b9887b94d7e1d36 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 17:16:53 +0100 Subject: [PATCH 0556/1497] set updated at the correct spot --- src/hhd/__main__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hhd/__main__.py b/src/hhd/__main__.py index c6d2fcee..efa684ab 100644 --- a/src/hhd/__main__.py +++ b/src/hhd/__main__.py @@ -644,7 +644,9 @@ def progress(idx, blockSize, total): st = os.stat(out_fn) os.chmod(out_fn, st.st_mode | stat.S_IEXEC) break - updated = True + + # Set updated + updated = True else: logger.error( f"Could not update, python executable is not within a venv (checked for 'venv' in path name):\n{exe_python}" From a832ef7bc55dd3b269bfe6e3c50d8e19aa098c13 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 18:19:04 +0100 Subject: [PATCH 0557/1497] for gpd, make r4 act as qam by default --- src/hhd/device/gpd/win/controllers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/gpd/win/controllers.yml b/src/hhd/device/gpd/win/controllers.yml index bd95c8bd..a1588f42 100644 --- a/src/hhd/device/gpd/win/controllers.yml +++ b/src/hhd/device/gpd/win/controllers.yml @@ -52,7 +52,7 @@ children: disabled: "Disabled" l4: "L4" r4: "R4" - default: disabled + default: r4 debug: type: bool From bc6250a4840238016a31c569292231e65199aa16 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 18:41:27 +0100 Subject: [PATCH 0558/1497] update readme --- readme.md | 99 +++++++++++++++++++++++++------------------------------ 1 file changed, 44 insertions(+), 55 deletions(-) diff --git a/readme.md b/readme.md index 6b8f22c9..9d9b6bcb 100644 --- a/readme.md +++ b/readme.md @@ -14,20 +14,18 @@ # Handheld Daemon Handheld Daemon is a project that aims to provide utilities for managing handheld devices. -Right now, it features a fully functional controller emulator that exposes gyro, -paddles, LEDs and QAM across Steam, Yuzu, Dolphin and others. +It features a fully functional controller emulator that exposes gyro, +paddles, LEDs and QAM across Steam, RPCS3, Dolphin and others. +In addition, it features TDP controls for Ryzen devices (beta) and manufacturer +TDP controls for the Legion Go. It brings all supported devices up to parity with Steam Deck. Read [supported devices](#supported-devices) to see if your device is supported. Handheld Daemon exposes configuration through an API, and there is already a Decky -plugin for it ([hhd-decky](https://github.com/hhd-dev/hhd-decky)) and a web -app for it ([hhd.dev](https://hhd.dev)) that also works locally with Electron +plugin for it ([hhd-decky](https://github.com/hhd-dev/hhd-decky)) and a steam +overlay, web app for it ([hhd.dev](https://hhd.dev)) that also works locally with Electron ([hhd-ui](https://github.com/hhd-dev/hhd-ui)). -In addition, a new TDP plugin (currently non-functional) is in the works, that -will allow both vendor specific and vendor independent TDP controls. -Check out [adjustor](https://github.com/hhd-dev/adjustor)!. - *Current Features*: - Fully functional DualSense and Dualsense Edge emulation - All buttons supported @@ -40,9 +38,10 @@ Check out [adjustor](https://github.com/hhd-dev/adjustor)!. - Virtual Touchpad Emulation - Fixes left and right clicks within gamescope when using the device touchpad. - Power Button plugin for Big Picture/Steam Deck Mode - - Short press makes Steam backup saves and wink before suspend. - - Long press opens Steam power menu. -- Hides the original Xbox controller + - Short press makes Steam backup saves and wink before suspend. + - Long press opens Steam power menu. +- TDP Controls ([adjustor](https://github.com/hhd-dev/adjustor)) +- Fully Featured Steam Overlay - UI based Configuration - Generic API that can be used from bash scripts (through `curl`) - Decky Plugin @@ -112,11 +111,6 @@ You can use the following bash scripts to install and uninstall Handheld Daemon. Then, update from Decky or the UI. These steps do not work on Bazzite, see [here](#bazzite). -> If your distro uses HandyGCCS/Handycon to fix certain key bindings by default -> you need to uninstall it. Disabling it is not enough, since it is autostarted -> by certain sessions (such as `gamescope-session-plus`). -> This includes both ChimeraOS and Nobara (see [Common Issues after Install](#issues)). - ```bash # Install curl -L https://github.com/hhd-dev/hhd/raw/master/install.sh | sh @@ -134,6 +128,7 @@ curl -L https://github.com/hhd-dev/hhd-decky/raw/main/install.sh | sh Then, reboot and go to [hhd.dev](https://hhd.dev) to configure or read more in the [configuration section](#configuration). +> [!IMPORTANT] > Before creating an issue, make sure you are using the latest Handheld Daemon > version and that you read the extra information for each setting in > either [hhd.dev](https://hhd.dev) or the `state.yml` file. @@ -217,17 +212,36 @@ sudo rm /etc/systemd/system/hhd_local@.service # Delete your configuration rm -r ~/.config/hhd ``` +### Kernel Patches +There is an optional kernel patch for the Legion Go that increases the Display +Gyro accuracy [here](https://github.com/hhd-dev/linux-handheld/blob/master/6.6/0001-amd-sfh-bump-sensitivity.patch). + +For LED support, the following modules are required for Ayaneo and Ayn: +[ayaneo-platform](https://github.com/ShadowBlip/ayaneo-platform) +driver, and for Ayn, the [ayn-platform](https://github.com/ShadowBlip/ayn-platform). +Provided these drivers are installed and are supported by your device, +LED support will be enabled by default. + +### Gyro +Which kernel patch is required will depend on your device's bosch module. +For the Bosch 260 IMU, you will need the +[bmi260-dkms](https://github.com/hhd-dev/bmi260) driver. +For the Bosch 160 IMU and certain devices, you will need the following bmi160 +[kernel patch](https://github.com/pastaq/bmi160-aya-neo/blob/main/bmi160_ayaneo.patch). +Ayaneo Air Plus and Ally use the Bosch 323 and need the patch series from +this repository: [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes). +The Legion Go does not need kernel patches. + +In addition, for most devices, your kernel config should also +enable the modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and +`High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. +Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. ### After Install Instructions #### Extra steps for ROG Ally Without an up-to-date `asus-wmi` kernel driver the usb device of the controller does not wake up after sleep so Handheld Daemon stops working. This patch is included with Linux kernel 6.7. - -See [here](#gyro) for the required kernel patches. -Without the patch series for the IMU (where patches 0001, and 0002 are included -in kernel 6.8), the gyro will not work. - You can hold the ROG Crate button to switch to the ROG Ally's Mouse mode to turn the right stick into a mouse. @@ -237,7 +251,7 @@ back buttons to Left: Printscreen, Right: Pause using Windows. This is the default mapping, so if you never remapped them using Windows you will not have to. Handheld Daemon automatically handles the interval to enable being able to hold -the button. +the buttons. Here is how the button settings should look: ``` @@ -245,14 +259,12 @@ Left-key: PrtSc + 0ms + NC + 0ms + NC + 0ms + NC Right-key: Pausc + 0ms + NC + 0ms + NC + 0ms + NC ``` -#### Extra steps for Ayaneo/Ayn/Onexplayer -See [here](#gyro) for the required kernel patches. -For led support in Ayaneo, you will need the -[ayaneo-platform](https://github.com/ShadowBlip/ayaneo-platform) -driver, and for Ayn, the [ayn-platform](https://github.com/ShadowBlip/ayn-platform). -Provided these drivers are installed and are supported by your device, -LED support will be enabled by default. +Unfortunately, its not possible to rapid double tap the buttons due to their +implementation. +The R4 button is mapped to Side Menu (QAM) by default. +#### Extra steps for Ayaneo/Ayn/Onexplayer +You might experience a tiny amount of lag with the Ayaneo LEDs The paddles of the Ayn Loki Max are not remappable as far as we know. #### Extra steps for Legion Go @@ -266,34 +278,11 @@ ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6182", RUN+="/sbin/modprobe xpad" RU If you have set any mappings on Legion Space, they will interfere with Handheld Daemon. -In this case, you may reset your controllers by holding Legion R + RT + RB, +As of version 2.0.0, you can factory reset the controllers from the Handheld +Daemon settings, or you +can partially reset them controllers by holding Legion R + RT + RB, and then Legion L + LT + LB or booting into windows. -#### Gyro Kernel Drivers -Which kernel patch is required will depend on your device's bosch module. -For the Bosch 260 IMU, you will need the -[bmi260-dkms](https://github.com/hhd-dev/bmi260) driver. -For the Bosch 160 IMU and certain devices, you will need the following bmi160 -[kernel patch](https://github.com/pastaq/bmi160-aya-neo/blob/main/bmi160_ayaneo.patch). -Ayaneo Air Plus and Ally use the Bosch 323 and need the patch series from -this repository: [Ally Nobara Fixes](https://github.com/jlobue10/ALLY_Nobara_fixes). -The Legion Go does not need kernel patches. - -In addition, for most devices, your kernel config should also -enable the modules `SYSFS trigger` with `CONFIG_IIO_SYSFS_TRIGGER` and -`High resolution timer trigger` with `CONFIG_IIO_HRTIMER_TRIGGER`. -Both are under `Linux Kernel Configuration ─> Device Drivers ─> Industrial I/O support ─> Triggers - standalone`. - -#### Broken Steam Gyro Calibration -Steam gyro calibration does not corrently work due to an issue with the accelerometer -scale (bottom bar). -Since the accelerometer is not currently used for anything this is not a high -priority fix. -The gyro will work fine in games. - -If you get drift, you can turn on `Auto-Calibrate Gyro Drift when Stationary` and -then move the top bar (gyro) right until it covers the noise. - #### High Touchpad Sensitivity in Steam Input By default, the Dualsense kernel driver exposes the Dualsense trackpad as a normal trackpad. From c0864fd4c1936b089d0d36158b30380d400de37f Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 18:49:58 +0100 Subject: [PATCH 0559/1497] update installer and uninstaller --- install.sh | 12 ++++++++---- uninstall.sh | 8 ++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/install.sh b/install.sh index e62c044a..cd7b5bb9 100755 --- a/install.sh +++ b/install.sh @@ -11,7 +11,7 @@ mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd python3 -m venv --system-site-packages venv source venv/bin/activate -pip install --upgrade hhd +pip install --upgrade hhd adjustor # Install udev rules and create a service file sudo mkdir -p /etc/udev/rules.d/ @@ -25,12 +25,16 @@ mkdir -p ~/.local/bin ln -s ~/.local/share/hhd/venv/bin/hhd ~/.local/bin/hhd ln -s ~/.local/share/hhd/venv/bin/hhd.contrib ~/.local/bin/hhd.contrib +FINAL_URL='https://api.github.com/repos/hhd-dev/hhd-decky/releases/latest' +curl -L $(curl -s "${FINAL_URL}" | grep "browser_download_url" | cut -d '"' -f 4) -o $HOME/.local/bin/hhd-ui +chmod +x $HOME/.local/bin/hhd-ui + # Start service and reboot sudo systemctl enable hhd_local@$(whoami) echo "" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "!!! Do not forget to remove HandyGCCS/Bundled HHD if your distro preinstalls it. !!!" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +echo "!!! Do not forget to remove a Bundled Handheld Daemon if your distro preinstalls it. !!!" +echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "" echo "Reboot to start Handheld Daemon!" \ No newline at end of file diff --git a/uninstall.sh b/uninstall.sh index a930ecd5..37a3eb76 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -13,9 +13,10 @@ sudo systemctl stop hhd_local@$(whoami) # Remove Binary rm -rf ~/.local/share/hhd -# Remove bin link +# Remove bin link/overlay rm -f ~/.local/bin/hhd rm -f ~/.local/bin/hhd.contrib +rm -f ~/.local/bin/hhd-ui # Remove /etc files sudo rm -f /etc/udev/rules.d/83-hhd.rules @@ -25,9 +26,4 @@ sudo rm -f /etc/systemd/system/hhd_local@.service # # Delete your configuration # rm -rf ~/.config/hhd -echo "" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "!!! Do not forget to re-enable HandyGCCS/Bundled HHD if your device relies on it. !!!" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "" echo "Handheld Daemon Uninstalled. Reboot!" \ No newline at end of file From 79075195560f135727157e054e8058d65b64b42f Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 18:51:20 +0100 Subject: [PATCH 0560/1497] switch to now variants for enable/disable --- install.sh | 2 +- uninstall.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index cd7b5bb9..b9d60470 100755 --- a/install.sh +++ b/install.sh @@ -30,7 +30,7 @@ curl -L $(curl -s "${FINAL_URL}" | grep "browser_download_url" | cut -d '"' -f 4 chmod +x $HOME/.local/bin/hhd-ui # Start service and reboot -sudo systemctl enable hhd_local@$(whoami) +sudo systemctl enable --now hhd_local@$(whoami) echo "" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" diff --git a/uninstall.sh b/uninstall.sh index 37a3eb76..bb3aee59 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -7,8 +7,7 @@ if [ "$EUID" -eq 0 ] fi # Disable Service -sudo systemctl disable hhd_local@$(whoami) -sudo systemctl stop hhd_local@$(whoami) +sudo systemctl disable --now hhd_local@$(whoami) # Remove Binary rm -rf ~/.local/share/hhd From a9f974a3a91b79244cac0ad53b68a085b300fe0a Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 18:55:13 +0100 Subject: [PATCH 0561/1497] fix install script link --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index b9d60470..79fa9bbc 100755 --- a/install.sh +++ b/install.sh @@ -25,7 +25,7 @@ mkdir -p ~/.local/bin ln -s ~/.local/share/hhd/venv/bin/hhd ~/.local/bin/hhd ln -s ~/.local/share/hhd/venv/bin/hhd.contrib ~/.local/bin/hhd.contrib -FINAL_URL='https://api.github.com/repos/hhd-dev/hhd-decky/releases/latest' +FINAL_URL='https://api.github.com/repos/hhd-dev/hhd-ui/releases/latest' curl -L $(curl -s "${FINAL_URL}" | grep "browser_download_url" | cut -d '"' -f 4) -o $HOME/.local/bin/hhd-ui chmod +x $HOME/.local/bin/hhd-ui @@ -37,4 +37,4 @@ echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo "!!! Do not forget to remove a Bundled Handheld Daemon if your distro preinstalls it. !!!" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "" -echo "Reboot to start Handheld Daemon!" \ No newline at end of file +echo "Reboot!" \ No newline at end of file From 18291a72277c882aa46bc9cb363c2bb20ee396b8 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 19:18:28 +0100 Subject: [PATCH 0562/1497] update install instructions --- readme.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 9d9b6bcb..0a41f131 100644 --- a/readme.md +++ b/readme.md @@ -162,9 +162,14 @@ mkdir -p ~/.local/share/hhd && cd ~/.local/share/hhd python3 -m venv --system-site-packages venv source venv/bin/activate -pip install --upgrade hhd +pip install --upgrade hhd adjustor # Substitute with the following to pull from github (may not always work) -# pip install git+https://github.com/hhd-dev/hhd +# pip install git+https://github.com/hhd-dev/hhd git+https://github.com/hhd-dev/hhd-ui + +# Install the UI to ~/.local/bin +FINAL_URL='https://api.github.com/repos/hhd-dev/hhd-ui/releases/latest' +curl -L $(curl -s "${FINAL_URL}" | grep "browser_download_url" | cut -d '"' -f 4) -o $HOME/.local/bin/hhd-ui +chmod +x $HOME/.local/bin/hhd-ui # Install udev rules and create a service file sudo curl https://raw.githubusercontent.com/hhd-dev/hhd/master/usr/lib/udev/rules.d/83-hhd.rules -o /etc/udev/rules.d/83-hhd.rules @@ -205,6 +210,7 @@ sudo systemctl disable hhd_local@$(whoami) sudo systemctl stop hhd_local@$(whoami) rm -rf ~/.local/share/hhd +rm -f ~/.local/bin/hhd-ui sudo rm /etc/udev/rules.d/83-hhd.rules sudo rm /etc/udev/hwdb.d/83-hhd.hwdb sudo rm /etc/systemd/system/hhd_local@.service From 79be1bdd05f26b5b9c99ad44545104cb6d0b60de Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 19:20:19 +0100 Subject: [PATCH 0563/1497] update distribution install intructions --- readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 0a41f131..9691ae2d 100644 --- a/readme.md +++ b/readme.md @@ -392,11 +392,12 @@ But, the auto-updater will not work, which is an important feature with devices without a keyboard. ```bash # Arch -yay -S hhd +yay -S hhd hhd-ui adjustor # Fedora sudo dnf copr enable hhd-dev/hhd -sudo dnf install hhd +sudo dnf install hhd adjustor +# HHD-UI todo # Enable and reboot sudo systemctl enable hhd@$(whoami) From cce54e60eba7825ef30ee13fd3aaab317d2dbb62 Mon Sep 17 00:00:00 2001 From: antheas Date: Wed, 13 Mar 2024 19:34:41 +0100 Subject: [PATCH 0564/1497] update pypi license --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6d51b65b..0b13c381 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ description = "Handheld Daemon, a tool for configuring handheld devices." readme = "readme.md" requires-python = ">=3.10" classifiers = [ - "License :: OSI Approved :: MIT License", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", From d46aefe05489e076e3c701d7cb225322f88d115b Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 17:40:00 +0100 Subject: [PATCH 0565/1497] add dual controller support --- src/hhd/controller/virtual/uinput/__init__.py | 15 ++++-- src/hhd/controller/virtual/uinput/const.py | 21 ++++++--- src/hhd/device/legion_go/base.py | 47 ++++++++++++++++--- src/hhd/device/legion_go/controllers.yml | 13 ++++- src/hhd/device/legion_go/hid.py | 4 +- 5 files changed, 80 insertions(+), 20 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index afde3327..607a2f8c 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -32,7 +32,7 @@ def __init__( pid: int = HHD_PID_GAMEPAD, name: str = "Handheld Daemon Controller", phys: str = "phys-hhd-gamepad", - output_imu_timestamps: bool = False, + output_imu_timestamps: str | bool = False, output_timestamps: bool = False, ) -> None: self.capabilities = capabilities @@ -99,10 +99,15 @@ def consume(self, events: Sequence[Event]): elif ev["code"] == "touchpad_y": self.dev.write(B("EV_ABS"), B("ABS_MT_POSITION_Y"), val) - elif self.output_imu_timestamps and ev["code"] in ( - "accel_ts", - "gyro_ts", - "imu_ts", + elif ( + self.output_imu_timestamps + and ev["code"] + in ( + "accel_ts", + "gyro_ts", + "imu_ts", + ) + or ev["code"] == self.output_imu_timestamps ): # We have timestamps with ns accuracy. # Evdev expects us accuracy diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index b1f4ced4..09cce889 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -456,14 +456,23 @@ class AX(NamedTuple): } MOTION_AXIS_MAP: dict[Axis, AX] = { - "accel_x": AX(B("ABS_X"), 8192, bounds=(-32768, 32768)), - "accel_y": AX(B("ABS_Y"), 8192, bounds=(-32768, 32768)), - "accel_z": AX(B("ABS_Z"), 8192, bounds=(-32768, 32768)), - "gyro_x": AX(B("ABS_RX"), 1024, bounds=(-2097152, 2097152)), - "gyro_y": AX(B("ABS_RY"), 1024, bounds=(-2097152, 2097152)), - "gyro_z": AX(B("ABS_RZ"), 1024, bounds=(-2097152, 2097152)), + "accel_x": AX(B("ABS_X"), 8192 / 9.8, bounds=(-32768, 32768)), + "accel_y": AX(B("ABS_Y"), 8192 / 9.8, bounds=(-32768, 32768)), + "accel_z": AX(B("ABS_Z"), 8192 / 9.8, bounds=(-32768, 32768)), + "gyro_x": AX(B("ABS_RX"), 1024 * 180 / 3.14, bounds=(-2097152, 2097152)), + "gyro_y": AX(B("ABS_RY"), 1024 * 180 / 3.14, bounds=(-2097152, 2097152)), + "gyro_z": AX(B("ABS_RZ"), 1024 * 180 / 3.14, bounds=(-2097152, 2097152)), } +LEFT_MOTION_AXIS_MAP: dict[Axis, AX] = { + "left_" + k: v for k, v in MOTION_AXIS_MAP.items() # type: ignore +} + +RIGHT_MOTION_AXIS_MAP: dict[Axis, AX] = { + "right_" + k: v for k, v in MOTION_AXIS_MAP.items() # type: ignore +} + + TOUCHPAD_AXIS_MAP: dict[Axis, AX] = { "touchpad_x": AX(B("ABS_X"), 1023, bounds=(0, 2048)), "touchpad_y": AX(B("ABS_Y"), 1023, bounds=(0, 2048)), diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index c098c9a5..4714fc07 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -11,7 +11,14 @@ from hhd.controller.physical.evdev import B as EC from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.imu import AccelImu, GyroImu -from hhd.controller.virtual.uinput import HHD_PID_VENDOR, UInputDevice +from hhd.controller.virtual.uinput import ( + HHD_PID_MOTION, + HHD_PID_VENDOR, + RIGHT_MOTION_AXIS_MAP, + LEFT_MOTION_AXIS_MAP, + MOTION_CAPABILITIES, + UInputDevice, +) from hhd.plugins import Config, Context, Emitter, get_outputs from .const import ( @@ -220,10 +227,10 @@ def controller_loop_xinput( simu = None cidx = 0 - motion = ( - dimu != "display" - or conf["imu.display.accel"].to(bool) - or conf["imu.display.gyro"].to(bool) + dual_evdev = conf["dual_evdev"].to(bool) + motion = dimu != "disabled" or ( + dimu == "display" + and (conf["imu.display.accel"].to(bool) or conf["imu.display.gyro"].to(bool)) ) d_producers, d_outs, d_params = get_outputs( conf["xinput"], conf["touchpad"], motion, controller_id=cidx @@ -286,7 +293,7 @@ def controller_loop_xinput( config_map=LGO_RAW_INTERFACE_CONFIG_MAP, callback=RgbCallback(), required=True, - ).with_settings(dimu, reset) + ).with_settings("both" if dual_evdev else dimu, reset) ) # Mute keyboard shortcuts, mute @@ -330,6 +337,25 @@ def controller_loop_xinput( imu=simu, ) + d_right = UInputDevice( + name="Handheld Daemon Controller Right Motion Sensors", + phys="phys-hhd-main", + capabilities=MOTION_CAPABILITIES, + pid=HHD_PID_MOTION, + btn_map={}, + axis_map=RIGHT_MOTION_AXIS_MAP, + output_imu_timestamps="right_imu_ts", + ) + d_left = UInputDevice( + name="Handheld Daemon Controller Left Motion Sensors", + phys="phys-hhd-main", + capabilities=MOTION_CAPABILITIES, + pid=HHD_PID_MOTION, + btn_map={}, + axis_map=LEFT_MOTION_AXIS_MAP, + output_imu_timestamps="left_imu_ts", + ) + REPORT_FREQ_MIN = 25 REPORT_FREQ_MAX = 500 @@ -360,6 +386,9 @@ def prepare(m): prepare(d_raw) for d in d_producers: prepare(d) + if dual_evdev: + prepare(d_left) + prepare(d_right) ts_count: dict[str, int] = {"left_imu_ts": 0, "right_imu_ts": 0} ts_last: dict[str, int] = {"left_imu_ts": 0, "right_imu_ts": 0} @@ -402,6 +431,12 @@ def prepare(m): # 8ms per count ts_count[ev["code"]] += diff * 8_000_000 ev["value"] = ts_count[ev["code"]] + + # Process dual evdev first to avoid multiplexing it + if dual_evdev: + d_left.consume(evs) + d_right.consume(evs) + evs = multiplexer.process(evs) if evs: if debug: diff --git a/src/hhd/device/legion_go/controllers.yml b/src/hhd/device/legion_go/controllers.yml index 6ca3fdaa..e8dbbbcb 100644 --- a/src/hhd/device/legion_go/controllers.yml +++ b/src/hhd/device/legion_go/controllers.yml @@ -18,10 +18,13 @@ children: # imu: type: mode - title: Motions Device + title: Controller Motions Device default: display modes: + disabled: + type: container + title: Disabled display: type: container title: Display @@ -69,6 +72,14 @@ children: type: container title: Right Controller [BETA] + dual_evdev: + type: bool + title: Dual Controller Motion Output (evdev) + default: False + hint: >- + Adds two Motions evdev devices, one for each controller that can be used + at the same time. + swap_legion: type: multiple title: Swap Legion with Start/Select diff --git a/src/hhd/device/legion_go/hid.py b/src/hhd/device/legion_go/hid.py index 12936639..0ed2c8c4 100644 --- a/src/hhd/device/legion_go/hid.py +++ b/src/hhd/device/legion_go/hid.py @@ -243,9 +243,9 @@ def open(self): cmds = [] - if self.gyro == "left": + if self.gyro in ("left", "both"): cmds.extend(controller_enable_gyro("left")) - if self.gyro == "right": + if self.gyro in ("right", "both"): cmds.extend(controller_enable_gyro("right")) if self.reset: logger.warning(f"Factory Resetting controllers") From ede322493542fbf4e7d4902ca24654a1df3d257f Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 17:48:39 +0100 Subject: [PATCH 0566/1497] fix evdev classification --- src/hhd/controller/virtual/uinput/__init__.py | 4 ++++ src/hhd/controller/virtual/uinput/const.py | 5 +++-- src/hhd/device/legion_go/base.py | 11 +++++++---- src/hhd/plugins/outputs.py | 4 +++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 607a2f8c..b65705fe 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -23,6 +23,7 @@ def _patch(*args, **kwargs): class UInputDevice(Consumer, Producer): + def __init__( self, capabilities=GAMEPAD_CAPABILITIES, @@ -34,6 +35,7 @@ def __init__( phys: str = "phys-hhd-gamepad", output_imu_timestamps: str | bool = False, output_timestamps: bool = False, + input_props: Sequence[int] = [], ) -> None: self.capabilities = capabilities self.btn_map = btn_map @@ -47,6 +49,7 @@ def __init__( self.output_timestamps = output_timestamps self.ofs = 0 self.sys_ofs = 0 + self.input_props = input_props self.rumble: Event | None = None @@ -58,6 +61,7 @@ def open(self) -> Sequence[int]: vendor=self.vid, product=self.pid, phys=self.phys, + input_props=self.input_props ) self.touchpad_aspect = 1 self.touch_id = 1 diff --git a/src/hhd/controller/virtual/uinput/const.py b/src/hhd/controller/virtual/uinput/const.py index 09cce889..0becbd1d 100644 --- a/src/hhd/controller/virtual/uinput/const.py +++ b/src/hhd/controller/virtual/uinput/const.py @@ -464,14 +464,15 @@ class AX(NamedTuple): "gyro_z": AX(B("ABS_RZ"), 1024 * 180 / 3.14, bounds=(-2097152, 2097152)), } -LEFT_MOTION_AXIS_MAP: dict[Axis, AX] = { +MOTION_LEFT_AXIS_MAP: dict[Axis, AX] = { "left_" + k: v for k, v in MOTION_AXIS_MAP.items() # type: ignore } -RIGHT_MOTION_AXIS_MAP: dict[Axis, AX] = { +MOTION_RIGHT_AXIS_MAP: dict[Axis, AX] = { "right_" + k: v for k, v in MOTION_AXIS_MAP.items() # type: ignore } +MOTION_INPUT_PROPS = [B("INPUT_PROP_ACCELEROMETER")] TOUCHPAD_AXIS_MAP: dict[Axis, AX] = { "touchpad_x": AX(B("ABS_X"), 1023, bounds=(0, 2048)), diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 4714fc07..d677d0c5 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -14,9 +14,10 @@ from hhd.controller.virtual.uinput import ( HHD_PID_MOTION, HHD_PID_VENDOR, - RIGHT_MOTION_AXIS_MAP, - LEFT_MOTION_AXIS_MAP, MOTION_CAPABILITIES, + MOTION_INPUT_PROPS, + MOTION_LEFT_AXIS_MAP, + MOTION_RIGHT_AXIS_MAP, UInputDevice, ) from hhd.plugins import Config, Context, Emitter, get_outputs @@ -343,8 +344,9 @@ def controller_loop_xinput( capabilities=MOTION_CAPABILITIES, pid=HHD_PID_MOTION, btn_map={}, - axis_map=RIGHT_MOTION_AXIS_MAP, + axis_map=MOTION_RIGHT_AXIS_MAP, output_imu_timestamps="right_imu_ts", + input_props=MOTION_INPUT_PROPS, ) d_left = UInputDevice( name="Handheld Daemon Controller Left Motion Sensors", @@ -352,8 +354,9 @@ def controller_loop_xinput( capabilities=MOTION_CAPABILITIES, pid=HHD_PID_MOTION, btn_map={}, - axis_map=LEFT_MOTION_AXIS_MAP, + axis_map=MOTION_LEFT_AXIS_MAP, output_imu_timestamps="left_imu_ts", + input_props=MOTION_INPUT_PROPS, ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 650424b9..11189d1c 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -1,6 +1,5 @@ from typing import Any, Mapping, Sequence -from .utils import load_relative_yaml from ..controller.base import Consumer, Producer from ..controller.virtual.dualsense import Dualsense, TouchpadCorrectionType from ..controller.virtual.uinput import ( @@ -8,11 +7,13 @@ HHD_PID_TOUCHPAD, MOTION_AXIS_MAP, MOTION_CAPABILITIES, + MOTION_INPUT_PROPS, TOUCHPAD_AXIS_MAP, TOUCHPAD_BUTTON_MAP, TOUCHPAD_CAPABILITIES, UInputDevice, ) +from .utils import load_relative_yaml def get_outputs( @@ -79,6 +80,7 @@ def get_outputs( btn_map={}, axis_map=MOTION_AXIS_MAP, output_imu_timestamps=True, + input_props=MOTION_INPUT_PROPS, ) producers.append(d) consumers.append(d) From 72c9687c4823389922294e414c84f6282f569cd3 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 17:59:45 +0100 Subject: [PATCH 0567/1497] fix multiple timestamp crash --- src/hhd/controller/virtual/uinput/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index b65705fe..900c1f81 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -61,7 +61,7 @@ def open(self) -> Sequence[int]: vendor=self.vid, product=self.pid, phys=self.phys, - input_props=self.input_props + input_props=self.input_props, ) self.touchpad_aspect = 1 self.touch_id = 1 @@ -104,15 +104,14 @@ def consume(self, events: Sequence[Event]): self.dev.write(B("EV_ABS"), B("ABS_MT_POSITION_Y"), val) elif ( - self.output_imu_timestamps + self.output_imu_timestamps is True and ev["code"] in ( "accel_ts", "gyro_ts", "imu_ts", ) - or ev["code"] == self.output_imu_timestamps - ): + ) or ev["code"] == self.output_imu_timestamps: # We have timestamps with ns accuracy. # Evdev expects us accuracy ts = ev["value"] // 1000 @@ -120,7 +119,8 @@ def consume(self, events: Sequence[Event]): if ts > self.ofs + 2**30: self.ofs = ts ts -= self.ofs - self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) + if ts > 0: + self.dev.write(B("EV_MSC"), B("MSC_TIMESTAMP"), ts) wrote = True case "button": if ev["code"] in self.btn_map: From cb91fe04a1007a3e6f7f06cbb235b8d6d346c038 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 18:15:21 +0100 Subject: [PATCH 0568/1497] add crash guards while closing --- src/hhd/device/generic/base.py | 14 ++++++++++++-- src/hhd/device/gpd/win/base.py | 21 ++++++++++++++++++--- src/hhd/device/legion_go/base.py | 7 ++++++- src/hhd/device/orange_pi/base.py | 14 ++++++++++++-- src/hhd/device/rog_ally/base.py | 21 ++++++++++++++++++--- 5 files changed, 66 insertions(+), 11 deletions(-) diff --git a/src/hhd/device/generic/base.py b/src/hhd/device/generic/base.py index e04b7825..a305fe0a 100644 --- a/src/hhd/device/generic/base.py +++ b/src/hhd/device/generic/base.py @@ -234,6 +234,16 @@ def prepare(m): raise finally: # d_vend.close(True) - d_timer.close() + try: + d_timer.close() + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e for d in reversed(devs): - d.close(True) + try: + d.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e diff --git a/src/hhd/device/gpd/win/base.py b/src/hhd/device/gpd/win/base.py index a6a2d87f..4b0f6e15 100644 --- a/src/hhd/device/gpd/win/base.py +++ b/src/hhd/device/gpd/win/base.py @@ -368,7 +368,22 @@ def prepare(m): except KeyboardInterrupt: raise finally: - d_vend.close(True) - d_timer.close() + try: + d_vend.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e + try: + d_timer.close() + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e for d in reversed(devs): - d.close(True) + try: + d.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index d677d0c5..6e0cd5d9 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -460,7 +460,12 @@ def prepare(m): raise finally: for d in reversed(devs): - d.close(True) + try: + d.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e class SelectivePassthrough(Producer, Consumer): diff --git a/src/hhd/device/orange_pi/base.py b/src/hhd/device/orange_pi/base.py index 8187fcd1..aaa2382c 100644 --- a/src/hhd/device/orange_pi/base.py +++ b/src/hhd/device/orange_pi/base.py @@ -222,6 +222,16 @@ def prepare(m): raise finally: # d_vend.close(True) - d_timer.close() + try: + d_timer.close() + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e for d in reversed(devs): - d.close(True) + try: + d.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 2f7d24b7..095e7033 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -274,7 +274,22 @@ def prepare(m): except KeyboardInterrupt: raise finally: - d_vend.close(True) - d_timer.close() + try: + d_vend.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e + try: + d_timer.close() + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e for d in reversed(devs): - d.close(True) + try: + d.close(True) + except Exception as e: + logger.error(f"Error while closing device '{d}' with exception:\n{e}") + if debug: + raise e From 7dcbc22af944c5a84ca6126a2d958ffde6374f73 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 18:33:18 +0100 Subject: [PATCH 0569/1497] fix evdev contrib --- src/hhd/contrib/dev.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/hhd/contrib/dev.py b/src/hhd/contrib/dev.py index 191cb774..f45b8b36 100644 --- a/src/hhd/contrib/dev.py +++ b/src/hhd/contrib/dev.py @@ -2,20 +2,20 @@ def evdev(): - from evdev import list_devices, InputDevice - from time import sleep + from evdev import list_devices, InputDevice, categorize + from time import sleep, perf_counter print("Available Devices with the Current Permissions") avail = list_devices() - for i, d in enumerate(avail): - print(f"{i + 1}:", InputDevice(d)) + for d in avail: + print(InputDevice(d)) print() sel = None while sel not in avail: sel = input("Enter device path (/dev/input/event# or #): ") try: - sel = avail[int(sel) - 1] + sel = f"/dev/input/event{int(sel)}" except Exception as e: pass @@ -30,11 +30,25 @@ def evdev(): d.grab() except Exception as e: print("Could not grab device, error:") - print(e) + print("\nYou may continue.") print() + endcap = False + start = perf_counter() for ev in d.read_loop(): - print(ev) + curr = perf_counter() - start + if ev.code == 0 and ev.type == 0 and ev.value == 0: + print( + f"└ SYN ─ {curr:7.3}s ────────────────────────────────────────────────────────┘" + ) + endcap = True + else: + if endcap: + print( + "\n┌────────────────────────────────────────────────────────────────────────┐" + ) + endcap = False + print(f"│ {str(categorize(ev)):>70s} │") sleep(0.001) @@ -96,4 +110,3 @@ def main(): print(f"Command `{c}` not supported.") except KeyboardInterrupt: pass - From f1380286237014adaecfd2c9c0c2d2d91b9ba898 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 18:41:08 +0100 Subject: [PATCH 0570/1497] fix hidraw contrib --- src/hhd/contrib/dev.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/hhd/contrib/dev.py b/src/hhd/contrib/dev.py index f45b8b36..9db38d55 100644 --- a/src/hhd/contrib/dev.py +++ b/src/hhd/contrib/dev.py @@ -59,21 +59,23 @@ def hidraw(): print("Available Devices with the Current Permissions") avail = [] + infos = {} for i, d in enumerate(enumerate_unique()): avail.append(d["path"]) - print( - f"{i + 1}:", - f"{str(d['path'])} {hexify(d['vendor_id'])}:{hexify(d['product_id'])}:" + n = int(d["path"].decode().split("hidraw")[1]) + infos[n] = ( + f"{d['path'].decode():15s} {hexify(d['vendor_id'])}:{hexify(d['product_id'])}:" + f" Usage Page: 0x{hexify(d['usage_page'])} Usage: 0x{hexify(d['usage'])}" - + f" Names '{d['manufacturer_string']}': '{d['product_string']}'", + + f" Names '{d['manufacturer_string']}': '{d['product_string']}'" ) + print("\n".join([infos[k] for k in sorted(infos)])) print() sel = None while sel not in avail: - sel = input("Enter device path (/dev/input/event# or #): ") + sel = input("Enter device path (/dev/hidraw# or #): ") try: - sel = avail[int(sel) - 1] + sel = f"/dev/hidraw{int(sel)}".encode() except Exception: sel = sel.encode() @@ -83,7 +85,7 @@ def hidraw(): start = time() for i in range(100000000): - print(f"{i:6d}: {time() - start:7.4f}", d.read().hex()) + print(f"{i:6d}: {time() - start:8.4f}", d.read().hex()) sleep(0.001) From 4d55add5e89c31867a8127dc0b753a61b79df195 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 18:53:05 +0100 Subject: [PATCH 0571/1497] fix loki double press bug --- src/hhd/controller/base.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index e3877bdb..d2a1c8c2 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -531,9 +531,12 @@ def process(self, events: Sequence[Event]): if self.qam_button is not None and ev["code"] == self.qam_button: ev["code"] = "" # type: ignore if ev["value"]: + if not self.qam_pressed: + # Only increment qam_times if qam was not pressed + # before, loki likes to send press events twice + self.qam_times += 1 self.qam_pressed = curr self.qam_released = None - self.qam_times += 1 else: # Only apply if qam_pressed was not yanked if self.qam_pressed: From 13bda11cf068ab7349dfc2b99777b7ead56a1844 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 19:08:19 +0100 Subject: [PATCH 0572/1497] bump version, fix readme --- pyproject.toml | 2 +- readme.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0b13c381..447c5a40 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "2.0.0" +version = "2.1.0" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/readme.md b/readme.md index 9691ae2d..90473258 100644 --- a/readme.md +++ b/readme.md @@ -35,6 +35,7 @@ overlay, web app for it ([hhd.dev](https://hhd.dev)) that also works locally wit - Xbox 360 Style device emulation - No weird glyphs - Gyro and back button support (outside Steam) + - Dual Evdev Motion Controllers for Legion Go - Virtual Touchpad Emulation - Fixes left and right clicks within gamescope when using the device touchpad. - Power Button plugin for Big Picture/Steam Deck Mode From 88ffef7dd5465e70af8a9c178962f17ec55f1e2f Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 19:29:43 +0100 Subject: [PATCH 0573/1497] add another fix for loki max qam --- src/hhd/device/generic/const.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hhd/device/generic/const.py b/src/hhd/device/generic/const.py index c37a6616..713c40b0 100644 --- a/src/hhd/device/generic/const.py +++ b/src/hhd/device/generic/const.py @@ -28,7 +28,8 @@ # # Loki Max # - B("KEY_T"): "share", # T + LCTRL + LSHFT + LALT + # Provided by AOKZOE A1 Turbo button as KEY_LEFTALT + # B("KEY_T"): "share", # T + LCTRL + LSHFT + LALT } AYANEO_DEFAULT_MAPPINGS: dict[str, tuple[Axis, str | None, float, float | None]] = { From edbdbee7346f9bb4b15cbc72dcf9abd587d83208 Mon Sep 17 00:00:00 2001 From: antheas Date: Thu, 14 Mar 2024 21:27:00 +0100 Subject: [PATCH 0574/1497] fix dev erase --- pyproject.toml | 2 +- src/hhd/controller/virtual/uinput/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 447c5a40..f6947f56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "2.1.0" +version = "2.1.1" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 900c1f81..91968d72 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -192,7 +192,7 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: # Ignore erase events erase = self.dev.begin_erase(ev.value) erase.retval = 0 - ev.end_erase(erase) + self.dev.end_erase(erase) elif ev.type == B("EV_FF") and ev.value: if self.rumble: out.append(self.rumble) From 4c11716492bbcacc57a49e2956614f70f3ab6e1b Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 09:46:47 +0100 Subject: [PATCH 0575/1497] update OPI driver for new firmware --- src/hhd/device/orange_pi/base.py | 16 ++++++++++++---- src/hhd/device/orange_pi/const.py | 13 +++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/hhd/device/orange_pi/base.py b/src/hhd/device/orange_pi/base.py index aaa2382c..696f583b 100644 --- a/src/hhd/device/orange_pi/base.py +++ b/src/hhd/device/orange_pi/base.py @@ -12,10 +12,9 @@ from hhd.controller.physical.evdev import GenericGamepadEvdev from hhd.controller.physical.imu import CombinedImu, HrtimerTrigger from hhd.controller.physical.rgb import LedDevice -from hhd.controller.virtual.uinput import UInputDevice from hhd.plugins import Config, Context, Emitter, get_gyro_state, get_outputs -from .const import BTN_MAPPINGS, DEFAULT_MAPPINGS +from .const import AT_BTN_MAPPINGS, GAMEPAD_BTN_MAPPINGS, DEFAULT_MAPPINGS ERROR_DELAY = 1 SELECT_TIMEOUT = 1 @@ -115,7 +114,16 @@ def controller_loop( pid=[KBD_PID], required=False, # grab=True, - btn_map=dconf.get("btn_mapping", BTN_MAPPINGS), + btn_map=dconf.get("at_mapping", AT_BTN_MAPPINGS), + ) + + d_kbd_2 = GenericGamepadEvdev( + vid=GAMEPAD_VIDS, + pid=GAMEPAD_PIDS, + required=False, + # grab=True, + capabilities={EC("EV_KEY"): [EC("KEY_F16")]}, + btn_map=dconf.get("gamepad_mapping", GAMEPAD_BTN_MAPPINGS), ) multiplexer = Multiplexer( @@ -172,8 +180,8 @@ def prepare(m): start_imu = d_timer.open() if start_imu: prepare(d_imu) - # prepare(d_volume_btn) prepare(d_kbd_1) + prepare(d_kbd_2) for d in d_producers: prepare(d) diff --git a/src/hhd/device/orange_pi/const.py b/src/hhd/device/orange_pi/const.py index aaeaeee2..6341705f 100644 --- a/src/hhd/device/orange_pi/const.py +++ b/src/hhd/device/orange_pi/const.py @@ -12,16 +12,25 @@ "timestamp": ("imu_ts", None, 1, None), } -BTN_MAPPINGS: dict[int, str] = { +AT_BTN_MAPPINGS: dict[int, str] = { # Volume buttons come from the same keyboard B("KEY_F16"): "mode", # Big Button B("KEY_F15"): "share", # Small Button + # B("KEY_F17"): "extra_l1", # LC Button + # B("KEY_F18"): "extra_r1", # RC Button +} + +GAMEPAD_BTN_MAPPINGS: dict[int, str] = { + # Volume buttons come from the same keyboard + # B("KEY_F16"): "mode", # Big Button + # B("KEY_F15"): "share", # Small Button B("KEY_F17"): "extra_l1", # LC Button B("KEY_F18"): "extra_r1", # RC Button } CONFS = { - "G1621-02": {"name": "OrangePi G1621-02/G1621-02", "hrtimer": True}, + # New hardware new firmware, the unit below was dissassembled + # "G1621-02": {"name": "OrangePi G1621-02/G1621-02", "hrtimer": True}, "NEO-01": {"name": "OrangePi NEO-01/NEO-01", "hrtimer": True}, } From 9758005dbc7de70ad4fc604f7f25424380bdc813 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 15:08:51 +0100 Subject: [PATCH 0576/1497] add gamescope debug command --- src/hhd/contrib/__init__.py | 2 +- src/hhd/contrib/__main__.py | 2 +- src/hhd/contrib/dev.py | 28 --------------------------- src/hhd/contrib/gs.py | 20 +++++++++++++++++++ src/hhd/contrib/main.py | 35 ++++++++++++++++++++++++++++++++++ src/hhd/plugins/overlay/x11.py | 16 +++++++--------- 6 files changed, 64 insertions(+), 39 deletions(-) create mode 100644 src/hhd/contrib/gs.py create mode 100644 src/hhd/contrib/main.py diff --git a/src/hhd/contrib/__init__.py b/src/hhd/contrib/__init__.py index e5d6edd5..21db616e 100644 --- a/src/hhd/contrib/__init__.py +++ b/src/hhd/contrib/__init__.py @@ -1,3 +1,3 @@ -from .dev import main +from .main import main __all__ = ["main"] diff --git a/src/hhd/contrib/__main__.py b/src/hhd/contrib/__main__.py index 82af6c5f..40e2b013 100644 --- a/src/hhd/contrib/__main__.py +++ b/src/hhd/contrib/__main__.py @@ -1,4 +1,4 @@ -from .dev import main +from .main import main if __name__ == "__main__": main() diff --git a/src/hhd/contrib/dev.py b/src/hhd/contrib/dev.py index 9db38d55..648a1473 100644 --- a/src/hhd/contrib/dev.py +++ b/src/hhd/contrib/dev.py @@ -1,6 +1,3 @@ -import argparse - - def evdev(): from evdev import list_devices, InputDevice, categorize from time import sleep, perf_counter @@ -87,28 +84,3 @@ def hidraw(): for i in range(100000000): print(f"{i:6d}: {time() - start:8.4f}", d.read().hex()) sleep(0.001) - - -def main(): - parser = argparse.ArgumentParser( - prog="HHD: Handheld Daemon contribution helper scripts", - description="Scripts to automate the capture of events, etc.", - ) - parser.add_argument( - "command", - nargs="+", - default=[], - help="Supported commands: `evdev`, `hidraw`", - ) - args = parser.parse_args() - - try: - match c := args.command[0]: - case "evdev": - evdev() - case "hidraw": - hidraw() - case _: - print(f"Command `{c}` not supported.") - except KeyboardInterrupt: - pass diff --git a/src/hhd/contrib/gs.py b/src/hhd/contrib/gs.py new file mode 100644 index 00000000..ce3c7975 --- /dev/null +++ b/src/hhd/contrib/gs.py @@ -0,0 +1,20 @@ +from hhd.plugins.overlay.x11 import ( + get_gamescope_displays, + get_overlay_display, + print_debug, +) + + +def gamescope_debug(): + ds = get_gamescope_displays() + print(f"Gamescope displays found: {str(ds)}") + d = get_overlay_display(ds) + if not d: + print(f"Overlay display not found, exitting...") + return + d, name = d + + print(f"Overlay display is '{name}'") + + print("\nDebug Data:") + print_debug(d) diff --git a/src/hhd/contrib/main.py b/src/hhd/contrib/main.py new file mode 100644 index 00000000..89afb988 --- /dev/null +++ b/src/hhd/contrib/main.py @@ -0,0 +1,35 @@ +import argparse + + +def main(): + parser = argparse.ArgumentParser( + prog="HHD: Handheld Daemon contribution helper scripts", + description="Scripts to automate the capture of events, etc.", + ) + parser.add_argument( + "command", + nargs="+", + default=[], + help="Supported commands: `evdev`, `hidraw`", + ) + args = parser.parse_args() + + try: + match c := args.command[0]: + case "evdev": + from .dev import evdev + + evdev() + case "hidraw": + from .dev import hidraw + + hidraw() + case "gamescope": + from .gs import gamescope_debug + + gamescope_debug() + case _: + print(f"Command `{c}` not supported.") + except KeyboardInterrupt: + pass + diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index 5eb589db..b063a493 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -104,23 +104,21 @@ def print_debug(display: display.Display): print() print("WINDOWS:") for i, w in enumerate([r, *r.query_tree().children]): - print(f"{i:02d}", end="") + print(f"\n{i:02d}:", end="") for p in w.list_properties(): n = d.get_atom_name(p) if "WM_NAME" == n: - print( - f" {w.get_property(p, Xatom.STRING, 0, 100).value.decode()}", end="" - ) - print(f":", end="") + print(f" '{w.get_property(p, Xatom.STRING, 0, 100).value.decode()}'") + break + else: + print(" no name") + for p in w.list_properties(): n = d.get_atom_name(p) if "STEAM" in n or "GAMESCOPE" in n: print( - f" {n}: {list(w.get_property(p, Xatom.CARDINAL, 0, 15).value)},", - end="", + f"> {n}: {list(w.get_property(p, Xatom.CARDINAL, 0, 15).value)},", ) - - print() for p in w.list_properties(): n = d.get_atom_name(p) if "STEAM" not in n and "GAMESCOPE" not in n: From b81df19b4d2c9625681bb6f28d01348d03b7ba7d Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 15:29:49 +0100 Subject: [PATCH 0577/1497] update to allow supplying the display --- src/hhd/contrib/gs.py | 22 ++++++++++++++-------- src/hhd/contrib/main.py | 10 +++++----- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/hhd/contrib/gs.py b/src/hhd/contrib/gs.py index ce3c7975..30bd47d0 100644 --- a/src/hhd/contrib/gs.py +++ b/src/hhd/contrib/gs.py @@ -1,3 +1,5 @@ +from Xlib.display import Display + from hhd.plugins.overlay.x11 import ( get_gamescope_displays, get_overlay_display, @@ -5,14 +7,18 @@ ) -def gamescope_debug(): - ds = get_gamescope_displays() - print(f"Gamescope displays found: {str(ds)}") - d = get_overlay_display(ds) - if not d: - print(f"Overlay display not found, exitting...") - return - d, name = d +def gamescope_debug(did: str | None): + if not did: + ds = get_gamescope_displays() + print(f"Gamescope displays found: {str(ds)}") + d = get_overlay_display(ds) + if not d: + print(f"Overlay display not found, exitting...") + return + d, name = d + else: + name = did + d = Display(did) print(f"Overlay display is '{name}'") diff --git a/src/hhd/contrib/main.py b/src/hhd/contrib/main.py index 89afb988..ad287a7e 100644 --- a/src/hhd/contrib/main.py +++ b/src/hhd/contrib/main.py @@ -10,12 +10,13 @@ def main(): "command", nargs="+", default=[], - help="Supported commands: `evdev`, `hidraw`", + help="Supported commands: `evdev`, `hidraw`, `gamescope`", ) args = parser.parse_args() + cmds = args.command try: - match c := args.command[0]: + match cmds[0]: case "evdev": from .dev import evdev @@ -27,9 +28,8 @@ def main(): case "gamescope": from .gs import gamescope_debug - gamescope_debug() + gamescope_debug(cmds[1] if len(cmds) >= 2 else None) case _: - print(f"Command `{c}` not supported.") + print(f"Command `{cmds[0]}` not supported.") except KeyboardInterrupt: pass - From 199bd7dc644371f129f7c2877a599afd51b2af5a Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 15:32:24 +0100 Subject: [PATCH 0578/1497] update to prepare for better window filterring --- src/hhd/plugins/overlay/x11.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index b063a493..f9af9877 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -46,15 +46,23 @@ def get_overlay_display(displays: Sequence[str]): d.close() -def find_win(display: display.Display, win: list[str]): +def find_win(display: display.Display, win: list[str], atoms: list[str] = []): n = display.get_atom("WM_CLASS") + a_ids = [display.get_atom(a, only_if_exists=True) for a in atoms] + for w in display.screen().root.query_tree().children: + # Check the window has the proper class v = w.get_property(n, Xatom.STRING, 0, 50) if not v: continue if not v.value: continue + # Check the window has all the required atoms + for a_id in a_ids: + if not w.get_property(a_id, Xatom.STRING, 0, 50): + return + classes = [c.decode() for c in v.value.split(b"\00") if c] found = True for val in win: From a1492b284911be1d0f2e9a29b73fc0ef2005af74 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 15:44:11 +0100 Subject: [PATCH 0579/1497] tweak focus logic --- src/hhd/plugins/overlay/base.py | 15 +++------------ src/hhd/plugins/overlay/x11.py | 14 +++++++++----- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 9dbe8552..2e6d587b 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -77,7 +77,6 @@ def loop_manage_overlay( steam = find_steam(disp) old = None shown = False - applied_changes = False if hhd: logger.info(f"UI window found in gamescope, starting handler.") @@ -102,17 +101,11 @@ def loop_manage_overlay( # If steam tries to appear while the overlay is active # yank its focus - updated = process_events(disp) - if shown and updated and not applied_changes: - old, was_shown = update_steam_values(disp, steam) + if shown: + old, was_shown = update_steam_values(disp, steam, old) if was_shown: show_hhd(disp, hhd, steam) logger.warning("Steam opened, hiding it.") - applied_changes = True - elif fd_disp in r and updated: - # We just processed the update events, - # start listening to steam again - applied_changes = False # Process system logs if fd_err in r: @@ -129,13 +122,11 @@ def loop_manage_overlay( if shown: hide_hhd(disp, hhd, steam, old) old = None - applied_changes = True shown = False else: if not shown: - old, _ = update_steam_values(disp, steam) + old, _ = update_steam_values(disp, steam, None) show_hhd(disp, hhd, steam) - applied_changes = True shown = True # Sleep a bit to avoid running too often diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index f9af9877..93391586 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -156,7 +156,7 @@ def process_events(disp): return True -def update_steam_values(display, steam): +def update_steam_values(display, steam, old): stat_focus = display.get_atom("STEAM_INPUT_FOCUS") stat_overlay = display.get_atom("STEAM_OVERLAY") stat_notify = display.get_atom("STEAM_NOTIFICATION") @@ -165,12 +165,16 @@ def was_set(v): prop = steam.get_property(stat_focus, Xatom.CARDINAL, 0, 15) return prop and prop.value and prop.value[0] + new_focus = was_set(stat_focus) + new_overlay = was_set(stat_overlay) + new_notify = was_set(stat_notify) + out = CachedValues( - focus=was_set(stat_focus), - overlay=was_set(stat_overlay), - notify=was_set(stat_notify), + focus=new_focus or (old and old.focus), + overlay=new_overlay or (old and old.overlay), + notify=new_notify or (old and old.notify), ) - return out, out.focus or out.overlay or out.notify + return out, new_focus or new_overlay or new_notify def show_hhd(display, hhd, steam): From d7d61ba4b51a880f39aba5d2e4c3f686b196efe4 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 15:45:17 +0100 Subject: [PATCH 0580/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f6947f56..a8bc63b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "2.1.1" +version = "2.1.2" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From ba008bcda166a97b5560d09c9eace5a527d0e908 Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 15:51:43 +0100 Subject: [PATCH 0581/1497] empty socket properly --- src/hhd/plugins/overlay/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hhd/plugins/overlay/base.py b/src/hhd/plugins/overlay/base.py index 2e6d587b..1fdf6c09 100644 --- a/src/hhd/plugins/overlay/base.py +++ b/src/hhd/plugins/overlay/base.py @@ -101,6 +101,7 @@ def loop_manage_overlay( # If steam tries to appear while the overlay is active # yank its focus + process_events(disp) if shown: old, was_shown = update_steam_values(disp, steam, old) if was_shown: From efc316aa578cf81d0c5dda72d8508977d404a68c Mon Sep 17 00:00:00 2001 From: antheas Date: Fri, 15 Mar 2024 17:27:52 +0100 Subject: [PATCH 0582/1497] remove dinput for orange pi --- src/hhd/device/orange_pi/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hhd/device/orange_pi/base.py b/src/hhd/device/orange_pi/base.py index 696f583b..90ff020d 100644 --- a/src/hhd/device/orange_pi/base.py +++ b/src/hhd/device/orange_pi/base.py @@ -104,9 +104,9 @@ def controller_loop( # name=["Generic X-Box pad"], capabilities={EC("EV_KEY"): [EC("BTN_A")]}, required=True, - axis_map=DINPUT_AXIS_MAP, + # axis_map=DINPUT_AXIS_MAP, hide=True, - postprocess=DINPUT_AXIS_POSTPROCESS, + # postprocess=DINPUT_AXIS_POSTPROCESS, ) d_kbd_1 = GenericGamepadEvdev( From 7cdacfeb7067b3f0e1f3943843d96f1427898824 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 16 Mar 2024 15:27:05 +0100 Subject: [PATCH 0583/1497] tune gamescope command --- src/hhd/contrib/gs.py | 7 ++++--- src/hhd/contrib/main.py | 2 +- src/hhd/plugins/overlay/x11.py | 16 +++++++++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/hhd/contrib/gs.py b/src/hhd/contrib/gs.py index 30bd47d0..461c33e0 100644 --- a/src/hhd/contrib/gs.py +++ b/src/hhd/contrib/gs.py @@ -7,8 +7,8 @@ ) -def gamescope_debug(did: str | None): - if not did: +def gamescope_debug(args: list[str]): + if not args or not args[0].startswith(":"): ds = get_gamescope_displays() print(f"Gamescope displays found: {str(ds)}") d = get_overlay_display(ds) @@ -17,10 +17,11 @@ def gamescope_debug(did: str | None): return d, name = d else: + did = args[0] name = did d = Display(did) print(f"Overlay display is '{name}'") print("\nDebug Data:") - print_debug(d) + print_debug(d, args) diff --git a/src/hhd/contrib/main.py b/src/hhd/contrib/main.py index ad287a7e..13e7945d 100644 --- a/src/hhd/contrib/main.py +++ b/src/hhd/contrib/main.py @@ -28,7 +28,7 @@ def main(): case "gamescope": from .gs import gamescope_debug - gamescope_debug(cmds[1] if len(cmds) >= 2 else None) + gamescope_debug(cmds[1:]) case _: print(f"Command `{cmds[0]}` not supported.") except KeyboardInterrupt: diff --git a/src/hhd/plugins/overlay/x11.py b/src/hhd/plugins/overlay/x11.py index 93391586..9d752f8c 100644 --- a/src/hhd/plugins/overlay/x11.py +++ b/src/hhd/plugins/overlay/x11.py @@ -101,17 +101,23 @@ def print_data(display: display.Display): print() -def print_debug(display: display.Display): +def print_debug(display: display.Display, args: list[str]): d = display r = display.screen().root - print("ATOMS:") - for v in r.list_properties(): - print(f"{v: 4d}: {d.get_atom_name(v)}") + if "noatoms" not in args: + print("ATOMS:") + for v in r.list_properties(): + print(f"{v: 4d}: {d.get_atom_name(v)}") + + if "root" in args: + windows = [r] + else: + windows = [r, *r.query_tree().children] print() print("WINDOWS:") - for i, w in enumerate([r, *r.query_tree().children]): + for i, w in enumerate(windows): print(f"\n{i:02d}:", end="") for p in w.list_properties(): n = d.get_atom_name(p) From 7c1d42c615f47af408a9c4342efa2f25ffc40935 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 16 Mar 2024 15:43:55 +0100 Subject: [PATCH 0584/1497] fix rounding issue that lead to nonzero output --- src/hhd/controller/lib/common.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hhd/controller/lib/common.py b/src/hhd/controller/lib/common.py index 7efc2dfe..4fae55b9 100644 --- a/src/hhd/controller/lib/common.py +++ b/src/hhd/controller/lib/common.py @@ -124,7 +124,7 @@ def encode_axis(buff: bytearray, t: AM, val: float): ) case "m32": if not new_val: - new_val = int(((1 << 31) - 1) * val + (1 << 31)) + new_val = int(round(((1 << 31) - 1) * val + (1 << 31) - 1)) buff[t.loc >> 3 : (t.loc >> 3) + 4] = int.to_bytes( new_val, 4, t.order, signed=False ) @@ -142,7 +142,7 @@ def encode_axis(buff: bytearray, t: AM, val: float): ) case "m16": if not new_val: - new_val = int(((1 << 15) - 1) * val + (1 << 15)) + new_val = int(round(((1 << 15) - 1) * val + (1 << 15) - 1)) buff[t.loc >> 3 : (t.loc >> 3) + 2] = int.to_bytes( new_val, 2, t.order, signed=False ) @@ -160,7 +160,7 @@ def encode_axis(buff: bytearray, t: AM, val: float): ) case "m8": if not new_val: - new_val = int(((1 << 7) - 1) * val + (1 << 7)) + new_val = int(round(((1 << 7) - 1) * val + (1 << 7) - 1)) buff[t.loc >> 3 : (t.loc >> 3) + 1] = int.to_bytes( new_val, 1, t.order, signed=False ) From 018dbd35ed0a18cd0781ff4570d1991352f279d0 Mon Sep 17 00:00:00 2001 From: antheas Date: Sat, 16 Mar 2024 16:29:57 +0100 Subject: [PATCH 0585/1497] add basic axis calibration through an env variable --- src/hhd/controller/physical/evdev.py | 48 +++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/physical/evdev.py b/src/hhd/controller/physical/evdev.py index 3d55aec9..82d0a8cb 100644 --- a/src/hhd/controller/physical/evdev.py +++ b/src/hhd/controller/physical/evdev.py @@ -98,6 +98,34 @@ def to_map(b: dict[A, Sequence[int]]) -> dict[int, A]: "rs_y": {"zero_is_middle": True}, } +if calib := os.environ.get("HHD_CALIB"): + # TODO: Move this into the gui + # Accepts the following format: : + # Everything below deadzone gets set to 0. + # If axis is positive, it gets scaled so that it is 1 when max is hit + # If negative, it is scaled to be -1 when it reaches the min value + # HHD_CALIB=$(cat <<-END + # { + # "ls_x": {"min": -1, "max": 1, "deadzone": 0.05}, + # "ls_y": {"min": -1, "max": 1, "deadzone": 0.05}, + # "rs_x": {"min": -1, "max": 1, "deadzone": 0.05}, + # "rs_y": {"min": -1, "max": 1, "deadzone": 0.05}, + # "lt": {"min": 0, "max": 1, "deadzone": 0.05}, + # "rt": {"min": 0, "max": 1, "deadzone": 0.05} + # } + # END + # ) + import json + + try: + AXIS_CALIBRATION = json.loads(calib) + logger.info(f"Loaded calibration:\n{calib}") + except Exception as e: + logger.info(f"Could not load Axis Calibration:\n{calib}\nError:{e}") + AXIS_CALIBRATION = {} +else: + AXIS_CALIBRATION = {} + def list_joysticks(input_device_dir="/dev/input"): return glob.glob(f"{input_device_dir}/js*") @@ -122,6 +150,7 @@ def find_joystick(ev: str): class GenericGamepadEvdev(Producer, Consumer): + def __init__( self, vid: Sequence[int], @@ -136,7 +165,7 @@ def __init__( grab: bool = True, msc_map: Mapping[int, Button] = {}, msc_delay: float = 0.1, - postprocess: dict[str, dict] = {}, + postprocess: dict[str, dict] = AXIS_CALIBRATION, ) -> None: self.vid = vid self.pid = pid @@ -315,6 +344,23 @@ def produce(self, fds: Sequence[int]) -> Sequence[Event]: self.ranges[e.code][1 if e.value >= 0 else 0] ) + # Calibrate + if ax in self.postprocess: + calib = self.postprocess[ax] + if val < 0 and "min" in calib: + m = calib["min"] + if m: + # avoid division by 0 + val = -max(m, val) / m + elif val > 0 and "max" in calib: + m = calib["max"] + val = min(m, val) / m + + if "deadzone" in calib: + d = calib["deadzone"] + if abs(val) < d: + val = 0 + out.append( { "type": "axis", From fac403e7645c4028e6de1abd9c87f9d0e764e3a1 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 14:44:17 +0100 Subject: [PATCH 0586/1497] undo regression that broke double press on ally --- src/hhd/controller/base.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index d2a1c8c2..962196e6 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -531,10 +531,7 @@ def process(self, events: Sequence[Event]): if self.qam_button is not None and ev["code"] == self.qam_button: ev["code"] = "" # type: ignore if ev["value"]: - if not self.qam_pressed: - # Only increment qam_times if qam was not pressed - # before, loki likes to send press events twice - self.qam_times += 1 + self.qam_times += 1 self.qam_pressed = curr self.qam_released = None else: From 359229825d543d0ce44be1d90558957d9c58e0f0 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 15:04:14 +0100 Subject: [PATCH 0587/1497] ignore commands on uinput outputs without rumble --- src/hhd/controller/virtual/uinput/__init__.py | 10 +++++++++- src/hhd/device/legion_go/base.py | 2 ++ src/hhd/plugins/outputs.py | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hhd/controller/virtual/uinput/__init__.py b/src/hhd/controller/virtual/uinput/__init__.py index 91968d72..15de31cb 100644 --- a/src/hhd/controller/virtual/uinput/__init__.py +++ b/src/hhd/controller/virtual/uinput/__init__.py @@ -36,6 +36,7 @@ def __init__( output_imu_timestamps: str | bool = False, output_timestamps: bool = False, input_props: Sequence[int] = [], + ignore_cmds: bool = False, ) -> None: self.capabilities = capabilities self.btn_map = btn_map @@ -50,6 +51,7 @@ def __init__( self.ofs = 0 self.sys_ofs = 0 self.input_props = input_props + self.ignore_cmds = ignore_cmds self.rumble: Event | None = None @@ -66,6 +68,12 @@ def open(self) -> Sequence[int]: self.touchpad_aspect = 1 self.touch_id = 1 self.fd = self.dev.fd + + if self.ignore_cmds: + # Do not wake up if we ignore to save utilization + # When the output contains a timestamp, it is fed back to evdev + # causing double wake-ups. + return [] return [self.fd] def close(self, exit: bool) -> bool: @@ -163,7 +171,7 @@ def consume(self, events: Sequence[Event]): self.dev.syn() def produce(self, fds: Sequence[int]) -> Sequence[Event]: - if not self.fd or not self.fd in fds or not self.dev: + if self.ignore_cmds or not self.fd or not self.fd in fds or not self.dev: return [] out: Sequence[Event] = [] diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index 6e0cd5d9..a1c39172 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -347,6 +347,7 @@ def controller_loop_xinput( axis_map=MOTION_RIGHT_AXIS_MAP, output_imu_timestamps="right_imu_ts", input_props=MOTION_INPUT_PROPS, + ignore_cmds=True, ) d_left = UInputDevice( name="Handheld Daemon Controller Left Motion Sensors", @@ -357,6 +358,7 @@ def controller_loop_xinput( axis_map=MOTION_LEFT_AXIS_MAP, output_imu_timestamps="left_imu_ts", input_props=MOTION_INPUT_PROPS, + ignore_cmds=True, ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/plugins/outputs.py b/src/hhd/plugins/outputs.py index 11189d1c..92dfaee5 100644 --- a/src/hhd/plugins/outputs.py +++ b/src/hhd/plugins/outputs.py @@ -81,6 +81,7 @@ def get_outputs( axis_map=MOTION_AXIS_MAP, output_imu_timestamps=True, input_props=MOTION_INPUT_PROPS, + ignore_cmds=True ) producers.append(d) consumers.append(d) @@ -96,6 +97,7 @@ def get_outputs( btn_map=TOUCHPAD_BUTTON_MAP, axis_map=TOUCHPAD_AXIS_MAP, output_timestamps=True, + ignore_cmds=True, ) producers.append(d) consumers.append(d) From 422823895106e63659eeb39dd6bf31913267d5ba Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 15:13:32 +0100 Subject: [PATCH 0588/1497] add swap armory option to rog ally --- src/hhd/device/rog_ally/base.py | 1 + src/hhd/device/rog_ally/controllers.yml | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index 095e7033..dadb8946 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -198,6 +198,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, emit: Em select_reboots=conf["select_reboots"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), emit=emit, + swap_guide="guide_is_start" if conf["swap_armory"].to(bool) else None, ) REPORT_FREQ_MIN = 25 diff --git a/src/hhd/device/rog_ally/controllers.yml b/src/hhd/device/rog_ally/controllers.yml index baf74345..a7cc7e78 100644 --- a/src/hhd/device/rog_ally/controllers.yml +++ b/src/hhd/device/rog_ally/controllers.yml @@ -67,6 +67,14 @@ children: title: Map Armory to QAM. default: True + swap_armory: + type: bool + title: Swap ROG and Start/Select + tags: [ non-essential ] + hint: >- + Swaps the Armory Crate and Command center buttons with start and select. + default: False + debug: type: bool title: Debug From 1105bcfb41878ba140156d288ab5a910b14b6df1 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 15:14:31 +0100 Subject: [PATCH 0589/1497] respect swap legion for shortcuts controller --- src/hhd/device/legion_go/base.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/hhd/device/legion_go/base.py b/src/hhd/device/legion_go/base.py index a1c39172..4a455a18 100644 --- a/src/hhd/device/legion_go/base.py +++ b/src/hhd/device/legion_go/base.py @@ -165,12 +165,23 @@ def controller_loop_rest( ).with_settings(None, reset) ) + match conf["swap_legion"].to(str): + case "disabled": + swap_guide = None + case "l_is_start": + swap_guide = "guide_is_start" + case "l_is_select": + swap_guide = "guide_is_select" + case val: + assert False, f"Invalid value for `swap_legion`: {val}" + multiplexer = Multiplexer( dpad="analog_to_discrete", trigger="analog_to_discrete", share_to_qam=conf["share_to_qam"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), emit=emit, + swap_guide=swap_guide, ) d_uinput = UInputDevice( name=f"HHD Shortcuts (Legion Mode: {mode})", From 3f51ad973cc40c062026ae71c75ae81e0b198128 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 15:14:47 +0100 Subject: [PATCH 0590/1497] perform select to reboot before swap application --- src/hhd/controller/base.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/hhd/controller/base.py b/src/hhd/controller/base.py index 962196e6..4280e207 100644 --- a/src/hhd/controller/base.py +++ b/src/hhd/controller/base.py @@ -493,6 +493,14 @@ def process(self, events: Sequence[Event]): } ) + if self.select_reboots and ev["code"] == "select": + if ev["value"]: + self.select_is_held = True + self.select_pressed = curr + else: + self.select_is_held = False + self.select_pressed = None + if self.swap_guide and ev["code"] in ( "start", "select", @@ -515,14 +523,6 @@ def process(self, events: Sequence[Event]): else: ev["code"] = "start" - if self.select_reboots and ev["code"] == "select": - if ev["value"]: - self.select_is_held = True - self.select_pressed = curr - else: - self.select_is_held = False - self.select_pressed = None - if self.emit and ev["code"] == "mode" and ev["value"]: # Steam might do weirdness, emit an event to prepare # the overlay From 29f0c4fcbff9f0f096b2862ba106a6ab952bed0b Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 15:15:58 +0100 Subject: [PATCH 0591/1497] fix rog ally swap map --- src/hhd/device/rog_ally/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hhd/device/rog_ally/base.py b/src/hhd/device/rog_ally/base.py index dadb8946..31dfae1a 100644 --- a/src/hhd/device/rog_ally/base.py +++ b/src/hhd/device/rog_ally/base.py @@ -198,7 +198,7 @@ def controller_loop(conf: Config, should_exit: TEvent, updated: TEvent, emit: Em select_reboots=conf["select_reboots"].to(bool), nintendo_mode=conf["nintendo_mode"].to(bool), emit=emit, - swap_guide="guide_is_start" if conf["swap_armory"].to(bool) else None, + swap_guide="guide_is_select" if conf["swap_armory"].to(bool) else None, ) REPORT_FREQ_MIN = 25 From d5dde304e1e5e269e276bcb3e9efdf4bed8e68a7 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 15:21:08 +0100 Subject: [PATCH 0592/1497] bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a8bc63b7..72a0e387 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hhd" -version = "2.1.2" +version = "2.2.0" authors = [ { name="Kapenekakis Antheas", email="pypi@antheas.dev" }, ] From 49cdaaec826df15a2a86369b19f3ce2dfe95c775 Mon Sep 17 00:00:00 2001 From: antheas Date: Sun, 17 Mar 2024 17:43:02 +0100 Subject: [PATCH 0593/1497] update readme with overlay --- docs/overlay.gif | Bin 0 -> 5948358 bytes readme.md | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/overlay.gif diff --git a/docs/overlay.gif b/docs/overlay.gif new file mode 100644 index 0000000000000000000000000000000000000000..171304bd2ccce6be8634e26e1ac3ec6fae6df80d GIT binary patch literal 5948358 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 BP_{ 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 ~FR;RrAdV_t?k;4eeLe~2 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�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�+zu?)UA2!Os@qV22BA% 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ē)NNA_!<{G4``_&Dsn zIh4$HRr;$m@fC!l<$*+l0?upoODj^0`dYpStS)*EOk_Rh;>T1-2ic>z;r1mJEW^rnsqP=7H z+^_ZmiylCN<&?BSvYs&XXZQ|fYT(kCYqNinQnT%)%f;rj0!B}r+l;;_jyh{%xD?Y| zVzjBdu zE&WIKkM@6M{~G@T`}g{PVgFG7XZFwGf6xA{{BPL5@c)th`)Ju9i?&msc5N#)z6by= zCOEM5m*E7ZPwzZV%FcV2B(!tG{-yTiQS*=nJ+@Z^9qzKEJ_>iXHCA7)(eu<{rZ>Yu z^t%^*^UTjPvsLG_vx$gMsI(k|9I2}Ol>jciEcf*Dxilt9&?6PkGEnAI^k(fWJdjMh z%$1@lw%la@)Mc*}Gpr8Qd&0i|5BoQ+SD5kN*}rjr3yZ9O**}fpf7w6R|CjyC`G@@r z`Ir3*q4}5ndv28c5Bulz-`GEY;e&e1fja3&m2*!2uz$iz>m@URmj9LgE6Q^3u5(mA zvfX2bdA`gkoLFkCQ^>FFJ%pa}_af+dj2egMzA_*gtTLzgdpp z4NUPSvhO8p90TA>`rudSo$sR$vY`O}&=G%)L`I=bL?`jFKzaWF884gNbWIr0pc#Rys$)JEj)*wYoi@A9nZDr0w1| zx8Y9_u&1KgU#{ZsHBtx+rThBkp>f`x{e@eR)?{bF@5k~Ra@>1k54OwSt~}PIK4G%+ z3RBqlR41<3&*(2o^f}e>Z~0uPE-Vr9TW9`URvGkCg|6y)*5JYq2o(oZcdUGljGfI4|3i%+0SC_Z7)w$e-K%5>)Ex3&)h;zOUsT@*a z^;e_dacaZm33AaSy(RhlNYLioi;GEibm^MNITBIV6wm8xXm`^pTuwHdcl2lno0+B4 z2cShs)$GV`8@w)?s!$V?O$2*95UNB8k0-V zhfJbUTp`7qhsGI+J>%;7k~hF#x$-N5Nl~3Bd7V{rNY2h^MCLX_FRKRhDcQCe5=G_4 zeVzg1YI}^}(pP7+H`FviM=I;r=;ty}7vQt_<9s*`sj1_Jw9jle)k)0odihxTk_1!A z=Vl|^9eZYH9O!IvQ%dk`ThCcTm&T0VCRu*B1@s@_&-%^&d>>A^N#cy>lkA@*|C-Nf z(RXc7)CHM(bV{{Jj!PCS2RSos0UB9T6t*H4H2Sg~!m^(aO-sI*_j6AA4;JtWBcYK~ zv2elgmSFE9Qa{L(_WgOh7NMPq_)u)UnSQIJ4} zh&^)`S|Lt^`syIKU=iO7XW1O1Jkc?J^^L(+A?@z?x@@$S3sq%tu)b$gMP0#%>Bip675MrFj0Y$jXs#zkLCqa=p_;IXIGq8v9Mjf(Xw#E=NiJE_bOB@ zqRjQ?^=Kyt>Opoq{@#~Co5_N@_ZX}ZuN<9b5~Ep8n+~sh*`7ih!8AtRkC~Gl{5hy9 zzVEoc$UeB4)S-1f%4%6?cj=~;b#&IuMnFeT12sFK-9Z-Qb8txY{n%MZ4CYX#2wwJuE-3a)8F<(G?0j@Xy7%U zS)EJ7z8CdpP}ocMk0R4!Q(LxrL8c}4NA8Giv{qt%Z(lZ;`8ZOo)@OcKjAeTcG$)3t z3cuN(Xjxv4V((=1JuG_`z=0PVr8~*@bbC`V!64*S6YAsJXcDbYF&F=pU}m z2<&9kXj@ zNi|S{TT)`opPcBZtmKmQwJIis+~6X1^cmafw9T;)bIC3XtCxZhi9($ob|}k+CGYq6 z^-@l(fBf1fP8_Y;x#3CZfg#|cN)@-wv2~RdM~u{1#~w&jLuyz^pL}V40%-}u(>@{X zg5L0ck-6Y6v=B-N1q&>8E-rgZ!{N(afTdx53?sQJ5z7f22Shl$s(qoCQU5Vrn&D&L8DL^`>v=G4e zR41WWWN8wWU6KPbK{7p!51D>zfRI!_1vWss!7dr*lj@qDpm6P@OV*N_Q5w#TOcwUJ zyZ#HRq6U^5#1KVgg>71r)A@3{Kq>RV^5>AVE=U?}EKyW8ZIq3h&t18w%q+STK`8_* z5~gSlkp)3CXi0@IVA3(VcD)qN6=+9|eU~%A_q~jh7-j#`OiF#+piuVBs7~CbrWZXm z>lpOH+1kZC`o{44z6aZ{p-Jncg|W~it0QAL^Z4|c`o!U1P0~eBiRJ2GY&S%@Bg_*4 zCRG79&_jPnf<@`+43=n}{c`dREa{PXJu6U@Ds0Fkn`FT2P99waJv6u+BU1VdER_F{ z1Y;Hm7U!ZL`60`2vqaQx z+)D+(f84(08@G>5oc<|i#*N#zR7z_=T6Rmk6htU1z)fB9D@T`>o)^pDhjrJggG;YI zy`ZOq=shDXHO|m45ggz!_o+(TED8A@ZegA;kzN)ol*7GMb<5`oaG&*wVK+_C4s1#i;j@p#p4MXO=fouOH_fTE!-x%l4#($ zq>s-FM7{2SojfN}u!o&%6hwqfe(VCT+*Ia1g~Tt`*tAgHF7?aDBCLX->n@Ns987~j z=u-%IwvP571JGjB$N;%bzWI!c@VTK+$tX^ATZ$eZLM`hGCgcWx8^!TOHJy)3XFzJC z?5yiG$RfL;UqWc8BdK*QIDNVO!N`P@;Rb+RlNzBFsrS>`%-WA-StTt^2Lp9NJ~<#W zSfyAAu~74T0C+ICIp!M67o=YU+$xe5YOsJb9+2JpGD6m{*TQJm%p29FRaq~t2~Mx$ zLCm%4>%XA#DFatUNFiIz9TZq6B&F*ZEeSAVk6R?|+L%hQ>rbKRP!a0+cKgZ~z=0Pg zb4+pzO$t8GDZbYjwRAu}b>x4~&nE0dRCf?r7bb$=0!!UXyTc}^iI#7_nQMD535hOX@lAvV@<6x~q17)T zcZIa=TB@C~&{9T7=Ye3_ONO~x?%M}YY0c#KU!VgMJ;V@e?gJvCfie}l4rd}0YyoYD zZJ!LPhqV7C>2*nOlYOhn0W|M9SMhU3Ezy@oke8}LB$;|Xn{MEbGSH6)T{6+uyPDMU zk@RFTH0?a_);eaOQLi4p-glr+G0G#_^fjwc3zA$f9ZB|?9Kw0)Re?~q07_EupjR>| z#H*SS@g7V^aqo}GAYZAFTj_ues?Jl9g@iD8g^_VngT(YtJ4+Pq#_GFZBgi2Pa*=_c zF1d9N2E-qQ2PMLe)RUpo(CdwU6c1Q`4f#3YHShPH<1SNKWjY7_0qvIHqXMYhyIw}2 z-a*uGy3pV)%?cTPw=BQjP?=f>{q7ncS7-OyH+%5sE(D>yM%cum$x;ys25LiIaLluN zNp3g4e_3!{0YkS1jO^0*E72(P=J1Wo2XTW~{BG|u8#N(iFbRWjTG3xzKzZqhL$`!v z4f->zz>z%k-p^pt_0TfuWaa@mQlSZc1{QbOo7Z~UJ3J76-ug_jNrk94gL4BPe~`_{ zfF+J$b#+mJn|Fz=%Czl<*#~Pah2GRgO+LVaozlh--(NQwjDzf^0h|3dKHtD0^rsU( zg)nQ&9jdqkC%j-Bc

<)6=4$9cP`0meYx>PAwW9e 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%0Dxh@a40j*u_pH+elB6*HBc)=sq4K}n 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
c#>JWG&wkrJL2bN~|kwCCS^;=Nkx^ZsfBP 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�REov)@xXkaG`<7&hGo+bZ zk#Q=6enHDgEcc!^jY9R~=3GKeqQhxoz1BHt1C=Y;zEHb{Y0)ff5$hT0LxSY1!^V&3@Q{!4oVbz)DN9ci7gv ztm{>_{E_tNuVk?eQ*#c~SniYeBHBQrWxEV@C0bw9*GCsvza`voXGE;-a3$mFVX)X; zqX}EqrK;N9SB4y8c-^n@KU-aQfItgQgn&lN+YmajO#3IDQ2=50AwjzAyBXHcG-f*s8|8 zooQ+7DekN3ZRKyeT$;Mqd5>na$NdGLKh4DfSTDs z#wmP@yJbW-u1Use*zX(9`qz(^R2OwF%M6SBwO^lUY%IkarwWW-sk!&KfxVRjQttcZ zlYzFqx+bGi`49~<&CR3jHCCEca1njtMGT3{n}rGnrCRyH!uVO(V~G`z7QOT1>Lj-9 z(Pgj$&s6q!nEhkzT( z{08x=^9wxw({x+k3iqu+)7mdyvU)&#H2E}F&~`MjNvPG`>9+gzHg~CP%gYtbI<=Es`K{1Iy1M>$eRyoA*Qh+W!^fqyHbddi6p9dw4t6d-u0#Y zRd7JTVz~IT009ILX5gCVoN$dL=@Nreg402PEaiL!`B8FVj*{m7WuAwYY%YP7PnCI} zUms{|2>wzhoBSrmW!Asn2~x}ML}B$}s)cLoK1Jj@8AIH7<+ucE>bu`O<2}P_?f#)3 zdmXZU{1)Kt)#g^Vg;@?_SH7Z>4t$vIhUw^O~`CURZJhTB}R^MVwY-^^uwL2Kr7 zf5Y`@ECuKJf0927WBsExcsFe)hVJ_|KIM6Tf0WY@yHd}hvnE@q<~PVN_}OCAZ{+=u zPtiF-Oq)VkB?-yZ%DGGRSJg|t%+^+jskh$po5<)+n-;HYDL`dt65fm+GxMM<1KEo^S*qp%8`Yd5THdnYeH=ye! zefvww#`U+In?BUUA-b=VNgmh8s&SPG0fR!V$-)bWhjXCMTP#!R$v2x}J9P3QU4t`q zhy-DkDYCqL14ME(>>>xF<^U(-SxAE9LKu_*p5&k|K=)(7^(-g#qM9~%X7Zl{!i1OF z;1Gj}d1BGZP-B2_k%$yR9L(aU;_?&oR#dD{Se@cNVA^{)p(M#l?Rge=3{{8_ zM2%mG*8;QpFxn-Z>{{mn^}3A|yg=fQVb|o$c-FXURGqaYn#BQ%lmmpHteATaW31i^ zcb}?y|3F+>RV#MV39#+XYm7Dw8jV>RZv8S=Uc%^Cmh8^KXrYXGgVG729Z2HVEo-4w z7*2G%Clh0%alwds5`~h{WQ}>^N?1_Sos!l~n(IFQS?c?om_IAfp*Qw~sFHg&1_>iR zJsXO11C6;RiYn>kivyk{wr76SEbffE^KSf|U2Cy?OaNONb_y%}d@S*Y&QbOF6WZbV zhx%xsvL4k_BR(RFw}XreJbu_At@<@A>o^imnO~;ba>Le>&%7(wPUx&#m=fuheUT%dun~bd_S1?9m_Y>I{4SotR)>)Q zHm?We{)tV=*ylldzo03-@|DU|2X2}%+w=8pVxWBgc&O%tO}=oL;gg*HNZKoM!kAf{ zNsZSmAPWmwW+nfPSw7$axaYs0!i*#(es7w?=pt$Ep*by)C4kPVGs0H2evzLZ8wyi1 z_k!ydF}{(S$}AmmVvOOQMR`5{4x20qoGeZwFfVHa*-;7xL$UUWJ{hTFPI19R(~Ew9 z@bq$?Ud@Z>o`NJ`yMp_W1{*2tGkSgY`0fu~c-G^l9$;)VU52#zan5YXl6fO+8f4$( z;#wd;z0kjMwLhPMSq$?jV*!(ikuhzM6G)R5nCo65of9OEH@{3WMaSw|V05oDv~aCw zBx-XeN$!v)*e%Tk(p(db!hMQER>sSZki{j)*TM$3)>9dDv9P&B@ivKHt6h$TiN?)F ztXi+dy5i!)lE)gc)*}sOJ0|ZD^)X%=pU3IE+Y()RU-QCexB_1{hSCMxS`3TCIJ}B} zDnEx1nV;M*{DMMIS<+f#T3dr?-dy}6VbZvC$L@x@!LdBMI; zaLQ7(zQA>ttgY&q?4|jlDGZd#CeLfJNZ7D3dMQOKS>`F7KPSLqnz>&yIpsa)8=D?y zqs0L)<}9yete0iBfL$eEIY)T9IOp2ZeZX_t*L9fIh%Bs%_)6`1%Hrm7(vsdU*8Z26 zsd`vr`chMA=ad!E5-l9}p24n;GqdduZSDvlzoPf)2wjc9WBd*-SGGa=Q=&8x8@pu9 zu4kH?12?!s+o8qKbqlO2BAwAllJeF#2Umw}v?$d^(j59ln5+YSWJ1F98kfvjc%P43 zcDl~lzilj^ST9N=+7~-zw6xJpZ4UIomUFzQR~>AhbUq{ghRQJ2Uv%qYYLM%G@1ZTO zv=T%#8sISHWRoO(Jt1^W7m>Ly!ML%*y3L*Zk~(R#7d9QU`YBEKQU-=}^#w$#`=2Lo z%K|15)|i~BWZgPdqYhsex-Oz+N*j2}axQTlyOM>q$8WTIZLBvM&AS(rx!X5}-oE|e zW=?d^&y`t+@;AhAu>AFCj@&%o1-cJk6IJ{ur`w+}zFyX)YpvFoIV}1OUK7(}@{LW}r_&tww<%tGH06s1P~ax^@+CBNYH_rsFrJ zlWNF%rJTstj{WBK_=N5qm#u65k??Dn8#;8WST|a&GFd~8OxJ8XL3n#IbQ_zq-H6%F zJ*qbN!=mJ2W<0}U(#LDmF0`xr*36Mko2Fg&m#ewQj@5%5>({EL@jJGaJ9h2v@6rYH zdUtNAXis;OJJNWBwxXN_cU|OmT{rN|YP;@#`YiveGu!37haz=mzN5Q-%$dN~yZ$qE z&fj(eX6oo9Fh0zC_qF$etUTw0u~5go5D)JA@&9yY?Ve4YdaKUXgeisJ>H>~n!&sKxd885uRN1IKnCjW`cD9g4YZ~%?>$$@E0nK=SFUPH9BQvPtWs8a;*u`8?3+S-*?Wl_+I+*LAE;SogD_`b0|}VNQ{_fZ|Zzm7DuM8Cd?U z*;=58Mvofd-;1kP8c{DTC%RKNpXPR=i^ROoHHDvv6+e6WK_Rf=Exk-Y+_PT-En#2u z_BS_MOtWhL>?Ey!AFP?5Ry029!z#<3Jj{&-9CHymyi=D$E0xzJr@1mX0lYuaB~e08 zUL+y6vNHHJ!^IUl=q~apW{cOatx}uiN@^QxeI3wi7JhjVpAQuKEMEUR= zSr|hgC%The2f+VPOKjX6n2dpOIFbDrOB8gz!zRqaQ_a4QcsLZ8xU!R^iBA^ae87kZ z<=?s@3?}MS-$zv70~s>7`CvJ)Um)63A0DfG0?CgTSGlDC3t-85EX;PJ6dGy^GjJlK07B+;1g6fi?#^+= zy_CizLcMCh?OK<^=AP*As{?P&oV(3P{M;~(y-GC@RH>R0puKo_>hJgD1$)Z#KjL_7cDdCg8>Di zGUO?cBQI1+FLW-;zJx^Wo2M<(g3JJH;O#W(O^%zyY#Q!|j>x}m*~fpoWra18hkF0z zmc3d6n-HPz6o9~U2qQZ6`>}rLzuYpnziwHo4Um-$0@nQNmids}vY7jE@V{=^A`A3& zB2;n$lD?0(1V!-Ac~b_Kq~kNFkDsXR<1}&9ng5_=@PE*<*#Ci+1>u#Ef6+2aeP;dI zlum&1VGR^qTY9OfRDQF90Z-kl#}9Tbr9zZ}@kPbofO3kGkyr@ZCAJdx9Nrn$2f-aFrqNYAjvq1n><8b7eupjU=krzf*y=}5-6M0M6$|6NLCqNo^cXnN`c?}AFIsZAFE8(9-|W``1K*L;RFkr z4-g&>nW=@i*FjXGL0|0JGEvP)kZ(zLJH*+3p}a#3Z}`9$qWK&s+M=Xm(4h?O1O<9m z`T&*Afu6n)l2sN(&zv9zRZ#kCmEpRW?y!S?*n)~lRvEsTWR+n^R+)LjZ8}JnFA$f{ zr%STRDynKoRvD^+y5%3M?4--v7HGQ)ZF&!q4DU{yd;Tx0tSpJU+P)+=smDV0AF9mx z|E0{U#u8pNRH{fR<9%vU1@YSz8lh#1YDm4#!Pfwa=GHaM~#Q~eq4>D zfcH}!_fR9Gw~~Mc8Us2_L3_TCgtLCx^s;L_=}-`Lj}J?_Ft90{Ih&pk&O?v}-DH1- z9OwqpDQDbAJ&wxb8|!9i<_7Y>w7QhQbM&Av{sH^BK^>Xat`^WOgHG%m;p)GwGSwc| z`%1%N4!*tbA_(;l#FNIR2YMEvIM39Zc*fqm9yGE)E|wZk;7}6K9lwlm*--V)|_m z0}X(QFx+f3VLF4~;BA#hn6N53NO(2^n$pd;a-lrc4VTaQIBP#QNsaGSbDp+pBe({G zUKjAm)xQ*Te!+lWaOSyjfS=awRV!bEvdg`i4hO2-)2$ zI_fu*UkY@hbrFbbON-=)>|HV;U(zJ+yo4h#t^o^ExPX@$p4<_hAX#O+3tH(f%hvy~ z$^w=c$XE57G9{49qJaxKt#j#=f2}hAo|QiY{!WrrMjAlE4~`bDDG>6!oJUDk8CfCc zt$(PpnfkRz=heSd8Tss$3my-((3z#18=;`TR@sKmh9_c`WR=N!11bNp%374x4sIek z@4We52%G^Fy9BP2tTGd8`Q7?AB&)3JcPk}f`{9C<}<|M1^{*GM{2-USiBfCtp%J>gM_YG zlb!sRRkjlO{+9Cy$to*}DyI3zDl2w8`0rNPQ^ybOB&&>a7e>BAbF^%X@AZlL@Gq;( zQ}QDx#rXI~(&YO`SI|cy$tn}90tPPpwaT1dY5vP9qxdwJ%0;mzs}Md*4X1ZUFd37+ z!Cel2P{~vpZDap!m8}@>f-kex%^W^G-u*LU_$3uQDuK27TZ_{UI_L(Al0AAeM#FdIuH5CvH%rLh@)g4}v?oR9Mw#I3zx{#Y7th2v z;YT8mzQ`AUQSAT1NcBkh*)4`YU({7k!6!MIZ>;}Bp6d6XHqB*fzc^iSqa4vLpg2A) zy{`a*3mvbYT&EDTzXH3hy0z`68f?TorUE=v>4clNX}two&Qg(ku&_ih@8fCZe$deb zT;emKrf{aE+@!jOprUc6rXWz6@zAlcL+odF?goBiLDFIKKzEZMrQ3&04qE{iVD4mo z>33&97o0;0F2tR=Bl^2KIoG+sYoO-YP23N0a{RSBkQ;5Z$x^JxPeD&aWqm%+rjVUc zOM|I^pxnD>6m#F2;NSh7zh9c8mfrlKI_LaE3hG^Gfc^{_l>$b;faY^S$}WIr>Cvp+ zkC`9Ce_X}W+8rI69$(w$;sTH#o-zH>M3k+X2)QxBTup$_fTsY^4-xq9|F20^w3hr; z5>Yle7K3BR;m^HSK9D7Ht1nreW($hCMbn243otM)qRt>u9@n-oXb2$nKrhYW@1&|q z9Gm6ALQO6eZ$+Nv2dhMh5VMbi74NMZr0mxxmQFmREaMzD-3RhWs-0$*LZA}+;zxwU)aDFnKp{uWZ z{`|DYJQMosa#Qm5@!E8;=RvvT!*8F~iw|dWj>FHtetNU$wKU-M#cOWkij=_Y1}~*5 zdj z2!LZ85W*^yG_u^-V<4dVUOEX z8m~e)FZIPtQSHixdcJ)ojL=_hjDVP2>b0wUD{&Ej2N>!&dv5xQ^S8 zZWVlggT@5UKEKDq{>hG++C%sa>g+nvF<$7k*UeXH?)QZxp%1*xu^7JnLK(Q=^J{2) zg}i$f@@6hS-ihsDvk3D?xj8SWj#vuS{Fnz8%iRW#9Gb zecne!d||pjk)iiiEbK6L%hAgk6VY^@eeQUO#y_;9DCs&2JJ0+POUf|B8ia39VX zln+V}y%9;6Dr;LIYd7x)x+OvPB=5$O zX0Fv=BFiZ{Tr$U6%B8pTJ@W%ktnv4ENxzTES`Ik*Z;fj>)q3eLQCGUr%au)JdqEJF zYwuh{aJpHMoHE+joEK#LhPLDg`KI7c7(QAXo`<5LX}?(ABwzRvsl>nok0VB;D9b0l zM#D6+BfKBFnK{w3H!JY|@rY-HhhEJSzH8=e%rd+y)xKPYRR!NhlvGI=3?yv>*c zPYLhba+)VunYOm^P8y4MiAI2&PSsjz8b|JJfv>y7R|ROp1K<2q`4hcbwMHv_koz22 z8cuk_{qZN;ZMDXXNrpK(KB){l3-tR;xuV?^epXj;SJv?xzjt)5s0*01V{lHrJE=4m z1GGZyC+#S=d%RCAJmf#C>nAVFi*zUh6g7fI%;BPHqfny22buBi$FN-QEmMCW|xRYkzF zqL#7-8$H7LPN5*kpU)EEn(uwsVrO+FpuD`jy4}h?9q4T^Z;>Cpd_~M`W?p>3(_;~2 zU>Q=KMnG(FYSNhL-W0ZTUaL*m$BKpDvL4Kz3k*(5mX-(ZIJMPzy6Z~^(q$*8>@s!O zd@y+0#g5-SER4z_=ta*~yI2!(h?IHX||l zgS4Ek*ByQn7S~D3#Qkyttz3FV3b$me&!xY2^j)9#t3WR=vAwm{7?RK?@AMIuuJhks^e%3j2 z)c`f}iNlq9Yq7s3o&pe9Gm!c$Wtk8Kjl9!OaqUBUo- zyKVvFS$X;?XmrUWp>i7!Z*RDDut|^3jJYpJ@od9N|6RHCAeo^wCYJSL(5_}-=-Nup z&`_nB^=9AL2o=s>Q|RlsAh-=+Y880dBuHHsTj=;cY&2B-dJnWPE4Z(i{c$nnT6 z=lk!Jvw$2>iHF;Z*}>&s6gNSKIQ?;k_gYn^tVSpa6t~grrh)E9)G$UEDhtI*DB=e zmyZN0Z-zAo1|OPvMwh0BBd2MDjaxngWh_z9B zZt1;xpaXYZXNW#k2!HOI+C2{M8&hSmq^(WPo9iA;iR2%_=4q=E4YRUxdxlF&=jkyL z9h14G#$X`*x~vfwF_&T9`B3?cTVDz@U4zbu%FtY=pnby5kp8^bH?EfwBwu^=YeHkU z<{`~e^rE@z%%6=*((j1llbkYdyJH=WuCRVnlk+2MR{f*QS9N8DwwVr@IerYPTj-y| z2BZAePXIDq25lQy%Y9J>a1p z{p#lQxK@?&Q9li~fEQvj1d6daE7ajf}BCv3D+F)GXBvo>KD(#g}7>i#iSzDS^;K8x8@*rH5?P!tylrqf6s2esXRQJ7V%nHp&*0W7CDi|4eN+PD0rATX3Ic2%BGWZ+Pjg*O+ zv5r>4uE+og>jPpo1=<$gECos!#6rUunG(`3>7r99y>l$sZY)w6z&2NDDXms?CTmYD zpeq|Y24f1pj3ha+>n7g}!IgjEz7}(IDe7bP1r-z!8i6tSGF%{hb@E)bh!3+5ADZHh z36v#`5~U={rdWyR`LrlgyRa)7CgOYxV+sHTzXX$Ed49vHNyhHpq#d7)nlu zT3~!9ZYa*D)RqGZ*D#-ds-U?Ik_LLlW!nrzNDh;+ce;;gnGIV^Jftno%Omgi_d~^tqIGgmM>$F=oj)&(Eai>=`nYR3zn9 zWX{wFw4~7+xu3U=XJXCOG-8%!(16M_<#aNttX~m~-&bPwH8F>=g&)^2?|cfw2qvjV zdanZXXaq9$lL1sCNxdY!EH26Ylz}a`he81Gn-2gAPBMD`(- zQDcrkm>_?JS)3bZaOW43o@d{|_8njO@V@ew81Yi6 zy-B?DwC*X3xd8yKBrmoDy-1G5NV})t$aEn)SdH4!`ti&GH;iOhnLF;;?<64uTR?&# zpC=oDq?esn8=+0fa84Gy_}FS_QgT0llvQm*&Hn1PuHCtz}lel^i5F4V$@8gK2DjoVkQAzGec z&7x>uv!aSaIWYkh^)oQ5d!Mo&Dpkyowkd`eAN`(30Y-}g%!QFAou*cwDN9Zt(l=-V z3?}K8sFpI>mM+k~pV+Z}pYNwk^&V3T0L_Ca_Fh{MHb0T6M3 zS~E#H0b1a1jK>}N)SJtM&i*PON*mRPGZVeGXqdRiEl_2rs% zET=%CbueI!fS*Hf+>NA@vR}?t)2Qe-9S}52pSaOX4+yPRP-$9)rp!Bi~qd%Z~>m{b6LV#_QF@4#+qw*Eq zYiHsGVRpToJFX`V@WLHXNV{>p7eJ!RaM2o+uw`+=Ej}n^Tcg#onnQxxOuY1l@i@as zZ_1%1tBif($7#T-1oKnM+smCYj`kR`mQmEvLJZI@Vs#vSv?3y&p1{3PMv`nRr#0)%d>6=_HZ`cXp@Pnvs4hKAa^wL(5IvN=_Rg3k67BHj$D8*bckI=WM|QZ(S4< z)2X8I+`7?aqL|S8{GJ~N0ZZz25*UIToo6{6{7?330Y>CO(x5UXek(IvpH{PhQHvQM zze`KyRsvBJSFvu7SMQ5Djmw{$R`< zuQv|6TK}!ecI-FCkfS@dc1e1f`|qwswm&=0G%74W06X`tn~J`x)vm{bzk1nqmtC*Q z-5)V)KBTIQq?h>@H|^}+rP&K$_EbII4V3d7>O$SO@|?)?Knw2$$M1!b^fKcV_;Zhk zqk9CzZp6Q;vOaotFVE=zO;u+4zt+nh0OXhfH&p=s=~~Ki?+bEvGB~|(av%xg9Ro*9 zu3%#5OShP<=x4LnSBaWA4dtei!uf~E1@Zr;%Xt1qW^`m^WI>c<6l8!4GDZN0Zes}{ z1^^LtAU5KMNYI9Ufo@ajND}OtqTxwe+2~_#4VhEn=JN3jVe?vt@#c!jY-!ht0zFVP zIX@Mj+X5>OIf7P}kt~ZBia``J2VZUVHs>Bkt1+f&vbBn;msz#+Mc6gfyng01gyl47 z7uPI6-gC5gDD7j~aVd~@IFSm0kf3-;(dZk(4XmY+rCmsWz->?I{ei7<5*lsY!rOE* zat>>DM@3S*Xo-Jy*%`^!NV;m&b!yYCjU!<^p>GdLp53my)0yk^AvTmzciE*eU}aF( zKVLF8tTQl$EaE(K@N4Inz1cDY7R>8y=SKaE`+h2>$42eX>7yVFD`$l6#_Z!^-y zG>Z1OFpuTPD;qXTZPEAJ8K&CHU?-!muS)%BdlTLY_OL?9A5&k?b-JUcZ~IcseXBFg zm^Solc5c9^h^MZ^Hx_n;&^NgyHNc6D5JDXsE07|WrLc#`2-a2y2Gy4f8nJK0ntGt< zPAk;3<5^rVT|DJ_*$b>)`_*|Pm~@lU^xA`3(LXgf2cYPMykiBx-BYBlb}RPP|HIL_ z$1~x7e|)o9n_Ju5HrLIqx!-T0W`?VbnLSpOP1X|rWc=Y2+xgl@Z>{sj ze^%t~_MweJDE0?86s7N}U^C%8D0yocGs!K^FwaEv)sK&Dowge-@9u{obA0&(+VfZ3 z_ihe>tM=e_5vCb_ZK^)53Qxe_WFy-^sh!Dkch$RFp4xG6i==TI6`rp)2Q_y(rJkFB zI~RvJUFdpcUt?MH@x_;9h?-q~gp}i_4JpCcrO{CN;a_In z5|JL))Qb-W{Z-}TP|kb@k;PJX#IF_jyzh5j*ES`7tFS{}F=zgGmo}>;yrR)H zlnxx%J&!kVS5<`{fEEaLMv(b{S@VxO$CoQx=W*kc=WX#(nWJ3oHx8^-0wBJ#R{urA`-sX?|G^P< z5tVRVPj-?j!uIWjBR!f6oCv`^ZsyYy`xTNI5)Rw=^khhl<~yaD94*Q{xm`G+hSSaY zLINMcqi!0Sf=?WVa1uyWaB+1q#!?K*$!o_&%QVJA<*E2iy}YFIPY{i?GGWdOpkHa* zS9N|$aitROi0Ey^`=>F#w%T!W|=LlPPb_oUoX{#^g}P+8DOqjgzkx#9d8;%?;frj1l!n>ea?6mzDABrc#M9M=7hd zh~+h2)i$lyQKK7C^>=^QW+&gx7C&}|{ zM9%#c zdNb#HITNO+NI(^>Ik+MWLkn6Q9#Mi{3xmiz77w9AqLup@5H&2<5y1UNT8tD?mZWnm zZ@xxIyWUv*o%vn)xmsA8%(pp7+KU6Y@@PJlucY2fwtKVOTDl!)#asEdN{!9|)UWqT%y1 z?T*$^*iT*VT<9#6=^Vo@v_I4ND9;TU98b;u!J3VA*2>xEN=(t5&NyUJs(56fkyzv% zHs5yr=MH1yF~U=D)P^)}dk>#&We;KwX5Qsoy|gB^I9u>ERTA;iruEL$PWqF(w)R`f z-7Jq}g06Jc)%OmYTPYcDoTZyFAV8_b43%*_(_x{8qfb%!vt>=M+NMo^{d4v*9E^{6 z^(pGVRKUQOxBU^<-jN(|a6Zbk-P_eq=c|4XdL83EA_gj60aV~?5Jc38SkL8_^ z%h-_%%IUYYI&VxvZ=V2envU4P4Nz=e$wEoA+%(4~jac&{90YUJccU^lsyE8pI-N6_ z^?eS~_|W`Jeqsg zq<_b|HNkEqAXu58w%PkgT6}C6xF9pLjPZlEu-4dgaE_Z0M}Aq)JC z1|Q{!2H9V2Lh8azIUXmD2H=%y9mWNWISpc3UcGvm9HXdtuSh#uZuVsOGnphFtegqP z6Q18#GYjbkoi7r3&8*ok^;ZnL*|6egl`r>FSpUTI5-yLZ$zD@6?hbb98(^KJTmBBc zRIln^+xL#&=Inp%aU7v##g(g4;rGrFmXtr2@&V;()&Hx^Nt9T^K z6PD-!u9r)XFD^=8+8piN<=u!Uv0gAC!Zu?`&ZB!^;Mh&WKb@elDakt0a9U*=YE(sH@-ZOTo>c=ebge`2=EDGE3z10w@80>NRky&YW zGR2I<0f_mXv}8(~^7}(?5e>ioMppO!tI{LnyfesCJpCvKeqmv#5>k9}MT| z4SvBYEp=uwrt-eRuPTahH0swPQuPfS^EeTrPV3Oc9tHsHDDL%LiNZjmNB7~6*rdVB za6MOe+5LFwYKr6~H|Qn!pF%)ECzS_54wFHsoBP$&CFc48yr1h_H`T-EOFBM*>*gb6 zfHWas-o)zPU1G9VhO~Spir`xrHlS#zqik64W>qHfS1)_mKwk z%e@iVs}tPngay;-vzu~GA=iW3(V2%(p(P<9$H4%>K_%rQF5ofo*2_ro5W!OcI_sQ> zYgH-SgG9@1L;C`FvMhZ3G10}GOV5n!xh6aoM;*QGp=Es5?sb6bSwXpNinD`|{WR^0 zEG6m-<5+Z@JUKyi=K5MbyuMbT{+rWFIqcbP_y=mH-;6|bH~e1*oXU@s@Z%=e5IbWndjc!JgAA-=IF z1l^&F9-8XLUyqn`u{}84iIc<{Xop-rJ}7^0^h98{tI(}ncd{g3k3tS!;AHg*oYfN|mn0WhX>Y4ZUF}HY_{-%; zM5Vu$&}_6^h}(;#oSED3$4+FaYH3gPQbcq<#tAOR4tN`57ady6hbRE6bAhTfGM_3? zZ}Cr%_@O_F;6Q=Cee7zdK_Domz7Pn(s(8ZC&Y?(cU9oG%mWWNpJ7YDlJc2<&JggNx zh0wrbPxl|{PPE55Vn zGN`NE&luR@RdyioPtO9#pAfT=$nOmdGUzbuX%9Mcunx_AtKjzXtd* z!Gg4RSJa(cEtpBaq=4QtTrNK})jc1KFmnw4SOgI@Sj%PK=&nu*0Lhn7!HN2(HchB9 zD?VH_X~owKwqNRgX%#BCinVc|U;`Q{oBa9j@b9?9%MiD`^`n1Yj{4mz7|6OkMX#*_ zmVck|3vHAr$+a>QcE2;!%3rN)gYa1CZD_o0&O^qVBM`7VGK3oaBA_rdNuuG9+6D)r ziW{n1wySv&ZSrI}{QKtrs_^9&qW0a*$ufprL+x<7L@Tn(eC|v%P3UzaGAz$h4%aS6 zl@@rPT|@2I7Q(7s(2LJku~ZZpZiMG-c3O}TKA{?yhr8^c&SL(Geu%bUg#yy1)||W4 ztQmibMyH=gH6I%j7{p5b(jJ;&yVY^en}+&6?@w$~sk9VvOsL+dcjNV!;`KY*l3JsN zy{7<-)b}?$VUT{uQ9o<7_X0P++pr+Yq_^(vxh`Q8cXStG<{SVoQ_a=Q=`JL`bDAew zI{nInma@L6_RC=_w~FTKodzvSxN-NXn4tDL;xE+cIRW0DX3AUfu|v^^n&16vZozkY zvv{lAw|{G~kcnPt;O@nq__F3e<8J-A7R4*Ud)SA6%W!@BkMf=%*P>}t529^=0xaV^$F(SsyW8q^uk*!Z>BxBm|O-`D#h`&q^0cDZ(S2b}qvjOI9dbWXkuOlip0 znjeg;ME)^H&1!~<0E@4n3pM&%zgsqZgO}nJ*DqYWa=@&(f?iTY_;2}Aa&@ft*-=fB zj#Oddkyp;RHP?V*hy7voY=aHxOMJhAKwU+`4&@Yvur2X1{NDT0Is799 ze}`m-M48+tONRMVFOIqaQT92Gy2p-JO}GQ^9^V`TcA-V=$BPlf zrHLLB3lzt8iTnjbFn z3c5KLZOtuS!Nbe|K6HQ#{pOLJ)Q8tEuwlH399S-B6$3Ve+5G-Q3#(tL2p8=~-c40> z{4+g5mK?y&22*{*a;wud#dp-F)%?y*iy?F-6!;H=W=Gnlc^4DGRkJ!?Q(y#FBL-fD zzpfi0#`gg!-v7)uf7D1Exrh~mQ>tyU#1F2*1L7V!&yyPjK)W+$}-?sVwX}u!Nk&<#}Nz z*B4IqufA&^Sc(&i^iTkWJveUu=+Tv7vBP7jFV!cVI2_jgUU%{eemOC@t{tPsQO8jQ zGZez{NX?wMv-I5tPHvW}%vcqou9~r*??u4>{#)m#%BaiUtDk_M&8pbCy^-^;O1Vz- zT3?9&*AprIbG2<9-n3qrU)9$i@Ji&$xIRMntMvXjd~ca+Ea2)L>~&qLK&&_fOkD&I zE^@1Ey|-MGRF`Pc*bvJ?K+<1biI=-b)9?M@b%$JYJbJSVTh^5d@SI6EAK%E7yK_|@ ze#Q}hhivMa=;{`BRlrifsDZzFsKWLmJOW{D9rH#U!pD)z#r*u{*kIwP=9)iN|J2M( z1aI%@{I^YgZxO%^ZJ|hp)$5ga3m*?3BaLF7RC!1r1)-Gtt=#=4+?89st?_sy+V1QW zB=+Y?_5+Nj{eRP7=k==AAMDvi$&pNVc_+?fb^__>;02g{id^8;B}Gex85Wb z6UUY9QSMAm`IGLbQ$k~X2~aZkzqpFAw(F4Abp4QQD*7fE$U5mQYL9n?M^~h;w13-; zyf^TA;~ab}ixWcmXb-(9_(l4Z${hG3{8P(RXu3Y!;?c0j`%=`WAOz6Z!UrF19=OYH z`GSp_l>GQzE@HaI-#uW-7NPL)NC6k%IX(H)8|lu})q1!NY>_b2iXpAm(fi?|ykDLh zB7*PP539#$d|!*RM?O&Dw?CxB_6Ty06h41yu;kCAnX4eKw{yNXfp}fWPT1vV%eYFk z)LZ!0&e+05Y`F%{3YWnT9CG0JPo55sI%EdlSZ!BaX6z!ct}kC4aL(N39bD41d@hIt zbSN$BRJ{ew%zTvi0Rj8~Q&&sWH*&A)R7Okf7=8-c=I$LS?fW66OkmA?nspt{Ny?J)sV%K zfxHkgaJ5IYEoT(|3_^g@^+iNy>f z6En{ujuSDQ!+4@I#-zDgH<4NeI9eQ8^9RPtS9U;m(3X(5V9o$#hkaw zq4A4I;IP=uhY9GD&J2`Xz-W%*NT&Y=&KFd2Om1_4QyMk{GV=MK$t(}n!E;srvrPDC z$07fhYkK@u3rYQ#gxTWcS3^mUc|*1%@Mqc12FG+%Lk#>Lr1{DcirZ&;*-f4O*NKL; zm41&v<8O^l?^nJ&;MBjbd(;l!a~>tRXSZLg8hH5~I|XK9s9+PN?ktXiy$3nfB;TH_ zOb0ar?8F4G9Q12Cy>de1>Q3kQ#1<52A;S@UpZ2_Z3gC=!f2T8!lnT0ipX&>}H~HZ^ z6>R(79KEtIB|K!9YENWnB){WG#q4GWJ05&xn78ZUDk#8FMy>v3E1{;495G$y-_>)!Wuy^@gWZ-`}-+{*xbO z<$SYXLu!De=1cRq&iUPfY(9Gd!)K+P`^05`CEXtMMF3udo_jY@)l&IcLrO;D)kKA$ zi@3IpMf2=4Y`YYG%k!DkQ3fIXjSNnJwv~PvlOQUhQ#HZlb#5(r{=OI^Eh(}D@YtVK ze#t`W>A9xfvc_4{c0iK=dC4bwuLd!6-5P)14fx#&Qrk!o@=%I#yWTc(L;?@Ibg!~l zQX!0o<{S|nOdFG}-zMAGlipGpv=CXJhgZe|X&TM37$+`{;W=uJH||h2i}w=rl-tdN z_ZSXot8Z$cPKf+K#IcheQtQDEOB)ZSAC_tlTW4H|^INu*stvtniA5mt?tmL)x zaSPak*8jB~J6}C#I6mRk-y5)~I6mB@Y2L+On(>v2bdAM6)8P4QAGET$ac;EM=*L=s;(Ty_+%dsVti)dy!CR_28lUAAz zO)#B1IE%fK*k*oZMEjAL+y~e>*$1OcN6EZphZIgL)vI|sGNMTL0D`WQVdRf z_+5Y9W>lvm*M66)8-D_}jSJXe1=!WXXQ{-ir?Caf_S>gB4Z(+ml?NO6#{2LX^i(ug z8|U25Z%qBHX}~S0+o%kZbF3uAYUz))@dX*xWSP*EQ)AZP^MWY@&^lS=G<2Eg{oG$p zX_izn^4JObNk}$0iYsj>O2E}r<WE}uC;Y^-t9#LLWN+drGu=Kwqr`d=329(o z{bn=@!@g1ll-ogX$*anHXbpr{+=q(_($!D#RIt*WnF!8sn%jeyOBIflj#x7_ucR$} z(NCRL#OG5#eiet+K+9DWpv+q0>#!k|GOYOFaxEYbZ}>&P$T zw4WxVC8d{Uof}n%Y=1MpU)8__ww-Po{VHTYnuO3jt*=mXO~8VrFDV36?a6m?C1hHa zjE=STOy+Zs2b!DdpQ-q+bzU(-)|$bZr4c#m5mcg(GuC=8=5^*myJa=wwyb_ijP$1B zsNB1ld0Ny0YYr<%j0z!`s?@ML`^d1M04tpDpf@ME0R`h|N&OaVsNe6zKP*)Lyx>Cq zDJOxOEl}5?lTYqQq8m+~KwYx&D%_n>(8EWz7w{`k4J_r0U7Iu1T#^^;{R1p-+?3AD zI3?4<_jJa@^gcW=O-jJEQpuSsFFiSAFu2x&5ywUAOEa|3VYY<_Y+am#b-l&C9kl;v zSiKlBoUSvme%zb;PO*b+@om{lvV@1-XO?i=+7EAFl*mpeG~HymWA~=+tRRV#jM3C17;@2CazYTffFhZ z0A>Ef0_(_KMeJH@d~Bz6 z*P-zd5X7Qd+UtGR-uqVL$W~PRedN>0l?S?-0I@S~mUnw(`V#(XhhAGuKc(_)L9|NO zH8qewF{4Ymyf6~iJ&8DUwN$dMuEGyI-dh%RQ#jtYIfDPvo? z9y#A-4Ocf{FHBt-HDUzLppE9&I2-;F{A13Csj%1L=Gk}kJtm%pqn$X&oVVffi;N|n z6U&2XOIMQN9iI+gxWL`6gjFh@%_$%GiOQe22Up`~@6Ahx-)WV(=ra4@Pv@@MFaI8m zgb#Yg9Q|jK^l!l=BN;WJvg{7IvAZ@`k{Qny^mM*;WTFqK7?oYV%^kd}@o$=I;eVig zbPltfq1WD|me<3`z)jPXx>^2h?bHp9v|SE5i}J#OVcmnvmu75?bHB}CQg=0fRdz7q zbXGnOxW_|-?mQIC6t&nG$VDYhw6@V)Yt>y(6Gfp!0Q&Fjp!F;DMQBapZ&i9ovhwFl zwRSWgkFj)2y@$xw8Lm$nd~#X$L+SR=xIa_rpc8O!?u%co<)Ppg0j489QXgSS3W zPZqmY9Ohvk*F;H!qBuLH7&5s=-;jjlCE77-sLv*aF8!cq7B(u{xoOZss@AmTD&p_F z3Ct6xQkclT!rlPml`10CVu-h?D9M-j(m(kUhCyOhMYvX-H^@4FrP$Gtkr{SO)UB^v z4Nx5*!i?uto~Eb!g4pr(+8AhEK!%SJbRn-?MGUIpntLcM(`uRPj5qW3NEXEQqm0Es zOW-NjJeggw6%C5nQ2_^(*EIl9GEi>tNXE%d;caLf5a8ZGgykB5XeZ=1p2TLJIOPfb z536i5Uzh5dOha``@Fyo;h4MvrlEU>WOggA|sa%lGv)+2~j7m2pBZg(eu)p$QoCnm= z1M19ra<;_mzf}?gVDVomDX*sP%7r4WnJ4+~nrVX!x*Z3|mBQGhAeSC^d(@J5G`s`a zUftDAJiuTgDaL|5-gN)t7CN+a~fTA(x@| z3&&Ayl?uJJC!(9UYw5fsoo@{d@tmxCKT1WJS;sS+yKPVi6Wa9X;d_tMH_8!`e|UQo z3yuC-tt$Z6O`x_Rn#n8+8vFrYJ)`P@jtzcnrv=K>;Iz!)(ys_t1)&KK{&A?k-^*AbQ-iX`Euf!zqOUdmHLJ&g3i9Fs@#urNRyoE(7!cf zR8~e0K9!xo&|pBtu4U7vXXy2|DVcDyJ;n&}_*as3l{FKycz=@?ku{!o#;-FSpq0j>-)&hEr5+ z%43tXX(V1D{XbLo&5C7>@@uZM9?Kjq9=T{YSh?DexR@2l zRW~_gTK$rFrX^#uwd5LM{57@%`4nzFnqtk+Qbu<*@Q{n8o%Ku9nDGkjv(F^_I74Pf z(!@A*C}x7jWM-%8PTcrT$h~J4H17n4z&b-vmXTePo@)q&w%)?E&Y*0D?_-iOcF3vI zU2j+>pePWHv_vO$^Re)p`#ElfEhOZ#!?XqNpK96Y%$%Ds$akyIG;#ah{1YnOsOX{E zM+LoV>&GR^sXnZszh0U z)TmAq(;s4xM^Mi6*GoUk<=c$UY*nugYY8sS=mFla>QZdWH%3yk2Vv)S}~suGDl|W+)k5gYtG7Vr*Ol^tI*De6Mz_%nftn zhh=G%`JGWMV|H2BS}la`K2aw`~ZOj^@%YgG%IaiZy8 zGl5D~9niow z6oqP|w&T+>FLb;WXAEiqIv?;?6+WWIxf+3O{j~tzbisL+ZI#l)>>UqIC)zlJ7A7=}W8_Ll35=u6Kg*n4}ynJ3rYL7m)hu(w4CMt&HE(g!biY83-9> zc7Ymv?VVLcNV1Q@VpE{wZB0s|Cnwrlarlaight=KIJC@gGZmABYC}lrm+Zzbsj2&s zQg{wA{+~U0Hn}a!xF{Gq%E3kk22=a#oVyBv2X_f20I^U0Y+nyOY8sp5k zb{cAtYqMZ{8c=y*{#V?;>yr;V(#*V{n5jUiSKqpEZK|GQ*lmda_z;pDvZa74i3pIj$fq2A!c5*)R?=1qKCd6QHRr^30&fHz^Z}X`-}X!SYznjW>C6-nHPyb*O0Y;D3Dc z%Wa}O(vhMz*_g-H6uR{&q|k~1Fi`l%+NLh~_Yys`;YpWpHBgOU=#*thQ30_nO@;wJ z{?tImyG=H2onD^|_`$g1pxoO1NutD5;NyoeOx{%;gQE-GCt$3PVX>QNPjd~Yw+8)k z`*_lX_ua$7rG^lt1oMf?(H!U-Ds=BW74;#No(-O0##% zGw(g09CD#IlXo`p^T*)5Kkb|@w~ns6tvbK*S8B`F;$v=}8E>G^r|T{pDk0nE9eXkf zo7bPuT>Ji7<1!=h#oL6e&50L`prXkI9L&;wteG0Qwbc+oKEr}`?KiExt1S>YE9lQZ zEq0T+cOf8}@*zL*yw;CrM?Ksl6U-b{vHxke{&B6TE?dC(JsFt^zX|m`vYLBwY87t7 zW*Lc|wG&HieL4WmjdvN0De81T4DgZZy3}@Y)#u44=|_q~^&vtoydFI-er|YwagFq@ zXgPj)t(fefy(8afr==2vW177)|qKi;-x8XhH}aesw?-Ot%>o6 zZne|%vDz{ZxmxaQD0>RWG?hbt--@>r7@eq>Ro=NoXW{L4&VuSGw2d&9Z~e(1jN+d^ z7cC)QT42e@xqNk2e_pFW$h>wIkpqAYD(_EByGeYCa}l?=w%u*C@b=NF8*1^Gw$Hjv}I^zs}587WkyK!?BQ3}f(59*j(<$=`LTQ} z=z5egecFtr#w}4A{BOJETgTirE?dX!v7qTjClFckcOUM_z#_Ft;@(Q2FF%^urE>2J zBk-L`MwB?;JT2PFI#y|9h+SrvKB57cJ5@7aeB1c&3Pj-k0*TdVeA5dN?unnFn2r@| zUyRf*+-8@{OJ@JqohR!HvQP>(OVdje$Zq5%TCD%l`MB15IUGWZIzWNkPIFBfaR=;E zOC)Rs^Z#OBQeBgM`cZ!aUQrWxiN|d%m4@zxtIKirXxFW$CLYUvE1vfHa#pHpsk&XA zW2A!aiB$2O)ypIha9GrzV;Ecsw2E;=Pz!DZ4}>&d`tF+~=pKhnLEFn=Nl-wXIAL1J zrQkHAup4ES&a0IJ+%PP#F*_BizG$_J77)KQi`6OzKKsTXE1ugN4af!s-6qHL_-XlC z#4bNaFv6Ey{DyZkvF6^L;%33gKgx{Xhl1HfoeQ$bLc3j6{&y`zrl;DD zW3A@gKePoYT8Hx;xF&m}@DPS}{HSLb^tp^^ts!u+pE_6PV5GjE^Y0u1x8UCun+dm2R;j?fI&uSGb5%8 zGKz|OpKD$69GWwyuhsZ;4uFsMZ1J6Kx_q#X8*HZia1oN0DOiE1f0#*<`WEgt&nKu= zkCf%SKIiD{5c}!Ne`xm4qhIH{k(0-Vf9Uwni`aF1Pr^DH1!;5Z@c)c(P4qw>tbln5 zvhT#^PD7gmDu7i>d@iGh4B>c#jniDiub$ZJFkR4;NRUOk|IZ+bv!jZvR6{xN$z16K z?hIGp22GKN(vhc^p&3wu^oSm&G{#12fd5tq^MqWktfS}F3m%LvoenfPcIPFY zsLg!EQ=|8ZY-`b^@j%SURKU4Se0G52eY8JLD&;Gc-o~J#e^zzv)}w;8T&Xr_i6Cz21`1y&0p~A+|-U?^=W!qrq*#PM(1Tu zfjj+B@WcVW=Iwka#YKe9AB%#@KhZsvX@|Fgki&qy?Z%}5ooa|W$gg(@V()oYFkB4) zjFv{iZV<~KxIxWS+w+n`^3D_~TX5(R7RxX@#@McHQ~wbDg7EuA65(v0p=2Dm>0HMe$@EhoQ>+Xks!%=Ea>{Zw9v<-l0!rwb z;0?vc-=1u9BxK(e{5?Ne!ZW~GR?bDZVNp;2UBmxc{H`|NwNY@odGV%Afo4-z8gGd? z_Vur+{*FQ!fnyhDL7FI&<=P1$O-S;Vp#w$RBFyL=_*SMXXQQzGt4o!=*=>}N`omc* zhGW)v1@Og;bnF@-K*%X4I}`{@oM4=z1;MxYzSo~L{ur01QP|GQri(9!C-dM~4@JOF z(P#xL=1#72Y+W@Rae~sMqyh<8mcBU*P33WV4#_W(b8*}X_wg`2;ZIC&=M}EDbePW> zef*f~)mxj0XtnRj1fhAcQ5Q)LQNH&fJVU1YCMj38Bm`4?C99l}&mBYrZD6gd7hZhT z(tvcZ<}i`%(&r^2;0Yp_Q`{d%<1cNUq8}`P(1>pi>H5S>J=m2)Z3()9We^LKTcx(F zO&PzMo6F^)sVRQXdcJQ%_fH04H(H659tu$0ifsUDg%dSX=e5KS=Ln>Z0( zBlNoJW4nYE=6qJ{2&yO5-niL(imi0f)Qr*jU&#laN%IhNNr(B4`>NT|JE>C)vgl;;P-iEHmZB9y857CW(529}baoo>={4kkv*whH7OGuqx zHVN}1xuOHLSu-S!Yr|r-USL&Wu~9`0|AP3(VDoz+BWb6K4E_b{_M_7zE6hIzUw1OHuigO5y7dY;DiMdoI&I9(QY9M`${i zW1#qV61L7m8m)!LYXTfbNPdT0d11fDR9yZ+SJ!G-IsZOH<(>I{l@Ei?fn(vWL99uX@s1PDA;$O|cx%HCE=shwWLtzob|$-{;5*kp(E(mB%)uKeS`6}*i1F*IDc6?BNE z+_G5nEcCL9F#VJaqei4|`?3ESfqmDUSbK$?^zprOX99`-VzgwlZgJAy(_{WKNl*$P z+umXn)8cvaBZhi+P^b-tZwR7ucMrl>C{haK7qYJW@>}w+?Mr8>pP-526G&vm3b&Xf zVOzW-*Td}U&0aX#`txXmD^aLkGGkjT2*tb|NIRodYP=&EjUg&4ae{-1X_%?|3nt7e zp>sS?pH7p%m|;^!<@fG^%P7nTakv&AJB@f~ECk^6=^k?Ie(H@a;X+f0MpBV|XE;&# z>CYsOpF)AkGA$e9)rD-!@*DF4FKqS%{&NM+JRl0dVN-w+R%Bw=^I@c88ZPGivU;$3khC9$vn5t7p8|T%PfY1PjJeS){2*R+52lE7Itr}Tai|jt&)zb}lqpd4CkF6=_tEq-_EYX^%RjLAgr+UL ztK?CQ>9cc!=z?`w0l@Tj#Xa`N?m^L=)S?POzdacnV%5h9L5-nZnRc;sd&o)7l@HKl zAv}k5{iyu`!M3%kpdMof0E91DZmpM|Qbg(gm7?bkOX=E-8U6FO0*F0p zqc4CdB`t4*r@_73HOt@`oBALV{V@eW$*+vcCCBV|@0-YVs-iI&T>#AW2Ip)FvOXY;47S)hhI^VWV$wUKU}0V~F@qtmXQ# zOQ#)tsLw_|J}Jd);OonPfDfjDgAW*V0TQ)4Hn7uvZ178V1w(=G+4A7;&Y8Uo>xde& z%s05@w@4$hbnTQ?C-uM$yk5uyhAI=9Qqh5vKLzUhr3Qp}ceZ2LAuxyqnBUMoBfoj1 zWY|$fo+TOuRFOyA4&%NMD`m=I>?p-GYIFm*7HrETX3_o z;ndYOBc7sX1-`I~$Ot;3MSpIL#Bc1a;|Nhy(TKBCKQsI}3e3`oML#!*duh~~(C6g$ z(6BdmOBQZv@$S>gjAa2{H&hnnKHYY2F5g0>ZuoQiv%St)gj)|(D=87yoDu||fkNf1 zx%@ra!7$dH!CCu9ObTf&(z=^sbE(QYIYe=JD&QCKItE`D6G_7^X z&H8}6>Ak0y7+Hnj&F*oF8gRE^T5|;OM2H1zh4=x@?(0c&+DM+ra~siyRsvLO_ohQ? zRjO)*MAU`Oq*wiAKG-;6rKJ+t?W5O}R7>R4*|Hcv1#YTiyoqBM ztc4^*41JIt2#q3|=#~2fwi?^vf(9bZJ85MFv}am7_!^fu^2WJtnlh^WX~h1z=iR)$ zH5;|H*&|zU3mE3zY;8!oO4v4DvNH}DfE2Tf=0#Qp#Y>IYf+gYn&GYl@8$QL}yA`F~$SlfW2ZWMc?hXlXEaJ~jW};qFwdnKz+LMrB)+2JX&O zY~iF(J12R3z>Ea+nWj*ikZ^0IEH_gC;k1~s^c((}dER?+igWh%r}h&s?5O`yHaF-H znzAQ8b28N=!$bhN)UAtwFx(zwtiW8ZJ}C#vdFRF1yqb$vJHdCW8D>`{eATkN{@QY2 zfOEb##^_eZ5GgDc4c3EKwwSMpfal+!0RP@H|H&?o(Y&Sg$+#-;`no)Em>%K#Ji^hj zOXT3JKXK_PhWE5(Z%t^tyF*pC+5M>^^|Ng@^WSU*Uzr`AOP;=KhMQ5f++ov*!oRg$ zJBZFd*+Q3Io8a25cQQLVcl1!;#x4Hce?FT}>Gqq4TK2o6ntpT6dR;((nY=XHXblo2 zVl^Jdk-w!)?FL=)*Q(|$IO{28{%zXF+3YzAppekTv9oAFob=r)21b1O=KY1c!`FIk zsVm`qe4cZd&D|JXM))GTmymuV%xpew-=v-cjRtIr`%l?;Ck;GRM|1mvt3!O~Ay{_8 zW#TdQ+gZUL_I~$(_y9l>QC@4SWTUaSfO3rVO-p_I)-)7#USNf{^IQOt0HZ{MUQOPB zEOh_CM`&Cad1IqC8CBeQA>0us1^$nCpK<0#a^U7VZ)~@k=HoCkNbD0FJKOlLc#2`Q zopp*rCd0WaTKg?{n4@_0FzgSVc@apG5yo}`FBP{p0S10kXRdwWA~5diOyRu z$1dvBEAA~=TrxhIDK+$C&uV>vaoQ+n(S8~3M_HQ<(xm`~=dGAv62~oG8$H6+9+}5< zu-1o3zjMP+i7&H$S~n5P6!Tui^I8b4s-k0SP}raQT}Wr$OBZn!#o*5SY)~;V9bIi) z?{n5sln}u>SHdNGMkks>$X8vB6m@vdoR~0%9=LRz*#GRq+4Os5Z1V)nhZ#P0duFQ9 zglzm8JK-nKhuO$PA5y}kz4Xare+ib6Z&e6HI$R7~o*o$e;Ma*sceBx75wO|Jz#kDo zf66neyQEWUYf`(vLX5gC&EekKp$X=I+qw#zn-RnR29x_b2r)Hz@{|&aQkBIkSou=Y z>A)#h6u08`jQEKp&g(*JRCw6ioEBpR8u&wOl5iwE?`d z`+FiW?!*J|lY4JvL{*ivx!i-FURTdq?HnLw6+8{d;g-2LVED&I>$S~}ReKWMc^C57 zS`?)%KftyYSTf~UGiV^;71R%HN~iM^+5LBAj%bDS9Mz)+fT5STz=*W;Zsh@sanCE zu!h^pa#YM?mDFkWDC>K^md^^ zj;L57uc1b&*WVBU91u@ZS7Z7b(>!@FT6)ZRya(hyD#R&jeu&n@1=|7H|uCGTAws2cBOCe(CXe^k&lp3zH&bSf`MBz8uLyT__%S18( z4qVf>z*U5--oisg>s*!Y6ffBKJHXb!;kt7P(n_l|*=`9_f+7Dg&#*}6Q2VGgIshIGS2x4OXKVLMy3;fwM1d#L1hQ35O-$pgJlrGHsS{X*?M*WpkKSsMMX2 z2SP~cCctcxMje*hp5g*xd*UcQ!g(r2>gP)4F_nSOfQgG3z%4e3{E`&jA*M-2gm5(DW5NrllVNJxlMA_}4?^4Wa;3-7t_J?Gy0JijO1YEI^0)7W8W z1TahOJP1mmsQ{J|2#oLdHdy3Pfh6Ihvd;;wj`>t8HDLVl0b^`|QI<6Oq&ki=%TH#tkn|R=tVV)eJ|2A)=Nb3OUJto|XN5Bt}&P(|$ z)UB_xtd{A)=OfK_+3rtjto7wtnNf;=5`@BOFzT4iJBa5LV8QC0jFX^Q*( zS$@+`#JcER=0S&#EOOQ|&p%S17UNPR(8hx=^r(G72^8$*p9KI`*pq|@j3lm(vR<-I zeNx7howoobY@|!mP&wGfD&D9!3ztU)&=FJkCq98AYCo{*+0YIVMp#nzRyNV@B;dj) zq+K#ODn1Uhfcy+4N;Ub&5|t-Q=w1xBXYJh;)3*WuII;jx01Sg0;ySh_D9OrzAP<14 zPZTWsFjP23uXgTpUIbo!E<4jKVRwR?)Soaj47kZM|BMAKm&hrJUj(KGGa|Ilae+e2 zwdX>FyzjW{`PIpc1QcJTXMffp*3Yr0z~0&?J8izkmg+w`&bY%!szF=?TD=zhk1LHd z^GS@`izsMR0eHwFmDy{InA4$+k}{g^RHyTIQ-)=xXY|F1(uHE8Yhzz+8{>G$=J#A3 z4MTR!IS?H_{Zq=!4R-_N&?ZTPV*&Bke6}rxr77A-eHx%q_uiFANBn_rd~nW)0y>TC z`+&Rshtt7TRQ5YP%NtA%-DNCTNeap>zcQh4f;BTyK*IVPUUV~CN~gYvu2^>_i_)P! zcEkKY2d%GYkgMS}1un6XZ~2sIBN%2*A2)OShBVHKB`h0%yNRm6)-cSOhP3u> zre89oZSW!*{t5lfW27S$#^>}OGEW}h4D7NQ$`!E3KE=B%h)JxDl!mux1Ac!BBk%Us z$ztgd0ic%fj1A)u{WjFgV!RiM4@dG1K2{3R7%NmO7y#nqBc3v!f%Mcc`Bfee z&y9g`aPWA(-Af+o$uF1WGn!)g2Si#xr{G&SG>h{*@Z)0WqDeDJ83gL4?c+BLBfA<&Qf8B$0z?eZ~ z_@B8W?Blg70~#33^wc~A46uB#42Tomv}>RbqQZYXePe9Q`C$jq7Cq)if9H9v&?N-r zzTL98Ecn_Xuu`~G!wYD{o1|D#@Ln{Q=8Ywc>sr_J=0U3qx2Yh^6Pd5%2uznkB_|aL zk?q#0P?8XJ4@{V6HslA^QjhVizTyUtX#jk#(B=Sht=u|x`&V8$i^l(5EU}R zG4@LExF~b5rDy)Jp2_E?KbypR-#508FKl{^oOi*wr=R`oyeM91xSE-ka_N*|IU5kC z%AT4W>5?hH4*V zDglgyzx%E?P-*+06y%1#)EHt~LNG195e5k^rgXc5Y5QRIRRb>-!W_U+B7g4yq&Epr zq9_F((Xr~#Zw3)6nlQJMuKd31be6FdM!zLEr&Bhf<4UValm5wjICmDNy-)f{Pc`=o zQv%B~_RxMltj)A04~@`UE4|lcB;~Sr!c$CJg;Tpv=g~Pk)gybZEl`!rdIj#$t8CSr z>GZoQ>74Ot*cDLoD|7Q0(JjdqHQao9yy#JwVT9biV|N4AHmt8{`1W6-Yz}~F8OY={ z4|6k%cTC8`5rr&eCD-ea=L!i-h6xw_LwWWSE|9Y9W~8NqePU_j=;CyY0-ohTYUl_- zJSQ6&J0hyLosAn+NNd?+8QheX#dLiRs}4sxHX~oW^IdPsz#WY((fdE0DS7`k-TfaivZ1G- z%28MJkFo|r#o8$7V9Mb-zeuoYGjeK{^xF9H2tCBPmDHWnTrD1{vSi$$Bhz_gd~n!g zoELcBMXO*WaxMFM2`BDjpKAt@xNuTB(+uKu<8-V5>@evwxdkU(G3SWlI7`xEq7kl! zXd3#*(y$N5cICqBKmJsdu>|6#I%+#{I{mVi>$v(XiUM4I-Y)rF>I*%+^Nmrl za{X&Bb`N7angpRwk#aIMhLSaUmlEI*h`gXF%q3x5S}`* zu#QAZa{78wb)(7Q#Jt%&dT12GTAE%}p6;Wos*>nRxyq?M zj4Uh8?dmtzWqR13YS+OgCmABw-ZiO)>6g`twgdEWv`!2!aPF^9u!`wQLFJ#HjHle* zNb<6ucg0mfvEcQqiO?N(Y*dNsbI*{^&VTc+(-P^Qh+OLr`tZ=)gt7C|xjmF##acQ~ z_v59!r{9B6X-)VdzeicN{<=gJYCMbZ2sizet0$Ej6K}0qJuk4tyR(*E(4|G{nsag{ zD%sAV`$x%$bbZ!96a5PLJ0Zw1FRlV(UE3$(I`2K#Bk_*gGIzaYD?IHwpfCHY1?^}& z+}9nY{GH}^YH}E-tV06blJ5Ii84=|m7@Tf0`F%01X3$$bh!lBt4~ZTbe(`mOkRP6c zjmFTp=bpH+D1l0cbyjc}C+=aVf*l|`!B?lR>7kjCaC-H~&tqruOEbt*)mD|Z%XK0# z@vN59OvI+B(oPO(>V&T<2J(s6py^~z4lDgL4mBPaz}qN8@#NQpltWIsnpnYmK{Md2ifKi+oOgd)_l2RU532(SAIeNXaLUSrY z@0kRrlcPTGvGT3eoXItI{YFe#hb`bDzIx#r%2-seFq-#b;h*mhiTR29%~$;td|VHo zU~*led}D(X_WzDtIP$t{mai2srq|HyK{7XC*174=c7yjVj|M5uJ~-3BUO|SKza|=Y zbuURq+;Ui?u#yyUc$a*!;(^opWu3gI(o|zk6RweMxieo|y&icqzn|p~+mF&Y2!{2v zojd7gS;;-(bupYPsC(fitqM7{gK9F-KT;aalmx|eJa_T^+;$E+cQ)f4Z;T7Ab2lt9 z_34$%&iGI2R9+{ZJb3>uu0++PjEh9QCQ7bu3LvSSf7nTO>CHs4#VTSkmM<++SFK!m zF!n=v0={+HdSuk{yu~0KGYNo9DRqzWTj|8y5W9KYxDo z^M^g!2VFdL{lY*nGI<AHF3!E3HEZ$m&m*;vDRAB{ra~!%0|a;D19I@ zk168wu53W*FSG+}KmL*ojX?e#5=I)UQd~O@Q3HlMZOs+YD1Ap0U)$;&Ywc(h%VXcw zcoy3LyU_1cj|wz4FKEk(%pnB92S0S|3jRw&!y~GD4f$UO|F$!pD2w2r6JuPWlzM41Wml_+=WRZ>I?*JS$mO ziojrS$eh)yV*ZOL3Ry|2AJ}c{I*i_l$$Xfu-wedI>FEJBE*q4d&HYi6nb27myx&D# zd-rD#Vw%Ed%Kck6Ml|i7+RGhiR{ovG)xr=23*a4-&O2Wd)3u;&=Rdk*i+Iz1x3F0? z=Wj9s@;KYSj zrmzgU9ktvS)h4p6+e9Js;iF^1=UAE*b89B3cZ-qugFc$QTPPp<*Bas`Jc|Sb zVD-8IWqvVPiDKQ>s+u9)zEOKsMQ)xu)f$fy+~-MP&dZlP4Bnx&1;aFQS1FbB&mp9H zr`OTO?fFWgDNm|KujL>WP>9=)EotKh!cZ0$yVb5}f96?~oVnwt z!O`d|!C@Q7??3+m4b8`Hqn`B?)ckO*$FMSdvtr1GNlYBoa{M_FF`4uD6UUSZT?8C@2$#epDZel35b$QN`q;6(}|tpC9IL(ih^J0^WvEEx|h{6R~E~zL|_+uB<4>VkoAa^WJrO`q!G zCcXcpfbMk?qC$i37UMsiMY$pD9_wUO7O@CN1msXSM;!GP=KL*V-suNe*_BxCSx7Mi zK&ot2ySHh0W&X0hR< z#^^KVUdqtQQ^ReI2}I-fB{ba9Dq>#FyI1#6Yw;gJKWgc6&tfbe0|LwQNen}n(x_S$ z5VESGiSq-#O3A0@3h0`1Q3EfR|2*%XD)qhMr`CliU)rX`yVkjg&c`Mt$gQn_CgrF` zx;4MU^M(S~ONEE+T+pa2Ni%*Xj8~3Z0RMT^X8$I_Q4NtoS_T?#F4`|M487X ztR!A_vshOtzKk=!)_|UzxT{pPy#JJ*upf0DStBy2ytN9HJ;XloRJMl-W3h#AwUrL>>QUc)T z`t@L=EkXRV)!i4g`PA3*16tcszG-r8|9!5ZGk1p-f_jjM9@Zkhl3O5o@`E=D>`Y?# zXMAA_Z>Pr9zrS3&>S*^L!@}=@aIJ)kQfpN6vj=;F?BZ+2+RYZQAA==#VD~ydr@`Jo z6v#>iS=FR~zQI9+Op)}zm@0wQ2SIk+>PGm`lLiMEm6;J@qrWF|f%L#gYNKzl^wgjL zxeB?>M29lzcYq@&*fnzI@3s=a!;>FVof&Ip3k&^VVZ1njs|#kME3G}PKPv4@>lma? z?Ya^v`cbC`f)S1>qKBMvcNkAL@q*X+ext^ady$^_xic9juB+a!5Db~GqhY+~qO;Oi zkSirKHydJiRdF!9vfVx=`=gu1O<>)W|4ik0lU}(BeFn<60w$~Lu9vh8d@~%}QJ!{} zD(s~?Q20|16+w!>*PeadCHOqj^P`Aha3a@Hv+eq~ zE-h)lpkL*ql_C@0zU?v9GDC~qj}^71(+7IGb6Q(ST67oD>}_M396Q$nmx)9{Cub&c zqL5^r0AnfITpBJ+K{oZJmRv>ETlUYV-dByde=1VeEu)7N2J5u&EG40w zC5^_rsw`$A79ad*dG?>Gcm>kFJ)E-BHNa%KDvQHl#@V(Lk`FLtT0mea*t7{tc8$-3{IHM?|jK?MWcE9i&) z+DfKg5$;-TtjMyUg6OvX2Yr)h22z1#4Gj?3m}|%q?HJ=kwy{`&Dg^!!ZF_x!Z$Pp=#OhN} z#a-jOCmrK+?gXpX8>Sa+G-cmgad*1?ly+#@dHr9g=w##a+gp&f(n1WG4{NDYyJq)t4E_oB>~G@<=!0-Z!7 z;xP#Nn%x+JKPqc9Ltr>lt-0_>0EhU}_(TF$t&KhNGkJqC2~_*h*#MqaXxt+uuwZ5I zns3Z`O;>t3U|f^WE!!-p&7tu1`yN*0hjjls;ZLzIoqsAkoaTk2biI?FEa+~f1sgC6 zd$Zg7EYdDIQ-yR(O%skjGm$cgtgFf$`nYqy7g>^mD8@&<%gveBNNVB%@+(gk?N~lE zddghDS41u3`e!>o$xTa?2{zDr@sG6TBAUmU*9b-S=E?vlp#=WjXMLs2}Dv_rJZ^CborpaEA+@;`~JSQ)84Q&k1hA1CimCzQtCn zN4>59I1FxRx#@h{mVq6MO1Qs-A-#Lw55 zPHdn&io5R;E~s4-^iALz3I?@8|9JBMxdzi75oz^i2Et=6RUqoGz|gAv>~JaZgV^kq z2oRq6P|U0Q`c1}`f42jEJ=Lh1>-wV(o|Kd;(hHZIDf|1I2gs_50`^O89N-TNp=th0S}i@@GG0FCXr;6c}}j*TUWf6rNPwDl0Oi4Boyz z-hvQtN|ao1p;A3dbZ>&Kc)sU26jI=Aj(SR91a3&F9JvzKDWLQc#uiW<4%pQd0)?Hyl zA?uJ&I=$JaMMVvGk*||@j{+TwBkWe{g@$%(kUSk{IYTCzD{V-aBb%?$2`1nP=<1Q= z!@&x(Ff5&XOC)O~URPn|iYz(@3>Hxuf{E2SBk4-FIqu7KU>V<~@`aZ!s&j|cDzJ{C zM)1x=u<6Ac&b>onZwwz=tD;1SsHfS0rwgSM5W!bQ@Ylnt%Q*meHaf=1?##;icL&Gd z!o!gYEH3HX^2S%iFluRTB?C<%hfz-YMgWXtly)5;?V$q`J5!v=5s(1-YzKJv3>CPv z-WSzVrw`=7CzKUl5xl&w5KOgtp^H9Pg{cC)CnMp6EGy--2ljO647~!4|4K*Nv}9Fo zECK;YJcq{5m=C;EM!EZz3Kh&#XwjbNt`?r{9iw6e51}LS{BxeQq?tllMjEhTb-kiY&lu%+4IZE9r0B(^5{_l6GBrZd z8O0Z}z~R0-oU!Ojr^{43RaBi?ZQPRB0YoU+xa#w;I0GuCv4w}7PCwM4fN@ac5CM0o zJx9E_9)|Y@3@Q{v_n_u)aE`rKFfx7+r@}4TCe3oC;c!^d_N+iL=6+|OAdaBa)isCu60uYq5#qVR#s=OT7#F$;De5wOXfz`w~2RL(x(GYVz zO^d08Oxb(^;zC|Z;-8?+=|(qXarM;V)-rv*4QBz)IIBNBgtf1a?HzptH{VKQh>WT~W@mcPcPN-ov>2exE z+{~@f--wAFX$*5oYvY#+(qa6zg+ixy?B16tk-y?0-hE%H)U&T|e7&zvv;A36HC-Ra zDPL)r&+W0^ZpQQ$krR%!Niie?Xn75`R@7~>-6oCdutfCN{Zh2T;qY;H=(s%ry9m)6 zyx!?y-S4G$AwJi>b{0q_Z`C%1_V(`t!fWfTq>L{q*CVd>30!&6W2ksOD3TyJQK`zE z)2?6FqTf~jT2mbk6aSD+_?B&I@n3ODD_=u9Ls9F%usyv{kvt=c1`DQ%WzZxt;1?Q7 z;hrU8^)&h5GzHUPB(Hv z$^78S`x%o(4U;7^lch(Kk65P4rKc)Qr>cUd9%oF|HcZveOf?>zPc^elr~e+EOoO+( z!qo+*dm5(ONYeo>1Gu*%#eC*0paE1>*R@H7f&S^~nHe9eET}l{d`tPcD~E+^QwUR) zPgr#K@6iMV+{bfzR(fu?-}mKv=6xXM!w}SEt43Rj&X5fI-~z{wx7-sL_%x;Q$#Cx1 z%=6>Qy4Dpa$+iCF3c}f$Nn5G z>=XmKgXwR+hP?ju$GSwS#rkFYqx|#nAHUwPK4|)83ahQ#VxZHf zXg-tl>Yj%`+ZI#jdbmC$7{vRut6P%rd!Xsi>FbH^_Wo8LGws|0Pd5B}iP|_`!L0ZD~%wYz%1vCSxRwv^s$9pRaRRDpd z>GoC+$6axWmbJ>A)oU;>Pk>A2j=?4L?r?=vXz(lbab;Jmh54wvkhE1+vUizN8Xo#i z{5h+9W>M*G6J!fmu0qzKUKPp{C;U~dfQ>>noPk9>476nl&Zt)_v0%1+gA5P=u&(A z4|Go60ps9_$2S?{84RCt0j;XJv&A`Qiw3g^#TC4?g(paV_8j~W*S7M}Q}+hvH+e$` z%jQ*Y6!;xc5wBFZUE9!WbFE!v2b%KCOkR7`&oTtrV`(cRpE8CLR17D-U!x`B8y(VU z3*n{oY2xp5D`eXunA^JST_aXK89{tRgPm>pTEi*)Y@fFs;#gb1GK;Q2XIBaJ8FtXO;+}4Wc<6ZcXYqzy6NucofU((!g=+ z*J~+Q4`l6-OZU;&n_W63>Ki77TQ=4(h8|h3NAYLf9F1FQ6A1t-3m6gS^GtiXGy=0+4(km??G^Bn_0`M%C9$RNL%9Su zACrcus~e>wwec>0<+OYO{p#j~YRJtBQUpGiE*7H_48Isfy2b%@GM;m8m!Hm&aY!5Xj;qp_ubP#I?mkI;(A zgd{2_1ErsdaeA?5lqX@=AV1mv}z4IdOivV%C6R_Gjw)xA$}Z$VC~=+k46?{bHZcIjG|Gs32@1-MZ!G56eBli!Q^(v(^v(C_?B^CpfLxLO=RusmHCSziqZla7>`t> ziIm{L>S@qwtMBvb%@>k7Poa_T3?9VQxK33!()Vb?6s;eNrZcfQZ>S$^iQLe9AlunH zx$?a8>buvQaa)J$?V42A^S?f)brKv(7QCE)u75xA{%K}Pqrryc~f?!_Q!K3;M!wr*I`s3xOjIW;duprN|xI2qSDs)E6Uhrs34OjcO&& zp1~IB$^HaK%vFp`)fa`wa+OM7O_dgHZJw6c8e6xhTIhx28xBCwat1gEfCDleMw%_M z-nQ%B_T7sQwGa zUgkl?aY17;ZvUqbzL@lTRBDT?NOZ*9VOH7N?mN;~tF!{kHmu*!Jp1mQb-BIyZbE37 zH&T;PW3603unqtApKk2O+XR1i|F`#T=GN}!U9%V8Cx;nKWae(Rc)itx1@id27qVXe1ef@ zg>CY<{dwrd@pRvw5D619MXR$BvH7EF3oBCGK_)W-jc-rQzGj`SB zTR`-azqfyX{j_kl3xDTczBzgE#;qX1FG|<@XOr}E#f7G8|a$>#k7BvcrP!`jv}x>3kU@gC1wtzsiA|MlOAZBN)IH%k!e-Vh?};!vxV@ z80DdoNCob(jyb=2fWmg zCyl63ePlA(ABpM+VG2>qQ6jS_dDP1ds(tUwOzOUdoF6!FWEp&w<(k1cj7c(tsU*ku zl5>-{1t#N-)&BN0-(a?NH)UGX`ko^Wwh1HCeQMGsL33pk|BA-s`aeu{4#qTTiofmMUzJa69i~MT$ zg6@f|Z9%zo+qWM4z>yRoXG&fDOPwr554XL}V)MuhWmLp3*2x4R#1>gexz>oQp2T78 z+3cs+%(uWy$N6F!A`ri*ksL`dILa}_>}mL;imn;9C9sHrx+_NaQ{fTj!m2Zvi!1&* z-F#-h^7YDf9yVyC%WROd=q`p?MP#~!#G6MA0S1C2L)Hopv;AKJwlElBzRmca=8%=ln-2#8S zP@i_82@99NgWq#;7lK{*5b^M`ay`gy=_||UX&&SU%Ybt`Tnj;Z0A_lB@2#i)gu^hu z{U1`%OI=ulH7hRlCI27|!&f6tlsT=u5>uAaxkS+Va+*{)3qZ0RC|_XS`yh*H9$O)K zBsYDXZE`Ns=& z8pG64_R?k1BeJ+U?A~{otjpqx04T3)O1xHnOy_@*ms8|ZeMGd#VKSs1u`zzivJNGu zw~y+T;5-f9b_T=2sVm+Mf&5HKp4g)ZX7*iBk~qV>0QgRj7A29{{xev@2K?M5^%YWm zI0mRlpggyxR9cF|fWk@hU4Ge}ql?tbl_=pE_J`9QIlL|O0$`Dtr{uyOhOg?aADZ6> z)yd?^k-KTuJAFeDGW&;B2@~XU7o6(Ir5z)eY?(F8xmrPPP5X+BMT$>s?M33bY z`*X{9uddT$T~k@1$jR=63$_$CIe^z5=@gX^hE8B}1;<&XZ;Z-Ru>oIqR!Pa4DDZFduUE^? z620$AF$brHiYPlof(OnWdoxx^kvsI8`M&OwV@R|KTOIaFLn7B^j;WqeK5n54`Mcjt#o;* z_kRi>XK6>DGxM(8d_0Q>xTfFbl%y+me)#nTdznk;{g!F6+|%M9^@ImKlHbQa00}*= zsh9V#1rHz$f=~!DKNq4iA!w5G`+ll1CGZO&_d_4lwCQ_&s-d)T(iG1iLS?FWaFP>Z z9;2wtqUdtdJQvp*UZQm~;2GJI@JWfqhh(ygXn&rjiovAHbn|`%s`c_p%;pY}3#XE5 z=Ipn$+9u2?0+bX1>jWCbzYe=#LeIvLDkhx~pm*<4*@c{JW{6x?m)@h)7WV&k(xksp ze}mb~+f9BgO=mmSl~>fs%}|I*vt)7md^@P%oT=~fQZdQ7R3p1aGo@zC>ZC7&pTT*e?`ym9TU$Gq=^-H*NH=T% zrQF2Fm7ydG4c=w;TzGY|H5IATNJ}Mce@9>LdKHRqsP$~JW z!6r-!V&V%itEtA6-CMN*@44lB_oa=x^ zKDNX&rxs}s_)Ss1NKv-G_ytCPf?rUf9fypB=5yk?X_3z?~h7`Gh+id7u%v*J?hW;zM z&aIiWMqO|kYeTsf{1b)%KXMr%>p1-ZCkdMlORY%Rx8=`Ci{$rwCq_OE+0AoJCd2Axt0ja^``8ZcXn z!|7uRV~J}~sH%DFr;)%(3%W!ljD6YKDf2qPvL{zu%3#ZR zT(TQHQf&Rw43CwAsq=Cyc1O63!H#RU}sUuG%JbCW*B zR_&ecIfbpog5W3q?NYL-6E9jXGwL+}_wFO}v-BZ8I#u`et)A~}CwQu-lnv-tHrWB* z=C`~e6Fdz*>ZN$%W!0>fxwL0~&0W~=Wlb&sdC~_pHUIrWzny=j_D@GQ#yzG=sphT@ zaI5G2;xmrF1Nnh6<(mE>(2Ggi%1M-=d%aQxZua@H43d@`a}Dkl9M7CgDKoCGe-0Fu zH|SRS^j#kF8PkVsAlkjKkTzZLe(ZZ(@Z~{*dq5o)c0SzVOan`5diNZ@AJ_MGP?*ac zV7Nhq{M7a>kxA7scYAU`QWZ%I2uzBO84~KGeANTzJ9|dEry^kG(b&|28+=CFY;?R7 zaQ*bBcDI66=e_CYNsgVbLO@1r5G!M;;~`>ow2J8%~+waL_~fU?^7 zx?bm-?eL__^Vv;W0R74*Ff>Zz@?S5XqDnt5#)HyE=Zpe@fWcKTRZuF@4-w#9aCExeh zKm-K#J6Rg!m9%BUBb@rT;(4v|VaBC{K1}N8b8A9!DC8r^k0d8Q=MIto^->b+SZeDl zere649=mNikZyU99Nyv;i~a4kyHNircV(xyiv9gvi?cJc6E5*Psja;3qdwM^p?D>x=({!_*-t``&G0;?1s( z*fqCf)C`^1`uJ1-*+Pfdq5-8$&+J!pDrau>@D9(zyx}XGD)1#!MUM<7?OJ*9YT#9; zg1>T)=BT;z-YJEogesXgezpXM4+*%F68L{B7`KY9#?YnKJD$?&4iKHtD?fiktxdSy z_GoSua_uw+Bx| zrl>GSc0-pgMmX?ToCGJG%D4x;Mmy{2KQcGGLqe6kfMbF~lOX_L;vAmf?DYOAf9uJ5Zju zPIi}c`qV#^FP>=Kdsgsdj4BK+ut>f9+}$dm;X~)Wuy+UfAywLUqG75{R9E{Ds%$eSNCpAGP;j6>OH%v)i%H1{tFzG*~Y;eT( zvhxkC`ol!9h>y|B`#kM?*3aMO4P92hw)!tVfK<++0z^}jS2-VN=^Eqxo?!xug0;1RU zK@A?mnKE%_hnSA5&&~~CTaRaS zMwczP%E#87s}4?~M!-$qLI=hsvU8#pUsk?@cZ^*w!iFVEIFz?s4VJnu#5tNQ*#qS8 zdtk=7i&Htyf9Q1_X0Uq~{38af6WZW2j-%2kXN3S8qXiJAJ1f*I8*8Vke20I$UVIv;2Kj{nx$eKh8#LHbioo&<6L>uq+ju&L21qWRW0P1!NB`%)M|8LOvyi6V@k^N! zZ+uru#bnOk*Q}+1H@{5@FoO6>%H$wXwFWK=stY%dS@jO^^h0{cghy#<^HmRMT_`5o zu&e?nzmHXm+EU^6+f@6&sh7A6KEP44BYz8(?wcT|NG4b&4(2aclmIhsNLV?-QL#bs zZR-)tHkFK8L2K<&opgJ825HG_sn&>T+15`q0T&R*tiY#Wups%9`=dg25S@MIjeT5k z1`Wg!R&c}eT9I9vL-QTd>0->~TB#+hON$2lpHtg@TZ)Sf^wPqe4*Ee)u;`lYDCK{K&ifGxH;&`RIh=LJolWQN?0NPqckVcQ?|t?RNupuzab`$m zkFr;YvYi>SLS-jONG18^>koLIA3x9Yd_K?X^?vz}i)0f7GWTTkieEY%rO>BaGbSmJ zrW}I=8{n&bRUFSn)-Ml)(PjE~w3V_BCo|2YYlqjQVoKAQ@ORR?2-*#U5H34mucAL| zxQhJzXF-&b0;{RrhXZV{$lik1w@S4UNx3E7SPKsOv7|Po0+?lhFCBVO=nzoO?;~_u zE85i4Ka_z#AjsA$G)0Y&6(BQ@KqX6xnS5k&T`o&Q zYC0%A9FASwuF{d3rtk(Cv4Io8@|Y1{K3-a_Sc9msn9Z*aqCLe3wQj}>DgoIRwp7~E-`zeFc{pV^D zx0WGlolI3av{YNF`4(1HGox;-2sDakmc|3-pjL4`nRFhkLjNV-KZ+SttrEQB@W)5Q zwI#XCo5*I0vayxVG3bf9iGcr&*SNPmDQp*aLyIZzutFyO2Vq0qnQxr^OtEZUJ}K8~ zVG^T+>_EM)x1oOTY+m7_VI3|@d^@z`q_>e`7*vW0$eYTp(A4xD*lwb5lyGZ4eVMnt zK;g%A2`WfxWtD@uDg$NKFeyz!sd^TQZ;tl(jGseI(-D@XJn_#4h^ZmnOhSK=G$I~} z<~3mx6(rV_?hY0gK-`H6hSNuOI#$-0Cj>HSr2!j!AEcG8+$M_ZpPAX6btE{FP*38u^Xh@v!6E2bGZe3^u zkXNW2m>Jm2-99%GSqABcJX}<(2}seS9|xJ%!f~aH0ZmUzpD)F=46TNE6glCipqIX^ zR`UgWb!=H7p1x+eO+H>3+;QSP>#d5CB!tE%kiP1Th}8b&-s zfPbBz)V8{wK`3~oM_=h2D&{?zl6N0&OVfhtK|G-kl8vGT?$Raw7 zuNcUbWH6~pw@5LV>@%jsb1_edJ+5SKXh&}bP~EKE7_@_Kd!j{uiK zRNM=V#|NAxm5d#8DIuxgESN{<*kO{Zrb@w|zN4N3BXDvRTxrv>4gIl-)Xa11Mcn6# z9qLj@SZM+3_0v7mBZ2jl?9HGRg0>$<_@)Dk>>Sv$LJaeM9cWEuV5aVA+c5J)ugK}3 zQ*UJT%X`tDSBF29O#kMygUZ{%6(7qgdpfXK>HfXj<)%9tr6P#kDFq%xhkFf zE}iStqw3`nHpv$=x^-jtRGhFo&){4x+G!F^Wzp#~PAmKVGn2i>%wMYkT@6vIn5Wno z`;WLbFsGq+w6F6ulv8qspFKIyz6&{P=~JN=*=8-$*fa~VetrJwlKNruk1CQLGgFn8 zeOT*N3dSbC9lgHHTy&uiO)b|0(nhR)V|p;?RX*|bd{WkF>^*ng&S<$jS75khvOM8|cQktwm99MB z;~ne$+-V{BY9(c|8e=|`4);gHJe{0mX-MA1q!=}^-k@;?Jum4!0G(Q3SGh)lJCip! zGd%0*qiNC}@jj!3Uo*fZzLa^}RbONh&iidWJ79<79*O_~#gio;yUyGFt;ccoEol;# zSom1B1#o-8hI_WU-GasQ1d7)Bb^lx*EGZ5}N)nf!Xr0Gh?t9y>k_HnD2J}c&I#CJ2 zPh6Ym<3%Z)xTuJ5AyQvI;G|Huk8=$JU`D`pHK(+N=-v$UGH#fxIn{728w<$okCGYi++_jHbJmfVGGm(4(-G7jT2G8Y{8fo@YNrre)& z?Uf;5la70hzJSf!st-E4Y8m|)&Z>pK_P&sh-O1$Vm}&lPZD0C$v41&66^RN7pN4s1 z{qWL}H4~vJXHR*4Y@bmm-wo z-u0qDqnl%NzRV;_yP?Ub+0uX%m5`ylbtqC_$ zYuUwsISb)CdNRy?0roe2wZ~*=ru!!@of~iryNfnXhGW}0CPCxrhMBiMj-Vaaj6x| zHyQpR`=_1{&%H49Lj&+@>SE4X^fo1exh696PEbK??kCG;L2CkK!trE@y0yPQWoQ-7 zYhcKlpQYM+JR?3O;UiF|vut|4RMW@{zk;8I4@or)X_#34ybB+$8BNr|Z6Md_<_fq%&#oNUUE4rnaG@p$FWl@c6IljG0< zz(YMtlYt>f`&$e}NrvKxWRPL}42o-d#CZ6Nd0ENb3>L+H+6-@|c7=G?CcSp|k^8E9 zdZ)aD3Mr3bzC3Sm$xPxll=W~sh2K0Jt_!gWaVfW`N;s3ywO&uJ_!pOmux6xOXi}X0 z7{F_t+iwUF1H;~r*2PgM8dR=`7==z6yF3yPU-IFF!)lZEn=4!u6P{Y^TLx_FDSD};mMC}un)$?SfotY&PFgI^X@P~q~&zcGSxZ33wI*`q+z6Y~S0YHwKECT)>>w9I7_G64dl96EIj4T2+~knR|}p7r`1(3DbQwuKVD{ zop1)l6GW56Jc@5v@=+UqG+v$=&A>t-_|Zj36Z=sL@xzwYi^E~@$X1NnL1y)~>$+!VaGjLmY0=UC zl!tZ)m(;Dna9A#Y1rW9PTu@}b&n!D?YF`t_9B5_5Cq-p2kA&D&j>4YWRUxeY8!86Q zImT5}8jRoB98Uiu##F5x;~*em=Vkw(k+KJ5U_l^h`du!3`5Z6%A7Oj~o8L5>RL;FB zWd-Z)lCTS4!-nsh1Lt0bXEV;yi0-xgXI5|gjoif~L*mD2g&wYM`%8*a3a`I=a89mf z8ZuoD;xYe0$p@hNqCZF_5tAjkN<%A@9&o~!*e9518y?`rM44k$tm_#6Q#n2-VR}sn zd`2R0gzv4%E5?Q z@ZEn1Klb#}I{Yw=EVTp7vViA@dg*&xz(=MurI!z>FT; zmxIiCCJ^hxCQ5MOM+Ddi`HT2xNcaH%1T_lV^HfpnfWJ+6c0rq$Ubfy$_mvXu6&E*l zSK0(qH`x8jrX@v_)7P$!!gbI36BYJd*}<1fr1H=J zlnx6GgYFdD>L6&<@Ou!Sf9YvJ+jcdpP=F7fX#e}waf8h0K9aFE&8AI3Jn1THgFSBK=?bO+C5146Nyj}AhARSef#T10D$4sJL0kNjxL_UYV9 zFawd#RxoYrnv7`enYbrtyjGI$1Iq*xi+)jZhue%_JPS@V3Rq27$Q?rE_-z9{7^WAx zoYGjq*D%CMmuKQnA-e8%;PgBF?Ubulim|_3P#u7ooqID}vSfkYoi^xzE5AFhIpE7gMbRn#zQp;YR$svJ)Cq(!bs-s{9N;&J9q`(2DpN z$HzO-=Fd$Lec}=@Fr>l)sAemufO&617iP+=*8glli~x=-W*JVmy~5*d>9TOz735Hg z#xDGEnqztAv}VO>!>3K0x^kiZp)t5nW2nV7>ICUEg8h`0Nhak9rar|rq!<6`n$6P- zGK|<9zG)LpgKF~%OStu1wKIouF2ff(7>f3rieTjzR07r-k~~8q)^;fBhrQq9 z=fGILWzM`xuK~HkLp?Xxjsr}|B?fWluPEtr2^7=dtn+~PMvx8ynUtCjL|0Yz? z3VQ-$8F7fdIHzaZ^Mn5ahVJ!!r|JKO&*b@zA~Q`l4qoE+9Q`FOh^7i1W#Y;5UvC43 z$6@E-fF9vTe~if9_3D?Cd=b}uwIjgtWLj507Byc&0>>lpX%AN4{rG?f80=RV%3Chi zH4xhOPOfs>VM{RabdSMMradGI%9>)mN@-!Fwlz@lzfWDq}1Hlj-JD@LS z%{^;=1T84YTO7x_KVlDk6kD-tIyTs8#RcL;&_wcaCc^5IPW)Oab>|TL5oPx z%?}}w$5S7iZ=tIy&vw@>NaEE`1In8w@o#7^4f%Q^NsaYMrXOftizp*^W1XRP%HD!v z80x$y86(ObA>Q$+9OlJ@V9^mpM<(9<6O-G4SrBHSje4H&ppC)g&#&z(Du>%{NGpoU z{;0z4a`ie~%+(}EOXJ{(8=N^rjfWte0E3959?DqSi918SnklT*-&4OH#@N+GH`5+# zwH2L}T!|_f>$CZ{zLq!}6fyMYu0()aa+ZlN+7~1wW}+5_Lhy2Ts=9{<&y}+e6sYCD z?&Usika5AMt)11TzOwlXE>E08e1j*W7#K%~#a=YwsD*q5d$WjgE@=qSmGLOapm*NA zWO(*K6bg4LQYzlQmOUY*qk6NFN@V=<5H4rsOVw6b=M8Av&6X=Mq^{aZGDz7}Pl8b= z#MJbrkFV|%a!@66`bp>FlSpP&w2NuWb*dw2YKlR+rtSmTsCqVm2pYM*Lz(q=y3T(> z%e&+&Ps{jVAWOkf!mu|sg};@t%*sN62>}S6Z=V3Zcrl$f&fT_WLG7uk-}FVjG|Bo3 z7VDT#O^B~~QL&PhhO3k%mM^C6#d?>-qQ+WgLZ&o0K7=aS)l#O<3?b0AmSa|dGs&rGkrKpPf-N={RETc|$sy#(M6*Ze_rv0JUwHnUipun^0?Sg+MC-}nIJ!E2X^1Z?y28z_n(mQ@CJw8K53ugR2AA-1KsKnllrjT}x}bs~?4DAfLJ;-?AP z)THG5K;^B+btclaZ5Hg;p8@@hY&@UC zRHA_^@W}@e$rOETKlj-{4OBv`!j92EAp6ZvbzP9V_ptPVPs91_49e1C*CcDKKQ^uj zG{;N7Hl#9wg}SCKS@38VfVCsshxq%&_PV^EYnOSW9(o2tao}*{M{W2jwN^T3x<9&U zmq){rQSTvT`(=>Gw)V`sw@G+~5OvRQWIlVEX&rQ7xlgo67W<#VrY2Y+@X3Z;*P!qu ze9mx&g4`%%`Wa^-Xc`YaaA~IBl;lf#I@q?MfIr3)YEBvMv|&N?GTgsq5Ek)!kmwOW zDkZ@siYci6W<_8J0-(C?xk$;Dtu#IASSJ-5T`+*VDH z`%n_hU_dF3|UmNaqs+ycH+72^;z>A`jc}oaB^N&2N1vXQ(nHDHY!nOE9G0 zy^^YajwNwPIC!VLQaRF2s_D{udHXl!)H~|Fm#F>?%Rp`K36!|)m#*G1LjHy5XJrOC zN=juq%DIjXZz)S8-N8`gi9W@WP%>}&l;t(1nR?s=zo4S5)!KoqgtZ@{zPw69n3 z%;^F%*%ilzrw0t^jM(@5XcTrCXJ!DxVWk`haF9IS=26eGu!LgzyKDcojIZypjj&fz zR%8r3`L>LMoiGGcqzhajgn@W5vtR*iSA8Ht1JS5c-W8J7LM2dlP4oxrCyn*O#_CUJ z(@E%;Gv71o5}!P;AW(JtL$LJ!5D|~N26rSpQjb!l2>j{yI^8#%van zG|8vPfMPB^%io(<&g6gJO`c$qv8&;<^x&Qj(zXi7n(*nY@AS>%yYFmgiy^xS&rdA+b)m-{twJuFD*P}$#Q_9pk^r*D7QbdA&g$&Z5v0l81NRdP=FX6yI z`@fhBT9$#DIU?G~Q;=dy>H+v!$P5Lme=&mTGx+k`-$`A4qqxvR+*>Ik-VV1mM4PLK zJQcw%8(>DENj}%h4&Y@wP%Mbplw>!U1l9T17Uys(q%U+6SpztM6F(Wn002^`=`_T& z!BxKc_}&avR_*kD?Arkb2{Iz1 zF|yPi65rT#kZ03+0%pzgvYS>bpoO+?3n|7jdZmmF2{F4=mv*B68I^G;YHVS((WfMZ zEdZM#5pex*Ehtsg#i*suFENz9S6!CFQIB&TnQ_7|Ojy z>x_d1#Xw@(H@O-Q?~wIlq^KnUgItwF;n+kZl?OECfa(TPzJrQfG5U0O0(nS!qDVon zy2<>XB$5R0VkSyS$51m;NsA+>)(t={?owRF0w-oQXE&u^mPv`u-Ikc6ka+9JUFvv! z;8iFQrRYl2nkkrC{!?UtS^g3+r-`LJIfS2>AU(kdI$;kZyvPlv?9hgJqTFYkHvL$m zWI~XS=I)sk0==e542z3-fEFwTFR2r)6-@;4Jvbi<wG^_pnYlsU!7!(n>(b^#4!7vgJM%x(vLkt=PatKPo4$qQxKPaMcT*E z;jWHn;vpPZcLN|yYbmFk{oSK#^Y1>$!+o1Q!ni`cY&XK3u`=5;{DAIGraqxuQCjpX zb|0?!9X>b8P!NutM_ELt9C7fPNmjM|!i5#C&RYyP`k1=(&A@|TqY4i#_ zhaW`{H>%xFnhd6j5Yp1vsR%Knzq6W>K}gHl9I5@ydsK-13ZrQfg0orfv4zq>^CMql z1y65RqQR|#I8}|wni^TVdkyc>WQUfq1nc7kn;pvs#!$COToslWh_*>d+)psK>)Dp7 z^Fd0D(H}H6%0OCrf&!jz3G+rh!_iqr=IvAYDbS^w^yVN;^oQo&`9{5~gl;mDaQ!8%JH=#~sG-+iFU))CS1?{4u{7kl(gcNK)9;DGYWZK0TvMk|C-;3hN(S6sn@DAVFH_4d9uUvkyk zQ^HcMYO&3TYJ|%pj}*L_JZ_wgO5D*^_|;%^$8Ei8NJEF{vuf$fR5A@`8` z{q$~f9h}pTyXAJxK*4bV)bSQd$Dsr(yR$}h2lZ8$otjJ6=Wk4C{+t`l#GrTmC=b)+ zx{`Fg#_A8aI>o6|nDJXSL_sWrQ+d9642yA$Qkm5>e~_;@slb2U~Zuh^D2Er9R{A~-Ml zW?GBs)s9x+22>cy7q5ssv_@jtC}|SIZd%7GDU0<@NDifg=2Pj(6_9K_0bi<~`Q67y z+PXb`ue4nS9UDcM-59R;%JEn=<5LIbjtur%HYW*<$rAKw0v=WyCo`E5dif*TSx}UL zF!GCILFMYD(k1N~S>5E`(c%=A+ntOakj-&fr0Cwvt~rGh&+`0h74_m^ z?(N9z7}Y110(Q9DZdN}S;l~ooiprcM>OaW3u)%Q(!`u|L`LEhanFtXK@&Qq>zZ1!b z<*nWnXxpruZ(`?f#_7r*zAD(f_|fzY+97jq4(Qx)V&ipPA8P`n;^+tFp3ih#HPWp zRJwu=fcKBz6e8$sJ&ErSpmoO!|K}1!`kvD`SfY(unXFWeYxJd7k=y`|g@|iJpo}WS zpr;!M#M}aEn=e&v^x}!qh=1@+m$W>scR3Hew-Nkja8=FyX+-8LFy|`D z=&E|*W9|F7YFA-p(%66w?_g%)6H!DRV?D?ryx>p!A#@8yYLTtd3<9*H#t>ds0HcvGSjZ*C|)Q+XkWbq3vgD`6xMn%83$=5b1=DRI_;bnumw z4eS4Vk2&VYjJHv~3#H4s+An$U*HHO2+blDt{6wHq2JR+%I5GpvP_Uit#~CEQd2?)r#W>g8(@1-}Q}#TK)!e!39{O@2>dUU)oga6|clCK!+iY>=n;ixcRH9en zUn2tnELqa7S}UQ&*C6Bc*J@6{-ImT@Ga>oKb_dTz!zEI_n%g)Gd|r!uZY2P}RlAWW zBr*VznaTLsT2uMF>Suo0Tc)T|#EkC1uR|_3IYhTyOat0`btn?4KKgF2OfmDKLs~WGq~r6bZ0>!R%Sw zW6~pndT+|wFE-1|uJky6f1YpS>6jYQcS zgHS<;0=H;Pj$bD9br~DHog^{3k!oIA|L&%+{w=d+4KDxQ7t0>(srsmL8_!MN65jmk zC$Fx@vi-P|n``PxYCy`z{nxZ(msHJnQ6`%bH)-y(bA%!|L|f1~5tylqa!il~uZoqi zp&!?2CYY@ zy6ZW4FM2wiG9HpOH7P3A&e+X=Z7ST#xEbH#h3iccD)-bV^AY>YUQ8Q5??l#G#Ev73 z;_~-_Nd!5n9UwrBTxOWqz1J$bby(U?`j9rg-k$%|B(w@gI>! z9WD+*JW!(aPMy&+4mcwnFQKWVKbEeN*TS15FpvmF>J<~3%Z5{#kZ{qn=j&b3ICuoa zW=OL<+JHY$)+MtNQQ8MIf*r(Vj_gb5>>;@a)0S#6Zh#Egf;P)niaMFs>wJ%kok$#`1 zdtcp&rQ>G}TWF*2&j!3Lvi=+NWB8GKFaLqa<=^3_fDbG~mn)icNtXg`_^Sb;MS?4p zp(};;{VC5ZtDi6&w*k<{BZ>zoe|y52SzCl8$zNs}Pw8~LJD1oH)xKmy6;P97*qBzc znwIi@X;V`S$WFY(93I@BabfEpDZ)1};ZpEA*;m^doF|d^IAC{4H-HznW(Erc}p-lD0lEo6_7M zX2uNI^CLwisk?2L^ffD6L4&0)SZxLJOD~|^Flj~_MpXD@ zO%pB1o{`Acwq$ub`tCa-m84y$+7JtJKLEtg8DN_X=5TJ4XFp8Q8w;%6@?hH zDxqBWHRf%gC9Iut^@?z?HW3dDB0`!!VsSQAUV1C`VL#3jvH-`6qTgR%>~cND3vs*a z+BF9GMqNImHN}*f0sq_46YkZW`>yqsv90g{ooytfiDrQqHA=PMX3}MztCnTO-V#wT z-q@mVVw82AhG*#0Lim!fQyuK6lk>yLo|Zd}=d8K)RG9c+KR-{_4E6iaHcFin2~syL zlMlrR(B|7aj10rj$@oF{Y`eRobec&!5PEmJrTeu)j>Q}P?aFY5%(Af|R@1RHZI&;Q z4S6m;vpi%-?bvTk%In)CTd#J0 z8)w{44=P0vCq zn6Ql^mgN{Uz;#WMSYI!R#auM_OUd!XGnU0ytOYu^*A!^tf)%Kbnnd)QqKvxGW}uUgLIJ#l#Oa58iN4cX*+CU5iluv2_-0c+$L3b0{wu0bbakiJFM!`<+-tRJ|=DyOYK+@?1nR5 z`3qizyYHdXyD>ePl_vnkiYHw4tVT?lg4=jj#AQ&Wgf$F;LIB+Fv}Ru#TaLXGGyPGU z4a(G~r-NBb=HybLSqxa_hNDB<#gp89Wztp0p7{#jrY;W zm236$^s`ncu{An;ppl9z83ypk@g4?SH|rUKAtxzPGP`M1l~0V+J(8s-_eu;?_l%^p zK!0lM6PL2domg&mUH%~jv4!LtTLjWt9E(j~%r?e-^>G-#uDjU}8|Ya$IMXS?g3kd? z+p8@Y(-W^}8pMaw6lxbyj)OK->_BJ{^U~O#-5-N#)?6yoVv1)d*dhkS1J5R+MJ6Ky zUvd8qY(Qo?Fk z>2;J4h_l{C^;qydMRimoWiH9Us5qx8Ns1uMIbTD^u>JOL3tlbloFqwcYc~0>SQQh+ zdQwn)`pP@-EP|@sY%<*kVt2qkHA7#&z0=5ipU!V5rt7kM#xxR(yymy%20o&hc+s=S z>qMRJ3Zs@!i~YxtN{mM?M$_R|#`N=l>wrIka1T5*7+nVzN5w#>wR%@WPubQET_M=(m$SFvhG#K``Jdy&=YcB3X}L!W&9y83*TA612QMsq@NFv?s6{B$18 ziZ%!I13y%`oFd%-{RB9Wr(6-7!s$f~bf+qHFIX^Mp@x`|D44SVPrV{okL|TQ1^otP z>&hZbY#6K%Xj>tg+eF;zEUSVN-y;N=KMCwN=<)5UlaGv%40p`hl4UP@;I9LAJJV;S zxLVuJLQf!M}LIcF{jmu&uqUOHV;rg!`=}U zr?n70ReJMsgXNz~*2zzBor_={f~G1|^4CJn{Oz3K9sLz@%%T#Max`E`R!U9SmO&Pb z_M}+cgP|$W`z-n5EoZ-{BT&^nKFuz>YK z7tI~&{F5@87$llG>*-Fr9wa)*e+WeOq9B^wV(+Ic7JzWy)v0QNI+$fnutMJCs~;&{ zPjj`ETDV~|3R~3$@0!wJ_S^ub$Q`9H7SodZ!H^0Oh|Ly%j9ZpYFp5hBXOhe2hP+l8 zC2*PinIA6;yjhsqMGgnLX0u@wI)Z|z1=3jigWv?=`#+wlbc31PrIosZu8arNrn$1)avXNB(vyrGKD_R0}le zW_eWGuK%IZpT4i5g5B}kBN=Y#*5zJOE{|=BmijDWPJc&KH7vu{ zHXH0+q9%|^O$lJ76o$=b_1Bbx1w8oxb$yULQ!w9<3a@*a^uT$AB!OS4G{pFr{qppf zZ`~H`6;wYpn!qYZlar*h$dw0#H=vuH>fj(c_h%eFV9L;&_V7nfa&4^yN`5|K56S zq1G`3(0uFXMrb)mbE&d{+O-O6=j31xEeB_?WHkd_J?z&(yl!k{b8AaIFv>?K%14~I z#6!}BObhAM0BfQ+YsL!vRQu&3G0IPmq3xv9?{1R*BsXA`nP*=7<&&;QC3hi#++4tD z5m9@H?<&}c#~Iqzn(?<2wsCjH7yNC$#83^ySy@jP>_miBM|xwbTko;BRz3BUxorp0 z$f8H_a1^`Cd@NEnMkma=-=pYEe4mpy)uFve&C`QXm)(N>E4R@?dlUd5hMF>*0wP`v z*b6tM0@tTBri$~U!X292dRlHO{oIG9$*O3OKm^!jE@~B{Q?U*z69bFqVn6Nk>47Rz z^dUobkVX2gQ+tT?auyYu?JVy>Wpov^^jdaAIu(ZAOU{@vq~!x;FVMAWu{I6>xozh6 z>~VA`OTX@ryfts1ZsrEfE1}4?O#v#=Yg`>jyE_SY<~c7df5#$aUHuu?G*dJae z+njiUg+db9PploPqwc*-e5RMA8VptcamV8bx<2;U56`NBRn$djVYYhLFqJ1}@yly6zTR#pjpA-w(Ouum#4 z$5zbn7^`b*mTtbseWz07Q(G{jU+MKS_vBQt7!aj~NjaDUT}N<1Y{h#7Z)laZHO;xf zeop9zE7WD7SX|>*H^!jHVU9h)$Ks>Y5~K7%Z!W2V-x!tYu>WHIwNUyi+7P~&YpLyF z^cMsNx>RJ-vt0=rkFOm)4?4K0{@~SRy$!oL$}>r<^!wYD!(FIgfK|9)ZcWKdS>dER zetR!CEXt2F4fXPK2c91vQV!CMyC;=0#J3W2!%?f<)(x!QHp`AFvQ!6WB!+#GtD)c% zaSfllW(|HkGVyk8PAXkk5yp>1K}5Ey^;ebuy`*<&Vij+uX%HZ{9S2;9fxns;Lz|UT z2irKZ3>KP|lLlZ|NCs35n$xM+_E@0*9U|TXT=eQ0tzLjjFp$#R^^IJK47y8i(RyOf zp9l1oDW^o(3i4U4!}^z=1Rq5IL|zuqd0DVL1w0NsM}i8Qfw3>5><4N19baTbfJq~+ zh9(`-eDAY0&^)Ga^fvtZZ8A+i{nxc%I@ds$YYtRk<GAH7Kj7j7+|DZbx(@-c(0!|9lnvGg7bhOCjE{^P?< z2UE~b4Dh3Gu})+qZPsi0IlhVc`Rdxf05R#$FPB2j3XGyTSZ4uTR#CR4u%R+*D|nN6 zFpLK@@sP5{vBrAxK7#uYmIK|q{G6UHz+)E^`uaqU=L84iQi1mD7(yu9&-<_4Oa?ob zSaTi%DAgbwKMBAiN78?<_wR2Lm?3fjqFgD?X$nqY^oVBQha}{VmH-X2zwqNF1un1T zcth}>1Nfm3r!qKxP}kn+z?Bh+``q7Ch)<|GZGxQ zLIF4pUXuii8j4WmZ`Xa?XGdeDnA^~lOJLV$+*|M7D}Snm#vO&sGY4!}w7p&{1y`B? z|0;EIRyI5t*0x{2-h-mK1e#m%Bh_B8i#FPVH_Ck}YHZpJmj2C;f4YCaf{w%#(RAPR zn`e0zk6!1^6!3Y!&L{CweuJ-uNQF-T2zxSGMGE4iIRi8;$>>@JYSJLi{6zajiw^cd zZ;sCHIR{RWiAKPIkB7x8e0u59&#ZRCCnGsqyQ!L)`HfrZz`HtrY8Z7WzwGD8Wqcn( zKGK!uE&&`okCdrPlwQ=xGNTFFW9Lm3{(`*S;I;{xe&|_gYHbBgIBt#?Xx5*T%)9RO zVWihDhpnRThF_5A2qR>1??yiO5D1=QZ`gn9;HCSSU^^K-JxS3;p9U&OMt~^9UdFd5;N`)caq80KP>bV% z7yhHY9n#0+L$U!-Oo|u9gj;ncm4-J@S0SWd5*za2@v-e~CP?!ikm;k+fCq|n*sZiF zOTa7}`7{5ce_*l!ME!cn5c<>PVa1W`KKTKtnxs|ISc+7j?#`u^ouw3)uA6I%56=b zZeQu8G}kp_sFb*rZA@Im%|Hx_Jv$~>x%2g??ktg@+-OsOx@_XRnNlw5I>tJcF5eQp z7#=y*3wQWsl_2$_x}kfvM|wtydg06x9xpx^m*La-@kJJ2%&H8ZT#xV0&6SL|1HDeM zF-hZ0zD{qaus++DA6*2{i*4JW)7>NqOb_4=}UAYpHpxPn43 z{x-*R?PpH^Mg02q;pNMV@r@{Uqd4g>(NKf^#+bf| zWZsNRZy(*h0XlJS-sl=Ok(aLkvNOF#j7vG z%s@zCXS-<%vokib3<;$7Lol_(ZJ+fUW2ZTSgF#-CHF{FcSU~WTxnv3*9bVoP&k-PI za6uPhfp~$1?n(Y56JJQRHlX(E(R%|XB_DuuWv>m%o8K_Mc`uUdB(W%xIf!-~RZd7N zldI(u#5OBThm7yP)wq40Q(_MkG=+1gzH3M!+&v+}zo~W&^F8-(W*-%$QLU_TxlE5` ztd)2_ep2g2tIAeWynMoB7{jOr`k3S7yF{RV9qudqHGg@clm<$S8HpiV|Hx8Q{rI~a|41&|$D#|Oda}KF>Bsrh! zqn|o7&z2@(+2}q^s+;HIpFR*ouLSUw=?awbt+bc0GWar$mD4`|pqlhD zL~X03LeT(GnYOu!l;18}bfK>_qW5iJ8rxRXY>^J)_7?i)&D{Z~J!`WB-CzPM?L1 z2mDyPGxf=L&(BO7CbCqSaeMDPrqeoykwWKg18R5W)~ku)BZaxWXAjz^|HQPNan^c6 zd!qpo=u|CuIhC?nqJ&H|i@`Wmmzl=XqMj*`Z8AqFfQov9Keda$09 zZrnkDOPI zF~@XAQV1u8Tgg`RJVx;{e56yz3RO}-X`TZl>!mBq5MroeMiHUyrC=e&khTl5gjX}F zWvp1sua6m(!FL>s?*|od|Ljj|$C|x`ZB3f1#>|hF zW2ams&{=~SrOH!VCT>Bt&mJphh4PVq>{iuh`=2+;-_7VS zN;~L>eX7;eA1r8@nTr_{n7qvJdw16LH_V@ufu$3Y7XC@@*TO98?kW_PVsY3>dK#w$ zPVYQUQ@W2&r2RCBi2c&vWa@tA{mJq66<$yU*Dy}=P~6A{ntl;>WJKC6B_3WeOOYU3 zlL|t!R|0x{$pX z&gA^H-Wtpo0Sh^x#pY029q{LmaqpZf?$)i<-a$1fqXkB_u#0GqGU=!ia{bVa$ul0k z`xT*-A}DXrphB0%Ww{6}`{x=*xS7eZa+;wBXQV6N7$FzLY~iv=?X}OiAi^q3)BW_! zHo*k{`M1uAh!R^;PjQrw?LYyw@)2PlE+wk z&+OQP*oMJXbipwU>f?0CzHb=FTmhAsCa65mRC3s;`_*R-!(`kOuRq1hijNtz@I`)A zKU)FfF+7+gUA*lEy4!h!YU3m+h^N-EJHgpehoO(a2{CtvNwN7ehC9!RB|^e)!X&Ea zdLfWwYf(_2mPA(T16K7Im@r;4Kz)Vk&))-)Rl#{Ri@+`mqfe$?-Py^+INWh2e~Jhg zT8xt<{2UG2FYvt-Hj6ba*Ki52U+DR07ch%m8(}3b9262kD40-peLT(^nC&QREZm|6mRF6@k&lc>02j;sImLnBVv6R_)NiPhu#l zQk0)iE80qP;y_zZP@42lL~NMENQ5k`)%9@V_dc@UO4At3K%DZaWa+gN_?Xk=J>KbX zPMhLeSNL9cBt%rPjur(>F3DnmiOd=2`wkd#C-Y-ER_6&huRDq-7)N-Ds4RpMrTbGQ zFL{(goB~}uv1S`YHKK_<4x1l?QLL{(7eSyOEC;@nhMtu#qXk5 z4~^uG#@eEQ@#DMp;-U#6g}n2zpWIpKZ z63Q_tWKHT!p^!KU4CYu9WcEFl%9_DPlbj|wFZ5+ihh2VYHlDO0)to|BT)7AP8vOBQgM$Y{`jQ=m=y(qCB`hW1*_tx_DS2 z4|+Qi{2#^`sDACRt$G9bonXX#IweXD@1H4>_suC}?j51Q@zJG3B=1^K;ZTwzqEE8q zYBeVcF4+;9k%n+#???{@ZBvOjWtorv~S$i2TU{GjKpRh zu7#Q5K-sYcdMvO_H3kX>@0n0<5eM+PaZFLe3zi<(Qi0RuZp4eHZHHO(*ZCt9TO8J7i zJ0YyCpVYn#sFD64A5Tc3WNct=AgF_?mLE9Na4d1WHH@TFqgRbKNx9z!;*xY8UnLJ z{PF~G+Nh9?voC^d0KA?*IoSenA6?0DGv}==h*4$Vq3~++*iO(-(JD_ZLPWu?=H0Z6 z#NZI2l(4wWyy-pGq#z*xJ%${Lb&OdB5&G5-g{-OS)NTz~sXXWa2*Vdn-3&jPpLumn~Zh^!6koX_q8+Pj$$u8z{e9!*r~# z@pm2KyU@W7`p1V!S(@SS4@1X+SQ|)ygPH(L`(B}I0^P2V@BKdSfr$!;fRDvZ5iWzwFDVZD~!d=SQg#@S7(gMJOst{nrc?(;N zh~2srayCp9ofN}~eWp7Om|+@@Wv1ne*bhZNk?QFmO1iDUnLew89*IL~7b*ODGZIR9 zGC;Gv{6jFz>&>)hZ_pQmWZ~Oa)g+wXTlb5Us%%)NP+C?3ZC)f-2A=IM?$Yc;EV8n96z0jaB zV0b3=QR-Z52Chp*giDd^d6B1mW`JwnNo*XmYaZ@-IXELT(_DEGVJD`X++cYq(|HKJ z-GOnl20A)b(q6QYR@gJop@R0}zMU?cxt8m?J>*;zce_<|+e287%#++&nYBwhox`JD zhe=(&(trRtKN2Q>WDyNP(cGcPc#tIb>gMw);mv7f&e?F<0x%Vz#%*NmGN4oL+0_W# z-_%0mv0{0(7I?KDeYKHwHFExav-4_u>}qH2YWL*o+oQ+e#Km{g>wV_y1L5n#Igcsj z>to03lR(cM+^bV5eq$jx6Sm zJlm)0*1Npsu0r(o=h_`~;|>Dwj+wZFbo-Qn?s3WP8AR?WjPIG8?xWk0*rnsxDentZ z?;gQ$79C&O`B*k%OuXOs%;-OP$^1~uydO^@N(Cd>5wS#8m~V9bid4N4bmt+j8g-Qn z_K!dL)_+Q!`t_o@VR!kJ0lcAfM6y9~qB_LfH$Rn}ekrTq4H$u1S&<+)5ydIqFRVy} z)?UKD@q`EN_u$p<{6IZM{-UQo93l~KCj3;K9>76}fEe8Xm^Bi#CK5VWrf?2`-r`9X z`3thdNl18MB}eeF`ua3FPQOo9`}pAC^yt77K=(buVm(cr2QC)WoW0>F-}wkF0hF<# zU_42>#;hv*{bHnonNNp;nwxCm^%xiwBxO9$RpU2CN;9s2h2b2TLKo?~^v=N;F3+4Z zu(wk{J~fa-&Z>il%J)0S=_%UlP6Eq6DdbHBEs+C)mVXf$HT4m@+8fjP(iIV>-U6mV z_qGapN>_QtZ}R;p5@D)x3gHdu*QQ3_e1hm=zwkmldE(SgBg6*U2y+0a-344ZeyKJ7 zuE|ds#(yf;{Q|x0)wTT~x;hx$gsr^KIbDcm!e%d^XnM8*09f;EOA1fINFDQuR6~?B zJN@Z!`j5}*2^w(^uBm(bHe;Oe7ukYuy)RHT8PFK|*oppkFvtfhD3V&nOQ*|s`1c*e z8$!qPL7Yr8R`=J}j~Ha4K0itS&aD3>L-;~zeHfENAgA@gVD^_A}qAnGA6u;k6Pj zo6)Dv35X^J3e$vjLLncA`c}8a^xDMeVDwtD8G?EFKty?K0*CWseG4iXu9>BHljlG2 z$IGoQzqj$$T#Li@a(1Z6e7-DZvl1FI%DZ9p+f65nTYYCQeahWO%yGJ&R21P1ZnVkVa?yW}EYJoyBx#!*-YV;Z&hUSL1GP@Xw3g z>8_^l0}&`#G@9Mb`(NQi9F{ZPEr;VN3>rn6pLwTyvx$;t`xfDG>nSq;kAigZnOjN=R~@UwlI zp5x|ln!2=0WtN8LIa8XgquOzfS~%N6rddOFCUWoSvtz*&+wXVaVBCyqxsdRn>Vk+z z3RZwOW?lqpG_EOY$!=!*H^svSMP1Zn%MNN&Rc~~&swJh7j6kli&~pWD9JK|W#446G z*~-jEGgKw$c2!-#C(;#dqYaxN{YJ_=%G5?e0#=vG#559@mhP-ked3lmb{eH}hqXGT zNrK+g4mqUh%w{yDpxh>MpL~n*aeBAw&u3Miu6r&!e_Z$8j&a<4`L#Cf()UCY7?X_b zk;0?PvUYbfhA)UD#ch&&|Tn@%+KE`jK^pmf)%{KHB;t!55N4H z*Zf-l(}%37{?{TZ6R)d=iA;sr|H(TF01d#&13&^8p&*d{C+|4_HQ4fFf^m+TK(aiWOAsD z4n$cBluK31Ldzw_RDJe@;CFSkcJG}x#1ND1J|`{e{F)p?`JwczizQfc$aQOfl3$7+ku z{G8TyfXA-3lGib{ag+ODPii&T^6zio(^)N!WWwXepEDb6|AVE!59(yrqen!j^;fUm zpU(cLSRBw7`gr?&T1V%5-&)?o-S;o*9UuQaNzmEI5}SfVOM*bmHG5EO;WHyM4`|H$e~5j$F0PAgs)2OKk*qem+Hsb?Z?1i&m8}b{+^W$# z<}~Xpm%}{w&hwLes|Ln>M`0!7)55Xiclkwu_aUcl;b=XlC1Hed)uo|?MrUO){BZ@P z5te5)6^Y++56V|^;UonGffwi1#me}WYQY%x*0p~sL)qo*TGg$H%~TO|u-e}Zt_$`0 zv;>fb|2Ee-a>VcIF60_;1y5SWm^FShUF7D%KE2xUuG&|`LHmwgyX(tQHNw4DS}juQ z8N_++dX3C&zF4+}s6`w~#25E0Fh~vCa`DL^c4PZQisC}|qm>kkQK_EBOU`;sGu(Z!mp=RXy4Q>|-!UD{ zS*{R5Yf`x2aC>y2No+ge0m9<*-J=R$jw2`~?vL&Ay zlwm8I!=zISnj-B;d7c|plGSSS_O5M3cL}E=le!3L(~jE|08WkU;u3|poTq`wP9Ex( z4Zu*mo%G6CNfE~yD+atmTCq^JWjMJA4_yH~I>S^MT=Dc7eNY;#Pq;K>kqJ{?4gY(x ze%QLw{+Swtrkca36MInM?h+t3yh^8-VzvzJp+=cxLic^BVF@N`jfeA)#I`J2hhB`s zJM2o-&IN;7exn*qi#om0P{Y>FA%I4Jg7Nl3oEEQFiFe{BbEN~BSfH*Nif;u&`NEVs zW)w*V6`V`Dc2dWY55v?MT^Ze14WiphlVd;13W#3>s#{~;2@ayE4k8h{XQ41H9A{q# zbf_q&p-%m+6@*;OeCQ|2ZwhddhV;yAA?gBi+l{z%C-DX7#0W7`5}>I5xm!DwUELF- z9==}F=G(SyBp$(JnJ4PI7pBJaBjrSR&;Ayi^48?eRg*9o+H zs?>N$fS~9UTR}fH5-V z$GETRSEV%XH%MQ+ImRMnRNnu${Wm@*=~}#P?~linN*2GJn7UdtA;oSE)kMgC-w|F{ zdm9@5t&_&WW;W?<*O1gtpUfXSCp{sbr7QjNJ>IO^BJHGxp8U)^toJ^-56S-^eI1*7 z9<6sd6|sl=c>*Kon$73rNC#nN2JOR5MakKJ zjw+k1-1^V2MTq~~A3Z{R5c5FiP8s~0#&cW0O)D&E)3UDnP^W7)4&Dy2*^sFN9PMtq#2)#VO{}D5=bJUF`nV0e*EMPqBUw7!u|yT8Yra>e^2zg z+6kray>H7xrjHFB?Y%Hc08}NR6CFV9Zl^G21Dt4Yt_6k~8`EZV*sLHDk}R^fG8$nD zz?H?Wb`^~=1yFMw;>n9dMEibf1$j`!f-yKISd>Al+yahFAF5=_*%c<7?I(5WE2W}$ zkO>#>f=5q)PZ28Chz<>8N4M@y8f!929hCs?60lwe5@TneTd;%uxF+VH5n&Zr7Z&PR z?Y@+1jX`dBXBdqns@1A$-<*4Z0$C4P&IdTR8}=XItfFDwYEGc07Lfq39&P@Dz@(k-ajkA@ zx9-ErMwlt6+(z+(!iI!{z-VS95UsM4asZKc#=shcS`DA>Im?%gq9|3B4bEqtgIdAs zB^DgH$?6rknk_)?U|8j<5Ts!RMl%N^{|B~qtblzQf+5G4U(^6D4UtPBj)mxH93x`u>KsMB|%I=UWIgl zY)if*SH^-dF{-LE1-5bj7$zY0XjpZdZY02uoRGGHciVpy(c5wYKVY$9u3 zVj-%9<(gLmS(NDsvYBkb5y(3|M2Aly^-46f=sejTZo13p{pKX4mc_Z@l(>oPeGNtE z;ZSrRx(%jozQbPZ7ufryqj;FI6FJ)limggZaZ(O{F0%~LT@oOEKp1bXRehD;ex@IH zY#JX%I{!KJ*vY>K)mjPNR4s@e9VNpYXk-y!-KB_DdRINU7O(SUZOH<(K~$CufIRF| z+~&K4n&7r-Ogb*I4IeFCYaD<`QK9O{h+m~5n9fjjjhhK1;RrLd5-q$s(~gzgDWTMV zs@}Dqp{cdT1cQ02c`4EkDcX6aiy4~zHClMNfRa_C!?=b3R;EvsP4}h*=8Bx_tqNh? zl%`Rr1E^MOo1Sd7F2%$-Fi|*Mv{1IIFlECF*)g1i4Y*H8beJ2fG8)S!Na-em2J3-f zoW|=q#cMlME{w&E@5gnTGyAnJqHcYCK@v9n}Ivh$wK(q9X~~esC0)+xB~Qg z$}cWL_%EWC*c*yW@;fWF6jbreKUIKo0d4-B2kfSP%mz#)=4WTf-6~Gr(W&SwZExku zq4_bkd0ZGi5vz;792C`UaeB^M-L#`szJDyQN~+i?w1s2S+t8BIyQ(#Uc-arCopTIz z$AK8C$V9sCh8VWxF&}Z1k?|)Z2H|y~kj%`f9O*NIg%#vG;#WB{xX9Ty|H+_L!u(Tr z><+lw(x-Gr0xILii7?=^M^iH^X%`^(N?KLt1v#J)baWxugSlAn`~CzMFyWtKCGnc3 zmj4kDY$w4Y_AXcN{A}b5tMc*04@HW2Ul#NJ%Gt*y2d1j-xQhv+MuVY@8*WUQb{R+a z1UZKHn$w^c%$pJP1>i@S4f+30ojPaf9%@ho!v(7?i!0RMGMQXOG;@#ZMrD7Bt2B9B zXvTUU{_eL`>zkf~&0@@y*mBWUf;{&x4&2-iUuilu{)U)fOtdK0kI*O^wJ2g@PmG94 zlu};elYOD&G#LHb#TFZt@K3H?U)TPZa&R7_emsjGu(U77-lf`ctkE9JGr~)mEadMA zvi_~lRZBy%e|==Mc^GF5P{rn&(J5kVu&#|nEl&%E&>TpRbXpn92L`1Mp^KT$;2WDy zj-P%hZ}|W>BQXi-Gx#yqp^MiEXu%kBYdaWYVA3O7#kEyVD=h`4ky~><6mn*Eb+${E z#na!A3CNAwUc0#Su6^YngE$#yrt;UmOa^d}27t!{$4{(P)jXc#C*Lm0tzmmE#uEhy zc{(FAw$!ON6nttNvEm(q4X%2I1&q-vVVcp>j;Wh>tY}U|Y2L#%-vDw!Hub9AgKAIn zFH{RNt4S%7K?EtG7_aR}oI&J5vl~k0O-_Ohs>Sao3h!HDp46#&t1vp6F&HDImlarx zcW^EJ#(V#!Gp;G(s^OQj^AqjG8{96v4s9tTDvTxSZ4^dF#IK6+wGLed%lT| zO;TKiN2arW?Y0p6Po(;e)yRPDZGi#G5}|V&1G42FYWSX@;2!ebYyV8i?duxbm55U$ z6Y@_vwZC?rvF?G8GMV$ z#o1&k+cd{LV%DBiyv84^ma=KI3+D1Cr4?dFpmRIW!KF)Ke#${JNb60-fuJ&H8 z4#H3Q%TK5JPEWs`to2``9DgC-Re)XZKT@A(Xy4@0+!!35-CN#d&>XKr&H*3Kk@496 z&RwJN7?*Ij%P?O|rCs1AU*LbgCGaAx^}K*=Uv!6)_J!Y4AtZ+BzE6wF>@stIL_TKr zx-6JILbPsj;$6+YT(atHE+V8i1!d@$zTJt+7&9XQzDiwx)4rB|do3&TOUCM#yw@+f z^q=Zp3It0O@S?V#b2q=k&y2VqbYvbL!yinGAIt}SS-zDV+NG3~dDO=dOK0G8z7geU ze8l6q^YOjoFF(gkeYCRrtrO;p7C<08aLi}*bGPa;jr!>W`xB4M&-w7Dk2k+Xczz~$ z{Z2|2MQ;5mrSnV0>RImNb4K#BYVmUc;vyOGj1x&ut8y+WA|&mfwk%L>I09Vi7WQ>^d^}|G=1XS09Qm^_>vhYr4d1U?!;QzVd2M~-#Ah981P;!d$?#sbYCG8+ zuAr(_G-hB1oEV{)x0!Nn1<;z*8+;9AVpW0?vbk=uzvEDfMTV+>QFh@dZP@Ay{rL#| zYs~w7C>-Oha6$LYI}|tSuVHW2Je=^jG+QDjoa(pYcO0)DYyTeq zxX0{p97Y}72e{uK&laPH5&v&4-6(h-q!gYEs!w04EM|)$kxo=x%~qVa%gCZ>lwJk7 zT3!nyA&#zmDb@Es&Sf+~2}z>o(Tv)dbn%jeqD+zI`rSQfQ+F!V)gRKB((OmmDpGu^75F4F}Z2}VCfj>-&nf*KK?BbCibVx z3WBbjHOg5`Jv$cZR)42VTb>cG{#N1ut`?uTB4igIf|GU-D-$hh&wl6dWSt=#H%uFa z;rRJDZ^dlWA@?0krnIQer*!SHZ!;nKlE3{0=R4MpF?W3zrP`Y+Fgy%hu$(e4b|tI7 z5h3)88CGYia-2?jj@41F#ob*7Bm-s)-_3e%*uwsK95VWlw60l-(db|QsKFAx`utI9 zZ6kvoa$eIg%4}{rh|VMFBc#$mu@dq?gm3x6?6uCOhe{HJ7$s>OmZY}zIjfy@gAvj%+pjam*G(MqM^><^3yQ19DRzW0S zwAh;jl<3JCjkrCRL6)-!*Jn|bj-H@3m8EjA6iJbLBnVV#$CWPwOh9>kQ}>qT z2`hLZILgOs1chcIoh}qt~WzB zqp)FAh5_R8)JKM zH05|0b8U$pmJ~U}NAg`Kk4TqLi5f*m!t91jS1!oNkeAYneoQ5QP7o%ane}q{W1eT> zsFWS6m=rD-pH@Mf*WoPOF8D`3OMxk`D38P*E8p8*neJJY>nJAOOjRDe5`PL?eZQPJ ztc(#OZIa6)I%+7?XlE&_i-H{^#QW1Wk6pKL4yKzI*O3-3i@0GKsgNl&wOK;S&v^kz!xpSjkAz)TdDm;C{fpIr&=0|kygypO(uX*vA&F~K>gv&2f`mN!){M4zSgNw(e3c-&NCdmYgc`Ia9gA7X zg?QSD$?jz?sQ910Ss<+3G^;aM$f(Gl7p-vh!VosNRFV<#Zj04uUTI~U(>kEn>|2~; zAlvdZx$2Oiw^~{47|AhnB|fCqvn4xS@|;xFTa7(VhY6DK_V2gc-G7%3nBRc3#l!%L z#)P17goaxvnL$=*VPieoFDC$5T*u9?wf_IukF0Kbo0L7F#N-wgwjB{B$O7ONqURcQ zbgE4xJkcIAa)_-Hh?t-iv+c_lUdMqqB1QL(T%tg}ChrT4gYM?)=6~l{9%3BZM&1KF zXgUMGunzI`{3sQ%sT=KVPET^4;!RBr${T0QTz9B!vI~!O6_2cnk!Va*J}7#A*e}BJ*h4L zZHu8DOlxh?oXz)jR4<{p$gbEDWYb`$@ctrpLU4j1c)6q<=&@ z0+$JS+xN0$&lDfXW7f_5;jQ7q@7M2sO?f4}TN3<4n&Jvh&p`6*!v|+quUN#hsw`1g z$!FykqNV(FW)H>ZaxWt(=jAPau&`FmTLDmCu|^B&N+QtFH&RCp~e883C4KDWWqw9t}%fOKrrfvbC52nnsh zduH=s|K?I4m36ZO6;HYTyy9@9*Ckq`J&T`z^uV@4yIkLZeYMDDS5Nx!RVoo%rWU`MAes-Pip9cwGJeJGWSpVq z!d6i<{?%L;a)k0;mk*~|e_`$4st|-KVVp8s=u0&qjmP91+QEhO+YE-QAzsOr_LlNw0qy%=-2Q^#fafo#Eu=$d4P<@Y;uukSaNO!{%BT=23}X5{ zBEzyA3MtihiFcvc{Ol!oNAdF*0)HivzY~#<#mD}~k!r+IvG3O<5*atPD8ty=uS_U$ zCeYk^C^xz!n9L`kB*EPMqyK7|*Y=M@zrnD&-EiM_J3N=mHZ*7G5JW6EG~X=mVk4*f zu7e{A^Qv|@muPSfh0M&Y8A(u~NP*tY>@%WIwxUQ?7+X!M_`R^VjqpxeF|H<78^8EN zS>AnJd}L3b+)O;`6y?p`aFt2d4;x7mdm?hp5wUG?#lys~{LjsY{n$TPDKVMxd|RRf zhBe#ib9>(09`YW`D*fabIN{}^rXyW~W}0N=AMqCF-;SuF)^m+0ZODzVGs0*8ljK5@ z+Dj7yYJRn&lAU^zL|Ku^K~l&+`xLSmkCDSDkudlI=K!2%eJta5B%(xJED zp6UzUgi9jFa_%V65k_j_M?xaT1MN$&|A-{1OT?>U>8*^My(u>P+Z#uys&U5&i|zev z(0Z*Puk(wbua_iYvzhgaAlyIgbx#{Xtwu-%QR<~jyF_UqEu{_J;rfqgl3JaD3yz8_ zPqFZcS<9O@Tahzo1vyvoYvv*6hj-OE*4$!ZeZ{2;?7jS6@9{BS8ITKw&26m5JmGbY z@=*GbuK*EzU!q@ZlVyZJ6!NUNnHySN~_>BA8!QT8LL_ZsIvgn zMcmbyp@9RP{+LeE%Lqr(Xp7xIr4@+i-+{KG@(*Ea4l>qT$4_?^NWaU4a^;|oe9*kH z(+H4n9{8m(D9C~mJcD5#+drQ$y{M=;Ka-C%qtWZ$tZmNM7&W`0n3?(h zD=zX_gPSrI@*sp9*7|FkvFGoI=QHrq#vcof%&rH6wCKcH-vwHixc5oc7l)S0sti}uC8CU{5vO=eZ5*kr~? z1J^SH(4zl|YAIfPfnI3|h2*nsPk+iK{70nz+gSZn6A*(%KV5(}1Bw3lukHm!%|&co zmORuOzZo{&1-=Ijex+puzmx&LlIHkdIi5^|7+n^j4g*@Ve^|v9}IWJ`0*Ze4=Dx7 zV4Xw{x&xAW0|_8Pl2s#^kmv*8U}cd5y>VCmJ8K3R-(=o;Pbh^GZu-=a37W-+OGl_+ds3b_?s z%9s*Ui$M>xOr;f^X*?omu#8>x(H-k3Z9X=2$Y!)i&H_cNTfLpiFoG#(vqeSGtv*f- z8X-_y$zO}sVTjNoN6|FWjayyG*NioQ>0@ffnjry4Si=4eO}-;Pi2XO!?KBx0r%)~TiEiz^i1=^lDO7#d#0Iap+1bY zb9Ol@cC))gh*9x)Tl2X*@z0cXE~n>JU98qt>t7!J8tu`Jx%~v4F87TQ`-S)`_8|<7 zxR9)2hi>ahBLjy`&0jmlz+Dv%BYcZZaU6?03ybB^W-N7#=!dR>%H6F8j9;nH4D&HZ z%|U}OQ-oc@yj~3~v>EuGHzKsV3ruTy;DJ88g{;qNY33YbN(&^&glg5m0wWChWi7L4 zMYNoOsb*u=1YAa|;AGkDkX_#QM*O`0xc$PG)owTZ`c`>n3x77O|Ls_}{@E3JtiLMB znarx7B^vj!!$M(d5rs4z7sFf;Yr*=c^4I_*E3f-K>YE;IJ)bpDlA#{#4Ab4R9;S!s zH3ORtX9JsI{VT|?LI!Y&rqb3(yZ?Sm^EkGWMUKb2HKofe*BsByuz@WEm29lLV;uhP@SNc*faJCK2?mjy?%Vnu5a-PB*v4CZz zqHRed1FW(oc=vX0MQ2~Yfrhpr1vcic(IBKX0pLDvc=^P{V~ zs=HAiPF!E{?dw!DW(my`N6op<+t^Y970X`=tq+$>`Be|&U17E~cK)Q?DCCV=*09hN z!>R5z(J>KU=g5FLhrnhb|23$D-z2Z4bRgiBny<9hTQ<^)|EHuHf+PN)#dm~u|9XeR znIVb&e;#KCrN%LVXD<(DZA#19^=s0JlgQVOXvkX`mg$Npx^b-4bpMGYGsLb5M(AbD z>szj$YT1CB(a$@8c$WQzi4OeMKrq0Hd(E2Pgi&pN}IhMshFMBM7n0#2Ad#opU}m5KNEab4KUZJ>-57 zx%EH~?u1awIQdC=Jo#B&`UM_^(0PK8c?ot;)1 zo;yxQ4exCA`b+o^Wixr5q6lJ<+D@zHp?G$>{<@z;xH7SQuo^vSOm^NldjW~Iw6ZkZ;p^*`oh2H#7E0=In23icNfKkY$2 zUS}cCm}$$yVfr)2zM8L=(!`D5>S$_D`UJo=U0|^Hb-4SOB}!m7=dS(HU$kqbHQvYB zn~>u(U+VR^JAHSYZNQS%>Wg!?k;gM|55Vq{%V5p-^9C6Ag-&KD-r7X##e-51TR zAN*b_CpD>{mnmo5(ezb$V>va#Py8xs0nhOIE!sM_s(nheO`J1)HTEn>lXF-I3fPyHIT-$_>cJp_g}_3ukp{~`B)C)|s4Ry{Z12?@GjmE%@^7Vb}F-dbGfMh;A~)joXsfe&|}YnnL^`R&6 zs?S6=`ryyJNnln@%%M=kAlk{8)nCV<-xQfb{5-tSg^;4+*uAxl9Sp8BZCwwZ(1L`8 zC&!?Gpxj8L@Z zQ|_gIPQ{%`t={MLlCRJ+iYB|a7}GgbK0n~$rnTe=H!nYT!=;(l6+ItJMGX4PpWb?@ z1s;Vpm;~m0M1;E--s0GO@bjO`t}9fjFM8$Dk%69ztxD=cktjfAij9-LRDJBdqh2ggcP z-jnWT{5)Mk(c@9R+8R9ON@rKE;yN!QRx=gU(!~EQa=SMiL-gHsI-&_O4&*lGh%2i* zSgJN?^0e?sgQb=y(2cqp9>gA`tJ3N8^R9BG$v0Ycuh4yf-wVur{GM^HQ9>7ndG-0b z{YQa+EG5D6lkLUfAcCj2>X^)D#gRDjHTo`i6ajQ<>n`1NG1Q??ba1*jQQH7Kt^i{B zeD_8Cc#`K)GHa-dqpa=!0$o6&zXH`*7>>Ku_|#$;^_WpZkZaQ+yy+T{ zE*bQu%Z0rH)vGTV?an(dDHNF-@InOtTgpHP|67JY3ZL5sDGck|)V}IU{4X2+3Pi%c z6F~)l&07_u#xU&pofz>7&JdHr}M? zapow}T4+&k8*SJjveRw2AvM)gTV2N0ZeWeI)LU!)HP>Ia;eyv(ldbjHWuy)E)OHv! zwLo7BM77&;8$k8la$kM++jQgIx7bfxEi&Lv&+P)#RvU0f)ldu0b=*~lEwuq_Z?Pgr z82&n=&z*bzIq0E_-qm|9AH||y6#)jAUs2Ks?n@+${kIF1&yINQxZi$z<-O-_d+uW& z4m{MlBYrpTy$kev?aTM>2JpW7E`0NE6Yo6o!~gF5_R0&-z4y#ZFFyIoyJ39OV+_>t zoH2X#3v#2^{A?|)7|_nm|JCj(kk0VS|33hgl{BPjCsIYD)BuyR1+!tz4PrB%+Q!B} z+(nRVE@*)TB}l;wS`dRJ;NS;62*M3&Flud!8seUIHU~yfg(fti2w#{&2|CaY5&YWu zS~xZgHqZ_ql%WAsXuG;WuZ5N4AqhL^f*-a(FBno_0HZjS{Nb!QR+J(ZvnZn0VGBsy z>dRjO!<%avWdoaN!S}3}z3id!c(ZF`@rJj?@6pkXb}U{S+BlHrQ4V{``y=!a2faB~ zkB_yR+VOgaMz^goe1{{PA@>N$;lXWggRG+*-|1!|9af3VC>=0Q&weiw|y;R!=foZ{DE^(Mj{9rJ3NkIoHlWT&j z+7ESU2Np7OhbtW1%#MOg9uDy(o-2(hayaumwA2GI)1G9@HK>JBdP+q7#kiMJ4LS zhd!l`fSg;%4r#l%+3u2wG$}~?=0=n*FODrGDNJ+uM?pH$kBEa~3(BAn6y=9baPi+i z@${@^_0IrBEoxAcs#Jkw2Qt}V(W9DjK=K$wmSkYy;K*4^TxPJVyHw`}kto8kdNqks zOJ^===ms0Q|6r}N%O=%q@K#%@6>VwFpbK%xRuejqYAduMGmWUs5*8Dg7JO2%u2m_p z?2jUiUFwJQsi@{OmY@h7LrYHNObE3r{~|td08IoW$mr&D)>2&+8<(o2W1HLW629`&L4VZbG z8z2E0N)SEpB~pAgJ#tRRkffKqWH;{X3Q!jUzd(N|S(feDb*+Nk`;nMBgcdYa9&G^l z%?!nsj@D70%1WaYusl(aR8^CLp{p*lYg4nq);OR92_zu`5};*SOQ>YB^|%FMEv5#^ zis4{#U;^8$ursA*2Cia_3>+Xq+t%qzt4)E`5|BXC%AkaUJi84Ibi+?J`n$ z|F!|RAc4Md000swgB`@Zz;g%Ktu<_6I=`Ch_`2Y7jY0}~LfMtd4us!++K@gE&9izm zdLRWaxO6D{;eX$g;USJ+!y$g@i6^S5LvqMt90Mf26jVmAlY&BDYdjruK?)ie1sS%G z04ewuqRD%C8_1x54eYM1dfXoMc2@=|FxikgE@b6&{I-K=8KrGxp#-E*26baw0-T6> zZ_i4C1Z;p5L@z_qQ!ar8e!C29m_h=QKmu2AK?!7Ng+i-0NHwMr=&gk#XP}##Eo`DU z*9nw$1l~FAI?Dj|v+n)+zHkE|oMy@KhXEc-@x|NeyN?R*RHYEhpv}^}TMe5O|0X~J z!ENEHB$z-6%Fu!dD7gh2n1BR0V1Onjz&C2^u>y`w>j`i`0zT%z%t=tp%56dOZs;)w zTyQQ9{GQ7skbvwSSAv%)pafGpy#z|oU^jHW3?)dw7Gji7k2yoXpea8WOx(87RQYv04tc;O&&b2C!Tk;2sB9+Y}7p7EIeFu$t^3|BkgC;k=Z= z6ug84B)}3fQ(JLT1Z)BIt(-!QSzp2h+(w>jzBaUw3ULm zrCjfcVHsSN+SsBLj6oTYU-r3y6pUXPB*EoufH>v_{keh45Z|>0|C^j~ADihOS{0KB zsm}H%Kyp@BC|tzNOmkFPaTJ{1Nz0;91c~L(0e*z_#l=_{d0dUN zIFL3<0i2BP@SYNSmK<7ok29!b@RG!GZ#8s65JA&S6O5=G+<=B)0D3XDH z(a^2=V}ERzCi0<{aD@ae#Bn_4Z%`3`MoUCGg+v;_M3P8;4xWBKU}P@nN9x-KX5fo) z;0DTwoYa_Hirns$+}3fxw`HHWX#ojLK?E$#x7ACD`s4(RpA=+a?Y)}JX~1<3WsJfo z1x!_Flj+43d&f($O5^yx~24Gb@;v+I>Qxx1o z?&pX!Vk1IYQ&1X$+Nq$*MS0Lh(p=)FO-iT%WKwJsL&oQ&?hrs16u);K!vTLx~{b zl)=E5mevdmoYhVlaDqTg*}R}p%+(7TeWUEeT*a0F39!LU#T;68O~153DTH3h!C4uU zLXwFL!(fdWQ0JH}={K4S!_LjZCM@yf)XWNx*7S=WeWS#P3@MD+RRUpd;gz%a=IW(ZxOHsyoNSWqksM7A>@tt+25(5!*3EGN{Z&*=%@pvqRPC~< zfrN`-G=y(l+*j0Th|G*HST0nUYvgvM_WCJBj4wq{?&p5)r36jPcp9kH=cpa-L>#bp!FeOt1SZ&Y9|B+BbS&T9!r9QvlO3XewXM8dc+#b5O6>53M>x|HnV5gaAY z&@vPpwbt8VP(wX0ZV|0&)zlC#{}&PmZxZkD^Ez*7HCNp6*?QESuNpuEU>4u4FmP0@ z7I(2zOd|V29wtg2{PN*url((-O&T{-+7z%7=^uQ}mtiTJ8jCI2*6~*LU^y)t5)qSO z5mN%I@g6r9;v&)H0NdF9ZG6^S<~T}K$!UU~E9aiCf;u2Y)I$n?uI5Va<_=yadohF7 z$y|I_gqp5jnB*r_o!ix19Qp3<6d8`)kt^#k??h7f*xC31?=4FYaM^GO5>6u-?Jc`h z^Sa$k;hFUE6he&AKv6|uPFndoqBL7aawz0LfG|Y1>nBs3`3gigL-WiOA}EhDi-by4 z%~M~zFDDvC=lKodULIHp|8Q8nF$d|N1REASTWSNnLD zQzP;2bP{ez7f(q=KcG^xH0DZgHCK~PWwsJJA5dl{MD=0Q8qY6b`Be|1j}p->K?5>< zVU>C5SR$Xb1r1vTsr4TFaa@lOU;C9xnXO!Rm0FusT_a9sHOe__M>;F2m>7mZWM6-o8d?+E9;Y=}2{b>pH$cC0ggsM)5jNr|n0dP~eDO7W znfI*uty;ZtdJeE&w}A~nbTKJ!MA&D042y>e1V_JXO1rCM3q*8lF$tga31hg_X15oE zq!zgFNXm4#dSxt-@Zp6~fU@VP+nIiTygpf3dJ z75YFJ`eIy$Q>Y%DlLng@K%@V;K&alN4+Nt_x}{^fK#-mR(B3t6I;hiL5n?){k2tsfaL_&>(qyfD2nViXHyV#K!34BPwnyg7n#0F-(#<-`3muQ5d zKf1WX|HivVA(PDenVdwshxfUoN=i7zzW4hiOo46`37iZ~oXW^5b=X6GbDr1&ulF5x zVK-(yvo}w3H2-O_XSazY7Ok^6dC-b_7{+=SM952peGG|5$cJZFh{}J4f9QmMxIE1F zL~Mw=f<)m#*!;WSJk8^Le*8qt`+Um>{a_MBBa7OC8^~fs#f3*Wh>SFW-YJD&v!Xz< zokY0RXCz8rJWEqV>*yQ578Ga=1Y(S~VW>#HO-0Esg=uIl+t)_hGlXS4y2nq#$Fm7) zkbAHvx}&!{-?K@&|GlICin)8+x&Qmo-+ST5#%#R3Z5V)?s)u;Q$taC^JLoB~lgOWG z|Gnn(3{zlmQGoT4|XfAV!TGCqj&fk>MnQS{@cO5JgJMmK!%| zbjdP`NSilp{=%sfXHTC$fd<8C%cd`&w%Um#DwJtcr#Ndql{$4Q&zw84-n2@U|7%yT zU%`eIJCzG$mv7#^f5&JN*;XK7DTWbCMBH}b zVa1Ol&V9(y;$(^$A!1BvQ8VVvjT1g3DB9xa(5FFzW^D21W{iScS2oaAFvrAOq(Wpk+kqXLT`H&Fa+*Wm{0L5#k$svMA4)Htr?&r~` zSHGTpdjk=I)(kFE{>lh!CC!z}TOfbBTLj}RKmh;ikFNhT(Lz7~0aUO-0UaC=C(0Xv7lxdyqf~^LvOU31|w+ANSPL&bXVB{|e6lduSAE zvmSvAQph2REYirY(n^apnt=OEw#`sN3AZV8tCC9G2y<#a1C)fQ%bU7PlFKpEa&e_6 zudMQ*ksQJ;GSJde!T=?vkkigN@uc%kJL~L|PdU@7DM>2Xl+wx{pG;JsB%%;gHkDF4 zinyVU6skDpbi^q-8!HW}qE4s6biA8Hr4H0nQB76VvVx1kRab!%$W@5sgHZyL{b4bq=^*4gJeH;zcppshxk=9OT!2~kZ& zDo-G>Z|oF1Qmd2hY>Xii_G0l&EjwZM(JBp_UF})>?b74gKfLy)C+1)6Yd6T#KH?yl8H%R={e{ zFQ=DY*gwy`c7fo7JlV>7_gZoD@MhSnQu9t;`Q@2!p2&Y||MvG$no4GpEhZm**({fB z;@;~g>73eUZOQ+6XY;bENpVqt53Hs&E&2Rvcu(1v1);SqXEiH=@baMMKzKWHooj^Y>X*LM6|ZI) zKz8wh)(5erK@Mszbg@F=O)mHqiUp}u#!FxVcX*W_4v~nUqUM79PIIk9Gb;iF&spcY2X*$a$86XO=KCZ`BkF*YIb+SSH~#>ybXj98P| z9j};2r(BA7bIVkb>Vdo>Chr!1Eaa%_XT| zd+{!pr7R{28`nHeHIkXlbmlWF#VGnbF(TF@+4Zj3BtE@L1CD@Xy6O&EX_t!V2gsN~jGR24Yf%VHM&h9`0MENVZ) zpFqeM*fH*GuT>jo6<4;XMlCiYYpvfF-0G2?B`h+}Tca z!jFs5i_|`)x!AiTK>}?}0*aMDivKD(B5h5p0m$&*YV}xqWJ#z}h{VST6U={;+VYnb zItrUibT%t_RRw7kxti4q&5cT&l6$9#Rzx8INr-@bqX6HPNI?=P4xF!sl|houuw8>L zm+gG%ta-7Ngz5_EOj!ujpVqm~T)Ojo^^2SOa)}JBxRn7Wf$36gVU<3ODZi*vkE05a z)jjfsjb6=KFb~P80x9aOasAA_|HW7&kdz*xKEo)u2t>(B8Us5XvPLbi0wuOs?kHN( zirz?xl1Rj(we<*C!@{wzShJbXz-_f{YrASaaZQzTi4j(3;k9Ch_J{hO5WlIV%)f)+o%C{D3 z(N%0ZX6rX8r(N~=zBB4f|28{*AM5VUS$_9;fFMGl$LiZw9w~d*>@w(W#J@<;;dHKg1(EkVN*Px zc?h?nkh0baR+J;urs!ng+Bbi5#4HfFx?QuM{89sZB5WxjK?)*n6l81B3buk|&NXo& z$f#+vuuT8~PLBFXu;@gbq{pxpPyrdR+=QZK7E79<%m79qE~Fs9NP!H7P4PJJA;_Q< zsK&4Qt^E?qv(7Kq|H$Ux`bgn|!Ua<>s(>JGB7q`+%y+y5pFoc(CT>wsEv9;K&zPie zekyoWu9UV*r)UY$KquyQ37?)Ny_B$prm**7&T)3mCY0q%;6noJ%p#Vhc7&;xvhees zE(Xys4KpwJRz?48B0+Ma+9HrEg2QdhsWqqvo2U%i?5WEBPVUa<#va1%^e*oVu@Lnq z@r_z- z1#R|rr3pid_jd31ey{gP=oZOE_pA^IB`u_UF@^3$(Q3%l&XAHw5fdS-)*!-%eB#z@ z!4;6PnGk?&{|F=f41g8p3aePb@VYAgj*%*2B@dw|lK$=5@Jg?2rhWF%0on1~+OZMg z5dt6Z9mB1TGK;gi=CGnssuYd|1tPWTrYV%e`}UEU5MTx$MoBOt%A%|l*nt%Yhb02X zHtu-Q!%jyMo`E4=LyZvC{}GMIAxiLGFH*GwK_Bb{uC*-Cy6{sFr|V~2e9mL zsc#^}d`u6|!V=RJ zRWMdaGj=Xjrd?%oR_IJgnbdCz^F*fH7f~FI1?2()iySG)Gf4Vi;8Aa=~mos=5@FPX_87lUa$qVwmfGL2@VngGNJ9V3tn~A zUyWA zBMSCOeJP1B*f*^7=|#F#eg~0~o`oPbAR!1spAxVkCSV~F@P7|NfTe(dCm?(b7=axE zXAD4q8yJD1@ETV)d-RLVgR{KXBdN{U%Sn(21hz+0&eE5iqIEjt8iI=zx zju?rhxQC@Uilz99u^5YwxCEq_i?=w7!T5@m_=?G(4eX(J(fEwdm=k>INj_~}BI1qr z363S=FLO0p)b1{sb~RfIPDl8elrfNPVq8xc4H@P+wxB~102ERoIL@(5u!QaM(Q+(@ zB@&&*(nUzCXmPeVFOMsMrS(sgbnVH!Q|9;sGdf5e9;dg)c9()&Y zC(LK&WCTZ0i*nEhHwIDsuMxrb;wlky#dEbxD};%NasLQbRjZH-auX6jzZ5SCXf+hV z!P?dn<1PwX@IwbZOmdJw0x*IEN?^jE7|Isfp?_E)$l#$TT8JsS1SA@x4M3qYI<`2P z1dN!YA$p@R8l*2eqfvUKC%U5@TB3niqgUFY%V41wx(s~x9@5xnZ($R{_a!cm7a0!A28Obam^l#XRY)P01O}$LIFgxGI5ZIB`BjMFd~`6 z8aFczS)^bCszlNZK&>(8)FzEgae^`F8Y1X=0`7YE|L|HM_F4h*#KW7SLq98v;7N%^wWkC}&Q(3Qw%1vizr~OyVXAX5`R}Nfj|pHAq=p3ZO;Uf52Z;9 zLR7uxA#^2@3gaQHsDT!BIO9=9D+4YbF;g!Uz%f-*!Og!hFs%UhZ%aYIJC(5=+_TON zD)pl)6|4$pMjZl=L0zPs@DR(ZToVP{z3?=+E z0+><4Q6UQ@stx2yunt$#Voe$8gtbR0fixVlH-bBwS@? z6qi=qAP?PoWR$;-3Q#=2OWRn-Q63!UKMdksy+0V~<4Pb>MK@>6}v`HzkRJ@j!x4>q&mhuT?vURO-iN>vb;&(Mz?=vD82PdU) zmdeZIN5|KH+{aPgb-r|VtJTR(K0uQ|c0xXQ&|0QEJ{nmog^9w;4L<1aCM_sKBmf`_ zL?ILq;122UoH>kA$(sFuqJKa`Uipp>9o>!4Y1^1a-W45ulrv$!e!$nqb8sv*0R8MG zmeDB|ZkZF|$HJY3K0V}q?j^6&|Fbs}F34DvC_RBC*a4r`U3S)WyYOv7c5K}-d!5%A zfAJmPT1j5;cY9x|+bN9Q?mH!GF(1N09U?kC6I6j-5zA1|R=v^v+^v0WQ9s>1mEGU{ z_2(V-T|f3|zaE=2^+B=n(|MgYe?88%C-}Yh2@U{=9}7YO+a)QICZ|2w>j+6w=b#^0 zqyOXOdcBA?T!$biZrRxrA(V9 z1rPuT0wh`@MKKU1>s6HrlBB$v0A*N$V-1u&E7q)9vTD(Wb-T80+>~JlDll+YffBuZ z_xkM%_^;r=ga;cgjQFr(!gw3sMa!1$+q9FN8u(>7v*yj5JELsX6Z6Vjo=clPjXJez zl~4gp#R@w%RwM?JM4>JFHbLD4aq~9dJNRzlvxgfmj-0o0l`S0>WT~WJ^oP=`Q@=jZ zdUov7w|nmnUVC`%&&xYUsob~BtxSEPB)U4j{P|AZ--J&;zyAIFQ3Lo701yBWl*D9X z6=)WM5umhSSPdHR|6pwns`X%n6ka%Ch7evzkcAzpm6t$xEk`G`l1dtdfNM@hKpSo!ezhS=Qo6L@ zN?G`z|E;#;ZL2Ly;(n!Uxsf(yp8@Hn%WJ#t62$Ji^3I#2fd2{jBY_4&2q}X; zN|-Oe7V_xh!1;O@Fo=!KNUDr9KCGg{ERHHF!+(u<*NP&3NN~qx(hG9PB9Bb+u1%f{ z0F+~1$(~ENg^A_MQofv$%pKYcX3b+dw5LYY(g}2(K@Tl-(L~EhQW8=qO>GjfZ7Qb}Hw^dNa_5zV0(B=b1t$h@ z!Uf-)j4=usn>2^&s$*x3c;bpL&bUj!J|66{y4f}?v$I7(Ipzj!@!VBXY++DVN+$t2 z=vpKJ|0U*Gl}`A%Ftr}KpY0-{x@`$aK!zJ_xKM`fF6_ShCIjh4yScJ8j(qaUFW)ZL z_zJw1f(rUeaBUG3Xxk%Q9T^a4K;~(1gBWDGrKK(HeG;f(1tsW$2}pnhE*OObX67;v z|Eh6~Y-}TEq{20?am6d>kt168XO<|CVH7CQ#0}xM3D6jT9cPRmE3}s&18kxzJ=}uQ zNU=UCB%p`vFu?tiFa{X119bD_TxEE57SxHd1rr2b3rH|YQeIGOhI8Ytg5}Cs%5pxy zY7(%VHMwG0?l-ja3T;@363!XqdN0(1LbMPCNN%B*J*)*JS;2}&)@F&Ukl!Y<(hBXh z!ja*Nz$RcwE?gQx%-!ybE~p?GB%pu^+F%nYH0SYViO+oMvx8D`4Zb2Y zJqJyXV;KAq>QF)oJ`zNGS1FJbS|Nq>)en5wi@;Szp#@F6a18R3l!y{IOC-fXUpP|CvGgDiZ3*pS<3l7Q0h6TA0!V4|P(MZiN?W+3|LiA) zZ<6gxBCIRU?0U1jLg=o1)hk~2>Q|f*%Qg$Fpadkqg$)FN3lFTI8BYjVq$;UvlC7*| zc>+fSNChVOqa!QXhR3iZ)Ovm-kQUmp!!1-&ETZg6HoIa;_p#!CNg%`he7HbTkUL-K9MX zjNk*qmv*-!V;Rbj00of12JHNwfsMu83~PA9`Eed)14^I{4fLfLI%rtx+m!_wQwt8s z(psgL;st(A5N`^s(^SYrj_HsUXi-xBt^{Oo0ZxBfWDaq7 z%2cj$W|Z0_DwgT1CX9)e!{keq%}mR+0gjkacs3+#DNAY=>|DvzerJQ-Rd9D(5aHDFY~@5NdeK4AtfMzuld*vXyVqr#|D`MauS{zwsFdmv zK~XrDgngQN#67O5lRHP|%2)#i(SnXQAO%)m`m>C#wXJW>6(`-&awrLJZWN5p1P2?~ z7cRE2jZN%huOtb$@d~qnb8KDWdfL>cvb{7rAb2K6)^=K82JY%rd*1ZkE|!^^#tl7HB~b;n6#YF#C!WPcfBu;aieAy(xomlrfCgwN{4*bB3~7%Pj2#*e+}g;S9z#g-g33ch2${L zxXo|AM(^%ga_FgCw37|=VGAAEL;rcvgHH5k;e6>#-=On?{{>}}K>2?t`D-7AJi5-w*!| zKe}t7@3_nBuiVbtU;p_B{r>&mfB1K5_g8A77kTlA|9}a&8akJHtv7oPNP7?{fv`7$ z4`^%(h=Cc{8Ba%i9XNa+sA&naX(8AnBWQvmh=L`Ug2G3FEGTx*2ZK_kfip;hNdY-o zHh1X9cju>mJXn4@=zTyaemf|HKA3)W#(ov2gf+;7O;{9($8j+sfGh`q1IT|?ScOzL zg#;LY|F?x#=y(T6YfeapWf*C?7CEa&foo`iZ5V-U_=av+fo4dDb*K`$mu)V%g1`rY zC#ZsdsE2^ahb=gWei(?+M|H;cf_BJ=b$EUFc05HWi9I-pKS+s}Xo;D4gqyf97|7!vzP+>@OpEruRn1Bq}df`+&;&np3 zAwmeIhQ~rj))OU$rZc~&gce9(aR_v(Lpxi6L|B1D$W(N?sEruNfqi%|&W2=~Knmli z3A1>NpHoq!15NDkJ)YEoc+?=0;Eq|+S_jn%>$qDI(ps9ZLt~%`NG1ukbx6!dAs~ih zW+4eX@ppreXoLj9XAz(YGZa3xparR;W+(wTW2HJw zq)}S11y2=TZH751aYzm#R%%9A*JD3hpiw}EIZ)yiTcumQ)LyMH3gJVPV&W$?>2W?u z8@6E!X|92PZmAD6mrU-`I=4^We93?dd4rN;`CI##; zLtA27@Pi-*u}50832n7ocywB=P>xZ+QXDlQ5pY(Iq6LdoL-Zt9GkH~&L{d^Z6|^G-#krYf_C1<#NET&3EM-+ML<+GvoN@?zS8*FiluN#0MA5dI z`FVJFxQFisjuoW|WT0M`G+PM(|CQ|EP0pm6Vu<$v>A#KJ1WRBBewsItmKL|EWhr|l>^GyC@3y=g!W>siZaX(R2S423K z94RI2!DU)0ahX`8i;8ol*or}Am1zY(e$<@ z&^T=JsYKsNEcO{Y!6vO2OK;ssh*A}f<9ME4@lB=rKFMTZ3(`$CwL|T>TfkWmmvo}w zBnj-pQKngx_2^By3OET6pxOD46%~-`H400kT02ArJO-Sz^`n%Omo+qwn^3e1$$J$^ zmMKx1bhIE0l!zFs|FyW5kyObi43cJWmXuraR99OQHq(?+L_A{KC0Ti9k|0PYWVK=y zVt`eW|5l0V=cdPaL`H-}iMo+nE4a26me4wCnxZNpm!qvDbD6ieY_quT78We)D3~I1 zmxipen5@j@IXzZiMueI!H@Kr)Wz<@X4hx4Bh`R8}x=8no*+{yv%VGS z>5IM~Ji_NYzM-kXDeOU}8^82Bzwi6PEeyjvr@}StbpL^E{#(F0%)%%d5nle9Ax_|#6j%C45`O;Ovoj(z!E&g z5Ik^;Tz7I8cUJ_-R4m0-oXFl+$d^nng&VqMOvY6x#-A*PAI!y~9KvUe$)`*&Z0wpn z$7}`m|GK~CEWJh+ZPv=hBb9sQ6>{vxy3B^C?904DyLt$zDP{nL>5roZq*v=>2PAbd z7FV6wnX9^jN(w)pbC;p!bRNn*Miew3V~b4lpcl1tEOtRJbdUMfQe;IC?Rg+Cgk*XIP0l$u?4S^6u0Xg+K9xC0-(%budSV9PNW`RG zoAk%89ou?LykEW(`)27nLC(%Ajh&O!99boF6qC@Rp&~L&umLkYDI3jk|LV;lpL`3k zovS7Pj2nNuZswidid@NGo9Q^=<-J}L5Uq+@rnr?G#w7;K+wb_aKiEbwzz@VL&dZ%mhyexYm&l)ZP@(mx%+zjvLb|AugeEE*^f82Wk z416=s@;{#wo4$$lJa}D#qyvWK}|MXzOm07P>rCEtU z@AWYu?Bna~GGVMG{_Emfe>CswYo8x$gT`ME_t;)+9%m4IE6W7ZY`vEEcwe`*vG*RQ z63+(sf`5#HPbPMM^-^{BfUo!o$G3mq6Nq1C3sU$sqf7V+_nDs(?aq4$f;n>e%$oqs zoGJRH56z}8`q_#4(Y*TF)B2}>`icbm*$VrlKl{+E`hau$wEz01&*-9W`=%fKvETc; zU;5$0`pM7xr;q%?-uV!{o%hm-~T(}U;g87 z{@oA$=)eBFlm74D{^Sol=THCY|7Y=^{`YVG2H-pV4-f`i{}^!7#z32b0}CEZh_H7~p6C3C9Q>J%SWj(&R~$DOIjy+0x}pm@#F}q*>GEO`JJ(?&R6i z=TD$Pg$4zJ00@Ah1`>2!YO-m^2uTtoiOS*O)qyTrK;$aWtAVX9v~qnYa4W@uVAGZz zYp|?Zw^_HwHQVv+SGH#bX8jtLuUd|CyLLU8wy#`>aNCaED!B1t$7H!~bpw%%5|K|c z59Qq1^JmbZMUN(3+VpAEq!R!@0AMx8C?5^PhAo>mMIuN1<7mRR11Pio~!2~OmFvANKEQ})! zKa5bp5#KU#tqUoHP{R^CWbvVbwpfZk0BH=VJ{)t@aYr6|^zld1T3cZohx0AU$Ev$XIVrE45=$zFi}E?)EZXWzFSFdzw}-|o^UUd@bhAt~zjH1; zGwXEIfalsE0ZEbgJQ7Gi0~K^oLJKuCw4xG4K&g{7`!A}g5|BbcvRYh_Lfb`5O z_BM}n(@l$qxRW!xXPp3BK%~Egc3NqztQNd$qs4YxZKV_QqCIaD7rohlHTPU}(^Yp} zmS)T~ijLq_Z{FFW(k%i4K|~S575nA)-xlVwbW{riLs4ISH!N7hxjuCG#DpI{SYm`F zjuq2aGgg?vS{e24)*9Ird1R7HHaR|4L?We?l}TY`6fL5VLJBQtmSPK?zu2Pa)5!_Gxbug&pwX$jYq$M&+)o~b zqnG(+8E4>cHazB^iT7FOB(`wFjWXO&GwOn(SK6VYqi?<<>m|CLdF#86`XUa5P#^#W zBp{)(B_^o)Nz1k7K!NthoInERwH`~LGD=W@1FEmI=*|C?DS%Z26St@Zo-%}sT;rlw z?i~0)2u83zDKh{&QpPtjjKXED0G!|gcQ`2oPG%wuVd5TlBDyeSbPIzR#aLIFHkg45 z3YY>H44?o7l%Ne9;KIaU#1%J~VSZ$Af&Uo>Vul4sz#v}{$VA3O!-<)0g;R7L#x`a} zD^`jF?gH7zJSIUfhEa@T3NT7+q>RH z64J-!1@Iwecwh6}z=iU)VFDYl$OI-}fC-QQdAdlWu4MywmroSZf|oN8Ett>T;>ub88pBqO2Q5Uw89m`Y(*(RcuZu@ zEOC$%UFxz@mVv>Fb(=E74K2dF^p#=)y+I@uxUd8cl%Wetn8G9!AcZz;K>22~*C>eUQlb;3 zXc#Be5iXR%7Nu~7Fi8=-nc=KvTYw|+a`w06eeZeP!{hYws5Cz6F{aS_-uDOzzpZp( zer=#+89E?@DNMnV%qsyG5IKQMCV&hWQ2--%I)w#rp$zWi0tFIK1~cf7e|GdAR|ELf zt`%@j-0{s6B*1|ZBw(x3N?>jlxWJ0WRjzZb+Y}^WfJtql742|EJKC^D4+^euAw;GG zw7^0ip74bGvX~1s1Q8i3poebg0wuMn02jD{15>ymQZ+KlDNI$K7qMp<7GQwOI?|D% zwMb>B;6vC_5rtK(5L#j+0spmHBw{Su;umd{E4l_(xWh%4FY#&sC6vOW!DH@VODeM@ zNFlmSA{wby+R}z(_bPv^Um*SXKki1Yke74k2HZf&5|kj6oN#9umaqUa@D!<-%wLl@ zsem>>l?#dt=N3yq$N+>>fLt43S5rAQJGIFLTi8MYzoa%a#d4NO@)L0_d|?a&i3}VG zoFt~81TwUOgCHCn;S7gT2}EI;&Eyb8l4dH}PR>-2ogqK@`C3IPp{VOzfD$-RihWMN zol2PMI@dV?GMHfr@^r6}w{Vdo^HXuEGfY4i=gfb~N}8yOW~pK~yOQ84!(%3MndPGd zDJ1u!YXoUWe#VhWN&k0dAKt?AY*1aTd5@)j#2!uSM^mr<@ggOd0uSeD5EpPEZHMFl zS_4@EDipN?`ID+qAI*V_lz|I8EX<~*idHoV(yLGFs!FdkRs&|MO$s~~T+RIIl3f(e zus)RHN^;jogz&?DBkbQ&{5LqlSrQWP^=ms4TNO68h0BI546E$y$}lmrgK1(`qHX0L zR_1Y4mMym(%UDiXO5EY*a&Le8TUw`^UA8WXan%hZcXuQb9YHgj-F#9v8$b(^z*(B7 zaI*|G#D3Tnns)iT$M7E9X*D(QD!Zymh@-OMV5PXj`*&coCD_3b23LjMM&WmdT;wB9 z$tD!XZUf-D*Z=DzcFQ#)g^iSCgj>+W%r;U?p^{y7zee)KBy zTV=Z^)CHvlkz7>PT7UC#Q8Lmsj=>Gp8$0MSE4}LZ8ITEIJD>qc zYKDXLdjT|}+`0C>EyW$~qt<%>QT_J=c5BscZS}FNet5*E`>q`(EMBFs6lH2eULuLW z%q5|LP1vC$l{1WDeg3a+cl-09cNo$|PkPan9@$&=7ZyXrTX%V}Kfq0V?RmuRn%SO5 zSdW(!a?KGX^c!gMinG`8nmm3>fed3WyB*5@(mb|Z;RcUL^`9na=m|!Z1wL^19lm`6 zpZb&;cmJ@)5nTSZ{)v_z*M0lp!`YJXUK8%u5#s~*@)FBh0)bOPiebZVO^|?1n25?D zK!Vu07~?qvWW5w(wgp^0WHY^?W55J-9j2SH-U6AZqdyLm5BTfA`Pc$}n>TpLHLmNo zd&4W7;jB1|E;e(i=X<`m!@h%qnmxKcy_>-tY`7h?I~)ALy#vA?>?&;$4^?v(wHXsu zGZrQk7Z7|x_MjOktdCq{JiL;Gnvoa7A+~>uIsLd9O{keRa0QMiK%YB32ShyxM8h>y zL!*O0r5iVmv7!el2nmqAkm;f++{4q*0+i!J(%6K%f-@~3K?6vHI19e2`ww*$0-%RU2hgNXA!?t8d~+mec_xKRAQ^IOH|5Qyj40txUq zSp-B{tVNTlLf@N|mOC6T6bWKe94*iUoY?>(@`~kI6>XcgYFkESY{q1~wr8}qX@f>- zthQvdMrWKxX}m^lq(*LxMr`!PZ2U%T499KE#$z)OGS~=QX-8Xp$Igg1cm#?M6bUSx zH?1>(a+(?B3aK?R34ip*E%3uF*f5Srn}h5KgcJ!5xQX&GiH9VChfIk^!;^|kn}#$1 z4(I?pVTp@GtB!0)j5Gj=%t(#2$cE&|hAheQXi1LXfQN+1mvqUPq{)t$$cf~L4gY}2 zl7zXpD!g);N1+_b9Wf)6SiG6(f^y(BnDaF$*Z>pz#Z4F~le?KsfXZFW%BFO=jYzSU zQ!$tW%aBO1s31$pt30zL%Opt4C@9OeTuXk!AsaI?xim5xlYqI*OS@z_z3j`q>`SGX z9WYCP!Tb*mBuv9(l-WDCN1;8Ud`!qhjXNj_TM!8wDhVZ+0!}D}PA~=b!YeeZH^pH@ zuxqa7!n)GLw-%g@pDCU=dd=c%%|{O*8||L`*Z^49(vR&d}_~-4ssa z1Ww-cx{p}SKVeSi9ErAhPPk!ClVCqtqP)n=PVJ13C9)h-=z>l#gH9lWN&g_W$io?} z+=8kcshYDHno}mQB%H7GzbytOwhbk zg1$^M1vN4Qt-3IasGulJ4Rp-y%uo#-3eD5Jju0nPFojc~f>-c_GpI^9Yf7$TGr$ra zkZRG52&rJhtNV1#+a%DS%+bl)QI*&_H^U6jgfk#bGa>yje+x|`9a1GF&JX*rB2|JV z0Mc2T6l5V6w_%_r{7J&g(Fpj-EN!3-4O21IiODp8J1EmGI0XX;QSkHvPiUtuWKsCx z!m3mzr?k^82r4OvQ#*yvpZPWati1dj)ce%J{QQ}9a?sEWi9hW>1pj4F8&g!f#7n+R z)VsXYN_A9AwN!VpP^kzR|G>kK`P5LI&{AbgJseY2T~(T>oQ~*(j%bBj=mPOHg*;_M zdlN{0?9Dx8(SQ3@IQzHOBtBvt);N=yMnu-)n^NG+%*@QqW=%xm{LLnH)@r?0XFX1B zMb2fljXt?fs5l9b(~s!9&bAR(bY)d_U00YO!+I3YSKx?xFoRMs15@xDVO7yd*n)l4 zQ}f))Uj0=Sb;^GoRygxd0VUM_T-X|of=tCryi`<()l`ao&_|`z1I1X3waX1u%*3=% z;BvXGAO%-21v6l;oBwgV6zw;zo3-Zh$A8-b z7bL0T$xRxKm)@fn9-WsX^|v4$&LE9iB1KZFt=6W^R;*1@7F<%ORX;5KS}(=YD-Bz+ zHN2BO+cB+71GtBh-~^6HSp%S1cOZj$?S!e~(}De0y}i?>j8nY*SJtdi{a9LsRgXgb z(M(lT2HjMOmDosqT*kFaMV(ws4NXqfk0jU(Q4QHV^ev7c)m#DH#q8YC)k85uTh!f7 znB|Do{Rdn4g?A_gPq0^4-~w0Z%u@K(dgI64t+#&M(|QZqH4QrgTn0*y^% z%{t6zRws?t=bc*WwN~rJR;#^U>7~}0iOB<3@&8>vkSN#cREZ=BS6!0F)a8|~ zEQwweO1R~Sdmux5Wz$j!(cG2KdfVGww9{SmTY@#QuFKE={Lh3%-~(3R{`5*n<;#tA z)QQbh1x>RFrdW)1+`r6V34UCZDA|$ySP|wT&JE!UZC@0IOrsQuQYZ;3SW{D=gb+Oi zoCVh3HPW69UeWB;71TOnB_8EfTBH@?lJHR>owXyT+N;IZBh6l|RpP9L;wN@mDlOYD zy<)Hh$}Dce2O@gX&${k|LW!yiuTtNV0KPmhIMBZ(}@1tV+GdOOTFMp?O+JT;L4p?dj@1FEn$HM zVa_GtP8DGju4aYK&Qb0JFAz}?)l*^B$C+7DR-UsR7G8dIJfig(HzQn-9^#;sP)#Oj z(4695)?Qy;=_qDt7Q|vJ-eQ@KX>YY9YX4qnoKB4uhSiP$Pj2?+pyIz{a=bSV=W_1V zqQ+xFUFtmc&#G(cpwz-bUZ)RRr^W5xLk4K8Hsq-e&C(TJM-J;oZe&R2+|4~*Fxs7* z7L-daUQ8y+7A^@goP?h?h1@Mp;6+{{?N!22!Qln0IX}SSKlL%jt#%yR7qnlo99=T?X5L1_pYXfKpPv(UCy;qpK!oyi* zI0oQ=Me6=TCIemx5Rd&R!15U!(;U4ZcMVta<4PPH!R$HEB#MbM_Zfup_-su%)$Bt}b zJ}xgTYm>0-Fu&~fR^}T&^OkT~k%OO-Fv<;(s#3s+e)}L?CLB5kST2-;3%6i7K3aOd zZH4u1cph|_dDKA0=SSUOegE#@iM3!&El}r9=#qtQ=$3Rezw{1NfHKHmv*O|1L}FYG z$nj3{UNvtfzo`DqY>^J>_15f@e%h-|;`^TUmTqk2+;3d(Z(W~hv&Hl?ugp(2fM5?f zb}NI<>;#~_zpOj4J1^=yH|N?uXMEXkYX9(fQSUttTuTLRfaZ1;NAbq3Tt|2G55r3t z2UW99_eqZN33c&B_Vr({Jult}PROVadw~0UToxwUWtER;>_eMpLpzb)+6~|GB@)vS9Or@?2m_ck{>x%pofkig$bb9 zNzlwKs5dq*;``IZ0sr3HZR$#28(ahibP&H|pAU47*obxFa7j&cqqo?6?si8#;pc98 z8lm)p_Sg_UXiG2oGj|2G9XTl&gN}IlQpnvYFa=WhK$F%DdJ|YuZ!W*KwVZM0`;_IL znGLv?Wqo^ld6|37&RmtS@{I3$zPIwIUI|yvQIQz@!7mBDH-N;KIajlK(6$9NAGv=h z@RHEXeWHSLD1{F?i6t?654$VACT~5(8NVjB+?y0-A4HwKwTt?_lxzKqQg+whXl2J$ zyaMmcRAu;k)?bxq-*3`@rD%Z-Dqs~@ysVdIzLB<6-{p^+<~Ne(hh)8%{@DQ3phP#v z&wg0zagN{wSN~uyy8bBR8_-7FULKz9G#kx_fAW(sY4>mc+|>KRmfnj0`|M>>#>W3i ziTN%qUw|-RAcDYx0tp&Cm{8$DgaVNqgqSdbM2ZX-V$7&E~VuadlY`_i48*RSBa z2@@1VEKsol#*Pz1UL3jc)+3F2U?vvQi)OA!&e^P==}Hc@6*R`KR?5tpZ; zcK;@1s6d8J2kD`c@>Sk<7h(pz9WK=n0hu!!|Xd(o7kfbW@KW_aes5QoU@|&i`6B zB#?G#%XN@nd+l|&Vb6snwqq;NWt8c1$>iEyDg?LNQ?jkI-2xSBkiB>F-M8Nb78L{+ zOna(D!M^!6XjR)KtXs#wJ)P*GQA_IRq)=Dh)yb7I-nq!1Yf5tH-Zg2JpmtVds_Lz> zuGH!i{T;jPv(sKXO+-nez!Z5eB&^aW9vghp2P>_W)J8#k<5|m_C2h0OYK3jNJ@TdX z^k`3?JzziL9lczGt(z{p1Gy1x7G!@m%PQ$%8Ccb^&{k;8~1OdG@?!k8`wF^nY;g2}PVa8fq93xX_DB@-R#P&OPlJ^ut|`x&9k zNGQS*)+c@{TpA91Wl*UQ$|z(vfzAai@xLf=B(MLuViPkho;UnetJ&1+(FK>wsLz&|8`MqE+B z43p3#qcD<$C?sJ}{F_2LtHZxKZDA<}Gm0JsQqM;r5GjT;oNxG;POk9tcm+gWI)MT} z0~9noQ&{Lixv)_6Ec8zqjHm`bR?(G(usJ9^AxC4@(N($6XSCv7Hsi;jk``!;8;e+y zIN%C0)P|bqOu#vhvIP=sVFO#(!tQ=!fGu!<3mo_l#C z)v0e>^c17!)ByR6f=&??g(6L%t3_m>1ZE@Dvl?Iu6R=lMpZZhYto5lu-M~YS1U4NR zh4SA}Xq5~tIj8cqU9)uB$e@)iA7RVzi=!hBN;F)fHyr+W0IfW?ZI zr*L2jaY+J?Ae^<}asjv#@Y!3|I+Y4fF`0RJX8KA@VrI5$n&I1|NW<&mmw@-h0U|>| z$`AzNB!CQdpwmXqna(juU<@Iu>`(P_)7_*~v z>y^ORSGxJNRD5l=rOBv?d@?%Q+C~#k1k$UtCWH)RXagyDSGgY#YH)c=GF-QC+awod za2lxcfC)TRt^kJwL0s(yv@nL<(lgEfG@O-f8~?<1qIm;H`SDlN$^i*X0JTyW?i3kyDY`E3=#K3w#hy-YE%lM)1_jiAatI%TFD>bChFP%8b1C)b?Q)R!R1X;mMrCbx9oD(u30!kqZIRQqv+!UIGN-c*JC;}JSQY9sX z&m{p(6~||#7JCtktwo%1Y{jvW#s7vGn9(H-R8h;*HN{$S9~&M8vC&m=Y{gIAm-Rtd zSP>#!UDb!>#agXZBC1uLAxE`okJ;swiJhI=MHAb>3l?hPzAPF?T)`&BM4fEY&nzHF zSXMhpK>|=qar{%B5MiO1*#jX;0s)jfAx{A@g$Bsepd3}0&0+;26mE$LLIq=R8H;%! zQgDro1gIjD44Mal2kOAypiv{BRig-jVm4~yV!;Whk)rPbUszPz7ZHS8@JW}r2(uJX zjHDygG>Z+{(Najlh&07Kaz#6e1wN96FZJ4Xu*efRQC(1*+aQ6I7}HzaU;i~*+$bbq zEhH96TSH3ZbZuirhDnUIN&hEWBxfjKb<_`2{2ob23K34uElv!+(c&y7PYc$fSGC}8 zcn5Fcn;$_Cr8jmfuZYcAnF4_^&WQFtTQnE~o8u3M5+>%xR#$W)(U$CW!r5L%;1roiB z{|%)6-DO-t#@eNrW;Eqr5{O0urc6Agw-rPp*bhobjsn$W)G($jI%Z4aqMk$$WHM&O z7(^jy(qb~o>TO2_^;!GyiN;uCX-=bQp3GpX=4iCZYI?>U2t+AhL?p}~Vy+kjRg00Z zin1tAjHD&B=;6$58vk#uB=htpSJXv6@`hg^OwPj)7w;K^s6PNKl#EkaE#%_Qt}6k8A||FC`kc=t?&vsH zXpyRfE0CuFoTrh71dY*HLb$;lxPcu^X({lJmoW`{Fw$mb)MXmbV>-}e^3fehrUFT( zeLm)9s)sDDssDd?=9YGh1({6Eq2@KpUY({8lj`Z78VHlQfF0O?K)8VmOsS+f&C#(( zKw1lQq=iwK+8-LHSTuz^(Icf=Dm*?aZ#t@V5Mhe^mvunPrjkv!aLt8Pm=_JC*>LBo zLL{rIYOBKPtMcirjs%hxL`KqTNOUBq4b`~$Do&B)#FS1>E+$0CoWSX#Q+OQI_1eqTCajYij0dx~eN@kODavz$kLT zCdBI&Y(nCoWO_|!TNZ{=P#rJ%*Yn`gET!ncrf6F%k9-zORyOMLz+V+jk=dcol1w6r z*=7FarT@hO>5yuyU#@G%dMryQ!a|V3HjFGO7}l3IiJPED#Ow#u*ymPdOk&GhX(wf93IPEr!!ZvKd??r-qN)S^7 zWXT!P)=KK8?U2_B=g~2$)g+IkK8G495!OcMInpIWR%fg}IwaHLZQgbS z0{Kk;MC~XTR(g6&BAt#;V$Ni)q;$xnNg}SZI_}M8PUUFp&j^a;pWj>>5+6pHKS zUef1AVd(1Z=#s8&Ae1CT?bMd2<{Tpv8B}ftl5+s;!RnF13M|16ifS3oSMsKb_N+YB zlK;M%i?!s%&WT81giAARY>!f+k1}uCm2UKY?ClZECIBvHiph6yflqv9b)c!S(kx51 zLOr})b9fb+O6DxJLOa+)J=DS`6epN2kUNdSD9{G6W?r4xLQ#;yJ#=F*-B13sY|$cZ z0o&;TOK$>qEGbY3VeL&(B!MQ3?9@s@)kYB61<5AZLOWDXa_r+hjzv340V%w%FDZvr zQ7SBjtrWC^J#4ToxG?-m0fW)-KKk5Pk%BEy$X6+o-MNU1M1dx3uwAsUDNRpaSjo7g zYTZs`ce*MQZzrrO@DwvGy^icC5SFAQMS5_73o}kT(bKh2W>{!KJQbE6ZGjjg)c=zS z89l8Qmf|PpwSob(LQ}M`PNK`%R+Q%C|Cz;7cH zb34RS1iUgUxUe-x!5!N}EwHdXw1PY6ump@kEo^fPMt~4=a1s=8I_0nnmqKMBa}IN` z0id%jlY)n;OU0rp#{P5j-Xuh zE3g7P_yhTN^DT2(J@|q~w}LMivlQerDXgy!&(eh0LMv=RD-Ikf_`|N`Fia=GDAa>L zumUNtf7gWK*8*3N0Z~W6crQim6?Hco04^g?RR0t*W8N0{_ZAE@Q#kS_OhGH$LMgby zFk5znY(YV~vpsBfZcBj@lB*^gfZ z@F=9CJ%BYkFPIi=u;Czigb$7@i1WL~xKkjrT#q4}u|jo^;{T5dw3@TIG_hQVe|Vga z1Yy~PKp^)pD>oh;1qU^m7Ym~l*uo$qffm&3eAff=RCWxK_fg!6mu;{v!;}`#^fG(p z9M>^Zv@kdWxGh*;3s*HArxOCPf*y_UHc7fKk4Z`IaD2Cdlke{c+k=6Z0;k_Lc#rRc zH}dU~!LG=N0gLsoC#{?dI~Jx$K_Ka_v~?ZtE~WM`TxhU3m%{q8LXNY-t{VV)Yr;^s z0z2fhqYbj7QHVIlGheIqgoqLui1(&FJ6r3-kfVE`-!Zt`Lpy9mGarmSvw|cHvN}hB zd;4?@O949@MG-5(yXUt!uSiaixsZ>-7O+DxCuGDg@&DUOJjGAE6l+^l4*SLvr9lky zFxPY95YBZ}kX>}~J=g=vcQh*`!KwH1C?xV74fR!P_fgctK1=mb|AU0wQBI`0dBZ#| zs@C}W!#BfklCeTN_yZjWF1ojRVTp5R8^B0QdQ@}8CyBdY$eHp_wy^8$7G!5hriaZf|tHt#eH2$IRF&~{QT8NV2)KXELETNOt9hGq) zVIEB>#?u@Iw81`J0(9H7dE32Q`^5dmvxiEnH2Jf*kg-zyEZXfPftzR9$EG7x=Q1uABDE5>dMrfhLk1hD%$S?B4?Q7@e5 zzOaAWFg6VjL1vOv3)#rj4MWT@qy5eSgcN}iq6`!$MS>J9k_2iw_z)t(g9!}|EGW@p z#V7^}Zro^qqZE%KL5d`p5o1b_5ey_Sz|tkmmn~<;q$v~UO`SG**7TXPC(xfDi54|_ z6lqeWOPMxx`V?wZsZ*&|wR#n6R;^pPcJ=xdY*?{lqe|guz^s8OAdwgVk^o2&040f< zm7?VC6ue6G+O13Uqfv(r?F#HDQlyqBivJZiRQP!CV#o>)cWhi4aY3}0HzP*-*>7mf zqs>Yv+IHqqma37iHtM=4Y@)JPwzf?ccW&LgdH44H8+dTx!-?ZgTa?VEEy@`hb*VrJ zbP3U^D{vYm%1MM5A5x6?9ejB45Vb?>c+w;Gkd?J3Bxw5m_o6P3(x(a1etx3*@$dKF zAHe$r5=sYE+gYGWqWD1bJky2{!BJbLp zh);+Zis;XX%9|)pLQN|4Anx)+3n9D^VidkdMG9)Cp(wr7(oBWgw9=f!{4^;Fmr?@M zQcXP-)l{Qu!hlI`AM+^2u7h_~>GR8<-_Seo1 z>kPDLLzDKi2u4H=Hf&F;jVNuq<(4gQ4e&PH)XL3PTvgRwm)&;VWtWu*D*%aA18lLd z%zV{M^sYCR_!qjSup2l#?)oHeyo42AIN|IV?G7zB4VZ4ae%-v7Vx;Vw?==By+t{br zJPz48jZJ1n`N0VtVQ36B8HPX(`-UA z3YTtF@4P$_-L4|OQ|d0fg$@cdJUtEdThB#JirBP)-hTWzPBE2S(@rg){Bm>A-kkH! zJ@<0UPpv>I*3wydIqJLa`Z3fM?W(adVpSB@#$l7a9cg8ootAfMdEd2nyT~0^+~JKc z9(m1=S3ddAoqrzs=zojXfHtVdvR;tfxp(a}(`?RSf8}0^;PONI`(T9~_KxB93x4nY z^Cn(@eTms`G~?+wuK(}klKKDNe*xT|01YHP10E2835*IUz%)7oWDi3#D;+6pWq`d{ zaCJ}N*^bu3G}tjMEu!+#WuR>QB!kVpzdkO)Pn zLm&Rofb%knImm=2wy9|fjf#`RK&BqB4eTs-+7n6=*EjU|>@`yS&i$l7IJh;AM`7F% z7#nvn$Hi%4(E(fKFxN&lzL9dA0%C*KGDkb!5iATml`CK+D-4}ZAbX*ZUy3qF(1ek8 zv11msjv|`bB@Hr?37+pLIY~=050mK1Kov`qnYdcieV0ckNsA}k@tKCJ`U?w8i(1;3-&5N1N>OW zKsKk@jLe$SEZ{a#*-dYL6P!hHpuJ{hCJk+YM@HEQ4~rtkp)Kv5RAb6JWyGS$uyBO< z)aMFUxDgxT@P;%D=syK|mT(>vp$SFcyeL3USET7oX}XnuT+=IDMsYoexzpaJD5;47 zDK=s3sNnO`SA)#*-ImOYR#0VJ*{g-~75 z3Rh4NDSqiy4(akMMLJb>+^J-=n#wFirD&>`)aq23vOG@RwkU!rKO6Z$ z8gVe6>BQ|mr`B7L0u;Cf6)r)EyT;ER7rDtDjvGu7SBVO4jZTc>jiy^LD;|ube6yb# zm+9K`X|#&PBrJ7{dD6w9F=J=+D4fz#(>M0Vnl_a$9F<#N``%Y8qth=)rohLdKGYR} zw3QZ=lDZCAHIWIH287AH*H%wOiei+0dehN^l7tvV$ z3IDnPGT$w^m_8SG=Y5DXj4r`buqYA)qc*-}b&YA=^?kH76Z2>@KQq|@Y8HUn%qGdS zSy?BG7|KxwF{u_n6f{jxwUnvtjueBP%k0*+@N7tjO7v7a!M4nWEc5HY>|48(NLp}i zs+?6=&<$^RxC7O5aJeRBKmXaYfpLulNWr!vDkM;Kdm`RA5`jXEfgP+MMJrfA29D}2 zBbpe4;v_QQQ3w;e9dR^CMqx9&N+CHn63M7NGKNinSpsF2z$T=y2{K4z*0x&davbNW zpClnBC6a=pS6eCg7RbHHwj7|D-E7WEAqiTb**POAnjHzNF@?7ECMXDPZ;vLUQUBON zE719Ek!-hC4EF1|@;5JA$5pN84SgacMYR2#EY>$83ls#(aOvnJybVFo4^`A!|36Ubj(37x*cG#*FWOvWPCnkxPx%%N+NcyLf5CKhSq3(B= z0-8|Aj^iMifKLW|lP?Q$!yn$1Pfxo;(8(e1k`P6cHoz9NU@Iw%!WOSS6aTjXS&M@h zpz@%XLM`-trYKDM)}A*2DOj6_0NMd0%+50mfE~tw6gEu*HBbu9u0(V%0yQB5_HO7{A>JZ@^_Z^zw(nMKj{=45 zVQ9`Y4lV(7E(#zG?6jaAE^qr1fZKSF_JELqC<@tbYQAPl{g#jk6aUCACav2DL(3ox z@-hQ09FT!r#NY}--xj0W_GR=!&sJEE(msQM_D%{~&)YW809v6Sa8UYeui`d@f`)JO z31?L#T7mRx?ci3=TDE`{YK;`?&h}94`jUVQMnU4P zM+4I(c{~i`E^gzRP!xHp4HQb`i~>%Apyddsi&SmpyyIacEwNB7-MX&;m7^ULV*-~$ zO~`=UqyXJ!%?-_t&?2z}Woh*|!VwQe3fKYdj4ldj?gP;&0)|iLuI}_`t@waZInIOI z5TfkPE&?}U)DD6M+Ys0yFb7E?0ZN1&itY!EP6&x&;_Aw>s{aX_Fl)0cYZUv@AH#+( z-U0~p?Vf;fyuwT&N<{J~&+;ZsAtQ0`e(v?q4fq@p-PFVp4{qGh4j56;03^*U{!Jm= zFf*VJ^JwkWqCnDK2Kpu~-`ZjOR?-Cf%>&C$(kSlTny*BLZ{ZA)`8L58?(PA5&sIpU z8r3A~uCKVxk11#9AD+m3JxtM&cJ^2-smx2T!Z{TA_*RDH71TVK(P}!E)>g! zG^102R4JzdqmF38CAI*?9>R47rhUG%u!`cCmMMztZ$+>}BvdXv4-!4#=df5UBsL^( zu;bpq)mSP=4*!ya*i)q#XM}vsy^hTYKhsJz=S8zr zOL+qc5}-@p0szJaOPAAJh?6M96it!oOp&5-fJBtubVRVIV+sk#=G0C_W?ID5FW$7m zM21X1QRAAEImdKM3)N7;0tgTwQ4+#Ko6BvOI0fp002-GRaG>gaN}A$37U*cDf-N~ct&fC;zUVRHU-c!(MbHfDn(mboIc#|P^-cxWPxEyp zuq9ysl~2iZU;mU~9~LR%)RS;EUMtpOjY3f~mQg*`Q3+^M?NL(;#AlFBWGl7F7{|UU{`=jsjmhuB##zDkSzmj8S&HF&DH?WR&CcZZP|8h z&(>|@7H;RZZO=As>-KKx_HFYPZ|!z()i!VCwr>UZZwWVW^_Fnm79@;rEm2bnK67g$ z_fY2*RTtJyi=;>*Kmo|01zeyFT>qeRKR0wi*KT{m`N zmvw1Zc58Qba~F4ApbTiYcRTlYd6#s9mw1P_blac>fVT~XEojY3a-VlgH8x{wHd9+- zY#ogRKDQJ@*8sRzd%M?jt0#QDcYMS5dt0D-#CLnmw|q-M4+!7kuS6e(4u| z?YDc=_kH!3eD9Zg^A~^N*L2mlfDPbyJ+}qgz|wB^$)Fd4M{{R;mMKZ(;fh2GO27p) zxN|vpgGtweLl}fdxPwXfgG(5NPgsRTIE7hwg-zInV;F{KxP@u>g=-jxUs!`Zm<%=` zYJ)3+gP1hER8fieT)Xu+f&Wbk6j*x~n2Dblc|+HUk++Gf7>cJDi>;W7uULz-n2W!7 zi^JH9#kh;h7>uWwe!o|Z;a7Y?qKTz=1ME==g_w??l3wT4UI*5KBQ629Ab59JhXYxJ z0Xc_dn2q<3Sh z_fhLkiPIR0)fbJmn15TjdSF?9*Vuje*L-bxmT!5MW0{uIn3v(Vl~>u7-8Y!+_jnDs zm$le)+h7YExbQ?7nhlR~ht>QnIEl63a~=7Hw^^GFnUPDFk{4N=8=0I7xtzKAoV|II ze^|Jp*`3pmSs9f|!~fQL$90LtSc>2Hiu3u5%{Z5H*^Pynjgz^b3!01#dW?%%p=o)c zUBC@mAdW#(l-`-50gZC&wNLvsiR)$yviX}Y8JvapkpI|tL%Mf0`GboWr7iiSBe|sk z`K43(l1Un+ODUS^spdKU>7&8L7FoN>RBgqZ*<8xdjwpsevE@w!n$U+M!F=4M^7jI3NKy zAVz1qcel8y_;}r50uq1>#2S2mJGBkksm<4_hdF^CI-=7R zw7c8B?wDTlxL}E5qx;yS4I89?I;P1W*332mB4DruTZ6d(BwT!_1@WR^OWp}MSryscyO zxy>MsIsc#xA|L`6o4fr;JKT-?j*nj%Ag(bV*^}( z1LVX2vbO|~TLPY&s>?tCB!CT=+=+2J39KUm$e;wg+{vrw%-c}{20O@g`KrG+xEI)f zC0nYM*{z$|lsh)ZBfYbxnOChj?mQZ^&zZfgLxY=H0@@$~G@uMxKmyv_05*UP$e_8I zSpobw02G|E8C(HAeG4RD1H`<|ah<&rfCL(RuoIxo+aLinpoFato?*hY?-`5vIg0lgic2?r z4ga8b?K=T(ogkRJB}$+SZmlKcd;`)P%U@jzZk-Fl4jeat3`&r9O``=I9VGO<9Vg&% zlVFO=KnWs13pQX2I3R87-L0p%wviG|RB1#E!0Yh40tpbVP(EEQk` zY{1yhzC^a*=f;4iW!$D&+NF;>(0|&JX}o!bTIU}>r^+3!t(U3I0=v=r^4t2j>;E0F zQ+|PCjRWF10m@+51bo)Z0Jjl7Av%Bp`WW%KAj|Xnw3}QC%0THG{Pg2^12#YcVB5HX z{jU+51a2(?{+hMPz{-1H0$#nzbDINtAD6dUjiZ117hT`m8kvvxtslKoA>aGEsji#y zuC*Z3%b#~AAOKWV&U=>&oO}ZiLeEQG37WeMYW?49-6cM~4N8Di>K!1;lt{3pj0p(_ z%9N3UPyz`XTqY!tAfZGH7bRS9F@Pii0*@L5Mu}ixN&+@zNK9lXp-sez6Ix`vI1{4_ znm29Y+-Wmo85eDI3awc)C6Xve3>ZMFlOO;BUO0}xht5~yY-O9DA*Z;3z!-^eC zwyfE+Xw#})%eJlCw{YX81%d!b0wf3wkW3(z@7}(84J1esAxQ!$Kn(u4n zewOB4V#1b9Tas*OH*|=+moT&%V9; z_weJ(pHE*sfCTsRlT^B&YJaIoL=hlCL1kp%P(9^z;DJB+l+#5Q{j`$-4BFJ7f(ag2 zV1^h*nA3$4x^Q8I4rcTcNF>yNQ-~mPIHH9v#<-w}3ARB3R8-+OmH&?Q_2}b|Kn5w~ zkVF<~WLb43Nf&ua@zo??PYx!f6qR8&ot4#LS!H)t8W34!UUE0tV_{zTWp4)Np)ByqEVu0P%P?p4Y?6sWS+kUcQ8_5Q z^qwo|w|uf|?$GM`OtjEN1KnrPelBgapwziw0Gx)}tf{CrG zjDQrT?y7dL54QkWK&HRVq1$Q0UFzJU#_jOkyxN-g-a1j36B!#ErRm^edu{mPh$pVN zS<-fyGL|%&wA@3Z4u=cgdg>Hei4ac(8*Ywt1cGQxqZ-#JsQ^?(0qp?*qNb7rz$~gN zn0izmuR=BQS3J3rp`2+<600sao00000gaZHq00{p84G0`au%N+%2oow?$grWq zhY%x5oJg^v#fumd2Fb{=qsNaRLy8YLl*`;T6AaAn@M*Tth%*dyb1I+R4e!3)wWr4>xP)b;8Ur<1xDyS@i)Vr z$PFBoVjyZ%fy|5ko?cLB!`@$+J4CSDpcaF~4Rrqng5Ya;@iD<#RWFhJ&6Pr}50r_U zenI=|tv0>AfBxD0WC2JJZUWl&(0K;%2Oxq8g%=(|#L35yeF)TrM1>e$XkmqVS=eER z8D=Qkhj^73pNS=wry_Y8e%PXiFMIOC2w_Q>OpKGJAFhX%m7+mT2n zDbj<&fyWSY%>AaF0aJDdT|rV12PKwC_>|>Q6D4JU7GOg3okGTSB;i2vwaMm?)x8;% zoC(r-m3#!&Y0#Q;_6et-Zu&_OpMTy*C!sF|TBxFkE|g|PHO)2TV3fv(#7=Z!dg+jx z=5^R$b+PssW281#>ZzutimGOevDRu}u!jE{tERMaT5G1Z=8EgCo%VXGuewUA7i+r8 zDyy)-HpHl!3FWEev%5V=9YSrc^c$fPL@{MSM*-#2PTLao6Hf-wwvZIsp-bmM>O#ew zBn73!WSlZdcwwQ`9=fi9g3jmfg8%9%@SH+%81Q;))@x|O_}0lVp85iM5TT7a%Wp&Y z4LsA0baB|CKqh)rGyt*9jAEMg(;65^UN*REHcM1cZ@U1I$Jj*$R7eN z^vNOnOxMXk7o9ZGNH@J9&E!EH000$+k;&0@4GrzqTr1gI5)wE_(6@1EH7>hUrj5{+ z1$}J**d>uE(3v13w9|KZ8%0nOSz`axs6+8Jyl2FV?n|)XNe13^;TM%Hk-b5o##fOM z6fKkFu&$=+=Bs)(nP#7Rep%?GUxxWaLAOUgxL+fkZf}OiJ29E34?R#vWz7 z`0qF^6~(l{O$=uO^S%vL+Rq6TMN!TL_x$t4Q}k#=Q-&*+gxhL&W^x75ecxDBxyPXS z{fQ-D`T-7Xu1N5;?^SyA8yXY)174iJeUAAqKSbm43Vqxo9*ZeYYIq%7V14R}DTjYI#4Q>G?`O(#;}n_CEyJ+%!)d&(iA6W`_~EnS3ea+63A z*_M#&F@$1-Tb9K9bf2p9*)#yHh4Q43ik;}F-jgCwsZl^ay0M3t8a5^GqQ zOO2~IM@YuZ1$Ko@Wasu6$WK{{Ru=k|B#SjkUSSFWx5DI*5@SO}B1T2DGghq(tU9KGBv_4)U99Nnv=+A(wB2sT_)!GMHB~0K6Qs zOao{_e8t3)`0fQTh@8=W31T0D6eO^1`e#AfeBYcDMoxb{Y+(&NX8zhZs4$ibQEyQg zdJZ&1I}Q$&)xjClIGF!6rx|T%{e0TdOzE=zvB+dIQ_;>A+OZp!$7UwuCkPEjG>QiF zpZ;9hMU}SC5^_|cKmdSZMCurk(vWH)yg*DjtboHx| zK|&~0Az0Zgq>K;!2!qln)5=Q3ZH1Z=b*|^soj@-k&dFtTst1!_jy9Q38k1_j$3!i_ zOA1;T>ir6+G5`Om&wcC5EpE%jl-}}oVk(>8_~xk};%3vh=h2{k+R~K%)#;(`k&yYo zB2V_rrnu8h?f~}`7tGR9ft1CjNz6&^3oGqOr@JHM8!~?llGXSVi6P0Z*~eY8i!n{ z+XT$W3Q^Qi-T06-G4;s}j7WzSBBrXQsj9;qu^u;bNkIa(Q-%HGAw7v$0Km7u=xT*M zwov8-Y{LH+t+2%=enARbY!a=W+Cn|n%4aF`na`WB1u*?eNn1sM6H@MdrvLAe4`s6qXV8rs@`Kjvm%uh*#~AqD)CTQI1Fv(-al$ zfQfjrJW4MGk`xj*>9kH<%2ud3kTbpOiBvK+Y8T?`BVP>3-E?+=su}I#V$*;bk?I?F zm%l0Zt6uk#YIUJK>XL9wDh!2ix+_YvoaHQP1_hx3>YN0V8lV-e(9c9;76mzzffNR) zhXh)|3UzxF0aB=i^D?k-=V{=1?T~=M0qSNoCs;YPXvY{>k#8yuhZXH0!+@Jpk5-IA zz#0GbXU>!0>z(KWY$`gt@7%Y z5XCk1=@N5#s#6VRr7p|qN7WqDmRs$PY<&f1b zeaEx`G;RP}z;@37&_XNLDrlM5LJOan{9!9IoXyD&)Sa1BHg&h%<5qjPr6wTyPTen? zYaMagULx2pb?aRw`Ib=0C9Q#D9AJWvn8bVWEN#CKV*}NB%4r^!jQ$osXhNU z$8X&L0?@b|p}i2>H(B4(cAW&&Q~Wc?T=#z^VdSI!e(+~w8^>{BB9k`fB~dVfUoui8 z|Ft5}rGP2JLpeiVAtN5}g&qbMfpu07@|A({y!}U6g)~+iM^o}vY{5CI{u1|&!ey+8|vrv_@^c=E+&mQ*Z4 zK~{=J2AdFgWbi3>Cj|f?0UDPSn^0DAHYL z1JYczVN?vkKIde0X{2P~#%%|4dv?ehsH9Kn27@;vZvy3R3-~e#xFLZScXbhHFKAyN z1S0x{1h}|)5fEq`i6co6gdiw_YOn^YfQloy23fFq^#y~>SQj;^7p(ul26b~GfuEnHHp9_+j3E&1Knf@Kcw116Jb{K? zGG=Bbc$l=B5dZkpRz`naD(b^=M>y0$I=1bXfoSEQ6Vq#S?w823o_z zb6Yru=gEA;lrN}+bE@@3y7Z3an2xq4Tp1Bu?DtLixLfu2Tl{HV6R}O`BNo;8KNR+l z!c}|3H6G5TKJlkr2NRFCHK5nDpcK({1&Bf$b|VfcGwM}96ZViy2{xOcW;#d)mf3^M z7^BE@Gy?%&wor2M)eeJVnltJlS^#%!Kng+nZ~r!=q`(UHAaOYoqpc?eV~~qmP!t-F zi`pRpo3M^spaswAXIILkU}KuC$D=YjrZXC&y(s}oFdV8N4p>HWa+G!B=}OkZe9aan zZ%Jc)GgUQ(5YJ&nnuSbk_+2$dh9hx(B2gvWl0ZH5I70tcWR1#))CO&N*q0w>l_N2Q z<+)^Vifj=vS4{U5my&jsa*U4XWt~BZgtS-4GjyCn3hl53L4Z6;iiV8AjB0g(a+W1U zv8rLIq;r9Aqre8Ez-a%*Xr;ht!#WCNaFePESFxd)U^5rk*&Nsz8_i*>nt7aH6C2tZ zHpuC%wfUT8IMGc|Ed(DRN?$K*u)fWPIXTLMDzOx6ZE-lU7!j`!izj38rUUtZRZ)-% z;hpA@M(q+34VkhNwKMIufGv9?VOpkdgFIV6rab?8O!6@$wp6A)%Cng1vpvcoCpjZt zx~k)vWx-^$N-L&ev$SCvvqd|mXQ~8I5Cu7ei1wPbcm#bOF&0IKJ!u0=UdTgO5|{2N zs6Lf8V_P?pVy7XYYr@Awb!t3V2SJvKsYz9sZu(;2 zn!4NSy5IV`=E^r;s;ji?t>#*rQlPHws=D54ZR4j+22wu6>z7)4yl4`i!gNbNv=k2l zYrk~1ZOO37fwdd~m%6ki;G#=gi9``mq4)nNph+^I+_W94HnRUAKlsC-8pNHuMP&TB zmegiV4CJ9BdS4XekTQZHDFYcOQjs5Gvp_4rNJ({ULcjx@z&8mbQ7gG^gdAQfxn(NB zj~k}AJHe)Trr-BVR?DV=7?}SD!pI9moeQ5IAtu>#Q{i$w)mx5exDwifhMWoZpM|I=BnE9iq{I$Uzno$f1n5#I$}>X?QSB9P#`0eZoXrAEsRRtQ+N_lN`=v|E zQ(DPx!wlEfbbZNp6vTXlshN^6u zIBb?K0hbb?(C){~eEG!b$(NgIh*^QJPW;0ceK>;~RH3_7jJcSE!FD3;8Ltw?p~|^n z>bRTPt1%iB(+a^t!MSPtvvvQ`#-!_9pFW%sn!we6;kM-7KSFgut8)v@1lk+00}RjLtrb(o5U39+H$cdo6N8bB~MJXS^rFygE~d%Mz%xIV?RM0uj~-S{K10=#CbcZle)K+YQ&E0 z$qEC-YUIhVJQS7_YG41>Wq#pEa=dz|niybw-ZL$$Hfh0NYQ}J~ndru=VvLk38LYv^)7{__7&kD?U8)c_<;gJlW zDuK(f4HB1J60qi$0IPMeD3)an1!D0DH3^OIK9D+R5I3a&1+UcpOpNrky^30 zw~sq6#MM1cz$aOb8sur=#Kcxk)?~_$On?zqQ7Q{F{97}Woq+Cz*;pPS5yRO*(b5QP zlb4;&MjJ0q#0%Kkh8EII-IV_dL3ruf5&gp=@#c)Wbw8BR%bd!#@fUh!xS{jWxXURV`n|ffS+4ngy5wBc;kr71_207T(~%1|xopb` z8lDlVTSm^ra9$FCE)gwE5cMpuT-fH=2dLgl?Niapqy_1`WX$~{JjEnhPK0GhFxCf( z?8R=^>>eP1o$PuY@AE{y`&YbpZLtm3|Lcm>)JToi6_#42d-O_eTE>HXE_YJiajM_^o#yo2A&i&BM z9_J!o5TiV-sx@T;u_QM?cOn+#=TnK(wg6->&CKa zsu#3Z;@Z1!AMC)9t=THMO)Gf`j_caGoP?j+v3vJ2T&|ww%h=sc(YWsl0W$=T*e^d3 z2qY5v8sgMW>E2sJN71KtgYCau64LcVG#57dI&n zX4Mr@P8>UJ;#99zmCWeG-Bjn~#=o-2f09@JZU7u3o&EeVn^a?p&KsZ2>E^Trj5wGw z{j2}|>0++tJ&We6TKVK}wk84Sy9PyN62tDfb7>NEMeKWgA`{CU@_^guNw2ppU-UqB zH~?Wl;6Q=}2PQCpkf6eZ1{(@Q$PnT|hY}rL#CQ?G#RvzHBtQ`1BZ34YOM*N}5=a67 z30Agz>5`>P03v6$#5ptON+dRuL`ah0Cz2>XjRF-46sUwGQ4(~7nouFspazs4MMyG1 z(yd*QZe6JorOA;?6EKaSHNw-6XRW$j%Ty>+2~TS#q5Bl?*}Z53gzD!=dEJ81*4V<%jRKK<;&&!YOwJ5VF{y2H=D<52r3 z!jmK%jlu~_LLkBnFJ!F4^*sEDrwe-uszjkqG%-aKS9}Px6;m|8M1fQ^(ZUKZq!B6C zD2k{d9Z}Q~s2G7f%BTs44Cu&3f%ZsGg zF-C!;08ONeilS{GG&3S|AlG_o&P?ZaMAJ(#_e^chHu>C+A9JK#XL<3!I zN=FT4?K49=(=XB%FS7KwtoV%c!Qy%8k9tEWD!K6b=_$3OlHf{VPb@WAQUj}rue$t7Ypt}lQmnRMqXpJlrre{puWTc< zDI{=#rE9Oaa*Z}jO&!JT&;$hDuc5Y&WGm4B}MdMSHwR%}jFJ^aF zuISN#L1US{%%qfAWyg}^sokCx1rMWoZ%(qL{xH-~Ls2(Ou4xQ|20;Hl09FD~KBl*( z@kOt@-jU}P6#`o*B*|XU!laX))mFDfvnVOI<(_M9VCh!!q_yR~Dye}cmWa@sx%@86 z@+jqRaK!~q^P=+xM^of8;q6b(7$+|H@7xeBGl@iyLCo0 zavjprsl+%mu_^7b$BA@j-9;Xa*0;F7#v*?BQ%{0PC*@ytl_uw#TC#1W+LoJ4rL3wd zD(#Duf~~FA+DfXeT=PD8Rb?{XEW&~f>{w^tzkdC-E`Q&zlv1*({-0ufme<4@o6pM@ zG&I4D?NYy+6ngrUn%d3Ifp%J)!V2=6=BzFw5s=)ULSwOtJrMsw6|CUL>O{JXA&xtb zQQ(6t^PR_Osf9jMAj}S>vY{0%KIg&D&lD1y6&mDSu)9xt09eBr0`F!v8j;eXHX^8H z$cY`gntZf|wUdY_Z)L-x*A56fyM4`Td5h4}keDMGv4$#rOVN+q#w50#NJ42$V?lHm zI|C-rgAa0vXmEB%F7ZYryxExIB*#I~%}6u=V-uaUU>e;Zj3{`*6CVe6x_~80W`f#| zB@cy3Lupb$vNK@;B~?fDyiPJ(l%vf|$Us$s#)5nTRbUcAl3Ak9mdZj^^Qy)?Ue07F zNtu4E(uA5QwIxz$r&B9Q6oCK$m}o6TZq%C>?G~gG{mOL%>j>SlSfeDW z4M$9s8{;r#B(9VANs zW%2H}6J0iswC4LN^sd5`qOcZNtu;!*2I5CL2`O9R`W|RUyR78(7JuFnXZ;f67Hpnt zDd!BX{EU~xa5`(7{Zot((IZ`Y+B0sus;6h>g2GQQ%I_tsq$ZTM5iUM^+wlKUxY_pPq&*KDqxc!)iz&_kh4-Fh3jLeiiB3&!a z20X(67o_pd@8u@oYQAR?2sLe(NX& z4IAS455)+T)odRnFUGX?uy2+6V_%xN23YS^_MISz0)zg7o*U6%y~2nwrPM zWdxda&E_W4o0onHUyge&asD!v6gqA?k-N=Gn?_0*D#$1t@+OIR%+P-|z>~GWK~{`G z6Bl7`;ym+gHjC+CmWyYh+1cq%XYL|?m59YMC_$~7<~Qx-Pjc?OrIT`UG*O7Qx++Q# z>KH%^9V<7vRRdF+$xMbA&RIk1QyTw%3nTy;VQ_vbw?}`c@~s8`XvA|UaFqJmz=jkE z6!^n0v`!XYTkGjheHz9JotUUr3))J8VwtF=XNQUovRIS08SK_vi4mFVSZ%y>t}?aU zo#{DQr8>;L$=t_50(5FdA!UIeIgq3<0MrRW3Z_?w>QWa78Irwq18kxetf)FcoPLof z*Fx$Efcnx~(TXi3Tgd|3#FJY=ibY0X>0D+22#!LRco~` zaym+4L^{%0*X|sP=f%nnW0qwUp)Q}Aj@JzHk_SC1|68Ri&u+QW6s<`TV!lwb>a@;# zee9P9d*0HX^{>x~?9VsNQknk*oxp81a)X~vXWb3A62h%sl8YGVPMo99@9*-}6~L6b$ojX0w}9C|P!8lracw~l(L7<;GCNRSD$ zu%bbsms*g_xQ-$M4gbp*n6nY6u`wso5ER3jffFNy@s8BdNlw8EY{jxe82qD?Jm4yPH0-BZUTRh4FI;BtsLg%R;O(fVNvW=col? z+Yu?d5(HQzFdT^YGdusq$iD20KYJ^Pv7;RDA|3zGyNemNNK!Mv0ux{HrybcVLNc=r zBpLF%KFQFsJCcIJI;_x0oq=dPfzSf|W4J}JvrLRQBO0a7TQY~sv&X6uI&vtR*}Ope zvzy7Ij|+)fnkH9Vmh+i3NsC2L)3jRTJzUg9RI9~Dd$e5S#Zy_WT#+qx$|mf2wcney zY~hQ*D5qPKiEPOhUZY02a>A9$y6LkoMfTzKExsc}WG+EbR#B+XM(&04A@-LjD7V$IwMtxucHh-gLGj4Il+iCEf* zU7;=vJSG45+sZGDLV*B7GQ$ldgSUYogI0)u?-)mD%ew6YyC{4z30OL(OF!;og)-R$ zgqXW>9Ee4FzrVzY@d_C4!oLtojMX8XeG;#2q!I|!BLT5Y!r?aI&<&B14)@wCO{l~y z01nCV#GXmK3%rI zvs=rrV+GxCIxnn+IiW+SV+Ac}i8)+H>7&D_Tgxc;4?TfLIg~q!F;5bj7{$2H(CCy5 z>O=oG;TJY>2y$DUMuHf+DhRbS06XnC4-J?s`ARV>p+=O*!HcjW>oPH9)NPY~+zT7O1qfofo2x{Xth?2vCSR^gjt7vmT3ANT?g}#hDFpuKEL;a*u zY8O4_P>4%Z3RE}_O*#mnRMG=EkrUXbDJmEYSe)!Bmt;|>$leNhhK3By5EyuADpEX$`g^}8_XC&AOV{$P{%tVc&O z4LcRt)G$oP8yQQKS0IYa%)%*)i<_d|wnsf6#w1$G6Gh6}6Fsrl;~0(8)67}~mzbDE z(B#_LJ5A99+gI({(hNpd%}lFpw6nF%aEU71VzfkSO|``?59`1S%uo`X66R1S`W(f? z{MTwjPj%gsE?pDFpr8e;*71VRb=?;YI@z5~4RAHQ>hQY^5L3TI55DaY4il3DeGKms z!FC0nU(>J&gxB#%p$bFL)kUF=)K`EDzy{e-78J1&BvF_IHXdBj8@18h-QE8el~Eh@ zNg9<{;SJuT(D*hjgi>byfZh=kxS!HtGa}! z9l?z<)tvpaAcz@Iq-|Wt4Go}0oo00oW=%!dZMgjPvjpWt_&p6$tTUw@rN6zucdAuJ zGh5u6MOZP_R=q`3EnBfo)mQb!3AW$}zTnmL)n5J84d&Gk_F!4ExRu(J~Th4Nep1PvZKj(RN= zzGYWK)nB^Z*EyS4|CP{##o{Hpz9(9bs%a^f%;Ja@bkPO%O1UD@V%PdV8Z^sE*q zHbg%y9Y$4+p4E-LGEDnrC+8hnhSH42luYV%Le1*YQ^qV{bzieuH0H8+&8Uo5ysgk4Ze=aOr)gFk zrp2Aa-Al&Bm%Uw>O8bq&y(zs5T*Zyn*O27bxFKQnyacl_DxMcRZ9vMk%a_H-lvKP5 z#? zb$V)`d$HBw0muC5y^G@*}e?AT};(5QwWbj1izMOQlkD+9#a6 zP(($2=?;{D#p7X3h=?@i(c08x)dYrXWtr6~T9&z z{?$vIh?HXDm`P^`B4zMuVVqW+^#mxm+&ise>VMSBMV1IYo@D+bMr$selj_g$Y)HHO zJCu|*BQ6iREh&NvT92fN#9n9zz1KtC>WGU}+jeTlw4MLOHVvLiV})>v+jWU30%IOL z>5X;Rj74MMcJ3?=Zj!dq=%#LyuGocE%BL z@#C`zIcpT2x$MeXT1TB7*RkZ*kP~dxm(U64KoUH}wQOzkoX`nk_8!miELUG+ImNN3f__kT=3oB=otOH$6x6L-k9sLKhx3aJLDgNw ziF3Yc)t4Wo-JL@z5(OF;bU}}X=@ixIL7&l`4Cx&l>76=JHAd;;E#sBu-AQ+8LXYV% z@*u-WYCP_4&gd(P*%ozKI4UC{LBdENMF-yH zZpUj`G^RlMl;b$KD(+i@Lpc94!Q&{^lbH(g&&9+8-HcfcWvpV9{ z?%%GaI1DLb@*49(z3q9`B&`0#Q%v?gi`bu{9Nb7bF8<==&hDLm?l=x(gspDqM%dPE%ROWpW7Op!?2p zg1C~ZE%4XoZ9Zu`_u6DGzpKNOP6Yo#emPpEZJ?u7<$lHSY<6DA0_{|?_k5vuLMvO) z5*Xk5R24T(uT4!7hy3N*%n?`HT(tZT4{=`ft=POZWCjctSLV^bkl|4wd^&tsLiraR z`@u11tiMaL-}m0xVW=$=I>~I=_w4^Ixp6j2Nzb)oK*k7hrg)5SuQy@9yNZ_w3f%x2 zAT`$^2vZG_l72Uzu$8BN106IyB_w_SP>5)nJ?GIzH!466|4X;@^ha2iF0rUFfAg2I z_jmvKm;d^w|NFQ9{BODQxBr|32qXyv5;P#tz`%qA2O4PT@FB#A2_jN#7=dDhBo`wf zsp#>e!vqK#PINeuVo8uGL3&K-G9<*62w9$FX`rUfoH}nl1OU=!L!dl&vIKxYs869S zb-pA?l;uT(Q7a~S`cS6RhB&QeHR)CBSCueFVg*@qt3--ty-uu|lI+m958=)YyA~{7 zo^92_1Y6c)N3Kr^UL3d)$>IORGYcbLjIc3B#*!aTP6))Z$OM-WXwJO3Gv~_!FH6}{ z`m|}&2Bb7(En%U7EnCLOmaRoLZQQrFkl7@gOl>Z;$L!wXdkdE-vV|{Kj=Xki*`;q! zPd$2~gw?3Gr!F1E@MF-O0gO*To_t-IbY~iL2*o|bst?~cr2ld1)QV-%vX2W+@to3|$5U z0H+=pSQH9M$&!FbI+Ub?6WL0jW>1+%5_%05`75vthSXtMxq2i9g16q<)kz(lVtRdoghRNBm6hu8t%kjkPl58IA2a}*&f4iPiPTD(kj`~hC&vOxJSfd{#A#BZ~i&x zMf!U9tEEpax#{JmyKdJUGgQ!*NOajyr&!yrDVuD*xx~~81QCD|gdQq9@xvQmJo3jk znkN@Azg+31x#OPl)m%^!s+J*jq$;VTx>_ttaeov=gcwp-U#kYl9np~~P1RIj(6S`I zSfSgGFuDKv512_7IRWL8Qs^fWT8)oBGyCT>X28!^04Utd8Ad2IC=p*5Bpd)W2xQ|TIDxKtHBq{l#P-;>~qLk$Qo>aOBObJS^G#!}4O_`cP?-~*S3f!qtck0>kqM5vDLQ`qY zWoc{b(K$& zP=b8?r?6!5L6B$x6b3LTM8c5IkoaVhB?OS+CP$I=Efg*fyy&<31F-c>i&?Ba7E1_c7V?>?CSYV@{Gpmw_9g=uQ2<1PV$gOLG@Xq#tWy*k6~{V7r6vEZ zX-eb76r#2O1yDe%X}apx#1pnt4WufXNy2D;>c*G=;Ut26W#lBP*hVJRLQA5Oed2e= zcwO+2{@EMjAbMGVa+W}qQy?xu5)K0daS}V1!ovuV3EG5cVQ}=q6n@$?ON^jU!@VKsGuQN!P3{bl;2J^0( zVuG6t@Uq`c0Z-GECVJ0{ylO6w3(pg;rEoVr+l3KL*vk?^3VWHp;J1MzjEGR^lLd-K zq<;<3!eT1|PrqTLaSj%!RR%gg;8OUFE&VT142n>lJnLEc)sL(ii`mt}C$aw~)}F zh5)j(1^@?FB>d;bj9A1GVdN_f-4In9_(1&hEs6f}N%`US(m?u10xd^dA61gqzP>fE ze2>AB2z zlX{e*)GN(wW^+%0+EX>z>nJYxP65!1Z|=s8vO3#|oVPTabz_X6{$&Ag1UEpd4?OL5 zmail4QCNdPTp)c$xF?mqc#r+r6=Xdm6%E<&hCgx_ku>(O(Ne5yQJ%r+vJ_mHv|C0m z*-`(tl%*|aIqPulE|~w>{rLoJ9O71+W>gn-43v^ZR;5tojQP>RT! zu;fHC6j;yIlwHbHfmV505e2}^u+UVFm` z5=gX&CVC(Qz7aW+QjFk4+1N#`AqeB`nr+oqt)>6t=PVm@L7yZThjEyq6H0+3K%YQT zq4Y`JYBXW=DarFi6rrKq`^3;K1)weU(#&)UFr7&i)J`!`0GIL3^8gQ@R8ydcWJs1I zCt%71WXhRDN;U;bOP1s{bpq7bTYNDA14NIw<<9x&TIoeGW1bYbJ-w=>B z-rm8P5BXq-Wg#Vtl>`86K`|bqF*<}*jshyeAXZ`}8|b1(R3$}Nr2&w^Y>{PGMub=@ z7%K?l18%}qqGd(+29pKjRk|f!-XcVZ0z!p?Jb|1ScA!T@h3KJNBUMWjWIZ4wXlF{bB!UnO04J5ExN; z-JKKROwX*@98!S-z)S)Nz^B07+tu9N3|?jk#2J;7;t@m=V8y8r zQtv5A!bJrCARK=}M5|fes=?OVER|FB({2@GTef9IumWyY1Oi9_87Qa$B@ z8Ng^gL|<}P;#eYsZJ$ID(B$2xfAas042}|$uGl*w-zLptCnX;dnxp;rVyFR5g}6p( z+$JfI!Iy?9D}3oD=;riAorwnI6Q1HIY(YRCBs?{j<|)aX-k#8TAD#wW?VMqqjT@)z zj=lNL1i+vB-N~g;LKjeirJ!5<5lS`1RdjL_??eyaiIMfJiS_*7_hnC3^p}A&Uy~#N zVjdWVFrh@XT7Ig}v=pWXh0uSHLMtF>tQzC2!YYEAr~wECXG8%jutKfQ>W#`}M4)1= z-sP{#s$#Lmtoo{~Hmd=Y!m@hAg)*xFTxioh1YAOEF}~1FVQ5tzYh2PQOPpYd*@PSc zhTh1~!c_>0HH0$uCx$5I>6rhjap~giT@nszrVU2WzTyhvEMiK5mS3ozk4>Br5)1{s zrXEGX7!2cV+G?!E>X^2IZ}_Hfmc}Mb>}>*P6mns*`INJDcs`NMTIb1h0R?cvE4acf$YdR!)f{5c0>n(5r5*3Y40^U~nph7P zuxA?a)qeF=8DRy$Ch12Q*nS#7COkwIwA$gIn)ZQ2Q`MZn;b@6I1dg^S8^pzfPUwwN z#M;I!H{R&n&aK+MXe*Rx+P0`e;H^VwLPhB916D;_;;66+=3xD;-2QDFBrcD#9%%(q z{KzQT_Khkb62mlPg1P@Is=BM!8ek(K0l0j~@BCUh*5mP^F0oO>H};r4awWQSj^;$= zDd}3VMH1~2n?1&39#JKj25*>_L72vBZ)ib4HevE2FZ9Kxt%50WNC5Oj0xKySln~mK zJmlR(Bz%I%eAN!PQNb|fUtP(pbl%}JxnIvv!JrcF1e}R9!5cR92^U1_{ke<)2m$Ww zBu3tq8B)P(aPRBD50)kt>S#f#Vl4t6SQa1{y&9m`ice@g*lENp_hT6g^k_he!^9IEBszcDm7-&KYZOI4w>WwleOI#?d zwk5ajBE-%x3j6;m52LV>2n7;|f{#iBl}bzu73d7H;6%04VnX8S^pB|)*8_7O&0z~B zd6YQDi)7*)8MmfpKAI73i)fybX{Odot&2~rMP+)XMX^!2Y=yeOMJC>lF4CqTM{E%j zax3H}aGEKC8HXX;Dk*peZxY!MPq1+|)l-QfLaZ!vIt}%-%mi#_%reeLd%&d<&*k5?0^s_p5^uth*yY-$?Iu{WPE51JiL-(zEH<0)Bfkq;STo>y z1mszw5>Nj#8ys%jwlhRHBah~Dfw+paSX<--T9fQvMSQL@_oqW7+;@;zU^r=fJcV99 zU=-^Fi-b$%P~42MDC#ZW=$%MJKLx~iDVRPkn8xbklJxWDrX(P*N~iQDj5H~f^h1GmQxycYP@5lk#j+9vz?d|uQWq+rG)aYD7rr-aa(r>S#p7b2T1`7O+BJOu!;oKac?FD@9B} z8y_sYyzbyE#R9qW>a!S$qq9N9-;o8~T9gcE!zW30;x0zWd&cb(_M8Kup+A~(F_=h{_jjni*Ld1&axLt}0G?KVD7a)G|M@>ipW0(JU zEwlqI;siFM@QgzQAmMW$rGw;(wuY-5hFG4VC9pxK^@S6(RpfB$;$k>j>7}vAjZE@B zfg@K`;M{x&-aw0e#%_TKpM4@sFuL?eyC^&Fc^g>sC}=@$B64hEb4gn>th(rz;_wqD zFKfikxBhSrkI)he|1GWMD_1cz&7C>$(;%z66gzZhJiC=DKJB8)KZHvPAN38#?yXOQu z8-Qd##9`fS-|(eF0On{9hC#?S=<37)(+2`KyNNb1t{S|vd$fwhTwiR#L`?E!w(1a; zgetC(s3pL<|JM&nmTS@+n5Pz4TbKsDb6yag#(71ZAINjJydxu6C}QlyUbn4^w01`_ z)uF5BITc4F-p7y!C%8hU4?U*~z0r4q8E~@h#4MOiz%@~4DSwrHFOhlO-6)^Qn+3sK z&6$=>wbTH(fIBVBl3k;44OQ_KK{W3^8bEfeJC*MQg+O~r$AUR0v z{gKZ#0Bt~$zbmxEk=Ft#5D;tVy@ywXhbMlwntMa=Jq4-w-m~~*HIR%W`GpGqe&Ry_ zggA}?u)*S=cvVE!LqOwtL_o~D&pMLG?S{+XTP^s6l6=0Un(1 z8#LYP1Sb>-n&X&(9FjM}F%J40(L1TfI06G4Lo z5gt^Skl{jy4XGGVqCm-lB^0P&93W%>6O2`;fb5cyO39L3xDeEW!~l{6E?pXsnZSSq zDHNqBkuXJqOrJl22K5O=ivcZJ3}iW)RH#ysI_*jR|8T=8K5il?9aVGN&S_Hz$am!bq$P?nFOfWEiwi3 z^{W?XRn(XU#f6lIFEw$r4# zjq(P*+UJy@agqB>eq6Z$ft#N@?;D+Z-?(s_rK0c_>JRx}yIfHAfJu$2B>A%&DJ#@GZv{v6a|i`+28 z4L7^)!ptkOWJ1C|5e7h|lk6gQ~<7-=MvmY|}d020VC z$1ZdvGNmrcI5J5hmqb#@Cz(u1$}UpM5v2eW5MY9fn4qFd0W1f{QUzk|MeW(@x{)!;i1wgaXb_pZ+wUs-JlKDH5$b^e{CLwF{~p1KMdt3dtUI z2hzuUss~a7@*3|aO&?|DKAGyNrJY(fY19BwT6q*QxRL;`mU>!+4=5;rV#feW+c9v{ zM@jq1EH-2U7O0r=w9WwW3_}8f5FrEAfKnfw)Td_+2*-fav^5|M1401@H4^#yEViy% zi^8=m*6j@_*D`^3tE#l1*WP)560fDSxO*!of87!a;DLSrBKY5e5tc4tpaABpVbmV( zt5JP_VvINh7(IB|_c9i^JMp+vRHlga#O~OVS8Hp){vu@=z?KEvVv{jOX~Sgz$=F0@ znQa!Z6;|3{g_KRSkbtEyOw5JG7w+F_$9Z>D5Z@XTe;eetgYsHYcoP3sU!-P zm_P~V7T|St(1yHx2_Pqj3r!!8r9;TfVIT{GNizCGGIw##g?^Pl?gM( zCY^m#M=ATMz)i?djCQ?R5xFwTYL_ev#fUja`8C384|P%JGNR26C*$T-O;hCcxU(ClW{A6u}36~F7x zT;`I(0u{(Y5@LnV_QMLIWhiMq^okThXTFx0Xo%%A(TdoFL{7wrMmL(#6Jw;K9Chg; zWy4Ycj&vj{MTv_@@?w&}$b~R+aY|DvQDlLM03bqvUdNsSHRwTsazhiotW^z-RHR5j zGlo7?hg;Bu7Bpc|nX#ci3hn47fQTC)B8{Xa4V`yj@|~2zq-rm6snxLdBAeOF3|s(- z-}F{Cy9prxQ;6G7dAvq-mq$%>D9GJp?o5D13!_kktfT zq1ByAn#vY{%`9L;c}>2AFepk}4Q5UX*WkpJkcBd*a0=xbK5>q?#2KJ^*h9ek(MP!- ze4qxGyB_H}*M5g{W&;?)#Ro%0pWB~n1XRALJ{M*4xy(7 zlw_`=n~Tb1$OafPTN{b5#$gk+?6c-(Mxi>HNO`Zg+{_AXrQIoq=rd9F36+0BWzr;* zL!(liS5u zaJp~Ni~Lh<`iY-{V)vfyOjvcc6ES)UrKtIPr^kXq7Jja#o(prBsZnj|?o2vikwz~r zZ|2bIwaQc-4U8sf-3}f9Mo6O<&FHVm0JD~{PD6)knh%>sKIBl9B|s>H*PyL6XxDTk zAIV4+7jU*9P#__13+lIpS`f7rWC{YP$VD>JC6bJ!0!uxK*b0)8!F56lC}K8tBoKw3 zd=)2>KrdS}x0#}(^(twVNx`k68@B?bw@hx$Pkc#c;N z&-}t42Knc9{v~k#?#;nq0=F|=Wj&BRK{;;UtDC`%frq^3?OodFz|;zJOu|I z`RjU6fp&j2YJjta|F{C>okt8fqWKxUkddZT2(M9^i$3m(9Y4K10`1!VRu8}0;3_~$c z$5aR~Qc5Yy5I_dhRDkqYT@f)EJ5>5;%| z)h-XA2nL>nV$(d0)Mi4SCMOB0unIp-V;CmO9>}2f=(HqZ3q0zf9I60)CbKlD04qvo zbjH`@FQYbr6vVI{h^<4E#-x@8eO@9D&!TWx%86Vm+OWoE+@KSbs@?R43bw=mgkS-3 z1l$}k+!lfhg5Ykd=n$1kikxcQyzL;S%5YMuhb9FrlIE*M(V&1J0-^xP*vbfn0?B?t z6|Eu`W#U_|Vo;ERE9Po8e95lxqpxa#45C8yt|usb0kk%blordCV2QC>0T_{SuK>#h zy{;(#qJVTpp&p9S<5~_Vt|A+&EWf}p%0LUt#;WXO2O8t&GFH&*WD6QGZXEIB0wp68 z`i!o~?lFo+H;l$8zzQD$CE$b$ejX?7mQ0&OD7gYCx|6mKKPOS~*8K3;7&T89*1$n!w2^!}r-P;%C0M!!-oqa=Zkq~L~9i0ot! zLkP@vDrty91dou&MV{!TY{d75Z^C+{B$i+b6kq`aAV)yV`J`_un-7ep4@o+KD#@q} zCPGUptP7G-{DkC8&ZLcqWJt;&#*oNO7H4Yi!dkwH#{>%h2Cm5XBL95H$n>)QyoD+M z($Oygv*o_RmkcW?q_Gw>0b95X3b2KAOoT8N5H*x>c09z(B;x~(X@2;^7D9;?gTj>} zMJ`ZDbxbeFj6xG~X_f*rl33$1v_cxei~>Q3F&xv+e8L8|Q6?~D?0D12glq_fu#tkW z$cXbdiOe{C^ElmyyQWJD7pBy(&^ap&pY#MG^X@v)>pUopI=6E>p_4m7jXDeJJEb!V zFQ&X+>D9i<0A{izTg4V)F0<^R)^088T8p))r4>e@*D%VW+7P42AfnhXH;j#a3XSQA zD79wd-kc2(w?^8e?M1qPsloP&4}j|D?<8^~7pP3?rbduxyQn4c(At zB7|m2mf~VAap7}u0gG1l^CkULaFz9Rt^5=}0MG53 ztMOzQJTT3E>=q+`;)bo$Q>g2KIx>czDI04GQrPerfi4yqE(v5VNbt^&u zxWH}9z>8{XD!(WzuZ>AI)C|;BUBze$vaKmmYziho-B#>OM4}3cL`Rs9Nz{Zz?g(H* zF(%?t?Br5U8iuW^m&kbZdm2`hi>~T?%r&xCCRQ0xvA}167MnJ9&gd#*pRtwjbOVFd zw~R+XW(nsGBbA31%nao#Dr?RB&$n1{g@nvuNrjmIpQl*DOf?Uq%3Mw+d_@$-0F{j_ z3v3xPV35kh`DM}ZT704&b5nyEPB)5T3noAcC}0ZWStzDp0}Q~PdF;rDlm3M4VT&#( zic>i?bBC|cJPrDw2nsth_0ra(Zo4znurqE`4Lmo4)u!{IRc(kVdZVG!)%NzH0=GYB zW@Zi;uwu@n7gupr`aVxDa{u$9jJMc;NS4=UeOiuO_E2hA0s$HSB0i`pbCG^)7TcU1yLVM1yo;fQQU{$`Rd z52}2zSraZc7O5AT^Ku|jW0f6AV}*i}Ru)PBY2o7dqAQeQw>;!<&$N1c^=GIQDiisJNWI|}Bc7{~nv?I$>Z0t_G`CLky{zyP=)Yk}093NCY0k+_q$C^BIc9o1(?IaUM@ zJ36&FGL`NUk~u8(fEbT{@CUky7&Rs@@Cd_I1CQ|fqIs=5@-9-jn3M9%qJF|VJ(%;o z-+NT|wnsbIq9P<%i#0wmJF^_?wOEp+!LcZYEQ}32C$%66qCmkrw!xe3!5h3?UKM}}*7aQfN&Nbz(p}xvTm_k3rH>1|GL1}v!^dx_B-#9I zT#U}*l9Oobs!BIo=L>Q4{v5V?TUdFmqW&@gDzdjK&}Eggx0MY=md$rD6s0IK8$W7e z#yJa+pkIf39Ie**W z^`v$HMqI4UJ~TJ%fSc?L9k{W!w{!by7u^7Gd$$=KxG^PchkVE_TQA4ZS#@0buRm=L1T%WXeB)l0^r_2i%GJEnb2W+LQpSGv|yI;CgD^nO&4Vwym?;%G1z z6_ExNi9HD-z}Q_PR#qwjk^pr7G29g}JgB<{Y*KVZa|$E6Pj(rCcDa2+tESt#9YpO$ zrx@`hoGScQw5wfoAv}@U^N{N#0fq<*bzlQ6#y4z2ODdJE)0`W@5v7s}(huN_Xd z+PZ$(f*Fg8?8HDRh+8;hViW%N9VvdVBFY4H)(pM0=8yt`bFNeHQZY)_8|^$X>KuUe z^O`To09IS-I0Z5)KIK5`7KrXkFK6P>H{}Fa8*zmus!mY*vW$Iv{UZIgeFC?C0@7sy zw>dzB+bVf|4BwBu;D{WB3l7mJ6=e`Iy@gnbk1(PUTJJ1Uh6}H|k1&MRyX%Yixv?jR ze;B>XYwZyVjPXko0;8}0_&e|Me(wSNRDkughKmOSg?$v9!519DAsi?fOk1hsS{+PA z#BwCMbqT7VE2VG6yC9D*-`k_F6IR^w1DW%uk_r?c#922iC#?L+FOFG%!_?%A*M#c| zHl+A*3%<~U4T>*Ed2Ffv;ABzXx3TJ484^e*VpDr&g{3faw&a5|In{2_Qq!8H|K)+3 z<)uD0y~6+Qe6xe1f6sBtf+sP;-((Y>6xe`-!v8>GOLbU*gn&6`$9c+X2hpaKoa0~m zA1kr71<-AWqyWNzKq&^aY$#Yzivdjn8w#XifJ;LP93W0KaBzaaO$`}p5+m@V0Wl0k zE$oOgWXhA8v}AJs=rDnS05D+!scGP5O`SFy^8D#DC{BkoV>;BCAc(-CGkG>-I@BS8 zp+I*E?HM&{)tpziddKFivt&4s(5nb%9T$Luz<>L2DhtpxlP6P>+7|H zcliz+{CDriw*b+MKC@wgh9#+$;@&;l`7ar&9QhH7!^E0Id1NU{CLjs)QbUj!pvo!+ z)`Uq&f;II2phHQp=TH``2-FHp0%`$Lha(Z_kQjn7bYVNTv|@{itz>8b6zgp=h9;v3 z)Q$lxlH!nIkqA_aiYeA&z!;*;DA0_pm{`k?GcIWWD<`ISq5(6Kav>`?YC_5=7d~ks zE39Z~0F)^DNG6vV4hU0^HX18drsO6#hx8ZebvxHhC~sYdl0t3bMHnrpDe*6QoAvDTU?5>mxFl}yp@dh4{7UKFEuP)VfTD>|hA zIgSE}t~Wb+d%1Vs|Fu*k8KXFk`;xZXuIEV{;S>s<;TRB3D49sXwie1C=8&F#PB2A9 z223!)0vcT}kOD9jD$o{Va8y!<_6=wsOy!@CQuzh`TN6}HNezEiIt2hkQS)z_Dom}G zO6vPokrlrH3UGh{1Qr4JV;?QB1uk#d0z33#BEIZpf_$k3yZ}Qx!W3kIgxL{eBJ)AF ziEuI`luUZkQ-)HEW;CGbf@wYzni#6a4V|Duc5tSh+}vgf3J3xhjzgT|80R|BGma63 zgTyjSK>$m54F#4E9ox*tHa6o~c)TMXAZpP(CqzO7)>1YDz{ddbF@UoM7zIZEkt9YZ z8A^dD$3_DL$N*%6$tq~^x*4GjClQKJj?TECC>W4xjWV30>Z3-(2_!~?GbG~*vI*7w zsUeNY3S!OzCM$i(Ay#Tg=p?zO(dA8booo`7Ou0$Yyu^r;QM7{p6|JxjFzZ#X zd!-a#`@$E}{1q@R%y2aY%56cP}y^Z08*QrJQg{N$ExML`Og zIiQ`i7L_nGN+fXG8=OeW4pu10A<&3Q;=))HNW9GZ-&FHZ*Ay8XVn7N9U!@S&6iw%-rZyJ32L3RH0N-yP3*7rq7JVvd zi67&M6aQ%?y6`ttC8*ZmM-m%UV zuRNYDp2x-NsV-ZUCLeuX%YX}EeQ>=82$C<}B#>`)A&1H9VYawT8&e^DZP($77s03vSkKVwx+RCy|Y0Bt9>FQv}>nX}tN5pz~B)Nb)0|c8Ix@@H&qSs& zrRp5#9HVN;ho5Ut zh%$k;m#ktPaVq=XRKc}6?inVGVIJV3pxCV3HEZ%J5a7zzcJ@^AZH*fRjvST2mTUrd zj}vX`Mkl$3Om0T7^OECX_c}62!Xbdv+v+$eI>+OPb&t~< z^b#D(Wj*tJ9g)~K1R{k()bxT4V*?aTAj75rq9oFVMf&!;b<(=j%6Ai_02qK+Q80Yd zyX|sw`%=-bAAkRcVCG9rzETsg^C{ontib!70#qPjI0zS3RFK2nedt{p!WRSBL;ew$ zlV2RHVTL@g9j<6cEjIB%A!Gm}Btn~U83$<^NH$@#b1Z6j5L)Sq86_{l$=z%Y29xZl4+cJ3q5g$%NDwPKo zq=Epa_dbDkO>s07u~a0S<`9F$3P55bN|=P47YT^4Bbh)p_8}Ni;77V-d|AOL{t-(i zAt`~8HU^LdSO^n+1R)f%BsfBZ*u)YLn?uo`!$XobQ7 z(!@R8H96R1P3hx>_yH3BF$UnYYMiG3Z}X)pr@~I9(kkZmZ`$^4;g*ZLcy9B;6!VlU z`KE5-Bz^wnZuT@#XrYTWaeDnUZ_Ah!eHcI5qC8_T7vT~vtk6i$)e09ie;H*iCgLMu z(h9Xe3Le!bPQxg*fFkk8C~QNCDisAN&*5}Bo7 zIS@f8!=`w}*I0~&S5ZM;!5DtbHx}gPUR|Lor85#L~$P`j_Xnv5C&o9cqHl=FBrroDROxw z78xhT7?a^eQGgx^h=3g!91DXAiJ%eT9kwqQIMJ(q3V)C*cYB6qO=9y*oA0MSS3lU3kG)H7(C#;i>7*dCFR#}OY z317nyS>Q*4@gN@2h%ga_YZrzqIvWsWrnPG+;fB5C5P3)nc{pb*0w!j+G+D7P zI3Wcdb!(y{homNINeXIbAtVzDlqaDdK;S2m7*}F6qYiearX#v_b3@r5HJQw%Pt12`lq zhA#;dONt-DMOmG;B*fIuT*?5nKS{y4%qkw8rAta3?6H#!Y z4G{{xq*rsZCmbOWTu=gCu%>|$Y#X4M2B1QhQ?_8Lb-=(2HRCk;|Z zgLOHf^tjF|tO5x~a6A zPyO_ZfGTd{M2z=_KT_jP05^W=w1ca{ZUASm;s-wh6^+*>!}jHUmLhO%B zPRb`SLQ)P_CP*7fPeKZ0&{mpoA+%Z}bJcc6sjK$*aVRALD;5DkkN`0=1yn%6Wo(h} z33Fhz#yImtVU-@x_XpW505#Cmk$Y8`b9GB zOk$VZTXi|2$p}F^!t}HT&;h|WJq}R;Sh~$}k|8!(&Kcsb0=%>?8x?a$Kz2$M{beb` z=s)y>no$u1Tf1KRBM^g{slIuA%{Rhdt9|mU$_7o)V_VQsK~M#D7Ve5IV}yQMAX4JU zp&S+?!Uc}aNse@JmgbC;{>KV`QL>$!A-7t%AY`}&h=2ze1T@oRFr8JU8=zHY)4}!BWYjTbJ{=pdQ3(J_)Z{s!TBaE?SXT|v$d}RoXY&F8 z0F?zF>=AT`6LTa-m1O|yP!lWy6KLJ93NmeyCNEzzAZ?9H>%nzJa#xeGb&R7t0zznu zxCK$LYk#&0rBkD!b~)nvS4t?AKP;q{vZFcryQvf>Hd>>rBoNfRNE_@BsZbDYRjQfU z5Z){hrP!FUH_k(W)@bd`*TGB?91$I`1-d3j-@``UqroO|#MA4F%*IzUjH$gCD)SV5 z+H+9ZHcy(WsYda_3g)MeO2h58ZvDhg#KOYKD5;T(+|YvEkvg0GR^2nqsoPSVWzr6$ zAWNefBYzP~da@!+jH+}gQt|jCD6)>lnV}~_1_1~exw=v+WkUXP9s!X509KY~u1| zi8#^7=qqD*OAwS|Lo0*N&_R__?dw2{FiJ2|$lflLVI0wzPSATitFBN=tU~HV@)im4!BMW_I%)*%uPEIMG^$ z;Vik-pa$T(OEM%lBp*o{bDT!g;jy6j3j=eww@2 zjaSaT&3sCmMA)0;@BYpttB@F#N6pFARzo4$Xqu*oa=>2drSwkk2C#_@F*63Rrgh#s zv|W|e)LR?eg&dqs;Qif(>TkbNr}%@y?&RpsI4}Ras3m;=&z9?Je@%5GT?KY(Wqo7LR4$-bqN`h~Xku*qt5M_bW9SYBh2M z9+5)x$3I={LOmW{z%$EEb4##eC>S%@!30%g`9+8MRZ#g9(?pf8bby?ZRiKdJs&sm6 z$7b-6Be%#W4mDCxFN(3QiQ=x$NJw}kYpGW^x-<_*VgMmlBfj7JY6ATA&?E|CXJLRg zsQh}X9HBTdAk%D@jYQZDu?nNG1}6XJ%TLkR8xqeie2b(YArDx=oRe9eA?9`yECv(N z7!_0=6=)fjGs&@;*AP2-gq{ZzXCx$1p(mXS5L*oY4D4c{3zsbv43rpXV8TNx1KSvA z)5<`*TJ0{j(ulF6MFXV>IvmKQL$=vc185xw`fw#7_p|st?JooXRF>|QiuI&*#tOn zyTG0~j)_t_f&tT|qeMtzItl9pND?H8T{}pZPPlb*>C%M)mEIJ3=O*4;cNN`KlvCiH zTR9a5OsY`%U8PC|;McQb@1lMBZ{-Y@{N~>OiNg5Y!@KJ)uHHR+_?@-@iH$(EY?et3 z&~Dw(?%n@t$|RXlg}G_W!(nv%_x$}Cw5%$8QTtp!X?#?T@raW7r$Qgb^EmlSR(YnPQVvTdj{ z!9x2sv@nHCQHs|3jbcTBBM4YF01}|DU@pq&q72@61CELgfScl=-V~ z+PEI0X{Lq_6C;!`SZZ*_TI$KrBLgn$D5I<|;<}{|KQut>#At%TfU^xqupvu9Whv9P z2O2|^Of!|SO|e*ca*It2=-X8PO^;k@Ojg)2fSpzl2W_B^1`-qLD`}d76S2T7yl}uQ zM4X+=nM`t&RYnP;Ft$wy6H{-CE!Dy6eck~Tks$f?w5cR>4!hFK^B~HCBK%uNE2fCkh)ru z1?d@JY7qJsh7ff|3vo+BhckeI$QB9_@da=+i4&IMBsLkjsEvD^(I{ThDY^ktk1jb< zCUoSNEo8w*WNPE3N;M^xjDi(JLX_iJ;iM*Al96JW7E1!Klm5s{Bvv_7DII5_G>u7; zWeU}t8uBKVL;*&4yU`(AqOgW=fecgNT?Zzhkb)5ElxQ3#hE8dykxak<3Tenn$N)%A z)ooNm`c#{&Nj54i%UaqzmVfB7tXhpPf8GqAPN-BYa@wk#HQDC1jMXf)%q5=HGM_ug zc`F@-sb2Sjj20IEqa$>MtAOd+6f4@*t!|BC3-V$Kz3x@7z*NuxSxQk9{I#Oi0PJ7? zN8MnuB%=ZoPR4|hnSo_8O;~TJz=4*L zRAe0Gb~b{iPjbq(q(E$q#M%QuDYPPuE9uaz^jh_IS{>NhHkBEiCi1PhBPH9l~3Ya zm=K4fxKNcQuu72x20{u~28#u6oC$} zciP<+xWEbjhLnU8EBTE97@!QM2+Y;GrV++9L?gqyh${v%N)Akc0v#{_b>}3C zHW^mC(}PLV*clh_;ZG?*kxKW(2^Fj`g}hX`=c&kIm+&glMW;~De*H4Fe5gQEg!#xegK1z`Huj=yf^L<51~fCICM)0hS|t7#2~Gl&G(aIiMA zxlL|HXuF1S;HT7SjtFN+hQATvcc>#n>QKSP8RJflGe*N1LI-3i6QT=6CNt-# zSU4|!VF-ycpAmo1qO%d&Z0MI?d-~-iaC2LiqQ??w3`7-|yil1h(k=>R=t8heYn$CX zkSwJCZMG?LG9AlZ-~8Iw$<1dM=6|j2toWtVoJ(mII*Fz1 zXL(zm)wW6%Wrb~YV)@#Ti)d*2*}!pWN(%(-XFz{+P;RxNpDpPNi+mRtDG7w46ZO|c zH#)GSf|O=MWmrowmN1=ljASg;*iB>-7uw@E_%b(jiVsEVXF!xfKztlaOo=`vy5QBG}|AVZQs z^Vr1YeRGy;EZE7E$JDmS0PA3h{IpOcfvjY=!tDYXc1tq0 zhjNWO^mZI?B8>uW2T*d|h8PIY>r=N?h|>CUgO{G3RQ5V^6&0Ys_gS!CH_~B_O?$gu%DkN*?E z{L4R1SilCfzZ3g07CVU8xj+35GEM(ldbfQyxCt8AADz80?mgD8%0B9Yh=@0|=CckQBfFFgCVHLQZ*! zO4Jmf%O-G3Cu7-(36P4cuoiRTiEyI5-m^VT44-7_q;^7@t-vBq95?uxrxGkaRXjzp z_>p|ckuA_Ze{u|ZJC}j_3xxU>TY#5v0Yj^h0#f*qG|_^A+mDJexQsfu+VCiaD+A!* zjrR+{mztRT6RHNx82jtS^C-vLnE)l20wqw#DPWm*{1_^j0(qpzC3r`5R7Wl#g`4RF zAnF4DYnccf$BuEB+xf?kS-6Eks*fs|f{~)9!V)Z*sQsYGxZpw(Y$I~{GL3AB2-qT^ zYr3fs1$FSefv}pBYzU)EF2<3CaG;3~=|Ps5Bg9}4nGBunVu`H(D;2{kkuZWR1IP@* zu?R94g~8bqGB~s($-Bkbh>l1STWpA^*5LLLaq#<36!i$yc`}N!JXZa6Yk>3miS2npek5Ii}G=b z;nT0|CBHz|MIT!0hzK3D_;SBn5K+d_e!pG5TxH*s&ekVb1nb z&m~eh`;apJn5d?*%8E=y$&4gWX&b!pu9kR^P?(3xFhn#vPy*`SA+0B|rXgXHD})lkV9_Dj0xLPRYmt|$ z3`&*|h)m10GC9LVGm}qi!!}$c%aIWjq=m5Pn?}(kn&CqOKua>906{c>3J@;F8wfQj zP&IRx3As`(HN;#Cu7N0lNtw_A$;1NrvSA|?Y(m9tvz1bW%wh4Sn}E~GjMLo{77-jD zTFEkUyCOTywhO(AJN>qID#2026>hrI$UHaG4~Yq_^3;YXjX8P4mv|G=87x1_I=Q+L zON@ySO%ff+yU!T|NKz~`WTma~2#bJ5HEapXIwaxSu!aCbDG-P<2%c;q46QVyk>$$J z+EG?wB+t3Qfq(#-NRc90i9Re6n&lJSQ3x*o00}cNfXuVYYpDl|*jYdPtuCOv_F5Lp z^2|oPr}DbY{5h}h$)7r!%KRZs61*S7{FVFquCiz!crs1I5FN(QKIa1<1cN^5BLmq4 zlS^4mO3gkk5D^qXjV#bt69G=V4bCa*KoVmQ{X57~D1%bq0{(l|QXm7{in!l!yqsZG z7Apf2>(%hYjhwka+X`IdOqkptKrRSew`5Pq?Y{}&M^0GW!?mqV*vF(y$M@@m%5}i_ z9I^T2k1FezDtg6p%E(Y_iT^YJJCsmN$b<)Z2``s_evtx7{Pyz`?D8%K0O*o!bc)v+0g)+V! zD&T~Co0Kj19am6-iYez=l5xs(Gbrh-T;p){#|U#kO^ z)sw6!V44P*8p3PWtg!`m-MqVGiQqAu2W7gKoYxl2#Hd3I-ei&3GLnI9rIy$;S9*zY zm>W)!n^9ncv9yTM0W76d9Hxwt#<@r-xFm}di{GpX%(4g1`-qagJFYZY&-zN5Fj01x zi8vXDF-e~1A_3BKJe8nXqb&p835?@$1LtbxacTuOD23eWOW!gbp9DJe=5C`JJrB{4VkXW%S9|ds4>4 zP|dP^O-gl50O}hF3XJRjOE8y)TgEt%U5?w*kb+&lAoFt#^3xy>JnHo$$6qbve5;Jt zDP)b90;VK1!gS)ly?B0eNYZF*r)5dBc5eBeKCJq*WU?l{WNpwuZRqW|MD1{Zkr7 z74+ioXd{c)YY9i}Q^>(xajVK4CN~;Rx7fQC9cGpywl-+w#d;H{Jo!ao6bN)7g@-!E zXnMC332_t|aS<ZfS!;4h-As7E&1!EqP*1;}OXl<4dyO~&pyfaF(Op+!PEpUFY zfk;{iqlrxz1B@gKWvtETY7(_`O5-9Pju7XQJ#NNgiPI>f_N9vs*clF(fP{f%T&#!V zF@rAH04V@rxgo5M1Yf$atkY1RlBPZTh8&d^3;GTU{x$&i3VgN?sV>e$IY`igHI2Q_ADQkVd+Cfw!O06%U8vo3k9 z=J5;v%vpPAgIINk%&KaY=a&Bqd0TLY+i8QW?nW|j2ac#~`W1NzT%wAXfI-O;CD;kQ zuu8qKb6V8*NQ+Es5(OREi3sS6F@gkfSOt18PzrWxuAe(rzrF_z~a$cp{77Q}e?#tSfmJkS1=v^v_I?AyH zZ*lzL#=;oa_hB)Y);KJhLZ&6hDTO8?4l&|Ukrh!<3L#=4{dT;>$ zfgB$e3u^&Q`1y|-ZE(}f7HI6n!w5zTe}6~P1kn0-_G2 zy9ERs-Q8l)Edl~kDj=bV3JQq+)IB`^zQ$#6c*0#DCfh#=k(L$Y*MwZkVb5&WO3rPetrkvFc>{R={2mqb zH3h8Z^xRdGgGIjno6B?Pxw}l}OMu+-#(!(D;=*t4G$nuCtGm*#;GSd*zhZziUNFdz!PQ=%QSpDv-X5hbe@ec8`r)T__rI{ezpuO=G77mTaTRm# zOD2eo&3|*uio@aD0`16iVi6B)4$m)*=W?HTtU{YR7!70%aK^J?*;}<;N#gMZ{-dXR zZ~UUQoXB8q(7aW8)R&1epz80XicDq1q<|CfB(5?(rf{M!Yg+R=Ga!#Sw*_~7rHxr<`IfRj}QLZLkE06tp>jElBp@KphsmB8-4jbiv6C~ zX<_3L$Vq$$Rf1CsoO0cJt^%RBMy!Hk;U=I$+?AtWd!~k-v zaC2^skP0Y!L>ymysUwk{$cZb=?beIxUR2MMIQ8^R8RNFv4Yc4$c-kg$a^cW)Wcpc^ zB%F2Jl?-f{lhH%FH*Zj!N6K*8=vuFfe~+za+ghq@x52aGL)N$N zQU{l;C0gsf$N^DVBtEC*thZCkq>kWjU{|ZDezd}RUc~4AK}VO4;%G__*k zvfP{O_U_l?D|1|D-&HzhjQRtzGvEriue9gPPmi4UN&|-CAm7+>M?U|1bIcW{TQKOs zIrrb-5Z$f6UxxH=TswV1osD`pdFOrCFK_RyYILxFnbyG<$7lCSzwX!R9#pn2?AOgL z-FS$n>Hz;AyZ|x;WztBJ_z+GLARbUw5^>O)vOrI?cTSP;jTRPMh0)fj!|Yb6nu5HA z>LT_saU$3TV+kcagRpY7$CZ_gMq9f5#UNCju%NL00L;{2NGLRS)T z&b5#o;b|c&e6lo}zzi2_W*#fx_y=E4&znCuOA)~}f9MmHQfy{kSLWOZJKtCS0w_k) zYL>n)Xi`2u&O&Z4=;}tj1PBJv)D>8in2jZ*oo>AnwVS*g1{U_Ft>qHSH^ZD+3n|rn zH`*p_QH%lr>JBXMSn*gs`RYj?e_=@SZ*@MIBb*X#A}%$vyNYv(zK}{g@lc_sQ$-3$ zOV9)DI}UIF0;@eD-`aaPApqdpzqLy2MHvewB2=GGP88`u-2y@Pa4?(4pNyOj%F}J`0{fL6#P~^x z(mL)k%M6G*Sm-WkD*{`LLtPjypL!xIJg+<_Y-^iljzrd9HI|;ImtuPG!EuA0JG4|Ai)DN9U~t2Ja-#~JGOV4{`}?#2>nd( z0|T3)6p$ul0DRX*!*OM^bxdbeb+!2+?Cg?eJ{rtwYP&H@7UXQsh*2BE%25!PMR{;D>Iil3W#ffO2gZ{PVR_)dH5gFJyo{fHT7Z--?s{c9s+G0Ed>Y? zi6Dhef`G)=bNNV&x%*@m2X~E`KGo^>l@^(duufTCU_(ulz?r^?y>mv|WSC!3@ud!j z2+Xdqhu1Waas1}`!<#>LpP|}WiX}*m%(-R#YtJ)P#s3!S`p~}3r%e@O*>`}2SmmDV zGHoI{*bRq2W`_N3b>v@{ms3hA?h<@G@JfWbxv$$Babr6L#5i{(@I`p*{$%-p&_yyh zfmPpbZGM!l)L3$N;{7mJZz9bn-2LTOMzM>pDJyhqe@>ywWPaN+P05cO4H>&l}g zXw6hMloC<91^o}csE>bxG_um}r`=lTXrcB~m&0!cvP+X8$bbHlzNjEcQ&9H@_*L{<*4#hoht`{? zAsMH!86VUNewQ|I&;eK}*gnzFu`{zV*`I z%Jf0VKD$<(mtEAl(uQ^BsTdH z%>r4V@)rGpgN$AVV&J@-xK%35ZIqB`L)*l`Y{F!zWnmejJvi9c&=@;p6GZ5IDMuE`m@V|7XVEAje#i^CC7+qWiCqcYWlq!u=*j?d{JW zVFB7bp@bz$Hm)xFdmTdTbW{{dkM+8IeroIPl*5)s0PkG7@+^NPm++T^+|Oqw9F`cr z!$d~}#^vJKh^(85Ci1(F;tvT5e#mrB`(cSeW`zR9XE{RLwafs()Ev9qIjCmVebqVkUL;wXdJAVhNclhT~e9UCOkF6G38)rEgET0`Oyr$MNh) z!-$Iq83gTN4hflMgBUah#hXIPhEScxdVcFCMsrsdkF+xE&)D z`S)=YW)`f-tX$3MTI-P_r6V4cIN`7f9h*JAM*0Haiic+8`X=7ZrjS*+PdD}lEebvy zL&y>HF-*dY%)$>=owO0PcECp!6BGtmW&8={cdvDdm+*fBy7BEXhzl>YR9U(bpBjb* z1mvLMQ@e0xrL>RoYtLncM$>v}iRBg&-7>AobCxH`O$DoF*f?{44rAg=;+(Tst0wK2 zITL%jA`vyiS`Kq?mZ`YNrPVp2Q=UZe+-0;$DMuD#pJz(9u%Uzti!dI*s4pa4j`&zb zz3v9b)f42BhP=6r-D>SrOgY^vxy~gLoSRbp5<%0gF}rDFqMAUY=CXUlOZUOlz(wd| zU)M^`0g3OU61Jjl%mV!n~Yt@bO}%qMX#KDIt%oFXmF?6e>}dFl?^IEy<8mj>Thu+;4M|#L9e>e zv%0fZXHb73X*D!3nlQ(rpTuJZT0#)X=AN3?XHzYyHipOGM?+J5{)4zqHPxsQLng?Y z{4}~1wAA~yJ0wA*YY2OU>?nv;tt@+TrowkA%KzEQmm%yRvlN2QpwUcm5OY~EH z+O3Go8%L0z4hBKp!|WI}UajaWU-BRHI&vV>LzUAz`9I&RlZZ$XqPqP1>KMp4Zk-9# z{Cqo_i9^_FQ|^k3_=22Z{4|RWVQlo2dnKA9gCX7LIAoJ{>Y{t6R(%;m4!Uwr;p4Tm zjNkWOk?ScxC(Mp~Z_)po{XP55(FwM~|C-8@hNZ0h!P2Ebw*LH~z-K2DrdH}wFL-=R zNy<_HtuoCjVRdmLvcT~f1`h_~K@%U*%nWd-R_CTCLmtRb_pO70K4YIIt^8;a(6HNKbSf9id@WgCM>hNy8F=!oaZ&4xs6jff38tXamRJr9TMZw*T;ny z2|*vdokJFU*<*oH0>Y<|%@y*4Oh6G2p>eD}VxV4ZNmQZy7+oRlNHSZ(Fh`K}flnT_ z<&sw_E5xu3|EhKRLjfrEhLyQ>!R_^%F*1&o4LvT!8JhM_yBnUKL7pgUKN<5$f0`q? z{#mr8UHpa5Gtl74iI~dWCUj<{9va5Cs;gUWug@<&oUKM7BZSo!N7i=mn^;~iq;{Lk z*C=y9R3p%r&yM!;N@!U_V(gvFX`PMOmH?oUArLa)YpYO#EF8fRr=S)*X28$+pY+Y% zYD%{=tP6VW7Tbt@JVdq%qB3)>emPj1NQ_4cQggTTkroWKL>)GvTKLor+%21D1GcZ<0*p+Uaiy zM{hLO3ZBEsgDWKaN|&MU-#v5v(0Au(QHg|ALK-fRIV3thYCubj_p`qZc8c6b zbdwd%9&jo+Ror?O^vX`{quUMRhq01z>fMP@1n=LB-vOTS|89A)Zh5^oM%)t?6F*AK z|Cn@E0H(767dV0xV>NvPQq}2Ag+~oykEq(`nsg2pxw>zm&ibYWRTjDQs1;)8NysuV zj<~s;?H>0}&LNnNWMFZlmPioyo=fdXpm}YyW=|LqTKWt*g6R*Q_ zI(pAMA#5)2$KN>hH36@zw)1@#k>_g4HWbj{x;vtH3#FZQ zX#1=%TG{_iYfOB{zuxFZC!xDe&_beBTpy>%k^5myT~@ zuiCSG!*g%-DSRQE%zYNE)|GC_31E+<%G7XUpvgr&zbFGX#j@fe;N(X;+**c<<>8g1 zw&FU@Q`LVW6fq%2(8n#wU@)+fQTaGr1Rw^C}kMvYo42|KX9jnS}9yZW$bs|b`Wq4NSV4sP99Tov3BQ6sbh#T4aX zzX>Pr?0)6ax^<qMwkPmB)LP74{j z3SBY}et*XtUy)%=OIex()D-*)@PwZkW5uOXGKYi*3KNz20BU^6M$QOLHQKAO5&H@@ znTu%JQBGP5YmB2M$xCQw1j@s}ah-zzhH&p`ZVVIWEU$j&Qzj1193z)cPt&N&X$oenNcXuAw>EtvpI)p8q`W2VBxPH6SH06~J zzrJhyeO!}h(CH=r&m5;hw9H(V`y+M}9p_qx*X{~GjN!o3i*NywQ-Le{uIQHS=&$ru zp7vv21eOp5RbVVInuZC$7tZ256hlwL4n~kMh&U({uYuHsg%pfuF)t=aO=!g+u3u;= z3na~GtVp#1J;2rAp{$3uG)0Tms6;7ZZNrP=F;}7?pT?)P=V>aVR6$5WR*9I`nF(sv zaq__|n{0BhAJNiTSHWNit# zTs$4HJyhkpD&agBDd_bu1pyh#At-L7qr{4)SxE>*Z_LR)r_e%!TSJKi%}Q7B`_jL6 zZXdmyyp#$S$*r|0XCxu2baU{+ARk?}0zqXl#}7TXJglb4wrfBl9xyrG%xkye?1r+` z)}00HTG#E~*g>f4Vni4d)hU*YnFRg=9Ed+Dx^pgoUx6`kfIRH&wL6M-jh)xv{M68< zMYA>!?`OL+y4tqeKdds~7}N?yiO|sqEW49Og6ff*90RCcqF?j;8`52_|%Js=3u^P z;7fOP0;Q<1xv$i=8%;k%&*W5t3L6UJ;>$pq8WFKFMY4P%QSC_-Q!=k7ei(EmARwAn zu6TfF`ubD+2-`Q#FVXn7kvWgRupb>#8oY@Q5^c;pKUKhCZ$CaDTrOgO&B;`NWf;l+ z9yH--&#+a9%WL*b(I6OTDO~3NB(Ju_z3H(~VU{{|%2J|K`TKnn zdMC^B7?h{;uBh(Zl-0;W9(YIF1<}DIG$ExXxw2))26GJ>Y>6Z1-hee~(UJia zN3Py9zdaYOE@CuD-+JZ6a(RAKsM-VHq)l6MA+;o+c0w;-nT@hZypeBov?E^tW5qm+cHb-gtiuzdV^k*&+F%Iy2|iZkl5(dnNgz)L{@8pK6em)cSmI1e}Xk$UtC0a zxl~$vsUg}HELu)H#ZumRTMj<))OJJ7ix+z`ws1g16t;-&68g6D<;!|Cs5!5y84}Kn z+#8@F*}Yh;Kw?=ndgIbO@9PUa7iH@Uv*k)Y^|^2fmN8we2D3&Uxhkus^gkg#TF(@7 z6nOmxDIBKJ;Ek%WOY|~u@Fv5$Q?W2Sc{W$J20?w6R|bNQ9^O-se|(o7$Q_i9AAwut zcqX8aw>}qw5lII0VH$LkBccUkU1Ozb*MZrMtHS;A)7nN#ey``<=|C8|c|$%^^72x7 zE4%25ZxJJ;>1uRHDfxGvLCr zfr@4FFJzFRbbJp!+waSkE;U>1-T4}(Gm?1(Z{d57B&cY8clfxKB(S&p)nKvz=9%}a zXM*#Y#{AJQ%4RMJ;Rh%GZhJV|2FeJ1YxqVjmO<59$B`M#0}#(Z9UCEK^=u=2MoK1J zP#q$);uD|$jElO!9?nT`7d$HNIY=+*Oa*W7K&k7(JM7^^)=^9lFpx|ZVt)Z{y4Z2JK`|~ zv(duz=VE&0n{{luO>ctB30;H21Z9^hc8Gd%^o~hCc#B1!ky0jjX(tEl<>KKbC!mpo zn13X=kQv$Od6}nqz8j-Od7$5;TfGe|Pa06|*&Q9YZt*XwjwCGtFYl57o~KRp%Ll*rM= z0A=MhQ1!NwSr+H-ZJQ2yBfZV&6K38EG#nuOT_uCJ8XBmPTQ;~>05dtYK?_xA2!C!C z9NjgfaM&~PgmNU4`;@`GK)vVaWl%swgXXYzb7sz*QT!8;m7twfhx-bd()JPzZ%AvO zGA&Q$1+lE#ndx^Ioq1_Aw=vO;jS`Y#nX>v}7`GoqtMOwnTWga5vVL*!r{ap5$ErEp z*|BGhrsc&6$r%3t9nT%{-qq`p_=FtU-&+Z6BR{lF9-TQOea#vsqnW#Q}f0lF8oRKg{PZ zU=Db2*%M8FyOptuo_a23pM398-0*$^CDuXw9(#7fgRiz^#9j*kGIK-fXYv;4+D1}W z>f>R~S#f*DzgW*d$_Al96^Y@g<9ce1Wbvf)8DZOMlX!vE06z-7ixDUdb10Aj1|b6y z2#68A*$Ffmnr0-WKT8kka7|0aAzKGhsy{S;HMma85A!TTTi2znBp&!iquJ}ycwf?G zO?p0M?y%P-+=S-cqXy7_d7$zA5F;}Q=&XYUj@ij*dJ&rD5KS68zEESYdGk7GhX!Mx z>%1>eSuPqmHXyM`+ly>rk~2J}cLDcT6c|Wda+HGnJfeF>d#T?QGvNeMrqG!CF`AQ7 zVzdpNBxWct*J@v$Wz!X->mSY4JthvVaF6cE9Ibrad4(G&=}tOh@izYY>Eg5#G!nc^ zgs%_itp0|Yu6Of&X2WrySY_^~#vNlJmc0?O@YRO{(-k3YdJE8gy?qKoo}|lfdXS8{`&KB z>Ng8U1JU|zQADa(d&Z!*Borw%GaLi+v~(kdXR2;GyzoJP3E4{gR;E7 zmN$bvnKYKuOracNRs=2(ma2!*mu?s?KEYlCUqJ?VAcw>ea=-(G3*Ef$wXkeF(@4gF z^NmIKESZ!5TM?!oW=w&^48=;0|HRw!U10+w$O0&%o2Js&p@7y8+6Vrg3v=__OoVW- zS|^R?iW6%X5%_W^AoHUnoRpMI4RP+wvy}a{;EJK;&=;#t zGOFG{&90O8u#87r4Iz_kNpfRbXCgivwK3PT-Fs*R6Jd5z|;b3s=Zt-TEWF zE4suO;Ciz;hheVGJ~`38fD9_201GG}!jgG(2k4#jWu?XsYXkrNi*ZIEh5}Om{0rPf zv?q$5?#yfgSwsJ;CxTc8s1aDT&&jvz6{+2$N1K6^*Gx8tp)EO%`e~l;Z)pt>2 zuc!u_yypFa1@Cn6cE*u*f{rhD%3&uB{&~88nC7=uBiSyT7eTG%I+Z_%IC7%6bLXi# z-)x?UQl;iLjrJ@~w#n3o`GL>2MXG7Lueg4ZLIaQeIF4N-_+SpO*sc*)8PZL(d)w}+ zMaQ=R)Zw~iFhokJv^bd^H=`XoF~1e={Y@asIEvXt%JG#xA0&cS9hgs+qUq3kV}4#r zce=*#Gxp5w)*i}L!GbqX5Em0wEo75)OGDT!L-IBHBdbqK{=vcU^8+!Vr^{vkbmSn3 zaxLF}BZQ-!lB1to8o~%GykGvakdbKrBQEmCu-+geZX(fq|LP}c#lOpn8u9_EjY$6r z%h%E|NU8W9y~_6UU4`TH>rq!i^Ax$oboz$0bU`V(U_>AjpM#R*R;GVTR9xB08b ze4d{;Qbz13PdI0siNe1MXrzKQF4oF)AqHqe733sXj4}2#ZfOa&E=a9;mOR``;i&-K zuP*A!v6@vh*~!~3l}<>#E$zWr17Ez(Jb%Z(fP$E$0$725rq{JZWUypdFK&CXep2;* zzPg~G$E`DCJ^1QB8R@bn$}IHFJ&&hySIl8mSSheZ=`us{K6H5~A0(*odXm zI1?^A!Fu;iuj6EmsI*qrWsBrkl|~Y>b6~?|H}NsmB9xopv-xksd(ynF!f9%Gz{LWfo<$mvIl;bcC;4Oj@0Xha zjK^cQwuxU;xE4}WqODp?_@9lwvOlr%VR~O!~tYcE~O!@D7Z|md1JcG#~rgK&O+pMd7R=W<%53C=|U{7 zDHS|VeljlN;9{^^BlC+8JP6>X^4e4WzXI0c$s?q9#-itKX$Wwm!WBB*C zKZ@inC*@dA&LF;rDpom3peeCRJfhL|;;uo?=HM2C-5vZePiFv@&Mk}-+t;qhDQ(C% zS%TWj8S6nM88y_(F#Ava8OH$c-s{rV6Il&jFXjv ze)r9A5$ptrYUqO`FxBq46^S&lC`Bp}rXGS^7zL!GDthAYahS83E^9;8bp%_q){B}n zm($ywnFv=^s)Aikv1vKjD`M(nU&EcU%eUc4A;eUoMWJ_4JHKVga(Zcf75Kq!`CFywzF>A@MIO zdH=Cr0Mz_w~hphaBis&u%{)K{f`ZcHDvGQUioFsSCR0{H+iMv z#aRWA@S9*pZUu>&+R8su_u~r?=M^9GP7d6%{5w(QhdLTAHM`2y3?rKbNN`)EsmG_nlQ%dznm!2Up3j2i zlY#LRm_gT1rH!8tE}x6xe}2khFi=ZWryYeqP1eGxe2ZJZ9XeX`n53|Mf#;yl#X!3s zBXMdlb$+;l8bU#hHR@L%%jgkMt8F1M?+fW3|r(O1%j-P(r6&K3E2fl>y z=3pVTmI5EpGI86l%;JZ`z;t?z78&J3CNNp=MRvjDTwyL0Khz78tqnD)4&e8~fOMf8 zHSD$JnaR=EDs}ILh3vdx%P+QVKUVdeRV*u4GEEi7KC07@*7`)3s&flX-56J-oXS(8 zsg`KjH5c9PMw@I`rf_*8zW@h~3!|Ky=z%YxfI}^t(do88=5yMA?mM5YoIxG2z??r~ zD*-H{99$ZuPo;Go!L-a*EEBJ~#e zvkrla?5oZ494lT6fLGadOd;m)+I|H+Oy^NM!#F6%eN(SusFBo1 z6Ga}N8p4n5pNwQs-#z{NV_(IBGDN1Q!7<6fH_0G0VKdtBq=pxAysN_t`IR@H6l-pv zSa!#rSmqp#2=Xk8Mfd|XK?3d%--hY24@{zy2^XECk46+}Rchiw3fv2`x~8aFjj1wv z!u9MFJ;nM~*9>5Hr>teRzGzZqj=}ZSom^AS0DX;ZlKDd*dlE1XXw%wmq)jAcnMgD) zg68pu^tqNrJ~$hFF@t3@k8H;>r5g3%?K)ENm(1fTU;`-|S`hikjf}i2ST>5A5(y~= z+V6M*0Nks)afSlA%In&XRzS;mub3sGm=>RfxptA0+=jj5E(vcL#=aS&-tkx0E%&MV zr_aqVELR&Onk(G^boO1Fphk|i!K(Z*4)UsVmD{qHcD{}KC+(zF!m9II_gH~+@nfy# zPCkji9svvqdc)^cpg zCD~P&NRhaBaX_YFJsSd}H5iECO_({JfMYTN0HGR#I1Y=Pn84 zHk(`Se#bPYq}m{WYJu0J0U+kVtSCUi$pS&=t{f{P%d?Sq+2FxZ57-g(N7LFYY2|C!>{uUo@N&2L1K1d|}_bb&wufm(8p{=AGMXohn8; z{9xoI$E;oMi5R8O&Ly@LMlqXbshz}DnP_qd?t~M3l#y^XrlnzRWMOKK36^IcRp($5 z@I1!`V2vJqF42Z%t+My!ivwkQ#cP`3|AI}l)Y@KOqpFa4y~)BZPBU(n{+-!*>XK2f zM(b-5I>Uc)m1JOT(*!=H+fIbF&U5;^A=%7Mi}Ex*NKoxt&N*-c7eEb*AMi+=!6^yw z7hOoZ_bs|SdQ-bv3mwHVC#jeXK~Yo`@OZ3Y^h>{7l91qWHM%0v za7eN`Zri{+EV8U5$ny>N$3M)Z7ag-S$l9%5W&9GmXTyYS~|7{YsbpeLG7lGuIet?zZk zbyp6V5c&2zx(t0M05FqQ9w*-9<(Jm*di&rppVX%JXO2fv_}ryOp-YUe6+;M_k&&)C zLv{B#&_+G12P@1+Z;u(*(;G}O^mK92hi_5&rP(e!j|erkV#^pQ%tdEz;;OLGQ@zgu zahfhVcNw6n=2jX`1~wCAqRI8(}NwPyrAL@^Dhn%`4J*KDp zOkS3+H&%#O9v`ARboD)~D#TL;AR^O{S#`cwVm>+1q>PWNJzVZg6kup`DMvRy)nYpB zzwC|wVc0JoAcNj*0fMLog@;D6a+9)Y&pbKRzm)DiASL1HbXc>;#Mz&d+WfsOgVhZ) z`GqmG$;JOFtFge{5sXnmAiv4*&Q5C>Pw?zFckvQVyKzmeMdsTBW|vh<$CD1BL8x)r z9VJesYZgu*V7j(8jS`0%5zPWex5h#W7F09&L0c%6J)|LSj_NS4B!0CyK|H>amuL{<=uMV;Msw3!At{Q7auUK76gQwzQ z0{U4NTrw^oDou!!$WNqPYrMpv3*8#Z*Nh&rqE3u+N@XmnW!Uu>HuH5evtx0CY6K%C z(~Go#oHoq_Lz=H~>5m4v0!ezGW)R@bhQV)=DZq!Hzvjn~`q|@K>S)}}qPNTucK8+C zZ_Sz*f!CX~mk;Wd-MwQ(YPM)T6Gl|F7qe9JNUPEuQ*!q#WJmTrc7S$PjS3VS#Aky>G;t0a#7f77gz5Bgw!<@@>%2Y_G0Pvci*lr zOq@+2Gu>iHHNi-`7mvN|{$@W5@EL$@r1q`G)p;Sp1yW(HfT`2>gTh$)H*d~t&<6Jg zG#^&k>yVv(SKW&pjG-6}B#cpWM$ z1&kcfIhuDfj&*Z#w!p;AB}tyH=q9#e^m&RVOup z&nKwLIan1D+5S`2kHtJNG0v1f*+4znLO7v9F`-I0fwBXGNnhic1HPeIt!=4P+Oxz`9yk z?#kMkDR{|dI-)G^g!10C;I+U*z;l;_MlFL;Su9FfS^)WfYI34A0M=IURWsV_Y?sZB zf)h}3&a`rP4eQ;(5X(~qd?q-f3_L6Vv6ISa=TlE>b0AV6U9@3)JF#-@0-v42${#pq znlUu6+~(j@sh~IxTHLk;c;C?pPq>Y{_vUKvRb|#=yHeM@h&=?{bz z8S#KVa@&F!UBJc*m%8kncu$e*89U-vf^yVV<$d$?yRTy(*TSh5(sy8kkhdeDIa{zM zC))QNzOlk=c0=O1ZC4`8IPffzQEot4xf-WdTvxa-ZXdsD znkvVE>tb)|E6OoZZy0oLHIc@TrvDjFrzVIt?sH;y;B>uYnKAAzRuchd{xvQBFKpn5 z*arqDd<(jyMd*W{^AJ4+dBTs&o{J?Uu(nVEMw6n=AO+!40&)rKux!gCvfW&&B6RJSr=Mr7mHBPHbk3KQ;^EY~^G8F}BJL&^e%o}rjgfK^>DijiFUqOJ49<}P203dJDHC{&WG*Vw(mr??-$vP zxX4;0i*wE+>D_L?vY?9J)z)GVbR&N6e%?Uu;Yn?Y6V~XF0*)8-{%T@s9%a?2)xvSN+9%CH!!BnY>aAOmwF|U;pK6;h-OlTat4SB(*vDg8Um-tBXWQgcE()@*>%IIK%L>|PJ z#qL;LGTBs`*ap=A?U4}or#qk_lc4e~f%GK`Te+4pDueEf9vTy7MLx0I!5dC-~GTn~k`t%ym zt6&#KOqd|Ryt_|d3SyDZ%g_o?$Gb)OxZMerwI7y!kkY6=EI(Z&E7E68PIbj?BlMn1 zep{$!W0Z;g9;$+{#qTzC0Gdto5$&v(T-ssn8Ujz;SlC(Fz9qLj^397#y5n~{{MGPn z?{b3_aKt>)RnR%V`(rELAnW7r_%-LmZ7uz~`(7|N7mk1W`QPh+iAN_Gg%N7^bOM_t(8{Ev>G5xNfaW zI(WTKcdo9?_MNDerCo)*-At+Qc)jxLJ_lcg>mGc%%Yg2p2KN~-pd1W3QUGSkaL){K zLUSx|je2u2uz^AQ*TL#F<5~|xlzs#{Y&Pz`EKCiGeIC5xG5CsE`;}YZv_KhjZEb?G z6iapPVSbw0{$yOS0p!h>wf)|fa;|)PU%th3Rp~KzUd)^8KO(1m+C?jC;7ckF6L~7L z`5nF4=BAsknD<^CRXHfamI;!Z>kciT{XGrZQ>ghM zXYcv=hy4TQRc-{9Tv>^k4Fnc~d5U^o7xp{c1O4p`@SdQ}i7uBW(8;GK68hDGsx#q!q(h}-8stjo0UXW+Vx0TO>%u(1j1cKYRvS{ z3=h9^4o!%SdBSTtC-%fs*^YffimH*vXk zMYlmXuEyN>Re3q2vNfp#=D7k>2^zQ`r0P5lJEMpVl|R*Qe>!`o-zfRbfQ5miWJIb^ z*WV$wacQp1pp6e`NM!)_O;^%g=~W2ZGlVOH_e-I$7-V5$QjwxqO%vLk#pqb_#n+rT z`Nzptir;EH2Y&JwAg!Y=Eo=rQM$WsGy$qF=k@mOIqUBEgP!gqNqlkx$bpF^Pn3-IlWgOU%xqFb#lHsL{K72`u>Miu#YrCnP+l?65 zHRdqU>EyOvTdvS^E@cK4V>* z+hnPrtmqf(R@=A!eoM`k{g(EV{tNuNdbz?vm)?O>vC&RL5143l0pP(Y46>G3uw4Ml zlPsCC9<%RbaGNSo@R?2RW2}*>d>Z0C5F72iTxS(r*p5$%!O+HldwDQ}UoicF)V;Jj zJ${gkKJs$|x2f0(^WK01(Ek8xK$XAUGjvYRwJ1i+Qz>Aa-MO~}kT5*aRR*mdY?W}< zIs^4=xmVb3p)L9G=hvrC-+(BC{6QMbWIqEmX@$O8)LD-fgS09Tzjhe%#liRg@^eqV z3MaHMKLaAPB|U>$sfCqV(!-CPgCa2iMFaY3C<}ycq6z?zw%7t9s#0Rnpe>R(h!YQ^ z(1I@m;u^!C92?B}fJ1`>1J}oumQo=30?D9S_?Q_KzQ?Q(Z zgM$icBO?Qfw93gB5p#&gnYy#-uZFhM(;zt8 zlA81(NfDANQ$;uBw4qHFL}-*IM-_DxQ&-VslvGz8WfL-7h4occ$IxU8O=zWcKrwDj zwN$M_oGU~FOw}Yvgiu1lqzID5DOo$0O#p!15}<4f71)Z=;oT`da!E)Mo{EX>gggw1#TpHef{h2mPFifDUAD?ZyV$CdmGs;Y$e=Q6 zIY{evM{LL;IIZbeaVNfcVOC^mcSgWNun z?O`1QR$H-`LW=G|;%j@dvxieucH&Yxy(Wz{2yVgZzm(9)Aal$yS=ltfvN*YHX5~T9D&}Gj_{^t>MZ}NPhBYjf9Yhl!q%q%S}MC-=e`PAP0*6JyxI ztH_`QakdkjE82@YL4rL~fn`K<*%>RyWGy#GHV89RSgFe48sR*n<$EAtY@n zDb~miV!C5W4}eN&&{kAZSasA3Sw8B9kWxmm`Ew_W&k_1 zfg_cD(^ULISlOkHC!ST*aBjzv*2QFZtxalfZPSq2!gfEbO4)9s5Sw6Fs3vN!F^wg z%g*jr82T19hAP=#a|jq315V~KR9L_iHj}OAaDfsACNOj;(SRWkz<~{1z!3U1o7xya z0!k3T5)^>pC14PP8amE2Yc+(U5kYAo4v}$4_mm5X zlC(!98DJeOL(w;tdk}5r(>%UqNCZeRAt>obeq#_U8GNV}{V>TYj&+%oEGwl_xWY05zGw1ve=FLz~)UkTtvwQb_d+q`Z^m<+#zuBIX+$II1_{|_6D;16 zpyu<27kf_wODhV574$aCB!>Zvz)jL%DMJ6 zqAzxDjBD~_muL{M{s$(WL%Ko#=<2r*Ny%&oar!}KiJrbC&1+ZLg84>)XI3ojL4fmN zJDN0xk{e{x2GA_jRj!b^N3JC(r#nPIdypw~081@6Ekeka2}$YN0I1tKa(TOWh9sAm zz;vDMTDKEY^Afi|sc=eSU0cpGz9^?wEmA@vljIHNcyMM&w3{1|^O|?&)aH12;c2Au zZEs|<$Nh@T>w5A=;8{u7{j{Tyg&nSg4Tz)*E5^{5`#Ht*gpnbBA7icm8jywAnv85V zynqx+=D!kTz!D-nfCdx6!S6c%5Xet}AqYS>xd}l0@ntV1Sa3FzDi{doulhp7x0LIN2Au7p$nf@q61)N=?qIS&Py8FiS4DUuLMqPzT{q$A>^sWJ#!7>5DD zI`27~|7f}ou?48Irwc)nGAbi1Qlna62VnstKU$-&84(-=kSAgZV7nvvU?UJwBcc;C zHsX&+_$$wgf;-XzR~<9x<{dI*)rA1u0RGok=8DAgxB?f;JJOER&Bi zxg`6bq%_pPEu*AN`lL;ILnGU}gV=x$aDf`I0Rw0OgJ`8q5VWpJ3Dcn=$3MiXJQUnrF7!^bkkx`I>Wbvni!3k*zC~8rTf^rVZD4~Wa194G~ zDHtgsI5-6uDVtIPm_nf?7=VMTw~QhHd+SDxqPGDc00HnfjnSC+^B07{8-dY{cig^e zWEgr;0u*{Ec%!I{K@4KN31L%$*&7*=IlNGO2u%<b%%t9nVw$l-emCRI@FauteM<3de&p-;tYxkRHaPisH!>&NDpU0ycw?1U)(l^@1mA zTM-F}0>2!u@B++l@=NkkvyETsnCXbIPM9$n!j1&EMkxp}@ai^6Y)Y)-4^e0$JYod|i5WVCGznQ6o^hEb zV-Nli#Il*WgK)YG2(`RS2v3?2IjoR-Ldq>mv>dc6B-uHu(1J93h&)0FCFzhH1Q8*m zPbQK7K?GeZ8LTqHk&-xKinCEQ^xz{U5f(PO!Um}YIZ4nhT#!Uc4?CcUir6ei3zP3` zv=ohxDJ+vLF@O$OlY`I*H&HB3VJ$$JtxF`evNXh<%)DA^h+C@8=h0DT+BK3eQdwim z<07@W?8G58h}EkTgXkD4?ISCVHiRfeExpo%*wSeuMK1+YTdbeH=+AnxDn#P8Zxal} z5DaN~(`Ye?;^=~ii5Th|4Q8Z_SfJs5ovse{v00b7FAgsGeY7mCuBi$g~`nF8u6#gJ(}D4mo@7z69Eig8%~ zg(d>fx57Kfxf-reyPWI_t@71`_!;k6k*9d0gUHB(*c-I^xu1itu89k~6C1jMt0of# zEyx5H`Kzo0woQm1u+c%1B+0YNNn}M{zaZh_*yh(OHU-U{#3N3%)>!t6MK4p}E6MPu+uA_Z%#U_$KUeucyh1 zoe2_?KmfvUzRZjvH?@uZv8n3&Oa((B6#7jeaKGP_0_NB-3>rW6D?j#o&8%(zP4Xi@ z0T2QO5CYps3;@VKv-J&W;SI4h$KRyC1$c~3r9S^Tu!!mm14KZB*q2isD(m{Tlx2um z!cI|P5(H6)C$R^G;6TO25HVW1x=2tVE03(|3+f@ZgK*f@@--;9Q5P&j_h1|l5s?{O zk_myrA`B(^fH|~b-HWWbFB@D+mt2!xq@X7RVfb ztx=ZPx=q9rJ#oZDl$}IzL>ztJ+j58;#aQ^=N!XGU9^Kz(LefukHO)K!CQu^^R*Z-( z$T}`fRak`J2bN%(i?cccCt7(LY{QC?0Y;$mDSpJbgMpZvI!0wgAZLt5P2INvkj4b) zmyv2PM$I=Fe$;yV#sPp~9KM%)85o0ExJ=zQO_fv$vd3y+D4n7Vef+5a=s3Pr#V&2i zw(JY*IS5l}nS+ppnIVcMak)H#nbw5@1WpN(ZHNakkz~D^#j-1DMLN2&ifXmUzIs5E z^qM->L3o8MWu4bFu7yniUWO>dpq$CB8A-a}nkIX*oYW=;X$8b7Ed%HRz#R%(0K-U5 zB?E8)86|~{uu9@;35Ycwkqt#oY&_MWywzl;czC`_4kh+=)R^l2|qs3!+~mH()(qgZAH4BDfO+W@43rA1V?T>v3qVXwv7 z^^;Al?dEUxW^dMJuZ3D6sLjLx+ib?>a<=A9b!Q6T0_;o1oH{U0n6a2x4Cm{O1>`R6 zI!a z&kBh`G#=^Rtq;Hn5F|_p2zZ<@GZ4|OvdMBoktQQhDo{Ja)hN=Dn>C3X6p;cwP`ff5 z!bMPpBx)*YgFA2o%~G5)aD|3e(G!*GhEBOIm;e~%!#%A3tjZb#izEsP5@sPa%T)tl zKEYo|q(o5z(zGTDSi{63?KMsbWL8#EwB8gkZU{kRB4SaMy!b9>gJRYL8e%n)cIuT; z(TY;RvyoYr#%>m$YSW*xROhf$WJF>r08}7W;RP7SZ?s{1^XwWHZAT65(uPzWHb+Gb z0CPOJ0oX5+8`9nrR#2^PMYR&SM>@HX#*5Cw4v){BgSOVMjW zHeR@5)|_Ehstd_^oym|zh|Gb`*VP#kfuEvGzADE5qf=p-!y&D=>x7iZ>E>>5yL0fl zTULXJ3@-2hOJ;*HAOog6h){45C-t>wd5NvW9sMRIie)vi&e-Y%9D>dFgYuEd9U<52M-g*E_sphFB46H00lvY}n3Dais^ITT7@`aLqD1@L0R=)ETnJVO5OJ{oxv+AP2#^B0*&^O`8Pc7LKMLv8EhB{p zBae>H)Ex;JIS3aagMU1T@c3?|%ykfvi=kekJ$o}mn%?JSYD;znNosV^+IH>z-V52l zZTH?znh;lT1uocttB&Ln$mFdS!2l8TYjW%OeP4Q4L_Nu+Lj*M&cL`Fi@gpr#S##@$ zKmcMd%VvUQI%=J>NhdXJ1?6Q>+#Ow7U%w^R@{rWISF9= zwt^Rof=3LMm+TLA`I;i(6k-^1qef~psn#AT8V<*umtk?7;h*>Up!e*cCvAJozokMIbeK?s(K2bFOND;`OyDoLPo2(VHf zWnlN7EalfP z@fRn^RUT{C;-KEb>ljb?m#~w$ULH?Au6(BDe0Ck;A8u@7-#9Ba^Qjf?I;XLN{v?O~ zwNQ)b|8ZLxpIsIb{&ha@VCLs@iYccr@h5-H>>s(64C>enu?5c7#@cWO=QW3a^iy-# zEc5sm=Qn3(4XVfG0Ej7EIB}u>Qm_l9fm?teUrnlthUlC5nNN zB1e)eY4W6j1R@a_5Mw};NSH4Ts4|ewz$ydnY#Fe%v*%Brw(5l(Ds*Q%dq9n@8>K0v zOOcUAMoA(?WQ37fRkAFZ6-fjrS(2R8VqnWAk*#?8tkp`VTc4wVh` z)NkLvf&&vS8kDfnowbCLDv97O$}w*ZxHa(hExT5uNU}1pxie)0u3FtP;HHe3P9a~d zUFurs>%(ki$DVC_sVi3@DU=9V!o?Ue2HFVM6csYck3;@wB$7cQNdN;w6bU4eKR!97jyd9}0G0w^ zNyQXhcEJS~Q?xjy6eF7Xp%kr@(uxuZ1du=wO86(q7WL6bp`B2PRFf#;GLi(W z)KaQnqZUfkskIvaKot52YY1Yj1Pl9V4@A+_@=XF9dgSYxcb zHJVyxlv0KPX5{7$qKJ+pE}`WrN)ox}hT94UQ-tJ!7a<8(Mkxl2Ax5fs>bq}9%#OsY zzxzT5oqWylYd{dnT}0A-0E^^szYj|sF~tTzY-fDShUDIQTveAROZSzOUsrhA2_SkY zqx7IwAFFrWelSZHbA|lXj6_5H<&5(~JR?A15GGQ9;uI51K?Nl(DquiH8Pzzz5Ch~G zwUbp7Km-9!Vy$)7S9^^$*k6ksHrZZteYV+ILk)G)O0;csmje|vHz!i`+)zVWkirTn zrECHxMj9#qA%%elXZK-90ECCBD51b4Q%I?Vv8#Mpv16f*}RAVLnp3Z7&qL<&u) zLJ>0mqJ$!Zp(XB6hi38+h@uF^DVj+|OBmXUTttNl$Vf{#x{=ftFaR+|sYyi=QjpF# zBqu3}NkVcX1Kk7v}7t#lKB!S$XZitd_nX476ScgbX=O{rLfD~I$mK4mA1(bjUcEPL9C`45<2#6#q z&SDF$a5a)#>Z+H)Iu)#b6|7;t%2dT1R!HhZohdJ(9d*+GoHy5P86WR&?qnko!)c;LTK9plrR7x=xA+LLtELnR<@;% zt*K1in%JnewlV(HZB{jaii&2CPSDM69CC=>$S?}ACK6N$OBe}FhPd$HshOe3R3=0r zidCQjP@XYW{AiQc`pG7F2JppCLQ*9sV!LD+;4U5u2_hOxlE@CrA0jd3 zohl^Rk+cG^%0mobJ}cVL0>v<*E$#GtVjlr@C3Lj_-)1&5P4P`eB)PeTE4*p{hLDs( zdVKwDZGyX3;f_u;T;Kpo+K{_3XkwN1p=9>>iBN`_u%YO2&vxu2LyTrOISDmb2kmph z5~46Y*hvn`lw;lYu&2B#6YqQNG#~toheDW8MJiMgikfW2LKEUoe*=6{0Ry;a4$M%8 z61*WQeh7*rIunGgXre4qp^GzGfC9isqa#6y!)mPK8|?^3BG{3{LNak2OKe9F1csGNSPiS1-_AQe58=Vhu$P3O%m}W85@Z$XCjhR+$0^MG8eiI1!YdE ziyfaVonaldx>$iGcPDA3B}39FNF*~fg&G|x$dIp*R1~r4+U2ZzX)9j;0ux%i66R2H zb!T236H&GBGK0**g(PH03Tz zKnJ>DfG(K80KMTBs*;?iASyJVu2xP!(Q2_6PM6l_^=?JzGv8N_jK1|bsLGB^vG|aT zWEK@ReCngPkl=~f6P>8dD4H@tXDSt-zyc<~5DryfqP!|i8O_2yvvD(<+%ILR&h7@& zyRrLc1^~cKZ+ar5aVaEDQ^M1x2DP+7wclOy_fr`FHi2J_;3OXSQVFh9fgAP3R&AP= zcDmD~5u|SHhKLqoIo44mQaFGM0-SEB*6A!8Ju@>vCY=q-LbZo2B^#`l9mbL*5|GFOneU>kwagrPCvh&%w%|VF z@mzVy8=mo)XB)9cZ!z$Lo={SY7y~R&Il{38Y(0azp^u^!t*Fdp_-BWD@s@w`!zEj8 zUh}^%rR#;K`OFdD_2Rms3mpjH;{(`ERIgc~^QM0E9eWu{fStIKWC0Ya$bw^`5Qb2sLPAM!qJ$EF{0lj; z`8?#%f}f~-DN4V=5VrnQtr$SN62E9jB|fCLh_(zz%Ho#hHJ z>6s4hikLDxTrcJ#FzzDQ zG~5uh4Nx7;PH{pRbb_(i3;=9FnnfcSu);!E1j1b74T+3&JVbOv0ZeR0Ln1w{!8336XfOEY> zstn`{g%(2&#%MVtV3<~EF^^$LWLqEwUX6~}F(gSq2C9_=%-vOJl+w|W5^foQDX4`z zvLkV|BTE{cZirf`ebYCU!BdFB8fcR2%tv?sP1kze-oTKaK%pMy31uLz(0n8%?HP_D zS_iT%C3Okg?P(0@%~x{dhZJB!Dgd8`I8Y|2f+j$Lfgu=KE>Tw+7+NYA^if~-U7uS% zSc$yI_oWDzaM6WX2^dL<`K8~EFiBt1-(R|4V5V4KHURrI0F%g{U(R3pr5|3>h>YE( z(S(UXl))xsg#-}VhfKj}Xa@O6K>)l-kbM^kl}t&fS|+TDIFN)m)E1RtVWPz5YlcfZ zT$wy%+3J9gG_B5I5k+74N=X2ZvLJx6M1pe_qybPCEhVC5Xdz16Aan|ouuSKk0iiV+ z(>(5AK9UkjM3+je4o^%=2#UrweVSVTRAHvoAf|0vY^En{y4g2%KpB*p3$#IRkb!VK zjz~bla*_~fUZt;5<*eyp01%=*#ZWy3W;VT3}cuQfz~n#2YjVtX|u zBW~!0j$TQmLMTK?DOyYxgn}4A0aqlSxXn~e(bNmMXpzmRg{mUYkRn~&sL$vq0<=&7 z06;;!;t~W^P~DpV=v$9ijV>A-lP;-~24j;#>64yKlQf)`Je*ZcfQbkMC)iF(M1MndHAfR^+0gxdL5 z^DL@cTxZ!mPv*p-NHCJ(RG$989p8im-uV`(8bG~lU7yB}-~k@}1nd3SMs0P0sF~Vu zkc1{M4h`PP58ayTd0wt<-UW4#wdR^gaYs;UW9gA;48gLG)Q4S#*T;v4mzu5nM8C z6>-VX#E1gONMwEyi_H=Jxu3?ykzsNy5g?{vg6zf;K**BpVVvh>YnuyD2arp%wP;s6bc#uEqRJ0;2^(5XATY%brut!1>tpy z1Q2Q`uCRjj2*{(7L=?PJJuup$m1h*1#(R>GbJ__Pf*QBDfeX-N?zqH15*b9$q2+oj z<__h6Zim10lj&t{AX=zHOiV=SOR=HrhF*}q;0a8WsDwa4T#;FtK$B09!ByZ18T{b0 zAjQpG2+xve@&SPqL=(XxSk0OuL--6s5E}C)K=USn(dbl>S{0Gv+mH&$5-{)CA&?1aAf-Xv!h048YOoT+!hQuh;!%If6OXit6l+G@!L)M1GWF%oWd1le|72sWy zNK7h8AZMi31xT=hsIKs7Ib>{@7Vj=aL^6*x>BV(QaI9RV))6i!IngD`;i}NC7Eqf;9aw z8Ek^beaMFYNI_iWSQJTt^lZU{ZAin42%#l_1SEhbcd`NqMA0a~1dy^RixDdCCC4Ua z$s#5LFhIwetjIP16ND@*e{3y(>@CxB$KLWQ+cGeJtjYee`w7Vc49PKP*ePe265tqS z9!LT-^Av2srnt@)FcK6QaB@V2ag@YciNq+-gL;m0d$K2O=0w#h;V5;6H0eY(VUw-$ zAlwRJJFr1>QIfKhVMss#64Xie1d}<>S)A?4Q21cn&LegT3vdFbt@cW<$TMO+TQe~m zI3L#Dl*(H?T2FXWXVS53t|vK1?ctI{Zj?d?a6xZ8ZWLzj0;GvO zc-$rgvKFjW&enoGfXYJ<+I}R#7(7c>lQoARffhUq!KNit?@Z2Yvh&vUChJrwHw~8H z8;wNG7zv4xgzxu?@B0Zh`VuzzA~r3nFJrSWVh?utUhe`7DKp<&C@aLxQX51}06|QG z1l(&3jsYo10GetuN<2jZiQ`1mDXQdS=NO()!1mz1HqGILNQCWc2^}_xCkVzx==ibd z2ue`!jYr)Da*#!S;0c9*1gSLVsdj3p9uMZ2-Ponw^Q7vtOiwNBg{yG)cJqbjuNF3e%CqRrsuB6y4ojMsqH)9~aMS{A!*a9&O)ub?<~L@WgI4aSPmlyl@M?h~q-# zp|m0;cv(jtejc`t6c)1wPd50Px=c@MF6z}#xT=tbiz|Y2hq<2dMeU0fubzC3m(iVs zl1!NR2>Ylif^n*dfa_Cc6~y`@_!!4zZ(mMnk) zwCsl6Q5(IVVnVr;pX@BlvX#g3l&kFgk(eqU$rpY3jm*eo0`OJ1PBe4DB+%?21k*2Z z+H>M<+|sR~V<$tKgxt!lq&u{-PL%9;if_8Y6NZEoT83*%S)PxCrHxuUiNr@%Uep2g zfL^YE@|sVRldb=Ba}X3y&-%yE1t6O4IN9`ibcI87s8Y)w95TcU4fTK)^-Z?{A(|ph zF}o^2g5sp3?Mj4d0Xsy%cpzIcMARtT{aIVfcuav6@oLsXjIKkB`>`kQDY_^SOaPWT zjRFi6G2S9C3S;;F`@warzdz}~OX)A}qEu1M^d6%!MF$XEc0$xFBacD>g3lJDX{v{W zCO8GEjKM@304SUz%H@RRNH7xXm2HPa27@3^@WorO0_Bh@c#95pZ)cDHKTGQPP8=T5 zR*z2fG$acHy-QMt(bcUDQ^sEOgm<4#cf-Y>=ap%N7DYx3NJtV%*j;6Gl6fZa$t&?n zHs@QIf*DYRsI`C%pqiSA!KyS@fg4PG$+4}G1Q&l$d88{BlZO{u_I-+AxJkSfkpsXULqWC&a@vVIiDLkTK*nLHhEaS*mFh5n&jeFN0>Qd9s@8&D4S?k;vTDJy2CkZIm=>+o zt_{J)g*!K^NCaLHG`vgK;oh%y^#(4OcPin(BL$C5Y}l|*Ep~wZRy2zBe#u`|fNox1k!*c*TsPd)s1^F+L(=dS*Idg{{QLsvdufby$p zaT`!Fg%Xu1Q>2iB6jlgi1trB0Oi+_CGzlpaQ5tdzp?YY-s6xj5AR|8N$&2l~T$e%77MZn6$`D49G+bhv>vJ zL67c}>Z+9Z)>?tZ6Xb~JD!Bq^&?-}vNTcWe;_9=<5w(^t5 zo@T0A^N`$G$&7+ZX~+!&$|%wyEh2$x$jwic>#(TKV*PcoV4upX*c*x+hyZr~%XQg- z4?aQ0;%aOxylA(bF26#u(=4%gx9ql@u@EPU(^503Gp33QOWf>nqb$aDOxg^kp-2ns zwN`k$EiB=rho80JkT4*K1(s8;IryTRZaVe=m>!X-XMh9zP5}v+Km;C8f$I@q0EI84^HD<1C}$cAPGJ&LP=XXbIG_Um3D0Pg8v~{cFp36Y>Om1=VUTsE^6$SOAnS3oy zVA>iG2lvIT32sbiA`@sBa>Na7@rH3~-dJd|5(7(g74%ZX2Tk~xV+E<+8GhXHcP z4kFr(XkcTLGF5k~4cuUOIRVDN$!znHQwfgKC+P#F^5 z_$pJXK-XOW5WXm=A`_AS%}Zy-pcztNL;~6ZLS(DmYfdeFKDemoLUtlh82opg_#lsD4Zgpg0RCL9ulwm4mSV|zuQj64d z;Ej5LkL$!C7N-;Z9=1fne?ZjxUwNxh+;@KF%v#+t-kPONuk_p3n2fAIA_1@@WGJ9;OlL}9nZL}}GSTHO zEd;1r2H3(fJ$sc)ZyM6Dgl4yNmYn(sp_&IHfW$&ZGF782V;%b#I6($$SC@0vtsdDp z(Wx?4@0wxLaoNFSwg8$H3@ti~4A1r%1P^*p0m)W?CWZpu&51WENt1R>>cPW;#m)1oxfZvC~pk%2y>)RL?8;h%NYOwfQ3+K0XVn~ zm-K8)+Rw5^>e74Pa7I)0@M(Q7^Rw;ztUjFk2|)qQ=^y`u8^8u4ckOLw``aN{T)Ddk zJExZ55G?q0)FvPZ*j0c5Eco}oCm_c=#|jJ2Y5-BRFuf=gg%9tj$2{7QLh3L;Jan<& zt)=KQgBpqu7vdrrfhJ4@Y2%UKv_>>;k&UU(Fc#~0l5Q8I#OwI)PESnYFcEGb-@b{C z2omo9*c5b#(LONot2`ve+z9|8fk}(r0#38oXn}#$SIsgFxGI5*47CGN$>+# zjh(pZ*XHRt>}dfsBVQt8nraEzl%OH_$0UQiqp=1x^tZLpUDyC|p z9aKRbWZ|OJLBzc6B65mA7>72J=xdP3s&sn#7=j+Wt#EV--*{^O z-)L{WcuH`BWZT*hA{qsx7-AF}f<(S(;mXYm8-fk|P>c`+0>G`@Mj@&kO5W(k36*dX z9ikP?z>iF!AY33)3PQb5C@Ki6{iF@$5~Q!>N&u+>SkiBj_~Lg+(G^=U7T*dMhldtH zk^cs8F%lzs3L+h{piUY>=|lk%K+Cg`4zi@~7)R^qk}(;#&Nrei8naFs!$lgA?&yNU zIJ80u1R!S4&VQE6xftl1;7%OX&bbWe9M$oG%;OuSLjcI`g0c~VauBp#2(bB6%H|TSOG=WONkat#z@i@G^!yC zBq16C2|U681T89Z>|9==Poj-a41g38Vo=_zh7PiBglx%7LHq2W`^Mn=63^NkqJCB< zFOtBiw!+K0%*~eNSJ*FE)KXR8^2^?mktWFp1h6i*bg0133<0YgC*qM#ZrFf%c5Gc^;`+C^Y$#?%-_1V5%UJ?1oR z4V_SP*Gw}tRq$kTZPg|QWmqN#uW1I0tzUK~0RkXrc(d7n^RD*s@EpSbkU*g!l4fkK z4GIk)7UH2GR)O2}rlyE5CPJbj$nB~eB5p=%MhZ^drlLE`?Qr@nB;pXo&=cS6%>W?6 zI~jr$OsB#i#1CmqZpxOggU3Y? z9bAOQ@(K@>0n8IcjROhXxQ3+aH=N3pK!|=VSryzpBe(VRk%(P6)6h=j2@fVz^~+vW|Qc06<4wU%8V{+PW`r( z755R6P%;0!b#pvLFxf&d+vfjB>9G3J00Z+~fyG8uArwMkGAa-=F;HJSlQaEQTkMIR zU~oEEumsgf)T9whM$w~A%gs34y6PXYA~S%D$gEkst~5M$z`+6^`k2Mf0u8llJK0alXb78H8jDLKIfvyV^}~Y<6yHN+!VeDMw)xvi58qw8pSP z3MK)OEUiJxVRWcX6Ucxa2I(N8jS^Qjq$!oR$^F;VBWK zNeJQ)uks+$h)FQD^A3fMIE2AotRx9lfK_Zv7K}`2flThLC4Hh(Kf@j_GB%LpWY5YE z$K=8qqA9nACW44))Mh9^cz$srzt%-Y4$%*pZY+3X6w2i!qUu2!B*%ovM)rh5tg^?> zH&H+Y$o#}12B|BN#1EGSQ=$M@5!XZ0lFaDRE%B_0w`}6_0xi+fF0FNP%k^{nl9Zr0 zi|;I60h2G`6*2paEyvhY2=FaG6p6i+&(f9uv_6er|22;L)dF=UW_}HuWK#uAFk<%@ zHT$^LE~aE0HjgE?kZJRfT?V=gW&m)bUXD!(db5@?Ez_=7Btk(9K9P``MnXaX8#Ez) z?=V7-=0X|*9t=Qcp>w^;4S!Q8h5S?9%5V?~P9u2MXw5Kfu)=SUiVjuT4qq~;C_+rw zz#%dr3or$1@9=T(*FJOPK(ugc^2M_P( zKKs)EI1VfHb}A;c3_`~Mwlam5Mj(ec`HmzM6+=cJx92c-pGB80d~++3hj&o4H%24R zDjB@=*=QD;pFP(ykZ$UVu}DXYqKUNsqA^+-ophs{lu4D8qr0v*f4hu zN_wTwBZ9tE?;4p*@1uID*G#WhE9&Qx3*tdO5mQhh78+s{L}3NdE{>W(0+A9_8KLLL~O>82#a(QPru~Ec5h9t=!$9~MS{d7QG^{1f+TBU zY%#+C=+yvJp(fvCM`TaLz=*(_*$)QHh+`w7+laRQ#Na7TQCMQp-m0UgPin&$K#U2_}%i+8(M*cbr01v8QRxRpDWmfMY)TaKaI0yhw07-lxv z2?Y;Uk72E05%#)QaF7)?Vp(%yQKq^Zre)|UpLS+)6yVs}+c$NllCQ!eHYE(Em5?AL z6Cki5v_TXskCxF8Zv)&RWL6cP`l*9t;XVUYM_~-uK@#JpYX^chni;_O25=JcZfNY^ z9Lfm^qCNesqIP*xe$hsu6LEO`6f!1vu*J<6=Yata>!IT?fA+MG|>d+R* zR#aD{A==9q>H&gb?8QQC_71E^J}e{TC2G~P5_28aZ@q5X3nMazCI{&k-*j+#K_hY< zP7av(#^~J*I7UKbvSUQ}NC75%;U=Z#BC6UZj0oAs!X$zQbo8VkcHID6J=|%XCKSHC zY~A5$ec4@I_TCx)o{yZ$H>D;?orF|0{|Z_a(=rtoNwopc{1)mDo1Twb z6E<}%VrcVat_f%I#Q-G0(sEN=C@r9aC)9^>a}-f3qUb2o)+ZM0%F#XnjYjRCqU+s8 zBoOx(SI1TzLRW#&D0yQFjPfaxKoQU0Cjh@7c%$nRACWu)D$G6a+g?ZlL<)waDA|_l z{eE>U-|`EB?n_%g3St7dUJ52H&;sA$cmwqfz~U^fdsjd310?V}Un(*H3T&10`HxN% zky-G0Mq6(GO&dZ@6WX8#3+E(bU4^^(*i`w4zmyI-v7Z0=OCEQx?nkH2Nu92vLE1E~ zuKSPlHk`Ejzh6leoA2NeKD@DcB`CVSRQ=D6{SCeS<=_43zx|`@{trd~;9Kux1?vF9 zfPn-+5C9Q~FrmVQ2op49n9!j^h!iVQL|_pj#*7I!8t@3xqDO%f2R^J=vSh@Q3RQAk z=y0S-k}qr8Ot8_VO@SD7?)({2ApnI)X#QMjpy<)1Oq)7I$YKVTB?xrPPQO)#g$J2B;_yi}bz3p-riUXkv{v-iRYbH14!m zk9(m7S6M-(H6&O?&K1@`Z^bnvT=ETB+L8&FB|(#IS-GT=d>y%@kXL@`Wtc=F*`-|n zWirN8P`>e$TSC*diBX)n6(kUXnJE+$oovdv=KyO!l)sz{f%M^>JkhBcp8}P*6rw~S zr0AhJKKf{*94U&ZV~`dlDWoQjBq*LUp{Qx7O}V7zMs{jqNL<5yJP-Mm~YZ9{(6$@>y(nhN*uGHpg>#W!sh^bsf zRjVs)w}ML*h8yaZSel+ zW5Nh8Y?pjSrX^pLa%tIB5-LXEutbdE6v0;=YfPrXA~Q_#$Z0hu-9(Hj_U>*oLS|XL z|Cq(}Y0MTP&1>MAv9^Lf<;gGu2OD8d7;C zk@rz#;&wf5*bI(+VA#67KXAuXR5`?^-v@5b)f6Z&RYO@Xa--4%2 zc-w^se&E%LFJ6_>j3-?a)9*@(k>hJZ6vc`oM*Vn&@pcY+XC#$Oy2%VTuH>EzQn6V0ftMSLrD|Fu8Z~v}me=GL=|Mb!Q zB4Nb}R{uj*-%@uUWI;wEF9MLA(1R)n&gyW3Gn{$^CocZUDmme@+-}hIInlMuUGTC{ zj5xPA6s~V)ms8VdAhIvX2@FIlT+InbSVI%t@L;CvVd+XnF^mN(0utlW$%rV#B_SaK za9Lfm7^5O4MPPM5^r022NENSbZ6;{aqRoPHCk}y1T@abx7MpgFd6DrcDtzB&yl4~k zJzI-RaNbfjL{>|Yw_>Ds$Yw#rMY4hp;+3yl zwIB+;XgmPwWO)q8NlA*5lBA@dDJMxG=|zt@tNf#CX6VXT)(}zRTUx&w|KgE5;<1gg zL`^H}bS{crQDjCeCYZ(~rrsfQnaXTt$ej7QXtEBP(|o2ihlkDGO$2$%<0kWZ3C?he zbDZPUB{?-EzjV$IToKfut@sDe42o-3^Gw{?HaNC=cJNjC<7evj37-P})1R~=Xs$AN z(0*>PpbJgtK#RptZ_QJl0L>Q(&v_hPVsxV%-QKYZ_B4%lbaN)0%;<($#gw9Sr7CSH zOYLIJvXpS9EivgxIRd@q+;pcrb)`seX3m}}M~^xM+j+nSHb|oFo@Q&%BTqR>sFo6y zRE=s?r)t%#VwIFa#nDf@3f32{>8lwDkyKjqFAs*5V2*jIOQi{<|6@`!rrOM=@al@! zyXv)gdFAU~v(&=m1-6@lU8`XaTO&S-h>t=2mjN-g6U8F7H>XjjW!D)$4u&nB`rE8N z{h7~ueionB+N?bvDxrn~)S(PT=xSeU(AVaxIkTlGK__at5KeZtyycA(ZS*R%_I9`; z1Zlc{^H#SiH@VDRu5%d{oGrS~G0~+NVs%4P;%YZ^jqTp|wp&K65lg&CEtDg-lSs6k zS6AZEs#M>5RrtC$zVw~1eK82${OWg{&x0lC)Vkjj{nDZkdG40vdd+G|ldf|`@PZwz z;0QA~!4tNtUrW*{i$afi89uE00t{kDN%lBCa~fp3Ya;^||Lr6y4)IR%gxSkJFjbnR zXJh7rqMZZj*{>}EWUm|v_cY99eb-u4V?&s`f-jQ>2g z>MZrX^4)5o4_#kFCmPX#i?gF24e3bhwxk6sGle0H=1gOH(_;E-Uo8ykPm3COkuJ5V zPrchMr%AAt1+=RzJFNq4E7sJK^*v_|EnD~R*1X=eua`XJU_Ug;#O`d9D~fD>qI%iP z#$mHXHE9@8`nVu`jF~Nc?QCOv+hBRNx4R6-Z$FK;|8Is0*K&&PIpw)ix&hRy*D2^g z?~l=nCiJ53ZSQ>78^7Z2x4-}WxX+#MW)I=^rIUGZW+uGB2!C+HCCq7sJABkg0=UI5 zj&X2uQ^xP6ajt6(a$1Z0<0Hql$$LGvlOtK!LLN5DS<6}{%N*Gmuer@{ZqqsvoTk<0 zxwe09aG(pFm=MOf(Qk@Y03Y2dbFPS;o0INAts6ajZg*xl4r}f(72o@&x7WG;b$u6l z>0~dv*|Qw&FKcMqntpiOB@S`7AJfxxzi_DQZoISWeeZn74Pm9%@xaem{o5Q^Pg|@sr1N* zDt)__BsP>TiEBx&i#sxzNZ}~pE}Buy*jtjYy3&jv?#86z!r%Wo=*xfp|K7OZJ3jK+ zE*^oeDk$)s^jWV_E0;kx_VXIO2Y|{lH?9&l{MRkVHz4)X69jlH$#E=ulPnXX9FHe0 z5oK(}_D}RDf+HAWqi2E*fqGTceYXRC8RLFkQADcKI^ZWvR`Ne&0e)bSF&TJ+VNp1e$}}Xumqa-j z7TxDHK#)19^I)z+h^Uh>F=&W$@fwQwDgYn>%`y`TL|1r6ae%dlp9qS)=pUL$65+CZV<;_8;(M;RKz7r6|5Jv|(m)JUH_uX9k@sXT z*FmAkjLjHMC&+Usco&M1f^A_j(D5-AQ!zf67T8B7L_~>8R2Bu*gC0{BxTB5y2Nno$ zi4H-7G?*m#Gf*3Y08xZ`&WMls|M*9*S9P%05wiy#0Er;87eBdog{FmXTDXQ1=s*K? z9>6DnTxe9S;~#ND9v0~&sZ)U%X(_vRRDI(gc4!p3r&aoBk|+6$l2Lkp2!Eo+aCr5S zG1-zVIdL+Hk~fKyHDrIL$djODPq31Tu>u-X!)vpZW8s1+sRd;==7!2PHIRi*6Ge{w z=a9#Ecp&J34`q2P7lIe%Q6U7D0k?BmmXqrfFrYVO(0E)`h8&{jmOhty)hL&7xoy#C zTw(cncgZ-1I9_bVmt}b(0i$$IfnELxdw{Y$Zibk#*Gf1f{tf+jK_h9r!A0&mCYHQ(5Z}ENqN#4Y%7+RXg8K= zXD@g;oQiXnc1f0Prk37m73cYu)HavxNtf=aZOB)L(xVgMW}o$mpEDzt+u3*H0gb-*`hNUaW2ZDGkP+($(uH6o4$#oM5Cjl7@on2qWs01m)Voo zxtt}3a>+?}(`lX9|2cV1YNSm{olmNC;Q5u^xu0IfmO;9fBt=GQ32Ex7mm(sj)Mjn( ziKg(GrdC9rR@yRdN;H4TH!lNcrCCe38S6%nyz_wv}vlPimI_`s++oB z%+jU>mm%O|Ec}U<*OMdvxubjNqeNPYA{V8Y2dqrSWIHCTA84#p3R+wFt4xZFP>P+b zx?5z0snhBd)Ox8kghD>5cG)#;V0N0)CY%FPrsI01YHF@)daghOttS~Zc`9In1gHtY zA{HYM^x7gg|MjQtN?`fwn2C854BDH7`k?Vjuzbp^c4Cm4IYExfu#)#{P6U=q7s z;1i9miis=HRN3cvC2UcQS^oqP_pF-6bOMY8F91%0RjdP z1_}`Z0s#dJ@wWilrEC;svP7=03YY1sFb2T5k6U_WyH<{)BA2KI^(qisaH*QB6Qe)| z0-*^K|BwWlYXGrvrwc*4y`c#Pps6tQu>x_q=%WxBfDmi23J6gT1|SM~YXBk8w+g|# z&(WBIDjNdPx(Fc!Ly-WIU{ROIE~_gL%nP!wYXGDRy@~^{1uL+UX{d;Lu!@R>p(z|y zg-LqGRhc+S8H9lj+pwZ3xxCf313?P@AQ0_9qDt`#2=NQ;zzPP?3Ig%J3&9EwLBIV= z3I?DBq)-bZ;R{c}zn5wYn}86b;J5}r3S%HO{#&~Cpuqqv!5kq50ujOnKnn(d!3wbo zYw)`QF}OdGy9hxB0Sv&T(7)AN3;s*N2Ef6zQ40rb05>cUJ8S@CumzfG3!U+~2b{Vm z{~QIjFbXnkqJ3y-n|NVP#3X!mJ1~XCDY1T_nk66;SJ_0Ws+y{``Mw?os|gXnt?;=C zal{6&39Vqi({3Gu>;Yyj7r5OXXL&WjMO;Kw_)t5N%E zKB-Xhs6c-69}dZjxJZum13UgFj|-@g{O2{mXizWGES*(>W6R88>vCtjU7G5{#%lof zyU7A^z$(%TqYy=`YXG+3!x+=R2GGCm@y7Lg6%k;mtsuc4Y{&``!vK5`(|o{e|LC^} zLAxP*v~yqpYJjvB0Ri2L5dHhPZT!ltd(E6|06ClxmkY#0Y!X2H#F%U!1Kq|^5WuW} z$Ktx4iOZho+AwWVkLFl_g~*L7(og?mev}A=167a8LQNYZ)9$DxHW*>&3eChd5gg3C zs_etI5CvMm!F&wBNKwe1?9B=B&3ALc9?rg#eA=g~Zx(D121r5>FY{ADn z8*}`|n?MFdVaio~H3mDpjOo~L{k_(au#8$bZ{r{cR9fhlk=?S{C7prg|J62h1Bbk5 zd>WZbfD?xoNQZE!zU@nIIgMBzn*bZl5UeZ(?cl?spb}8bBAUty{(uD2yahn8(GD@a z*ZLDsY}XZG52TRS*nGpHfdQB64z>Wqw%`i4U;tT=5H-x*s-eo{jKdhw3eKHIdW{g_ z4a6Tz2G-oV|4Rx9(8LN%+dHMQsP}d;_!b{y(;10~Uo0_Nk}+^GCCa3R*tC7Dqa{j` z;4nSRM);yN8M9~t+fh8LCULr~YpDlaxI4QLN39huF&{y@6UUtqt>MT)ED!Y|Cb zTM)avOGrn7e#i|G8E!SJvDIJ&wUNC}`3HGa`7IX-GjpSc195zy|5UmFG*7{TEAg@9 z{#}b)GcFtWQJR>`%F+mnc5-F&~wyIXKP{-F!<(v?5Ey5MvIsaem=h z5x6yxw{`x=Ev&d>$+L8;r6LqHC;CBh-qE55xoDBLFo+~Us4QQo=m5}yCcTXzO-r;lqUuyu zoTTXEGFDqzi+P+)th7a2Qwd2;X&r6|8szevo7J33nbKbFtW(P63t#THf#yx|^Bo=< z1`|F(F-7bm&~)a}Wm-P;{-uS^Lx&F1QqQ@F-B(eCk1-q>_(u& z&aW%Pr{lvDsebmc7qyc;Z>}x(>`V9JE>%`dR}k5M15WkPHDYCl*b{~u#W%9T?atj8La$C`|&rBKI+ z^E#jNQYxjJpI?Yy9F?;Zh~M$ssv50+~5Fh%%vJ{}S%1{o9M{w%(x$8mQW9_WO>#e`*nX+Ux0W>=Am9N@e$R z|NeCku_ej;_1}yF!*+9L@W{{qN(c}J1P&xv(BMIY2^B76*w7(D1P3ENq*&47MT{9I z7TlQ8<41uV2Z{t)(&R~$DOIjy*|OzEl0Xp1q&d@OO`JD%=H!_G$xfd$4g3V+GeJ=# z29O?Qy0j<|rAD7dP5P8+)uU9KYPIS#t5>T?|F(j?+O%v}sbY}hq$7ULu_U+lZZR@Vx8~1MDzIl`W-J5vp;>Uw47apAUX6P9; zOO9Us&6-TOnK24F%JKa%|Tkml2eJg>ey`}N}6!+$S7{>-56zpo6BzJ7o6 zb`p@Lpl}*$K%j^!a6ttdEK95;5{Pg@2`i-VLJKp*a6=6{H8c86Y5Nz~O0g1YaLHruTk3>vO)HG90H}$krP&2&DvBbJV z^i)(+Rdv-HRUDNvS3QGu)>mtl)mBz^S$>xfE{(TK!I_h6sbxR|3(xsb@J8V!H6RgzirZ&k`wXbVzP#iI4yX}?c zM%q*aM$22Yy#eU^Z@mNOTkw#59X0@PQwCRA#iMPUac{*%-0{e@wY+l77tdVW7e6MH zpoo?hX=#i)N{S!=ATr2rlgP9BA=eR#eRW1Bn!VM5Tu)-CxEz9tDBfp3eWl?QDxP=a zE2;{4*bl7wr-VFbh;)#4|6hoDR;52)rR^26+o0|bi*V2J4H&;d@y||wLLxAbVk9`A_ko*Y9KLox{fdl+s0T1{-3(;?E4y)L%2E~Pe zV2~hOn1lwWU=S`$;e!THf;|!XrUoe7)3%z(F#(q;viZS z$P>wEkSCT=AZOGf8?%T;fsA1wWLV=Ht9V2MXkiPQ*n%FPn8t$uk|0&oq9){M08J?I zkV{OYK={bVB`&dw|AN#4ASF@BI4T5?n_MCnw&03Z*dmk$umvegp~fjhK?`K;;}{-E z#8GTPj*Aos9SyJvQYg^?V$7pK@R&y<>T!u@6o~bXs7iq#(~3vb;~6*6MLLc`6J&U% zK)N`JR;=-t1962bY~hMq)RKs8pd%>+vH=5-Gmr|gg*|RDN>P@w3~gPEb@a_z^HB^oyYkWjktNP=$h#6=D417g;gUEo^}d8r_6GA39N1 zj3T6@&_YN<>PnP~bQEKdLM63eNG+gLmYW#E6t=JgDonwJIpx9(r@#d&>=dUcXNO!VEb*K}V;Zlbx)TH86r#fvaQM(#dt16WON?5?K>X(3>HA`q| zou9GR>Q=L|b!cv#>$nW%2m?663JGZf5ei^{CID6-MPPsd3QK^81ePF77zkq-K!kxb zp|2Flf<-FP1jfFxj%{2B88cyk&-N0u0}1UxB4L2jp7tPoib50&Knga%Rtgme+oTr(b5AeXFe zbgTPa>lOsO-z8&n)u=}1B615fRU#*DDMvvXWC|w~2nS4I09WAm4FhSzKZ(NjsX;pH_7hGEIa{KX%fx9`&agumt^0@L{l0pV|6^ z|9}7(pb-Xef)xULY{43!3d$}BvKQM}0}x;c0zoW6hyYmw6d~CLV8XNuvTPwRuVs#X*F7D%Ci+ixwTwvDPq?Lb^>5C<2e zzprfrHV{2bnPTD$wh)FagtHwqjD1x-(F(UktAp09;0Z0 zQAk3Ui7a^(o7mDKro4y;9|(dAvWYaZQIK7Lq8kjr;#Zi$$EBcO3eDKW?z+5;uG}Vs z$DqV((s86v^k5BviNz@HP6<+QaD=b;U_!oJjvR)$k_EDgiq|oUeKbgZ1!8xB|HxP% zx79!dY#edc4uljBeXRjbIS{1h*A?^RLUsk>_7D$5jM+4@DB!MP5z~|CT8@0-AKv+a z2=pOcHh_-52})a3RH7ACGe|`mN>YqLqZ;J`39z|}kc!x(D$PPnHNoUn7*Z2jP^Ivt ziBdymK@2g)DZDAo1Xp7=`p?H~U#(As>t~lY(uiwwm(yIfIwv2^P%ON{D}fj`fq*xGU@XZ>h|FrYc8j)w zxVBS^ECVPv184vXl(z~bh-#}agUAFT8UTXuHpW`EZA%DZ(ky}~ErK98{}%i$7$k`D z*%N_a1==D7G6@qa)HKE5yPyk_6qN04~s=Qg8!TP%$~YI}Y~isCw6!{S%kSm;=zH~ zfHYbpR$zyTlA~1sv4XHciuj^-C^Itargi`+G`lm3VzV&f!FJdv|2d;GIjb#JSO*c? zGd&wVag@T=GPFlJG~q+Em)fIL!!*p=G)Jp6cx-~lVggoswOO;rd!)5fd#v#zf>Tp9 zNrS#dm^4>QHGH(Sgp{>Rqdz97#0q&5vN4eg(v=zsEGH;HV-u{v$}EJ?z=CK%0}#Ir zw6PUB+H*~AF>MEo>I<1@pt$+hcpA1Ui61bv_ zIM+HIo--ei6NpqCs5^u>*NOxps;(pgubk7Om*XtXB8c(|xr%TpjKjHglB5c|O0=Z8 zm%Bnuuq1=ngzoC62=gv0Q^KH=0wUTx8UiO4|0H-KBZ4Hli-J9}rs0!3 zTzV}&VkMrmrdkrAvpYLtnu6V_%m>rVNg4N zA_EOTCxH+HQ?#NSG`vO_(%R912IKJWQz2CF2 zo7*E-LNt`xge^!vSL@I8Ge7jpKI}U`_Z!gaE49ADz-z<6z6!|yWWNIqH~;LbZmUNG zg|+w_f?H#N08jwZIF`DKE4XSaq9IYbk}DK_k&PGt|BqZiVVkUhC@jTl1QR^AV-vS$ zGl&jEtO>+64IDLci$ETQz`r605zICNSOj7MA|Vf+jTxdoTcZcm=$R$^c8mkV~*! z;>swTqfOufR>?12P~1Hn^?Z`o!D9 zqouU54d}AN>o3Z~L4k0G)FUVZ7zdb}R&!F%|7#*n!TUotLPr) zx`Sv313*`Iz*JD$%~l|@Wi&G#lty|b1rFGP65s;ztg|~~1whlYKNGPm7)M1*G;=gZ zL_@SKm;y_)M}(|COLNCns{-fCM~k&JR0Bwj^+#BfM|>R6@?$l6tTp&!$bUSw1rP!R zh>)U~NKElHwD}$vnJjU$KnpC%1B5<~Y^));S%JXOmL!NGP%M2Uh`?&emBiVUTmo+^ z0wGw4DisJS_(=%UNqze)bknz@B(#7FN`W9af?G<40HcB^1H}W|B{1CC~~Athy*JPLruVEy$sInl9HpuCj|F(o`=k z#3C~AuAJZrUV1wBURu#mIQCK+aB!xCGCr&7Z=shJ>e8pe7 zvWMHUU6Lrq6^J+VvSP$Vj}oI16Wb#K!h@hZQ9?bl#ZK+C1&9)qtb0tx*FvBfiEf9l3v#9~40w#dq>5D$+3(zJoHe(ae@1s8U zV^F^uf&{%b_d7olM!yMGKM0M#|Mnw*C0Kyac#;?9KWRA({p&x@X%TY?9d>JiVJkO# z1jvCXQUe@_Mo=usDg+({;vrq)ftbL-B8X*+;-B3>9F0Jege+~NuzBmZR`pvqy22D} zh|&Vvf{5CLlYl6oqcVs?>ohuna062~p^V~y5h6k@>LPO;1v*N@!#!LG>$zJ3T`TM^ zJ$*1YtwJnZqqY6YKyB6X;v^-~%IcaT;$l<%%((;uB+GTw=xQ!2oB|3s)y>sZAbW*{ z!#G0}FEkz8^^#<#bgoSZ<0+8SMZ}{2@>Ebl)lvYmOw2?B*k58{ z+>NR+#;Bj-#X&LZGJF~*|8;c*)wa!vM)`rX%z@jhSpnz%Gb&=DQH!c1LuJl zvu+x*cWsB=e8w+ghuE4ZGT;Pi+JO8m13D{%E+B(ec&LrKx`15;LCZ5ii-JVkBXm4i zgC*GYav@5E;CK|sOS9-IpwU;0HGP~khlRCLD*%nfz<$(Ni-yNfi_-F|1bdV;lGRXv z90COh0$ux*ioBH?@yLaMQG+=^QwX72ilY(80#Y;~U$Ui&%E9Ush&FgbE>K0XO|vltsa=|1nB%2WYF)|0 zGL`z~k7$Q@VyN|fSF;6Im0|@>AO%hcp*Pgu{LNo7NWJpp0#V34_7t%-hywhCI#(Lt zOjtg3R6dw;qKxXJ{iJB>d%g)}@C)uf>sxRDZ9kHBKLR+l3WZPu<lM)S4{}X+y6GzbzjgX(Q5tnpPijZ-Q~ba~^C^5HbLC_-CCr>_+$?-L=K3Hv+`Lxk?N*$_O&vn4gfKI@WF%V5 z2}3YItU@WUDJx3bLX<8QiUQwCWlZ<-h;uL{_^)3ch+!6V{CWi+qq8|80hlxhE$AmL z@VS01z1%!oGq5`{!!LI>0Ab9sFWsf-yl!s}J*S)~==8k9GY2I%F7HK%F=J`7j@7hP!z_C|NJ^8e=WA(^E!j*Pf(l_6mlY9S8x@(g4vNj$ z0~9PP$iSsOK$KKTDxTsZZ7h4_wkj4Z2efg4;Bl7>$%6ndtClV;ND7^_+IiDjpscW? zG~Avf^JMzUxP_w>`k?%R<2P{Yq2DhP`k)+A%qyeoYU)E>g3GG=BVr0VI8{P~Kz1cJ z&Ay$kbu%X>nlMAMdQ7@fXlf)T^sOUG%)M4QGquCbwZl>vml!flmh-JBa3v%frZ@uE z|JQ0vuk6&?H9`lQ-AVpB+U+I0O*pi^ZM4?y^J>Mry9IExBEVh4&@z>Ks$D4fg7OxGvD3CpsvTs#allN^Qr85qekL?5%vK2`F)Rbr`Dim6dxg9z^MD)=eyUvP@O zcmP$u4v+9~3pWg0e+@5x|2*OM=kRX(J|$3`$&q3F-@nS?3;x4-d##H=Tc2|f9m}kG%(?wO$p-kiz$Ub4ImeC3l;GW<2RBbKz@>|716yCYicOH~)ShJv+SQ9tr)8jS4U8dZ zm+I!p1?NhVpal2Oxz3LxRA6wqXoOWIlrr#2dskQPUS&7Hfr^3D1}IP&Poba~#%o5c zT1Ai*eO9wuaqV8pjHy-zT9sl;R|K_F5PhW7XCFJPNM-;TF*Rs_WC$X-|6qg#eYV$W zrPBZykT*a6|`}*3j>vKv|4Po#b&G>I-5+qSj)(bDJ#AeHFP0$o!cSjJs z+jW=T6zh>i5C>DdZNSq8$Y%hNj4@~*gRPL#ihr%x5}PTm;0L%X0tSw_-}d#*INyBR zry3XLNywmtmwOzc6qXrxP==yS5t}PqaIwXS0Ftq}>a5uF|BowWycl~KrP$a87iHXj zyXioVA_kG8Xc5JeT4a%=@kVoDr#7Uy%79$)2Akz)KnI~*!5H&7 zBYx~-hhYj{1|t|Cez7ov0SsV()-a$1%q@P=OM@;H{~Y6BaWrO;LSQvYGsrQF zX0-ShNlal9>tPKS@^cG&5F{*Zpw7eMn3##B3oX1kND&{l2{Mq3Wb48W996Y5B`9$! zp)80JtAm}eG?6Q?=>iqj|= zhHO6bNl<+xW1@;dM>tiXVirfU2`-d^3{%(wH%Z~Lszim3t+2--JLHD19FAtKpivia zHwFZ;VhluD#TbO=Bqv=fNle;j9yM{Lwv6JAqv*mE*hD2NsU>@|LerPdbS5+vflui3 zlbtAP(KW5fObkU6N4sRG`CYFGi>kzyCcr=b|9L8deVQVU2hz)>{8 zlgVt$tBC39SI32uO-KSKbX{#n0Bbf~81e0Wht#OvJH7SIRw}P$C!U1e6BD=g%|8YKoOW&TH}5Kr{~)OK?td`HHwp1=H3T)ygwETy_J#*!8&m|> zl<>4NZ~}Le#Z(|R70o~nQY@UlssXerNFzkp zkTMfBBg1mYMn2-fU(u=nHW^l{T;h^~Y-v?en8aUu2tvLtz{Vs z*%D$8#JK`CvDr@BtXoCbE@q8G|Er5rj^h)Y^hGd#StA+82-m9MBr|EjZkDpdxutBP zF$CMhI|=qy+c35&Qpn73hEmPg)={pUC`fp=k`;oK;kYqD4jp&h#V;m=vbb?JT%S`- z;V>zh1=-n^QFR^HptCD(&}%_jNsw0ZRjyUBr6}ZiOIEPM6$Sbbem=w%dk@n?qQkc^ zKhzHG`iC8D2-pS;q##{NXm(z?&6SnVqX~qL6CB_|vlo^dDMVtNzi5XW$oc4xyJ1E% zDn%{Yfyek1DGT?sFh5)FPk_4ml5K%r9%*hoQHVhclk1a4JL;xD!S73Xx)Yu31gVVj zTu^CZ)JH3!^hHsDO+fBn|D~wj(yOmD>zxW!L1H?pZi9WMKDELJTV;i)j=Aiu@+sQc zUeu$qc~`mmsoa~2kdvH*Tp_cS0fexGgF(lZWbfcHg`O4RrJ{e_6f!WC}MlWt%i)2P|8RBmG zhX^^CKRq94glu67Fe?ai=fzyK$u%{_8PjM~?-NxMt*vcM^wE4Rg`Gu>v8O@30kW1g zul?3*;zuqcH3WXSk>>kV$qKxVUy87lp&%Vdl`RQEq`m=(Ab%_GcfWf$1DHW4a0PhT z40nx}cDaINWC!V}|ArKlf-?aKLF`L^sET&AR$Rpu7u-TA%#JOTPC<|Y=}5s8(3cea z!lShUf!V?d=GEaGPCRXa^hl2w2+#5$j~FPA@d!;8$kTho6ZHV$%r(ytf>_OM!4f!% z`@m0*SpoVmVVA(q_t1}=NTHl0Vf)CK{ODMYN#Xr40RJRV1VE6H4OtmJ&;lvY7@na6 zHP8g1;TlFz*r|#J$)Q2$&#^2-M3fnt830aw1g^MU3B}6$KBGk#R{FM*=L{WH_>WPMxu*En;-Z-#Dk;KP*utO{Sn*|;O61A2TxWRWgkyo6P zE!e{oiN$Rw{|3-3R#TXsrzJ%0eHtH;3!$N&BsGQ1WeLa7+P_SOPN>BjEn?F-c_TV4lB!_i=ouP8yb-Dd&rKji6oi^oY)x%|lDfo1Daqpo zy`lkRhh%)md8AuEwvA4-6_6B2JCvNfE!;tN2SN@GLdpg(`BHui8$#&KLEzhM6v&3C ziX?D=%#;E)k-;Pw%oMnT8IaBtG+R5IU>lGV&3N1)9g=r#z~&$b@MO!ixSY%VQ%<&p zkkA|+;gOW|lgqFP`}B#9ag-I1R8msmp;Q$52uf4-2}W6z_mET-d{mdT2?c=35@=ml zV%=AA|H{{WT~x%>met`|9z+5Jz)HY`_t4PU9fSz|6cM}%AkJOgC1N2q;@ufUb+JTs zU6m%(R$MAUL_)`0JPETvi{K3gWeg_cMIPQXPAz0dcyL84pju8ql0k%ry*$@!Y=?=l zlE3(is9{L336^J^-e3*awYkQ;4X71_vS|$ldJSvE#P@X{a*=1) zcpv4M2Xl5p{1ML07{vU=Ct#k%-PA(=@n3#&mv{jV6roLjdRG(`1b#qK;1onjmPZ*x z|A^pxW^0TBToFiXHCj;6mj*VZB=F6M*hmLx&w#cL;H)6cgy_uNLMsHH%k+luBu~!a zpz&mZ(41UbY|a)?&l-#Y5#lI`jY)`2LHP{9i)TK*U1SCQtB^-pTA%se7gr6D2R|VRpnMGr) z0w}`AI4G+A4X6Q>K_}=RfkKukvEnPj#yNGxfl-8t1@;e3cGc!DQ*fhpKRMeds`7$y}Blg-#$!nT38+Dxjzl@b)vD{ulGjYwo{ zK?-)k2AE`WkirRimrHt_EFKaWn9deRfD}Z4(5##$7*CVvq*`Hja>Fmq`8PA2u z&(29koe5Gd3RVu?mVAlQPE?z0$y8Dl(|L(V(W#+)2^CNZ0bQNdd1cqC|J0d^M7Tn%rumPZ?Kht1ds zK8g+TPRw9g-}CiE6aW_|B|#r`-?4HH)dbepP*M1i-{p$$_=(^6rXTu|r$J1p-w4R2 zHl(K}gnVl1{?YG$kk|edpyEK<{tn0~*cJbxR{Tj=63X6imU7i5M3Q?fWQUlHSh`D{1{e;rkGA`3xym0&x@kSQ#?Vkuk9uvY`Z};TyJL z8g`!>Mll7IEgc#J7o&<7lNsHKnVU91BX~hl8o)x#DWk+hMA*a||5UFuLKWbYAcBy* zuEYQ^f;obs;~4-O{Ba=DhaH2F5A~)m8U!eM;(-3!e_SL!2A~;uLP4}ASNvOiErxhb z#b%5uY}gAr$zn_d5(Z{kCuMSAPNz>aMUx!ntl1j0sRddz|07>$*1(8JXK5Dc4F?zL zVm88RCoyaDlBRUE&9HUBF}H>RY=8wG7&^H@`Tay3A;!dDFStV1Q0z=!XxqnlUwKv@ zJ%TeSB}6!5tNP;OFttMzdB=bNYy>}xuwGruvUL*g?-3R4sH8}pXJ!y+W| z#@`*-0xBWIg(So-D#1pUfGe~C84&9?U7R9FK|9z2DahiWGR@9ncrO!zn z6KEyZg5^?sZCQ$~Oqpfb&Xi4&3JGb%tkmT~7yw+l|1H`fL|(!vPu-=hfW#6A0b{I! z^w5nAmY02?BCi<0?JnLp7R11WOyu~7D=_Z75Cr_`ejMFR1!QCzwKZ^d~_?a)A7^cU$0o(r z>+fYk+5i$L;*^&G*a1P@L4RK+!E7dW3eRz&|F+1vK?~S`8`wcMc@2G?MJt?O2LD@# z{=$K!ASo!^`;kH$jKK?!Nrgd=3Xj4Xr1X0n@WMK6FrvZ4uB(p2KwnB3S6TT7-!sqM0+H*td8^lt)zHNNIJ#4}*Y*&y%f8W6!@Hav8 zH$m6|S735NbW16iLjdAV3EWN@lt3HUfE_$E7fb>fq-=no;4R!kGnYaekis{f6Vi_X zHwjG?_|DA&6ilR?v`=%?jiE`Ih5g!#eb{qJ znRQ7cJmmtMbr2Xpn-T<^Zxxjz0h{l=0rdSq{QXu5{@nw<-y445C&1n>z5(bxn=ZbV z5q{(UdmWnP+Ud%x)NxFxo!lmi+q!W>#4RC`giozmDWtV7<)2$Km;oY$StJv#!G0z? z26+)gDVTz%>VB*9KKy1!0QSD*auVfXjX{`43ewEN4Txvv%jcep=$0PzlZ*5-7H*P4 zL_WxG=tN~%r)rai(7Y}*RmEiaYNEOBWRoK)b7%IEE(0H^1X50Qu@Y}X7i2@1D+~_p zL|UYA#}fg>D+2?k7$_)3|B3-g2DB(NkTA+Xi4hkLOk&`oL<5=_I@GeIqQoRpl!!D? zQer`gC0U*%`7$HPlQWgbym(WB##RP)_T>4qXDI`&4A?SYs+6mqwptN2K&c89Q>~Z+ zwdxZqPo`T-ZIMETYFMLNi&8D>YOGmXXwQyiYqS*^17!@fk!a_Rn}K;XZqfMHsVOsD z%5dRQ%1vSpCCa$r;>O-Dd$*X@`$rXRQdh2~xN&vsbE`IF$ZQ#7T8kDjYeunNBWlf< zFMW^mi^(EJ6K_qv#bhEb$?KLSQ-%;A;@mkAA_b%qX=0s8737tOAq?=aLjnvCzyLNR5>m*4YN^Knd)C@)pfNTXXbVmJYADJo4TwUMF%0mF%Pj|L z#}zOK63P<;gzCghGtex>6v5E!L`}NF+-ajaB~k#Tff9Pi6(!vv>J6e?@$3x>Rnmx~ zffBWIqlO@CNTp4>)N&xX9Nol8iKNs>5=Xt{ViQmw9Yrp=`WmQHhBykYQ%Uw*R8dVS zOzE#KxS(Jl|0+0;XjcOa^VI+fr~phL$c73OSwZ#EQz9)^l@(SBqsYnGS?iP{r-5?H zR-$bo%!pf!xb=2i1F~(2p(ooh0L-R_+U(DDhjLfYKbZ_uDZ0!sr%eOwbtPVaHxn4l zfB%#SV1HeCa!f&odbnPJhx*eUTMm{u;)l&_qZGPG7|19)3=ml_kpN&opTDg&bD%Qb zv9+)bqyVij4!9`cGbNQI#TI*7A;q(tUEyMaDL6pPl`={pgB00jOO3TLS{r2yQF>Et zxT=BEA`@q|4vuSQ5!(7{DJ5Zo3Fw|X+id5`Tbn)ayj#0G2H0z&0rt?gt`RF5S+9w` z*|S@KA=b+gf&ciBpbr5g3Qv4-#erb_amOK_T=B{qXIyg2Gsisf1S&rn^w32gok58j zlqki4zTlBU);rXw35jA?QTEz*q}@d>23lf?*FE&GcZpchsFqp=ip-X^j3OoUXT2O~ zltf1{U=-$kdeZ>x2SRg9iMSugm85t|Xi+Wpq*WrJOcCgn^<81#l|l`mf(!bemx#-X zKvKvrC?P~n3R{?-CZ1%fO)w8aPufHPJrxp($VF6M>e4_E$ShQWq)X=0$QY0#wvFuX zBMb4M1qV_;iBO>n!!ke$2a-ZAOhI>aLD&q1;*?j|&?z%%mZCuDkcepHCVL9tLOd11 zzl>xcHUGH?x-fDm2uUF(6oTSkN^%p8uwr;wS;|1@WR6q#MXkhB1)gBdLMS7+zzW+_=(}#L-P}j1!#Y zkZlQ62;gp{luPzBXFAoPj&rE9w)1>vZdLf3cKC*#A&{*Ky znV)Wc)0^Q0=Qzb#&TdMma06LTf(my!cE-na5rXGH-sw(x+OwS%QYR230?!7-?iBO; z5dZB$G?3KIZdS2F=s;pbJK7bXMjFY)6qMkj+ZiB4MxzBi48T!|81G0D8H)j!hbjEI z@ktzEnE%}9zy7tO6<}(Inhf9xntEc8UVu|4beg>~bix!oaTlXFaz2R&(KE*ql>FkS z5kxvMI9rNpokU2bSQ&s)sFKJg$iPMelxljhiq`!|=tkY?u78P&l0!sTCssAYQ-4|1 zTxGQom2?4E1KHJCxzH;E_;rPJd4oU(^}hJM?}iR*s#2Hrm$;7gN|8mBtVWlolc6MA z86jN~>6sBz{i!KnA_`~)wiD1Q%(O}o*k}j#F4Vr3w5PR~!r(=QjBKGKq(E9r&Hr>U z-wMnft(b&E5+d5wuGV6%<-%~?VJ0^W(hfJEP#Mip(=l#_6I|fLE!=Snp(J3G_ps#8 zHjrJOb*y8pxWk}K;f7L705KgSgVUBq8>o$EepAD>ux-sNa$_6WBrrs>ttV}N zW5C_|2Db*hjcgM=fY! zB;%DOXOhthlcpEeXlY`4TS!9xB+_N-;p|JUz}}j}SBjlx4}3{+*Unfm#Q!!{L;@p0 ziAqXwL-rY6|3keBbou?6@m})Lhev$)cbJUZbZz267!%8W%KSe_+ zA(GgHlnA(~Cvj<0#GRGydWFIjz8bGDG$A4(HjpxcPh+y zZLuy=;C2h87^(6$lgYo7ViG%1UR(IR7Kv~|&3-IFT}J1LQ*gl*rl4dQNb!r$aA6CN zX$5H7umv(028NBn3}~L~UN>|GF{QLP)KWw8+tda(C*RF)SY90B82{%ZOJIU`tV8oA z$o!VgB)|}ekR6|2Cq3;^4|bFp&7%JeJV;;W()lKYZ6aL6wLZGy>CBu!4CAtX88j`xi4DHdzppU-Kxdkx@)< z6Qf9Jlm1e{t!64!excN!COB0og{ttH(!!z}#Ss0S>{*Li$Z&lXWh&q*uV)1o2UOSv zq7B8*h7Hs!s4xA^*n@p#GzwAdLc+L;wT%#>E4I32uD^t<{QnR_zqZofevNER^SqPf0`6Sjb>c4D+hN+J?LVJgNQNMRDDASoQsVuV5= zTEQLQtsS=Sj}+@(9!4(cB3y*Rs32sJ%)k`F$N3J!74AVYC?j8{z-VGdGwh(S%z$Xz z3%=Z|4Uz_Gf+Gr2!&!iX2)o7zw+0C_0VMdwZLVX%$Ogj>>}&>SZoUI5vUe2SQFK#|rT;?CCEs17QL#cC6#bcqDa3#9F#z?f;BSMI6xp6hR^~!2mdMBPxOm zMxhp_tauE-7wX{@eF3D5!WSX~En1mm49uv`I>9OA zEPNC&to|Y)j7Wnp0*Ver0*}Ja+^2nRX!Pm_t^Q)AMvbiykJIW-A|{~}7^X@-q81;b zA+%%^$gF?3B-GmIAi~cfw#0$_LKg{0th7WOqXmWzi9%RNA`C-@a;VpAEr)OjVYo|U zh@y-vOM^I~twgAQJVi=MuqHTbiKgfwVj?4?ts)Pl1Tk_?@}!Cqktgh^7tbj0&`2Uw z(kHlRCCw;}T+-W6#vo|&i(ZkpP=*u)ax*5uFaL)PE&|P3%B%1QDXF3q5Xl0! ziVG4#AR)vQI^h)BgfP0GFh;473WH@}=rQ_iP#VJw-k`nOYY7sAluU^YFhvVA05@PM zH++LPenT~~hHA9nHzJTbY>qFJu9}o-4BNxz#N%z4i9435Jcz*Ph)(GShno<9oFdbl zCQ~vilQI*8pA<(U_$i+9iJtDMGv}#vJaaTf^PMn6LIMwvoZ?27>@QH{L`VdoAZj2A zfbEjZ0H|ZKVnqugVIVlfNVw=oawhPQq$q60->Ao=+$c&mA@?Ljtp=j-PVGw&P+kV& z^H7FK1_JZQpv$x*tK5pR5w_{dBndW91@po9QxSaipIa%LzzgBsOSLoYOk z>>)`UCaH?1tmLZnqGeCk&k(6dbS%q>?63Y*Yqn%dDPU_xWi+*Jltxo)U1Zc9n$lk| zq7>+lCn{o30M7q3qDO~7(+@LIXP`>CZs`%?_`U?q-a6bWTY?c7SzM}{p><|CstE^1Z_oZheBus$y`M491+PDN(jU%6N>6DPN5V5&mR226pM8rd|@n@ zVkf$cu59rb>(0!Y1ZU7Fd<3N_hKCeb;aQ`{EBNPp+OZwYPlpOZ0;!RVaLpEUO*KtO zK5bDvFDTW%N+TwL3m_}izVCdeq~I-cLpW&ZH^Jg`vc+Jl}qQF|#9= zNK6SRsvxk=bFU6`%c(!Cj&uiPK2{ZVPo{#Hq)_lGL{jHVX=iU{L?fyoHVq&}5K8WH z^)JrGbu=P)9=6-sU?)7(9$K*#kM($!gebZ~Iu{QgsYiOeggPZcrmT}r*rCi;;TUc2 zT}kv#kWo)QPkxZ|`u`g1FNVvc7__DOM`|%;eJ4v2!jrDr3ad)CSzM(f9AZv81y&aC zK;_r0e5J31=C4Xf`Dksg(4?u7B~Xka`ff<6qHiE9=|T;_GeR^(hobx7(NUV!f|9^n zHVZ}7Ph2(PhfV_hzye?7uhtang+K7PCWil9Q~+C8wc4ctl>!6V1!XD7Um#5ihRb?j zIAP?)M-|WjjMRts)l3}5VvLwdyB1`QM>Uf~@)C*is?rPEq!Y5T6wr1Cu`+GfvkQx* zQV`H0)<$gCMh2pwTJxeVkwlJc!kFnVrVt?AvgGBa&GVO?*s1!isVdw<`N3VpQhZZ3u ztU&Rk@X_MRic;uKKey!j_7~bL4LPu?7Ne&g3tD>H$ccSrSYXK2@M@S@sQDUW*9ekh zc?~cqBwedC1>Xl4HI}1~MSSzse)07pOIlAZ@~BK&irg`YWEP6{RnAH>ER-TCY5F8@ zT8+Lt+E)qfsk|Hfk zQmemc3Ty#QOiLo%feT!3R>HPT&f1YE$qdf6Ov?Z(uhOkYslDXZy~;q83`6ADfaD}# zmSE21RHK8&z%Ku~I8q~URU-(gfC`#$bEiN#r10q0127eHI{-5~q)Blr`?AL)vVYFA zEqgpd+fpr)v@f%pMz^%*<3chMoj9|#!ET>mTb^V)o%Ct8A;c*>;|zu+cJ_uwU{^(G z#5HvpMR2!6V#h@az?XabqKIsE7wX7lgg8C)c$7DJJ(O4{gDFxk_nv1uyL<5%bX~A$ zc>ktn9G(^YzN|!LB_Ybw((FMg3Q1XPK_GfXcc`Esszs{YXkaG`yzvLUy`-NLMG6$H zA-+a`3DiLULLESMUl$3oB3<>#*El`!YPKkePXxrLZ`ZLjy&= zJJ?!WB?=TkggGm9D{CTJ@Bah^0L28?@MVf&lu781wcw>jc^pS=w1-JS3Vd@X)+L4a z6)0B{rgl`dMu6 zqwL#+)~OaSQTt3alfSXanYy!%~l~ z=q7j9^+xckKyR#IJ2;#0%j4%9U$TA9vbDqLFjoOWSL-nUb4z#gr%u&B-vA~c$2G<^ zp}RbC*LD`FZw$&%ufs!RS-4RLHgh#r8R0MtfbVSPx|4?|Y*6rwcPKV(t5{F=Bxs*q zs?5k*RZ4GGKp2D#08gX{JvEqhuikYOJ_%Vv>ul+J$swfTYQiC{L1e=ih0B<6<%Th1E|4dX;((YG8B%LTX^Emm zQ|Hf~LxUbII`o!Jptne3vP8-x(p#obVN#`u?c0s2RI*a3_W$kOyPFUo(j<59+YFf4 zZlL`3ZQ9DC+pdzE$?OC{5+E@EL_31+NWOaqFFri^^W(=GFt47y`||LC7)U^uenI>5 z5#rykzyE#z`TeKSEv6V?${Ph%QBW05bflmGO+2U(aS#?^01*oo)C66*6-1kc89KOx zg08gUOI!w==u0aGv|@{kB)M3SEw+?33PLv;ph-bF8gSzl3i;@xCYuad zGO2}DIwF)*QkpmkWtB-inUs%; zFS`h}Th&HfDzQaXQar2XxMXBiD!kybND7<=yj4n#-;z5ci{ut8@vIwpLKm=fp;h23 zm6&4dUYwXxiYc6Q!G+0&m2%k1T@dz$8E%+?U>T5EN=6%Glrc&xqadlH7Fvjr1<+z- zB1X`e5N$NlN*}G-7DyjG#*$h%dfFJANioF|RR2VHn-xuf-2`zFHfKd6U{^tQ6|{Lh z_S7x0DJe%_uqa84*1}L7f$%$h6m2wdI)GFUw8<8S5V`V%Vz-P zms^gxIJ@^o{R<_|nLo z43L#CX@mZ zYGi>1k(Lm5A{C90p^TEqp%!s+5J|KGCo}O0O;l2rCMvNNYJ5v45VA)D1O_3Z>c}bX zVhUH7gD+j6L>D|}3czrJ3@Ss6U=X7i#+YJsm*m0(xNw*gaiN~ zKIwT6dZZamXj1c<)~wGDx5>?J&i`sx20)V;EK#@BY2-n+(MS<=*O3jiO>G4*fE5s; zwzpBp60e(`I}uWgUm%ZGv@#dNVDut};Ydg~N+|deiV!$C>PL@i5~B(Qr8ZJDDHhFW zMK_Ak@kt;^1^H5##$+aNlFAiRn1BI5^``AXFo6Zxg!p1=6*1D~SyDjYk|Y5&t-xsu zkpikrV+yF)K*oNSTB!j7iI%3aNmGGQ6G?WZrcu#Y%C)V*wy24O9jssr z%UHv%>#+rOY+>1jsUjspi2wIu(Va@MFoQ^86VGzU^|&yJgc+c;vvMA}04k$&Ma;0I zcnga(Mi({q@D&y-WGA-Pg;Kbp6MQiRCHztfP8g;PEOVL6E-5pnOkrg?+X5N3Ab}`I zAqzzlT6Uv`-KAx>yGIj)Cc^6(@J0=2OIp$rn6S38)#hwYAdY;eqZ}fzH*N2P4&2@r zws(3BZ|)t!0{GS)!WB4h2L@b%`?g>LGx)&N#P1_GlnK9CptA0I|${b!?Ht& zF-2^E4#%?~4Z6@qEOE}%A*3errA>iMnmu?w zDsZ3^WjK&yX1u&K#jhlHp0h^E62Cn6`GoO%#VbNrXN2Iy9%!0zN!lQ-AaX<_7wL$j zCqkD=6GReR7@|m+m=aDeF(#f?bWCO($5O?SD}EG7O|D4BkQ}xhq(}-ms$xOFUT{tt zxt9TSecGuM@z-N1H63GAnZOuDBcl3}LTu7UADV#^3RprZ%0UWpxS|}1>_R2DK#Ah2 zxf5ofsx6`i!q!J@DQ&ZM%G@HXWE->r$QEn&UH`EYTH!#mrobDdse?{Myx zJKHp(mdM;UEdT3v9NHPD3PVsp5DGyb@ZV_ZEN!B5Bm#2*2vujD5O z(2U4rCX!&NowLi3f+Pf@CRj)#A5xnS$EG3EdB_0DRIveu;PY-3)OiFYD2^7&bRI3V zAW@*{q#CuTr(r2kRI*amvveh`Hz`XvO@allC8k`J^i;P2cBN=R0JZf(DeCW#a#R?T$|*MyeyJH#YC*#7DwfOHOlfk-sTzMPSDckpw3>WX zS!JrKhI7xCPi+gyYW4#Oi&)lzR$QGGBxWH5^$StfMjo>Idd2It=sMT9!gW}4d29E& z|NZaX)&H*IN46A2!WJo5TUaMDRwSiWm|#gk6oqsaUUvc#!mwN~))vhBzJIN0O$#xU zj9ozO@CRMWj}YWefehtvM>&dn?NU?%k({7{5+IY@GQ2Ei|7Qwi@Lb51Go;W4?4|`$ zkTgs)UJO_?O4Bq=iPK;>NI00YIFM60ljAu-2!x$Ogq!m@M2ILiG-qd~IuR0c zE=EtNqdKt^g&?*O`Gg@XhB_T_bM$l$C}9iHBZlD8JTKxi*3&3yxIa1;CmOM1Qqma? zRR3gjIEQwKWVE+rX)#qSA$kVjL10o^E)^+zhY()DWn2a&Q?e0*2xdX%KpW8%XweiD z;3jI;1%Y&l8qr6I=0YYxLLgKSCM0Oba|?0dLg55xCA5l-A!ws=iZWyp&XX#ih!Bi6 zX&+%>x(F|u786tC6PsoRa8?pbq-s&*D|VEOP(%`3R7K8cTDmqTUE~g!q7g=<6Q%G* zS!6_|Kn{Vj3G7!Wk$^;2At=45M5h))={QHN&m1 zVOw_K29VSW@5WQ}2LFMJ z!es&{U%S+A{T58dR2&Fr8^wf7%%N}!_dCkOaJo@9C&>g7_i@<7aX9I5If;`h_mjIA zloW#?v^YBq;0P|3Pi(Uwuai$HrV$%LAsg`_8bSn5xe*wWl^e1uN7t1wq7e)gmYNWj zL$X6uM=2n+BU->D8r4y58Afl}mT>728eu_VvS)aSQYyt#NCAgm1U?@gm|680cTMwYeiDJLX=u1ijfCaaM4wp8CIZaRiKHFo=GtSgAgYL zPNTviVwXR%2Uo-rn{_2Eb9E5K0#ZQ&ClI4pj6c5x0i zqcU2fFiN90YNIjQ9YWco-gF0o#u!Xd5JNCF!(jlu5j(6?5FMr<#c?`Sh=o%LbOyi( z4l+Aim`|uvKW5-7UTOyj@nenRhH1ECW(qz)rV(FOheO7uj>t`D*Z(b|189-h5ia#b zeD@~@q-6l~LpyS0P%>s4(Lrc-REDZ%O~C<{qB5!YK8~?Ga~7$~Q%1(~WRQwytB9$s zm@06=LMK!bl@~v>f*|m-LRqvCQ5SWOwyKn75gEY{JrqTwHmd_O7sx1TxH_xNsE!G9 z8A<^!LPQRN!WBTVL^@Fu+rmIwv@PQp6-eYgV=-fOloHcgB5gnlYSa_9)(-MGLAhpf zbWs(i&<3Tz0b5W8B2f-pKrK@+T%0g%(-s)yO0I-4Zk7a*Q_ulIS_Y)hFMF~X8X2&r zlr*VyZ^KapMbH5G=5V~DOvS`DOh5_A5lkWKu*&2%D#>pjHvf~fk)&fY07GB^LO^jl zsgpe^O^kCMDO5`C41acdPf=1^tIJ$$=ORC0%J>ZX7SI_?09 zpSZSc28eyTr(ULaVU&ni42dtLK?OmmYivJX{QtKfBvptOshZlwc?M9$6FMW*sGr)$ zF;o!tV2U*YLnze6v1lr#Xb-3267XXHjOMr8l!vd^L#rlz(b`0-CPkmthow>$Uh2u6 z>_l?3MOg%nWh6mmb`ZQ~Xqa3U*Vqn2VU8OS7CC_v_fiJe$VKR=jv=JPK@k`M$*tNd zkK9^mHS27XJZ;z336lUoeJTmv2(RT(81E}?_j<4SdP(oNB&6UcaMBqRO0eMU8R9%% z+XNF!Ov}+67s~__+Z?{69L6-yGl@&H zA#psp&?d{!EPGAbyI0b) zJ$Hx7aMHw#f-pR_mM*m<_5&tu(o}#8nQOuYhv&H^LMm&;E0|hVB~hAal~t5`Ra14; zmKPVG%eizR%3Y<_X}h+sPznvN* z)l;AV*P1`#lOvCe5c_Eg^EU}o(EqFka9Q9;4$)f*Ti}lLDxmaRprt?ooTM_Ev@dI^ z3D@2x~Yzz+wwwfmT@M3U}bgtiq|rqveA}%5TR*3eXjEy$bArL&3>M*~SS|ut1;=KwCf#T%ZUq z&IOT_7{D*a^r6{CpXdY z&k6TV50|6|4K`CSvhr~r-w_`xYaZ7wIVg+m+^+53-q4owLorLU{1DZL|`FBfFV(d5J+pp5`q?5N(4dxmK!0KJYuzXs!#rIJyceKri>y}fVX59-X>rziI90_T#am< ztP!{3rJ#D5YBeLLY1D81RjR@&mM5pE!g+Mv5s`aV!4fQPt$7ncEu~v5&60C0&LUjm+S7~m zJ)td}wg7mzZ@{#WuOF~ zG+lmT0PZ#hM&p3nEx;4{fY{YtK(ht+wj`dRUR1Co_B>x9$Y1qj8x_pJDX8AJKR0Q! z8yk!^8yq&kKL5hPPr}1r{C)EuGMpbToWd~d!bsS{&94#SQ4p5n21|{k*uSJT_j4QK z2sT$@H21T1W5fn9#6zsr-fE>AzWy5C{%cqyV?L%J-iQSx5mjvB_>bfGp8!fGC;%bF zz$-Vd-ncSg&{e^N91L*b;?TgviINOhq?nPSri~pdPMNf23l~lrA9A6{3FX5M6C+Nc zFtL=YSFdQkI%xA?!h$w!+1qJ~C&G!YZrO8V;9$X}3KKSMI`Jsafe014v8B^0!-@8e zS~b9Qp;LoJX=ao#QHg;hX*I4j;CA9B1MOVdEoH!yRl5mY5w+{iRjXD8%CxfjcVb_# zMg4+>oc~brU%rX0A{LC$T}FWyHI{s+gp}k~oBx9DoDt*1(qyD;A-5%?UAu)d8xV|{ za_+TO=Lz*9P@S}B?EA!+B2!qoT+l9CP|S5UP>hK2EbG4 z)TL7yF2c){F|*KAK{xZK2yZiG11U0_wrKe;EiE(|Pz(YOEReuV224QCsHBQUtZ1Z(6cwI}J$F%Q+2*lL-T+Fn}&FpF`AuL>Hy#If{}< zZIcQ$F*FGSDwJdkj#jf&3(o|y2vqYvB{kGiM>UnBxJI3bPy(qj55jqcoAYZR)5c}*QR$1OM=iT){26nwJbHy zx{L}#tP{O_8_YM0A*Q$$TM&D-R>U;ccwCS-7MI+TLpE9Dlf{*miY_>*7~+lVGXF_7 z*36TF3yWOcxRsLHAqCQm=%ULahArNZqR}p98e^xMc4g^TBZI7zQVcD$ze1y9OUz%! zbfp|uD49Z_M5Ks9inEpIY>84j@q!C8x?t};H_ULOjJw?^WdbhTAZ3Cr$PfuYEymCy z0!_rw!a&Bw$V7}RAeWr-$s@n~aRM`MJaR3xkmU0L$CzRZC8l74i4s@OF~`)aV4{jD zShS)ED=Mk|_S|>;uteKSjJ-zKdmMhP01`kT0RRvHAOR(tf8KfJrH6j{=&!dv`|7u+ zzI*Jep9ld163|HeG0#UoBlEp`ERnu#>eZ>nQ2ib`fvsjkv;Kn2pXbZ#AB9}rjF*1&!+GON-8Q>Hq zj(4169<7oWKCNj@rf@}O0=XN{c&QXNqf1{502(s1<6#p?ngJqV0CF5_6QoedVkm={ z+E`|ee{n}E_$ZuK7>6*vASD$5DZ|XE&%}nSVHKQvcx5Y zCX}HMUFev|H<5{sk0KSt=tVV3(T!SkOo&+spzPGA>ZWIu>Zzw%gsPW< z>Q%Qu!K1CE6t}w7L|CS;Y`KgI%EAcOG!Y$1sr4dT^->oIb^q3A@rqh4+Z7k4(1k8A zgeWeQjAH~FSSH@WRvHoFK*ZIqi3p6bV&&pQzU42POtvcOdKXy-+t|r=mR3eNEX(q8 zI<{qmwAm?)$Pluz)qae%AR7#8RSPnTjb>!9Rc&rbrdy4fLMUkJlkL_dF_{&&C>SY> zp$g+jltHW&vs~I*NFgplrB)zz;e<$1n_7$A>|+<3Sz+=L90Oo-Y6&R?cU!?9SQ2d% z&8Z+OSmmXoX@t85pbiiX(49$4Az=wSn?Ta0gjRH?5~kqmd+1h%H{cC#dMgD5-lGIA z49>#;L7d{o;5o~6cygHoG36R3h0k@E!wZ^RrqsF5*8lPIb^RQk?RaN}*s)Z0uxnk3 zLqq>p;m9Z?bE4{f& zO~$g6fl%?-rUlSE>I+0PZ zLcTuL>7pRtQ$|Hcs2BOE%{p}|^K3p-qW=Q@sX}im(nobQ8ZlU2wk7U;86a0Ed6uS# zH7VJj-ez2&mR<)nEoeP!SJOJ{6qc3P&z?_UaD-PC+eQ4dP`0u50_`o_VOV~lYhLNX zzGS@O3UO8cUoMQ5xdb--?h`g!rAUiFVmJ}`cGniA5XviPi;#53%r_*1EyQ9L+v2YG z{;s_?l@UN&Xa|<@1U9K1Isp{3psfZBFI(u2QkWT);Xdx8EtRMwOCbfKSd9(I3xRl= z5Nw+NBZ`tB1&o0>QfLFLsh~D805aIA@;X6I@HmAzmV}{*uek>=IUU@XiT;uTluMf^ z(1L_ff-T?#pP>S?DuV^f8@_qM3jf;zzbOMUD1*WIoY&9-30SMcS)9iCLIe2^O{ts{ zE5kF)LM@ma0(lJ*TY@P79#78>9HL9klcx#J?xR%!NVO(r#@T)0cf5eP=EkX z03lcc);XT+V8GPDJXr3ZST8l(t|IK2_7v}6o5OT#G} zT$NENA|WcGpTMjavMCO_h$$cx(3l7gaFu0I79Qdu15mYxFq2%1qNj+)BD%E{Dx;9{ zD=-oxb$p6yn+ogzC2?amdH+m^CBhDSK!|vpw%!0ED#FK~XsjZ-gZ9yg&bW&~5{y#t zL^I$wgfIp8GX*ojqlcU$#*m{|(a4HqH>z=mQ@Fdsa{>!Ew{}YiL25~W8zerO8o}6% znv|OE(uh!6xQKhmz<{`x91P+B4pd4d=Srb3M%EdVlp98vZx=Ww~ z2^=eeDIl9EXgV925qnY*7YRh+*%9F}5f=N97Qs5$QGg&AC<6$B0bl|KSRDc&f&`FE zf?_+f`^<=1JJ1|6PX9Db^x-}^(TE}F$B6(UR@@Vl@}ulP5igjS@~DL2O`g%Tn-5G=0P>X;4PEmwfQf#8_e5>eM8QT}VK z_gk;OkS&t2z}8aH)N%zoNkH3y6_NQru}ZDodO(dK1))NTtvbO6G!BeFj!R;Vin*C2 z#Yv2j3>Yl0Z2z&Nz#0v@kOJl?s`ny;wZfX4BsfVLkFJTdM6e(w9l41piE?O#&Im$J z2|_Yxg)z{0n@<*jOn8xNuUJbfa?kN{4w16#0xGH?MmXoL3Pgt{q{vowSENK4n) zfLSY(oFj#u+XPRs%fziq1+h!KbX)})kgcKuN?@_eoRP~#k#sUld!i@ap{K>XToNgO zBL5(f&vlUw;mjuq0?o{k0!TX6G^m0~yU-lX*(J>@vDMtw7FRe0-}{qZ3OvCh0$~lr zlj;+cG5|rD9lXoUGqDp-{N2J+nu(wVT&xFH%An&!6rY+r?tPBVcurs8CQBK;N9oS; zMPJcVUkxhTDUiwR*q15Dm3!@sWns@8q6pu^p=Z&(y?Wp81DF6VzQM|uu$Bhl{+Drq&@kbm^K*leKnyxzNx}Cz(Or(LoP%d#{t7ct(-74!_GOw5Q`jb6fQgj9@+ubPVF(`fw39U z)KN_*Jsh6#34kd`RZCU^1>hb>6y-=9abSglptY*AYp7lZp)5i47F=qMrCY95rQvSc!5(iTRjE$iUdADA<0?7VO}+BmYtgjrA+B zhzjf|3Uc`idDM!f7^~G|S<{H;gf(b&)CzTEnX@nxx1@}To(z}FS(4nyk@U!n7TPjM zrf9L*IC_Q6uoIP}2%%6U12E~pN?AgpAlbm;m2ldSrb(XM3{HAlRAMip+^(WjC8cbm z!{vzPP{E=uuQrgH@BouAe!EFf0%1bAM3?|luz@zHTQsg?lF-|jbC2QZn<;S1!*I)9 zd<||Q!@Q&r$DzxgOKWoK5U69Zb)u2}A1qgx#pacf! zWY#T$$UG?8Wo*(Ms4aQy+nthCrff1Gill&L>7`9I`MbaSkiSD-KL1IR8?j9k`2x{C z?TNSoIk`7JVZmC^h@L7=Nzq>8Y@-@7wc6_%tD4S6YpSaPknQAc;dZJG3hwA6Ms1c! zgElORFsng{<@LL(^K2PqA(X!niodF?|Kx6f*>1;h;DqSD1HDfGb(eDitI(3r@#GeA zF<@H&r1Sp1<#U(liYZKEen*4J$V?D3DM@V zg;T&`1f0#8NRJ$*?qtwQv`v~0;Z;jv8~RGkPWr*3>*xmQGt|M+JZEW(>5RhCI6U!`?%A((HpBWUOX%Emv!Pv_iSbai}3KUKMq9M->8R za&!rYhzWi5b$ne3;WG?)whEibwR)uIbkrAnUbcb6=V*^2XFG~bYc_=@BCePUm0b#V z#x`lciR&PjhR*gB+6lujfHttBKp zli<;8ni^J(SZ&Q-q{65L`DzE)UKFfhhv<-Po&S=QOSwD-3T{p5nyV6(&Wlde_l&Dj zs?@ic##;vi5Cw`j?q@6*7_ODb`aUX{--mD+>W*c+@^!jt`PKyB@amv*5S zdkNs^KZ*_BL|gG^R{$hacmtu}egK7jd-00Hf;&#I8YGnrPl!LK8R3x`z!^pv_$T4~ zYhnJom=p%+Pe{Owcoz8w2m`iU*%D~bOA`YL7b# zMS&DEVk|kbqJdJJ43IkMswBrz1~iS?G)5D|F$Ol0;po$68&a-Z1qC@l3dbZ;qDV<( zAPGk)1v!>75aeeh14xCG>QsdiNCSzaApf1RQLKR|29#_mQ-;giGNs&#Wd>E zqgRV&QpI(X(XXqJX1&@qY%4^pRH-tA3GCUFm;gusBth}x$&oW(Ui`W7=FF8#rw-lv zbm`8S|LpGlJNWS8yT5|?@?{r?RT@2nSjoWq_w0%IOjtx=r793(8(2RYVgV2}qF)vH zvByz>?ft}#0qy9dQ-cQ7QxHXG?KB=vI6)+dcN+fWA&4A-sD+2#t+I{*D3<6QQs$j! zz#A{V#1RJ^abduXIpSyl1ypn~m;WoTxZ=i;Q^jb2D@P`Io{}*R<-8C$+t&jrIS(_N3>`of8K}t|Tu@qDp z$5K>KDRI&YQH$gGB!PDd6iP`Klt9q10OF1zYZAy*k>xaEegbCogy7aUAMZyUaH z0vN!AjY0+~H*K*PWSWSfF#p2~FMJtInjCx+i3?Y(35ioI(L@mp5W#?Jl~~cp$o|E4 z^2zM67u$d$GtmGM4FE?36Qvcn-p%8b1Omq)t#r~vH@&pe zOiLYg)ImRe_0&)=?Jd_`d(F`ppc>$X0aWbQ-^ipk0ugQdiFV*aP3UI;5&G$tDo3sf z*qawju+32w%C5r7D6F(o%d)NbBTy{`*}}?AA}TwEBpYb~v=m!#NEnAuZEgUEH~|fG z=$ad#1?Z=nj(T^i&@%Wc2FT<(?5uE`luuz*WlDLy&nV;@pc&9bSX~UAi9geS9LKlW zh8bo72b-QyLM($?j3?byI+#&as3b~R>B}t|F`S};VpYP-I z{yg6A_w)HG($?a;& z3P>Vz4O$Y;kUS{20ec<-Z2=Nlz|nsqq?LD2=OZ^DngJ{vay!Z}5fObp%uoU)o};+O zKvN3MOb^}>8)l$7i5?RzSQ=RS>1% z1bAw=$*|P-7NS#4F5(7#P*t}`T%q!m$<)Am7nje!(C(*F*zOqE2q=9+j$nF%^bNgv z)#&9>ipEMjn@oq;3y1lL!p=rtnP)XGTyMYU`Vz3v7zfC`@M}l=OT2k}Pu2ZDtBl3< zd2ep3)sT~vsoKny;5K-Fk~q!>Sm6Olyq(a+^p0#V@M??u5~`rMg+o+2qBeEwm0)os zBMI74zUfdo^Cfal(?4jQq86bg5Z)hbQ->s`qUow5bw;{g3wb;fXdXlP+YGsT>WQ|irN8X^SgkKd@nUe^yXW#> z7qTDG*a^8hDPdrf{{rLpn5oJzl+-$wc*V1YePK8t?y4fYr6;?MM-rzLl0Sb$&(GB3 z97hTHK3V)?Z^Tf@^x%U>F9os!bQ2Bcgd+rwN-kb@s47`r=Xd`(|FW;I@2i~S&vKLB zrk5^rAoLFx&OgH^=|I({PFHUd&i_&Nw7yh7$nLj9^i%nc`qWyO;1MunZ?$^@cVyCYb0q*ICKaPJs<>f?A5dTv;NFe$iE-iBHJ-Yu-?g8<8 ze@;!fk^9L(%(LI)-M8n(-rDpCJVF09cb4BW=m7ZU<|AICQzY8Yi5U!JI#|pheU6}F zq5)5PXdF-sMe%%B06Og;SwMszYHl!a(xo6`b3m|#T}hYAYj&^S{e)M?Yr`SrH*FwvC3YWy@TpWblv8Le2VE zihKifUC-j)vf-0C4BnIdg?k1Q7Je)$AI5!Gv{MX)jlHbT79hK*keU5A>((B_mrLSG zrG_PXq1>@j#nh7dF};w+#VIL!!(^JEBw#7GTKdtW^2|_|?YR$XV^xW7b92fvp$5n1 zTMXxYq?keh)8?xs>ZTh2hYZtpvSem4jsKCZWJlfIGOZQC$b{#*m6vN{jTRS*$C5aY zcgB*%2GgA~!OzWqGS9*R&CERgaHaIz|6B%=#lr+eAHl4MR~w?W48NM5yG45Q884Zc z0HaB9Zjk17YEJLgFyFetWmUMN+(0IvtfZ&%%cj9t@hHbQY%A8fHfW);W*GkTP_s(7 zqt3V~@O#u9)KNl#2TNE7yuzNwBG`C-xzo$4?0f^WagyC{@Hi0qFdiSVi%_NwY$nU|GW%(C`;o1&%xl*;oHvt&W{YQBmuq@dZVZ!SwKyYB-bi9Mcqx zjg@8a-s#N|D$FZuY4PRFTmiN(>;Q~)7&>X}@5^BF#Hs^_KF`YSy|Sy-b8h_$Z5zW9 ziy-L(&csFrS(p3fltGdfGq=Iuj=)RDfOxJW>-500b@1$AfwjG&%?~X^=?#Zp$ZUQB zSeiKJvz8BpPxGCW{7TLFS|mt}#Q$)a`N_0ZVVYAE?j(}u_#2a3lx+A5C0a0^h8r_4 zn>zPvmAU+LIX+d8>H(p`@ zcAeEGGggwTAVwhB*@n;h^#il{Bm`b7jW^TcM*A?N+JfsE=#?5+@iwF4Q;@6#pKK54 z^t6>&Y*KhJ8oUCyX9k9XPQV)fkS%~&Q8SV`4?FP)r0?;9^Lm!s=Coito}cdUSO)Ug zq||DM-(?nw4I4o9FQWh~8il1IOUwVs?sWg=LVx2D$xSd(gZiTL`V8}inDit9@cxld z&wa3`0+4eUI+Ugt+QNPXu^K#Px^^^b>@37gNnqGxoFrK%AXCTc1U7!L#`6N6go7XTE%5v;04gwP zu1u@>^32{c609Jl3X_&a%FUBfm)FcvRynp7@!92O`xIZC&2rKAlH@ zxY~Txrl8-TxJ#E(?P{oE^V(9vS9IK@am&)uwc{{7pF6xO$unAO{3( zT|%xKsgM83G}lw7=*9~Yaqj#FZcf@ldGsY4U;!3aCCL+~zA@2^v9*%rj9@R=B`sYO zc<-(bAZFSU0+u2pl59ycb$fTCgjTAnlaPw3aQd()KD4bOqnm1WKIMbyQ7lCF9i> zJzw&Om-z7a28^8Ka`jRQdxwpg!|;M1#s$}2xB;wAi%U<}xK2Ur!kMqZAx{Fj2QVR~ zCMgc^(fz#v+y-v~G(e$$R5?B>{w1_+XCjiiidv1bj6+a106Z?hVK@f{hbVHn&Koyh zc8_I382*}iZ<_n2hk9(p23 zc=?rat7C=ss}o!jMfP$HZjN3&j5NJmS)L@!MmlX|eO(nOT_x)zZ-=0(ThNOWunI}t zPiJ+t9>6+=Y?!J7aY@x3L@G4MmeNpkZJ?&zsU8b{<*?o9Cw=D-Wn`1I0@z?5pB~5_ z)cif%xSu3Z3}hC>AeSJZA1K~1VBZKixfwk7!$Bh%qQ62iZ%?&uv~;2-J7GxrV07n| z0qDm4hnN8rd``l`$D5qcy}3^~=JI9o@FGsLbFvGwX7Bi-(-jG;263)jR1FX#2)uZ@*!POhQC z1PS#sucy9HY|@Tq7e6Pzx<_8jLxERrxfVC>e&VeFFn^UVe!dotD(xDVou!zgoL$l|dWAh695+-=K#dO~1G2?GNh|0F5Wp zCbOyoC1w0LiR3BXGD6kHgd;P{`G4uR*)v**L=>m}p`vkW6!ARC`24?IZowRGhlEPv zb^{+S3&6rDIKzcyvD)`OrAh5pW-~fQ?xl2|r>njl=^_0?T3``7T&PUb)WP1SJs>C? zI3JMtdM{(54$0lhF2l`10Qsw`8;Vq_3CYQ~Gce@+e_FATQi`bUyH@Ox)WfutbF!AB6PAHC#M#pDl{)Q!n<(`oYA-$A*rbz|{0 zI}d7;uQE=hN|I-vS`A=VlRHe36POHpjdHL>h+hWhG~Un{@b1`I5jC^r%ncq6QnnWW znr*vm9)^Fm^Ua(*#hsbONv!Js4;;{S0Du^`r!iW^agjTi_MRTKw?bYFl57nIoWp=X zR=6pk)q_cIO2T92kPFxr4`9#RN6Zs?O0D>80hIE(QeyiR!LWGTZ@#&hx_jAb z{IGLIuTt>J^{+o}&l=ZJj%GUv%ogT&+fa%3H;oEHg=(YSVI}T8!Mmdr~#%-Zs zh~#}P{M;ij$vn6{_zk|dhEX{sQYW7*?hr4oRgDV=m~zaS@7a3C+`UaYPO*8zrkH$s zx4A1YSHUF=#N3q(Tyejmo)Wg!HMGCS!*owgDxBlxFT(MC0^bJtPEoe1hyItnK`QdO za-29PUM0<=|JJ?eWNz`e&+DpqQzf8j;RYyp@&$R6!i9eh$KNPdztL(h(EF|APJJoM zl*`N&VSbT7)WIXsGWUmNT%Vrn?wL09lP6_8wG@rD%DQzB_;Hc`%9*j(W9ADfjVHEjNJL7qHbQvY<&gYVU0rb z>cpLV(- zs(!n2+r)p1jj#U3M*B>YM63on41A+75~$L)l;_eK;9l#IR{}+^k}f}T-`2EFR!kI< z6fhp$hphLIvIAj8i zMFm0*ph>dvBg_NrlRf|$9KazE1dqQ`_T%ire-rKET-EfvT6Wp}$+EnD*-X>suB9-$%SQnH7gDdqJ`$pyDQfPob%7Rj0#utPUL)8QeQyyD1?tCef#r8DoA=cr-g0 z{B*VUW*7YLs1mzE(v|<)vX7R$I&A4f`8GQCxhaSd9M*7}`r$JL7;94wCq>%pY$m_T z9ZvgvUEr1I7> zlW2u_gIfh5X{hY;tY?IwQXa}sqMB$3`sQPtV+qHQl|0kqu^guqjD=NrCPq;w{y$WM zVWxy^NoTO=qrl0!8gu>JG^5-g(gS)=WKU4RhZ>r9YKpc-VSt2eUY$k5e881_QB%Hw zD{ttqdSVEuPWqc;s7jFs;#>3rUTRgdEDZDG}?&<7V-`-z#{C)c= zP?n!{Wd?BQ;}Eb1-3#i5Spb>BZ6>xs^gSah28fy*UnBcK1Y*-V|1Ug z8^Wi{ofGn#NSnCEsRHL<#q6rL@K|yE>`2r!r}cUqlm3xMnWDaZb``fw^W4t6( zxPEF}Ri4qt`d(6%UGQcbC&N?tBV+qP@FU|3Bf-g&7oMOwOfDv~Ts2jhtGYU=k=Sc( zuF{QaPM1<^^Xf^-dl6!+>={YWz_U^Z;d1U}&9i!}n0E#8a~DQXsW9I~3$k4D-lPUn zykIQVWEeGi&hej_4t7)l(CF|yZpoG`w>3uOP*kF_Dj9*tSuY^kL^a6SzGHEhBr};V zrnV~p9Nx5J(!?MfN!WoLN|6_{R1KB(CgfD5SVg9Vh`rcIdwQ6Sjq=Yja;ul}(#59J zw&-xPu?;$B^}0$7Ty}Jf2$vlm6WvVe`1RFUs^M25vlP!zvz$ar@28ob1`AOjK!=TY zCzpc>7yrBj=g0&!2yxuG=bFvCTkP9hyi2}6<>+4?AIAhFhqN-HMPYGFZF=iG)2!9b zkqn}^(#zRQ41B+t)Nz5%Y;;pqzQoI4RAKy+*PSdo1nt`SEv}H!zf!fx>$myee4Zfj zUvZbu8(fM~+j;|FX65mxSlT((hPBUt#-Cn!6TMwdk9T(Jl6xVH6g>`lO@qs>g_8p8 z3rF)lj1{MRayQbtCu5*2_`eDWOy;}m=X8Uh#zK(1rFy21dxHY+cBSxn!PK+_{>R`fg z^`Ef68`FTrf3+`g_n#cUz1aV6N5d1k@$QS-yyyK>KCDV@7A>9`~*4xk;sizj1hJB^hCz4=ti15n%D&+2YqKwz^%7$b&- zAs<8xUiZUPUFaxuT&iHO2SD!TaAM~-19r1KD&}L2n5BVX0*`{Cgoy_;d(og}l4yEG zQm(5WKAm@9P)^Y-+08b5+jipA0%lF|!fL-t=;;p_Z7m{kSdj-&5@&pn*#O$52+UDP zzV~E!L@uWCg z6)~efwt>uz^$8b9TfWh!&YrvBUn(ZziTE^&OkKGm!0E*J+U}d6Wf&3l&4<+Plb=+A z^MUREt_Y(n)6DV|vfjYe}lezi(LLRG~@PREA_z+_z&@G=aK)lh3;JV6lesvE5kvUmmtc7@NwIA(qca z0cs!{l*$L;uRKwleE>sq(;wE?VA)tRAkzHi00(qWD%D^v-HQIDO0zs)TFVBj))Z+g ztvnMKAbvgp|3K?;n)ka3G>}Q&5dv@cg=-<#;6lUMpVu)GSU6aAI)NXB#>0 zcG=l}pUds(kERe`piGs;J%3FW`B7ecKZvt%Lsn{dSYDVVYuqBGOu-69(x{SdQ~KHK++if zr=MZsRG&W(Jc#sx%2DEBX<1^tL2biwJg5k{b-}!#7)HUUqpN*?)^c*R%IMu&g7^#l z@5`d^zPA0qWyoblPI|BX7W-<%_^NBQ@SxT~;JNFpDED8Bk-MVBp=!Zy-!Hupcz?hd zIPD$sfFavEjUU22^D*CyTf=`qjdKa~GvoZJ&b$D_FW&w>rvgp4_@~qFny12T&Ve(A z2?_G_tSq7MdsBydk3@K2PEe>3a2^*4J_tdb38;g{OCdm%K#sy!jK ziW`ZYu=vZ<`mui=G}HU^5u`0YOw}i#GK^k!%Rb<(-f~PO@0ry*1-IkyoNvFf++!sN zek8^lZ-B0AZpv{9cg}rMIIMOYDsIxR>7{iqX0h58+|nNK;_}`*H@-~iLRvPcrjzN^ z;$&2qrQHM836O8-hsm_CqmdT(7Bpxb6M}jMLXfJpa$6emDUMCV)MIzlcV+gg;zhKeq ziUIROftk;d@$kb~(vP0n8_oVVDkM3@0yvxWIk)K~(af8Z@P*;KQ$BOk*{2LMf1d+X zljB9F^k?thwD`vTXlN#N3Z|NTJr*g-HpU!@w9wcz4w^G9dwxSoJln}9fgJiv!!%Lr zO5$r>ouULy)LIVD$vUS--+;zk3LlduAR{S5JFFOn;Pv3 z$mi*C{S+LByqv%puo>zyLNxGUDNOyx75)%ruCElNED}Vcf|cvrn%H1OlL6NGkOPmq z^k$Qk!m*lP!-qjeHIY|qJdCQ9LNChZd=LKqJ)}WxN~*d&$Wn)76Ae?Vp5tmW64oAJ zVS8AcL>H;~C{~B7pB=t9vo@;oi2kGN3jfKqDETV(F;{G#0mh1B?mXSdK@r>Xs5&)(ZZ)Vk1;2q6)~|sBS>z3|H0)|j$uSFjPYj~L+R;HbrvW^8G4OZd1XVCh@>XL2s(o~qGDvC4*H*$K+=;%qm9bC_1!ivEnLQvW z54#+n<7~jR_z&9Kd4l}$7&?Hx2h{ABE4I-PhZLx1;-fOv0Ji0@OcH@RI*HrV<+Bfl zy+0r5xV_U-sM6DJZ2!duC;Fi1)LbLhTlyixWmMD82$1NG{FS1(&kazEF_cBmkgXg+ z>AhJ~Dnq1}=*Lcr4_~%F&_m=m8FbMP@JkXp?b)2WSViFbPh})HgO92LgkCaCjTN`z zyjVdQ1Gt4eFRUXah<$6>Z{YbFd(vEGoR9Tw-DrJ#!*!2@F2Lb5 z%(~^d>Augb#6`0epV-8Qv2(*QF)!6F2OXv69~E(%lYNAvLt6mJpLbHZ#d1)#?~biz zYV~G}LXy-&S=IPqk!8rmt8X>_Z6Q7 z1)6-I06m(Kv~=~qiWVKj%XMM9T~#6CvavUj^Km9Q55N}8Q7mht@IQrQMR*w8UtpbV zX^#)vH5BMiv=@#E*BVrOJo!SS67H2D77#C}XW|62G_HwbFd`beF`_bt$0Bw()sPc$ zlk7_jg|$f>H%?W~UE#gCFA`zmiSleEfwOLSwchisLk%v*TeLcuhjYH#FS2Kf+%&n_ zwsdpC-|>O1MM>+OvQ`VPJ@d}r=2G$Y(6N-VjXPm80O8d6HpcQFT`}iE?a{P^^^S#& zAFgkz7NPr1o!(1&21zDhhcEqtu2W0FoA(nT)~ho&rK^)QaN7I005-dT*;)~<=)3=A z%mpX5`Xo}W{kWaGmm0j0uojo-jJxw#7)TKo|CdYbp3_%LJS`czS<-g^AgHmK;ngN&k+Y7v#A%;H)5_nbE@YV&67^icGddHJ`a z@?Q@h{^0vq_eH_pGyDT~AMqztjfN6_yicC8%Jw&mF4mkq`@8&9m9G<9&_4+mR0I7h zO(cUut4RB1YF_uaFTy$kx%ERlM+*&p6y7r*GwF2yrW*g=97?LcnI8Kj|6=)t&J61> zEfVzxknequ&8{0+2ZdaZ`8qpsgzDNsnN(UQO<0lhV{^E>Jz@6@kWNG26I;ez)wVPv zM*iVw@VJqKbmAWmaOK?@osov*02xNv_J_3DCVB%?JwzFVDc@*+^Gjmb<8jcJf z*o?RS8h^<$QLZ%+?$=m-=zkkZC43@Cl}v}Wl#GfC74~XDtL_D z6+g;XExMY`siiKe7tdl6HSn+%)fhZ+UB#{`JP`Nuc}T&Fy3EQWEvK0kA!Z}K#M4^A z_Wc`t7`^N$-qQXVGyF82)3r8t`nL8#N}~4hAYeuEUjy~!g33z13hfzg=C7q?T{*AF zv3bwN#nnx?l;;Y)3Z~`hRQr6XicwHn)MUM&V*8a@KFv+LZq3#-DP=54$BPOqF#z#R zGDUkpj`_NU?T(Yhgigkp{_{viYtYvK(*V(cfU2u099;tdrZz9%YUwR3Sel4?kFnmHbt1zs85YQji8Y+16iubn^^yk+>VZXV)R+4asPcNN3{cyrCB)TKU z^gP_qVE9!Pr|`@DV47}h?t#(p96U}?&UzSXrRtYy#5H4h*r1n+{ust~XQw8DBlacuSmhiM=4FBK`abV-GyZGrwT8}1=jzMeSoEY9|D-n-aa&nE zKVscL^}wVr4LoSc@2MVQnGgP3!Y?Fw?`XovrtTbiIp+5l3GL^95~mj&gA(DRM%r7} zPu_F1h=LA->>3klXlHQ_JIZZF{5UaPq zV~W4aC7vERDWPPnuPA=jcU`D6ttR+hSZc7SbV>>NU}Td~Wa9li2w7^#V%g?6Z1S2w zH(V7pEpn*$skSr`<#?y0NCw~%L`)LE2spaMYao+bGX(y-b!Uts>D)Z2_-J>kO!LNW z*|6OZSYWN|`u4<&A?q4exFQaHm9r08=99e^X8a}Ni<_*BZ%`#ZrrG7m$IlaS_~ho* zBB|+BO7Tvyib{Jk;*Sx-a>tElY&th|4e6-n3kpFLvm@Ht+*aVmo}BF zcL_HG6_-(9kU&5ow8$zgw?ln)7F#Re|1O)O0_&TvX_qDu8O){c7Xh{XR!uOC9N59K z`yQ{B40oveN;eUsa;f&6^A^&dc}iYMcw^efNsR~tBYt{|C05#p$3m|fx;jt>q-6!& z4Ja#|O95V?Kou0_6AqPBt;su-KRT>}$XZ0`hlA1?U z<4w0JV`>Nkz$>s@i=?&Ls{^@RzPFr%y2{a>wUo~*Qm^QFD}kl1szzSYXy&0j(G|Bf zRuKau?7O*(BcwmPWa3+xsbzYoJm2ZM#e)a4UV!b!M%|n^c%El&2&_QSUAJ?UP+pG~ z`VafEQq^Zmwt}0x3>!*+sxjO2z|Dx4%XB4OR(1KdWq3d*9}p_3s&xB|^%RW--K2 zST1&AHf^%0K309=)UtrO(7WR?ey?M^q@a)54zn46o3~kAdP}d#aH}^;{g}jn@hZK` zWKo3{tT#NTQJvd4#3`);Aaa5v68}q6zaxbuTP@YgjOSQu6x^pq!>|m*pgO<;YfX(~ z{S8N$ls{iVT}6H`IT`~qj(GY2hbV*lDWMUuvS2NAW*ZrhH z#`jML;`^ueNXl?29FOY0x4J_rdqch-E}ImQ%QC;^6(?asxX_AC0NRZg zTlH~Ve)esuxLslmPI|2V^HstMTaD^Zso^J1E#o)d-5C8d8uQHe2EVl3H}~;YS_o9i zoVLD zt=B0z>AC z;LpWcUb|m|n7b`wj)VihlwMY=eKKk>sG}R+0uE&km#}pJbvu+-C=&53TH!Pf(tsld z>dSer0an&(^{`&JH^W9m%zliC%b!8UndA%N93)-7J7p;&6__Ue*TGfi5UG$L^3zu! zF^&n1S2Rq;`L5pzi9JIzCYxgXdQLphaQN2fciM1Q ztf|EYyXPI0`F9p@M_TFE&O)-mL){35Af`#=Fe=i^LF7VuZIX!yE%qsmP;&dDraL<9 z`{BZ+(;Z?WN^cgFk$%2|DN+h)Eoq=^q*llgNlp5BQs)=V|M?HL z^HWk$`XZM~d0-~IML6S=xv6FYhCt%Wm5U@C%F?YlbY5GqZm!YN-Rm`-@aKQe`demt zq5LUc-3FVER^I{>YbJ(ZEq>FSF+7}g)DxSE6URi8XCH4qZa8V$lGQ2d3F9=`WNCM+ zv+rwTtV{oqkc9bs!3R-8&wM3nxpZK7%PTb9ZvLfMqiWPg}dqxH*=V z@+BuOxn&nL`hLAL;v;Q`{lk6M#ZW>40u-1Q98uc}rZ@Qqcp@Kk{)c`8O(0>VY) zhzbDRenr-B=fBY$PiD|3GBwPl59>NPa&rdvAf$9aSGORl_dT*R87NE2_R1OhUviLO>o+Vc{ua zFjxt5ox$$qJ>K{QL{dI)+X6&%4v}ZgB7YH^l_<abp_b*fuwNXJ*gK&%B+3P z`*}^aYQVlhbrRHnh`9A`Yp#9|PfbmAy`ZV$Cswf``&vxpl`rJ9^PA3GzK%zVPstqf z@PcOdqi9`ep!jOKro$d;uL) zokcv%`#?U%&p%qi2HDB$xFp4vA`xd75E3Vq0lj`Up{Q@e3it?0#S5kv;JEP^1W8iD zi%{YxB|#4lX(4DGbK4*U+$HVR!0d}&>^L;>i#1WU6>QzY>D4dvbonwvy^!7<7eNtL z)JAfmaN1JtxDfS9RiMuOD4!&uxs+TVW&H$ONDv)TDhl;L<~dXKuA)Phs=**(9s>mA z(=t!`QC=pPCvD(r0ow3lV7?+RuL7^3Mm>)-6XmpchwU3tv|@?lR|y~*cRHj`?pGEY;}YsiBg ze%F4;xGsz-PiTX}3m$~+#6_CuL!DcICiYMbatLbt(6vnVAH1G2lRuK~&}5g1^`b;v-4 zWltU1i=$*&aFBQY5IH|NK5XE^rIXN; znkr0eg1Cbco|!TWq07da+cEQV*c*)x89T)wt*9QbRoM1)dV-VN1V95wGnQ&xH!yp-u`>?fe7;oqZ&7|D)*WvbQV&D z69$P2gWFO-$0_iHx@Q;fo?3Lf-3XAnq?<&mit;tea{rZnQKCUnui@mXX61@XCkAOk z$70`1~aQnXGoX6fRU(Cy$TuKKb$s1McLcJS_O00lND#tgj9 zLFeT#^e5M_m-a);bF~@+Zq7R4a(Fu@q!@Kck*rxMq$vWUwLoL7p=GmJ-xgGBMDWBeO6pS->cgGC_MFU) zr1Tz6(G!eMJLD9tuD7}@hxsPIS_4@=);AUg8&kosFy{}udCN)FNL>COJRduv!|_uH z9SMZab|B*bX>^2*v65W|*p)vtkR{ZpA>pKuH{=FVq)uAsC4%Y$lM6>Oy>Eu%DCb^c zxO4r(=J|C9=QV5GI1bsu+C);{Lm;0J0+kW3q^m|y_kpCXgj7d~DeS$5A!&9GI+RYKh+6HvDFB)l8H&3_7DMn;}h`jkH zF>XG_FQL!3R?N>{d;n?X9w9jsUQ(lgkx@{co%Pw&A2vHLT{aPv@?Hlv+a*5hI?D};K<0NX~ z8ge-S$2<)C=y)^93Yr?B(P1xTXOBO%w%t-c-vkQO9kGqE7XH|sb+}o;?g??jU7CLl zfX)I;X9pGG&!7qbjDWxJ$>ZNjm^`eh3&fM323#wEv@ z^ebjpLmc}rA2G@wNLGrMa(F9X>459sbK6S29Cs&ff(>AJHp6I~?LS#*W2ZRBDA8-HGqa2jkp zUeYRn;Y!7JipQ&6FcW7S?%TRv*fp)G2{u zfk*?t+KJSQHJX(M+J7#HEq{j{e`i0kPIMD~^5i>ncmeNN1K&fwriMyMBReQ_x>i%F zj;pt%E;MKDd&$$2im9tG`6wjbE)l|-!TRKZ2bXrqqqL9K+TJfS1`OtSnk+tUWxd>N zVLasZZOKAJTAm|@^EQ^*R`&~l1D8G3#in@6`ypQgFO|%BD=6Rk7oZ-uYj`>_p!0c_ z_i_LImc0=-88Cjw{=|UzfCA_p%`*^=>*qrC*9eL6-w@xRb-oBX0@NSsnC_@`^6=*JRr!QqU7HqXcu=C~(E)p*9MvEd+*G)=q5)MYA0H%I-z` z9`-tPTjE$3Pj!()*ZNNPtyESZ^DnGY870E2r>h)+b~tlWuM&kN#MaLzAi8A#wNl%b zUTH}GD@fVrMD$aXu34Kn;kfS)(WD~@?v@;39y;3ffL44@m%<}o24@QGdG03PKuTrfDW-7W89;&^ZA zQNFDszf>-JF)DW1QF=m9*K&7PA57fl)(xwAyc9AtvZvY;a(aRJaZ+C>eRHg|X(ii@ z{zQCSUus;lir1v!RdFt$G?K3|@#BB{u5Tgysu&H;T7=kV4qSzRx0Bl34*@qWG4P8| zJ=33B`f8#|+*d{1!#~yx-QGV;_U{hXeYOfq5Av9Te|qDod)5FLZDYIQ48a5sm_!ebS?1MW-5;fll4yB)I! z(>^{mHD89jlLsF(lVw;;A%4_UPrn0pU{1@gry3@+a|J%OyNy*a9RJt!&C~-R`VdOv z57pjV`^I_kd$L~ajdpwSn0_huU(K3dnlD&EADBLrbA5Q412XNPojuwPV4low2;K1r zh}l8Kz1RaqBGNDWzMa3+-+F}W1aHSS+l8GqXIB`{AA9B#d*fLn2R?{QH+vXsa1J{v zk?k|H&7$Mlv0EAL$}HJl@u&Y2@;%U_7{^;zp)YUdTt8bR=IaKBZz||oK+3290u{i# zvBEsN@`C#xkdzV5h<#{VMLzByts{Z5s)oD$gI$5Vb zHi-+numWKk;I*P&ud8LQ_Aq{`9A#JXCWLgUVzx_W2f=V7qM$UwxBlard&wXwGQ63y{T*4@7ra#qxiz zLkjxT2;yvtnoJNYMh5Au^$$Yd^2NPi-;<_x?ym+r zLN8+(;+#9Mq?MKzrgE%kyWTW7wkPyWSF%g@Bubu9`x-uAJRK-qfxiR&+_qzw)CsS% zgSST|Egw7F`RmYts>YUeh0zGrMiUaJN_Q>>Dv=D6(BmA!X?es9jN)u{#vJk1S)#P-zW$?RbnMm%L@PoU0=z}O9F4Qe9*sdQ1%N;9`^EHeXzOqjrM@ejpW!g&%Y z&LLjR@)tD}y+zDTkk%&2CLhkq=4-T+2o_Er2FUIx3s0+mDq9ej?JVLj*Z2%ZRbFyl zkTMqB4mP!9W-r+?O9EVdcgofHm&P(@%RZr8X{l;jSGc@vlbNCKI=~{*XLhD4y3p4) zQe)=^!7eX(6mTv(GFwf-s~Q#Fah9@+PT9GnDM?j&bAs$vr1I!L3fwP$Zq{6K6C9)5 zEomV*hh%I8JJQ&;mSIv_X(}uB!)wvbXzQyamG}k~&e|yZ^5a$erloZ1jXz64PGf3V zk`}f9O(p8z7F5^6PWa#S^s}X?pBr5|h+9Bh&sM)m) zX^}UIl}c(4&XnoR3R5si#7Xd4Fw%=!AQw8mw{|ZobEz{`Vl#S78rzo0k zK%2l6dCR5$CRUoCqGTKSlPSY`*Q6U;_6W{e2`?)$Q9tL!#GfjvdU^-%AC4+Lc`%A| zeERHPg?ZQs^xmMk2IJcVxI~EqjipPRt$lz|+C&t@2&Aq8R^T{~tCNb8ec#XNKeV{Y zsII^FeG>cfZ`4bUxFlKJHbMYjKb1r6_RARuuZE6JR}DGR0N|}U@+7J0+Ag{kCK6k_`lkKX1v#Y zn=7Mm#bUxrP4zVQ3nd<7s9x#nl)%URWf*YbQ?~T$x!eRMIy2XbAt&1)nb&C$j%g%9 z9J~g_Dl9}*!;`uF3LhmM%z`Z1S=z`;$*EmXWpP6T&IXT^`;jJ?{r>@NK$5?TqGE(1 zMyYV@dLelVVXnd*uymz6aV!Xy&cea8XfQGIF#yFPLz&5t2Qp&hSRq|uvF{irk>8<< z9uqP>#31BKbeT*bNm0pw84)3w(U}!I`AJWXhBRD6h)xhv2H7a4AdNx@>1Oo2=-I*^ z-f=}KxL}q|Fu;pVXaI1CBeexJ2TI97P8OykoiT`l433GLc_tH{@U(#ym~0Pv;8V@G zsb>>|c;?dpDXOPF z<@q9f&NH9@ZPD&Pv^#|6u8u?+h>wmJB;zr(5liaQK&qt}MHyh3qu2z*SW*h^b;1;7 z+TNLn(!GS7RAdT-6rt9FxIWE^EO|nlOJn*{n#vS$8AS+BA(hcM1r<&PsM3xe6&O^N z>`|+zpr^D@R4jQ4Ar+izmK?LDqqdX_ETxnP6QVDF>1rT=>4dI`Wmd%;>sPi?leU<^ z8C#U13{@}%TXkjtn>9~do9u`xrv((wbb$(juR*wWaHG+TTuXnKVZ z1?JEe0>K(lcNZ)1*hZa7n8MVimXh~YVF^pPlZUdFA)+R8KGtyz6>bT)WoBm+a9dk} z*=Aq>J2P(qh6^+K<`(R*Y@3A(+~2HIxJj6g3zFCZ$_C7dGB^f10~Qa0V0U8Mp;*N! zX7P$$++rBNSjGpPk%%Uw7#b&3$1Y**?^pu7;e`aqL3xKjoa8%%D1d-)LewM^QxG(9 zk0@yWQlS~%)I2g7fD&4s!uiriHpR#fe(oD{`^=n>0QS$EGEH*;^(Tcm4KR0jaYY%r zaF$GYv^C?v5-Iq6L4@#Gx^Ol?qc~^)uX0Bu{Hn?tQ@X-4Hl-y3se(g*c#4(;3#mK- z%FL?ZSQPdUDOP+)M20qLk92Q`C$V%#oWw3tHe@F<2?|8W2$O?^+6y_EbrVFz!oZjk zB@8j8Czx{Vq)6m?2FM6t%;Oa~M*Cl2MhhO%SEtBer7n|s40p&-3OB$j$g6RU9bhJy zGAyz?hf&#VHR$f?v4s_LnRjI*v)C^jSiOo@rjvJZ~X+Gs{!AEx?5n zbsL;0#QHL;pn?d5k7>NNqc6Zb4gdV<%kKj)(I(8o&;qlY(vWJZ4XqToDQXguo59!FCe6* zASnZ|^eUUmPb3VG2~9v%F%_gLIZla?DNLY%Eae2XM*Axm30L&$8A87QxDb(b zp zC6;MPxyfBw%IXBk8NubUGINP_@tQLL1S0R^nY#+SOf!Hakbv?kFWhkuzC#Ehn1ZN@ z8YWfYmrt&Z_6Fe}L127Wfn+0pIWvZJ1+olS$4wT6R zF$kOLm;&?Zuw^2f09zaodk?WNfE8;UBeb0(L>(ktLM3d%*h#`CWWp$P!qkB}D|9*} z6C>aWwRf3_BQq5+bds!6jOj^?O;8{!L#pj@1uH`-H6)*eIG>0yF2Jb&JoSkm_-U9q zkts8KpF7MC|EV8AbeKJv5dy+HmtZA1D>OzNqBjs3iqW%#2n7Q$JP2|iL$J(g{vVi7#5B>;oc#J4HzoJsL6yr6|2*J2vrQ2!bmK zC_*+XI*Ls)3Lf&Jgvf|0fTD-kh!(0em&g|3FaTORENeW*EQ&NX;+Il*Bk=eNX9)$449Osc%isu4+Kkcw zrJV_-?Met)GbN1@4DN^$r`wN7;3=m84&i75Dp&#qfRrkMlA=QYg6Cilmm5iJk|s<# zNoOKSm%}9(d=GA-j{V@d=zvLv*^*`2f+@(!oGgp>kb-|&js~F+rdv9G`bnasC!-un zr8K&t$*~W)LZ=G=m+%oM`6^1uJuMow9a$zx;v+M;GFKpqQZSQNDFX#Msx1gAGO$C_ zTAVtY7DYjvnW7W9L>wr|DZ11tyzHr=;>*572t;JBtuu}|;l#p>lv84RkE{Ab0G1C&tY>V+R05A9g0WCnzxB@3gNNWsEnn8#_S}X&guhv*H#ke7as0RaR z2U^;MDL9-ZpaQpgnyFEO1;9+m+_;AUKk$RF$G95-%Z?FrQMX{GXF|afTpI=pFtc$C z5OWM4i91bDOce@9xdONU z?9VeRGeKpaKwPu6&;mF^5SK_ms5736`9270jZDY_?Zc9B$dXa`GqUlE4PeBK`qT~B zf`j`W%?JsoNL6N2y@@D=HCYo95(v(CJ%uPXyV#1be5{n@n`HYF^iW|~J zfiQz4ku`>ZA}8nqjHsc$IxJ;92$E1pnGlsHa)_B3A}^6vOHdHG62TR z5%9YzQ9&~tp;I1{KFq7lE>a9DOO+)GOD`#f&jJZgs249Ng=2jPXUWx|$UMwrjoPa$ zc1eC6?P0IB^4W9QYB^5jND-Vj+$l&CyyW){%VtS_Bv*Cz;|krQ#3*!zn<-NZMkT=z_}IGW>g=Jq4*U zu(Eh<13TyUI2UDN|m=L&~=mJb5(}6gHTa1VvW6oqDxFgZU?@^415F^0Y zAz|4FC_+XS5(+CKrLg+~Xq*uMB)BRlgGn0*cQ_IPE#>D8iBF_OF+!m_8egucqsmaN zt-v3bI5cR6t`=RnoCU~^X~(=69+8njVuK1&xqob=Ehwzj zEl@8o$WJN_hHOv)l)R}DS%hF7O)>!HF@TZ%Dsro(TH1}>U;rxUrC(x#1=zYMc<6_I z%KMl}Q4qq;w~uOUk6P zTAH3|rfg!I#xcbhQ?TWWo-UgDAjdcHuSYqHKDjAu>#z;tpjL5%A#4N1j7z+nOTev? zsfJs-!^}J0JHp&M$Qw+*8_caXT#>O9PXWI`sgrNYl(?G_mg0cF%qWRrDewGDf5|L* z(YNk81zTx~=6Q&>a$VQ83D*_S;(IK?$i2*M4J*K+!nTEjNYGN#h+u_XzD|w4eg(&B zK9`6H&uBi-CSD{Nz0kTABRi|ut0P%i4e{Dj1IM47D=kz(W^K_Z;i&XUOt@J(L zJ0O|ciqC{dG-reVUzfOw0MjUYTo}rAn2Pqk{H0j*94zbN4C}V%gtR^4gOh)Gw}c4j z9ZBGJu#Hxj1X9qA_u7_b8QF!Cg83MQ=N<)=fg6>B(H8~b5%XXd6v7iW;k97{2Mh2Q zl~Mqc7y{>nEnsPtW>QjNa2#&%mEPeG*-{G6QVXx}7t3i4*O3|-B;Roo;Q2xjZ;A0j zz&C{xGbF?PNC;?F9}WWFX({VRDTNZK-Y{$9Jj8MJQB(wkNH?8hNYT4G#vM7fi#3Tk z2J*A!)&wbtg!|~qgveC7ka7i5phNR1eBLT!tqKjLil|TucK|+dJr&L{g>!(`zLM1{ zFbPp1P0=g=P=kn;tNV>_Z8dF0#wx-zqB(<=;G&t?!X%mqV=1^}844%zMPp>O;WlPe z^NLJERYCbQYh(#jv)Tq@a3}rnsn!@fGNn@K`N)Yo_l!n|eEUwrRN##7UnEX_PMMct2Vk zrT~_vggBYnn$~xl=68Qrx(yHb9JxA|n5;=5@gFzb#qD0UlNkGZsXmDq{Ea(otFyWl zp)}tApTOl?w}TQu0bIacxE_C*g?|~JYTUJLq)mYiEV0D=VN6kw1afQ*zuX(6ij^OFtZq@Pdf6_qlHQKUnQqZt z>6I7AmU_~N-75oa+%<~NdV0@gdf1E<@hCm%BM4B@pg0lZ!AXeo#F49z6!sLMjj;>B za4q2a*WtDlH@J%XObCjBjH^(5h~2)5etd3vEiG7sqEXDyRScZL8Oqu{sV_k7W1k@a zXsJ11(#MfvwFOR4f)9EmFko&+69vl3A;Sgp)ve|+th&kO~QUC7$ zZy}5@8;)O`jM5*($>hgj9bQsO5Ul6l;Rr_%D7=0t#C|Hwe(v9X?~g)(4}X{N@G52s z=NT`O@tv$nWW_kN4r*(Ce7_ez3obC=)p8UZ7qdMqv(`vJfJkD%fC7O74s^-9fcmG$>G_K^30hFeTg;}kUFc%x}I@;JpLHcmlBjg)lJNs&Mb zNyQR1iiQ9Z2_WGlln4MZWt34?iRF}8Qn{s|5ucj>YqHsAuUSq9ue3Tea{AXA~E6{^V= zg&vyerVJY3X{HbzWRL+$OreBLsv3~0Ontt}Dy*%_de9W6R!ZwZU2w4pDV{(lRNm zw20v*7>s5uy6df%Qc93ZC@JI?BJxNh7r5uh zMUcN2*#+&x*G{{LQX~LC^2;mVJoC>xA3gNbOJ6OxR3=lrTEEZEQ1-% zWM&|w*@D(cf-KXFMm5{PjsaeSGy~LTD3Nr{0iu(j0!1k? z0oqOBq7+q<6hKs_F`4P3XbLGwL2A;Gn$&wLU8$PVq$Uw%rayavBtppIidRTsfv1v! zs-l23L5>Edf)q`mWMb4%39_h(^v+QwfhbNP)l#`qs!|1lEC{ZURF#UzKv;Duh4cxm z33-)629kuZ9^@%4`5>?iAhl7P?0yQdU`wX|umMhFGlKWTDk-kz*KD<}U>)n2EdXO! zUFs5y1Mvd7zC{$kBoSkeF^VZXNiKz*fn!5?3&Fsqu8qa3KZ>0gPttWTskn_@X3(rx z?4&1vf!48-JqnAS(u&5uZ!upP3T#HxvXx=&G`>Y;e1tZTGDH$mHnW*f%3xfgDZ~w) z6xwN!b1hRQ#FWHp3K6NZ22uR#yHXogNeam(GO)!AR_HEUi0DhV9Wy;=lHQJWJiQ(}56H_C zvhs+W03##$c`RKrlNFLCAaryf88Cnbvao@JxZxGAaD~e-@;)`CCL_kNpZ?@pW&=zj zA@N%?{@P4H19nvc0^#ZeCBncvE2Pd2nX{dxAcZ1*kU1(Dh!%!L!tEmKBr55M1>4mp zH%b7lS(U<-r$srFnM{WF%1Kljqea`mWhnM?f)Uv`S;n|4)OJ*eUJe2nE$*ZfNf}55 zJOS#d6eTAMLkL}Ri)&YWp$fu0h+DQOvfL=9E^xVRE&JFGXX|7$nqk8zglhmq3X(pg ziH*{-Wn=v<#fg31_O zo{u0@QYS&3OHVqfNUQ#It5bbTP2PHwM^Ot~+`<)HfPeuOXMmAVB~REjfCxaT5Sz$# z?Lj?Yum8hp?}xOTLev2RWP)9U5K>Igc-;-kV=^0QMT!B zy~@Q}(uU10>hjOO=0&hEKIXHP5z5-^#RM;C_Kc?0*k|dq$D^>`*XgrME0p!yjzC8_ z_TyT7W;irReR*VVIPOu_@3Tfe$~W&mS}8AQ0Ht9!X$Nr**EVsjHMo^qy%Kd?jhT_( z0VYIuDa3nOfm$>m+bE2^z=xVl0TCF$e%%ePDMUNW3%F3!5)9bk9gg7?*n?z(7^KrE zoS-N;2P=#MYh0Sn>D=X1m^@uhjnJ5%9Zt;|PR)sd|G@?gl7SFD*z3?p?KF#sgpP|H z&x;-1iv3QF*jVlVDB&0Y00LwW_Gn=ia^V(wq4aQF7`}=441_%l#Fnk!Kvda5Y=Ka? zj~kd$J0(g4P*AP}%C?Qc2pGT!i~;J%kG8R4Af8$N5Tcs}kWKJeL?pok>6x1#9^JiN zn@9jx5r+wB+IERSNk~E#7+Oe_&~^dUY-o+(4TK5-6{eA2!En(H$pukxLIqU8T0K#I zNChiC3V~Qr82yj|RKioJ8bTxmQY zkyJ$E7QM)|RK!p`8)G<|W;~lH9t5`a)3sU6{rMGgIFdR7oGFc)xk*KG?Z%4$$58-{ zZ@fr$DN9KI$lE`H(sFQwgbf4$I)}@E;z0zIid@UD_!R|o0(giAc%VlERwOYIlY2y5 z4VOn&q36f}M~Xo~+-LmEA#bLfFj|0G{1Ij6~$I3cnFr9~ugx5L%+tkIIY> zQW2HjrHrNAPDk3ARyoj4L84bdX5vMJ;WZw!*ov-<6-;nJ7mSEP1|TVL-bl=ifw533 zWrU&s%ni-WWU{=>U;Wi)3>IwWOSvRO!|V-9tQBdg4e-6k^l=uwT+l%<1@N5$@lliO z*$Fj)3trS0OS}SXO4ef`R_ZxMW&BHQy28hJMfTyw$n3=F)W=UTPMevR_uN4m($u(l zlDZ9zC!wcq;3GLM&2_zub6BV2lwzrrW@(k4WtXl=8z4qeSkkc!#0Ip&mfZoRv>jhEkZAOl+aZSr9Ezr- zrrjZgwG|=(A%rAI5T8k6SuG|*;F+LC5TQB*DQ3hv%+Ll|Ua=^IprIqPB-+c!1fDw3 z=#>nn@kD0i1Tt!wMMs1Yqe$v$+&_YK*byC z2D`Bv{E-0{EXQfq+iCh^Kn7%U^driIpSp%$c5#P8dK(-3%6Ei^Cme(&xYv3A_!34s z+}b>-VtSaVkke{XTtc)9Lag7MJezr`irkD`B*;VpfY>-e$W8haPab84l)>*%fXB*Q z&DoqJjKRj%n}a!+Q*J_y5E6udhRZhP&^1)jMPZFV)a(EWAxX*9S;?13DVRWs&tl1$ zOx;*MiC7}7)_LjD8UXkV#G`E4L1=*lK*2(o!k&!8vfSlJXn;os=0V7v)b^#I6vy0* zO8$rnGZ zb7&P$LC{KI3s0ot^nsRt9M-En=bW$vFzs4>na3A&!WrNae4XJyn8LvSV8z;Wfdak< z5k2QLU8ivxr@)9VLR3*Dn8K;Oi*+iWSSa5fam{Y|8nV65wuNVS`j&%H&XRGB8VTZ!FPOtd+pGx0_+1S z=;@{wLKrM04n)Gn2ZpZS`c)r?5?;y;#DW+K)ie$PV-41*=nK6@UpZ0`ZVnlAPWmbx zjRgsg9oV!Cq2*}s7NE|E0ci){$f102kc#jf@(35u7zMM~ishgLbm0qsVGP6Y3@;DU z+OPl{K$u#RP|PI#hydB%lq=}rK!`xrMh6Rw0dnx+BfacjY6?mJ*qv~lhMxXm0?~w? zNf1lY-2_R{O2Mt%#>WEjk9T+naUq1_8UQ&Ni?JXC2MwVop%wYPVCKMtSVc!FO53NJ zQDhn01qLjvl1C0}kvo8{6{(^tC{{5poW(t38`-KE#l;Pw&8!h)1F(f1B~dn3qwGzF zv3hbidSfV_&S;b;q0u0~!C-Igqzv^|JDyS_T?;1^oS1IXJ@y9JiYqCNQooIBz3uXU z_9Fmd#6c!UKQ0Shx*gcYl3#TOLk`6HO5}R&5`(Ty!lg&^odtW$TEs0um%71DxWj+! zM=J!S%1NvN&>=fn2u^aFPHrrTaDtG0tUUkDPqwT&Z9z`|b_mMaq&j6{RIZ#lshpa1SIWOMzqmV^h9Tg4KJ-rO;h{iiBw2H6u4y;+$B_CZP}ik z8f3xZ910oaA{nKgjW^b+&bn?`LqL}6xoebxM)|VGR z)?f{UClCn0wk~tpi*C+dx)|qK=e4)kiRm`yWi`PU$X2{)Om&V$=Yg6u-dbl!3TTYN z>1;xS#ZO!P%#s<`TX(@s?Jt&P7ilE%Y|!5$(Wle@9EA4%X8`(VYI`qg4@=a*mH8?} z8&H8697Ov9Y=a(C#2tiM)5~p(-dv2)B_o7#^7S|Zu!t7mC=jq@bHt?$)N|u#UtQS$ zOmLE@7!_1u&PDfz{1)nXH;{@!cmGy+qYinO@S*rR`M@BuhmV31?ORn8K(Txm7Gh70{kE)#`011X>K+IV5(j zZBbb0gk*RUI9|rH0R<>uTeE5nWTPV@<#Riua%&`wwYsCVYRFTRfm4`*`;gnZ`3B#z zYcV4Y8ZXCkD9tb%Gbj=ByE3|;sAG35Gb6Qu1>q9DR=OAHYr^rXzoG|Wq$)uqfx#vL z9i}lt=+r<60h?speu#5De2y02Fv+g-thb!T+Pa1uq0(_ei$k#Q;E096Q=zYuKM#8* z8vC#hbS4h8%NF!hT4fYA^t0EK0Z1KL4()>QY|#P%mF%pT92vKh3AhLCwv)THqX~c8 za9ZZcLF~y)W~)J`9N$o|9i}-OEliR_;2Mt7@l0 zXy49z3>jEQDvdJAE){ z2Ezu2saT6k2Dfz%={#`hP`!8muM>EWH|du*>4!IYHzDqz@CvVRd$)I0P5}+WaFWr! z40|EEGi@vAu$aDr(zqpRo?jxZ!3x~_LEI$=AA}x~fGAP*L6{v8yWQN}&msy$BC<&r zo4WmyBBFW^*XWuZ356!PLMiY{o^JssFe-@yi{K`TUvUs|yo6~gT1F(K+VU;635ct9AwqxGH$iRYFq+N)aq*(10f^P8>Axa>`2+15PY7sp9D&!Gr`gI;l`aWGjay z9XK?A(uqTg8a-C&V!(|nTOr*+tYU%SOarG9LTqIeDZx@@NRer1pbf!xt*9EH>T2py z17tRh*<_$A!LS6k5FEw-swpW0O`)=FLy8StwsFZApxZX?+q!S_vMnRBOvAK$xTdiI$c`sVHb6P@n#-FBjv2*R?_s$HSgj>(fJ;O#t37!kDA9@mOR;Gi zuyWgB$Bh*UQW;`EipvNtT_Ta-Fp9(B#2xOmRj*dN=e0<+`ijJWCeLF;iRmuNGa0#e z#jh2AesFs9Tcn_OuO2>EuUa&Tsehloef^r~kKvCWKP|SY)8lHa%sxo9MZxiEDaFDp|X0EAPEDM zm_i9Dln~R(G6^d4Of`c`(@Nmhj1$f|=RDJ)I0+)96jxOG(@(1)GQgBh3VMn-wMuhn z93V|AV+w~p>rqPsk^s{sF0^FjE44iRvlNvCHNX~~2&$qAjZQtIlvfB^$bd5pc;yr` zXd>>$@oMtPF4P3rp0u`wzI@~^0(a&+Dw$!LR&GPwAQpn4s3skAjjS;aDfH8a=% zg4sy8;D$B-8^uc=)gsb0f{1mfSLS+6)&OM}fm*SJs_M`pNRv^tYZ*LE zRym6lv`RzktyVpQ-PJgGkNdp0U%u>T!w*971d2(*CT9s)5EOE~Z-z?a7^2dMd~r zJYt?JtnibdgybNI${(Q)LK6G|rDGM)NF~ewk(Qk569x!iJC^4>4mPk9d$9^tNGK4U zk%5F*`4(8V@D&$=1%?iBOkdU#m%h}c3@3Al4dG&!@%)g7K}^eH(!;~G7^a4z>B|yF zGm3@TFf#4hj1;NJndlj&4XnruE8Y?jFB-r#UTBRayf7QvnDI8TX$b@!Xn>OtWH~-c zPVkU(J03x2Dy%>Y3DqJ6?s&&L+!2oupBSI5Ozb_0L?m14A|5VmL1|pET7K?hAOGzC z2a^E0WPPkgpsF2c5-r?9DAC5CQZ8r`6ME1n5u}9-wa7#&QrwGLga8%sZI&Pcf-OTN z%N3<)ZixfYEQ6Q0yS>Op$fVpdnaLbF5~NgCd5mP(Ksw7P$su*&(iqkt1}>$DI8d@C z6tL8!Z#L;ix08Z8@zkT>MCzT#lM|WhL=ZaV$xaSAQ>4_Q62ayeN#VvMn5PvnZnG=&3b5_PMfe{R@k`cvc7Umg;s1>hw z^_Lft`h|=Ur&ms(O|nk95(5MQtzU{>D_B9Dk7_4oqKMhgbhgLp;6*e#dkfFbqpqMe z#j{)yPZ>B-o-LfV4CmU46u^e1u0aj9S$l1Ev<6$QS#4}>I~#%wfVQ)ljcse&t=rZa zfm`A&3C1nlKyn=NOvRz~D|r-%9tD!M?}SG*;t5S?=u*T(Dl(BICIct`CNu#^qGk&8(LfaF z)1UkNv1;9kb|#_i7-!Q*lwv!O*eEoi1da0B+h(QMtd<;D`m#fOE0N-4goNP?6PVbM zC5?*dp*#KpL8k8acVB}~4 zoy0*Wds(+TJId3ZAO{Yf$fVB#>#0p*GP#`+YAJjcL|fV_1)>;2W~XAy0EV(B4ym^V zwL;vY#3}7fTD~Jz1U={kNodW!+B3#FxKBqx3CC@1AgD-Y)piEHs>(Sf)l$i>5}u)@;psc*H#k4fp5zEbc)|hAo^;LceD%vzZ;+%TP^fSeu$`WlLM+Q!TgA4=&pf zbhh4(jkVd=x7_#!012ol0oQdL;^=1FB#_?#*JZbIv#TPxSqcF3maZ}DCjR9OP52qu7{3Myeotn3O4;uJa| z$~vYDdg6nM;tXN%3fB-JM&etTf+-w~Dnf;RN~kKLqAa}Rg}llD%3_d|NHlD(Je-46 z?!Xod(GUyq5bchK5Q8Zc&4+GCF8+{^9<9y*F^Q1q(F~(q8pDZv=q*A~G_YtC194HH z2YSK?jL2vez2G)xBd9jQu$n-EQsuxXht-&a)yzlMPOmx`3$i?ei5hX!-lNih4L;0c z6M!#4ni2b?p!g`slAetkGYONnLClK=^|o(rw>}iEj$d zm*g!0&W|A6aYJOO-*$m}>60j;2iN z>?}rAu7y-!j!<^Rq*CgsqH^v2DX!cYS0=k`u5vIYr9p(|d-Kh|nb z3?Rc8(s>q-tQM~z_;M%8po;`Dt#m~H^EfK6?h>pF)5O5Y3|u2){;Eepk2sRxEn zZ~34`H=||?vL-kM-{`L z{Qw6Dlq zG{s(w2qA+pkS0$yzz0o(9V*TLr%q#pTqDZLARz+C6e`9g3Y4D0G75beMf>ZJ`rXwdEyF?KC2NU<*FEZ0b5Pu=3tA}QA}5i~oLiTKo0 zE-@1|jUYNrHCV$H#b{Dt@d`>!NOgl2Zv|vjXGEEaL{-iuBq1(XfgMb!9ay10L_ya| zVHmrmTe_|j(4*3N%@}_Tv?M?Z5(J?TE-f?P0XZD2v%ST%ue3qVB6_-l1E$!q7!6NTUIjW zBo?Y9wya!2B}6oB%%T?F$1wM$50e8ZCC8e`;;!!UC`a=pZpACh3Rd3kSDb?^UCQc+ z!&)kKsbZE_dLu@~GAvo@E13#WNP!IpWrYF?TwJ1EkkCKMqAp41UKld*8gHzsmM>kw z4Ft0k(lkvUmN+7BM}F={#Fk{{g=_vdUIZphDZZWnePhg}D*^d^rq=<^_4 zWeePsX&oX1C^C-V2w@%KA`$jDf`fQGaKNVbK#Aj8L(l`yL<({eLR(=WT*C~^Awr#S ze1WzNoo9Kh>PR`E3)(ltb`pDdP?Ea9LPM+w?^i|dH+?=sVF5;uU=(Z(pvgGGVk+op z`R;ynOcsfQ!uU?eL_!K>u>!ix!qgCfukbD65XbD0gX^a%qE#$l$XPkVQ@RKcqrxfN z^bl7V5n1^E5F-vMVmR`Eh=zlx@C>68c}UkRv4?W_FiN8oO_&sq=+TI{FHAV+2%=(I z10=}Ei9t;=t5Q`MFkq)kazb@L$zUqB*n}p5wi<&!+G7%7^>CTOR>v3_#e+R`m5nL4 z8J#iNaMP3El8)(;8aK&4wy}jKL|UWOkNY^=BBYeajhC<^nPSA2bP17n$wt@_U3qDj z&h3#8x!`s;z+4ST2BmWnl4(zNWEL<~ONS&wl9YwAom}FS^-1ZDCnQI5?4oW|Ac9M= za!>+gC8O?Qb+)Ns?&eZ(qabBs$l+l>?8B&sAhh78bccEta-{=6UZRA}q3I zE3_k@-35jclR2W|C;-zh8Bfm`&kgRSYfB+2+(4lxr=yV4qZD(kIDualQ=x zHQF@Pq6!`pj5secl^A2H?$n5*r_?D-Sgj(PDG3Nv3aG+wWx5nFWI$FdPb#ZtcxLwc zV)h0}_goV$oD(>dbNZOGK%!=IGq*RD+Nn?LsE6~kz9zO{E2&8rb=SshGNe4a`aHkd ztHTHoezG)2LigYY6KCfhx3lyJju}dthNh@ss zE6JsT1*KeS`A8cm%oe-C^yQ1z;xkwQM9+ukh{K6UOhujMG>DLC5@u%7#{gtdM_zO- zUi4wbMU4)~63l=o`bSFFus#E*3MQf@XuI>e!0g71u^+;JhC+jMd&s;HArK{0I0(lg z^eVCfLd8N4W5^*Us!@+J z2|>(JA+0XVU@1DGPL(DOUG<0QOi|+SqO)i*G>yN1_=te`G^FQyOZpOILpH9!3NFZGC8wtc&LFvY+fD%?|621>dj_KdhHOZHpk|){8)zz%U zORb}vNANAN;*ZL++yDX~tuYx$yxi5i+-}8701Tka%iJLbU`M#zQO;b;n+eO)`d{!? zM-*UkD4cS7mpSx2WF*gy{@hU(0L>l3%?EwZ>l_3FGI@#VTmv9?O+;_N57Or*0k+FT z!cTE3J=3R){PZRW62Q?vJ=7B*(n&o{1S-HC(TX{1Nu{X^K5-pM`AC+FMq{ng|> z+uPko=-uB1esbc^;Ojlk2_BsGTu0D7JvW3o7@0!=K;k1=kt?1|fC{^eg@;^z^ZNQC3*O_FP5M%eCpJo@5lh-^<`{!?a?0Y-(K$Hp6=(~?Wun10p3T@`slB|>+v4{tsEZknF-_vf0?X& z-KD(C;oa~XpS*~J9mhSFUd_t!w!E+-{vdwgH(&4_;#@WV@-yD(gT6*+r07rokZTD= zl8NVMq{&A=U0eV4lU(*mA6;wTkiV7ncVG9v)$xBH_=8{ghrjXrp7@V{M~>e3BiLL4rsMDjb*)NP>n28a@;lQQ$)ZKq6wi zh(x2qjz}(k)Yx%k#*-X9rYyN~V@Z`DVUlz?)1=Ip8DARzOmOn%O_3advK$&wq=BPI zlPX=xw5ijlP@_tnngD54s!Xpc)jG9n)~{Z}iXBU~tl6_@)2dy|wyoQ@aNTO1Yqcxg zqjwD?0I;_&-@kqX10F26FyX_76C++6*db%UjurQf{8)13%a$`^CLB4g=g%^acAPp| zY3Zb=Kab{`8no-zuw#>DiF%`1hgNCJ-p$+VMbUUy3lB~lxZc{wk*>B|S~vpW3=vwC zNPW8XkJk%M#Lj)YcZo?JCJ0Y{y!rCz&#O<*e!ctl@ZZaiPk+9B_IT^&-=Dm|0Ss4f($~1V1p1wsMdoRjfES5ctKYG7-f@f=pknxHWpX{5+o4;i71vR zL5d_MvEqv@!uX<#EUH)|jWQ;oz>PA-$m5SW_Gn{}K&FVJkwWTNqy!Q+*qT&NHpkSH zO;%~;m2O3OmX=s{*`$<9feGc52QFmhL1>=2okG=h*XBeag;d|1_ti<~op$Dl=bq#7 zmls!F1}YVxyAdkrp@=4`=%Ps(`lo*V<<%%yWjTrz0)Jtu*`}LqN+JRYpcv|kqlPN# zsidNsz>cZ5YO1TH#;U5Uu+FL~tFNwVYpuNIN~^ECGKwXkNeFA~vB)N?Y?V|RI;LJ? zHV5Z-*HP~qpm$hd@G6?3(4`t9(&wz zt`vXlYRM39e6pzZw(RoDFvl#j0rVzSGg;26C1!3&9n_F^Kc^}5LOfZtleX77MDDmu zFYR>GdY&uw%v4ux_0?D}`fpeiR*LRX28YdQX1fC0>#t~+o%Y!muWk0*ZpW?m+)QR| z_uY8st+%_sX#}luE^V7M&_n|PfI~+MZtcN3KAm2ukGluCso_m-dBd1Tt~uqL*Ee~2 zpJ(3rd*+6!pXqz2uKMb%x6WJFJ!i=Ou!bOtop6Y>hl;YUJ6hcP$G@k%quVf+T0F?e z_h@|bN6x76^2aNGvBfLH>iYHAXRrPCVFGTPX=jE%^!P<1e(+A_qklf*P&+<);V(139x%GvBqvDIIJoc;Ty={03G}Wmj=qd-wjcu*s zp9VL`!43-QH**O)?raGepb+yJ&k#R*2b4URHN))RZI%arlOjW}&);5y?Yj{Zvq#y@LNT`4?T0N7_ z_{7IZp{-ASh%*}d=7g8_=!HC$Oh6DSX#gIU=aPMzp(iERup5H1Sfi|5Cf(>BrKx9f zu9P4Q`?4qd5wVcC%%v_jSfKkE;E4hRrmfCMDg$6JjeH5f4QB|LGFGLB3V34#^V7u{ zGSfT}3_vui0!A;^u`t(kW(39Q7d#&Gg1bzoI@gK45Ecg}Da?)u8@V{7iHC*cqM3Ql zsFzuS07pQ$zfPZ!yJ4|rIZ7XrErXDUfqo`vEGi1j<&T~No)idyudR-@1or^wOV zi7kpCJ)mBgRIybVfK?}b=EPDu|57gMu8XUJ>0Y`CziT?gnf>%8iN=V{o>uXuGLj=5 z0U&`eCi8#?G$)I;Skek&^r=vdYO<~pr*}3-k&Vo%BSVrt@pP4|JlROGKG~;Qwnv%m zacG?;mr8xoNv+}W=MH_UN%z2YKDOkKRQJl)2q|+Zf8A>@vjWV*TE;4=!i!3uS(TI( zQ!f-VrZtlaKfr(rRD?-D1lYwcZN^l0{ZxQn3>r=eToVASQc_{a*~Mf+a8y++;5kXu z*V@|lwhH=FYDj2Lq!Es{DQuzVge$I75|@6Mgp~hq%iQL+<*%sgA#Ru0E-4z8F$=q$ zcBL4ZEb1;~Lp4UdR}f($HH79Fq^r{V?MKe-;3rpyLftj zY%0l`Oy@d7wW?M9-p_)j)jogZkzO@0po>iCBO4lA7+$iS7yZ;79VMENRx~>Y`#%y} zdbPcZaf>%C=T67@`qOU?HF!bIW&C>D)HF65qgT!9T)HzUJoe5!2mBoc$MesH&h?>p zO&=jHx7EN7HZIM#T`ETrijq0@WYW99UG$~q7BDsJNrZ@YT$iYMD1sD+uG1( zkzSZx?Q&~Y*y!Hn&2XF(0Uz#g0(rOL0Pt>l+q>TM##FuI-7WIayL`DG=z)K z&k_&-A^8La1ONsAEC2ui0E7bo0ssjA01XHnNU)&6g9sBUT*$DY!-o(JAUQbEV3L6s z1!gp`G2+6C4MBQTC~~AplO0d0T*;+csHONI%wV%ez%20Qi%;9zHip9_X2 zIC@}dfsIQ?-h2`$L!z1qXC`>`DPRMDfe1~Y8~1G9LbLAfy?eIs-^7s@kNx}VY=Xt1 zyZ$(nCu__rHztWoFyr#)8kvv(<<4<@Li2actLIC;t6AF!Csw>Ga4*89XARgVtAD@1 z{7!+l5K%y6bz4;i;-*`H3JQb(gV1Sp)Pn{x_~1ZRUHI38y%}_1gA($F*@a7KSlDg3 zeTbrhA|7UN zvDNLev zCF!XOjarndSjq${o)IGdRM(W9ohH+k0@WaX^+~v$NldN&FKMw11#~?drvb*7xL?(ac5d%2r@M>hb?01)Cn15K+i{9(LQ%98*5-y5 zq`6!B?NwL6W7Fi-hensKx=B`Iz2@pivb1ZiywdJaXurbVQtCJ>R3U{?+6!ZF%K0|j zcQP8ES#tM@tFnAKflPG7SVB*b^};qcl1K;#<$VO3@5@~Rd;^YWzAi<aAO$v%L<}Smg&O!R7qP2D z&-q^fG337vo=QYMT2OF^6BQ2z(1cqn3AG4#HUO4zc@ujVxOB1`*F;Bm7R1n#5_q$X z^^PzQ@{vjZ%7w$I+0KXn2mlUW!n>k44>yBBQH$30KQq1USWraP3RT9%p9$}B3Hgkr z9@RHH1&BKG%gN;GgDyd_F(GXPnxZxr5%7VoV3(TJK(w%yOA*A6hbo94^;ool^`um1 z6y6f;)x?t^vL4d2^BrwswxdyM zh-4`HShu7@u=v>$KxCrH6R&r*?V+t_D@ly`fJRIKAtWQ_nF{y#BM|Wwh)4{w6P@bxU-Zs4OK~A)Fdd>+ z@?_@!pxUIfZCv9L*7Dghi^)@YEM(z@E;5m!xvQZ+i{mV>0=hp5IaYEFWyXhNPk5Y9=?Isj;x{5F@jOPRHPFZBsN zCzDpluq0vtXky(0indmz)FYk(~S_yrTKMrdDmp$}01_Caj_ z)hmDY(_c9I!%ZpZQ6#4eVLuTRL?HI)NkZhH0$KDx<_=JRK_rn5p#{(4Wt6QMWXKdh z+P35=l!UZI$Wq$L)&g0Ne8v2Vbr>2mo8l0RXdLB22nk<=w4$vl-I`vNh~KP@L}pI} z2~9nE#lLLVz>=!X3dif-oQy@3p{WQTJH-=1J~L0-yc4Jxg{Xq5mo4ZbY8gdrVTFXQ zE}XJXRtU+}Juak8R$HfM)p;L7*44c|%dw3^*(DcBH8+ zOHIN_q^HSr3Em)8sDaRDvk~|Z;oK)W#I>=-n)~XUBEYCMMs9NZj)-0gMyUIFt}lC> z%ULH(#29aR+gExxmIm`?maKVoN$E^|ucHQpD7%ogKFt;cX^}WFq%#u#f3c`Tb{iZ$ zHbD6Kj>&E~a{&RU;(Chn5S@)-IKTDfEP+?L8;xgj51JtK0oaB03}}YX&mjB-l5d^a zuf+*33j4|*{TSw-o*u|Z-sKQ+hfBc*HTS!QCGG^r-lYRRkb-cRU}H#V>avHOgYXPB zb_goo0lt`d%Cf1Z|EDAkYFTLVq6mCkYP9-J3e5FbvH|LW@R6v24hQ+gbw19^YbPG! zpl`32KH0K#NpZ@{!>N~IM!hZpd2ZT{@DG2Ql8(%&(x_#q<7f-bt~P3}WULd1n|eKd zs|`p{hU&n7-Iv+A@z5e>K8{x&?m2Jz*N@b3s_0ykln++=db$_?CGn&x?^6i?_ci}O zs_mJBV4&j#34;otBzjn{+a>k=B>2B*Od5T;m90i=t07X_wnb{DZQK_w>9R|1)=Qk_ zd63l*hUO5{L|a}#6&>MQs%1>1gI>8rTZ49Im*o-plXYw1AKo!hceH{)g)gl2DnO=8 zJmXO>GI*e-eUPPndKYdjM}rweYWvh>`Lt>c5`ZjXgdO7%K6Gi6qCy_BgE!_Bz=a#Q z)NA;4Q3o|3wlfNP#Y@IATwN%5%VvNDF$M%72C8&R8wYEx0Y^MXe>fL<993r#@g+2e zD(v%1E75H_g<+s#Zm<%F#exud@l}i?M@bSXlVf}*SbP5e)?)Z#J;HZ;l!H}vA!6~y z5`NTfW~2}nCKZ0OhjJ)bIHZ1y6dMQ9CZo6zaTQkv;12@93b1Gz3DAlM1^{tE3YC{D zz!6uv(HTimZ4h7p!w3NgV2r~^foCBm$z}_bw;i098P>50LeUDWuw-KpSIg)oTd|DS z(h#FCaz!OmGuMqzVS_98YNm!tfTwuclOH-mb7vtRlZ6v;h=6kTfRq(@ci4I^p>!cg ziX4Gn(&$VC<7fP`UV=eo4FMS91U|7979HUgE|_(zWGjn8KE@Y;!BQb?CwI#ATp(0; z2t+{3H9=t)K@K!_LbQ$&^Fj&5cM0`_dABSD1X2tCfjU69eIdg?nC6idl0dKYQ95^h zssmqQ<{+gu5Vf!gW(YJ0fGyZlEq>Gv)0S-45|uwA5(r=)WMBYaNf2S_5cD_^QLqJ? zU;vsR6cUh@zp<78A_dWrmh|`=^T;Omm;_O20O2rmWm%7_=o2v|U{Rz@T7gK+=r)l- zQvya~u%Z*>0TP>p5`iLobRju}1A8(i1#ppK_PmnY_U7Rwn|)rlLIfdCQki{;3izGyPs z=qA-7Q<8*QVj&dlb$If*jVN<#EAxLqIDiszfbe5xX@;N%>TCDddHaZu4%(n^xJ$gL zfGy!?p(Tg{(slR36Wn2Nio;Cc6ki^}DWY>Qvr;4Vu@;_ULH`mkixz$(0)^>_gF0xV z)VC}td4#CulKSLorv{`dm~F5|YnW!FNK#MUWo@UU5&N-5*VBWCNXP{2|dJ;+#hL^|@P|7%ys;Ci=7Lpo$<`N`!GC1dk zaFLT$me_t-Qe}J;5(cp;?;<*tb6KQAhk@B&M%SAh=@FM=D5lsGd3AEN*sIg&tG(!} z#u=Z#>Ym2RoV@spdex1_d2#RQjnGPt(Q1y=`mEA=tztq*gMlba#U|By7L#(L2(=^U zgex}Lrpp13kwvH;!GP`BfSz}cQ%G9PA#)I@64R7gA4E|DIUDH)G%$K}A_}NQS(N?p zO{|$2SjQgVly2k^qoZYaD`|Ej`F1D?T?I5j3A)4A@Ri#>UwWY@-L)Ou)^TH7*XqsU(61IW_57UVRV@<8; zdszUghFcN?Myk14n>JxIxXEew)wwFco1mM6WZ|v|wi#=v5Vm-p!z!%5%DS&Rtg^eh zO<|qPnVy%cLAoI($?~vfjJQt>QJA?E1xUVf3Mb0G<=eiiGbuVh_olZbr*W!B;&g}-IS}D+8DpEPfr)w%LXHArs4XPLH{~;CGb~wQsZ-fghlaVS z7dwgfZ*4TG&lG1;C9r*~Z`)xRjz~F&*r+CP8jxE!&leFM>JU&|w!7J5tl`9=hbyz= z8Sojbws@?>TF6BILA#3#tc|?Lgkif_w5!(ot=L-0QDgA!Tu?mk|Y7Fs(C} zg`^9sf!upW zh?A=Hs?4y}f*MAC(ilk5oLy4(l5A&^Qv_WLban@1KtpMg$W>Uewz3RFz13yP4s5ch z5)~-fLeiDIf%m}v)Xo(`ZtwwSARn)V66jGmYu5X7R6p7!!J17kulX z!1ree(P4xCW|@K3RaXU7K!dCiVM=~vaLViuqVs4{0MA!UB%`~K+vddCXPcTUJVteG zfP6@>TgX*?o~~=vS&h}c2t}KOCK?wT$I`nqhrH7=JoU+}X$>6oSgpRxt6LG*gu$Nk z$i$ggP?(l8McO6TyC;pIy=S&9;u~IVILqLxkER>T3;2epQod6SDI$s<1Dk6H!Dj-Z zka^rpcKZ=A7a12p6jIRpPpDv)gz-?Tg~uc|x7!kmxX zti6iJ!TQJ}F5-!7tj#LB%-Gc_1udk!u3Gl3Py~;@OUls-a+~a})*34=>*IR8z{~8* zHx`euETawm5OJ2+Mn>cq?sM_FkNv&N47<#ZeI8ZbbiIt9Ky8>CZohwL%3Vc2TZeUK z9=#F6H-=&*JIprM975ZSKslnnC5%Bj63*P5vAiAJK<>`E8^NQ78t*)l`v}A`#;$w+ zH?vVv5xu?O$Tb|ttmO~2Iy<`|Nqf-LJ<$%G>6<>#N}JGhR+dI9(Nf#Q&ojW`ed-N` zvsX*%Hmu&Mn?ttbLuhMyKjgLr);dDYAD^r(nwg2J`z^WC(iK%G$TUd8p2X`L#cS6$-n$>8Mg7_DDP7lSz9ERE!2nbx-jcm!w%M#9%lU|pM{Y>KM80iq zQ{GD*0LiH0vtEkQuOL`*p}1iOC&$i~6l9u|TXVwWRuQYozjDG%xntS(ye?Y*Yb{$;dN!AYeVu6#Y{7zE+?eFR42(h?bELxwpp4`(mWJ{0{gVoWAsD#87e?p+r1SL(D}&Of;NL-li^xf69+DWs_8#NVRQbD+09M zW@$o}(p$5u-L4h>mUQ~vZckUbFWPyNTI~A0sheWP*wxd#B6~40xt;-ovkCZc&vVr-CPBG8Q;|S(MPRywKS!9Xi>&<=sXcHKUbo-iKfe1Llto+>n-w^HiU#^j8 z{`<`BVJl-{`D_SN1mZs$!u~SLB$>7(A1UZkVRx$pq%vzmiDloN&%pp;K;XcEKnwsu zU?Aba1V9oPcu3Fyl8Ff;I#fu|pu~p}2O>b2QD8!g90?*>m=PpFj|P&slo(UyOqw-q z)_j<9WJr=9A)=%hv|>;MLXA#DdQ@rBq(zwm9s2aeBes#U66k#wXOlj6&- zKfQ7_>Xl~8scqf1)j4$|&agD&+GHzIVMBp=A&TugFk;=m6C)UiP#4Kzq=+3imIy#% zLW+{t5`1YOO6JWl4M@o>WhRo&Cp(iC_%cai#+nCi7R`99=qRuMW%_+P(6a7>lLN~P zEmO3>+Oa)KPBL6`=C`8T<9^c&Xp?7+$dV=mO`awiz}tclPaV z0!RQ~z5)0K=hxpWxqbo!@#*{TPrruv^KZZT`m--0{1Va+Jckh63ZnrL+{>Y_9-J`4 zuP)qc!wkRMFfpq{Tx>(F7AwgjlnP@pCxK8hXho!A>`k%WPP(y19WfdxiHMkUk42em ze37aljl7PqnZ)ak$?VcQa;ny*97qDkB&hAS)i7%*2`d=`GA7wz+ESp_x`V8yuu@8K zJTx=HEeb1R`z(sXlxxjOGY66)%QIoDNG7MuW68}H$BWDVNkt8HvLNwRnrx#stpdqK zOX1Wjur^2ftE8DEbB?M>-8`=*PkrJoQz32ovqzSc43ay-T+|Ju-6V?9DX4Z`iC3b2 zjmp zN{JLZbD(xpjf^JyBuZj42~_j!UV%gt?aS0ybM4H~!Zg6j%?>*_Ce`f4mpOvLT^C~8 zYNME7&}3>*pj&g4ILPVbEvRE|8x{FG?wlJC3FQhUD1y66?sjAI;u{b@1NpMKW}Ops z=;oex{%>BPgLZ493^9DLul^`nnn0wTCh)7Kr`}5cJF3gt3IP!pYU!e#I4!gzlTe0k z)*_3970TQ~O*`$;qI6HZkN*-oH@A_TNnOVdg@vjv!=yTO^1)V3hn8`%=rWx{3hc8m$oA}d15E_m>_bE^kB@>|kEK!L~Y$AaKWk3?xx?)6g?CIk53OkUDo5$Xcy+!@=B%QISN2v`Jg`3=@-cY^?6mVj%dUyoivc?BH zYH6!|T`^0ww3W_jd8nTA%%StBDM!OiuRH|WWg+!xzaheJO#H+f0ULv``Ee{>>`~1H z^@Xnz;;2L!WToiX*OM3cUb1B`q6h)}nnRiLw+$-|U1 z*z5GIZ!JU5AYC=N3BCodd?RH4Teu<^=83C0ouWt-w4l~2NiHV+qL?W$b6M<^t|2LM zi0M*$+L^hob#aC5M@FZ*)4CQ>bCHZ58PX!&73yU=$))Z_r;^n5gmfwio?x&B)Ek}Z zn9_WhLe{j$X%01-#|4|Pu-826!S6`bYsyjBa}~9`(|y|$-?OSV*@!8NeCdPl-JG|H zR*-@fq-ez`)@nqv?r$KZ*aD|^BZd3c*8rm+BFO;io2sJItRJfj*8;jHzNx3AR59#m zsR}ZUEootiz1U|SNE3e@woVdUY-wIvuhcZKHs0NETb4*49Qwtj99$s>S$vcIRx-f> z1*8zY<y>Z0QR7D=(Zw3an2rgfWBR4UVK!}|%)7U7kWo56=d_n~ozjrc_` zr_75N`eIkn+_W|4B`#|uQJh2MU$&GEGNc&JCfKk?1cWIpoK;+(%(Mvu5L%9!U;}_T z8{nGE^`|#cDUslcSN6S7!GoL|;1WwX;Mp`Odh-{S4kKzx26j&<9_;~FMI}A;cp)k@ z8~!%+f(niqh{ zyjVZf5uE{vtU_w8ypl4uSiAd?yZ9lm@BxeKd6s{RwlwLAYl$xn^fW_Txzv+_(G!g= zh=5U8xxdIf(~G@A(~X7GlN8j6Rv>AQ?Ll0}>}&ED<6b%NjO8!YRPQA#bS+8#1!ATe2ppy0D2k zpTfGEXpr4_#C^g#`jHtg>Y~33k-t+j4T&Wu1dI|G9%Ku2Q(AGZUcoI_$axkAq(5-O>U2ka{^aXQZs zyWmK=fYG@$aVeGB5)~^;tyH1fXu2TOK$9W}J!B6DvneK&!^){kj_R?Ikr=%bi69%Q zrNqjWv^M^6Km~*uyPHJ8lrip*M0gRd=kf`@jH+teA2(we!W#)DfkMNiwVkXlOGrzqmTU z^C&-78ZK61k(CJ0n$kAY**SsA9L3qr>$r=zqR;;FP{jmMns7exsuE8cWRQY1D>t%SbiU zNyQ5e<%`Yy2+RCXj+nJhjgi8nmpx&xR2xGx2_njg67MUuJCTBixIQaMfKMunk)L&r_qNOw%h)POMm`nSq@7$3ow;M$$DqYo|R zzI`#JpyN76i_g!{0KTFLEETqa6coO4FzuvFpP&_No5E3vNOAS0&Ll`dg4aVyl#H|{ z5#7Uk^VfX>rV2?F z%IHgv4GLv-#|xVzR1%q?izu%wp@zYzoEwt$$T_uSx`1)mny`$#3=*pHy{fv^nwUe^ zz*(McOPHw}K4nRXDHmRS*dOw%-OAOag<6SeOfd_ys-4Wotk4{hzF>PhtLxfX!qERz zF370a?*cyW*xB4GGPJc$u7$4Z6xfoP&QgP0QyWxfTA%Ff&cFaw@jRQfEsW_3Kz5~x z>wAsvP4*@jBbwuw6+bEbk)GM7>Z3 z%TVRx)JrWqGkUv40T?sQLdo$`l694(WK5R;jp7i~5!1dYA)x6U-_$S|hp8B4{nt}- z7w!F&omv^V3`?HE%6g?G$HdqlyWbo#*Z%ELK!w=f&nV)cs}?RiTY;QEOO2tuvWNj) zNCzWVvT-Gz>Mxk{-|288L}^Gc)}qp}Y2*e~P|jQ( z{o|C^HN={5KRhlj;zH2&6Q1vcUDZ0A-=bXqW%dp6*s!`8&|U)A-~BB-W@mz}CN{28 z-`%OY@XI3Fn1p~{XSP!6!d2qM8;+H^iCriQtKOPhmka|FRW;CDcI3L;s5=}}uRFu2 z+ZzijRm8|aaO;r^a?`JTi|QpQ(xTd_g_%-zQ;rHh(IDx!b7HQ&L_NLR778l2-QPsq zro=|IUG`}YmuveIWz?P*5QlD7?(4$9RM~B|K2^kVHCwgQ)pg#fI4oBd zURD@)3suEdaO^0{X3l)9Sqsn1H-o6OnwRx7q;ZRTYBq0^r z>pGjH4ZYj~4B^tEKI1}dp-r;?fMa5mvK=xX=+u?1HeYj8G+j6UTrig{E|gv9ux6KV z4&xrGrcG;)&fk&tYvg(h0*~;K#PA`@sXlge8xI%Ttrig(^bX!_B%$=0Hq(3opA0jT zGTr4YdJ9_B41O`zOcrlF4sVH&&h0DX>Ku+3BdNY|Wy?s~X}*piT5wZt&*DJ3)~l#c zakSg6-#{(5+fMWv^HW!r^aYbJ7lz=eSX5C@APB^3-k|Ha_UXLFcB{<@1>M#j6$*%X}3+MMPNPfkn z!2mXY?dkpD=Xj@ye#8_1ISD^{M&jYn0QEG0i~kHnWsA-7PjN@~D&=9kcvlbZI34-z zJ!0%ff$RfLVf~q|*p0Gt_V8V=nO|PdlC7gU5)ypP+OOfrK4R`ERi1F`8Y1~w=TDX& zvX6H5C~>;~@M?c+NF^#L_!y2Lak>DlJy$(>t3lC z0soy^*y7p$g;DcL^?A54WWtUoM_z2$v0|MJyS}wtaAg9Ict=M_;?p$9z8X2pWX-YW z7A*~BBiyplcEK%E1a6VSd$&X21znGJyVjxV&jvgqsVFkZ-GOwUwzSJKZgm5wwf_uE znWOjO;>W)nKe{|i^TkCYgkW-GOZE@HB6hnHdvuHWvkD9lm8Mq40f)G+F$`LHxP#enT8qy%#k-465aKb1Vh`onAeN*A%xyQ zG-?C{1qS3O(2fxK=buHK3?$@0T{L8*0YnOfqC>KgD#jJKTz;7)saQr)Dwg#n=$WROmf7K| zf3~X8raXbPCa$b9w(DaQ##))IYYJKzeKx9BSC{D(L>IGRX1QNP=#gpWa1VKO5)%kj zF;I^JEug@61~56Ulj1sgu901wOOU!tmdm7h;6k)5d>aw>QI=so1jSqi#07-`0MFPZ znJw1(AX&yDd#pxZ)|l+W zakadxzW!3HA*3^T1Vo7w(d6k?JX7Rzr63C3QP6UBI`oG(BMmgu7%Kg9&ruUS^@m6` zjZ@Q8m$)?21j)xW)mc}aPy!<|EM`H|3KXMuZL@7A%C89p>b4bR1a1OA7Nq3aXLBN4 zL4bcG($`^+4N^)`tfV-vjAJPhz#KoE(S9l}?I5L@zp3j-n5$Zr$udGUdf(wfq!|*l zA(V+In1piJRWnB<;X`T<%<|$d<(sNNyNBoNf`SD|60Dj(=GUsp8?U^A#VZ&(@W2;8 zeXrGrMi8{)Mex%0y*IS`XuE?y-t|M_m2E@v7PxNxg`l%FhD54fx%FO14VHYotR`L z5cmAcf2U%Z%ubcKFeTti2D}i>GQ^+=k*;Wr$w}c7lfw{w2R+2&q16&ZJLU~>YBowtoM$2bDuxa`2ZG*4 z9yv<#!E$+(oa7}XDa@XL3NP4!SPBgw0p6u*nX7ar3ZZ$d?d*js4Y?OV=oLo;EPz$% z5?4Wx#D#H%vq_e zP;VBK!bNpxFRf`q3fEGaF=S-9bO;t>W>S-mscq+pAb(`i7kV}S1dJv#qd?&L5V^_~ zB<>SJLAEJBmC#Z>@>!(~^~lOBT`*vKWSkx$cPj=qCU%2_<(xKmwu6BXdc<+f0{cqY z#iEXr1`q`XLmNsAMganm1xC<@I*O>7+!GKyyPIK|PXK-Q@@_F3ed0gZ@T&qha;ILCX5 zLunLb1zVSq^&!XPDkCWy6VTl9yY{^=enDpd_mCtEuLET$I|>TgyySTWTiZgm$ek0EO7R$MZE4#bU7{;w<>t4#2Cy5C@RCjgxUb3FRT8`!;$4ow3$G1X z@{t>6#RF<@wq+UL1;Z>@!wMEv678Jm(lpXSZq8A1s+FS#)u%T#wyQv zaY?EZq6&|uS~j$AP0t3eOl>QMNV1DvGG#fM(g)@LwnPgWH2sMi+@WHqdNP5KP=JD? z9Sx;%DVY%#%^Ee)X*IJ?rSE6wTOg6hl6QarB!P3N;4saZ*QN@#!+}knKr6J>oQgGx zQ+(o8dE!q>)WQVH6sQ)jIK`<}=#P`U;tDJ|$~BI1q>4>6TlMGJ!s@bRVu|K5>le;% zF0*C!Yq0}WPp@?Z5i36#FHSP!l<~4*hb$S(`*R>+2a*LZ+YZy1PA;lewpvPEON6ep zk8vtItVxY}G86e40{%D|(R8mS-2-7;&i+p-dfmFp3y>6WV*uZPxJ#J`!$3eAO4n`l zbzZg%sJV>0*Af{aQy0kN4G?*sXRbiP&D_%eXSQ3qU;dxZyZmo!2zuKp$Um8pPvRT0 z!rrM(3gD9hYG6<6y~jQYzLEXjVU0?FazriIjEK_*g1_Kfg!oG`zCh-e^kYT&BPKec zmM&hne4UWdl!?N>{Y}{Hn@Yl|QoCIgEPk8B%}NQ#7i~151x*-${p#m?jXt~y+-Sn) zHWY~ZWut!l(?$|^xk~D|U;Cw>7U&-Vx)##-#`{r-6bRr$OoZ!oO;VV~CXB%-kbwbU zAO?;>p%KmqWz=Y45GWade~ng*p-h6MAcFP8D)|wqOqlldPQEl60@7fzs0ijT$YU`T z{SXLD6cI^WSP*R3PyEPVNQl_U7@FAsSY0RviajAxq===Qn5r=qu9VoxorVf#Mv0*b zjYVON1yNb-%!BNO*kzkVBmwwj3H%wr7O-FMNI;}v30*9c>$MlHtQL)=SV5$d9|{Cp zg_o_xPbch+lnul=$<-2c6G!9-%^}-&S)J7N#NkaML!<`l57g3FAnMMcm8sMMMy2MDt|?7^O?F0pHn_3mSF}s>u#PG+U!Z z!Q}Z{rA0y(xTGEJ+c~OU^}U)|>DEJNASsZ+PX;AW4ka$Op|A+0P-fsy8l=dzA5lIf zQj)??PMbiGLKz?>2C@NGTIEkl!CoMx=xN6oBqjX8lR(%XL`Z@uKBZDZrQQ`pMgbTr zMFJQY04RXM1?f_}iJECNTcq`iO{x^LrAng}W~EV|jrC%+(sbPeF8KMr=!V-blBpN4{WMYaw8AMTB2&UC(8N-mwBMLPSwk&7GKHL)52! zZbBOl#1`-;K?vwT)TeJ;4{_>eRTe0NE@)(&gh3K$Z-!!h)~BV25)WpIghs>`V1$Vb z1iQUX79c@#LEp7C7+=X??kJZQ?2f=hUOTemIzqt(Wl!jp#f536KbG3)bsE}eNm%eG z=Y?ez!XuI1DDmk3N=p>e6O=DOBJbGT7oh&JEJn zHOYyY_63aU!dOPJUvTY z+=YUr*rtdC`vv7%aw$+g>RLud6hvw%M5?1^DngbeQZy>2UZtdJswR*GQHG*chU%$0 zs#=-}rUE4^{AW~*r75z3?(Hb(aAl~rDx}h$V?aPg2?QvGLl|HJz@_8_4$umY$$RO? zv&EqGVO^dAs`uE4&dfv-%8*vQ;|qBhOo%6AOp8a*rgS=C6kZP> zvPx!{>j?_~#fxQO#0d`UUX6GWK^R|ntundnX#6wSrZ*?Btf9h1D%sN!Rh?et^p9AAhwS?+8ws3 zm0M&|Lj>wT*r31t$)y>9x+U*S3U8L!;9yGH_PiZL6cePzR$P!m8*r&aVs9?;=d`dw z_8LGdkOBA{MEH7dL9ieAa;aw_1RLCSSm_h`w7#sZQmt2x&MQw6!c@GL!QHs@~Gq998RwbR-iI4Z-o|TaMh}011gu zm8Y2A6}@Hx1c3_w;PrTA?j==JRqMu)<`be^$Ym&0)h5W1oX)JK7h(-fP3FpZu)`7m zF~SIjYMsVMjED#&!7@pJz!vN>YG4%`z(Vew6l^gU!=DvfaW8_zfsqtM?G**!Pq);r z-5_58weD@?JDNo6D>gd%h4TV6{9$OhWt=fzcJB!@6bYzGu*K_sWL6vSt6F0v!T z>U2mfY9xUrbLk?J0`+Y{Dr@pXbd)!$TiTVycEo1{$*rj@PO8jgmiVzlV4ZUPDNRCN zdfFqe$O`okvySE?Zv?3?831r_>P94iZDiIj2`S_vDXEn+vq_@&z^(WUsgz|sAW&rqru)HgSNsLkO(7%qWEU7Y~XKWnCmcxtuChYs}7@nsx&Tc0!css z0(+810p3^lFH($gSTU;#HLJd*RHI#;wB{}36;>9&wLzH1XGVl?WNQyL1a7!oR2U&i zER(&O&m8pz%^8)rYMxXScCheIYB~o3w8_cMYuWgOlai?z!qfJAAr(6RVZKcEW&a?4 zzJwAbg~SXlYRFef%taLF-N8zwuDUiUu!2DxH8c$2WsHVQMfWI9BhHAw_~WyOt(UU(vE4kw0he{EXT-w+wx4S&ON2~Ovf-D z&MbwRwt1|6U_<+@z44q|I6K)rW$JmH5aEyVZY-7YI z=?2FbFq(}nr5mLL1k`PWw4+1RF}gbhq+3){2?GR`utf#``tthy`FNglo$Gmi=f00q z-+ya0CZ19S1hxOCJptHMFTqbd98G@l_Z&g5s~47xvpLC?`Snfv?r$jQqTe}!XX!l( z=*w?o(At(s6rt=4;Tt@8RsBjQuyz<{YJuziAn0q}3zVBj$?ZNMovpoZM5umu&4?1V zmZ#}Q9JQ$JO4J2aj31t6v>wlC2*G|!6+Dj;{7_LF?NVVXZ@Oz_Z5%J&UnN0slKV11 zdTTddR$dvH_FkmP=grqK-!JAD-8X;lhPoedCmTvt+4!t3>&c`4%L*64^^N&^^zvo4 zeQ}PhsajYJ34ZZ3T-3krW15wF)P(6G^2Lv|R5k)jfNS|23U?yh6Y|bKRBAEIybvL_ z+F*4WxWn^?|3BZK_s-k;x5_NB<@p?(oWnRRHMFT-{D?>i{uhVln#hwFv_2Ev9+XVC zJ(Q~Q#SPmWCzQV%7-cLJLi8Lip zq(tMfmMR`AG|c%OJATlUTMF3npCdzq_o6(>jE;p`NcId{qN*I`{h$El<0EN3eATbT z%8A?eCe3&C634aDQt^k$W359uI1Ny#mUV1GuSr$yF+gSWSNmrEpZfxeMqk9(-pTl_ z{ncl7YK;H)wcz7t=bsIYElGdg?Rd{p^IX%nmyT+n+AU>4uv*HT>QWh6@u$g^h1wg> zP80Q)(N+o1_BTlQ$G6n6zi@q2mJ$QQ5(DNL&<8jn`sT#6iV*te_Qmw+zZ|zpxYSRs zAs@$Z0wz*SCC*=Pd2;|wJ_tPmQ`I1U-G2PYxpF~$TLrXY*X`G4Xx__O%P#RVN@qK7 z^rvp559Q-8_O$uTD{`L0B2p}rg~^jU!y`3on^$e_U%6mN?-vk^GPKvJze0UIE{GF^ zY0*9N{=Mn-gml|_$vJXx`$GJX_Qq7(4$JbuEe1=HnO9MnV*6>O7-LrKx%%cyuu-=fQ5!+EPDi<`x1J3ZS z;PP0^T4BzgX+!C8xC+b(D}&!W^>1;nV-EMJ$RDW4>f zMqF%M=|FOB>{d|CMZ(ksTto{C1i;=Y2(pvDL#6^|o%Zz1vOFJw##pg;Vr_syQL@lu zMIFU{X1!izK zUM((Ejk+2)qj2NVlG9g?erP%eLD9M(L1;|VhgGe<4xMh4x5qRvvd@>oy8iw=91&8M zZkHSfS6XDGgggq==f>%%RB_@r_N(~fHUO<`OR5JAxgBNysHflN4v%D$HW;n6w2cp~ z3+F;Uj4b?5?qg4-Qfpw&+#6vI(A@7dne4XbNy{c8$;DLn&Ij`*R?myH;lPZ6Kes^USH=Qnl%FUIEH_HIt}@Z!)!HOslz-KHaaCR4p1A0%`zFy=S3mqg@(Cvzd8k7olMl9Ix+3dEf7g>#22s5?v?k1WzuFjxa{AEIV8Le61X7yi zA05^Pa^Z}9^|zG*N3aQ5=7VL23NEFG(HOa(;p!gF+Lv0ZM?<#i%;*RhzUc$dlu)jt zB1F;JFQ&A$MXloPe3so*ZL!oQiBjU}OI#P7lki|Bm)^CT3CiQV`(h$ME#2$^liv7x z;jMddl;DW4H^sg`MD5lG`T+7B;YC{>f~8DUE@EBL;UJQ4gi5|L6Q$&wGX`LT_yIDp zOemJXC#gOA5Ma_+%)r1y1E&>(5L7^JsGd;Lh~L;P80+28!hT;k9;qY}E(m~g#{7<|9&-v5dZNy~P4GDw&-@MtnvxLK>HI z6MS6D6!V3mzvvBv4rN1#H=xm?tI~LCFZ&~+&D1v0WPU)#y@=SE| z7cTh!)^VVW9MHa+l&uXJ%Rf2I5S`|@6#&j7(({h-n^x)qzhwwx(TE=q?Km>3Jc z{@vj;bYbOu;&Rt%-TlbM#K{K^aA0(;Vo!#>U0ELP=X)5Zjaf7s(MR|ah7)r2owim6 z&;8JKg`GiC4l6J2>>J|DY?pfT=n~K87=EIV<|CPw9WQ28**U$^*lGP741qSq7jYu} z@EnV^DgJmqWGIBlBlK9Xt&CDCFXSy0bx+-aQ`x|nQexr1m}1Ie1p#(?ad@3AOgB@U zj(;Hbm+!ft?Yg4oK(h3Y1<7Eyyj7NLOnGZ)@$mmFA>SDRk!4?y_uCh$Gm=^O+9yjv zEg7n;TTufyMx_lZDrb{}bLIaD)HrO?h*A)qK2M z_&x`0a7^IA>0nrR`hal6rx?L0W2>55hd(x9OInRzg(If?f3{cr{V>fCv)t_K$*=zifLf()25OMRI1^)xD*spLtP(ux5qjCk@%ktdk`@NkS@tN3{FD+4?V8)EqmB9mM-%$@d`fa!RZf z2yMoyob*DewiUytlYa>!?~cqR8#TXt@dt?==1hfBPF^$zS{Qe!&;BWAT?d7jwWoaQ zHhXWS|A5LuM25fV(ULIVN-^0EXH|RZ?p!v1H7SNT9H)sp5=yu;mva$uAT1r?ntt@+ z-u>Rrho=VDp6zpoG?(0JIr~}Y<3RjCbKUT3E#~o$|F%zZ;>M-#kxdAHZpsX3#cdSkTLuZ4L|QQ{_lqH zK+vbMShP$%SalZc@&%ldnpj1A=pQJ15B>S)C$=9ssex9{IGCXV5*(uJB*%=eIFs`^ zN^)Inim)@vqGxJvWDl3yLXkiSoCR}Qs1F-t@{^wPyJy}iYevzRndzE=As%(6X(@N=JL#uo`#q|k@Q#ONX z8MbQ6t&R#-clj9N9kxF9CVkIep-d?>oV^)ie%^nX*`-ixZKa-~s&zj#Xo0EK`&hlu zPW@)KN^1V9Bljj*LAx?)v*2IhfEDmn_XxK4r9P_4HK{joF0io`Ih%PoOI+)F)KKQz z`Yrg71Nhp6*>ocX>90aB*g}0KPL}O%!I)0R-}R}>{^m_PuNHSA@ixcIJVN_1PYBX7 z_pX!#-cA{Zsge0_9&?LVfGgDwf+^(~JD_0p{iksL5;sq$7*7??5Iwmh>uUE2RVAMO zm@(+y#Fd?U?GMVn9!Sl|Nf3mWr^g_N332G&2{VGT+|7R)#IZVlb9AT{IC%l|<4K*> z#ZL{ubXF+NLfcbC&KLA@QB2!9VfV5%=9A^ymXrAv%SZO{$v|^~^VVYDzQ*MZz2h1Y z^s_$AMV(;KFmOJuoUT;%7t;BaYH zvLZ*6qQ}Hb82%(}_2tBt^S*p(mKxs%7GLb3bJ~}VA$v>pf4G=)J^+{|?Tf~(d6kNK zLxHwJ>seX@# zKH|gc75=+2Ti4+Cj1wL&@#23H?(T2ITIY|y73rO=Mtz{ML~j1pJLO}cF@_WDUJ`W}wO%0c z2C)KzfLchp)Q-i|y)mTOIo)Qy1bjY+MPM90J~i6P;tiRt!xpi0UDDWNH|1?<{M0tmPwNSfst?#is?ZF+7nc-WtmJ_F8Dw{t@RVZXWE-h+ zM0E9z#HZuO9$kCFz zMItwb3u@B;%7#VaLi0UZ>@(|Ltztp&XxWKTr#4HL<}$XPVzWN#eX z*<`%&ILZ`U1oy)5*J_`@iZ2lOL(W&ht zpyQAol%F5mSEG123i97n>X5%IBl=3DY#~XznAe-Dk*;H=y_(EdY%25sDy@@!qEq`= zC;eH_`w&&(8n4qMctF*OrK3dlkz~kyl{=ra6m|rOGD7I0J~GeuAa;CM5au<~`!ct& zi+O0$*R+;Y>20<}Ey2r)DiT`n!kucI5SJ$4;A$Xyti{v_->NDcMpe4bhP}=PpLu>^ zIP<)?oRE_f~)7hO(y;j0fi@TA9He?dYTY*2fNIOd4l^Y^Blv9YneMwBP!X+enS z=k=EFRW+z3Q-RfI*WQK38|jo)3+;WBD)Wnpt}BeTLi?dRD5~zW-Y-EYl_IGJ(H6Yc zNC9Ln)-L;!apFf(xM}-x+4-3#1y;i;H&}o8$1XSRKeuHKZ9eI3{_iXD6w&KO{WsJ?x%K28Hs^T4!HAj1u5tAl52ljTRNf!s7Z2Gr?@ z;z%Fp$Z^i&$k_(6JjoGv!)>rWYmj8YC1vXWyAS=LUQ@A1U$IA}buONJB==-9Za0`W zUo!!z-5y>ii;p`g!z>MJ%K-7b>i?m1DwNcH)C7 zD>+ZER9}u>FLDXK`L$~mDnD-I&UMzToqylUDsKi;5^qYq^IEHTN%!_@6p|2*X)%v5 z<}8`{X>)$u$$|>`Uv^Wd(V2)Jw<+v8Km~K%2OvJ<+OIEVFbZyDh@m+pA z*#>Y*+-AkpO)`MO;ovcv`x{0O9x;Zo3^{I-U)VCrXS5rv ze79GM>?(}!%+CI7p-d#_PxJ>OV#5OeKkT#ngUFHxQ6v)kr~lLcmms==blQA z(7gy()FZC2JE@=RN;Kka(llHA9zlNfYY114nsuFgEE;KW@M76`=y*~5(Z-Dwri8%f z78aXwBPMB-m)y<~UGlZ{Y1ntN2I)n9+hGg_K|!7q(UI8-;{>h4d@M-Lna#(@v{)$CKCAUCf+m6~ND;4tt0kZ(Lv2**?zK7jIAJ+{Ir-#Bd^BFgfs%tk7PCcF&5Ai}& zSfGe7wD89)wN+)T#@Y#nel#Ps>6n1BYS9{T@&9}$qGWX0uG{KHm(Sn4^r7G>pn0)( zi3i_vymrYYzG6}~mm8#|aiO4*UfB5VyFx~xwvg8KYZDdurimYmubxg6XaCA}nf4#9 zuHp-ATGmO=4*L6bCU?Fo89gHzmaR9gAjDL7{>^ho>&cBjyX@XlU$EtNEu#CW|Hc8s zKd|k`4Z5MG+osGpurf(-%Vl2Hb>$={%V?sv*W7rB4CoK<#n=JxSyIYu6M@RM;S8!J z2R8v<7qlYdSP8X9NX}6N2;3t6*90eVGpVRbTu@pS3PIy$K_X7`CvgG_uFe`OV{HuU zY|wOIe>&aYl(lRs6x~_xGhd;ipR*FT5MWH^&?I#e8<^B41TXoIYlOWVxv4HkSe18s zg5AoGSn_73UAAkb*rx;cMvZZZNA?TScKQa9ur}ku{>;ke6oAXS8g`)Zj8#Zj@ zd9Da|x{L?E7-`X6h%MR+C-e`b#g^$&H-pF)YfoFqWNY$Ar?Dw*`xtpJ>Ljw*!fPv{ zixtx8-i8L8xdIo0(2^vFj$T_^5>M4E86Bj?Bf{1;1`+Wstal*h;(%a`i>J!ADXD<) z`o@y6vR|luWPNP`(7~kIBr$h|j^Via^PgRf@b$TEyB~a+3{~F{a`nxM463Q3^PUy* z4TCh)60+l;5$<$cm8~uHo|AQTacNi;OX^3K~vx^zApbj z>`C0HjRgc#2!{c45g7!dRSiNj%c}M0Da%>WJ`M2Aj&nx=_pX_ww-gG4gZ(O}RVF=r zCb_5W0oF?)fT2aRTdfbr)OXJ(aA*mM!oabb;ZceY0^DI@+`ad%4ofEbnp*R`#a#a) ziBpQOj*Q)%K6k%%ZF0)PQVGU^M2UNg#+u%ZWOMp(=h2dvOoY+#UxC>hso$RGuzc)V zvQ}UVgn2F+o_VOYh}V65v>dB(1S`S>|9WDK z?)F`mz~i&t`P`OqTiqzHJ@B3tghb(G-O&lm=^4w$()yY>7O9TI$KTj7Y0) zX}*}m!Q@tA>8F@9LvEJ^3eZ=Lm55dnf3cqUCcjq*MF7~~7uj{;5)wfXG8*yO z(Qycj9IZLjN7Ou5!xx}-D$Au>Ie<=_Q*Y4olHr1GFMlipYM;*yvh>-IC?l{)PxqN= za$HM8y(f&z$V*~I;;lj94lS}T6{V-k@;?w%@>X3UF*SVlmxaj%ZB4-rf!cR}K)0}} zVaE0h^kl7)otU)Qw%xskYB|GhbIa-she|yzI~AbiRgYOfpD=&X+G@eS$er_CmRSd- zL;h#FKkx-ygkP!+l)RQ#$VS|>)xxD*4x^~Lt&K_jmY{2y*I&r9e}AtE^fWejS6Thg zc~nb7G@b?J$-OQ;2WMTN|E=+5;g*>M=%`L$Ed8W?tYMBCZB)N-f6>Yl9y@uz_uq|#tR10PXK`r713uy?H)*;d6bCmc= zprt{SE1CH0pP^@!DK>n_vB)s#s#bIeB>R;u<{aM{R=8St}Va4+$({3D0rHb0NmkHj* zgYx<&QdlArNh$SHG#9d`29CK#G?F=lNqq`XvN97rH193Gr=~<|GNO43tg5?21XJ!# zc!fG7=GmkdWqSSR`t#}f^(T>?>CfyR)OiEjp@nM-3 zVgy=#ussIlvfP@$YX{Xzp_gllo8H8R9*a?+`ZbP!tPzripd|K_T;t$RQrCW4oJ#O2 z!7re`Cz9%xPYhx=^6Jd)l)QPWeI-DjbGE4XjtZqz&q2U(t_b0ewrdW$&d;a&Rpo-0 zsmoOKq34CqWS0j8#=)B~-{*7j@8X|Iqxc}-Co$^yhy^y-5A|gGD3%v0xL`epRB~4Z z;^*V@*bgE&$d_W^Hpodky*|k7=d}6bSNZ)L>Xv1wZ5@8a+v!pL<()ZwKC&h`j|BTW zGI*-Bz5;~+9QUS5`SrBfZ-(MS0;&|MkFM{RpM_K+^vioB_^EuI)t6y?_K8(w}9%?K*y0deo zcWLGQ%fHiN5f9c+zRxF(2*=Ha=zqU>#-lO|IIyHDWtf)ZIpkZFn4@z3=28fSXXf+p zvilgQV5`18I`DJcCBHs=CtxXh>*T#8a*_MW#;T%{6!#HXgd~IK4zc}XgZ|1@y?iv` z82(4PYTK6h#Bi)kFI@6A!)d4W2K#`IKEm_?wendpA&uzeAU=QzXRkM?Poda@7+bc z*o6+5K%5B_7o^>^C5zeRS?kRp^a8KYJG7PCA=e9#_#<&3GjK``PWL8eqWFSo#Gh;_ z6JF8|<3Y?+vpc?KWtCFgMWNL_;A9pA`=a<=L-PbuXg}y5eNd{N7UDYwfqRP`^WMCk zWG6s=vC4FTtvn z&c2Dc6e&SM_$p$r-EukqAhyvqd6-3;PUp<9hv(*jBb@|aqQn6uB8^6_^s@*W zDwdI?UxnwVR_OLudR*7ia%$&)$f`f)AaDn)Wv+Az#!Y3*n!jq7Fz85bYj^Iczfw0*9Z#&nYeoEEI0;s zAtEkU9d;XAS|4=-x)Wi^B780&M>g6^Al6trE(>)_baYe?-uRv3OSClG<8Nkgy20Z9C`TDRgBYh0I8cOproP%hW6vvvnsbn;K% zz$!ocHV`rp9h&L~dmyn5*5IR4HG#Q~(YXyI6Xe+4u%coW4pnri_|Y#zfj5{NQ}DC^ z@vCaG`5oFED4q$ka-tTp??G|{15RN-O`S$#bC+Zep9fX^MBM!jyBeKv$P8Ngs#tAO zXf!2$Ar~Pge6~8zqQ_pKdkRwQ9TFWUjuc?=T;+Yr?p;p`5cCeY&or-%47H2EhQiWP zWaI*{a-0Bf9$vnSeg@exi0qRDoh1!#BbKV%uzO2v&0kQb%GKls7somD>8kuryNx|ocgCN+I<)9hLL*Q))+TS9(=o2QI#;&O5-~qY0+uS({t}Vb`KML~-~7&}^UJ=9 zE+Q-|X;zrboQwL1lp3Zw+$Eis-`B7=n^y7iGxDw$#IgVadnCk^L0?Ac^4`Yhz3<{x z5JDv-!-f*}0?y_mjqXub(_QYp-IoE3h*_E1BMWZW(#ocMb!vUZwQ@ao4q&-$kefot z_}Z2Xf&7wc2xtSg(~W=~#5Ik>C6tZYx^qQN^1&5g0~SGHWxkt+d}S+f7c2M+c}3hP zRhyF);$?cnQt?miv{`7(Yev_(x0SAD=z6=j`_&6PzFM^Ume1HZzjqSBzKf|)D*im% z_LjirzJ->wwQfXdT$})_{8xMvn}5><(oFB%-j)BrpU6fJtMtCU&gY_TsKss1_i{Q; zW*7fa6aTLLhTK%?m;KYS$AJNrLA6$FwLuW^&5hExy@uFb!_7JUwrePfQKngqxG?n& z2bnok%L^dtvZKImlF@i}@0-?)tAGPqqZWbR3jK@AK-6Gvr}_oqu&i?OR}W; zM}TRUebLO(#>qe7va_ofFzF<*LMET#)>r zao|CMHXXnnZC@Z}IDkU6NGro}2SJVB`MUDbz8+O))jKbZ!unSl5)H2rysS%VIg4om z!;-hIV{Qe&Ljr<~g!x1j&-(oM?tiJ;-7O+yxVrNCk)A(I0KU!VO-~CXJzPdXKrH9j z=)B6jZJ&Ei!5$-Eu?4Ug3`fSXxPO;_WnVoYHwt*8u%RK$J`a9A1r`gocIe>L-|P35 zt|9GNLIj8O%+#v9CX4DeM z49?V=0sDGMF&3F}+U^)zQ zB!<|G`aw#bRucK9a-Fs8gR)j!F06L^Y}PVw$q4VbB(kiqr2>lVM$VaGAi30(dv-)i z&}nK(6<9F<9=w<*K$Uy0uGKT{@ykMR;y<&HiWriobuUvOB&cv~x#hl!KnY5G&&}47 z>Z|kp@|VR_^kIC2vRr_6LfKglxLtB3#XXfO)B)^N*+jd2L5omI;=!Kfj6`Pn{0GR> zxc6vx3YwwJ0@1s!1AGXclB9Dk4trHp-Rc4s#)<)>+B$O#zB)OII;G>Nq9Qc+5=j#`rl!BHy16-U; zMEAh@G>O9hrm5;0j?ZXFG8pe+0tH+Rsqv?NpzS%_JNs}^Cu-=6SBxND+_&uX$}eir z33k8*C=G4r0WljQ2cznLhg1NxODNp0-s|M_<{$rd$YO%KROHG+VmDa&9Ls2y+|bejw8j;QER+^BG7&uE?*CGIeUtPD#8MmKQ1cIo)%oFSDA}L%&}Q zHldyCL+56~o?kmnyxDZNOf$joe>?G`diuh;=9DaY(rQfiJy| z7iz+Hw?g8bW#=E%d(j0JM>Q6PA)8nSe+z7fqP_D-@4Zn-m!xOcKTAz^QdOg09vh2` z%^mAY@Jzv<-TcY>r!+(7%%1n`TE`vTLBcnr5pZJherbz$#gI3q=5(?mC))12moIzo zeUoh!P+0e7~MRb3Zvc415LKcLEM8Wh#)cLxYLq8 zVZ-NutRf%!aB9i(>}3xlmXOLeYsmI!4_Iz1Va<1}CGBp=q;tH5p7=2@3kfOgrv(1f z!#Vs@_f5iD$@R*)XT1NtV$h;gcyW?9+wbg2zUL_K6lpTpOBq?B!9+$lcX|@}^hR+3 zm-dYPTE1RB*MCP`er&AS`jA^mW^im^rq=FHjmm09Us~k)%xRW1RGBBrQQ+-IA3qy( z?T>E3@!PI8B4=&AKYP#SOs+d;huP#Tb3}6fn$Q@ujkdA-XeHWs=T*~wx9VM0fm6a6 z@)Q}zHe4BN78hj``FfL!LC8P;bbN1V`?k?yq~gSQRTSO&mk9qWt8{r2OrT$sx`tAq zCe&IuzWeGw8mT+4((Rd$62u1C@zjl$jf z)YO!yM(hwa0gm0VYVLYRq@i%#WJ4j9E^WtDOV6{%lKuMV%JlZ}Ni18BplBtwf`wK( zajd2kon>ofR4CvOXX^>9Wv?(ObS*qst+TEbUh7wvd)DFzW;-t9C%SY6EvAASixiyN zIe6y6DY8XIDPH63oLrXhNeY5Wo}sHCJNV@s$z6dl@_rTw z1*l}oD;3v@Dut@xZ29%ze3oe!PKdAMmk#O%dnHEb!-~@9BtUslg!$yY(XH8Ru8WFF zJ|ZT#cGlF0uO72cpA=1n+kDH9lgtYNg z^gn7D;!*X4SZ~O1sXCVIl4li1eLGY%Y(*y-q$d-+6>6)ZX*$9B=oUE}$A>6)T)Yt=^1O42$N6F-l*&tx8oIwpkut~=4A~K7g3s+eyL#9Nw%|7FzvDNPj#dyZlju1Xac` zM2}S~eQrRJ_Q+8oX8E^91BkDMlu!_57{wROLomSKy*`eGYgm%dw0eUTGhrsVerXLLpZ(^-JC509; z7b=@7ZuOPWYE*u!y?lyeeVdl?X$~-p+2HFIt7bdD{II|=@LQAwM5lz7lu9dWH@2Cq zTQ^n?ygYPm2(;WNTi0-F-M-hi`S4QLhDCWoasB-ta)-6AU&Rl3gT*~R-bEKDge)7$ z0mtJ0xjdV`wKSP2h>qKKF2+ewTm>KFZCM}W?(wM7>x*%pb_!mUW8}_&9KD;O>49Rq zo@~VRh-cCzsb?MxQTLly9?^Q4sAGXjEa`Er^uU5ZW@xJc( zwB9BLp6U2}PD=G_{bLeJ&XYsIsp*O25an%qcv=N1Pin_RWkT8jxV|@RTLmu=#L;uL zXI3aQlTYhU0VA?p9*%EETdQpKf-Bx$2mTR+P2ZB#VU z-#I@8xzSg}KPWLNAovY8sy2&lKRE}NFDV%~dR{A!AX-o4^YL+2)$s7y z|ISjU)6kN5t-;`ahI#T&3AIgFZeb=llIC2I(P{G0 zh@VWn;mMk^W8Spune`#wq2MW(O}I zF?1@@AO;RRU@zoo3wcylNR->4d(&T>&{Gh6eq#kh)rZMX%{bFZz&mtwqHo17<6{0S_l#}bXpW-5< zwUL7CJW!A->0myK+n3|_4!+_rCR}G%fUB;TuPK>z_3!TG|M+RF__jN#r*FwG^s=_( zjkgl-ThyGc8@E$K zYgetl%2i0tatI|vHIxOunUmob3dp(hRrk{VzKy!`H=bZa|I@`_mjnrG{v)BnMBwaL z^x`ut6X62YH;R;U9EG&A=?58IDhtcta;!*U;!R#5gp9XQ^15s-?9@dW>ncvwbZ>r7 z(aF&Hca!}(F{+>!;;95QS(KCty@TTw#x84uryk0GO|ts6%Pxwgm_XbCzSm?s^9m?2 zk<{-ZudQ{}mdng&BkgLhgYCUsZG3xrk_-09skxaEhA}PSlAlIg)fO^;U`)8oW@kLj zGeKwCV;{qg0Gq!L@vSm`(dMjv_Zs4AuOz-rvY7v+a;a1<+T-la+n>8l1*G(6Jye=Q^e5-~Pw`^)8{S*M~2@cz(rY5dG%u zTHJ48wFnad21RIDLt6iF&O|8JP&p&*OCMZJ6~OD(`*TxMt52G44J@tXZD4N zu#~G>O!OQM`eG!ePtu-dGTSP}(`Z z0sPMlU^N0=gQ!vK^wN*3NISaAypqq?)0{KX?c=*8cSgAN(o43IT{`-nx5-`F82>9H zflW6k@sjd^6Oz1ZXmed5W70Qu>VkqNXx;?l(-%^*K?1(QnZ6``>PBHsgtWEV(EH5V z8_e2J>_o8ag&NPEJVs0A0xJmSZPaCx;^JcJv>p|QMyXK^s z?4-K0k@A@sSX+F3@vSznTHe6I(%tn_7QK8#dH1NOsv(@y6{=JLr3JCBcS!CYs{z$0 z@IXbpVY-oFedU9@j{S2l_8VASvh$HVtRurD^zd3E{r$Cv%wu{hR=TeZx#>1^oN?}& zoxzsRP^kr1zbz14GW`C(hYzz_?Y=&GSNSMl+2T`0T~qkflQpGL;03Ue(ql^20w9~s zjpH1ro~W-9=)beq%WFC3S|7pZf7C1G+i`KiIo@pPvC4pf?$fmN5^Ngc#G>_&Q4TjV zvruH{biR)g|YeP zFPYUjM{Ags7m7{xSlAc+>CXiB^%TE(8p&HbzW&suzA*YxS+FjD)FIi?R~r3M%1@Wv zcA6j-k)-Drt1c})3SurEnm9E^Fe=6xf7?uv0 z>9ZG5fwh9V?q0QEH5mfAit-9Yc-@kvml!+{ql=_jPqSMe@Yvhi1r(yte1kqf z^K9n_I!$qxAm!O zmDdg}YEESh(o{0fz}rU<;_vd8wpb0uR#xl6wJH=E8q=l&2a&aJE&pJrp1_*g-8ca7 z;RTKhjosOUrA^5k!xW1Pbck%Ac|gY-EI>1{nxH{h2AH%3GCw6p9NbjeTev!xT_nU6ArzqLnL zs|ZaNr_2m(>~)EtW|c>|fe+_iAd~WCWJN;RIr(b}y@%G2Q#4YwRvG@&TllBuPW;A< z`YFj4B)Rqo$+{)Os^Uo+YRrOio8qZ!$=AjmmT>?1Rin*epr9n@Navgq#N83eEp=5< zbGekhNs+&kf$c+J;w91pl}2=a*4Ef#dq`JH^Ml@?;px z6XiqCZEY`$X?4Xh+W0ki?$qMA)bM^-`>Mw~X)8@LoQ~Y}8EZ7haQ0mepL}gj$u%w4 zrA-y73vNqOse$Zolz3EPGW6dJO8eP6Dml>+)qaD-!y9oK26B@ z-v;pP{%UJxMx8RHPMdd+;Amz2%t`~W5aD=$vEGn)V#3sh8o4k8MV?IN-dUETj?m?C zN(+IO2t@O>_43Pa?XH9S3-maKQn;}tO{V-=Z2h;N?*i=@MmHX0Z>-PyKbc*Gr{4xS z-~2Hjm%FKgl&`K`NHb-sa>BX3Rwbf>olenSp%w7&UAxs-(t`dPGuBT=roNj zw?+9Dl|UpoZPPl8XGSZ%9QOiy{I*rl!IeKvT_8ADRf2_}sCsbsd9>gw`0e{9lqm(LDwX=>5+Qd0zD2n`LYK zjYJZhYv(pvpsFqUYS z+i}-8?EdD}JQ+IBY~&)<_Axn(^CcFht7`jFdtu|J-OH&g^<(Yg5;Lu_E`?(btG8() z?MAg9kUWemdsk}{7wbK##rHYtrE7p01`X#zQZj#fc0y?ElcdvWav;}6WpsZnVPzYm zo+)}!q+gWL@n1XXMMJ6FiVJjr&&WUesZ&Fn6HbV~F|u z`bQMkgSxX0_Te&KlgW{GL$L9Q3g)w++q%uXGC85F#~d$8vaX#hGsW6U9vjCuY-yxi z*x91Rd|9#LPcy4KY^qx+4Nfx=LuCHVCB$=A#z6G0aqIkVC#mHyC*l^%wE|!%&^5!J zb3;ocK)E*Dej6qjK^E8|DzoL$E|~0*)4xmy=C<&Ou>Z+m)Zq6SCY(v@+*b3$4QYoM2; zV(6Qp8Z9w$96sQQlTGnQ5b)|FPG`oS8SVjS8x2yhG)Q~^H^Z{XG5|}tV$lZAOs__{ z|DU1z@Mg0O!vLNTu{DT2LlArKRwa^Hv4YrY?_Imv8i`Gf*tEo`T@*!^y?0fu_A^^r zZBcFM^7$8@^Pcm(=X&nzcR$Grc+ag$Zecr4GnrRb{+b4nG2Tz3Dm6(gipUhLTP2h; zh-1)i`KEvSJxFkV@GM~8?~(kw49$Wc!+sy8KJ`X^>5UBg+Fo7j*zp-R6J6G%D%?!^ z308h%wl^;I%6ocSv?GwI=*!PS9f$sXzwVij>3V4vo->lgRI}8M)Z^}axrwi))5IzP zj#-Pba{xIFjk?~_!c{{1axt_x_Y zH8_1(IFqib9|y?kedqt|y}wP5)lLC`kzi>!~1apeDEh&PV26{EM{^xE_ zUy;STF%>sfn4Wp;d&2XHfLB^I%6Pi^ocObx&x-|xzCRT-#jtPWN|ZLAp>qQ@`U0O{ zmd&o*$Q)yuKYmxlF9MXwPq~DBxVv^Z@3GaV(eJ0qMGyV1h|{czqu&Nd2-V6V$N`wA zrA1eCK;q|lj8UXv&bkoM;je%rwL40;xo7MA?Rn^D(JK$01XeRRt*Uo$4--2Cw;(qa zy+^1dZb$HCFa@D`#65P$To`EW@nrG8YQf2g_AT?>^~JA4&Gs9PMr0j6zrGmF(KeA6 zV-20T-*R-%ZKc?4$f^PQ()AqcZ@sn6X3YHLd7fl_Xr3RKSW1&1 z+@Hp7m?#WPM9{ejPYi$r^W$)hOYs)fH0*%rz7Vo_<7KI3!77AlkyNU{6K`eyTFPEv zE)16u*|OFxU?*!L<+UW$NBQVy$34<7McqvJF5s@40hP_|L?f@-;s%CqvGeu#>E;(U zmTGv)hqp$b@yC(Alck~?1K zT1gW|GTtb)@}Gxok81M1IsDo9-lEReE@dixb0BfTUv?PL!^A~hHvZ@RAcSVe z)G|l*c6RH>onQwBcO(nzL~8D9Zik$zwD{6g3cb6V2Oi?C7ZdIPHGp+-Su(yYge8X> zzTP6yz}l)(c*QZ>DH87pZZ@J)1(a08i+zy{<@?+ssfsVgVOgx(_3jxuYn&b+LorrN z;4`s3?qGWZ3W?LfK#4ow6m_smHub}p`#4B}ck%2xbq=`(+;-w@tVcwE6&L`praF|h zaz;9mw{y{gV&M;fC|P)dK5f?`>)p37l~*W%m>RJ>`~?{~X(%Y!uIu9=%xe)W^tyK` z)@l5-3`p0><42`?3SBZY3Rm4i-ihU@$);q&7~I>_t2Xh>sJt|d<~H{Qy%(sZ*++w5 z?dJB8?v8YXD-UG0BOlrH+S&$KIFTdR-eHQg_sGLIHpE!H)_BI*Sz;4#nr`jwo+(lc ztjR&zhbR57T(dIPu8ioRkotIp)1b7zi{{9{=2Om>qxAm#+GCiF$ze93 zv25SE=h_cO*&px7M@KTOPgd|djbNTRt}I=SZG`IrQBF%SH?;qO({F0GlBbnlihY`v z4;W_nYtDCMgvQW1okdarRvH+@qlYQx_)n5ZZeCk zJb2-=^U%L+-xUcA;HD&-w5*6`hD&fz)~jQEL`goef$M8QT-h3H@KPrcw#c1g_MK4u z-2Pm~W6+PCn&rCQ4J|cm2q_dJGSY7$2Wr)Ce5g|_e%yhCJgf0Zlh3hWDqlC}6lX=U z6<+b|-E$UY)wL3wu$mValI)Dbmuc*=d3gkB@Gvgcrrl?2lcat z*b{Nu6RvvV~nQ;v!;e5%*2g{Xj0Rqz!=iFVyE@;Wb#rN`4K=GL>uvBU-Ek5 zZl&;zSK#lscxsL#0GEM_Fm=U;T>A7iPhO7+QvYX!;HvSy&n_9>CS_1TTtLK}YRbFH z%E|h2NU2**3S}t;Ir&>l*_DWj9C#U+YF5e?g|(3WguyUU_`JqwZXT@$!|~=kCLXt^ zVc$-4T<_Vd z>K=AAxEKk#3m=*l<|x|j%~bbivt~=|c$maMGOL@a!29i()9rmW21n07t}GxMa06uK z=Q*VJVQg-8!#6m$R`vCHW%3d)|KWXdfE`uoAd_&4z1_%-4w@p9*xfu9$1UrSvxNs@ z67o0OZEHb#;E&Jz-66{H0bac=_x>vAZ}U}0*f4@NnrXAh~tmAWUtFr6>49Bqlrmv)IYgHiy}izB3@ zoT*J_UO~Y=@9#zGfAMK$Pxj!U>O36(F;IwwXA}Nfl4U;1ztt86k3t;TTP%b>kcAJG z?wTl;?Z(fqwn+-ZpMm%-4ffXO=^ur@7^zufI>I`=s|k1}+hSVWq&D$9uxOsf;=_GP zz6CO>&)2sv{Gg!VWQk6qS(FiT+u~MQEurK26cNMX!oYU zB^N7rn&W-PvyzHSYaVDA>ME9vRcgqeX4QW}VS*pH(`r4Z0kZDry7y!z`pgJ}W2Qva z3I{h`!i}hsJ)Vj4cE9sG_jjjt=v{DRXlINjTZqgyfItFW#;4UcXm74QSz1URg%&Ar z)ESzwscSaCgGMsfjr1JVr5oz`l&l|@u6BxNt?t$Z*R7Z`!jhh@7w49i<6zv1Jfz<( z7h`j-7-*{ z1dE5&vV_&1+V+>mOlQ#KmUW-{uH$nO_o=u`6TwmEw;O>9jmwYOzIzQXmS8@z@kH{t z@MC^t_^N;v?-+{#oeU*HsjNG~1wnItb_L4}6pl0qk?9Z8kaCZ@B4yyYoBLbaM>xy& z;#(m4KYwnn%Gm1T!>ia;w{#zRVo7QsKOap8t$FU3(J#RawwKe{JJb;>B^H&8Vw;Ii z8I&0KO5aLb`$MpNW8E;r%ESBQ$dogyo>{DeRDsj;4ifG+#vT3oitt_0M(1~E)ZrOCmTBT8 zG~{h)tFdCSY|NPUe-l2tqpI)p=>i^(m+9+&7fxbRW6S*%0~(fGg9>Bn;)kI)D!#Tk z>=7-p(g~^Jr~!MY-p^k4*-8QE@E#QIupIaRabTOG zVt&t)26vEc%N^gHS=zAWB74nv;c)ZRtKudP& z^7X_6L;BZfCc|Vrw_S03r5qNwGkrk>ba&$C9HMm2U{_7)Meu9o_OF`p zoh5vwc_WwWMe=b%^rresmdX8E{F$(R>%hyAyWp23>0;sb@cixnx&lQ0XhM&pO&}`E zH+43?$q==xK7!%~My=@>q^)EZ-o(g-q3d$|hf!_N>Ivoj9p7 zO8OQ}Gz*%5_6!=ueL&?@qtN&NoH2aEA!`w!l@W|SdNMI^LO%eA>|`IAp{KnwoGuRJ zN|kyG=%2^|2COcQdH%OHJV_wFL%p{W?{w@vHJVu{pDw_4;{~OCs1mzb+=&Ayj{#@& zU>9U7pLx_zMbM#w!_sbg_aO5n&hBYE_O)-y>uYEf8zfYQNaZ%G4nzzSMs9jAjp)h@doWqs3pg0cT|oKESNyYkQpO6 ze1FpgdM`F~^cH>-U^y-+nvYDm?;IG~p7lm5`;E~J@%Ge3BZpWTsr9R$U(HJ1y*->$ zJlln)=a{fLzny_UYTD;{cy_>|Sn=koBa7M9?7#CuIw<+4{wq%4o|V{Qxx z;zPh;nIe3=WQv3wzMl+`kym=S|wrE`GL%fgE@;#iOiXYCIajerJq*8Fj;8 z>zT^ovmU$B6FiNpkE{rq7p|=w&{JTwyYS3|lV+hJGYn@qVR>6pb#q|5z4uIXRC{_47$xF}xa-EJhQN zZizo^)Z#Fz-I%yY4o#Ij8y|6PUr!_=zl*A*IqK0I-W}N&9Gg!ZCSwj*jE^znD~<*n zC$sz=*7uiYWYKE-j#n(ONNy*n&q%*5U9t}A4svX)UwWKOo++8?guk}2V{$yT{!b+t z+H58reIv7O5gLQ$+Gpho02qdk4Dsq)%B5@|o8O4N9oF$&Y)^#Sri!BlPs3@Pj%jam z4!;is@ibdH)QLH;ajLRsIOdLF$pGw1t-isG2eYB4HD}*oNmeGoy_B#8+I5xk`s&H) zzFerGUgY9dy$zAEGu(mWp0fx8I7^> zNcghd3XdV$>gFI)6YUU3Fdh9bo5oMjRK~uEC7(%9TSTF(@%J^?u=&9h@txw;2&F`9 z#0HeY3`jYfjllp7H#a`9V2=OJJy@zOFQ@IMEB(W3Uxif5QG(sf#8p(Rh2zuLXhH-n z0JdTMAc+62*pUxAUN92L1z#-B>2DfYgX8nW(vdbbd6fHHhqFhY6BL3TDU`<+HJ$yq zpf{6E4QWG8wTbUltTp=5ajpN5QJ3V5aujYvj_-%Fx!33zy5gj=l+e}oh6>rl4i6Dt`VxYiW(cAW_y77*cbRh{0=aF!J%V3wEe~M5?_lr>knhNfbgh!}n#-kaTff*5I50lLSv?QBR&>rWnfJGtwUvm77dog5 z9rxjf)Ee_Dua>1SO#^x4_%p)?#$8r?9ssB8p97x{KxgL%(REBOI>3V#yQP?~TO8v(d!^MbVGB zZk;>}$M+MlOur9i=WrnMUqJld(>Y{7g2^BBDxjyeU6wH_Ro#NbY?zn8#AKsB-fAxC z`(aF@229s$4EIhHUs`(lnUsDdIb-zu%)CdK`6G5zFsmIcM=7f$9rl8)MvF?5K9Aeb zB7m?12jWA#(jg=Lhf!wVeE$6K@ld|%q3o)p#*5?@sBPP-$Qghoc=CjxsBgy8bAt?1 zBW-`j-EL;L)d`tZXG=g+zStjKQA+I!eIK&U!!p#G*_>C>x?S4wyR2goK(h|&?C5@L z!uVLBNyY-9)`B1J&Jr+0bhotcnXZZgmh>%S&OcKG6&1xpqjqj%SFS0tZB?K}Qs^{` z`^#d?Le+q#)@G_2^wCd(xeY71mx2a%q>ypo-&3~be{6SBCy2N7DgoughUNo?DuvVI zY5Pr2@PJRK9-OWKXj@e08+1vH)d=}(d`uGKebz2C#ib@gyg&#fzYpX$n|38wen@lW;7LiJ)zh?TXG{G%keQ^ zbfXG;SA5)8w|TkA`n=Dx6xu*|Y?u*L%WM60_L;;*{)&p$w?|WTe))v%KgGv;W$Lx) zT#)5&5rmD5T-OWIr>V*(8ZA_`kOg!?}VhpL~;(dq4#Qz;!Q|rCf?5x7T$c zZwh>i#517)YO1(2HIw0ak4!R?!8~A5BM}b8p%Tzgf}igQfJt>aXNdXQAq0KJ-_;w6 z78yWuP-9s=q15OJ^neUgyhv9W)>UkXF(Lq?Pl!_i=re}yE}%r@K}zF%%JA9(;j(5= z1M15)d{6?GhtvrtXg9q0HH~U~x%hGF;!BNeu?L&JN>yAQhuT|c2PgG1lxIlctkkQsYi#N=C>dy;3>oN^TP+$XTa9ykK^#@86FHaAP!O|< z0=uHo40?3nG*xlGGvzvP;Ygf zR6a3_TCbfOko`MkXiTm4iY*PnptG_GhZqR!0=SbKm_DI)vKihkKhDgMduD9pRwS-4 zdzE@pFF2hBRJmD`!7M!V;v1gxBIw$eB~Ovbq6IN)vFds>lX09MiZLO!D!p!KcW+f4^XDPY8751{w?!eikfN7=9WW(-|>- z`O@F|k@l|o{*elJpRbZUjd|5ltH;M*#QFS`4<*ZX7nQSX_VEn0Lcx(6Qy=qn)89^p z)E3~GJ|N77cuiZ|zeuDWWo#c2PY^L%Y!_>{AVHld<(me11Rx zuAM;rL?K-=Rg8{){09Bw+Ux$e{h$;)eG&*khdZFI>Y*q^H9CWDG=0gmr@Yo z!SVVQpFaMZs0K%aeka{x#ij>bkhOtBy^l3tH$~#=2tAs~&iuBPttkEHs98yD;xPz;|P01cfQ(;~+NNhKj-5g^@dv zEGTPj;+Hsn(_?cmayTi+B(ut@G`0G>!RtyywAdXKyFDBEJ+C#A@je)FgNhs}`&V*G zNx?!llFGa!gy++3A4Nb!CAGPl_@|1t?aIerc+6Z?G1mV;h3KXc1L`w|o9$A}o>J_U z6}Ed1_*bt4DnuKF@6|Y;mcDu3Evyf!f+J-ria4h^2k*WeanzJ8?q}glxKFj`-OCGQ zu70Jr(5&wcd&Q%VUDmF<@4@g%@;?ZtLVTl=3xJ86idsV?{%y#^D4tt>F=2)6AF@)e zsvF=qfdGDhxxVT(-*1L*iUz4o)7S!!jxK%oi@hs;?b>OhjwUbIt}q?E!C2}H1q_z_pdSbt%2=8WSH^3CGXM+qMnV9$$ ziQBts3yQx2cq$;dGyr`ElRusvVB|3>ROJcec@p6y^k*7=@rN=4HpZ+>=8+L>Rs1CBE~RP5^sqv< zl)4MKU|%y!$ByDYko3r30T-%j$bjW&@Exs&&2~9G8G`D2n^r>;@BNz&3prTEY9E8- z%BK**%A4yC7jQnCoMnvLlWGETjm&0BXn{VDbP2mbDk3$1v8H}g6)X|BeD$)4KV~lT zc)LhGxtx#lLvrLh5q$5NUQ2(ioSQ|4NsWsda>6T%mSdT3!f*`KLYHjOR{Glh1mW-e ztMn=_t+6@&T7EMnDLyM8Ck$jLlv`?AIPEDNuux}hD`}Kb<{=Yxs-M4YwPeO@au;3+ zk_a2_Y1Ci56fj`20KDn8FBnv_KYB-a@!?$MmsE|+89Zi0y#qnb{!`Wk z$Z)2Lu_!T%8*NMs4zGV%Emj&jv!0lwV`KX7ptDwXNoix!H}`ItT-+`7MKEfuR-CdI65rN&?2NV#IQEiWah9h2U-b@Ws`k?m-6HXL7Q$f}B^ z7??vTIi$jP5%yI?3)!Hor(KZ{kouDkOQ=el=o^2v9l#1xor)?Vn+D&c#$Rl4udC19 zW6=jg91jfi`-bv9zjxf0$&L6_V#&68Uv2`SbS>ox4F`|BLGCd3F7{XQQN2L3%i@0a z!>&E52XK!wFPV(1>1uQz;S>Dh(G`fdbL?NESFS%l$tk+MBX9#YvFk)X{<1QdFc-)W zE1-{8C5J==JC2mL+1vivjGqdYhkSj|43goot$i%5D}(sxt5GOil`}XQNtGlnlYl*R zFr{(?&0K#UI2dnyi`QHwXzvbU=>6emIV_zGs+x*NuEv(6`$P2ZkDVk(%C3eRG4JrG zFS$ENs?Ed0mw2dZZccLaq5VGP?P8GpV#rIwEj77bCDvVia!RaQ_T&AFApp0_^nC?} zsvH?k7Y2>ZLziUjx_AaH@L}q_lG^CpXpSfqi2e>lXJ3?lQG`BEm!2H2lA8R5n?bo* zta$j~2Lbf8?gLyG2DNvC)=6%F+c|Y*+dvuRot4)OMBnAP6$z&qV6*ZfiEQ$c`NT(0 zJ!V!2%xHTMo59eDi>O3MR&Kbd54MV?DC8Oz$s&=i){H8Rlhmh5VcHgh?1A(s%m&41 z!|^~*tVl8MB^MtLz5j@5TzB25pJuWWG+Dg@w%Djt{1cQ+jf>}DMU^vou#d;TvZq*q zc4YEIhE~$-5T*{DBT4`|dnEu|pjUhF`lE0U}5&3f9))%AqvJu`$rj_Cbb= zF<`diNMX#|{8j{+zg$ovvju*E6uU%6JDKm5bn_R!>-f6}!Cf5};l z>m7<(`D0|d%w4#!1Pc=t^S**q03|x0qORFE%-=T;*ClLB{zt=V_EBW2UH7Zr%VcG# z&dl^*(_$wwOcN0IQg`?Rb98SyusFU+BN3fXnN8gn%c?$5gKC6%i47dit%+VI>$16s z=#X_;o5Os;Ajz=p1zU9a=`7$cNNEd)xLwV5?K{OP00!l}!bx(91EUN&QX4W0hYMZ^moln9^VJXIl%k{YSTGU6XIa zzAq)aFBci0>Y-{KY_4*t^Bc1~G&glV#7xR~ihL5i5i%zg>L;qb=;DIVNRqSJn2oB; zrhCgEd3Q%?iDSAmQ0%G8Ons2^>P4n#+bp256?pP`PAZvk+9ksg%al8zQ9l%gU5tuN zmQ13=i6iO3IQqK0j>biO*HntL5mV+8=4>7?7%$qNCyMe9$kab}n?Hiy<6z2_dMz%d zCdwd!WLj}$a_km68kKj?=)~RoedZM;2k&*9`k5*pnki%Yed!5B*dU`&=cBJ;jf>+f z3-CncXOFi~yF#hLg4jxeXY=Jcw7^g(MW=3;%g~KU>7Hn6uIH?El;o$+s!Zul70(M7+voJW$VOV@)R`qVRzLw9!U zou}^tAW1*cM9b@k0W84Pi+m+8+)q}GAI3#>V0QaVk+O!;JwSzuNev1{Dg6{>tlx7q zj~bI1w>^G!U9J9|lsnB$6XSd;uyG-5_mh$!IqN;y(T6H|QzY4|-V-e@Y2Kk^zL+xD z%&7Mso$q!-y84zTm1o`flvI)zN{?x$z=pyZ`*0Z`4!h2YV-@Kn&a>8>K(cMoP>L0_ zUx~fZyAZ$y3&wY4;3V zO$vUF;U>p45&;5Z%A@S^_KGmQmXR9W0_PJq8Tj=E4`pT-^QIajHQ&(P46cIU*lZ8> zZsC+Hi>RJT=CunKp4Tl*CkB?vs;?Xe)Fdl;pJw^!lB{||4b8+9R}(Ke&WeEVHZia5 zT~uv9huW}7sZeb?!~1W)PwJ`HvsIU>6x;!P3e6Ufb5uY$ZUiax)b4T@IjsBG(RD~AHlr$k&KuOi zrna(5(Vz}WU8ecQK0%%ij*MhC{|2wgEDBWL1(-;3Ghb^=otlnfdD~1Z-h>~Pif%AH zQcT9)IIZtVowFMK7fGdlBH|LW+Co#Kq!ejjgZ|RNCNr>@Ruv6#XyItoM`F~qhNuFti3TXy)5>}1+SPfBmoMOJ79{X;HYPU;OP386Q z>~0z_Vx57Kw7aR&g0TZSpZmL|DQd#w{G2e#9QK$|%Y|WWGwpF1-VyfTdNS4Iqw0|c zt1a2`qn2xCRIoAIi`g;|#yzuG)&9#RiiHA#J*e2qindr^Y&keeW#9YG`do}mJX^Q< z_OzzQBgd}IY1`a^4}a>xI#}hwv|Wp|7g7A4erGkNRca?cpE9Ifjx9Cq% z^q^G0?8ysWmB@60$2Qp@S2@yHok)HC4h?YF&EVg82=QJB>fV*A%+&n3$hMhC`zjhx zB4amzaz#G+hQZgS)q3*ogcH!)pd@?a3+x-jG&8=PjP9^?q`<)Aiz{nXK3h-ojK?I#<&mC`}^m4ya?RF~zU8s_*45%uF zXCB}7-PL)?!K3DQfAWmx#`{#24e;QU$;6{igCBC%{<<%q_&?TPZ05gYdZ(GF1)c<0 zoh!X4BJ#!q=v+S4>?no%cm%{$nq!%+^S5eg*5xNccc;tI)%l0` zz61k2p~-IU@^tP~{~?+sG13(h!Pb3r*ZK?+RL&v7wmjUbUim<34}$_l^JJ?GHSx)i zVz)}`rbsUN<-u`9_py6|dWrl8q18>7Wqkf!m&)NmSvMA5gpaPJNr@6G_k6=E09&~( zGaN9;o(dGEXAv3k?L0t&&{x2k#hs1wO-fnLBq?Qj>x)|R6x8Rmn-icC?<=O}Y`Xrh zYjyJP&}e(8qSk+}Ph(#)1F1?<2Z2hb5}ToRe&_Fa;gPf`pKRZA-Ah-!512%?L7g@K3G*T+Fx zK+u+wfOua>NuebyiKHRA*>*AoMhR1QXfb)D3!kXZ;=HEz=mBnb-M4b0;c2Q-T3)beA?z6B`81SxiQG_AFrNE!(X4h*!EN-j@Z***b7}7QaE# zijQ->;&#Z)P2(<2J^pY{4{x*YSPF~v@eZTOh1%U$TxP$cAqmR|FszVXQNCe%S0AP) z#@YpY{H@`pRAZ0WYcx#KxN}nm)()BKF%o6pJPGBK8(J{n@t-!L6wcZXlHM@+;jT(hm? zRADYRq$7bputper*qPU%i?A$L7!up_{!Q z7$g9FQHAU-du7p+UYb`?>4i~5G`o51$7u&RE%fp1&*gl{F6wM>gNjwms zi#3;d#l2rWjy;0#gj#Tor*0iMJo{H&gc!#!E4_70Uvsr{ou=K>;P-`J&0vH+o33~N zv>TBXzt|nScJA1I`xWH(^upUhLzX7bQmCdA7|0JT`>AyMhQ&`#0lwSrFV72!-!!+- z2S&6N88TdCKvxBji67MZ?}2C0OW-OD5QQt!DsgO5wk+;vy9`W*tQY}TV{Vv>hrXCw zd8mWzoktQvA@S{Q&?a-tEMcoEzl%PO9#xfSh0r-RK|uMRL1-}xrNq5`Z@7}KYO$lLF?ROLyJzgOrn^^ zNf8qs_Q(dp(>Bj|AlZPc=fo1 zG7S|fBKnFK)S-AnP|ZArqtlH~(Qu@P+|DhChDyDnn@24V6d7i69=c%Oz<+cQW0^f! z#SFD|#*w)eiU^BT^w=mj%_4d$)D^h^mg$$~}IO=6!7$f`rV;AjSdL^D64(k%L{?;9hCRCN}Mwjgio6flzDy*G46ALGexb6I4tgeSIgSN8sXg z4|auBbKVifPv88V3Pd=kk82V72QoG~8NC%ufw$93+;;vMSv{IxRL3$H-Jpm(A6haJ zpIrBJNZYl%5qs>@2zy^>dps)3{G?}^iCeNep7;LbD~b8%fu0>~)*_Y>G6x(|5PjP{gq8G>L{$^5Jd4`{QkXgqcw=5T0n@5~b-tprO4?kVe*3d11& z7ozz&%}!%-lvC3H#WaKVAC;9kE9c2hcyQ!kOJo z0$8^f`4n5->_Erp81iD(4cmNu$aOT3*Jtw%AMH6+>$`3p?ukbyw!Z#bqR6?3oT5f*sxL9Et z2Q-a;&=~DkO7XpNgJ;#j0F>8}_3>9VXN4WMyrRv05676BDw`Z}v(_Y)P1SxrQM|j2 z9-=7z!hQvfwFQbyh)vX4JZ5r>RHiX4297Fmq+#;Y-LrB6Ro&L|o=?sL<#Gn@O%l4_ z9C`UC%f|&p`bQ6LV#`Q$c~tJ72kBh$+TU}-TgoP<_SBknY`T`^(a)P5+agslVq2|+ z$5U30Z`Z$lAuL5sKwT`o8}93?b=KYXfY9Zy_KS>Ily<$nareW@$a9|eesxU_lB4Vmm{xqoK?m%Ug{By=5^HkC&jcOR^z7)o{UbzJ`T@G zGXfqOwu>yIPdNUtx+cV5-4(V!NaAdNRE~zFTh+V05dG!4xXkdMKxzE|tCvO64tkjG zTO0OBY$Y43SNh~0mZ4s~7FW6iKL_odD)_M?162RcA?O1iagUIVhzgtnAaxP!LKux2 zL@z&KOj0rlX|(d|7o(kNXgSJOdNV=K&y5NE^RBNL!h*|8Y0JC9&Ct6}KARQ9u&Gt- z5!oE+Z87G>nJT6FCPu^6I}?*27_C!F?RGoPy?^+cL8D>JN!vwz-X5Xwb2VkU~k6jgQFzD6+ zp_w=M;5T@RBKULLwKVp`fEBBIFv~D~VFnm>HfYn)>G@Jo>n4p&XsD`*y3LD~ za6M5w@aD}zlr0&Pfya6c(Ln=ixyr;M%5&|qEjd)47+sWl+C5LTxuGFGgWWQwy~LqWhR}-pH#@dXh5w}}N*VxLa9R=|9Ia+{1R5z8dlNwm-z3;HcM`~770tRjt6RzI3f z04fBsylN`cKdh^Z}UDLjx-PYeJHh z6j`2+sUJy#d8jQ4&y-?cSpe|(l=!y)x|G7A$$faG}S8%9xEYG_G%XOP{@an3AIp7zm(6F z>B34tOI-rLO9-7sF=+|&bUz$ilKHgD;nrSFlxJqS6{2V&oL(Wi=BABG3VZXnFw|C5 zFxI9aJPXTZ+g%;z^UGjSqt0rpHoLm^$+ueTcAEf(Z0k`CJ^a-Xc2MkIggr3g{#I1U zv6t?{Qt2_BHmZBY5f9JyBc+N7yUSL|Y7F_moP`rH4hliv-t%N?njr_=Sax|}lI+_Y z(6A>-3%$O(G=PGM##9(6b3kjmt77u}>JldPNkKv-7t|gi{7(^b{F?V;8$*;Yig^$f zTOwb&iFab9=}O@1sAPDY6L(>Ka?80_=t7^NBc+fL&v@t}GB_6dwohaPg;rS>N~D9P z*IcuMsF=5T(O0tPZMyyuLB`c#_`|B0EsPPgaGWn%Pm_F^V1kh%X=>sKKlvbqq6lA6 zSx`Pi+oJ`d@7PZhzsd%-F(FBUg*Xv*0G=*7={8Vo^HOQoenLT7q*zJS;zRlSCB~}y zVNMnu4~{D;CyXDJa6jRuNr>bvv4@nb@Q%L5QD>AL!y33g;%1j5?-BA04V-J!+4I5t zOv2aI)+H?%p`$!da8H$}LtZHxy;X6VlnA8O8{qVcA5J~ubY2~X(_U?m}%&8QARryP#)rUst#(G5R@k6k% z!ci66vfn4Aoql-?EMgQY08|%(`VZGBko&L^ZyOy{ih@k`tpidbV%ALpRHAy%TvMo?IwaT5W$kJ`l~j)a=c@1MZB*MXrNI+WhV35yI?cY{|(IJPzQa zTmnK8+&-d1D_Keo=xFv$2y=bZU^tPPpcALHu(N?*YTF90<<{~EvUV12h9NmEpF*r>H0E*1}7*t zFVvqB^F0J--T0Y?`J|_9O$Y3ZEqW^sO0RFrzn4^KZD-hj#?o}u67aP9X{4}F4f6Tb z{Eb&EVGn0N#Z&Y-#P?z#aiXC#e*S%6|L%U(dw&y ztXie7ptR}=f2(C(!7rtw9527&^}3t9T*w6JoGP1}S`Tmks*N|QwFxb;{3U74Te_rS zO9zJS&^n1q+yh?CySO_L zmf_y??UcY4FaPJ{?iGxJ85jx^rN5pRNVx<%`=^dzLNPz%azj*3pBZQXg>2!;)1CCZ z%?YPHSLaDWOojrh8$5Q}LQc0TY>su_FhXIy6{{l7qey-j-MyOLfkRQfe*&p}8WnS_dW)BpcPZ1^7=RHmZV<^p8z0oY4 znWy3r*BNAzm~CbM%?pk;d{GX(5f7Hz? z_RqH4jWX9H82Oz(z0`%pe^zC{eT%s&U5;T3$`=qapu(Y8`0w4iqnq1WuD|wW$fV(| zni)!<^vTRyG*_`oG$#}~x;6bA*%a&z?J?ny!%5fh1HYEa?=mSMW{{B?*3K)lw~V{F zs1W~3%&;c!*u4PfnS24xcg}0fl74?6^6lRZnpe?di}86Dx?V}K*nJSY8$Vj_=k5H6 zl0oaELUDzbwXq68RapCB%8zL%t~gOwrI&`_ndH8U1;{0vAs)hSgX-(%`}E|Nb-M+F zqb{rC5kw5~OqeZ0wTi}{qwX?dv>tu7F}}R``+541W?cJWcGuwrVgu^7WwS(DpPN0@ z+d6!Am}LihQA(A)JC*gM^l)*CFt1(rRr+}|hke{a-CI-W_fIoFj5P@h?46`uC2o}) zB0>LRAc|Fid8d5s1v)&pmjXT*=KziK|M2K)O8;=(9GqXau(=xKT}Tp z2XUR1xf@ar6x3O25szx@^uHaL6d=2HPjo(j%8WcSh53?C=4`gBfX@Qjp6>iT=4tb* zFb;we_2litQlJT}VWazm9bqbj2qk4@(7aPn1>D%5KQ7QB1!`(ACdyu>i^@$jO=8#dbo)onT@Or zj3Q~ECmDyVNRc5`rj&s;1i6s9i8CZkp)y@j^%yl~)>d1!W~CYRYMC+{3~(sZqD=`h zZ4GQGY0^LfBqt#zaQQGoNd$B2`aMZEFp|C}3(F;Fcdmf|ixZm!^7vtb$cyndR-9R` z;>1ZPx3udS2;R@0QI`Jf*fQkDfq@)OT-os4*MR4Gj%b>6UIcdk9uA$D@Mr^thtK9L z8}VY;ehpN9t~q*Khg&vj(S)7gmV^%Xwv6C8Z<6l@q8KPo{d~pqCDXH{E;;^um3V+z##~ruCf1u5MZ(W9#XI*F8>7NWWN2N!%sjB>61=1`Nj}s zln@PAWfWFST!j@?W?97mR%*eCAe?4&h(@VoG?5@ySV=L&ObF5>3xkG)f}r!XDCi+g zcKoTyQ8KE&jvz1XsG15GOhBN@lx!BODBrUWU z~%>k2d(eRX2%6%dE-Eyji}@6Y@F67%ERdjz2MBk= z_eyGzx(UK9n4lmYnxfn2{>|7S`%o5^pdvveiKH{x@M#rQ)LCU6nS>Il9ie#kd8U|j zWFtq1#zE77A0LXu$b^b42oh}x8ii&TX_g73t+p1rr&et0NNcce>WFLu1|q0wHM@H# zQi3Yl(WZ^43=8Z$Ga@t3xmz@#X$%Q7T-tqCI zaB9PZE}qJIrklnF{d3VnCw=s&+92cO4*$|>im0|K+(ZmO4YKSn(k$B-rM+CEjM~xa z8ZG$VX?qMa#)MxifZ#EEO|~FeJ^_FsW5{Iyf|Vp> z0{YlPs9*pS^3aD2n~xGucpF}^OoPAzz_&c)BoZCUOa@Q|6kU`hRH4dDF}l=_M$w{C zWFiX@DUy&Jk_D*UO9Huxi&3C7qyH?m5hr< z^O)E=qJXM}%wq~miJ3Wx$=s6?1PC)e1eE4~z)78PN42@;6fop?P(t1Y5#Pe@o|Y52ofToQ0gZ)yV>We611I71xBC56sAaYCQ;DN zAu2V`LLBm=eWGj(>=0Y$CYco-eQifv%Lv(|8WvKB0#Iq|TS5$SBm=nfAwDZxM-s=5 zvF?Z!WR2Tc^#-MOkc5DHfn-FXQn$n%Zmm8U1yRnrBgz@243BGt8#c8$T17P~GrdYi z5Q~+l+EpWLZ7gIT>&jM?feRa$!s^sgf8VQ29sL90EdXh zk|DKX8{5Bp^LgD9%b~ zx3$b62w|L)-GCj&yZ_nUo}qZf+wGPF2@!A;Xp{D~_Jk)q!FdP-?xszRgV!$=j9&X-Fxb%~xaD^zl;4lMJ$dv{-Whw<7<3We26|g*u33ft)PEAN%wCfk} zLd>je5fiz{egCG1EKDvX;@8vUL?))GNnY)#W|{j*05}Cj>S#_{V4$YXep0dpGK}JJ zL~)2Dv|vvAPLRsNr1Cs1IMRDQt0We$bz%~aZY-j>WMOIMIS*dI zg`~29#jJ7bT*4n)@SD&LCz`lwR=eXpD89dJZFU8`|KY1BEGY!lCU+ zz>~aYH$h5{BX!aw*bJ}zEWzTCbnbv9;Njl8~r)fu|;n zi(`wpIRh9Q!l8`8m@A}@1k1K9bck&8!MKPvjiR=aC^ijRi4%;ni2I3_iXv4=2Y9Qg zIHakJcpQ}rEmGJBvT~6V83?tB0Ktib??8w&2|auv2ne9QP2h>O@|>>lnyI)et#}+A zqcQ`K1YC27T0pC>;kd3zIL`q^sG6+B$(AC~g1CAcnJBBU;)qWI3Ktp~9Qh%ImQ730B-AOJhYFd5xIJJPa^;gUP_Ar0>dFSrXXW*VNtP!4;1415HZ z+VGueQH~^(t#3LG)YGoh<3{n4i{^Nz+Hwp5IvMkt8q`{eIoSd<$)Y`ch;{ghIopIS zU?(^6s*1R>x6zOyEI$64p}62EAo>**8UmMehy|0$|FFGnd&!dUw)x0CXCa~gB8UJW zyDuD=xcHWk*$b(BB^mjNG021*;VD|ch;g6=02GBEY5$t`Fo<}8 zw1s3fZh{CVlnX7`gp3HZ{6jw}VI%e96OgFGBaDxvnGrz>6aLdbxZJ;wu#&*!zx2DQ zDA0`eIEh_pk3`~#DaxA!Jd{tOxrgAzrHDXU0U`{vz|9mDUUUc!r~(ftgSX%z%OVOf z7)zBvLvX3VP;<>`63QG5uMTsT>QX^VgDs-mjFgOklh~j0>WebeC;|$xad|c0(-5zk zOi9VhhuBJ5NRbq|F($gP6Zr}2G|7CCpWTd29V!V0shDju056P-oHPLQl(x7aPXx&} zEEJINjEfBmnSk-H?o=5{D~X8HgmgQbacH+#cteK^nx5$ypBMw3>Hm_LOSn-`J~vUD zEJz517_I*}$N5MC36O$w@f^7Uny8W+(P0H7iGmy(#6rQuOxZ-P=tQOJnvVM%uYkn4 z@gV!4i1SF8D7dmkWH>{T#aOY(sU#Yxz`4L0C5Q1jUL?AqQ_>_Yol*+1fgS)pI(=dJ0 zyL(gDV!O2KFzDeHt;?V2(Vs!Bv<^bOXdygGYnFcjAXnR`Zjl0A+a-^jx%h~g1e!TY z%@@J(s#S}~`8c=x4Ata_ivKl-1H|lEIQ?wUotK0U4Kg(WlcIwvmmCLivt}I4_0_ zzxZO=-3u4^e24)c&x-28Um*bZ6cF-6&s7yLY>W?5K>sxA@G9bri~Z3cM2s?r$T5cy zhv#z$nqu2|^9Z+VXZv&9ZHL7Q<%Lk*CECG?JZGMR~^kGg0NtPw_!$WBN|i1QeO zLU|mUD%_5P++aM$$)$;7)Cw|l6DVkpO*n~)m@X~In@3EfsWcI?%Bz+lh?{eRTP%e# z@HtLU3SgAoc1SE@q+P~pL}SF=W7OS@c%@jX*eD%MT6>%=uu=vpkKj1N#dxm@`Yz-^ z$mT$ffs|f^oDT0A7wGNByvs-Ix;u6RuG_Je)HoJVvrQHxAbYG{=BeJ5*{$C*Nc{?y zlggihR9Pe93`W(9<)zu2g{H=f5BuE^lm!CW^ZzuMG!T}ZsHU~m_(-U@kbqrPz_{oZ z3Fg7$Ygr{p${*q2vt21kX(i6&Og6KLfmj8s93(V}6AAE@(W<8ifSN3T1hrX9DeTrr zf{A!D68m`2C>VwI&;po{qj=>@!JJnjmZKpaOfcI^esPF3Q@>U$iP3$DLyHlds1VGo z5fP5qRg#eyxmbcI14Z+!T2Y!a=0VmFu?$vIwPRxi7Rr~sLD^J|2(S+=4UBVxJUGU$ zzroM@Dq4s{f+Sc8LOx5PJ=$c-S=u}z3x42en%Zh(Pite(@}!SQE(tD#+D#q+EL0(^ zl@K2q%5K$(A|xRF1+Th5Wyvtke0qqay#K0WO@#o3H?bkmw)I4|k1 zGk|emg^d^m4Y;p{D7WDwl(ZRxjp)(CTUifQne)O??X+c^3dI=B=1+{=PaL{=yDxwf zCN~irf>_I*NE}%N3Nks7TJti@2`nrYVfyz@H+LGO+l3nKPF#4 zjz^P@jh}ptRl6VN`P9SfpNV#@cM{vvvk$~Oya7a6WAijJN@Q?ZW$-fUlMJt)Zar3c zhz5B<34`kRm`PY&p)aKBSB;NV4gV1OAR(o8h!cH?pj_l^IcfjBm##7Zb>rZNh#~_p z)-CH|3vA0)Xv!5y5sbJow%n09iGcKQiSIa%c#0Z*%7V3Qg;RQ>u5yWh(E{QFYAkC@ z{fk%0hF3SL*L%He|NA3QiLiQ+0xmEikjxs4u;HhYGZ(oOAr}-$FmO%23xbHK}EJ%IYw@5nb{>W zUzPpi)y%K4j;2uf;5hz4tqnK)ngRpUdhGohVHn&xdgDr+x1f(hvc7YH%6Y z9^5b3j4)@>4nX1HOjtf~aQ|zy9S5L`+qYHl1ZQw4D~bf9l+O8yb@HarYY$-~h$2%e zMnYFtp5mE$(aPoK5%*>hS2$6$Toaek`wT+u+zCg-PR0>fIb#w{p%MxlO-aeQ+2vi2 zsNLSR-5xK-V3gZevRHyx#%3geoj4bELd(54XzmeT(@0+Hy-oYMVZ{?}?-fH<2=+*9mAHn?*(?%?u_raI1o#3A&!akrGDfHMlF3+HtNXUshEADh6S^mXvpv0x8IhkrnEM zKm>hikCm{sE9Pvs0j~+g^;EHJzr@$U?7z88Vr}PkC0?X5yU}I2h%_Q?9U<*Qa|Ia@ ztTK3Q#Y)E6mTfEM0uH!Xhl$cynUM5?P-h~iR^E{Eb>rsd_xqSZKAuf}m+pcOvD%t* z=QenQ{}E~T?t=%_PqSd5OsGwtZ(3EbnEaJVzc!A4h^>BVj}m1X8s&U_mSK79@Pj;3 z?eA>aC4xxxY&e?&k9E8qP+YzWx9ypl>UjkxP@m99br9w=p%f;u95`eJGWgiOF_J-~ z;6z|%MQmJ^OTrA-qB67 zik@hQ9v}80bM%SFVj=U5u4u@w>Cv}ojDGyn&wRa;p2A3iK&5=ur=RC2JnNxpL|r`E zU%W+?X6sdD!9e80pBlS_f=~zr;S^+uYNvRT2R&~_ui07PH${0 zi3Qkd^d1nWa2P3wov$@64qMj zlBLU*FlV-sSuFi>I(2`&-GXd2_OqJaby zQ6fgnIB{c&iW^Uc{ID`+$(k>3t{8-KX3ms5N48x0G-}bN5p)i1+BNLRt}DhKt-3bi z%BNYUwp|*)!;GQ~Kxm9fR3-z!dq3p8JMwbn%%d~!JteY$>b(a<9-^HhgNoi8k2k=* zG5`1TjTHolEF}Q|_!Omdg)Uom)7SYY1Nk0YlK}u~B1Uo)g%L_B>4*{vEA4<~fP?Ko z*ouS^PFNv@7iwr>ggmLDjx0tA^bkU9jKT^#3$en+DipTDPA%=ULCP4(NflfchZz8g z0XK3K2}cz*6-gG271g1GH6&>lxSlp;Z^DXc4%z0WYS;N@+=i?$>B+8oTdt)qCOT!fW}fSZ}KuL+O)bQjHxD>_#X-YTLwT< zV5mZV+7OsHl)wyC2to`D(v)J@K^eLzLN#RI4Y#Dj8aj!G4w_pD%*-RXB}qJrtXqpbWU;(u ztW9pKlbOt9AVK*^$we{%mn;_OyyZt*p>kHk>Z2y*xJk^_t2bOE1At5;hNg@xauafh z(7N8KMB1HiS!PC{| zDgwkLya_2dq03FdR??*S#3y6hDN&5Vld=i5rzDlhD7Ih{B)qL68QDT%fS8q`dL>U{ zv4h^Yf;WtEHE@8Fi2+#6q`~6cH1_EKMegG{K!!bS1coNJDo~@GZl-=Uapk_qMtf zE^oav00vBN00R)fa~D7{>F(12Q{Y0pQcJm}QskMT!%VXtqA}M&#$MbCZ{H4%kw{F03re7fCdjafE%1zhb#sUt zT9IS2Nbyfq%o2qH1>_kHxln`pF^Jt@01gvb5$V|B{RR5_9I1(dFC{e6c1)x(84{9oDpHS%IETA`+;Se7 zf&k!*S2@vKz-h3_TJF@-o8^3`ISm%iTkl%e4`V>D(MeBX6C2m^#Pv9bFaTwnX9(Q5nPHlYSpf)=N^z|&Tj zPHlmHPNB%ohI$rP;0>!=>04J*&TyECwf_u-TU-fjK!z4T1VC932}_BW&=NK#Y2pRe zVn+u_LlZqTteb0039EF#R%c{`jq6_%o0zIKJ?j2RI&)U?kTFScqL+?fV{Bni+e|Cl z`Ym2XifEt4d~9T_eLM81hcLu&r##r}jrj6DzTKiGxTm>$!JJFI$hh{!iP0`(g&w-f zyjhrP0C+!QK*~%Un;3$0==d?<pFyAj*57vt zAO>2J>A(^P5=+wE%AEO8K%vs3wE|VN0Yn4`a$udo8GtB2L3==mMMyytAx3z$LOo~! zYiwC*Ov~Fy;F#shmz~mSyqNp=2RKy(IL)2*C=78G3>HRVYCI1=Jp`;&Tm6wre3+Vw z`9_-|9p_Mo=A4#5jax&J+e2hRC>Ve$fWjP#0x4M3%B@^MaFkIfL`4k+1RVqh4HZxX zB2fXA#0AG?Er;2G#ZfSvP5*h#PC;BEQru=yoYq-fBKlh;YMe_D1gDG%r|?EYe1%IW z%HHgu%C+Ky7(i8(0Tp=B;XFhOG){pK2$$WC{+u8hBHGizj%)B0V+B@Y!CBG8QEC|D z8JeLmKI2_69imC&G2RO`z8^4Y9b#yfyF7#h%#GUghN*>`+P&HAV51kJ2W-Wi^{59G zHU_~kO#1v*`GAjafyWh+4?dYwI9U&PpwDbo3>ON(0%X_DxmIa_o}hgfFWrj0z!5MK zVP&Wvrua`Lgn=A}LnwekCS(ICqzHc9mwnZjNLI)yjKYWXm&JJ>6JZcTFcFAxi4WDy zh{Z@zaAQUh8@|9Oh{4a5R-spP%;tm8J~!K*rEJn3=LdKSWS@h$Ce?4 zoaES!>CK+_B%thMI|x~Y6`5C_7^09x8E}I589=0zUm2WHfMBE+j1WrbMij7ymigee z@P`OOBVJ((Gp-q6>KR{39hljfK>?EKD2thm8UN*q2NKi<#>QiYnF9{m<0YZF5FM!@ zqi%GNEwlq0G}UmJV;mxegH#j{q08ocnrKi*$7r2%WE%ibPO7n;VPXtLaN)lo2H;7d zb|6gnkk9yV8+qK*^rRzlqKk9nAZqALiqutaEK=1Z6lNq(0z?9G5QrEINJUuI92N*I zNC+#k;(pD-L;vth$mIl45n@5)#6uXO##zw9)xtR3V3;6=&WKIc=;7A%C)emyCXP*K z3B?3akWc~B#GQ?R`e)aW0#w{iX)p#U^o^oikT#B|D*_H!h?SBV02k0A;*f#)J%ku= zqf1>@wdfpa@Wy2Zoihs70z#)R5@%@*Rxu(Y<6Yx2(&&svC(tp6WPyv?orWj`2`h-* zw$Z4PqFrvb2Xj`(`S2!h4QCb7BbD-9MPTWben)WaV?{h+sGY_noW|U=nTp=1Xh7uB z@lTP6#DQ#Nfvf`qab5>uo}DU?2c_gXP{h5>P(nz^L9l^`4QlSeqyO$6_hnJ(1!$!n-;0!(?QPKmbx7Cchy)N}V_fB(Aj+h6->If*qKs7+bV3J| zfeVyhL}-B)BnN<)L~1YwV#R2TijFC14(mvg2mY$4$eFOJVE!$VBIO_u7%Rw3<`S9` zvtl40MG~)opaUvW0t7+lgqg51k_8G0hB~&Z1G^DmjY-Q3Y#6hZsNsX+psq1_uy+9MJt>I}9np79pq<8Z8ytX;2e-ltw-V z>iwm8JyAWB|vRY*i`1q8o69&St3JY^YasfyH8x2~(W{25+6ebZ00tlu@=>1URlL%Qo~iI7#f!IAD+BUyon;HZR^z_H8NJkC z#Oe=koF=$nr)4Du5sE?;drCX7RY7Q4vQWt5$ZKSvuBe>dN_5&0uN}Bh6Tp}(a{wzjOcPL>+5bu)O=F7rWXVfZ*8h|fZ7AVv#fQW)g!P|wtg(6dgTmL)>ny3OD z8bJ4clv`B9*1AN+8DdfKC&1~KKx}P*XaQ6htsdf3*Qkxd^=Ct{g3jp7iM+Baf9+BT z#43bsQH1T-V(oy|#DFg7(3T8&0MF8eBo{KIWUk)?sU>&!iBO>YO;)?U(z9{2H(=?vjopY3(t| z?j~y3-S<=}K5~yePN_Euv~c#8-qEP*;^ucWBjQZItBf%{SsqW{XYqsGwvR*)+v zXz2yD@d1S!`g8@oi9nEoLY`35B;6LUf{azf7 z7O6$tI&&G6fEba%2s}iU0kQ~10Td{c&!uTIMNRxgCJ0Uv0tRavb{Qw7s{slczWg5| zvDqml;6v*rtAHDGN+1bh5}y5avLdFr29zExp}2x;1|p`rh9P7R-~_6Y@tVs4itE1o zQDw%8RAhqw1mLq0+Cs+E(a|tw_QthgCTX&)9v=*1Orh=Svlhy3Y5?zf9A{}5ZsmBF zL&GpRhZ=QK#K|xe$|Oe>Yl27QVciB!E!a#d$bu@IWYIpzOaF+i(1@HT`rFdNjMa{f zPkqf-`OPtHg-gitE2Bv+gYD1KGU&OoL1;ojtimRc0yqlAjREaJur$!3CnnR5X=f3rH47FPuI^M^~?zkK~z)=Opi!0qp6X{wbl*NWV!jmNbcy z>|TZ0(57<9_imVx;n1GouZWEA_~x%t8lO=Zx*+@aIRB_*Py>yKMMU@_^?vL6BK!p3!Er?x7Oadj5S#XfaNLi@mTDE{0k%aU_`{d#pIH!}vNgG_Q(awbUjO4r38-uCQZ9n%N&K8Kz-RE{!YiTSZH4Gly;zEH`pv z5__Pd(Kcr^TJpGAZlm45;^wgchugg|6w0x1$8K)`uj&{~l%|G{d&)O6hdkGcBhAOV zNbhjyqGef@M~s4gWw(ZMw|C0|dlnT%R4T}|gm`b&DaXaXNu1a~ymnXIN__3t+BbcR ze5H&0Pjl^l1Kc0JNq-+GLkLYLMqE%u(B~q7X8%#$jfjdA>^ug|jexL1+*Xw<!pSh$yX-Xcoj}Tx!;GX!EDbRWB~@zK8RPr!$Z0aHRq(61iUR`kb)VQ!d93? zSH$i6I=-r=Dp@~78MFeFwE-E3f#3pi2>&x;V-yDpkxQ`<>#vTAv^HyCTLxjb|10%1 zX8Rw@{#mMt&M0*&ui!skmkU57Fd)#tKm!PX7(ikmVZwtB85Tq+(c#2`6(KfE00hB9 zh8q!r9S)-ial!<6e<)8CnDy#bs#GBw5KvIa*RKT3rd4Ye?OL}~+Zu>FH11rvcg+q+ z3)Dc6w*hVjwmDcR5Q2lB5;mA1>(DG>3_uo>X|kxu20|G%kZBYvQU+Rq79E=OXw#)p zn+|0lR;*O2M6DVn+rVc7wMrKpRsS2eEz-4EktWsZck0rtfCD#x9C<6?t(fCJ4gEQ* z<;!WUVznxJ!R*_=YuB!O)$+~-S z-bx}O1IVB%3r<3Fr65fbY-JQOhT9^+(=aqHLjy`_g^M!EaH9Kd@D#Gg&a!9BY#A4NF|A6@-QQljB-Y|I!bIw zDS6Do0L#KCQn9t3^is?*snSa=yNW~;udf)OiUBp>f|G$Egfz1tJKs{kD*yod3IG?Y z+$zkentYKeB)S?(lg+d^QU4PyG=U6^)xgPwvvmw$$AET-+q9K-JO!0gQ9ljU)KP0; zM-)+FF+i16gxYPKOg|+KxG{8Ng;e4=C5|1>T4ATuQA4c-RZfE&wN~qdZO2&RmJOB_ zO@C#FmTITnE?ey|UB|lZRw*xBZ<~ddl@f)@B9kr+Ah*^4$tXA3T91WRSp#szwbtE8 z(ZT?K4TvNHss>KLKuHWpLW)NXD5I1z{*8DHQpOnNQwrZLwpWcit+y3d+G(Sdg4$@K zjyBjB1F}X9SX2`&wUlTf850K6EGJ>SQs*YI#CfQ!2r{f^9(_VWCYT<&>S(1ay0Ph* zm^!*fho;_HCZPkvdjBA*ozC%TA`gZ7s96$?mFJDLr zmLMi>hz2NPL5^rdGA-_Ji)+kRlt4cdwlIf~Yg<8Hgv0tRDii*K6r>6gh7*Cq0GROC zZa!r!W1VV^#Bvs?MAb&%gd!ZRQpJ|UF^XA@!hOxU6@6+`FJ&o9K!v228r>KyMGA|N zisTfws^!RG(dt(MTE{B96|Qg@0F%=SRVzqAhEc!|jF*{>CzZu3MShEVq!1RxMp3as z&eD+VE6Bu3g`nIC$TnR`!oXsZgcTWJ6Z6x=7~JDB_)V-0svIP}p!rN`LTh9OC|Mm4 zgexwB@&9G(>X9&U(m^Bzz%V;W+DKT!wU3aboQ#uPL);0LqZLMKLR(uqVIs7pETw`P ze346_7Lk+W6Ds(eicT6g&~zdso$CzANR)!klMGa#04-;r2<5h&=maPX#Ry8eGR481 zttMpii8)W|mM3DRF>+h!+gfTC4AO-yZYdmGgmP26+_WHQ+3A{Snz)(TY)Bluk)dw% zC&IjFG7q|p7>-#GP^7{rktoP22$D_uQa3sjd7^6pW1;^K*=f2 za-efOw<-rcaV4H}ic_8Eu_8A2!E0%7RSR=S4IEE3ED1vxRqO~wC}IJRRDe|+tJ;k$ofjHhkD zL!oKqa!dNs6ux@LhRuFN5}u8bP^7ShO&}9e6e2@0IW#g=h9;40PUFTr7AlanffNpF zK^xqFufR46sx4a$yLvP;s(_OwhXIU^x*Ij(YM0SW@=A46m=QoJS};tzqIH`KU5jYC zYlu;&bBh+*M31^`7!=5%%O)mFQ{`@ClUq&b25bCwH!ET3TX}Ozl?Di|r%FtmdA-}~ zUKdWJYq|9fA@W6+gCnPLqK(9OXqP+{)1uE49O9a{DGz$?{%D#49VVf9i=VUZFf7H(zHXJl4;j3q!WGdo46+i%55^W ziJ_*5RK9#=A%*`66rhk62^e7UjW^5UizERl6a)(eK?+rtJ}_VkWnhknJXJow_{k4N z^9C5$ib^kmC`_L9QOJD#zT)`N8({X69~cxCl6WLQ00{$|eCUS~h5yY5pZ1J*J>!f2 zd(JPvAhRcZ;#bdnp-A5OT91H%kh=HO=^?;=SBrECgUIu1F}9EpCjE?UW0;pai4* zZcwCR3#qW`){bbl@C$=&gOaOAv_`p(OGwBNyL9Njs%Qt>?*Hoo<0@!oEs~D6qA+nN zP}TsYi@+&8(Zbl3x4{>5j z=Bd*HqYstspN7IPWbh`6W+_&R7+KLR_^%9IC`NF^K$6ZEy`&du#1%2n?V>QE{Ln?9 zf*YOj7kLO9)51{dux8d#?T|4BLxR5m1sNm46&0dN?6DVP5Cfy}9joZhoU0u@&6)aNN*YvECli%?ZzIH#ud+o zBS>;gHY%ld2mu69718k-kFkdyG9wzJ*d$RUa}sgH@GWrig?=&;A95!%@e@5!8+{NI z9Wp2%kqUhx5sym%pW-U?&n)7PA=P3Pd1x0EQAhxfp7zE|m~ts)(k;f4aU60c$ucb2 zGAGXxE6uQkuJy8p_u^Bd;|x3Fx6h7 z@1729BC&Fk?S=YqF@jQys#0wX4=IZz5hL?6yHZBPsqngShYSykCh~=-jtuu{D6mf< z#L;K~Y&O?$E!t5na`W#(i+%!wW=PY9DyKGSQ~w+bayXx&HuBu2s@wd49if3Ofx1MO&UGO3e8Ca_Xcg&^CG%yqH5A5LoF=@ z>OS-7KH+IU@AEHJ4JJ;}iWqY65{d=QrleAhE*a6$ywJF+4h`QB(iC(Sv+M2r6B1+5 zKDUMqbtp^<#`Gi-L<4ae(K9Q*V)(r9GAq>d-tZtmlOYqJBM`Af-2y7n(?%!sKUXws zx-dt5RPREuhn`3;v4Sxe!zftJ&xrA+mIz{4Z#- zR2g$`Yp^gzA$LxW(&0;sh1}S|@54Dako8nMFvpZupHEA_MqXYt9)lV~MsR)%- z>u^*9)o8ubG{Y56|I1Z*(`w7kYGt!Jqf0x9_NYGANTRblOBH0Bt0b1vJy-EPdsCqh zDh1)QS66TaPvW0UQlhL>6-@}BSnY2GS8Q(ZF;S{+3DjT}mnRoD2pthmg+yc1Vo3wG zMTd%NFt=5W@I^i}5H(LlBgZXPmNPXMn8-E$BvU8TvPPbAx-_?OJG4PH7jj`&LAR9> zj}&1i*GL!kPat+kj}&($xBqs>gcLE-c%5QOqvA=~GzYO%OSR%x57Hm!anit%Xl7JQ zQ4w;m@JKSXEwA=QMHXfsHBePEgv66Bxl%S^^EQ8zAb=Bom-c+Ygk{-AR8uk+pZ0@5 zckQT_W^u$9;dg+qD<}MsRB0xCkI_p5Ep4az}fr(cu zEBEcdm4d)E?4HtoJ5p517DN*?9Y?hH3NMPOxK0trhZ{$T(Gp;}_!WIpUxN*c16GW2 zSckV*Eps?9)0l?@v;QyE7G+a0dC4X!j+bNS_(17cj_tVAo;Z2I)JAa8O&|2r%vM0d zlYxWrG&$J0=u(TP(TW*y9s3Z7&+!D&W;Y?wVAMj1)pur{b6y{GkwNQ!!S+>0H9E_4 zlrcCpp)<5D*c|8AmD5pcT{T2|v{2Y)I>pjJ**4e`R|nhXF@r*wQwpDYd6?s~qYxLF z5tMEDf|%X?cfmlu>D#o>w(pxp}0UxJFXdoe_hmh5DvXbC%6FmPJ`sqt%QDc3*jTjKR2z zrFw<28jaDIhOzpo1Ny6xt*W`2jDZxajnzgoxe+CFGe!1@i})#vSf%6CUOToivz1w| zI;yF9s?B;QhxcOL*iVoYVH-AK2ivd-`>+dpu@$?q6WfMwd7l*n3+uSD^|%K2*s>}6 zvJVs^lk&5{POgz=POIpF)zVAVNkwfLq>1-3#f~UjS~n3V2{@7(>DQ=X)4Q7brkhe$ z*}Auv*8gZblWC`xeO1}FSJ{<^`xh@YsbhBQ=r??AdV{-}4JFhJd0Ci+N-LTfMncLx zry0C+2AYrAK%ZHe%R8E_nVFwCyqlT4`&zQ)+nf3MmLb$pW4FGqPQPtY$?Hg?b`Eg|zsQdcDF?@0JR|PXLa2-{9zf?`JcX^#6 zp$U?rG3vzi7{$A^qD5R-ft7l7Q6r1`opC$UB-naq93LU|Af4MspY_Kf(Y2#nNOU&0 zF&bghbb4hlpT|U=!}_+VaCEQBv=zL8KNZI_ji^WXf_HkxG5Ex7xrvvSggbbI%lv4m zSN~b{`i%dTjNv@5<(#i?)vLKW!vh-5an!48G=1Ydhkp`l{`y#l*t<6GW`)GhGyE;1 z+|BnIMi5+w{@l^Ic+j=_U+)^vHQjatI~3D)zVA5HGn=zXEsr<*)cM#-0eMG+Yr^?@ zp7na3xI9;RmbHsqL51tMtuwa0(QFlYx_vpup*xU^TQ&bTh^yAPeOk?t+t_K9YTY-> zJF}JDnU$COm47^jNNCJg^ViY#sK^uQa(SE$mzPJ8yMOt;*NHuYIhn`X-Ou~I(VM*K zJwDxAn#X(7-#D`Ad*5j^!3})bEu4{S)U2V>(kVUQtJ+S}*>bC<&{5M^QySo%JpV`Q zdC}5V-!*>YJN;UFTSBdzX9AhVm-l5yp4d^I)xY?Ib^J`boE$k-k$K!4vEA04WT>^A zg56FG)0cdAC>p&qRORM=JkD_L0M<4oXB%tYK`-#YrLPS-u{UFoynY# zLwew^J|kiJ&5^aue|YS#I@7l}(8YS~>74D;9@9B~jrshF-F}HrdQ1j7(a&D&9ns1i z97YzRoE;gQAHCnd`p&s~tLuIW)xPbGFw(C%?>+v8HCFN|Uxq22u^$_;IbZWT-?2X* zvip6$t2?w^-C!?Oxp`Zu8x`q+oy*Bwy5HDIGBSEN;+ zH*ejXM?cU)6X^g)K)Ang-?*=x%2in#h5PxT(>9B<`d?pzp`?bipV9D};Q71hvVXE2 z7qkZ-m}iir`j+^4@ZH(J-P?b?%{~6rTmGxrk+1vy7meRbzv%b>rvV~?fq?=E4m^l3 zVZwq76*@Es(E!7V2PsBmh|r?Mha5Y4+^7)a$ALgbngof`004yu6qY=hv7$_v2V2s- zX`p1wmonVmD`8lzS=W9XU6r0lEqaC&Vj}?pVZuH`@Os+&D61 z$ak5}OiXYxQ_5&FU*yd9a#fESm!_O)IQ7@SXTw%rEOfDFzDU%%#=5jN>e7V|f)-g& zby~AaTfZf~TlB`c0w?|kJ$Uw8#D_1gt$3ZP=;zWkW2XIh=s?2=c|PQ6{^-f{B-OWn z&k?=*gzN>obXY$>{{8p+)8~I%fa?i3QhhM#=U;gMDrgdd1ul40aRi<>-+@}8XPQ^? zC0JpH@J;xUgA6{%;fD~Kh@yS}l^EZNDvk)FhcDtJqKq}BXds9JuB2m+Bk`CJkO&D0 z7*tn{W?5&;UG-6hKEgzvZw^ICQ*)tBiDhqqvBz6*S&lTBl?DNqSabiniK$zXq+vIj zX-+oj9dotOMdxf8Q7NF6dWI(Ek`$rY=a`p4bS6l1Mn`9G7}cp-on@v(nVFK7S?Hdg z;mK#Fyea9Xa#C4k)uvbaln_xr1yw4l;+bSBszkLU6sEAI%92k&0AuQ~au z>#4uG+Uu^y3L9*bo{lPNv&(`yXtZi}Y7(_aE-R|CpGsS#lG-xs8j=>WSmi@N5s4eN zPljbJv=6qL;G0Zx+b+FEe(UVEYOc#~zyAJv61pmtt5QJ#7>qD>5RH{xTcNpyEn_nM z)z`$KQLJi5vW=%#lqIPKn`|3P)}3@l^7dHDJS?&T%T!o?dd* zm|iuf8zEjI>&ac3J_?6((uUe>64K;t`n0-AJEt>uqlQZJ)b>)9HMlcd79NWmwwRTJ zV^av<**3a(N?9tx=-(B|FX&b(x+k3|yxQt>A zNN$gUCpCHF3JEOmLzoYKxkHZcE^dh4uY|G zJ_@L(sX?u1v}Q^vTwslQ?>*7S`+4S^(~FNL?r8OCDfRzeTmQd51@L>TO4X|zGOLfY zYJnL$6$8a{zyl%+SQI>#s*;tfS>_>wJ+Z3&vqmv7yw}+ zycL=dg&d(F4Y9&2^T^ADo--YfVwe?pA#jMo`d0P4)uSD54S+UO;R&VILc&RLid1|O zQR2cQyCC3T8AHHJa0Q#1gz+b30pncEC^0Xd(J^6+OBo#lM>nofjuU$$9kpo3pyW}F zsB+_}?g)}Rnyh0iBV>8jC@kvqQIS5&iy+&mn8;)YW+S{AZ9ap<6b2>nlb7XC_i+~4q|gK8x-4=gqXN)PSbH= zsodMD7&&vwGo6T2r#s0;&v$~TZTGY%<8G3-3b6%l(7X^l8)P}f`E#BN&F3_W15uYq zh@tgNXhXLGq`xJANGquwU_45Yjz+H}=-TMOKnfF-hRb3i5uy@r^OrxSs-;7uDNSo- z)0yg2Ur!X_llpf*-3f3alLTs^1T|El3e{>=YwB{0<`n5YZ>r@BR0FG&sH{aTe&Ksw zqP!|6Rb~~F-K)$cxkob09O_VL9V_?X2R#2~ey3+)x;6PX?nqn)&mV#9&QSj zni+IS0=-GbaRwH#!MfEK2@Ba_*+(thv`;uMn@z;J%CW;rpsqYy!4HDAD|SWZ&kowJ zm-dv21YGS5lLyP(l@KOI!BGNi0=;<3uyAH^k=_FNTAr#FhNoR^X^#s<x5@}SD~dft;AiWDqYC5N+$nz#Ubh1qR2YpTh3L+maOqFhuKGA2GYLfo~a2AzGw(KQXj6U9t0vW*R!WZ}zMC=Z#iZ{@5wt?c9|3nt2!^&sB}>QLs2dCX)E zklfZe&oA>fdb&Nc|Ne2@;+L+suS<%s*AejfY;I7Jv5~!4Qkrel%*D%TTaDuQ(Em5ggrTRt5+>k z;X1L3c^x4CmV{KL=DL|ZyUzVMoHGwk24lA#O!~lv)v!kCeNH2k`xI5nr}9t6K@M_^ z?WCDyZ%=$C))HN#_v2|7dw2i4EjO;|WwoT-@Tv}^RkF5>*(bvagN?=Jygw*edeg^? z{HF5WDjQiS$J?>}w)bL3E7}VJtAOBBvBS&!Qx->2;d?-~rd1xs|#AH8XyOWH@lG4FuU zE5`V?x54mLB-8gRNBr9Nzj4el)ZJ@!<6ylm`3-P@2i*0n`(^3vH6%I5D9r|bamP7s zB-<@)V{EhR$aDXuA6tgJF-489bFJ%o$;~Wf7E+fp=JjhxChX0?xUP&JWZxbC;m7Y7 z?}0B_FG+TJ&G>Sc#$^9Hj)%G4V8VUahh${g(?j}N;d4aM4CjvZ~gQ4OQjv5Kg4xJOjg$|rfq*U!~G9{MTBaw z)_<|aT0He6Kn7?Or)!#$W8-E^ymmhJLxFN)fvki)cCj<;V{Fm(e{dpJA^27pID#Sw zRDRb?)#hU<*lZl*DEU)@H}PYi0fA6taW=Ssq~(D`1Xv%aD}KaoT~sWul36cOSo`Kd zo0UPI)f4vyUjqM^Ht3{qw!%TY!f(ccaQA072nbtTxGpLOh7y-zEXRO)C5FY7T4!i( zV|a10=7t*gh9=i>a0oO9NQPR7hk2-nO=EOcmqqCHhgd{Ta5RWf2VhwDUuC3Ub|hkm zcouI|h^mrC4MBB)WQmB#Ux!$C?^Rh0Ms}P?c99r1%~Dj0R7{P>VD@d&rJblv`QxQsoF|lp~G? z)o1A!j_Usxf8zIB$QL56v5s94kaQzzq2pna|#)13|VLe*^r+GkrU~V6-hW1 zSAarjfE#&Ldl6s8wSfG`f99rI&vrLWL?#dCEZjCeyJlMHbAsz5AQaev)uMntl~nr! zF1N;$fH8w8my_c&DN@yPcSUm2CV6SNE#>r)s;6oY1XzU?LAW=C_%?-Ec!X7Xm0FpV zOnFtFRfQHLh3z

PAIjsFG^Pad*g;Z3uWkG+Y^XM6Q)_a2Z>17(#X^hifTlTd0?1 zNS1*qm|D0+M`xIR_=<)pb(6?rQ>R~52aN)TUtkAzUN?=Ih?$1yiG!F}UG#}gw}?%l zbw2;IFmMriALdI}S4vzLiJbQvrHDy(*K|(iVjc)dw^&Td)MC5IOST9}xp|7fDSE$Y zchVGL#Mz6;d7R3~ioe;6G4^@Ad7780nRJ8}5VKs^$eVY9M;tkih*Nxt6P~OGp63US z^7u?5$B#ErXb0(@9$|lT1Ap(gkNHRw0d;(~MW6dgBI$^a=xLwbXrA>cp!&$4|4E<; zdZ6-WkN)Y8g9)KyR+79UlBB{wsrE8W8H97_Y8*L|bU8PF^?^s3mRiGqR#k&Fm}^6+ zR8}=DKz5DE6Qga^kyZzb)#-?Lq==5`sEx=+ZkL#p zp)!|PiI`}qVMkwQbeo?^U$wZH)ToJ>DR>tqVfSTplW9s$hNi8xZm)-`yjYFJ=wP+M zNzW-_v#N`xWG1`nt1~utiF%C8sjI;HoOc0Xt>}!uI$@)lsm!>GmZY7yN}~g|pmm0h z;fbFPYM^uGt!`G2<##s&`KRTor+A|f5nupOa1iXOuIxGx?z*lAAq5Truk-&JukC8D z38Ah7(XY}%j^&B1boQ+Z%B}YakPUi{?X-sw`JM|2u@NbA7Adh5DUlQ#T@?GU6`PQ0 z$`MK`fB~41AUm?B@u6e5mlKMYB zDILf>7r3KQr6tvdVM&V<(MGc`X|o{7vVOT5C)aMZXO&%AK^nw_O)8~WE0$YYm0o(a zTPn6$YJ}jlrg2J^ZuzEk>Xv9(rex}|9v8RsqONy~1b1ry|N5^Cp|^PZw|kqndrP?f zdJuhkxPtqydx^4Z)=%#kaefK8Z7a8cX|9)xx$OC2Tm%uEONfZtn4tf=s*5;vkU5O8 zs;Hb&R1H%arHGxQNlBh3yT<`~IA$HC*>=MTt*dJt-ASG9#k-StyL{0wlv}sNV}r{% zx`mjl$0UlyNt?dW97$jR)Y}o(TfK;wfF00mj_!67`tA`HSNOu|V5z~(rh`3t}=yuaPr z!Rwj1H4LV#LWviX!yOug6^c_Qho?}>moSTyJlnEq8^kfB^=O#aWESTnxruti^>ZqtgbDvZ%B*L^CS7lMWcQtktxpMiZfBwq<*z zOxm@1EN^7%D`s2Abljz3nQ%^egnSyIaEr*TTDgl{r*&9bZ5siD8_8DEub3hbi@O$< zoVdti8WVgzKT}{a0Tco>fE@wCT|B~KkOipR#RKudT>Q#$8L}7}r}zWMpL?Q;T(>sN z%e@?H2eXR7oT}!9MWI{1=~Dbul2eKW3UMZAO-yz&j|mq3F=y}12G1pFa`r53F&$= zw2BvoLB0Qs5ZIf}Jdp(XoX!ei&@v^)1EB`0ki}ZS3bk+$r)&UXAPQoT(FZMo5TONH zkgq*K(jie2`79w1-Oz$I()23NzIe=`Dyy3)bz--^u83jTXl>NCp#>#2M}|1kWWPyg zWj4Z%ov6PqyukAm#9x}kbeghKEv7ZgxPd7ztUw9_VG9Gn3I@;${j3G8a1gD~)m*LB z1Ca!zzzSqA3J75fTdfJUfBX z3C+J?Q(2SEl6 z-3pZ*1zn8*NI=#IFbcIj*AA32L9R5y zz{|}M78_pI^=Yb89}fF-mUi9S1)mIgkkl>SJ!FtiTVSF5lmM82At-OmLf1!^${eSHuco)E22udUL`29O2B?ZsFi!UG}3W1tBdEnMV* z08t>?B!1cIObUC^;E`GcHg?-_z zfY+8z3U4jigAuq^&DNU`1&Dp=>wMV@z6lu4;RvzLC+!fYJi;t)03VzMYoH1;p6jDP z3ag+6uMEOCq1D1o+z0X22qD}CKnhyW;iI4h$i3L3E(M#=3hesTye$REttvKv?FPZHt$n}bO{5Egt)547_91L)1qp+ zmU_CliJZAhOpny?aKZ2qPtDwH&8K*E+l=u7R!5YXb(Q(M*&LdxYNxL*1-8%%0`c2# zz0mE@3Kp*D>00tFP2rQ>*V>K}XARc2b11i|5Trom^}5;yVC$>>bl>4Y(Y!USiUrU2&)R>ntm)d@ffbWH~J&>$FO0B=wC!wv1JUiV_% z3KEb6XKn6Z9rg*K(Y4SDuAtyjPz$Bt3a$*oYvA;|p4krC=m;QWJ{PYOU|Te06<9q2@c-eX;b0NoEU+s>?xGyP@@|Y@Z89>ypGRw3KBZV!r8$W`gtuXexAm5X<6U$}ht z`fWQn@L7y@#{y<-xba`dc?p9(T>0_V$$BAg#!T1aV4V^s9vpp8fM=k5sM9Y4C^C?Oj7_-Q zLZK`Sz%m0d#mq9xnD)Ex#rW`3?@c$agAYzR=d|-KtlW%qM?P!Ji77yBf@&zLcp6ly zq7aR$r=WcDh|oi+5(+A>2<_8GwZuY#tW7Bk%D@CV)k{>oNaZwBAVNh|RmxH|)zwu? z1y$5dVQrPw4K)MRuU%vH^;TX}4OUlSJF_*{VQK9Z*k5yf71sudm3G)pfJ}re0LitFW!oEb=-XU^^Mbj zi)*t}9|!-w^;w2bJ@#6-a5cD2`68Y;--Pw`HZg-cE*N8kF|sbD6Jw$fL4+ktnL(6M zCh8&w#})Cd4oChj!HjXP)ufd*3fU!+up-%{pk=!BXrz-?`o^J`cADsyi@&walkAbf){#QDP5Qdz9Or&o>bvt}Dk(?%4m8od z6%8D4Mfo1w@4^L7oN&e$MZ9st6>mIH%{sd*+wd+IjI+2ROYdgvEc3iD&NnCh^v?VH zyd=;?Uw!n{QLh~H*Gr$wblOqJU9++-?pCt*yw!8fJSpZl_$rC(9r-uqEKXi}$&@~e z4586z!eX)(5{vBCh0f6gVFG;gg*A&Nh?9=n)-6HJ`1|=d~Ko_55tASnz#>xLnLAmF{r6b zeJ_c++RYM8)x?FZs$o&Y+!G}>D=AuQS;*3&u)0_-Dmv?n*y19y%qYe%lIvO2%3>O~ zNG>)u@n1V69t`OyLmP68U~|lwveKn6R{4lvNOD*p5fd`;5O6f1+83=p21Ql!t=7Z%;v$%k$6L(sC57tu0Dt)SA9leCKWF!@SNes4tbqZ{5#_AAxOJMR+nB}pXErmI>Vj8he$<$@skm*cl%IKMC`sFdBX|!ri6Pv-*=12^( zK@VmPBjEht)rwQYan6sM*EFU!+sV#s!gHO}oaZ*JNzZ%Q)1C3e=RTX+PkAa+paa!U z<}$Y!*x^p0w_~X5WEVQkH8i3Qja@|-8Zn6`G^4h|sOZi`(cMARptURCe9~hUl(tW$ zz&oi)Q<~E7?Iu+GTHX%9XVQXU@{+#O=_+ITQ=e9)r&U1`P`7tfjd9C|cVz!656#Cd zs2VSC{P{}j9ws?qv7na@4BzQyX z+4F``ww7b8d1c7cz22+5^VR9k0D4RP_%omHystjv7Qle&SHF}caDo2~d=+NaXu$vV z8ZI5&-(3Q@p8WN1e~oDsy9qd;2fkE-%X7HDJ#Mld-mq>+OrzP&ZgW+gXp1!p(v9lQ zhA(z8M=N%@6vx=2I?gd3WlT}ts#;AMFx8fm-l%y_Y@=Tk&((1evPDo;Dm0QZ# z@j=PPmn%ahe|t!7OtozV(b|IJy?ZMAcs z_spU{hxMy1T40?)$6-V#TG5NPQG3z+Xh%Pm(S(Jpk1O3RO6!o)la>*PB`4w#hx*f^ zp4{RNCf?SzxW3S_gN4Rm{QxBasru7WhAyb0YozEoQM%EYj&!3pJ?T(qy3?ah^`kF6>x0_*)U_`4 zs9U}2Ul;q(%T9Ewqdg}hW$%(NTH_zzn8tG-td8GK_qhMVPQ`ZTdq>;c_s5vU?`%(U zk>y@H!5_Zui%&9`9nWM-OZm%m9P{JPe0iKgUZz^sJm$+y9rHz6uumm(@`|`v{t<;i za+8^Y7T)j*!Cv;R&-mM(hlo^jnBi~Otn3F+I{e)qX9bntWk`{ED3_sc(i^OIlw>1RLs-G6@gi$96h&eW$m zsagDwd)eZ~_P68xL}#O|V0$)Y^S=TlzyTD%VJj^qQY{5MBX9FIY5TwVBP}wLKydRc z4CFuF+CTjRuIrK_b{oNT3z$_3IDX@k)f>!LwPbEQ@yubA>T zjFCAY0DyyYIE))Yj(a%W+qfVEJ|QeZB1}Rid_pIT!reo{B}_u>yFx5Hn&*R&EvzOQ z$vJ$wum_ttx`{BI!>?g7F`l!hEXEcy=ZL4-}60Y6h8lFlt$evFy%WkV3fXZ498xCG;zGNr6R_0 z>_&C0z86}@bSy`AB*%B0M|rHrc(e*Gi${Hws)Aw@z_K(ydB61&$o7lBf*eSLBuIr! zNQOj6hs=pr3yvj{m08QbU1J#uYL7)Sv-Ihn85$Su*+q34N%cVh9^9LctP3F#l7k2W zg(wY}d`XvZNzxz+AOVt`$-#+`pNXJJi6AP8V5FVg2qB5Dn#2m0Tn#pq$?}*8r~JvM zTuFdQ0`;Ekb_O1UTvqa;eE{K=Yd$~7CtnMg{c6v{YB%DeK)nFyh(;gjN6 zy{kZ{u`Cb#u#Ua*tH25;C@Tx9{E`2_yvfb;k(=C__`gOJVO1WtvhO#@H@9}DG*Kr z(9VO9f-R7QEwBhl&;s!^0P!SG0{~ClFaY$d4feE%+Hg-T=+5~>&-aW1B0-OX*aTKE z05WKf<`@Nr5YW`Xh>0)=+=$Qb+yX855-FIC**FLYm5qb24cVAa3SH0n{E{(fh=zbq z^9)h%1W`!{(T%W(`eaWPO;P_54NnGLQ11lK`IOP`4ABw=QTkK}3{B82s7^Ad&J@K^ z6+MVA*@7u(g;H>ZBy9yHbp?j#PSzMv^9;`rje-|#P%S`DEf@n$=+F)&gHa%Z1~q{1 zBu_4YPcAS|5M5J@Kv58lQYm1KDA>^!ozE`)l1&(cE$z}S0Z>-Z1RHIQ*+_y`VA58w z1%dbyEnoxxGypcx0u2}gMm5h3bx$4b(B^0bQmBPPO;S%SR5IX%@YK=;)dW)5gi%0M zROM5KXjM%})h*zJ3T+Nn(A0w%gH1S9E+GYhAkhDW2#Cnk=ID}KjR*o|g;D6w{%qBR z$W&55R%lIDV+Gb^<<=Q zA}|1#tyv<7S)0{alr?|`z=$R&0Gt)tmvz~LSOf!zg!JT2j2MCeKv^ar*@LJ8CQyJ9 z&4i6m+JndhEx=l=JqWE$TCv4ir7hdB726Vx1RRxwICT%F1djiVTZM?*QIG)Ol!6Hm zRIP1|usu=p?A!m6SkGA%(r+zNGG)*4Ox*fZ+{Bdvwxx~k>`usyT*uV{P0)hz98$#n zR?fZL%w1d@HBr%>RU#$RO(;@uWmAigfY#uE)GP%zFooEST{AF+GS~?1z)(QlUCuoS zaK+SX)dVs4-TmBx;3ZGv4bf}e2+VEX5-m{H#ZXCzfGE%o$L(Cq?OlZsUf&f10}umI zFo5tCg$~W$=RHn^fL#M{16R0RGGzfWAOQmy0Zi2Z1CZZ?u-^g@?e^F=*h109WmhfG~{+5A9H1eF%u~QV%r% zWfh1q7zO{}P2pb!P%tF}QdkZoMbd>J1-bpz4t`;V=wA*nTmx7I3HFFpD2a#|Vyw8_ zuSMA=V1gx9*#)Rgl|2Y1W@4kIS(+u$XONyZ2!AmdC{&Pi6;B_`xBzGRhU0wG9EMb%o&1=o_8f+&Vs zu+@S{kmaP+gtDdOS!T~%mgV|XWnU&;32he&l}QPZpDyWOHV9KkHQ{CUh{c`H2d!nq zwNU?qnA2(=X4yc|34Kr7&}I&O)ej|H)veD64blkBX38bf1SL}NBvbHwXNACxYM$I^ zp5^gOg87u&(&bV`MNkXX+|^vo|D9dfg0rib z{cY1P(Nso-;r~@qHz;UVFoiDAXxSJAa8~M3h+uFwfNJesriSV~RZWH9Qt_SYgb)Z) zSn6Dj;Z`lyg%Hqd6>DZT08d40R|rsKg^0EmP`GB+!##)|<^U}~RwGsjBM#pz@LvC` z=uk1pgzyb)^3(!MUSynQWRb<$MkZr2ZsdcgS(PP%$5vT5CVE3MXCf&?ci1VdnrY-KR z#n2>9;;>zB10Y-Rj@Wi+c$QoTr_=`D(9=EK=Jj06#Zh{O&kPSy=l#~~^;{1xQ4rtV3y){}hUWhQ#|Q_t zhzU>d>ePhLja=;*aMwME0yc$%a0Pd0gOd1g%jMkjZPfWB;pAV@!MS)~HlAK|7gpggjp2kyh*C(1{qA61ZDAaS;e!Zhh3Mf9onR04V5rVo`3@6j{@x)?;+EZr z$+q>G&EhK7bvdqLg$QGe(C(OhHVg>TVa=kCO6;oVa`6@!tEar8BSs9$SaaE1T1j@vOHgTLQ`njQlQ z(12>T4GqYEoo)kx_*DTO=rSmSGzDO!j)JCU>IgRBXU)|J?tBjhYgXU{E~xwzeu(}g zgI9IxQHbhB9nfGk)@XHWt`=6c?(~C5Ruh)iw_aA<*XS+ag5SS=ygrEVy?vTM4;KC2 zEa=+67K2H!*)@)S#Aam1M(l&&?kFbXVNdr>wpo>B*_sVw%zo@+M_EeVWMXgH=hoyh zZrYkXx;aEU`G?r~e^`m7SgS*_z4Js;{6v5-fWSZk0|pNwG*G1p!i5K!7#LyzA`=D% znN+!GpproX1{hRa!a$}clZNUZ^b|EA|SqEw07Aa*s7-1Wwkiq{67o@bZ94B4Kb=hlzfjA0?W*H#Z zC~UFAiiihsF@*%Xu~MRpA+i!9DP)MaA}J@1!r5sCv6W#f24q+Ygk_W>WRj&ALoL~bJ zI1mFMVIT>};6XGf5Q2PggBs+Z2nj;M5T5W-B`nAV17;8xBIH)Ll9Txiz$cdIs!awd z!mE~&l85B*A~KN`NFep6Xr%-woH>XV(6pEDK~Y=TI|zNUk`#JbF^g2`3RkYOAg<`^ zAYqAuzew~TBQ?iJOkxt7reOb<%be{he+f+LQlpzEV(ek0=?r3ohOe&dW-yu|%*H;$ zN1_yxGSi7nX)Lpu+TE-#quGoUR3?S9NszU5R5P}u8f%1u4*u)rml$!~_Z4;Z5*(`aZttdEVmM>dmUN*C!_82BI zR#8H%c1I8?lEMw9FoP)!G9f57i3A1^X9lt$7BS(-EQbTkU&tVr$_dF0T;R|IrqDYa zy=F&knUY&hR65z&jtuaj!ix;R%hr*B6|Gs=xGIgjR)3NJ*+? zLy7bXvIZDH0}Mcgc6n=Fn01#X4l@vJLQWs~&#l&ZZabNX1NEA{l7AbI|6^APY z;Z#`$!kGa-AUj(m;WIHAeavL(;f*9Vp$QX>5@vGa*v8Vs+>V)vW*BqsaBq_{l07%N zfVtSyYSS>8A|(F`W;5;&qACio_)(OM+lLwEh-9K^LW&j9kJzeFZ~Z|1+$8m{@5fI z5}w1RfV)6KMv7URvhYY$InS9zn4V;n9SGzXRzV@T-ZFqWuUN0>I?gJ?0+eCLS3Vo= zFHREy6i@0*1i>bCel~0$Q6{KCIsuSIV5BJx z=}T8I0oDHuAqWlPL4xr=$TY!J(sSWsm|$YS0IX z)JpQ?KSFPdB6r?35oC>P`r%sEH<6`hS(UCI zIy%xb5vxuvaf6%kCZsQcWUx?x^Pery)&Q*3cykT{9awr6mmyzxEfE5uc9TKkR;gz~ z>J82EoM$$ROeQk{UYPdS#wr<3NY?@ga}8@#o7{ARE0{w8Dr`VNOF8;QH;I>CLg_{k z(rEuTku)J8VZ9V+c@kQj^rR>KxOr$96Ng@8l~yQ^EmJD#js(h0QcOb3;ABhgf`j$D z3kmFQRd=>Oq2VsnefzQ~^tUSXu9S45F&_ho3#|YqeJ*+}?i!kSyhaNGF~=i&!05 z39<-Xl84YWS{*4C{3Oy6$wD?*hRs&FzQ>q!X*MfgX%}eU<$aTJpR|f!?P^)JFJi9h zHsby;`;IX}3=?67-ylYrFa~#p3}B#FU%>xI z)XWjtvDw$eKmO z4^aV|N%T*jP=uTe!L9sSIZoDMF#)degse?OO0>i_QbZofom5O47G+ztMFm!Dkv@Kg zXSB!4unLlx0c~v)5t5tm&;@vuTxrZviKNbf$p~(UhQkEX*IXnYX`~_jBS-dIXJBN( zImW#CmP4(~!1YmPJjN%Xl>L=SBTbxC*qhL-oCm5>#xaL0xWkYv#Vz4nEHQ@49R|iQ zP3pKt!wga%5u8s-fdcHDPeP?K`6Py!;Lll8RVo2=C;&DQ9nmRAN4ft&Cjf^*0LKW- z#S}nc6zRn%h{71OWj~pP*Ch;-v_e4|1d?bJgnVU^^vBn6htzc)!59P;u-qo(Q$MMl zS=>mLY0@sShe-?t8yP?%90Z#TNjtcKY#Bu5l#XD0jFWJ{e{?|y0A3e_W@d(FYGTQE zB!p|3S$80W&p@J#P=QVv1o-$54{Zyt6#=dl0T0DQUJ0jRMM`m^kDOE z0#4Xc?ALzDg&yLU#?h8Rx`JGQs9$tfZw*Y*RE%GE4AA7C)OZba;gJ9a*V<@T!8w=t zkxd4ER+f>%CUlNLrCh^s%nGvT{t-rx>tC#@y5>C%~!~&z$C$CXp2=yz?Npn z)qGg+7ytzf3;5I%6cXxONFnQ(4v#4hm1SWbdSMBEj#hPfv{MzjVHjFrLTtie zOq>+4N|L}0_#li)kU~A!!+hQ4f83U4ir88y1tT7WIcfg^gdM~xfXU*(*|31jLtLV8 z0?Q_DBKz1`vAPeQ(NFvEl`5LgDgu#7{MDUNOAurlrCDpGVe7SOYqoN00i{~EnVP4e z8mECpx2amWmTR~oL?t*xuOT0+xdZ_)1X0mXP;sMG6_w@i zIU4NlMMO#*+n>c+vE7-Z)Z?|iCbjKj7Lf;$;QMDWir)U0G$UO-Q3zr zViF{P-LOgA!ctZm1l^KS-6jNEj2kz#LD7{$2bctI{weslCHA-_;y6gxNnJ-N36Wq9 z)+tAZIBt{lZREYs_!kUB^i5LeS zc9fOc0V#xL2XMi~8N@0;qV*&MBg!3ZB!t@pN4bQDCWry`RNqb=TW)ehGo>SMju9b2jLLi4NgxL2in9a=5%@hX2+(n8Opv9z2Z}`m) z+b}Wt@C;teGxaLORnBIP%ymp)=onXzu!U!q1!Jga09M9W;k5OWD^XKPm}Ya*~9hK{$^gUYr!*2&Fnt+VP|e zH^!E|49X}0_>{$*8h`>^hTnHjDf z5pN_O1ol881PiOA=%%nPs{_9eoHdHFCM%n9OH0s|vo=fiE{j1}YqjbkE|T*&n=>z3 z&_*m7!fkD>UPZ0$QYSf-yJ-b&q)to? zZD))INP?u!;#*Q$Mpb0B%G&>|glTnZ4#ydRo5ppMhP7NVDFz@h5qwA?UI^56Sfqk* zMpQy^PtH;$;o#f)pcL_SWmaaMT9Z?Xj?f`w85EstDY8MN<)033FgrH!UXGAlU4KY6 zUw%`6(53J+ZaYZs*P(@tfk%_1#n*jqD{yv*Vaz6&wk?puWZcnn1jo@Z$Lg-BoU#RS zSg9=-KrJN4kU&o+%P-;_L`+o&J?e$p)Fz`SEDtgFuUK>=Alsh-aQ`eyQSsX3<%#$H z6rI$sO9(*#1ONsBfL3)%cbfNiqBnP@w{`}1d%p@cO3VH1PZPu$u>$a(%xkVxfj6#% zU1gs0<<+iiUgsf1D`NjlqqItAQSh_zBZFdF_CdwX^(tPlB@?&B>a@;G(VP^Px%;eWWo7L27X zZ|SCYIw@4`E#LpLa+n3gk;$s$kr+VY8i>J{2u8|X55vvI5G+9RRaGVeO7J0y``B6e z3}|7gghy~9`OJz@?2qG#@3l_aqhV{dI~ulc`?q^LrNzp(rYot5>$r2;xq^_YnHss9 zM8GJ4Maa8G2vzzxtA4}UwpcVNN(%k_R8k#Qq8!$&F@y}Iqw(Deok&6!D1{`*MY;Gh zp~M}2+~eW#MK4XvYqSp31(^Y`1BsBweSC$s=og+ZM@%2Ye$gc{~Pn)gH zxra?A(^7U4J z94QQ)DI89PfaMr7cA=(ahfq)Qy3XD4<>TVr-4!H~;GOU|zDM01D=drwtS(7iAt_Wr zB@7|szS|NX^X*!nnoE|C931cRS!q8BGrmisgo-o8j#`==EEdX zW*V5HWQqY-rCgcX+0#`kTc+GRoWdoifs8J-M3M6H;Y+Da9kvXehdY~X6o(T;B}S3h zw1Pxp$B12<#4538?b@|VCoyBRNyJvQ#ooKEQJc1Ai)xFas@e~2Rj1Ft@Ltb*J?A;+ zckVmMnP+3E)}`P{lwh*dFzS3aZcfaXb=*SG#ZTDVgUy7oNI9f+H#)>M>DnZrL(P7F zy83((Bu22u*F2v;hma(-ggo;^^jNhzRnvsZt7d$x(;QDd1^>G>`{0z>G{^IN$=?_Dnv=rK*N$#Z6AsN*p6!w|ExMMIV2l&GUusu8 zBBi*BZ$!u=W!1t*GgIr#W^%J#TaD=KnrD^rR!k%=L&kY{YUB-P-8HtAwDfN&7YViLfSnnLppmg;6w}fiKL5nl>xX5?EK~92oi1H6va*-p14Ta zr%WKJH~@eVAPRk^v}C?uuJ~HU=9%htX11m3r=*4FT3iZegV1AT07)Cl0!zEZrM7VS z663bgoZhKnd6g0H_Jp-D7s{5vli)vzL)Lk0!kM*}+R}|Pm8sKGQWR<$LrK(kIKz$L z@&rlWkaEiD<+!M&2@#4iz?P9&t*xq9rl=IkXe>aI?dLscjZa0w_eVx#2wbl*#&H>% zq1|>};`VGFHJLQik3{IqvH>2Fp***_`bwgut_sUG+dxlEk9f+XYFZ%Lie3%Da}Po6 zgT-Q@Hu>dH*`w+8n2p;IP4}3w^A5 zdE7K7)ns+-gkKhiMre9x51q}UNUc;%T*(}BR(G!r9s3r)(f-s*zp}d3cq&ows)_|` zDswigj|>*$DzIeu^!5Uwd_Q+)$KrDw&u&Nv&)pzWHrBcKcc_iVka>S<$3p0CF4i+K z=d}MbcCFuj6?ZFqM8rY(T7RO~3s%Oy0||ORyZ`9BXJ2Jw8tuPDB2XpHaPRa?cdWiDKW&9O+tv_>< zLcO zGt-mcOuSvhD%t~qc&IEIk6%CHL}F?K1T@nOHlHF1tmI5!q(3raC}-0FqB$zSzZV%PEe!HU#18CJk+bY=)KytoOVhT$`d-}B&f^q817=$!Yp#o zp|7z)y6jtR^?>L)4uCEv?LJvB|Ejf6@bM?&20b9&GM`vD?|Rt`QeG1LJQe06Y9KIz z?2B2ha8~B>6>}c8TsHTVoXXaRg(!liJ1TWQJbIm?H3H`#$z_|?mYg#Ab}%#IFB{V( ztUId>TV!QCfwof@a{5dpri=IRy9@p-50w#Cx1*8`oIQWdc2^)8z*T?D7EEnc3As-e zt1xc0W&B39#-EL?WXl2`1_v%&I_#*!VOHD!bNkEHrZUVbUa&B;#+1F_vXkcf3 z?!lBvXWd?H{8pX6XO78^i++o<8U&lq(|8u)WlST(z?ayFt9!iHdz3irTN1VRNtOZ{ z36pZ)I-AdPA<@h)Tb5Dl!RHHJJz8sTzS(IQ@IVO=QzzaUgqOJ?ag^b=v9$8+Qm_|$ z&@2CE<)DRXP-hlpYIKTD>ohbnV%!{det9&U_((yq@e%v8u+xQ=OuOv>VQ)vGyII1% z)yCDyZ6c<30y~x4Me`TDY|4haFgX7VaKN{^`nOq8I<(FVrvA2_p<-sEfU9QmlS*4@3|ZEuL`pKFf55`{$U*8` zFMnTs`|Z^eJf^t_H-!EiDjwKkSG3HZlk+LXEp!&!?X*W#-E%Dp^M@X8kIG8P7bD{a zzwSklLM46Ii4$+U`;Qc$g+h0$vF)UipSMnJisV1M*x3?4!uAYtgiQ2`sGZw1r=B2~ zPqQ@K^udgj1V%Yj0&A!xL{35v%rP)}eRT-F9=)sCW#ul=w|?QrqKTi>W`-WSXnL~x zd6i4NMFH*WWHiq9ruOh#a!XA)YN>h3+-2Sb(I?S=>ffNx{}O<;L-Gi`HJ8=9<;B|^ zJFdfYn5FaQy};=}s&1V*mAJTlk*8K?WhE|0@M~yE!=lG$x~+xd(w}lj)#8;|lk-4n ziia=2vGcz>jctGLr^i1A?#Hp1<|lQ%Y-zNHU2zIVk)7CedmOnubtQ%y#qIu#J;2{} zz3z)dKjLs4VCW*<2_f~BsPb(G5CjPJSn`;}aUG5g4Mt-G*@```?`>ozeZJMG2B?QEO< z5-o_ni5}LWq2^z#;pK@CdMO*fc{u+# z+r^sjsRPZiut;9XNN1}^4jGQmev!wu!{w|gVb3{^IX|oop8s5W1(sT}g~a+auuctW z->XI7O4*zT-65NZx0fZ$Ct^;6fe)CtQba4+1}s;YrHFN26G#?s-D|4V=B8|=KxPIW zmvZ2KgH1;zB1QrbR)_d=t_Hi!dvWt?Fa{Ib${T+8)%ZT|M>f9e75vb%F(Q`>wH0T& zn>2B?mf>?^m!V)8ley#eEP>@VF6~=XC4xnlB_fF}J&hf=*)XyVcmEI#(Z8ipo+(kb zx=aLKM2hcMrA zx~vo-tIey7TU>X-1D)#y_^#i$Ket>WCf7A6fv;YpBgC<7XV7r*86rG5Da-H3cLo>i zWt?u_rpUC9y2sFadV?EH78C0&RXSibj3H(#zE?K{Z@Pokd3_Xim=*jD7_+@M{7F~| zOT$3$M$efA^trU%NXLP9q+vF;ViEmv5vOYY(8QT;GV1Nurs)`biGCHh4jf19Y74?R-HZ)Do^eo-8_f z|B9tt-}s(_PVfh2n-5c^O!QKH!4Bw*2WzlNoC41XXOK?cIy-iRmpBes1(ueZZKW%V zZ!+%_Wy+p68M270Jdi}Y9^3Vgr+E3ku;p^$mc@ka-ckd(n1`#zsyJulJ!eiP&}`x~ z?|-$Guqn@})*p?yhs5am-bvB5o4A_H5OUi+e2N~ZS&?ZH>ic7L)bKRzM-02q(sBZi zV*>B;klQ#Yc0a*@BNh0G!Fzr)OR&Ppm5xvbiu||ZDsxrmcOC58jt+aNKCJ87fcK-# z(G8f{#VlhbRKDI{gpKUTzgyCtU*yHnUN8`oxBWR_c$6%ILPrF$KX=?MmjQTpS}bM8 zqv?~c#7>tFjj@q6Zvt?HQ8>YvUv=)RfsAkMlnsdo{YNx86~2ZKioh|>1Hr` zC-!$#Ju#VGXhM*~~OhdweWC;AqY>9bCCCYFREa&&m3xhhu}EUHn75nclqx zTlTNZSx^(PtSMia6t-1(Gn3P>@&}`9MAk0~I{E0xBsA_*)uq#@=j^Z?YF-AbPYVf< zp}i&=_or6ZkHY#=KFTb|XRlfpGNSZtk7krZbmsefK`bUR*O3iyTb%yoP9AY2`$bEG zK<$2#Gm4l$7n{1mPg=>>+<>*PWSgEhb?3q+AT%k4g?cPPCaB{QCR<%uk8jp)0iHbm zK=*f@yu<452CuSVA5vs=`Wig$XDm$19ue?@y3t>!5Cf%aC5W~zdF)DWPzVIZ9sOWdxYGuHhWgnV_w;L^IW^?7adc8c!(VJKXFTHgYHI_P@}1+*>4fp46^UO%Kl>%H;gX84Yhu& zW82_*a!dOX*5Rlwn5Im;6NuYOC+bH@4=L7tg-4Cr^f9?kewbA-6}pxUrg^X`>WOjc z!z(=?K1*&xD}ePJ_hg1^V=KiUDiFH!<2ytZ0=DE0*WGRpMB(HTxA(RD2~DO9(QLOy z+(wsHM0ZQ_t0)G1GYSu%Z}f@~`;&-S^uJmyE4zk~tSr~v_wQzzh0hG@6pm*$Fi5_c zQVC94kpOoxPwLEW%5i|Dm{MAlUP|^4N+z~RlK9%QRIhvCt zHIC5(2c(d++xnK{$m%;ES@|vv7mChCT>7%&t5CsO>JrAY3~2cX?_0lWuQ+l+EKaI6 zLr|KF=VsH&Q#P8%tTcDG57UHuoTrz1TliN~1)Om&tq&6Otw)%$r?C&ACWs@3)A{_U-*ITY=C8NK9d+jptH=K z*JZqWWyk+jyI(ip+_1T;eeCn^M_;pM`mna=j}-aa`1psvT*`Nor8<~dBmR6rFqfUg zx(;P#j;2fwCpVn$`PZ$?K1fFDNu6pL-?dJ;Yqu3>EWyYVY7Bbs*ToDE?MYXG>meVd zwpL`Mom@>Zj@x4wMVW7S#ham3tJiuWd!%bp*s;y$g;$7CAi;p}S&$l#7rkecO{fkI{N71>jc;6~ zz(;?0X%g5aDO~s|o~5RclTa1kc>Px?UxK5zN4m|WQ$p0b6;bmrUnw_1?yccfT}eha z7Wb_YcqdS)O1Kd1E&Ag$h%rMxPynyRdiZ{V1nuo{mB?mhFG%z8(EW9YoB%5aOAu~G zAQ#zX@RoNZh#4P*s#ROueQutm0j5)%FR7E?{~&#ke=%_P1?F1srcfwX?_pt-xw4)i z&z#**QX(gIqZBx8hx3GTV>^nYo^fGHfHwIs5-){p2!|SaT!lz8x6DH_zAqCpWE+<^ zy)>2QSqhPIz#bCNg};S_^gfsnC+h|(ZtcM&<+sr>%#Qln#(7Uq~6K z%!{aA%u6`E_0c!)>EFpMD%Io0Ebla({7e{DkLuzX zj1524cL|ccLwj?qOPkM8=Cfg!(JGSpd_XB97#~;iqLrD^r+vb#Wf84o4k=A-owtO8 z(1f>AqO?uZ?@~0o!i=+kY160B{)0Zv4<5m?ouKyOXMu9)ENr!(v@d6sA^KNe8@RQS zj;_ov+Hz^?c|g;%LK7BuAz92})C#n3)TR--+UjhD_Cdawiyk{ZGlI{rV^1+y;pk==^8Uz zOHzJ1?OR#$heyj|R|;3Sy|okYO)Cy*@Q?F5g^U5zY!Ws~!YessNl3bqjDf@h?zQ2` zl2sDFO=TNxQSGWAl?I@%1dRgxqV|&6po%;>1QRCvPFp3($(lTqe3iywt!?%7@63JI91A6{>G;t)K3Zu$A@Qzs#9a`2SeGpQrv8>Tk3v z%D@HW4uflKW|;7vaIGnmz4bAJEx~!(vOdjlNDr@7Ffse#x5`AW{mFAd)c#Yy?^~#q zO}rJGZhn(3$jx?TinW`&pmF&i#eHbQ(I?-asR3kK(wfm#eN>yxndFYW<%ynX0V{?P z&8;?)$j@_&NHn6tXO>KFIq`xg=EpvyfekdR20V0Qyj zMpPMF?Z&e}4RYb7;p*$`!D;AKKtE-D2B6W8Lrzq8RC1+;P0m>|ro?dJG^mv4>V@-f z6EA+>ItTncrUOg%4PS+0&&n52VDpVp-B`5mbGSkA7P7C1tY$s7Lh6(Axyb(wCDm zqOyyI&T0DQV!x`6MS`qLej&55pyyd~^430S*)rDAb+(PBb`3-9g^)$A+^Id!_P*t- zv7=MDs~x&$wim66ZA)MDcFi-$UYBnEu-AqmWWki7HD#U-yJKehN$^!~wUk}0F^{{Q zii2I5pnRj>z2xtvXLXsqQBInn)aI`}34bHVGJ9}!Q`)pqc|`qNmWifEf)3_to}4eX z=puR%M&2yLOg24-V%4$Fu4%w)be;rbBwd~v`Rp*i{njpeIy97>*LHw-Ud?R@+dLm5 zx+08&d~P=~XbiNzIrTDv9qj#EFxZ!1`cJ~6t2;-wcT6^N>!s_1%gDPtBKw!pFH!s% zFmy(TGq0u67ujY6-;Den7kwAXNTuY%jkM5zsgyKxQPg<$u!QMwrD;ObkTiV3t?!%0 z(VO5%$_>1(8TX|O;$->fBGgTJ;wACg|0*m%b4(JMI!;r5wiSXC46+2uYhfQB7J&;{ zXd-3i%#L#bh$oAneBLn^s9rRG`Qc?jk`1qsqUql(9<3$^emnST-E0#Z{GZd15(~q~4 z;$0rNLZ0_R#fs&_KTh{rYwE4<_;M90Fg@Ku8F%#<#mUb@qLpk+@O#$T=^d3w$_e2) z>mu^WYR$tTn@+D^9^5o>6gfCqcf>z{%@v`T7>WbwXgVLc;DIPd9;md^j1~NjcRWnyA{7z#Z|yZnS_Um z)KhNB+GYK|`RwQ4D%0_`kquy@5Bau-u}A` z=fX&hNAk6O<>t74XIhE5Ir0wgb#4Uk?&ruDuT4+bNj%ct>r?wBULJ`C3`p7-c&wyz z%;-Ittuy`<_#5gol)wawbQpX*4NsA z8aw(D?2}9<_*G%@m`b_JECwn`2DbhN(bmaV^pdaS+(r!R6S<&UgS>b3kuiq?HbY>; zLpzsN$&y2Vcl(sEd_zavDY9xE+n^`@Xo!>1Fs@q<>=z~!NfWFF1hHG2FwX*gOBMMr zyfKTK-G^McMo5B>6F~pwNGr~3IP6`5@SLPb7TIjX+HD*je7_RE1!O86!5<#t8~jOT z?|qv5RkU6aY{?-nb5+l8-l(d|7zBlKMkwDt(+s-wUs)I{Y9 zV2IMWZo^w4j#WL45fzcAwtPEj3!Zdq%E2WiMuY#pu{cT8>N9skf10ysa&^B zj#ejStM+DJTFF*b=T1zJmFc){$6!b3;M2FoL>fzLwDQNDNV$bykF(2(&A~Lyf}8a~ zVg>?y?VJ@6LM1zbL_<)?Iyf<3r^y;p9id1Bh5QpeGw)wEUqg=@k`#2-0LnnjRh2d{`2b6+_2Toi!* zO13od(%Z?>uZGhv3EQYEN-Mk9J$G0C zr3*%l=c0hmO=$@a=vY!`)_pUu} z(3rgGq4jh-KPKED4G!WK1-Z_0KunnZCb+^86_31Au3XhHl=7hN_?sC*Du}Vn>!3l5 zlbHg*?jY4tN~r9maWw_Qw;{x=3nq_hX8QsVgMo%!LfR<4&T3rX6t2_+TRlo@B%KQP zRVyb!YcfCP$C{e5m(?&2*4#=Lz9Z-&>&vV>Ci+CVa6B(#2?^&Vz;8e^o2~+w;zjE} z2tQ_q(^iG6XCVtT@t7gbd%(JDZAN%SiML4>HGNqEqiB$?Sjo|~aiVa-O4w?fEYnpa z(Lt0mJQ4;cv^w9Xa^BY&7Jq6=)*sezv67fPLcQZx{)dV{?^rfZ)d~K%_IWbQXFiu6 zK@eL4f1DuP@VDs{YdTjJiB)ZSzegGLl8&#@z2rb;oRpO-&^L2vw#bV@_wu=2jdmT6 z*6NM6sfyOEm3O}`7gEJ^lL$*55?CiHu6rqbguxmQ3+opDrA;D$0c zpMUX>?w+Hon)h5Z$wBt)$yc3uq0@1RPZosO!--3b&{7-CSw>H01&BG5raaI~^w{&g zl4e7_rvSgzJV~+cD8Wl-flB4|*9@QMq9$yUor?jIh5SpDqMim)^drA33FIlqGK_()#+ z;s~w+#)`zbC)`YSB;HgfH9rMg=Gv!V13V9O7Hl^QRuke0qG4oi3e<9SXy|bk4+?-V zU^ZgAXdCc%BEJuWJ04~H7~Y|iC~Q)%EUv{}YI1qTM6JRXke76e4=7^xwc6(^{?AZU z;m$x-CXHQ8EWr086fhGC(<3s2$dT>NO!W?&OZXYdT`!;&u6GI|X}mP9RkQpw*rf{tQELbmN5LTll-k8sQ22N-hxY zL?K^YX5aV<*%5GRu23g#)TRY=c6-q5nEN+!U3Hmr93Qa5neUQt4@X~QE)H*Vjh01s zk?_K^-A~ypI$IIYoLU!-Hy5*==GwpC{Kt2SgB}$uIfP{Cg67M*+|5Qvaku!1BAI{? z_94L9kn8f0>Nz)1;O_z^UA2qaIA^^gXX_%~X|3wt3%gPA0{)jKoECpa7n?NpRAl=8 z`H}iKnM(&LD#QsrelN>=9G}gg?c5R{&j$SumVkHDgV7dWij&F-I?`Repdrwt_(PB$ z=yQ+Gz$ceTSs(jb-b{*#du45vWPkgA@W0-gBVqhPoaj(w8NM>M-DICY(Zm zYHtYcxVW@J|M>^=pfe!w=40jdLQ|$UoMIvAbv&-@Z{FVCdpn{>=k$bJ^MEwBh(L}q zxaK*B9YGTlW*a*h#!AZR>2R|Q*8vuM1%baTovXrG+_^aGXb(z=4DoA$Q>H|@Hqr$teGP#tb)yM7GVd-{6S^Uhm17lmiX5zmzSV`d+a- zs^tjWvNr1wbP-jiL$dRL2Q;VXH_ObcXa9;SRICd!Q@}i)liHn0rM^n6pr#$%jxVI= z*Vg8z#MPwM2DiN8Yz_sqUiviYchgR~ld_UOsG6u_&Ry9f@<&_MTw$MikcEHvT}2L^ zUvZz~NHx5Fo}B=OcmZ+`=+Cwb@ZMdloR~XB3+fgzy0_c*421oXEvLPq1dsTye7zaJ zdrro`OebFL6W1eHF$;Pw%bgU9}T_Z$vH6qiGi{Y zdDpzy^-9%tbq&T&`{Pao1QIGa=3d3SJsPU#@=pwtc!*WX7kZM-1%T?C56R94m5JEu zn^K@ryZY~6%iXt5P2awXk$AHC`*GmQub$fi)qi{1;&Lrz6Tr@WvSPA`DM zk`f2ak#c1)T+n(Kjfu^;UCl6H$Ivw`LDNIl^PIQ17Hv#0X z+m(MqIniGi5#xkmE*pT8&9Q1NBm9^u9$?1sHvCqqm$D0;Mf&%9A9Plg)+f)gIr` zb{dN(W>@(|FbHgmqb*U1&x4Ij8yp$k)@T@m?%G$1=0k$BM-B(;1x^fipE1OSWjCAq zX&g_T=C}B?n4`|8m@fkW&mL&sW&W%Jd_JcH1z;=$@q4pL(1znokLCn~os=Esj4rS( zmC3&ztUIC$U1QGQ#Xj$e4=e5|P^cSDicbKUvB`Kvygm$RHb_yb_L{P&KYahXvbYyi zbAz#Px&L7;xaL-~_D7*zk`05$Z|7g9*Io<&fQyEM3_xYk1c^tGfB{8UjINfASd_Ou zShD3F1VUE;*Kksfyb2Jedfm3QsIyIX@ zhlHo%#L!Vj4S&N3)A8y#Jqz`kKWs!vT0o&HQTjxzsi@v-PUUKQ&XB4(!)H&smZeE)9$c0 z^L37%{>q{fFX1k$4YR$ElbFsdnDFq1fvKX2Jl{h_8rkGV#6BV0`y7*=7ZAk80TKE< z^@$itqJ!yIPbg z65s(o`Gx#_VG1o=Y~}n`!p$%fO$$Ii1i{$04rm3B2aH6-;{amINHu2vB<~nisIh;h zCX(wl%f>>KUy%pPQDSRGDqKYv!UsqPDiY@|gBNxw5MVu^**H%9N<`Oy8a?|-0zq^6428fgFVcGkVd6Rm7m@S0s@rgLKm zNgo9gtb~9v>omnFZ4fIeTS{>_Pp5s%)$*8R^c9{(yF-R0LW~$Wo2(?amq2$A(}P+z z$c8Y7owIy7$D^nK61%!FEaCONjkL)W?6T~39A%_KNgHLWibYd*xzDupgDH^T&%`~e z6~weKNu}x=S2=ZCo7wE>hAM%#pxA^`BQp4WPGl~6#1zb`I=#Z6ZYz|6t#|75(kYTxo zDMtIAJVnbRp^ZjfK`i^`hbc~i9t=rlmtk8m<5YjW_P}J6|K(&=72ab7kv7U^n5`NR zDHm?*QPjPdcgZ&QnS}un9qMqdZ^7wayQZ&t#vA3MtE5HptHqI!!C0PT!g}i;1 zMriuc5G;7D|6R^BVF#S^)yU|s4?PIq6p;gp);~jyrpm7BG4HOzih`7kBsHw9L3a`0 zo3P2Qt?0a!t!?7BiWcBb9Z2Ey#>a&z%~?f^1(x< zSdnH_D7UWWj99fU_>7TyDQ2hqPV7;MQtqMQ@mvMdTVqj1p2FEwdx`^1H@8Uzq|co` zpXBVYK=#Qr_=7oXiO@eX{9Q4;`Y1<2F5`v8b6mJ~I%VA|EBoRbL(>G9O+jczwS(j& zz^t6`F(SDt&wj$xypP(dU@^Wy-b|!1&7^0%lE$_C4+4y zfzK;hANU(-Dst^t}oG4y*0T> zy9!5Q_g-BxEHL=o8OD_w5d?7>xN)Ke9){_I0tn!;Mf07y5{zKgrgJ~;K%EF{Qa04vI_*_J2Xw3njU>!6#~U6?KW;l}UR34@5+tv_V9Y+q>1 z>peH^Fwx$-f`P*E@WZaBG0J6TZ%!UmLb-l6g-dQeNe|__J@(*pOoBeCne9HR50xGBNY#aVbe6aQ%U8RXqBEk`1n$Mx41W*wo78BTDV7;8#OitJ8pJ@_cQBI|! zbXZ)4I;}#Z%|N3=ywlM@vsDJYTj3$rB@4&uF;odshf{!klnHew9}_ zr{u>fN1B3a9MyRe|QWFv}b|{r-N*QzBK!z)#ly;Nk zN*Rc7eyIbdwE7&{Zb6A|>1}b+pR_T%1f3j@nh3`V0*c3K2uxTZy3g^XYUJLUp(UM) z@j3_d7^Cx`a!4O01)3ba6iYeE&n?4Wis~u1iMV z{e8CY3K|lBGMk8ELkF$1@p`ay_F|k=a@=GR2~SmibgrKL-p{r=uL4?JX8k6ALmjc^ zQ-0xw6t}6se^&JvPA(qr!rm#(F2M<=1VuQIh2PFt0pOBZY~eA>MJNbW@Uf@kBSDA~~juB!>;6~)K1K24F% z(EmrVIE*Nzmi(Yc&VhnFK6sF|E*lIL`cRI_UQQyTVEX~6EEf6s25@_6k8Bu(9)Iy$ z{C$AWlQg`$D_22o-y*ep$w=^qwXj5jSMN)Ze8aZ2%U1_m|$9;fs7my;(tMsG*C=4=Tx8#`5-5G&ipj{iqRVf(3SBnpZcv28SIJ;l@vI|GQ46@pg)5&_ zt{T9^NFAOxxp7ZNUG+zuwni1>kwb&eo#$w7z#6kM)d$Pt>5RN7g=0j2RTEj&5DES_ z{(!nEb{hqdc&%huaIyuU$jPbO4!#sleRf-lmr4di+V0pa3Z;-#rl(G7L* zDu6=>S96#NUCb-1e-ZteP0aCLwR4}cw?;8%e8KuK!|9Sk_2#RA-B+oHudaW$gn2Q@ zbDCDjm}cqmHy0L^%1lZ12&6p#uZc2b1NGhxk&e8lYLyG=w&(Bt?O&Um8YGtZQwjAO zf-QhDs-4WGKZPT&MOgH-?>TCBZfGgZ3n>*A)fF%dV$4Q>+H=s-0x~6wHZ!2yRB-!& zgRa~(&3s)^d%AXJ%d4qQwy2%y!Mmczl^&0)mx@<4il+6>=etS7&C9Xqk$y>o&WVHn zTd4jQ$db3tWVj+cH1Z^&g$ctb{a%d`SF7`_tSQU!;#+Fk&fGw88qb$o^tRZsF~o)5 z{OS`Sh1{ub{v`&W&lJW3lX;fUI$Rre8MN1X)pZI6-+d&)#Gvk2W!BjXUQ$k!3*%)~ zoTfbhWB4$Y7)B2<&&QoMu zejYRIbc!-oZ!pk$^z_uCk_pdX{93S8q3TK@xBiSFcY=`af~iqkCAvoxa!_d*=y7YF zEKr-F{$0gg2rH*v#r4n7Q))5tY(C~ZiUMYP6&Z=c({vg~b+bm@h%jfOQQ+$Z74)Kn z>;jXekWZn>4ME9k)5bQXIf}bUd4Y7l(*~rZoa!}(oIqPu$grj+#Iv>*yy zBL6{bgne^bBfr=?BT62IiIWrSp|q3)G-WJ8M2rHJLwYg-u6a znBKbC(82VY^Z2nyK;!p84B^y8wwUGdZQj*3wqnr&?RVTG&xfA8M2jpyS?U{|6M5yn z>z%2yMH2m3lKr$;(B|b~4_4-%iL|O^OpKWx5G}19vYEO37H^rqwU)|nIe@s}VsKA( z;R5Z+lXsM6Su5H1!z4V};$%ba-|OnnwWuQLmTj$vy9uaYEV}d+Vv{H-=LquET$D^E z64F}kz88A`y2d~zqvlDWVhbbV$sTUx>JvI^pVfKe4AJw$ZnCAVe?~}eI^Fo%IbO85 zw@kD>{FQDqrZ?p8>+H@i!5Ewe+n*C{Lr*^(PH7X*ZW}S)f9k&99M5^R))7g#a=C}@ zVzcufPGD!YZk$E>4Zrl^DbFkw{uJSnluhX?a!j^%OpcCcjY-q|^?1&>^7C4_M9InA zckT}Oc8H<)ydjkBoHbSyYa~_xKm%-+3z&bYR5zOsS%;IYrhH9-_ebM)4T4E;A5NE$QD#*yG z8mc1G?9qYGXF!~a`UFt9`F3Hgvx9QGMDFF>Gd@-CtZwT8YgTmYfWHI0=+i&j<#@1E zc?28wHQUhfC+zjQ-gM3)Pd3^iQF?&ha8&m^Y?({;D^K00@w6Q{r{+crLyG{&-Vqe+ z2eRLNSP^de$iSfLV@Yj6_PoARbE#m|a34qSRq~m%SXQVoxi};JQFawW|D#GmP~!wt zcurhJjx&IG$Jwb_yFAwXl|b~<;_uTKQ1xf+S@qTDbB)gfoJVX$oOO=hM652BnZIzF z$Mzh3oqG}>f3ZC6$w0KrRzYJI=h`QzIo^O{OzmFiX7WDg0PUV1~1W8Oh%z zKi1`H6lvgeMd!L0>DCoXMUU2}{E6hS^SrNjO^mH%|l^*qHt(aIAZEz3q-w0e<0lq3*x(dTCYzdMype>>#u`>MEt z=D3~j=|_VXo4mw|Cb#9g*7=$0#l6b2KmO$DbmU?e%UZeDSm>ziGM5Mk_#I!2aQs~0 z0a^|nF|Pakd;JEu=N%4Gq1aY&liA}md0lhuow_2=0&2ZEjMGCgTSJy~p;Z(NDVEjl z9NnlCE+bx8ndi7*#AE5{b5r?0cj(_Io|smnBVO!ovB1O#GstZHsh`u2Wrvf)-QcwRDF5Zn0P=`*!O~5BW99r zBTsB0^xI*M0 zJ>Ha?k?^Pv(bM&LwTF4WIwy!v?rr~#rO*}Sz0X4u+>25L^So8{*;U-H1AV9MyclhI z%(1h+Q%sDsUaOV0xQMI7l=Fp7!H_B;n^4on&}YA*&m0m74pnkh?v0(r+3f`^GO$zt(tP#UN0QJ#R=PoYMf`)4|5J1>{!D*= z9N(B>M#CmUH8YpF<$hP&48yRw6S?0nxhGW2+~t11#f%U_2&q^Ixs&LMkfhR0_wRmw zf5YeTIgj&xo!9&M#M|IZUnjf`B$;1k=6CTT??mV@fS5v#QW0;D#>_15fQ3@K`zNB& z3f1&giVL+4L3QDdSa4u_gf=2Z1E?S~ig*~tIgQ|^G0Jt^_iq4BTsz1QfZPbxC^r+l z7my?hx>r7i_sROTPzKwk7g2fCh(gue?MT_97JMMpM97m#Rv?|+_n-*@wN7_;pKIJ!NbTjSC^LMi$ZNxVj59Yzq8Q0@rbYHUooIA)FiQaZ9WpNEKdyW{05NR|MSd_mw8=B`3myhO;>7a;r z6ysn6E#eebo@=-VponzR=VRU-!faf1U~NnO0R}+V?|Bk_txgW*nfi;o08#NMMwX)kMZxu(Exz{NSdZY zCW*>tv)`)dUO;f#i5%=7GFE;g#P1=|k3-q>IA?Q~$(TrH*^@d6N9~5U0Yx<*r^i+5 zHUI$z4XjCWGDl^^Vg&rQ*r)!qw2_5#Q+^Fb?^naqUSGM0~!ACtD$8kNMPCn^rxUnOIp}` zh*^EjLkgHdp;J?*0L?D$&jc3f(PCqOlKdNn!RVVbl{%p|6t}|a5jCQRcEUH4s`QMS z9p6ciyeC$A3v)2yha7em@a5~9HqH-qvv5AK-CX`Rl0j`_FgL^=$&X8RfG~I;$KWLoLb|YJL2S z)LUmsrBB*dcHAu8kStbwXIE*O7LOF^uAjrnn3>?FbB3e~B9HDI5FZr*IiD|Yif9Z7 z+T6PIGWh%-`PJq?o=&QfneLneR{p@!$Vuw?8alXd(ghqwP*)6tKGzY5$b}}Piut{h z*EmL$FJ*1bBD2TTCV{YkhrDp`6DuL^W zt#F~#lLOyS1uDZ)PZv`y31$W9DXxBSB!gNja7P0B>LCADeq`Sk>d}&!;Y}Q!!w!O; z`I7+ThyPG4y}et${FNAhoA)vq+QV(s=@wFWI_>@(LQt+ym602YEID!3aY zZ;;AE7UjT`1eKeA=E1ME7%SimaJTbUmGsrZIH@^h4m*uw5eqcxOCDo3F z=m<3?(zK$vE)ZlYo*80N8|srhnQ~R5(<&1yEuN#5yIbOeQv z@F48Xx;GE&Q)2k9X#OIEefe9ZO!4&HGrJw3zVH7?uQ0MoE;UnPZ9*_LfDcQP$VS~r zZIb}?f%~^IR{?0XiO1gOR9==$;IeGuexR-gKNc}yPZwb9;?FkOO=MpDHgfG-E_Bz1 z2gwA9WRNlne}(d-8Fd#`PiLZ(Cr<-9l)_R2m}ro0@c_SZbEJ0G%lBt~+!%F1Ii^ZhG)qG>8&Cz;c1O+l2}@ zfY+R0{H4Zo(lSAz%Pw<;NpNy)dvG9L0gOt&#-C(U*dev^kI!-D!I$B*EoC1Nr*n{+ zQAPDh&?LOMCyd_qEv<&$tg}>MXKhk7N+!4P-u?ZM`O5Bfant*zfD_AxD=RTIioWfD zU~{LP7!dXgoxvGuYk@t-y(lzV?(op!7j2@ze7~j@Q}`-ung7kNM)bM5L3K8K(HJU``F*(IJx8_IAF?-y5EI74-g zOt_x2{NnceXr+P)Dmvb0YMP>L?v!L^bA3Y1-ayLRz=*#7~ zW7T%~EL<;34&^x=lYb82I2^~F{~5-4W!&g*Mq|x*q1l3$&WQ`tQV)+d5XnOUsy%RZg7j-qt?|3*1Z%w^=bj7D}s;4BPcG% z!&x<%g7sXf7G(VKeaR%A#Syy^)hG0#=0|*kG+E}<+YjTX%w1|fE$@~lF>-z=K_w(f!!|M8;|fs|QKkXh(sEnE`3Y-aLE2Bw8GSQ5u80?|Uiy>&)M}be zMy*o5(JeFxEvv-g#yov7aUH+0>=2-SG*Eh1tbg>yrx4e$37%VtuD6CVh?c-UooqOf zj}((Sdje$Y45#Oh$SG!j+7Qj{6=Q2G-qeJfeGql&w2S&6@DboE<-2!bi`jWT&p|m%fM>nkCK!_Rj`ho=e;Io(GRB zlE>tr=h{s^&X=;^|Fe9uo;$3<@18lc02A?x5DTbDe*!D@rEol@I7piK&1>-B?QlMq zcIZj`D;d|2(KLT62jTD;JZ2`S&C=&X+WW~FZ!7*Hihzi;KvZsK<-x{L=v6p-e*`rB>`2VG6tDYCHR_|MMcsYkiANScqvn2BcYY@n+> zX$;rZ%w{`rDKof%zhwG4Q{g{RuFO@p;zBn%X|ofk;A-=^nUR|*hIbx=ePm9wth#)I zg-n3)N1akh6Ol7(#j4I@FH9m5*DjKsW1=^phNi+VVGlDr%Vsvba3R$5RlQyMTxZ*(KMN`O4JErM)M}RhS8kL$MFktlh@+gXCV&!#HOgb_bOgt zwe>{vGU3v|eR z!%;rc z`kS^g+XH4wJf|$bdM?JTzCtg&+Jrs+*glc-f^=*=6%;aZFM1@dpU~0w`19VlOi#5L zXj$Ij?WSn$IXRkVcru)vG-|kw@4@p)@Zv>z@qa5hjA<75$q&m-LQb!=mFuYEyjRnR zw~{kWdFHN)2(u+6lEFAwzxS{po`VN9LL04%&U+9)`hz$MG$L}G%OefHZ-XTxq6x>L zBSs(zwu~diX@p{z48CL5szU7hu-=2upywaREVFP(N&E(c?J$k}+H1_evVKji#idO_ zc+vRS;f;A^0c2aMiv3tiBo7{0FDOvo8V2G~dM7F~t`N7jO`6ObH4%K055HWG%x&Qr z!&c4ammv$oLOzSzI9D>TC#EQ(b1*!vpvb1{*hc-a7W9?Xia6ZPRlB`YkWhv4U3hAbF|6RkHf|!UDAGSSe4?t4mj$~!IqgJ9I`5PKG8=`36*gEGCw-E zmF3N!C51m@X0H|F#XZvIwoW+N)vWV<5+^CKgUG%SPt_>x1vcVKLry6rE zDz%g2wUnL_@qvhnDg5bK0VYmn3onErs^w_ zy|JJiw$fq2Vf*GldCMR-^&D9(JRjb4VvI6EfiCH%yam z#mUn{tY3>TwYbaO4}!+!E~J(ZoyO-ZtJPoYvV3M8L+(bl_+e3PU!Dl23(Sgy@t@xxn%>fA^){Jv`k|h<--aSP$qL`CYy1!DO@} zFmeDCBmUyff~^!TVYj@EO@P{E&-!$qA$aJ%JcCR&d|*s z4u#=W(YA-8Z7ib{zT65>ZsXSUWHryjT#LYB@ln38kdn}&y`lYL(Dm)be;UINN*n|< zU9Ys0Kl_HZgKcluIN|?J>mXPON@E5lcLBXa)lYIRhCW5hSl+F5pbsg5vmVyO>m)JEPf+g!_A@+ET*4R9@Kb`y9|jncV+=dA9}4>Fp^-LyH0Jqh|%zn&-uL1NwZre*GY zeVcY!wn!V9xu#I#sbLv4yk_Wv7jCJ1AmXi<$77RQ$#+5?|J>e`X;#p8Wj-6YM8mLPnUG5sJ3a0XE{*x9=9^6iG+xp*ddV!F zmV1uBm^ZuS+!xx0&r_$yyY6xT%(;0G2MOx1xw#Ur8~1AxF4ptj7Y7_Wvm5t$<8i~; z>$U&lo3~oHVdldCAo`FGhRrYOMAkUOMBYGgwvwg*=A~Y=OnG<+3%9*@u2YC7bxNVb zlHHdPtZum*)L5cr09^nm^{meml`s_+eDlzJf-pi_P<{+)p@A}K^pkjFbVUB#Zm$~` z^(~=hC@$WKNF&>jFqeZ>GeLzEoJKuH1*O93)JRfs#B6fNayG3F1C;gNaiEoiBTefS zQ>F?nl{TW)EgfAXrvVuUi4*+F7OD^7XMw317Mij_zOsg24ZhAAb8Rn*0N-nDTMPgeJ`mde>)&jPyZ z)X3T$$KOYWYF_;JjGoAs&h8kc_m9@0{G>H-vw1{zmCmb({I%IoMXfp^pL-m z{KaN1Nv0FcA-_}p6$-?_I<4N-cSYvjKKDSSV zn)P{D*xR^z`erYwT%dlfYg(50x}rAc+A^*0oejPJiWQ1zOq8-Ie!}JtFg!d0mmZP+ zT8lShXRyy&DUSVe-Vo(T8{Ih0Fy{d2*9ph4XqpRkLZl3ZZvLG?7u%iRbsI>n-)+CR z`}^~WtXF_kn@G9Dl>XwQPdfCX_-2zyt2^`0L)LZX-(Pp88EkG4j?I;yREdWyvTrco$BooLm-hd6;ON!%GhIqqTZXhrKqUEn-(5* zyA zBV)~=x->}6H~+l)mZac2Bx*R_Ae;CsUP5=mL}tC9sLcl{)ly7OYtO;I+iEyj2>-pB z?htANuZDOZi=@`$%sc_fLd-jjqDg}0p2I?Q85Y96JZ|Cd7*O5iT*iT~<4w~2$X6~~rTZwI*o;`#O#4gk4 z68&5whhQ`9i&A`YbED*UxL;6@1$1&=6Cb#mH)SKM7Seh;s262l%A=ADRP^95ni^3| zLTr=k)9<~j4}P)Ek&ru^4L%UH)A3v5u~X!rKC1zib|%%4>UCsHVf}f4tAYOnq~9y=2AFD6X#Z z@u@%l7hHT|9_#=uFzQx6kRy7oFW}YX9&c5DgxDHpO}C#vu)VgCbte^DEE#t(c=BuY zMYneaDrh0U*O^_9+A>$Y?Bp_EeW!%nb5tCaRdsMT+5rom{!kL>uA9l@&JzANGI~{0 zs~ZqZ-YQ1uLOuS8*Q|{z)wCRq ziMstW%PZ=e*Vg@8zCKrYZlXV~sTCvIQtMOocJ&p~=ge5}b*kSdatDB7b$&88tWg&5ISD8OR?|3&~u#hL!9srtgru#wmp0% zOHnclIx>LUnF{}w`^MF1CHlJPvGAT;!hB}K=`!Wm6dU!b+8%`v>5_%psoxx1mK)VI zC+GcLRvI7dK}-6N`VaCHUcZVFVTbjWUODsD%yLGjL3`4}!6*j_bLNyH|SwtU!o z0jZ z8j|wL;91k%hWd|#H>Iw>Jm0=H>(KGE@N!?5rTgzE7w2MoU@wPWVh+JN#<_0PqCWlv ztfdnLl>MMWc|0K5FvdX`_4NFxu0Ui&%T-FTuo%AZ&SEXWJuqcZlqlz^U>v=hk(dK?-)rgC@@-U!3x^kRszn6NaTcKEpaa#h6(? zn91TLiExv42#|4XyTGjGnN%oE)>)&SAM`;5+=b|F=Ffd3Q$5E2-+rgi8&$EH_q5i| z4llVN^j56*L-L$JzXxBT2cONS`|@dI@W+JQAJjC8HNC@cEg^1 z1bN9z%JHBA(!8E0jpKrvo~L;Li*Yq@4{Z%1c93!*XtQix@F=Ty8)uy8Bg*P{L98BD zhNT}?zcZ$x*Z+$^eF}v-CG!g`0``&+U%VtTMyspc{hCC) zNPgJw0il6LXbdQTNYB%y2vb5YdiyzuPDS)8|Cp?ZA2ezgn6T$7i#dpF*n5u$EI8S zJ#vcYHs%JQT}PY^@|;?StxXzF#IpF>tXhW`0i*Ia^)_us3+-1J>8~KJhu!CRmW=eQ zj=$Zj2xvAFyV)UeoB!l#S*fqK91j(zIb=aI=Ci}{xf6n(SP%3ES{^p{g*aaY9W^qEZU{6-(}ms!$6m(@};4I!oB{Y=)5LT0aLcJv#J`cO!bLS z-u}89gD{0w9Hhy^4K8b>wP6z5kPdE@Cf8e&@jRiy>P*}NlgC;v4I)l#Nnm=wDSy*g zv>o=mf9xTjJd1}V(@bgNj-v!1;+SU21$@NLkL3I@C#ZDg<|U_ZDDxcoY1zxJcG8iG zwRPOa+0&??X|9Sf{=qu6n)xgHAFtGQT&3-kEH)J?!_5lFW^OE@=%c@)?%t#Ny>Ws#&9cABIhPi(p}05ep1=}Ds$;RDMzv6awpRY z+U&QI3_oeZo~q*;_2HP}xW3boC~sUJKKoW;tUhdUOXqOQ;ESv`n)3I}&Us~ZW!kGL zX){Awqd8iBCTPz?%dfse-g?a5s}G^I^ffG%qjmkw-!S{0RQd9~$sLn@9Tv3BOPuR{ zYto?|{h-UlxQS%0u4jdP5!JoP$c3N&tbvwY*g9{{?%?l{Q&;{=2%I(hAf#TY_LUV5WYXUw@mrTWpj&g8fKy^&1j-+f;OvM?&$neR(#YSf`>v+R?BT@cBTKK7Ef{YJCm<;^e zhQafzB=F8Jbw5>iG4iiu#-J!aeEefLyluqW03%+wOjAgF!)eq!U_1$;(`LMbRr$}B z>zq~mx%ts%G}tUZwjy1sl^RcCNva80M6>5d4=33f^H<|(BnuK>K|XD+ljr)uRi7;0 zs%RXE2jh_mUCN7_BG~HH!<)6$S&aBb^NUgQDOf_7Q=CF|z5syYF zfSD?r%g*(P%sm@c`ni(GLtWYia^K59)t{mw$gMgQDMVTT-Lbo`QH3Bp^ zO?u{iAvzv>&u}m}$N?d_l$)7GTRVOFN}c1*jX?a(CjZ-J?GYpQjkTiu^-~;be;%rZg{t^xVVq*+`PAjLedQa~>N7tY_1R#l zW3JU!ryunq=q^d$xTMP6}epipS=l!5p1Ri};UeWcq>m_=t+lO^5LUhyc zkQ7G=Epj03xc^Q`rH8J6lY=C((6%h7Qei;guAboY0jma6w{Hn>8qU835=0}2d8)== z#L{qBj7MDKJV3^ik3kv=|B=cqD(!dhu;T|oRpWtBw1!AUulW=Pr+9G!dnU6;H&fm#~Sa@c4S%=+>2iVSUdwF@;T{Fzc#KG?;%yUp?1~Qf&S0 zB88tLnQx`VQJiL9ikTQ2T1vpBu`HBCClcFeO9^I=ncXk-r3=YP@#(mq&(z}z@N(jO zY#()%jI;$ZeUyz(oo11d5&{dxe3;pdkDY0dSbAQ9<4>jhssxyBq^B>9&YY;~N z^qoH0RJ+)RNR*847QNKJ<$;-bU%h^(sgrLOCp$C@ZAEp7^+L{A2z{ZP7fH+g(+BEL z0`(oibx;?~h523rI41CYwHJ*)GdfrJyL*mIg}JxSi0V#i4TA)V)yJpp5mp3qpYO=)*=kMc%4Xayb@nU1W761; zF}R1ryHbI7g*ARDtg7VJ*8Lqndol0>YgLy?d~2QKeIb|ov->O?bnEcf#Toh0Sw>^7 z-F;*1Acy*N;{-#k;FgwA(5Ppe-YwLzX5RaVw82+dmCaW(pkY*O{KJh582He6!x#f2Mbb zyYOc>NBjqGnhrKPCZ#e4AN+|I>i^D-mX?;inr6ookl{Cxbl0#tlbdRBn04XCYC3=gz$X9S{?zRY7iU}f zKt;oS70|@YJ{S9*?Y(*hN584)XzDl}s4Y;XV}PBkFUEk2MLhyNmYT{{O+&>R19zH> zz&1xdsPIgnj6KxO(`#{9NM5Nx=Y^MttQ8eJsYM2%*m}x1k zDS}tOME`j*4DYqiDz!@}1X=^){`~&Or*rTcBrB|=iCeAr1ZD6^d4@QB_8v_?Zd(c+ z_~O&sVU7enpH0FR8u7;oxfLfpGy!FZ21Iw;2%{aKJz6ST+xC`}6Qx0Sy1q_Y`I191 zms}gFY&yslSl@BoZ#E3|AhVWtgUS1=z5W;FChz|IxOFF6Tg7j=m8##)HtE$fFBZKm zJDFd3^AD4w(^n$*(B0&?1W{8!;eBzDtbn-~oysUFGe@wjK<}ctc;kArRG$9MPwzb3mkjSCz^9|R zICwq41YxDIkYv;$XU5F4-&vhX3x%6)=bwkHL86O^fq-I5yA88waYUw6OsMjJbhW(5 z04CSsRYgHnn9sYZ$fokmRG_t1c+*vj+6A);`Wa_pLuV7hs6ow6jf-u$PdvT>A zL!sScH|o>GiZ1il1SMS-(6j@mU(Q{=p%6Pd=-=vFYy-yL*1EX!$Z2i?tw?(+j)oc$;LZovAoma4+YLbBSwXa##XHrlue%* z!E2XCL%{I$`My-Ob(acRGl1d+)z5x!q8n9ybdT4B>Zni8Rd7W4V>YS_Zuwl|D}}oQ z`8BMK&n0TO@R|2&H2&))K(M$I|7?Y9`j<0jRqh^fW_@4iXC=3hG_|Z6LOdx*TilrO zakl_y`!qbv@<(K!indUc2p%N(O03(cYIa;efDMW&XHoA+y?LN^|7TX#o7T?p z_KARQpr23X#hKc-(0KoXw2yIbWMnm8WNDuLZ(xskRUqL_!`!}Wy{ziz>P>JQmFv^_ zA%WZP1tr>@X6>!k=0{NCeUu^%l_>|caUKA{tUk_fEVcIkpwBnVC^X^c*qv4 zba?cfN<;>kNx0WVX_u2APEqKD(uV-(>4=f65i2!tX9x`{ifrtY{6wiy(+Bwl0RnoJQL|S;Wd*f$3IMKXlWa;R~z ztI8E@g^EL(G;d|jXd!P~DrE`POLz!b6Q?TAPWfrQAC=atxs6!RC<>G)k=CqSvT9T* zc?u?EskY_oWn{m`?P))trgGUgN3!dUiZv7jvBeITH*Xllrdprh5Ox}QX4P!tL`lc& zIZtL~=&LNYL6!Vn(1Mv9C-R3wEeR;(Z(a(6GSX9?En{tFCWMA@{fn6Q;rF14rgmq- zO@O>Q2u{qYHCE3zzBKLqr?IH zp5M**elyr`(^GE6p;xg>CEC!-C4WMAXa%7d&rjxHhTnnB%0m0;Bxln#e$yU-kR7J56al%PwDfT0@nB+_USN%dg4v zxp3j@{D#y3N<7N=wP1Ej%bIw}2+AcOV~u6f$IAN5lMUXFI@$xPV*;i-z8Bu8 zvEaGyE|{@4T;t8OpRJc14zWIq$;S0bT`OV5X8E>V!I!<}(cUuAXUQIhX)K5~O-nA_ zc8W4uOQS-!uCzQOAgAUPzszJMVg`(Im;GBL9$rZJoB|=l(MooL=A25~xk&6g+JN{E zQpuaEu060RY5P&yMrI2nf>A^`#GDma3#7s=N{{wp?H#H(c@HGKMmDkemKt7SVxGc@0flD>j?Yy*r> zd%uIBVH;T$R$2V#Kt)`ls8*u|3xs@qaZd?LXC{yukqdgy_8BEy$Pvu2@;Xr;k)A&^ zD?owj)}H5n{?ywe6>SPU}0^ou6h>)X9;9i={nwn8KkCCg;W8s*PkS6^XvJ{IGuO!RwXO$R;@}_rWHl zPQ4O@4f=^$_LLcwdMvr4~RW245`-W}HVniz>W)Lj;0IJf<_Q?M8=@2g7=_v#n$UIuckNoB#+1sF8xdb+yoCN zCwmM_>3ts)KC$J?OXPYG<*8AmzWEf^m~ZftX+YdPe-CKrj+Y;1UHxeU3#s!0!_0j= zU?QGp5R%?+rOx=yg9TV;^uTHF)XzS>sN&ScTTeG!{_IKaQet}WeFzuifTtg|>6GWW zP7Dk0j`N-yz8WTzdg(1p8Sn4qiLY8e!m1{#1h~`Ugep*wMPU`Tkc!oquy>~)dxu5n z>Lr+Is&E@+R@@LtD7);V>Tg#fGLjyUD41YOH%cfKi4!3C?X9p*0)M0n4Ybrq{qaQYX=-2$qiT zFnoC2bYxuku1xL~pWJ7XyqOq8o)6+3^-9~Yf`BUIX@pr|f!WJl$d)!&E)xa#YORkK zph|{StvkDhn=3o$s0yLgZ6td~&4Y+y9dNWb-qh6V)DB4Ip9q=rZGqb`Xy)5_e*f^& zakBrWRc*fDr%kRBR3SrEc86}&9u8Js1FaK*0Dswr6!lj=G6)JUdu7>I=Xk`bjn&st znTfZs*PzpW=t6rB-i74i5VgG4O_-z!EGJ4Nu|IlfqokHb{bCzS@sELODm-8)%x;GS z|FULnmWZSxiZG=%kMvFOT%=9NDSHbfP4SaG2QNsPILtL`BS_hRB=qyTdMLZVxag8x z+XUP7E?+SpTcb5!zNerwz5o~_y6EZYJWyriI0^QU_cy%4>(H;RP((Uf$PNWBX$*;o zKnQf%R5Xdvy8(EQcpgB!-&ocCH3$Fi@n99?@TBPQulR{cho(o>kKa{$ZpTMS2VRPC zd=lvR6sh{+iMGqqDX-!{jdWEwn#;!yZ{Eo@Ky`P;LD-!s!7)A%x1_`cE|=@xVDTRk z9jVuEmR$ey%f($#>n6;cS146pNb`Xm#B=GgeToaSM9@uz%N2E%`uSpOC*+SBq{ri& zr*OXZhUO=3`0frW#nn(IT z0FoLBi5U?-J>?E77p(Dw@Y%X6d693Lc)FEp>KchO-)^wa*PIkKaCAxGU%^xq8Jlcy zIorBK8o4vRMl1ASjGX9!zpX`5VDoS6Lgkgc-_U~x4P85>HT=%Ji8|9=h;c7h_*CTm zJ__r*?(J=QHe$n&8dpNpg85R8-?KelY!6rZb)K!X#&xh*NsvtE!1xA36jgx2X9_NA z;UV5#7rTGaOeNj%UlB*4T2zyW&WNzM$jz{wbVtcB%7$GGcc%DwWzfQ97gW{jZqQc- z=ua15Qo_BHg+K+b@8uAJJ#Voe`k0Lo%49_tVyuYc?b z=WZkyEdpZkGR-@u!hPVp4}0bo!k*ZLhr=V|BNW^iQbSR3{tTu?H(8LogsLVdHWtZ! zoP3UeIR-R!dCr^6kZDq}ip`d`N0&-gNf|r#+w_ZzJc)iSC@d-+<9kOQPEhFVreNwZ zhxJnDpN0rNDU|}tduhiYdp*ysJL7@?Vi|gYg3^5X;x%=(NTCbjUVx7tvRtZMkZ{}Y zMF!H3?iw!&9F9Pk`J(nP>DUcCbA>2SV4I_VseoHV<(p^io(iK`qk!k=sOtx4wsm89 zZNf8@CE>(j5ULn}r>HjGsb*Vs1&s1K?A~;kS-bx*^Zo$o!FN89$=f;`zY>{U5k{XI zPnWu}3q;I1xfC>c)fdDYrCmO)p~IF=WjCmgZfKRPYb9@Tg>m8o7cLW`V9$Q2JD`PA-UQjlVcyF&)^i@a6T;f>Y`KDlZD*40>Pk11RY3vDnPSZARJqwG~W%(Z$ z9hY!$h5x|nClN$E$ol`pl}P6B6kY>Wb0+1tu2i`Ww2Qzw0x>4R0`y>WoCuEI%kxcL z;3PxapLD3IkTd!WdoJ?KwvqSgSe*|K4ZZpe|Eb1$#x6KH1d=yQ(p4XO8QmIi#hC{qoV5$~zxwU-_GPh9K zzPe|0nL2lcnmuWeZAL^EB!e!SREJ5=a~QeBj#|Wm(2+Ufob!WS8bGr;fbvMjcK-=q zfCQ($soY!FS8>;%7M-a^oyT=@-|CQd9Z7GJa}$`kyR?(Z(_MYv%_M`RY!6&sDuj9z z7gMUJ7KNQ9`U75Z)^{1DffWki1@XGg zl7=sjymkA*)Ur|!K&b~8sZzuec1N~evg?D1!3{JWZz8Y}wf4;#jOUWAP?AKdQ3=46 zcNNw#LQ&vu*@9Bxl*-@T(f0VWo#tm>8Ng%5LAxyuk1`$3`8oiVs*_?JJP@xoW*o+K zU$H%n9{^6M?tO5)ob0yF^%|3$V2`>lpz3@&nzHfAm0Izcz`fFGj0NRd3+hIke{j1NFFN8Voxg z)fhpR@!)C{J!sItWYzF&7d^qh87Z!1O*$1h#pRMtDGk|u^VQ3pr}=7S>1Xw-`ov~7 z_X12&%LnUM(z4$uu{Gt}{myd!oo^xBd{`n%M^>&-@Xo!O?t=yAPN z(0G{ulehrTMPw|CWGrK(&oAZeeqMTPvb;YMs+J(6UPVZY61uS^j=<`m7G>EC`_$yB zp0jg37KN^v4Y@4sCEm;D2(+h26h=a7 za58*1!mQ3gj3eUC8x`g)Le6Lxf9n1gt?&bHBWsrT-KpIQM~bOr{m?~EUrPJpB|uu=?+|Y=Tc$mdEFRY`NA4a1Nc~ zC@|y6Eoc&R%lZB0N;GyeMYCw#?VwS9SL@&NQ{Q=EU{I{;aAr0x*#;^{?4PfPEAgJt zvYUW;j%5q>hIkogl_XOu`!q0@x-er$aVbyqlPQOrYTVjLSTBSLv|*SW<)*glat^rU zcnM#RB~eaSW{7j(LUEN%Uu|imJ){+>>`UrpxJ=<3JKS$NY`c7a|FpAlsub;%n(1`Q zzEwjoZamnrr*Q~ftdOrxUpGer-l@B@X`S!0Dv<`agv0}RkUGY zYK}0eG6lp)b5vGN_Y~&hw=c%L4~ZnQ+zpM})2AO{zB~ry<813R1<_;tkM=Yk&g${U zO{og-9&A}Tx*kDKv7|x|Vngf_JtvkUrlVC2ifU$OA3a6)6q)H`8;UK}|FuG`pmKI7 zvmPERVOv|nCw9pUr(QcJejLKV!Cw<0m7mXH1u^>{0AN6$zoby8*W7^Jb)hICFjIk) z5Rw2scbtofJfxyUNLK@-9i=F849NB;fy$slRD`D3V2V5AbB<0+yM1t7cH3b0t~S(? z_d$2rwbZQ!nyA7P2Oso;iG1~hu#|XNi+8_#^R2*uGb#zViZV=j(2Ob?fSBENFBsFY()%*jiamR#~_BO(d!#+9F6&-qV^z8_mV;|J<*!8?QC8wTjeivbRv1yiKH* z8fvQF&YEkw-*ZjU|19yM63z^8q9F_D`n!q19caRd1Lraz&{kS%$zvtZOk!CB8f|CY z%O7l~6jD;2Vv^4dYd|1?S!RNXB_cE+imBm_h(i)11Be&Mc;p2-KFjBqf1dg2i=V!F>T}2aO@X-AUiCD+=l-eYteT2WsL;2n zlvkJ-f{IrbZ=5QNR!S)f-|`oU6kGN>+W<3kB7g${Ag3;sGKzUYQ={UIL@@Hehb%-3 zDS==GBbbmMX<;c*;9Uk0@*^oEt060)oDwiH{}wI~gbOqh-fu{<6XDG$C23E%{VdIH4D^I7nWDA&aI$g%{1p%UcL(!hVQY5~@gw3WzC-C%S+jE8L|rmw8L2 zOyLRvf<=gy>H-xyL#eT3$S+JJ4S(=r#Wfnh3X9tcRp3YxCS-<)@)C&R;#eBcBvCPI z2_hM`5GmWt<~E6}%~7I@HAlM-YiB$*A-(S=;` zLmDP1G7aG%i8P_2-Mz?0xD(z@H2Fe=|Ii2|Ps?34DdHtEZ~~FvV`n?v38pc{vm|I* zQ=7V1PkbU^O8C5IKlgc0ecCfNbh^`>2)ZYO*2xv_Fa;${(X1#sXH+9h)YPO#2DV7* zQUojmrVtXqNomvoRG@i2z*S@d z>4dvnp~eCQEM}2SN@E+>ki}M^|FK??PATRn+0h9kEb9UzX#F->_+*SVbnTdG=`}ZX z&8}lj)7Wg^qXm)VrfRvB6;ifF${W?j6<`yH8;0AQ;i{5Fo5IQeHgz^qaHwq}XcLc7?-k+mIc;Gh&Jr;ut&K!nQ6 zZ#1V693?d2FCJ>bTY5@QV;O6uCxP9LU=y3$&FywLdgn>RfU5Sq$ah}qW`#ZcVGvhX zd0rZ^_RhCH_0j1KQGCf`U7VON0#zW%X8=kFBxRp@j2XI+SAujxu>3hlp)4Yh zDcq+N+dOAUAhIHfIGH3*|CS&Iqg>@HpCkz(BuPp}^jK$wQxpi{U?kEbi5YoQhSwU2 zk(VWf5p7{qKwOO=lX#YS4Y4a-08B#;!$&@jMqiB0OISw33Df|v6M97AU<}il!3yLQ ziSY!a<4Bq*QU$W41LRpY9hoXnVLu%Wpr!E$NJ6TnETkyK(SFFZMdC&_tZ3U((j&=7 zE~Q49v=56OoRu*`m|045-o8GvMI6{5f18nb=ng{@{dyl6Wn+Mc%-XkIwH;R2U0xeBbc zRVfVO@>Q76#*Ac^daM_kV7Sp$pb}|ijVTc3Ucr;D0&g{d;TGlvHHM4|p3u9!v{DeH z3FITNAsEvl|B0%&CBGrQts9PNZTf+}3obHJsSZOuUcXM72%)Bf;&D zyi2!%EV?k3=vm)7vrAzTPQddInOl-ZVUloA|0QW)LL~9utqU*^0hj?4xoUz87rF_F z)1C)wh~HwT24kj?csPV`A>87fl9(tGVUFg}Cw)qul4u?fv>xfn9uhpk4vd}_`eX_%X1upbAP4D~upq!9XbMvWB3XEn_!!Qx=m@h^kN_O@JYg*gpfvf)DZuH4F;j ziNKTC{{lo)i?bkzJz5J2(X+LH3$8E)5J3<*+9fKOG(MCRzp#Rn;fksI)Z#j4F5xOA9qUc?@CV3@Z2xu>c@JW1~3w8?o?&{pbuYn4eT5 zi|(kA*tm^Y>&4k1gWtF{7kV3rI1ebCkM}^1WSj{ua2H!}jy7WwX!wr|vkX{)wsqmSB%kNc<%F2E(u@HSrJr2`4KU?Ri;8?dZUj!l4&ty4FF zFd>(5ytDYBNx+CH=(7&Vza7z)U6YZg=_YZyq;UcL6K}HkCUf=A_*STYtVfk;sbg_xC?`bt!JDVg$0 zveXD*p((0U7NRl~FBuWaAsaV12qs*GaTtR!6NslWJ2U$UT`7ujc#kgNf(iIY1DF6Q zm;myC2~toX$73tU9ILT{5QNZ_yXYBHFok$|jDUd;oVk#NIYqS^DJBG~)|jiGIZck) z57cuneW44}jLfP~tj#ooN|+1N`ilMVJb_rfx#Egbuq)2UEX4CGJ#iNY2_P$|{{*?Z z83(BsPC1$uIi=>Lt)^KHsllzc;Vlf?i0-1W2gInHq(1R9F0z@8>*Eyd`=5~*1Mvet zoU5oO$qxnV+ftc3lLMD=1XmSN5IIz>_fijRN{C0KwZU;vlV9L%{5ui%1B z;1B~d47&JC15hv#lBWcO42NX69ccqr*tU{rKzE{+NScXIArZp#lHdr*k$lm2a<>tb z$&-*#8?8|sJqZhO5#o7|s(^|gRgD~kj3f}kYWa;EBM7G)2r4)T-msvvh>3NQOpCr1TDw}H$;d?a6?ky|B2V&36kJ| zr687ypdh8ti;nVyGsVL_Od_sWBESF)Q46H77&MjuH2&Zsgy0m;U;?|~iU3kYL5-q4 zDg}c?ugEZi2T_ek`-}HW5V_b-zQ{BpQX@a2#ZH*C)G!UxXoaKE#oD-4MN%Y*pvv6Z zf=3bwEr^IQ7=>C=4&n$B;;0c0871q0j_2^CHpmL_un+HGHu2adX~~~&bfIY@5fc%E zEtn5&%eJKW7IwrX0EtI+B}66?upB9xj+iEdpn@e}!qb_8&8US3F#vtlSG_2O2#wH@ zvbVQLos;08WWk>k!HJ^@5)&QJ9I2L*5FQfE9dXi;?<)ygg$#|H|JRZ7up5O@82vbr z3%N5f6Mt$5fg;Hr;hy6u9-j=Gm?N$z9HB$0!1z>3OnFL55IWw7h^wo%E$EIe*c39D zf}$ybtS}F+j1{K^4uOyWu>_7jqidqABORoi6pvur?shOmJyJ!)G zVI6}w%}arBs$7xSzJyS3*#IjQh;dn)vl5z&;oH1>jL(djfa%S(YK7M;jGvj9y(kQm z87a)eOq@9@1L~;f;;en`8->xA+7!Jeu)Dk)EZq|_{`k+4*%{m98IIXkSGW@essjDY zlhp0Kcj-<@gbh}R4;SGqoLCO*6bPzGN>gc|iVQC0kdE>E|C-}!4ZF!c=Soi{D>g}y08l?zeVA$<~v%vnZ=$tF9TQ^R|G8t`Mk+$EZb#+1pJWHBZ)$3h0Iy4 z*dWc0eT%MLCX%oykF3s(-}#_Eg%CMQV4ddCSO4aPUu5Is>DicG`=AT zE~?bUU=34DFVWhIR^S)@EDR@-mr^*0K7+qU;{sER{~`hz-M%5F0&<+a7z9Yc}zeA-9S6~I!s0C=|SI#+$4KaXvom6aIfQC4^^>iT>(Zz-wIDzX} za*o(<(jFNhIBoJ0gLPnd9!UsB*^^93e-bEsR>_ssXMQfZdR`NutXZKXpP<}~Ru~mT ziL>9Bt}Or^4g8=5Td7|S){!`yB|AD&;DDut|EaP(6^96pv1F;6LI`BhFL>+P@7X$^ znvl)lke;{}rs}D)LyCw{2$+^CUEu_{`$965+6`EnvZ5Er6zZU64Zv_sRjh<^DXa&n zKKO!M=5&lou#CbemryMufq1Xc(ai!enWjD~g=z(gSxwGhz0gTXMpCB6 z>2L#6w$|=gwlfb8PYz+&&{oXe|JG>>MyTgh*Yf&!Fn8>>M?EifJqf^LBPvkP zpS>~!`4DDq2z`y_yq<)hs#k(#fFMAKHHm^PLxPC-))ZM-a8*VcQ8;F@$eGZUZWN)6 zO-FXJRUOLH3S&Yfdl8J=ZU8PxlOHTqlW{#g3L^oUfo0#Kd5)&CcwE z8)cu*)?xOFZVgUBTCW(1u4EObwRTqd+Nmv--v|!-I&TcNxvw4fw=8#ZA9t@+rmiCi zM1tO_sw%b})=|g=YUw7b>Wv8P1iIT1#8jJ`>8`8+kGvlE_$V#GYXT18l)Gq`b;+y1 zTh7$YGrk+F)tnjss1wus|GWha8V7kjg{gvi8Jf>XtjUt=iQ$jhBwfMn+};e;n{mW> z@!PuD3dv-R*^sS|@YVDfZ0%&e^8>Di`1P23>~3LRqemMl4|KZq3L$%vbZb9a#!tgnL_J!b$FpM&V7!{j0$9S!yRD+8`=&gZAcY8niOf7He3uq-85zs8L3h=$sD6;i~+4) zw?h4>X$@2@Pz`8-$%-XL18v%#HPEGs7b{+>STS%Hs+A@Nn)LO17O>wYg5w&PfS4;( zDu@j*fm{Wu|B{8R7GieAs+Fm;k)bkKV4yNolV_tqMGaL{*GyufI;@I#)XCYkX>Wo$ zdN~fGc-yI2m{t)RY@jyA>oM0cB;KWmbV@Nn(H|T9~w8SX!91pd?#B zCD2n18jzrb3TmNYha7rnT812+rGNnvRF(vBq&+4ebfcN*B25NxFvS?7(1zm}nHVq% zS2!v-%14p(_@j?QDfX0%P`Q|dVjBpz5-FsRK?*CRupv_`Z?&?eWpB-AKowOq(SVo+ zm{~!E|6R60P%CD{WeS^amf>cbT~@(_VP=wPfG4h)a_5_3mg$!#6m2O`m+s9MS)m40 z(#E2QwmIKqWHxY^oNgK93Y>8I2`HtC);XuCTOtLOmV&mqP^(@ZIFcq5D(KONxy`ha zt~2$B(OW`61#D2m3RM(TWu$tnst`d$1{YgUNLyFZa>ZCzuyMkeC}b(v>qnx9@sUiq zzCYFj<*UHBrG~hCNy@RL7Y{>se~j`&nEQxOv&4?Q{ue1A6LP zU23RBk_C|lWWi%t-HP<0#&Jmt)k<(d#fGZ93HMydaZw>!aVKxwvdb<5!CTCa&5T&h z|8d=XR?blEY(USw0Rcd2W`Vg=DX$1r5>$W+i&zpQaRky?TZ}=WNg~E|wbZ(m;&0Yc zW4(2628Iolie_I;niNWy#x_W7!@aiLann88+6J6m8r&s6h2tnFf!nJVqO5YQftvhH z$|ipszy%j3ZPAK|0jd}UicmeSmH}&lJP|<&9b~XVu6SaKCvci#MP87dg-}5Q9W+ou zp?^-1KxZPxgc+aH-dUeac##n72pt4y7l>6sMeM>0?@7CH0q?r!#WPR)^0I#pJ1M0! z#7QZhQ)E#^7*%vxw# zG#hc4kSECu!~nJEl4Z;X8h05$0Z52K-Y6CqB1OS0uNk6Q(()3NbPP60^cZt`_%fDx z?Q2?lnE}`%vnx_Di_4J?7p>F9>U^<0h(XVbsIx`wAV51G%R*fGLm#1xpettC0-O{R z7Xb;#R%M~k2n?8^4goSjg6x(gJ|xIMeh4jvT;v}QdC0RgX@vl~Y zCMmh39QIH^j%(bHt|cu6c5F!1x)v8U(S<2&fF_rjB5!ErJ}P0!N=TW=|DQ6Urc`+WE3erKppj5M>4`WGYkkvKN_*$tL=siBJZx#H4EI&D-s%UXdzTFAZP{ zFAy_RIQ%7|dRZ`JP6}BLK^B)TQ!uF5uoSYH6+dg0v8XU{S8>@DMBGplVx7eeuDA(A zl*OzWJrr4_luBGEdZV~l%OU8@kG3v)mNBqKB)b|ZxeTxyFKiSqR=~@ds$j27ozO4x z`inH1-~hp7@@xWPKxCM}Q=XbBs8H!dIStkh0~{x1Lf~Q&q7Vf(8o;SUvKV3(gi0+c z$3VYXiO85(oaLB?Wh^63$!2E7D)P){Haja;+d3ZJn9;3rjY^kn|IvyqK%t0P(83fr z1G|rEK@4GI+u0`QFRqXwEnA4C*gB%M$BL~qV4EytA99mS`dqnq=k~jEp7@=;Xp?wf-5FP;k0;@f)sYM1thM8 zb0eD`K_W7{?BTO`D;+BB%GccE6#G5Z?OfjaztSKSS9p3ABM?8y^p&{ZEpG3+xk+s0KBeH^uM`|?^E!?Ojx}pk8 zT*3yba3Oy=u|rL4!XKR+izuY%ABlBU27g(_D=DT*ibVm^|EbLLB`*GmkG|C{19eO$ zZ{h0Z8UvNP0GTdy5h1-yNEi}oGs(&6%@BCg(-$h?cm|{4(s+}E9!3EQDwOTS9@su5 zUbt7kg$izdGgjv;5vygJE1TQ=R)=lpI&eNucj{~&JByLdcYaJM?1K|kML@P%wNIe9 zFoGe9z$~cA8;j7gi8!LKKoCMpgwS#pv5ZKOjRX;=H?*Myl_&`bNP>yZ(rDhWDAjFM zLX6JhxM%@s6*VT20Vb9jN!+NE9N+{Orl6RVKt(ZjObs3(*P|&(36~ftm6w2dO;b>U z0z-vJpYjqYHwk6CX4+Gd9n%GYEVLA+I43mcB_?Kf|G`ma@>4SvB`H@V3Q&WAX{09g z&V+Ts3zb+mr%uHxJ1NR`v7r*c{jDgt%$8RCoTG!b;F6E=id-MVPf&6amxlJFadrA1 zO^~uonkNIx~CeUcr#AOK!V}Jpe&Qrv2V#-`XSSzLwgaicPF>FNol?`CAC`2M$vpq`^KbGd- zoOiXKT26L3L0(rV zA5J)&40%T=rpPd#dg3=odmqCE>oJca<}|<=^qW2R4{!XJnJ4%NY`gG{>o`oMm1t6x!9};397UHqs z1b-+ZR2ZQK?3EU104wwdu)KyA99qj+l1Yrh2pCZ;jR9j65r$w|#*E^oeS{-n%x?gQ zfFuBEbkZhe5+^~DESlOYYEmpBhAT=I6;Q}Ut-}b?29XG3tw}+bU5i$5K_@7N1XxtZ zNWriT41?Xs%uNX{eUI$?61J6s2c5~E1d1}DQ&8bcri4>85tF^(lVzaOO9{sAs7W;W zg`BWc4Nb~>pwmrd3KbBQy)8=Z{~R1YD%1VJlRn{6LDW-!VIvKZf>tnCKlPKP^$1Bx zq{QXQP9PMpd-OF4dZ>$}e z5l3#|iq}lSbATFI5r;@101%9&&Xgt3uoYU3q#{I384FfY~6H0YKXSQH@C`jeZi0{dSr0ZXjpF&&2;mpb0hxQbiwkuE_Sw+( zxy$cZfppH7__+r`43lS6!FQHIDRjYh?GE->m+he6ei_8}JcRcYnEee{McfXAEm&7% zjDpF;T3k^4v_yg?=!D4x0~!FRxIz9b69igl|D4!UnB4zmU{zF&hh9asY{iU?;D~w! zfsVqAkzf&V#ampE3dWBC*aZlQ$z8}`Vb~xE;TI0I;CZQt6Gawiu;*v!BLkYjL!942 ztc7Wq29fxoNJwR3|CYssNnsbt2FI*imimU>Vd-+HPj5ugXp*7E7$M%7sdD7uoOOqs z#hH1q=^d`Ao62dM%F-n6$7w)?20%p?kU=7XBx7)e2*gDcXuu}Q(VzCwq?rX9Mabb; z+DBBHhiJ%%d?gDh!Ke}6sX>RT4M-N@N-GWoL_CF&02?_lh9u;kFiHX990^ox7uo4Z zuRIX(rG_0br;m)nm8^uW%0wyr8=EXjGkuAoU{|4FN)t?m8I(?8nv)rH!m&a{s|W-W zyp)(!0ZjRY6_|lMx&qa?ik);5eSCod@SK_G<93OcK^9!1^y8_7Pi*+=y8db_Kpd^) z20wWO{{>V@|3w_c`RiGHjD{MMP#9E0ZKTIZ6tsxs$yp1-mLy0%ENk!vO8(PC+T4%D zMb3%Ibg2~3k*i-g!Me@Mv8LT)s0I*mfzs(oPXWwla6u{TPMwqj)wRM=QARNq;@DkG zScrj(xrA4>-I+$3lxmDt4F_TzM^~;E$+V@=I_+=l9nJWi&P;7uN$qb0USR?X0{Vs& zv_WV59}@~HSG)$^2uMbi)a3Q1(Ody$<580*3I6mXvKx;nHKA% z2!mmS=XA~NxY}b#3*+>LBq&aC<^~r~Kyhh-$P{O*%By#5U0DVDP9^#2JOb28JD(<(fS5H|3AiV z(B09B9$liPT$)wQ#ARC+ba@=~S}un|$Aw$sWnlj0UP82AQnX%1^kWR>B=SdrK*40r zCL6rRNR(~M?Ny{15i@Uro*Eunm_!gk7;3<6Zvh85c zd{6`xJOvkIOpYiQDSSk4M%8TP2;!8CN!aFcEe@H5X)PIzyS$M+g#D!pp7h*U@x}>N0Enk?>OS`1CVVdV6Q$+X3hJUJ`ftinjeZ~2V zNLtvYgtAmq!DT`hHGeo7`TS=x{sA&ca@5n7Uc%T703tkhCauI7$By2$Hi_?!5Ch(n~^XI z3vHU_*_+DuoSw&g$M>Axu$@lgd=w#}GFTgUuNcG;CnAO=s$3Bp010>|Bl@NU5SJ7H z@oT8`hDbq~3g2<(BC46%hBF7J)@^U7O}R+Qx6TPf3?~Q3#qrRdZTLuTM1pGYaf{~% zNseG!7)cd=vu+?(Zs<~#@Tz45oU?`MK*Z}pI4ey-PqpF`z&)}P|IEvrWO6uFfhVkE zH}i=mPn!WtN|y-5v0{o`oHDzLIjfip7ibByBnpX(x!~GsgTab-oDZ~MYi1gHtfSnF~x!;h4FdKk;1cV)bZ%tx@;`GOh#Vx+&B^npJb;KMM9ZM zf)SdLg~PWI9!#i%40TL5rX{A&P9x&FjCWTQbci=TgE!nMM?E`-dML+PIrLj*QCj9* z)vDFi_8qYQ9Y!BSf5cAM_6B6mL=vKEy^(4frK40>{N%2HzZIhoLi^=(2=kz^~ceVBDhKc^-wRX|PcT(qLOa}At zwd)9kepbcz7+8KxiC|v@Y(>awi-rC%?@S1wUw7dEGPYW^sr~G83+&vh*SQg$s&PC z%usUI0xKlfxH$NqzXolzL_}6F1>-$#;J7aLGUfG(o&RhHoA-BLF%xRl=fSRX%pqdH z;o`S9_!=0+DNh86(HD#3(Sn8c`6G1eHHZB8&Q zP06zLDx!Rsm(Pp2(!_iKge!rqS{X3qrAdQ?O$=0OQ;ML0QU(?_Y0||M!8WZ-byBFX zf&nfDT$wV{Ddfk6APqDyP@zg0gOpSn@KmxDM1l}`<|J5#lmSj;NIjI;CTOcR1`Gt% z*_3Hi16!t6rK&~KmQiF3aP`_1tbt8j?YNTp{}nCRv}>b&70Q%tT(xt_j2hFGlv}BL z`SK;YHZNYT20D2$+^L}fOI8>&tzy86fyYc&T1?oIA;TbiqZo)FMQVbm5e$eX%~!N& z1MLX13hbIyR56;QiZL)|E8VbtdH42RwJ&G`TA~uS&6~JX;>-C`Wjaaf6yH;*7?6Hl zDi8$PfiT^^-8)n62D&5p-km8D^5DyZHvr!Jd-Mj(b4MWmzWd+4RqyQ|y08DD5|AkZ zOAFAq?nrT^6b7prgN?fkSVN38#<(jvE^N7tspEz#?ykY8>db)7vLMlbEciNYFA4Zk z!hj?UP(lhBX|%D%8Kr=cMyYtr@kSkS{~S`tB4w0VPXwhf95D$MBO;8&|q*ouW8|Et1^%=kLB3MQyPFA5}NJPpP4?kq7X6g!S;Pc#cE zE~-ps^H5B2UEXRen8Wo_sxfJfYEHPK(|IZkqezY^pp`>8=;A!|&AH!_j!HO?5l8?4 z1EOXM0I2(#I;yI%mTGFNwU*jzsl|?(Y_az{`@pEwOS`nS`%A!Wsp2kh?zRgYux_~T z=Bo^M+8F7=+r}6{3<9vLMcL1H#}u zM%9u?;A1@d$`i&H`)Ym0s9;yUx7qVN^dXHVGN6mXnCe9L;FW5n3@$h@U;^j3knYQM z3?S$EFTcENOzP(>qq+y_{~c{AyQCjBswAY_V2UvU3zrnvh-wNbf^w=Dq=l+jh$5FT zib$!64r-zT`YS18Ng=5plQN={hn&JAnQ@6hjN%G27{Ck%Sq!HlV+vC|q$CkEK>jx9 zll85w98iJv_9R8kSihVf&skX7%x~tGGCNTWF*5B3s6QO z1DxLinIfYkpom2Pio)sID4IFi@lL0q4LgX!3RbMoP{*lL6OG8T-1r4;iFA$>Zr7m? z&Biz}ge1x)>7k?j|0a8UfsRy~_8w1qr#Beq;lPNvgk#J~KPT7G5oyQ7Nk91T{;UobxWZ=ZEl;jhpRKg3D@I)u7G^L(2 zXe0*M08^?n5+tb!ObL}!QvR8oNzrKA*SQOilJ~qCQaED zN$Hs=rxt_^|Fj_vzk~%Gb*W2RxgiA?h$4_`*`gJ8Xa!iyVvA-@lq&>-iagcY)@%`s zTXi7?72)bufOYGtcFn83@)fMZDHKcw5Ex#UmDg@<6=8{0*kU0Du_i>!HxDzw65e<$ zsicl6Bg<^a_LDx(HiZ6m%PVn>SGcIi+FU&4I;#>NI@2r3>Y8;*vwq#+NglpN#%9{j*5T*OgkS5 z*hQ>+|D6PsAc0M8#C<%;T`SyBijzE0B1)RD2f4rnECFqc8KoXmphqV2N`(uY*iz7% z_OngkX09X7*O;`xJSikk0?IlhUSNZ$_Lbr>{Zq&T%}|LoHo*b>BVa^6)rv004<=op zf{>N$hK%e)cW0;sl$mm6_k9`6VGeT#-G>ynNC_waln7KxVU$vIDJofMVMbvn79{HC zhh@;=o_Xks9F_&pr5H(CiYP?A7#h!sR$^Ro)|MJBnl3@%LKnLj6);w!VT@@QU-~yc zhCGIi3TR_zw0Sqv?1eND!0a|H+Z5Nh8ZRBvM0>-f=;_{?c~O}rUo0t`voU8cG5pOY z|D%#?rqqcztW-}Z>64%F;HNvO9M7~#X&-Ah8$a?{PjK}!O9OoyL8uA0f5r_U-b8>n zW1tY?q5`4Y*d`0d1gk5yuz{_znlyHzCTF$qv(9|%PCyd)HfZmyG@180iD#ffll zO660Z+TiYL8dQH~cuKqjjV1=wCZ;HhHtAcFSkPpqFG+_A6lh((W4KW?k@QQ4Y~2>7 zz=b)rEN6zIS3y$B&jxword_tUgJKF(ml}WxXNVO|CsKu*^0c2(Uy{^k#Zp(0q7+9h zg;SL(Q=v4q>txui7GPM_EhGmwg2HRNz+x*hlww00x}grkY5=hUnha$)>$kju|5k9J zOI+IuJiE#zc*2wGu81Gki?hWPat$`|+be9q0^5ZxLeOE1&2(ccjZ&sC;bBZL_+_ap zGR|%m^?lK~SX|SJQJj4?j&IiD<;j$@%h4-duNss_>!B#f^U=90MD^T{o#{IBS%|N})+xV{=-nWsTZKpi{bx#={(yRgg zVwjxq4IqZh*@nVq*}`2ka2F}um$QUJMN*C6zUjYw;{apFbrx_&R0DP%P<9y1as+GQ z04OIW3cem=+vH{uL1gCZzG&z3?XnBob) z%z)fy&3vfMun>hFsM5eNFKC9&N%giR_WNfu>|IO;4G!KeB9BG;&b*d~D$4Zs&a zZu**y+2m%GNJ-oF;uzZlm29a#VyW9yF_CtOH+IPyeW{oBLJN{Z{{%kA07$1VIN}W^ z!Z^l23rGh=5MbA$VgT#Q07Ol8+UejDj`Y@P9>Xc&ek7dE2}dj|N2J0_Jf$E)NK;yB z>FO!s)@ zq#{x%g(N&73WX}Cg32WLA~U|=;tW!!4B}Fz&>%>HC#-H%g0iS;WukJWsg?=}qoN`W zKoV@x9OKM#w4g3x1M=3YE4ToFs>Ked#qP$6?l$BO;6m@(fDDkL4YnYyz{0KM>aD=y zU$AOm=t?c+GV&%*E%8cBnB^^FBQ2}aF6$C3wkTm7CX612|6wHNQ6vNO3}68sZo7QT zH-g|}5?~aT>ZwRU3$kDgwg6z{GF*ltOTJ{T(n@Bk$TV@r6ZfK%h7Y$`b2w-&X-d$e zgpX-jZE387yt1Y@tZy%}FS>eDH*?dtwniGUOS-bF{IrWNx@)|cGrXR&x^l@kaASQa z%m7}&6$Z*eiitTiODZCOakS9@G=Pyvguo2!JkwKk5X?t<<4(2!sdi#1$^bDsp$pnf z!t(P1^%Fn$b3ZrYAple-rlkW!f(mfM0LB4laH9lyC!n;zdtQ)3B$Pt;0!t1hv_gwy zJgdhHfF>3KCdz=P3Zfuf0SUn@!*;?0<0pO$BEm4P|DN1O%Pc}6C^1GoXj8aQN6&&u zp5lad$0(L*dyb8TmWDQFND$%6&z7{$n$*wg5GPAvULXxE^1@1~bcg^Wi5|_?u=FcN z!Z5fd0049`>C0qj3-cc(4?c9>!H1a5qMkC;)i<`ovU-q;&s6vRgNH2;A z*NT(=YJ*S{2|F^fmx7CzkkLK*0~vY4J)BJ{qLERpEgE|Z+{BGj$*oh(%~N~hZSZtK zOyL!Lk}DABnD#yU4Sf@LZomW6^MHiAMX?2-()U?bx0EA5V2Oq44{LMBS6ED6TUTI=v;?}zB+)xct1 zUN$#))LjM-W?iOSs1hoc0$vJ>?cjy&c(yvafYLILXv65GCIhA_<}tDd;GpwOPtP6q z;$x5?-`LeMkurQbLp4;ENpg>CbuU>Ai3~jIY?j6~X;T%Q!!?_aw~XyJ4;60X_BTeA z{m}0}>=tk8R&Uv+H{1pZ%Ag=b2zG44|B^U|bLMYw&XG4VM{$RPv>s>q;+AaNlXBrg z12@RcB87oA@Cox1bAQx?LYIT^lO&kJ@;G1$<|;v_XH3RHLcHWUw4!=qP6kK8duG>m zZEyy$gnVw$v(N{ST%#09!3(G$$sUn^V!{-xOdu)@2`6HB1Og$Bj(%Q>DT)w!jUo#L z!h%X-BRU9rPgHvc(n>!!!Z^@?IAmBJRxHx+*pTRa;@2zkZ-@A74w=-?N!%EGJV%gwIBh7T}Gu9%Fh90$Ol~_dpaW$Kt>Ae=s+@&{}VOQbTTUm;89dJNKe_pA4vmsNW**vv4-$)KN{4k znD6+CMz^L5<%akci#RHh22iAe*m@&U<(7(X?HaRjFRnO?v2lyhWBj4YXsz#`@)Pt z)s|}bnG=aO_k%chIXDTm|CO_ARFRXD!OJ)w){wp5qx(cNw_UCN7)I?Ii8=h+~#?_blGmi7^SZZ8PoYUt})uSIF+)ai=R1C zU;2wtBid5Ap{s2@q*L0?LzR%( zxj3;}s>f}aol87agQ52(te4uUyE;K&8mvKenY9|4qZ+ranyaB2t_L}hUfHC@nv1D= zZqM1Qt9Y&>`mMj3|EWz0m-@P`4Lh3M8nDrZrOjrs9~-hETm2w<{nD>)%&(X;n{M`Y zpe>vIpxTuS`jt9bu{HaomAY>`HLa!dv>{rpK^sr0nmN~6o%7~wDB7n*dX{S%vr!{% zcpJ25`?8hswEcFoCpx5m*_e-extG(s!1`_}IzCq0p5aEi!^fU68$NcslT+HXp)-|1 z+Pa)Op|={KM~SS*TB3)Gy^}h!sTh}ZTE2H#r)R0Yi*vpYxi9jYxT}$iWg3g+7L8l_ zz2Un!2b{GNo4^BH!3%sEqZz?@iI)D`!7JRtebccc`mP;3!mW6^8rzF4+_5p7nzc_j zf%7*pJe^nE|HMbU#f>Y)U;LV39K~y##IHGOwz;$)v%7UWq{Umbf1Jn1+sBFgor8PG zk6fIS`?DKIyUp1g)jq_y z(Lw1uvJIinBho3IQK8LIB^^_tO~PgAQZs$gFCC%PX3-rz(ji^cAKjBGebdR>tx;R9 zNx7_L{nZDZuKk+UVO>*mo!37#)_r}}fxXs+UBvfe!;2l+;WomLeV;o#*@OMrqkT7} zncAg2|FVg*va{W^C)<_EL)f+bv%}r9&%Ca`o391B&dcwz?L7VB`nkUwZ%VuwdGyki~G*`-OV?9to6o}j62}feA(8o;K_rn|6JkoHsO={;2j>}v)$nPea$Vt z;{E;NH9q6peB(bpo3onM1zp_NyWOpwx>SkTo{{BMo)}-g=4W2# zWuE72zUOHk=(l^O0et8i{7{+w=qWtGm0jsO-RNg&*_%G<8GPxTzUrsG=&xStx1Q>) z9=EWb=)?Z$xjyU59_)?&?6tn@)86Z$9_5if*{jBsv<7OBi|*yV?&*H+^WN_He(&|3 z|L^hs?)x6_2mkNu{_q9g?*pIk5ufoBzws5n@atZik5itx{A>yx^PjxOH9u_toytZ2 zv85c%$r*0?8qke9_4TIDIp1kPAD(01^;18~*}ctgznE2j%}<~7TYuxt{?0+avt3E` zWuM-ueD=w?_BWr)S%1zG$@63Xozd_4yF5S)9pmGiv`@cnDnIjyzsjpvKZv?gUmDXx z38?D>s4*4&bDsSzofy-9=U?8Y*#rL7-~HwP+VEfH^&cP*01;>aiNJ$E3L;#XFoA)G z5Dhqt_;4b{ix@8g$QaRLM~nzCS{w<{Bgc~{Q&J3h(PTxDFjY#7NzvuZmpE_g|0J37 zV@{qsOA7rtG-ykjK$8|#O0=m_kw8o)h`O|@Q>IU``sAn;Y0<4bsd5w>k!(e?5);y-OqlUu$A}?IZroUL<;RpU zYmS_m^Wlm}oW7MAT5rbErXQkCU6-}%*Cwzh1q0_w3)dpD(|D z{QK}9s-?KU|90Cft)xemF&-%8lo&zzVU!eE*`i`oamiOyeQej zGV1B4peCxRfrrvI5p#e_ghZ;L%0!R>ug0pDtON~Yt9l4Q$dGusddJYNzS_!bLd0Gu z?6DVyMr^Ij7Q3vox!#Z- zUNj2$P`v1xTO5yA+AG{8=UZG2~PB_z7VH`+@%mrT=B(_ zVjS_t9CyqSr<-~#GRLRV)zhNZsa7hICJHoNv-ZI!Gky5coZ-y6L91-eJn!stvOsqi zG|$C0SZsJl!~E^TBYVuWxFA0KbkkH9vg^(W@KS zNm_j%*NjU2nw13C`R3epc9y4_b<3@{nRwD|rk4=Dx#!+w@<~~$UEVac+Mvotai@?= znla;)S8n;`nB#Wp=1WC~a#3XqcxdP>X)83fre~}4>f{N#v+LIq4gX&3($a2w?YQ5r zd+tSN&aql*sucW%# zpWdC$JhA)P10~qAp;6Fh3?y2zYGo`AMh!#!gP7Zh6v7fVEo<>|k@MKMogf&%c`k(E z3qce^1Go@vV@rtH=Eb6P9nXX(++LQdls-BcaZUuo65J-zz9q7+Fj_lOW}=A1@IeWR zj&UEFs>nsoBo1*u1Y&9|7M#b0Y;uxIqZrr7#x`b7Dl?f5p#MDgyg1T?hoehZL`uiO zTcM71s{5lLHTXc@?e38Nsh!af$w))?&W+kJ9;}9EC^aF#l9<#XCLzhmZe0;>6#=DN ziX)ejT#;R&+@ADC2%-``OqBV9pDdXOMO4Pw80n{xEEFIknN5eS)R*=2$I8?=5pRDZT%0Vk zr5IIIil1WBO??^>XZq$gW~8T5ivvxn$x$^Wv)4duq^oq54xoX|>gzI?I@nPQ zX&I#8(IUvm*Xhozg&dkA8=25H7Vj*t(PT;F3fD`{b&`_2WL_z08c9~@ttG9=)56BX z4KeQ`gw>-;68j%?Ibl(tD}gNk%2IS?GMUw8+z8S)N>bR zEz~ZPG;}tUeNGrJr@qG&F>b$XA1W>Dk&zCDvr!ajN0JE4;tE%!w~e2|mdaerS&THa zIjT>AYSiXhHzO{o&VNuO|djXH&|f z*mo^dn=M{m3oZ-o7i#hBp)DtLD1H~|@!$PJ}4VhlsXw4q_FZbBkJ>59#V+vzAq<;hDS;ueWV^xKVd45v0p)W;DG zGLBWMrM?Xra4fY9GIL7Q*HG8RFU{#pqdZh6SDDE=6)Kgb3}qMhhRa5+?tI5=8!<!!>ZOeua~U3Ln|TKs^>nlb*-GVYh9(8n)>3mq=H8DT~b3= zMc*~inZzrM5uG8x^3|P`R!anwgejDu3;)4XRV;Q@Vp$==rqsZV9%wV`*|vZsw5{Pv zKT+c0RM+~nJ=sr@-C0V68n&&K)9=W>ciUnUdzO8&?U4s&?D5@Lxdy$pU?MM8ESZ`iB?Rp;z~EAe$x{hxU6Ip#ZE=Kl0j5@Q(uInn2wSC>KLG&% zA^8La0{{g8EC2ui0E7bo0ssjA01F5lNU)&6g9sBUT*$DY!-oZv43sF4VnT}$5n>#O zWMRjQAVZ2ANwTELlPE)eY`8LIftC|p%A85Frp=oUH|E62vu8=24K1#031nbVfkz7@ zO-hid(Sit+9(0Oys@0iAqYBho06@W_Ua3k2DHh_=0$de#j5<_cf&vM+dTp5CEzAND z;0i=icOZhdZnwJqi?^`Ayb<{7%^SrqUL=SIG9K7iVB@@p3siPIQfuVR3_%mL__pjq zv1hAtjhgi|=vVCgsZ0y?^TMI`0ns;s5FRzXr-c<-LXH~%(Xa*P@g@{JyC6?<|RO6%U zB?=O$Y6Tafb8vP4l+=QNiWk_GJ|%P=O1m}`)vpV=_+yG7=4xz6Z+WF1cP*xd>O#y) z#H>iMt!d>-TKTycLiHt9qWYJax~_L5(f+T)u}das;ag!TKMi+R!wnR zdtK<(c$H@i_(QwWKVkn`5sJ}>R-3ta=}%LuQ5JHOo}1YxH9n(R10hJk(==pR5iE&U zlt!PfxJG!vqK?tdWwZKB=~F1Ike%G+nI`p!U6yH5MW%Ea&A9Mg{mS8Fb{HwqxJn^1 zBA5{WlOP2uVa!ERFjxT~X0XPz%T*Z)R|hL565l{kEckl}#UMBzyiIX96@1_XAp$7R zct$d3yi%{gLlDd?2W2h^V+Q5uMca(Ti&eBB$D}eXh$I0Mp&(iPZiJShjBhWstDTS( zNiKk;@KcDgo8Kh&suO9bd=q-4t=yJLN`Od7b0`@Qz0Nzh(SS;(TpNQPTh3V zuNYN;Py~{JR2-v-@Mx9mY!NL@vks*Eax@Y3ks&3T=~nc1KL|b4JS-)mj>1J$hqiHl zF@%^5B|0p4*$_vYftS9fIxc_Rt0EEL;?Ulr)ULWqIYM065DA9Nb>W3!N=&I1*J_e% zk;S9i&jcVH#85 zc%`Cb;-sb6%m+J8rwjwtHe}R z<(X+aUU0lNrmWpgcIX|`c`wAsr(yH6wac2h+#5dGxe2x7950T>7h0pLkiDCwnxu9& zsYLd-KmfHLMSXgn?Qu$l>h)e?6Dufda#NBYo5|edsW z(P4`lm242DTBb0UQBW-n^N}ebEVwodCTL{%t{ZMB%P(13Vrs}{!^CL+C2}Mdj)GZ4 zh;imDO-!PmX;~3HH*r|Pp`(yAla*@Pe&$u==fCPX0_r<4qw3U-w~t+`JBjX0C! z3KccKcdhu&^La6$8-p+WDiH@|Bpb6ULkkkRDCLrE<&$VZujOLU1aatd5DvV51pf+1tKo-a6}ZVSoajWFB*%bqZaIt zW#SaLI-Mt=&+uJ$4zQCua+rX7DbYQ++LdRxAW~=rDKN*1R%ju{2GK$-NWqFNv|sxV&#*lh1@IuY&aT&6s$IeO^o4v1KEQA_gAtBGHBt1T?a`NE~}d9 zy{>rHvXE2aUm@+CS54S2G08w2OX=YlwktMQzjiV>VL6(iIkdDl6m=m@1|y3zHrnNG zv*ahNq+AiWCvdkUW;0Y&B3+KrAXhadQ*vFNBM?R8BtEu(SVoJGVQ4XdhN?~9wh=1A>WCAB(%~gZEgK_!h zWCOK;8G&4_r-hSadII-0N1;f?G78C8CTu_oqg8I#o#YDfxWKy(x+5Y6`% zfF~J{p@vU~5Sl;+tWbvnp?h0EdhsY2N|sYKnCUKhtif5p->|(HAX;YMS_-z zLKbJjkwqcVWLu|4Q{;NnF&IMf9I5AYM`33ZA!cYqQ$w*CdblCTv=?lqBYtO#@ADCr zc2#ZGNsQ+;Wu;US@DUADGDaadnWtx$=V#8i8DG|dwFhKzM2dtK5}Wu#rZHHah!Wdq zM~1aWb9WdZvxnx0idZyguH-?f@r%`{TI=B($5#+rPz%TLV}}@OTL1*RCx;Fp1!{-^ zY7ho0V31)j2L@RH8Q_MJIDZDAE|7>8THuEf;D@bXFsx8#r0{#m_ZDw>Xjj2@5Hf2k zW@`c>Dx>vKCq{8CwiQF@P>h5tM7VK0G9t|X#BmE1gefwBvGso<0c$YfTpFQDXB9CT zP6jF^MsVW8 zO`3q5U<1Z)a$+947ADPvgzdF)lHzg}#aQ8^gfQcBq~$mKgmDztQ-d@~ zI@Kr6q&@_dg_B8>3&?qaA&N!$5OG(Nq{AZpK@hFbj|I^V@@O7@f_$XV3ar2ey~hg8 z=MZdw1Q{R(A|M89AO>u(3L+2&B7g-2zzVLgeGoy16_JKxV1}U97@EKe6u}CbAcv4B zh&m@&ru2U%1#7WpXlKzD5SfiRGar5bM0WY}Lui*-=yDV*6G4z7GgN7ZIVDEnS!7+I zEi^=CGNgC>M{F|UEoR0MfyX$U;fszDZ}S#;^b$iNsTX^OBPl3UvMc2Y+`tB4bUm3D=tjON1-qOzX2g_9#9ceE#2d*w4O#R_Ve6lOR;wpRd* zcyy#-e35uvm$+SiCO3be2Wb=aE?d2^3tnMy$ln*b?Wpam5<21jv-h|!}|q6J%! zdqw1vM)o!0pSYJDsOa_V#LE<4K%^KBt)xKABRqvS2xRP;aw0 znCES;6#e;b1Sv(kEG#FX{C0aPxDYH|54X0n%(qI?mUp2)#WO9T_=z^_7U{3fHLh(EG z12(F7C8km3S$5hxfcb15e2?i06te4{;>t^fEno*fJ>x( zZWIP5rJXfnMdLV(oj9@9xS{j-Gvx?neClZ>5t_FmLMS8{1Ug28B@lDbp9I<%G$bC= zsE2D27{dzKhw6--~|6!bz?Le((zDLMJ#Ku~zGoOpdQ z7LO3iu}!mp>640YtAarl|uMHuP&9P+@k$f*Ydj+5cW=Nv~F$y%Qw;4IOy7#Y0K%+FOb9z^3 z0HAQ9rT{o%lCCx?yaY`wsUQY4bL>=6i@7!FlyP=yCe<2~I(cEywobMJes}tZCZU}| z7@;=;m9fOEhk=zR6M;LjZMxg3U8qm}H5~Z4m7EcPg@?3mVNkg?QJJJA=maQe>6TqG zP4o3vyrz=R8ejDPgm49BU;Ct&&oh&WX)fTjPZ}prFDY=W3q1ryz4sJ^X$nc{dv629 zl4%LNA?rwOV_O*eY6Ul!B*#7oA_Zj73T(ioLARM|A_2XJbT+4kE_x8h*L@o7ecp$! z2j?gax&Qby#y3Q*$9xwvhm6 zyHkC%LBlb`vXOsKAB96y{jxnYMZ~h_q~tie*w_<6>UkoXwl`6F4&k3r0mOZxe=IA+ zt~GX(_LH0cCKHE9f&iKtQlOf8t5?@lom+6pnsCWuumzhu2AMpyywOJ-RL4lQYGyk; z%@MAm_zX3$>ZxwZI#TG$#Zqxk=oe#Hm>p=v)M{_%w!6KxyIe@E zwwt=SYBuPZ#BoYUok1P?B=(+h_hCe$1Y6}bwT!Ss7bbQA^WhE!Nmfib6X?R;(L##3dK4iHTuB@>AmUJ{ZxL zK&YrF1|%G!lh-MXclB%OXH>Xs6282X3AJ0c1Y6q0Q}ULDd;=rmwn`G?Q19u@BIr4( zWKW6gr$z}reR{wZMsiDnO&v$Nugq(kjjZIn(Dt>ya5~wO{Z8nMm?^X$CN?z|x1Zbp z3zJ!_8V+e-h}Ke@VXe``6$_LuF&-}? zjFMIWn7i9jVi15ddlX1LIyug#RjVEwe-)isse3)H3^=V-dk5RPs;yRkv%b9l%g%~? z7cQJQvvfbtVmQ?#TY3kmgY4OSQ`p!yhHa{K09qN2tTp#iscU|-2D?a2fk^>I-mq#& zQBz=ZnyRvH&iB=C?yTKb^I-bKO;mTgw0x_nh|eDfA@G%iTw*=hIuWg--LC4-%1BL? zeXEE5hYzMu5-roM)?uZE&Sp+FK;q#Wm)^GfO4T~xA${6*49pOnD(x5r+1aNnowX@V zwJ@!_JtUO@8TnyVvxsgVk;V)E+bgs1 zHH1U4HSetWFpZHgw@7Etm|YT2`4W}WgdpS3Ojf7ojK(=@+x z|BeuKjpHP$vnV}^E5FEhY}PsUvV|7(cx|f$#1{xMb72bwPAuFFBHoReZ<2m3p4*xK z^>k73csuQHr|bY?N=gqDsKC| z+!Lw2%fb(>G&Sx?pD``HR$s^96RX!aoaR=-PK~rInI49aHG)$pnSIrMY>gRnN8mX_IvA8uaUjQ6S!~&AZ|1 z+5|V|R=u<1M3!Lz7nD#{ac0N`B>1kH9pd$c+@(a%ELwBd;Xru*U8(so`Mm2vi*?+* z@c71E*9VSozdaBHNbdh{FF^g&gRDUIxB}ua9LUU-5?W}s%PvAyp(wPt^1O*qQzi$y zcm?%SV2$+>SzK!^HrMQ0QdCiw)_jdvpXN%|Sz6aDEhj70gepopw;i_G)Z&VwPHv%; zcBUQk8ZN`(;JtA&ddYL`K?nQ8S3g5rge^vgCRz@`=gx%C(B~3HIAAA>gt)YLS&KJf znPj~9FpXc;c*c!`%rMD%KYp=dj!{F5<7Z#B3@GLPwXY_CVcJnUn}4$zHzEn*GqKnt zoVdq#`+Il5z#!z8RtA66u|goX-HhLR>E)OI!UGu=3*MvIb1=cKjWk%jr^DX5RhkPH z53?3)-qE~;bz*zu=Aw#{w7B0L4r77!-nq?!Ov38NmP0;RtSb%on=O+TR~lQ!YfAiE zaHFJLVS|AJ8(VN~1y@*`XiCW_xA>mVwGG9htXd*_N}Vcc-KuVN!K6Aorxmpx^69Qa zB}mkqLg$^KpFWE2HzfST^v}!qI&acD89jdayl@^!(!r}INFwB!Z%L(feFZ+-vS!pi zqEq{f2yI_MnrNgb!4#5k(b#)63AVyg1`k* z$04E1pZ(|uK$(ywOx}_cP@MBWuDGxNEtfk}2>n&v@|Ym zelMW?v!Jpt3Zh9?(_GS|U@}AM(Q7GFd@_layr!8b?cislqUz;fzK20yMl_~DBq<1U zYD~@@bE9j)nel>(nzo4MPRw z(dJI}v6BVWMnqy6l?JD%ypi>kV>P9Ve5Do=arKmJ*%8Yum9uBP2tF}E6hl5llTRX5 zL@~pgC$+RxnjTg`LnD{}9T`WoJoXD=g4x>91lJhi%*%__fh5~fcoSOItEmKom}ZS6 zS|PphMyESqDE(^9pzZQ=I8mHjLx``{&?|meR3&h6no10jF=GNVjZ|x?M2lrkE+CyL z1(&j{o<4-GwG@sCQ)f8jm{2ti{ac4f$X%=EZd3CstK0uXEA^{!~TNe6YUlyg2)dlEq^KW6qmBGyOwOA@M0`cvxv&W5@ZYhmg~(8=lGVlwd?0@ ziXa56*T4!EPnHP(c)``M&_m+=Yal!1-Xi`MIcG(#!$>p1=KivWK_nt!gB#*3o5nA2 zg(7VlRm3osY-MQ8B8|Q%%AJvye<^&jfoFtS81pry19PHwST^L~24*^f^dn;=1j-5Z zhtZGD58dn&JKc)0k^qoeC!g##J}-uoqoq*O&`Y);F;L2j9g-(qs_LyAFtkpKSYc7= zv5{TIwx#`Un~ig8tF{`~dmi!)ovM^JSs7wjUdu2yS2-bug_f5wCUuc@WQ|U=yiByQ z2H6~9=%R^Yt~v3E{X!?c^fN;0l9pbE;z3arrrhaNUc4RE&26UE+!Bd5x@8j2zWym^ z$E!>Dq4IC~DlI<@XZzx}r05UT#ARAV*vv9fiXStlmGT;6xg|HIjt2OUuGj!Em z2PSi7Tdt-Lb8c4kH?o!cjnJ5L>sVOdTD`h&qx5QKzxKr=8qK_!&Du(crbi^M z&9#Xo(%S45IL!+#E(O#W6f&b+AI`SNN*8m{b>kqxUAgWWK263-KkL#IOlGKTdel#Y zaoCgp{KL=8mFu+1!{NZG#oMhjSfCuy7b7{=tX$>u)f;f&i{yjB2i5i#HQz@KDms-a zYC>s4;r`n5-G_)3`dKP$s0pNn>3>kBoZkkrZTirJB&FjKsVDv;~1o?NfA@?yHfk4Q1g*c zb3{0sqg`{16@jhbFf_44A=09~-GacSyE!1?jN$9T0-H5sBb;JOy{`KkPXx2tt379P zHs+hQ^N7FrBd>{T#ccDQzInlI11u6VAck-uaFdfCiGYTnra6h2lwv>YTQ?^`FfW`G zbOIDEf|Twvx0*{3MPWD=v&Kb{r@9z0bUKu$n=a8Iy2G&+R$;hnWGHqb7=vOTr6{

0zpO%mungg=`2(c20 zG>!EVsRMitk?J}8m>AV6lB9_aDL~1ovXHv+ibOgPhq#W5K}lBW#D^g>nLD?mv&k+a zHmb8SlfgQ^A;+cjp|W~2s@pZpD8rP=I9ZZp5PDBC>|FJM*mtf zg#-#%`MH_lyO(4TPE;gGYsm}(91-b>8RA5F`H7Zkj=J)gsuG&4JR;Acs(ld}@fgL4 zfi2Y%t_InSN8~Mr8OydZx!9Y%FUz1-BtoGvEv)*jooLJ>Y_p2QsmH9z9Sp)OL#;CN z$BWVeGT4MM*aXy+2?c~E;FE$)ph;&z&Dz`o@W?rqK(ILRxZvTQ4MZLP5bO{;8@lvr zkV1RB>9dNLK`9?ZIpIS;@1r&D129WrD)ad!?JKwB85{nS4vVNXSF#HhOO`r`6%>>X zR?!IU**}O|Px><-@e>c%IZtsMGS?JF4jjQ@i%i(CNN>AIJ3AL`6Hqc!Ln2X&k#Hfk zqCgq*E)t?Ln#hv?6hfoOAJ^OlN}0_ ziWp=JQKPhm*n&+c9w|`Gn1Q2u3dVDkLeJ0yGO!M)lmyje6$vPnoY+c=0F+e$lqAps zDYzbmm_LKKl$|WW*Oa2n`$^MNlPWSUD_X)a#TXw!jwa<3D-069Nh#`*aEW{S8!zrdEM5? zkQUy%CW;BSw?I+okrNcPpMsk>fg{-55EN@%C-j>){o=0wEAkEzWsf1le4)hp|bvWn26#HYi2gASUIj8+gmyc*L-kHn%v^eP!Iry{C%ZavPVOV|i zy`deskv%vp$yK7VEvMo=fQ6Wh+?)xrIdaLiY@<2OoE$9W$KJ%J`WeYqgVlRUf*LId z)+~S;wT#$|4lUS(EvVTj7z0fh2(mrfwnfR*q=+$)0&QwriilDzD3q8S*SQ^qd)0zb zAOlU1fO(AwGFXVQeb*>J&9p_dKn|!Z=c+-&mvnxBRr2IZM298q%UHZ>dC`$cejS z$>IF8IV8N+OOf{bTFT@kTnY~>`MFHOO2cWxmjoKZ>^qj^n%n8EUc;)c2!P82&a3>Y z1&)@_ZB#Wh@NT?j3>*Mgv1lq7=& zBZJF$;CEdU$Bl|_ZQC&^6>>e>2|f(7Wm{HJ%`K1uww>U`?N;!hMI930+KHumInEev zMknN*kzh9v$u`kI9(n4%j+w7TVJkOr2#Wv|bVFh_jF#o#B1Hj@--)lB{UBqHjTG)FH4Enql21ZnSV_VWN z9Db%Dt6JF5W9kEnXGCMC6&7z|p%0a*8Ox3M__VJ1i5lGk2Hu3gf@DpIWQmAm2eRb8 ztY-O)V(ltUa7sMa9O` zttElQnkYLalny>s(;GRfx&XUMd5>mR-78G1+dvv#%EQ3|#xkYTnemA4*el;1DklPo zLcy7^^Nm6Y3r>qvJfu`QY$Ztrr7czG7;H&KZX{QA)KyDFNrjk5lR?X{qdashshO-h z(&t3;7cHp|P{X2Z;JIyJ*N|4Z+JuF8jngCux*cI>$06aX z%`LbL2Hx=*(bm3=fE%yd;&IpNi-I6G;hEm?QU2h(p4_ud>bzy;EkJtq$ z0>re7BO#%Y%tgfo^D2bKDf`V(EvsYqF3=-E@0^b*{O#W``=?$F;8ZtA%r(NDu(1*) z!V?ScuNqjDy%ZGnCaNb0b9C!iw^{4!MHQpic#7DFHNR(B#;VtHmHj1z1Ea7&6pcG6 zujj_UKEV9p@4Dt|M?u}aMiq=`p=bK~$%gBIoWLL|`nV_BfHds=)%0Vv->rS1nG^ie zOO2dUH<9j8Sl4_Io0po$8_MjLwOJ~XD2~S0+O4AI%GKJ-{#Bo}?(hay+2|tFpOTF+ zD{?RITDxxl&?|4f8oiO$nJu%u#Sst#@=VT%Z@}A=DI(|pZm6Idc)^N&;Z=~wF>sz( z_JKUAe%59J>r}X@)mS4{pplO@l%%2(L$?$~1ecG$Vm|X9ZMI{PtpMF)(=@^ROxdda z3>q9s2Z#bl5)3S0&|rdt2o5q_$nYV=h!Q7COhWM@#*7*_LPS!)B14Z9MG8Dfk|WBL zDjx!f*z#e*0uBi>jOkD&LXk8LlJwYe;me6YCf=M`)FjdZ2_uMP8nIwfgG?h7ph~qs z%d7{3N*rpC>p`zplSn8Kg{(oeXUm?Q%JV9cs~082ty$zgoerWd2v;OSu_|&!%1dt-;Qtae6!~6L?|Y zHo-ScXc)Zrp6F{1O%ijU@!*J0%BIirbV;5jh2QV^bYo9Z1*o5A1tMf%X$SIm;B^#5 z;GS+tjCECnAI0QeS_@*B5Qi9Am|=#xr34a(X_X`*0wl%v(TS-^l#oM6AmG)E3=+6q zT2>hp1yvI8Sk;d{QY8hCQ4r~(fx)Smona2S2LwSi$_PY?=t((ai4b8K5|-(8Ia-we zPkk_4fLl}37Xhjj7V7|V?;My zs3CrWHmab0?cw)ibtn$10^Cra~I@b(OmU-oHa)36fd+fj+{(FABg90mv#RQh$NvvoJh2C9EN zqr_j*juzPU$q|WIuGQ5h5QUFrvB)lkEP8v8haP&(VB873?XBHwR~uD-UFQjPPI)S2 z=|p3f)@IqJIjf_PY!~38L1kHmwr1V(=`^J8{aquaNCW^S=nG{DrBZN`nBY+7Mg2FQ zfs?iqK}w%Q6OH%5*&T3ECJ3lf>ABAOxl7lG(?Y{D_M8!K}nHLPo~8Y;*jS!`Z1EX9(0x+sRb=oxywlu=#+sm4uevuOJLHMwLnb^ zgs#F@tP;bKqZQ>r0DB>22u7LB5J?MBXpH9EN0dzIFf7G_2+J5YGE{X8H7(m3c6wv9 z(IEs^Rf82+#$>A?3N3ya(F%R&*B~k0=q6R9mVdm{65N1MCF(hk2ruVEM=`K<7<-SD zgo8WgDJDhi<4CID#*qT9??!n{T&XgGHT5~FZYjy*_z*%lvq&pPj)dEyKmQL3(A6igYmlBcY9!tRtPskTRwE zMPM@)np5fM)HLLAPEBkQlN%kfqCN%Fdbmted~{b5HvOqi&Eu0Dcd1QlN(q}QqLfTx z<|puY2vNFp65mp!&hL#cl5`v7C-YOj;rx;_mzqr?wPwYK$c>Yb^wbZ{=`K?pC6J@q zn8!9EPKA+?Ut0WHX%c{}`$;refvl){f_0kmO>&YIrD(9YgHgrE<)bEn3raoX7ysQIhx9BxUh^}EQkzU4OqRZR*g~rXGzV>B?2O_(1y*mu1|Gp z#V*!I1$vaJC&N!rR=U=U%(YWO)5xzJsKo7I z5SK_2kV4v!TU-hqx46Y^u5z7wT+5|py2`aK+*NM(&!2rAyre)v6zat(eu%;z0X3)Pts zMzBLvnfgdI$dD{(bv$09o<bDQtnvW-c?D&wS=XnI+9`R`Z)ZBLM|SKmrq>bDiz6X-jErHD~nxIYUM)zHtjz2VbuEZMIz+miiucm5c7?rtlgjX zfDOn$s@pfbmZ2V)+~}#S`;9K4Jda4O;;|{kL&c~M!mli-nne7X#w^4mg&DGPYkSYSD|0BY0F7e?PyvzwV5}6wVfCxxjt7cX>@sXc! zPt!To)t5l3v!6oOEA%Nhw4t9bL$E<>CadQ6WhG5gLt1Kq#*D`ZViKT%NK2vBm|ps& z^Ka_09z+35zrX#_AE;?s{plZaC7Q$0U#u}*05YHff*JtY8U8sS1V-AaS(JD+%cGFS zgRBqiP0W5Ynyu}Ssu0`j8Pu(HjExZ%p{RrjGM0-`%!r|&63yWEv_{jM5$2ejdWe|N zTwvL_*Fc34*_77F(co)&TlF0Op|q*YYI&G%paeQGR&c!y!0}cRrJLuumftv+7b2V{ zOk8vkmqiHQ7c$&)dEtOX*nfph6!sB{{S{(>1a*Ce%2ma<=!jY1n^`c@kK_$)wcOy; z5h`7w65*0UoXbZH9fUC;a-m(&ft@5eUDy>^?7&IyoQ>E?;?PlI{e9xsc_P(KLDfyy zZ}`}Y0FJjMO7K{Zzqw)ewa=$$#D;L6AaRdtJmG2e2O+80YQ+x_UW?iA59q<0EpAV1 z*kHARMb7-48Dn@L8%`vF@e$X}v0w5n z8afsiWHcZ2A>5fsAM$Pg0a?_U^b2^_tFTg+rZ`SF|6YNk$(6%|R3l!IYU}D5aS#Wo0lWQzj)+ z4rOMDpH&V_0kogkVAW(;C5a@*aUe_XyoqidRg1(0o2d#~E=7bWjU)k_^k8G*{8b`~ z&V_N|xn-g;qT53DA}_w1@&KkG`XyohTihv*^qhzkK-?HwSHd->#A(9CrJ-|);d&95 z#a)-jbqj&<+aU7);)Hb|2#sbVjo5sh=ExmJcZJDns^-tVrt}ySlg!s_jvQ>#2yW&C zflZwR)*0D-odnE;#W2`!f+8sPX3+uXC%WZF)CkcPXC-1+avE52R_AZ_<|%GT%CrtK za@g(^izW@>u%M!MYDncVCxtylOZgK+OaTQ;ah+pvN#8umV`V;HIyzUGX#iPVU#gMCnEn^E z%xFm9-nXG1lk&z1?UBMPP%J(~{#hC&hMJw?sh!o`!YH7qLFD~a;Q!H|+KdcH3M!%U zBR@8zNlx1QRiOPf#{2!yjn&&U)|(<`>bGrb^(28vSVTfp2p=8I3zEbVWaz1;DitgN zLrj1YB!~j^r+>~W7tktzR%opTD6Qh^uIg&8^6IY!Yp)I~RwO_G#Oefms6i|N1*odC zQh_g}75u>jd~{Y2ispE_jkdCxrW#@axf?8g&j6{SJmDDb2u;-R=4Do97#ILt*yy1>cBOe9nE;<~f+8KvP+M!0|4k^Gzo}@;mT0>fz+Q>=(_-05V z7xv!YM}{w@VP69HABTAFNNSpHZ0!H=%|w7jXH=V@Y|vEf)UC0p{o-%B*e`Yv1ic(% z%Lq+SECCmsD%>LQsulpNey9>8YXJnnK@6*}-f9Ksss(2-25&I1S}+Cos)qzYhq~$% zq$&fiDyq6|W3&`=$Vs>X*h&^JX*!SZl4g!L?A^3jAIas0sGWEYA-H~xhJo(q1}4{} z|Lc*(oe!%I5^wH(oQ@G=uIp`Bo+LrVEoQ$;f);3k7=)o0KPJUVX24EnzZzW3T9?3W ztF}0-A8AlrT;8CxiF}~umc+2eo@TYWrtxTObCT?B?p)`n$-Q|Uaw)-5JSQPfosnvj za{eZraoi*C7ums1^z3URU)L1qBhgJ)(XHV}N`V6KEchTL>>m--bvBFNJJIr54ta`kLpeG(Ec?^ZMxq=tlS!;7D$Oq$ZUA zQQDnGT|#tks&%gfHXuhk%%^3f0EVxkj;{hxZ~jTZv1%Xr3aY#*Zy#-s&`<}I@Cp&~ zZ?o_ejCQp;GmDyjYQ%acG%D7zW+>by@TxYeK_siIK12WrD_wtZUEj4`=k>2b@Ua?% z5==pfvZ|`G^;$z~JsYJ`Tw;QKmWm=-goIg#L;w`%$iB6+rnW3zy5TlH|1SQ-PAdkc z;98ixGL776;dsg$U4pi1*cYmxXOFcQYzr}dj4qEw5AGD#7W?ZK@Aelnrj~jk83T73 zp7A5*O{Vs*W$U3wgI0INVSBl3wYnC_DoR1f@rHeD(dOJn6(Z{pPbN-DiVzsjCIH>) z>?TfK%koZmb0W_&SOm1U(p4hY)n;cHC)rJ1&vwgrZ*qQHT>=z0aeiXh5v?)-M;%i& z!1Y!}RL|66k{VaxgS$;^Pc0z1*lHy!h5qv2a_xNLZGPg76sWC;C-aDxxP(q9il_Lj z+9QAZ^#TmD-fpdozh_s)li{@w>Vb<#KmiT~1&>=EkZ)?>!l?X!|Eg)sv12jb`=uli z4-z8Ao#qztlQ%i&W;Nuh&y=q;=FZ{qIR-m2^cFL;Cai844xj5596P2tMcYupO+oH* z=F)*LoX4~tx)<@@`S6OgS=2@_UadGn9!jJrN{|}%;mCV8sz~A;VlZ`0FLmT_CPG}K z(`~@aG%5jN+DsQZQq$S`a`bdXPV>ez#@b73qfX{6(HuX-1#J+UYFS{^#-4vrW9V;? z=Py{ts6czh07t}NqcB^iDqO#+-O}yjbT9{Bu(9{51_P_D;x!itdjSYQ0eC0`_qqZj zFc+-w#K7X0xG*!F^+hPRtAkJtqtw;avfNM&6pNNX4OKTX|1swlvDc(_Au0H~$*a6` zZW9;rzFSy~FdSosF>epNCLC-T2RFjU`GW=Rapesg%Wwb}FBGg^k8P)e)cVi?yW({ zXMNV^ea33mR_KJ9_=u-Hieu>7vOU{VfP`M?gaWowi14f8r`K{giJGX_Q-Rt9WQ>rC zeb`k;j5OlcZ%7C4NDIX9igi#SudlE&Xec?W#BfAC|C5kDDU))(T6sR`Z~oYDkQW2u(bqnUB$Jw{!fF_=v&H@z(WNHawg z{CM(<^pC%&K}#-eBgdRdL_>;tL~y$P@yI{`zzpWJP;+KnBKial^^1tV{Vi%te`KUZ zb@`re_Jy)Z(lkoa7>B(KbhM|pV-%dFQFKtw1IB}svS1q4Pps4(HeBn=fBjDVy7 zl8F^DQZ%U1puq$MK6Vs2vH$>*RHmR*xrE9R3M^eNnNnbak_81pD&aC^XHT9#eFgx;>3|Bmr~n! zb1BZDKTiU?Vg$X`;nJOJ_h7;(bk&XoOtvxttw_wD1p;_{Ss)()dwgFYJ^l6e*}q>u zpFH}m=Gil7y8G$_5DDidcuu;EFj4|R1tpkny3^J>P{9O^!%(^i^U4sy3l)S14CbJ$Y)Ar!zZJz@`EgAakZH5!I4QF2~ev$|=Kov;ZigKtiEPFGbHJu`nITQcp9j zs8UfWDk#V!+xkeL9!a7o(#g&nDOQo*i_fsYSfwnq_cp~#%EEfJ)k^xnLcmtQ=Hn_d z%8s3kBxI@l%-JeE+Ej`Hw1`5Ah$c&7IO3w%BDihE#Z8P%%nk0_<+Nq@wsy09*S2*d zJkee$Hjoay(J~qpR8T2h=u?9j|AJIfXAchSRnw$g*eeM(kYECcA;!0$027FK;(R0C zfU{f`*jQqUC!Qby2}TxKWs)WS@nniMW;tI8US64Ilw&qo0g2BlS>};F?#N-)rtDEz zDqjunB8Q~Vt7(D=#_7_5q^>$@f;S4))9N-_mEo_#;z%oKVT!7%vtiP5il+)_D$O-Pl~PiI3U0Zh(ju+8%51N+%&REA%>;|$ zyY2?sT-ePu_pTvFQ56Y1>sY0hq}W!YFNxZ2+if}I7|&Itf@te)IP3WBEHB*(m_7E} zu9XZYDP)IzIZ1+79{A-#|62@O<{8h6x+RTMexxT0kRW)460^M`DKyz)lQA|iU;S%0 zB42`b$uCzD;OO^FcI1t-Eq?`-+h2nc0oWWR@XjIzfkH>1@D@set}UVCoC66WJ^_iS za`sVANFvvf3UUR5q?t0iYES(P#r=dX9=Pgfb+8NKhD3(G7i~Wu~N^%Ak%(5unZd zgr_;Te1|Q0p$kr|<2^G92z3a#j$I}cEzwAeK9E95n5f_-Ek%V(Q7K%ZpyD5Ns@bFQzf~?CP4~n0Ua4rq4EexDrhN^hQd{;Zsiqd zu~1edi9*1pHnqrPp#ZdurNCnOsZp8ASK1++9H&$k0BB(oWY_{3&UegWDw7Oa*aGW> zW)Np0)0ouU!WgP2EMiu3nbx%CGh-tVZjO_gHo#d1!GPQt!?9oPBQ5b_J#^B8PY2ly;6@w;3p@rIP0baH#XtrvDQFqO5 zI2u3^%4Bq$_o>k}n9?OIDV5S!UJ9kJq-DdrqR(iO#9=j^sj_GqQ=R@OWD>&{%p~wX z4OFaSQV?0t|70o>pyq31KV|Atfd;haxD01TU8+-2b~3Hftf?h4YRIgbAg^{zswTrJ z2U+<#fu;ukqn2bHW{q%h;L;=_M$yTITX&fYlg!AY@JX*|yp;kM&KKPRY+}0ArEdCu z6t3$|7k$>0TF^=p!#OzZ)20ns2&VAevv0U_R(pSA%hR z%g2bO|6TIZ*Sy_T&T@QHzT9BTH<8ed@(xTK2p`x)G9*%O73UPHbpDZ zkU#vf%m)cXps}d1EdGIytLmd3v=(bWtf{emIwZpn^{_;yl5tla#-)nZiG7u@KC;bX z|L%I6ye=mAwuiod`kI>dU6`(W?M+_CSybjE_Os8~)^Pn(3lWIi!rVO0D2NEBC`{`} z4BAa-`#N~r0++bX_0TcQkDwW)4ZGa^u8G2{qOgnWhVU%`6?yblNx&4PECujax;kK4 zP<6putuRsV3Yfr@;8_|QAdr?gLlgys!|I$tw z)8Qs7Cc|MINEj4PQc>t0dI|`FpxYe33_sk$4;QiEZKL(LoUnL~V!BMPyg`bIdH5;> zCx9^@88~ry(HArHR1Y2*D4%(1YCiQ$AA`%2Fb2(&V)d0DMeU2}a*+rp^W3eSSGI6_ zPMmYgKdicwf{%O4lYaDQMoxkc`kVWKkvYfF-|~p3oaz_(Lu)kMhrz%2@Fzau{1Wka zModEPy*vr^LF@bfldSmn$M05(k5<~BVxf`PBS~O#kf#hVFy}C!$T((Z$A$<2f9O0a zM~4z{hhV4xn~aAXkcXy#h%V4ra4i2s2>+JFGmP)bQmI?K$iB|Z%uw)K|HyA4;wJ^& zNR0fAjjkh(;(|Pa$uoc;Ov0p(y2Q`;Nbf#rP!b>rKx>f>P0=U`ZX`gN+78i>&3V1ttYB>;k;Oj6=)(qsn><(Ib1U~+0$j^-e2sg}^NdR7e$T@Bn8;tesy-_$}Q ze91EkA|y;gD>lVODsR`&>sokk*uE<>es0(XqBfw*o1}nMKF<#UF?ha<6nrhdY~>LH z(Gi0u6LqgI8d07Gu?9s#3;ro0LIMFw@y<+9EQm=Gm5mj}?VG{~-4IF>Mqw6*W1@t^ zqTQB`r)UmQ?Bu&+rVfhSl_JXbxs!|8gY{r!nGg$18eD ztWu_8#%ki2Dl0rg0XnXz%+VXKs;ETnVNA|vd?w{i&g3|5=(FC_+V<*=wub=s;|w9astVC!PSAZlU(GGk5f zCT<{&vv#5?NUO7uVmeX_Dr#aRT;eJuivkpfOk`p(@X;iMsU!A~{uTqkt_(K3h{HOJ z!$h!igz_jmZ2YFiNZtaKKygSKj%YMt^`2>2rt_D`~Jw|B^2twesegs{qiF>GaYo zKX3Q|)Ah=YI2i1qv;bWsb0DlE!jQw>pi(cmufnhcArh#8-ca$7(kP8mD6jHG1dj8SNk(D)(?M`Mu%? zZ<*GyB;3puEe|B5Ku3!QH$Ou5Dih`IKpKXwEz>s028tx6T(1qc4RnyQKRgw|NhGW z@kK%M#WwnMPp{?QI>q1=f>2AXP*u$gR}|qI4;#UAEEW+VbnoG=Obs7Jh;H;{aAxIT zh9|6wtY~KcC}UIS5gtu7t8R28Sfs0+UlCqDeHSJH_h?~7Z6)Y<-t znXt>;5HfheG}#u?Hv=mUMDrt}QU=J_JU}LM&D-s|IKDJ~r z7FPsBEDzH#N#PUABV`>n+J@w4YzHXwa${wWN=UC{({jvW@Lb+B3^E}L*mP(iflRk$ z%*e<|Y|wge0y?^abu!Cn@pu!!89WE5$DP#Xr<&R)949(CRf&twP*yBho|g z48rB~DM$Q+F$ROWMk0+?q&Xr`Vz%Ig|7ZpQ!pA#z#6@-$)0B;kFKrxAs16vEWKq(EsK zA}@+-LQrQhS}a6E%^ zI4fr^N)$LNtyB^_v?H{D4G8$x|FTGANw$QMsb$wuNL3iS`XVxgwoMCwO);SWhSqW- zM0Fe`H7XNDngodbDy{~ir4AJ`pn#T?ctz20iPzAH6XtcImVa&P+ai@A#ZZHYP5|pD zsca4eYcN6-ATvNK>^@>Js@O~EgDxBV!X72m%jCFwLF+6+RjW*c+enT| z5kj$WS4QtqQoIJ5lHgw3R_OXr*@kWN;_Tgu6Srhu3h*CMp1>BTQ>S7u4-elI)yfBrYq{+(wmGVqIHeCVFB@jwUXbYXq|t zcevJHRpXeAG7FA*G>H-~|9B~y0eMO^_G5GQ=AOMkcy|PEDnPaCp z0<<|~6SibIwrI-vpbEg7y>vP@L!3WWKZ#_TD}xxlCM0gQWFxgAAYf<-nrPdUXy3Fn zW{du?tVyVjDYwIF6VD==xuUriGCB`z>MFjJE(!|d$O=R({MLH_V=LFTY*DPsvc)l8 z1C{3Qb=nWcW+h3A(n)ZanEAp3X(d3E1qcLUJhB2d0`KKoh%6?8+d#B0fJ?>lqyO%& z1J5Ec{8m2nQ*-lEqy>|Xbj6IctIVv+5XIEow1uIt(i027g;8&UUr%3A1v_StX>V6r zZfi8Sz?;dEojV6CH5qQ zN1`dJux%pMi)m%C+^`KdyA8P|wA+wHv8Gd&H86||Cp23u*?<&4SaTCOcwGBqNr8Q$ zU=vt@g3A)sz-z2=ulffWe2W%r5J1Og{wj}+J- zo;TrIT)PZzuYd}|Q8dA|4WhQ|a9@$elSibwdla~HySPUr*KD|kL!kh$V7?#1I}7M8 z4l7>Q;%Q(_mrjbM5EW5Vl!>3XiP`Xgj--4^BCWIZ_*N(4e9}={DPfXY;VeAE#nZE; zL<$sHQizmu|2@=KB&d_WMuL*gSI3Q-ZjUyw#ek`4_|gXu4b#_N?-4T@#2JJ$>X1@N zq6|QJ$c4Pf$w0`-0F+_!TEEUD9IIQy^;@C*Z)90oPva?KLMep6wf4qPto60?I4-i8ou8>k*;%Q%$DS)4{eA?*GCi>@ z7H8W^Xc0OSB7&g1Rx$iGs-2dL&WI#NCt#IQYp*s7>^us5U2~XO*f}iNfn6x$Rvd%c z#ZorR|312d>If?FDg96=|I{N#aE!Mr$o;O(ax`L7;x^l%bKF&^+h-GD3n*9;7cT(U zZ>O4aI6@)TJ=_DJ&5K3eZz^o^B8V_z-bZMJfF#Cddf|%CjlAdtMRzeZkGc?Sf+?L| zxO-(;_c;nGc9DxoSR*wu1Gq>60O}g_dbgCvvSdY>6Lx|?KZ#HR#gbV5d0YMn-9&ni zFbcUq2`-x>^$w6&Vw9|62Q@T7+hkVNJ9#-hp!auJ7;E?3w?)qvci@oeZ%GZ$kig{- zr>Sl*GF~iM;kk`FmT<$hw|=&>0!p{OwXa#m1_HN9p$&q&GPM4=%aWsnW4y83wcnCe z|Ee2XMq%sI?z`#`FMQkX$$<07d+jB?ZuxiXOM&(x0>$SVwF$=V*B-0_OiIC3Er?} z@>aO4ZG(uD^F?K}phEk-}5S^|Am$$%Fz0 zmQYwi1tG#IRHisgSdhXLE)ypbyom84k^)Gi5Y)6~6e}qS2$sy4BqPC;7f(i!{}QFZ z%a}1+7Kjif3r(3kchb};Gm6lmM2B9Ca1%)cr74weOmgxf0+pJ`kg|&Ps@AMnwOo|K zb(6}ANycp5gmh|xOYH0zsTF2Z>nIr;Bvst|s zU`aP>0;qT^N3MLa>f5VgkwitB1yhzx7@-shon`Ff$CFnlK8zG;OxZVk29;fuX6~Xo zh4#(~{P*vms#^k?dt7P(1j(6~WIomT@{M?#13>`Q^Ku{@q2u-JnLFau*DY7idlCr( zy%)K&U+J3fc8*b*6P&7YDpJ+F{Vx34v0V%e1mlm3gF-luoXi|VjHcH{uW@E%vV{HT} z7F%MJnFQX5t1XBU7o3!F6(?9ZNlF<|T2;mr5>Y_K1WOFGfD#ue!37m!hB+n`VV-Gb znrN=6W}9NZ`KAOIDY3woQxssOl?70+=M)p<`R71zis?~tUy+0tOA>fF7I#x^xZzg> z)x^`JsU@(XPd#a&DWzjk8dDZXL^0}n9u}9^7NoSYYOAci>guXIo)l|}D$%qFtYo}~ zl&Y|@T1ujr86iuq zp;~m?YPVwf2tY|%U=l_FSd4lc5?*B@8g=2yN9tozBoWiUQ6wR7jQ~qJ=|z;L#&AtQ zo#rs81U*c#!-is(QB)UWym7|_Me1=zkY@C#hDc6W9LOL4sB+4u=7$jgA*<9f$suc; zailm8n1F%}B0H8+kL|URM`W;t^wCF?!Wk(lZbHf?TSzeqDQrL;BU?BYpaqUmc-1vl zP(S^xzyt#f@KX*Rm2pcA4oFZLT*yuL+;-DVhTIe-1d$R`2*eVe6b)|XM1`MeIN^#X z&N$+OTLhp20tuuL-wQ#c&=dwSRMD9+$*dA}0bitm5KGjE|EWnen}p!Ry2TWUP?fIs z6YM-ia{KKtWf41YL&bjEq_M%59Y*Ncw3;StXvOOC)>`$v)tkuqRaUKRvNK}V2bO37 zny_jWt4szP{#G>Vg`akcl@$H;d4)TCOy!f|5lvaKg4S)OMPXJOT4~V~#pp*p1W_Na zz#|xzL_jlE@n89ZR)9=|A`@AFLR27d8VZueG(!sDO3H;Bq`*XkQNWFELKqa^425^T z=^gK6!or-maD}+538p4vqMvv)B z85f$wBr;5ClvL6ao({5r0t`d}iJCy0$Ydr;plM99G!qxj#0fTWff8k+B^Q)X63J<) zPI&qg75c;{Ej2_-uH=)LuoR|3jYTp;0%idsxiU9ytW&nRl}tGGO>T-)VX3K~OiI-( zw*4q)Yc$KRVg)NU&W_wmr$510LLd1^XdIzdwAfQBQoRIStr$fC zpiq-swTcw7OHCA@kOhgpN)ie+l|U~hI!!Rt|5fYKn0DSp5DfP0BJjdQ0pJBuZ6y?K zHX<0pdSs)SVPu>%0p~a^)w*o1ai}dTD$0!N#`=ovO{M zYBj1j=X-IQgibxTos$B&vSCK0js^%3OdCjNal%!Ue zhCg%CWTxo^+Jg*>5xOnuZgX3#l=P;MgHT~|e`94yxKMz{>GGAYOq`k;*SR|tKmiJv zfZtSEInFi2a+>>-W;1Ih5G8CWW#yxxYRfU;6rhGMjKW+z!_(c~4k)~>VHA3on@RzR zDeJ=+dPGDJ!uT(gZ;=}ECS|>nDu*Ce{|OdgNcA6yF7IfH91N43_pME?WHOl4j04w2 z8{MdCdCS{EQRb_a6cQyXOmd8m5<^g-EoFGIDWOs{!8EIkmlXJ0%4OCA0SZDwGT@0I zYA8q$)6@o&B@8G`J{$!J%mgO8shx0E7@XilLMJSiVT)U=LI(vdaL1|fbF6c`8{b%q z$+_Wq;z*$9z^6zxmX42mxRM@D(Pq&(*?*S9k|(c+E)ddCldssF?G`|0(9z)!JGq@J zhuO&ml8S#AM8NcU$3Rj}b9tx?#P8_QczcAd#z@rD7;T0{o0udbHKE9^F>=r^8ML46 zt0@Bi5i%kY7oF4dN$OIUkaFYG|CN?dCoL7gOG!|GXEzIK&W0LIQwRbp36jc8=jlqT z_LHjz^`>Y#`h)z$p^%QWGMRzQ(IER;PkSm>0Kmkj#Qt?S!^z_PRd8ZG5uHaNh!G^X zGg=9INtBNT1bep1R%H2#Mz0b$X~${{@cDMJq}gqR8Wen^k_kkU_3c&wS__<_H$yk! z--~cdSY3N}zuMib5IIYq|6CXAwyOmVe@HMb#a9?obIpSd%p)2|Yg%hWlVN)^VGvW; zri|_DV~3oZH;MB)=Zrj^>2&2R4=c-GZYY;;Oy)3WIm$ambB;MT+I&IGhm)X%waV3L zO!L-Nv`{|4GL6Bb7=v1U|IOD)c_ryR3K-fHD%M%2gusSkY~8+ow_GwLvVOZ0odTeM z05AlzZ0bUq-0rx;$$d?Yi){h|uqe|WQ<;~m+!8d$x6CFEwq1ycQfs0w_!KR5)iKnE zN`jLJ&MqdIKr5~##_=qqhBUA{?rx(1iO+`~xjT)3hB>l6aasPr4z!vS)&rzOQ5j>_ zBZXW}CX?)9QleOy4nd%W6_VfG3bz>9aL+ufPP|;)VF@a#j8sb3~{jo;<0fHDP z9#Ui<8Yn~xf++^l9R>13auk7R^nnNxfnyeeSA-uTXoDwMFE#jpMifU3$VP?|MK%F> zP;qM*_f3POBYn1KZvkkH#7G!dXpyu9Qo~5Vb4eMYNvU@vAL2=%)Fe+LhEc)=d~!;d zW+z>8Y6So%yL2YCjB&hg4tLkw6hZ81yxM(d9qm zHGYZVURL8YHvt7)CmWg(N}E6wF!4>JuwV)Xmg<(*1JY)d@Inh!z5r6S_P1i&d?$?_17fFNmkqzmN@|c^oV|dgdVnPNT z7Q$vU$btsqg2XwT&QT=9*&Y5-AZk-UjJHHd^d8O;WL6X&5He*RwPwXBoENfVG#F+C zB4uTkgWZ{&Zbn8IqMbWqWG!r!<1(M(*f%YPRNk}XL z|7ZYuBkQP`Sje9!u`f=!oY~WWN+L=Xsuh!Vp`3svmgXmz)}aLulS-ffIC)EFa!YAq zTCP-wxs*${G>2}u60EcUenL5x)+apaYFP42X;LQ9v~!MEXdb~Gy0##W0yjj;E(#-w zA(uxZhlx*Wi4VmQof3*tdK&)r6#oW6qEi4>V~eBmZsw;@7&R*KhHo{}ZZDCGtb#2E zbBd(EEaLJj)p$;WwG+?+K2q0Homq^1%3xO5H6g)JfCg+?*(qsSrqei4B2hJ216N~E zmRtiQ$KAqA!-CwaA3BlmG4x1><&|Ej;H z6A`e0{{nel)sMMqkW=N4OSY?DM62}Zh^nZMy}GMa_A&%{6yoBA`>3m3b#rYakR^G5 z*A;L*H*q-SqEy6C*Sfk!KVgR-RwTt^ zgsd^So5Z=MYr31Ox)#{FmAiqg>$#ZQxs^-1Q?^Mw6h)Uiy0qJzt-GD48J)EY9{*v1 zNAw*N7#=scg6U)=(#p9j%PYY{Xn`iRW)VHv+qBz@6;G&0is?woM-(Wuit5A^bAh@K z@~&6G1z0gRU?@t|MG;q`N`8V`sYDQxW1@DbBz1U8enN*XTB0v1|8_D-5L<%45pfX` zfhVU#h-p%Y(8LK+pfWCTXa6~9QOT>isxrftiJWq-P%6T{wrq$1Dx+e;X=)mwcN&?B zb=5j4F(nkII0{;zEgt7hsqv=Xf;7{p30OxeZ%S@70Z~#gQe=R63iGB&tdZTCjI7cI zeYOQ%I|gg@BC0ZOK_>|z@lFugsBq=Ql~h5VxKRIO#?QkR2Iel1z&lx>K%)X+1G5wp zM=&8~aiVHk^(qjhnxdl`V(S=>J~6_B9HmbB6KWG~`(dObQ!*>l$Z+$>&ibnlOGS%Z zq?gPcMw%gv+$@}|$!jyok-Q+Ae92Sc8KV3#4d{oq=A(| zTNx2RZ~N>R5Er%-1Uwf(vWbuciO?yKaIz_@T(?FUj%yU7a9&pt6A+br3Yr_4;FxM@ zEseP6zC85`dP|E)o)Gi*GvZnEVBP z&GVQJm0YT_mzyEdVG$E~5n&hBFJ%>b?H7N4EMiw3{{?~aw~KPOqw3XnYn%92wuzfu zC1%zoMi#cV8okTAwCmQW>(-Y$yTqHho7);?NxDf?x_M2!t80X^iym`r*Md#hc73^) zA-Zv`*lo?$f$i9T-4u1boXW{MPgb8B<7ka`*WG4GLGfWYvc;r8wMiX4Abr!;LJ9}^ z(jZn8`sJ1DgjOrt643P^EWrU}P@zr&C84w=ZZW@9AQ4*qCtX5J1+V}mx+cioqWvqt zEIPpb`=VYV-4S6Y4U9~8GKf36qp*Y~=r%6W1R0AoXd`2iZdBgLN65xwFCUzV7G=Wc z1U4p|!cp+v%T{&g)GRD9d^G$}1g)4~nb97(|EB(=E|Vw}NZ_TdG6tg9Zg1+e_SH2J zKCVk#09&91V-R%bQY#k@5C^MFizdK14|*H8NmsD)a>Ab9Cmy>gBI&$$6xKQx4|S>aJ}AKRicM%DhvY zf~P7j%uFMZJE4U*?2+lZt|VE$W6@Y&w*?Ln&5*TPEU8LtNDu)KCS71SmR{+$G&tYP z1>3y8j8gytU|OVQ&U|yuf!EHl6?a`w{~X!MkwVUtUKnjCNIVyj1p{5Kp!_ux;}~L_ zJ2HU?ERhLXP@3{RDVOPa!P9LM-8&7r2}zwIva@_KL4D#~v&)Bc%+s{2AU28-prCD+ zL)&1)aS`+Lr}P$}I&C6D%PKsb(}#q{RX8K^uI{|2;2=R5tiTG(!|vM7B&-5M$Q22` zQVQnY?>L(^h?kldHX5@17?A7ZlOke;drg2l0TzF%H2No8{ndi&@rWxFLLM+49P+#2 z+R61Dt=n^YZM$vF*RqSdj@{RwEAuL!x-_4e zPlgg?Q1IZ#B&DVR;Af#!k|laVzo_J)7|{g;?7#gRz|1Z9%gqV-YTX4v5J8zIXUK-z z4crjSqjE^WW04XiRQa=mZjwxXO3L0gtTCM*3H9dC@9m44pb26?K_pwJyY-12iB5@U zvembApjmAn7sxHvHC;PW1t5Ji{uqG@p!@@jUAhG>d>Ua}KHd^^T;muPp8QP1;TW#_ zt`Z|xOvQbsRu?W3B()xSTz{c<28*toLtIDoi6BHQBH3CQ^5ilZAnncP#xNjwb97C#=UA%Yo=Hya}rX72BY%Wu{aJgNZcWvDP6euY`ocQU{RFI3-tsA!P0$ifkuDvy*TdW|l zZkHQYY*>tB#gC1W|0$;yE#@<&f1DsnmICPm%a5N4e#F6vKx)x6MwA#$;L{EfC?tv` ziUSXvXfVgNLm(}QCR#6w?jp+KJ^TbKAd(BS;P5^B4ANwaO~xp3lPxsKP$K?X9P!01 zq&VxbiQXddMie#SFU1`NE5L< zkw^75oTx_}Qxr4Dzyu;l3n?gKD-tX)$-+K2A&DS~8KaOOiU=sQ)6N0}l7KZOCXnLK z;r=YH&?FQ{LV_tKm_mX<36fM&{3enp%{0GUa8ph@UGTaD)&doYP)kjsR8mt#HGxx4 zCDm0{S5nOWTORET57X9 zmR706vuG@fyc16=Z^J^>S6^qu%F+xml|qYA*dWDScgY|{URK_oQM z9!-HIxG4E$mt#&@y5bgSlsJt!zIf*)D4^nJpMm~)Xp>FuPOOO1G-!?q1SCyH*+gw7wct?0C<+{`Y^6lyimd_!L~B2U zSY*iW|A!QkB1SaP^jpBewb%l^fe?Eu>AAANJ16|mV{!~Fm|Xnw%=`24L^4X;BFoQ1 z51m9ZJP+N()U)*b^8WhkeDV0uJ19QPAJPyc1_w)^BPpObDv7j^$O4KiAjtxYo9HQ~dhiI^&OzH^;UDFS0eU9S)3I3nvFG~IQ z^LKy$`0?Mr{ombBBf2VpT6BUG1NyHh_3NMh8YmN8iRvZcqF@ER29mNA5JE;_%kvC_ z7?7k1O{Cxp8Kgi$zw||gdtn8NR@9xNX@M1^0E`rn!XUGdD<|FR$`(5FL(WhEBxNAO z|7LzTnaMCmImtOq0Zuc4%uL5N&bbY5bYsQcRI!S=iH!m>BN~t>VTq(sB6D){GcGBoFFAIiXqo_4u-*;lqEZH{LWb9qBW2Jk}KPKPkm~49`gtfB#4MYf2xEe zAQeCi=3%5@Ab}tRon;~gn-NB$0D-|g$T9H=VPNuRN>ZLOggJSOBrp{T!)z)NV0v7h z3LuFPMr4kbQjioBw4Wv^DMh3s-RhiFB1u3>3PU>GF{hLy&kZw2Jkn7$TT}oZF>Wp& z^3a7g6rqTGWGn?bOQ`aMpf{!Sk_FULo(Q5$DF}*C@w{1U=2Sga5h_uxp{G0}|Mkvw zE$AR3EXYB=q#%Pv1fiWmORQYgETmkESj*auu&x!ySiMT354}|cEgGJSa#U6jCFw(_ zWvpRoRHYe>R!4&+(ul@%qO&ULM{7#cQ;kQaN!S(=5b%+oUWA7_$zxHyRhF2}sayq& z&{;A?AxUTfFZ9}k1hgP8dNHhC^12IGwaT!5{p&zqJExsAfmKql0+&o}5FE92H?DAC zH=f}@qk>QX&de*XWZ(=ZcGfW=X3UAHF^!@MP@9sS3^$3DSz}Qqvk3%YIEM|H%`$ee z%VLZ)R0tYpY2&llppg=2&+E!VvDIJR^!LlhE|;^3B$*?D(y z(_ILQ62~O98Pjy7``j3|V8XCy!AGN8TZv+KIcLg_bNd~UDHkU;h2-{j33(h*q(?3! zBmoL;J6`iR%MHJ2vx%hphy zvf`oeWPqx&9|QNs5}ZsBT*itqi`T-_tn`?H>&uRfm$H%;6NM=nAs&mD3}Yn+#Uc`n zvahNFHS1V#s9wq79{Kn@#T>>kaAA=a{4$EUoN$F}PGKt+*E_h?|79;@cphuJ;^nY7 z$2LpwVxN^j1|)Xou+kZ0a>%%VCbA}DdX^1sdea+|L0XMi5x@k%SR5uUQHjuzPN$>u z>7rF9E2v#AcidvZa3yR!`$6S=1ewR|(5C?Fu@6YrIcqV9!btP75|ZKri6j_TB9}}M zL+Qkov5pcX-O^Di&qK-!Z89e_Vk)(%%@rvG^KAQ>OHRVHq%BRe**(${F^_q=q7pCy z&UBKH%uTv)-^iNtzUDXMV@*=Ru^@*ji+%i^1x#eJopy>8q~xgtgEwjke`3@YrmzKw zqX^|0;(SSx`RFU+rq;btGW3 zZiV0oA{gg5^=M3U^>UzN6j~&=Xi9%hEufDSTP&T`gDmnOZUMESE_ds)!IP_RZKpBW z+3vsw2iAG*TMB4x1HZDbXqK~h=LbZlc2IIL#}KQz#X+GyU|?wtmb zrmJ}Cv_v6QSH@D^t{`u0Te}Y;;3J9x^ota^-vlXW=p!fvNJIA-44mtxDJ=-EKwYuj ziND-C=;DpJ5|Ms_c0(MM76LOiL0TYszZym2(!k)q4?MYzt{v*N*WYe zvwCSWylA26>b5fLLQ*INQrLnUvKwXdmL@EKF3>ZKaSh>U8PQN9-6*3>TLK0+tiw`* z)NrCudo)KIMB4xkkZ27+3?ofbj*Ll;=MbVa|B6I7w2g0x3JTGV!@#4jxUByA)sBu9#s6!ZOVM&=%m0}r5m-I-X|9TaW)F`0Z2%Z9hr_-^P^Oh|e3#3e~rg17_ ztP!X}D|s1%OpyXt8auGdDy*EUw9+cJlL*t3ge}lY_*xp2bUjt;iXeau4xo*nImFJ} z7@*m#&bk;O!mN)O8qUiJzgsN6R4l)Y8Mbr{KdeK{YebNc%b}Ue#AHjxbQ#mqMBYgg z^1zclI?LBuy(PS^uxSYR@F{X}h*{Da<(UgjNSof{1mJ>_-cwEYI}ofu1ma2_+gd*7 zVXlU-j}3~PzS*1Ti$XAS9JmRK{urIgAu#mV0x9vnvq_xw0xt1W9rijyh3UbszzRJw zy*_Ci6LG&|VjKFCKh7b?@sgeS|JY5gFeo~~hyv^o4|==oixG$00EB};KTLo>S%4&f zI4;1z0$>9gI!I2~J#HLG0*w(4LlX}SK@dy`4a$}iWHFWai76uroWO}wF)|km3aSXQ z5`>AGyNQ;V&&J=fsFPRl$lYK}}h zv`=G1kO%>Q{woTp1CwJ$~;4ZL@5Hb=-5E&;36F3BPuMQsNlq_v&{G+rTJKo z_=tjSNeWsEjC8U!xyghl|AER^#Hvx4q~5utb;2ZcnH%${kK38W2mz-#xzaVfQfb>1 zw?hymF(q7Lkaf8?(n-fD!4cDmMJj=$)R_})#5!H|#IV?oEx1N&EH`!&lX0sia%9Fg znl?#@o2~oBO(M8FF}Qwe6n+epDJT?v>=THKIH)|xc{#|1R7m}#R!D&qh}6CXl!%W@ zsDtQ`1&KCG={b{Qx_PCQoBPO$N;-{-IhEW!@(t3s>-^6RF>UJNcBC# zd5g1p#Q>x`9U7?}|LRr9OBuaX%+C`VpizyFxl6(0Ga+E3J7v5^*~`hJ4MfZdp9z`E z;;hXAz0LwXti4m(cnhTDigwDW$XE-o=!&UPvdILntl1h=QVX;Nuq;R(kcb3&OdHmu zAsXVf-Sa(C(6zj&qz$eGrSRL{7odsJHY!rrJZU_Sr#u%+I*w`p3DHUOCu+fa}?(PtAjM3eV zbc1w>esniTiHekfVqgFkpMT;#?{&^|-_N!YI|v;}Jk22Y9S&XYRa|l*?tW#YHwVm3 zYam?sw+{QI>X+s2-KA#l82+mAR+oQ0FGZF+8Q-s;z`{st0O!*st$ijg$!Usyw_#1` zaF{iHO=s8E)SIH!{Vcxoe1VfkZ$~bHWcstaf07HI#---Ak#h~AK1+8!9$?py-ioof zW!kjys?gq{-Z{DJdmK=rsA|*qsreGZqwR?lwGxl=^{_;wPi2OnZSnSSf~PBL{=;Ug zPu3@_zI(W0;O`K67M4z4y;WqBwq`Gx_`HH3xuxN zA``wadn1^^NpgE5a*WGVCwDR(z_l;SC(h2(D5q&TTlfqp!TRH5wy;7$BRX4y{qcL_ z;s>au@5Z*KlX3UfX~})IlX!#3KIa>3);Y$RZFN>TsHYlJZ+!bYX@wpO^)7=;8~mSr zp)yZ%oZ`G-%lV#LzXC8$pw0eM-!Uz;+B?-`Kx;fABvj=P86*t*J90xd`#(XtX+Vp+3R(I>&-S=-^&Ut<{=yG#!W}@{N*8Kba z84JPk)5w!=ZMWu_xz-1{{lXKQ^l6O=Ebo}5UU@Py^2X^_>m>L?-xfbX@$t!gZrXbA zZK zOG#mCs`=k!=F46##3YNux9lNU5@hN_w6J}U zD{oB0-OV+>upFIN0u2;{x=Qu>yZ4NTs_Gf0nPVsNA8zPv2etq#{qr-4lXyC{rU~H! zRo5R4qh>K;RCU=JuGjge@7(nWh7S$}y?J5deK|Zxnf~6DA2W6*b8b`m`<-5wd-sS* zy5C^}1DXM2ZMo9&vFuzDHhzKES`Ij7@e>q78yg7Z_-QfUkZ;hFL3ge*(*B4m2;$uG(GhXz`TFkJ!N+wMm>i-vh) zal^uwJoGG+?^h7TPmQ$al(lEGaZmo-`eM^^CfCWn@!=X&g5u8jxpmdo@)iU@_wg=d zaYM&LvW$7SXO?Dg=F5kRz&C&Ml{r+%3{g4+iC6We z{T81vpv>>_rX%mce}c-uJQf->eJ^b4>*|}a39;AcUVRp+hOMF6wPWg!h0XFd6OVHP zdVfDnvw@zn*=q-}3)1heYTye~QhlL}F5a0EGfay7*A9qCn-Qf+?@jBG%jXY0&s2VR zP2a|S=C-Q1A@he|@K$VH_4QkY*WbP}09JSqzuOj&dUtUf^|!5(GOtZ`GSC0jV~W;H z;|janOM{LZI54C#ELOCA{^DFI>m1I^dvo0BLA`f|>6+J4w%Rw5I??BS?7TWSi3iFZrdX=O};Q$FIGoNDQq7DzooI-Y2s1q9OL z(<>1~K(t<)(iDV1hL+qF)O;)MI1GJEBx&oGE7fI)78WTWzGguUB`X^1oNUy*B9`23(9(me#h22(5C3b>?IEZO8N2wggqboG)Mc{vRmMdb$l*b{|L8(K z5DZ53HkuQrq)e^kDhC2-h%78XZj|G32`F%YT_Q`G$pAo;b_9f=N41g?IO=K3Qmm*3s$C4B?bgaH$z8NeqYJQR-P?~RvKsw3vi6gR4QUNIm=Rm5;)nU#P$L?f=$jfWxZT0VqE7a)B+gY1l30=uhOV%mXd%3&DN8y z!e;fcC!m&7VYEy2g&0Sn+b`R0mXO3%i@dpPmz-s{_*I8A+#mvyrUe5vCp*e;1YZ>_ z<9U+q>T8zCAy~-{Np>w;7;+`ZGhx8LUI+&w{PP_G(E70r6Dyq`)+Qx(lhWp7zKXOD zOHYS={Wqs9+7{)%Ci%^xJ~6z);nzg=16mDT+g_+$COVa_0+{8tvzf1RHX6BRP_LCf z`Vs$Q%*T~nZCKMLnP7gc>V;E*M`frG`fQfL3}|r18lpn*dSBYNC@zZ-o&LVhQ9`R{p`nz`xi z?JFlA*>I1q0bgr{UVDr~K3@)VrVdqb?Ps_D%J%Tl*JQq_nsf#zVN=g0)w*L)ekB)a zmSnAX@vhMOuj$d_>nsszWvtPaysd0&nyERr>hHeg0u3-MW-iYSI97$-Sl9p6&_*?$^Fsz~kk5>&5 z$Q%i&9H0D^q)RU|GKDH<<-KDyuCy8NnA~Hd@zU~;qCdg3N9pLXz#OXFBs1+QI>@sy zQgBlrn4|(tsHU@N18Z`QfcU9t=y_u@vhgz$Xg=28=@kiE8&MWNz-?ulHQ z>M9h~AmTbR+``Xp9uNojGFW`qzdbVli0BCQaG@2DOlLdUAJKODs=tbYfSe`3L|^8p zN(R;zQZgkRTKsZjZV8n&0MZvXg;qilb$WzRemngab!~n^?@{8)=?W1Q??a+C5c9&Kqn83|HG%yZbBw>$qCwlnGd;C!ttdFd2FX%q4!bDzM zbVw3(A2o`YJL<^42Xjq-c)2mNBX4?}SmT;8`@sqQzGmu2WBb)QTI-mcjis2?j)E!= zH%}NS*;Ft%L&PS~g^u(7;%%uX&r;Rn|LN8&>U2%aUT$`@#E0lru{slvA8#3VhgQW~ z8ApmZT|vlI$~b^6Yk3Z^dvZb^Ye8}JJO>?hlnuuei#iRS-HBhlKgb{RK@)oWwYvYd zH*0}EZxL&M}}SGD?z0ABt};YVB0mg&i^aX zR$XC;^`~B4a*zQp_2uPWCsK=o`9m&TQf8!2** znH113J=urc0^TwF?ot_>GPPX}E)W-{#2x{8adYRU7XQ4HG*vTm_ECaKs5+XoMEJDv zBg}?K#np@$Kl6ReVoX;ObN9lwy)2^<nwnWOgf$u3iVbV`7bh$}fli9FiSExqjKU!(Y72Ih8)C2fyoWjp-MxOKP6= z)YQkff*gdg*=~=rb*jiBrQjDI1bN&rx(sz+?rDl}eqN<%0ln~ks6mZwbt5hzpiO>( z4G+E9jHT!6+JF3W2*`m4UK3kXd)v$3MI~zX0LQ44nc*%MFYVS#awP5$T-@Z7SuVho zvCBhNdsgAb7j87g=KepNN<~c_(B$xCDj z7HhpXt9;+N(OKmSu#iZ|JKwTx0I%jKIz4)B#hi2 zhQOwqo*YFXFBn5-wSmu5-gOug@r*~BByno)qX6xrB*u4XDT8RL6kT4n3EKAqY$tgO z0K5(TP)ZbjY5e!xc8}T9{7pDwpEUGJv-NZC)WBEs%F2<&ahMoS6G#T;y8}Q# ziTbO{^%9?X1c)~E1c&I%yZ%os*|#1Q%Jd8SD(O2RkwE^YL*E>5rRvUJJi zg#*4))4YxSBnJ%M=F=h!RBvZ#XuiBO*Z`R>@WM6-4>{KP3Q8MGl<*{E<%Y>;j=ee# z;%6pZ2Gew3EA=J{Qhk)+NS%lpC?E{(&@Eb0C24Y}|Eb)upMP4W`!!TC0%eCM^W2_y!@wIy~XQfMu zb{S|;oNs{E&v*{%*(}lm7_<(NaGe&bn%)yhITo)R;MwZmpTK5BLuS@4!^;?t2WZuh z+({&dA;Zl7B=(}WCjkB0riW?$t}GII+qZBOQWZ|c5EG$qpE4r_kPe4K)S;VgE!So*U4)!QJuEr&-^e+2+ugsMz&M8gi z{P*Ab&9hOAtBgy~^@KN2B^C`#0b=Y|KNw|7)384*d_|b-IASSmNm%!JQO}!*1i#qk zaN4daxL`M`8HwHXjnqev9mLUIpVhW8b3)o3IA%~E_UiU!G1<2o4tSVW_C)6@gUei$ z?+$`o&!?@Gne6q{AR_MD6hpTf9=~KgI^o$ zJo$~Gmzs|W%vEdE1t&QD=fI~6){Jrv8gr6=?Lbb3J6CLoenB^y=lUv#=Q?z7#3ZQD~3x3H#Q&mE567Mr~FSKpLoOWw`$k z-(z8@Iz=1hMSZ}`!X`fYV8i%*KVw)g8*qs6gAJP{#3XYhb9H@B?uqFMEW8=7+O-RTVWr)w-H`E3+mozluW3^w(}q0l~r zl1&C0>|IaqExXiR$WERORpNXha23hCFdjXhX~~We&shOm7esyZS&%npUtcTePgVE((CUC)8gW@uE<8P}Kif%S;i6$Z-qKm#6 zG}UsX=Fjgsp}CQVCIu|XG|2De&T*X9r5p7>3OqS!Zu!;MP#?QfnKzVi)>Uyz{l#HL zOj~Z-H-qhAqIp47G%^Qce1^Mqlj#kAV%q+g$tE!5%F!vCVf|58$r}tj@C61jpghQd z^-q>6elXZ2HM2-Ke4(PNDOPij<53*w!JY}UJR_ZxGZY+G+Q@z`&fc*~D|pTZMi&9{ zv`wq0%gD4tu0p6EOlpi2deKp-w-ZWG57n60m*Jw(z@qGC3zuQLy@Ky)DyjlQM`_N_ z=T!dEj^pT>`i;1lbtnG?^QWp@NRG2Y#q2G$#V*Rq2i?c7Ms58lcU_OISiMJA1!O*W8QgLtHe_X&5&*<%Uwr)_(Ati((u2PFvAQTiRe2!m_e|6(6c$ z5NXwAGaZUf3AH@#+e&ouvTF5s{mkN6FD-G0RJ|DOWE_K3UPCj}NQmp^J z&H6(%=VHsuhprs5_@N6rY4q+j7aqaOm6eY_9=h}5#@|41essI}^-uLVb@J(-=DPeh z%QM6TBJgC%tKF3C6YrBPWvoF9Fl52uZ{2Lz5LO2??JC3eDx@$|n!$3=dshr{`aHv; zfVaEHQ{8TlHb%oVXTSR}Ep*nHC{i2yf%sS+)#Fe~+GHc`(W`(_J=~wi=d|}1b4gw) zQrAYx)L&4YdDB5^XCfZc&U>hYzUQefPo88CVpWfmFS9tTjhSq@_I8%jWIlQnWayN- zew)CYzvR*UF(L>+)&Ja z?lWkZMkyM4%O2%gOvaXg?JQ`gF5CK>EIg>oBBlo;yvoHGk2ND1JQIz#)3R-yyg|sS z97?|g&h#HU!j#%+Ls$2aUr5wa_P{-2m4-ufH=`BhNz2cLYeQ(bbMQdg!rG+fG$AM@ z*B)jOWyu+oJCe(R$FxG$il5tYSHyFd!T z=kvb|TptWngk$HCA8w|Ip2GEkN=C%BTGbl}_Px@7FWkPN4*+E+AV`Jpm#8#yWgQ+X z6lG;me+`-NiZm8+=%@A=dggCzaUA`RNDK0)@YCp<$TvU_=+(AA_QX??yp@r8+0r+0 zX}d3aC^{tvItkR7N}QL=33OR)@kF<8M1ZJTCT1Zb;C?c-0Srn=oV47-F>_kNCekqu zJTF*DE75$pj)T}IH`bgiR~(B!Pk?G1zzx6>wbEA`JRDn%p5fRuD9KmrUbMyY9PcSm zmyfcr$53yN!6uEEhHad& zIvKv}I@a_-3Ob`@zSzBU6rC;oz}T%y_dYc;##Jo7}I*;l8%CI!v0rGO8+p{mzuFlJ!qbL|^8|64S>Z!tIc-jvw{tmt!dU z*v3Eg8Chn{@%k)-l5TQpZA5!ls)nx{Zq+J%whRldDD$qAE$Z~;slLNH8d`_&SV{kv zef7eeV?e1~HO1#Y;T7zeTd~ilPMbP7x6E3VuoHu)(@#EML+QL~Ug0iZ`v> z7^={cD9Eclvt;-`VaPw#WRtAO-R@A{KFp8uNS@!l0Y{h@V9$CmOg ztMN6`t8MzKVGYx~tIHQ}>LQ`4mkMlG_24jLO+FeSsi#%)2&A&fBX9h%B9>N8rhu+pvL9^^muXc(oRqg zq6Z%BP|LJ46vM)!?J%Kh5Gj(@=CD*QL5#%nw7Wp~)itU`_|mbc&&0&)JSnZ!%8M`6 znyGiL{tMI9)gUSM(w-aA2ZwrP6-*g~yfnLEJu&*UCGwslbt6&Hi|_UUViiEw<|djp z;<$;rg}`qNq05(hboQ4z-*=$(pQ+F@yt*T#uF*&*`|$2l+XN^&{*u`{ee8U*= zH0;w>eCF-@H!n|*e`We#z4f-RodIME-R~j4#@hnUqi!3j#r{Z1)ix0OwFZ}$B7gb75 z0Kf~&sh(`EW64^ZypCiT;VmYC4sS{%qb>H*vLt0fk0wzYJC~KLs7{gSsrsCvQguaQC20(hzft5Jb|6P{dM)_OxX#Y&7&)K+`peq?Xpqn)f|%bRM`s4HN#lp z`x54QIptX~Or5L*v|lcneurKct{%4q&&(V-Mc7MptGXh>5D;OONxBT)iY!U6?m);+ z%{p*F@uqu~CGjx1O;ar6ZvJ1jr|k58pO0T$-oI?KI%CGreopqlBUr9fV`YDYPU6L> z#XNZhLcr)upkSMDv`HG2y~w7SDT5BLM9pHiFrp4zO3#b)VJOF!1um2`mnhLkO7gwX z07Bw9Hhe_WmC_HyI&*565J(&4HS4`o)>_maKl8xMkqspM0bi{3e(z$HfG!DL^g*2% zIl=s?9QP~)c`Jf>mreHVtu{Of9o-A%u-b#IvLhtZm1lr?XYAS(FX>`eTBjeh%!f67ihXa4{FLsE+MHcJM{#Ek&CAah7!l za(k;G3BfwA4W<){{KM$x_ zcLh^{X9}e+{?&3{YcRMm_}EA>gU&l1VA6Ycy(Wq_|Uxl3V;iA4QX+_pOR5xCyM^qQV`d_X%OH+r*`3)RyUb z-C4tCd7_I+>SdRPQ+MYHjG>-1vFAar=$~j2O(P9xp7k9yJx~I#@fNkc>&4?Skb2rz z2X?c*b38@kPHg>N)8O5)2e5k^HFuL)o>WtHTk>K(eYZrP*i3P~?wFJ{U>Hh> z==765As+Ub?|KKBOQxMs&Jb^2agx2^riaLo(LD{1Wpz-UZ~Q@~e0G z%&$L)-)P08K=+6!B^|E2))}^x=bPFDo&Aa>R=w5z%ndfuAHez}Nj5%OYCQ2mL_^yv zgYFkeo!9*cuis{po?wB6heY6urR2a8HUMzCl8uos9LidshW;{>2Fvqv;mwIIJ{~F4 z+2qVfOH*HXAh8V-L5}>l=cu8TVBkx2j3wf2iTiYn_xzzCx}KlddeF_1ot@F%5SpaN ztAYA562134$zBTPntVL^9;?ud6kh{Ti@)b;eFIf|3u1Onb(WlYt4X&xw-f3d+Da|IQQaBIyt`Q)J>@;olm{%H7|@M{8vyRaLcRuAA+yU} zCAe-A6HVSO7I>92+-)|6wOb_2WKk2m?UvQ22jcg84fNu&>MD3UKb;;H5-aJ^%QV3H zvdx+U$50DEIZ4zY|M*i~n58}rK&KbiSs&kBzZ1xsAkK?vuy`?RrXMZg&SS;{cnjvMkg3XkLQ)Hy;DPLbB#4}0ybe2O^VK- zTOOj?Q;uT;0b*6wx}QNfkvs5~|JsHSfCdq_l!%{nM98qPpV|Yede+0L@Gf4etV>eJ zgkW%GB~=fJp&74UTQknB0J$j|yzGBzhRc)Fa=a$cbGO97mYMB$p%+_cmDh+GjQTAGE5Q zb_@c1k_L&igT9hE+q&?mYQSXbl7vvLCl8vOdgDC~83kT)o5HJebg!=>j}uaJI{O;F1ivzu1r<|XJ-M@_^_sU0 z{!UatDxUXDg``V2n>L^v-g3q}J_t-ND6&^;Il?NA6h;7wo*xz3Pzqm+6>KPc>OI|i?n1#$Hm3ci){)kj&7 zWi%Bp4m(b9a-Z6z=AKAKxPxVEoMWc{#JzX+!}fJW#c!zymyi9|b>%rDgH1i2j@>{U zuFC!B9o`g0;Z5HKs!u4OOum$J~bE5C*~-V}9@!6_x;u zZ2*odOT}AS#XIXBY~?=;)a_fM$QA*^8{1#*GRS+$g6GwARcf4ZSO%FgSypLI6sxR3`3w#70 zU~(=e9gg+7#qrzuvX(f63G9$hHR0ke9LCvvdHaS%I0R5DW-Jb6;}z+G-O}~tt=wK3 z*-qT_HTF}1D)A#{T;r6QS}Yt~p|vVN6jw1GvLO6eTTPT^=LNJvGzk;oBFee(WwozX zY%H#&I{6&ss0*!-6S1oBI!L&?<9 z^kX^&6QY-xtL>{3dCd+{@ey0wIosG)JGNCj*&p(#t^#OR0ji7leFc?3kc8-@9WH2B z4rY%g<}$|8uy#4#gz;L!?CFV4j%`lVL`UaUr*;+FLS)vrIUv6W#wY_r^AW?~r((6R zYt@3(!(x3-L0S$r(ov@Kb^Gh_z)&9voQ(29GT~M;l~>B`ashRy3g2d_QzeOSPfhec zEO@m`Bd=1uhywkcsg>cyF_lls=7_@Dh8eOH`Yy6BIlu}s^yq}3yq=iTinu==~ zGI*Mnc&iRp-Bg<&>Y%D`WRdl5pO1sz$%Y4KKRIVeGzb9lZn@QS^X=j=79f#QUF8jV6`jMk&lX+X9VihfT_ZxlsOt5tVB(wm(uyY5Hj z6e*Dx`Jjia*W_Y-nc?!_({n$!Pa(Q!er&7L`EW$H`jfl>8E4++tYlp=qV`p@`cGlT zf@t)JJKt4WOX=0>Rb zcv~Unm2Xaxj{&315)255-C5vG5>mym%3>iue9_`~yNq^2^Y0c3JFpsN z&T)MapFRGFE2^Iv;_K~Ic(oS2urifOSE_yJ*2S`5u?V(J}$3 zTA#pXAKv(L$-;fJ;@+fSK+#D=>S5~d&c}7hkM)onKih8`?BDPXZgRlL7?90*WpZ=c zZ0RA+w~Q|5hOnMFPG3cx`Haf%tX9bXtgsGpICHkW!&#}*S9y<V4LFuT^c7Yt-HYB-IRd6cH{lG<`iRSMrhmyBrXG2XQ<&OBh;B@* z>h*~B-V*b7EWL?xc-O#tqT9JxT-j2`HGq_4PoMZn^WBmBXqS2sP3Y6En6q#ob(V<% zlg;N9#ojSWn39=eUy&sLCHzo^~dTTcLqAkr7o>vDmhr7y)dqaun#jx*9!N`QwxBDW8Hygc_2q?u4|IMD(t zQaz(PNn)wA(Rste-3z+Iw6>pH@*!bDi)*GK6 zIq(|E!dCNnGEL*$mQCO9@W-qwmXlBs!@{4F4577h1wrP7N>LdSJ)Xp%PNL7Uw8~>H zEnX}-V`bwf^SO9xk5uq=Z70c4OUP^&o@_XLH0=D=yE*>C`cEgvCtIFhl? z=IdfQkxX)hF$DuF)PC49XI2S@v43T%rvH0ibCXwg?v+B_E6Cq%mXa#|2>s>qZHdjD zYgTV&XEXlVSMSHapiJ#-eH1r6EQ{PjutcaSFk)+eVAUO36&>8HOR#yI=p-_#>&JdX zf6XHb!FS3dRY2=mC80;HY(_!5UqGyeQr_Zs{?j4!AR|~6On~x6NmHj@Ju7X#^WMFh zszhMA4|u!T!KYz|uhecF5-s#1bHs1$9*J%c{n7r8t7@wlY+uVA1~mE;v2mT5a# z4B1Zom(qar!U_}!4jKL6OA{^;)cm^CAx?(Yeg*Dtn4i3JA% z87lM^fc!}HT?eTD0M3dxk->~a-}p$Jfz`G6Tm~1d6gsaU{!g! z7MsW@dLAV9RF`igk&zD;r^~BOO-BI7aTD4E(lSsuINrza-*pH_&h$A34yY4nqqMunC2`{fQ(s1;&YqgYFH2v@MEO21_^_Tpm7&Q5amZDRG$op=xt>FMaTVLO_Lolbr#<|3ib8q2X?#vI~t~}{O%xP87Hw& zL?D6mfk0OA1(gS@92t)T6a{MWkA7^VJr3biXDUq+nsP2nQxvLuocaUpQkms+jH*na zNjOyH3++G^SIW4#)m3TNyOdYhsS6Pj)v-GdK}Fa_0t$B3sQKBbv|ugkH8xA=NE?b^ zPb9ouY@HS|r)r;9p!XD*@?y3i4&DQ?wBEtJWo@DOWhr3-ynAMrt&(8cO=%DYyHzMX2ph>|z)g%LN0Pf{$@#w?1|EdG7nvS%ZN;% z8Tx^~GC?Hl=qG^$yi{i8O9%GqX+rh3ST-JGMat8tPHzc+;kWtC2v_?0;*-wV@bV>) zU6#fU`-tJ&O)O(v&F?>-6oEh++Fw`i|MhJlgSh#6Pji)+bLMdq@pE{J>M#dv9IJ#M zP%m}rNVjq1Q|jN+jR}FmIa}j2rW1*$HSAhDI)iMN@PqG6p6?j_1UfC;1{` zmb(;#y(O?1v|2p!tr@zjlrrAoBxaWd2<>pnUo$}xOwAMR@p|CWdnw5v5$`*4K}egt#xmC11riTXvQu26o{yZU zPzOfVWN*u}ledP{2SO?Lob6u*Oc=4Cu)K=F$9U*Z`)(>eJf?zbKDwKf-2 zX*6Yqj#X6*Zbx`>15T|)!3$)t8+-fpOlmaaO(8aV_LWNf(g>W6*$yN(NqYX~!#WLY z-@8#GXrw^Chrj(MAlXfy>(Szb^=igK_FgaIfdW)haTCav;g>I|6{+c#0a*SqTvR10 zs#xG-ZGRjqVXqa<%bBfTtePNn{~z{WuaMo~aE#WFa3khUxfaXRkqYf3^%Xi@HS|E4 z&}6^bYVy$~UT$cmismcg4P;G6xT@~%1r06`F6bw{BHVoJT7#I(jtQ#LPnXU%`Ph)~ zE3Z?#xTUjcynNNXH(S&lv0~~i)u8{Z4MR!NC=y`aY;rJyN#&!_I}-W%H{$ubw%^-o zppx*&8I&f~3a?%WU^rRhVEL(2!~)=+eUBhu;@_?k?+R8E_Z zt&>4sf{}@2+9d6G1MI2xweKqs&s91qG@5fx8v>GG!qMCLm@SWx;3x-bNY&k!LLHgo zEs-ZrUn6iqQi~;jn5wddlgwd8eCkwwiC*hpQo^ZodwwpRJ-5p|AUDe-tb@E5{_#Br z>X+rLuLP(I5pOw+)gkgHILAbmKcaCV9SSRGZEw~&@rM^K;lHEDoZP>;7<9OOJ)}61Sm*Q zls3%BqW$g;TTU_Jg?`@c`i(=lt$k{+;9T-GwIzLb0w3+mZ@17(FH`_$Q`p^|A9#h$ zBApm%ZuXz3Q?^#hZJSD6kGyYh?>=d!sPfBJwb!^vch<)8> zct(u8@z*abh@gyF1dJO2`zjd%==JIo9qn0kZauTmFvk2`RH^({EmeGESD&2k@IyeR zsZL8FC{rM(JuMcM_&7t;ILUae^AlV)(|srOng$#(g3qI9B6Pc=z{C@OrkG9!s{9PTj&P-PWo@Cdoj{8 z=dgk`Y$-D$99!q^leI5u8y5XR@dIxe)dR82Z%EpY<^N>8T)A3VVVeEz8vQbA>`-AF zIv4PB&l%{gVSv^J@zHnuZ@&-!S;WXv;yu1xd;0M8ZEHIEh3EMpk6xbo4>_IjF#}p4 zds%P*}OKPABB z1NKG6EHA5W2k~3;$lT$IiTnlPGtN{9XW>rBVbQ2y$rI2-+ro>TR4yg?2>gR=VW$wY zQco44LQSUaGRPZn1`Vh}AZNN(dD)tCzkcLutVfzD8D-g^? z6@%kikqx(NO@4`jWp+w-fo#nxJto;bzp6ndSV8t_ocj)PuV`dP__Y7kzLyzz?FSJI zGwJe}Ky>4pbKlhIH_}@7(%z-h9ZTH&xX8U>c>5zW^>YCc>>@wCtj0xvKW-?Eh3LBi z%}_bLw^L!`F>W9j_sF5sCU*}$1(1YLN#jeY)N6F$lbMPenYRTM4?F1g_!R%_`KzG< zN~I88F&S`E9mz9Y@w0#d2^jr0n}KeiN4eg11?bmXJ(D%%y=5Iwgd-|idoR=IibT+r zbV)Qn2fK>CABTt+TW}#cME^VbdKr~cX09l!!DXOqZkRl`RV0ecfucY{Ob}x2YR_I_Dv<$+v%LD(mVsT7NCqi^_DuxfuhD3i+kr68vU z>7lVJTW<(*RPbI`YZ4U1&cYkfWos@SWiFkmc#GOgEE;-l0x9%?Y$08Q^(;R3Y9VTD z%(oxSQ(MlzWfrux1f|izl}WTFr8Kp$Fn%p+A@F0M<~==;W?Jje5e0u=TLn4m2!5I0 zj&fNBwm%TovCP~ec4F=(iX(hNdz8e>smS0AK1iW1&EI`nNw+e&2?bVwocG(PdMUPd zNLEeR7)@V_ogNZ^L&OS1XtUAu&z~OqOxqX+T!Rq}l!!=GYr*nRm zAR6bm^P13O6<;tW)(v&&*a>fCAlV!QD|Fi9 z6=#q*&sSxQuTI{tmAxOSJoy^t-9@4O%9jS>r78dHo!-mrdnNnokk11Z|8ujJyLK4} zv`(soj@u&6LHFjCpLRN0NSI&SWZzR!f?H@jQ^MF^=_2z?M#p;)25+Ti%)F6>DIykFt)|Kb6uCH@?4Jo|m!IsRZf@i$yy{x5m5Xk>3SJwFzlQ=OzWC z{`0F(KQcyhhNgG3UcP^)0)}Ohrd9Ugg*0nnjj{4`l8QCsMhmAsiFXQIMny+X3!1wP z5;<6SDEaxZk3OFEzRVYg7*er(mmHHv^s2!Q;tQqxIi%Z*pCWI)rIiFRQNfub-UNqt z!=AF(+ZB=e=qgg|eN7fs`pk7<^re0K#wE}0NEK1}?Fcj*yk-8#1`P6h)UNR8c2?bJ z>!V+TkC(s8tVYuT3h01gr8Eg7R=1(^J?e)-n7_`*FyE9b^VeVQU&nuM;gvpJ41Rc~nZAoLQ(sDR<;D5{Zm3u8ak@>aPC*Wk8z0b=q@_ zC_%uh8bz)cjGXEcwrRV@2{X76J(L`+xO$A!dKvDr1SUqhKqC@DPyhlZ1khN@1ptku zHflzwFn>{gxUmGuTe_rMjkaZ;w%o~$lwkLvQ8RcMhldijX`7CGAIL!x>MD?}=Mm%u zAMnbM40*55+>rm!JWD*{AW#qqVz3`ynFar9Htia)4`MpbOwA6LO!_p=-Eoo@_fTC# z9^@gwRnrl#nK>)sBB2NqWF?F@nKHEDz>6`mQc1D^{Uu726g`72ScTpoubPDy9 z5PeTjIh8rfB@(rLMJlw%%qE2V#;sygvME)YqIf<9RbRWca{0D#hnF$6D9v4~(ltdXvHG=rmsC0JcZS=TEe$Cl&3OgkkLQ|xe(Q?53{#lIXFl60Vp8xhcuLn=ou`jK*1h=E>F+pacq_jKOOr z!%GDVK+6BH+}Gh(0NXeO(5SoWXj=)>x*!wFhkaXfT`< zX!Wf!NgRTeTwkGF`pG8Q%rqiFHvuX&o6ue9i@x5K!C9bynee`Ck_BS`1;p~80CXP> zr-4~xp&xpI1gJOIZA+Zs&m5xgjSX==u6 znicy|wBtixfRgTFGzy*2&ogaS>U=`nr=XyqpZnA~6IEFa&^o z<^?bS3?KjlAdaqETS{S`#dfVT1IuDz-(x`m)`%On+y$#Uu3&)_<-No`%mcCVLi>G2A0nLY****4m2wE2NvM&(V#l(64%qX_$v#xx;U zgG>V=(M56~nvqvqF}W{(u{{NL9C3<0HCb%^7{MV49&vX~c_0tV>O0BmU*a9#vpN4m zfLn9i%Cd~018tj!okqItow>WK1W;@a{6^gu) zwl|%4ff=?sb>Vc~Ykf)6iTQVKd(!mI(}u?)LfVgOxe(-X{r+mWCNlP)z0>DvFTeSoYG zfg?fN&(UukVO^+QJ4jGBAIdcuNTK@+AO&zZz`gij<9^na2!g_CV#lg{#u3(10ILXy zks%gb&;=h70n)3A-Sie)GhbpO!>j!_Yw;k)!yx(_KC4%TZ8&2mmJ}qAge(JNEgbwP zJm1jMT7)6O){{L~D#KL@Dv9Vnu?XWSw5WPWF7!h`T}+1=ltM4$Km%Sv-w$SeNZ}t5 z-P2#FZOq1NoW^)~h-FNPUz~?_DE|@h6Oa1hPfW&m5`=^}h5%6@0fGWR3Lq(vFrmSP z3K=Sd7*QdD1O<{rjG!yTMg<4<>87@_=I>p*l>l7*lxGZ_PwG0(1Oq~{3 zfL84S0SlHa7?3t?Lb+R>7ML=2>y#y3pHcz)mZ{adV7*f5f;Dl|#9bOnR08p$MJbXt zU6vSe^1;kVk_zNVP@yI*q)nGDo#kYv0-3U85;KYosWPQz-zJ4ycW&OhXOkh-hW8jz zSs=X@lc_Y(D9xj2;#?p?B;aI5RVRg=&GqcvwRhh=W|VmA<+)==-*QvU0*NeIjF4ob z(I^t4?2I@@N>a}klSq(a3IP+kXefaWOeiTSw(!ooO{9=wj7|TvAcYlDwjeNq`btUy zxY@SYWDC*?&>|8k?ptsR6;#7MMIt~vRVNWi};tAtNF`3QWEO8+dna>_6(A`?L?y&UsPHIq6MOf=hE z)64f1lAr(y-t5xNIrBV|%{2dfGfX!#I!Z$~0qqh?0ufBJj1ji z1b`sZvjPbEEYyfZlT4yZ*@SOOLQ}f0)dD0rkt7ITm12|MD(p@;G9WZjr4xT`)j45L z$}GO3KH@A>1Eb>%2nw*GfGehy;DVECueH{xs-We{DQo|~)ymp#n_6Iqatl}jU3DQ^ zf&qoxvWlr}bUxTlydVT( zG9)hAsG^f9x)ZMn@Y;lxO~hkG3n{elQHvxbJP|`Ak>8Uw-=KyT5&U?}bMK z_$q$~YNOqM>Zxtv-&fzi-scC2`}e)R&nJa=+FB@PAx_FeAXYJmR3sw?jF{Fu!oRQK zL?y242m~XfvX;z*JvM=ePEZmO{{6%wO4*Zvjxs>JB&IBXnL@p|;FWkW1}b4ejJ9C- zlrB`oECm<>0|vl=9QM#%Jp5q}i2y_{bYTh!DZ^llC?KtzOc9(&Urmx#wW$We}Rq@xfmjDl+ghy>oQGYV1=GCP#~VIUBm?qEJ+Jl zK+WFbSfY)@=X_q$kg>FMKsaGZPX8QJsWt=9e!j_`1Jx5j6G}!qNlFO^T_{2`lp%a7 zl%R;J=&Dk+(LO<{C}$cWMFmBYlYsw(SoV~aJ(ZOJPJN0~N!ZjuV!A9#)ii_$DHE8= zXUs)5$Cb??iHS-AtCJA5079}5aQH|HO#szZy*kmbIzlX;Y6PKF+UcbtLem5Vz$wov zOTCt`1#neGTuq4FkPI(B&2eyro^~!mGOM8dk5IRb2iGm|6=kfwG2` zDU=9Tzyco}>u?D5SCpsjS2b;t&#IRw+=rm=-iP1~E1%IU?(s(pa`y z3bJ-(<8cinT2mY-Ef5J=&;%=*$~)fGEoeb|NzsIhtE3S(H$ZEe)P^gxKsxClS=(Ai z^ryS7l@zjHdQTcZ1(EV`BqRSPfowv+LInyWVGB-MkdH{Av$2KpZg-o?Or#LXEsz#O zOoQAQRP@5ik-$Y#;6ms~QMv(xuD}8&aDqoy6(vky0vx~`>}D6a*~KnZ9#LQU_SZG( zZX|i>TU&vWuu}{lFFw}OUh%ryyAO}}Ak#y!^@8`}6^nREA)(BFlrRM)Z12M1s~(W! z^WhS+_;yClu!p-l;uA|JcphQ0{&pf1=T+IsR<=lyNxaA$dri6=B;RI56Tr*}Fd~^P zz-2#GriyIFC>&9VNHqAhl+<}8t+gNoFGvy&&sl#S{L)ak%Fv-aWD1Ls7LgiEEy6fO zS|>D1SYGJpGEA`mOj!Q{zW}4@O!uYJnC3JCgiwIUtC<0y z0EKWt5|lcT#~j&N?wTrMTJ@Bo+So=BC1;MIc+D7Cq10UQhL6JWBXD$uD`{u4442dd zB(R{I)6_(aE=vi6JT%EoT8KQn`HmnrX`UUCQaFrzjd94hC4D|DJ_)H)N$hhcxJ_cS z2l6MMj8#j20VW~UDorsfQm}4LQbO2~5Qri!#_s41L;Ihjgv|QK`}w9OZ8S0pAw2uMe!+3iNaIPE&6ji9WgTgQNYpt z8E~QN9J_$}Ii&wEI&X-4l%Gte6r)1AQHt)VO;I?g!A|AU0FtStqCz{DB$6qBW4G#c z1{UNX1gl%aY7?bs_PU{?lgh+BSkCz_*cVwSEnQi)*e_srq8xv#l-zkQWWkM82b8Ty-zgkLa!Z?}Ggea7gg)DGn6wkLl z?@%IKpp^`9z-2Dtf*V}qBKK&Oj2f=CfCMN(61pD@3bEuP{0LA4A$$8Wi%6IR0Rj(F zyE$PWkbwV+xjCj;(IOI&iSl?Fs_~JB3z5ayn~ixLGFXwxnF`B+5dbS4(jmdlX_^v5 zLC+D8279mwqlpQ7LD_+jor)h18wr}>pW=ZsAj7|VyNEBc!6B<9B}f7VNCG1KiSZe- z;3*y-Gam4M86A3c*GmcTppJHHsL zGd|0SJ{yTc#4$6nH;Et>h&VK|crAh3ud!ZDK2gv(%s0^-90(XO20k|=4*YUL6H04vRiW%E-M@TvpOxQlRA+R8G#@*;}Rq| zFO=iRNouAMfg}jg0^d`)5ZMAFd6ByqIUwQ49$Cq8I**16C(a=f)LEwukf$UO5xt2g zkEs$Y1WLgp3CKD~EarO7y`u=5flyr(LmwV!O1qf8UXLY*EPK(n#RGl~Bj zHKDcPArSlMN-Tt^ids5@@)EO@NJ*)s^C6b&+P8+9$VCE>ugnOd46o}t6ggQbgFu2! z>_cZ%qcn0e0tz-QVI`CZyyl2IhNPAIcuDlogjs>ARymQM3cStKoe`=OFwr9IiYbMl z0!sLo!D5O`Gb_d77R=k1BT}cbpa3OEiveiGSM0oYF+I@JP25D6x*7oSs+WD~mt4#i zz*^0wNTK3MwV0PTA|)tbKa zj6U7c8RsJnMe2y6(E{oBQ5db!&9Ms>Y!TLx!5GxZy@>)1sE-J^%MH;RoMarv(VHXPH;0k{ ztz!AYQ!};GBW=?9s1M`0lYRS-4S^61NK^n}93`bw#sLrr!O0|z z9GqO#$eGkS-5XAQRGhdI3=5w5APDY!h*RaY?c6S6tU4+yP@rHRMCAX8C5;?Pa>P-3 zw*`>|o}?K*^Ro_u)#%E^QW+sb+X_e%kQ!hJS zk%ZVr_9Do^8$7T}Oav$&!K;Z_0Xs+0D&4^l!h?_ckQE4_0!|kPtD+l+?VvnM{z)*r3K!TeJn-!UbEx z4O}U}$qmqg#idik1zg9q)5)zKwUt=>qWIHkuI*nSSxPu&VBe{*; z5puf_k`flqtg2NZlt9xd(S;aHDS*ZM7Ye|O)GPpfVXMm{40U26;tWpS487zXz1`f+ z(&M3|TYv`R1cQsTZE4PLiM@VdPREm>Z@Im((~K$bHz6S{k}wF2w5;@nh>59J5+SY8 zO1^#-Bjag#^O}8VlDP!FGig=R%0%f<1n7%F~;LM zzGFM)<1X%EH_qe572`q1W5uQ8DK=z5M&vsY!w&+?J!I8~ku?)0%=b7J1qvQZltkUp z8~DQ{R^WskzR^*7KLEsuO0>f`%Q9q1AdRr(NRI!AL;J*DQX(0Ov|Bz_s1OjqNDClx zMOVztA8MD*%OPTZ#bRCnA#e-F;ISD>&0Rz^9*fo`*kx+Q#VpdU=L&*~AVTUKFj}S8 z_MH=okqG~2qksKZPuc{56@yUN#&sh{aExbhd^UL=1?yuCQD~!^(T-8L*v7#}-k3*G zN-7Pdwu7z_e*_Lux;BBmXPUV;LKMnTpfd~A9l<-1FP*4kQUGHd#8yHPzH7M&2m(^! zy}+~-hM*80xs|4Irn?!B%9N*R+PD{a5gFOYsTDb?<>?&ukr=sJE~r!{8A+X7k*|$g z!KKr$Me4cj+qiw(r?y+VwaL0gYHX_Ntk(ZqEXL}swn?^)+pu%P6q zD>m!2ZE65{YqEx0x29{jzEhjSUC&^MP3gJJpqN4HjL&FF`H|?K`W09KTAhYkUeS=u zoGQ*N+1d5Fm{lX0f|#5&ta>Q`3Mi{;sUq^iiYh`ZX_39RFc&6Bh#zuZ=UraX^Ss~8 zP1{Te!V1gj1(+1--fck(aFsoEsz`acy*)G#E|>)B97#Tl*8$Q_aZVfEQ5^A1zISBd zQ3wT9s9*GqzU)>{aC1-b92?*w1?R|u0$_;(M&R>KKb83{|1{v~jw9%z6c6GVDPV2ZQk+$4M-v@kBOcu%2-tmvKc-aX1d-K4$ScMsh-y;vr9RCYSOgr*TyoRsTWN zcI7PMO9;W-qBi?zhy3qKB&mWn4$@OFJSdbN^>JTG+#voPFs3-uA%05}goaqqRlJKGw*|keTmAl|x6fTj3 z6Ag0`fm)>%5ojODW@2}1YLO{e(U$D#d)Midt6FRV*JpXTt?k;y(E_l>YQwebxGrnJ z6>G4bYlVkfww}_mX85GuTi>1nuV(nSO>3%-YQJr3wf1;}r|LzX>y1Ba$F*y~bxM^I zyFly|Haok8NIOQkDgQ~#o7<|S)2fPHla*b1vyyv7NQh9` zhzNqY@ulC^7T~44e`)`U&(8X80Swt@7hzUy*AC{+bKW5$=47U|D8&o5!tJ->gsCsi zXGts4Rwu|}JBG@oaUV=I6U_6iY`=e)C=kyCH$n35nVzvIC`8<;;FZRRCsR<1n}S_&-~E`3VzQkOj?kPa zm^>c|yC?&VsGFClB=uwA=RTS-7@MhBoc*ebc~4Q!Ij|IT{t<+J9X(Ml(8?5I9TJzY zB!1Kx4{|Y{@;uJ*Jq~{zKjb+5;uGKE7Z-mY-|;;j(AVk^oU=)Nx6DIjMF@i*-9v?2fC~*lDB@>`Rox+6* z7cO0}a;1XRDp)R4wu&w5RltHF4Ain+>vqXow{6)jfIFmsS|JMx>{Xz|tXL{bu4W}W zWrEbfVZ$z&GPtPIi2$1NJgLQD`~W$)2?3qx^~*z ztD_#JY3KjSl}H~(Ko}*$C^jcKBFKm!iOvW+C27&JWs^iMZ6bvxuDLb_dJjeM-cCs* zAW%j170^&oQB1H&8KrEoP=T~zXW%CP{YTw^nuuuPCL3(Q!4?xt@!v}ZdI(c&G}2Tf zh&kezosKv9C=&-$NFara6i~5&6r=U0WC0>-f#i@ANHHXoQ(9SNl~P7&rIti;`Q?^F zifLt-5=eRG6jg>vrkRJCN#;pyy6B<=Z;nYNmqL1Z=bmt?3Fn!4;<;v*g@V~9mRlgX zfu4r0iRG1Wt|@_oMODfZLl15=p+}xs(^x9<|5QM>`?4;7(FVGNcqzj2NO! zG1C7UlZaF1^xjImE_mvD5Vp6TKn{LJS!4<|<>CTT9X16OoMgp?v{`XNg;i7->6KSq zTnjBF*orm45(Si700R%Hg)Ur7r28(qd@a$J63y;qZdwH>p>JJAQcJ;MSXq0OW6jP9 zt+ogQj4i3jVv3(i4oiFy0180{#TZ%`SK20{$TW&5=8dA9ZnK$OGRh~btQ#pZS+_DP znS>FFD4K|@Ndd2s%nHsdMS&V@LBFOmD?9Hz^vWhHw{+1$3mp?FqAf@gsuTvb5-S6a zS`kt@U53&Y5i9r-DNE1BMu;onm)?X4efCfimP%1BCuMAbQqx2ueHv*t$2SU2xrYC} zg;iUWCF>SY+oX6+jN8<59h+kJMkMRP^a!2On~I?yT9Iioy@@&rW3U?XzCJ@bIfXKkd}lUwW|v1vO9s2uvtZ zMld7508WH}6{*-oJOY`AAc21k9LcHhv$mA@3?(s2+~P18lQEnGJss>xP(o-a1+k5R z6I##KCeo>iO+_%+>OxkyVis|M<%M4<3uExY0K3Sghiw@^x)vY+eNCYNh~fX&z7(J@ z#2}_FVj)Wb2qVKOOd&Be#32@UV!#5bFezP}SpOEtz@;=KR7W|EiAb{v)Ufe1qF9Y< z%0P-X&}KSwQ$fPR?cp|WXWW@8YAakda2?i`3e59yGMWW>io+HsPT ztWG2cX`oS%VH8@3ghUbq$ck)%6cXtSeSqLU{luyzcSF{L2s9!OaZ(cu*~!;3BdjP) zp>CzE@}B&AV4%@a_4GE|@j_0cbNDS{8eRA(F%Du(#) zqzTkWW?+ger>t-@JQ>y~yA}lr2+R3iD`s5mnb z|3S3?L70;fpA{`?O-ou`;g-L=S^z4HRf<%&OS#f&uC=BWUP5GwMuPB^snB&_c15BB zz%l`>REt`4U4o0SB`&W(>sb;gBSZe@uudf*B2)!q!!&|G_Au}=8&f0MY6-FekSu8_ z`|QfdAR0&z#Xq-c#mGXT3Y)Q3J3?#4CbWJf4DR3Zkg9Dv93(%k91&@9PZe8vY{Ji2tv?$s; zUg>bRfe1wJJrYjv1QhT)4g2nN1yCaUIN&@8moImndLHJ8Hv!vWE_;-c0Ed%@&lYzN zpSE-G1{_Q&jdV}Jv3p(goG0Y_Ex5?ClOK_XoI8O~s67dZNJF+Lz=ursu@up60tsj; z2J(+>6722-QR3V!te4CoN?eo3oTLV&L?}S9RCldLp;P~^XOy0@h?Sobl@?Z|3s#9C zVW1VoKHqRLGn`9Y)B=}>z$F0*plSjpI}sr$u~`+7E2Fufn5!6uiJLZbVYwj6i5YOF z5)-3QVA{n9WMVWgQEnUA$QneBB9FT9O>S~MOygvMZM=$rB;r^j;v5n+io|4WM5AmO zc}JLn{Ls*#J)Q7ibDP>JK(9v)tW`xJY+2A^V*57{pGHRlT1G;iFOq~U;0&HQBgIbU z92sg^bDP$gk#ZH;$wV?UL?}`bix>qX8^NTSJUTcxca-pj6FeqjAzYN6#oo*GhnZRO zlSUy$sEm_tNDtzZqdksK2Z`@?JQ35r#K&WeEG7Tqg(`qUJ+44~iAjk`=%)l4+Ho?$ zGv_B4(muu1bA_JVe^NN@Maq<9;F~@kbIxmBfN{a#OfP5K~D7yF?yqWlLqsK|ui6 z1hN{~zIru=2rH;xt>CYpg_6Ms>6AqwOL}3K*d(-AT3X1UvRVPQUXR8uL{Os zQvldi{FN}TfWE59BK?&i`!*^|1c74ISl^7}u}+dAWFhM;Xp;{!(L^HKoY_)*sF~4Q0B`Ez*+Tw51WBnnnNXluT$lMVjRI!PWx)n)F%uVX50m}R`~i?1<{q9+Spif`9jcnBv`rGwmaL$N z<7lAh+>JUVB5C|h%Ltb@wM-(7&Sn1`#NH{^QGiBAq+0<5z*-p*qrsjG-4J0778Vs+ zSr|?goRwPuky@~#M3|l)=3Ycp%w$Z)u>=4GL{YW`S{1brs9_OvozkeC5@oCqWNi&) ztQ1T^085~VX~Y`H(3-I65pUcPaGZ@bdJ^+R0VtsdHzt52Oxw(?MjJhwb;OpkjR7SI z((kQG%H&PZp0#X!Y0Tg&deKdvtz{*LqnL5-poVkgTwX~5 zCy+rXL57k*25MlFCea4R=v%U#h={Dnd!@-US!A`<+em7Xwe?6fX;V#r(?7Y0ilh_h zBoi|^9mlzoN3m1+Sjox3$xi=@;Z91xzFtQsgrN5kqS;A7bK1dGLwCMC%E2&xfxS$LkSQRRm4E~t!aAJhrPL2U#0N~us-5~b#Ad*;A_e=@Q zNr8}_PWQa#jqw-)P#C53Qx4)>$>C1)L{#j=ToF0o ze>sQOte+ruXMg_)-+F4t8s!9pgxgHv=|u=y;;q$K>>{X&%UBiBFBXnjq-I*Ig$~`t zSS4MmnOdgSsYC#VURjZ$eTBFTBV5%Psqkt=DCejgryt5HQjCUj4QgY$5o-WVHR>9! zVI(?sXBH6G`YA{h9LOf9!W+?AMT$pu7{{Ovle9Tow3REeb!#Uf8$^l%aUGQx{R(=t zRFwH6JW-d}wA2`(+f#9kMHmaJ6hKU*Ule%67TDc@bQ`rX(jXO+iKIp`kr_~J0*kPS zi&UhIJfy;%q{21a#`XxuuH=j82?ub&OU|T{_(zHmiPSM2#!VebwXBs`6sCyJ$5o2e zS;|$K9LfLnQ_a#`SK1RwfThv(tW-uNL46oxjL9bc^T0;H4!f-+h2`A-omE@HL zC9FkVLuA4#P#(d0^b?HX;g>QDE zSK0rt!2+@j-^5?w4h0k>$Wm;PQT^-bh22HyDXI_5Hl%l8JDTJx>ch50lBEaf;ih%-{RosjU7gXbet&u!P14*leW-Q7DK6nZyLG zaZ26C#Dr*I0h+BQD8s|RFGh)Vv$ua0bc(s zzyMT)5HNx1$t(f&#aL09OHs^3ToG0@hEyoQ6@|qOMTW1|ufHmzF@9ZUDkE|}%!Fit zvPB27wvif0;~kmf9_6w%T1NpG$K1A>vVD?HBnV_^f*PnoISx|MyxkhXBQ(F`JHkdg zYV0-9hItTk-SP^1@XFYA3jM`OPx;(MoJvS&qNxQ4IeP?fv`l(z!n94Ija+1DG%U6% z2~ceT35-FIOaPg262=-xKvxq%Uz5F|Btj$HH?@e$k^sr3lR8mclRSx8)}&f`?aN-R zMsE~HbCi{QoJQ?rM{P7obM#1ev`#8ipfFE6-K0sUom%SY5%+Cf25bEB&rbZiZ4a!Q0; z9R^?l*6Rt(XM!eJPlWizUXz@q78>PEO!6e_{C_-4J- zF2W2aw@{P`IfZ4)?|(`R7dr(IAjQQ*Dxi)`)PRh(Y6tXY_G|pIcOu8gi~@9E8}(kz zLu7#%oJIkN0s^*Y)NG6%gD-5eXKd#daG5WK>P>GchbD*uwykfgfRL&g*F%Y!a?yl& zxi;DOhh+|9ZIaQ|ghT>JPHmjV_g?7NtQ!KpL~ju=0=A48ml+vws0sg0@Q9W-dBcR^ zc*%y6fCewBf6b`+6j)3nn2|M4lJyRhaF2ci*?!Zg8k#VY;?DN;js)=FexuHez7BrN zXpl{@iCsSAp*{hTQj6Ilzksq-{tlTi(n*(n}+@k>?2y7>ng3mBu$Ss77v zi;o0)Kn7`dSAfj#j6=vy99DjwP*RLaCe$O@)JEFqo}PIk=0P5)2AW`O4RMi{wMGFmjzK0sfuaBJ`Kyrzx!O^)`Nn|| zbUcb{G$GU7`iigUt5d9>tV9!djEA#@NTpnz(UskE4 zKC_4fB#yz+gg0%{JTjce4tvK^UX#D3AgLhN!ujy97>_IhHfe~f= zWdTUSLof+Y`<;o~6xJPl1TnQwJjm75J5#}psTd0xX-X*J`JQjV0{QD!#SoBgT14`_2tg!2r?US90RTV-Y>E-S!qtPo=Drjb zS_`&UfFkV0SBP&s+D!~!(yvoU8mWwi7yuvg?i=-KFMMhz%81s;m~YvbhZqQ0^MU8o zte@4`vADT}kei2ggP-`q3?rJ~Z{U^zD`3=!LGuma`XyILh!&rEO)1fK*$^N2-P?3G zsB@4uW%y42hkkf-0e(!t zdUt5&bZ`jA&lbpc6jS(xyJ>>^Sd!&F`V1NS#CLofSs6z7?{E0-7a8$W_`n$Mv zDRo3f2iu2N)txs*v&zC4NyXU=geyTv=Y z^B7Hnmoi2iI10v!DTXVMKq)3Ta6tMHJdi;H8BEYX2_38uLJKjBu)zc=ywJl8G3*e;2M^@1#1l;< zal#QnOp!nd3|vqO89$`4K>;h2(5NI5NFo9rrwTFwmVg*Cfg*uSNy(?IT1hG=8Iod) z0<`!~J53n+F|j6@jH$^Tdn{nbAH(F)#~sB?6V2I{tcuC0Oo}9}w9M+PN+_W!fGd+G zm|_BsmgtiLF1X-CAc26IqJRlvKcN9&;Xe}l!mV)9ptfbH?F+J&}QWH|Z zmCIXf^-T_2aslRTE`C|L*5HEwEtm}7vQQ0))G*2p*8-%N>#kM+E?D4z!3~()j`6*# z;4uIMF3X6e7&0-gq_|dJgvpi5<$?7LSGr9!zD|lUw9s!0GJf8I11Y%pIlQCQLt5#i znO@rIrlCf9JBWJXZo4VAkW&B3C;-fQzyT+a;OiL?6r1d^H;^D~u*GgW?X}fz8*aE^ ze7o(s4QIhDH4(mb;d+XGz3NDheM9hyW|wZO`&{tVB;N_rNgvU3A?U8ou`1 zuSzTlB<4jbim{pnSG!+L;>xL#SaRr~0u*JapqmEjsi%r6N+_j;Fj7=~qZ|@IqmJC? zDE^E-DnN*txGY_Nni8UE)tvsMs#^IZD0vDM#n2SIQ8k8vCK-|gkwq`66bT7jX%b7G zXB}pZv+>4{7b(^Ew)PH80wh$57xAO+tA z={P)`;%Fw*!Rkz>Gt~i0cHp=P5^RAWeJT`Ltf(IHwBg0(w`JqpeNJgXF5GPN0Nl>ElLNY2P zC}9N2Oj44T`Dx`UJ7gv?mFa<{a*|WDk}Ult=_Cn|l6JQ9m#|1;DN^_iRp3Mw9(jqH zyQF51q?yfXcFF%uPMS>?>@@~a)M*n^Fv<;2qN^n(APBPh(*$4zltWQLRzO(*`7k1r zg)|ByuG&aPhEOR?0ZO14(TGCuch07y1Oc65=SotNDj{GbQYKNt0%jFYKmCL!K#@Y~ zu#%G4m}FiUv7YK8n5@+8?^s4Lj24!a37Fn&453hkO>yR}ZtXNP&C)_=$|WwLVo7-} zi9#0K~yCKRdSNDCkVP0U5D9>eO)+9Fi5DC{~~FwJ&~1~d|gk04QV?9uSm zw8%b$Y$?(V{JLXp39eP>Z<3QI55m>l@ry8#v8b4z{X| z?QLC4xY_C!b8Ayv-}PS!i}t|WI&B`H#2xNpG=2#KXE#o&oB;KA?vNCI5aDV0#=ehj%^{}d1aM%}YdR9Mxl z82jIpF7P46Gf8S5woYz_G)NH53N&r}C9#A>rq_YY2Srnvx{zYXWgvx-p<^As^oE6} zF%19j4&%GV=rVz7vLM%voMj_3r%s;<%@4m^9^I@5iKv;YVW5x_XHun)RYcDoZ}Vjy zh9)YKwst1bM3~(yX66*2S^9*1=F(Lqo{F722Dd?p>;*m^M*uxr;H~!FPEFc76Bo;Avs`~$V zkVsLDC-qzuirJkMC55ykyCP0fd_7GKp@jbO7{9a?SDA@yW-c2;CQcKWC@6I) zT=_0TWRBKr%4K+V8;d1o*7m@K=a8>r1#j# zjE4>R(&J;xqqNB~?PmqS>=ZOh0%3|i z7kbW*enF&nt>-~+IMi>B^{aht>SL>0#??&;yn-U=el$GnbzG&wvaU*u;*$Sj6|X|6fcF2h{qD2B{PEAf5FLbc9Nn|up&OL$jzeTKc0mw+{nkWg9}Juj_L?&3?={42x$(*5YvFL z&Ft`x#A5@frcXEkKcr+ov_KNrWkNd5lsswjV68=PsSz*4lqlvw)aDRh1e0P(5;2Jp zAJGw6$wAcSMGE8-EpHKbO_fZsMJSP1$OKHlM4hnbNVE;dQipn?&zh_$SP~!#hNA$q z!!wrb7stsu?xdNV$(bbJ0TBZkkC9@eEn+r-7g;beutO5ku3n0Q0apwgW#yh;zQ_#W5GNF(vacCo?iBlQAJPGbJ;x7_;^?^D-?nGBHy!N0Ty5Gc-RFH7ipyN3%6W zQ#DUBHD%NGYA-e=z%y5KHML}^W~aSK2fKdH_ZG5r9y0%Sw##UMs;UgeTCAmDtmRz% z0y>2X`NUE@=&LLY3#N!;t`YzNnk03Kr8vz^dls!aeiv zQrZu~E~UZnvpwZ69re#4{Iez=A}9_5#T0N@5}+bBjv)jyyjViUa*W2D1o|k*NGvc& zaIq^qkRo|Z3qmjy(jXKgD~)3ltV+y6D9$Xygev3901Y#s^oQI6OQ=mLxF==c3jva# z1TpOyqsREL!^bwQP=Kbh%rrbAtu`jD4lk`u^AP_xHjP69QnR{dKY%BOVl;tz#Mk=F zMrAZl|1?kmbx{AbOwuGO2sKd!^-r4zDrn~<6g5&8bxjOaQJEr7jpG_w@z*$&%Jwu# zgbfy%gh!Ah+lr|IC+@yHPBtPSHHL1~>}AK^NDZ$;7zuIcqHXAEr%InB2NlB_^M~Aq zQ&&{w-O!CzOzcqoPYC4g91EbJGUZwGZCdq>TAwu}uyp_e>K&uC9i>%MHlkT+LM85J z3Dk`zHp-pC=uM7f3P^#AOlCHo$pZ6?IFBV*MMYUAaw5MX6T~1B)IuXeL0p=$BXzQ1 zVFu~8B`gL53cyKpmI8*riMqHll029M^3fS8{icr5KVSRds<}f+fPwK!sIhcJFimaEX2L_u2QE53P+(za&e@1t|0O$N-AwV^y1Of zNSWa1XGo!F2%^yn<cf21M$X;!HYKnhv$39B5NL)r)xv z*uZ#<@i(6xW-7; zNU+C?7Erq&HC0uW7E1>MSqfkErvmrqbQpQV#?3(i0G{p%BMyR|x(5SiqFE)vT%-3} z;qjCmEFQHrm9w>#wRM%ZHI-3W9)}+ztNBH#chT?Misk)VUkf(s-;0oY_*m$CO! zD!VKh8&QgcCGwf6gdsFRBUJ%lU)Eq<4x4q-U`e3>R-sxBW-PUUi=D(Ui~<2Hb|t1R z3J_uHzye>&?Mt$TELJcQL}A%fgGx%JWwM!OX?7~5Dk`CJpl>#-#6t>%4o;$LI{;Ha ztiN+`3zCxUik3RJ&!@B?JkYZL@a~Q+o#rmxQnEH0vOwA{Lt4=gWG@k~XL@35*d=VM zPrbZvZJ95d7IW(sx|k=tJST2F_H&lXV|5y*f5e=4rKj1}s6!{GaWAOJR&%w2 zr?sLtby}Sj7rNH=r2T$YnrL0x~zA4blKLdsX79B7f+NKzg8!m z=;f`U0-eIs=Z?fEtW8NWHrq0`P5L^pGms&k3L`RXb&ExHTMV-x;=~Z_DGJVh(D5Sf zPr}@%!srd()G-}3<# zPAo_(F0jUgRYUO?iSU>ISw>I{NRUa1%!J+oxsN+an>5RW3^zWg%c6sia+o2K@CM%) zDqcf8vIdP!YFLm^+saJ>^hGn2+ey!R2$lOypL8_7tQMnWq!6Pd{_GBUu>d{;4XO#YY^_qf9~ z{KG5N!}Dns!+4J;RgTqIQZeEpqtLC_=OA@ISTlk`BH*r#ACj`B|6N~?$B~AnYOZ!y=j%* zYRSOUzT?@umJ9f!@$|N(b$Y^gB)XU{DY$*Cqf4iG<=e&G+9MYNuie_K-Q2CZ+M#IN z#R}bZ+T6`O+~IxP&HdfwJ>G*_-)D#3)t#&r_ut38-1$AP$Tr`Xg5d2P-1*%{cJJYV zGaCWjeJ9!fNn9dW0HCBI01Cta6G9;qKyJzja^#~gU-NaaSNC`S{Jt=2QH=N9_>aI2 ztUf0@KH-xi{)rhhA`6RKYCV&V%EkhpU9f z@0fYU>U7kF7ct{9v_p*QWi_}$%DjlYcT|N(gN0qV@uidsV;F{`G+YS#bR?mB2n2(s zV+E&Phxkap_1i6!7O^7Dzymx!lGuq&fA!^K6Y4yQr(i&~qvSF{cD^{faew;y`1X1K z#(n?)!|xcx@xJ%jIL0H@_yyJYmB0AMc#nf0154aYo*#^1w3m!zkc}-423!Lb=PUcc1`bz>on2 z77Q$S&>%sDLl`<7*bw4FffErfY*?^B0U;U%Xw;abK*#_eHBO;Gh02ryKtv`e@KVaA z0-CmL8Z&AOl9D1dw&ckYXwZ@Xgc>awMN85wS|VkMq$QImsi8t?8bzvA)~#B*a{cNx zEZDE4u8LBHbrY#kV>IDpm3EBUEn74q=oxZnfhc=->ea|sq)jrTSZysuicH|ZeG35p zh&fiQSi_XJR=!LMGv&gWJH!24IJD->TcrFffFz2PEg_RgvAZQJTeq4Ble&5J<|Z;* zc>A8h1$gh?YIheWV;uQyS<)@uPn4Q&6WNkwg#)SD*;7dH6M&o`*m2?+S{sDE`M^RuB zN&yhemjxyz9q3?5HS%aHL*Nsw2sf0>XC{chC6D+ZSMnPz#KmlPcAjAUy0+4BD zmjw)=QI~Ea^yUHtX*6d61hILioonhz=blokS!O|Ho~cm)3VcbDp-No2QgBp+RAUsS zZJ~u+q`an)lP@B09!xMni5jOb$@n6YpN^_mjs;|q39C_Mv1+TCgb@m@TGU1g8@cYP zYp=VKK}s9DY6YyYWo%XKu%xUdhA3)?G74L4>4sCaH%SX@X%Qrm0Jlj*0WM>FF}72B zx8ek>u62>9(Y6O7;2N);rJLBY_38?&Vf5yEZ@tUzTQ9)C4jgd7{PL>>PZ3CpsRZds zFbZ-sRXeR*a@oYiZe;Mr1znpAmRQ6h6GrmLBZo}zz!4j~a>}~}yh+CY*kOkf2U~2Q zg?Cy=p%jVTc8eORqz28cr=ynY*Uv~GxpdM_9|(2RK)2=+w@)`6G)N3a&9&1RBAHiD z<-!+s*<_>WZO~G$-8IzSD&4i(YPXHG*?I{*w$*gI9kh&_);iQQA}^ z{-RJxK+!5BK!uUXcrI3m`HfNHsP&Xb$=E6AKevY6l?q_FM3x(YS%3gSxZbBh3vd~c z>|D|=dqiteRD18a|L%M6!1GR~>tvqZ6G&lBPylvZaN^>qKuGX$^*F6$xRN}9sQqb9 z3f)qVK|v87Qw3-NNhSq|0%RzuNVSP%k>AR5QebW z7!k223Q4dd8}Dew`bmWGl_UaC2m@n^0t5s=K@3q)Rf>edB1JmpBdXe5 zF!d4eS&gsDwuYNhN1<)$*RNq4hclbk;PGN)VO36~7mriYGxYiqDK5%%U3ol}8DxGJIjBqxhN^rtT7f*IA-xd)0wucr!qt029|iU??_>(T9Ab07$>8mp(=S61RLMVWmT`S zjct0XTimRcP?v0#X;~GkS;30dvyBa_Ydz~#xu&=OxV8 z>bJd#2mymj5gczcRr;7}vDy4c0)PO4C=}^vNI759G-pXEy(F{Q`y@{`2P$wnwg6L@ z0`in_x>deV0jf-8mllFMiO80C5uxqwf;mfp6d<<1yDji?$2;SxQcPHC;g_zns7aUx zC=#fbwW9i1qlj`S)WxP~H>tVsBn2u?NgpP{0Ez;@&x7@&pLxY{zfpt&EvryV0r(d! z<;-Rj*8+_O3-hstqJ~6#)QA-F5-y3N$4MlT0)YyktMbaPGAjI_XC7?d6Phr>_JuHn zXYwLGZea?qvD`=Ga^JR)VheK7p$>aE9U)Tx$2coij*3|fVE%Q)y5xl-bU6eyXh{zWpN;Ahwg4@elhoCajX<;@DRU8!ij_|S^pi;| zXY$Bb&d_=&gyo))In5HPvW*%vN+wU&lhmEA)>_!3s8D&FNXSAKpa7EpN+Ajo0E%l| zQvgA$1}H`0i>fU7Unv$q0#+WS_JFb|Edhljh+?goY{{mA5Gqb^8i1Sfgz8@E$(MXu zwX0FRr#xjOPG<@fm<)xe0t8?ROQ6D{_#(cLBu5ho>ujnzb)*SVwp62yn@r~tD))ia~+^vO8VG|ISLZLMh8({tOV#x_v z$1rwNo|bInCfjMsT88kH{}eeLo7ogLzy+J>jAxoqVAfDIsTCtNT=RXj#Y(NPpM96n@*U1` zCZJ$rSZNR-2dmBUB(i@N3Be4*nv!H3-Y&|~CfKlv&K4jsQJ88JJUq_Kk+pF^m|d0* zl>h@#ZMd)t)I%6T+usUr^PtxMyyrJByE1WPxIAfLX_s(upm?k<<5_AqrRzB+!yYJ1 zSql2H00~XB?|qrj1bNR3{PLDXy{drL{?w8ddr9`~39UA~eN|6O)BNE7#JXnKvpYle5WMmfTA1qRVZKNPFB1ar}SPSB0 zQ}#z2VuBV(f)Iiv8=^)ah=NAx0qop+Sss8d0DXKRA1uv?yXi5{VZkUFZ>`mJw}ICu10Es+MYa zqH056hHHq1yF?IgxF)?MOlr~)1TiRYqH79}0EhAsL9h}>kpvv}hcBW96xSo-gEh=H zG;}tBuZI+`QckUsPSzF*MWO}cuu=9@QJTn!8KqC@wr=hwG8;Ej90f4TGEH_t9)Nau zj646vq&)i5>NlqG9v{nxHyZ3p)P^3Fo~9TAt4Erq6HN*Ej9r%G}Vki zg;ORsR4XTP)fkP?NK{+kavTtIN!2rw6$$TwI8X%>bOlaQ$fyGuzBNC#* zS7lRHT_ulJ)e?07wT|`3k66_jZzXhqMRk6KbZmn(>WGkEmyrAjM}!qBpTZK~1Qd_; zF7pvxS`=ML_z@ae0F-khvxC9ZrBb2#CloNqlyJZl&rCYSLl)zP6Y=S#WKoPtpD6Yd=tD_Mw zWD-+waojQ=3SfX%q!F92N;dK#bv7f~q$!H@6X3#Q-K9Q75(=2`6ao}{cWFOYv0kFE z3Td$x^u-2P5iz-8DJXP)312JiI@~dLhWZ^ zT0shnu@|fVffQ{wK_EtAM#O(8)?&~RV=3lCt=XE@F&rD_JX?@s2`E`fAz-d}B0y0h zhxT85Bxrp^Ai`;!7wCd%b{`>9W)^8>a3&y^<774BWLhRi;d3H_q?`^?X@Hbwadv@c zStEx=Hhi>4FY;gF=w{7{WLcJ$;>kHzcxf6@h5m(qmZLs`W0oJ034!5*8leSQ@lY4k z3Xdd&5nvozfp~y%pGR?nQ^IL^XeeT0p=mN}AE73F(kHBThIYb+uV#j^Mxq}2N^Qau zXi{rk!dl6+lNk4eiBnos5NL}j7bkUWStL5wb#|O1c;^#|ui_NxL@Nb=3AaKo1Ql*d zsw~O>vQgm{O{6de&LRpFLow25F$F*{C8cnuh+%jEIv!>o5W}VNvQcFUaPd@91cjy^ zrEt1Pawey83`Yi%;3Fxu1z0jRuMq{-B2xpy2_M&SE~7GWx{C>SsMdI>5n~)QhD01d z1~yX~3Ir}T*GCHFHepqc3o~f`B?a3uXx%bs+advc;g517baMrCN2iYMIFJR|H(~=e zPX}0JV^>mlbW@kAu*y~2GK`nHFbP0tOQRaz;xP4St6HV1hgFUg36Vl!LE*G`8(9(> zrx#)1P3WN!VsJ^>5)z$}JxM?YtRMlJLLUeq1*`y*t?(M@AtOl$kAbC#U>9UE5(FFn zS`uCOI-^G?K{;ET2YN?IOP@D90qc|sQI)F15hbCOT4`lfQd&wd9$P?cEj5UVBqeeN zp_jv(+J$=`iwW$L36Y=)n?RX(iI;j=e9>|n{xeeOr+-(Wew_&y>z6{#2N&8$HKSD? z=_+BC`F-9Oe(XnKn~9l6yDUWenaiRD7Y7A4cR-^O1=5s5!$DI5h_wTlwLnA{t05c+ z2t^7+sh&k=3xyj0WPPcVV7bRAenuf-1NpHmHIlIGrN+AlUhWbE{Z2$bxg! zw`No>#ra0XDH6kp1ZZ0#Eoir8q)FVwqli@iJorwg8U_1#ftCa-9}z!a5koxxAqDrx zIj3*Vw_>7{V-9fY@hR~ z%?eICL1>=hF6D^070eg%`|tMC|*KYUfI+K&Rck41b|$?A1J$EySXsdaxPfubq} zqUtThS*i=Hcqc9$( z;v*-?Bh4i-^-^e2HF&LH6pUzf%(fq7qP)tZ1eLcDul1Bh*?F{slxheOyR|2gJg`LR zTfLKc|2jKvA`z{lu&R@lrANUEFbP*81xi3Y?+YyQiI$g^0N?Y+*Si-y#uSj?y`dn9 zy?3&e$;)6-rF+?4w{aWywSKe#V&XSKHk+Aiv3?&!Y^gCp2(U+einBM{%MCV}Mq9L* z2^xX98OnULCFGg-2NHd@XcGw%T41&P7n`psn=jVRTYE$s#zVOO`Em=$n}MMhRpepi z;TMdXxT%4z-?CJPCILtmoq4O!7gA*Mv7P;?u>n$@Xqkc%on#R5(0E%TV>X`7$;tzA zIT@I^=DE1vQmn;^w(q&Q-g!yid4**gxmuBTXZfG341`eNzwgDaXk4ELDuo{*1zw>+ zR+t2<+nbDgFD!GV?N+EL*QN@$ zrlYV@`b82H+%B~-3K_G(gIbEG9j7dVs0k-j%|Y7+h#e?QDZ9DCAi*AU48uT!6f4!K z{spRvgTzhzjy(LTLOgUyXWiMIl2$j}OP7*zldIuf-4eJpZ=)KAC&S0x!lPMuN_RDL z({omHkBtZ^%ZAPoIa<_}D~5G-Nuh6Kyc1tiIe4|o0o9VzC9bFI#)DU_8mSj}Jh@UM z*ZFOeEU`-I5hkuvd5Ub51RFe=+*`rZOHGMe9`1P>F?v>sTH4y9Fq~+GR%i-JF~F%w z($NxXJ0a3Jtj3skdLG(PPx;jh^TrxPmJ9w~rfD(?*d1Px}!Nv(rgXlA>gUMzJhxz3N&apqL_f zZG65#*&jNDWVr*012;+x;^o^3DT_!{z>E<>sj%oJ5f=!jv7Ug zsbmb1`6!VEG436a;zA%00wIS`nUqrh`QeuA$d&xapw`HluREb{;-B9o!Ua2>Be}|* zXo;gu(HowvY?iN_c&yu)Z>a@Y!1qOx3F$+!);#3E#|pn(eC}3TcT*07$pmmC>WCzD3Acj#t29_ zhD;*TB*&5kL?Ym*vH*~mF;yvgw-OpZWf25l)6=FyEhjk>hSG-l1G z1z4VJskErmo;#OjZJM(yR+mKoxk_~jm8#aVWW8Rk+Sct`xK)J~&?2^KluRSvYROA< zV#^2|qqrShm+jjGbq&KzOxLktxo_vj4N!GKfdv9C7Z|``2!jDFLt`Gzxxf(9s5`4Z z&DpbS)}KSGemy(&?b!=*+a9oBi0;;yg=8kKIe>!WK@_;1i+p+8$^}>zNaC@rN$WmY zCWy;1`*)FdvlJN5cYKyiSukbF6eSXRGNj_iZzG=+EBp1?kZP6RK7RWCBV|7^L=htt zQA8PIlm!=zuMAS^8)K6(3UH9YQOL+}!};vn??Vp->@Yt3SYc3;F+v1!zxY_ZZ$KFL z1JJ(tFl^999B*`xlm<2b5kr##22%0G5oz2|M;j>|WsA0?sO~K(HrYZ736h9lA|W-@ z(#Rr5%#cPfy9|@YO}LP93J$o~;Gr!xkbm+UQT~suO9W zLG45$(6X#MbWx8QWfV|Gv5QnCM-{D9Qc6$4l+aA6bJQhH7tK`9N(H@?)JRJu)znlm zZFSUERgHC0R!>C&0U)^B?ogn<>$9y~$>Q#%M*Gy$)9?xafFtz~NQxzvplHvh>#iI2 z)?`~6R@?BnOQ6@txc%1KLya}ITuNJdPPhez6M~}whKTnx-{SS{-rrEm7hit!Enta% z@ue5FC43tgU(fLWop)b``*j$#cOzEd-L{V1v#KCk+9-%&f$Z*MxR&im|8oFc~kCND6>NlTq;N?`HmT#(8I*d*+!HO+*Prl>|i@h2~92@%hA2lD;p)q-!39 zl$u}c&t|J%G_gdfw|;u-s(Hp4Yq4J}h-#`w8D$lt*H&BVRiswi#JNutBNH*S7(%jSMa-=j3~G!n?L@K zl@oxY%nBH;D&EvafV9!qYd%vz*%)wuo*5u)ZgW5feug9ZI!(ex1DyS7MuQ7D&T*Df zvH3k`F6N_FpIDNv-HA_ID{P5H-b0>D@P%10EI=giGP<0_r$0Kh&kl3=Lm&DOKLt`n zDhi~w1*wgPB-%ufb~K|IbqI<*6p_;8GYS{gXo@5X(Gq`HBP4|}M`Ij=f<(cW0ws|{ zSB%dV2v-0Ujj={^T#}N;Acd9;%5r}~As;)U34u&$3x(U!h_b}SF^Q>51~C)n(nJC> ztVs+1DRUv6Xji9U5$agn@=mspg{($F>XU-{q^L-F%0Q)3kEJa?pmHUr zNck#QqDmzQm=v};Wy)FxGg+~;)TUIaOIaoXSGxqtGDTIfmMl{$x#E>aaHXqqU2~dY zS>Ip=Gpraw!J0WiNy*Gd6K9(9Dc5pl^N512aZ=}+x1we`{nQe72_RyZ>DR*iNx{!B z;WY&#n864tFoFi`HwpDuL;pFj(=1G3`LdV1BIdt#t;;FDVj;&k8m^&)G=9kvnX=v@ zvN^3RWh(v4ctQb*Ow7z_WuvLjY>G2dWI|}E7#hudIyIghZ45N48rhTjfH-`ovmGP>y{JZ54ZP=3wj2lo-kx0eZV>lNbh&t!(caj+bynTFtfo4I&d|h zVc>Yp+rR)OFgCCuF9C7W8s5N{UhzduOZYh)@D@NhArq+zLpnaHWJiVLE8qD4g!0Um z8#%uvD# z&!U>urSz;R=OyYSbRK1(pLr@d+e*=|!llI){b*XPDwK$Jlr)RQOYeZID9}2Wu7Wi# zdJZdCluC+o*XJ^EMpM<~Di%kQo7_8HE7s*ImafcI>o?olTjuIi0hW{h!H9)MVDbWJ zYXAl?eO2^f%VwBDBf8Lo>5JL?I%vawBOL$vPoH`HXj1q@U;?iN*7z$a3rSmmE6FYk zDx1i7AW;DHy&Gvpg=$jE#tNN+f~TSQ>AbZj9~2SpXKeM{-)QR8r9N${PtDoF7Y??% zMZ9KK_3A2U=G9S%B5ozJqCny*JHCiQ6C1Zs&Pq{Kq>hzri#uy8GDMMkq9jw4OTreE zP=LQ;gmtcy$dZ*zAt@NvX@^Z3=MqbF$F5GYWEg|%Hc*i`soNq}BImce72EQ8&z;fZ z`s9YkyXC#sdZtZ_*R?+Ov!|VVfKHxh(Z2SsD;F*Vjtg^jQWd=ar3Zg;8F&5m{&)N- zAio7@Zv_#^KmrziHHK&J;?pZ$^hVyj^?fgCFj_G1Zl*ilK1u=rP_jNvCU|ewSXlgP z?rUueoadoSdSdAMP`C^d4Z5%wgGfc&|Ea{Qu7ZK++jNMkr6G@npEO?JOu^}6}H7i*mHp4VO z5vEp(G-BGo47@WA1f~zfz+@^WL&?BTF_lx|C0&{o6$HWm4&*ZuR3>AZ!44cjbjqgi zXs5TBr*WC4anh4{x~A$FwNXQtH^UWZ36^D2rd(k{W_rSEA_^wNrXTddP=lvXQ>G(S zLQN}|cG0JH8JLG6wr6uTe@Q5Ynka;74PvX8g)*pnsWyWl!)mK2JG3^85&|&1IiHX< za}yt!NDA%hua6m@a&wD~0J(NUqZmRT@H-lMvo}fPnVb>@eG7$9(5ZlH8nkIRxtb8H zaVx1gn=gq(j%zAZbSgGLI93Fk0#F;T0;`NWnv5%>x*4m%83S+10w{=+AGt-dxgu6j zk`p5w(SebK8^*YDBc*Y@_$%5$H|lsCp9l>9%|e1`)B=ZyoyzK~%}Kg&R2{?$ zouYfJgjhO+fE}o-EIGM|i~yC~@rjZEEtNVsN%9%VJ0V1s zysne9yWs*UkYPys(hU4E82W-d^}@;a+R5>PAjgw0_qs`;1j^e0ApW7r{`sGgxeEfYX4F|tDvK!d;>NFo8u znIt($shD|>NSMbx`nEOGBt$$W6kN1Y^0P$ivshu3KO;3mW6o3|G*dD(@KChlG)_Z- zH0-RiN$VvNOioI}L0hwvx!5%T>%r~lh$h@MZ931F;52Um0#0+aX6m#)M9*F7LnWlo zP9m18GtV{qv}~%UKD|Iag2|y+DT`pYl&K;A^@zQ^&;*^znMka+nqmX#y2MNr1x*w=wdq7s z2)LnY#-5ofD>4zZi5jorIG204u0bn@L%6Kr8nnTn;wz;IpHBW*IBjlxBX^YumQN0VYb^EkKz-uQFzxcQ<@$Vk@CCCoWacM!y;CIkp7U7 z{}?0ufDjFFqm`M)@WYTOf=n^GOa|FZJF*ZvQj++{%=H`DxSUuD(FBjUlD(R_jhKkk z{42hhf^F1-EAuh}giW0dKsG9qE#Lw!Ac3Yct2c>)bW===NDuJSn9ux`C)q0jE2j-a z6hF5%Ap-knuxy&tR&z@{6h#%5Y%(5;H0}?qbtXQSh}Gl1KW&~sGA4} z91nbqoOwK9j*LhDYVpUb2)o%jtpvVQ;vzz)z{nT23W5YlO??VMG$%nc)ztzlLCU#I zjf#)7-BZmit^0_qfYn`f$yTkd?3!ZvImx|)V!%Vn*)Z1f>f&NOuP^puo)lv+9^)|1 z$)98mx40mrBuQCq3(hN{s1z3?+#RZoLh{sAj(~y_;xh=?<2;&2ag~55AY=&;3_~tt zMLy&zIpk?vA1H|AvOoe<6=ZZf3)|s{L?&d~A>=Dz1KNFJ~@%VSc@q`V51?gSOn>(&xX z7H^a1LgOQNhG%aJl@iP)K5NdgMKC%ePU+#B0iKd7vCgmMPUL*FTiVV${*(b7u$P4B zN-0tC=~h|Ej^q-sZlSdj%H!$GHIep|ZewQpjK8TQ>8h~Yi=vopyC{y>AGe@9mxc?O z&bF8apPI($m+tA7_UWG9pLeM*mcD2dvP$3VJ1XvuS{12RJ-w#>73KozTYc)Pd}BR+ z%BZ$#S&hi9M!iDJ)zfQR1bFRYNYUt`^Z66i|Jh>5;XYK*-U1XRQ!5 zjf@`uKa9C)jNxkp0*_RQzz|X3`W@$)Yn8|dOCF5vAqgw_h)d4r%Fa4FiENYD9>cz5 z!`^JrHf+K+3&s}J<)J$2;OtKgtSK`qiHJv4jZ{nB>{acaD&{U%8?7haRo-@DTg9&A zijKWQ>)y6Ir!=Xo2ASg~Zd{Gx7S1bH)s7WzK}tazu9Cz^vhd&$F@gA3OwWYskbR$6mGEwqcwk0M& zS@L~uTRp<;{z9eTglCHeJkO#QK$Ak~wib-8@@lC%5luZPAI|}I)$X7*bfNNNp>jKh z^7_0_qsDAm%a%UgEI1DjBwlKhbYt8mYb)0CKj-s_l)KvopE6&`TlFLa5bQul^q1tj zznct}D5=T8aERMieiP6sqpt;fy^iFi!)vp`iI&T>E> zE(njGL5xW$?(;_nJeK6`fOl?!_wC;HyMK=h-9q?+Cm(jN918rXj^59!wsh?9C^pM& z6tZ_=N$_9sXwb}~w~bl{A10Fy(K|otJ@dnpPibg+>zCgqsnC?DWwl(B6txZ)=3eVN z;j|M9^Lv`_avJ)#u5Uj=dCQhss_nLehh0|&XZnkJDw%qzuX-whdaBQQtKWL9?|QEP zdanSM6{W zZX*|K5ouiG`F@XdLT`9~cm1Zn;!FP+NgvU_WAn%$A>C2x_C9!#D5-H9Z~)Nk&-R|u zE`EBaipb7oI8Gtp$(;b-^0cN#)l+Ql5Qzk6RLMt)maSFnr@33U-I z^=y6B^B;-qA7=Mw+VCjl$sUP~@c9VXj_%L@j^KZQKo9{zfdmqg6dah4U;>2#8Agz@ zMIyzCQIJGHQUIeyjX*XQ_=r(t#*Gm~h6IUnrOA#dU3ye0v%pLLnl?Y$%vpe7PMkVv z^86`uDAANOeF812wCB>BLXkH8`7vnJq*Zl7y(+b8R;)_9c72(^CCiv*Qzl6uQY}cb z8`)~4nU-c;kaBGzNdRCY&%7Gv+T}|(!C<;M2?s_JbZh~@In(|{oU^V?#F67Nu59=x zWv7mZW+sYRr{u|DEmqvgzQbkKa!3IN}yfS~P8ubWnW)^SJ3> zuK)Zw^Zn$V|JNFARjsC9XIcqG8FAKW)|+MB74}_&vAtIRVS@$H)faK(k#?U@1!8vK zYzUgRl!!ll#+h`MVds;JP8|iKQ8T_6<5o8|RU?fuhQ*_dOcB(hjWz`pq>n@DsN-H# zX{C{oNMg6+kWn%D6O&GQ1=Dp{c2tsowm{HbMW(19yiRPAVX?Nb31w>JR1aMj> zW{5Q*XBbLge#s_A7@nC^oHPx(S!RV6IwnktCick|nGcE;Hl_U-&q*uQYhCrDTMyFY~$(@J)SGRVZR$XS`y;a?J$`yo=x|Jz* zAw%XuhhcH%+WW4!la&bWfe%JF8M;Ij_mOS|Vknw^2^)H%gxqpUEmgrS=bOd#EeCIO z7FRqX#k{eGUW(KzjGVpc0UIUgF0b~n< z_pQzKo@?)2tCEZJ(p&lmD{nZ3HZ;oYmK&0`857hOnF*!~ZiHA5mM3!$(^{HvZL-_e zxhA)n@VnnCXD&>k6^8eD3l98ty6a-AVv6PZjWS?%1Kh2()anTHQqv9vx#L$k9BosQ zTU)EKF%{K#v(PGgIoMs2-cnREl}UQ=1pH-Gx{*H?cQOIztaERmoORr%yvN$&mlKc25t z`Hnw}JdWlY`+n@(^6tCrIIo4gZ$FbO;>f9WMqTmJPGT1HmipBMc?0a;-#C?=+wp5{ zj4RQ@M&>S}G$(zqDNa-uN#ZYMw% z%@Ag3q1ey-bF<|HC_Fd|A_W12pCcMEiBVG`5tRtL^gIS{G6anZMI#iNF-$2ZGN9qW zN5Jh|Xm)|wAMv!3niNivHU5+0$inyk8{F+nYIgAzlY-(Gcq#o0P2`Vyw!W-_&e zK<6P-m8bk3mF_4=K0YOzog-f%Mfb?qMa3tNY~MBgh|Ti_t5t>^-_|zMPQGQ)FX6IT zht}jy0rt{u^bA{dw1uub?G0bwsaG89Cbln@(PnK^sB8XJPxNGGX&^Eh6$vQM6&fw0 zN`t3HX-GTs@Fs&!>lnv8=ut5LRt#f1yyEzVCQso&=%Y}?pdxdVMw-IZX<1v_&Xg0v zlm(P%EmUbrci0_}mZykx>z8wU1~{Jvb!=_}s66e~zqb$+qI65#4M&Qet~M~5X(N)m z9%MFwIdpc3lUvR#3a}%Bm91s_;#w1TxT2LUYhXQ@4C|UVxlYiIqO0jOHHga4t&gxo z*%kZ-Nln5^tDD~h-6Qw%CFZ&Ac``|Y(4s)bxCDx`q?}Bk9#az0p3W`5yNYnMH%2^V zFM)|coh5Bbm(nJ5bZx1m0%1#;N@CBo!j)}|GV7(&0ynnHi(YVLYox>qWm=3aELYg4 z%^WQjyO9HykETmVaAryWv1T-^a&gC&w5(-%8494+);q?osY`-zIn22p?rZmT zki$e;6%Hw-jZzGm7Kz8j3K5iQBXyxtpSD9OL?I$laA5?ZP@jVc?WQ4Jmw_nQL6(MZ zi8)&s5)o#_nURcU7kl9ld!|(W-3LG&W+D>B(?j6Q7^qDY@s4{8OB@!sLmW(y0sS}M zs^qtJD=eaTy!u9;+_g{pwM{3FEZ@7Lh(G%+Q%r?vUKO>fzWN0(9?N{JGYhty)kWu; zJJl;SJ9bGVdlosFg*jnSm%c5D!lyI^DhP*Z!jMYBgoUOBLPx=~r&6?TgjQ%cC1Fm8 zjixX$$;)4&jxd$~O5OvZr_5MB%3HCt*e_=}%Se?v%wJm+s$?r=LT$?}#zf?Bp`ux5 zPWmH<+=!wsjThd^WY^X*bDE2t$H)#F&F8eHu^Y>5JzkgC&#sHK=^SlkSDQM7Gnrl~ zia2j!*)INMmp{>(wY+h8pBLTN+s2jGZ!fiW>fCnNAj;tY>g`VIPS12oBT!me)ixI$ z*W50o(SvVrI}F~=Umz?r!c_!JccclX-P|1(W-_E zaa2ZO%UJf|4Zm`VSZwmR21H_TtCXlYg&0utMYJsX9BDeG=f?J9)X|`eHu)KN-NZdN zvTgh3Ple$BPU*eUrVA8k{WR!44{6q?9yD!XPFmF{srA3lk$0Pu^KNvxTT@;A-OWJiW;pZg=G>i@n6M=@*wH1W` z$HP_s9;s|xMAS#2MVJ&c2B}mSO;lJ0no1OTNPwA~8?j%E@tAthR87fO%q0xaC}55) z*a)@UQI(jFtyELJSW?m04f>6YjZA!{TwkeB()r&LDF`j0M~~=Ula&z`4OkGG7u+Za ze&rTa1xy*u+xv}~mo1csJ>>0 z3ZGy{BgTa$ZJB=g+Av*KGaZwvmCmf)VXL(YC2AHaehH*_8vV=`s{tGMSq}7pPV{a6 zR~#N2oPi*09A&3(7GRz;T$mfk-z7mDR)zM;Y9bwM)%Fh`Vh_V@RCC zaaPA2L;`HwK|q*FU0}ySSm$lr3-S-ktQbi-ByXVHx``dQ#L!)s)I~nz%Yc|eo*>U{ zRJ)j+0eO(o&67wLT@PvFN$T7YL+)^P8Zsb@H>6J918(pniLDaS8H$Riod^jbIEIVRvCY@99bmDQ**M40`BmH$)Ym~Jf0)e^`Uwmzo)}*Lo8UR0 zc-@(J{TDH65aA_XHa(Z(IbOmb1!~;Hkbxp|m6vEq%3ov{5=_|X5TbGM<>g@nA(D}L zVPGpB59-ifdDR;3bxG{8-fnRQa!FDF9M|fN-evtBW2zEKKvVE}+Vn(EZ-M4ZV3y?B zCH}$TwW($3#0VYAVf78xF)p832AOU8VpvjNFFqn;08sA%C(H?kMHyJ_31L2B;oKpU zZwimR@t1LUVbj!BfvsGBdEqq5k!t3jhGC}?A>fX+pjXAz4oTce*%%3ephlvY$c&(O zdRPg5pn1Xu5;9nQj%Ry%2U6i6c+$sr#$XLz5Dn7U(Tt!vvB^|66u$}ohzojImDv|U zg{K%vW&Nce0RhHuu9m)3XoE@zk>S^h09=PQ$Pm)UP`+oDoz)eV;fg|=u^rYK(q@a! zS(~}x9fr!8ZJ$%LC9<*Q@nM^8rXev-3l>7sswq<|W@cX2p`TntMl>m;IVoxpDgQwe z>AZ@kp$V$(QmJJrs7>jSf+>=Usj4KRDp8^;vI$OdWkj4(oFYE#N^NQoQoyvMMj(yRNT6%t5M0APf`YaiQ7&n1`i_DN4jIctQD?S<1D%hsM2QU(-NO)rk>4Cif3|WX@X|t1)o7k!3IeGzy?Uc1bnT!!o+D}Pi@Ag zVg-_R?j~e?PBoRR2rG@Iw zM?aRwK!%>PHX3Kig=gs_1)46flGL(_?tQjkfDkL`BB%n!;7tA}vknmnh6hHdYuKu* z1Smke;s^46hJiZam?3C#qG2#YT}-jVR>m>n282&Y`cB0onL|VEe|Az*!PA z+F$%G5tQVpi^eD(c@NvdXy4&kS%z%e{;!XwZJP!E;{l81T|nZit%|HvVql=@DNK}?*Q0D-T4UoFZen*s3Q#puaCo5^OEpDwU2THpRYF&1wH zz1dq_OsW@4streQM?m9LksSechD#BS&vB}#;v_jHRMO<@7FOfEwOiZNYq^!j-Y^s! z^RYbkD^_}BQ)<=G4a`&lWfl_e?^cFU9V^2c6#wi-)v%PyRUmoVhS934&pwC5T^wgw zoMk?5hFM%f!Y)RlE=na_Usdbw{wgJpNlH^Mb zPb6te8MEEh?dxFhs$9X{+3gjrKCHaG718PI!wxG2Ju^Gjki`<<`O4k<1+0Z0)Kh{e zA-ffDC}{cGCTuP-ZX$?W!VJq&U$SveJ0Ge$M{!S9?bYtHD-z%EIW5dCSK^wE?T(7O zbXG?gVx*D9#Tm>XUNYxh-b5oUK!0XGqh`*ECe<4Bt=S&d@^jQ~?F6W+K?HyVjI9I+ zbl;-kTe`FpJJ#vJ3_Ba+cL`&5Nio`D7fn;s0(lKcM-rK6NQQXg-;mLk6|Ra(mEtax z8?#j#$x#@o(b`E-S^*dr0&YRopVL(TiK?;?Q28gSW>E81(CM1>f}JP*8t>?4q$y`$ zKMKu!uqUELU?~fY2HrIVYTiCd0q`<1fZ`{Ay60N^wGn;w@&HXhvcGyW``4rkvH$4 zh)Rv4f+4jnYE2XHSXOZkW$`xUuZ+^RqKYMLCot&PNd=2y1g8p;-ta2A)&z$sD^g0F z7!1%d^a!8ks}70aRWUWl6TNK(S*aV~hStGm6J*h`K7_!0J7rT{Uv?Rpn$I6D(Z)D^bd- zGWQIm-uS*9;YxYyN8XHgY#6u2(+{C8Dkm}n+F*~<%O1O{Mlv~z)!eUgWJZo;@G=z) zVryZGYDfJPO7^(?V#d)`FmF6|FHL8thtFIF+ET0^rwN#|Fs zv0G7PYG3Tc>X=nFZ!;@8T7eyCgH@6Vx}fWobh2HgV@%}^Fg-gCJI5`75MB~bPN&lRQ0XK+R7st+cxt#oKY|Lt!5cYHT6aBikYSE*yh`tGG>%$fwM13PC%k6v!= z5aaj6p|q6pvrX&tFy^$WGjUb$bZhc7gy*)XQ?ay%kJsFX?+6cS>rEG1?y0s+ed$G` zlOO_Nb%dh!k$q{LPg#-j-@Lcoxjk7vdfmI{mIZlWBiFkO26lf|oEAud7DxiA7(Brf zyeHRFVke+vd#{gCEa(z8Vn4jaOFRmVpjdA_etK?X3-5nUymK^mV}CrHCv^^e-41H? zWT#Pdj&H=0?`xfEmlY?3g08+#nO|EhqytvC?T>78ZtYY&&YOF;C)D2YuNmfIY%YBP zPk3(|@TkW$7Te;rJB9yR|8d<~&y3j5*CRJU7XYbDMA=uw*>8c*hCMLx9Y zEwd{UpBS?%LAu=?nP-4N9 z9WOeZn6RM9g)U=ygsIWs%$f#YPLx=ZCQG3*f$nTr6XV2(6oHC7YVqmG0tlA=B>D6v zLxVtacJ;~?B3A?jz>@WP7VX%aT+z1e%GPb%wOixDmFrdQUA=qxzNM=du2{2Sr<(1H zHUdY&iw8F@`&c7n!efz0k+S7-<}F$?_vhj3bmK>HT_ z52>z}LPD*PCfrCt2d#qeL8TZ>P`3Xd9MC_nNOX%twX9lcB&*~*Nr*;)yS2R#}dPZB}ECMFyEfgb z8o{k)HWTTrY+73E2xUsw!=@JX3AMDZiZWauyOkoM#H83{3m~IlyF@pyI&IFC1lJOz z|NOxIspuz<7EnN|8Na%~Jx%S>?GSs4(<#JdPL)Tj6AuY##u-!$?83Lyv2@DI?62({ zTmM@rqIY__ak9z&FzLn#oEdT|Te|RPoO6$SLZXv0N~%X2q&;k-Z(>o=+9IN+CN{rUoq|#e)ZiiZo&H7S1;h`{74vB?DK3#yk%AEsF^4BH^(jt2 z!b}08P(aHh#*UKM0^XuPqc*MSZGgPfAO%^-I9W+gh$Cbh|45}M$>x!rGo%|A>BdG< za*`Wr;u#wSzT!(8%Pgrf^^&xhRB>p!lZz2!CpxW=(Q!HhT~UUY)1u7|j$s34?SK+R?O{knTq6nd zhW6Co39)Pbkt+B;H7K1bO>M~&YZW!wPqu}%r&CP`A`2i#P3$pmaDD4sx1h&9iVtX> z1D;0=XEpth(R5!E?BODZIH84(uR}%bRR?RR*YT8*svF}U|LQv}9rkgC+fevU*V(Tb zZm_`vEuW+YJGGV7dA5sCC%q>i#jJ6vmh~Nheuk6p>5_UznVKne|LMJ)A+J!(i&M?K zQaqw^FLsWD9dLi!p)_{2CZx0K(e{%{lJ1jNHf-rJqiG)PuJola3@=LcV!r!LMyBZ{ z?|MFnLJDp$EahBaxaRAb2q55Gl7X*#Pbk91Xwbi0QB4VVqnq{yxHShZA%Fk-PyHfz zg8e1oOuJGpzL-}okg>2|FdR~3w&lC(73s?=oZjoYMTRs43^cuBpu-5JLNN~0)F?FL zLUklJPaKVo9XqKOMUR-l9Ew*9<|r|G(ji_9(~)oaXzm@Y}@FUxt7 zVeT`SZ=@$Ub7?B0x-r23g&`MXwI`ahGM|UoWS3ZJm(4X|^mwV;AV;~D&kJ%^ABB?Y z4S9-Sl8~r&x9U$_Pt_Q4*{rwAGVp#F*C};otygA{6!S1xw(j+Mg?-%_7Mr`?eAo!7 zb3%AV#7WUcptPwiFX^zbg8uBNLmLK}hw0PX|0;>UWK~ecl)G8x9%sAwiQRKwr(O{> zXl&@I(FH4e-V2EWatIc%4bxiK8B5u}uZiq{Gt=NEMtHBSX+MECeAv7OIKzi#Sfy#T zs#P=I_pVmy$04NTGQ|IN$QeOyt{qP00Wh185KqfT!t z^6f27MhF_%5JFQ?vA(gD-JQS>+|jx zqkfu($?t+8Y?gR-uwA)NFg+#Qdk^Bz_X6H;xN9%M{pvpWv{$~f6TE!ZP#C1>VIS<{ zM}6zFht=1QzKB6u(~{&x#sUfdyUDL(c`8no{|RCX5?8&^-X;oK3IdCgQ4QM}4X)7| zQV>Uroc|u>bmvM*%AV||y2$_X1xBLe(0=I8{78uWi~*Z2kR%WS-HhuLiA(Zq&rs`5 z7H|U_umU*{kOqwczbw^U%>oaC{{F;x0uXBi5aVLTQSi@}pht;*3VBYgQvl!q`!7cL z&r&vv^7QWVd{EK+uDbj$3DF3RVrt@^P@15SSR{_ulu21aW5rae!(yuXPVd;F>Gr0j z-|}f)>}}ixirfrJoStnB7lbnGDGADjT&yS!MP!-yui5O0RpjuX&d}Yk3*8864`-v^ ze2oq}iub%FW#K6J|K?u&W96s4f?R}3%{@n zVJbUD!W7|$x-QNYkEm&W$9V|PP{xL+oXF>ZuC{h&t$@zrj;MC*gK74!oi1L4$jlsfl_mXcEby6o+aVASqEpzhpPBA>{L&j9F z0PRxzxXLU9hr!Y>e|XTAM6J<)@coFaxRNYWG=%=H2*?r>Blm@r?rc*=u$L-rlu!@| z02ApBa0YFw1heroYlI1PNR8S`NTPslU@J8#!ZL`2ttg8riUiiG#4^0)u4rU$bi*p@ zh+FnX&g5=Rh=ffhi3C3|G%HEa8n8Hv^B&33mT-_x9!(;#YA;*|<*?|~x+j)k@=}_} zJE05hTC5fMGSe>4m9jJB|C-E-Zs|@KlK@>!3Mnq(POKB>atgc83l|O*2`<-CPd;gK z;2f%<#`4$+S|Y$dIKnjctv4R@Ks89)q@a&{!ys0(Ahe*5A_7}p%PJA*pQepJ zoCMl*L!7w9Ii7ObuCgRZv@)P1+9p&hb0kKuQriAd-7;!jyy-s3a@p3i+s273+e=@p zvfB#L67i5YScX3V)YukoJDM~;rxZ%5a6YT_N^{L+Wb!}70wb!3LiBNG_)!|mG^l2W zwPtSdma5|>M;I}#s0y!$h!GZB4%B$2x@b(4_U|#b=j5m>=(2IN3=2>lvU`Z)bDZMn z?C!DP&SuoIj!v^6|B}QuB|r)kbW(*xHw(l`iiC~|$Wnd6QYkfolp;xrRqyI6 z4TwSui$Y1YHZ_$(E!B>6<5Ij=+v#?-UMXwC@79nZ0|HY@Dj&L8t}0w*wSK&K%& z2mWqLbaW1Al|9o^{%2H=X<6LaxDuFgF_jUR#fC6n zX+0qcsw89u@Ah}o^OeB0(_jlcefKbpPU~}oHf>%`o z|FnRS8-h&FF=|$)9oMmNfVHQ(r0a-P9L=hYk`?Os%A3=m_%C*CCPViiiI=?PX z83jm<7&lqdUH~K%k>1d^RlL*?~}l zLbt_1kst~p*i-2U3QR*mBOss)APf8_5y2KV6asAPd7;Zq$9lFv6QZF9dZdZNR!H0_MWHuE6mm&?=1|JK!s z)b<$Twt8*3RM-yzi@JzvS_hF@mphQqjuS<4wSQF>Mh#*}3ZgS4p>Pj3Cp1AJB!P~! z07!b1j_AfmS`m~G4V^SLHP0Db0+=B3x2>u=CB)^kCN&DOAPOJ=3c#A6BVZK9U~>mL z3$$Rci6o$XlXKXrKhm00C4sEpf^-FrFif0r*~Q;rMFR>5e0QS0Z-B}Q4pKC z>O70ddgD`u+Y*|!S=UJH;6{;3oqGxawxp|jFAJ34{;T<#V>e>Lp2lDc{|Z18NTC4s zC<-<~3o2t2BmfAafE37}GPHmU@Foe$Tdwe!70O!*NFl#T0W%~(6UHFDM|015U;Ts|B#d}IuyAjl&EzzKr96QID?3cw{G!hwJc=q3pi z9Ih|}2sk51uJXy}NZo!EgA^*EY)`tw9O9T8pS1M3opiZX=Hb#jORsmj-MohBqCJ4P z8MU!cyqM#B4kIgarqQ^HXPKxKOPT#t7#j~!fzj1k?#Ptt%9<;v|N0RsSf|Et3X3%- zwrDHxWG;*0ajH0ydc=SvNr*+31q%4V-w8#$v1Wr zB4889K!G$NE+kFT(t9d6ViO9)z=K4?x1d6|U=;p$3v{E_)0;?GJ#p$LuzP(~KliXB zAjVg>Lv!V_up?`of}nnytCa|Kl9Gx!EhYm&6-ZNac+y@P_D-fHRc+ z?Y97I3&PjA;>sB)Gkj!@gq+wBKM4%H=s!Hw(_3$>8UYf3z3KV)f>L61etTo`F0lJP zqnkc)o}{%&E?(c}br^dOPCMM{KCTM9f}7_opwOUZsYQt>yz%= zyKyZh!RgUr-<%(F@(qj>r$rzD4CDM+c=1ieffXx$TcBrUy@PLh-zLt+Hd5+lJ`n}yfAZZ*R)yB##wkX|6JFL9p9D=Td;29$RD3RY`Qt~=LMEW zcRn4ubmG;s8@^5*`*!NwC5QKpeLVT|=+B$)u3j;M^ytU0NB{ox<0SR7-?U%)v~M<479Gh( z;D9*22jD_#@wNp5TR|An7C0g#g%&{6SO6(o%=FO~814066d_3@(}v?Li?2v|T$ zTR_>NfKen7!D;WY#vhE+aWw`KSvi$cR%0NP#26S^6jTyqBymsznnZPTo2WqFPW{T;lp+5I$YpC`06N|pt>RV--Mb=iXAN8bJu%G>;tFXi(>)Kwu1xwkj zzE;*)vcbJ}*{y(qmhEe{URx}$&^{LIWq^@eZD_>8W-YanAv-K?;~HnIx^#KOth?I+ z+iSg+k++d#65teY1hNr4rIZ2_Wf)RGEflbw76p88dW;$SFJ`%2{1L%6!G(muOhqQ; zUOHLy5(G(+LPm(1L?Ft_VuS?KK`+&uB)%N&^sl|;nyh8c#qs)EZ3UVuAVQuEO)_By zYbhP!^LX5uVB++ zMz+-CijCXQd5;#HVr+}HcgEt13!K}i9Zqhu?+&f4rqHn}-IuAd8tZvordRakn70Zm z=b3ZvIp?dohbnmh+P9@({I$;d>-)hToo9O?Y*@!3GgT{c0$=BM&p6qhckOaV>U!+R zufAVk8pZCP?5?{gWl%=#2t@`^MA6~L+Y5+g_Coume8(RjzhwfJYUCpGtoOvF@j0Cz zdwuTHs?qbv!=HcaN$d~(|FL5Zq(l`e?u71isDhLMA(x%Wxr#lX6JP^V1*+1C4nCPX zpyePKD-B{Nb)yQPyo3|B|LOF`gru<>atcHn7IG^&yzv#YVtAZp9mi}pEKbI9$U_+R zumD{epbvSMm*ga^hb{bF_yhx>6CRF*w!zD=?2;NO`s7|;%apbFhMj0}@i?2Zmu0Gm zvxa<$ZU?nq8k~h$VWAfk&5?1;}!jwMx9yFH&#q! z74=xi)UXJNDeM`4HkUWRwQY&4nU)a$=0X*cY%*JHVbDgow*uXThHeX`Dmw#4C6)$K zLfm8|8$-&rb<%OfiKTT&waZ=Rr%-kK_m_0WZAPd3636i`AAQu_OoU?)^I34=D?-0mRV7kdPOZFfAfRmg5 z!{2l|`b~g3RD{t?DXA)@O^Ld+r7%_LOR?$9WR_>2#T+IFWm;36zVw$N(w zIj3qEN4Rc+E3STXW-v5=*j zU=_e;Kl~d~M5Tb2iy$!L2To?JQ|?#l(2}b!x30*3zapFREel zSip&wTQT!V72@!Zz(boE&&JxuEh}A`Ol59Mc(+gT>@O#59AK5GtXH1%MXvnY4iU#n zCf@aMZ`&Cv1NXacF%xwYRA72MxXcG)hmzi5uVLrgUih5Xn1x->COHQ}|ADlmuhY^u z{b`dcA)!M#F|dk=m)&w|ca=6#(Z)n0;Bev-z)igH>j0`ckd9NFhy|Z5-e=dMYqg*Cm!%x>P ztc$Qr|J(|bJe=qJ>q}8xjfH(nD^Y@xH(d_%4TDISz2XwQ<0Xz0hqz{1vK5q_kuI3! z*;qo_`H-Gnq<0XuMRNt2I9?Q_BKwFJK?<$Vciy9Fq_t?^4jL|kR`j4#J6A+Mt7L?h zbQv?vX)TwKu{un1Y|eAWboqH<{lb`cOzFkP0Z-K2wPm2)0_Gah%B+A}W!t=bPQ}T! zU9;Jun^$OEbanS}KozR8VQOTa0`(?|S$2;9EV}#d=Fiq<;7vbwQbvJPg8KYV$2<&C zh(44zn<+P0L&KMH`^A(ulyJHuYEH^IPg3@gO+_X39q#P=FzP;Pb3Ufgqnewg|IQ~9 z|C2z{bJ|;W67=VmM{2i<;z!{ag*Z;7lW}m%7@09X6*G&>scdhXbnfkOeRaH3(`DP_ zAjh$8jQYrNK}$F5I<(q&#Z_nd4Xo^fTbcd*-0DgeT#nhR&BOY&$1VLgV9h1A;KlA> z`+2uJZ!OZHj%ue4edls%YE?h8Yt=*z&-{vX$p*WrKKGg0hF)yHFb$Z#N->@qBW!KS zsP=i0E$lq|>|B0D_`CONx)*xy<5MapbB6I_5yWyHS9~XDWM76U>SbR! zWmx((fD70j7X(6(aXbmI983mEH>OVml4=5HYfltKBKTxhr!=AFTf4_*D>y`sVj0m^ z7*JG0M+Ad6SalP}IF^KFbY@|#*J+OiG((sgja7K6HC%#+S~(*};FpAUmuGz>EmANN zKci{h7X=cag=#lQk9KH|q-bC$gjnc>v{q?hNQRBHhIUqGb#_R_v1X8=|2VgnN02dB znDj#4QDy^Vhp+Z!RP{HDb1`!UXP!oDbl6?Sc4oujYOy4OJhL6T#%d{uRa)kV?4ujb zHdM>jY%M2I*#vV6cu&=oY}#aFLlugg*i$jJikm2HA(UdW_$c+ZaMdSqCw5}tHj8?3 zi$}$N%rYVdV-N=hep#Xg36dw^w-9#neRd)x2p|$spczS^j1U8U5aS;QAu-k%jM$hb z{A3eVs1WS5VdWH28i$VRh)?|$VJ7BL`$lj1qfcf7Q1|vv@FP;WcyXopiLE$O{@76> z7m%wc8L9}21KEkL=#Mn@irTi2u=rgxXL&f(T6GgIxTQAHrCVSl|1Y1nHtdp--9j&N zw?ulgEm;I~xRyg%^(@PUSBEG|#zu%)m0L0RL@n4iEx9&TC0X?%cd|8keROs}iCTzc zk*{S%T*CFnTC@}(v^CYnPp+KO1iZ>f)iZE2Yeh< zfz`HN^ksmfqkIrpSR@ylv6)TP#BT4{e*icu9>$9=W_~Kh|2oguI__sD==U?o2r*It ze&QI6`=LF|*-!1a7f~PuK#(Pka*ZZ*jn|o$=(n8)p@q_SoWNOs-jp^@ngA3e67iD@56kf_@C23n>)sU7Wk05c|igSWFKgslH!-`GDEJ>QI)AeI>>6l zM_7MYRvL<3u%~^21BA5(gRsVfHwkIIhJ!bBgJj1dt0x>q^Fo;!gPoQ(Z)k)zI)#c> zqnWmhH$fCv=ny}%l}@P;SowWG!7*jI5q9EPNa~C}x}*m3eS;(g9T5RkYK0pi5=!co zmsWRdNf%?NMnqGFI@)MpT82a@hBx}9kX5EfcY3fi|95`~T+GE|NJpoQ*n_Pmr>)mY zC5S{))_d#rYN1(?Iv9IBm}}Q&h>LirqXA!wDnyxisLXMY|9Gh{XHyW#K$)ta20DN_ zW}6h)eEdaf3WtvQ!5@~Qi{==8y@+wJ`f&P4ap32S1_6G^m?c%&oK-2M%P1%Er#;oV zopPdu+bI#%Se@TEBF*@XIkAP$_>ECOQRqY<{{=%|Qi}~|HX`&$@=1^0_E7WKs@fW^ zEG18=iYgqZa4YAD#b=7}%8>HfuJcNOEGJ*0II6d)ub@h*@IjeJHIY?AbZC<=u?1It zcX=}EM`&h}Q}ueN6?>iOEmhTZbJvk+#7do+|5b5?j!Cz9GpUmxnO8BIWjf<^WJPv} z*QPo8cxcy#Ysy-Z=cYh0j=^ZG8?l8_YK2r;S!gtj<@ZTlsk6!$w5qY4OIfVn*E9}u zFGvftaXGVY>7Y$?hVwM0bXQ!k1!{mqNQ(KFV9TaabCh7KlCLGPy0Vydn6Qb-n8%W~ zb2Es81Cv5Gw}Z!nh}x&87iUlxH*m^`7j@&ejDOQUFCp+@z zI@I@n;TV7A*ShqlPV_0C^_e^bcDm`=|6=e-yuUl3^=gpzDk=|nOz#?V`sBC=%DKl^ zpbCn;(p#YOAwu0myDGS#9wELPsAcfA8FfXNz;?A?W?ZNgf{{uqF>1IKS-;fPu(1|h zxaWec^n+D5OQxZF$3{0Xw4;f}hG~Omh9-pv>_=S~rid1%66}@{>_~Q*h7DYVnZ~zW z3c;IZXCBOH;`N1VYH1&=!98x6yO#Ca7OmJgfP6L!%LZID%DX zX1KOpLJY(W_K2HV*gn-qtsy>ebcR5zO7TfJ0ajXLBc(&+JaAdLh;q(QLl7xJ~%XMLZfxSx!2 zKnL^@T|!HJC{K@#|AG(tsROjhqP)HDu>?~v1zf<~&8-AePykaP-PFAV1z_DuAl*uU z5DH)sO7Ptlp#VXk00BVW-~D|`0N&MY5!h`f>unhA&E4^x-371&-M!xNJp~7$7fKKW z1yJ5eK;BBQ7u>x7)U5;)03j*S;3zRAC=uacDd7?h;b3XuQ!*u0xZz04;g=LJ9U=i* zKn4-92_!BSC%y@bA}7=hAq=5C9q!;eg4x7Mp391j#Cn|v(GXa1;~dVMF+QF??&CpT z`9r;#E%Kydg0$F5!045D|V5U9lr6(d1a+;M=JL zLZJmsfe=Q1|E%80;2W+aym91RF5_Nq=3Z_TIZoItapHS&5J8~@dm$V;wD!vkRV(AgWB)AUjDt_#$o)T&v z>llHw5OU`{E(uN{1^Qjx+72P>9o_Sd;OmXxI3Wb_P40#f-shg(-(BDK9p4L{-SZ9J zII-RfzTWH3WzoCUF(*XbTV)hU%DAG@^h+ABy;Tmns7%lV3C{!!Uj+=$2nt30$!Htj`uc+xVVuol&_X#jfUB5D8kK2|Pagh#mzK5S3C9 z|CQbC`IR0RN>HX<=F`|0@^eGCV7*Rxt{?wEu%F>5g3TVlcC2G_tQWih?E*`v`0kpv z@9-rHgmhidyMXcJ#)J1B()VFsQi&;~*piD2xgdiJG0AX9G6_6H{}Mn1m6T#3 z9Iea`zc#C!Q@tthQ(~bri$v1QDElpQm5bm zz%8EA6(Ujws;B^4m)!)TW0%#0*)iHAHQG&%C4-b!I4OmcQX(=5qmry;7Na+F%1K$D zqGcD_rSgl`M9FT%FAJx%us4eOj;k#?f0W7-KwkY3}!%xhZJyawaO9;xn$Hrt__|2eYA9#a{#n?-&o zvBN~8Ov@#}BDiQq2&RG(27C)EV8DoQn5^QKn_95F>cUH~tfOmMyXK11xHo{4GnlX; z2Poy*%B=8(uy0a7SLe)5R-~#n=&Nu*lOT(Lxg4t5*;E+t170Jl&%N|5Yg_ z*hEY&I5|ICGB_JvdG+2`&vt`!eTs>Lz?HYJ(h#!dQv{|NkSqMi?duK)u)9{k=n zK=|G7eh0DFK^zz*;^k<71@Ke>H&F)kwS*KKs8pr2076S?fIM2zfD|C4I~I~^CZ{T2 zOVB4K^i6>aQ}~b+HbN1E$fSA{=@mjWcd9b!u!qWu2oIxmkpj3RCf0%pNh(s1CZ=R1 zk|G63C=?Se5`-onya~E+Vv(No3MgefQRE&1x28<5DVZohR3cG5`4B8&fQin~xVDwt ztfg#rsmmYnf|sSy#cY1`i)5C@7bfr}kl;C6BoVomLAED22xtsvk`S6rDh4$-8%=09 z<1)#RhBJ<-nPg1%GF7&cWUXXnEN3RmRZ50n{UX?H{{VKI-{h^AVCzo7B$J%#3_t+H zbPICKlCV6+SvC%b5okIG^5GHNI)-|Q~s{R z&>%gjq6-yNM%6UYhQ3Hn4=L3`qBIf;)ssR2G~lpQTGC-j23SpG6&6*ZDk`}Nr8gaE zQ$R|gVTo#33Odc@xL~TCzJ^PeVp(b~_mnYEh*T$S>1%2#1(rZ+rduF^Pf5_y4Up<4 zUv<+>lyxDp@)Jy~5|a(ZwA3>>uwFv+s+;C0|0-+s^Kw&g$cGFvifcV}SxDU6u?ob`8nOe z6sFpPNrr0``%76WX0WLB;kG*mK} zEM?C!sk7BIMl+;=?sTgw8q1L8Fm)VS(TWDPt<-TjO|xTo1v%X02*zxKlw>3m)-;33 zXOVy`%hn9pl_4NV0eDn^K>wzoC8(`!3z)*v2&SFHxeaa&PF#5i*PjSS*l`zboZ-}% znNCiICOqK@7X@;r57{IF@hiaEorcFvJ?roz=29xF&0=|Ds` z%sok4p2K1Ys%9m_dtAD6dgV_NQ@T2SY@`K-G6_p^Qj*t?qrG~^*143kw^b-AxzR;uS2mN=)RQZgVFReN_;WiVam zGI6Hxw03FcQ9}l~Pf6}d|Gj*c$4pf+2%gegr8K6u3PKLtWQ60BfTbSdbh4Vyh9D(F z>DP*BkWy<4S0|MNr**%_BFiA70uijnGZJ>)&soiy;!kUptd2@X;4vjdO1LGdW?hI| zDfuTE$Th{rtLKL2uk0q+fGo)pb_|OF`&$vU&Nw|J3+HJjbXL3n=s=ALP4GC25kS}a zquTMaEXIe6m=K!O^COBq<2CF7#NiDQ`rh`8&DE}6*;Adrm}(ZI=QF4GXW zO!B12pbXLwfZ7O)-2$5d2pA?n3$ReIu(&0IX#yfJn?Ir?e2b*5k*%zlL8Mu*MG`mr z@(v)B5BuV;-e9A@|LL2Niq__pyoliB%qum z5C~LhiAZ@APWX^50ifx@o;jkPt2>C(StITN5XC{B?NN^bu^uE_o!>#k){&h>Bpv`M zp5!4N5>XyP44gtFpgF0sH$%KJ`YAf2GC{L5I>WM@K(j5lqM2e9Qs9E|d6iC+Jv3W0 zDO;*e+=Q-Lv*6>Yf*7=iV7-$9G+0El{$aGP`o%m;vtqU1Cv_Jk)tSzpswzVQz^LJ!hP4iHI>+|UZDX_!5FEsUF_ytp?*N;h_krm%3qJHm^+(Tl0+4If+% zd26mwk{k()uG83=mC2+Ne7Fj%rKF@lrIfg(Wk}$xr7mbg;^K|kh-Qgr?_OBLF^`U;<@PYxdO2{)bYaup(lny z00_}1D+@fd56NQ>Tdcml&t0=R(sLcGjw!=&x0XrCr0xI#6 zrLrN$|HC_ns622?&9}3xhj^*NJWMXQEU?0<%7DC|%Bhs16gZp3Q{$?v{qL8K{6E6uz+6$Aa0+W-1EL#bwTd67F zTNY8d7B9go<|!3|Acd9~2)bgHEkGX{5hxk)4=q`dEaU=jVXVdCAOUTO%OMvEsVpwB zp#^OSFKL6jYCWdX1kRe!XjzP^Ym?KOzY^(>r;rS%n3#icr2WGU*b+boM3@w93uZEy zAz&?l5gP_nFcDRb1qcF%JIdoa8K<;B%=owMat!E7!RkA}Eh-G0FJv3b z2%QJ}LN7d!I+d{guu~b+u+SMY7?F&B?3`0$EDkc%LX|^qVzdkTp*&>Akmx1~dLQh; zv5jgU*WsP-Sqe3b9K#Vho6}TxQajKQRW*Sh^U$92$e=LlO*LC79NNT{Vn$K)L^9h( zR0Fdz$UQORvsMMPSHZKMx-3Hrsa+g24dApYOBXF8G!WV|9CAfabk$}}Gs{{vOL0cg z6TM+fmkBV;(#yS+P&IP|wU+WbQY5s?S)Xt$fQvvMQs{yXVhQy@A6tt)kYGNT|Hzif z;sP^imX(+Z5u>8>S%{&dCj^;-O=yt>P=bFnMU@ap^_hu#)kaI>GBS%PW{Z-YD5HrS zgDij$sQ5^I@tba29I2Q~@L@54DaraWNjy49CODe32)8EeQhM{jeal&|z@w1_o1&?W zpJlH`s-}=U(onK4)G$&BTv~#2IL}zx3zXWXd?i}qj1Yvl2mp?cBaW(^4%Gs=u`IXM zVvYk`j`pCN?Pv?JEvBAjFCm};Te8aN5Q2o^m&wS&ZX%F4i2@`Ll>PWQz2wWhB#;A< zCnxd4pEEe?JCjq3&Bx8hqq>tJ`#q7my375&jlC4gL_3T6k&fC-&Ah0I|7yEHp%c|X zo*8K=$|6m>yP=}GyPaC8-ixY+Xb7v)J*y(T<*c*QP!N&o#NP#~xO2M7VkvXXyWyOd z*=(uGb6(8@5zSLhObos1T~62pS6y9KM$5EoEt7_jJ*UVJ3*o1-+5$+ykpKKn`Q(D| zD~RADPxy_j#8bW|(nV<@mzdy$cx^l!`CNh8UxAa6sw!0QqmnmCmc0>^E}(*bZP4>& z&xWw9Ecl5m=#^1WiVdZ|4h7r|wGUCzj(-UlEqT!c{J+*pCUu)Fn8g@<6HBn|t*zy+ zu>r0L?9m%8E{Y4K4fG_L$(aiLjG*M1gEKf$LYgZjnB<7tY3idF{{)KxV1m3^n*72q zNzymEs9Cod03vL!hp;5A@nYr}nx568Lb^BF0-HDOLcnPe!htY1hGWQ4vc#FwI;LY$ zjS?RDm`(DK8T(IaEQ3z4s!}L}F5sX7P=X0)#T3iPJglCe%6N>=f;#Z_}g4e+#B#O7;;#by+rGJDo< zZpJYB=2Qf;FY8x^tTavo-!YRiWDCc~;+*g+HW@k}g7v=k|8*i>8;O%JiG{eK3o?m- z=I3$*ktvu2|MklPPyi{2S0QPU5BX0pyPeK&Lc-agc1g3z4cTHC zC!SL52-+L;3LtEm#l_*MP7P9G4W#5ztG3##2I3u6g1m`gg~25}V$0UzuV6wsh#?yn z#jhzXOCn&4m@^KoQMqG6Tjn^Xxy_B?s9U_&64Qc9xHR0qW+xMwrxz<#KSbJE0 zmDfI%R)svhW6eu(UQ7$TlqkKFkWK1UUIQ8_q?!_QqC(Djncm-a&F}$k z-)>In=3VNw6xft(U;!5H<$wvmwC-*_Tl6UlAz$cjzJJ1&fk?c{ zg9*OE2>U)Pf>4kg5fT;I0!rurQ9!Q0g7ZMSBoHXT6CZV@qOcnSZ7GHGqk;}lt2S7P z1-+rxlOp1Cu{GL{I4KkluDZ{P7Eu9VzL-+`2;tRoQD!Qb6pfk|KkK$|(HGvo+ybv( zS~-3TfDx=(tmbiwW6B<n9^@={9D>Hk{t>e4_apadx{!ltPWLW0sd zGPkvDq_bfHvndO-pd?0EN%?TEvv`Zapi+M048f>Uh}jA?&C(L@uhT&hI)BsiNPs!r zLNUBkI|ZCSH?SzNLr68UBKC~NCDcIf0zoF^QfLE0CWQ$|JNmbfGhbq_Sjn#RE!A2?)OXX{l=kDGSl7T}(_p38QYrb}frVKEqa4B(w1m zt7oQkZxI;@D-y<<7H4wKYM($djH1=c5R|!TM2?}-+Jz#dJforE}sSU zoMaPdFY?ep2krox07}>bC1{a{ri^({%n8_nGikUsX@^IT=zW*)2c-}$YY1!Z2q6** zC@|SLLXRm#k(5p`|G1GBdkTc0f-78tg`9aUu!<^8bF4_y0;oa1pf@kAS$Zpr9xU-G z{R${0NsY0updGLO3JniTx}<}QtJfK<*ZS_Ndaeh!tOq!+w_&N?>Kwgcrh(Czi^>rV z+Y74*rSMz9CEUdyWeTfY z_uCOA3Dg7n6A>{?Qh4-ID1}zgmXydxS^qw*4-Y&4)sfO2yU_Ni(f;fp85B7=;2xoq zH;JfN2^1b-%_b_&nriLYzWw1|Dcdao^p))1X5QeW-PSgb4^D2#6K=}4O_vh);U>=L zZf@(f{_5u4(ZlY;Og!7wZV;KgF&l56;*hdBtHKPtH-xNyQtu0K-}V0|yjqCoj0pIT zZ&EmqgOU>UpncB(2q}`JBq?CfU_m8Zrf}IZLCTbZ1)>}@xP??JQe-f4WJRhC!z~=9 z6xhOM)R-(|G>xL@Qj5!pFel117zL&nEiiR%xhZ7}#Gf~ZYAHZ+$q*(7{Xx4fT>aqQvX@PUb}er@|Bx_ zZjuBBkrc3-fG}aYga;RvoA~bE0ul=>b}aaEfdxx6Gho8NY11JK3ViKs+G|qJsKb`_ zij@J8)?v?v4cnDKf!e4ER5g2W!0+6dmweSKMTtS)nw2k6B1OxooKcxMUoH2$*6;nIvOdOlUgb%qXkUBg@IviL#VB27^$ny9Kd<&>LD zS%9lsxc8|>W7hiVn4EC22^YFdeLubToc|OWJXh3BT4)f(6iNX16#=m^MFeiRoyA*e#BJu)$XaQpnQdT! zrP^m~d3IK4O)=oxS8Dx*Kmq6$fU`k5AJ!MpLHAXeTzVN@7t#hDt#s0jG5xgDQ7_Hb z5LLkZRTXA2K}Bj$F<~`TH9IBMS5#50)K^hGMVeDgRh85d0|>Ez5NgqV_uN7}GzCS@ zkw$h_3q-Qh;2FXsg?BF*9us;6%rq2DH%YQZ0V`QvaC?}$H^xx*%_LWTEOL^Ofu(a| zU>m0+4w0tFJ$IAig_1~6h_$nLJBYaJPW$e?^G*|9#ISup9q#+> zlvD2A@zR$x=l}GG8?-w0*l*9|L8lf#Ca2|>$-z&ID(M|wN*aHCPmX(M=kazf2$YNm zX}`UY2K8wa`xc}>plC^b1WaE66NtbC9xzE-ngIFARHl-I$x9?T)q_a#AjHW^3uD*< z89MmE5E{!761qT&QjmfR zN!W=bGSZ4o(6CUU!%IPuAb~AR@N^_u(iAA?A0;F~iCZ9$5;+3KkBq`QWMGMWpb$Bk z6z*{{@nCyASQI(#geZ2LN!>DIkO7p92~Chn6a0vlwiM@WT`3!C+yXeXrR6MCC;-=H z)|R$(W&Z&|5E{>brkA-04Qia+3jz=mO3IKDA?QL3DN(6P%7ikMr%WX)k#Lw%BIYnZ zTTEO|HZnEyoa<20}24T-i*fSsbv8ilc(sLv=|W-@^q-+=@q z&;S*P6BA&Nrlzng_FX8OLUQ67XD89xP1Ge9B2nZ_gq;}aQ+9i zNhdO*l|o8Rl#5f7vM5vdl>~fmdJ~k^B$9a%t9)Tv$b--%r6w_oN=6ZCPLWiALFq|J zI{!)DQn?pZ$^5CKf;vb7R%awBa7j%L`f8=1t48p-iIF@+0y{jGv8WK(QhX|h11S_n zHX%+@NP>Oak_>i0E0GNZ$e^5{9Po-rR4yg}BdsXFM+P*YkFX0P`rDxba`Es>EoSokS9*mkWLZds7n+WUsXLPndH=|XQgosW zMot|=3$=ww7-S=ce&SuCSP)~A0U=G?L@Bs{z6Tk^wZAGw7{i!4KOLGPSzufpA9pXE z3}p;Oaoio_EfXau;cWy!F<0hRH3ox?!dE$)zdwVv%%EnNpVJOt&*F2WHD%1F~bn=8!D= z=2f-SmA(~1=l#z z){u;YE!cE97$m6%gpEyvLD&*Z*BOq5fg#1+D8Uj8jtAjYd%Td2X#u?nL5DR*mGsu< z91e`hSQ|~wj$uxGz~MbU`CdLMe>NuOv>4En4VE!LXr_1f^fsa z8Sw}YmU+&YbxthFPjh(rc)Kn7__sd&n-pq>heNv-uGr@)X4xzIu|Vi^FLu@RAh zOyWZ1&|S6Tuo)RbvI-eEN1-HvwJ6ahuo=lw)npVv8*o9kz!qvj1dABNuc(U{r6d_7 z%am}-i?!G*uA95fqzA!UOhOLb;UwMgA>s&uRS4YQOp;hk*d$Sy8Ky?dpvEB$0a9d* zP(J0qL7_naKonM`R8pMOSY=j@5@XboDKW;*m={-4#w?-I&VVH>Rfc@E7ge=a%B|dj zoy7t$7#FHxczp(MWDIP4#$K`wU;Ywt7*k#zlmBK^%-vwq)r~>rh{ERV5K25|#W=+h zOagR>Q+liucVrc{gj0mT2iDaSzK{Vv6%nrlmT7_=YD$Y{p;TbBW=H~*+9Al=9n^y~ zNdM3Tbx0ofqz6M)REPu&Ib!mC7=z38xTLUZn}#VIJv)URkZmgV>4jaY;^5O6;`>s~E+U zI838tO7xKxeOk(Q)@E9jRi~kqTFoB!5lgV(N~dVscg7X>L zU;0s-t(1<3uFwXMK^wF|2>nU7(NF+!WdCS+i~nc}DR2O&OvxlXQ4}e`=rAC=c%*Da zU>UH>7RZQNxyp^02nL>87HC0yG-*-fmV87(24slC$WJzrU5g$k;#?MRq>K#q#?0_# zV1}v4n1(Ys1=oD(Fx5sc@ugpGMqm~O&(v4O!55v{7kiNuzf z5NZ?R#m_w@BpsO5Ojn~eMS~gG+Dz(Drp1FDrBd+5a~XwC9>gZZ(M;B1W0ueq3==M>ydq897)vCguuK9YGGZ5S0wmgMBTj*_kpe!Inu9Yn3ZI}Xk-0As}t#tF0vvkCg5Hq;Gk8+ zx{iubEJR7bE4r2%z5ZFI@dcr&;{btcMNs3CEYPL}>^feWz!og0O$iD4ls?iLNX8ni zjn6yIn#8`(=Jy~V(kad9-lAniAVB~q!T(`)MiIJ9XMoMs0Fw}U1;?}vZotOlHtuOaF5{MlYK#VO z7{nnOM0-?@V{T5@bpdiz1+#TlbXcZ!Tu5hHoj~9VzF3Q10hVBeU9T7$YM!R8t>)ro zhyo-5@gav20EpUggowT!xnRrUjT3V&FNj=+_7sHR2?Rq*XS5ogjtB&j243>&(}!FZ zeJI;N?8%T&M2Bz-aE4ay6$(>%p6HQYcT$O*$O)>5&oYwUm(Zwykcmcc%8Y(h>#=X_ z!IW8bqjzLylE{eZ9Tf*Tki8agny|^IT}tvfi3BfS1xxVsRp?LcuVH=4gqjJdENF)o z3;12=g$|3a01FBa7XPn!Xs5U^Ux{czmOvStXbaSE8PISW)G(;XA985N{z*h@3KkVG zJKt#l#o{o*37YCYL5$vBZ=hO_-o}Xy9dulLi6| zk3fXQa2Fff2F++q4>HBg5$-g#vC0^P5P}9!S`*VeA>FQ*+qxIfRb>-Qk0j~k(BKY zxTepz!Xzqt6#pywgq`FN^}u2_R*y7OtM9BC|IitvsVe}9#Pzr<{gTQ-xGNPItNFz9 zH1bb1mLo&WGw6hmL7d|{qT|3GXgV^`z=F^_o={JDim8#$t10Ze@+w>TBen6PMAK_V zx>?7P&_$z=$Rgwr71Tx-R0xp(n4~Njv_Q)8@CrplwnPL(fL#}GK^I(*^o{fcATbFr z1h|1)&wl8FO2Jz}W3}lCK;!~8Z+r~n7UpK?p~|eOK}^Bshytv*E?>1vUQs5Hh?8Zq?zy0{j;x0y z_|@!&Htyc)?WX3ZWF%`QfNL7WKegS57F)5E7HuX}|Jo+ z1vrBDl@#>HhTa+r@0ARHsDwv&v6xBhkw6Y-I1STq8PsU6j6|Tmsku$WzieRc`OA<4 zjO<{p9e=55c!n|U$@A!$gt%v6OQE^8{4<=vj8odT*{>*?L@Dbc`} zT%S472v`-$g`tAAod;@TR7L<3@-9ySX)^>B0?w_;f~|HPS@ng1!O z*_1VFm!V=QURh&XL^9$mJ0qj`$Q3(}3aN2QsGz$9r8~XGW5D*sH6D+apsPOrtD_t! zKj%BZ_A|a45J5xq#HKq!D|AAmkeP%~sS!NJ0=%eAWy5`>mdA4}2V8W9nZBF6Zz zk*r5|yzNrKxNrampeV_c^hb_F7j!}wEP(_~LAEi;LP&u|n5UVT0Y-ou_t{V@42Z70 z^9uRL!4I{XISx&V0Z}aJO(4A+O|4SHp<3jT_VkTfe64G+Ms8&7RByFpw#6d_I@#Rd zS%6K~z>Qn5wkM1A-yX!A-v!*>dDNi&Mjpf>mz)zi#%s2wPK3b^qMrF%=Zs z6fi*zrp9Oxz74uuFiDfZRXN5;F3r6L$6Up}#NZEB6C*^6>yE;^h^9wu#ETQiY0J~~ zmcBeWUT3F1bbvPP;;ssZon+l|*fHp`Felyf$8{b=f(TS>mjP_AAh|qLg{;nULMOIF z$Ap~jPk3)o+!dkJi251|kr>K!3WSW{P)D7Jl@ZBqQ4~lSe;R*O<3;y*TlcD%KdS81 zksLfwcQ*{{FZ{C}cEaAG$ak7>9_QgF1#?xTz#TwL*)U~-lnDd{5-c!q!a{;l7$z)u zupmQ-4>w4WAZ5!IE}Y1a3OQ0_Ns=c`iUgUG3`mzKVX|CFa*LD#H~*zb*`!6&7D)+` zY}v$RC?}#VxsWPTip1PDkZDt<1ep?Kw@{eUg;SSK z6sU0FGJ#W>gsn)m*^;0Dhb?4EwP{5Lq0p}%)-okh%?FyU;@2APmt% z4>z++2`PkVt$-=Gn1m=+MpO8VnHtA>XNMm7bIm9GBz1wGb1-!F9|7GIN|{2+Qox#m1TIQoYznwOVyhG? zuIyqhqf*@huU1;sGA~kK6^Nt19urH~0^oIwF^@Q!tWV1H%z4Nm3((nTErwWv2oQ%Z zfC(j*AQiR_XRD3E*hGw4!w8qAf(a^?jyh|qIo#0bo6Z9dz5Ut?a6PgOG+S-^(ncG> z{E+aDySWRX+wQs%pxddu^X6+jzvB+vZ}9{#{BOOfDrG_8uFfvF{aWQ(5m_0!KblTaZ0o7yaZE5#HKUolQ5P@_iJ1s7z-jbEG5nj5MTFP0vn4 znw)r!m9nW&ZH3+3iF)sdxgTB$h+A?G*}8i3JaSs}>H20Pdp&TJrr9wg-LKW-Y_ zcL4Vux~b=I)ihk$0@oeE5e}N!EKqpdwl=Yqt!&{W=Q$Gq60y)uaag+=*SOZ4DinYS zTr--6k~1}_L1+OsVVp){?7?sZ5#}gGnulCjXo4%qa>efCQcbDO=g93uWk|s|;9BPwh;iD!oaM zda_gNtqG@wq9CB2BB?_eDW+OzQ=is!qD?`SQ;;ImRrhq&LlIOfTPUcaP~|EnZjb{G z=_0&pg;uq~39Y-r6}+~f#Ek&!oacn;Tm`5B0d54ZeVx`u^tzF!@Ku06G{|1{e zie>-u*UY^27s*D}UyZeFWidNh%|7IkPmp4p6dcLq?N1^*PFJ-dw*G;~i8VJJjPcv{vv6gBngCPMk#XLBHAwfDBS zy|qc(Il)=i`V6S9VJlmJ&*qc_+^0NxV-I}lRyJv#$8K`-P7)~mANqWUg|_R$*DRzt z_c9_mRvS(eE|($B9p^g1X|ZvJvxG%FC3I1UgpJv>fD9FY6R#t~C_?f&A2U=(j8w^G zaM!-vF-a4*iGco=yd=}X#Cylv(oD*<6Y3pF5(|`UfgLMFG%op5LP(SV8{v z(SQ$m%0wPQ5h!AiApagoHV&u}RmtwDfghs5ZVQmxW{uwCF#NMB6 zZEFc60oUb8!mevAp6-#kd%&&?P!#LwqZkE^%XW6Np-rY|BPH4(qxQ9#O>M-~OA3Gf zB2==?>@AdsQ5&K58aYz0C;g<2aTK6XD5HQ))NyuHAsxf~oJa+yFSAzp?qRBSN{SXd=HvJhn$(2=!ENlyoDV(6fYrh=v64nq|N9rNla}Ll=bH%D2b_HB1NN^$Y4^< zTNHN`Wa;PC#3nZZ7gtr;w`}dystpje@jn_~pDD8_AnA0eSq0Ue8U>_2#neulvT9Xt z@A;#KYO9wrUqQcmDFYt1HO*hHzsTrW%Bt&J?5gZpnd^~Oaj(q3rz)kGPO37aXZ&UB z{`k?)YNw!o{p>SLzu@oKF>QAKn63Y0@1I%wL!bYD$%zsSV-tF>Pr?ZL#;s7`FI5=r z{cMYOg8zaPNo;(`+h#-UtgWV(W5>S77XfMd9z3n-ysvLprL!XrGQ zl33&gQ*EXeBW3(0yGkT@!fU*8P`t=1axzj$SFU%=fNthKH3C8&~QAMiEs`_o3u%qq{&H0 zVug%i3Umx(N^oh6#yCvOy{?7|^y|e6fB=Yq5E-YKSZs2LL&thX2}s2?25}IFfC`ub z$V4JXjBH1OEH7ALM-~Kk%8P({#(_lf8r|p1 za^l7!Ve}4bA}9^hC;}lS0*baR)r>+e;wZS-aodas)zC2ppk zaUXrHAN#S_YR%VZ&FRF0d&Z2{jD)0!q9KRkAssRzA#x%mvLY$+A{|oND3TKx<=6a; zBa7mWXUYl&B!TNF>MbQ~CnWA@3JAlI9ElAckPKSEW88u* zc#I1O&XC%|MOZ{04Gt_I?%*P>3&?IU2txu8;w!cwlwc~9NMkh0%YXRfG*GDWK-2z|5wAG%2L*P?L5>ffUAo4fHKX7HVXOYoV%w3m__^ zCTgONh4CV9A*G~XFmDS^>N+ioy!IqJS8DgRb31PWx_EC*!VWn>Gwf=L(k!K*Dh0}f zq({PRpt@=$rQk$dg{q9?Q8MNGD5LjAueHDrQhF+@B&9$%e_a+AJy4 zCDdB53r1`D{G~2Hg1Iav)snJ{LhZN4Fi&t#^qQ{xxQ~0jqx)*H>d?b7#_#>)@2u`m zM)i-RuKd{8@g ziU-5Xyu|A-w@>HTCurhJy;So-hM)<6DGKdNy;hS6q_As9b3@`uH>427Qq$;~ZZp5* zJkSQg#ECn?Ni)R>JsJ!$l}?#1teN!YFdy?f=3{SwKmtesDitFSdH)GHs)IUWF6fAE zX?RIDLaY!6kqD@O5v+!o=nFY| zM$sizQF^E+eoDtHVR6sY)lc?p43z-c!gCJWBF#DhFc#z{DB`D*ig!rScks?mB%vk! z#MQpC(U{SCKn{Sa@u{To&%6v>zieF{4XPC2t27OW#1V=x%@(ut9Lp#kW6&ky5sZeS z1wj@b)A1w5t!IGZ&#aMtNVR2sE!SqYW(QJckO zQx{Ps)oSv~2uD*w^eHeeM86z0QqK-Us$fe!(4hveIEk|i#3=EaQ+R+RrEteijzkki zVe^7Y(7bacZBKvG>{r)`wpTh}rLliP$Mz6bTe)ddA>LakT!NxQU^diKRG4m6Tt|iS(hLPS7ML`sgVMMB?1Ez zZBiJCXBgQ?%6^A|nS@-^=M`gdp6OW@^|4}^jwp?JpB0BOc+q@(=oeRVcXo$#47#1k zQc0Q-vFLMx8kW}-=&3lE(TI_r<=N335Mv8VW66;m4Wf^B%VSaYWK%YcRAQuQn1;cq zUI>!c4zfGc<7WY~rDwVyZOx|t(Pnwgr6a&+rM74-GN><7BQp}HCz7a()pIf=6Y4A_~6fdF*A2y#Jais!VyPUxBnBxNh8Vmu*hE;!A zz!0;X@FTZj`RX>)Gi{{+C;-1u)4ehoa;m@xw|7GP@I!P{Lv(XcpXO=`YD`9<6^?Uc zR>Bic#`GSFYoW7!D=L0@iWmuW_XI6FkHkCGyF1yNJ6kGu~x*N93@D` z>nn@Isf3U%-S0?g6kuq4ik}$AqnL_q)M}A9 zDBj0Tq^C`AQhFv!QN|<*6bL2zWnY3K;|}Iw=!Fi!1h-ZKOy~tm%V3XJ#4TKboywp9 z7GNzn1`y}948k?XG zRcU**k@r-QKni9Rx46U)ng4(hP>cyEVK%ZESedyxLQF0jot~^WIY!rZdr6nDhBmU) zC#|~;juR`Koh7c4Ur&)+7Y$t9nO(6xU1Ra0wK3aCRC~0i%+5@4YAVgj-CjEZHx;6y zd8c&ThoDK3eI!Az&TC*LjZYjX-x>DTqVe7tXo4)7(M(6Ne$jjitD`seum%EU@j7JX zQQ1CL#K{OABVMJwB95G=j8>M_TpFiwcBgapWX7(rH87u8jS+bsoW$gYSOFe&EAM2OShZ~ ztb`I$cqo)W0m_^xssFxA2hJ_1zD1}&Z~u4`5=qoPqO71YDhn6H6#yqe2Hq?fbLn2> z>^_xF30?6X@3SBiazb~apqu&7*OLRqLc5oWRqhNO5O;MCN4J+)H#>F-HuUnDHLS%s z6P-?7)$2;NaeLFX?$gJ~c-f{s=(|>~B)W};?Ic9jWgVYB#L?a9G+9$M+e-@f%e^8* z3A%t3YT>#~$P?FTM})r(#0a8%0HVw$ zG6Ol0*>aE!7ym9>7A{m+rr|<~WjK*4$Yn}KhYP1jC{Q2?NRSagCiythWJ;6;Sh^hf z5+uu!QMO1)I1u3`h6Hi?)cLa~(4j($<}@1gsM4eawIq=OwLlapV0RbYB07wCjRNzP=9Vj3I115lkgCIdT z;e!@JNTGoRz}3lI9V#~7c-v9I2m{F#U?O@Zu81NNDI&K711Jt*;sW0hz+DqKGEoV3 zDRPJ05DPfQNgJ)SvKL%QlCflxZD}Ei7MegwWt3uBNo4^ENCBl3S9%Fmm|}%VW|?N5 ziDsBd6qtZWCP|<~Vr6vL#hiAQQW0wt6fl8DQ59fi0g*^C=%AVaI+hfgY@tb*Q$-;` z6cHpr8*Nfe8bK6NmH8;AYB{PFoDxXU=bodMIt8k#rm94r8#KfTN3t3e>q528%4DuP z?f-PEt%=R*kU>id%aE)NZLy|ENt9Gln<2G1X`9j}J8iYpUK{PQ%NCHS6q{_ZD;MF8 z3$D24j(cvp=&pM%LF&Fc(6{Wa+tasGeJh0o@urnT5`*RonK0J1Q(O++2=wW z6u?29T?|%67i6T`tHH`^W}#^mNDC@e0hu%%3DcPnEvQ;Y6Fqg*l6<6q5;nd# z-E<5PF?QKv4>16ZF^WB%buzvPHjrV@Ed+Z9vY8Tt24Z+OfqGX6xR!S#*f)Rf-T$3L zefQ~Cz<(nx?l|L&E8b=+s9k;<2Sae@oO0MvQNZURejc`TFfx%H6+;-uz<1ugzIl+S zgU6f@m$|YR8Eq)Jdl|a(j_(#x!p7xT!`q}q@na>=eDR0LX4~>pku`nv)Ju>3_1aqx z(t0R8^%Umfx77-shG8bf6iQ6-s1}hhj~i@T5w}IB;D3ex{mSA$)l>a{>c3CbMt`5l zi27JF1>z-8eV<_&0#C=rIFMp&eYh(bgonlgCg zFmKY5e%urVH@#;jEu5iAl1H(H@nl!-0!qBZ)x#hvWrsXzh!2rM6rI=vS^rRB3RIG? zm3ookDMb0!NW68Cuh=Api2}`rCClaln5Dv*ptQ-|q_SPG>mK(R1swCNUYC?%<+eF`d5$yZAw1r?aO zG^XiGl})?$nF)|8RXf#bpWsw8UkUYBLp2Djf(0>m-D;`9YO1Z0N~@-lf~ZvWOR^>< zfrU;hTU@=WSDlrtXDO>dnUcVw*#uC+leSsP%|z#M5!u+bo$qK9IWi(IcS;0a7iEV$jBurk zxU+-=xo|=VYNma2xlsB_E<^i~4}1FaxB&OJm;N2FfD2r?I$`cEOjy7yhtLEdk?xhB zJC5we!@{FgknxX(9-0gC|hhvoZq>VI6u^8W%z zye+J+RqIQinGu-2F(Z(W$7=ILjKz~TBgCjaAa3Be0&pZnq`mlDztG6S@rWL~Im@})1EC@wg_6%#Ia zD#d11y?}kYZ91M?!UFE?qFRQnyzj*h0ciBzlmDOmoCP3&IlGxnDzvVhtqWafl@!mm zR0N<^DtbMO&aH&{)1k&plhdE>^kf|xqG;)OW-E$yP86V3Hl40mI*O>M4Qe)^I_afa z3iXweX;UpZ^8-)C(^B=+rh3{*QQ_PxTopuDMBQvtW0iNnCsnP0w`1W0pW1JQbz9BS z7PPb#l1WA0@s3x|;ztFp$Iex*yIRa*EW7#8bKYDlQ!Ks;wu!8QOZ7ag?7Y&_5=o?M zgE9Q;2EU>&(6`=PnjKcVhLu$Ion)$1;8#i##4yYxh67wkWMVq88Iu?WG%5pZRJm|7 z=J!lBTo{X<86uT297-gSNN&@f7PY5os{j1Ug_?7Xrv58-Eo}rKLjA!OHX@w73EPpm zh*xDo>>*t{Ry|FaJxut7(=#CtlCB}ouv0VIY1zKxMW-X2w7e1Vp9rW_Rd89yA!HL0fr9K?89)4?z)jCJ=Ol5Px=O ziAWk!L=jzROfYnT3i3T45ko6cL;qd`8w=wTKco|OWmiA55l5tnqv(m6rbc67610Xa zAptIl5*4L}YCZu*SfNo-6li2XJglfhwFYQRK}JGX7e=L5eYSVPA`nC-1*I?%WH1U& z;T2nFfr-%tW1$3_RSF8I5*)J$oWL^M$cu$!8r;?=i-at(VH=NBZs~Y#z+rA&vN=TX zIyC1^x3xYTmVy`7g7tQ9u47@I10>E-92;YB9!QV}mp6@LUl4ap3+ZqVm~jt@ArR>| zd}B8i2LuJ;AO*q&5+z|OS537vb1q_GZPPYmgCi@Fa^_J0HnJY{wgBb9T@5xK1uy{c z$S3e5PaoGP^#o%_HzoPhCI6@h6Q8JCP|4i zhbmqtlu)f_7-=YBS|(ka7}p#~PxNaq_TyDw-uvMRZcaRqv3mZ_f&;f zR1iaY4{6fWBReA|nl$TX(vUrcDn3XpzS%rD7w-ts(S86pe=mJ-Bb(!IEnVESm zc{MJNi7W}QC}-JNnBi9l0!1tHdv+xgnRqZzw0rTwiYrrCn(2u^2Xu$UFoFqH8by8u zFbRdB0bB4`>oEqS@E&f|1(dLL)utGRK`A2vF5K9cyVVfD)iWL7M&5Tqhhard@m$RX zUE?X9<;h&BmebhgCas+Lb3#-au_zU9sg%xV?$m8cyg`7O)M9ap3`2RR2&<) zfrv(s>>)$ClwbGtHZr;&4F36#_vp$_sH`kFJ zFvA($p%GdzX~4EvEk-5A^P)$HJkHZk)5T*^@exl*7TeRKJNBd16Qs+-X#0bOhjgTO z(PW)*7+=OeX85GLab;*YhWDdD4|G6sSY|qvKnT<-h%sk)wv2F=L3u_Q5J6{$cp8I| zXJVRXMU;3wfrxH;h;C{Sis%rjVQAT?DJ3BjFi}H`R%9lj6|tBTOVo*+rl?57sGC+4 zVL}Gur&x!f3IAh|ii<^LVgVLG5oYnSQLw3M8l?qDu?dgWi;CJ7xz>xc;%kYgY)hmp zmB`(kP#CwtDO-Vk)Z@ikf4Ba5!87TftEtt))}s$QDaa%w6Tur zNUi5q95&LN>yx2gV>==-qWK6ru5@qp#*Z}jZ_V*Zol~p_nsEHVfd@8_yR=IU*Ko;H zUlJ#Ad?Q~JIe`-S9?~K>7l#%WqfVYzOH_c3)6q@Sv0*H?PB`LC+;L4X*K>y9HA|pA zOrU_5Aqku@0EaONMklgIcO?f?8zoz^NheTWmsRVLb}tKcS|vj#5hqqTl@!GZdcr3w zgo<7HPybW#C0|mOY8RG~@)2EXQ=)>FbVqmj!garLcz#DL#u9jTv=?ecrb9Ivf+sON zF_=*6cfR6TQAL<=7MjY!ELx&1*`k=-LU~?ddb&q?#5H<#D|&akE~*v*nRsflp)dR* zG?l2E^&&2s(l1j`s*oiWA|V$2gL-%ydJ@xFN!2h~Hx`E?Fejw|lfZ0S5)tL27GfX@ zY@i9RvL2<-P;C`6f}{j7)Gv|sWWzcEbH)(acR4(>5K6#&3xRpZ)uYV?e^TRq={LMi zQ@rt~el~J)O``i}bQy%`7Ix`ur@TH+l0FV8MgQ&AH$1xV!u>`KD zgH#YOIAo(=c%+lqg^Hi2oWT zTO7kANCFbaHEAD_7+Yr-)|QP1%1~5b7>Bs5B#aqtgc)0rC^SKC=~k^tgGs`1W4Ogp z45TSaAO$tJg53dc*1@64Q5^w1ORA$y;z1tZO9i52a=6r>@f)wuJQBY&IQA+a2_i!b zQh^bvf$Qr+5txBv^+rJAVCQ_ z1tD8c_w>&`Nn}c}C5WO=d)t(grBO=9&?}qJ58cpivK~+gQC)y1Hfyt`&<3S|QGJ3a zNwX;^3npU{l%T>=qcSR8>XtwicP*_dC~Q-P7q)%3R8ng!72|hDg_m{u- zOqG|pLc2S?RI8XQA3;`$c@ka)nw_T+`H)F^8r2~dU8uD5wzJ-L;uD~y6eQ!>_*j9UdV z0c3E=?LZK-8@rRR1r8V)vC_J+Dix9NXcv zY<6{K=yX+ypC$V6u;TA}? z7m>^-Zju{Z65q`;;85B>UQtsV@IYu5hg|BG2V@wqVHQz5#du1md5Aejai^|v#8#Y# zWwaNjEaQ3V5MnwPiL9oGIK+Au7m7QmeF~_eT&P8%5rE;Sn`SO%Ohk*i*>pTQiN zMyjFuKOkWhhN~7agcCMFS6c3jH!&7Zk&23^6|kW}h%Kj$`V-xE6@A!^1VM~MIE2NT z1f1bU&H!vclfQ%{eXeYIJ_)5T30?Ea>a(tu2vMz-5g&8P;*-i-AOZgx@xmK5t(8tm zlOz>OgWAL+1-64qELa^jh_227kmp3|>m&OWOUf4arQ| z+#tn7am@6P6j&h_r>}VfA^G7jrC=Tjt8z2KP2iCn1xs@0fw1^X3DG+R{8CWwKCA2c2*tCmpxZK$x>!_ftw2v?J~B z0Tl_ffzl1+Qvk!3tK!j5JGM4`cwkMKT-y^h{qS@N@uR@-c=r%rOF|eS@eYqv!=h?n zm9~*0R<4*sen)tgh4Oe?)$GEVDWBDx30FR{HZKV;SV1Yn(=Y!KaMzoVC|0p|`vjX~ zVb*f3Y8*8sYZ5STO}RaBwVS6{j=d9_wef*1C4hZn*z7Ev+X+NwY)1m&WT4ARKn0Eg z5|KR{{X!{gZ@98I2?$F8RFHjBpnZ0>hjFqRCcXiQq5=ASe#U#AnO=Tkw>0d>H0xLR zQ1kaKwVx;6au=uX;6K>`tqzZ7N(q+noEgYtNyeP3{LA3u<1PiX2IEt3z$&oKt-kdpd*3gqj zZ#`YPR3c2W4`IT6$#qm5O2oz%A*mz^5{cP2^7m?;Kc!|GEJ_qBGE#VEs)$q3Q4qR@<}G0j54ez zrHn!Wm#DNd0=v5G@+_I`3d>6|$t=^%G099biIx;d!cEu6D5VUA=B!gh5nGy|fIZpD z(k>~_v`Ye)ZZmWOB_@zU(J5|Q^w2}4kYNAOf;i!VqlPZkl%t9))oW9pP}(G@PD}k% zAWuO>iPMrGvh-C~Awp@^ojffAR$E_9C?Ps`U6sx)lwhf)wIYzLfJx~ZbyQ9rS~VeM zHzjr1X{+62i%HVjf>UOL%CuW>Qwjh#RZnQR9SX$+G5OTaq`yEn_6p0f@_oD zGNlC2+JsPTg}O9Uo-pMkt)K$F>)LCZWC$h0NFh#>BP*u3Nlj8BG>RzL>=?_Ux+-9k z&RS_@Czsgl#LX#Q&5X53I_8*TB_tVl2@00rfQy~E=t7_Zcos-BB_!BlgDsNQAPPb? zP%N{xSSuitEbNt<>ejH%0_y@IacTeRs=E$b>rAAGBHb3#F5t&>zx%Pg7;UVP#TBWb zWGVuPU_fuZ%UgTAC0bgb04xg(pu`Qq{I9_Zllai_3L!Mm@dH2nkIe)7BT)0qW7@p) z&s|bt3ht)3l?xNApn|;hx^sPq7R#$5J*on4eTekXt51j}hM=M)?t*6`i7Ae2@+D11 z(PWI}Uy@|FJWkQ0m0?vGt-eDR<5-h9QxSATr}Bw*7kPD&x; z){8pQs3Xy4;($%Yj#Er~vx!9tqYIjF7B#xjNnr|$QXm6EgQy3-WC{_XAVLOm!HH1t zf*RaPNl>$sfs6zq7wl9-e#ZYBQIWzS0d6eB|nIGk%O5inyg%Wwwsu9`f?j&KQ})XsuAxSXV9 zpZU@cC-Ffgh~_m(kQr-;HwjWq0z5&>4Gu3dg-JHR8mKksca5wOj#Z8 zB`SCYP(trqSEBgjPI&AoQFvs;p4Vw7nC6jW0X`Q5CBz3k#_U{6Lg%?=0_d5}^v~uD zbj<=~GbSIpCIT3TAte8B6P)6_COIv{pa>zLEu`Rr5ZHF2r*xtVow${Xd<46-!6-Yq z6OW31#{e1K%|!&@4kM;AxO5SK5p7!=JYAxNO^87hV;BWRQzE@8WmHNUZBlEzLM0~I zB>`sg)0^00CX}XBr6|Q*zbGRCC0GVebD}ApIDx1M7-~`>{S!+h#iuFgrcaV$U`~w+ zDMclQ^nbDo{C#3^5rN z5I4a`gyCcg*}@dVo+>VSSxc|f;w!@P%2!gsidvlL!nx>XE-L&ru-5t(V!-t-zXldD zj(gscD47I&IadE%gT-pW5;CnV2!~+-3s^#c2q=tMY&Dx0S!>x8Gml!1mN6ljXQ1U3 z!kP3^Dje2jIo6d)k$@nhY7`ar#DN0rOoKbyK+)QAL6}H@X?!GxarMwr3avt ziO_|@SV6%aTD-VLD&QfXuIG{K7G8RmFFWXvCZI=v$EM|`U(R=Bo@+_4&`h|3~i2Z1Y5RN!{ zAuO@pVdS-&NqEbMd|}G6#6{{;Z&rzd5w)m2ofJ!%C};H9jaH6w#4*}>C#E?m5Osa6 z*4Sh?Ulb#z#VA&U7#Y`jY$8I|a-6{w2iklT!~>179U{TCz_j5U>Ea z^G^RuTznq!l*mTElz4fR>7w&YWykVGP=99GpU43yKg}HZfjA6J2SFIZ7((QOxS1hz zp5^5rzi@%nDWWbYfuIW?zz`PDkvWxk3O!=cVPUr&8`aHk^nIIQ(etAgEdVM!;xPf3 zur20Ml%lL4MIg2G^(kRAN>}<5NRj2GG%2o2X=3}@-HxWWlL>PQP(r`9ylp$pR7AYu z1TBxcnqVg@H@A_=QH}a2r6%=JVP!m5OW4)2&T6q%wW{N(s#Z=_%2f|xbXFzbty86S zV6+ldratv7gEeFe{EL@kpE@vRefF=N&8uPoTYFK5Hm;hI7r1zTDRO1;M-!lg>IeTj zt;U*qSps}(zNDc1w18!#yx(lXZbFyTt2Jp!8*TSVyClYpsbboL=*Z%lG(ttFE022| z8w=2xlhmaEa(N$|2=}!QB|-s{5K#%ZP=bg^nn}=&ok6ZkL9PNkqC~kM4%j~F3MJRb zg6xWkDA<}TkU*}{NCM7gNBHWxUn3JD@kJwp)E@&Zm z`W^Z}G1n=N)~Orrpn@HfF&Qh7j9Y>#7=pn0orT-6DPV|E7=;3OLsnpkA&dW>v*o$~9?p#-tFA2^tkxyYPx^9LH&-pkYJ^nMfKw8iOr}$9ZIkz)+6<2_(kQf?^XFFnJ%Vc^S5n z0#YaiG#Zx4P#l=Bzc^91|C0zZ$i#w(2sP`O34*r;n#E)j4Cz7+enbDIehW#E9LeQi z3G+ZW`6z(%fVdplF&dc>7io!L5+3h>IPXwHWWlBGSh!{4oFzQD%qh8M0s#I<5Ngsv z1i_{ROE3sQr*d-2b5gLFvycdb%5BmFJmG?#+c}?W33cg&bYVK9TPD~Uf}Zmc!?Gt9 znXlaWk@|qK?%1zz)Vcz&DB0jBjM^x@42$;(sk9p@GGPn%!IG6KOvC&VyJ#uLc^_Jm zshWCBI(Z;N8I92}Dn0=!!$T@ZF)Gc2Jj!dlSWzpqf~wCfP0=hEX}LVn8wjbIm(NU< zs@f{lBu&=DD&1q4>a#1r@;y_-z1`d^;JiI+X%ylVw`%cC;1mD8ESiA73O=c8HNH~4 zGdii&Ys1A7nBT-sp2(x^^FHqs3@=fwE(sX(8!fZ(8n5v!2vN)eNQAjyC%H(OuDCWf zQ35yVnE7OrEdan0D1-j2i=5hkpsEN1WFdi=6c%!pmT(#f45XKli^#aZskxd0z`zRC z0`LN_2&I|}^sX!j4Yt82{py<=p)V6X(Vis1wG5IRu`eu9fD_55miUnjIj{n=(Q*O; z4Z)Dmv78>19F-Ho8eO>sc`%^VFxNOz0C~cTIF}&^G1sx3!lD8g)WVC)5f`D-q!Ysz z6OS;AF_nam*>N~YAO%s7LsDRcI~=k;Y}4t1HYFP$gq;7fr;&*$qf;yc#PbOt<+#VT z+Oo5l42e*PNu-lD;EXvLv(Uhd*#e@s7>!3=vo*u1TH~`XMmKd}xNC4cxwT=A40*C;|cnOkB z*pj3U=7^43qDd87xF!H5ne@`AsE>=aI2^gsU2^|P`}Ccs5S|-c!pu=pX!=3^Fj)X$ zoFLVvs0^oVno8GzS*e7Jnxk2nz?1o*f^_M*AYmISD3=^LOA*bdw1J%zLE81=!WMPQ zqC*cBHB0!I4Xulqyo3@Y0XvWi3$hC-FWEP=`w|d|yRa3MwDS`wKoW}41ToNrE}6T< zY?CCA6TKUeydwol%_%+6%*@o=L=ldTusqPDD#EQQg6S66G?l?6t6c#-&~z$BYfa6I zO~#8&vl2a4F+J52E$joWW!b%O@y%~RzT@Lf&ppoTJkEDYm*?!g-#ZwbAQvV;n-6VV1(bn z5~3@Qw@84^k*&xfVgHyMmitixL*WueSt3l*Buv>DM$#pm6E72pT#Aaql8TkA(%8}1 z7g-%GRSz4%xcHbI*$Eyb*0GidHBE>^HqasRV~OR_A+>N*^SK`9U@PtkM9lgcCo`Y& zK}0^CzpP{1OlVtCs8jxMMEH@PL+$?z`th=GbCl5l#h`-JmUs(939UIk##po}R1DRN zK#Ezss;aV}RP;qOdd5{;MOhWAIjRUM5Qr06p{n|sTT!7)d*l{+MZ%b(eND$~T}M(r zC~~V(hUKEbBY4aTZ8-|!7|FZvizUJ} zGH@fz+P1a&k74NyR=bv_{0~)jRwY;v^L-0IeT{t`B_QI7w-_BHqM$!)D`y)HEnpsz z3`sZ5N04NRT*A1P1SW_D*|(gJ;EA2G%t9}PF)HAlE`*A}0i79EITwCmg(g{)Q_5^w z5N{&Vmlda}q}io>Xmf(uo4fxLg_r_!DG%0d5B%zJ6e$2qFDa=oIZTu)040gXielS|5{0)_us0En z`YZsN;=3}Sr#b0_yye?NiHV)jyRE8R#id-#tG?2tJjna1QDG;~eCx{{m9&l(RPi%R zaqHK^l>ihi*qfH(q6FRp-QXPT>?G{q99_h{-4ij+;}fjpgu1lMqP`y9>r4r_Xv24j z0DlQi!8XtD`)r0WlbYbuh0)*dbv0tV$im!l#8hTDPo^`k;i7UV<0xxDO!^rZg}EQ!thVkOix-4e{?E zl`xepLK>!Fg#bD?AO#%jf~k;^7F&;A3R#JR!7TN{@i;>iIm7HY!}6F?^Po&BO+!gI zV>x7uQRob=(`i#?nKGQIfY{#IsK=v`O}v7W(oE5~GetqEYICN;Xh5 z_ZBb1WMAAxHxK`bU*3&YytPWMwSGipYRvOxBZ^xy`9t%PM?xo4hcMtW7o&xC^CI(@nrX( zCCCl}(gM*~kMoepl-xos&Dfd5k=$`f_psO*={RE&N+cx^b06>mKVg>@(rR|OnN7Kv zeP|GISwun*DQE-v5%!oMg)ZQy@!;Tqr;&>54uXo2mZktMw5PvWrtFyArwH052* zobFHnN_hW6yQ~Sb+7+jYZjW26GAOA+gx?*y_^T*p%@!w_7-{midor^2mk%j+zNF}=lQdS6M+ z#|zEPEv?{f7gg)4!Y*CpLr$~TE7+|*8f~E!9b$!q_=&Wjr39FSx)2%6sx2}Y zvmM-kWrhi==55}tUPLO0;TDJn1W+yzrA&p14S1B#rWlzRpT?jV{4UhOCrqcA_aEi^i1bQfdh*Dq*mmxz6bP+X5 z)0j=9q!bv%iWC`6rMQ&YR6vRrjs-eu`BxNQli{+ zscGSuojwvWq0;mTz$@6emLP@%Ad z$r9m9lu+rdnz!37!;3G$%^>>hxm2b+7v811Z`Z0nZ<#`S)0Vcs+kUp$GG)uHQntK* zuce{g@?_g^0ZT?ADOM8yv%=eDWK06z6gD+A1t)8j@laC&#iW1&WR($9Qx^&Z)rAVw z)*)bNO(8*ATP0TBdn0+3;uv1d_t8ll!3ZCVT7~3DlYANO%sKC!mEEiYK9e>WQbDZrVB0BwQ50025qZ znyHk-8CigIntIBlkwY+0>6J??fa(&KPA7#V1xTXBtC46i3Kx@dGKMHUje(RTWKcv3 zR#=f?lO(Rn>Z-CaC1I1Z2uAR%v=SttfD+O=TL5{RsK?N*yN<%^P(zW@YeQpf1W{87 zB#}UoF)6`CDP_!CFTG`Sg6{-Qg*Aa&RM`vgy}}AR?}7*Obuh3C+xl-|c`eA-!i@d) zTf`4@fw02C`j#=qeJ#kb#UBHkv07b~SMe4qSG=3czZJM(%QL@RGtK`k%WSj9IKRB| z%Un%oX{xCz=rO_;3pd@+OH9z!$T{QO#S}rWT6NP~9G$e)6zhDm%`$Ggve;pVjjgda z-2|TmN=V@J*ee5j@4P%tQY$O0tRm6fqrgpy-$bpN{*ti;2=ppM znPd@30g+^p#YSQ-Fi-)hGFd9COfoMe^T~_KB$rfR%H#q_j558bvEO(LrKqe3s) z%;iIFsfu3WqM5^l1~6jT&K9Wv8OU6PDpbkhUKm4|H^zkuaKXyo;=)BO;;{@{s7iQh z0~^EKC6I&RLUafc8`yX!k*#6QB8h?;)Q~}d_*0US#M2v!Mbdx5Nfi~|(@5onMu5U0 z&L|668~@?Yl8QuRTH*sk(!h{BuzU|rQlg$(cBF~Ty4L@Dz{7<$kO7#$ECVsy@}3O( zCz<4tV8u$IGMg}KN8xb=DJT__CU3#rK3Ah668F8;`BVH{&jQj>Kyn?!+K%6e85qGdJ> zrE4bR+K*kt+N-9P>#1Z7*11N3HVY|$a740J7wrFKFuCDXSOVMYy#!XU2H{IDjA0B# z1{;@|+0FY-9y{Sjd`;A|qR@WV?7y^Xvw0zaa=Ge73F7!tAFR z6Rl}`Ml-0nEN8NfEp2b+v#G6$38|u*(9Ec@*h)uL)4AGdXFC^!Q6Xrj+GN$Hvq>tb zg*nGHEo)PDPSj!dCC9?av5aLpS*k55QfL|l8V49sw85@bnZhJKB8E|{fr3c!+qR?{ zT8K33J#34Q;zmLi5^O;UO2AVT5^=dGRE}~Qf{0hd^`#L*U@MTvNH;KIQ%*hN3Z}{xRF3Ifwuqc3J-TSF{%=Z$ExAz^ruTI03$2~z2q6` zRMt~UOh{D#0#s@wK|oZT`U@2&qf~zFniG^is-`h@R8CorQ~b8`&SrUjMpi9vTih!ssQlv@}Sv{5^E!)li=`g^t}~)U}Eu@K;&56>}EU3K!y!ixpB79 zixfl@mu59iKI@#cItP9t8-;j21E0A*=_!St*t{bs8q!C06wr`JVJl&}=n}qcDJo%! zOaE(Es3cBL5RB1os_06&u>la!?M=9es!Ll#UPZOA4O-Y$ z70p#6VymmzT33<63K65oP_zFmJS)dEd#(cT$|$06VWKn?ufLWey?~t;+rGjD4q#+n z`Lb8Oc8{;$&#SO%`7OfEOESVb@?)KaSYtPP*~vcEi^xCj$DZ%-lmU)qj(pnJSk|@g zdoBF6-5K~>%L%OsjR_Pu71b1!{n&OPxw#dZ+qi#zrWrD0@uwcuQbhqXI*fFYAIpRX z*qqMk*v?iZ3wMc4dC1d=TVF0P|h_4R17AVh-?6lnAbp1%Dz0s7QD*p9N>q+&Jcze1k%oi%?|CX zOaTxfM~oQIahFZ>j*$OMz^WJt5!{&agv#?wPvAX|P9@Y7blylPkCBzinv{?CsG<6V zPa3jeO1)j0q)!~u;T(pXN8RE1jD!#r-IIJ-LM5CZJ_)_yk0iMn^?XU1dC4M9$yUS) ztti?A1;{8E#e6VCpPd?A0NN;=P@|pDgLGnsgrXL3Tu$^H8H@oNq#{Mo&_ei)74ZrV z@x)JfnuQcmNi@qZm0BD8S%U=HMu5c@0H72_(Vw+Jsa1twP!X*uqcU#Mc?AYrOvW^N z1~oE>X6+gt4VzTxg;>-DW(1pFIL0;}Ms0M(Yup9CDVrd1$84nII-=uh^hP7SBO`T( zC=sG05#n$_8`u8;#&yt}bHxjJSeRPS8xu^yz3rMA9h+ic5j-l#TFA&OO=PdJ1wA3! zdZZ0LaiqSP$X3YFk%VNzb%97C36BiYdsv9N#2JIpQjb7|v&3LiY#dlgnKbc;SZqMN zOhJXs(@Ct@i{w*3q;N)SVcLUBaPB>807Vl!b_o zUD6bm)Ll&7-AK?>m;}vCCCSk-g7loql0=Da(c4IfN{|&vvLKZf7)7}J5J)5yWl2!6 zI7@d)OIH7Rp0a3OX=V$%JjJs_M5OIUP9VkO8HII!k z1l;Fr4VHUuUv%Bq78D4Hy^V#5jV64KvqWJneb;r(6G4`TUXVi5P|yEmAOQsj1}2=s z5m#-@7=~&Di3tRr3=XWYB<@s>fl*E(FiR3dfQ}v*fkndLu*(gKQ#x_MekGxbtr+jD z80-J^2#A?jl{R1lHpGZx*Vx?1jo{Aj2uT+3PK!-|5-^f(XoFpf?Q zjSvVxjdjZ1l}b!8fL6MXUeY05z7NM~*<4;(ml5hl!R7mG*`g|eOyTJtUQ`uu!qa&r zLQs!o3SRyk3643(NF-tbdDlW`Q%wn+0;;?oatuBSGl7s|UL|F(6v-+ZKbb(En(=b{Ez_$iw}U zM!HhSdL(E_g<=o{^&Cmc#vhfitV!NRFYShF+{LT7-Q-jpf_-U*;0_Y#Y*ot7$jJm3 z$WBnY#ERhvd&G!1$&=FN6U&Ly%B@HrwZ(j-$WMN3zzxZ@Sjm|-iIHr|{t!n(P06KP zNB|&a0Wd`ZoQWTPC0o9U*S#g6%B@SSRG-)_pQw-8sh!&)%9NcQNyy!zupRjb?nn$l z-PIkI=qah}Ui@{zq*6g&K_-_}%5(T#!X^|E{8XzX6^_OV>}+OI9aUp-Oy&P!3$vuA zO(cNXAczt$#j`M8q^*d0?8*>|0jKSzuB4u>(5gtWixI_(df5vp{2v9l1;5~)yv$yD z9piA$9#%vr@iCTWeP>~4#(6?xVO8J5ARqNEUtVD6WE9|fx)y46-}%l=Ysn}0u`hu# z7jNZ;Z+#zbDNSx1OmOvISHRY!HkYcTO4IDtl`sK=;-_)7@Aw|zma^`wIw6Q=7<@Dh z>ENEn;e`fr0g57G1sn+ms%XMhKyXx)wxkY;HN*|Vgb`^ROxP&1D8b-RP9#*0+p!A^ z#)Oku%Tut+%5;R7YC$IS@DKa2(TXXG)D001;Q>DIZ%_hiB_ZvM#FPJisqX+!k1W7# zFpu&yj{pOi^iU5av|gMD0hVYXVO~^9=`GuF&t9Tk8?xaXy7Bp>p`p%g+{$I5Vib{( zK?obJAaa5k1k+xX0x7rxRa`0}ipi09$(mW6rglM*JYrGGh$KXEQPxT(YE~H_MG);O zN?b@NrqH6zgo3$HN35ev{KP3Q#O)phDr<6o;bP+qOIct9F;N6T6iGSRM2BGOsqrFU zQAJtw;xe*pXkeo>=8+wVYq{=_6_MkuZINT>k-JXbGK!-!R>od%1!ce^J8pA4?yJE5 zQFU;eBYpE=U3C0TZq#~Z`1K&UJ6=B zO{R&3@T`SIK}Zdb6!4)E>4&0~#We)ZL>R30@6v8MFdc2wtaHNtFC2lMKMWQWPZ=&rx}6ul~-YlB$&ijL4*c$=86zS59V&}7Jw=bVQ&BSN^d?HTqQwq=GDM(PSa!z z2aMOr%8P0XuW*`M_zu>>Fb8L0)?*U6H;ro>mxNY~dmA7Do)&nO zTtQdf=gv-ki|B$_S9yTP6f6K0Z~z&Q02!?827fRHCU_NSa1}H`1DwiJWa+k~QyY{) z36#Ntwbw}SC`nw?l(EZ?I$4lj$k3pz>ncG67_Anpc#FS|igl@%)=1d&_k@oP{FN4= zwGNDLgg^jKKt08Q5X}+jwgCQQUJ7Rwg2q`G9wQz*I$osgp8$OE3rg7qv*0f9h7 zKuSwpQj6hnEP$L1HBAfkRMt~@KrPFylQ>a=tVvBLIS@z$oJ^3A6bz8pLcBn1MNl;f z()}U5UC$D{^b};%mv7~l;prIOaa@i$SM&Up<@{Uj?bz+5*ty}KhSZ^GPaPIL(u+?N z+zZ_uZqy@gCE(Q-aFYLu38zF!y=n2^O+n|rN^}5Km?U249=5EQi_Vp%a&p3H#uetB zCS|kk=8=nTj~=I?o`->$5x)-W5t+3Bukxywb#LJ7^aSozm}{F+ZP&H%O;z<`7WYzC zbUIA&MX!BXzU4p6vqg9Kb$l09}{mWw^a5`AlQeZj_k-zPcq}X*T;AXI2VvW8FT;vu_%kG=z?pocT;BD zh)rx`crtng%_dla$=&1_DGKr}kXDNlFjw)I&`0?2M?C2dyFU>B@QUlbJoSF|i%oku z;p#L+>i~olDUt+cDNsO40Y+4q6kswXVHSx3nJigQV8N1x8JB2eLS@N8h7}78xmW;5 z0VD|u3>d<|q>zI%k*H)jvp|BHIcMrT=o4qooj8H2{J9e8&!9(_7F{|s+43yfCIr3`d3Wi~_KGG)pH%c4dV;PPFG zlqp=Mlp)oIRGI0U*PEwKoy?Z+WWGbMAAi1lF8HBuB9q>~+V-=Lz5=b|qBi+zj1RvJJtQMQ4r>c>!w^jr5kU|+)DXlJS-dbn7gv-~z$xO= zC@%fTpo9x5z8Y^53|0RekqjU0y3s8hso;c*%|1f%M(iw9F+(a-+~T?`ha}IjEliX# zKr9^-D6}#mLrx1V##jtXHoIiALHeST^FTM1pu)Z~sGy**J`JnFPd|xhqE7}2(@2Tt zSldDZ=t{8eASsj!YEsF9O3l(r3rO_F0)z-jGA*(wb5zJm6_wOfO)b+hHMg*Aj4fiF zRSU-u+M-s-SX=c>GebkjMu(~Zl?pUXQ{vSr3YfyKy%K$r3a>PB$gZ`52mq(Hsx1J3 zo2^;G#^sD(t)^ID2$v@4BwDWq zSc{1P;$kABXqo>YYywI^x=1ZWC-KWKgs7n8;f*sYfS|ub_G=)L1(Kuy|I*V+tIaq; zjG%;)NFa%U1iCqj2yV9d}Hewk^nbc z9j{e!<%j>zdq3{o-j5Rw#2nx3=tv;L3@R$9g8d4pXuq&3Dkzi*;F)NkfCdOtAiTyB zD&tXNO2PmK7==k0kR=8T%1Us8wU4nbFKUSZWTrMM){LrxfI-zkEVw~bX+lidOP=Er zGqp6C5HPGsA!IU<1=D1rY68hf$KJ;vFAI;4IcF%&}#wUM>VL;y=5 z07hi86PDZrCqs!MrJ!h(t6Y&PRU{WwxR|akqU4KK5n~w1=*5EoU?ygHPbZXB5+6ki zCM8)N6ONQ5w}fR1U6_diYKD`95adpT8HrcI^T)_6CNY!oQYlEm$Wr8q3tb>ZSE{B# z)71ZrGOejhC0C;uOS(o1Y#4)W;`6G6^kz3p6GIk+1DvJl1~{V-4W=)f|1{wlQWyC%<8=7n)c}efv5?cvjvVw z;T+O9PbAKAl5<7rG-o=iM5K07$!)KLr#OAYx*x&womJWdDXJ97hb@6m6{&)M800eQ zbfKOPTOCL!P@a6Mb4zEt4wlgAPBMTHFm>h@ z;gzp?RaI4SG*+;Z)mB+EhEYM!F`mriRC^T|khrB!R1g9c+Gr`&SQ0P*qa#}1(vZ0} zO9AE5Vgcl3MlAl7D(u1{0)~U8O-fHBdla8U!98l@#6h^w zi83TAEC+d*Lk@x?1{7deFqy(;bCQGz%p?LLlfs=O_7RS$juM-i!pMH+9j>Wul6S-A z&WKywn8Oi3CtZK8Q&5Cw3cR^6#FZ4(JG>Jyct93`Z!4O{yUbtpgu2|!nA zn@E~tIKTz6S*Az*T3cq_W6;f{$Dp3|EO6b!w*JcZxAMJj7Ya(?@!EHp-`W2{LF3tA z2ImdJf{XBkC0t<&U)aKK!|;X$hqnrQ_`(Ra-|Yl*w+wTb6kSkV{aC!(4omo;lmJwD zt5Au+f%wBOo}J1XOyTU2=`V>1@^hQ_I3qi6Yb{OBlGQ_>1=meJOnMa+N>Bz8l%fr- z@Phi-r@r^8kAC_yl$h^VW-?C!S(2E5fH+VF^^j)+3=$B6urwhuXqRRNRKSXZXORM^ zWn8Aw!f=LjK@FzK(5xvmsz$ZEBYP=LfO!>hwgAHGA{sEJG010n=#h>v$eLKGrl zsqmO43aLi(?d&qzBD$Ig3?M>Oi2^SuKK6-I%T zJ|Gg6#*jC=AxxjE5P{c1Ahyd)(GCV4#8Lk zLZa-&@&?Dq@WeVSa8T?F)sPKgjLC!x!pvh0LSd34~D-AiL3i5}= zhNu%V?7l3F4%ZNL7HkYN?5AeXlTav99w%kIq!N#33;4y&v|>6qF}(0Y&IE^`5Tr>O z%FW1t3RBS)N@1qtr!bm859?=7$_x+3tO*oA2rA7l9Ag8vfCK;t7)!wMgi#p9hXnRR zyClFl4gz=}XbB_*j1sK?EC@TI#gjNFg*r%098Ldu9!+tu=lB$7F(_vSU1-qw=V2~_ z2^isHjs+wpNQa6l6VR+ATtY5thyWQuEgpsdi9i8@z^E*1UZ?`tsz{2m=pfrqAp;Ar z)J6Ta=!|M<<=jK%%p<(G;3cq4_vB*R0EM&;LL*0GDH7vGs6Z0h%0`yJE~bEybcyPq z$)Jo$<{s&-VB?eaZIgC|qcn&$Y*Hs-12Ix5I9SOzoJI>`3A*G%HB6&omg68s13J3E z=B9uGBw-Zxsp2*PmNJe!$R_*9W9DQo-l}Qyux#bfqvez=EsY61Tr!)&l9|rqn-GjH zg$|p9PV028p76vxiVh~ZuId2u-E@xU3iJQzFhl5eZtJ=NTK>{8?G7@REtW|Tm#T5YDlFE4ma0Mtou?-`P6AZ=M3b9hxkW)FVcBWtt2c}c!a552!PxcU12a&}( z%RDMGR6#5eM|RJ`hza-0T!daX+erLGA-Vra%MagDSfq z%d#vLSs}~JpcDwqFnq*)I-vgx9)(-GpfdGG%n-u0u;w5J6!9P;Coe5#k}%J_Ys4_Z zB0%LQB!RjJZP1=3G3-^*G-x=$(b4|3SFuDBdNTTEA`5N^hjwUGHmv|6VIZb)BBJ0T z07lkMOD^iC)m#G53LpTKfB^h)ii{1{7;CW_Yank_AZHX`@GoC#bh7qpA-@RO#^{Pz zhFZxWQZxhN$^hG#fD_E1EAV0n!miv1qa-TgE<)lWl<`flPYRmn?QzN>ZAXfq!Kz_uH@cQDlyd8H-rxzE1QCgA3~J>H-rcRdaUZZY#dj3#wpu5vmJ# zcWP@0r-r38=dKLajx$YB+NAAv?T*gSMxS8QKMLS^Hi_`AvC<50tKvgIw5&>j3A!Q_C69gD# z1lVCC!7(Z&3f8LIzz-%GLM@a7YSi{r`tzzzW%ve^__#_;43w)9bfft5LC+*qpf5EP zL;CEh`ifRq8e;!wF?I=R;#(46TpV(+q7jEhR3UYk*XU2z;%_NtCT8!YUiO6(wjfcG zU|b|%G669z_A6QhkR8L%ra0z>T_P`TqJTkWx3~Zby_89k3{hRqz#fT8nZ&a=Aqk1= zXHbw#MUailG-h5!O=A#hVkc$Z^e3>!meNKFA;fGnP`WB^3<{v)Dy`DAgFKS3;V9s6 zx1wLR5DMpOOM#UN>x;lRBa<7|v!s$TX!>_@wBib zA*d$;L{e@E$Yun1R~Z9l5+a|~f{50x&oZJZZz5`{OB^cU?N)LC92OZa*Gk{Dqx0yP)fpGbi!N`@{01sUWQmIe3*zw zG>6fTW_#MNep;wyw*FY6=Asgkr^6yzjgB6;Xc^*Y?E)_<1y>Ve6CR1cnuI#e4(J-` z<7Dodj@3LU$*O+x-~3Hiz!oRL7B^7I;Kbl4hl6Q|^FrJUgyH+thB z{+9pa%4RVLSMtizJ)lE!o2dAu?1EMsnRmC11T&gbyb;Z~P0v5B*p1UutGu}MMg zE^`S&_wK4zv;7jaY1i&N_hC4*cqQ{CQIoZ2_vDtWt4|Iwe{QtPtO-h+H7WDUGWoPu zw~;Q7&VnXG_z9kL?p0tTtZY+1*XdQJH$ol{d?T;%I>b21mkj+ zfsNPVg|7@NvY6s!VH9QU&t;2krmKhpr_&I%#9lK+oTvy^KnlanENP!%i zFd=XdR8{q~GU6g$>s4NhB_?>G?G@cM2!nbRVA~zi5F&b1NP`L(J9bMl&}<{(HFrWH zA*KLnU09A@qJH4DT?`AcYJ32DK!m@>b6jMPO~!3);pcC=C@bNM&BQCdL}_{|T7jfU zYTNEAj(YY`x`4iW)*?QoBle;^mEMvBol9UFc<>tmcR^_Oto*f>0XDTc+5YDW*k+7dN&%ZpogO<>O%r#S-u1Eu)7Vg z`+K|lLu%s@6G^PJ*YKpo72H?$k*PVWvwpiEJA()z?(9Ew>CVPPQJ7;nQi6d0w=x_9 zQ!aKSOv^$SyfLOG38H{$iZW^__^NQTdk3_^H@LyOzcxTvKdp-MHySd??~X`9LOm%i znxF|p{I2He{A$=lfja%>|6I6;{oL=bgcykXA0P?{97wRBzywGNBtfWj3l zX?7VZ#|tQDBD6Q{>(-rX)X6;i?=Dl0i(kp~dPePBsO;`}9;12e@N<_5UtoDrDqT2r znI4^b^Y|9MryX2eIQAB81>ANZTwBCdSygOFqD28(NKv6$gEi>?mWBp4=$v05mLZ~M zTj0h;Z9UaS!ii*5R-pzKYH=ZCn{2pA0i#f`1WRqOVpalWZV z7FuMI1)gNp=-3tw0vc$Cfd09m7LUoumW)@H$tZ=)M zlyuTZ(V-O4Lju8+>OfsKG!aCn#wshT2gM5OtOWrPk*>JP%4@E>23t@9N(@y77ssyl zsYoE1WRi3yF+l|vX0%BWOfnU)#1bblu|xq=l+uYQr3{t-UV6{9_FO3eCW{fW7`ayl z89`APMO|7%k?+3tPFNSd`q~Td!2JqbfE1dHlJLTHX5kiMEdp8~Dfg;MkV^_l!3n#o z!B*L03X37hC;}zyXJcn=Q9x!=PO$Q{$j0n$8J!_ZFO{UU@$PCh&-_zoHA_hudmG1F ziqS}4bo51}B+Zk0QxJW0ZKYH}0TU_-M8y`Nae*}xO(3^K7aEbG(bAllol(2mdbD0 z78hKcZ$io_Y!F6}6fTl3p}ta#QR3yCmnbM1WV8|g`|PsUK6{I}v+g?XC6YzDq!-4h zdg}~AuG1D(CXci7Z5*2<2Uv4kKo>VEF$L*@wlazqkxZDtV3KTcZ}^gE31$J2ND+x9 zQACl16w>M>Ew^ckRKNuK>WgON<$J0$6Ja&gzzQdc{Iu8RS<4f#E=8D3FQtiiQQ? z6-*L>gzqUtAPC@L0gw>HARgpZNIaqvhh@WoAmoWXj3PsNSi_2_#xJBeNk~dEk_A*E za<1W$4`Gr7Hmz_VM{!C|x=<9l#fu9}c}i;kLc|l;bmfj$*$N)_$VUsJMNVw#6T|?+ z3Abp4APFcV85P0>rFdov6CfR70Ew2wJj_pOsmx?5BY~(*D@3E|i;x`YmpQ5iBVAxw zZ~!En?649zwE@+58re!x>}NdEp+LNjQw8WuhnBB&Wfy!Y9xAxfIQ&tLG2wHOtDR{& z-4ReQHG;QiTC)mGaiuGJ(x3v}CP4{8P;SORp@WGDOX&Q{pw`);C_P0)qWno2fJ6qC z)e|?isbh)&1w2K`2u4~kkd3-2g3a$jC7= zswqzg;wZIDK?yT~&{{H40H$)vsRv`g3QKYv1rUUaP#oex79zwNX7wRaJmOcO=n%5< z(5zw&YpTAwM1kP2g*ludTxa#xf+V3z8Nn;OMluo=5@88OqFJ)6LgTkv<^0iq`8H}@^y;o=l_D97iEKhM7-k&H#hJ@XVQ$TK#_Lfhk#cR9UWm|W7@;H_MR6%cL@SH{H_BE9>;8T;m2^Gws9%OI_{sf0R`3rc&xc9Zi?i#U|qScF4EV7nc7!S{uVbL1sq;@s$Un+tL0 zNU_rkp{{iM(n14?cR4`8&UP@4-8@gUyBhNjcN45o>2_>m*NwrG>e-Lq;5*DB*H=es zI_eab$K+OU;$w9w$c?mgu#b{YAvdZ^0zM@_fm8}qfGcAMWu(8Co~3^QOtTnN92am6 zO;BV3R0I_$F~R&!MjunLp2t8s6-&xRB-~eBM7Xa5lJtG~69@{KAOsgWI)-wctE7b$ zSGQ6ckzO^(4ka>>BqoIatCMzO6A>vyByfcEi)MqL`$=5;6&C~S+9Ha^$rY$~HAGKI-s7NSvx+8HRov`e0# zfoC?kuz?ftBy+g`t0P=C5ThAQ=%0u((9+$)1u0OV3KgJ26)KVTYN9lm0}z4)0xl$d z=PW5?_}%w>SU&a6#%#IakV0;9CQE5+CRbwL=vEZ)F(!YoFK*m6drBPS9ui?VBmQV#Qq_SgWAS@X%rr7XVXcKsC{@Erwt@6(- zX6ItHk-5{a4i=1G|H@xy=P$5(X@WMKEA8r9G&IOmObV*vLv|qn)d3VyLpp!-7%5X) z!_^ohmRlJAB_#*bN#IccrI9mK0x#1gT|0v;QFB>MgHL=jg4~5R;^jP3uo`<)U%g~u z0=6`j&^Y90H;F@i8zFKk;RONGG}5PB;1W3{xDsEZCO|kf?3ElUQ30P~H0*T~6|gbA zRA3Y!5Gh!KMsqe-NP_GF7iyC>z`-$QLmPmBIoHO8aY168Lk48FK^a7JWT6Q+ra-(y z8S_#*IWs$T7&|nUJ8^hp|AJz`gFUT77JRq`6QFijgCB@k1x;XH3swO{&;+ByJkV8% zR#JKtQBgQ!Hf>;uXBYryq+H%IifOVfHRM?blR+GGCjcZ0a1ualhK9C*EK%Y>3v`Qf zHU^XbkRDYwK_9a~dv=Q#RBmAvfT#j1Xa!aRXjW5%0GptK6y_T7cq}s^D$eMPlt5vn;1cCl zMoJ(7Vq$c@hDF9kH*J(^ETbONLJ7OE9t#;5({@J*5RnvF71l-@n;-^;;ZEJ;7h929%IXadaHXaU3ugk0f_ev-EQMK}^4d9r1#3Q%N1ApdBjz zadwvFOw%!OFb9-uIdB2zAqXdQ2@)J02_Y0BA!`vP2s0=H)lLI>MM5GX^pY7Iha$5$ zGCw**#%Mf-LeQI-H(axeq834+le zQ*ctwWGPa091CDAwW1JT*LaPGCynQBElF?-!gRigQ$F=kziA+g0(xK9D5+Q>1+XWl zcY4~Q1ZolzHE~t5c~w5tRcIweNW_j$2*f>{6P){59 zd|WUACb2Air7bcen@M0;kzry16@Jf=erU5A<(D2tMxf<4Ogg~@q6JzEx}Ze=r9lfC zq4WoU7J`N_ISM5*EwQnT8$}n0mO}yVCi8#|h!!dnHP&-K zij{&k6J6DnEIor=;e}uD$X(%8Hu;4S$VG$mt#T}Y?el{2<6 zhPZ)se42);NIIyqLDj})!*h!*qB^WKPxOL^w4;ZafjfJ+J2Vy;P_|=%s9J>x7pk)b zW21JS>WHAaU}2LrSd$Yea4R6%mk%%_ePk9p6ERbDZK-o> zNeY3HA{ucuQ&|8>yIm4T3HgCb`7|3JM+HuSpp_7{%*2&pIdM$?i?x&>l?*2zoFE;~ zR2?zLOq^i0#UyhBH@6BRD67;;ce@GrA|b1XPMWZ-!`YE8_7n6HB859I^)wkMVs($I zbz8u72g_3ww0V!|CzV@v70^qRsdi}hHAo0@?gesY>oTK6PfD?>tuhc&Fin=j1(Toz zldzf#5FSYxozA!f063dev?qD8oL{#;ZBZjZ_ZHYTa&M6!mU~k-)gg^}d7cL-#Tj}O zbTCM#B^N>!Q6RfCp=cL{L-hJXwugHmdMckbzHK#EIE1do7meoGX-fN^9GD(nz!A=Z zLOKB&17TPq8;Ah~hD+0YnW27EtBB_^z(#h!Q=nY@vcM4k>My0o!1G5!6l#BH2pJSa z7q5lE8r(hwp}#^ABw{!L;qym_LBb?FTrS!e+p`7g(I)TXJJzQ(gE=$UrGkb-f;N0v zW2#`@l3^S3P;c|5{8d>6Myd+;Et7?$1m-RI!Cw*fzelqlPWUx=6JS-a2~z`w(h)ZA zl^;}t5ixj~WqGDrs1XEqHHmW*RXD_Px?TOnHsZH7uH$0EWrk@uT!6@ig61J|xPJ?D zZz7V1A_8MX%UV5lV<+-Ema1ccNXLaZ7`U?pTtJzLxF4Z<$(I>6qw0*DfT|cs24!SI znMe?+8ixC&5o@Fbin#?!04iX%BlJTBNst7lh6EP>lLSx@tS7cWFbc_M_{%KTB5|fb zWD!BWsA9sH%nUTS{2OS2MpD(9FIC1ZCFzmUEUw8nY3X}u+Stv*$IYD9uHHyQ^BRtO zr=43hM7Of8?5xh8=FYXUcLMQ_aWs$mI*&hLH$&h>>e3hdNJe@Q0hH8hj)ck*yG9Xv zE*xiUMFFvaVP{q0u@MPv6?sRcCrKd1DJtu+99!I{4_mH=`Q%4JQu* z2f$$>Y?k=UZU*jIBD0^+jgh$=6>#NP+?A+?<++9U#;XEs^5)ljmYPyGM z)frc#kgv(|8bGnHq)}u-yN`DvMyhh06;ju?l^?C4&~T(KnL#%c`_NNh;Z@dARS_2K z{%l+kZ6Dhe5|DcHzOt!Ttt%VR)yl5ynn-)MeR;7LOF@%Uz>;tx5F8u@kq{>z1sSG= z7-tb1QZicyGXaqFMo#Co#{{u$sVyp39>Rf4$B`d8!V+kUmZ7m>ifwUsnj3+ka6&k> z8&+}C5td=O6IqJYIR6_L_jY5uaZfFAJWsdSp;K@vbU)V{b(wV3OHx>3kp?2xHew@D zSM^XwxO2U@TCY!3*L6w%w|QUJ*K2{%mRt62VewNc*quw6g$=qj|Mm<(1Yx-aT74Ty z5CK~O6M3%?9cvKf#wp7vLRH~1nOz@-9}{-rL@*&EOci#nyBm+Gyn`Zi$IChMtf^yd zQ_idT9=UYU8QI3@X0=J&E}b-BeAZYH*u0J8dTH;Q-7+J7 z$>S98NH2tyzexaP7vf1BV`LYRS;(S@!z3kwF$Mem<+ZV_4g7uq6Myxc{TaOd{4H9! zTj&=v5Pd(&`6)98sDNk@37)n7obpFAbrud-BT)k`tMWc=A_W_eQSIU$fCr}l!HE>9 zGMq|rDtNFU8H5f06L#WKfC`feOqwj|Vz8k?CKD+vnOKF&LV*aWOl&}<6e)%WyHM%E zCE-SvoVYBZz@!RACIxiDBuJ{%OPxG-?rg%7%9MP)0iy< z?Jot@D?o}Vq+pDUDOv+C zF)1PdqPYyGzyO=VCWve@ zlZ&U)JZY&Z3Q$6dsicr|K2A6wjZQuHPxPE<$C1HOZwpe11t%-^PgsY+o;e_+GSg4+5f`UpGl6F}p80du9GTizWS-83& zZ(DPPqoT=fg)N9$;V2O4Tyx80awp+@Vt@*7Ik8vXXL0g3w@xbZ3Ey?aHMTZ|j~(UL z0?2sy;Y|RO0!)j?ltfQSwosU3k2{tPp)5znvN8@zp!0+UO)&-8~u^FFg>Pg=a1)>Tds)jb1ZMUNUfW0kKYVTwpnkcSWfc@L-gsny3LMNmm}GK@iMNyrg%5W^U{;4D64ln>76 z5==Pa$CzcDPcP}i%LZp1$0&7gY4o&PTtidVL`6| zd_4;jROT&q6_#8}dzWDOde;qdVrdzD32>ICvYklQT+wQ*Pb`aAfo+f!U7&g59-!3V5!DF65sh6wbt!7Nh3o=Zi_nTv_n<^;o*fi&GgKzPt)RiFy^Evy&~>x8nMeWvdJM^c5E; zYP;ZvagAfgl8q+lq=k!>A7-uU+klV%_L9;6+oZ(}?qpat+zrS^xz5CYfnG3Sscs6!pup~86j!l@Vo zDM1Ku0T(nB9)!3Q$tj-YNF>*Yo~00s27#HwP#-n|jLwjWko%+3XrD17pF%VgJS@cZ zai0bmsG!OxI=de)Nsh^poJmv;E@*@Q1|kDdIiOLXmG+5(EQo^0S&pWlgB5hFrK ze7xD)5Pmc(oVGG%{$SRLdxAv5%}!I3Eh3j*5sA0*{X9 z3Y8HeRMQEQNH|YR!zBTiT#Sl}U;-#AgJwBKCqfF0aEMF;A!4L8l2Auld<@Sxrn_** zx$p}^qDMu7keQ1k{fLbT$+LIkqkpW7ZM(P8_zcn@qz1viH&PARuqgHTHwY0IVWIMNm%aPeQiCUCLk${Vdtq0*1 z*U}Td+)FcKiIlO4THypwVktVQsl?Qn^Wl}nd@1uW97?R8u^Fl@$&^U}tIF(>JF81B zvCA%j3kuktO%MaDT9v5?MVyg@FNp$4a4OMDJ6nm9eUe1SnSki~K!njn;phT1tUiP( zh<+I@+$^}Vh%1I*2==0u&5{=iU_Q5)zIBN#ZOIqRioQ-@&a?U;ei^l;v8K5b;j#(h@=ve;iw%gI z3~LoWi1{i{8 zp-xcB&Fz^4605Lr?Paq?LbQo;ldT`N^{z= zt6Wnz<;plkr>WSWB(u|RSqW1rgC$G7IZ31%l}~ayvvae@KK!kf+Me3!C72<^hCIYQ zBt!*~pGu^Z`T;BdFTqq+l(Wrj#Q6cMw{VZ}W0gQ_71aEeq*@RVTAhmE(SiA;N;PCyBAydhJ=wpcr%qCmEy2&{|9C{q)nfoPK7u!toH zmuw5Rkl=|XUD#=uENddRw{x%_a9DaZ}&`iXbuq%+zf)Jie6+N(t!bvilCF_Ilo z4zE?qu`@fY)56n<5w7c;CghwPL4dYnzbs*wQm9L;@e=rq*YU%ZzKd5CGmH%g%$5lZ zQs5uROgui(8p8w86s#Oe?WUm8Ojym-$hDNp2Ka4*u6HMWH4{hQz zYzh_s#~{7UOD^WJnHm+aBu&!VDgX*Ciz?VXtuUHV8!u`>nt(YmJT$lS(ZI5y&a;t# z+$0DkK;VB-fFN+OtFxM_Du7I2!JNqg7u+xf+rdTg!TPNm8zf;PU9AGJt}JC7)8!St z%-gTZ(i4;6Hz`a?kl`(ruSt=UA*-B!LR-@5VJk!(Eu6wE1mZDOog&8CcLGZ=^vWg% z0w6;OnMkE77NXl(66#qy<;W?A1hYh(*VhssDX^WCLDW_vC-qTdLc~M!kyJ+XRMca| z{E@^tCf()O;Yx(nlySwzNY#vq0#7W>Er^2B6dwdSAT5B2z=4xD+b1HNg1eBxTIC@B zSVIV5>j{v^=4-uo`=kjx2DS19=Su86%cU%AjmHUZN8u zIG?^CBn(UqoGVIYCIjmECI|5*2XW~tV`*?Yx?1@PC0K&0L^|_OkvG*bt8HTcF-@ne z6Kbuyr%tU&EEKz>E@~B-u>?RVhiZd|Dy^`{5>DvMqr#e-YD`Jc-aX-JM3JqSnu1Ol z+y=QR$FwOvaihhQju_J?pn9Osyi7~nVmYI0qVh~k<)8ZF7|=zW&SMohiJbFk-`YSa zD$w4px#QG}Qk=m-3)~wSWZ;6Bi08XK+JnwYIL?~DY~&;b!vwN7|+ zWE15SLWpSF#%bMEPdC?L)wFDDN6{z=U>h$D8xN14#qc;j_? zvp0YRX8|c#a(<(6z9!`{jc6)OW1ks}9?C$9jO@~lde#YQJ2+}XwzH7}B)G%#7=Vum z4{$F4a2H8VIS!RPX!ZgRkz~B9xf;Vs&GkT#Q-R3-fH|G*S(j^!0e+yX;mnJwE`2v? zKbH$RIlAkqGO9p$NS;b9b=rsjo&=b28^_wItMMI!VtZ1Zt2?`^qmhrV5g{d50`@f01UvwE8L(LdczYd#ciAA zfNL@bD#(-E$d$ab>|sgV01=yzP}w{{Lt!v!6$=i(_AP+HyA@7pjO@VF`f(gyf$T}P za0Vu<#@Y#=NUCbhzU@SoF1YW>itXEdmMUQFec9b=30~m*tboa=wijOJ9hQZGUIxad z^1~Rw*h}=|U;~SLE+7H?#C-fD-{xi+=Y~H|>5uypy@^?0<+80R0Ob}970xrz%oSn! zh0y!8&nec{b4v66<5F0W7!)vLq9^mU=Sr9w%0x)qz0Z}Gg zo0TV$u1)HrHexAk>i!3a0s;pnKr-+k!h{G402$aY;lYOx6H1(DF+l+>Q^=5NMXCUV z3{kQ~(IACPCo`PNY}ueiOco7Mwj?B3I zFvc%ZymxhOnKD7(CNescOi^NXpajQKrT|TBnat(Hq{wh0MXC%Z&Y(SmF3qV_6)H@s zZ~{4FxKN?8M0J%ZU0|auLnU<=Cc>-#2%iF)Bj*CEg)`axy7Xt*uS<2}!kjo0 z`omg<@m$ zwS|EN5;!1%WRyWh8(fglnu8UV!37r!Dz+hk5_U*N0fcGs6N!5LG{%T}Wh91B@d-6z z7IhV{6HxnQBou+0BzPc)@YUAEZ@(=^9B~aW(ZrBRRzU=k#5K7DTUFufmYGRNAPG+rXtBW-+>Y22yVUa3)4Tn#JMWD1+AD=5?B?5U6gL_B zZ2<~6ChowInH8=CNhm<@!Ul``)mafk{O!XSEt~*a98gifCW8s~=0H)1oL3}odVJRe zEuksJ7#(YI(^gSL02ZZ`>DaMlErW>Mmpt=a#uN<9MhR^cFd=la_eDqL(M>bZGzGJ* z#9k-CJ^gglT!co7ZAM;QiP9YZwI}wMpc(D;(Ny@{^VXmN`7{-jtUY(nb#o@)7My5J z_uL(`tHr*V?j(u3IB#J%;)g4~MYAQ8VJ#UGKK@{aT4#7SfqF|A+JIANtN4g6-?iW9 zcIBl>0jBq*h3R6P&U)(m!Cu+nE!U27%M%1y!EaUYUL+F@G+`w0#64|%@K7_cKmie; z*}TjGWmRRQ$_aG!@@m`tC0jFxC9=qGMt}rHB4-gv1WoakxZwkK>^_6|$Ba z1ThzJ0d)l!g<#yfBb_v{KU8Fyju4bh zj^SyW*_2Qjy6~X?3yqTt0=b-q(mA0GO+iHNe9=4mQWq3u1V#2#${&BS6xkulC>lyk zjyBXW-2{n9N;;@Pv2)7hfD%ne@CsbYGK4EtiK3HK0u^{EIWLvMgf)@CL%(9j1XRS1 zTF3-Xc7!K8t#nT+H>ML}`@wk883)xt<6+Rtt_Eu9T5%`j%fGjU*2o6y20Mlp)PY@#T31RriCak2t% zz?^qXUFx>bFEo)>E0Yn*%?^hdj=g7lKO+T@j21O2_^@rH;6l)xrroD02YYba8b^X- zr0!AyG~Q(b7qI2r?X?GaSCiX%`4(U2a^i6Ek#FCqX-#tR7jW=m9{>Z)zTQsGL6iF- zh7vp>4Bbsa8KO*z1~VeNOqfKkJ6-H9%(@Mmj>8+4-R%TyUn!)f0#!&2ich>yBe8hJ z%Xu2wt`;zW`3q#ulRy+I$bbUq_-F-q+60!+;JtljGm_w{7wrf#gJAYe;L{6A0W4(^ zCzF2v1q?Elqe9r`H4nM}OWcS;v>z#$q$g$S$&4-q*?5`R%4Nbbl;~$==D``wArve5 zyqafVm36FO^)sLSjAuX-M1*-}E1we`LSDTvt50<_R0k4iN5jyDZ-8l^Rl ztBMFr`WKQM+Q( zFCheL=LU3(M?C5Xk28{En{+LhO;AcMeViv==4op|9+!c4c@(&bDVpufvNS%d?s0T! z9o5|OmMEqIkb?81*+7#NRqLda;C-DXQ~@^WnGSmx$;f*TM>#blLv3`k9%zcKm&82( zjw}Isxy|H$V2OFCp?u%B6!AJ zpDC)RiE@tf5+UkFAqVJt7Bq$_Oab0TM=?T^-tOgGiIO$Z@{9^asL4!WqPMZSZ77N% zcw>lhV6x+yigJ+r1t<$tG&{=$zMXvh=y@u_h@OWbvi1dEMk<0TT-v(TFiJo)KZjZ`kqwAJ#C; z3bOe(nc0m)^p(89r!cf_*%(H_x-FDUWRVbARP0!n!AzpH)RIE8?_xWHYS@0{MG@K;&Tvc$)C&na196*PhW zofiZRO7x`9%!o|>D8Y`E;g9*)l}rE^>;{qf%){VT{$R?6p;TU&U0(SAPYa3|{A|Ht zU>T3i6qKAwRlEso+0Gu$kKovd*`eK~sE zz>zt2OkPAC6v2td4BZw`!C@2yw#mrHWW`qy-hqV9qaaeaHIhHdQZbbQD|J$MC`T3C z20%VXY9tSOjRue~6hY$KYLwS$#8SBx6LkbfB$*N_6~HAm5;F<^lQB6QW>ik*IFm6g z({|9G&jH9#`NxR>ozQI)OL>z(wN!ji0&AFog{aelm=nhZWrPi7iQLmth}k{~gv~9b zUf2j-s1wiu)GHYskR(*nB@_`z;X(;V1qdU^zy$_529H@C1z<_mDS>IUhi9+>DX_w3 zG}c;pk5g!Y*~!UK*b__TrAy`I+f@pgAl?A|$J@P>q6CPl)#WlKrm6+V;VG4%{+?E z%$Izb*LGc?lqXtrq}=jefpm6XnGS0*-(A zk$|lrm3?RcAt4t~0)f$>d?Z-cZ9qHu)DT*ji=vK(#i)nL=@4DyPLY`^g&hUaO>qkS03w$LnLxz<-;BgxA418U0Suzu8EO(*pzYb6 zHJP9ZDxnpsTFHthx{9G;6|!jNqhcoGAw+9X$fbeEK!jeLjKQ+34xP{mKV?7??8gSM zOpRp32(am@gpXKc&_P&*^eEX!;o7e?U$0T)t*S+>;woBzWmpJ^N~Rmc0S%>06SIvc zDJh8g23_zJcGVA1WE-{Cg;Kx_K{&=AwG2OI21+tZMFO0843j_(heUGaIg#ro z2orNuzuj;Ium2pz>L2y<2J7N8S`jFURS9K>S(U&Mwiir5^TAWBo}MafQ)&Dn^JKN+VLfyv>l%)L1Yk6h>RR|F^HeQ9fGKuU9Rnws;y!Y;xn2`rzllp z9$usbO0GnjqfTb6Kwjp(%A~bQLNFOAo}!{11Su8^D#Bu{9E5CI%Uu1%n?L{*h(rW9 z%0@^5op1~6?FC|;3+fSPx-e@2Sgy?2RZL_-`siLyC?22A7{>Ho#c(6?S=JXJU+of1 z86`~Yf)T?oAGK@&eZ-gEz{UhjL2pU_z!c1rj*J5KVc2a+f$E&jq?AeUPH)Sw&iHA9 zS71c`%!HTq4;eVGW!zW(HC!8hNf+p3(^NqxOd;A(0N8*afuhaNaKd>}K_$4?LSawV z=nZ?}?*cZ>f3nTofLAijAH_u|N9aTW@Ym=l+og;kj)G_fCl?ELXa{Zq2V98Wn5_$D zFbigw>=5CMZl4LK;|_)>wS}l|K%tMGm=yXBkk+t)Hq8VG!J9lEz_993kQCy&l|aN{ z0%%6xkbxu&LW&Q0ZVivKK5LWGNWlE;x{jo&=0N+Mc5!d1m z#fQoau|ZUBx-1G^0+tv=fp01$fVjj@V6tDmN#(xDs4j)Hhy+y}kz>H|SXATwsD<;T z^6vUBcCxY{)r)eGq#nuL|{b$1VAY#oE~omW9YgbaekpdRBq}D5nd66>#h}_de*Q-XJvQR@P&$KQFd`z zb~K6$a$z9dxJ>~Z2l74;7qk}o9gZ(M?`);#^bUq3M2%Mb;K^i~SVTYr8L3vVrwfM2 zefsm-5aC6URt ziJC$d1Hq}C7Etv{&x{aVwDm-YADW?wm7fk;Y9gwio|T{mYM^=|o*gb8`-(vXZmL8c zS;Gn;Gft&)fiXt8iS%ie;%7;Kqq^P4jDx>KF^t0cF6^8CF@7Pk@}g=Ukthw%tooqBVA-g1e6a_ z+Zl1$X>#>5xRu9gXwoflWhcFoE_udlpoDb{hm~jtyPE4Jk?TsJ^N~Qwz}}ld2}c7E zfu?6iX#`2iZO5nUGv`!vePqVP(O<*@NI|A z1}#&t3E1)Uj_hMJ(Ire=DUOVswiBk;YVF&(o!4fFKrm2-jI0*1tzn*BVotoliYG{{nM~C7kXxRub+CX=axy}3T&T8~%(&zwMK&8Lc zwJhj@-miUA-vZ-b*wh!bMTL2v@Zc083oBsx9&WT0gkIL|n8V%MAgr=cI9Bx1MyQXA|Jx5?4`Ht^} zo>Xuxe+S;^`xxRCZ+IRykZaXT^ni@|@Dt05@fV+X{*QRH#UDUSkup%=ge6m^OpsD= z;lPFx3JjExq(DWB1&~n`Cd_ihL;o*85ki-oO_jZrMVH6Dd-R%W#U!g-RDn z|6L?E&RlBq<0)LEOenDBGZikQD{dmSX_RVBTQrS%9a~d@DWnxnh@JItlB}|g0v{SN z@W2gHfNxSvM)fA{0OlBU&OtI3a}cb7z^YIRu(XgO!!3r2 z5JCpGD8RWbxY(i$QrbX~j1=2g5ycRTf)T>eh#F&)8eM5D42Lkk##WR9pJl}s|pEh@{h3o5GMvODd-{Bnpenc$8(3Y3s5g21@q|4IrV zD2iaC2$(8>&Why3vralGl0dal$NeQ@HJq;DqQ9aeLB1|I^$kJ7nP_-dfr?4m}kba^`CXaYx$)^H#)%8|eZ7m6j zlZNG}qG4b1s3T%MDi$MQOEUJ^W1&^{SXvQ?sWvS(&_V+-oB~%XZ_mm~3kkR=<1{TR#WdIMPC!2TsT;DF^4thWRxy3o1DASNT?$2hT! zi%uAmSmTK$-e3v|2HIqUEjXZJf+@6!ZIm%qURjfrVcTL8m^b0zu85*o|2Cr6l z+Fp}lqK+hpbts>2e9$>SIbn{)aQ(J94 z*X(G`mW{PD+6 zOZ>haN}r%tUqz^)^g*`EC6JKCh<;|NEjFb6k=>u8`v1p20d9nU|0tmq{eV|1UL}x$ zAIX(Y8u&nK1?PKfFqcuB^pr86NHXVA3}5tRKZ~>p30zT21lE!-`4NVNg|P@-DDuJ< z28=K<9Ld03=tAR3APS6gPG%s}w9N45KS2y45y|kGRv{-uROkRghBJy$tfn=in2l^; zvlIkPfG-;v2ykcvMlrr-EPPp_;+V6X<}@fi=V{M?%1{aFXa_q@$WLVO_@45V2|ZuR z4tR#BpSWwji^K!`ym-jQyC9AXFR_%amXg#>Zh6a?-r)LHx#G=k2&#w=|0%!)n@wS6Dr?jzV0J}KOn?fp zI@RfvQ=7zMkv237(L}!L(WI?zY3^j2cCL1@M|Pr14ZzyePUN=7ZOOB`%bHv97FtrI z4Qo&1LMhy~G1aOzwgyUE+#Xr6N^HTcoRCe10yoN(`K@QDQ%+HOHaCe)?nKP3+~c52 z1~OQM3lI{WaTS+cq+$1Y+f`k0!K+;nX_vC(4R3cnXPVd9t_qc?K<(b!CF@|ewe_`{ z5X92EB-|;6(Q2yBq)NQr-E4%10~DZ0F$S#gY;H9QFP11#07^hlF~?0@g{PM|Daj|BC=tIW<`82BeA)}mtye|1ZAcIu0zl#{}7M~WPLLZ%|k+bk(Y{4#}~mV0%4Yh|Ff~(j z=0pM_#U8OUU+#E8kVItUeCpGk?}YZxa5Od};Z_C`eMZl0Y}zF+ldchgB_b7l@rxP9 zOjGWXDy(#6D_7(qWjm7$sX?VJB{ifZ|0(mAx)i34v~8tDQR$xXu97i-S%4)_CYrPZ zlb6EOp6*zOn@gaASUnPju}~|AT%nW0$+@RGy{RNI*}`g|GsR8J^EW|CH;J+|OB@kJ zF(aQ8Kp`@bP{YbLt!mS!G(^vaUK=YDJrvAeoT^U(7b&Rn`ARUws#LYgrcPEV1bLEV zCPP`tN~h@qcYNk)*^eUi>))AWiuG`AoyXF0R`8r9l3^u*C-{TFUAKT>=$1kQLlHv; zzzk;YHB}=J*vQ!#Hm~^Ai(vwj%ijy|cLe}m@PrS1VaWRTvzl@6XGM5Nv{1LMaiR*8 zQ1sabjoR97KCTdBGzF+&8<|C3|B8f~P0S=wviK$TXRSZ|>wkt9flRi$Y-Ad1GusKS zK^JbDr+guyb~P&K-t%lzEop&2f$Dai^N%FO+@Sw9yG@@H7$O|tUWR>aclWx_lMLn7 z9)9pYzu6I!E{4y`U73lfN8sh|+`4aG^RiC6sgpm_#v9B{fF5=o;1U($i@pAjzD(CXc!s9|jb(-I>M;&XW5Qy=GK7cnPjk3n!YoXBHb<@Y3#zmyH`FI0$max6 z5Cz-k+JvhGUyQ{fLQ}{>G{~ar@Ml@B?tTEMfC31BbnvBkaDYT;$TVW6j?TxHETwva z>4K~YErKT`BV8OvZWLoE{}3f9!~kDNY@!~{PS6YrvY_U0F6M4%hRQI9Y^aRHLJEq5 zhT?(^>w+RqP0-39lfpx9(xqwg(1_@eK!C`R=0iV9<1{p_^a{X=mV%#R<$4NWj2w~E zIE_O@O$kDz{oIL^)<`wvhL5bnkldq@0PQ^_Nsz|lkW8^6KG8q=BNWRZ*0O^N%!U+Y zF%&_OL`Xyv%ixl9(UKShluU5vfH6aSNtTvrN?fE3Sg8z>@fgWq+^Q?yVB|;aX_(ZA zjRpmmrty?+0~?2l-MUfRgel*)4V9WnIi?_*sHp(JL>>JIn>>+^LXXubz@^ZvFwBV} z%t>F+sZPwvO$xwx|JD#^NI_5rQa;#lp28welAxG^gB!ikQU0k$kODBa$Dj&oRXoM! zG!o`8#G!x-qJmDNs11}VY71n}7kf_UR^=crk}D+031KoOqs*j`@FG+~t%^*oTuLTc zB3gzF2)8a;xIjPdA~4!63xR4W(t<78ZVbc#sNn9(=4Ghj4ye!qEzE*p7SF7-3aq*c z0l%v8#A*@)FDywy@shxJ_)5`;&288cwt8#&;z}}#&-oyOVu)?Fo-bCoKr~=O3#8~} zk_KibfdiI6AtDcPoF|JGi}eI6Wn?4eZp?E6MRRmy0#^%a45_p#gZQ9}E}d^{O2Irz zEBK&>0(1|y|9Y?YKvO>)CpGPIHTBYx7)Sav&$dG8Wi&)Lhs$BsuV?aayhsE^o~t<5 zj=897x-v$(9%K2=@4W1flP*(745YmDPi7R2GV;$lStmFTghZ-O|7^rNf0O>MQ~yeY z0=l3BssMIorwS@ycH%R3o+fv=Lv1XDVWJ>jsA{JEi+BjbcZ>xNxyLL9k2(V-LFK|) zqEmUE2f0eF12YW6?xJ2uP{zn&dob!Kyhp`OjKtF7dk_Vqz(O<-0*U}zoCkr453Lr@vC;^g`B07Rhc@z!RYyo?$N#n#zX+me}WhP`w zO^qdIOrlDgh3i-XAXj2p!1N;)z#;;*A^=iLIl@rIG>3w+$I{eHZ?Yl)AOYO8O9?fG z(kcMbDoR%Z0F?A1B#7=x0s>dUF6Oi=jF2J_pd^Z}2#>U;awy4?Gzj>#Fiwgk{?tiV z;&(ctR|1SrjVDlnwE%*(B7*f-g;fXy;2$B?2ssr>t<)nX)khPEQ)7ZBM50>zRLV@1 zfjE^~Spw?lbW6AH>>dd3`t(}yUUwCn)ZT82>Sd~8l_bYRD>R2i=8cq~Vyu3~-gT5|M8 zH#T2IHe?~zCrKhwBQ}6Iq9*i5Wrb%40d!x(Zd&ja37}3TvaSfPWoK!&NU_CZ5ddOE zR%P?lV@Gxfk?`txuwRE3X>qV=^QQ=fHe`9W$Sn4NeoX8n_F`KWCH&`W^`~W@_9K1_ zrW{sJn?+cHmSLS$BXZVMC8%N%5GRKRW1}`BV!~g&u5Q&7>rz5oTk1@2(pgACV|ik2 z&kS6Tc5n3uXMIp(kCti&sAi+(a7(tPpk)Vh(8wm2V<(q$2`C3=mL(pQ2%pRe|7(?` zUNUuu6i@M%=_uk|Qf$ddmv$e#I-IX=l09{oSBiPY*PL-b*mnpj? zQhT!*TeSn*wY67}TN`-ir-N@wgS)v2KNe}1Sb{BBh;LV|O<0WwdZrn*j$@eWejAN{ zTPFWFaNC(|ul9zWJ7aOUf%3Q~MdG`8GAC^^U~Q^;|CW%axKu?NN0m5&b#{S!w7G%X zBcye^#oLL+8-{mVxaqOKd-S8TIE$y&hB0`yWjMGiIJ}#ik4w3`N!P*co4x59cnVs( zh1hOuG`Nv4zl{u!=h%R)G?V*!nnm1`t<;&1xv{@juv?tOHQRYh{Kc!8#s^r%E&0R+ zIJBRcvweKPTfDM!ds#n1eGB`@iR_eb%sJR)awOy>a{i20k*V!7}sqUN2n^8BH zq%U1_E1j#YeQ9Z0tld3tm6;|}+zFL8voqYu|LM3JIC!u-k(>;UEGjaH+*G0 zw(YmV4`_Ii{D`?ueJi)F1%7|$-I%jB;E^t-V!T&ymw_bQcga_IWr}?BbkTv-e*;_I zofWca9DTi)eos4hlh;~hxyomGnn!%bRes2^{K*uXm}6eU5&Yt#?6O&+Sws5c0U3iq zHono-m!J56ZnEm9zPx34f_*qwq_uj}FjtCxzQtZ9|GbZN)Mk$zBfuVq*M7X&KI_f; zxmg0e&)(^SywwxvzM=f#&oB*jR9XRlil4RWL7c_&r&|1yU9*s$Hnlq*|4y!7&9$$7mNM*LSZ#jaVaCM``GDnh47ls0w!IBRRh zQfEIMc>5{s*#dP#M$o!y@Z79nzm9yIxNqCMOGj<~TKH|I!F%(L%oKOx(YqZ(uKj&` z_t;VuXNOE(b#L5MDSCV>ac54S4PVMPDi9~fjr!sChlo>u*yTqVUJ)?lQEY-0(BFRt z1;}88ohfvnXc2K1mV*}3RUt<_(WO>|IQ?`~Pb1Fto_Z_Ecj84SYA9ih7r_^yK`xf) zQHu|jNT5y=-Pq%fLXo&$|B616NF;r!H3VQo{D~-Jlz9bMVPkpC=#Y9oHYjC7I4Src zeQz1LVVPouxgnZik%-|aBXPbpq5r$^g^-GN+_n7sTb*3jl$*Vq>yI1Xn~||DA#sIrFv+q`=Q5?d6m7y z8I1{W<(!|wSr?jCUKPjCov>ZS*>p?!Rh^}o)>htBOCEF@pixcqRJ3>QnOJ${UDOq8 z7eYiMwBm|)76NNQ)t0J{{}av5ZkFTE&HK|>W9VVIJA z2@^$;CaB_k_?hHj|BgHUYhsl9-efVx1nQgdh5~9C1Fzf4NEU$UZ*3G@K4cI44n*m2CCH zMj@FnolahDGS&k_oi&eLdl>drA1Wwa+pg()t7{%btE;Pw#=79Ir*b-%sO(0RF3880 z>KSOPc1pP5ifbBH;H(aYH$#l)g*dW+6T5d~3Py^!qJ!EEdgz%GEGxR8;o0cDPDe!A z+knE`D^79YC(M;Gag$Tx-S{@R zIKpv`%GzQYTgACDby1I_v*V|V$SFIGMvJ`KqPL8vtuBJ+DpaK6;+ChK=IIG9TIn1X zsfEdM|EbG77*f{v6!s|9^(8b9vDUa2cSg36Z)|ETlhSC!C7YEEh4j(d`pot~{6&Oc zN5fGqeJR9<)kKyn)Y;Euh7w^4bC&9PAjbT{z9tdqn8{=%EEUMh@~wns667W~SGmn% zdQ+TG0T_gAW)+-KQ)9dQ){*M0axRk>!sE%~p z+o;xPNR;voJE|1RfLba?%VBDB-)iHgSjx|!3YDdu)C^jlWyFov%}?P|*RI+oN!=yy z|2V3N4t0EYQQox&SlO}aV!*>3Nk+1E<6+iVvsgXUp>C7e``bV;`kS}XlvF$=*J9wx zm`dT5E^5+W2;n(T`hks^2)I>44cjKfGEuQOZ7@WFpc%h~ZjT10aA1BqEji(;SCZA!O!ySyJW}hE3b9qTUL44k&`prC z!Pe`XL$^kyQ>sse4-0R~;sRT=zdBjS^;Xljv!FFC+^Va4re3dobLKo%8AhXcuf1V1Lij4-Yw9I$tYoPrAi24!D)G!Z)wzb1tjpn*^J1;J zEfQEQ98=$)*3XQYqeBuPyNN`n*JbmKFO6qgvLHxo0SCA*aU zR<~+Eo5%AopE@`tk)jb=FZ30qw+TsZp@n<$-tcy!Bs2+FB;AuOPf+U@*$Ajl_Mn*i zr{)6u;l)OXuQkKv>#7D~6jS|bwU1on3$&1X=f_u>mgMSDk4rjh|IWsl^AW_BR2*udi5`o?F+t-=9jH7-b)tG9MIBQCgMcQ_?gIzL_>)k z=JliH%7@7kt%o|H3{8HQ>He@BZiHgfT$gmC2{NV8oa8*rmky8AP}s6om;5^l{pCN- zDw7lI#7q%b)M;pZ_J3g4Gp==LQ3EJJcTI6dOU|@uJal<;w|<^yCdij&-iKw_2TleE zeyHVqtn`6NcY!e?HZXE&X*N5vwjQlhZb8Lge#Cgtwr~$d|1QCTdFrBI%vL=qbxNLc zTCY-hGk8*mQB$VFU^h5~NSJv=7;Kv7gj}R|-_mbMwng2>ZPL<$(n4-4$U13(ZqFlc z=@va<*c^cbRp%COWu*~M0R-2RW4q@p`&Nd$Ha?Q?Xayqdn-+a1+*prB*hi zHiGO$f$_I=D`HsM_al$xi0|=;zLhN?@p9&4a&z)T9aj|{2U)(QT0U1pv_f8zVOq0A zbOzKFNQ85qm1{s~FZ|X*t0+Nj@pEU9bE_p=vc-2WmqIPnBoJ~!Qnw@bWL!NGT!^Jy zTrqV@CSxOLKv_p9UB_AKK_ibdeXr<1(-cNfaslqjYvriqDrO z;PrNeG%$VQcAMu?r{_j5s9#OC*8W*7FjkJ{!&3Kl4K zqF%Ijdnd+e`4*6I(n!U#NOM$DFa|e$0z2`wE7xK?&!J>iGGrH(dqjqk17|p*^eL$V zAFa1Z&9XgL=7Cp%e&y#(ZAXYjVLxah6&VqfN6}o8c8%+(HO-Y3DU^zJhk@KTXY!{_ z*msWkq=7cEixoqN$D}m11$UP~-LxZ( zk%?cUeqbj>DI-w}Rdk)kX%d)_Ab68)hiam6|1S^cl!VC>3<+i8xR{2SURdEeAX$2N z^lUHXdHkhrd02#;iI2lZSEJLJm)DOi1x8eeJwP^7tLd4h_jmv)S(zDy1~!7V|Y6lBsE9XBcWag;UZbzlcI1VMcH#V|Za zbg^Y=JqL9I+KofObjUbdEV^;sc#N9p|DqGhj5SK55sILd$b%ueb-vi3g#~}-7(ob0 zTRY^H+h`$&*?ewycWyC_FVr}M*^?beUHT}9@wj}CIT=kU7a)NEBUVwan1i~xl0Fzz zs$-D2sixaTdZ!tANvN3urkToCk+Qj_Y6^LEY9^8qdJ%b<(sG)PX^~GgNr01)w^Ms1 z$C0t8dR`%Wd7_QFH=azQO1$TLf#_7*Ii98jV+hG|hw`Zy_j$wjdQg!7R&=V6$~vi$ zs+d}Ps0yolS{3Rwfff>!LkWp01umm?GD_)Nh*MZL5&>XAt6{;bopF@cIG`hDnKBs_ z0gwRDDy`$@8q*pC)f%nYI<3-r+7R378rRx|qXDg`L7C+WZ-B9r(=}*m1EjTPiHeb- zadY>S#?u#btwZr~kT;Y+8^4OOOStr*L|(g37O7IuZ}jR}PyI7Pytu zsYE$huO$*bN)Qpbm5mU>u~ne}4})RAC=ekVvQQF?E8!8Srn0^SBi9G8G5ebc(S{CD zvoj(S`T>)r@gFrSSORe%#VR`86|OYCXU zM3o3h7L=K?qd}S;ZMwv05T;I*J{o{>Bza5#Zpf*d8{JdH7Ngu|@cg5~VkFp?;K zd7_OCw(i&8X-Dc-d-g6`iV*_)4&HO_L9$Kd7VkYB^>Wchfwwgq9C`%k)Wi4xJ>FYj zYVp_0hbJhJH))hvl^a(GfcfZwoTU$Bt+%TBk91|Wl79%%=A1!#8K}{H<`GceRRr`0 zQe7^Mmr-NqWr#pxg>{%%T_1+nSBM~5wV`kyQY9Qm8P?UJgsQn%lyEoYWE_AqQCOlv zAF?;xk1x&Gqd|-*#@KrX>iCdm=UK-hjRPft;fhl}iKLMWP1#gaR#LbXNk>MI#9Nm| z5QUgf8YbnIQF=+ziMDyT*?DoY=V6hX#TciWdCIw`X0~lc8iB3tNEDr!k;oB@E^Y`Y zh#fXa;-n~UMX8>eUHNExC_*|ZpoPH+8KKQ3gr|=+Iz(!LsCH`Qh$XK7c_fhy_7~}_ zVA}bfLPyT}+(sAS^d?GGCD~xBh~`KT5Z@K#UWDq6#hpOPVFfLy_|{gesdSpLrU{4; z0)!dW6N7*?M5w;|VrVRd1G9M-h9^clWS7>J%A|~)M>#M=GC{cN+vf%-B;OMb8Tzh@ z2|BuLpG8X0$1ArPxp`Ca&U@^!A8WX*T-RzSRd|o7c$#hEHl~yy&;F52j7r(6$EqO! z=8ZWkd8o3tb2+>9-K)kK0#dgL;pO<%w0w6Yrf#UB`EkFz<=P9Z=k4VoVQE%!0igdZ zL%xFPrhwg3NRtvsD=3j~fs7i`X(JgHXzJ#sDfZh zLKGlDJD?rTX&lp0;8usVdwJ((RlA-I>lUqr;Dj!xVO(?nCeyh0H47qxGnHaQc9Fmx zacwcf&sZYEzrwr)Hw$CgK%(%lc3rU|7ekI~B-pZb-KSgak;@k=GZG2|twT+%b&;Jq;phA${SEiegeeRst(kCNj$A8j`WS z6bhDAyk@W72brGWjzxAHlz?!BFLkQ3PF=I+D>eB4B<11GPBD63@{ak#vcOZEM43;g z0=1@O2FidKF{BrAOK=})OSX7J{Tz~xo5nXt2z?63sBU2RWvM#`8nFY2q_wKJc& zV&*hadMl4{6Pyi6(&*F(j-bsdml^B*Xjm7iQISV#-Jp&jrcmq@j#GviToT(l z*RE2Hll7~O8b?_XE(X?Op)m_?(CV6riAe%i%b)=#R-0eh?Ox*|32xX(0LTueHI-pv zXE=MY_eg<7aJ-`+`N~yW-pi|j+!!E>s8tvL%8;*kRTt3qs5GS|sXA%A4&9t*cG zJx1oPWW$eJ|8>2$9#?8GBoZX9%3TK@R&q7kpFC5QInmYVpq*OlPEYeC4GNg2IpJJV ze4Z40bOe3r!o~ILuHi%i#k)^g;018bm;&! zGq^apbs$z{NFKx5$6taMm|{hu_k<7Brtr4s?*?kxkDYP~*q7|X8%L#sO(;1b8Oo9YqB5ElUqQx#- z3hm8f#aKs4{sqh!Mmh=MiV#U0*_@A9l8@%z;kn0Ks%&Em(v3{Edycf& zeZ}RP3H^^;1tMxnb6SrkGi6yo4Ogs1K?-A#0<>>SkyG>JwD;L$3v+ri`*8%m-8$=C zWW8yOlq3vA!;P)gnQF`ewj6Iaf8 zC3v^#*(63DuzlgFk;q746l5617)GImEbEgrQXm5{}%$QYNqRgZE{G)K08$|DF*S5cp2;;h|qYqCT zjO8TFUMt`6elJo1#cbWTc*-@fK_h!W??-heH}L+D7ad@)o}zd3S00znNG5kaBNtn6CIhhrQqXyrqy<`#g99N2T9_R7 z@qprGfj$BWBga@SxIYVIeu3vINYzl(ltFPOWpLOgQ%GLi)KmN95`Ks}lqQJRBT_ff zXByUCVHS8wrz=ta7IYm&d&9GLB6fX+hc7ZlbzXN9X7X5AM}W^G0XSxIe;7Wx^C(NT zVO2Ies3D11mSo)XRC9)9P9`Z|W@16LO(#QQTys)v)`%*nLl7lBGIw)=0%8}jK0Z_u zRS|JI#b*=LO$$_nzLRTQ_I>PR9j+B_u{01GXKn5` zBc=paZRK#p)Jrz_7y@@oy>WK3Lq0gNMef2KkV6yWr&yHrF#0o3a+hmZWEqK5hP>u} z^Vf6HBryg5IdKfbelKZk1%e$SqhlX7N1$kmF%uL&Sbo-)Uf0qxu5~j|`GO(HV+aX- z8i;IB`IN?`O14H>gosKEnJpq17+cd)k|!AU6oB_4a0yv&u2e7VK@uN_P6Ge7%321=pchB z5QfQvWWW)dz(!h_1V$(jWKeISRyZ4p8bOf+YM6>GcszZTB9IbdbXYm`WQ!`;a|h;g zIZ{wTLKo%KB{esQlV*w6l_fDnK(&^Fc2svM=oriSbohpEbf+bbb9BNIK;;xrotSl) zC~12CI9J+(OcWtfm?C#lr$1EGcD^`!z=J0wCMAbfc2XxJA(>7Y24mGZX7;Ie>^XL( zS7o5nVXLTiCYB-+6;3l57OiHJGD0djRGhWoJn<93aK?+*H6jDG6=NF!Q*^ceF zc_hkbYIajgIg6$=;d*Zb~4uGFNWfLYjr=LpSNYXi@rG_)m0!z6Ep@tqntG)YvP&A+rQ+mU|AvN3={?Qo zGTxRDB2*&JU5TSQojAE>-7kXlNkBrnW zr3V2nDgs&%qgsFkE^3;bSElTSnb2kt3bzGYkQjX_5bl^2&_VxuO;Ep)n_6@)HH6 zcO*|L8~#zRaxs@~WPIncD#7McO)-%Rt7%(`5T-_uU|JRr8G~^OByNdfXong}5QikE z9{0B&^+pq2bd=Zyk{IGJUo;w=v8X_K5Y3XNzP5j^d$Uz@OF{V_D5+TKMiKS4S%~Xj z0wQgp^cnkPyOGvC_~m>bce-(fs^ArOFSs~g>6N=xTgzLiSQ<&cl1K0VvaYCL-S zo+W#V?7L?Rn~HUIoK6vWau~XF={+jJx68=Bhqs$1)_6K zN@eA^#53ZN$ai*#_;#rQXO-BiH+2#T>r*^@EL8VkE&L=Dfusrl_o3jZeSM}Qn5TN9 z2d$Ep08tR5TkwUN?1hjKw1a)ByOo=VR*AI9K%(V1pXMv=H+fwBg@7Y zrL)<-l{>1mil(jBfonBy9q7Di(p$qjH0weeoYtnkCzd*lCble+6tZx3l~)%kf8qxk zIcpWd>nVw{FmdP2*rlluV}i%glh}(b&gW}m;$3{&E@<^(UR5940=;ATfw2ij>wGWF zB7p!`&k8wP`z%O{70ie_y}QgQ#f8wc1cC!8UeQXXMU-D(kf#^q3K#|IS|*{z)H%`{1E|S2yHa~?U!13(|`GQMiU{hvRC7R zNK-n1TO=C#0$(_6FJDUlubIKG_@0P-D9bdgV`qN)c*WI}i&2fAi?=ri`#oLFRt2Ha zOsm7g0bsz0qVti*TiawFMlW!;wHZc-dDkNa79j7WJ9V98Q)fLRWILKtc_ER_6#+nB zi9j6YcR_1XD>+~o3uIi@#KvJ{)8itP$Yw+WR1J+Pp%OV_+-65SC*#v&TX#P>`?g0# zEET)P5em1psIdQZW-tLZJ=;`iEMyXEuz@(CpGR#1vW9_X9y9jGICQuLExR=mtL~#C zh;&=*vb~p@rKB2vvxH8CBw4*;KCu?rdNZu!F*NG`m29WGPPryCAqzIdl%{-_8DG&@ z@z*1AoD?dAe!^EKDg^+7EuF4*A7QyOuJ)}`>Ro68Z)W(Ewzgd9CO-zw+6McA~z^gDq_P)$N6e?!KNsbvrYMNQdlXCIf=#hyxX^0kb`R% z0?bYQ6fAD1VZ2zrf`{Zn9Na7kVq;vL4ANl2Xxd!IV|%@1S6+Agsw9tW*-W9d1=e<^ z2P#W-C;i!8_%w^eN^_>YVQ`!lQvFgKGH84MLZB3MD|`niqQak!vKT34AOb|JiX(Kp zeaC8{v{x+LaNEN8A*~Bauyx6MLs^POFUNHoOqG+mFK(he^ORCcco_HqYOR z+`h5ht97MDAx<>HEdi_<07_6pVJRW`}4Y1S)X$hw=j1-QY)T;CyV!6p^aTan7NV zq@gf((P~5_;{wTo%R5KeHA6uEIh2ZJeJTq+%dKc^SZ#({sg+LM{8JGkKfr$wbCIDb@V8($J zDQf(fP+&!f1b~$EIMO5m1R*U7?1*q8Oqmv23T!zrr_GNZLGsk-kz*2pG*!mj`10e) znM;3aEQrvd!H5T?3>26|f<=i@bgtBhVB*-CNW>C==+S3Si)3R?OtQ0V$ej#>J}rs& z=})y!*Y5obGA-J+2=gNKJ9n+e!+ZBGOagf!RkV{qj!mF8b3(fh8CINZS0Po=7b%aG z>)5bM#FUj3Ye&$gZ4-`c@nKYrw@a30ix@R#gL&an%)A-NXRa=n_gy~QVDyll z?_PYaF!Jx|r6D7ae7q|5(KQWb<&1qH_2Gn}(=}b5?DNer2ftO`GkM^Ii!VEFETI4i z+pDqTe5#K%kkIRGrNdJDDniwsVrW1Caa*k<1oE_pf{K8ql$^rK zrJJO34xycd0&BGsDT-jC)B>A`BLz|HD1oDXbS_2KM1v_RB$QOryrpui@kYlolLDfQ zZe(nwre>^>vLw8Mk{|?|0;#k9piCl1-hiXdBCmeRF$x3{^bsc+!3tBUD+iK5t29|! z(x```fGf^4mrV2jusqWo(jx?-+6h7!mt0Y$rpR2Ws7Y&F>&5<}+%zVY(34V2P~BpS zEFcJVX;hX#ZBf%$L8a-@us)KMAf1d{E6J~hY*8aSM|$%-(f(qnQBzyPlUXcfYSLAR zZqyV2BQ;&JMgNp_bxSRwe9>D`p%RX^RC$ZaIB2mn(nEwIFz_IFyDUt?0Q(|wK+yJe z&q-97oy{zM!>b9z3HfWzT?GwB_*HX%Qn%dekP8uF0xyR6yW%R8>{EctD-Jiymh);k zgTu3~GLSaZX|c2Pm1`oeIxH#O%4*gs3V0>ZIjy?js_>^s*(>uL`!Y4} zVyxIV=j*B1x)YKsPYHvHLMsBm1YN*5v(3Iww5p5>h?ayj4}I!E+B4XdM$dj;tV%lZ zcPJZ{lin6RrT0>?+kIc+C?b)z#ASe=dRF)Jw?NPBq(ex^A75&cD_l*eRL}a7pAu56 zyl^o8TR&ozMuws|e?5g%!Xx124A{4{MM_52Yn+&V5<-jgt|PqpkLgO~p^~r)3G~|_ zLI{P!%!Lhl|4P-_(qVS0E)WE{1r!;^m0cu(==xJxeoMbKu4{%j70B zQ}Wn|Qf8VnQmj0-84;1RSSHk1j&0RJ;&w0uM>yWmVG(K4bPAWWw=67fZ{$pL_Ol=N zBq%$A#24XA_7$liOFhJ)4RC(rL_tuU0Cay0yEIUxk+}Jg=wFfhpY?HYf zb223Y4viS1(7qT6MelfNkb6weXyQm3g|V_ObW7O92DD5H3T{FViqD0J0;APwtAD2d zQed~R>7-#1pncmMoi{635hCJ9NAC+0uSypqWsR#ZM`_Y~Fcl;z?d>s`5=ch=b-x8B z34)lbSB@4k5_>`sUBM$ywv@CVG!YRvzWO7Vc9@t>L2E1xh2Wt&_mmx#bE4nO=B89c z%`PQNc%c$0i_|$%{<+G1BlX`%qD9hf;xncGL)D8Og|K-}h<~1|=Bd_MCf%S4Utu)r zH4$U2alO<${L~ao9i%1V;nXRYTIp4{2|bVml0_wKn^ljR#T_NFTqlB80<6ZPw!F-2 zVFl|)?(;H^eJFHUykgkUCP9NK?5J$DSYU0Wn$UF3um!D*C6mWWVbW1MIApBg97SV42|6Z0dc2+XOF7geMXKX^mk7ABmag^{FsWfK5GkWygEC_lI7 zKB}nrbHEKMP!HHFl4h{Hi83!Yh07@*f_PeP8*#aK3S&-@RK{rGqDF=PW=9u#F3643 zErAch!8wk1!LSpp94Yz{rYcB>A4(155cc7NW%-65^Y5~p;-i?l!~kDFpudJsdGnQ| zCs{&X+0Lva3&D=q6I8~ij!%?ppryFy*?e)i=yexhvB)gFHcfK44DMtV)42FDEIk7z zre{j49^-Zfj-o`YAFWf|EvHerw~Uy^fax1Hts0ctMUE69nb>P)hq&FL4}Fl9*hK;@ z*WZ0w%xZ@=-_ZKP1*@&ZDmzw;y)}_>986r`B9>4lQJ#2I&RRn`>@IFMaBw@!A$iMH zM8~;}1R1jNJrbz`7Ph5Je{{?z0C=A8QWLB%tH7otsasGra?pF~Zy3qyTMaB>O^u{)js{SwAq`&d{_PZ< zy1Z@t9%?^#j1zhJ#ClVvjOpNN)N+!g?js(&_z=%Z9OZO0EL>}^VYeC`Ydm_RvwWyp~)=m-PpRSY}CRb z+-cSp;5(WuLE|y@kCLa}qiSezUe%0rq^3tb3X+wxw`aquElo-)|Jt!^%u>dRI(pJ_ zylqp-8gP+ldBP8td6f+qcrJ^UWj|3i1dpvuLc>M=9JsnVxlas3UoU&Y1o!+p_vPQ{ zaMYXonc~K+lk`Po>e9R4%G4yOgTCY=>)7p-PdKEIh;o82aS96dvkZ_52^wOt_~}2k za;aeAk15Nr^%$_|pdm?lGk4)9fMXrc+9+J}ApazREBRit}V75IoqL(qNK)a0&1HcA>H#18wXJWJ?jFBCTt4NxgL;DZ` zBMmd6y}c2zM8ULBB%@6nze_~3)ru}e(~uy^GtP1~KDwPhnHS3Hh+KgVvFJ7D$TpOT zrC-ww;#j2H%Qa)G55`LsLj@JQ0ee`^Ty?Ncn&v_c;!j$esm5l$g^fIo!gEkhugAvAg0NZ2_Q=3dofD z!Yc%wA(4_SHa(JiYh} zlF;0>K1w~!qya ztUzKy37=G+r=TGpVKd7-u@9n@h*YDoNHD%QsLtuSFv^JpurL7KItIIn6_g>}go`Ti z3RcOx=JZJ0V%^Hv!6~mumpO8WoLNCR{c|No@7X0keHNs64}yS<=LGgL`Q`%p8TsxhAi!eW! z*)d?+pxp$eON9v{gINm;{z*qxYtIgzW=Lm}60*^HLR2mnx@ zw(G|qB2a8;$l`pv9nA^}5Lm3`TQbO5ru|zo*aE?A+MG>`8@m&nh=2rWSS}dc$HiL0 zh1|&%T)}nRh%L_+smO?k+`eVn&+XjKby~k2-M|gp&uv=N1ze|fTCSC>*&)*fRGhzr z)4ANLby7>O1eF=_$8pi8|3AI0BSn-yO-QNwl%8rmk`1`#Q^xJ#5SES5Ei4s|VK!2xC87u**oKXaD7XrS=$V8N9}T+RIm?;vk^=Be*T8a9 zAgiJ|?J5bHRqksn&pRyBBvo3?jWKA4R$v7MW`zY#Uqh+tL#Ux?6z2v*<< zUf>SaUoE7>$ zGHN{QIxo6_xO~Ab^&?NU`A+!^BjI#pb$yuptv}M4M;#O+!H7>F-6_M^0<36Qq8$i{ zolycP*n$mZw2)W{5D0=z0?gf>h%MNe9f*Q;Ws<*@AQSW^f(_HW-C)CIeEag>nYxcy5KfkbpAS01^o3ffi^I;D8dC(PHKtE1eBS z-697BlR&-H|0cmQ`eGHLgx;f+()p4AE@%M~_~;fWfsh92k|t>=7U?k_V}#zn#oYps z{$i7c>64aem4@jOnCTWSiei?461M4|j%lE#>7O>~pswkf4(cza;uAVb=UoY@LsA}w zYUH&~DcrICkhu|54L>~-yzt9&`jic{FU$1M9CE;~O4HvZVz+t2B8_T*>Mc~UjZo5C zyV&0Ay$T?R07=LZ?5&d7YgnDv$p_{7z0+g=h-F&+9m@EuI=2u z=T_JR|AyFvZnkaRKIc{l?%UREwBP_T;D8O_050Hw=XUNbNNy6i3d*ZC@%Ro-#E|1C zw!<@mT&#e?=4uX z)Z&2s7I6L^@B$}r{U(7bM$YEQ%vt4|VJhv?3^njv*VdX>-b+95s_=SSM8~9LP{mAn zy`r`R9bgt%oe}ILsFE!J--cC-!Y+y9CV*AO>!^@|T=rTPzh#3ZWhCg6hFxXMF6F^S zfWk)QhE-pJ9p;J@UxmCn^pVJhaHDno*oG6&&wxFro0o}mC&I8HN!rL0-N|6`q}75K z|1CJ@O|WM*_vU&g1zXr>r6q$=P+(FZh$!f0dIsll2Io0PXEqOKaOQ1@kOD3!Xyztp zf^K0sUAxt33Xag7nkl)D(5s81XU1R#Si9%&MA^^~S{l^*F_&vhn-X%Yza8sUI8;B{P2X0M{_4Oos&hmh=H2(Esd-#sha{kbreOQLfsvwUjYbw1pMl7nog=t;{GLX|FSM!f`H z^QhCKdeJJEtZEa+rr8(l)ms9{Ui2tzz1@nyc9`>R*t+)dQ^xEBfLK3@08Mag|IQuk zBiGxz)&fnC7l_a77BAR?pV;x`cXfM5%49C(da@4xls^0k`|WS9{_KC0vBp3y<&{CZX_?O?#F6^Q5Azm?FKnjT>=4hxzXD zJV(e6CQBQ~uZORI3ionKY^RtM;=JE$sQ#*uS2rQh6ru=6P%UG?#I*l{GfC!PJ;T5xHYc`sg1TeAf zW_zyZnRjz^mU;3A=UUhVG;f9SpL6wpb9s*cncsv3CIcx@?nCGQL zAP5g4FqjabLWEJ0NJ$a_$wh(@4kjVcF^Pna2QP-KXb|Mbj1LzcL=uH1frv2?7F;>A zCPbDEWqQQvb7q1qWLl7DF|_DWqePV=U7B=@0-g>DBp_2_Y16Dsw#5i3EG1gZlGNYG?*xt8S-mIp^j{9u$V)e(Nw;yj8JNn2h@89zPxMk$(dM<;+F z`^)T7HcA*sk$iEMVs*3p`Li>CQ?Y~^W|P&%QC|BYxR8PeB|sH~4TumuNPaPVV}KXO6F zauy==U}l{m!5Lr@MiJ746cNP0y<-;+v&lp9B^5rkx9{|O)=CYd!=I3}98{YDj< zQTl}Beqxci-xej5VJDt<>X|2>d+NCXl47b!kOW(_;AfwSBD!b^WDp=&l@2CB0;82S zisJ@3TD9kq>{brU|zFoCTgmAk;dI*k-|zP zuNrC?XM(u$CM>RlHHd0nGCAwsY%Bp0L3TAw2T^d^EeAxl+Y!+1KnY}L-9SJjP~Jd0 zao25e37CuSKwETF9!J_86r4#(M5nD_=*rt)k^o2K?w12AG^W8{wnVU*mVtSppls6Q zSOmvPWzm|j4G7>y7j;a)OCA^Yl7ltLCNY~@v>4(h|D?Fw@`t3<65=Q>lhHEECECIY zDIenOq06nX!ZRB+*9AP$ZqV+R?d6bcZWHKOW?0)UF!XZwmyuw8%~bvH0g4ve>p1OaT9`-f z7V+#xR(R`A$1X_bN)Hz{6NQ?IN$smqB8U;m{}$5CF@e&Slp4&m>^`N3C7QSu#(_UHsK-|(MU!dgi$Lx^g$4@p&c8XQHa{n1|Q{!g+0;{ z3vEP#2^gz^OY#r#GP9p6QH4Up>QZ5-RWS)%DNd;Ip+{KrzXwLDL1v=OWytp!1w~9y z9jViuI<==CZR${s%99t%K!ykHW_A+LBA>MA#i5je1YE$A8nd`1hfOMrpRyAPHn#;C zl7R$UkiZn+xW*0av5i$@W24p>#zT=IIl|(}Mr;+pQ}qfaw&GR8Xr)OBa&lI2n&bj6 z7#U)D&wvOj6-R7!$y$kWfj`_N1K(G`{{d2RSp^E%vmRu(yfrIeFj38;@&e2NNhUFz zgh}!ygByella~E?&_qf`D~Mqz335u)SSpFQWND9iqWM_JKn9>PL69J>fuOitgfydh z$V5f!8PGmtv=X&Kp73Pn%HpZdn#rt>Q2S@ppvHv_+>$U`6DD@9xsi#4WFi#%%SjeG zrD)C#T9PRqF9Wp8h1|}Ud83d}2G1E{c_gbmuBBF)00&Sv6szoKF;OrJ z;Yz2u32CEY=Ri$+m&`k&gnXvM*nO6ntMt*aw z-;}a@gDT+nJi4q(Ql>Nkd!0(>nz30Du(ES?Rfbf$*juskLb-__HQi@PC>~@BB19o- zIas0*vKECx+YxMi#058!07yULz>O|xD#8-aH@<;o4=-}QiY1YhIXvY6WpYh)wuv|7 zj9@t-%O&<%5g}Mi6zCFAs4#wN3lHK=Lj;9{Lf!Ew9GJiacqCLb`pGB>06=w}TgN-z z33PAl<4kR2xclab3rbMH6x=8QrXsRZp@O0+g|*qaA~1HYT2_L2wb%(4i&?R3AaXCe z*3m53!W{;fuPSVyUG5Sm|9nLpST#12-#zak7zNwH8auEH5)4*uV;ENTqu1vlOm;o) zF;!;lkcT}nNurgQOCIvOi#-;20J9d9JNC^cWfEl(lfueeMhc|ij1}zU=gn*;GnU=c zX6tkrD`2+eo(b(PQiGaF|M??u_H+RBU39k>A;QdE_X}S!EnrD2On>DiH&hiidQ#{Ec?X# z!CUZhXd1l|dNo(g|Jbn-V^~K+X4#F+*jFn{A#y+O*#dH1xdB#P@#%2Lg{>^O9cUow zYPhi)Rv*Cn?O1=m8`{T|?t%*n?+P*;fu4<^CLu0C4Ys!8BWgn{*kEysuZTx3^idx_ z{v$uyaBED$>zXFnzxpL`N)2o|aa}H!T@m(tzC_Y88+Im3meN2VQ}BkU-bDAOQu0+A2<)K-aHc1};dU zK7I_z1PToFQ2FOUoarAWd(KUtkG9DGFY-89smVA+SSOra$VToi;!ci_#)3a4WmXkS zFzu>A6?El=|0OfwzVuR~hHvY@4b9BRP?g{qba4I5q@W!~@8-ljAgr3yLyjN-n$WHN z6Ay^Z<8l5Wz{H6$uQ&RZB!^^-@v~dCw@L{$`JxRec8R00P zwJibD0%|z1J{nn4;mq0`x;?T@6eSM*NRe_J*^DM`(dx>kN>dz^(zT#mBN^)Hpp+w# zR#i+IR6%`q~B~iAK7DT;RG%1M=N|_E4kQC911dPJ-{R}^? zna{w}nT?r7Y8jVxWJbQs9F~EciB3!b)NG|1Z}F8@*+f_|Pwl9mOtOvp(PY|~O#~zc zTjfNeH5x=D56)Rsv^CkYBw9fPK%~)y;q)X`h?+@lMN#|_Q$9oil3=4y9q1Gapokh7 z%v4UH8ZV)h1X_+rVc-QK#jIW0PzaUaTt!d?#cZ|R8M&II8N~#s#;okkk&s3Ly%@g1 z4|nXCpn%>s*`~#6 zm8O-Mi79?j77+<^c|_cSQG1e+c+MrGY)V#w1la{xr?6MnU7mh)oqujh9&vyj{ShLO z!2|?S(|wUEZorL*8Z0(wdx=qWde&sX36}t&=IPsEorGm+UEm31Dz#GPQP5jGP>GVL zh85!Fd6MKo-Y9A4ioTLKDobrT*8LUQom~_p4qxYC)yW`FaQ+YTnUWMC|A}fSNV*vm zb;2Wbeb21Ci8z&$m2v12PLDgPmAS~0>QLKbWsU6R51eSq==_mc1ykvrqm$AfPsrr@`I*c~R5Y<)p;pB4jN?Hefk|vyWo8VA8qfyF zMdUcq=a3EtI?`hZMyK(gRdmi4XvY``h3V{?Qb1rs_|;gRR8vIgQ~J~B)E3xj1+cXu z)p4Z(*5yw@6-* z{>K(*UmeOJadJ@1q!x?hA&<0>8{HPdl7R*Y-O9BI;Puux2^O3rU3PvJ;!VlDrbG}0 z(RaRtbD<0=UdYL%5;jTW>`du&;#^S3qO1`>olQt9+KDXAnr`^k72VN5p-~(q3KtO9 z4T*_wOb9S~ih_dOqI?~MrqNPCXdVIBCmNVC8r&74=D(?mmAS`YRqe2Nq2^(zM}$|0 zVyD2lDAzjUYLa0!p6y`V+3viCL5*gLzQ)_e8<0V%vej$xJcySZApilUR{a>f=_5_R zn~=52g+vnWxQDhri{JLDo<548D$$fl*+2p$gq%ziP^8hU|JlpHlfQ;p_63dh{me!_ zUr4e7Cy*{lzFE|qr1zQB${DM>ycfYNnQTVj@$FB=@EOP$s@X6U`=QO-tVUX;jp-rl zvL+f!K8n!oQCa$pP>?F7W}2qPgzb(=r6E|}w69TYz!Y3stAX$SHqzs1%sL9s@3rPsq$6n7ZA;1@^=J)WMhm<) zRt*YeWGqi+zTnwgfLZ;r`&Ca54~(Hh0^rGQD$ z_RrGw$sEh^DXJZx2qOX*Yaq{wfP$jYH45kufKY7?0YK;;e^GyaqJQd1BfW~)YNMg) zCfZITM6PS!eOPbmD=1ZwoO~mB%F5SPV~kebuv9EKc2Wv^=z`=aJ-zABpf2`-h&o+gi_EE=2GrDS{{i-%FZq(MN99?@EXGs~UP$Ow`(;E; zHWW&D#Fn7MK*$FAnT2TmI(qZ zS9MB>1zpmyCXgWZkQ!2UN^GZCAYx`~|7_e)UK-vph%!dWqEkzf$ua72A9ELhiXwDD zECH-%rN|htFW@W4+6zOzf zejD~y=BV%}wDf3M2%n5;M4ow-V`48TEv_ilm3)tdG3hi9MgYZ$uIGjsN4g9@rCHDn z&C%G*MQYF-W;lk=VH<>BNxH6&9JVymv$^#0{M58WK*&oYSQSf?^GuI9_Rg2aE&cUr z-KJPi9uMBYSKm}G_y*ufNu@!+{};jtT^|*jskZ8pf5l3hY99%m`PMV~lBJMCW%QDu zQryW&Va~AKZ!5thvHmn=F}K}VY&r48@-cVvYE=YButLXqu!xLB4TKhehh2XQcGx+d z-#MQTL`D4hx8Ql84?3XtIia7;*Axe!Q^c+;QJkO+wqge8HTAf zD4WL)mHy?ipzv@{tTZ{%;M&}%uQB-a&uF9PNz5AoyIc1xTtG?!&md}WD!TLBs7{pm8%HmzZl}~RlBtyx_rvFyv)D+%(MIi#5~R4yvwgV4Y@o4xcm~RyaXsgZUn(WC;-uuJji?e zf-?OS0JPfv7B)$JpCV>ZZ($gA#CK(u{OvPk*wO&?pkyekSk1Ru3uOcswSDKVSm82I zL-0uS1sM#Dnu_l8ZNV69!p(%4hOaXxkiqJbS&M9fJa54!j4Fi7i1)qo)3ksV2p5V+ zzL=a7bXC*Fq$p{+|8;&ZYEBHepK^ZrRc4C0B%fmMgLJg|mSs{%fhxveJ^y&>r#?$N z1qX~tNE^A(ML?-x`CMdq@0aTDV|hwhRC*i8VG!Z3h9`C}e>1jtbxSwj9utd!AxtR2 z6pZ}!dwlj=|9>Sxoz=I5(>e4H9Z$`)2-&z^0=wryKdB>^Yl zK!yYt4qOT+-jEnEVlooo#*`d3az>U*V+NJ^wQEa?5J4w}h(PpbieXJ#{`|13>5Du^ zQ-pmm?$42736Ln$f=r3tWl8`S9-KJv-@biI=$JVHkmk>G8!tY6cy;Q2B~rgEBWGEXn`drKv0PU z2~eUz1(bkL0RW|%UzfR8E(l~|y~1rdzVLdaOM z@1caW|8gkD?W*d`poV_zsj~=@Xvj#0kTfblkepj6z8rxhAcC%di1I!huWZV;EO~^A zN-PnGK&v9Pf@;SyyR-@{9ud;2&8oDDGYT`STJy|>=o}CUAn7y+O*`QPGtE2o6w@Fn z*t#pxvKSqO6e+TTXv!#}=*urgNm+}GO(c2_f#(2_pf?g)Ai>lUxF~@Hg!b4exlC5Sqb!RmC?g|^GUNNi66!s#ax8GZpXeM&Wr3zx z&}D%Pk|2nU_EmWb0$QFz=Ygb{qUW7`&KYQ(e-4`Hpn1-@=Yeo$I%k`gxLF|wQxu40 zm!H0wAamv0)5k5fJSw!;0Icodmq1b~0tp~I{7Ej;KCRq{$QGWE21>M^1rpU zlxxebsIrXi`2MTd?*SLeJMX@~Rve)uwjgB-DKN(zGRSJXjkb!Sh+q>k62e>y0aW>yjBL`Hr|*nndglRpLSk9`ePpaU6*zx#<#Iam=(*b)M)`7jQHZSx@6{C2?* z-pDq-lG_P^fT0Cl2u3av2!tfyAff<30UFX-hi<4d8;U50J>=nsaCRXR3Gs$F+ei>P z$D#(ga0xEF5Q3(_tCM|gM;05_LZpbrUTx7K1u95KzE~{8NsMbqP~Co5qNf@yuUS@f zBe5=$get0}AUpDrkLF0imT*uZ08q&sy(FwTMqvvYG>9KpGOLV4!HiNe|6>%g0EI|S zl2WlsR{|0+2248VQ=R09zCJ}OTE*m3UMoo!6_UkWAt^}h;S)36(H{jx zOE*z0Sa{smv=X2k1q71-!&J^OgPBZWnv6&2+E>3YIiX=1WSGWGfHje6&1wb!NBfG2 zGo4AZ+x0{&)x738$0^NoV)L5CTqio;$u<16ktKe#QA?E6G5&b1KF;e*fB-7Ci>Yai zonhocR+i9~UF|_hm=LuH5QHt*tZ6~(*+ng?H6to5qZsvQN1t}JtVv-)5q%H=T&Pg2 zVa<>WvFFFa)S1&nP9sqHT?PwUtB|N>cyXDH+?ctNki93U%<%|M|Gpx;{NN-dKGg}v zgfzU7eWYZXVUBmUl9DxTwJPz^Ah5jZlelpt3LUYjQFo%eio~R>l7T=ZvH({|WMQs# z^_^rS(AK-w%5~Ta3}5kclBFQUY&b36kNCD9)!d{s?~Bb%QZu>cMGvx4#cEF)D?Qmr z7C)~`0_F_MmC;5E*YMjvyY#-(oKQ6uR7d`ZpGY1Ogd4K9zd1>{TBPUHM5@x3dAFF#Gl+PF7HUwB zT8BwZO%hYc?CmN01nR6hWv#R@1c2-X=@O{~{@I((7CChAbE41uoceiFDZ} zXEvq)4$;|F$bZFlRlR-iaX6(Z8zoFP$=T*(x`td<4=v$rcWz|guC}+cB-oukC01=+ zBwQs4i6}@i67!yMtbhl;%H$j0fguuZ1dBG}5h>swj_{BZSaWHlCAD2s+OSxdVHNBbhS|BI}g``uUR5L{6RjMBY(2BnxdI&u)j zD_#jL6TV`lH&|HcPA<=ruDFCRem|dumiMsaWhsy{0XOzMj*;L@GSOL)IWEa(`D#k+ zwT>lu|2w2_l!OsK_)4(^8;Gl%dlK&`Kv2g0?&loJe)gHp0pg%m_)L03`LV~z@30-) z<0&x{Kl#<4eiEE1WN=P6!;wcfhvyUE$x_TT;uo-M_*wqs0xMU3C+LkR7RZ9A^lJ5Y zkb?*Sspc4D3Q?nI&MGPZ0WfP&?V~=bqFhaBCSY0sM4Il;{uWB19`BIYERba5v6yRb zh)#I|s!k|`14AP3lEUq-im5bEKj03j|G?^VZVRWTLM*O}E3^kTOagMAE488vD6&e@ zYT|K32*Nms*`A7RQfsH2;s=?+1-XK+J|c9C46fvguB4E4{A%A)4}AKqNUSh#j0&le z%{yviasq7FhD`@u|>&&izRP3XjqfT~XjYWA%0W4?w-aA_C; z$uh9fSzakwn5DxWNeZUIP~K!(u!mBzV6C*^^KMMFT1UuC&#$?6Txz^2Sx z^6bn~viVdp&qVUhrVsb3gd&3l99InSJmzk8rIE<*pd5+FvdkJ4LUm-1W12CQpz-zE zF-U6d)*>(hrD&W`>P&_r@A zB#6={C_;6-s0c~%u;y-0|CT}|kVgwc5I`bL3rR3A*R80)1_?25B=RZ(=puBY;4wod zu@cEBG6!??h?%57GCLD8KQl6!>CZf~G(od8^GY5s<1o< zqCgTbXA2}j3m^q^LZ_?X;*YLd zt&A`}d51bDBYp-HK!=M!s|z!lZ7=tOg95A)lR$GKlSl~e1&Jpy0rM{{5p7ySF9K(tPWR&+);M7$y@iQtPxc#*yoWI_Nf8Q%}J zFo>2YLNyc8AsvE|$ge+miTsw4!0PVVmTI81WIzyLH|ruxFK0`$6jCm4vapm(w=@~Q zCQP;TOfTnj{wxX32uvn`6dk&TC|^R+LmSTrVicuMN*nQZ^F7ys;%D@=GI644Z-~ zs4OAp#8fYm&8%-EKM7P6rzYKOR)NeWiBC$L?8{`8`e;&D=Zw#=PbIgl!cXmKq_g91}&2YlV+xN8sxofty~$3X>b!rAtDN@ktP@?dJ3yNv1=Yz@HGh& z^R%!Gfz8u$kmr($DYjG-wsZ?Twqv(|0IGHIB2*FzwJuIa3VyIow^R$Zz-52)WjFS8 z>~c3f7EN6iX1TOl_3}_OfdD)<|5^%IsFh1S#wrx8aiqXx>p~Kwl}=w)9%}^xlC$2R zAOfHuYw0Re_psl*mI>R-*aS3W>TqxN&S5E(FejD{JE#yd>#+ z66I62|L!ns9}#<;6|(L#5dZcH1!!y>XEcJ#Z~3-ByJK)G^|qYzbH+wUEKaO$P)b+A zcqD*YGsibUms*P_Fbm5t3xY1zOK|A6C@O9On~f-tU_!c!M0;`SUU4cUfELLsLY5{Z zI#(7`G`(afi4x*1dy&4BAch3OONVwg!A2+5WKtxHvv}p8*tC%la$paIgz^hl_O9X} zuXNt@OtG<=_ea^}}iBXyBJ&y2i= zk$eXTE_IX+c*uHe^#piImeOmQv?w3$dJFb0C&zjrlEolG0&eCT( zmkYLl3`nXj3Xr4V6#!lGnvwwjdLjW`jb6{yc}DT}(uOk}%SOC6VnGJ8M6i&xb1=12 z*;deccFK@~ijX#8ODnl9D%oQ-K?__~WWg#4IC%>y*=0vrlr8ykRDzOaHj_;mlUJE% z55kl^_L5s!mbZXoUDi(VR9bHqmYpqTNcnP5>4da^mRZ@DPgx2GZZe8fYvt`~{|nb^ z2X_&%usNXW$XG(Gb`sE6UKI0QV?{JwL5eHpYWGqd@+@^Ci=b}0{ z|DsiND|Dl^kfMLnboz8nk*aM;8Z0Ck^Wdwy(k|^vG)K#hCQ|Y0M&ykzM*+T0MsYeu zGi02osna^*MN<)qUdUw{ByIS})8wX1P{|u9m{kuhA`r5P`RRHywNn}S!zghpmd)|Z zR35z=XK{R31~LP*rCdk-$vrG_R_4H+2?L2&Xf@T8XKZE`(Md|FbBR&lFOQ zL`@O^f9s<6LbCCsGXMH_e7Sb58x;yDmB$pg%?$VS2Dq{vc!2RP1J4j5Ia|P}8s{={ zA}vzNO0xDc469$&_jXTGVpv#9iEHf%mtvAy25q);*!fbMwtZDtlkZkrySGu2`&PS` zIzpGL3vRZtbn^I`_KMhrtF@>|3a-R+ZA3# zYSrRckF!Q0f?(4EWV^MaW%{*`K!b6lh;cxW+61Iy?5pkIH_7^Y?ts)twAryR!(=8f z2@wKiMVXEgz?C(b^&)^{SvgP>qL@E+6KIws>OzyZz_?jf!(CPr|2StQ2&t1l+z>sG zCMZ0^h1oi{M+!LhW3!0z*5tuWnU#Ba#7&u$tJQTNX|AHMt|a_xqxm)d8Eg%6d(3up z)fTbRHpBE11_p`;uuqK zpjwfnUWU6|2B;s(BUVv&W%1K@S1KIvMp5y2(Qc??$Xk*6+K_-E3AVwSm`$l-(3A4H zV?C69I0WAND`pu_VQVwQ`qkG+tfqh-ecWjF7(@X_-Kz{a59r6ePP1rlUb zk03QwfTem%n!2+qm@X|is&_qmp(M8Gq=gsajJE7m&nU35Bqt}HN3?MBQhSJrgi^%B z;a&2#pCdvSc>nOIn_|_5(*;rcEcZ+gxHT2ze|3j%xFWACP=0R3qxbdpV^X9zv3FLj zRHrlLH%+&7*X}g4GZ!~^(zI>nH(AYG?axIN0EqxZXQ<#_Sxskx$c%+%qEs!T*tKOg zJt11;kk&PfwIhaNs6nT-wJK4cqS;H&Mmc7&{_y{46d6jv(F){p-T~pjEVw@Ae zWJ_7YW6)%0`PzYeIVt6tw-ySJ+;7un2Wew$VPcs%+Sm;F(ZJ2_{octDU2zIW+Kx(L zCkJ|Xf`dEa-SLa$&MlRq=d8#vt2*<+m-K6?vq)4nI!Cb%3EK9@Hk-%X2qkW_s=55D z8Q)05p4b1TER++&us=`e@swg|r8Rz;ww3{cz!oV32@r@9C4#{yS~P7DNKlIwf&#Z_ ziLx+Bf+P_%66lz~pvaISOPVB*1f@uiB9Tm(|FUHZmrXHea+!jYfRYJI7VKQ2KuJ)P z8x=@-`4VT+DM*<*T?!TFQ>RL&Hhn39K**v(l@LwBbHdLBOT-skj2%%wwVdx-<9L)!qh!Z|IVu(m|_}-5VJ{TlMB32kAkTojA8470>BSJ7cD5;z zd`7NmQb^dLxmA4z{btYlrV{}EAuek&-r!EHekO?RCXfkWl)6_OU^4ixBRD!m&U zNd&!n=3OMIORg4ZmPAq%rPom zXad1UeOzb}%oS`&gE5xaK_1Fmn0FLnBt`YvqXd0knf*3lvuOT#ro7E7XVGXU2~6Ff zu9+4S5b{o&fOPExM*#d08LMneWV|UDwhU%mV@S<~FcLu4MaDD*EJ$jmQytd%DK%t> zNq1bPmBC!*OTd{^^uBW#DQt`(blS@Y8)KjZ^(T7Vvx|(XC#UtPPkqaxp-Q}mBo8qr zd(iV>V|b{-Af_;d9TDMPdZfcFB@uek>){X`Q~PJFuO#4JG(g*x0K7P&~p zFiLTZUu5D7#R#P-|LUcSXuKjDg&4vrHc^Pk${?`ba-+JWC}R}#HmhZ3G7{)AkLVw zInRMfVSe{)7QZ&(FA31Ie7_;qyW%M*maH#jUgH>SK(?{Cu_z(!ndr#Ag0mUou~~Lw z8_m3?GmxU}|701}8RL?6wLG#7Bot~IO5;{Gj+QN^Xp7lPXX;Uys%UCB1)EN9y3?S( zRD5>>DoZhD)Uk=wrEyzoPNBBapUTZ>OxtNe>*F)xwS*+Z(ga@!APMatY+#eqjwD7V zoP+kuJ#3<9;uyzMK-CeF{k$Vxfv^G5DN1rN2@6oX(v?uo<#knQN>vU^mBdD+uv95Y zU{TignOV)pKE$6r@QdkR> zXC~#fuX_z_U&rufqnTUX)b=*K;riGeh2~16wqCdm+r&g|+ufwyHfY0*rcawH^19tL zV=tRo%*Hmdb(-uuOU*jCwyT{V6EQBWMy!;sw-l1|IC@TGWN1yuqyTR~kiRXhQkD`0 zd~ZSW=57c&z3P<<)=e!q}2*%J$9)zARJsbnfc@IT?^QXr==+&rm(?kCASqzf9!_~YZmn4ONj7cF8 zSvf@dzPY*W&a2tirXObpFT%m$SOtz%;m276pf^sCOnnJ5qnPu=xMN{Gr zm8WERmjw_&vb}^9`_t?xocvN)k{l-8UKG4!0yFo|&Wkh;LQOLlO#nDe1xSDgX#XTA z!cY)$A_))}f}=;tQa@u*E)+;E7ISBR2mrh=#Ic;???1El^LS2Ky7Tpmu4&`e5R8t9dGB3n$g>f<)#S%3%Z8qa2 zKl6mTc2Xl{Q5;c(B=s{Z6NP94GiQ@jIE7JC)l*^^RY>E7O|@%YLo;ItQYzzxXV_D2 z$WtB#hh=DoVaQZ8I$F5}pA*OiSip-_gl7S|Ypw&orFQ+5+EAofFnV=#C_ z(sf4nbwm|*X!nd1Qbg=kED_~3%XnI6Bw8&LL(>vuJ+xqqF_8j>dKQV1J>+~v5=0e= zVig9GA1RV07Lp`6k`~5b6j_oe$&xGSk|!xzEvaCr_7>%XCUiz$Z~_zC-iP9)&CK6pDO99}0r9ytJ#Q!N<$theWDqHDg zo3arQLd?N z<%Ty;V_(3TZ7c(w)44TggKc`VHrrNg))t-Ob~(&uY~ZGB;7Ojzc5dEzp5E3`>DF4I zaTf^iH|GLxqjq)@uxO4+ZK#yn{QKB|CI=Xmw|3x%VNUp*e77J#MCW*aLIN=oc7~ z1&aX%J*RWccVA+6c7CD~3Sk;Z$6d$hXLZLAL`RMSw0ly3ja7FUT311crli(bKnOID zL}iUs=RO011h9czhe8JK5ggK?j{g&*go9mQ_dVz`m#+DDC?P_MXqzEqBJ|}#b$UXh zmmoLfB6b=?lqaX8_d|c`Lw*XVgz7^>vQTD5Eo#ki#Cp7y7qR8g&=`sjt5HhzK~CBeSm& zfF21kumTI1Km#ET$WpilJ`A%KVmdI#A{t1Ld+>QM$OUvF;c1#MIQ7F^nx-vMkebP* zO*6%S9C%hc1DN78f|X{0A~cw+sVysUiF|ZadASfk2r{r?IVg38RYCj5e(8X z(!^E-XoU~9n>E8NBn7okE452YwM`3EHr0o9i2sMXHilihQcn1Xt|_)}$cJ9*vvZhI zN!4vhqc(o%w#@dnWow6i*tT#Ruk=?i@Cg@)IVgj(GBf6wkwb#%Bnce@m=#5U3?T_H zi!wHog0xw3^-*i)xCIKjpq+79p*R!~N)!QLp{s~ksVKUjn^{}|iyev-fTa_bB|ABx zi`24&F-4PsXhOzl7xPm%xm$De0j31PTFls5;S-RM#HQDXTU8p6Nx-U6%3L1tHzGTZ z5wt+?NQsgey~4|K?nAu@k{I)Zj_cTTZ`WL48XgpgbP;tRZALB6$597ykO%o*`Zcyu z^j|FsU;brUsy5)!2pms+M}rKH4R$tf5Y1e?oC*#{{)0cKW~N+7Hm z(Q+ej94=@wj|D#}Bv><+dN%dAYxWRQi&*|;W^F}GZtA*G&di*8dz zx57N0=9!((*=)_poY>iI;+dZ4sh;QN%+XBE>DkQHJXO>#jer53!t2?3pJO#OE9fya67v*j=@{6=f4ZiT$9PitY z%mo|qkz3N!WY9 zfQqMvD%VgnN3rL6q1vf;o!3)T*ORK(o%h$Q2daOasCaGHhdp124XI_csKC*bfrvqS z)T5judE4W6-aDq5eWu??LRk&hKIC{?Xlp%!62)^~Z?UXV`NM|7(B3C03a~4n6vd>n zm8HaGV5zNMkpx@DWlWZ>sbUh4!b`YvX2qSA>dHzf!GF&YCLrXd75idm*RKJa7cX;f z{yKJp*&SLYy2ApTip!EfUILvZlMVuOLzaVY|ausdQpLta}m~Zf%u}Z=Aqt4 z)GZAY-=jIRPRp{I0RONQl~(B-$@GE{1^zCJYkVWrZ}4HlAJKKV^-v$9v#n;~*Zs5y zTWuI5${n!Sd3#@Dpul&j<-U^#AwMK}q38;9CGvhPsh8XjZL7Qu7$m2TB zGGa?LKdw{(hj#ZhwxTVEM81Wt*@ff=NP6WkAaiFtN$Q&-bi;bf23i&D&3G|Dq4HKzdeVszwys{IZBm@(%JHFk-sFYdR+S^jWWWGI? z85acbH~;iPyeSTsm09*TB@ZxLIwv%FXV1nZm8`GpV=@D7GEjgXst)UGoCpNK-2sw> zld-UOyS@;Yno6CCa%hxzy-A23VcBjq;TS|+~PKz z%eOpdSenCawpuhOslW1srY7H!BpY}=pw z+iydfg&i|vU&gF$?dfdl1KAPB%d^%orb&X6>{gOMGLMY4Q&=_h8FUAla4|6jc@7X; z1pf{sC{W3SB?t*9S-3!n0s;z@BnYBl%7iHyF>cIw(Idu=9YKclI3-Dfh!GDekst-( z%as!jex%8fqXZ-<3GC#VAV~zCKnX+{DuE~g1U!=hLCVu90-*$=?v%olXw|Atsq)N9 zplj7ANT47gfFz06Bw@?)B#R_$l(cP~3Pl1m0TL-`^=jEdW)m4LQrzl=oA+uG!*1P1 z5$Kmp-%Vp6OC}=)D`K8n{{9sxcPA3Ql>2JY;+1F=DN(ej?%R5cYS@9ta0dK(^=;I! z8*kwvFt!%ToBalVTwLJLxCGKN-n7NCWyH`eub!SeukzD`lb=1iv-?iCJIA!L)&I^` ztKP22laivP@)q*uTaocvU%6q#dhrW}+dqF{{Q?9KK=1~8>n8&f>~F9L6x41%{RYGD zzy=re&qD1kl+eKm9n|o`xIjE`L<0%)utW^ABQeDjSxnJH5z|8MMH)lQkgT1U%5f*5 zPSR>8lyp+gsk#!xPDZTUi)^#tnuN@;$RKkrugeJ33p=t995N^_g#?lSFY7vM3NFax zjm(Rr=&ejP(Uj@Um8Mu}0U=C6DI+cjz*A2&GjeW=Df9%i%#8R9R0=;Q3P1v$WReq3 zN8^lh2`ZH6$kL23HK{44aCGV@?ymc8OH#k{kyJ2;iXwvCSdC)URCR*&RsUCWqgB-{+)g$zEvf4NMD7pq*{o zb{F1^VF{KK3bp1m3HV}+|4ofpjwOEeD7bX$uH*1VDbJO5T4~O_df4zv6A9p}r@UG= z8S%ZQ?deCty-ZcP zs@+blC5Ibt_;H5$^;U{nsU^BcP@DD%@tklpoN%7J<*m6b7$tzWf;Ko)BA8%WNP#63 zI1AH}Y8UBtKyBA3qe&E~=%FMeS|Fh%9D?+qgi2E0rjASpQ}APnj+oX_LAPG3oS-lK?G?)yVHoF%s9}(*3edBY>~Q0!7R%?(+w0D7Um%4LI6x<~2V9 z54n;cI=^V4Nb&QE6n66%=cF$-4%|d(Y$+<)IT9)4V+&H4uodfZ4*z@LbDr{$A!qp!)sZHo zAFBxHK~l^i|9plsxKzkS6)I8|L72f0riMDINkSQkHJupp2SFIRqJP?`mn+6GLs+Ea z8@&i3Io?q_cB~^Dxs$m$=CO}@6r>>Cs2v{pQIChjn761qZ08Rh@*M@TwhN>V&!rZw?qA_-_yEi)AEv;BYgPPWg6@@XdqZM+MYdgje1yabB6|G>! z7^-qWQe2gVm1!r7j4`1QvcjaqN~{QCvVBhHNXW)E~ipTam%7Q ze%WhNr0Weq%49s^y`*>yiJfY8>c5zVPZ*X7S8h6azos0%d(6 z3yR>n@;w4%!JGTjuo!K4;l)(P!9!|`T4aQ!!kFeZJPlz7UF<=edT>eyZZV9(Xd4=5 z5H{XaRr|KKav+rAPjv@Cfkonc90;EvQgDb&oevYO9ApSpwH6lp&;4-7 zA*Us%jBnxJn1Mwhyl80raYi|4!$@Havb`3Bv=a-WE}2}g6f}$N5IGSb2n*Q)H4BBO zju4Yfh%zQJqfPCdNJLHw*k!SE8L4W@sUyx7cc%RG9j2uFDx}&Tgg<+|Q6bI zTm_~-_OzY1@=kXi+8n;16s2$>OCrq26L|8BF2~A=j~XQJu2_Ygkyt0I>b-Az&uUq3 zivqr4xbUA!1)V6`!k z`z&bwH0$4nMAV?&jBiMffXV8CvhuXK9kpl&%C6efsNXARN#`n2iAKPKy$ z8{@ZXwW7hT?v2MA-|W^l%A+l7XX~2fIZw8~i8l0p^OUD78_vNY?r@`Ro6sfDt;pz> zf-iNP!XQ^MRn6*>vu{om?!q}riWAcu*+7~iCMf1^L3L$%6M13c5CV`_C(FAXcByZD zj5uWhQwZ;Pn?JmbBoDpRPycV~gW`L&nWS#6>DZ zL=2BlQw!D7ic0#Dh5sutTDVM7$zK{fnYNEkOfP`tO zmLiRWtf#pnNSh^iiXx462io&PbzsCud+B!$^vg?7+_1FEy0ycagJ8A-rG%kVqLV28V+o1~nWt11nk z*n*gBk9J@MffLFxP%LXqtO7i}>H$m0YAmzNEVV>S(AuoFTuZp@EK`iE)?&TUs!QcS z0MoN1P$QhSU@eC$D{fMa+v+`L(U!urE!w*+${D$YdOgYcD}lO;&oM5{La&`zwu<-& ztO&p6lP=-8h+^D{>>@wY)Savlp6U{>?~AVUdQFZfi{Bd`Kl+=e!8G^79^s3M?)ed* z`;`6ynFWg6KhTi3<~Wb5~0wM1l%4_>5tE#3;Bb_@ga+q+Ogmq zBaZ682>)`R6f`j8lsR-hb7tC1Knv`6F7K&!MKZ4pS55f!ntAnj2g z{n1BzA{{*uwopWOGe1Z~l`h(j{gAcE2#f#`MNVwB$nyi+AWwuFd?1V{i(*)CpmHbUtWLoL)PkOGJx03nDJ zZvO)}NeQ=UDmO|cH%&n$!7-|KLpPv+zed!}ANj`0K@C(AIct#uZ+xeN%dku+DS;pz zlae{fTt|*uo4T~PZ4?`wf)%!4IA0wtqyjFyNx6%vA+InB0*Hi^qR4-NmJrIwxr5J@ zQ>pE7PqK&&fn&L`dRB^rR*NK7aOFoyn4X_Py0F1V*!oCyQYT_Digq0>qi6}skXM1h zAbP#mC3@H6!y>N(iX7C*putKkj6x*5JE9j`jzFU2!O#B^4TV-dV~pk|aPcMP-PYcnQ(;%(E3uhkzY~kO-8p2#&zM>N`zWgb0iXF9Lur@Vf}{d(F}u z3FpzrEorUI%gy@w5vD*T`ooc0%Rumm0ssiXcFT=)R147XK!Kni_*725z^M3nF#H)Y zPvx)eISVaPk;~G~z`+s{JCd--f({x}`#6mit6lUQLHX>!G)| zC{a?#8LJ8`HcW!BN?%stD+L0PF&u@Ya?!9j!cAyH_Q;PpJhVE@Lqkf$L82o+ETlmk z;OitrLP}r)4&XmjU;}nwLUIcH5~oVi&eTN_wBQRBx~nS54|eI&R3qWa_(Up^HQIR5 z>%lcI$uwsy6ov?ZWkg0tA%JLFiASZTgK)*}3JF8`VMGCw-*Hr9j3(l#VOdmSN`1!h zdA9~R3y~>6zHCb=T@HBp#;%yJZ@iXQiOytosi_@frd1B}fv5a?Cw7#I#lY2v!z{~* z9%L!2nhh$l`KlId4=o_qg|d!;)Pxp1$QVnQc1bB|b&gfK9tH!Fwf{m1z1)d<61Yg7 zsgi;roO+IVtGBK)t2)k>t2s%pLP?V>ih8}*=Ma~m(V2Xmw|0apb|3>lM!CI$Dp=NE zpg`EM%0XC;Se2>Rs{%X%kc23NC|wp_t(i*j_~n+eDpnxMEqG;`RT|FPytIV8#ImoX zjmxx@OV6@mZa&M*qUN`BtioL^ybM~rd}8;RuhVltT+_6hWES3=4UD@L+#+LqZpe<~ zyO*j8;S#Q*1-0uEO}PDtzV*!U0x!PhC1pzhmw-*u96yfuu02hjY%ANcg-wmV3Bmb2 zzqw-CEXDUziV%db1U%`ZK#9``&MY7b0E~j-{GZK*&&(Z&QMs=n1%?NK=p@yOGQmQp_f8 z)YfeO9PL4iH16!xs|FGs`JB@dZT^_OzDSt2HjGkpjn)v2#*nSn2(~FHFodCugxMxX zl+sDUFTs%jvfZ{irPN8S?rL(>0BD_*;1f;36kh>2y3iAkwcY+7RW zE;lYfH)#wH2CEPj4CrfAy~jP(Y)mI`Tqk(iCuJq%d&aG|ON4j=6-}d_oq=h~sm4Tl z@C8bmpJ|oc>nQ@d6)8Zu#ss=~l^3k=IF(ygg>=^0qnz&;U9D(|%FGpZj#Y2XR%m4@ zO}6lqWfiXRDQ|kbRPMN~dsiRdx_h;#aS<3H-{*JriHMOM1^1~f2-#5}gOCMmhA|A; zdYAdRDJCCTi_scMfaSGuJ8uCOy@>!xIF}o5awwmT^wC1V>n4`nn!Kr-H>c*3W!X5%@s!q!2z$72(O0_3GqAVg+5!d-H3-^h$PrPvmI!OrY7%Tot5wj zT4#0JiCgoszQBD>qw>pMBAjX@i%uy(MNdF}%G89bTzCRN<2KMB|05sK z1(BW5F#MBJtL&KC8PDU&oZ3ejmFC* zPY$ZFf!8tqC~M{2Fd`+T8eHok43&p>>l&K)8A5m=#NN3^3;k?sjkmHhTA~KlBm5Ag z>A|9cVj>3F!#M=B045~}HpB@&M469yn*V?K2i`-NxA~d3+MExhAAt&WUTz^VpAam? z(ESg%A{`YXN)0r^-X4zMW}!-yl2<)p##psXPhFvp70_A5OCf;lPDZi6ZfnXV1;}n5 zmI>L>wqtC2T=G+hpv44W6mcv2Nxde#7jJV5iEE7GGy7EQDOJJUJT0b2Q2Q8f>_#Yn zr$mSXhQ#!HwkI_P@M|&fpyMrj`^y?HG3(g5cJj!krSJroii_MhdF?oUjG>&n$PurY zN@h8taBy1v`M)$h__DBb%zas{Dh3@wXUp#&%k30r^dF~}{pPh?|88#oZ+3rh z9)A!N8_^>z#3`251vLi`dVnB6AOR8rND>Sr5FyFJ2m+&Q*%Wc2#3%%!V9cm7N`xp{ zB!Z+E5n}`?B13BWC^8B`0!dmH6c|$=O_?2{ln_wDbIQ=7OL#6(KtRFK zrV5lO4f=B`fvG;PN`-p$X;cCejsi`>v?$TCWY3ySYY-vLmP`%?LAZHoPf? zrWA`8Jth&zHcA!(S)dR=j3mn9C}OmX*)m4U7Ri(?SB_knj20~z7cYjwm~rCKN%k77 zDFq1vg$j{46zKV)=h_xMM*r!n<>74HQBDJwlH|7*lbvG=jhKpO5xo1ci-g01r85>5%}-h{DT8%pMU}8 zRv>c)HaDPx{|!iAeyjEOpoH}8CtQDv<>%mU3u&0)eH~i(pJ{eoXc39SVHlxl5r(K@ ziWoxZ;ffiiNTZ46wp zXmXOZA%)agBuT`Skxd+3L{me!wg!_!9bKfGB^VmWYp2I z7%`-0$+&XJQLhX2CBbPfyCi`UdnJ&B%CFAek(Lu6ZdHr8LW?X}xo!wq)ZUAy+S+;-1> zcidkGM)yK?_YHR7gTL((-iOB>IDUr1?GjsNi>-FwW4B~eV8H?_EJ1HEoAcF4TuXAl z4w2OCUmdB0ZFHmyWRmKy3uk!QoJ)BZTQ=p2R!%|Xq=2DDA=T4QV&~1V03|G_i+FGqcEh zItZWifd9}slv&U1lJKO0JSi}K+7(<d z3sO+hfYUlN!Kpq7GSCu-7@#LQaX}h-jn_6*kjs^bCb!uShwf8FhAhT48{#4tF?6Cc zW{8XVIinfPxJC?F4U8KqQWr-=M;Y}kj&poS8*_A`5%p1yIwBExtjHMB2{J-mT;v+_ zqsKLaQW2fKC~To0F_dxX_n?xg=qnalu?%T8I(Tk>s5;VTeXVV-Z9oi&~+3-AM@M zmjPM?5{3iU7zN@m!8ArW=_*jV09GI6VF^oE zwrCOry2NlTH$i|~+#;6s2qbG{+E_|PO4E>PAz(SxKxO6=PpQRJAxz`j(u`)*v+Ya@ zW9vxJJo>MvLN#VT(^=naCbOkAO{nMM2v^UgRi-fwa%GF0U?i8e$o=hXWxW{Pa<*3d zJkE!WBA|Z&uxpd7+>p3H^${vt#!+zS__+2zXEozay=|z?b_JIDRy#jegACE z+)6fz<~U}y_dK+P2e62cnNP{9g@4`+A?#l6-iTxgO| z4{rv=(ay1J2qKqcc<*%Q` zOE(?cSjfl?ooeyxCEFDiEm;HC$p+1owTr323Z~DLxVtkSTlXkP7XQza`DL^W)ha#z z7KNnpFbWDl+EpJ8W1tBw<2}>(&xA(RiHirTQyaO|N)Fa8ZtdAAe_WbXKDoWEEvAZd z>sZY;PrczhZ#tKGP!T7%p6|`)gtPTo6$iMKBfYRUH+sCI@4y5eX^6cMcr&+hn#I|bT=3X?Fyt3?sVpHHWScZ2L zPX$GKn*xjS7$qvgKW}(Tp%|mC=RBVDR#Vs`ir%HG6YAQs)>GPUcB9amC$&0a4zad& z+()J$iw2)iXwR2WnZH-QK7X#?#2Czr&(Mqp_hFQ2V<7t`!~fVbTo0U0EqOEiAIo{B z%YmAM4h+E%YmC7R=GRSH60ts|=7g!iuwA1QEE-CG3mJnx`HMq_9TF&Zd~H!EaSR|6 z!+&Nm4QImAq~=y_!uA&*=zXGkkpYGVc8!Al7Bd$0FFol z(oqA}h|DEm?n&SS_DGhbOaOl1AVJdE+(;eqO$p)=O|;rfSXXClUnaQ(bUhb)1(Z|t#U?mD4JdNGKWsK@j-@PCmP4v^{INNuKqyH)1L=qGQ#W3Ckd?fRD#Yl?E4he-6 zTo2&UL`o)COKyc$1fEv7q^MZWQh3D@1O=IZBsC=sa1~ys0p)I0Smv2e0=ZCIL_iAB z1%+*-7U5U8@S0zUMrh#AoP^2ifl2Ji$!4U)w1viD5D-QbM$fI@JEcto-9&bv#$Uk6 z5!KR@(T0FghiEkinM@E4;iY;s*a%rtS~4YfI0@&()Ln>2PYDD7PzHNVNBHUG^x;s6 z1;>q{Mr5wW5A}@`S*CbI5e3a3joH|NBoY4Yn4a;Ni1bL1X;~Pp2$TgGYVybdc3Esz z8JMvqm>n6GO&M<9=3AyFm(8XE>Lz^*$^Vxf8LqSlj5L{(td!=|RuH<-Lf8BlHF zhz3m*==4;Ww2O|#Q5-ec@-1aLme1`dCu}^4sx2X<5P+%d(l$X_ds0&pKvPfv_jP-44GBDeX}=s4o&{6%r(M!|d(&$LU(cw$8S zn?4yEOUM$fVa_)8BS%UE%aEHZf?|*MTfYgM$QT?hhTF55j8poe%QThFEaNgNLCyrt zQy610CL_lUjhJo}QVnC&s43Nu-2a*?9omc)JMvA{ts^!<&OKryKHl8Z?djnRmO2hr zpEjM|v?I*{-Om|TWHHt{9^IhEDWeh=`LrEcaUpgY#(|{G+^S4Mg+NdWSM*I+a7Cs( zh0Q1hvWkUj1Pv4>4N4ko(kPc#c;v1sR~Q0iK_-BuVYnCW{l%`eMRr`&@ZE-O=ocOep9ED%60}F_ zd@2r2kPI$n^o>Eaj1Y&3mj6MdQ}G>Uto@03#Mg7;hjMU%7I5owEZE7q*~vO)h(Tt3 z$lpD>tjy&fRSAbx!Pv+Mgo9NE&aQ`YWMxm;UlRd`iLDYIHOLcn2#JW17-5)+1kxWl z5(6GmA2qEUA)p*pEh4ee)EZLO?w%Vt?HCE5)_yJ53KH3l?bpB&iV#xUQtj6A;MNw> z)iRPKY3&;c+C%JE-GULfh^q=-%qdP1_aOnq63L1ct)9)$$=(=}kcJl#u3da<;Jy#U z(8TXlip?Af0R+Lsfn0mqjCi!peI~%7h=+fAp-txG6*8fw@J^<$+!luoFSD4*!s?ljgZaO%#YGW<>nR6!SsC08N{z4jUj+ONUMyu;tqIa>T24 zR&Nl1M9GFnXxsJTNq40STjmf(=u>Bq(nJg#O@$7)co-1cPBm`bg>4R>5TV)FYDLV{ zD}LhtE@_ie%La_he8fzF$P|LG%)^1IGM?!Jiv>eS!3Jyr2ao{;?`)WiOmu7jDYQv+ z9OKY1aDBqdGiH@np|GB)a4+J;;5g%GsWAF@6`;ZJxGb+ct}0QD)~fDsTFH$Kua*qg zunzn1)7Wqhr|=Q`Fb^v+6X&o!dQH^`R$@u96w~mzG|oOI0c}Yrv7l7tdKN;6u)|r@ zeWa>Zsc`DB@BdSxFqImyMM_L;AyhollEiT2bcLZ+Nd)-dN;uhS$8FD4S=D*~B~(;v z$Jwf?d1SLD%Bd*wANS4<(Ot7@7$VbM#pGnF@M>>O*FoS4tex548dPc+VT6(=CG|?d z4lG{GPkf%A-O$w@4~t0&vIh@tpA7|^h7&sf=RSRBlJZt^hSepK{IqhGxUfx^hb9zMRRmTD|9EaG(uZQa&EJ* z%-bbdn1vOTha4>sAuf!CiFC-Ba7M_GSxi7S<(^zk`ncM8azQZ#MP_UQn27F|@G%!` zLhg>tEpGuAAWcNz@+Js}RpYXTeUlVe^%mUBH&L~I#z#*bN|&6J66CTZgGuhnj98nJ z&a}0G+DaX_6R#}oTTZAKdlrEmZ^_6LerzaWKtdLfRI%+7WD^@ofMxX-7>O1lNnqGu za2stzLj3GTL*a?COd@ErXf8@Yzz{}{dW?IlTazj&NCb^n%~$0bjLbM&tnrm)rP;%o zHUB4=k`$NG=5ZF=mj9&9lypc(n@>Fz4z;1xg&jj}dkU>+? z9+{Hqs^$g|u8Tm(;<}`Sdgm0u=*xPycgVaqPU%a1yLV0vOpdmlA!{41()-fwy;rS2)K!$AdRGfn)f83%G(O_HIEss~u;5X8a$FhK*d5F1*m&u{iyGTvs+uv>;iIJP_8VquZS{n;N&rOW zn?wM`CUAjLfeuKFLBZ|NBorHDL&YSV#D*O?o`ug|Oa!zFx0irqR&PSh?6J*EME_VE zc|>q^&V;!rO%G3S(-cVV9F8acit#wLU92fJI|WKz;urDZ2V#_0>S2T!xGO9xI=n7= zRJUGMR!bJ_8niT`FIyX-Z&4~RR&5EY6%gfC|)KB+CWl%7f;4D$p zpU{pHaUk@=tR=QL(Gr2?vNMGRpH8tvas2S_N9pD67hl3mf`N^W_KPsRrB7Q>pZDB+<5&HtKUCt6Pd zsSC$kPeD|RQeAJbgE3>6D8XhZR4(7l&1eA`Y?w(xJ8-Z$LL@;}KC8-4T=?L!_2{)` zOw$wkbwMD2Mfv4~lB)~36Fm7;WhR8P)P#?IX!L@F7GwfqIPY!PQy)Tov!spZ5QdUK z{nhg!LvDoF@u45Wn-oxNy@V7jz79g1Dywza>79}(fpI&%9J=6^NI-9Fvo9?EFVh?F z5*=32(1Zhzu$Dp`Rh6l7Y``cKhuPz^1O&GQQ*b>a$^U>>r17om34XXgavLA$8fl*jQ@%l3oqlcVGm6q|o4K?JlO^*_JL4|1C8 zvD^>DR+sq>$@Y_1|IL5|SGSJ#+bSpTPD()={=U_?*gmEL1QG%Rfea*2&>(>*3bibB zsBq!H1W2MlA%G|fk}OfSY$3CWjK?iwJZ>Tx@}$X<)sTd{7#)evW zM$tkb!a#upXb$vwbmvip1cpjU;*eqzrwgYN&?03^&!ktkNa3ofW7m#kw2&OAB`bjh z1SBLG*cI&-wF!YDq^r=aTP0JldPH0H@0h=00cRz=1uR;uX#XW;B`YC{Qz?-nyTv(HR#Dm8jniox6icaz?Hbh2yUzcK$7 zE}6Jg%9xcGNB+F|^61Q|6PNCMxbx}OgD=0H9Q)7e!jEr%{#`rv^VQRX_fDSjRVfss zW{h|j0Mol`*Gf!?Bq*jLph&1FJTp)-(wBDsiwNVEWJlN`B7l+hera+J|W8#QT@L$grG&`9>w zRM4Le{dB0cBG@x1oJNg;)5%6v)u>XVa5X4aqW}x6+zi!(C&YL<6fqzX&2h>Eu%a_S ztQwU9f&T!#Q_ciHTqubxC+KL>UK9NlTVH#nbz5FZ=}Ns+9=u*t*tHF zO~P4rMU!HKZ?*g>B)P_zKnf1X*iznrwVW4VEj5z@*LkIo1T%&sW0*9E7xvQO$#9z3 zyU8HKZew!UosF`NG4q(@kw+F8m1So6;*vv7c{!F*mf5?Fd&c=? z=U5IpXZ41DxZ#EyLRZ58EkhvGI_NJs%dde^$k{tx|X0ZYCBq*>jjwx%1x$0 zgct3JmbFvrgn*c!NG04=G0_;YniohoP11z4F-DnEibS=XV$lf*P+%aFwAiw52|!}Y zZe!(gH&Gwm;&KxW3-7yc0&uJpq}>YVVqhofrhAGhJao%0I-ON$N)7KSNKU%)D=5Fa zhQdkDhL!?8p(teHkSCW|0%@h@TXLRxEWy%Lqoe#ZNQ*3XDl4J@k-Cp4-7dRuKB}-L z4gKDdFKs8U_C74JUelVFSl;9xLz008r2i{fgW6h1ZBp2a6c$C6UZEv^g9*%F5;KPQ zCGasBD_7He;}p+*27{f^Aj!aG8j=V`K6`^tcV?Cz5&EQfKbcx@yd=SJy)Zs5lpzdh zI71uO5QjI^VGen?Lm&1Kh&%Mkh3o^O4smFIbLwA!e8)r$87LzfbkI~jqoB;>>V0S_ z7Ziy|M1dI5AV@Tb6KyA=JkiBOWrEWhkwga1tgA*&VG(IGF$O6pKnX}vQ;x{Mqi7|; zMXBl1lM-b&6%C0mdjaGY00zj+iOzs<$&yp1lqDbqppqR~V~RMbNIKolbDxCU)bvBj z;_YcN5Xs4X0E81r80A)r0@9=;RsYLs(NYsxunAE#)k{_R1XscQNuFl)DO{m)f@AcW zD$&O$i$zA5Ub@PscoNKQSxbeflt{G1#;ApeXg_Jo%akCeqg&1roz>!2qlEb@i)oB9 zwgb_;g0iZXK?a{%QdhJL<}QW()1L+V=RgTc&{z3{VWXKB#0ZeTf0D*a1ufdpZ1&ID z94&}O%jgd|x=|itw4)*Qs7Q0B1xeHsUU?}cIH$HI4p}WB=#r_N>IsyCj;f|O71yaa zlBm?A=9oDJ%1~vBwwXE$UHyR<5}XCjxFtkHtBX|@szCZ@kP?~lEJ~5ALHainia;TI%2NrJN|F-KI!`2I081vaK#^5mZ+N@%$)#*J zAfAY!C!s7K5u14+2PtF=d(whUq9B;Aq}C_y!=hp0A{VQaQZ!>J%Sdpgp@JYFiMKJz zf-acc&@RTeBUxZpe5*hQ5_f)%xk`4DX&~1~1qsy2;Ck2fnb^D+Ht}su3}sW_Axh?i zqalFcSTPDxkb)Ip8AX3d;nPDA*uNfw&?ZPhvH~NgJd?4bdYV&V3iHrB7Ix2ixZ{%y zUpQkQ-r;tRgB}yJ=l{eV<}h?X4B;Ub(LMwrKw~*HHNu+li^bazg2*?;9$P3ulM&1N zCRCN#&c}9N%#gB_87HcVszbXIT_?>XKtakyNmwCLTNZT?LE5Nuqq8Hp94Qw*YAH1x zA>{4r?t?Tt!rt^nyH~^ zDlw!_Kq;qP2LEFhKi?%#f)>o&14TE%*!{8KC=8;zVK6CN64(Cb=)ZUVmPtr4$$622 z9l1>|JF?`ni?vJ&qY$`0IkvK$FhAKf;XGkY)X$q7QT{(jk*DP_>OhD4oBwWG;PNemghXu(LdW6TmDZs5^ zZ(Nt9VmK}|rjQDd!dN*MFTQR`bW&|ybYtgOsm~=SH7AjsdIvY*O%_@Sk%CQZf(TqG zZzR#v`~XuxtiS*AI1fFRz+{)1@Cg)XvJmZQubQte5QQ##DJYH)>B*~OStuo!-4xd- z?c>T~3=_X(n=4QbOvx5HRPzA=a4G-$qX1ji#SWWFQb=(WcC=*2qbm;>_Tv;F91Yyd<gv`10kMDC`KtxSgPhM zrU4-he4aukFy&BW>6SRH_U>@n8UhNSz))04x7w*ILhv}L|P9S3-_+naQsUwVS+7wX|b;Z^?h-aK;RivPv zZU&$3X`c>jU@I{!%mPu@uqI2jEbn{(Vn(O zr)2-FWn!_`!U8LTDo%2$*-}bv{KIP8rbFUJsjBYksESIsU?4_k3f!V}+|I115Ra;A ztPDwzj-^Mu&UG|r|F*EJcw|`KqI069kkAQE2%ye5hj2v=c}OUz2NcB>{f!YWsZA%4OqcmgOm z#7hX|^@8jygs&{>h`B!KZ?3|(yn-ubkGrtTBzj{mSZYQ5!j2MxaVpU$0E8`i%yg2g zFRX&Q0;7Spt1u3;ySAV)hGe`(2ty!*LMliEGl>1<%f2iVzUJ#PHFI7bF*j7GaT@<@ zAOy#__DkV5ffd-26cjEZw7|a%$0Z8v{~8S63XoCy5C1G_6vm)}B$GXqLp*+CD2MVn ze1kYOjK#{OI~ve8Hw-!Bse)2WPuhbz>B}L0lRb>nIMJgwvBPshY&>49J_zJPUXU() z^7jN}sHUrksK`sKh(X}f$b4+~P!K1S3_qVp12wR<=5j6{3qZZ_M3|2PHSI;V>`0PC z%Mz(a1W4@OMeGbzM${}fwgk^)B+k-A2R*_{q5w*`1S^IxbJFDN`s@b(EH&1ou%w{S zJSR%5q(#HXL-;evBqCHQZFp2^BX+|wQ03BK;u??5)9g@EW=YfjCPN}23o`$qP%cJE zg{hiErAL7WAJGNV@K8u;$^Tvs5Z7szgvZfD#DY*VoyOD?2_O;FMyWzcTBcwF_J(mj z$J$a+ou-Xj1Pokm5el6~Wxgq7D6nJNrRM}@-2_Hq3RO=L6;VS-p&BL_=Y_%2hr#NI z9sY|IzU86{EJs{(|3qsUlZ)O+VJE&t6Ix;4R+DIU2H`x8Rf|JaUlnIKj^bjq<1Wrt zf#zmjC>+lbqdcZ!FzV&BsaZbB3`=PS*Awxc%v_wtRD6!7Vg=}cr)z%6r1)ZNN~2VW zB`;zwsoLh|Muctj2kM|EAy#JzNW)2{U=q55t{%s7=I)Ll(nlT=BS-&|an$N_7^!i{ zKoZtsO5RSB;Lf;8f;SWn+8PB;N&-@h zAsUZHZ{vG%lrBoECN6LDJWpkzQuD@udX!RAlmjQk09VTLCz$B<9>P8ZLK75jFv${V z&C(^Z5Y+}SSEA2mo5(88N?1NCHxkW5tdvd`VqHQMN!~QKL86Z0=Z zLi@VIHRz-`8wC7BuxQlp{9fa2E6ROJC^YhPC$PuA&`16Zf;3T6F-mOz1mhSROw+!F zG_+tD8%#95WeonSBFzzUVW_00 z1kFc-#^*gtus%Jaf z6kWno5V1?CO%vqOO|F7BCZ%@X*N9@y6FYcXR)YiJ>?I)>fbH~}z(U*1&w_M=T$)Co z+~uCqr7a>rPj^v=cQ_YK>Y*0uQAL9oN23}W_c(m@BV7M8iFZ>9K6URD&R(>D-Za69 z5d(;#6LT+Di?f)ENh%#XvC-yau>5mPn{6IrEm{rnSq}>N4!Hebj-~=~ra+i})uJY) z=0-KdTo;nAyd)#FDi9%ZaTdpJrr;x{BxB9WLMKrz;*u#Svg;nHkm9P#*n+PVp!Uit zo!m-Crs}TYOW zDVn1>lao3_S~wp<#Hv%IQCg)@I>kyXJT-Sbb2p5e%#H)Z1I_n~-1GZ_x`bbRbBxkapsg(83`v@#M($Nf_{eS+r_996V1{?Dq<2HD zuq)(@&eqydx+0GhbV$79BX$=>Qq<9+8lohC(CkOejunkY>7~x|E@+L7iDxeKcUGj0 zQI3>I8@qpV3sv|~3p9l^dTD6{V%5BLRc!w%0)8d)=oEz|xSEV<*DN?kc7s17pfPp> zNZj|va!gyZ238K)I5ZSh7uBuZ zayYsRMm!Xz81b&55N0)l(SeeS8R1D`thkOYxK;`$7+nMJ1ZO8|uVPj;<7O4UTQyhZ z8@%P#RcUo*WR<=#E?0l1;kr0!OpfH#BUnM$j>9RiDNBqIcv%G!ZG;YurxoaysaX+5 z10u?OJdxGT6m33)9iN(|qN;9m8*c=oa7co!_==K&u&bhlUTd#)$_mBzuB-MnZ&Kv7 z;jSfoDmCctbSmdjESU>jXLO89M>_vv59Z8w?@bJxEfh<26NU5M;^z3jOdi?KL9PAV^u zim(~Y%Abst`6Hz$2>A?=*6vYS4_l{Tg`d(#Hs+Y==(r$NN@}S6KURlwuFhD3++EUy zQ5^rSE>iNvF096?%q;&Iot9RwE?)^5pD_!q)5>cMIb?g1qUWPs1TvUh7A)E7${I7K`jI_YRp(rBStAvHWDZpGRnb% zNk$S>Npd8}l>|Als?z_LSG#h&Nnoj#fk~nuiINtHNVg(0M#zXDfye|&<|crf1j*d88f&H% z%(iDp!xPgcF09zF;GZ?6Y>_f?a!&$o+hW!TS8m3nW6L zwpOwwNrKl(TuV?QA*GZlH3>+V*qVTXB(S$kOq_AJ-QBvA^d2s7igDSlCrG!OyZdGA zvRA_vFFB>(jX_4o9*soc7A<2oB8dB$eq7rkqeO{NQa?!kA!!teS_DL*g(hQcvc)C| zF4!Q03PR{$gbOZ6MuZPa(OD*0=r0;TnBtXGURk3}0wvUB zlP*P>l5|l>P-bM)i8+#)0!dJjn{B>X(VTEbDQBE`+L@;olFaF6pA!Kpg`jh`G!t1} zx-?NshLRN^Wf^fPX+lj=N)nr0f`sW!n_g%r_c+dj&SZ6cZ>hL6oXZQKy@*?H2EG-SVac0rD!Lz;AZK zwgCTc^bY6dy!c9?K)?zZCtSe0RV>B454))`y#wDHrE&i*p)X|@!#l;vn+dyaa}L+% z+ktTv`K*z})?Cs|C20W~W>G*91tOZTNX8Zy4qY_Sn;4xm(n>eYG|`f%rQbzSbV#6x z82#l}aAOd?#TW>F%^-XTl0AmmW{XXR7RsIV-rHq^J%*3MmiC!VYXw;!U7U$_T4!#} zH`2I0QI`@B1HH}m;%C1Hw&OFB4f)w}OD=gtKn>Q^-H!>@Tj7tvn(63gwMvocte!qP zmtjsuHAeIWh_g)`Y19$Uwu@yu?zb~q>F>D$FMROC58qYs$Qz&h^2#@#t5?h~KYRc2 zXt5Q+T00y0mwX$o9GXU2%g!@lnbo*PfUJoZzz7h8-2luw&`IEG`bRMFAO}jx;f(_N z_nHoNkXRWhO#l=Cgx+icP#c*G?2J{jx7g=g`pKaVvoN6iK%zic!qS6=m?bJDh#*Kv zL=+4ZiD-#$CCJ*EMv7P=D^XEJG?EdGwrIr#Q7tfgVUoGd{Yt45T0jNl3}`Nsto(B&8NbJE=^MEX)6yiAIh` zvaKlUcbSTw^EMg0)#-|ppri^TI~mGSQqOp!93G#(gh$cb1wX|C+-5Z5y>Qi0Z_r|r zew?_UUIOS^(h}ob<^rc`1#6gfWTP3)HLSkDG70aB=EX{OvU$N~UK0EmULF>&XdY0S z6UYc3AvGLpT4$WS0ocM?HZpATh5+Hjro*Nw&)r09f%G(4H0^~XWQk-hgSuyF+@gt% zAgPA*>5SbnLXZxvfqn1Ut1S*zo^`?>8rZ8pUD$Nq8uml7K(1csSO*e6~!T$x&I?z-N0ag<+^^xp< zt06!D82B4_f>47c6wi3EE3fg!w_a1IE_j>EUzsIRy|Ts3O8fs7vm0inseaMnfcm2! zBn^n7k(iK#RYb%ISD3;D&6`Ui!5=MTVxr6L=$a>zk(xhuAcgjkM89ZyzrO^^ETa>Qb$NF~Hn#DlY(OGW2aEs{&7B9)y@Wh*Jz zQB-?Q)h7WhiC6gt&^bI+Cg%*2L&N!Z!r5~1eC206Dyy04TB>>C(k^D&MOovTakFp< zOlp~WTBwGWs+s#4WP%AaVKf)A$mq`)7Wi<{L#%FSxuC^i@f#H zm~GOt?6PF6fa?79ZmL-_VTZGtPco-B2S#j@75ijT!YzHa1sGwWQO6nqK)Mmi-$j)+ zX92oi&$56BlU!7!OFNpr^UZIkJuW0jaOlmBl3dv}>7{ZDYSGYExr8@7Z0~Vf+UwL6pl1kBmwYYgnYNj)y?vOjThJNX%TADSO;D-M-bgw(gK{}Vd-VV1&1d6+W!AJOw z+z$a@dMbV&SNwySDAgky?M>>>+eQ4?8! zf?IgF#F=~;M2ZO)vLx}K<*!KjBwmqVdXZJAg*%HZ*LLHm}Fjhqw){= zjg*enFM-~pGd21Dc~nS4Cx8SUosP?mP`L-;zr6RD!(*LdLx6bmP|4>M(A=bo$-5d zu}|`JGPB2P)aHZw#B1R+5!P{R8WB!zq5zsFFi;3E2eSa6Cj=K%ZSZ7-u@N!F7EM_w zg!__(-3Er%fdmL}P~I~dX;Dz@W*-VgV7I4xgLP6Gkp++teNn)D9ko#&)ra`zhafdl z4Dw-XVITpbA7X$6(wAHtVNqrSAsJ;O6qi#m)l!VpQ;m~0nV4`R^)&z&7=1TfpRq>W zGf=3pGPEIkny6ElcvDxURjUX&Z=+c3BL$j33Y#zro6sYC7a2yeWm3gfk+NlPwN`Ld zjBy1iZc|sVBR+BASdVfP(0EzY=vV*K$XP|vD41mxUEvdqR6C4>jhIzg;z*5V;f>jt zjy$m_mX%kZWsYN(bf&cvX8~5Jbx@nJP}!$;AvjGFoh>c091&Q5rZ$X z=UqaW1QF9e8F7)Ur;)BFUX_89Cr5k4qIR;BH>J~tH)K#v)sGD3EmIQ(cCkbgwM1G# zVa+F%&R3NXfVxz(Pb6!Lhey$SY~B)av*ckbBClH89^i7l0^e?NPJ=ttT`g9>6)?`o3zO%^~jpI zIh(dQ5U{zMt+|@F>6*dGo5L9+wON|ES)09?oWE(Dq6wVGS)7#SoXa_zs_C4}iJSFE zn8X>K-D#ZH*=2pkCX@zhphlFRAvk7eQ0QWwpAix(SZcz7B2=j$ewJ#u)M`PJejoUO zTf>(4gJU8nf^0;6BY)}a3>8g830Yr}Dd-s5FSfNp^Uhv+F1dG|$bQ8iFNeU|xA{q{8b z<}^dvQ6sVzgQa^sgFQH!Ad~~76&Iy`S&1>lQ8dDGY%_6jb5k5O22sPLd|^B7V?8tB z95JCggI5-)cXB>bOY;#pP=;_V=cHeQ76MVFtw)bI7X@TMm`b)&h?z7#av`K}76i}= z1fU$Gkf<>hDX>E_it4Bu@g5%0R)U5qZj(r^b966724qkMpX#Zh3aX-7s-}9XsG6!= z;HjhUI<5c0`l@BHs$3AQu*$32YOJohszQZHXD2nbM>EeAf&uy#S|e|RLtKy% zR*AtjMcSwD+Bw8^ubBZRf+t0+Rzt*scpFhKR1jaWmwE<^ph9?&j0cme!3CB#FI(Vw z0uwP5IzgUig#ti@88I-|<*>XKFbnHH99yCnv_C@VkwEwx|H@RKQL*`9n>V^Q?9pjW zWi7ijaEYQHb_kV{XhdcCvlHf0n{Xf?vP4$HVPmuzJyc^+V1JKue-CmXfN6hPvKb+f z1S!#JYUmlrG#W}ULue#}3?neWS1buo5OQQDXCVO*(i8Y2Ek%}2qc9R*QYL~*0Fo&M zWIzg2AgKRZAejX{aQ%v?K45L#o4QtEJ93UgFyQ+Ns=C?Ywqh*L2|G=#YpMzUIEaX3rLkj&LS&2@r> zqY*4*L;j^369FHXXcO;28Iu7R6meKKM?0jDalwI$J<)xtv5Qi`3X(AjThO$UiN^7< z#alcEqyRRgAejU(22FdYb6gR~Sd5%{raKi9WY7kk+XkaM$Spv~Bv8mLaLA*p$cc=| zjQq%s9La|~$&F0OmfXmT9Lbry$(4-Bo(##9oXLk=0-F5Eh)l|&+{u+Y%8g9Qp=`>m z%*vyS%AUN+rku)`%*l*Q%adFJuG|8&9L%RI$(?-2FGY{2^>?dP8mA#{yVHAH%S`|4 z`kwCNKD=dj2I)2Xb~a$O7~V{-$OVuz^LtpEyePC%cEbhLr9qLBdJb!_^-_|rF$Gir zK(V)z;&E~(`Jwx~lK6X)|GWVDdy5}hV2 z796vjHfu+@J2|u{CJ{ARnFS|oAS_~)%!kqu;!@4XME>ztQ7|H{BqHQDmfok*KL)j% z&}fhXMZLIW?X3+v8Yj! zG@780dOHw>T2Mn0DQ<#`TVTeCYR8L70BkrYGqh!(c_)?Wn!~}lc}53tJj&^ z*L;1s!u!{P4ZDL4x_oWeg1y&(-Pnsw*pMCAk?q)ijk|~4*rNN`lD*lO4ZOe0yT9AI zpbgl&TiK+Y*`C@Z{!yNm)=Egdysw2@>*BqxEo#;hgQz9}^m$>E(QzxdpW$1Bwxou! z=6gWW(a;1hx`u=znxIA)Y$BSX+V*RBNg4981X3tY3!o9(y^{93-Jf@a&`rSOCEX5M zqT7bh=FOl)5`6z;Oyy>7^nrN%NR)OXEbx|h1kj^du)%&wq(M5b0p4$H^C3J$hwu{x zb5qe2H>C_0!$C!-m9s?;9#b{tQfpCf2DPrTB&M9fuGfBv%wPV?!kp%1PUdi) z<+dEke7yl?S9jRskFd>d`%13zR(I(081X8kO9M8*Rd?h=Tz?*T^HUx0CiC; zA=_RpnW!Zy&kzKA$?_8A_@PF;w8eXo!QMc1!Si+r+0S)O*vt zM10xnYOTgbC}{NVPP5D;I4GosJ{aBNwBG$2PemwAU3gBPx9T9e_4wQMT>tf5FY279 zdIUTiWGDd-4Q%|IzD3wKNJ1=qGQI@@GfYeXZ5J0>lTiP*hE^<5k0AjC9(LdtKHvae z_=IjW1-{<`r=);CA|0|+3LbNl<5QK`sZfeEjx&FaV^avHrSKC8kN?9Xry(>uQ1BU! z9FZAPFi@Xy9$zUlMeejL1}OxtE;FYVPINPyLBp0+jsA+aLaFF8<`N=HOq<-ar28&*kh7 z%<7N*uZ;a|?*6h&|DJsQX^#K)Z{~-bxd2h31(yv`q!^5%MT(XrQIJGwh=hPd0uu=U zv52wa#snHGCfJw+NrZ|LB}OFBP^FY4QV6h&vN8Wklr5XMY$3BnXU;KN7`k)`QD{q* z4uw8MiE?8_k`qZbB>?hb#;FyRP+2lXiPkAD32>PLcFUA4SqX5J!gUJQt!=d~5I{gk z#RWnZ5U6`M?~=TD?FyOjcR>IJ2_$SKtK@LkwOiau89P=h0mW{~t__QsOOmCXfpC_h z#A?NbQpR+y$QiZjj~tOmMZHl=ln5~;z0{&E zcW#ro?nqG}5y*5fCISLcbnA|(T7stN&dDDSj$VCv^;2)KX2!DMuHKs-y%Ug{m`(I+|dL36{u}GOcnQE7!Gz)%7f0F`Gb%WEW7D zSE~fD3opF*nsx!c_!`1mX0=sTlAC?$miz~)>j7X$_B8&QB zGH4_MdKyEMRym8pIW0;inY@)d=N$CMO9)-_$s_k1b<_X56rJ_cTVMS1*B2M4a)FMly@lLi=Y4kBe^;H14Nm-U zA(aY*Xrq6Z`WJwzS_6qSrb?RHBBX{|`)!7HYEI&rxtI^3?tmgH`G?Lo+9|1HJFqhZ z1NN0yxA;;*EV2lY%q+CV0&64D+WHm&1h6f;@Wn3Kik4mkBZMUk@GllpfC4Dv7 zSeQXfWWv&|r6>zAm;s^ml9m$AOkonC*#eMgvXIz_5Pktm5NO7?5Z(C1CsFuKCPdX9 z9`4YG^101*d~=^qX#qW6A&C@v2%YKdFgl{z&<}&7iGq1330H(rfAVuO2BBsoje5#b z^z#v-I7mMT($8VaMV9|0aA%9JL0U;(5*!fWC`KZpO&)7g8wsVTk1)Dgje0alLKf1H zJ#tTwKs13(0E$nK+*2eW$tT2-U;-16zy{tl$tID2lb>vo@HW6nL4nDWk}MJjFsVtz zZ9ra1&?K2Qu*%DEKmrrk0tvW)ODefCmb09~2Dku9VxqE`$9z&w=9UmiY;lZjR9+kd z<{yhh1&$1A)TK7%soD^rJyBdDd~~BJROu&+Sv*;*t|?8E2&^-?f+w$}kStL(e-YM&O1wg&4|Uk;p<8#IQ1qQOu?j!|BCriWBeY1`=6-TX(b| z5t`2IZ`GU`&tkUJ_w-CBHS?bLR`#{2KDDVh(@9KpV=1V~u_Vc>$b~j#5|D8QeNjQc z)MAnv+EBzH(@UOyQ0Nkjq%=XB@*3aZ_95c+6>WTtQQEYJqqgPEu!Th|VHK;l#pVrR ze^W@`07p0?A?|QmQeEjZo7u<-WV2)-fdURA0g!M&cfliFWd-uL4RqGEiu0`MVhdUY zaKN*vg{^C=R67z7fCRY(Zsevw+6g3J1D;Gk1VlT5B1LWsq?JHzL2DSp99M$F+z$at zzy;Ehp(6jAD?#pV+q>P;u5+2&-RaVsy4VVYAZkMxLyUqF?)*n-`?@P^9^}=Dyfq>a zfys%UsuP+)Mkim>iGhRT)bh2YJ4x|xH30;bT1gXW+^OqSuF{rdt%WjY(V$~6h?%sk z#Vtx$e1#rJ_M%|$;=@su9-U3a}<8Q*eXqs1OczQ)HGixEB9?GyIDLHHz7kDowTRp1m?I$XA+)NVd~+DzPL5@3#pJK z$iDFWA7$uyPhDl@SQb^+1PE}Lh0evGKPPC=vjtFaAtogcHP_CM^{#~ixiS-wLb(4v zY%B?!G&LXD%Dq@rYcB?Dc`t+%NE8McvWHCzGTrjZa$3{1-&Ch<*GgX0QC>@VE7T}*wUnF< z#jN=Zk}pCMk;uevjs>h=&9?gN$!)Jr{gH8u$nP?%hDz%bJ7ZFHmSZh4X5NX3^|8MbiA7K~rJnB2K> zbNgHXWU>UaGz`CMx7}t>XbaZA$5uyC$IR8+mM7Phy<{ij!ubyJPRitdZI#*ivS5vQxqP-qp{&56;ZW6dXYnd#aNWZMB4umc&jX9!bN1_ z6MKuLCgCpaB7^R`Ja;=ba3cuO8ZKyiF5{XvXp4$1a1wI^91b`)GN4Al0k>s5HY4#a zkSLUja5o7e6lp9JXNo0HLN;5%A7KL=b|eVns)(cFMdt$?UChOMthP`pCS`)XA3-Po z__|ifM6hd+Ov^4aLX~ZL3WJEEk3$cK3=W0(lygEkXR^pgoE53aC^l>-jIbbyk~xTC zI$pWCk{lKSfH`OxsA{Q}e_BbQdoiiYF$E|wcmgt!{7810r()4La*?R1aXA2KA$duW z`;rI@^SY*pxEx%H_hG5L%Bw6myP2{Xz-zm!d^?@usV(T3EC~ODxl0Jc`~ArHd~JgGWMt4gYu`H|g-jkTf(0}H#cQYQdw3CLI%nurNRn~%%W%cIG-Jgm#)OwH6DvWqOps0hj;&BggX&YHmBK~2uu z0+46}Pih?LYexmZrKpe)E-)>Z*nl#yKLwN*GPpPC<2UJpM#L$B;o1P-BmnUnK>K4( z21J}^6rKd&f_}5D`5Ug|11%}Y3DP2gS^BQ>ixut)z+gPSW&F*ZQ;gOswlV;&@G>v< zGOzMVP2lMg=_-NfTg~!%FWEDm`O3VhASt1g2Z!PZQOy5P7N;9Bd*U&&usOEiimzCUv_Omr2mk^wAQxL8B_;r1R#&4 zSf~AB3RQcFsxXw9NDqcUqmr94E91ZWAl8W9vpMIFhJtC2NAiZxD^ z#Y6fLMY^?J1C&xS)j!#!C$TsA1Fc-*t|`!^@528#r_&^RJGQIwzR<#-il7o+<$?r| zf-o_+T8#irA_LJ99wp!a_oU4>F}GZLz9C^pYx_=l*+$SRgEDx=;rTAm`bAe7&gTQI z2*{5K2*&+Tf?O3>QsNR)O*mfDlU}o>Su$5rJ-CHap@t)sldCfRO4Qisms^PxG;7>Im(c_B#-0(-NP)*@jc;lzzDRQSmA))dN<+Z0PB+g-1M#N>`s20 zkO?S(=i<(0mCfn$E#Z2%@)OtgjJgRRf!S??TB0{=G_KW601begWxPLK;sD=TMs^#f z@jEWXFu+~qH{o%fLoZ*?9|EyE6VngOZjrS2FKJ72P zY?`%+(ETmDvVn-e4P5I1;3GwXr@8++D2rcT8Bz}lF|tSt`I&;OXbZ4ljFsgI8lzDd zvkPTOAaJQda=}q~QGhCppt}e%AnXba(h8ys!V~K-G31Pty5GBs4H{;ri_I_6m`g9?`nL=i52o`bAxmm+b-xC!t1761F}vjBZ?tX6uq)O#%+U zH`ahgE*YNukdQ*TJmcCnaE<>uSS{tN(d3WxzAe}fToX1{!pB}lCS@z7M+%%lmAz&{ zIS3ip1O~fGK_e+Er#&L9gaHbLc!?C=*Jq|!TcKZBc{FJnBlz*+kCmu)Q5Kqur*pPB zbAcCb(F+dJ3%qd2A&`p%xR4}h(W4vZnao)n^_5r_Ns5xFo!{d z!Ry@EBObA#%(H>P_8tE$&+N?2Fk46wl;T>(o9i)mClWS?kE@&l9QW|3Zn8&_NEJ z-=J<%>cP-Obx^E!DYBa*px~R9xE}UdAETKX5LD)cex45vGOd{F#@Ml~kYMSy;4D1R z2%drsu8Y8s(IvE?1*m7wXwnM_f|^Zlnnju*^)b<)*&yvv69qkitcc5Fxg$-(ezjqj z)5xODFOZQ#8uI^%ILuPr7_<2B(lXo9Fms7Gv(u<};^dHoB$h)$?A+?0i9&?a4*w=7 znj-h`ujRI;bK0`7-S4}!R1oRcLsRC;lZb?PkAIc0t>~yI>JU)7R8>5+Qv)O)hqYJR zkxnIYA&-$$q_smSKzBXWf^+gzB{(=axH6$OeU$Pusq%o^HZNgLF0d0aNS19hI4b{g zA_3(%A-FB)wQcJ?H%SuV$?Gadb2f+9CXZJrA2=%?6!$cgd_6^z)7X9SVnJ6Y3A0~= zt<(_#lG4zdMepNKJwp-UrbeNcTR~%>{8t1PA=XHOU167iCfSJMC&X|Uk{uT*a4~qk z3%OvH3UdF6@;<4@6UfNBVwnx~rsKJtOxc{Xpp(jP_!&@Om+1O6?`9cCz^(00XsQr0opT=;nUL<(0Eb?vQ{`(FsW)11oi@3v^u8Q+UhW>b+vz+G}{) zTc+7Vc8m7h*tx9YJume&U*JhE(Us5C!5s4Htz*lq63|WK9KQ83-y(q>mJdG8+D^df z_?qYVn|DCr@hkU5o)`uY#UsdnQ4QAc)0dEKWcQm;QNd9x4cv$kwRAzLR>8@IiHr&( z%)9@v1i=Uc?F{E>3kB{l2PUxy?l5Ip*)6Q#7F>(JXdoH2iwR*=P7}S`hGUeF6wWTsc0XLL)|!VJd~pF0jfPx6~mmOBz}A{ zK9oq6{PhrGajIe_CZZW+3QAOs%;WE>krx*4Itz30|A<6QxSHxwjE-{5y9AMw&{Fs~ zMM1LEN*%Qox70uCR6Rz1Sfs@usfb$??h!;Di1NTKKv<42DZ7bqdQfPl$|6BHgKfJ9(|moEhd zap^Ka5&}tL+T5uUB*lmh9bPOdWunfc0%s0nx|ARggaZK-d>S=jRi{;RMv0=us}wC# zwv5%XC5slcW4DmmM279AF>v3urR(NT7fP4j3T`4(?}P zeHdC;Uw{@O2;hbgiU=Z!|9RMgf+wapAcHBkXrhZIeu(0QH7-~qelJdF;D|g@$m5Lu zaj^k*U}<3+l7AHx)oeCt#o9pC4ab*Qkws@EUwlm`&|cncBn1KEQ74dgtMRp0mt;8? zms_ZX#g|r5E1xcim5*u+rKu~;Al&7ClD6!{8WEI-c6oyX0#S#%MAcRSf=GhRG z2qe&?RRqk|5Ip%r3jh7LxFlMI>Fh^jnq$Fq@bdh@pn;v(6G5 z=2+B5yY95@s_SmKsHs~nwTTfB0arTVTdTeW^(IgRQ3R~rt_86QC9tm&q_9raMgfJH z!$}}TZCcDrt#aK>Jl()iNN`=pA4{xpVBMK~GQ}vXyz$sx<4nS-kz^-{So61=8sROg!=G6%l|GQ+Wd~dR9_VuTY)14iwpUVyT%} zCSqvj)?DS+Wj^_kMVAG{umQZi@&t&Hg&3%rr5R?ILH6Ee`S(wmW$a>?(AY0Ip}EZG z5|b??IcZyf;Z{QOh9oc%WHqyifb?YLK)p>aN}$6P5Qakru_QrSm~m5fup=cEa%Y7t zoQ{=XcqQk(ZwG+Uj763~=?ZlBep-KQ0kbv4uAtz0W%1eH!yGfPu zPYO7us90$#RSgeUuaZd;n1U%=5yX$cqNd&$raeqzG76ChTw-uDtZ`~0T%B7Nz0!Fx zEkxogXZj`qvJkl>lrC6d8kag56SI9@>{-+DXFvbvB`a?e4QySaI*0!P6C#XCQ5)vShqfB-JM|s}!FyhLF2*Du)=xk?g_12phq;v{U zXe|-I6hCH`vA%mPM2^zf)k#1m+!UQtuG0UiU`j=py|JSP4f2#3R!K8qp&wd2gFXSG z&yuV096MS1^ojVgPs=vQ$Zfz;Y9$ryO9k-BCr-R5KE(=F|KxgBcJPti91DdFoa9y;O@e(d+{L- zg$ctR^lVr??)f2Z_W8@y9&AF^iMTVhar^heoo^VD6STVG36~)^TUICI{A9 zv1)O!sqH~9_?y~<)O|?E2?nF-lAQm5DVh=Wjc>RT&b4rXZoZr-LGFagjR+)E9syND zb_pnD=4lD0qSQcOS(4l}q$UJVKoEE`o0H&c0yQ~EF8>T*ssJDX#|*%u1tozX_^y|(%%vwQsmUyW;F|2 z*+7oen^BGAOsyKpQ?9d;ubls=YuhQyvFf&!o4n;VpDIvA4z!v(ZRTIoInaSxG?o9H zYdmK;35JtHx=F!qcvJVhwc_vT2&_v4!{$=fnsr~#wWV8l-v345^DUB`J7BQgO zV#~wH^1t-*9=*;fplKL$-t^i}G+%LzlC&I2fgpe^8bm^Ef=I3WH3v1+2hH?9C!Lw} z7bX`B_G}~|iBb5k^_BlrOo(&nLKaG?WNiL2DaN4mF_2#itO$#}f;bjZ=!LuY1rK-S zPx8CP&k)TH=ML_|bLe8ind!L6_wO(;O9VIijB&T9$4XDNUH_?;K#j;{n) z_m$xuB?Omk(<&*CsR=|VfeJ?CNi%s~ZOPf}naMR73b%mM#ZA(RsUB``!#Q>Bdrjxw<(;_|#J5d*3FpeLshPz=9RuJ1J zg4??ll+1Jb*BRjq$ zjJ>1G5nWWF98hV1(s7knEmT5a#cupzOVE(Vbcbu?6+^8XUSXZrRfX4eonb`}?{HpH zq+KFzf?zNoYXssmC57I}-RcxYLyVSUxgDu+mS^>yNeUh$1=HTZ*QM-LPw<+qOx9^h z-eR>DWkHWb@mjtAbzZFKmTqm{LHbL*9fYtD*I1wi{e(~cFjrmRMfu1dcYPFU&`oqG z(jLu(nUEywB?o$arE(EiXqXoQk(YYi&w5RtUT{e)ZqVNpL=-$md5z`o*;jLzmwBZN zd&yhp!3wJY0Z-r$08tVFISYfSUv_MVV(w6pY{4kV-&Z&$X^_HLcnblLLKKjKw^So5 zpho;j0V$B*WolH$h>3@xM@@+bd`!s}I7kU_0SUzB2E=9w%w}wIKx~r0Y~m(tazF{- zW`zJJ2?!@}{$_3#CvnmyZu;hO*5+{jCUiC@a~kJ#R>*Err*Q`7aO$RVcBgjA=5`|I zbBbqhx~6phjwgCD=XjbYdwyqjI;VSHCwW3=dDdrizNT`r=X9#4Z|>%Hw%`k1*1>-pfA{AqJ6|;-I0OLFj`vsBgSP_msvZ*;}mKO;p?o6vpA9 znbM^xPo_~*3q=V96%XHiAw+c6q=6v;u-fnhX%O}E{KoLN;M9$(=4!|@W8m{8LJ)7DM6rHkNhT7iP$DgorGukxxu_-d~X>#yP}u?|G8+N!r0tFZ#ZJZxArQxjw`i7E4S*Zxk4*uwObF_uQWmS_p0TPXk)&IxS) zp^o2~q|b6;WYGjhs#a3GL`@Kut{g4mMMTXI#Z3x?MNl5*N#yTDNv|-4=glDXXcDZf z&y|=3a>WdKIVJhf1!i1H0e#fq97)H*Nw2g-Di&5%42O6jkXsNYUQz~gd1Yw~pJPN< z7PRH;@l903Wn&!6c>!Pb{a)g#*WrqWcFEcjE``KY=$<+T-Y#xFvR`7p5Oxel`)R>r zf(QLgCNzdBXl^E1kOFRK=0K>)WqOO1=@0>eMQXrD0J`d7GA4u}=7afe@A7W@32*2A zZs&ro=kCyAx=?`f?(8=23$9=BzEJb-?t?An^G@&VZm;tyulGuCkzB0z3gD6d#GsN? z1p+`2Ao=7E)>I5l5Fg%F)DdAe;bGeuVN!VAoVd><;f7THC7onY6T%@BN?}G|kL^j` zr@bVQ4#XA)9s!J@jgny(J_^lh;g%&ullF{O&Bn2F`u%8J$onkXK^ z$Rt93o!A-P!W2%l8KNU*f+9`}7i_`~f6L5}lQ?ZoB%mqg@Qp$;Os{2BKyB2sZDOMK z({y~(oRA_QC6rC1OT2`evE|bev!cG$nMQIG+p!833zWGKq`)yIFJ4DW`QpTsYPHNq z5P1v3F&szmUowg=vjn5X$RB06Ti{q@cMMBvs^-aXFCy;{MXU<+Yy@L@?Ld?Jdxg6m|hs*57`dT zc4GhNg}J4adQ1?@&y@_rc$DZ!NgkOC`=0%Z<|W{!ck z5F==UhBUtNCTJ$>4ohfi=7)6{4Z(+4oC;)wNk)@N4|xUlP8j#v^z>#m@OpJu7jJ`M z?~#P{^_q3?W^e7HHCSUcTWc>|pS4`mv|N|@0-4@ z_a=CgJXJ9u?FA%_j}|YYC+eG<`l&^3EUvY3aPL|P)r%G@hd`z=qYlh3rp)rVU%I$z z%G|EUT^Jz`2MTRm##CI!sfjBl^_+IS5X`E}s99!+wRE3%PqiIN|=h+k|dZ?aYH zqsG4NP*zhsZ&G<+44@uc%q;4f8BU&(4(43WB7e*{LHD?rOi^Z}3`5;QYfAE<&g=9W zaVPB)y0$a-c{Km5pL5pVJ;Y}TfHS)`90HybW}4Ffl8OT>!Nf2GWLehb%|v)N9$v8) zSYhObYHboMcF1N)a}yV0WI-4Zz}TuD;M&hus8=SC9~pd8bNdCvU>%w!09G_)Zdgi~ zNuOO@H0li|-wGe~QT6%WL<#wlfSo1Znvh(ESMQ0mwAbz54xi-m4O`2)sV$=M zN$Fyv3Sb+jsvu835snYmpYV*$jc4VM)f80THN=`HGz-%)=b2L-)Yc;x_6Z$wm zt?~qqQ@9(LEUo0=#6mp)B#TjyL@_8)qs|BtD^4T`lqf`n2^0>MkmRC- zC@n{p)UsuyCa78#O1Zc&LK3VBqevMObC2Mu9+m~ivRvmkk zfRu$7wMNL9R7y#!Q^RgdEG3Cn#*Z6^jjW|{WhqJ=OW`O*bJ)(DH-8o#nzZNApiO&* z%y~;;0$Thkj18M3?Twvn)7Fgto44-Ty>I^(9-MgY-n)kzPYzspaOBRL!`@PydG+Pj zsbi0h-1_tF+Ll3Jt1Ze{P@BgcafC$t> zZ>ORLEDAmN9uf*Zg_M|p03{YuK#3_Xq!54vkP3o;06zRs0Rj{dK!G4iBtVE1R}?@+ z7E2t_!UaflQHTjuBtU=#ZoHAi9$|D*p&k`FQGozXTqp>nBp{Ih3@5};$^+GViY0?Q z1d#v<%!@4ngB(=oz=-mL56p^^@Q<$qqG;32D6)toicGY~BnvvNGHa79^yD+9K2O>c z(6adCLQpLZ zlOkGctG!m+Y`K-T+Hb+_7F=yZ4HYwM6N{kD0S~lPzy$xAl&g7vlGomO8>$yyc=^3o zA$|SrH$i!~68PVJ15Oy>g%57nV1Dyu_+f<|26*3y|1~IyNjKKGt1mz9xYD4Es;JC` zPJVYM1SV?m!FOR+kmQ&bYL~BfgN0~hp%zeLLc`4EiR zJ(}So=%T+h$^weoum~d(k<{ zu>JyS{fh)E_(A_&CK37t&>=tJU+C}$z=oNwWDO~p{rtziis%GW5B!VG7^pv^%uh^z zYsi@*GN}gt;lzMQ=wHWtVxF#0P(cRV7~cdG1-#*JAw%(>K-A+N88%RY?;;2Q<9A>u+VM54xQDMJd-*sqdcBqX5-Nh>1TkWy5mBH8F_LRi3#ZUn|Js_2V6(ov3V zq@%0ts3J!)63POw6op9WGE=Z4+oqtrBzWaEtswvqCE}lp&`v)BYS+;Ud9y^K3_V|Z z(<39{C_B+9SF*BXC396PLs?QYctX?`5|yXcETun8kyOjnbP*&Z0SQpxPgwTE8F(Q9 z0R*9C&LRng8GcC$4T^xRE*VTr3X_<_#H6b-X0${WCQ;X8*7KgJ8f;O^Tj8?iHL;mZ zZH}w|TtJ(aq&5alpSTNV@)D4~B8JY1NsM9;W9K_z7|(T9>|N%(*gaurPmHvbROLc5M8lx0Jg%vYYF4ArS`ezO26A1>r4`)I&WXzOTGy1@AOgD?-(v+rvB@n0L(@+Z zkdTq}urPW$9!DeqM7-f-BK}JgK~mDYm;{!vw_6KY+=5uS{BC$;naW|)vIY3{WeNoU zF^FZI2Rp|^CVHFIiugF2n$L=MG^9OEX;G6}(VUO9OmXesiWNVikSBB=3?c$?3&HvA z_O}1qEo^C6+xy|xx3|@;ae13t*&bK9$aU^;nH$~YLhvusoo;oXOP=%SM7!NJPj{8) zwht2MAniFw2mxf#ED%6&S$Ls5baWO>hrex{H<#V+M0vT*08*ZE~l&zoaL;i$;dfRNw;&K0jo4TBfZZ{)05Ma z#&kO^{b|1W>%FBGsK-#vs@N$~nHFUat5HS(2wW8kwZ_C(;Opv4fyyEOeCUh$Tf?4N zs7V&Wkx8*c(h+H`X;r(aO`+}5tG%>o(!S9Wpqmw~>|shE<^N(Q?HgW^j)g$20oJpMbkjGVD>8D3t9XFQTyOF&74$YT~0TF)+q zdgil?Gs8#o(e504-t!*!sK*$a!~A^Q?Vv?oNI}=G(6u$=?$W=j!omD4>D%2{)W>P` z6mnOEuSNO^wF~yHbA9Vp7rRehyY$zN-RwxGx(l^i5VE7t>{!40)0HmwucsaDct_!Y z*#35}_r30O56V_@*td!RF{7DE!soO~%Z6z6g9`!V;x+n1dUIuOJv`!j*+SBo$IjEgQ4Uw+dyQK)K}epI;J+q6@Ay zJ;?k~q#&L8q@F1AHl)bsSmR$a`OobC1Q3(T;#UIbR|bSr!bvOI1e%^DGrWbGwrK(> zumZV-S}>4P+@xM!=+rPp)jF-9Kxd#PF4Yi<1P3MsLGT1SP)tbB1YfYAKJY+jP@`7I z1zpf%D$k&JPzH7ItxyeQdddey@CI2$1zV5^d5~j7aN}062@48UR;GveV|^TIkpyJc zUM5)9>)sl#qAm*iDi3A|=_oQvbznw9iezcV?PyTs4Oc4vq=M$yaKxo1WZ1L~YhjMZ1V{!s3P(_ zz~?cl2er`gwA9hG*s)qH;~hIIXWZ_)HcltTqc3&>@4n0J=5g-4%OCCTAFYnI1hOCl zav%M%ADKcS4H6(7av=Fp>lRWX3$lX(G9TT}wR$Q4As@0K2Qum~@w_OCfo!R~*29L_ z%Mfh|DY{TTF7FE$WWM0z@@U2qheDq|$CrjesQkiw)TX2)QACjBM@B?NmcU11glWu( zZC-D~D9kBi>M5ggN5E)nT*UV_Y#}-cU z9jHyzB?{yOBd`D@>?9I|$;^HXQ2xZo{-js#B*{K${qB#+5QogD0?Nq5AQZFLnyMgJ z=@9F~3H2jT_R{~cCMWzfj2)3#*hH!Qb20y3UdvSFiNA)aQeL+uzRovOvyC0zUNH02YWolC&v;0GFV9O(9Yr5>M7(#;}}Ca6s}FAj(=1rbXntXk8E_i%6bw6*uPHCws0_h=6(eP)U-u`eQoG8sZg zJ>^wrtjkvI`rPviyG%%L>~AD0k}yF%wE)e^ZvZiqPY@*xlx+Rd&ngJkn6QGB^h3^A zMlkv#Sj;I{jz;o0b29aTNDtt%YRSqM!6VbcOl)&i%coAzupM~W;%g{kqOQo`A_yY#X1HY5MIp3+ z3^<2SKIr1ez%OKJh{EqAIx1Mo0;&qAB%jJb%!>d_?_ILQD~Xawz{tX$5?iq~DyLE^ z!#KiV&p^8kD#@t-LWYk%KqLU_=)}|`2rfg8{(|Kg;>FGo)+(y;YUf$p1QO)3Q8Ix5 zAfbdWQ&9e-RvMX+&+L)wL|_Ng{R;El7KP1*S({G{JVVB4KhO%}$DmBOiJ>nEcC1X6D#w6`%1*tJJF5LQ2`Xc)pjd)0(Mwq9>PVEB4m` zA#i%EDK%=NOko28!?ap-ZZ`<~u%*X*6cA3Ejt3=mC$!+04T6BxO*3|w6k1dhMuBjt zE>kJB>{!+8R8>&Fj!-4IP*IyuM|-qYd+spxQ3utvO`GfzgzE%^Pl&mo6*&r$IGOik zB%qG}gjzdN%|ogvqVq-%Jy3!n$YA<>H*e&FhrOb?Wy6V=rzEHZqKa6ufM8NA%Ooly zCyBH}cft}+uOha1^=1#k*xOs(oA;JLjJvgrzqQ+RWR1b~aiz#B69A73Liy;Jr0NKR zU?bMr)uHOsOnhxIdrkX5W&_^@64cXC2$=vf_QLT`6CQs9A^$9V z6eM625?F-6Ol@}%YL`~Zm6kfQb~~ju%ZczYnU=~`#>=(52bmVjWe{b`&|_e!t)MLb z3XZ322^UvNuxei@rmx%ypSZ!Vyg?G6pDlb(nw7oKGsbx0KLB=1^hCz`JXwYGc;vRZ zixmlu#cVMJZz?)|{zD*)DvE~Cpy05J<1i4P4W)_1YshG%r1cIvxAtVu*ch~>_fXob zO%R;~M>d@obtWP(q;+?L0NPIzngn*4xFq+cErp0C7XqvP0;^VKBYbxwN|AV9G}^<; zERHvGYO&#@VyY1*t4~g<9}6X@^d;b}fM!X&*krBG8Yb2v-3u$OAq%drRNTXzN_mug z&-dO{POPI>WBS)G=I(td!yW4vf9<#6@z)$Xi+?rJv8^ur1UM(u`F05xYyl(xSUjjA zJJ^CLGKMiY<2hdAJD!3gGUPQFwoKl_k;lp2T(Z%b448s|Q5d#A{vZ*8V-xR+5t;yU z*iQ~5h$jNS5F&`#4J}kc3Sc*GTt4SP=^{oYM3aCd43Kt16bR@i@gBmm3aUwfMv9Dt z!`PUN%~Z%|p?|Xcj8^ z0$E)cu>02KkO}#4_%f0ee=i>ySF|9S34kPd(&WemOH8U%vOtN+m^2B{Jjrq<&YdM? z3Yq!Sr^=uuMWP(}QK6Cq8JRMzIB}ws2?Qh%)U-vD7Ob11Hhkz+p+ScP3{E5)R-wZv z6Qg8-5(NqYC|TGNh$3anCNf*d?Cty4FJHlc2M0cEc#IY;nZ#uO5rZ|alrdYzVAV24 zvX;D+HBq*_1@k7#eiefjP5N#^wrID0_AELvVA7*!SFSwBW*6H2$?h0{f$ z;fEns$f1TNmWbkoC#slYhc4dbA&D%`=;DYpu2^G>8p7zJh!Vo6-DFxNINWqnXyqY% zQk-ZZhd$nz;%XJyWmZ{YUAYitS|kL3T2a{bRajX(1VjS=T9AR)cnnDtRbOmQlmuV7 z4K|TkxnUXASXMGrWt9hMq)-rn5)eR0At@xl0zW0XC;^KqdXq~+&@?Hd3s{ONq?S%v zDWsfwN&uswDmrSXl@j2QNP-3+ph5{u1Qh|Vo|lA75=^GWaIZ!sQ37jD@|Gx z#gf3M7kdw946?^kI6U&mUse}g6a~u)s6^ITG~k2(4>D!Zv2a?HaLX_Q8d1zTd${v} zLjN2zn>zPQG=xSc^fJ*cH$8OJPD@QSoYv8tQL9%2%{A2;<@|C)2)9f#%L=>7P};$! z-O$<*2*g@JZ6Sfco4X4OFHKq#hyVm5{lo`6A|${l!m|a5)rT_AAy0X7C6&-@ffTJc z&v=v+ANr&xJUbj=clM*7@BHUyAS~jCB$5Q`WQRhkk5zD$W6y$+09JJ_RZ1b1=spFLPl?h~mm;O9 zNVzFZK`NA_45gz;#Y$I((oma}6{>9iSuBG5K@ z$@)?=l@$eNLF+D&u$H^_a;hl+=<~6MsZcKokwRA_ zMgZ4zg%s{e2s>Q3(Je?~Vu!<6#v+O_l1V^i32NHd4wA6yG?bxb8{4a9CR3O~Xs0^u zDMNhzJ`hOIkdV zwTtY|P&jD`OcL_go=A35Hlge*K^K#iKsK|J5{gk|_t=>%;dG?yN$!Y(l7tvaY-R%< zoS0&jW93B?NZ3#^(}Ku6MTKoq0nuur2iycj!L85A0wO@rfCmhYdwcW1&{Rx@5&X?@76ab~ z*7v=-p)Y)P_#G!PEkpyNRS+k}3Q{DPV~f!QD;6`{uH?{#c^QQZ6+{a7jA3u|`QZlf zV_@z;k~{M}qQaCj_aXSFI&UI|`L=43^i!z3>jZ-vZ8FeVfRg6%NKg6Ra?RZ5z zE;5mijN=>6D8_AcQj36`WGDAHi^!@Io~ncdi6Egn2MLfa3E-?QC9f{L>RUpXvK=ca z?;sKY9s;aVFkSiwR{jxjB(dz<y!EewhWDVh&Wd~TxvqUKXxQBn=&t(}P=6U)T#;DJIuV*LX#4A1 z-GQdeG7?j$Ri{7yEM;>-_LY#Wm~diBlCVV0BjF88VH6Qlh$KQ5GL@EWrQdea%9x5W zr$&`&IW;QIZgy0!4V-5=Q~1;#?z5pa+^ZCi8q#(qZm*GgrVfXiRiDN)ho4w#TkG9` zuyzorOwLzpYx%EuyW6$Jg;*?i$b@MAIOv(RwQKvzc zxm`y-x029#@^zP89q3s1x&_$8be+}7N?H;W(XMU@tHgTPeKJ|3V0yJ9Pv)BL=9HTu z2rOT==jAO9ALWG>YVfN7OXKlMiwK^FuN zFMBc<(t}%9Qh)&nNN#5(lyrBy^bn+$cWYK9NnjPIq5y@mSc~>(qeOzMWP*yON{BXs zE7(~l2r8m7DTNYfABYjQv?d7y70Z)Ewv+%}f;nbI5Uy1-UST%_cxEZ%Os^JAa$y&= z=1zM5@l8;8P*EsYxe+d55DMfJZP)~bTewg5bWq#WY{CYHQfP*PRV~goP;2;X1N9{U zb#2}fAJj!%&z6Q+@k0-#P+QY*Lj_fLu@`$o0Jugmnm`5_wh0k49EsF1U9mBK!#L7s zQY8}}5d~5EMsC=lG6=DWUxhF;1#njdG&!YIKs8kYSBj~KicJMpq8N&*_*4tGic0fR z3sqIF*ov?yi>H{2P9;`+C{=(}SUvX;!_+oP7l8zj3EwtrS-@vu(Q_|H5pS|{KUh{h zV^~92jS=y5AmI_UBPl?^S(L&OsWN|#HCN~ASTa|P&cA+c>_(2<^T+O9;6$u#6p#_)_ z2GK=b=YwC{6B+-78r~yA%Jp5ghe6!MlIew!grQ%@abLLtL9Q2jn8A4E^B%yFKe;D+ z$ zC$}_%m!<%W#%LwTnkm?5uc?Bw*-E4$o1yY_szQT9^^642C7L5Qej;>tb!s&SSI2~$ zeU)=?rG!d2Yth7O#a3(d5-wl>3c6NK+_HsZIGtxGo!_aQ#@2@8$%b&~8Q3;b8x&0h zP=|L|Ym?V)dgvW|C{r?njWdH6Re>@hgKz!mpZ}?Ew~{PO;~@sKGCE~266Z2Qb#Xt1 zG!tiWRpW6Y2XRg_pYBdcyakbbx6M7abw{%4Zb8163 zQSmBEhy+kDO>Kir#_13h@pCTcbC)BH()c?rS~o?foG$tmWOEUnV-#cmM~F{Q_Oe!&Iv;~U0N zPw|tIWRO6b8bPbKdNXMmiy;QX^%#jN92r>|IW!j#`5y3tUwvUgH$*_`qa*iBmrn<_OGq7X$=@A!J>1`19uzR zqP;n8(Il@ARTt4TCTx)|U&w_oYc1Y%E#9OFV^XNt`D@6=LtG(-=b|oDXi#yOZ2aVG zcSxQ`J5bsJU=h$P&`D4W6rJM{F!=FID@8CT!;B7!GaK=3l_&*W+aKWJAC!18DCM;$ z)i9UnFe$@FFVl&CxV1X>Qzs1QVvj+!-DS87^Bu~@vbI7?#?8^Jt$E+Y$A3Ss)AJ)MjydFZt9?lA_&?>Rmo+?P zHr$wgdBZzwWN)ct_ore!W|(`a!*B^@3{}KIR>Uv=93Z9{7VC=#&u!nM{*~qH}DReorxen<1dek}Q=d!CaIVz)9IT58V@e!aUj_LRk1R#%Cm%A^aC?%nf3T@E8OQwqz$CRVIWks@+LA0#OimY{QtlVdo-gm-n)DTTvL~Dd%-b&cgTCU{!t@tOdW z3an5Itk4Pr!^2y&*o_TGnH@)0W?1Y0I>%Q0fL%l2ntFFz_`IXcT~;@4EPISR zp3{%CTaLq>uv5BOIFY+sx)Waax{;;39NoL~_&TJ8T2=?V{wOFi0d!A}xuV;EeCC6C zmyJ0muX3?JWabu7aI?n+1<4hth!J^zs?&fR20a~k!!^F+GL$)#9);Jw%JE+I3#m&z zK?YpEptmcGORsh1Z)GC3LRBYO;NdF$bQYn`iTEmcj-!X%c# zQb6GVmWKeQ?CRm{*LQt+DD5Up?O_ujOc@}ZHrPybe%$WuBtjwKKEQ4%?px$WazySQ zRPJ0P?ohPuP4w+w^zGvRzDDn^?&ID;+|df{U<<8a3;f;+HRP5-48w{!#4j@N2p_~Y zGQ_)8r&p3pq`kbLX;?ytuU?UX3RriQ6XR!r52GahpFNsVJaphjaAH5d`G1s0!p&d$s=C^yH` z9E@UXgrxri^h>Hlh{JpG36GUGfSo{8FHD&ni->JEV;F1*Q&Y1c0C(5 zY%-8dYc74ebmz>VZN+PJhq^iI#9aYCPz$8wofJ zqMPo$P$#OO(`g1QOE9WmOS%Oi% z77fBN%Li53vdEV_iXws};M7shI8~~1PBZ1~FVDkLj5AL@@tm_yKn+T9PeK1o^hQ4q zb@ZS{&6FUr$jTtD1xqt6LDNb%#q?53N%-`#GBDfJQ%y7dwA55fC}Gr7S&c5#Pf0jc zR7*RRmDCb!&Gpt;Z-up0S$AD^*j`WVlviCbZKFEupsl4HGNgbriZ{v17TasHjbPh1 z36LV(aW9epTsX_s_S!=0ObO0+?L0I_9?gvLJ|e+H6C*YCjk3cQ*TnZ;ffMR5NGJ>c zKDfyy3GRx;u3C~0$cCT%sm6*A#tNvB&h$4(FWF2uOo79M(n6Dsns7rP<}L9{hft<) zq^nZiNahL&ilQNbkwO4NjBr-bs(FJdn&z2>HnAd`h2q(vv98TaYQuCitSqVtvsy5$ z&pL~+tg+@=Ypw;`x-Y8Rt6JQHsxBL?1h&|Kgt_acn{E#3&UpRp>NAEn=RTuB{ ztLwxoZLFP=vu36qOz@FHuZ?Sz$^_I0imLWo1DR!&1k3G&F~}ry=S?T2Qi;z(F}sUiKo?ycBi9 zi@=FaD=bt7AGN4rSogNi>N`=w*m`P}EGk&9cVB2IWp;cEi5%RR?Q&$viI zYX*fUKo9y*bhfjbeq6VhnLoOM$>SJG%5oJzO&i zWskjX7Zf8W>SlwlgCu8orUF+<0yBn%Ce(! zowOi@F=zsfI0hR_MQqYNf!NIW1SsuPjN%)sWkqKtsmTz`VC7A9&P!W}jGI?Y+g0^M z{ngmZa);nL5B5L)v)PsmDHO2Q)k@T?ND>|mY4ZVa(yt^SNuWAugj_|C3fm>q2*~M$ zAc=g0bdn;&OTSZ-Qb>Dcw0nUPz$lSYVo`czG8?l0YcUOyWar~+1*hvTA|)VOc-+yQ zM&c(%vC)q1(GzDUYgx}Ck+|2MVYf4Q#Xz~%xy~-$8aLZUbe~(@Cye$HTRHAQMV5v@ zoOiTu3)#nhn}kQC_j2nv$157Kyh4;ApO_78Dxq&^Zr#^IDnjh|?u*r`q%#M7q+JzZ ze1Lz25~#yVq?&E;yr-sg#HPz5OOEeFyQVKp04Yc^84!3V-(SSrOIQEV2*9$GP=Lb} zJs_mzL<{DRHA56&3 zqZNIpL)C_Oj;_7&1C@N`6MuQLHFNAgH&lL*>Up0g^+iKBx-jn*V5rNIL3=L!=aJfT zXQrO$uy3Z&er9Mx{kP~l=d*;g>3i&sO!zrBSnxGw{4rgZOUvK%^1L*xs9Wsrw^IEN+#XS$VT?+pI-@wpTma*y1UUnDsVo4a@F6!6l6@ zeB=Am?|=7OzvBwP0Te*w0zj*YAp|Tyc3VK?Dk6OAAEWvh^SUErqrhXMzL8lV>1z{K z!nj&{wM*)_mryvsYB-n+B=icCi|H%>3%tJgxIXU#wh9!!@jAf_no`jTG?hUxMH`+F#IsE5D&~o%G;=naF{&ZNy^JhnLfKTDx47QdmijT5#G5EAS5P7 z>!qQZDHS0AIY7q0AVYdZt}4Yy`a~aeirPtvqhgw+tHP5YHil8TO&SM#IVb`ap(=q>&*xp}awcs1dJYy*7!eAA|^8TDl;b)@W2&d=sbX4)txHN-bS8@cx~6(Pwamr+(1_QGytl&(DUgCu z*o10vr?Zd(Eg*m|o69XI8+#(M|HlhVgQ6$J3$bSlbN0jlgck;LQ{jV znkks5DKRZnJcQf=?Pv=r_{+HjP&DE#QqTfc7=q1FI!!9&KKYYVHJTkYr)D-JfM%BVaG?PRO#B@T$k^)syB}9~3 z)KbN}vpH2(of=s6u=x?iO8cHFRKjI)CX~dv-1$TVbDBBp(NW~QHHsNOh!Ip5@dw684HONGz`02Rc0xd@I7=jBog{(Gw^jCo8 z&xgc673EK9%g7R{*?;p$I^jt3WC)OZIB#UN_;T5PR3;DH$?=+rm5j-I;XsxoOR8lw zs8ZLB6UuQV)}s6*9p%ZDgUMEND^lap7m=U)3oNQq(g6_({~Au8V_Fs2kl2Jh1`(dS zHAS*psw*Wz{}W-&)g-0~v`yC=+^iEc2dOhGeL67>Pv^7{u0#lL+RVVHCy&|$QrHA7 zh=R?X)6!AUG59hqAOp{}mMFN`(%G$1AOKAug*YuOg(|H=JgLN_%)amrzAMegTMxhk zJhx*g%S0&LZA{VR-MVij2|Lo;0iJ zGphx1(HfmvXZ%s}bXSBiLFocPHVGL_qSyN@*#e3|nm{F+QyA)kK4Z);iJ>CgDv}pE zp(wDH|2T^-Nuqy-VhPGh~S zQpLJmpJ(0U81tP&n`B4654i2Vv5)|-K^raPLxtsz(mhbljZ=lnSTfKAz3gGwZ420i zSOOS>*44`cy|l*HXPcC{G(Nd?1h;>&nUv6>A+Do_6qJFbWf`Veh<(^iNKng$za@4@oy}PbZ9j=jX`Efi z+lrL=>uUQnYE$x(Gl^H5^j2w2;Qt{?>iJqbp2whcYoAQp8d*t2M%(6VrR~H~|F|Z; zB$E_~*xiRQeB zu~{e8Y(}yrV<$(9M702;C;%gNEOi&t^a?2uWtZRLWOieP&WZL||MsOG{sL{jJ*rFV z-$b`Xl3I4SkQ$;kWPsVas#^AF-9&TmuM1NiZ494;P9=D+n2UKJVGCjOy0zYDdID89&aL$`P# z;X|2#&JYdC7=v*kArWG7J6Q>A&C##*7_n_W>-%ep_GcEcIHqwVCr8&^8aa!@pCkQi zZ9PdZB_9b+;9%2|m_(qLL=v!{dPSmOQf1-^xX*Ow%qWB-sfFj%=_i$Chyq6>CH`8ipA+M zAPfOTeT7;JE!f<;9qDUFb14gY@*5ocE> zU4mAn+7Js_$(vK!&r(5*L5>wYG6YFr<4A`cM_ROaFeAuJsVEg%L15wHdXkRH#;~Vx_8eD%Y!22}JSQHS1Wd5;Seu)M}F!DOyO4K|5-U z6e)AjZi@Rf=@?R5(2|luAZkdCAumQi8xv+(!j7FnCM$NbWQ2_)Z>5~M^5)HhHJ7!S zlqu4M8_2XMQ-aKD4jW2vdCGMu?a_-L3dPNH;Kbet72^I`*e65aA$=ps`ExhWp?nGYs-I>4nU^6$a0;j_ zbsARZB7*Bpi))1;=~@^7yu#_MufTR1{{@TCE;R116wYTZhQrw;nn}r(bdfof zDD@<7Q0gT`lD^~)8xg+~Ek+zf1U)zKye187m`L_6TwOsXSrnnXJhAJOau4JCk$UeD z-0or#kxUVA0--z|e*#NITgxwh*0NDXz1-ByG2Kk_XR=u}GgLPBT<}yP6D=0bKUWo% zB&38TqxYeD~W_zZh}AnrdZ`Ab|o~z}BJ6N+l(lOSUP* z8;0jXL{d-3mFIawCV!W@P)Qgk|6IE)Q}?lY3Jr{KL;OV;-)}ONce-wJpNw4Tv`b_h zajfI^@w2a6r@QCF8r=Ny&>q~Ih`XXYAokk3_~CuJx|ltQ+-px^_vLGU(0~6$M4*7{ zV{a^lGu4+Z`t;wgJ%adC=-d7h1?ze)I+w20w>|u|Z&&#HpMAddz26jYN=BMsjjUur zQekjO72K2tNyR}9eXxSI>fotH2tpD{i2zxW0*a(S1}U71OHm*N4L3mwwtyv1n_z_v zN5M3^Yyly8$qPcbu^SOPNO|J>KE_x-Ut2s)o1y(dUs z=}~{r>D7O-=STj@aeU2UPwq~1$n5pXfSp>`Aa&=*27)YE;+dXyM5mE=i6%oh36D?C zrIOrqBzM`Fr9|lEu-laKIyi~mVKl}|iN#WMsKg~Pg*l$w1*I^w^p(m``H%z@1#^8P z%~fKy6})jqaGkkKHoYP;Zf>)PtZ15D1oM=r*@X;}*n%VkBeF4UA}Vun;YgAIHci;X zE=!CW8SwcvVuCZEpc!a4^;Xbuwrn&64X4izIva&1bTCn990@j1Q3XhW1gwdT;-pEM zxPj2j4CQjL<(wnO8r@h-L zxk5RtbQN_)K!M!9+7U3IbemBf$ZLc6{)0@swqey0g{VVtBi!(-Hys~NgW-vk~*#iJtSB~ouo*UP!Z{_t3}ot zt5Bc|Ebh+d|9Zv2Zur)f(&Y*Zz3I}GEm88X+r-jvDhXyvbb>ELZtTACG3Lay)47%E zW+xlDiF5|+E{{a)zN<{IP8imbqC%`*$XS=gBXawQY%naRi8tFo)S5X{O5jL* zw3`hsa7ZID;k3e-KOGLFlo^aB$N(oUku7RtC<@is29_+rGisTQ8rY%$L`}ryOL2i` znGCyPx23peK4ysDygAUj85E%&u9=FtEakhESZ{obaeA1NIKprMa$9&xnoFRXEx_p} zE_R9LY%)BamMqWR-SdXen;l;g6?V8Is!K_>GSmU3bRB6>=wx|k<{g!io$K9Dm+4=X zxz2Qx{}$eQkl@Dw#_^K?1mw7;s!4`K<$TI|p!4J?YWP9*(~&eUv+Ve4MdqiI%Y&aG zLAh01gX@68)?}!MZNCvI(6e5Is~Fwr>}EsTQ{7VT6{+}aA9=R58`M!IhWz2vW<%2i$~vX1>LcE;z| zRREF5e)VGzvGUU(S8hDmbbWp$Q=lu0mH{)* z|I|qet)$!Zb0+OCF6*mSDkt62Q8!OCKdMmMSO#zl6)09V1Y(cUd7&?M=-M?i_i1`1 z&T+mw+qL{Rx@8laeph?j`_4@f&&}`Ej6f7l8Jga4B{&k-lH9iFdpYQRgp-NU@zfZN|t7lEiSJDiqoOb_=H#XF`v!B(al-kvtSo`;G9rASG1%RBE4W(%^ggD9@!8hSRA|a)e=^b4m+h5KtNqR^1&6)72=GK2F$oKU6Dw3?ToY~NOa|P)apX_(q)ZZuP-;=4 zK!^m%$h}S6#Pt^Qx!fbIBe6^sgRl^U=n62h81o^dbL`RaRmZki|J5R4Tt-raRVGmI z9Y=utTK61VAQgu|=332RS3^!xLv9kO1t9?89?@mm)2-5Ygh(L%CD7@TPcaXM<=)Yu z)Syvgb0iN;@Z89EgGJcg(heslx-$nKoQH|I zHIFO-=IGSaP&CLieqrt<1a>~A>rf_3#grb3p*6x%V~XSQaOZQH=UzVF6groXnAH*z zAGvf35B8e<>|@TsgjPvM1eBNaEo2^HODBn!Pzb1c38b$<|0R%AUr`}J_r2BvS|9`V zmBB@5n3Uv5)`Cg4LWgcBYJ%h@91H(dV3F+P{*_js@ZX};;kAado_N|q>*3d)7j3W8>xS|I_1Bvpah9>PYFmwG`L@~G9ee29A0&+v(*nL25ja%qYzqhhw{!Yr6N?n@Ll%)}Vjd`0AUEQd}N zT2!t`oyJj5Cdn(IJ?dzR08fj)sZiM|q|zdgdwy&M2fN zUDO34vO?M*1Sy#2Bc{Yh6^TJ%!R?p&W&;l*cBA3w0WXJ*>!|JES z$=W3S2(Wo9Bmro}f=pCA?9YW(AS_F7)vqw)EpR9aj; z3Zkshs^`6wqgG~kTqa}^ogO|Wb8u%k&TUdjXXmZwD{T0r+Yo=2aERh5dKr5`~TIfyX{pz9gCURPC+^X(Wbjv2L?lu9= zZ&Fim4r1%#F0I~fZuVWTR$gt)&gISC=ure>l;UBU*S6{x;l5=kxvR3Y(w-t_IfmRx zRi^a9l)J8{)cvhXWgVbmo+_r7P|aY0rtOnjUzMibu^6F4A|Le0XMzqaDVc8%%I^-U zmAYi@4@TvIp6{kdkNt+XxmB|8No@qK2kTyG6mCaUK z@CN@VP5!6`iq?(RXpL4Nj+$@@HwuLgC6C@!i#Cal(ntwMC<0%wYb6%~+f`q2um?{N zL|RuI?W0X#B%1OdQbF$ik`ivL;95GQ_BBX>mRk3^ukpPlb*br#P@nKoAO50k=yXg} zhK?A*sTgYv#T+KRY)pS)Onm9Bx^gCT!WcJJDaKG;waRJ81tOoF;kl;AU>5IqI&OkR z*cjhye2{DPVuT;g;xHELrM4Ka;*6(?WIMoFTj+^O5&#lGVo26PCaP*G-eR=M4V1~I zFuKmHMhKKiYurj}vm)!WwyKLg|5@s$-Q^JCrPii4iLWVAS$c4yH{lJI!SXBL>MDot z?I80a8N`19TxA%tm__^1bMFEI?5|G`&XrcYn$$|VoK(ON#>u1XLk+NFQpDM zzh%nsalm}--@-`1T%|*HZSz_P$$4DMQc1$L;a0p>`vM z5tZWF*K*|-Im%9E^3tz#L^NrRs>bdm_KYMeqK7`>BX0CYPjVw>B8cUxZ&n6z4mK_C z<}J_IaNefv=5A&4uCq#Zm7U_?{VrBSWSS~(P81Uzd*}5jZ}j!)d8UhRuui-}?)HLb z?1%*M*fv^kb8b6F-+pxx6E~S6s8d-cM2clTIxO0ink1_Xj_dzhN|~Tt~W@sLJ&QPRY|B{u_*tMFkltn_Z971^%av& zpnm)JjiRsthY@+7|DbvQNYReBfL95VmT-(lXpn}VgNt_xo8W@?UU%Hbc3*K-IcXAH z2y)luT%I*{qfZo*OIt3FQ(d)5{px*ox}vYeGhD;BdT z*J@&j?rE;3nx|%Jwt_ps3??3woP#neFRPtzSS#<$F23q}7;~Bb`6IWZDZg@<`!cMu z;wl0w~eOwmMUOEn2mfD;>l2=jbWDRwKqJ1Q6Jc zHgh9JDEaF!|E8%An(xR|;AYsmLRyc@m(?Pgp`jtCMb|%i_^nN3{-7m)63eNfoYpe8 z!NwyJTii}lEvN9bQkzG|T9-Wb71%P8{@l3#GT+5MC{tqeO+!U|vcQ-MhPH)WTl5Y>U zdR{jo=kajw<&jr}yapZ3n+G@=CTeSp*V(+xqf*%cFJ_PS-yP3XNPt`51-N|;+Ju`X zw8dsO|1xOMZfB3hY=$Of8(!Bpz1N$)L&;d7pFL?)E>aNjbf`8nW_mOGF;)u)rHQ9` zQChj&cA_!w;EsG^igir!J#c%>V)p#>+B&9nIPD=QqcK$xmv45lDYfSjSfM3jjVXxd zrFTtj5yPj$PjP&TKDe7)_q`|q3TY0T@Cb)+0vhQH$8cb^{)*B*f)B8dj@EzkFbZ}s ze*-^}3V(wWe|{UkkUAji8#wU0K95LS0!GU2>vsn4C`~4z=`XkBV}C*hY&?Qxxga!p z1u;I4O1A%RmlguQ*r4xgcS0)mm6~4qoF(A`gsBb0we?o4n&e* z|6mdX1QrS;NFWJ8hXn~BS@@8m!HN$p8bpu;;YN)Z2WH#|(qh2`1VSn-DRN`Miy9+h zWLXknPMil160EtBpiZGYLuxe25vIu`5h6B)m;mI`nh&KyjNlWZRjf^!X5E_ADb}w` z$AY~|)hk%FRh_m~D>f}zv{NzCwF!5sTdoh!el1&8?^>&Y-4f{9_ORK%g2$c>+t;yU z!Gz7~y~;E)U!RgGH-!py@Y=pfMNTZ8@F~xrJ6E^9={h9KuOmrgeQELMZKM%PPQ1t) zDQbprDFUZ>H>J&^b(L3i2%NTVlBP*YyvxvI@9apCJJ;QjJ3$~1$KNe)^E}4$|Fq4= ztaw)U`SIhw6OjM@{``$V7Dl))9>4wU8}OpxjvFq&0rflZKlk*z?T8KU=l8EBO6s14{#VA-jk$@IobWz3{Pn>ba6lv7)Mifo-F-IVi z=#j`Bjf}BK9Bp(FA|q!+lF1koa&pNSrCgFlDG55V#w%~!QpqH-98=6PsWcPHFwb05 z%{Iww(aa~SeDlQ&>BN%50xv{QL=P?OFu@Je`*TDi6RV+RPAgI zirHCpcBwVvkiFU2>SFaxI$&k3?`G_-tqWRC^SW->VXeKIq*I%=mQ$l0?DS9i!VXXD z1_uSO!bQP$l}}lXRr}R~MyrlCv%$6-ZEGnt5LFYI3OPkPr3x9z|G$^2Q%A(%T%1S4 z;Y=*WCX+Dnt|+Vo3&pkIOsjAmHM4w2Fa`hH%Zfm+GfO*t3R!U&EjRtrI;FhIa@wsV zyvf^Lw{mpU8K>R#!HIOd_1;+r+(yHVKb-L6g?~J7--nlzEFUMo-o)%DmtOE44R0=X zzT?K4e3RJY8vP0j%vSESZDN1z@a}?teXMnZzkKE9Mrv>T^S72-J)u_10^^t9L=7gj z`qgcK@)Dp;MKus)pK4e$5~N+LRy{$M`GgfUog^!Q4pE@WGzgar7UeXhd5yl_5-hqU z&^>Gc3usCAg) z;^Zvn85!nK0VD}&F;+0I_GK!`M? zI~mcWZh&UO-E0y(9Q0%=VU+|3#pG0Zd(?p7Mxe3DQb4sVTP_K8sIgsYmuk~xrUE1= z0iCTwqB2aY3`LRk5Ho9ox>SgasmwoxD16fd)ion!O#L9?M{#OVn%+cCaiVE)w^Qej zpwvz*zEho+8^b6_F^VzpPIg;3qUE+gPk&lvO7XlB{{gljh10<^3X))jKS}Yr+6`nA zT8P3ZytIW))RPQQa$T036cO81L<$jgQ<2QcrZIWRq~}cON~y=C;L!+4+OytFRhlD) z?9ZCsMAdr|a+aKqs+orRkae6HsZH6^YentOQ3EAZ5E-hLUei=8k?PBC}V=ct@TD|ZWH9vhy_WzR1G#}6i%sHRXHLu|+kM>fm!2E@HzHl!QjB&R z7m9HOx{*bfzZA1D>Egv>j+Ji57P;+HD=qIi+Ztk$ho3bX?l9A zx{^AxinzCvN-HcUo8w7^ys&G8yq3^>72l-I_h^It-`g_uU#|{KR5wE=SXmU+02QPr z6W(ck>#M2|`ES7hiV#%~gq$SA?!*~Vu|Zb+wejVRZE{1xi3#F29wDzs4NIOmiHBqF zCCzzCu!PUs)kw0+Js##r1h`s04PT9Z8>wHaxM@xD`ENuk)|#@J`QiZ$Fn|HP?{`F) z!n@)uz>Rt!C8ZWDwer`JN7>c1eWom*Jd%|L$%$AFS#1io6|Nk??;ydm91*VjzKayM zfQ8eN&>$vDl_nZXHkeg1me4fsBp@L6wC$XBABJ1i79Jg(U)QJa3lKUO`w+I z_KbpXo$M}=XITjfAsOLUYku;v|23bi8G7Y} zbEPF6DN9d^P|A&hd3@xH~F8U-f0cuVXa;FRDg)F$}bz-EotcW>s3o=fmwH#^` z`-qFOLcB<)NnlZjvg@(r!VcNOa&j&xYDkU5t_GWCBG~IXWac>LjR~y=EewlPbdWiS z@r9uAk?uh`TEDC_`#-vAb?1Upf z^2kQ*C9lVFoa`!YizCO<6e;I=#uA*&u#Y?vMzY6gU+Nk*(AxeclHg0}KkwM=^KG85eAC!sl=}hh$bm+9HTE zk)v7;?3vWTQ-(^AvWcofFv1kDobF@*)x=6Dr=2`(8 zIx8$kZbY@9%`TGA$Pas*jE^$X40B{i3h+fB!Xx!;M7O6^j|45h(nrqnEnRgj!_q6K zb*2`uE>((;O0`=dZE@6ODhB17T&=0jb*DD7>(-QS!M2?+D4j zZt!8v?Jj0hB4`t@6o|ee(_^8L5WVH!$Osp=>$*bmI=0hCj)*MP%(g<3CM?X}L&bn#j9qOtrpi>!4x~%@EHBO#;5FGiw4yr6p;( za1^IAXlrp5oi+`-Qz|Obh-`K9R0p#WpfNOK%JEipDM&htWuf5P&YT zt(dcC94V9@X&kGR8C64kre;ashZr4J8cBmn(JD5oagdIsG5hPRw8bZ~EyN1tX3`NU zDz7HCX7(zD*3zcIL~Jxv7Xmr#0covuU+qk@>Q80&Y9b;aWo;d8MIjr9E=kRJe~d3f zXLW{;Y>Co{R^)l7lTt5rS*2EO-I5S%mKKGKD;QF6nq->La(Z7l)cP|M%F6B{?=z=S5ro$5RgGgAEYOBp4oi01Oz zm5>CMPb@WD=VVb8l}domTGLse4$${tYFpcRo#WX6wUv3Kq*zDF(h`+Oyj60db#rP$ zpE1pxbx%>D_bMX-_cV$|=$QZ++M#7c2DRCkx#Y$A7e0^6BcG776)m_hVfMj|9$geo3WCL@p6qOr#03v zTZxrJmNkH&T2vN@W999-O?-T1-ke2=_mNvzw!Fq@3$+VxAIoU(g^ z7H_v&wQdo+z9_ex&W0RW?7I4Hvull{Qxx@xt3|qHa}gJwU@c$1358?!Mq&#S;D_Zm}nlx<}pS|VmV_`Pt=R7%+L zXjgW##rBqp^&;fI#zTWo4F)remm`UA_k=H)aS98Y$83!E25kD|C;;%x}>^s%pohxbin&C$h$4J z)x4#l| zTFb{;tS@WJ8?MWvt}%EtjT_5iobHQmsE<~rjvx7GImWWq)kg_tul<@i>8LaAs4DQK zfMy8F|7b{IT;9w`W(qw=nIj7SVySCG#<`gx|6W|ii6dL$t7mlZHG%VpxtZ=Nc{?Ds zflleOpT--BaP@Q-h0y}6ba$AK`I$41Y;fj30F`y8Sp${XLcn=LP#Tx2X_{|0L0rXL zpUU!xd7Cg8GeFufN(5XPb)d}|0LeLXt~=V{*#P5d_~iN8sU4*VTBUC1q0#B3K<%Bm zy`cm8+vnNY)4iP6ouwp@RXngmd{|&O#E~Ouv)a$CL@uxp6BEIW$C)Hu+YqHUS`qSu6Z`- zm!9Y)X6B7vu%Vvm=UR<+I@{a}ihdBO!y`+ph&ysP@qXh->1rHx96XBHvjwSQv5{i; zksB{)8%JHL3Af`r9v}hBXtv70RaW0~*JCAEY$S8Jh()*Uk%LF@cYT{YqNL)j>SST; zb$)kiR6E2?2SAkFaTu7>l2_6axLN6&aWF^PA=tVxBHGitySX>JaqD;LTfj3v!0~&) zVgGqFU!bMi+hu>g?OXTjyL05*x$~L84>}A8J@)h$fP#Vu~Z4=pu+6o;YHQ zE23zlj4;-SBaJiGIAV${-l$^~EgmE!kT)9nB9coU>Ew@2HYw$hOb$t7l~_herIuMv z+2xi}>V{y007f=ogk{3_T?A;-=T(J`Jp^ZWWJWh%f(ZC}*;@71SK$hkL}%NEJ6cWSa@%gX-3kUTxAdxe?Yrwf8?C4qLqNsI>XIshqys&}5|5|jP)^lbUQxZvJxMECaclaaPWpl{3*&W8sHjx{$nd4e@muNRqdb_Rn zl5_vq(cV+f=#}A0efZ&wIVoKtVno`Vc;tQO?P23@Q69O557iyF=XcLtIgp}*PI`={ zqexNOtn;0^-)H}A`RO8>zW3fJvVA-1c$5BkcT`JFl}DCFO5X5jIY{e$lwKI?^SZ6q zUrDi&Y&Cc^3s3UQIaeJO&^6y&G1E6sT0W@=Inz5j8WWgfbQD+2+`mnAjk#-VC z5t;TdOCe)b!Y;Ou)$9gTziLVQn&UCxyy|1`BgsH8LOqQshcf3{*>d;?Kg6`kF^BQj z2eqP>|2QRvUST=QPw?WG52kQi$U+~oI;OskF-v`gsUcCE^DP?QBqc4J*0&0CkYQ z3=#)6nJHNo8S<+HVuv(Dfs9BV7$=FAUGR3sh= z|B0JP3R34>RFxNbb8*{Dr%R;CB^zP0onC?`n6~uJc-C{C)|6*H1!5e5SW=ggs#EcF zS*EAGk4`)r7WO`qsfH4uQT@ptgKX)_T5XJ?530>3mD5S$Nd|mkLZvT53Mq_6Eu>$& zWY*Z1#v`(?gd4*kcaFuz`2{N>ARS4>d}T&R$#9Og5{)5uTGL5(#D74|8TX=sNBKdI zsS_*>9#f*M7P6&a^(vuEHY69NK}%ru0@xU{das-mEQ<=sAqdyy6QQQ{DxI+*6cuB| zE<(y&IDrUPv$8}fW))oh3fRD~)mIo|%wA*lt77vt*u-v;StN|p0Hx+um(rAB|4|iS zS>$M(08Vx`rvZ%~iKD^Enu>$fGnvTZ*Rs{Bc7wEXEzVeKtC$K8QgiB_M~Sv6jec)@ z3fYZu^{fVMjaP z#jbU^Q=1gDK!#0hAqv~X9peZf1u4XLoRI^kQlvnNQIKL2qmTm7rf0gT@ol~B-9lmL zwz%6Z&Pa*l$=%>4&F)&5yBJ3A=+b*$xiyKq+tqODHca9Xn;0y)<*jv>tGur93Mv(R zF3O~v+NMb_r%!JTs~IpfnYw>Wi0bCi~zwoEh&frNBc<5NKj>!napUN>`0ch)>i&=i3G$b zFEP%Lg@A?&8NV3l5q@#dCJbQ|HbDkWXo1m^;0d}GgA`3D7+f8*Y`Ywy1yXFm(UQo} zMZ}21BIZO2qZoswQ>`?1rNpd2WY@B|n8mR+#;zfpB46-zmnI@wh)P8C2?;A~Vsp_j zC)DF=fWpR7sjra@dC5*^GCn`+FE)(yjUSU|mM??0gBA3)Ma?M4goXBxg|uxZE11a9 zQu{aS=C;dPqT`(*H&Y@R@GUFlrdJ-#qtkI6-%7ciSN_wJhH8(&{~0>tgbP%-Kuc3q zwnN;hIEcr(R5&gP1k01XPsbFFrZTw%Hwwqoo<5>y$~mVZO^|{^QgCz>-V5I?luZk& z);OQi2K@(%pLWVxA>Mck?)!L1M7FYpu4M`!v@RhF?8%)O~RJJi?5nX|C@{Ys#g|J&MgZ+yI>pmM5e!o22n zuxQn_3m==VxsH+7Wc5~i<)VcEmo31M-ohrN!07dk;?wPoz$QpxX;P?K)y&!gIX?aA z2prwf=a0e|M)C78NC8tbBWGRt!0>@$HRbk?F|2MC5VvQp=xi@no}aJW0Ob75Qs zT$D#uS=eLe(Mz5JCygR2JriVH$UU|sHO+{4@-{3)#)U{|jm}kjDV0el@r(_pjYlXM z6oi5(s4zq5g4#%Xv2{?l$5R+XL3!4CA46^|*iy`qSu_M2W&}hrBYa1dKG1P)@$q~1 zBS?j$NX5r|gMn4IMi_QgY{=$9FaTdbpuhAiR5X2Mk^hQ{jN>^VYd4PUM0Fv;2lF(_XxPMwOSMPF> zE2Jvk;z6}`7kzb+Skx^os8t)8k;XQCk)@HtmK!}qRA?qZ?z3E#g>e`uN4-^L-6kwG z1~ckb9D(FzA8{$|h%g)kk1a?t2&pyZHiLBZTC)XtokVf9cPSgSTZtkO{?Q(2NpWLH zg$K7$ICXe|_dP{pJj0|D!z3P`=N{pMD3aM?ck*x&cW~JQDEy&zWy5xH=S-gin@;j} z)1-23$900ZA&>T6xw&*Rmx+RSfb69qou+?U0RM=BXn$kiI!hN`B&lnFM!98n5pD2k$>`c`R`swwzA-Plu}F;(tpM<`KKqk?-)vyD5tn58rkN+1PFFa^P?1P@`X z2T`p5M*u;P5=tNw&nf{yAZh}EE-#TGdU_Ch7Oe!J0F0L!(JB+(N)g`5t^X%#-8w|b z`Vh;S1PTzW>3R?uGOukzuk%V@_1ZSE*mU;#7kjl?Krl1|W`9Okuu^xh1?w08MaZ|Ewf35|C0DZy`)d#U0buv`mCQT5Y6hYL13&IVyxwgug2PVs@t_{p{FSNYPhGX z=NOH^u|UuEyKj|gMl^dx%RD_yx2}893|~Oo7lxy$C0bu}d#-frXad$&Nb#s*vlh!z zRgjeyVH$xY48q3-U$eHtD9pmM#uG2>FD~4|AS}Yam_vcOq-+6*Xk(o-Ji~h?0hu_& zLcFYX)xydW1vpVvD%`<|T>_vPD_Rj%>;6)wc^f0aC!pC+WzJ7Ro=D1xhE%qKv?&2EnQf z!RfjH+`GNjJHFJ*y{~M&)~mhr>%Q&Vz4gn#^y|Iy>%GG4yz?u+_B#N&?92G;yyr{4 z*BidUT$cy{dT^GH`G_;&2A7hNd6s!eds2;MSb0h^QU>)M2{5fokk08$1xr8$L!iz| zumtfO&qA;S^?c9rtN_5Q%m-o553$VjY|r+r1i=ix_H5AjtIWA<&kGO)Qy>#-3%^02 z&+Dtt!Ya?}i~p=nyV3i4u1&{aIdUZt{SvX*mJ~sHfXla1R~U_lPFlORSX0sp3}H0A zz$C4&YI}OwN+S3WVwK+SlhiJqME7V(suO02w zXbaI>8`MNG)ksa%JMFMZi_=QIu%yebVQaxy%^^t3w)EAsWV^LoSFDV&{ivOz za|`<+YD*+gK*|QTtnYl!*elPeozC^l+6#@^%M8#{5Zk$2+wL3C@;j{a%+UDD+qtaJ z$vmSAqW^C|wminu&16Wc@iS>vsYa4@F!Pf>Nnp$BT)oem&fPl&1&rOzJIv|(-QxS* z6`kAQ%fG%{z_Bde>}$)ryadgRzVFJ)AVN1$5D5w}(dj#_#yYG8tk0}GBJ7mJJ%YeS z(!-6ze4LHoVeFRZQeQ$$UqTGZ^%rYQtTdp*#4X&kM1pBy6tbLS;6kfAoD8^+_zk+=XI;WT42dVX=$4v0dc(J5iZIM z=xAEt$N-W_e;#iOzKK-zVAxWt$Mt&Wk}i<9aDu!yPKhZRAUN5U)Ouu>zvL6z|QNd-NZ_) z>nqRFTg(S71O%>; zEq8PnBW+zHY@HeckrV%JvwN!rCwqun;SytQuTUb?9SdRYPSpDv(|}5`4)3u{t^c$h z-qjOdu~(h&YmKpd-SJP&#$oHV5Bt$;E%JEn)GB}SE${JE8}T7Ohfh7k`MPJDoAYsl z^B*tQ3cvC|zt)9*w{r`)etp4$``BBs*o{2}Dy`Cad%;qm0GwR)K4+&|kl9M7^>oXC z5o_UTTk)ig&%IstscrW7OwVV(_OSihwr%aO9qzX+_xxM#ux;M;JW&#QjUJky9_M1c zOGm!Tsz?L`NVR28CZn!*68g-`)Z5+Td+O4Q-k*-%^1B4PZobeQ-sPR@=Uu(t3*P%} z%f`Cu-Mj1S%DzSt!T-Cy@YVR99^dpm`xdX02rRTbS>px%;uKs&F$cMjE}Z<>KmFq0{LTXY z%wPW2@4`DS=0a@7Y`(`VeEwn^=21Mh_g}>E-@#BUlK>G#N|Xo!qew6~a9}}%5t2A8 zC`FPMDG~`pA)sl?rY(~yN~EYo(w2`G5hB#0k>koOQ(A6>$#SBmlmtf3q$q*F1St}F z_S}+E3jv`tX=V~xFv`-4OPxN&xK!!EBny^UB_KqBk_B9^4p~4TY*(vfuWA*t0IdS8 zO183vn>H<1xn-|%B``oN0k&NUcleEu|^tiG;u{4cXUxlA9HNcL;#2Mk4XNGd@)H9 ziv;l_B`Vs2NhFPAlE@|byRu3Vr`%G>E~y0bOEC+qNQ?I>(*JVFFtH3#%_7@O6HXG_ zq;pO+g-k+=DD;#MLn$aK@gkDU)Cn^Q<(qhE$C8cN!!;~P2 zrwz&+$&W(v#!`- zg9WR(u9i@O*Ys>#3>#FpwB3LaZ&}$1ZeGOB%uet=b>tC_%^GjC&$W!Yt ze3j5^tEQr2YThIgOKd}jm~twjs8CEfs*^F=jG*>pF8>HZ!yH2KA;@fIw=t16p!B6F zfL>Gq4<-0ciimoe`Q?)z>JK8Q-IMxhh-9W3>K}0i(xDAieCV^RA+-7-tf3}5YO|e2 zTWzVDhWl-~u|8Ys4dHXhC!Z?Xo9U{jZkz3z1E<@eh15R$@3OrP9Pq#A7QAk#ziylI z1O)ntZ>sV(yP?V3UdSMo4L|6k4m-S?AkkM3y>->!PF(e&QrbwqkV-@|Z@xI}Z^O;j zP2fV77UhWe3OBK7i;4b}#3zd6<0<+nB+w!#olw$3D5Pitd3C6m8t5qqD|$;`s|E=8 zFT2Vb%&Oo7(6ujIySf;$!KgD#uKEjxm@r?nLjRBatWy}b2!~zs`iy5h^DYIZ%QG8t zOlu(6GkPU3f{(di22q2-3o-^Zvbo@EGI$XsB*#0;5`uS_l^lQt3ploV4s(L#9J*L1 zD}B*buU1&Y>ln*A&v{m_f;FHIxe07K0uY(-grovB(Le+e5EL7Pk!t~F_ zE;`DKT-eNel+YnN6;VquI@gF~RHK#AsEt9I5gctKM<2xpM{%4{7>#HkH}z4CdkmAB z67muFbSP_Fa$=UaD*sD3Mk#!%Q=F0l8B{5S34q8{sLI|@G^r32 zl?acp#9fmFf*14z3s=8VmanimLvCi%hiMVOH@nF!6f%pP&DvEDg|nG(okmM%JOafv9JR|_mg7gwlXErlWe*$zvSM&_NCYG=D388*9Jj+-Bb1QtI$9!@r zpT~rtm-Q9!Vh^njdhQa^kaBbgTM1eCoU$UQFsOSUW7)^15=)rHGG;iVS=h!FHplpL zLsM|nqJ+vQNKHXONb^aGK2o@~HEwY^{oBn5pt#Q{&Z$?mYF4q@wwpC>r;Br3+rIj_ z(-G2iXfoMWwYpZxt@U$^JE&Ua`v14I))lLzGb__j$04ZRRb>bn2w*FMxxOg`lS^?O zVpXToz@n{mgIbWeRFYG!`eqM^=*ow6!TwtNVYHv z4)k2#%8a=z;~>bqi-Gg(3}rmnn0E3Ep0T->19cNi+;EFpkim#ZX~?S*qGg=uWEKF& z(<{R`EWdogl@e&^9RZUJxz|aI3da+cYNq8lNl?OZK9e6Q?597jOcI&mL!~JO2#O4{ zaD&pAMAPVmXHocKifOr-G5?OyKNm4mBPR)oFZ@k7F*EmUaWRYVSDas)i zS(;G#$QD9rWIJuLPDF+>lcPLk5{U}QAF0xk-_+!R=t&`jJQGQvl*vqHnags*Q<+eC zDGL$6i&09DV>YwODGq0-wTzTuUG*mq0hI$&m;j)ODTPLPYS0tdQ}#y1r&yWD#&vdP zm7rj|`N2>=^R<-=sgNCXf=61!@+J-M>%LvCFw@PdG|{@8Lce6^*x3hOOe;3t^3 z02p7%VwlA+MjnrS4F6;%g5XM58aKM7$Z1Vsn|sn~GpzNRmAu|apdVGsKR2qZNL3o< z;>}dKO-*c|;Tnq)9>#^+ZK?cR|ZgP%~ zf#@F>s?nX!@h!-l05WHJ)$e!g0 zp$_#5`dWBk!T9B(z17wF3I>?vS_Ox}B@cC$0PJ{GAD|Viy!AWC84U&Wg1p}T_v4vC z@VXj=*ka9kv-KPK()U;Bbm2C4g!^LNN>#Q!z+svA>uAGm^3j1QHyJsYjEeH(D7J z#4!40~)kJ9K69A+`$~=K^+9b9~43xEQ1y(LLDpvH%P)VXagoZ zLL(f)9{-fWAoRg1oWdH!LLAJ(A>2YOq{1%bLNCO^C)7eR9K$noLL+QKH6#HnY(p9> z0XIa$D?O}e!>iD>=|kV z4Qm88dn>4G9H{jXi{)F6io%L;WFM>$j);n=A-JKDawv-`jN}WLX=|SXii_ft#})z$ z!2e(_mHM8g2qTmc$eMzgkYSmBe2SStEYb=%oVuWcI-r)|04nIWN7)1}@VHI*x9^Y- z)wzhPaVxj#s*qHxhm)GFdJvj{s;PP%)ft?sc{>^`gAyphnXE~gguxs)Jmm% zN~N62u6#)W09E3(-(i=ZC=_0jCm8cM zPMCnzT9h%k$kU4+&(nla)P%`+3V&=#kRhAWu^mzI38V6uhCGOcDj0JFi_sj5yZ?ZT zg+a~qupg3Iw$>yI=n5`&p~L{m_Cd=jcO4g3=$#ayo~JQ^!B8w(1xHjtb5FA*r-T7P7z?idu`dpf-wfi;=;LYO{|7 zc#@|uH+iGaf_%8Q`N)}(sTEO~GKtJRi3AucoCty-yp$zQ*a*dBl$CgtjZ7+8?2y43 zo3?_|sTx+UQX8`AnsMza%8@viBAs@nIJh~Sf=hrcILfWe%6qlfeE-GQeGN-}^;doc z%dD(dfc;ml%vZ70NrF|_em%>AMc9Y+N~?reGWf*9)11cg9EOO?3Xue$f(gt!yyVHq z4uL>kqy^6@aoPbY; zSgg-n2m;W{8se?d6uu=;)z_4tjq#WQvI=S&sZw16Dp1GW;|lZOAb}dc>guU@!PLsj zAWgll-c-g2LV#o>zqqZnu{8_;a113t4Rkt~e-Q#IFhFhsmTXeZK>Z;=&Ba$umf-LX zl35S8;0yS9+y(ft>HNPFp)ew1A^~+kN5Y8rG?n;Vv^4|J{Qszz>rq-x+_$3oIY;@x z?`RT9g1{cRumim#HcG+U?OX(;4;b{L1!a=|gpql*!4w5i8YJEm?ZO_UQ5{vonp{IT zL|zmX(dSj(7nMUXv|i{n-s^3F?CoCe_1^H6!>U}vG}PYjJzpej-t~3DAa&mMEdvb= zQarrD4LGtVbCWi^k6N13Ga&_!!zBco5%_8*LOVS!7^7IK2+K;0&6v4hf;pozJ4FkM z?2*ivVkX@AkWpMT_~aAIB>)X*j3tQx^O&D-8W<+nmE}lWQ2Rx2GL{$STKPMt=>$4tfFnmJh4ePb` zYPP=7u$Iy7m22=-YaT@F7PV0uRbL<-Qur0p!1inRt=~2QL_k#1oqjV%@dyA_OW~nY z6vU%oS`-O8L<63H1jY!N4JxSfY)$cyc>e|A+I7|^bwv^x;nePaz4&rTpPH1p+z7lH9e*qTe zgXdNqKC75zE52^8fS*4F4T_oq$#Ru2swga00!jGC9I36AS}f9HRv05KoKT5R+z6nW zg5uc-oWhxGWH=2;f`3vw^8u6ia4GUo3j~7c6%CjrEp`t@Pd;i zPli~5J=hN)ONOP&fHhct<;fNWaewXbgtb?hY*?p6aTs6mQeJTqhuE?daT?#sRnD9q zCnK3L2}0BFA)mZRAfrw2teEYclm9)GyUf5_UY96%V+puOrJY6yUS^CWgFqhHolpV{ z6xZ343Z{TDEf`uYfXkYRJ=ZZ;*y|0ws8zuLDQ63=TT!2p0!`L*KH-2Ua$X9?ltSPXMVotY#cxHgImWa=m;=BXmku%yP$31nTz(7-(aB<8kpr^zg_x` zacbdlnhU;duvJGj0ZV5PAqo3lGgOKt6poNPNuv3Tra5uNUWd<|t`PkG#73clpsJ8C z0$#od>Y(nx)TLOXE+J6-&yo$uNs8Us9Z(gd>Mhy!KAO1R6;Rxyu@}1t;f>yNFJAOj z_ctuxc8^hX2g5il!o7w<@&7&Fcc<%h|6UulcYV+Ie#g-F#cM32_j#W~f!|PfC+vjp z(I2$mrGoe+Q*1oLohW(1umj)=ilZ!@5hZw(37Aq@ip)(Z5e3+f>fuu2`M3yPlzDY6 zlD+B(qBmbZZKXX$I@O8Y-F3&UX=wYQUerZvLUmxIZMpE^YKpLYle1Ifk&gvP} zI?PB66u$%>k3;#HW9F3*CT`{>K#77VzdaAO;ADz|3=r3DHrmVl$i=exoR5ma05t&u z2qg=aED%VLzygE@2QpkTMTr0*3nU65Kv3evh76Su5IBTD5&}p-5-1rGNdl846O1hB zQsm2(EmOK2c~WLf0tjrrWLXjc0U$YHmJ~YDXi%3(jYbd(ROm~fEo&w{sxv|mB}?QCB1T8GNkQWu@kw@CBQ^3-T`t6NC~1K$dn{nq-cpUxbWaD zgr#iJvPFpkizcH)k&+}z63bEeUPfYB3TM!o4I5^xN%58`s2Qtv*m}y8vs0vSVZFtq zWs*=|N+>yn%oHwLxCGxqX47#pA(cD?37TZc%$KEO)=WJl0n8;gZ+BTe`(){#r-Rm> z{rdRr(w&PZ@7_Fj@FlmDX+fq%{rmax+vl&p|9<y6jA-8m36NnTgj-0kL5VFuh@gEXxHv%>CAc8r zelyD0AOD09CYWG_Wwc==iAE|};*s_>nIwKkO1UJGQYOhHl?ys(C6{Hm(P3qoN%7g3 zVv;F^5?c&c9BRh7NyeI6tQS*!+aZy}NUTjD0S6OsVBBmVArXa8Zf=2`nq0sMr($H- zrW#|6h3Omth>>P#Vdc3bMP+=2R#}*zdB@pi5>PY|s;A<`R##uO)zuJlnT3$56A?hs zR&%*3P!J_0q!h4El@!5LyZw|@Q9~WOo3T0(71M4s#RL>dQ%&WPv{Bha?M*Lr+Y`1Z zVfU8;3oQiJKxYk~E zbSn`MGe|KXDjXM_aDkl9!)>8J60=F5L~k@_hoQyO(M&PT6JIv-)DfH)HPsVeT{YK~ zfrJ^>VNbnX)@6&WT@p}lUFsJ2mB8TJZo@sd+;!(j_uY2Koj2e7-Tn67f#WSWekl^L z;uI2WK|*h2kg&l71aM#?7m*)c!kz@|NkSPMMCSMeDs$cf7X(Z(ff5_&NBG~Z1I{<= zu@64G-n7Hs;M}j*jvsIhOE9JszmF+=@W4wD9LOL`u>lt(aPcPzTl~qz^J*rZ1poFa zSuCIFlTdNG5)&+c`W73MKc*5=0Nv;)YLY?9V9zHos0qD$VN1RFM@C|Rr;c!M(D-Czu?R!((=ho zu;Y@NnJ`>K;fV`N(!!khY@C8&+7)hwaQyIpn z31q5?O>ju|J(5X*WPYU09p#i8>LegrE;-(!5Jj9t1_x;z317`3$sYEg&Hp?v;ZA$f zgPrPRvS!}tWO_CQ$~kqXl-!F#0*uoJABAW_txV7>fh5ZZ707Q7(SZ6%J1iUeYil6%&Q)(7DiTO=|er}2$oT691 zF%iIOT`UP}xIhIeFh?|r>PPDssx84nF)5Xg`J&HH7d>`iVs&ovNj9`s9)S=#2KQ;LiV-m|w#x|qI$pSQah&@@!FzZLnnhdd1cp5nK z*OMf~OlOu2X`+PIo1^`XX^%~t(_jnQ*~S)XwJjjnWUE`+4iL7vwXM>s#z3m^R<;do zC~Ot?y5+jAxy*fTb8U$`>G}=2){XAnHlPF!!(D^HTptYoRsDpnE7QifHmv$_NTe6A|8V6xSt z(Pat+p@Ns2ST2howTZ22%Uh*Lmnpu=sK1(y5>)l%qB(|Ok!s8sG%-dv2?tJ)#i<%` ziXBd|TGarRL`eIHN7xVtHjlA2b7JEfkg5hZ(b-H&djC@rVds&N#tu$Nm;=c{LT8ZH zdG>j%qn@v!=Q5w9wt6)4NoaqEljDI;cudJj^Ux(cvMSuE6EM$Jhv~=ZEhm9 zAaO8qTmsCur!tg}n}3>*0>XQ<6%~^JHzENWJ93*Bwc$oNGB+!ES)?va2}>1+(v=SM zB)=W$OBBCSyB()FDXgfMPO6fZz@!B;WzwJMOH^?dxh7hNZ*d2;IYQ63NF^*1kiUzu znv6-ZQX7Xc%3IVOiK7^h&^l871I+>tW0)Pck!;-|mQBHv1^Hy9D_PkjUn+7%p7NAc zW_Ji!+QOVf<3(0mQKH&^<(G;GORCBeN}a6+EdR5c zNwH$(HH_5}tIWnKBMDAjjMZ%fUK9|UJd+VWI4N71A64VBLn)1FT3w-O7g;^(@oWFpfu3LHn&pyzS+7K{z{hZYgwDj_>CJilYrLy=sz1c+os_8%kIDR?^}QMOMkpE zRdpQLCU`-U;7c6mWvdY(PQTod5Y)*!@Hf6-)vbP=d;+%m5Zoa&VsuZUHBZ zf%3H0qo@qe+>z5V9_@aCy9C%3EDRmOKiQA}5TmK|gQYz7sH~t8XeB+SR67JyBJH=BwedB(#(mJkN z3%E!ENPq%F4v1J28H7$YC6hNX6?+-eGU+2Ch0Z+cV*{d2IOWJVNgO&(2|709IXZ1v)JCbD&hq$4K}o>`m<1jI$IjInN|IdB0hFOs z)X@M`%;k~%q!OfT0cmWCj>QMmfd>G^l&5qDQJUUI#6?*!Rc3g^q+OyGX`&Umg<5FE zPtk={YNACj(GvKDS3QdlHDXl};#VGvRh`*X<-}QPi&~M^Rox7n=^;%xURr%sSk9pw z&WH3+kD-|%>G4&*bdbF;#Qz1+6|KxmxnPE5QO0FNLc$CTWFCqTPG<5fO8eB&KP8#% z@!lM<+GL^NCX`I_iHu_S5eg2>V)$4T;FtmRMjg5(NF)mNd?amNU-85Y*eF?XJq>Zm zR&Q1zaRujY?$&SaR@xv}aUGd)&Q@_MmviZ#f6d>3P3Lq~r`+V%1>Ow_xP*mq$TQtn z^?2v=geMtf*y5BIhd2-OcxQPw&*D6%?%>UUv5tUAX9ij)fZ=C+*5}*s8}LNO@C@05 z4HWD}m}4l$U=fE7hQ!P*0dcgLnoLwJ>L6pNn1!kdGm+%+?97^|Oh`?E0u&Ua{7w{x z7LZZQ0zIK*We1VHR{vlI=At#3tvJ~he&HCFA?S?|Up*OM;!9!LO0UdBn(@$>m6cm2 zz-~;%Rw?62utW{vOp(sv9zN9y=^d5!9ZWFAo?WR(5Tf7N-Bmb6pvBxrIRx4@QC(1_ zS?q;dAX+3!T2zV!M4`u^)Ql*Kkr;{ECQK$7^=Wb#3Td<&r}QGIK$J%I(-_F&(5d8X z)DN3{8cWS7N4lmASXGQ` zl(?HjTHKO=T>r;WNw!KPwW1uBoE*3&iO1!~la#BGKvSn+lJ9w2bif=)#>pAYhH8i; zXAl5pxs0Qv##!tfhgH;S$m@9hT+BsOu?0auL8?ogQg=wfpuE)AkO~3Z)LK}?6?p|D zD&^X3qEtc}$6}G%l||Z7+M@wgB2qysf3uaAC?lS;kD%*Rtw@i zo|zS55`^Vh#@UnJ;wHdYNL}7vCIq{rq`vIc02C$?=~YHR#@KL&)uf>iB)}vH;bHA* zgb5)TjDpv?Ozr93!|a|vk(SGCWbnZrY>do65h!8-%$R7w?%|%^Ip1ooW?n`|^bH4J z_6*N(!vAVH5{5{j{&=5njbHfL7Wl0n*@z9}9%pa4U(`sh;zF+C8r%lnALrT*f94Jc z(%I_JZjIP_LF6^*w=WgzOzHaE!XY4Wv8Sq8$6snkD2uMKC&79zA2_JEU zC~6>w@)WPq(T4SH!uNa+7o<%1oQ{UdS`J|99gysPz9F`VR#1ND&Ud{+9R~0Y~ z#Tf!e5(+)(wRDCKA;DA$OIezPRhZSw{t)AVlVGq0qav~Umz#~5@PpZ;lLebg!n>hJwtOTi*2stK$m9b>JAVps}`Mv^bK zM-(7HN`!>4UC1yFM=BzRBXxx3Xk;ff+bHFRub~YkZQFFH$BMEl8hh#_mFmNeYBz!- z9491=G{{9p>tCMz79QwzXSIXSB=MVuc;97M7cLu%_CFY+xVvP3pAMV9Nb zrlYxn>$zs6XM(Yy0%#Hh)Nt5frdp557~G%oMIxmJu5p1%E|Td~)cv4F(lG`Bc!-A$ z;}mef>BM8CyfUfONgLCYwGpLEY076HO+~oGCRSP|u1dvz#4?$cx~5NMtz-O?>z zWJ-`p*7ZT*cBE(^(#&geXkra5$OO&xWgks+rf)5$Zw@C-%QS5bi%ctLP4A}u&^Pe&u!wV3En*S?M?mEf>X`7_bp$0+gqwkMJfk zfe~q}WT43;;zi4l!GR`+@rEsRt0GT&^k;<1q_|=njfok>S`wEAPY&~XOv-sXnQnE4iW^xK<8LQPzL|r@O`pNku`TdhZpFiK76=L$qWbHE+DK1}@v0ESF}a(3&mF zNsN6O_gPI%jfy5uV>OD3W;{|^B!LoSh7c%$Qohw!OvGJGL|T}RnJU#KGEtky-EvEs zSquSLD7O-z8Quk20Pmg6SSeM+wpOKORZJCXD@&avo@gT;X~iX6Qq>6o8fjOK zQ^CFLa~mo|{0>B9py^!QZ@Wm@8CnGBNyHGejMi2ra*%>`zxvm%*qGEU!~l=2?;hGh zRwQ^PMk~)o2aK&NSrkfE^EKZBmFNT236z?2C%eqgNFNXihyQJ|mJ-kmXq-*fB(Ao1 z`)yGhX!*BEv!8A?uK2BA%s4w}6)p!WPErd_RbO@OMm6kWV0H$M>yqy30*+J1r|kaw zyw9#x2Ygi1uH86_)Hqm5lwb)WRvn>WrEG%uz?kuFfel)EE)E?fIIj(2Z}hsL_IjxF zMvnNz;4POANrq_26UM--=KC>_V#7T8F1BKO%0}R3r)bb;V-N?ai|DmWyxaGadM|w=0&^puXP_Q=6hM5E71a_>Y4Jpf6ilrcmDN^LNEnnUXUxad3(Gwxn z$gWGq(uy@3k=j?Yq+O+OYXKRQ;-B9Ao224!oD?kTc>gAUH!og_8W*@E$&q@G2W%dq zBZmENG?EI!VY7wFeY?luJ24yOH+Y3M!eRWC;O-3=>+UD3Kz8 zDG3KkOp<^=Ns|O3ltf|@!AX}d5u`K;}Jbe<_#AOPHEnKb=SfB(VM2lUQbmbaWD_O8z%Wgeuw(NwkZ`W>}FlEc8F?KhR z8AWE(7QcVDa3VvBZ(S`?q(niScrjwdj|o7Q%vjRl#8Hw&NFpH$XU>s5Zx#(Y3hBrZ zN_Q?gvSbp!Twq__!htTQEmI_HmLfq)f}2qyAkI8obMef;i61w##9N>I$*15xJ0PiW4W0qOjVq z;)03^B$|W@C8(I>#2am##3KomNO7*YHkcyF+kTv4g4t%HYqupO5K;;av^Y$tD5#7K zI4e=3G9@ZgyHd-Nu0&0Ol9W(D2`NgtEH^XbdP|_S-duuBxZWaQtOe4d6Ro&8S`>0)POd2%u>tOivOuQ{2}3}V8fj9`_>qFI-qD4~Qpx+tuSCc-FJJEy>P2qr+nlK?HY(Bdw>#@K?4 zzova{3aqO2>oF}JlOhSmzE!MIZ~wt1_cw2aLigL7)&)0RcF`60-FY(u0#cW*&6m}D zr{y9EGbc*3HE%H^c-?{{J6K_Z(Zmc)lS+G7;)D&JQsJa7cC_7%&Fz?D*SKh-43S-6 zj|`E`Bl+a>$S}{1l|^==44Gpdxr~y{D;edMZ?>7fmPu%VXQ5jtf#{ouZdvITf)3i~ zmY-%?=n{g4n&_ybW*NPtMQ#J;ue-L{>#o5bx$LpcMpjns7XICdP8Bhe1V#j{y!6E{4CKOyLgW|6ps6vDp&(>N(lEqW zkN}@Sj%hyl!4CfBIh{$32TQ1#F)1Zdt?^A=>c@o`)&(ox*^LsS^PAjgDG5B(P7jg8 zLm>u{T}erp#DJ(7A#w*ZD!fu|gpwN-vP+8H*-U9R)4?+>X#+zm5Q5OthW4~Uj1P)W z$rSXU{glx@X{=9y-2XTpo+)UK3G!lk$Pl3Z#7Au{U?Y3}n8rQ=GK>*APZ>ofo<9B& zjBqq#h1QcuHA1KiW#Gb?O2Zq(XmUxLTnukS6w1CxK>;$l(T${VqAippUvrV1DXDNR z8=WXdvE|)=b5I~beJu04m z`co33!jqODAp-I2XR4|v6Qaa339HiAwOm!aiol8?#LJbiewC}Oh8+(^cKQ^yHHR*HulGe4f zD1{!`E?wfn%u_G+F@nJ^Vy{b$_m0ResA3FVJ<+LD!Ah>bZP70z;6e$`N&pgYpacXc z0SC<5Rt(r?8;i+T6UFi6%xEWG*iYXhI7~Qi!N~)-5ZrCag918=fdBS^a8GOZw8WuC=Urqk%=Qn%2FB^{Uf! zYebvG(j62vsuS%YPA>bCol$a#Mwht}5nz@)DhaezIm+_Nh!Pq~*CeC>A{&i`SQO+< zkcvc`AX$Z&O$t(wB%p;cNg#K?;nJ3-^Cj(I$==V5j=iX_TI@o=bR)b4&B!Twz-gq zaFin)^~mpj2a=2MDpxQ^NJDbYyy20Q=w!;)OOFoI3D&fxIc0j9Xj-my(Tk^4@BgU< zuP(28-RmUkeJB}V^RMwvePKN;d%?^;v8t{eVvPdv+qEjYs(zL3VHKTH7jq_#AZ8*; z?fV2hba%b~U95jMe76=u_`wfe?ytjg?ji&EC=@C+kk@a0BW8KWGkr047hUK8N3Jt{ zYxH>6yXeJ=Q`K`maH~htl|he~(L-JJ1LHizYS-0yNM}JEtNzUsq+Fa(4keJn#CUscm@A=uTd-|p>3*Xw+ z&ZVc2gJ?zPAo&RLD$>!8PIw~;#(qHrf*@qB!W1CGwC4a{qI)=QCk6%OQvc$7T8!n4 zh@I94ebnd0D6Yh8A_0IP0_exNeo4sq?u08C&Me@DC$-;idQ!3z!*YT3=APk;-c6Q{yeHhU}_7ZC0ek> zF}MZzTra0gMH8BPbbUr%_YhY^Q=%{ z(xmBBk|mex_exK>qRuVdk}l&CFHs^~+LHWOlJ@WtE|n|oz+|dcvMOaNFBNk!q)T(4 zODG^mB+4whRKzYgXO*NtCrN;FCIDkVoWEfUlmOIhq|wrZGB+o^ii$_tYjotS&eW2E z(9gbFQyLvFr+5b=b#B6dE_g7)PGAKi8LT%0j2(+*qav(0FR~%f2UG~MADOctCGf%m z5+DJRg)**)YOIAY&H@ibI&F;NCWYXpLN;z=P0;D*-a>#(0#6`LPfGAD%w$f;X#ki& zJ&p5MzJdT0;1?f=23HC|$f&tv~ark6Uw8DS<$2k2*2n682-szq+wVmowQaJTH z36dTy?t3P%QpP8Hl=FH_MJGfK0dayPa7n4?%_KMiA_D(#c?6AW2%lOuTER74#g6n5U*_^Kj$jM zuJ1U8sg5XJ->&T{CaWBVFhQ&->uz47a*Gr%@9;I1>~&xBwfD5rDm|0$8bk2-E-e2> z_I?jG@9T8Zau5sjVTBSdeJ`h4kMvN__YT%yTQBMcQ~WmX_0Sc>pjBcMLt0;t^PCRq zQgT`|c1cmzV>(Akw$vu5;!LIFCdLF&BIPzh=Y=}+MC=6ewg5zkmNaG7>(eJq&i0Z@c1Rz?@P~dkh<2BVii3zq;tZo{2))HSNO5^Z!#AundM$BAUvzq_ zmwIK?MkfYbH%v!!NEAyqMuGHtt5hgE%C9Jl12I2uek9%Kps}O`;B|=|4*s zd#ATZVX^w44VP9ZgSJ37v_KMIRTIABPlo>_Prs!zr>})HgMElL+~@*M<@6Yt(N1{@ z&Ln{|bo3gtkxu~?gcHL&3(lGp?s2S*BGi!_&tk~H@lGZ+PU2*L9OXG%>>l|x#`Y<2 zVNAwK%x^i>Q9wljmors2j3$VpB}T3Rqd;0*1^WUJZN+O>fi9#j;!uBe=NbY(E!Iwi zAR@mpjCmz|Kmq>Kf8B06zGZ03YjB3oG#`pLQd0q*Sj(V5zRvHyrq=wtxs#>QPZHv3#i=8h z8PvYTc`6d4s6ZpQSZncbqH+~&2O`2mECF2=I=K@%0lGP9>`xA~ou*SK0>$FCvv1#L zp;e+KR4h>HLIH|XfW}b-;o=|~*9C#Bam9j}LAp%JB4C8$gcGwdl#9x8FkA$b2iZq8 z<_r+oWkE5|gCMjBJ@`0CV}+D3ex_h5Fm$E#c-~6Q&SYXZepf`5+Nc>+44axn1uYVt zG(~w053Sd#^;dk&cMr9?6_fw1M!R=V0#OmCY)Bsw@hmy5uM{giF^a-uHzYKg0`(Kc zGP!iLbOCWtsS!zGv`M9R*%A~=B|!S>qI09bHx4v24~Lk@fD>{<3p8O2mV~_0B*A)v zH4d~SkQqNkjYux|-RhJ8fTUPb4R!-A;Px%1nW^9SEw!)Ygq0wZ%7U54WGmp4ab5Tw z`$s(ww*}pVo4|sZje;laWyU)7Q@uw!%`7P_WmJ6_h?9W0``Mpb^=_@ZZgJSe?v@&_ z2YhJho`WSMavC6F^ly(M<}KsO;0K`2_Og<90_VH0m3)|&UE__ z9GitC0X7JO%x__b+>>w8b|{E-;>${uYTy{gPGm<|-;d|)kD~m%H)+mS7ED)*695b1 zcXanuS5AER8C96LCOoC&uDb&x{n1lJ!^$U98ztiyC5S&&eF9g*V3pipP%KWwJbCN{ z3xZK!7~=lxlg|Gn5+Wm{e_VsmSc3pBXV0ZDUC4ER<3LA)b&;^xR~Lmieb0P@3pgQ$ ztRgn9!UlDNM-*Th_bd#DXbhPeM2!PY5_sB8R1I}Vbo95}$@j0%{i@Zy+}*g{PXb4G zv`S&uenYX|^H<)@9o_$WFYjrZ2F982w@78e-sD>R$Q?}P7Zme74)I;#KWSM)aj)TN zgF2{z1_OZMy4uObO^byjx-fn+J3k|>NPY<#=|Z&W;wGd(O0+D5UH(ht8s>q6c8*Dk zp6G_wWCa!1w;^Jj>hqc!Ziayy`vTz1B9MhJPKWuaZ&|`onj3zcTT&VYi8bXQ1^Vg} z%6jM`pKbpYbI|s{-bA7l!s{hWzjLI0Pd;FmRy{OBTg z5}+>lf)rA!Sd_}UjIT2p+>c9wnUf%lPbAu!tM8XNGll8BA~DX@(k$n$zFd=&S%=Q& zYk9rgHqBNcu21HI=bnv+g@;F*Dr$0Bm(&V8w+W{62RJ2VU!4C zqew{dFrfsqY$GIDd-kkbxJ}2tW&3q)UbYejPE4XzK@yWFxp3mL3GtT1Q~FAfB0)(4 zC11%Vbc-3V=FFTodsh24bX?J-sXl&s8Zy+>sZCo|?V9!K*;ZwvrVTr{ZQZzCN7bs; zB4z@>0fT*wJh>FCRM{$j4t=#yC6Qa>?n`#9)&yX+AHS;gF?O(SmjgFToGxFx$$wiUA=m_y45+|?lSqM>lkQ6{oG06l|SU7Hu*6J46zXJ>ODHjg5->HYQ=>3ZK`5h+ zCLzV41W@590ZbUW1g2Sj#o%(K9)}gCsV=95s;4%^-Kh*V#b83Uiu%x5wwC{SYp-JY zx+|%?nmJ`(jFPbhvSdub1+&SXw3QMQP=@KSr6v(Ywb{;E=C;*d3+}h#hFj`Wm|pc% zqv+in%QU!3n0jE3fzV>0ea9vKh3bCo{ z0Zg%}5wD8zzZOGPvAG;e!7ipDgIp@RVBPC6R$o=iki;9SES0FiI(47L-oC8ysvf6I zZpIOR8-*4pFNN(_Uj;G6CR-qpEdc>OZPKhta1qtil59a85@Jocg(Nz0>eL1jGD~)| z%|5n;Q%?~f^jaF+ClK6n8*LG-MrQ#9t)fbi_g8(#O+Xfyf;vQ@O9=l&nWd2)x`d#P zGcM?$Lmmohr%f^r=tIF#d!=x4a%pFpc-je=ng{__Q0Y@5)TNzR8U!XsURKl*?64;w zChcZwIa2DdhcplpA*D4~fJi+_C`^eip}q?whf4NneSoGs{{$Bdqm6!cmJ{UjTZGjVnNz6$IXh0K1 zCT{*?5yLWryKK!xGYp!GU6wPN_mxRJ?YWHydGo>Dh_HhoEa3=4NWv59Ml-l`OA9H; zJ`~C@H@=CXZrYc^9D-~pJEYEZX2=?`um*>yVGeN86O~wb#XSEsTT2n2XhRh`F^cVL z-(AX677V`2E3(^Cqqsu=P5g%pq}alNil%@~3`9ZhO9)^Bn1m!Kf6S-)RGQ!|jWJJgnl_imfR3!bJXCxj4Whgx{QuUVCq$MS(l0KnK5Qf4K z+y%u=W3ru_!n7tb1#guW@yJI?={nne&XgZ{-JM2)rQVJ1l(afjeoSI1L8)X>!=&8d z6xFy+8BTFBDJGDD;-|uaN=f81mA$Shw4TZ8I1m$vU^b>Dma%LrS@PAjc6Cmm0c%_e z3Bp7EhazX0t!&9+)>{~*p@)%+SZCR%KgHG0aY4smR3ZOpa@b`sg!=0#BU4U7@kKI& zIy5>}nSyc}!XWr<6P*4;mCG{bQID!qXC>R{cm63Wbdj`Tt^%pczEw_)Qm|$r{pd?^ zHm+5%6QxOz7rYn}1+4)=ArGO9Ko&E`s4XN3KpDy=`1HT~R75LJ!5a6bwMP%l(`;2! zz`Obg8U}r7PWlv;!|WE7vwnqXfh(&wDd!|5IImF6Ta-?e2RSA=YOj%k30(b(Oh9pE zOSbZprsgCkTUsQSowJCX6f#TDk#!`*O8}ZMBD~Z=sFb`*rR_RfOI=1`F+gDnD5XUO z!lXo#kc6c6EQwc^3_z375{PN1<0KxkOA=bpL~s9ly9G^D6J0c08+p#JD@gLqLN zmCSM%z1XEba*1wTEQsCczOq3AG+<#)auUXv$SEyym}jsHU0so8H0&*nYB&f)9acp) z@O>{0-GjpV?xu$O#qWJ@<31L;>N(b-XbquL;QwBTy>2 zc$T4f$U~38j91D#zNH+pDMw@^Q;gQ4^wcN{l)PS0$ikH*QSy>po*pM%;#%2>@_Jx4 zNb4K~l7ZM#lz!Pr?5OlVST1Brwd+zr6l?#df|%~JZ?YYpS@)4MOXVcYGp3SKYqlj! zz?eYVq)Z;=D7{X~d7ql}q6$R-Ay8qQa^+O0wh%NejKN+czL=~`t*VQNvsR;8wSxk> z&RG9ySiusf1k{9t@C1dPW&`iCxNy&DO+j31+NrU5DxZ((E7=TnS5+Rm?44;$+6i+P zyp%odes!!|!-i_ zr_Q%J&wXrh`Se|8(b`(W(z@aa=v|`{ND#QU#{o6mB2!S7gcu4Gcuk>fe7ZOR0ub>n zs#mP|8HnBL(zh(oZRK-QYhAF#s6+o%+h(`lCc&*gBF0XD8E^vWTP8xuc6u>MlfQSo1 zDH2h3RLMwxxszWOf&!Kh6-o|a0C=B-7TD%nO)O?Aaq|lLl3n-)iHBAJwhaHGK)m}& z-hcJ`<8>+jc>4JzoZT(VVGg($lqiroIf~L1PoEj;lE#AlG@*Q@`1;t#clNHQy%b+` zF4)^%_Of}rJyx~vo&o{->ge8PTq#_iPU&ZGeQB_#1es{L$lrMcrOR!Ri ze_EWjhZ#-lQHe;l5+DT}a|r*(VzX$5?ug?%T4>lj-eZOyvk*isQvZ%*iX$5dfKCQo zmXs8(1rtM|JX|(+b;n7A)k;-ncAz9#7EwE`)J1Q0J7UsiQ&M$=1y5wvSab4cA((5q zhG$Z8f&xKe&9Z2SB6C#mRcsd&D$yv@f>$?aJvOIA1erDkh5|P4B6uXG z31d)PBLyxx#cJrpGN}VBC=yfY6fRI`POCO7=l2o!Ay4w;Ys}(9HTW$d18V_?QYQs4 z>mgAF)@)YsPz~jVRZ%dn0c~@L9Brsj6;o3pWlc8Khc?wxfS7Df$cKceP$Ls>>Ell- z)o(H*Gv&sFE)|GBV^aT*h-}pYF9Wh7Mw0|?Mi4LOG-Pl!oMSW&0~A?O5lx|5T9rpk z#U~r5A$_!o%rX@b$1H$TEf2v(QeiY{^@~n%ioyttF6TGf5^07rO_RbTKmsU|LnuS2 zJkm5wMB#!=@Mw-Q5<#dbhr(AqA|bHV5Wk5mt!M2SqQX z9p_~n9myB=0(lIxS$V<`7^O4}qJa+qD**IPQUN0Bmq$|Zetcvh9+DwACS(_45+wo| z4FMxEQeJ`Ce=OpEWzl~&f*vYCC~#LjjhT=O$Rm#F5|gzRgasydHYK(cC$|(jc?O$GCpw_hChyWLSfePKsW{j3Ov<LbEU8j!OLZ!(k}ZAF5Ny>K z2>^z@rY!%^5*gA%0Fc5|Xn1UIm~GI;FV#k$=b~-icAw6sFy6LM^agMIX`gi{Z4Mx8~F9RxV;>K(mQ-(P+pgX0A7J7){cVbH@h#$&trp6rb;#0&ZpVJ8yD<>st z<%_+DEo|j5N%R#%^^4EKArlZS7Uh1@Vv8XM6!o`7;iodS5;P~XH^In7bJLoVWjkL7Ji2c|Y@mdGy0Re9l1TCC3+M3EsF`sH6o`AthH z6!#RAt3fkq;T%zPVOkkQsv@oukSt_C0%V}B>8h^q;y_)AL005J0uhUjAtR{i6i5{y zvAT}$#9a;17sCS)>?Z|(;S}=sOBP}h(;^Uhl$Q919xBLN_99&15rF$Qn1{4s8M_o) z26vWOoRR5vk=jhpGj{~=NkGB?iWUSYE03?_JGN>iO;>E4`GImqb>^tE;+SST`U*f?|Lr8tO8!s%&D0y!^Or9>EXzLYjwfP~T6gjh?8D5@}!QCnm&T5vTH zNr)%qQ5pIzsGEo+bE1woi1$`jO_;hMs!b6S6=cu`WY7Y<>$||a0oHlZ{}Sn~GwMNgFAj#3+6RjN{p)b@7OGpedT569p&{mnR_wNnvH#(-Te7Oiz+1kVIy5MTA1RX*>yUrvka@9Pe=$HRDYPdc zc3jYs3v`ix8LZUG#k@hSIoTdxtY8|JVP#xZWdwduNkaj$8f+|-XY4ctV7WK>9x2k3 zxi+U7`UKJT3 z_fsgcs#DQ6>0_9N`B8&O9*3!zeX&XY$igDKfM427Da;Zi{HUhs5nV!>q_lw;D6=rD zv!~gaYTC0Tm}hQ!C#|WbQ8&GVrk*A8o{1xz+0%n{G!y@;zd4s_lXj)flbn;1Jeh1kg}+S#45W-DqdFIs@n=zC2PhrJg81iJQ~TlIy7 z5iKGjJ&H4*5PC4*CNS=@pAky9)aGpXNfqEG1pzW|$->5)2sQsv(bHSdxQpQwI*KVk z9Wp=-FE{KIJ{2@+d2N3ucodt%V4;Na!XR3pG@~UDQB4X2poB@y3RS7n2wHFPmeSic zZzI!C-3HUGdus96xqc{#{gyEjpsv5$yDiWd8_>JMo4YB+ASPjQAd|0L#5Bf*AO0aG zd!__f!xawrwz)QEBY{utC%$_$7}O!Y1Sc^Am%jKhq%zO( z{5USSBLgv<@98JQSvmJSz(aVPc6D{z(K=CA&SYZFWCbU~{hH^PrWxGI8|X^&7!jg0 zs@!~mx3hs2A$CM&R0*&NoYKP7^AaUXfKqC*DLjpXLID3ffh4g^Wh+6iF)Vn(HCjre zsfz)=-Equa^mw|GdGfOrp-~xOK|h+27fKv>OkCiZ+FP0@%gnnN9AX&XwRT*<71M&n zc>9;m3dzvAtj9`5^!-%+fyQLuccXB_WZ=i7PzC{l#`#JLCGKLYN(w1T243CO7BLD@ z(F($tHZy)yARb(&k;k(^27-siY%mI1V7Yl*Mg-6bEV<#=QOMdFuGeu-iadN!-a{B3 zuF>aw(6tnH-2$0R2AljCn7l0JVc+m2$!ODJ0&*alU{SR~aHE2L0`h?ZK_X%kM{F6r zW~n*8{C;1RAy~s>VS`8a=gU?d6%&i*jlSkpw0QrHP8L@I7D4K z2B{=*H+R$=%MF1gYo6q%u?Xy^Nrgx6OuRbSH!ZkpV+qvD0cLfsz z99WSiocjB;^&2_0i!Bl&b6ntCLG$ePG6p8maa6-o_rXr?c%7!VPUtjR7##^09quEB zwVR01ywxoMfU;vnuUmBz9LIKj0WuUWEu4K^cnB~91yOPsxY*Y36t#y?u?bB+M(@H2 zdQ9Iz%DDbPK;MVd1OF~=j47JXl&+RBBt#f7zyt56wvt5$2 z*KCgvvL+I7&1P2lm@g81);XBfrw1#|m!wH65&AUoWk%((lo1I@Ha>9v6ujkIfVUhT zUO+-hD$S+qZt>;nb4BJw#Cn0f`1hA8c;HMd-+j3W4k0D49DYzS0T7bN5FoQjf|MS1kMGC2gWF$GHSh1oK2}vXv_u&)Q-t90UzLEvG=YuqS1FKHHcl{gO7qrXp_O(;XlJxmB{In1 zK!FJqP^twoTHs;>U@7|1AuVwAu`71RkVH!(b%aa0xY(3}3=;JM@7}sbL!!qThl??; z7^4W_Ai$=WGA$#M(9%K3AluDbKAj?Vu&zkd6gIk1N-&ado{Fivf@k^p)_j+PLN004Ib@HM<)oB8Ft5fq?q z-{e~JPt~M|L@Tp2*+TI^H@V5IvLbJYr=M)fNxOP)BuXuz3Jz+ty@cvf0u8s=fW)+5 z)q-&n7hl~h5;w7I^`hp|i*pj~;(`m^Tjyev--G9p%fhBO=y-}wvdSUln@|3E=AmDH zdgr6Jo_gu4$NqZANGXVbx9&Aa{6z~Q10wGO9mO(<78*!Y=2a!d`9(#Q=%7{%BA^u; z1^Norfmm-7tQf^WNTn!Jcx51!>KH`sr6*@;ZzUy3R!LUEz2tp_f*-+P2c=*^mXL%c zAf({-OvwKel|)d5@pH)MHkXs2kcJFxSV|I{auleH1}83&AW+uzI@V2OERu7G5(;)9 z#2`pGHZ#7^Kr> zEQT4-+ypPDA=n&=VxuH<1TiJy&3+bOAlgu2H-r2mZ-NjPJ}O}VLx2qd(u07sjSX{I z!%mANDV(xJ5|f&o&U(=H9X0N&~3bvWrsP(CdH^uZ6!45YB1_3V%KnLvJCv!Ep$ z$YuV~56@_1HOFj5T43Rj;)0|&ohYs_T8Ii498#@dF-bsAm zOe6nkNO2O=f+W%vLjY8fWE8Rzm5_v_vgk-*U6PWCc$F-afN3WCR8v1+g3n{g$)EWA zC$cU=P=xZUQSoXByb!WYhAs(Rsv1kG>h#RbJk&%w8H=VYs?j|;>qLo*Xj~RGnvI&t zL@3fsK!JssC0bDYn9uEiTXyT;L)XK!b%* zV3merv5VJ4`{!^;057|lD;+x_jYP<>x9nvqpEjMVebWE3 za+%s@Ez6g(Imc^Q(;5;WIh@mK?TM5WT6~h$+SdRmmaPd;To&NR-Qbq735reK=*GwS zaJ62a5vCT(!aBuiVs(!zOJS&5*3n#Ub8YG7P`>sP>)!EeqtggPNu-4vDVKF+A(41j z7qateA}DxSV(7@SyWJ@YcxA~WMy4PbcTVmqC(NGoDk8z>AuoCY-mmih8({1a7;{vge_7(f@p%l5|+sXThba3Zulx8#E3pa5@M8i*und3-cL}N(H8?n zbnBh5iwW=)9GBrKEhqyAR00#2Xe2E$iA?hHn3s+iCodT}5f%FqxaO#HEkXa0a$o)u znBpk_%Qt%FRIFl?&aBZ{MV?7jEK`+(SSB*g3UiE(ry9KQk&%py4Q_MuvIEtIkW1K^ z+va@R*--L5SEHA8GCLjPyr?)%3+;92RW+pfr9IyPC2^3}*{3m$YT>yK&fbO}L4LYt z{BaqAY{Sd`G-yGqE)W%J)uhJ->7jQ`S7q>Jm=Te|GA~Mzwb*+tY4$o&O~VV5FZ8G& z@#tgObY{oANoydbt4Vlq40{DP1$yP9GYliEzjCYHn6bz zt2y?X02c4-QPEVUG+B_Ul0w#3yIxGL8kT&P|)iBMpnkOd_uVF*0KPuF9{ zSOV4OWsA+FfP8tMpWTNohGqL7cNR5k3!1Zzgc>MOd09&19hFlXnp!w{Xih!{0WS(% z+gO{mM#rVjJOlL4_#E6q^7%h{qs?w-Ms~U(XpyiPfaA4%6Ik0Mxnp!Ai!?>v5|w3h z(e>PCngc`6sb%%pol7^POH~blH#p+WP&rqZg&z{&yuw$nlMw%%7cRUdcKMBG&!Y=& zanIX>6z1>r`)hsdS6}V2zpZnq`fA%+0K@G0S!^x5$uSl4q^N+YA3NHT% zSGY#}Q!a*^JB^cqk{LO|36-#s0^=cGQLz#eA;Fj&;i?Eyu?+TNo4}ERD*BBksX)*I zjzj|vu_3@L;-4LXAj z#@e$Uv<(6X0@;`koe6?H0uV-WJfIm6#ACFs!I}1@ z0hSnHj%X^Gl`*Lu84^4B7^B-5ABlw7F{e~Xm*}9Pf0>SLtCHc#H8wF2MKi;CDxwM- z#hCz;UOB~q>Xm~MMOI9xkdQuvLd90J!)bvkndx_un_Dm!dOT_GxKlqpesxSg^%U+FoAil~yZw0cpre_@;9 zP_ihv#HNvsb$rLsc#s4*h=(~cXLF3t0KP1^y0Idhq@y*7DJcU9$Y2VY_kb?3Vx^ZE z0iO;BsDeD~TdJ))TJt^WY2|&FUWHRM?74#xL^eW5r!i%`GosI}fcZy3d z0ypPN0>N0od0VjhqrL-su<T>Ga?~7FcIUY!%Q*71WXTNKN6cildv%6Nxztw zOcA=E6njh{12IxeF#$v&5o?|qtF9U;ik|>L7mG{)TZzjgv5lAw3o6K_%aG%li&Ie! z?br(_nlenXvbHG+?RdRsQVrsSGvgGCo)G`07*sQ>kUpC*!+B#t4LCs)v_Uwluf17- z9o)0oc$u|84!#Q|zZihmP)eQ&o$YX~>WDH;O1zW2!cE#5_{1FKxXA24n(Sa2NV|^p zh$QmByXlxT=GX$4p_y2snQdz(;>k5GIZ7tzk6l`j2n~=kj6=G)72>*(j3KxPVW!q; z2rk$)9Kpt#I4fb3rr;Dd=-{yD%b^IC>K}im*3(D>#Ab#DQ8jfE&gzskMr;6%G}aD~%Q>mC`O97MNnPj60Dw zL8zDV#)(TgWuz%&^u*+pC}PagYRvz|j+2h4BC2UrxpMKwZgf*#IW@IA2yx7ks34U< zyiIpZ51Lz|sJR-hf{^(m7=s+En;V!64W@;YQH}{FsOwaFaV8cKnO7MZ0zetyAg;Jj zJ0&PAn2DL2@jCmcECl$^rjd(7x~0bJC5{v&FHDac%{03EPqP`Cy9?GX438US8n8(% z@dP~h1e*=K4rpbxunEqB-~vjpk0o3}_!76@A(7-8%Kh-k#^S9%dKm!-E(a_3}L>64Oe~kaEBnSd^5{^t1-Fm_z9~nq*OO}Sxk%8*WAw>yU?9A;|MT^)s zb?c{#lg3>vU!OW(Urb;0U0?G}-Q>Ox?P~)5Fl@|%v0122{5>O({BC8sST!ERSm}8sZV6VI3D#W-dqMMEoo{pO% z8G|IqlDd+I8CBa2n@C9!1kRzN|i}aY*MN3IbT3jn!+$N@yTcQuVosT7m%frB;RHd731rV0V+drCDhbW1! zE08}4iJtll4oUxu^B<+vKD5*X0*C~C zjD$sAWM!IY zWx&q99JaiWpA8KcL$Fj%Ayv*g zAX|yt2sDmBm!3O_4d9)@u!;+OvfeaFX$9O}Zr9>G=MyAO6C|$FG&*-?o&-rA0;C*a zvaS@m$^wmdq9HC}g4I^*>bt^@*x_6r@Qr@+9+F?uC$6V&)s()|5W zBxOY=4c}QLmL>&jGkv#!+ETR6(zNclwboL#=4!ZZM*DR)io>{>`qP)H5d5ucEcMbl z&C;Cawcf>PwLX`R8aTGr0t4p8WU&nj7=j1YPS~ITwPQIkA(5$drmGqmoHHwb84e46 zSVjGpAc)nw>4@Q4CmkXfOKt7A06r5YCxQ$n4HeaZIhEEOjX#A@Jli>{n<-nO5Wc~) z#k&7toor}Vdb^0;G^CNaq$yTW`lKy{?)L~hh^AtRhT;`PFwml>Q+2nDS|JxinQf966A=Cs-@>4J#q6k~AaWY=o zYSsSi}BJEGitk|{_Fo* zJp)cBp`)R&Ae{lE+se+$3uwX7PT=G$$c<>udC&E%=*RsUY3(~kb!a8FEXn;yhXxNI zKnO3cB^`z(1AW!WQ@gG+>A1Mnv+1iCv5f~MyZR7pIt`{B@nTKvX=;*bYpJFa{X=XT zk}*J?bjb-893w~kN2V@O1XvD3WG61!glyxI1Thc|c{T%qb!WuhT#l1qjxe&eUoPd} zjswPMY+v^EDQs8Y{%u9}jZ+snznI#_VX148YQ|tp)0kr4Zzt?{*He0rc4+j&h-++X z@5W=X4aS-?27v4(2zVyIqFs@I3Ggw(;DFT%tD@1lOS}=3tdSZnkaM+L-pv0;0vKVU z>-d8d4jCO(kI7VFqSTSW#~2B2#S~*ucg`N9U%FDx|_B5FRVh8==J2?Uao!?~hyBT-@A?XX*$&2edk)h{G9~ zcL5%uoUh-3P5}oE8YGyi^z7=wE`Z%*jff}MV=@RoFGr3MM*a*&J{(At<8ij+;6c4D zn48LYa9F8{inWo?Wbpz+@mc<4zjWsPDzjGB9$DtF7N6zNRB z=g?tRt*nhFgzX$|;%|UW<-B?;SM2zSmj43~zGBW?2rf4F-I32=R z#0;++fBy3+L+5o4TXeq4q@F<~$$&T#K*?DBxLs|M zx8am6Nv9C#n8d3VO=8n_lrqIh2GMNK#|fG$BgYc@^S?e34~X zS0I8Y6NOAgu~AM`l*AKEOALk~K~Q9Il>$j9fs>0K*)&;B8<_{8L2n&|073)}#N?6$ zETqsu11V{clubT)P(oX3IZzUBEksb5P&&m@L1Sv!(wP577L>r6X|{=`L0oK7k$zlo zvc*vukra{=dD%n~j3iAq0fPjY*-}hNEHQ~qB?-Eq0)HB|$rg2TLMNUT)fthco)#5> zN>PZ)RjH(oDry3xj#a7@r%I5jtZ=EMi53KCAxVajL=j1@yXHCtfovw4KoTr%!3lp{ zD8&T$=OXyz$Zt zuf6Z$JMX>v=36hi^3^9_5)uGR@T4{q9SzOyf>0LB-)#{3WUtipue5 z5vXW!Ocs-TalcV;tFFi>XPh#)C&g+oc!Abb^LhU^*UW%OK}1`b1XFCV9~T@9Ei`}p zZ6HO^8?@QdNH&86umWN_1+u9XqAb`FAajg0*Q}~#U)UFlErkYOY4I&sABrsPb#G1kXs8kzi8S>~Eaf)Y0y5pikpdqL zb(EbFA-}rudS(TkRZ}fAo%Gagbz)j(U5{3YUJd3{5=gk2s8mKFkJL#Me7J?JVO@99 zWZhbao&31XU%&nL8-^KpjO|ZY|D~zOIRXDv4rzuHzyks>fe2in0JpAtjAaCgnKDt9OlAtR zR$B1Y6?sLWC~SxTnh=&(Vuhrpy~S9-^yLnOk)yP;j%&hg(T-<`G%0%i?XM(hT1T&O-1{AcTO~E~V zs+nAhMHxx-Y+PoP3wB;YET;|CCKpwLnHEwatYK|2T*2zzyf!hl7{-NQz0ldl29vVB zN=07-8OfBuRZ?yBYR9}NM$G?%Gd|7jPb!IC;ey~eLlz5hPeml0C}$AE#wkshv{IU= z^du}TvXE11tYjBrS;=B4vjpg*Qj#z=qEKWbLO7#DNhai z9$h3t1@e*aPPr`~Z}r5Ks)*)!KG9CAa=W5U?D#=Y{@Om~Qboc1o~zVHn%fAxaj z+5A^L{RIvT_oo;R-bM@a1>ts7Xu=gXIKL+e>sJRD;Q~HbjAH$2c2L4B0fBfx9HJsQkWsYo5)=O|B%(FXi_1c2qQm%%vTup%&~gbPAsLnfhVyvzz!S2NYIRNYKirK(l3>dUPNV9i_Y>LuK( zOA!kT#Y-)#KQ<&7t^J}-O@tL&;BlwF;@RwHM@**9jyA;F)v%3Hd)n2en70C!Fl~by z+Wqo2cnH>QnN|NZ+vGB-x7f{XRK-M8@%|XSTiWh@MhvFz9;v+H&9afjgY+yCKbDFjSrXL+NtLRLtk5*!5{b2XwQF4iOWEuL6O*gUtk*et zxPZ9U*@7(IUfU|%oM|}o3~o?0yYhk#0y%^1wM>bHBvTYg$(C&8aeMYNBVD=lFvA%E zr3!PJ1DVJ}Vm-2Mb|r6<5|Pom2+JQSiGup36F4S-cTO$MT}WFOukW%bT`!+qI%|~- zU&XY}!-{dM*TS(}ugP0ni&LVINh6J~w_NB57`Nvalt_X^VD*W-;};qB8W?{m?BE9R z>pu}Pkiq{H9M1oyLsI&k*TSN&jtTXbnTd(9fuTn)Nk3nD>imy`n0a7^XAj}uI|qN0 z?>*}wd>yf>*D!jri-@I znc``BiIJD={w~6wG!U0^@t0#pg2ZvOf12HvaVI#}4%XFSot((YnPFDeQO!a~od9Y{ z&_x#Jn8_s_U9sdDVojhW8CICc8JW}xXWfZ}3{Id7!2qO(&EQ3({Yj)5goOOW6qs75 zZQ7_^nx*8@r6onCgxd1e34z4LO%2nR43x2yOffyvGr3d|2AVoyQzY1$t;K};@Y>_W zOq%~V(q52LqQwQWkwrSGPqBeU!T=$@u~WE3RJ8F^O`Rb`X&%I&+q{sQ7_OmC-AlpH zVZ0#J9hRXQ+Rs#dTO3N1O|_f7y_+|s6cB<;$FS7D`5;Z5VI!j9BmUqaE@H{}VW%`- zfT$8tQPmWDQc75vXCYk#KG}~^9~^ zgjFsg-&lba%9xSNbxrKSm0TRoq-4aw1We!bNeJ4^5KPKp5epRgQPMeGWHk=r5M4EX z4ulwBqKuBzjhT~>Bj{wEV@XN$Ac>No#zb-$Yb>P*HKl22#~8Jr@_Cpj~2(Bj}3^bo+H*~y}XV5HfjquG!_NLojc#H6^Orghq53zKx-|IUBi6Rlh6@w%KRP$xOFFXdS8> zyznQxZ49bdOuwO2zpYHn{TsK1n@P=7AOKfDsJ}{Qh9;AShKyPf6droZ4h9H+7>dp; zle%gok>!j9ahun*&!j; zn0=->o@Qn;AR!sjn$+EOol#|;5|+`(LmW#G6hsgx0MFDTmgOUE*~O_<1W@SK+{I&E zUWrpib2W8A2wBDXj4p@Etq7;mQo=m`i=#Ych1Q#dXoOP=-DF#8N!jNmklL zxYkE3fL~GFHEM~}mEz|NAOfmcW*(9?ipe8Y9MQpPYc>)DY7)@7=AIFRF7eU~;??UY zz$DxjXPM;uNIkq~6wWB83ep#hoyVF72RQ7)m=CAzQHuF(K0s;#4y+(-4k| z6xa%`5X39KgeFMe;|WV&yu~-&EK6`2Cv}q&tdmS2X|Zi*OjJnB4Aiy=C>i3LBmPSo zK4O7NTR&-3;&#-Ie9Iep6pMzGePC1>X4JQVlz(azKrK{34U9(r@gYU|p|_F@xB(C% z9-<+plp?-VOV!goIpR#YOxdaw?5@;HaZBl@TTWF7G#1JU=h}+1^xA6yN(sRmeelB+Zc5y z%Xp}1)yKrpBC5ibg!IV}2*BVR78O#XU`bNXv z#%!BKodu&~+QB1HBn9r&6-UfnTmXSeC=pD2M2+m$b+NFfUFuO#s<0#%a?KbG^W67Q^1y_7YLDa1obwu(w#AHkX_IyPaY{;ztW`c7;MzU5be+fo~aYjpS z#;(GoavVY{Yj8yCN{aEe4y%J5*tzcHv6@i079U#@pK=@} zyKZq%M%cKbpJJ)3n>x)SCCk;0(}0kK4cP<<;t4PnjcG+P zODKR8OiGVb$fW?&4hoA6of_0yZ7(TBDZ%q3z;n_6WoLB4+N!`Bc0wmWgQT%_VTHi$ zcuwjRw2&s)Z6qVguWiDzY{IZf!G`3@wP-;mgw?VA;w_SlN-*eSAk~C6Xi3*6z)Z%$ zBoxBjL^^xv<*776`OD;nbmgAzL6I9vvosvqAwDtaNMi?3ue5$b6TNwiAOet;z6;Fo zYD_7piE3%gfoOkT+xs9Wz|c%^5(I%r!6#wb46^h6Ih};C^CpY|4PMH%Y=N}|DJu3& zUQ7jCi5ynB?KEu&`Es0JgauycNy@S3UuVk;O2~kY&6A?d{6_Va&h?M!Rfl+1J*r~S z$*DH-*_=v_&Sv0cUyjOpNu4cL%7Qjiz*(RF`f`{wG|W<8XyS_TuyEHYni3@KZqagt z%yMElay^&N)E1;fz$K0NHeCAG?|GjM6L)b%$BBUF7L;VfhDcp}MRd55Wo@K&9Z!SU z<%V4kck#s-S#ecZ8cMt!{Drr3|5A7l=ES1+d4GueEE$6+v0j`67tM^N1y6$zB=_6| z7YWNvNap)RjY$MX7Zu7)C~^Ai_e^LPfh%}=GdOtvl6p_9RyKHuFeUL}B`-ckUFgZ% zNkn;1xEG-$YNQ2*Ye5w$_B zi=o-K0t}K%tjJ4PH2Q6qgCoUmy>zbDBvQo>COIZn%J#MNEakIpas5W&1Mcl91B3!-ReBVhfT`=CZl}h*3yQe zR!z(ds;4`@pbLKW6xa|vA19+9XAiE_)nuqLjS8ig?b*`rSP<@a>Iqngq+Ni8uz2n6 zlJi3&$zEg%vuuG4r7u!(=Ry-eCUhY><;tyNixi+wtei8!T$-K;?eTnyHbZ(@8#`Jf z`?0gL4AS69^oa~k!lh6_Dow#qxnNmKM4wPZwc`x73k9-s0V+;Fw1YdhTYIukG%9jh zS*sEZntRRI5VoVcvd??H8~Y^x7zUErJ6a!xQkzJTl6WpofbtxVeqiEwdpLLp2<}o$ zrI*ci@9^=#ZBUU1q~DlZ!w1edQKx-cC!+NVy2tM93JRL|FKW`5eY4x)M1jN`d5-S4=?T z{axl`Pgq1=sOzG2&xC>hmX8NxD)M}Y+#LllX?TaH{*t#o>n~o}na4wbcZc7Wc|@v$ zPyj*l7Kxe9;1C?@+w1ZPOU9oE<6SNC)Qo$?2Ni61pz8h*=uCXnMcX3}6_kh5io`)K zUx$Zx>OcP#8U;Ld`1|$s^4-VqPo;(Y#D^Ep`!8})=y!9||9U^A0y%|6x?lRjHhBQV z5-I|h6dcHeAVLZSmoQkepkWd&TgXtfSh3=kBnb#aAs{6Qfg~9%ZlO43%cdzoK5m&Z zMF~uqN(wFzvV=fRj|70|^qCWA7LQP}NZDc(=~1Oxlp<{@MT=9ZN3}$$Dg|j&s!5^h zylVC1PLLphb_6Q_MTkwcH>D6@Sr#r&0!SkCL{N7w-ncz;@|_FRZ%!m|1IPW_7jR+( za?1`DITyj;kd7H2woDmlf{+9_=1d^@vuDbVLvtpb*)f+X6J1W^uzHJXE=mXpR3ael zLm?A5nJmkZV+5>Guy#y2k&DXJoRF)O@^ZoyDle%=r(T_U1dmZ7gybGlO81W46GV}) zUHtd)-qVXu(p`%tlUp>!pF%(Z0STOwL`fonz5fg&FNrOBi*1Stl#oIaDe7ymE3D$v zf&lvBv+%*HCXhk_+BPEqHUp8{VuRQ?c}=zGQd)5n7UyfxBp6qW@x`28GATKTbXT4Xo03op4FD}JTVLUf>RVsI z#mY`SGi8=jtTsiLyN{IUu(l4hn5;9yI-5*1k?t+6G@wE%EGJv@g=;Z=5es-<&`5Kv zV1kkVt?c2P@SP~AqdEAA~H6j%PfxY>}V`0kn8wL zNkg7)I@JcsS)l8Lq#~vy#uA$7p#lA{Xre_TOX;NjJ#P!9A`FS@$Ev>CvmojP3bu^O ztqN?Ttb)oat0akfi?fZAM9}916iI@ZI!172E^L&oMImv7Q8gST?OSh<8ybQMy`?Ou zi%9#XTgrhTLTCXHLtL#OC32pdwfT@^YPBH<7y_b#Ol5+AoE1NH2_}YMz;e1lUOn}O zl$g1-Nj&C4N`)ShnJENY(_C{%GsiJDlcwSdZRE9>cPu^ed|v3Wo0>i;*itSYBa2l3 z+W`6QU78@Q=ASS7W$C?7Dkju-CTO97+E;&7gdAdmwu?5wsKr}7iU5htMk*;bSBedn zRs*8vfCyML0ajXK5-`s+CNBFMn^wFhHR{!AD;FFN1vRJ?J(*=YfPzaFKGKn*m2f9F zNx~G!29gK>04NO`P{cC!Fc})=hM0j1#c(K>f-THoozbCS;=(V~=nIIZ*&19zgRjA8 zVMKM?0;7sIGnc!$LR#hyY3e(0R_& zk@INBEE~yF9ru{0_1w`T?-68t_@tBc_@_I7Or*Uw!XH{~=v$E>0EDzaNeB`DAQF|F zP<13Q+isKy3o}Y zO?;$nC6q#u8pQ!F9Lk+kOyf2s1;IzEDJ;Yx30+k& z%|s}0;K($357g;MzCaKS#xP?w%VQXAb z(H6KsYA%~{Dx`13Q?sI?pl}`KBm3E5NB#Ae&1mLf0u#&<2j;JP!R15$J!#})lK2<` zGz_am%}K>9bFiV-&@TSsUso&R7>?cUV^XvmO%iuKF05>Sw;JE`q(BBqN$zJL)9dYe zHk+{ojA?tC}a#6!sSvVJ1Q6@ zuUz;oJ%P4_nDBNrx`f^QR;458wvlkMdr9W(I)&9`mvv1d(`#pQvxOE!X2MgiYh?>5 zpeDt57_^|&j7C1OM2~~rW8v>A;#Td&=6v|X=Y5(7Gy8t!DgoyIiUd$+-t{5mAgF^d z=unp`VAXX#8A%oh9TNq|Y)dI6F^Vb|q@S4FWP!oD;)W##mzR|#3R_qLOq%kPr*u%k zPobcWyNBSNm?bQ6fu0mRgr~M;FeySF?6}2@h??a>}&B;qkaEXflf4!n9s4AKWQWdS$8q`pcCquyCOeour_MY^Y>TympJy%FA<+Gn}2lBshVWqDb#cibqDpq`m(+p5y| zv?&~{XVQp2!D(clgxFOA<=MmvNP>0Eq?xfIVQVmtLKY(NJV~%HWZ#N-P`5>`wC!3{ zN?EB(KP#?oRnq2ejCV-W#V#TfIa5aGo@e1y!cJ?o%tRz}S@30=e09BF2m?)Kj(VD} zr@4lEG0c^>TGX&gHKIiA$q>()R?J7ppYzP7qxH+&uHv3P~ zjOH}JDz<5d#oFW}+v$*yoW)*@OUDG_m9ilgvPl42*?!KH`uu%Cwz`uXe;dX5yk0h? zq+4rg&l;3WiEx%%Z)_L>zM6cjH4F)sa_NaX-0BUu8byeyyt@$EQDFk$l@bM{?_AkP zH&q280N~m!WeL*a zCIVnTF7N6#V_7IjCUUI)R8XC8>?-JQ3!EqaEJ#S8&Z1~y3@HfAfTkx3N)CeJg6-mt zh$1EkZz!TH=F1$&USO`%`ep2js>{4i3P0ni_@nI#MiX2^NH~BB62;DRrHaDvSTyg8 z$VE>I&1VV@Ivz#T7Vq)4*Tei8ttFD0}wIoJuJ;Urizg? z131VII0|IeG7C_$KocNq<^oALw4mlBVUjjUL*7IKH7(Enj+wA&qOhr%m}E!TZQE$6 z3tMTIkcmac%iK0$mZojSD8bwOrdW=Np>U$yQt=^N(Mon{+FFekb*Z6%Q527&>U<8B zP)Zq_WqkJIWd@O3qJrqir9$Fqio#I;QHp0n=m{JrMGEdIpL7Zj_h_GND(cj!1&u-p zq649ppj24pys}T)tgD)WYQqwdACW);S_DFhBaj#i=2lLlc0>W*qN9FDC*ZAZ$OTYl zid>4WIGoWp=7TA$ ziO>#Nl&XkyNMQKlGb~0hUap7y!Y`mqFMOydg%V@1j>Qn5?p%)~Vh<{oQiZ};$0Z^x`i8G~#y~m-ryzvOAr_(_76QV4h9SZW z`DUyCv`KlEf(Juy$O0*53=mLEf(*DI|MCwikxMy`;yxz8D*Ns@s{+Vg?8eTgHWH8^ z9xNdQVl^EwH&~}vrYH4Aup=BpsQzaRC}I=hb5@KZ2|_{wf`B#@#JOx@2|gqUVdlN4 zr#lCfD>%sgrV~^a^dkrid9L%h%4hUC!XxE~9owR@?jxvt@-JY>$<$7VEQUk><*MW& zM3Zs|A0w==EJej`V8Sf_C!6YsrZ5VXQli*wKESCPlcPC$6jAQ%>hz;Q!09{)ZF1J= zB>?0O8!eGGA>dp>Zd4>ZCQZ`TqdeM!O0hH$1Cfs2BS;sKJVGv6Y(>*J;y4myL9Bw* zOp-lzf;f;4LnmaNI#DM&!z1JFP4SZUW%>U(C)z50wtdP7Kbq)BMx+la&!x4?0b z$yBtY*lfv2XoD6VB06p{nT`>6q-{%tk(YF(neK7Md_)#4u9mQAq_m>lR>WGQ#Ut4z z>hQ=TFm%844It0JZ_8YT!msw@`c%Bajnfx>U5z*dL{D!Fm?-s&?-5>X3D z@y6osCS^7B4P>sS@eqqFBx7hJkMgQ!vKWi0;1bAMhF!}dMBWi9GO2}@r9UV`^d^Y( z8gv4L<|ego0B>GpaJ#fS@SafkT=NBp9Xe!}nef`x8>hfEmLB)G(Ppl$2D#Ge^dkvqL**Ri2bHkx zj?gdw1}23t?zpP5Qgkr177EYKd^OgKstRFdbS^q0pNMKOvXEtcG>W*W2{{9d&X5f) zE@9v8qs~zRv|yfCFFLrV4!hKj{BR%(5s$_+4>eej5Xnn7u+zenAIWeq7qLV>2`Vtr zBQVkbJ5DW-qJV8?SVC&9)jUMe#uTYo?>KS|l@Jx1goTO!q?q-tv+DvtU5R-txLREwpaz8PO9+2eam8E#7bbCOnybQWaZBP zCgoydT2?C6YAUI)Ee-4{{tjoq_Gr5D2LDPaepcOZwJ{e9X%`FeB#&t-Z-0Ow5j|o* zIAWjQvQPFypEIw;>V+=JAZKGxP_n=ykzhNvRtk`y)JD%5-{ozbHV*eIzGMqAS&IxB zhjOUTZXcJPf=g~HcblY3eke>dZ3Y3StARiSITE+8rVn&RDKSw(x>RKe2JbYpuQnZU zbxNmWmP;zj)~MTyIRngs;tS$n8UCDS{@TI?v*P}q6MGQkSA%n%xB7qvurIH+b%X4C z`O*O8=6%3ZJgGHysC6|9BrDuy0X!!+)FNGjg$#NpKAF>rYYXS*T7kevgz+N(dbZOc zkEh0tr$Cp}dWn-OY-}pRB7;Jyo$rKqi42_N@2~nPd^ONUM`L|Q)?qjlnAHwMj}k@Y zmteXKWC`*`lPK)o_b_6vsX!J1B!Nc*$j(dzImQ*w44AIyh$Y_=wf2yY@Q~oPKx`l7 zD6sT`DUH#}Bhn%b(kRgoA9fK%4!g;)k(xFUQv!S>U=lQm0ED6{O7e5d15Pzbq=q}Y zDeFIEZP(VV*&bEczK!|#c1>mzOrS{?{dNIfLQYgni>GZ-xggg9Xdsf9Px%Ji%;b@1 zF)~l_h^aWfo0wdhvBDXR>5TO}#;GmptuZAe;#i1Rx3N)N15pCbXMr{Uk0Iq(i`8BM zSx{~YR?X!jR_ZU;rdI!(0-#SG530h>t6HzM3f>}Ol zSz?^$uDn~~)mM0~p8(}v(PmY{9L%?(CE)~Gg@#bP++c5+VG-7ObNMaXT$dSxUyh0= zCw2%gHk(!3U|^fYD9v}{f=FE2Z0B-$#T3yy%| z$7YpiUJpmu57>>maIFvc+V*k1%Qpc>*Rt|;s4I76ntr}<_KeN{_`Gj+iu$suZ+0;E z+8<|CYGQRL7i}>z98H?36FYe{HwKsHb1fZe6ih4b&nfe+dX>?D!Uos({qwd%$UG}{ z!&Bhb$98Qu+8a=QoVR%>Bq#h61a$<(U~>#$B(Jw%3^b5rLdN5q*CS#s3KqlPM`%Is zy?cn2i+ewa%&PH#7j)^>}oPe#CAHSTn-upW5OM_b}`o*gPDiL~2U{ zT!PU$IFSkw4>!U){%|`0guCG$5i!k#OIYut{#!NUd$0ok6WNB+JqzBV;G9en@EN41 zF6GoV%+zy&hs~IkFJz*EjXL-iQ(v)}rhrsMG1$I@32;p{e3904rN15Anm%7jR!M+7 z)tGcmj72eylM$6d5*p!ceD08?7Sxd8q(tN_4FAnhEQOx%SdX_rr(#)MO4-QUIGobO zSq)U3Hl*T6Aul48n!lcgF^v0Y<^66L*4Il_85h#Ixz=KI7C{aLwp+hB9rchb(P{G251R@v&VlaV0 z0tt|OOhQ29$B`vb8Z;TQqsfy5NE(#c5+(wfCllcRM51$JN{&8*5&#;3BZ8qYMFRbJ zl;caGOPwbDxb!4Ppj)<(nZjiY7p_{pdIkHH3(SHVrI3uGwk^qoZ`-m>B4ut}wFb9L z(aS}OLMb!x(v3?vCf=C_@kTMYSfj^~9t%p&_|c<5jc5rJT%5Tx%*6&J?3FSBa1<@4 zqbx?9MT!Qb0<-OF{!l;}#j>K)I0{MhPDmZ*omV0%`*)fo(7627?dv0JEcnQvXlg78^ww;Weg zK$o6$0x`G67z9qFo^|nr*JJ)uV5<^;nk{B_?(nib!rjokZ3(Ink3&F0sH85H^_} z0Yf}EUqeV}l-Ng0C^3P5WQO_Q5(IFuNmgSZx8QpO2odIYW}YMx5+NcH#Z#&ol*M9z zAt|D98V-8m6q@-aB3%R!X&YNd61oL)#ZfA0Rw53Rgc5_fC55J*eiR}^5*<{~KobZz z7y(VOiWE$+e)JMiRZ(SYMp9YjYE-OxDO9Ymz9bS!EFs3yu`$(@Q>-oZW*JP+KC4np zzHJ~D8JsM~iC(2y%Y}G3C1F_<5hO(a?phHN^cUhbXY_EGtXR1a<$M?oUP{4Q^d{1wog-Sw$^u# zHk{pHgT1CC>&kXlymevb7homZ?3xy_Nw9^tTyP+kHv6*;EcKH1KOr+0k16T12!G z#V;X2-FN%U1@l7>^ijDnY2+oj8L75dyy>z$g%lbD%Cd;(A0Auz#3{sEPZ1vs4S6|F3DK?E6y|16@A{-w$y2oxXz6D6x;!HQVP5>`hl^Awj@P+<4|ZP?2MW z$RZXNF$b0&s!JCcbTjAq*hE62t`*1>7kDdb*Ryq<|;yf#yiJ!zC;U!YFuN zCZ6zA4UdQuM@ykdIEiYdTX@sTf&j*${u>BG0D~hm>5F0&TnWXPLc&+Uq$)Cb$woUW zLOU&tCm=y-w3r3|L1S4Ef-S8{Pf|*)VJVAZ;^GMqB2XNPW#@9=+JbK~pvFyv=3Lk- zQM$tC7kRboW$c2>yIje`bzM|7R{b7tvf3_rtuA7|g4Mys`Y@2tq^x93YgtdyFrAbp zbOtF|T~t#S0*JADbmdsdSe7amZsJojZL7KfqlBB;OlQc^+1a9pH@AsRXm^8N-`?Xl zq)nuGQ@Yz&*2Y-JuI*@BTddD6E4(Q{Pqdv)?V2VrzNj&_vVWD0_gD!jrkXBLJj$(o zzOsSHO>PU4lbpSdR-P$fj&s8$AL&FSIMRVmNE(Vrbz;*e(}fOF!@+H#Xs4mwdG|R+ z(_QeIM?B&GEzdF=^oRna6wd#w4R@-w8bxB|rMIN3jPV-SU}Ga9{*vyty7jO7{6{c0 zB8IuL0Wj&lb~jBFB!O9tFk`l=z=mKXff&AsLeljZn`V?+4qGX;fFjdk!DOV+%BTll zdcs)Ms)8!~ut{rml2-ZTDAzLzQUEZVut)#_H!N3Hw$hh%X@G}-2`HnCk97Pae4+#1 zDM7OTEbi%!dgy~FPf~i6_(}Cv2-Vs^CsNQ^!7g^`GHV?oQ;s6CC3j%tB0tkeZ#nwq ze~U9rUm}W^KT1t8RpjR-LFw5|VgNKJk{)VTQcF{!07i=Pn~#8V0sdiLxX+Y?w!Ozq zZ5jhc{`oyUea77)gW{iiNW`ZdS57P$xJ4 zgc#Mwde)Oyod78dUCnCNsKrR4PcMsvZ#+V>AptHoAxaTo*a%j$3f(n0D-Hp+Ac@y9 z7;OtNbli%jCarY^QJ57PXqCnZ()P|fK9eueng-kGsi}EkbDHIu)VuQVO|@nlpA@9_ z_r^laHQlQV(qT8RqkGO}MMiHG9Lt{DxaBS`!E$YC zf{FAx)j?`qa^FJUrO#}2?rs8|&OY$AKRoja&1GEAUJ{hoUhgZQIH>*WugX>5f|Zdm z@zQPRyeNCw7k}>syog0~!v8M$T)^fNfVPoXR;6LhS6A{fKYUgZ7Dhl9ArJ}w1Uodv zK`YmB&0>Kz#X>xR6DW2;(jsGC2ZF#NK|m%!HRe$wm_j5aDxkI;B7p#8#xlI77g2Cz zsBvUT#Sn=>7lN|^N3sEMF(S0aP(g@9Q&we01ZNThWI*s`ANO%#W<^g(8NQ-}Qj{1| z0CS7uX0Eg-C9x-lF-$_FDWT&Uu4F@$L4-kaYf0lZ?@?*sh9(QZA1(Mail$E3R~=KL z9(zat6mUs)v`7yUPRwC6jKlx{G6uCY3AzSq4#HmJBS~C=NP$Qo5+WYOMILta9*p>E zb0jI5C`j^RaI_UDk>Y14(jv7KBQ!E2HIhpjf+IsROmx;uwpeV$q-=@*A#nT!UeE?5 z&IDf4R88RZAjD`qycVANG$^IFKtL zVjW~sUDtCgc97B1foSzXNDy<&VHR$5Uoux@M7Klt^)Lz1ROQ1{8bBmoWiAnBbdoWW z5k`_p7go@cFlx1R5u+2}S9dF=Ruj}#l@SFKQyPL(GkHfc_rz9hW-@gVcG}f;L3DLy zRYeJgGdi<(eYbb%7jvYAhfQ-fQ$Rh5*F2_WHjW2byi;1+GL@qL6*OH_cw`BBX~|l+ zfqtn~S+b>XwDm54(qF@7mpqbBr(=7+#aqVpmzoHeQ*d{~_c_96n6jZL^cN`2f#jGGjc^XkNiYT!Tg&BBqlsV?!_F8wbdk zr88^+Hf&i5Vfv>8=;c7^lVGzMbk0R|7;%zxNu27EDEZev1D0VH!C^QRE){rSpgDmn zcN1cTEJBfjCm|F6_>UWBD+2i{Md2zh$Wa_YF;3wn7H4Bf5uPG31w^JCi(wKG00kOB zL(7pGPo^UoKp7WZ$mMzdIo3wMffgo<+HmoL(apa_ezh-_mNr?_||w^*m&10<-ZPQS=ZL27NJ1s%pH zhwj!u6(lD95sh*ZjqO!vw;G zFx4z2cAX$*a>x=>BbOIw<6Bw)LEwWjGRHC+kOk?Y0gTZw*m^kMii6y983|~TT9tJA zqI3u2bvJpCN(qzj>M%HYJQJfmG5Me6IC>XTI!<{r2_`Q5q8bTs8YMG6sd5=6V;i$G zs%w={ha*%3(06O%mOoQ@7ON(bXI>JaA7g1*VOchzrJ0GRmZdjZXfiapp_NMjdXr^0 ze0`ML#SvDGECrc?Wdd6|t=)38fJ?DT8~n^m`Pddw&^xsgpXy zH=B4`bdpJ3Pb*vK11O`zK3)`kUX(JIxl9!QKn2;>eZOP2L(n`rxES#RRsf55Dtk2s zu^o#CHXRBa@)HGrk}i9TT_#h8WmrDNH@Izyn+%8+$GNkIQ-4jRUxo90$LXQmvs5{| zIs?>z4LCE)sTsP-QOjzq+~{&9Hh~vN6T>nR$y!n`=Yb*^o+;ny6Ff? zEkmEckuLdR7Ctzt%4VP4vp!&CgHe`bU6KHD=^I6Ogfam@3BV8y`Vpscg&N_IW(F%! z2rScCF@PeXZn;}=Lmj8ccXBry%o`ITgKTjFVs7?dr}2(A1QKwxV7T;2mFTF2mq~Iy|$QSCtX;exe)uA5P=cA1O6f{lhBAM14jHn;PC>?y5w$`yVkrZly`HHEu z7f~atwBHOpjjpy8HHV+9@kWOr9V|kRLTdFR`vWff6x^ zQeHQmkg=4qE1d<|lFK5I-_jKWF`qRj0a`FO<#S|Rg@aJw8$mZ%o2-#b*R7D!RYf;H z_ob7N+^}R7Rx!zu{1?j;RFilA`;yml8f5ua1L2c~HFmNk6Zhpxi9@uc0V@BMIE(W> zRX2Vw<6OnjcYUWbiltd3%QMZRPQ8S(BC~%a!14&e4;Y6l;2@ z&=ug{OapoDiUHuX}DjonOQdnwa`YE7ku|wJ*4 zYHicRnb&3=%u|AQibW!|7-Q9h31AsPFcOoZh;33%V-O+<02Bx)g}xMU_N$J#)>H0+ z9mvGa(MLPC<0o$a+$S(mjvrd8q&O1;p>Ku}$MOg&vWgTav=ZZag14G+B=L_Gq^lQK zLg)$B?E1QFR6!khy3fiiA7+BEBFWm~$q2A#8nOWdkgdg(F8w*M*y>fvMTA#mUr|6* zQnWhEB6S?Z5NVZOA9SziWs_(n<+*$_ZwVhD%vXqldWMBFV^<_tRLrL{m>gO+I%H-GmPz(WO;;F;w-Xq+WIAFFswGtQ;uHFgu|MMD7T?00sf zAv-&S_C0n55Bk6)wL>VaKgFF7kBk99F#>Z^zEVx>rxV+#I+vE}D_{X6eSE*Gf zdkrb7@h4T=={cS4_NPAF&QPS0?eYii!FlO~lV9e}dgxw8LA}ZWq@0@j?hg358I;vI zrPQfAtg@SdQcXb`x9<@&knWjOBlOiE6jr<jD2K8Q?OTs;-#U>ZseIjR?_WHzZ<3rrfeInRxr+Tk!+>NHr z2HsH;j8&pe)TF@bVJEzi1n7vO5=W@ZA`?IWb1PrYk^}_* z8Y+-Npy0rQQnqN?B5BK{En2p0`p9Jy7by#tm_&I}z1J2uLQS9nGkWxl(%~;x|L{H;$MOUH5Bw%aV!C{ZoiV9 zj21Fti-#dkKpL6?(j`fgGAOMQwNTbe5WaSJFbV8~NC?=bO&f`ns+#;q5Td@K)?bOM3BMP{9_1-{1Ctop$RKID8Jekia@pq zF3it14J)MZwGl@&kpK!c{Ln&)fC4HogS3dku^P3|fHEW^kb;byYK%gIC^Aq;q97|0 zQVRobivWq?DC;l-C^E>cp$?bq(7G&Rv+f}48tRgOFA+*lOf$;_lT0qv{O_tUrq}|` z!KNUIi!Ffi2~RpL8VtPzrXXMnC8oGBqmCK_64B`fOG1hy7%K=!Df(MztSthJAOY*H zg7hy>JM;8TId!692?mBR=~R@Iph8p_<(xtYlc*qI2_^9KNwt&coC{C?*Op+y)InXH zqSR7#N_B`OOhr`+7?&`1&phE2b=prC12x;ZzVcL}MkNKeQUX3DH(M!qC1ZJ9ydDY+azX1VVi6N)Z!mGKn1* zy4d0-5d?zXvuG@C-+4zax8Kf8CRYh5l=#$92^#(OpeNfpXfnzWvRS!^YKHl(o;j0k z<+oH;8RjBItPsH4T+C3#+%{}F>ZO}rk!jdawAw+ar{+390-s)bw*C@C5W?JWOVB_{ z6=W&S<{rz@EFt9vi+~8A7#AqHvmi19+qyGIism{zs6)fY0}t>2Dr0M?amF9Fk|Db# zzp}u|t&9yp$R9LNa)agq$)`yMqk^diRMryGh-1*V>H1jf>=a^0`!aPMgy7| zLTd`B+1~U}13l@j>NQJh9NH|WIj|uF0a5sfU1EX}P24R15@Rt>XE-Ie3L=Ss&H2k? zB=SHiZqbS@JeLx%^&Jn{%}C}M4;0UmmhpUNjpPxFn9w6f^}xqH>6v4EWTT}a!lrYu zq156KGB(;o=xYn24cYui$b~Gah)>fRB#THmsU4(5PJ4~k8l^vi#6?J3xKWO1WSuA= zKm$`CgGFSPqnZV&J9fKR76{NcyFsBiQu5nvl7Ij#<)%YLLdY*4IY?j@F-)(q&TQ%v z!@0=GSJBdwp76J)DJ0=#T2Mk@s<|(WXe2WC0%vv5gTx{^4uy3|lr_!hB_vjnUT{(v z!b+p8=^cz!#CjDM2DOu04Q2?Z3f2PXG|*;pp`NAxxhIV9InaFaDxV`+=rqYi7k~Xl zKVtb702Oi^l7Wg^=>q8jK^mEgcC@4?HK|258cvk5YfeXjX~76qs-%>P0R%``t&*~= zhAF@{PJ(6O3IqiEAi-j~#Er!gbkyMm03sc^2vj{nkd2BgUNK~5O4}tgi44kH66nt{ zhY6dVkrihc6&lg@XQur%3Ozl8S@K?U$%{QwYaO82WDWpIKYK;JtsO3b_=AaGab(;rZ5-gjD;h7m6dMB zGXvf*%Ctb3qtGxXLrG0ibaI*=O0SWb>*Ejo>dWnV1GgdXs>jBGuHC|Q==^0OAMQpnHFSuoduFaf0CWlq?i=6*&v`v z^|_Lx&tyhE@=>UlUelJmL}^ZMNg-hZwL==xC{Q)fS_EC_ft^V$JZ1A+EzF7F64gzp z;>%tI8Pv{R+fGI0%hv|^k9wF_5l@knPg|I0svH_m)!eFD`1}{pcbG6*F-^x4tMy{jJhMk-bZ2WdToO6C427uhKh&FU}^M;7t zW!l6U&v{Kc)cJED{~!SYQdjfX&?dwNb={Ct*9}=UfTQj}CM-lE02CsSg*9%Ka2?KlUv?w{Z$gr2-6^3806= zS~za*8Y78736Dpc2YqyLH<6bWPMsEhg2bu~ z!pSSOk+DQV2nBc$6^g1&sIK7{yDaJq2^z6;2{?(+BF*w5<{&UHDx3DOqm=6s?I;p8 z8Vev!v^~MJk&^DxypB zkG`5Qq+7z=aKfYOpI|bhL9?YHk%BR(7FQZ2ihHzmqPRD+q}MVN+5o0BoH5#7jA&Z5IKh)+lapq`HatW>CF+d9s60ZU5van5L`f7^vkvJ%L`6vyUvn8G zvy^Q4xOAI>lTeobTe&`l;zU)GCa7RGgoBo9At+~RAcHy;n{u{vYbXSp7FQ&hscNR9 zAc^_0IkdvXN_-bo5~*ICx4(!BbknzC^tWOp#(x=%(V!`Tsi}fVieP!h>46@GtBsAC zIIaN#igB20oVcYjtRx5m2PCU8ARwp$i@&KT8wxphL78l63%oms%3GP_v8JE7nVEaJ zs=`N`xf!t_8WTE>SHn4->lw9ji?`Yth+(?30h=joNF!RqIkO}syp1vI!3Wt7Ac8E7 zJVMk$o2p|#15~75atx2SK2CU`@t_Q}!<(Ne2(>?h~Jg=ZUl}WCPz`XRsohSf}_L#7N@Ji78 z%F(Nxx}ze@TMO8Us;-DV_4*0&c`x5;J?|O{N@z;A+=TN&iP>Yyr;ML-K}x=i367YA zO^FE12q2Ei2%s6i+{-=$YfJ_T#x3wZ$)pRy$RN$4FtrFUbHonp0I>n;%qoJ8dKo{? zC^^4?pwTqB{UZ$;N-@&Nq1N!Oy~CV2i=<%^M+MOWkmw4KXez?5x4gk`FtA4;ahH+f`X-7pR0;;E0H{SiTi}BeNu+#RwF+h>PmeJ~Gh0 z|2qjLZLP+PuYRq2>XOn1~Eck-v&CzS9v>10o>Q^dQvJK&ai8 z?D|^BKuw+fi;%4;D!`%hffgoU0QF&lk5vjD3KOFYRzF%u7;~i8z$gPj%C0D~Aygg# z3Pxk|AS~J}$aoAPyNjEAr4qEf8Qj)4f)eIaqu~e(&5a}V2n=D9HU7~b?+9JN+0^v_ zPnD5^zAaV)8A-0I&-Dbmkv!LAHM8{GyQx`E3c-ywjKZUX$ft2Sg?yw78LR{VBBL87 z1LRiLVw|NDr2m9SspFbEi$dEFtN?foanxJd%AAG>f}afE0B|J9;lUtaz}PS<|M4uM zm^9a=amW(k)(D^w=#8-ysYWq!DyIs^{e2ooLSBZ@-u+bor|O+>+#|tqPxOV24k=&) zd0_O_-u|V!`{bpeQjv$T&$*H~!l@dfn+*UEtApTP0?^*vDB%Ke!le_(hQOL7f!-yl z&%vS%`(3n+!PTZAIt?+9`NXpgX+nh9;Vv0q1rP!gcEAEw00dTI0zL==_Fsn>5#Hq* z0Px+293~$oLafo={D9sah7CuHGfdS_jO?8fVcq+UILj$l3`s1fGm+X1Gxp^gkmTU7 zqhV0RV!wjpW-YVo9gwd}<3UCwzO`N2RlvgYGReBStLvIac1f#K5yNt1|Mv|dVGWzn zLRYfUtBMRl>CL)C##^&-Pdt{mnry6F)!;cEq)KjO1!?5kaOB|q!7hu*Vg0K#PS3om zz-QEi51W=5-DbH3JZ92It{X=OF53m$cX)`@`@BstRuM9u$o^=Nrn@wxd1?!G5$knh zvJSeXsWVfqGoh2!!m;F}j%(rto3IYvwI*J;mg<^L5xAyeTV+UEO%bFcYU<4-4|b8^ zB{Qeq)km%~rXK7fDy8Y&7+sx6qKjW6x?-5F5XtuJLjB>j-dp@MWA#*Qtl4S&)laK_ zWGa?3#x|R&E^M$7?WZ9+(3Zk7&TH46nsipePG&la{$<7jS0Dg zmIiLy1!p@h=D7pHuVGe>reo^$Ziyu6`vvb~1>#_x>(=G&|B5c(co_GLvs$-e+<)W&a+ea=uOJ{hGV7BnNS2{%+`B zwq(!dTX8<^lNN4FUhVXy%}2uSU#4U6oNtak`toACCsPxiV%p7F4G z-A1x*>Yne}6+Gy+@e&VhtWNOz%;MMHk0gW3UtHdG5&Q<;V<&WY;YaQEwz663O4bOEmrjYukWa=s+5+ zH!J1Von(hjXiWm=R=1>c7jjruk@xm(m+o~8+3&12B6)Y{EN93NA9h_|Lw>$p@jOpV z688Mob-@bwlh)f|zsNymcUC6ChmWiwOzG0*@I->|>Q3%7OEZW6cTewUk#}jwhL}k& z>Z|7Rt=VbJ)@s|v&#QiUnr>hQq3f8wV zLRuwiu9hUEhOL^0@cNYUtWJ59W;&)~>y;nvSzYy6rE&*JZ6+b=q_69mHuKLWk)!AB z+m3lja!A6HUY|zk?~du5cbZ;hdgwh7`h9Ga&vLARb47PF&BjKWhWe&we4STx!e{#p z8G1MC&yt_9zLt8)SNpTZGeiGrudi)R@A?LII-KwPrKjN)zwr*QAQHc7Jem7yjMXcTnfL zjc4iEXF5lYPwj_(Se57F$2uMk`5t8b|KSI5lt%FikNfsla1zh-`)2>se*G8^={dJ~ z*44XI*KQ342m%C<2pm|DAb|u33o>k2Fp0v3NeoUb7*Qa?iv%i0tSIne0*(tAj&#US zqs5FQKc?K+aU;xy1U+J8`H|*9lNNX8WC&59M~E^VCeUe=ArO;E86qIC^r*?94xg^9 zNgx8$f=x>bOj?p^!K6)*HUwaBECB=&q^?b?)oIVT4Y5jWd$lCmqg)#t1~ZDBz}hyTq|88wf+-P6JSwGK?YP51@w+K_~HJXI_;njPU3*-&e z^z#TF@fxho)MWAVP$w=F`B5d&gz{My?O5MvNSi(%mhaECD1Y-E1|V(mxl|HI76o-u zO9B$e-%Jky$lio7$p=zK{~_@pP6_JwAW!UBC=rPDEhwObK$XWKh>}&*6pR{X7vP8; zX4T?f4vjRHh{5^jQeZKG7a58T;aC)SFy@FBj{}W`1OiaHg+Ogn8ix^*M*4K$ee@N1 zV|#gtNK=VL))(P^6D4KiL>xKBp?)a_NFbdiDFi2cKh5dpdlFFu;f&+;X{3xQCWPRF z5enL)L7fp*sGm5s2UBek|1O16pEja)oo6F<_2X}FVfGZM{XsXRYft%>Rc_anI@Lgs z5q4Z@uGKmebh!mt8+4bw_9;Qh<%CvlmgV>s%y* z9H4jdLd;};D6b3`PM;ZDs&AaSB^G2+I@e}T8o>wfO&_gUVM}@nWz&hjIyvc3j-d)< zoQC>or&dvGJtKdb|I)Z$$hBF`HP&Bh?V)kHZtWkXIL5T~lg@!nw#R9D+UR=GE#`Jj zQaafj;D4r;V+flhw%XQ__$Hz#ANsa=aO3^;hYd=Y;h-A1 z7xmK)qE7VZu>+b=o0v*U)S?p#O(yCp>Phz@2U8Cdx>Y*0uH*zYT#y7M zS#Or4oCN@9AtVande~ylqrbD1EGOk_%m3g~zGexgTS<{y#~ebllSwBD!Rn5P7PuFk z^+$TpyHZmo|1v?KNI)Pfbc_-U%spxA+BVevi4^`^pnPR6Xu36&o94 z+UJn-g)T^=LLdA{haez+%z17@0u7TWHO#55OIoTCoJI#Rq^&Jbm(!g6fS5+m8HkE~ z6Qde6S2^1t22E!y<59eZ#5sGiPIwACKs}m7>04rYogz_xVS!E zNsfS=5eDZ(8yq$1LWttY7i+?{1C=g6RlyLET2!S>er`i#Gn#>fhd0dq$&nyZ9RlgK?!aN^|UJVEtHKsHi|$@*vLis;TDRmYJ_$qP0y+PI$N z{}qvy%G;md$h5hU^=nj0+9K^!#!zs_Ozh(e_xB@fzHEp66-6}Evg)e04N-dQFE(vWy?^)k^5PwoqH_;W2&mgSW zl->7g#+=qs9DFy!tg%xp11(U*W8$d}wS7b04YT|@)#5y?Jsy0fHFXLx;P$kq|5WCq zii+sFJJQH(d!*uDk$cGn+3$~*1Rj_3*yTvwjh1L8-Id>1)-SJwQDUBCV|S_N#i}`K zgN&v=n|sL5vbVO%y`qbKI>^Z_I?>UAE*!s1CQQDWcq{!~MR|)KP!7b4E1C_{xHLsZ z3Qd#{bLHF^)iu)gazj;n-ih+VR@SIGYjX>!aupq!KSviK+jE)J1p3YyA#~S1nr2yM zsyK9gkbKV5;COT0M-x)fyw=-F^KSSz?3ksUyyWhjDZJiGp1Qq+?B-8J_RV9Rn}<>p zU(L9>Szt*p)8FS67vo)4K*O(!bb@$H_XQ%3sklE`bN^5=$S2+=y$=H8}3AW?f2D^5lB zb(~trL}zyX_}zO)JUBK?Oge3R@!1=Nhkn7y0A0BH1Xr=XhNim-{|CI7*MHou*%=D5 zWnAdDU6)ofzKpvUXulWgki#?DYWH8Jmc=CB+-UJOuF^Y@+b0Y9Betjbz3;Z_M-nIc z^_7B;pMQ*dzvPzNYPSg7Lln!mEm486#s1A*hUJr-p<6PY(uG7C)d2BP2dWtf`VrRIk0YfZW7Xf)#nr9BjS5QJ*VU0cz2Ce&9-fs3qSe;i zDNe0f-j+Rwo9#^+v66)x2?k0MO897YA8-SAhrX-0wc|C4ZhVIirXv!xRXj!2U! zk%|Q$YP1a9l@k@k*ZyS_*y#rM%trhG8XqQ`)_5Mf7+?W*3d6z50I6KZc*Qnh+e5*` zCVpZ}tzku#ioaNfld@S3D*D)hZPm3%3sOnhYFw3O86CLT8?)eCk;PogwOls-oHLS8wx~uDAk{cx zRCzr`;zgZRjN#>(o?VTW*cFI~#omr-j#`}=AfX(l?D8Zx0p;q7lqTRg2-;IQ^fY*%pPz^?34s}(M zoX})VBHWEvCvp>tF`)DbqNGJ4bp)6|WYJ*}QLHH6Qoi2{IVH&4-oLQl5Yb3N4VYQ( z*|;eaTyh$NeHaLSQzWv6D>B41i6sM`Uj{0alpPWP)?0_ENB7uadNt4M5sp4$OY=O1 zTJGglycA|qP-_U>U-FV#6wYTZN6Hi+zTw-zl!s^>Mv_d7Gv1)I?FUsH*$V!X%q*Wt zP8C$Wrc^y3Uj>Si;2poE+0~Vx17e+VdSIn#|6Ob`q!~^h*m#-em091Ym{;{Tp<97p~1jP!$2JAwCRfd|D2uri6)kdB<`dj2~B26;X*1BW;s`=x{&}fP=B$Q@L6a3*bsW% z=4NW9#wFS9(N~LbUv3^2@1@2^9qF?e1@8$WN4-Y$StUY>obavXR^ZQcs9s&BMo~CTd;xpt{W_D!4or}G(Pa@k zp~{pshG=DxYa>;dzMRw5oDTpkQQv`-ZYm4j%-y+;E%7i9Ua;sADP`|Ll3e0oP@w1} ziEOr!>?DGZq!H)Hk|u@@|L3cql$W+#D=O-rgwrsUV@u7{jusqK_^vBDrlX9-ebK1d zur3(V-py2P?xK$@vR8Hag^ALsGH%tPZp)s|@6eT|kvb`#QmFFMPyX&NqTW<0YL>GE zD*s~W$^kIXOfSxm?vK6iDY9(gW+CE5YNTmi5^5@Qa@{3$;MR&@2czl-5@fcXW%O*V z+V$AlnXON1u0^u&tac&Yo?+N|Fm;l|)nFPZ5#%Vn7Jc%t!NtjIHLK_r&3|y(;u2by zx#Q&|=q81TYQ5O#*`13)$qbeuuPxfRaw=|e@Lsm1?v-ikxyVtdZ2oF!baYEYL_q{8 z9a4s|69IgEYoI3QbtC8Sx%2U;)2n}TaM*+sWBL<5LKd$9jl+rpfD}= zAG)@zUQ*7rd0%xzrHo0bxaAvyT`DUTEQp!$YS<6xUdd9pXL+hE>~(Mjz8ou47k`us z<~|*e4JK_EV{P;c*vJfG_LbY-k#JS8az@b@xFgIciXKr#{>IQqT6v=Rg z(jX%r;@f`k3XbpdndSseW!!@B*CMg(8Z(?-567CO0;DU>y9Xz71PZ~CYtG;EvRu}tJQ|5~8q9O;~?>5R@clsZqmXw5=i)&VyV@{*X zsS3?8Py$;u|DI;Nh2u3I@K;+SxRFIn+sUiRBPq#NN!sJi=4YyXFyOSv6$UTb2IOR- z@-|bQ-@Yo3ejttV5f^`S9c8f#H#Q8ba0}1V3LkcLe&BYAu&w*GN{{Frd*Y4G2h#L zsq@AF|H!FCgooy3S|GPp6h)1N1jlt%>LS2y!Nf&b_sL+zw_u!di%NI9qILsZX*`Hn zIQMxE6nZyzE1LJ+BtS&-1R4YEbN|;<81iXc2QjMKHWoL-kSIe)z+VCgd`m1T0*F&y zO2SGtS@^F6b+PqaL9R`J4K$$d03G7nE!dn__?0{d7J0C@(4Ofh%BkJc>rgH$nvcV#T+PM zIA2gYX~K$#T#JOqoTO*CLx8xXyLVH`F}V#kQ~*HGVLJJ^AT}3qR$#`E$i`k-NtQ6k znrD}%aq73k_eosJyTDFUtawPLMdp1AlDtb=AUk~k!4Z`Pm;(T+A3K9nN3AD2({Oo0 zFuRr1N^rgls%3jov`~Ehg%~E!Dj%;FjyjhQ3M14A^8La0{{a6 zEC2ui0E7bo0ssjA00#&hNN^yMf(Qv7OvtdILxl+!7L*9_p~Z^`lVB{UapT604MBPo z=`mu-lPFVOB&o6_%K;Qya!mM=VN8cFU)~H!)1b_q1Z(z0C=n#khdGB1FzWNMxU*=}i3Ae}JQx!IOrK>VNPNmMO3;Qt8s3x(wc<>o zCi~`Hm_+T`f`bR-1*!Ax;m2>s4oDy&FTt>RF%OU|(DKry5}>M0fWUCU2%aY|jKFYg z0=5QU!;DgTvf7x0F;XP0HVSOONaQ97j>I%;)C1fKbes9Da)x{tqkYJCXKI0b?~Y8a z*zr=HnRJ3J_z;4YA(xUyo+Y6kdJ!6=;axj*#2`+8x%XLACx$m4h=(0@ zkWh@RSdxr0X+)QHe_iDgRX|pSfLUZgcv^yUF<9JWOpeB+Pf@%k+mZrFX%}v?^@XCA zRX!V;rhg?hD;i!7?4J%~`Hmpb&}SB*Y-5oZ)Ncilj~b%&v*Zw-cA zS*mvbC*MJN1sK^|v_6>FuGzIpkX;6aHr=oyjfl{5xk7ebt^~s6U9S9LmzZ`fa*B{$ zbvE?crwB-Krg5Ws zz-T3#fOM9PI{>fA>15z1e<< zLAP9pbHyqlSXuK(W}tR9C>ov{4jZs|K3dc@O%jvrcBWko%9Bk!t!+_bqP4rAjxAFE zDR0U2s`0NiC z=PYrCCZsmzowj$b55yXrh=&NbsFb^&RO}Yzu6av*I_9)P!`IHc?*4|`P^E^mI((rr zpQNIWXMqHT;%XxlFQ{{0Xgjd0LB#xe6Z@P*s>^NfQM6gpbt=_;Nt7DRCS6?esfIP* z@5~itIj(EC^U`@d2e9l!4`ggH%x|2;o5|EhQw-V{ge1ch*dQTQQkxh2SOdO9v1>h% zJIwwBPI6oU+cIA$c+`6MhtY1rHUF7u)j zNhxquY7a=B(>#kP=Xp`E)#m7Swr9-;g>PXA`VRKG@eL6>i~5vxxFZ$2=}ag{ivkp~ za4hBhr-zBV9oT{=$FET@C1#`>9vQWj_W4kbR^i*%b|gAyxiKM5yIkVFRUG&ch0N5~T{WRshW-ukRqMMwP( zCA*Ue;a+FUMRqS#g)F1(L>Glfq*7M0s?Kc8SjFFL5tJrr*t9<5sv25xQh>YWFtLfL z?(B|!Lj0peXy!=z;DsY%ELqpK*R=u8D~bYnW_O6snXJ<~ciPV(~HLTpeVX$tpj_aBVA-$bIfpq=BKZZD_Mw$T}L(fPrkH zxXRfV2_;Z*HZz``(a5-f(9k4C5^1;0-b28*k*ongSQ*2dIh z{_04>tO?CPiW1L!YyeQ0DndL6JAGx1MnfDBKuvVYruYtViHcM&KjNaLo+JWzQwfWn zrWHBa)n^m+T>!<&rLGzAO-&M$0{=85NsWe(V}dJ~06N2zHuW*3B+)2s*Sva0GC^~V z(^tR3K3+-=ZKfk$=2n@?noJg@6Fu!#Zzszi0n$6UbYG9+_@|Wr`YAt^#BEM{x=FW{ zNH#Ug)uY}-qiVs2pOO%VM{CrYN6yYgdp8FV(NFiC=gJ#XBqA{>7=RBX1A{h$; zfL=)mXBn)Lc>S_NfyB#yrMX}x50l;n5r?nt>4LERV%V9(4U7fpIA4D0ca zG&5~BwROnRJP@jh1A<623RA=!EeRg7rq3u0l5*lzXHnP!|Mb#fg@nekZKSWxlyfxl z_LQ&Nd@3AAl@LcBm%!TXQ&;acTc?WoE||RXT2Tp@)zy;!tu)>;L?nvkzy|7hl0@Q} zO{t_KindD(%v)>s4CYp*#FG`FE+-pXBN^+`yCk#lR?{q&9XakIGXfiqP+Mk1s>#k| zR@+!^3+aSJU=v%=#1=N8Pqs!u3#itF7S1dMDQLmgwwA=Lca7^uQ94Ml8*DF&>5yrr zCt*Gu@z8W;P#&*kz_WDlbh8=cI#<=omIBnIEZf^Gr!bfgo|lwjIGLC&nWUL}5uvAvH2m0~Tu#*eCp0pQ(`um_F3z2e$b49Fqr+LnfNQz|#tA%m1YJ0@7 zd0h%IXkYkQ5>9El?q@}t5ve!xy{vIF{%pG5EeiGjCDuHFx}L>=7znTK(iZf26t^H? zdr6r27LqIlB|pS17p(QUwVd-VKg3(6kwO$&P2XBy7bc<6LX?(FQJ)>eR-VZ!s#c4+ zKL>Zx$yS)5U#zA(mYQU6rAoIkLe;5!NVUMEVz|BjXV99nZ1nW>L}b}FRbHBFxRM#) zJ?)-H`wALfi@A~({{AvKWC#6t>%9svURgz zf&V5!E|xFWW;8pYVO@qB9mX#|vtM5nT^jg9Q^7+HF+!u}RwkB5y&^Y+WNwd#QsJa+ zKQnX#FmLhn98@MkEpvh4aU7hobKVgJW3UlIHvsyiWX=~s8F3J;rU6lq0ay5HStt-Q zXJmRIb?zkv2-a#_5Ok=K1Z1cjTktp**Iq|98P|gzi-S#O*C%OrgC^H$;0J7AwPxA% z6TL-IhW2X~(l(NZ60LP_6L&~_^bm>vL|UIFC1{m+WYR?Ck|~Czcgy35-s4@O6k34C zf2ibOxg;oa`M_gJ{n5y-Y*Nu_aZI8V1yD^RhHKr$Fi7ifm3Wt>JL zdbm?4Ax{*-I*=g+!ZHv_=72!pbkC<`we~7GlNU6X9#|-i*8>Htu>~{7a7F@#1K}-8 zr%$X=YoqadOYwvn(O!51Z$3m;cEM8=5-HWji;QGWpQnn3Bs|4pU}Pt9149yZ*b)xN ze?6FmdCXx|n#h2eO7)F$*u9SVT}MoDV( zQYqt-oPI%=S=2i@$8_2M*b$S{SMC9Y0&#sscY4~PjL#Sa&WDB0m;u)#biE~k;t3Vp z$c2BYjGYmTkRnQz*(hj8Ki{W1Ta%Beq+I*5Jq47C)WI=)p_(@W7V6_!7(qdusAcjq z6!3=->X8J(0z@^zV?2~{0Q4vRgFE&nl=zk;iz#f3Vq`_;FPF0{%yuxt^EW4WasQSk z1ScwXaiMI9bq{tvT_zOF<)WpQGEEj@Zf8yMK^1q>5gh?yI^;tx$egTFZ8oERBdAiM zI4LA?l`z#Cu2@6hgccvgVFmGvnuC+o0~U7(B+0UzfuoI5Fa}!SpFR;Owf1V?m~(k) z5zcpa_EHdKXs1g5(R0t|ggSR6J{O*A2opL-b8s4jLW!hXVi&GKGx%Z|6xvN@r+RVc zFWA{BrrH&&>L;7knGq*EToIdA2WaCVlF+#}Y85Dvl|?K1S7wqx(kXVF$*9`_nc=ZN zB7q>2DQEa4DorFezm_^)@oUEUHpNq{{)V7ZfvlZ5s#}q!RB?M!7mQl)N+Fa0sz!aN zmY*OJo?IEPT#0+M^%%eCj8tK!f)b+m+KIDB5XLl`3y~L=QDqXeF(G=PEC^ewXg`rz ztM>DwAZjQQnG%}n5z5gv?}(eef{&WnlZH7@3WkY(MK5GBvLHGkFmYY7VQdw6c0ww8 zrZJ*N*>TYS5io7iPD^tc6DkGm0hLduEU=TG@|2}ZHb0FSZzl1Q2bE4N_J)mxicob@ z2PdYQAw*S{HPd2<8X{roHxS~bEY785izGaKhKL`8dJ zxfVtH7Ccv}oMTq6hK5dvhDzWqN=LZi!(HE1avAAi1L1>57gT9Ml>JAiP!R!IM-V>i z7~c9z-$8$-2(^(pi96FhlvZ37N`uB~W-!aSQyZ)k5f-2FbvCi1YW6J8Q?`0>yP4K{ ztazJLv49}LeVS>UvHM6Xa(cOHJ9n5RuzO^kMG>5mlN@1JVudLR5_A5uJvJDL_bA9SLL*>yRBiDi5OW%bimVdc7vk$Dpa7N^1~_){bv zvT4(C9>X<72N4=c;Bg=FwR%!=3>aoQSrBPUXcW4t80Zl^HDqN5gkZ}_a4;J0Al_5CH-n9E=h)tF%XEexX4>mn&r|haw5-dc7pBbcmsBHK3&b zsfYJgp*t(4PJt3EWL5DpghQ5GnJ<*D8Ra`@*+w$L!K~V zd91u!aW<-H1&gB5hsf1EPw|?4$-qZ0gRW|{0J#9FVCL>K?cx_)>q z0qb2r7f=B#ic8dDRg0s!Sy2zBlOUtABH^wP{E9jSqKi3low0~z26JY+iVH<ga_N7^eGsBPsnd9qz z?mK#7(ac(5%NA@)fygL3if2-7H`$V?%LsX}91)8`O4quIz=|ZJF^3-H$_5u|teU-F zMrY+L)wtt$#%;L6~Y5~XxL1(=&>!GBijn-C4Y55j`5LZ0z_FGNdRNjOgUblL{;+t0wz&3B{{Pr z5g#b;|?e$uQ;%b@Y3fg+|CBv+GIw6J6mq#Lq7VG77Y)f5aZlqpyiT-Dq! z?S572u~bJ+-R5wtGTcjnvZx{-Ah@A*jKoNl-o|y_C8kYun|sOStZT8Wa*cPMi6}|C zcIqq1jzXcj<-COi6d-M4CBayWyb;vxz)Rw1higY%QCM~@vnm`|2d1RB6dtGf6qfjh zqIjAo1X!zk#9U{p+FiMurxJGsE~sfxJblt8UdnQntuTn>nt04fZ8e_RP2H+WGw~G2 zcD0O}X(C;4563KQnoX55&GP+aeLKceQBGsDJG$J?e1}syi>NUFvbZHHn>f=s|65at zL=pXLA>;xV08KS@tIcz#f!p~<9nK{EJkm>&fQVi-fQ=C1+~Ml|hR=j@$uuxinQ+IZ zIrAKTGnNqIm47VtwAzF(N%Jf8CbUX5-Zq)iX7t$pq!MihWT?o~uHEZH*ub}KcfQ-& z46(#}-IO6Ao?;vAR-{)nVOijs5#vjkRgTDdowUy!an`wl&0EsUy4;$K;aPM;fe!mmd2L-K;!P-wEX$TkXU%&YZZ@m!afdD<`4kclNSBtT?Jlra(Nc*)h%=lM0XXk|Udnab(8w-joCxo7pvsT`>=p)+RN`A~6Opv66No&QaXK7#6{br^#%=K@2unBr4gecU1b+$0(M?`^D_o%sC&T-$XGe4^_2o z%$Hp@YFEnh0;A6R3mg(o>zDa>COW23%YyRE$%rT76fO8qNvHVzGh(bM^dnx%osyd0 z+JwLPDJc4AF~q~WD@r&a2NUGm&~nKbF>J!2Dm4K;k%n;WAy93WDTxiFAaTedwdIZQ97kyYRj$!4bRC7@0=7RNh@5)QSlUl^wKnc z8gR{~wk#+KNM(w&Oi#^3)xswS^l3r_M~W%7n6^XcsGDSM?YEPTGE5^}eJbio;y`*1 zIJ!<%ZZN}S)vO}6Y>I+9&48#@S%eO{XewS&>IkBWI-07ysFeCnql1z_04}b08cVR_yVo9bf9PrygJM#kU@R?D;3)f(vFP%`F5bxZ#8C`Nd(0|M91mf&hqs1UuTW zp$#`U_88=iIS638j-s{nS@(VlH^B(g>rOOZ2dZ^|Th}8KqX{dLz+*dHxWSDZfEJqQ zp@TlU=o{K-14Jg1IPbHb+qlF3XseOFT4}A9E}_(usJloCF5JjEX|u~l8*8<XUI4rh-1i>k~7!Jf$@>kc$eSeJVhZC8ON3eInuK)r0FFu{|kSi?6R zjMtXQggc?wzH6yeRkuwD*0>)u-9Agb8eposU!Lwj(JRG#WeBm;JJ-${QcBj`3nWvD zUn*|Lmg0{$zLtiKx5b|3|Jj5rGX6=vomQ;J{`!couLb*mNI_@=H(Ds61QN0_z4M z1qU{8fe6H)1vPlU0+NCMU8R%BMHIk=0+uj?7gS&h4QRp&UeJUae4!icPzK6bhFM;c z;H+|Jy8rbsJ(u#|>VOwOA6kY|02I$dq*5VW0cTt<37nZ`Lm_Zw%7>HN+~Hmm#EbCI zh^~qc2%9w^Bq*pnAo&)q@MDoL0ftHe+7AG<;5<^a!j5&kqa6!oi#pb^6wPaeNTlG7 zU*NG7b!0^?SYgNJ*&>g2bY4atqOtRxj|1kzBnev31`^ONSr=j)5F#+M!F{TAr)*8< zz%v}UnF~`k0g2)sG@O*ML|e2RR+h*>K%lw62EF{{(1PhpVEVEJ!E8edL}#voBw&}r zgk~{?DNSNdQ%1eOu==D1Jdq%e%@jX#Chpss|bo<20A85d;5HjYX(j`9zzOot|_ROdooEaG_X zcF&CdZ#}Uj6B2lLIeDoOcC7e?_3Wt9>oJmgE4AbGng^0iq%@{Cz3EGFYQ2Aqp&}G) z118INKJ}e%eQmf^t5y?4CTXcDrJG+#Nt!>>@y&h*8A`Ckvl!c0)hP{S&zML-P7apU zfoDBo$6^vuVYPyVCq(N8<9a|lkO5cl*#O7P3Rk|$wXb{is|CrB0B%iHj9uXsMoD*{ zOS#gk?6IQ%{*($v*KkQx4jQNqHQJTg5%fZ7WR+)DwX9zuT zS_0%E4e8u_{o|3XcrJ6xLWZDLGLz>mfep66)yvpPA&GI&-6j*WFcN4Yu!ZMlm`ae^ zlu;q76cz&7;7eYXkify@WzfiaPM}H3sSim&9S%HU1y9((2Ci_1-B5xu-D)TZ*uc*g zY~cbY*u)4P@r6sA;sRH5y=CEz7ooP#R}L2?(Lu{StwPGe5z#zNtW19w2ilMf3nkN{ z=yWR5=N^m^JclYsVOn-Zp1<@^VGLxE+h0 zIXu5P=yEoc5?1&Fr+0>!J?@0`oh)a?oNU;sE>#cOukFwiMaagtij|GXaW{=P8^`&# z-d;9Ab=#7{W>h=yOKPUl<<)`!SUI@^@_S?%<}ZOYNL(Se66a_O?Z(uQ*0qN#3^{QB zTlixO*8T2wZ9%<(`@0t2-K8Zlc}a;|a+BE{lT4%lHN(QEB<1QBSPwFhk;l&6|J{x% z+q~`2%p^3d3^QY*AmDHkQ=B!&FwkOx7?+nt#MHbwih&Ny@yShF6$!D;hkk=&_EMNF zNE$htp3bIMn87!{0T&uK+w}AkIym$;eaDPMrbb&PL5a@G36geV&pGBV!`Y`L_30so zYJZHiEDzzM*xx!EL9@MKxnRdEt|PWFLn%DH2?Qp@4}}!JxHC&zv2f$iQ? zsA$|uV6?sf*RO8hx?E?MLnA-1$Iqaw)qF}4xY`ZIcVG)PFaZfjU;-RiAz*(N{^z3= z*l-R~wvAow$abmI_)`<%!o8GIfyuIw{s`@o9CIQsJ5-BpyOd}=W~-3UXqk)npa6>q z_bL!H`UxCs9BhNK+v1g?h?>cQ5BDmH&u|S@S_zw(HNJx*Yy-6g`HgxZossym{CSFo zSS~%|uIDG3BU@*CC}SBQljpf|a9|+!>bvQ?U`#Fcv$SD6qf(lpw61NkgJR z!)huT8>qSxlRm)!iKJsOq3ak9NPr30fD+(>4M+e9NH3c!uoiFuqH%!|z?w6pFs)<1 z*cl8eY>)QBjwM4SO#C8+!U!k98LuNEu$T`gEHb(Ay_Z0OF!Zg6n2C*xIkD@)*T65j za2%`H3BJ=GQ_&Ox+#-y^C<(BW6&$GClP4Ssz$=Q7ZfUK_iJu($2{x#hK!YUavc{OA zyliZT?cql2asx6zpCly55^#epP=Y(5sHiFvG_fj5D+|Za5)G*|$Dy`m>%U^-JptLj z+!3|8>KGCr1LrF%4H%I9aI3xAwHC5N@OwTRAOXz*3=(h!g0!Ij?qi<Cx6D6_lLxFp!Pjf21o z86_kVj@B@bD2RYh3JNLk5T9(fvCF?y1c{ySFwp>uoy;sZ8;|D5kk;vse6z3C35<=1 zjpPEekEpk&G7Wk}f;sX9L^>pYW2BpExI6+vxrDBplELk|mtPRaB&4|Wx+F&I562)4 z$;qvU5)HBVo2M!)Dk-JK?6jPOMu1A3Ac4Yw!lkgVjcaKwS=<&gl%``Ug9)e!X;uxSQ%?W_ba2lUvNei>!!_2|7!pV)rBhA20+5A>jj4=DnV1Op;gyZ}KwJc+222lyS`Sars>VP-GOISFNH@r; zCr`;hV??e`$s01FEXD|s5P2wKypPGsk~6v}V-t~u7!jllp#Yr>rC`tV| z_0_`cRi_LREpSS%+#=k{$JH2+lY@}j2$#*#8wbQ6d33`zdOgET0&gV3I|Co-!pj>R zfKn(J>Uz<*Tu~8~!59QDTd)N-s5tZKQx^!#O0oemkbt*%2xl$D#VJ85^slvy9iC{W z^&^e^u|&WljZiv^kp zLOEA~#>CM|!NCXu?FbCfjwynP&MLvzh%$yfGF(Z(*1RuFkycMNvmKkK=;)_>+7OjX zxvb0(lgJ2_;LkF8TP-~ZVuTO)irbioi4eJ!Rn?EO7!j}evdQ4jRV5O@-M9p3N`go# z{)7$9FfOq@H!kyxj-oqhLs$Uh6vmjIZ1mil8h~vCU7RXcYZOs`2*+{6B(fpB8g+vW zXczfWttokw>lh1am9#gq-JD>`LI zkjecNTFD5*jl#hF-NXRazzvEc)z1zN)-n+bBEb-*gwZ=7PKZ&+Jj+|roBBL~&{hzg=g(^?f#}9oxKX1jpN?U)(sO~5 zJztRm(z9ez2f>}Jn36KKzcMn6|1YtRhXB@i1P^MvJB;?bjfTo?N#5l()ByER4}gV>xsD50L}!^$9wOe$74<>tI@dj-OVkcgz7)cBwFOR6 z!ahwjCA0zKR133cGTTB-|B^@*N=Bk+!Rx{)vyYPqlPF5JLy(i{3bVusxIWN`sAE6& zC8Wx2*HnN&Jf@Vr0s9Dxv3SjoO|UkwgTtKw+q4-G9so=B!=h^{vC!fK=uJsfu!9(H z`5w;I6rbo^8dQcvn+bqtDkcomy8dAbeU&-GsTKvvT7FHou$3o?G+xhWGa;K)s+fuA z_@}P)D93h11-#rXI^a_gJA@6D!tK?RcxKAc(zPn=tk8@VU)8g-tpFjBpt$i;xs?K~ zTgV*|;8kX(OR%<1kP!i3U|@ z;Z?=B@QH`8t|yME7DeJ0y~~6XQFw1{JtBh{rD9Af0~dH#P1>-x_)4vy^fT zJNI~u4NQ#*{{?8&PvziQ{#2Mt2|IBw&XkIrpgD0GFh;rVL)>KQ24vuJO+uEY(%b?v z_>e6au%q!!mCXw+anzhhy4bWPB!M~tD<3;JCQecS1_GMxcFyChEB6ubM@}buHM+nk zVG*xgNlnZMrTP&62?gmVa!$ovmf;22%p>2&^pwUm<8UN(6|UxC3A&6mcdGsol;4dT z4#ZR+p8B@q`n5Oa1HIKCNn8)g5>nRa^hklm?#k5dm_)aB{FeNLrYJ>RAZ3==umX?kFh{fkLLGgaQc)1W<5c!6Xk86r?Cn%76q&G-`Y(FoHk?wd}Pj$*N>4QYc9c zXk|-f$x(k04PCr_3dz^c}-HY7?cUCNG<2lqg|iOM)Z` zfFwW=VIu&G06<1zc+ex-v}ZF8kf3$|$hQz55@aZ`pjo+k_YN$J_U?cv5EUBC2)2z2 z{~K;>Bwn1jjU6&%q-^10C$WngjukV$fe}c;uUiu&u$9@d=FW(@xXJ9gvzr^IVKY|T z0VZVw3-5rOg%RGvrt&1Ilj z1cCP5fdld-k%JZvm{)>warl>p9({;lh-qK}A~s0os;=%At6D3P zNb9Pq)|%pmxZYLQTEP|+!FjAA1R6pFxfj=(F3z|fw8FAC-d=HeD44FXj<*$;S%QS+ zw+~VKqKWp=H_?Y3)%TG=$Qt!eNjk|}(l14(v=U18z;$tqkR^`JU6eel8f_$C~92ps?B<+7RI=$h%snM z1di6>7AF1>S$b7Scb0auhv9v1G1O(4>Dk(%;1()m*5+~B7dp9_SN^x@dRY{5w|Z&v z3y(aOB>PPM0Er{*?bO=}?LqO_l0CQgj#4`Smq3P82QMiVlO?#(0%=ud#ZiG}&ZVxb z>fM(u$<|XJQJ1WzWs&vTkI6at7d8m@TnKFRW@Dz7>c$K6=NVKr8Yqil_bT zR|3NPX@5xI008~xDL1&G6>SJq02TPD2)ZFv1KN`K)S@cVwQfM=OPyXa24GD5PvX%Gml2;RJKGyr|&C?_eg$xBdjl6V!QU?vd?9A!d^ zTKvO0O1k61mSh9zXeBIQ$qIg=l`IQ!ELwOATofbp75y;eVuh4X68yrZC_Hi@lH5$yytX`%U7{N$Gegh)p%GIoX*6oIA8l8G5 zl0LS4D}xK!!jFt3q}}C?cf7NOKVT=(mH@04vGXYJJUWs)Ag@VPVP5iFPyz`^ucg@A zOS;BKMD|cgpK7`xoLtD3?OIrgdT-bNdgf3-vkY{K&cvv zQM1&FR)7F0sv_!CQ|&4My(-m7Rmui-u%J&nXTlk-|5dG)3!w_pf;q{_<(_e!)e22` zPmsWnpaQBVUBS;dKLYg;nCNVJ9}xbax4WCb~9 zw?^YeeDy0{Hu;CXQj6Nv>Wg+^?8z5b>krn_wheehm`OSCqz&|uBNgii-aay-2^G_c zA5x}^R3$NwFiW`qxfmD!lEn_b#~~b(h$;0F7wnQ|XIfjE(7?Nyw$+9rC*nu~yt_70 zuD55gd|GfyP#)1B4QrQKFKTwVH1_Hjzwpg3e7hq74iV;`Lu72{a}xCd1-dvmiEBeMq@bHZ${|03+^Ts_FD^!!tCi!EKoa7E!5M^_+@ zT`{fBgt-j@jCeh2#~5oN1qo1Q6I(Dcl5O(ik_^cnzZh~7BoGB6OFigmrK z%~*xP7{2Ipimk9-vU!$w{!O3#iOabZB3Wr#EhF^d2%0)eOcE_9M6$-_-lNr*HWXu&FRDe~>Ofdd)RO}aOrwO)o&zd$2e8E%}B-Jo{>BOj$NbB^%z*&%LLR|NE&bU-?i9K;9d@5sWaO zs=2@Z@(tB|-eW)c+0VU7C(u^a&HXQ#p8csw2p77W+N~cfKm3>e!!Tj}ae$%Lu^HQ9 z3th1wNi41)9h_rji$i%tp6NwmRnGj$$afrE%)HF`l?#I)8*?p0#swYf$<=rW#W@`j zcV!hvM2r-CUb<~TJB;90oD(fkPtJ^)f8?8VD1dZqfD9%;*eJlJD1Z&xU~i$E#AKHN z(ipFS$o%n2;v|xAEz&|{|4}%JOv!Kvb~P3;)yx#eOcX|;%XmZ+MNGO$z;SQ^32;FP zfT0+Y;TVSD8ImChYyfX%56V%D7mnc=3Iqutj~RlY9ikx~&LJ6e-i`ebS8yR$G{*+$ zAqfmX7}jAT<{=}d;TclJ9!6pv9?v97A_-gvmp~!lWER|E*TfZ+aklwH^P3nhK$w>FI?O zkO7F)lrxGM;*CKRAfEI=V@s95rc|CrAb{b(2MKZMNaqN zR5}61iQ(DQ71TPa|D8erl>uE10z}L{Zewr!V?OFnZ}^R)=ns|bBSIb|K!T${Zljg7 z5K%qjlq4iV0s#PU1$+!7LT04~;+4oAMl2hGIng}I-3TEP$@Gb`rCyXxk!bwZZ+)IA{pGrWL3ru z+SQEUXhclTfS^~vB`2l@uHlo0q??Fj5y%V#h}B12rr?GRz!0TiTd){bKGIk$VMA~P z((s1S?d53r{}Cmvpf}wIVOSTv?FM~aO=@D~Xn>#}rQ5{FOw_3+&DG{=3l|%u5lP%#0CBVlom=@|II}bFbK8$)46C8Gcm}4 z4P$&*%!NV3gT)%uz20DmNK=|)Tk+)HjbDQ7RO$s=O0r*_!I&>X<@&{++`$@4^2L9k zM@*#%=^zBgwBt7}rAsB=GbWycLL&)E50yllqiEwn=BHfUWHD|LmaGn=$rS2ETWG1H zmbk}DVcL8WqlH#uO-bnfBpwt+XoW^wIF6Zw;-xoMP7p*NgBE0?^=N|HD1@>ok*)}O z$RmHw|44`7l}&n@eFz&}O^>OeXa@2kVPFliL>Mxl z|H!<`E4|*Uz3NrHQqD^9YrcvQMx0PWMA2tWX15}iwB#x5jmhe*-mc)J=j4qIl}TRc zB$kd)2kF@5h#Ho*-}!VJ!yX*>=pt9Vqy zrmzQsc)#t8}FJF+US8Ol!-sboIQOQ1_7Gf)WbZ>8IDs18}4~1{3wu=f@ z?`_JZ^lopl67X&Qmh}EFuw@`+T1FTD{hjv0R3~_GhZS zETm3yl^Bq#0ECMWhl~ioYKx)_Cv5;o6kV^86wp8UiDC!f&k9BihmN zLRhZn3ZL+e<3lj6<3_G86K>=Fa^wbcFBkJKD{kk`FnS6EE)PI5Cv%*kVt|zDHYsQS zjf--9?fJZJhu);RJkE7>37pEv{{=55|6)VPEqSsp7oBqg#;tQM|KU0rFU@oeJcr_h zG+1^PR}*E@DZQa*VlQ#IjAvR*6qE%*Kcw+;p%3~f(%5CJK|qA&_)Rt_g|46CpX!|+ASFc8OZSJSXo z3vpI^wGDrDS6g+!wgp!EA4R0FTf13QyMsQdnm*d zFtJzDu;1daSo^RMlQj?jIiDBto>%b_v(yOBFpj@t3LE-a_HCgPdUDR{rZH*U`L#TL z@yf=^`>}DBDs_@ZsgCbrVcry)>!K<@?3T=OT{G-NMAAV+!9hm>tV6*%5)j&j&Ze*O zjFjHZQo3JD^N4CL%bqh`47aMQA5+CKuh*mAE%rLAW6}zhm8@AsM7v?kt+Hp^Lvm`H zaOjv%usSaDt~53}53lyTvfQ4ttuNqaTJ9qDGxyLW6{?lVFk!J-?xP(c=%U%TTA8GSWGuH!W!KWdf0Rl(}%pck*{+{Q~Uw8492{25)fB4@3_&c_{M7!UZnMv ztW$y~^{*rH#|D=-Yu3;%Aj%)RH&-GcGby@p8;d6Ca)9_YX zwfOlhW*NGxrZQBYWm-qI@QI(orPT)O|CN{^_Olp7Worz5U?|Jl9Zc$S+h^=^a~i~E zzOTC^>vevn$3E1r^s(Dwck8pGg{Ne_MOtPBAJ=*4wVg^*Fva%qvVYX z(apsF72hN?ygT#2Pqj|T48dP6KuA!cK#4$t0uc@@xX@rhDF`1jTzF98!H5k9WXzZ( zK@yDv4uTvgQh~?>8#N+9kP%7Bk1t`qL=YinO`8K~zVujg=go{KGe*e>WWY+FE>UXC zX*3GcmMmXB)oAo+(U>cH4#+C?|07YTI;DDzT9s^9t!0xW;d(Pl*a1j{<~&Li?tr#; z;noFO7G~Q4V#WGAxp!|?n{q$qG#oR+V!n@I27a4FGS4WLYx>P-G%ezo5;6kVNcCle zwF5xwL|V0_VI-a*v;F88rfZF&L+?#Wwk6TPg9qrwsc|t^!h&OZ6#iD|Uc{tf!^MnR zqZHITB_y$)T}qPds+D8}Ek((MjOEXpAAo+n`RxP9t6$h&N&N8Wt-GgAUINh|;ynsN z0q@}3&%p7Zl8UO97(5F%jh6f9w4Z{jP%Gd*N&pGqFyzQ1j)L21IojTeji(4r%rGVt zc_I!n;W{#r!wNBsjWi1d|8tDQoe;<>f+&ED016<9jAE}IOT39h-eQvKsR%pLP{W^E ztFb01McfU?qfl(nNthx;;I!i?{7FZko@_D1GQU!>F)J+uu__R2qzc0{*&J&{90}Vn zxG^DY6T+-myve8u|3s5aKa+e5MM4v7bT~;3RnyEQ8zM;4kxJ^+L){cgNK}bNEtS+$ zO{GXw!#>oiQ-xmL^uiQ}lF6n9EA;Fnnsnm|w&4m3R7IeO^2jSPzmlLO=#;{hueAPZ zbfpO;^YY4}5&&#~2iNL0sN~ENbSmPq)66Dq+w3jc$W-j^TS}iYtU0^#!s{*xS9|QF zoxZGf%d=3DOJJo4|5l48kA$Msx3k3h5{RuzY*-_07oN>riJ_uP&xtwqmr|JAsx7gK zOYAn`z;edrJbNhuDrWAAIPGa_$_ur&gkyt35>yS)MdPT;>J6qtL! z?y@T>qmsrWP{zbg1bVO!tyGCd8mrvUBS!y)6I@z%YD_D|B$so|o1T&&3e9Kr>9r3* z>!@j+5aQ2#wh!fQj; zMOI_99AK?;|4&}T>C5!+O*va*dbVBV^zg#$k^jDPj;chMCfmjLKGDeIERp>5r|drd z`ICPw*FVQ6Zc3;u?=^k>t2CSH?Jp?5L(Kc+_c@@vFHZDx3Hi|Hz3ypGdz>j0OZIZS zUnvTMdjgZQ7$=+?ZKf+J2ZgP~MbfwQw z@*ze-uaUF-q$)#c7t~=gm8leEFL{YeQ(BUgxJ)G^=g7)o3e%X)T&5{~8O&!gbD7bc zq%@0ZO=fD7o2bmDG~wb*Z_d(V3wzK@5_U(`Xy}?=1ml!m)wp$)R6bhwzxE_dXM(&3=j!3+9iNje$NLs0V&DQst`K-CH9 z|0DoZ1g-HQSt5-blUh{jB=x7?dCAq3I#r>*XP_jcPz1Ir1(jYktBw;E9ap!@^X-z6 zX@#U((dbsS?s9UN9Nk>q8ducmHLvHJR9pf3NV>L)h&IttUFEvgzT%a!iEZp~6bo0! zPPVa?rEFjMYFW)*cC&be>|PW5Sqp6+T=hWpsAHW%B0YA!o7auiNO z^d_CYWI6K8my3F~o`|M!QwUk%g)FClh^PuxI1HkB_5u-8QFS5=ITPqm=)+E}aI8&2 ziezTut-x#refVqQ=g!iaLc;QqEa4S!A#|+DWQ&{|dx;j{mft*zQ43t*S0C5-|3^Lc zQKdtbBN(-C;6K{sCl5>G0PtJLKduqN3+8Qz@LRS(8g`BKsUmC)d`)7C_?sl|;Zn`hqO!nCl824mF%7Tmr=c$o$9Ds!&Tp%zJr)I0UH-z_n+Y_Y@X(EJ zKVj|FzQ#7Pp$0#6Q^FRcumvF|VG7!58{5)Ww(5k3C;`};M*tep>vU~BAc5*pAdNYf zWbcUnlix;;1nO9hZ-ITfDU>d3Pc3m6s6(x4QKM>99L1W}u!he=j1&`B|F4nOw@xa2 zK(msQ?Aq17_BE^xoSf9Ox+-8Twjobqr;X?llr&+a@Yw31wqjCvncen}-WqPZ;>37r zE%)k-7uR&78<~^i9fQvz6jrHPk{eOXx8EI?;vtjWuQrkQ zUzX()%-Am`MDZuces#ci-E%lpR9-plndu2*XCquJkW@cH;Q$NP|2k*uqqH;};SZT~ zsCJ2PZDyXDwOchc5Aw=T|L(gCVKE7b_t-~TDjEZ8bDGPH@h@9R$|F;g^Q*k2=WS_A zTIO{0wTxxuJD+;guU_@7XFcjc`FhvSUiP)8{q0%5$u>vJ>n5Ky8n-OQE)r5JUpiu! z_jq+EM#(5OA`=!*qr-?M;LS={f)W<6!n}FMBUE7zpA|}1wR>YKn)bWJY$%M83$@Vj=-!jWCd{kjSdn zbRz+aYI^p9*u?6u#DqACs;N?frapoJ6%b#@ssmANd3=Yo|3>SyDr<7=?cqwRvoNc@ z;LD}148G<~bzqQnP-_Qe5U@fEwSZ6tA8rU$kbMLz2!C(|k8rV?aI;vj2bE9-(dYnS z=c>ktwpwnsT&@6fi$J(4sA|jRJZEP3Z(OuO(g;H8HbuKMq9h1VB&Msm=8(EdC5B3+ zO{nJ$iHlR-Ft~2ziL3&=T!JnT1AGE$uTajtvd6s$s=Zi?2AzgQvZX4dAi~})%e14A zZcHmO%sMjhCHfA+&P*ym5x=ZXBN#~wE-{R5OV{v=74wAa;v^OeNfxinD^`&cg99^) z1r$T9m@sdNut}8aO~t0{$&zu#_O2PrW+#xbk)Dy2|E3YgmJyhqQ5mUh$O=RogNz!R zOc;xiy|%F&y)nwn5gpI*8q@K`WaegUPB%ab!ZOL7=ExpF@v}DR9`A9FysR#oBg~$n zyF7>lCBTLVI<3EDHZ0A z@+NCm2yaY;D;VTZD8+d~WPx63GoFNSY;sm!CxN2JN_uKZ7Kjz2>MDYx10gUYB*6qP z43D-d2}nZ(y8}g{04PV%=7=qLK7%Oxt|(nnBYMrg^rynGP2Ac_m&6j}(h9M%joldR z-_(uYI1Y{Mg5QGT-~w>olA^v;u_qc1+{p6d|IWwb6pk$g(=Q1#FyGRz5^gWiC@$tw zr7-VT^F)_lkiHPG2b%QirhC;HE!R`;j)+oW4((jmx zL3YJYasmRI@7CZW!_Fxs5Dye9@r^FAC|f349;85r3eX;D9w9L(7!(4@F{iSn0@Y~q zJTEAyNta5G#-LFeIrQ^nX+&SCzDRV`|D-WRNl!(+^N>cA7(0ok@lYTVxymLusR6~ssNfQQ_G;~U7)JaA3U9J>Lb7@9l zbene1S%`u(9wm=RF%~t#Ofw8_>Vi9>a>9fUZma`!aD`tS!wPS(Ish$Cijfv{0cQu(eFG23U1s+ECN*&4+J|dEu{=AP&$!TF69N|u*MVvaGEDd zB*=Z>X^3j>PSGi;ezP@eBCMz;)(q5yIU`>7K4L*y?DK|{iU^N3_ zgRnF#uT+aMN^4R&>k0v9U?fpf|9i?hYY@2nil43(v>GfUZ^UL|Xn?6kK&f(x;7Sf5QVYt7Xt@BwMg zHVqOt@ntb~Q&pwlg?4iS&PIi{D=LPrxrB>U@bDt=&^YIVh~Th7V&%Akb5j6NN$zx7 zqXjzbXK55sLgL3Se5N&MRx`vCa4eb3?sCVo?;Yn zFK&nbf6m=xXM9&%rsTw;G z8g)%>;r4CwOH)(i#`N|>{}qipt&wltwr&MCa0z#BfeQll)@~7(ZVQ)j6Blj)cX1VM za3A+?2Nz%@*K+lXaWOY?KNQFqwrV}*HT*G*_Um*j3~l%05)+aWbyd*_?5|FcM$m;y z7m;Jg_BR1dcgZ$FrFP~9#H#j!BlpZc2=$@RCVAIJc?SR?`$IhD<|GFII{)xHxX(}d z>?qttB=rWQaDy~=RwkN_(Zs zKrIRJf>k`MLlct9G`4ax8t*7C@qf33sroJf3iN5UL{$-3rTVABstrnqgE6;lgELrw zjFqs)3Z`%?1pf+e|7nFW<8m$MQiVfvQu57(H!~+*ScYSGg;98hZ5W1CIE8PxhIv?r zdw7R&_=jm&h<$j7k@$#}*oc`ph@BXSVR+mEu6k0U2DV}TwS|Oz;DiMhmwkWcaLF?snSTRD=ls@^hFBC^l z4YZRDtaoTOpdKIhsj<6ihgq*CklYka%aj!HW)tzZY~o4ZD9n}r(TS{5 z&CnP;(}s6{v!bQIqIvht*28al!+6C8dF_KfLi(c}N+Z?}(qbe51_V$Wb-jW&pfVBy zH*9~NH=$b5gmV&Ligk)cr-TRVXc}pU%+k0T-6n^;q|ZwJFyuXvL(B*CmS*GN`bvg zaPU_)l{%~xF9DOf0(Ckl0<=GqO>xXv`N(38g^G>Ycw&8y^!O|x){qYGW4i1(R2D)? z2#e?X@X^HMR0y&Ly>%u2Q<=$gk|#%KEv9C#i5gD{&5rpjbS0l7pms&EcePtjxjWZL zdzP<6yGNO8wHrRTyFj-9S}Jh?wVPGhL_-#oY!SD;lL9EBKu@FRy5HL_f-#kD(8Uy& zZ&wU(?ZO`J+OF@~!1wwd@Y)|(K~e#mRt#5jE4RWO_rfQ)aWj0vEquc{cWymA#P#bD z|1~%66!*j-H^nua!ckmpDfe?rY(k79zWC|rNRhu27#9)GSI5>Ct8pKn5rX@(sJDie zr`sp6!n~JycXPMN1#RcDCO{IvC_LJ0tUM#%#-kC9dEH|sp0jRV+9C5p`@m3+uH17v zl`F+Je=zNI?kYom`UO=>5eEy*BqxAuYc!e-Lbc#)`}`6$VL{D$3c{L3dYr+6~8zuxQZ`N+q<|M@8wo6+46m=mfe`6(IK7e9wgy?PzTFsP2|H zHV`!;Ow>`rlIFfKmd&(HRc0$Bm-PtdDkLje@yq0t+za&0A*}etN^wrr6=9G#+}b=p z)jXGHlN5aFH^J8Lx)rv-)5#$H@46j8sV2O2Dh@Swtk z3>OY)2yvmrh!iJUtcX!zk_a0&MtKNwK!T7U5g;KM5=nw216WFV{|OVOmY6T2NRTo> zX3UKOldR;pvgOK~F9%2(_;4i2lOj=~WExT_$eRdmcErbtns1gwIGNffYT z*;IlOwQ2{feam*ORk(BG+J*aetkjkd$BGRbcEH%adGX#v>NF`x#36wUfC|~^Ngzp> za*Ti^N)jn&aZ2SV)e4^A&w}bh9_#6Vu>oEXd+4;f*9kAEY>*VjW)W-myY~qHU$z(NKS~r0FL?Qm2GWK zhtqKrBq6~75|m|UQV9eB)&w~z;ip^h0s4>ocalmf zIki_vXce1)lUiu-(y{f)hJ+NF%w(Hvn`uHNa7cA0|H(|bg>=&vlDx#6n6ovd#k9*w z0i93lIjJsn>k?&^mALYBQ-U*T#;Z@mCUsW1qxHlueH>|aFj^lCv~ZTOHJsXZXpQmD zFAla6MJ*RgK}IXKS?pjt_(l9`$tE|v9m8QZhvl{^yWFytFUuTr$~Ci$GR`Z{Y;(>$ z>kPBcH~&oZ&_)Z5^v*{sopjJlKkc;32781ntmjt96m$Yfx30G_*@RQKagw{P6wTRc z>ykcgCdFkUiMDD;&Xp;dQ)qFeRaf4CD zB$XAISb_gA>$X2RV4b4~j5^B=lejL1@Ahwr_p?b58(45E8@q!xumFlG?|L!4sZw4axc!Sv#7fC_yfv=Dz3q;4Q{EP)V4E)`iEA@~)Jl{x9;1{e zDmV0+dOo?f2zIhtuGvjy)|C@)X+f4x(%Vex)^N&GlB z=!Jw8^ZUnuS^=Pcw4@aSuuU`TaVJ5RECG@r!zO+d!95BvdJ}2bL9{RmGNf~zWUvZ5 zH!%iDSa1yN97T2_keZ9=Gb8-mr$74%(0>Xvpak{j9}jw-k|pq8iFB9C&W6u$b#0)FoU6vkNUn&q|6U`l%HP70xm5auE{n5ET^7X>#k~}AG<{A?{c<_W zS&lGj(VStFkW6TuCzW7|Sbfd}8I|#cKBoy_XutzI)C7rNFD&A&=vK(+O-^(t@g4ML zSV=8;$Eak%UK}F;1mjRAiP;)XKFKMNXd$mOrMY1b?`kC*5-(zP%#V4R)soq@XR3tN z(hozDBNx3#e)AiUZ|uQ}+C+g2(G1Y>gyb*@;baQ{N=+O=x}wB>C_@7ng@FJR%`r&f zwEwV&Kfak0d$6`12vTf|ZVMyrFOQI(EGMQ{GkxlG%Q>aFDCk2e8EPL_d zq9R2qM;QvH5(vT<-J;(B=O?-WFpF6NYbQD-cr15%$QA>|#rqcTnBXN#Yf>Y+tGaJ; z$P}MbJ|ZjmY&5PWF-c`sRTSz)a-;mnx1KT?oE&i07koD0-U-6YJgC}E#aG~o+-0H;3b$(=_X29)UK@w?F> z$Vbpg237=`6>?q<|AgdB3TVD|JHGG-8%Dv3b_DvKON$!Kns#carP|azQ+2CZ4YXCu z`qi_JHLY)L>s-H#YEwI}Bduy7kMcUAS?*Gnn@25mnJrfu#i&pQC%j~4*jhrYSKh8| zZIS{8aF|P7OIoV9aEml7B*jWy&aD=$^@S{T(rHcsa~Gd3E^ZU*oI_0mgzy+EGTU(s zbz6wGJ_9^`bjpnFNLR8X9P2rh{H0mHo6v}_POZ+%4G$F_*O5>>Ghyp3(Op;M#8n#l%w3ISEv8|8NugS58FCw;Dd*p^CwXjDk zHdBv(JU#BC;PVP;_2IntS?>qrJKpyW_`V1J?}9Hp;SYa7#A{ITnGGkwpQ?8xNmnsn zT4WLE8J&xfmNYITDJoG}@Tt$dmG=u>4VCz|_-?G2TtFx9EEC?L86*rI*6C@44X z7r#0vh< zX*l>Tj`k3m@C$-Q5L#dlw$L^Y5p?!&6Sm+F-;y!@upqF(PYJb8WLQvVI8bSbh6H7X zYN$^iSbaqTZ2ZSaGSm?gpe_|fQ4?i<;{s7+0e_!F5beTbTs2`6f&^Egh~{<`c@tmT zmQ%YDQ#2)0G*xcnHd0&BW|845i4;%p@ClilRi-; z|0J-ZR2LM7$^<>e#1s@aM4}g0w?bXUl6jlA1!rSEe>FXd<`UUcC-b2n6o+8#;c~~p zU4+G5z5{c_sEstn9{VvL1!P#)z!LyzB$b|$V0EG?hGHkBa$j!*Y-TbNq_HZs*f6)47)a$uwIWP_*g7MYf|8Ub znXy1B#yhbih|<+@W%7UGLKLtvX7>V_YXg5VAuh?LOLGZg{L&qH7zKrv9`&*Xnot!p zaWKZXH97Gn`1Bq4BrUa}330N3!L)$* z8}(6(MnMX3SB3Tvg@G1@I{2JbC^E!Jm*Hes2>@t<_I?9EF|}Y5oA3)q2!-4!1!iXz zvZVeh=Duj=abo@0Cf~Q z1c!e8Vm3YWg3)qv?9rRY#1a5XJSPWpc10dJq;i|5axABEIUybJ@p3VTS2Pv@HzyxE zr*r9ZcZsK|U=k-ma(sgNsp5!qqxwM*X*Nt{TC%08?%AGNB9AZ8|61{A57_}tq!4rm zY7et|C7qTX1XN9CryJ6-k7t38@99jfKnkp|c6Qfues@Cuqe9TCrYK~1&+4qvYOUBh zc-dO59yD+*K}n`UCPcy#Y$`tP@ssI#SE)gi)l)r|F>w!6zM(V8~~Dq5?+ES14IDhktiS(h6Dt zV-O+sT^0dE3Ws7_V>aLMp~3{z+y2P!G_Qa&fl_ zd;1UTsYluwg`A;*{`pDrV-M1Cj^%+$Z3sPXxQ3d`xfFr9oeR2~8xdk#5_0IFbC{Iv zax3eyn=gSad+0S#QcK>_na-l5m+LP=@iyp1ebR-akb+4)ssQHZi01aAC-tK}vN@M% z6>F1;%=>(mguL(e7i|HGKjj>g_f;NxN2nM;4J0Hj1QoRNIy4DRrqOcDVK&U6Z@<m=rrs1JO= zh8n>tcO}mC9^_M4PC+7_fm|PJzTx}9?!k@+bdTy8yQ@_X*+B;FupmqqA>Sd7TaW~` z;13w11qITBIT4Umcos=$g<2p#)u|tv;lkvD!o#r%xk?6`AzP<04NwSW--qA#5F~(nyH`zeJQl0{~$_p1)&O+zh#8xDf!afDf+y?N7iAFyYczWg;gw(nmizS*hs?-`;*^t8DXm173Rae&0$~r9 zv5oQ&;W{jGNf6~aEQoQ7#&lzdrd89Wm+QeACi@VPK>xL0ld@#uE=bUmy(F_&6DG7b zUNnPDeW^`!?4s|-6Rf!&4fSk_sk3k6Hn(ZDteLe=%N|xswUQZ|&-~1>*|V})wT-Hp zEVFEX%8F-UW|ict`I%YbG<~TPfx`w-#<(^JvqBPNXi)eMIw+3@Dgly9!@f|T;%S~u z47c^Hs`x=!2XY>gaE{Qat30!x?oyF~7HI!5AphqJ|4<%ib`TPJp$@8`9IeqEJ)sr~ z(iC z+167cp*P_&1vvT@f>Ak58WP$Ngm9ZIBOok0PlIOmpT#8oG$agP0Oom5O>gADv2YxFUK% z#1QJHVDu{^C!we?M_93FLy5}3xv|%a+JuUs8R|R13S5m3tf-0#B{v6f8#an+sw)FT zsuFXlmg+yPopc}pkoJ&+w@pn0unD%%4y~XC9I*w1D;~Vv9#Rl$5pvO^5e2+$Sl>Yk z?NDbj3?9tW4&dp)_D~D9kb|wT#QXx?PCVH^*R9hkt>t~KZ-0bLH~>J3LneE8`Fm0ClRiCJOv3*EHBZo!$B$l zi$?U-ZW~c4S@~cEt3?I-dl&l<1t!UPA~ZFy@DC0gPU9XHGTaUD&a~WYGj|WaLDq9ZsT)A4x+GPhcWvv*_=j0 z{((XZ&vfpAYx_qC;cPu|n2yQkAgH;YE4rcU=#38P6T#?dIOzCfHlJOmw{dA$e+3s^lBKK>q$m-^Uzd7+h zQUSl?<%=Em9pC&^KW*NPzQ+Nx7PQq^5oBEr=Op!Xp=&Q3+v2*Um= zlPC$sSxk;9$;B+W@-2DAEx*A~EU{kfjVNz0jWHXfQ^$-1EWYL);RC4vUMx(SO?>1naO6QIp=kb`6m6* z)lZ=#js4ay(%Mh`*RRo-&uc_3R4+6vgy`f#66&+_Z0XWGwZW$+njk9*WyQ=9;UYHp zfu$R3_lVUNa{&+ulK%))prqiz0TPrbMA&e^fQ3p1B$)_Nf|P<2B3@L;aiNrp8Vhoy zNHJnXg9#0;90@XFL5m+dZj=%MNyUdbBjn^c;AT!BJqJYj>GL7QodXc`3_3JPl&4Xl zDt#E`Arh!Np-Sl)C5o1>Qow5AT6TaGv|5l*6q@sA(g8b@B#}b*Y0&`*cp|asQ!ZPf za0OrG33qE0u0$1|japX<;&cEOw%MRss??!fb53oGvv<|pR)q&AJ{+p>+s2D8SFZSO)#S;Y9*+tgIrZz)t9N}G z{CVS&b$Rl(n*Wn+dEG+MuWyTf{BHQ_*KLN38Y^|dP z0Dv^Aa?#)q8j>B`kc!^^jx)|8Q_)8dlT#W|OJFhv(rG>RhE(DIWkKLdR%FG7hj z5(x@i6Q{ZGzcrri%|+k8>l3KP&2WnxFE&THOM01Oac>4JPV{i5o7ft z@!tIH(*HJn66hgV{X`Y5TzQqkjtL|c*0$6ntq9WJjJ0i6HXjL2gRYt-w33Df5b~3M-_` z%lPVxGqws+qkFPxu}BF^n9jn~O^UChrm~BuzT!gBGSw7KtfZ!4^J+84D7$P`%QE{a zZvQobdWhgN%j=rs&Njn42`${HO}3`TJ1;>Yul*5O`wEtYJT}L)n+$+RVccF5Ro%ITD5B_(?fH%H)&+-Xb3f{r1gd(NLUJL^wb?=31wW>@(B`tGALF7%6x({U;hN4 zU=svnN>P4UQkw)KsrwC%P}&W#VTKs<&3BT z8D0v4IVloM3X;fGm%2E{Urj(DS&0hMI(MwqKu0U9`1hS8xbYzOW62_{aaww{7Q7BXC%2mR$m7a_xEoVut zTP7u!ue2pAeJRUd_7a%G6lO7T8O&pbQZ+4VkHL*gSkf4YKDGP+t(DHq#Cq1_bd@>XX^vVo2RgVW5;^|a z+FvQBD zGroU_d#p|^D`7mT)RMsEm9XWBTFbJ{6E|fnGfv7> z(@NE6%lH~Wy%&uY^UX?)Vzh$_WMsX9@2&;_taH&*xjaNuf<|nvak;B7+hTFI$n`E0 z`-Yw|hTVu?9I(OU3tsc0<-h#3V;uW9$U_!#k%`gBr*_y9{=lubN(lt?TpX_!YBzn zdtu7jEE9)D^vn^N=xgX~XRlGRHyD>&jwPS6K#YkO7pIkYX(-2PUBj3CdEM(y+1UjWPppTy$E8 zNT2GCuvq%dTN61+r=@Ot&lYU8E$7%L_l|iy!8WsxSFq?kPkP(-_VTWcJ#;@0d&4t# zyB#|{amU-;<0c-wtM_ht-<#c~_S_`#H#irD?8c}i(Zv!J(&=z$RTsi^#n@IphL<+t zTPV*&@8{H{1%-rU!Yz+XGC+=3FoOZya}YjA^8bNwNdI2?=R|};{7C|UkQ7CiIol{EpQ$Xz!!r6LiBX6|!>m5UFJnCmBJ~S} zma zQuU`_y(?4Cdf2}h}d+2`K&y03ljald=u`=0lx-=*a@nM0*B3ogETNUg72 z;4LaEP^)UqmBSKdy@y#6<^`|c8+4SJ1+?b){Qqb2Iz%*-!QFS!JvJ z^H~UrPoTx@%r&8qzzYU7{ppDX0jrkMr0oD6pHjH0@TvBZxcSK}uUMU~!6`=}7`A9N zyKsz98>$T4z*n1{2^k+Gcn!$_4Yh#{6r7A;>lnWIvSDMCDcXyifUS746bRy>l@m6_ z8Mb0m9kXhyxLUTh!Yhyx4iqsC6rm}ynl?s5D<>R|%!xc?E4{;_ob`}G&Ivs%%rySM z!a{na(Bs0d@{dAFEc}o{oDe-P^tUwpBSYE_(F>g*til2ztHT)?(TFU)_#UMA2_bSH zDR8NwkhHMjDn4pBit9RPxwO){7`C`I*8i#=DVjl}$O#MbkqHu^gIhHfUm`j2pk%&*E2;mx`PNXeXETA$`h%lKhkZC7dX$!CdnHhRJJlP^& zvJBQZ#}JzqcF_|WvpEqn$fp}P z9DEjq95{JNvVci4h%B;&q!%U2v4&(w70XB;n@Eg2G8nTLPr62NQOD$?oLqS?J)4Mm z!U?dW3$qv^0vjBd#6BY8MHmb(0RPEJI0?U%VF>vfw0i=|KclleYd`#3DD~@!gK#W- zf++P9G(iiRp*hKSqC}`dfP1VJAYe6@3n_DPp8JZQuwcZ@Iv)q@n54m+yND*Qxe5&| zwTYpNBh(Vo5t2*V6QUqN^q~%y0}rB7L922>76c2T2@0rLklsi-DWb5PP|UP|HKMYr zB-nyt)1J3dHXG}W^-usZAcGPhffgVG5|98AAcGbtgA&++B3Y3#5KYqD8qEAcIb04i zTsEADmE24p-DJ1jyteeQC>=6M;Ve#kJkEqnPRcP(<$N^fWJ}^i&gB$C>8!9a%N@+@ znr9Na2>Bk?iM5Q`4GuZN{{NFetC%>kcn8=Mh@l-Yu=o7*5(q>Jjp zL?*d6eTu~ZN(jP(Ihw;2oNKO_TOj=Ol9@|_0Xm8>Nv>4vPn{#69FY+D^eYQw^6qba(mn;|7p(BcMm?|pKnxxV(i;+*0y0$>HnUNWN+OvPkzkG6tdP*o_ zoimlYVt7#jLq_M26YtIpB zzzp$<7}80$>@Fz+sVho0QERN+h)K)pi@2H0K&(XMh)Kbm%oP+i1{qPdP|VR#Oo4+C z?ON4O9FKzqScL6CvMLTHEW;-p#Jwbi4H$|9V1v`b3JGunNr-~a#EJyaf>x-FvXTz= z=nxE%ge}m5E&s4toYmQ!z1g1KS)b)up$%H11zMy1S)?7>qgC3ZE!w7CTBl`Nsf}8y zg<7k9TCAPgtJT`9t=g{LTCbhjnw^`*3QNJ^3B}~Y9~l6k13Jt|jIsQh)l0&CJ*icZ zw3eDEjKNFvh{VxwEnO?boahL<0IK{vu9wr#E`d-5O@PHspgl_hCCE?UD$tc1*8bVE z0N9{}(u)B_F8y@5(Revc6d{niE=rUkph&fGwMr;E)nXA6kr9|4qKK-iRWbV$-37M9 z@QJy|4f`?=B*GM(B$RyN3X`H zu<9iuN&mP~fFwq*5tWJ3M|Ww1G5btnAq6r>fHr+1O=trN2*_r_6AameE#O~G*nzF-T^U<}@14enqL{$LLdVGtf+ z5iVg8cHsUU17#GLjpB%(H7zE@ss&grJ$DfXX^cN`)vijXE59#V!o3K)U>>#sDl$LYj3o ztp`NQvz$2LFdUJ>i-6sWEZ~~n^+B*aH4(g51iCL&iw(zGo1q%y9qgD`8@3T0oRP6G z0RQyGDOjylrMSp6xo1)s|H;q(Sx)_I+Y1s_)l-c;)pB{Fgc!%`V+>u|6}<*C4tu@0S=geBH_GBLc0~&1eAX1yJl&;ZfU;W zYrocOz|L#I?(4wrYj85`!JebUK5P|bY`u2uyN2v7lWfICY|C!!#m?-@er(Og?9Gns z&gSgTp6t-JCIG(EY4j&Hxj6fo(kNXbdG^NVODA996?-(^I1va`;Z>(fU0Kl~p~>8q z9KU{=*eKSE_=_V~b=50Q7$x~fmaW3I!fLSii##MeMoT=2`!V>#%3I@}st zKY+&PhGz2}0bMWA63G2a!`<`2b#qm;67eQ8g@LN#4R2KazD98uy#I%k4gX{jx(;9%$l$6h8Bwd#lNf?8b_9n-M_Pmz%XD97y zuWY2ocC@heY>#$s-*#-D>~N=cXdicO7k9=+_sAx9bw_t|fA@4}cX>bed58CPr+0j} zcXyBXeCKy<*Md!`3w=Dv^d_9kv!Wf&FG)Hv@U_*M^e;OZ2u$%i3xlV@B|nJvlQt&_ z2l`13x?-C6F6nN$k9fH^BZ&=~>Y<1kf>4QBmm1#6MBR1??f;G_kgh23HZ-?5o2N@U zC1`3Wm#!80Y0lZjDQhHq{Bk-i*UJ^p6i`r_XEyGN6st+yXMl z&)MWR=m6k#V!`+Ti{>j2DfgSkr^DvE&B%u<#)tg+xO~lbe9o`@%cqae?|jVv{G8Z) z&v*R%2>sJv{YewT$_IS{S^Ux$ebZMg)z1vKUuM;cHhC(0;1E=96`RH2y42u0uqhvS z3`DQo3!dM!iZCymRu^Y+Siu9jO@zr0N%^+F5IYhP2>&G!&=?WfU^v?X5tz#?%EgeQ z*!_p#euTts7a)xC>0Mz8IXkH#3U0TGR!#uNrHtK4gMq; zMGDLaNifO`Dy1O7Bnc`?kuWfd1dauVMjgOW0#=S&y^55QAWF}t274-G=rt`{g=o`O zbed$!6rxo@f{iLAq}Qrn?M!GGMebmuGL05K>T{-Ipfj5~j@)#hQN(hM3MR}rG3U*m z5lh;#m*i+Ek))86gwix>)}&VxB~6ql?A0VsEB`!6GOcR1C$-Z4t#u&n*TdQFu6-Oh z@!Y|kHzyvu_;2dZYbR&EJS}bJ*>zLTJ>XU@?T?K~6n5P(wRO$kRX;{zqAU{9TwZygaR{x zrHK{|dPU+E3Ta`YN)p(#S4Ub*;gpO6Z3LrMq79&gQGOjL0cjyB(2*o>)iq*OHKH}i z08^|ukOcJ&K%^2OVky=_8*XS20B!9@&`T5!^ks)^4VI=>NTiv>emt=mCz%_GR%b_d z+LYxmrF6Z)Ssc^%|_60v;Q5X*kFkg+Ek(XQM6Q_M4h-4Z5d^BCth^! zbLu-bz$P18h-WX!XUGtw*_Sp@p}5MRKCK9}RFKN}`!d8%XJTx);1! zy<4xm^`;B2x%uMT?!Nx=t8c*l3jFWA{2mOj!T%PFFvA2xoN&VmJ3O$&5kGveqPcRq z(HJc`E5(>$0>Nde`MnwwPzSxV@}NhtDW0N_X-MW_3ZXhCmu|83)}(AHA=9rii8dQi zzILQU&_yfQ5kpak24hJOD!?4lTmJ-|1k?T9Dbt8WSNWvVQq`G6)mST}b=N(q{cC$y zDnS&g0-af5Ol(&f^Ufx-^^k@uCxog^I4Sy46e*3gD6Wg|rICyqWic2M63x65LKyjJ zp+YzT#T4d9x$M)H2olIx1h!J8m!_$EC0kw_Nh!ryX~Fy+#X813*t4Z-1Co>CS#NeE@=(HvW_bS3^cttUK6LXK3VpREulN?i-kofHta zsKiJ#RcnYwU^JrP%uot-5m2JEq6r;U$tzQ6P*qmsMJqWGjxpTXe{52+y|v|4+>zF= zRCb}9xx`H|0hOK_xhFl*2_qGWS)nHRsH4P0Oi83jn%LwkUmZ&;jj|TZa95~O`ifIY zSrn%%^|(&4D=TYh&d{(DsGY?rA%lTYU1GTfTfK5|s2hMAHsHxZeiBfVQOwZvlgY^_ zs#wyDW;7d>lw@KPng7}xB{wfQ7;0%O5-lV{Jy@ZMkCDP2WYEGGNbw6&OhFU=AO#oB z$qswuN($U-1#QI8y-m!qTK|dyD{8SKbD<6-w$j%^73$D@`m3Q3P3XNKI82n1Hh@2-kJxqOA2RnhdT#f+QSHdWy3K`E)}iGu%M_H~~@q>T4&di%ja+9(8p@E==p?K!U*0 zUwM^mzflm>z^GLT1YiI`=;eOuBqFsLN{a*0Dq4qg)ey~b0Cc0tA0uGa7#hSTCj%sx z=;k26QIkS8k^fxm+GivJ(up)4$t*|^XBC$`4Ft?P`ZKW$RTF^#(>OwSWr7DpvmCg(`M1=@fFY+nPZeOQ5l4!vW8xTxE8fBU5 zHU=`;Rc2uz<6T2`2D{<4E_uhxnb7<%Hhmh%`V=w>Td0eFwrF8J$Uu~G)%PS?s7Ed8 z;gKl3*B)Hh%O=KPqSS0*6k8yLEwmzuF({b1iA(Q6vKGMD<%$DGo@ns{IW8ny&Z=Z+cTaJNT@x8E$Iw16V|CN zhdqT5X8#}pp$fT*v74itV7F8y5e+133#uB3koKzt+=z;rkdkUd)R+B4;6_(cV;H3{ zA}^-Mi)oJUKt$7%DFJCpH>4tMqiB;!*vE@p7SWn%0;U?yPKm%(2$cglm1Dx}XK-OH zEFWoUM>bNG$r{|CM)k~VC2=R#ijzx>GPFq|l0Ppgq@X@Yuc5G#Ah!Z$wPrb!R~be| zJlbO*ecF?lNDW(EdmOPf8qAIq6PwWrRw&g}tYtxa)616Dw5u)VTczun*s28?6v7Js zro|qlkc2-tF@NceQ4%sO z^JM5mGMu^`70swdb=?Su9;ebSKXg;3T|W6Mvib&VOFKy&#d?ydr3EBcyX)54+*PZI zv`ToLO_Z`2qoK78lv0sWTW~t*{`hodVR|YJZ_cx{1WtKY4)r7nQW9d*D_(esI|!G7r_A@@hhJ#e&%gffi{FB?!5;=&D7{0CeP=uk+kb|bLmm>*487J@B0jY+V$oM9>|L6ikASxQN&I3Q3ramedH0fSH|1 zhtsr%*~ExfHAEc^K-CBu+=PhWJYdh9omAOO{tX0`jmcEe3MdtlqCCasd|IVp+ND7u zyZ8wdWD=y&N+vDEU@YORtk-Zj8?5{ZRi(`$?Z>3dS`xYqYFWzS)tYoDivOuu+TGO6 z5B8MaWLYmc4X)5#OeqvG^@`ij6f&(+GbQ0QP1C1^lC>O5HU(lMdJ`iKMz%Nt# zR4yuvF7n|-nUqAyno9lRFbZQw4ID5YBQZvlGN#lr7UN0zq9RUIxU`8NGL}<#-R303 zWEqYpP0A^e$*??1y2MSk9aUW93}xsIQ-z(``50Q1Oru?ulE~oO(T39r8&R~N(YcM& zOaYd`&eh!D)yZI5Jqd6WiFB;USQHIMD8a7n2+~MM)&<*DNkP!`8vhc+$g3!pMoL*A zQP~oP2~~B@HFw$eql`R5ll1#(Nb_i!>PTZ9%roM@CqpB+M5r zQlIs;0%@>8J1F0PNx>-8f?*CHJFo&Ne2a>8Sc|b(XKomZk%niI*k^JkX^N(1zF26= z*k;DqXu4)iLYZH%0NUE8sV6GmZzW?G<(S~V(*$RS3` z%-o}yo~!{A(>zM22n|*(-Wpy?r-%$&kQ^21n!LOTg~A0zMAa230UlZ?s4z~9BHJHQ z8?`kXu_Q~5Mw>X+sI~d1vrx;mtk*Ny0vV{1I~){2`Bx_N0~fsF!srtzXaPIaL%zwA z^{rw|w1O*0LAkvmE3|_av_dTmhdG(lz&#wsE!@Q&T>r+cDaEzvo2qG=#wndz9GvzG zsC7)IbX>@+3Yz^O5AsYqGNI@Ui(?EGp~T9f%t~Kb&LKgn%@h|M-p)%T!K6xwtA&Zv zfXfZWClYv-ohW3|aFm@8#o2JgrcRN4*aeGphp^oRwm1i?(#BgUh z1*Y!b=8OeoMV?Mf(o2X7+&xZ8_!6_0;EiaYM@z!zi#rgGs^2 zJ}iGpLH4o2CbWY6BrF06Q2deK`?X*Cv7gMk-_6df&gLxq?X1uCZ1@pJYSf<#p`Nzs z<`Sh%12)K>`QObL84qC|;_1g$+QnKW4*({o$z=%3>?ePw4V5LNr@k3upvFSZ;6Zc* zSzOI*u;3PrNOz`)LYN?=tO#;a_dqrJpa z%mf0QOhWuB4K-(&93icY${Q}#PDBnPDd^{lDyc~XsZEBSMnS7Y2(bX{%OD1=l_(?O zol7N)hvrkAJkz=YNSr0Dn|7B5+IbqP>h%0S~YO3-B{KurzuUH8N8v zRRn;x#kRghdmM}50E?suiZ=?1GaW}cYKqNW<)dz45d|wwW#fieq}1hYPE66;)me2+ z(O%8PUSMR^0LMe7s^rNaLF^h=Ati92ZPZ{((9|sw%L-p9h}QW^i~46&P4Rxz6cAkM zhG_7HK&L=}m*|vUMLV@k_#vv*HEXVNOZv-BBiB&A66XU`5?Y81J}9 zi{vD35oK$5C2HtV6Y<7o*3eGq=AB)|hm_-;sSfafWxj%CbrFwTLKc2JNOy%-^Uft) zit<~M^5GoRZa|P!*x3G{YZ_yiY7Xs5M8aLna%q%HEsMly^jVC7W-pf}Yno;-1M@JW z<}1hMYQknQBeQHW^D@s^Y!1gOs2&#ERQ70%J{yki zsE$g?Qvc{wUmL%G8f(QJ_RfYdWi`iOn?vpCtckTQ)+w9b>71Iio7$;br?s4xHJ-9H zT)TC>Y+OEl3~`K7bLM9w^O`zp2vCJECvga(T34gOnx@csCXHQVf1UpA zgg~U-;0c7^l=S?z$p6tHwI2R4wBm|OAVEdgq~6&?a%+X5O=R@&knbe5j24Y;Wg%GL z1z1RhkHOKLdBuu8#8~K5P7FwLO~7nW#DX|pb{8_bVlu&68S@CG@iY&&66}2!?Dd$( z{@f*wD3JTWMy7C3-SxNpIT!$S7BFK_0P(EN0EL&{|CDIV(iSaXE0Ip`+-` zWXVK~#B@lb`TyEhp`tz-Mx4l`*hD(EjDEmqSl4dxMhP3%G%ngl+T`Eygaw`Tbl|XK z71zZET*>~0;_%{mQg5CkG9qgw(;^;XC=Jy{Lpr8YFHK2ew&BQCe|mh0HK;u!tsvB? zC)A#s`r{;{F+MQ=8t|+4?*vD%GuHY_;W{(QdaT2`uDeSyZcGKwls73hdN`X8@<(D3 zsBE87vyZS(q7o;mVTUGm&RDyYmC980;5<&TS_KEK61fxrL6FbTKz8<~x==}AB-k7a z6C*Jb??@0dggjUFS`=LlulCyn*2(Dy5RZw`d?aoLNO5tR==_ay7S8;>-5Yb3Ot$31 zmmsqWNB8e`97gX-ei{B7( z=|!$$;Ur5phI!sy@D3(dmnOgAcRAB%0R1(MvL=^uC?ADF+hyY93yx^VFc-KnM|}j9 z2D;401<4CB8?!R|@@a1U*UMPf3p3aMGTD2*GaoaF(HPoOSTxtB?+JZhZ_=R!k_&Hh z5P5T124`&bEtXUXYO!6{A}1p&QMrR{-3nUMM9o?#e(IntJ&%!@JI>qkh!BJ4;^!?u z8wt~N=bg<|Pu%m4hy@0oU_<87nl09W+#`3W4uxoYnJ5IwS@hlrgtS=3>Ef}df$r`* zQvZk!Ko)3{uMnuO!3CfksOJjQbYEJ@x00$?OV#mb*`$h1$Ub*?wjl9`5=?;h2TdmF z{81}Et^ndxFQS?}wX#Tc`crkAP|Lu0x(7!`dNlCj%*(}4qNrzEjk&t3%k^3Vgq8sU z2}&V2aG*hi1rIV@n6M$lhguXithn%^LyHk9a?B`kZ5s0`N}EciB#|;e zir1)4m+r(_R3}oMKZ9!BnRKU;31TG-m9piol(0qdQpAf=!d)c_gx1yDSBeC%cmKT# zR*(d5WGM>r^1Z9&FJ#7+6(9aO0PkMViAPH|tVDv6&pIOv{i*tG(T*x(*LGSPH`xI> zdGGeUvuV;O!#f%@-cgcY2IP@BHZ@t-Co3J|y zEqv=j3oDH3x7{|>5X28f3=u?0wvc3iXdh0f#2E=YCIw?eJL$o{$&`#`hQVdYA{A3G1``U!-(6jRL1j${gIwJ+$;vBEQ5M+bfB{z6z{3OHoTqir{wA zPBEQqTJX>~Z5viWnFO6G3M7&h&@Hf_$RaPvq>Yx^X{|L#*rAlw4kdxALX_I#wrFXk z=JHa`FJx0Hmt6R8LyE1P^a3K$>e34Ctf@v7s-`hNJB-}p1V&fjuxNtHV6kX=>)@%r ziV3AP?VY$`g)L4PV}v!XIAe%4nax|;FdcJbiWFps+=RL{sHJXoBLB%`l|f<|W}0m- z_vUs%&Ut5?eb)K2o`L?kXNZPQx#*;CHoE4O3vycKnu&f`YNUC7__=nsSZQNncbzH$ zdgCOJs3Z!7YuS`+(zd8&Wx8$cv?H!=xc9<(FWIHW){`hU`=%EtAS6a~fC>Jr(=f0G z7`0Td_!XpowB6RNkeS_^9M;kNkruJelbOOwNrzl-=AnfGhFsgO{1xS^uJ_dl=*^z(O> z#%s>_AI(D!J>o-aFA7;Db&&5khigm02mntj?AuwxuD#!WjsGvg^&gD!R4kiQYp{|g zsLZWx9GVIN71%(jbfM-ylw;Pq@*8*Tx}c0c*up1Lz2pmc{RgW{c?&N#*hB&I#CB2-Y2Fvl;# zB`4W?iyi?pn8o=qHKaocY6j!EpL}ILbm|pq25F#DQAd%iLJd+(cb&&r>U6O}5OxsM z$@z3Lkc~qfAO~}+)C8tA0$Q7Z?pVjgz>PY5BG#^Or~kNyDN9*IDa%b9bS+<23z*W9 zSS}OBFhm(ECdxq!bB+@*aZ$@|EHPJKy2zSs=}jqcW1vuMLN5Re0C4atRs^!w9+Q0q zo#s+!ItvDsnYa_4$&%PR)m2Zr-4j{v+!j6K*-w7{v!7b{*hB{6u#qW_WC@iTM2b5~Ty&xq%_v4C+EI{f6r>)7Sx7%B(vh5$qAOXK&0fMWoA5CQ4srt^jA2eUNvg_4bDdGmTEmjnsQi&pE*yT|Rx2q)X7U{d;_3n7PTVC*z_q^s6uX@qD-t@lL zz46u2zgi?7Eo?#yAKGi8vc;_I%t@9Wx)Yt|#1u$Es!jzmOHkD4UwGAvucsuWgeg4X zKh8%dW1Y<6aCJ)U9LQFubk%`S*Ed31QvZ{u6l-E849dm5_>*IuaEEVY*=Dg4EaFVS zn!E-l-Q9RMVv`p!jaAIPIi)?nRB|wbnZN32jBiLWimH}V<;XbmE-hK+a?m%m=4iP= zg6fT8imJv5O^v742ZfCR$OCE$kC+GpSB1Mv;WK z@z~HcAw@ePzzR~_S)PD~n4LRjvEi9aWGqq8UnRQM8*0ZLww?wG5mF)9?D4CyHuyfk5G1$OUju?^wtvg(zWm{=U zi`@EKlsBd2Y2%-89F#%W)2>vqN{dSto%YP!3l6BArx4H>yd3 zn5~}6TxXaU-TI(|an8u00N%&@>?x@UhjM%y@>k zap-;gdFEM4B#<=~nMhBSg%xA?!t=}O{C-(ttf()BTBL*)B!3_%JD<2dn8A!nfQV<^Tg+Dwg%CPvx z6aMjxcl_ibPkG5#9`l#ieE;M*Z~4w={_~sn{OCbXdeN62^`}>T=vi<2)~EjUt2g}^ z6h|f-W|4wj?A%*aOUG?TwpFa{S7aw#rR$nX$Ec}Q_>if*-lEK0wYdX;%{pgd0GUiOv>;!O#c{Ggo6w@LddAA6iL<8V%hm;r4&P7??~o4h&<^vE5BJay>ktt2FcAB25dTmR50MZN z@ejGM4KM>}S_+;%gI@Me*!-(+{rBW6IAp6I&*rT}y zpcY1LmG?qCNWYhQcEG2Gg$=a|4;rm3-{l?5D!GufyQalxB=n5&$zxiToxB zPfCn1NdJtIE))GyBPc9$R4Nm5-f#U{GgtbmeRu*W-owXG%lT@vO@M%b1kGToqp&3F zSCokWt!y|YP-2PbVXfML|ODjPjp6AG)7_6L~S%jTa-p`v`2TeMtM|6Wz-sTVWm>nZ5H=KQa9C2K5%~MC9K+_;TR6tqOUiG1I;)QE*wMyipS$J?nFQ? zR$)LYN2VU@m}G0z{n7xa#3P0#pm84m(tm&{~7=5`Z1ZAPL#wBikXl>i=O3 z)O8dFz#axb6Yef0#BRq_Y7}e%x%w`H{O;?nNCR4-C>s_n9d;`r)+i;GVjtFGBlcn^ zHe)LmV>?!3J(goXR%An#WH;7iLH1-vRw>KC_5kQ(CMZDKgu%qgS9}lXf-f)!B#zqg zM9>3gx94}(rdMkg6?Fopj%xlEiNaLV=oDiD%um8XbHxUZGTg7tKxZeqFO&F0RJ4!$ zN`;g}lQNYSYNg<5MGRlSlxDAo$A0XXj24{A44n3=pU_DZacNn=YykH*TqH(1h>Wx# z%M-%|n4U>E$&+33F$JRqV&Fn8%3^Tv10LT)RI>+kW^pbO1qjS0Ku)bM^8bh5Sg<;3 zffewA6zbv8f{-F+@(4*mS^5(urC=0ZFajiDU*Qfu1M~=40SP)%ApTPd+TqWFmlSZa z9So2P0cz%6hBn$jMX3~eM>Kjjbb3KldasvyvDbRDmwUI@d#e|GwKsgbcYMEBe9xDB z(bs&_mwngQeajbq)i-|Imr7lrI$Z)LA`u>S0&tKboNR}tzKASxNn#$zVTO}U)#j$) z5u3OXPA~B`Oi_)TH1JWH8cRlROAI6HeRmT?dm`q1D3&fA;DCp3_c=%_w z6a!p2gg4M=H;%9!YC(AOIL`>JC~)gKq%Z+Ap&|+I>G6HK8@M zfF1ZajdapNc(PMcWCIwME>#v~M_H6hxnxQClubEhQ<;@l*_BcGl~wsHBbH_B%OLPe zL}<24aZ@XPZ)VXble#BUoM$nB8Bb(MjkXOFX%=4gH`~PTCP<8sK+O77bNfn3{ct6& zO7m6*KnSEZH2vs6!kNUpcKRmuGR0Ok#cDHMGye1dWI&t0#Eof5PNM&!ZEviV=5~JG zI|N_qr$0haEu;x2yF;bY69KU%V%oD#8rN4Em!A@5OW%p6B`p%`meTC((x^r! zTH$$*RH%OxNsD@@jg+X5nn|COsgu;HjXJ5L8mXsxsh?V@p%kjA8mq6GdR-I^Ti|9~ z;@9}efn~GdzReTgrfn2tIDvSr&9r@P3N4PpH>RvNWNIkFNo-ot;J|Gb2abbNBUAa* zb#xI^JGg@X8d4cGQAf#e%2@$~00apGo&0nbFQt>5Z?Nm*G&2AAPd~fh?k_3wy8H0f zabjasrH0t>23@E53 z?T#ClLQs{Sw@6K(uD6&gz6}ydm0=mcWm&-gd%$Cvzz^KO6Fk5XJSlCU z1Zd7LMS{H$-quCI`)w!<1}Gtd9F#!wqB43d6QVsPfi1CQ2+ zQTzTLCY}W4VUz{2sE45WmT&W`6su>_Bu1rn!kGewnY>(#7gsX&0&Zw(raTZsy67?Y zH?O%(T2;;|Fna;$g=M-$CFq%^{b{G@#-9#7pOP2R7hTc$X?YI05^dU; z=2qB@7#P3N+Dd%2@TtfUm_wXxff0o}BDl%9E&mj*HvS`rT?er1L{nd4OzTtk{`#4rJWtD#IK#C^#FGhT^kfk%mVn8omELhc{_hx=F8)ED3mRmmT=QWHYc9 zsCt}ypgo1NhB@%g(cn=~=H8<{*>-!XBNDzMW|=#T#mBX}*dU7aizOu@ZO$*_`KWYk z&UH))n&S7~n4JOpu3n6l(A&NTER$be<~4cdXPzgE>^2NCrvDxx_9P=$-<=g*{#)~d$-|uNLjPcQ_G;yUVuA3(|Y_zdL z3MO%uM0=xU(_x57lIJE05bIg=)}VJ^m{y__-$_apk&&J$;hpVeYo%D~9P z@qEpi!p0uBEm+IjuH&(F>9n<2LS?!=IniPgs5jqwr`6N^Ar1X2jbAaX%z^sSZ4~~A zH2z_9{(F?vwE$88Kmtl2MmrQB+}Ln&qs2fQ23^?T!l6aMfj0yaR5kbtOAV~_+A+PH9`M1f2WE)pnc zb4Mcr5+#9_k+7jAM35J;Ugf#9B0>MHU%7_$8d7Z8uPvl#iK0bqlrd|OL`fngNt6Kt zkR-v&w{PDB0|4U%904zq!g(Vg!5c+x62$}P?xibbOJ%i}ElY7cH?QXbjXx*mTbOX< z0j2!{UcEQ4U(Z1BPEmq)LJ|o|a8HpkTZ)q2xo_tl;JdE`;&_uN2qGbf0@}`L4|qNx zI$rA2r9WTJm+tTBcxivHtDCoW9Q64x_|%Hr!A)1 zV|+ysMFdeuAw^*Z4gf_Iktj%9TU$t?V1*Y-LZO9~Y1ko!nryhCf(<@+U~+gxAPI7T z9d;OI3bqwvh%l54$#Q;DKsX;3vxj>Sli7x7BqmY*LsHBlHN+}5lL_r2AS^%(tN^V4C=}0!%an*B* zDtd#dB#q?Jsx7(dhL5EVm1?UB*}h6D+a!p3cF%qjsXZ49vMtV*!4 zMFLygz(E3>kded$ZA=hE3vNsx00LUPQAPqfO2j_|GZnsD9Svv%040n zpK3}d$YcU90y*DjNhApXU-R9?b#e&!1w_^iN+tzycO@tn6j?lonPqTiCU@L)&uzD5 zYc&?dgK&DC1ceF0mjvE-U$$dgJJt<1TbLpK_S}XwXc*O2?xk_ZZF(l4-cK)i8j>k~ zc~{v;Cl)qo63(T1->jz%+Uu^z4!d2muWozmxZkdO?yTcjpcaGA_y5IaFl|8PkYL10~tnOgKj0D4pWgpNkUQspnwGcrFsY;gG&-XhU78tg~o%S3u73=3W}w9B5^}n5XY9cNaA*z z8Nk+FgMiDe=5zf)jEho~pOQu9Y!{N-j_UHn+t4mFharuBlF%BArRFcO5g5SMV;r8% zW;bVCnQxBcn=}UPHpBr;5Tszf?5sxt0=Q##Znm@O(5#M;InH~u+O=hd!Xjie0FyZCXKs1WYXo;F>@H ze8eOPOo2(3>J=Gm&`~WkkXSWf0h6RA1xuB|C{cilxG1)Tca=Z@6L5(FrrFb0g~}xp zkO2P~-mriOwBijQWJ3u6bFM9HAOS77DjV$326PovpkE~@SmRZKTiq(G0x1K&3Z5i|A5*S)@Mm#)#KHLav1xnj;Ql#GnXSVpq+^fG0=B+dkS zIa#Jj2RA{p;~sIwN6vEAuGc}?UWhg_@jy0YO^VrdNZU)NdFeGjlM%w6hPfo!_G`5D zCW`6;#RTwBcIG8h{2>0+bfi00BXu~=4Aa_z1QY<#6>A_NXL(gt%mNlU zcO}l$>t3QZVqve0BrRKD+*-D4@jHE+J>Y$aRc0Md9y;z*}BQ40>LN9#nM)vPbu(JXeJZpX$K9=)?WiQQye_aY$vgiV)dLl9^rfJ#(G z=rS3aw2rFlp#_8J-5r|j>mC#d21Nk@NRUE~EQ%U1{pdyx%h!;ENoW!MyRU`nZG?`* zrEdl{Fh{y(U@=x7Fa4`Ypqm_)4z?YEB?+B$@{^h1q_8)wsW2kP6QArf@;tSC<$&s! z%>5LoK^2NnL;|Q-cRtXb4@;r7Dubdr`cQ-hg$zSY0RLVPQ6;$GTv8axO()M@lf% zx+lvOit_LVrUMf)L_~oR(1ID7+6p%`l@;Makl4FQtPKEuR#HeiS~ow|oqv5;gQv!l4;>jw3YU_-L|= zEp77m*t6*9%(Kt$EFU$C8^J8CXhc&`%90i{++0U#P@NoxcJAeaSbGwz`?)&veYEgrEbV{Ovgol)1?_`^BSM_F-$Tjq9Guj zmK>vmHFzN(eGy+Mq8Ot?Y#2x!w>4k8qdT<&J0>VQX~R1ssDl42xPp=vBEbVZ!1G`< zG($FsLpaDhDnUIPfBfZ+lPFac&@1_+=50)ccAKtcl` zV-Y|CLZ%ZC(FRwQEG>WlBOnwf)B;KuDleuhH*jOp;|2`{6*oX)BcO&+5i@F70wv%O z8i7$$zy&7O5N>b>k5L9+7IYw-aW&V*dYj})NrW1t zWJDA9FB10|3D86NR8I;ck}o+KGg*`Obd&hBPXnMK{sd5*$8$e9DQ;j_9KZz<5CB!- z8aEa*UZ@23GXQvpP)bk&8O8z7gLgxj1TD}8S$B0@R|g{jb_u`+WS1!|a4k`gJ|0B^ z1Eh5$VH07~0_T!b9i^2*0Z|}y7i6G6*HRlgafttcXa)+f5!WIGZomc9a(5cg25-;> zlyis_fB;F5cZ%Xwo!4_g`BkJ+J(x);riU+U7C7iY5?0uo)bd5od~1QTdW1%_bzr6&6|p^Oosk&$2r z_MjSyp%4n81HfQCgcmeeVR&|7eO96;`Vs#(zy%`ZQCnaTWxxSNG?*I3qNwp(LulG^(r` z9DzhzVWV58Gfi?4Fsz52oOB?*MQ;Dv2So^y1?RSI+S+dIrU}Hct?;&B>4q8N1_ift zAV2bvr{r#x5laFGk;v3;jRSB)Qm+j&ixNX0twA}Jkp%eWiy5hsV^Snf6mfb*uorVg zytgr{;gal>dR)SC5*l)IVvi|zu`CC%FGq7TXBUEkbB3aGoe7ke8CGVnDfg2oC(A5* zX+bMX0sy5zWbj~aPzI#1l_Nn0WU!SwTLX1~W>+^5HA^jTSq1~p3R>Dg7u5!&kg_jC z23*i}Pq!&JD=9L&31q+t!jrR{fU~(Gv}HiGUN@9vzzU6`vsgh5KS#6~ZpeTNHO*_5D#^|&0_d((+n zoYW*tbA7GnuO%t`Jp-`$X~TnV5@Uq7iwVh+k(8~JCQ1b zN1H>GC_|MPz%mpOcYrGqVHNdLz`yb;fml38B`XlDqEirL4}7;s8HjaD5)8ayFhmjv z9Kp?#!3z9B9Bfc-umS&7Xo>&3!YVu#d;j(H7Gv;3t)p9{NQxf_PW)jxk+C`b zmKf*sose3@QR9D0glLC)8tZtAaRrY$7BEgE8G(tZs5(@Hbd2XXYnrqe(w3dcQK%>~YS}ASrGZMKgpWJ|8uI6@ zl=hIUR7`KPB9*~PfaN2tlsX3q$b#k}nr4p*DZQFpk+tM7e#OZoLUAYgaK*SFySQF7 zc^m)f7lLd|RP=g$>>m}CPB^(vG5Je2naj1T%Q>kd{j`(+B)6GavSS6eMinV7A;EX3UVW&DNn1ndU*UAUjn$EiXe?; zjO~mzb;V7MX3i+0$KFIqP7_xjr<<&0S(wE#$j7iLUMMA;Uq#~yPf zDA^zFH)^Cftd69`!P*|E%WPTL2M9%R=oR^vrwEPWse%5 z1zf#w)tXFdAtbC=7@!HSt5i(Iv~LmVko2mzZjl<>^l;)7AOL$9ceTp7H&_{sBIN5> zubdZ@v`rwVCmFjZ3ZrrhE^-K?O9<|A8mqA#8*?0cCLarncp(Y@w9O;?;T|61#4J|c z4C4PIZsOdG;wmoUyHWxPmrO}Gnk$)$zUOe@L|7LSlMSA#&fU(GL2eN4FHusGEh3%u ze9`O(8pPcn-e9{jYj8SO9 z&XM_0lb4U%tJJ6!&QwKr6xA9d^!JQ zV`%z8(!NU^W@C<41gO)SN!Q*OfHk?$-WRm(AE!gd3QCN>ZCb#XjK-Gkva!WE69lyJ zxtevINwA%?Js+{GssoKk>Ig@3JREh*L{Y5A?FR(>O`4gVK(kRbzR!`sb-F(bd&-BP_ z;-mu3Y^4R`>?Ys7djRvVb`^5?=-foC_V-9`%og+PY`E3BSIK0_x0l?|s__4ts#+86 zSXDk8QvNf*`B+4wo6M(LzzDdQgPk9}u%(^4%Z9qi=bK2*(VV26UGmWzP4H~~L}(*_ zBON<-KIrxJI-Kt{h7$$i`CIR)Nt7YHqhB}QI>QF2k4e+rNu7SA7{t~tNt+bl?f80O zBqtQeiyp}so!+4&XZp+EU+pXHy2BY(t^8T-p)lBBB1#Z&M%XCY{oMckX6^mqPuP+; zXQ9IVc?#I-FW7-?r|iG}?jQekI{z*V{(v1SZO{THy%u9IN&t~0N)jmolMFzZZ~y{@ z5flPRf+Pw;f&`-!oQN=E#exGW4vb&RU&1;(WFbG5;PiBsS*VP6a?uy0IU!NLv#K_ zh!*64pFd0XTFv1h9&q^f?lr*aW3S!mM0RafprEpjCkSS0S;$Ma0yw86v$bk zT-Kr~=@v~|q-c@kne*f=pU`2`~=$X!Tx-*t`tzBP|6y8l+dWS;tC}f`tzZ{TpN`qwQf2uA)AumC?nnM zGbuIEVuC4IWS3P|i=>`KNzDTr%d1%XjKytPEiBTFS?T|j1=m}cjx|;~>Zr@rz?~ve z46W7>+H0pjYyEV~DA0;1&Gw%2Nuv!5JISDcPco@sf+s@Q*HLUSn3YzL7=x6HYDt0> zRuUkElq6cwB#BL05qQ9m2OhcPfihDlHH6w2(FG7~aJl7|V}^NVn`Oqi=A3Ef`DUGe z?s;dQg9h5>Hi~Y!N2Fm^+J&Z{PC9C)rFNQXsHeu7Xsw6lT4=AAb~)^>nRdC27P2jO z3`qhms3Twf%2lYglMDypEe zh{DRM$P=w7D5>^hit|P}dg?0$0uY__YJ*4s08RfFiXaH7#?xum#>m`UuY+{T{3*Jc zdKS>Z1bf_f;pM$)@A`miX(p2_JKS97jYG}(Fb6V8ibw_$FV@B)LFl>ZoJYR4bD#fA z3-h-ypM2<|lMXuXCj+TV^|IG8aPQ>Y?mWHElifYU^ft-3?o%w=#0E_?Z?Rv! z3I;EW$0*)tb^%mJhBqP}|+!lb@K7l~1A_KulO~k1YaYkVj6w`>sl3)vautEwI zv>3)nu?c&$V*s0=m=s7+i*~faB$}uND{8Tca28Z#;4}zloK-B1Xn_PZb6VJLAW@2v z&7u*#=tMJGQH*v}qaNkxM@1S^l3xGR1}&%=N6J!-Y2NtC8plj+k! zTGN=8)MZ=PfNiKV2G1OnnmqxhgD~=)WvZtnKoAc^x)Yy9;%XuhfNDt6q`kdOm6Tr9 zi4-J)uw%W>FVkAfPx^&9&OL=HP+T z?T~_fC76JAj3EhQXhj4_(Ta(XLt?fVMFcd#iuY1Ty$=>hhBnlk2}@-ITWCQWM6}@$ zX&6Nu262d75MmH}n8Y7O@rX}M;t{9#!zTW43s&sn8LK$OEe0`;Ka67@Z@9-It}%{H z4C4*U_{JM1a*B=Y0u$@l$1JY#jzyGVHo&C9RFZ;~&V)Sx?gXvoy`&?3_ZQj4CbMK7 z9vYK!ybcZTFMOnkLJXCZqD%l$ytShr`w}lY{gqBo3Cmx%b4XIAgtJ`zUH=j_$TK0N zE0w%6VVRodY9{1Q{mcKNqJK5JxeZHY*J5R;5l75VN2|3fwWwMmN#Knzoo8jK6g#;9N+wRa{3c;z_nUPan8BcJFoT^_A*5hM zN*F8!TSNid0%k=LYLSzVtrH>otcN~rL5eZ>$7Ju`&4%RdEG?W?0vnhBzBh31d*_?q z`v&;G{T*<9=X>A=*LS}Q4se7YeBljGc*GSx0S-7E;uC*(#vy)jfNwzK_^$ZJ5sq<- zOWfoRS2)QTzVeiRT;(O-c*LFZZ+Xi)ZEF*mSOM!1oKVlukHuXg5uH6`4qbb#A^I3` zr}Xb?Z|RS7b#4FCJSd?kVJKKRBvhE$72C#&bcYo*c>hW|r1)70dkxE$RCf>nWY2$M zoKxrEtdgtOu5-PsYJ2{evP2 zVF#9RzxEvfe)T)S{x+~35~#-j9L5SZs75pWq*m@rn8MzG<~>o2PIE3|8a!ctGEw9Z z_PyWzHcqMh*Zn^E(?5Rjhvp)u1;1_7kEivM-~8gw{`~P@fAJUR{;zMp{4+oPQ$Oq) zK;(D*<6+rRLmzv765dV3ZXf*%2#qHQT7wEC=|;1mlQ6WV(_G!qp-37q}` zAVb@d?757`hz?Csj6V?+NeU!Z=_98*lR44BKtYPPkUhBIB=J*_^lo|vi z81yX9atq5+tF&^D{`m{lu@$;$o4g>kD98d>>m_Y+CTKDV#uy2ec$?e#JCJCbVXL)X z5)HIj7F8m(W+RA7gB$}%f>+Z+bGbE712uYkiNmuMe8Ib&fWzl7DuY6=MI0vwxd?k$ zC@ruDwivL<=r(M_n1>m+2q?E&AccY$gHezQEkFWEbev~X#Ah3T&PWJ)%LrF2msq@( zS)BhvS**odyTvWEMOvgqq54ByoHbhvMqm_1Y%xY&EXH0;#$(*YW>iLEe8yZHMrMr0 zX`D9#DXv=^gUQG_DpZp!bQ>wiDlF<0Ab5@Pz&p2NI`rT>`gxPD@+{yW2$`U+!B`Ck zL5L}!o1jR$x_A~Y;-jBnh+UbR_qaN-_zFi8w1m8r^JtG~5lA2eEbC~;oWPxe*bDHW z9M9RVJX@oV3LEvbkE=0OeOP%YuGxkIrY=m3+9c%w!`6RF!0 z1Q?2M`K{!D9_SDs-*6uB=@99;k0P|Kw|FmF$rhr-vi4~o+|WMbk|NMEtntvB17ZJ+ z1enUy(2ub+i2m@1|KOCeEK5?bg?_3BjY$Aaum@6*M12C8{bI{ah%ZTKg}$_>gJ=g< zV27lDAPZ5;36TV~Ss@NV2o?%I#)M1?i%cnbOv$v&Q4Bx^q)hy)u+HQVt1Pz5tT4^Q zGR+*#$u!N%#LUfHP0zea(NsrGnLya2u*b7L zEZfcNBB%&4%O7+sjbN`h8w^jGI>Z3HAS9Ds(T~fByuuJc>r@E5NIOV-G$r856-*?Z z%#}+Ki-hnq>Z~8X0Hd`Ky35)QR56S4T$M^GiZmI#Gy+fX%p&aEIWEbIf?EGGY{4Zj zM3&yc#Wf2a!GJ+9N*KiWLR&LNZyBaqBPOxBrU?xRHF-5>)Wt&_HaJW!1Nlf*3!%ya zHf|!B7^Sv@kv4L=2=vjAHN285@eGI9mf&!fD}kTRxVkMc(szr|kXglc>z-?wz@4DC zR-CsD!Hp?37AlQWSj18*oi|#v(ke9$EPWm@^~EsN(q+8HEd7^rAyZiV3@ioHE_Ks$ zvC_hr(>J}+ECtgz9iKksQa#O5K2*~@HJ3F-o0>aBP4F+a5s17|K{ZhwLu(shY1F?7 zFGf;FMq-ySx}Az-qypu;Z?p)8dL4SnyRH(+KH{T;)VhS|M~d(ideQ%@ga`nHB)b9F ztFvp*uftWbP=dc2P|Iq&)3eBh6pFS&R;=J0lLQvNiwIGw&S<^V?J%?0V52>0NtZC6 zbJ2v-Xsuwo$>>O)#KV>Df|HOGo}Zio3&gJ1`@DDk9^>c?66!l*N*rj{R7XE!mURSd?YJls(Rr6BF8r| z)rlmHViU%2naMpomK2San_$ATEEfUFT@KYyR&q6DxeRIAJAY9CyrIwNNJOI|Cx2O9 zrRt{TRo>)9sOd#T>8;+AC`GE>5N~B691XqF;0*9R4et%#4ABDc?N;*z7xn#K_DvS| z9pCe9-|~H5aFJi~9baZq-2PWVM zp5OZ&UkIMx3ij3l)?oBSVE4V>50+rg5Jl<@r%eh8zCl%y(AMP1i-8H1bHuFpA*C5s zCW;`l!jT*KdzNIgtV`Pov;atcge=Mmi=Pm*!}u$(NMeRe$i2eVgyf?no`5C(E3Qc5 z_Ecj0F%$jitcpyRWcAKE>m}j5R>@{qiQ*~&m*tLTP@*I zDArQs=oz1Q`HnX;EWsF9_EJk!rXDaeh_l?XS1$jh3MowWD$H6w%vXjm2fO71>DEmc z11nKfEAeGu{^czgW@9eqV^-#5W@ceFW@HxTW`^czR_14R=4!rXYo=ytUgl`_=57Aw zZU*OZ7Uy#2=47^Jbk62-PUmnwXJUqDa&BjG=H@Mkgj|k3bQR<`845NsuH-qbme3D_ zs)Wqxe!&CnjQev;l^-EQiSQI zgIQ}wv}EXYWs*rnMqTB!M$%Ruka3kfTbjBk^__)+(!c<0!2W9~?Hk=g60>#dt*s6(; zjBP5>Pn*%&Mn)F?8|_%O^9a^?kRk|$;sgNs@Rx@ASBPE~|q)-(lUX@wpidxkx zRdM1hMmy=QlPg~1#7&(djGVf|oXnP0c0^ri-R@}hJ8Mml%kb$IG|HT1Q`2G}$Ou1K z6QP7v6EU+aGE>J}8IS1r-(Vv)_8I@5_{a$T5oH2$A4N{eeRXip3oa>Y9PqkY@Hl0J zl~@cH5QjA(w8U@^k5~l)@m)rs`$*Uj*KiZZ5)~)Q4mV6xM)4M3@e48W`anzOJfIQR z!BTsBM{|M3L^auFBu8BgUPNAa$@s_0vwnuWP^+9+6ZbxgBJ(^arpib~Q2#TEogUz*)ObQ_R>mEcK$#TjM$F)J+6 z4g|Qg*Kmz_43{@7t7Qsv!YKb9tZu_llS8lOUD@qj0UF*}`L*7%-V(;gW%~7`qAj5y z;a)fPVn=pWWOZ=*HM(~6I(+o&efGIFDrcv5>b3T2*LG|dm}c*Gxi%SZPxe$K_hXm# zavyhdclIQ`_UpacbCX^)Yl|NCotZAszo216-?_(Wi`3PQoHXyMHb+sJ_p6(nlAw$I z$%!kjy0^$;>uzF()aZ!ktLgTNEVkk&ree{_;xb-apvWAvNN^W*jyMa|P~EEhHncXT zz2`!V`2dgvp%2T5f>@fsmpHdO)_K)J4W7@g=ZJ*Zrt!25`q|O*zx#Jy`ATXHK_Fm{ zu?D>hx#@qFZ)* zE^B)d-*F@_%YyN7ywz!cQEyDdVrL%hci9DHD3^1}!G#4mi>QhdBOe4}rC#9#c# zr~Jvce8-o3%&&Ygx%|xce522ZCASmD|NG9Te1oOs7L^k;OKP5o^7wJ{$vrd661;#1 zAc}NqOWO(YREUb^ZrS5XC~i+Y$MeG~q_ji+jQ4$njI%n|+x#{?r$$0VDbFvL>B*S- z*ME0=Zw$vB482jS$bFkf|1|>n>C5=)^oKPzb;iP|33U;S{;rdgaerw7EW)seg1X8r%#j>qeKBYl;y~zEnm89%2Z}kkv*Y4Jy}(1 z%%xVhVvQR0V%Mu)#ggUf)a6pGVa=9Z8#d*|xN@nowW=0vR;4kg-X#k+ZPuGSyCy1Q#VkMm&J>1js!=iG&~udJFHZWO!}`LXsOtUi`N6x@eoWKAhi zv^*BAxpn{L^ra0yo;<)ad?;XvMu9?9ilhM`^Ed3TMbbn8`ZwS}8xZ7>ep-Y?-$xA= z_0fBAb!HxQNo15j5@?Ym2}rTURh?Y)iAGw42>_A6fdeKupnwtq$l`z>X`#uAEyg%t z1fpG7ns^a(^rMeK{y375J`xEel0_!Dq>@cC`J|IgM%d$!>qU5&XL04FUY2ro`Q=4m zS|sL`Wx`ixTx6;l;hAl+`R18phB>F4a>fbgoOimpr1Ur2M8W5pe}c)Uo$qxt z=#L=EMd4!US@_Dg*+mk}wb=lW z&b3iuI)xj>MgwF4MHUq$0TDwBx!W$h2@a*jywC>d5)##w+pUSzqFEZdTNKq%Vcuev z00J3xS=74&>DO?75v3?G#R#!`@x(Vk=!UU-FE@=kQoG&0L8yWG>u zJIUNK%r(md7E&L7j8;t+^{gMyLHjH;&_f$tG}1pSP4v=7H=Q)oQ9CU))KgnsHP%mS zP4(7SEA6k9U1!a7OFt#XZDl@g8CPo-ZX{nyj)t0PVvt_jZKM~Ow^?YKB~`HB)F%ID ztOA9hRb3DXOc(2H!tLfbbi1h<-EzVmC!9r&CwHvojWZ`5t*d6F?MNnKs5Efm;{BI+ z^tK*FsTQFSl)WDNS5Q4&*U<4INK@DaQgBE-s2szl1vWf5_ z?OD^pDnpbkRjMK^^o$Er0>cQ!u!c0e;S6&q!yVdChdtyW4uR;yApWq3L_GiE5R)jx zB^I$#XNsYmwxmQO_U;=NnDClN#cUL?f>i2bARCHMY(heq1cfFn>55=-vXg99vztJH$zQ;k z7tmNFHsH~j&(H}>s#r-XdLd_8-nmARv=eOflxIEX3D0|)Y%b%xnLhsmn$Lmav!FPe zr(w`@&bHALJ$kXHJ>j{{rf@898Ojp3Is=);RP-+{8HzA7Gnc!Cbd(kurQJAX(npa} zb|TeKO?;!8!<}f1yzz~3UZbrkaPFqX+1#v%6P?~1OQ=RIq);!{NXvbWS3S{U0wNjH zBxnaDY9mc+?DZHmf=yF%n~TSCSP}WqX8`tj5HJY@BOBGIc{Ebci>~(|2MMY{A7Rjo zp0zpzU@}9&^3jFz6)d~n@=9a$h{V{s*8R2UMFU7)egr5Z|1h>clby))qy;c_RdIwz za?)p^B-$vAwzQ;mQcXa6Sd18kSpPB6EfzU3`%VY}Nr zy|%c2g6(nNl&C|&iAjb*lzK9Sc0cLW@|h4!)r*ZAw}_$frs`LsDkLHK zSjdayaggX;??v{wtMu0DR(g~bshZ;2+8t5~-)*gbVdE^2n1@1`Ih$f61E~TVhQTKT zV`9+twsbL!m=-Rk76e91jS1{^8_p#&b$L>crSmYIl8U3aHOdQH7-JA~al~RQpo$%& zfYL*WQ4B-R9hZzLDFaN+W)?G=2|36_rrFJo0#L0SZ49Jf1u0tbjd^TjKC_wA9A-3wd1n?O11UzqqfP&?BFh6Hg_buV=bDUxMrB^w zknf4$5nhyxE-g)t@-m{0xXnH30UR8)JJKB02{X5YBND*3JCBH}ixhoK<6@Ol$k}E( z6WETCg_*h>-nsI`;k$&i^9qAgu6f0BiEyh zRHncpd)eZ1$;P(bz2gnQu?K>ZmcR)LDuf-h zUY+(;L-_QRSU5;`+6hsDlbeRn8sD(pe*upFA ze2Pe9;?JoFbe|J_=tdVh(u1yai?pI0V_-!qDiY;UNO=J4XoW>2VT*dW(CJE_;*!>= zMU9ls*?2plrRoNOW?E^}CZ^0AvE(m&Ri-Hivr@#HqOD}N2fST9B&cNtn)SA~R_;Ak zuAp=HS-ID~@()D4D(NdPRzkP~yDOi7b#w8${R%Kex;@1lw#>#}zyCecM9xM5p(##1{RuX-h zakKi=_a^p_LKLWIA8hN3a%Wsp4~}u973}|r!X|9d5-HS!6yZ0TUEcD~c=ouRW9bY2 zOHO}w8g$7IMJPM*nE&+?K@s5p*`F0fpMH=6-qeFd*n&vdf)tEFE7U}n)dG!30R#@< zlI<8+9NBh7ND>HBOw5L*T?7;`#+d9&r)bm3>+MG z3LMVKcaVo-)J-6Q6&rclE=``|EZgE7(qSZ?dIi$s5gy{r3a-?b9>Lc@j!J5X7k60- zIMzXDJRv=s0~QMIHVVt`Q;WI?&S9!WmLP{`hR*bD8cWM;Wx#o$E3 zu$G*RktrcTO^{=ZmE?;}jEw*BTC!PMo~2s0C0nYQo7IdKkb*7X z*#Oi+X|%#9L;)*|0W3zr7F1xDg$-IZrQT!-f}u@B(4I@gpyWkb>Hz^_-4%jBT6hQq zY|x#AK!jopgbJodfo&wU>>Wnb)O9gV~@?oAW4-z#)%y4$$>b z7=Ad2U2z`gO;+`ooAm#H2VfzFu|-M*9FJY)Prmh=@z76WVHWe)C-lIlLzE}~^r!yd z=l;kDC@M+=%?Uk08^t}Ff=Uo5GEjqtP{oOygnrzFei6xm#tbc4(-BE3iid@0-2~c0 zDYC*Sq?R`BP)HPA(y8dz9bJpAsEe|wjK=6)fDkKgf;A2bE094Fz?m|Jge_=7D`xWrSO{K!{BIPTc)flbXQ7n(x}@ZW-Cj!K5{Fp~ry7KMo~dwF#O}ld5@3w*>13oTqU~8~ zP`aV15+yZ((?dbiH&GR})apdls;*|APdHzWc~uldSx6wk7L1=wA^|D11Nzy5$mtkF z3Df~bs{z(uK~bx<^53*_;QsxEv|_8bZma&yAM>q?dOn#3o`fw(LQ&MhUy`|J3k4_c&|pQD=8oiJ zTzC!=f{svW4(B)_QXM2~=0+5LEaY8mQZ-V^+S;bfBSu8kIxU+yeWYL&Xls>;8f7F! zCa1}X;70$bA+@Ddeu4+|#Gyne$Q#P%U8O`O*pv1&y%Qce-H8hKMt1%Vc`e0hO-Gjs(3tj7DY9x_YQXJB) z;1?IN7oG~FtPvirD2MUN*W}D8Lf)yUkk@kF5s1JYt$b9EJV^CAnwB7HMnVRH=}t$g zPTl`hgh+zqsY)s_siZ{s5_sHFrUIt@a4ItO%WV+O56xPFR%l&Fb6aava zAi)qLM3-s?VtI)($uNWfpJxuLC!L@XXG@x{&mXBK7_ZvKx+ZJZ3K=WGY)WBMg)!(T z!2~3dv7lx~SV*Y_mgkAo>6nI0%&x}Bq#ws4OWm#)1f{>!*K0Vjf-_ zEK4H7^`U?^$9hLkB((p?-m01^ zw1kB5#Zv7VL`-0AOpZiL=HyL3M2Z;jPr{*EUFuWwH<_h5i8zSM9KlpR*Fi` zOhvOuKs%7ak8I_x>Z-5i%wc@BmYl^;tY2EWSphDvwu);+09Zh$ztJ^P=Jf>cb-eO* z0Dd4|`?X&8b%;ol0&-tkQB=_|Ft^s9UxT$uXG*^IYZ+-v1o_Ms;F}bL6c8|saCV8i zj1j}K2TGq(JeD9tPOMWL70JG4BhAzg>M?dKp#lix5~x?kc5D!Y>{9i1bBr3uCX#K8 z#)Yt~MdrmQtxAYoYV7_oXON+(EUrq_2j1{U*20L;0ChHb`avb!~rY z?PVuLrj7SPVVjCfqStcmzdhm|!e=SNw<`xoIwOhP1>@X8Acky#J&Z(FZfFt=xaP8g zfp1*|Ok?`lLuM;uEwDpqrR|fjttFyeqWIz{D(){PE-_*whle=f0`72WxQC0l;cByR zIT7Q2u5K*})vh&p^ox$<^GLzY$K(fWXu%U-#D7?+X88<<$Ye*@ZZI)h?m9QWR7gHP z2JQu(^R!w z%Q_3Ia0}zQuHQPZuduIkO|9oTFadGk5Jp^h=D&ikW`ssoyw79!S11LJNAz$Px(8tL zxLg#LNEnVkJ@;W0M&k65MFV3y*HP$JGVXCzrEVKbBdxU+zSzstkB`;i0CCi@;Kz9l1A=S1YecY zIm$1kQHVqEdsFP|m=FYOz^C(=kQPy1NK1%oHF98D5;asd{m~^1{0# zMV=tZY3Rg}=!AQcFI$^}1%il5mK<2^0?ATwV4*iq$4mMAB>Tq#h>!I~y-j+FAUWXqI02?9;B zlVMS#Eo(*)2!td0=)wV34RTFc6eCun2>=MxS~SRj015^u z2qIU(+qrh@(#0zTZr{6ol?e2!fbU-=bmzvMyI8?t#zBpf7x!IU_jBvNB}AzneLM0kl6)VRMBVuK;!!00_Ps@Ya__&{`wkzS{`2X{2Y}a} zJPPzE5uh^^}aR#-uhlvWH( zfRqqh*~G+FlGu<80~3ryftM6$;sm1NS% zCLI(qNhYO?63Qp3yzg?5nIx`Ci9>2OOf?JaaY9S<|ifSM!*h?1K zWtDA~*=L>a4lm$l$NzoXWGM#J=h&jQBi?saa{el~&qv z#Y!rwbS=9mx_kB0Zp{h`Le&A9DpWJ72F)|ox${0~tyKkz`zRz_uX8Mc{`3*iRvUro+)L zf!9R1;lIlkdE}p~Hk1COFfaOklLL^x-?KG7xh=F$o_KPp6OcRY^Ap}&;n(A?KIz7T zF1qsfz0NvGva3xY=k{B_IP1}KKRtz1MI!?}1U68K(tk*zlqg7I44WXsD87{-EsSCe znn>0F9yowa2!srzc%T$4I1~u~4rLP+e2%IJlAshGOoazp;R{{JlG!QHL140B4RJ_A z9VU>6H{78Qdzix@{!oZOG-45vNJJ$Lk%>oKq7$2##3(*dics`Yux7);JE@L~t-DH` zAkf9xAW$u)0Tk_K=NhB9YENG*V`konM$Nz~D=lJOLPV9vgFMPnm8w*z_83S~EozXK zGGymK1(<`3MpKt+%c&Z&nFOVdj9d!;=JhUN0#jba+$F&9HJxvvW0F96DT|Z8d0AVl%gWxCp^pfvYzP4 zomMhP+Rk>BOkQ%0@!TXw>q)zmenm}byG-Ub*Er5KCNOky9A0p$m%iYIkvDCO;^4A` zw=ilhf)j{gD3esov`KYzj2#k6qbHMchNG?dVr&XXq$EILIaZNEB($Ij`4~rgy>U-_ z%!-^SL?R1VPzdz;1J>a=Q-AZh-dXR{%;b=VJj0O>cxp0N^{wwd+nP?i?Bk!e`sX^? z(!zEmkk$U6hd6`(Jx`4=d%FdBlvQFn(BHC{S<%{Pw57F?eKuhkaduV7+ut4uxIQ*2RGtE)9u0Y^Kc-hyn_@4g6e%f1^|4e88O@CVE@J z1jyW9jEvM)YNMogf$%H;PM4HdkuGEGq68&OKnaS&R7?jmna9|a(E|XgOl9im$<0@A zmB!q8HTM_DU_`nYc^eN?N4h?x(UMeUZmw82YQ7z%AP8*dTOknvC`2y;-`gJYG!ee@ z**ce!=uZ}?Md3(5&pFun4gb;;ytB?P*^fn5_niGZz5++r&!(%iE6dD<;IDkU=})_= z^`C8HOR!wIW^E>0ZQZ12dfA5201*_Dc+c+DJ^HpnTc{Ck?pup6Y~jEA9Yb=;dn{$4 z;=!l?m~bmrk>LnmxWgN+@Q536Setpc#37#XAqISs1x7V%=os?Un6cDNJi~Q)x=rm`lZ&-n#;5P(p&BsW;)@{PI!ITI{jU6 zDa~#i4xgvR&pamri{Kzb)R`8Q(ASTQP8o9;oF3#Y1;He3 z(lRSFUuCLA8R?p~NL{s%_JB~>ow(PUR^a$`?f5}!^MGx!Cd+;Ls(Ao}-FBm|oNd~o z2Yl+IJIX_svaPJ%C*AbJu+$^hq<|}EL@F4ovKWv)+-Kc35MV~DAts5mHtV-uZ@P9& zB~;L~WH1JA1O;;hD^|-$Tx+*>a7%bgxPY*?V9N)0OSX#32t6xCHlY^&p$Y$?9Z-V> zi%?8*>jBx}L7h^`DfDC7PEX%IU%b;-@xhxv3ks76uX12fy zo6sNrp&qtiD6sJwt5IvfEXKqp&NPb5)Q=tQjH%X-DGK5#XhZ$T#vKuYSKek$%1S_L^8Yk|I8;nJ)Q2l_M%KP*I`k?85s*CCjQ~p!fYK!2 zU<2MzFpDnAqJ-#2c8ufT(%<4z;5e>Lf{%vSGB1ho_3EuJ`SLII(k}xOF!ypW4YM#2 zQ!w`ug<51G{^1v#5Hg<-FN4S+DD#Fab1yFwhceTN`Yns(&k@&%li;XDK=RI#t~Fp~ zb&h+^ zQ!(#Iahcw(mdKMRU+^n#qU~0(UK$KvHmqC5g#a7RfNUo4qDek1Di-&0@f@`AAoM}+ zEv1@~CdSG?vSV8`l(9IJUpn+dH#9^UYbZdpL`C#OO*BPObVXq-L`hUbUvxxSbSKEb z9=P!zys-(ba;$iiUvy?S#Bn!%bV!BNM~!r>#Ia^#V(~OeBJ_;app(zEux?bN{m8=i zD6cAXumv$=I4Q-@1Z^~yAX3H@y)uO_+z{sKi!#b|0Hy%{R3;!UhHBs+u#BIwCfkqUHFeL7EdT_)E1qbyG7#E4%_#T6IG_{ZiQ-k-Ww5oPy zrPzc>q@WE-p$*EQ4UqL%i?vu=fmqw1S(&vB$iP{bm0GP8S(|lQv(;If6KS;YM$C3&u`G1$IUS z7Pq7%s}^K6dsR>iOb|z|b)G^Ex$9E_wI_tGQ9tMZZvq1&I*0k%!b=gYa2lgj4kHOT z$5h1YII-{0{!q~rAW2>xjHA!h7ccfO@Mr=BRbo7iV>g+n#=1KSF z&8R}uN{wk%({9@F5K+g?me&0sLeHdAZ4#hrfuNp(HZ4Cg9jTK?0(Jeqb~d8c9mx!h zy0$ocF=4V%8sU~4zy|)dZv_`{{g!b5)&&Z8a0S^avL{u4;OPEmvce)aw%7ILl<-ZwhivUU%T-i+9xP6%s>-! z@M1TeUbJ?x<|1f@b_${%#TFiqLeHW!5vlb5A6>6k`YR;+>>o{o&Fl;xftGm%A}u;2 zE%-4W0jKF?2fz~LsgRZt#isqlB6>4|DgYoz-fzzu(RiCKQBN+CyznecihYw8cIt#r zbkB@x=Vw!MdFwaTSo2MwGr5k=H1W%g@`P6u)*=?RPMw4x?!d6%E1uw3GC+>nZ z?uOC{;qs#e+Q5TB_=DTP1w@#HJ=lar_=G>W3{04XSD1tcpanvhgk7KoOt=IF;Dc@W zg9pHbTOfx+ScQdnhljX@QP_xe_=uC3hi@2(g?NNZ_=Tgm1zeblow$mtxQC^<1l*tr zCG#=65jFO6jF085_H!U=CSRb#qQ*G?-NfxV4sL>1h-^LeEM(JtakdLnvQMSz49$>% z+mAJYU{#a%ed~8ML?=3C6Z&q1vc133a5>|kfcv)F^t0J;$86u!_>4c9#+!mcmub^76 z1&P@sYIdN8S)N)?nR$$vU2g-qLIM;(0wiDptht)A*_yezo3FW=!P%N80G!7eo6C8d zzxkZSSpmwKoxhozwRxPW`JCl>o7wrE>sg+|Ii2~Lp2PW{%^9D``Jd-mpbMIs5!#*C zd7%fI18h`vZJ~HwFYeZ}L8nyznK4@N6oQV<1|yu-YzhoI5#VQi7ZK~MI!&Yfju#-c z@N7CMA%+i^i?-ts0{Cj>C_uR(1|?YN>}mrTdv94a_}Gr|Sk?Zwl2@fsqccjm@Ow#f z)U0%3{mWH3N~t}qQr#%3tqQxwuxu+fZE7cNP6I|1#0rfhNvfm=cf?1okP3TnN{CQC za?sv_7dEKC%!IS_q)Xabt72qG`q3iFP!Usuu&b)EQIdca)mPj1lI%o*uXCk?x?v0Z zyC5}?zfk3HXEvo;yC&BE9>-T|f%<^^i)X#4bZ+9N&0=jKB4?WJRp1PlaWIzESLNP} zf7kCGbJio7+irT=C{`JDu*uELyH`eAcJSsj)ekI!xybIe9Ob)i$5AJ2;u&+ImQNFQ zlg1!;CN(N7s&nEeSb}Muk-#m2$n*&*dIGvdIcN}EClD{j*7%`u^dCln^`P+up&P&H z`@hd|l+n9va3hbgBE8jjzeN(eZ<@BZySqNkq&@k$-R!%i+oOoKDAIy@ZJDi8XQUyx z)PB!8N1SJOg@GR=$4S{xP}{Iqd#iVwx(1uoSQX08XsG3=sX0rz^d{9X*$j7DVvE|8 zcNMsCmbJ5jlIb`9P>MoeE+XGBF3v4DgE3gnIWys8qd&fcjN0;mx`fYn$oM>a(CM1c z^_;DL2+%9ShFq>G;1M(3t1yUk|1ltTO@<` zfgkp^jbfx?8;yK(Ee z-Myo-l=dudVb^%v;eFomy~1?npB$?2gf!j@FTooezwaBG>rKHCWx)vuBoN*+5`Li+ zl!Da>i!#*zzGrXYwYp{ne)f#7_B0}+rVb&Z>Li!F+1DB?&R3DST72jI_7r$ZcegO7 zUCcH+F;kdv+F+X z;~K8T9!Pu~2RWMxrEs{ib<%&xv;U5zUT#e=*OI57dY$l z_{pT8*PoB8Y8 z!O79Xy+3RC4E(=e%WxORj$CY=R~$hf$a_5J-H63a{(ybtI2g5E zm=C%^EvkuS_C1{i+5t6JGn6_Zt0dwaHlq(Y<-o145*7XaR?_a@z`w~u@7H;9eeH9b` zp2_zv-NXeU!;KupazeX>C3D6cxwB}wnJ*hQ&A4u9)q+=#K5f@^M%l0z+qRtgcI~}x z*|HsJ@}N)TRC)X*LEd`A zNi;x%2X+-jg#j)_p+!Kp)*@@!jFwUBEVj)?%dNNIcI#}l z+g@8Py33x+?zif`>+QPD%1bZ2IK^vkxbs@1-oE3SOD?#?{uXPVSjCs8sxm#bQlRlA z0IYw&L7ZyEHMz>`a|hGpDSQE*#L|KugXwFjevV`nM+c>BVS6=Ih=2tD2dR8#eO3W6 z(~aJF=w3&p62;baWA5p4uMu|IThEqi6`@t_-CPn#J9SiaNHo7pT}UJLcA|(v1vvoN zU=N^4E$!GsiWYPZD-bI)ZbHfcTeuzenqhCKv)DL^{dM19=I!_0B!9>EriRyjc;SMJ zh>+rr2mW~CkWVgo<%nM%Ip&mWet1H9Tb_C7n~N^_S|<)WCRZ8pjCFrj=i0hR9TvK} z%r(hHaDx>=Ew!W;X~-9ZgWp+ngDa0WCDbVQdY{vGHaOviCDH8s@=tfvolRnGn3T!d z%i5g7(&v@EWZ7?=UCB_DS0Q`BUN@wA$_ZEg&H$qN>samg9D7RtNuZ?`->~U7xyeY` zMxg~wu%aC#f>^OiR1dYaB5rc?UqK+|qJGWhF}vwt0X_Jv5OVN?BorYCM`*$lqHu*L zY+-I3x7~sxk)RIbX6Ofg(M?UDV9u}aNwB%iAtCH1T!Es7 z(4$X@*#|3H7?{55rJg9Xq8_B!gxcuRNhyHRk@eVuMoAHYP1GU@8`Z)iM{$x`Xkq~M zXvIlIYSRZ^lw1IlLTThRu66-TUqlU2k&MMWyUp6aitVpOV1rK%mRr66%m zwW$I7%>%nw%~&D9p8*AvPrxeC^?3(a4jXH(0BRQhj*x||=rdTKz$(x{!4Ej0>d4iU z^+nhD(r0(6p2eio&WhmgPmE30(R%h3=OFYs;|B~ z9>HR?HPa=naidew7D!=>cCcaqWME*4+ChpW*utlzAO#Y}(2fX@f)yAUMJsfxi4G0- zk*&~#PXpLBi;>Q2mRkzoKnFS2Dk*W=<(zk~``y-Jcf8>x?{v>A-twv!z2@E0>AIGf zs$uG|GU3@*?CZ-X9feXr%&PQ?rr1hdBni;FSb&dbyha%|cZK>?e4mFBs3q92$CFxx z;ZmP)UQc&aW2}XXIK-)JQN;hLXFyFX(JA8pRfqwqRdkAy5yi@Nhx-y)fahl&t@IZ= zR#6cG_8KdOod+pXY!zBCC_qA*Z~&5+QChT6(ow|LY^~UY1R}^%lcyfKEEMrSLzxvM^Ei355p324m~73hStCv;a|@pv=A{?gpat= z=2aclA3gb3(t;sifD<(rMzQl zOnk5M-poAGz4<-ZekYTT$UG*&4<2n|YWhmRbaXT6oy&X|oJ`WhtT`(}T0E7<*jb~_ zU$IKYYihP62_E&v8-j6k0(<5Bw9CkYEl(Y}xWU}yI6FxKP;3Tq;oQM0n(*1;Nhi@I z7>jfhP0go31vad?^0dZ%E$OINRHt68>bf2&TTU`iquA!;jA}aOl5Tl|ZK-VnHi0%W z*u$o+XvY`^(28zbG+j{Dmb;uv_oM2at3k~>w`OhCy9*v*Q!Tu`3=h?M`FE-K0z6Rn ze$=XK3PfgI>r!GI>quLgi31V;s9l31YPAY6=OPpRy%;v)NiTGwOpl7IYBh81h^N$< zVwr|Xt`TMb+CS}-UKsH-yUg<`*MxMMXBTzr-79}lyhF*zmz@L*Rj5pXj)3y~h@xFpj}<$VmvEyNdapAmn$k`H5Jx6=66$eZ zLqbjkCN&Q-Vap+5#KVFWcqh|D7b93&5Vkxis5-ZIeH`aJ#s@z^BSrjlJ|w0+K}cU# zdw-ydW8+c}CxZxLbXd5t;8ni(d$f6*PlxKlhhl5Cmg{WtO$Qa6! z7%F5#m3A>`g>>apWU1#nM)xsLCxsz%DX51qMaDXows{K&g%+49qevXxp@mGidR?(b zmnTMoWp9JiFYnY?SyOKsM}gHeBNEUX5|JZw1ai5TY}w=&1cVYe=!@~Mmd(^;T~=B98L5PBoD?)X|Os2anDq zkKnjV2uE+)C~@}xh>sJ8Ob!=u02gg3qBFNh9XmpesWc`DHd(pYdVv;S!S{3*($so#a4ZSP^>pK zqF0lmbt~X=9v#CK3-MzPQ6H<k&sgxE?ohJRip>4ho8-n3x^Yg;5A} z_MsGKH9loUE0UO1Jyu0wfr=3s6)po2ND!3x;USwRn93o9rT2^i0YF zsAh5hc6MfSNgFi=lHd#NPz&{73vN>p_Hd_8%*@s)isH+E-;h`6L} z%BF8xhrIzY5+DUG-~u+_26l?4E+C(7AQ2=aK)yj=vQiyd=xbRd62jsUtkRPmcWFdc zim8VsG)jp~G>JVYbXkF+l*ffibcKLNgr+AQLXm1BL0Q7rVVjwO77}`mgK{tCekDUEnow8dZ%q*0~@db1{(#tc8?X;JKe-`nRO9w(To?j zY$dmR^finetAU=^AS&~LjYVK(6cou9bH6jFgTjm~`yaZ4JNpT9cVTl!M4G2MtWg(} zmM5x4w{xS~vXE$rxk?m}h*0$tEGk+uNsE{TMHE;`ENe+siwBoc>3G2ia$#8zc87Qf zk#1L^3A+U`XXmYCP!A4NZZIVj69h3*fNd2KN$t=Il0ZshN+Q4|rBP4|_P`2NM|fq) zR8(ttS<9ABNw`|uE`1lcK^3SH5CwdCu#!sx2~ejlAQ62B8BA%jN^5eQhpCAFMlm%h zn3wiXKU*DcRe7ayL7Mj}gla2AH<;LAnO-QnWwa24vYETG{Lw( z$q{JDJF7giJHvQ9SW{pZ8a1h;ajFAj&ubyltG&GfoTr1H<(Z!52|5Glc?L*sYvG20 zgsti4tpHR~9yzXlOJ!_9W{$*3Nf1&uRS#p31Y0l)Qm|z}BEH~Dz~WiJ07$;!OM<8q zeFp0SH(;=3AOQ)`26y@!k0XI~bBo4P5PCIV{kgrPQnF6t!L1W0r`3YM_Z|nLyA4KR zT2Wv#ScxTzz0vD@wfSEuOcaBZ!WU+wGx)+RgM?S{h$QxDwt^}%d0?ym%cw>#$g6#-`^1-mr{Tv`ui z!@rfGQLLbyz{N=B_O{rDWeG60=vEKkcdhLJEqGYQZc4_BTtY}%#(_Gg1Hh*)ps;>A z0430;e=0(an1#zxY5Z|$S7c~UtP?Uy#SMe1tpXIK%S2DOSQFEtuxwDWA|BHhnShC@ zoED^GWKEM|q#gp13sWd3dogwtC?aS^v`3I7IlS@KyC8yjJlkt9I~TOL6al)9d=eu! z%P-T2N&&f#_Gqv1c#qABjn7mOjx^2*XRZAkK^O^K+UiK^yj`vTKnC#4K&`;Pj${jC z+imQ2tx`s&TSm^18FloiZ{p0a4;Rk;dVwanAYCHS{RmCIT5%100}>zsWxxRdKn4hF z0}oqp10=C32t#?o!8R0G!sf|=lAw@f%pEIo6$>fzq!z5aGqvM_Cj1-L{J|@?kao1I zEsC_~6uYR*FFJQkP#ac=s=8e&!AN$1@xn6`(n4R#A~8V<@qlygJxn1oKxPMywgaU!P)q z%FUbl8N>W(Aq+{gv&6A195&jwP6o`~S`s9VMt}z>z~jY9?zRP7+6q*b8E6-Qn8OP4 z+Ya`STvAXArWChZ5J{|13zLL46BIV~KtVM!z}>CD2VCHh!!`sAU2c&81v{T@002_p zzz1ssA88hRgP+s1kfdp`ya^m1t6-dI(kfTmdSO_*?c6Xs;xKHZ%BPVWg2KstJ*lZ3 zAd7nvn!L`Fi_Pbtl2yVa20zEUqg~vny*v=CGh?Cu>&aOad#m_@zS5V0xv0!hygea` zHgT!*@>rinKc8x%owyWWj6-6q$c-#5h|I`pGa zekd6E5zBo?`z6D~tl~9W zv!{H0!hK)Cj468cj1*F9Y9UV}Td_Cey!H{r2hx_Z#rfPQ}@?UZSt=9Z@dYsvKIYDD+Fg z5tEnNhT27nN<~ihR@$8Df~6rDBug{@9yR#k@(v-Zz54k$gN3bH?slS}wb(SK2}hD5 zJkl%8BnZT;nexCkvo)?X$tmEyzbM`7s|2oIt>6#;VEo6A{K>y|BjRpd6W-pnAi^*G z13tjtJN*Yv{n+1L0Z|NEWcZLG!~qEm ziX4!HWW*_1DzxfVo-2I3i|}E@gGsrCYuB;f$9*IJgLf*B#$m_YL%)<_fDmA#U8r;RD&-G+S~}zCXfjB%MJn1sLKwf zDEPZ?!J6h;>ZT}uI%qDN9-I)ng+KzJz>SiNt|bPa(=fmg6*@}_3+s~tMHJt1F{7R2 zQj4}3*K_bj7)u&plz#;OOYBF)q%g|GxNP-Id{wWvf=iYUn| z2+Nze6m6&{4SF(0Et@2hNg18A(M%<4M03qFV`S+!9M#lO&NoYvQ7$^!9Kg#xEesS# zB8ikj!iGEy(I_kxEpa>KM4Jvm04O4;Qka$k=}`y~y-A>>`~#8G%t{0)!{xFA(7>Az zMdHNy?gOnnQt`_#L{e<9fZx*aeYY&_Z5`LeVH_OHFRtp{TVl z($LN#14zOQOUy7^qyP)ru&k9g7-D}+WF*_;RN0ZS zOEFkoGj{pWULCbmQ4cZV$f27ndeuOLIJ~Z+2@`tqRR$+jX~Ul{nhLa2D}pG@164(@ zqWM_GSf-?bc3SIFvm=_N7DGj9>@C9%dm}2--bw8(*LJ&YxJfze7b&*Tf((29X=Mv6 zdGzrgdrC6Yxdq=X!Q8|+NDU%1_FQHt;zqP@qUix165W9QN)~Qk2O8zp(O)31T zQ%oA!`JY=eIt0W-0_y4-d%i*}1hT~~cx7KOmHA_-gAgakH$ zn8g66HV>p031t(S&3FcduWJ*OE<>3P*(Nq7q#*=rI71ue5QjTl(q;&l!WjZ5TH?tG zO9&Xlrhuw{2c*bY9yF=3e9C_xDh}_k!z*H8ZG6W%T~&;7u`+SYf9@k=%BHxKSzR$v z=zC82{&POg2*^a9vJcT3k|qi51PQHU<8w%)u|IZ?DEiYLAIXyt<&lkRf&|fTjFLzs zBmqceBz;LtrU=9T zS5xP;u!%+Ws1SRqQfbPsn#wGzSmo+fXX;e0LM(>t?reSHf;|yNe~|);2D0 zWeGqrdD@bsvv8>`31>HJUgTkIXy-);^r)uD=2bF!>D^uMZ03>a97=0ALnL1Ru(!sX z@od0b+aqU{hAN0~=)kZmNbu}iv>R{Ln%RRc^WMHO9JAj@!v3c_0fv zg*4Pk`~8r5>odtNZL(0@3}>76)aq<*gtvnUsy*ap>rs$l)`QX0Ex9@WO+t+_wk>4l zH{JAWYYvLl$rg68olR^})(O_erZzK`{c2}s``Fl487P&#O>T4B*x|lqZLQW7Pylr%at#rzR5dHZ2Cyw|#hlj?faz7e z%G9csbz)F$`Ob}+^PUI&tVg{$&~3hQs|sD|Iu9(=!+4q5&G0*4kvp^s zO4n6V=jV96MD6KScuLMf8PepL$?V+BXY!V#hax|aD&6k&e9yYjQZ@mOBc)}d!sIOWUN;aok(IOM{aOk)m5r@_! zTR%%j^UeN~4rgO;XQC5t{1dQixEy;6CgU;#oD3;whq?I?Z$S)S5E6AMk}f+yEvvu@ z+%gQbKnlD-4a`6eEDZ_t4f+7N`T)C(13)6`iL--_D#D5X2gxTAWV@<6vF&I-w!@F= zFh7=gJKbpx!h#O&=ri{~6pOlvBGe2b9Eb#=5MYTYbGfMXxf-=&BojHj)w+{(W3NcU zH+T{#lt7&N=pF96q$@1Ll%OqDD-s%6LoflhW~!0_&;nAhg}kXlz_~*^tixCW6k@Uy zZ0aU=i?$AfibQg9#8`VRa#AL5B1Ax3!(vlJXoC@R z60rL#Fx8?$-qRjJ5}wxCLW!_1?VG}Y5)XIklk>{EDg-_v;fO*KlMHbbR1}rZ*a`SD z#rldqGekRwlR*!A8H`H{y;38>vbq~wJBGt17Lzmo^mxV(yNNWqD7(9)AndEOTZ@_t z3!Y=TuR_PnARu-+i*|IXA40mPBf6z?xp}3j5i=Wv%;FIjnX%eD?gX9#$sc+NnLvS-s^t zv!t9IrF^}pj6JEWN~*j{+ndVUv&yV2oy;S>?wgKB;zBYUo6<_2>^ZM4$|S2{OG~ky zov@h_5lftmu(KpEswE z?Jx@V6Djj^Mg$tc=lD2+GfWHd5cWVLTkMV~A~VxOOqrMyw&=A2^uQjok9hpR4V+Ea ztj!L*P1&@~+{8`4a3R`cAOh4eSRApk7_;TGGbvOetkK42gux6$76jNy3_-@nG!N!b zj$~mUlLbI9mN6`EG{Sf*mj;0}sdx!t#15L^qg9-%aUzOO6S#yUv667H zn_R{+yEo$0jIiJ*vRn{^vXn#`uLwZHa`U8JA~#pl#1KI^HdH-Vlf?Oil3r_}W%4#n zG(-n2#0<@m9n-e^xHds?!)klbVEaV>PFzuB3&b9x#7!g<2CdN--NbM*CyfwLh`gkI z3a4RwND>jlDA=dtd`JWSQVJ=ux%W zJ8E>sQld@}(^53OOp^J??8FHa+)^Y#fFxjxFN&#t>_>i7syoFwNo%^U`pjUoG4veB zgRvI$iy_c7R7B-dp2JgvggSi$I!DFFJcZPE5ft9QizwLC-QZNSDwnj%zmMtBE)@=| zyDKg=F)zK$rdTYp<4`2qi48oSOd33TivM8>6-3UB z#Ll`pmhzZIhVYm#daETmKT=^8lCrBSvP{aX(wzm`Q~k3!Gl(1`msi_Or~S>?;EYY3 zKLWgq1zMnV+0?2Hle`d#&43SW5)*aNS{cDr#)uZQ+6^gai{qHkxxm#lawK=rO{lF~ zx}}Q{q>B}qi?vnTC|Fzn2NI$)wHj%pG5Rn;>^#l!)VQ{jF_kKo!rhp#%Q|XA+!u?F zE~>~Vs!r}i&d&W@{2@OC+g0*3&jm3ga2f;XZHHEHmL#A#Px3YLEv8YJUTSh) z67A3sjivy8#Q!}+2-P+kc`4e!lfUiIP`uH~2vGtJ-b9hx1wo`Yx+J0@)o|K9mUI{Oq3ppzIL-8z|pxwcZ`lhGjR4%g8ZO(<&Xi$DPI!OfgfH&mJz_7`$9S zOAn~9j_72_s?&m~8`PwW)PFokd$h&6qhdyVx%91@dKkSgi-1wkplBh3dhk~%kc4MR zt8yG7QW(9r7?+}o0O?&3+TySD`r;&D1yW!aEvSbvkOVDYhgyh0rcL8=1d9aNgjxtX zmIKJ9D%2?UIZB->hY`&(M%#Aj+bQOZnrk~F);skh)lmgP_0TiFN)6WczH9!;=TkR|iW=&RukMoxARvkBNfS%UFTtb@Ugnz7TBH)bMQe5Dl-0#t4j#O$ zo}8Y^6+T&p&_>BL%pv}n&doF({$Vuxn6uC`CR$agaH60%tp54Cv8l5%^Rp_N>v1%X z(-}bj5wcs}3|#P>&k2>=2HxXVa3ygmE_+bllNO0s8j=AR19ooTk(Pp1AhJye7cKCI zF^B@newKm|XO^gkEs%tHrV=&9K!<49$Jt9l}`PJ4%=IP9cm{1hltzgL#@E4B4ecF)W)!z*T z(Peu>|8eU?4gFr0l?k#SA;rb~7Y9%B02GaL9aJFWo2osZW*_o9RHfM@gtNk-!8u zvsArVER?ht6vvn)VvU5^vyR-3{3{j9&bXf3SEjhJ_MI1`(@oyfNLEKk?kWc2FH1(N z{}Bs|EdcLuX@z>2=XpL0hK36=7^?Z(jpN4S8sFoRkbp5Z$2CrZ#2%M+NUx%32Qq*U zqk!$V*n-)%V>~_yz8M!uD0gs=09Meo=+*Xx_9^;(_jfmmcW(B7xf9TARCAnoCK+0C zf%mj6Dri^aC%#k&k%WoCB? zO6<2dZqGL*nmZGSw32M9nn~V*C^ffJlI3z<>khZT5+y8=Pnt|wawW-@C>0XC$T4HZ|AR7bw%k&$ z6{%MB$PCa@kJP4Gqy}iRMG9mRGVLBBwKZx?J71c#*po6qiajkN2aK|{NlLp`qj*A$ z(hev=gF;!2s#Pz-*#T$^Zf$4OXDfpC%(iM5AxbNDV_LP6LKg5+NlHoCtHp7mOO+lo zUd9RY>t&5JH+qJN`Q+$|NkE?-eGnx})|FdZ#u!?P?8>xVe@uPRG}MJqA7W-W5TQee z0(&RSSiE@f-wYEz1me8-Lx<3vLp_dtJM`q*69l*Z-1+tA)-jjg-1c`yARQrMPac1H zTk7h6)4$IUfph-9{SSb^dn3i9kbT=l0U$*Ffku#m?>&ee5()MO|5|?fK{en*8g4g$ zbnH3T977)hMY;k22M{Pt(6tzh) zRYX;K1?4ETov0-#aSpIWms()?B$aTDxm8zII=Ln(Yz6h@CNN1sl%GeI_S=(5V$|TJ zB0bqDXPH9jX{M)1Nh+pA)<$WNNE!(wXA;q-RjfEhkz`vJo11B%}jF29YO3dR2vC}5qK0S zRPRCH3B4Z8Aj_;W%u1h}q0P?e9J9*)>MU}}S6BVC#KWg zzRfPezma$>gNQSpR(0NjPLOonUU(sP;R%o}$N-G6Vr z6s$BCJoKAE&%OKOzh6H2%d~l0|NQ#%4?m9k>necLN}cEkh_G%IuzYq>XTNqZ#LDM>2ZGAeyR_kTg}t zHv;mHf~2Dy14+k2-jOnI0*NBcs2frNO^O7v&Ty_n$t^OmL)JQ67mGMJv`I)b>xrbc z0+z%CwrpbB5*ih~qp$T4usfB^Aw+PN#CiGVmA`U`+fuhl3=Qxg62MFr2f`m?HH1Q+ zvz9T1W5F3|#39Y$Pk4fPJ9tqic$s8R%BIszd*SYap)BCrJn0`&CP4x>0^W{3B~Dhs zlUMM3XW#6l%_!XpUiaK5Jy-S4z~S>#d}PuXp=2rN%+sF=MHNE(xig3Q$e{%#(jF=5 zsxbmIp{UAeo<@}^>Xd12_(4%U&jv*c|6!?U<_+oo9oA{7PYG-t*v@}TGL+USEvEDuOXxBVC%|P z!e&i~69jBx@#@&WlI^gD{cF-9YgxkPRjzm4EXQhcF{!=CK>@0q+Hm@usrn6;KO_$* zFD=Oz0GpIVptq_IY zblrqZgj4EhsF%ovAnuaT9Q)jm|A44%myvuIJ`MU$e*IG~{Hm9|_HNI;?vrnN0m$C_ z+Bd)4d&qkATi^Zy_`d?iZ-5C*yx$4%GoJM1f$qmbCT7v4Y!$ACVl>0~#4_Y=>Krn_@TSn3!+9}L$@yGq+W1%AahSuzW3?bQHHQ>Q z&k&=STfT{PuWeb_zF=z~gnZ~a7Pe&24g}Q(j}jIBm=8pFy7ovV_SynVxNQ!}Sp zv3}>zuyk^8xeOdq`f7@-|0SXlgLGtQw#&9N?I{HP^WA4g4AZ2x3DZQY;bx{!saFi^ zf;ED`8b46cpZjp%!bxJx#Vkb<^sar@dEQM$bfHK3r?OqO?1Mu4q0vsZw5v_+YdbsJ z`ScM-o4sv=TAPomnpdl~?QC#Ao1xw=H@j0M?spSORpB-_z1y8DP$iXu4-RY-3uMi8 z?JnP(X^wk<-LG`5_H*umbp!x38fyB8bfpYYP}Q|fUYXc{APg&ifN;-T6V@cO)sLXP++h%3A%hOh@e0ZDzK(K2>l*Kf!3hTw!)M7B`&)VEM& zD?&YsSG;29rVul>F*PnH+PxAo%6rzpPyU@m~%8-wy&AkwKc? zJw$IQUgRB>dUVbcl@qGXn#!FUu5rYZ;hF>0T@*e`CJhxt_!@9o4$T1}HyK>9z?8V0 zm9cpgr?eYHT@<)|9J+~{9S+n*!JEBV)D7+vx#iPD3Dh4JqN!jHArhkOO`EpO;ks#5 zx~1D9=E4BR{}n*#)HVSJ4LO)gc?1`_Sa6Ku8L}cNRuvDOoX*YMmf2mx2p*L|g#}L9-PD~D zzSjQ5AOPYV5B^}1F&RPpoY|1wWEEC9URKjp-PVz#*p=NmmLu3{om`C_Il|-8sN*|^ z9oHe<)kT)qxntJh<2qVhJ(kVI3>n`kV>4{v>+ySOs z&ru)(23F^RP&S!PaV-lOX;S1D$k!tqq-xy+X-knF&St(DNO zz0@y?7wj3;@#Wt2I0^m`rSU0c@iC?FIb~8dB~(7;Qch)53QzK7N%XxAP>NVi-db0N z|BG2gp+PxN={?Z$eF#a}PVF2-ibNs&CBf+#P#K1035lh*fX4iVP+JxW_H7ps@YMRL zPF$vrHF~5V@)%Ynq-wbxL@L&%xg1fU&Zs#gLIP3EEnpBD;7X$6D&8D8M#0atplYaK z9r@eStl$Z%W@)l!OLzn$y+P+Wd18e+2_J4KsIbcMC?fTw-6Jw6C(>cPb>hx!rzK+I zi=L>8{*y=HNM*K8Ez#P8k=AYzBT|hYd)!)cyrM4}qq|_!7YZW->YIn1i*{kqd&niQ zB`JZ3oXYtSbfDE~VMrLM2flcbVW!q%b|*#VVrVI6yvSUU@CVK)WW!jeGfL4keG9F4 zjAvn;J_6)F1|&bWV?G+BID%b=#^Y)BnVpK=M4X+U4eHVaouBS0KsueH66BrgY1j3s zKR#;7Bx*u-(_*rnXr)yYN#hYJq`i=wl3JuiCMOz}X-E3sQUM@hhAJ~j|Dg%3&Uw0s z1;q}u@K#T<$U_X1^@L{$-QRtrq)uiR$bF@Ztj_4g5Q}A4nK+lq&?R|Up|7!I_QR>mH>3J~(No{+LrypoEooQ6ZhYyPyWRuGiAt_GBd zYf(}qf$3gV60CtG-+4J-X|3T~USW=j;!koHO7&KUP041&NQ0#%?%WiS#)!sZi&i^xDJffSc7Dd>s*;2J||d_DK(~H;GNQy$qRM<=g>r1zm+Nl zCWN4Mny(~4l${3*{-#HIrU5z(wn~KKjAkLNrf%YfFz{J7KElpC=#NMtr%6UOUNeH`fY9k?$sI+Ba%7C5&#H(&P@SQphR9|Gy0&F)*5z-hW!zd&lUvay4IK49M7)J07m27QBLbnNOo?l z33=faX;*MqNRRx|RQ0GIiC1{wXX;_AnI1%N$mgkzrG6meuz;0d!rDi`VLM?Ij7p-C zG?a^0+w%4ivo!=Mlm#i&0xO7Uf@R7k^aYk zj>vk%#J*p-s1%ObV$%#M@4kz$t&L6nY!_-#>+gm+v$2wDva)f*usjRW8 z5arE6N@q8Iqusq}bzWyO!YaJrECTFoVvbd)HX#!l@f7h2ZTx8@^`oTrDLY2-Jx;1l zctrw4fl&;ABsh*2bA%>rfg}tDE7XG)R796(0%&|qP&5jW=mgkmgcoZ<#k4V&42H!x z#wJ)y`esD^ZUq@D##MCfn7!{70CLhNsX9*=%YK4=oba9T8j2 z2xr>Dc&e)Y@F-*C7uwuHRuPyovCn zZ!n2XPfSQrB!L;LvpuYF5|~A#q;r=*g|}jJz+!as4D3b!EBTxk@Z4hdDTKd}pU3)| zd*)Qj%HJ|4&=ONWEz^f)|!G{|&-;8BWd3sO{$ni|N#6U_l`gD!&mb z&(;8lg&s{z1hm5#AOt&*ffStcu8;vMB)}%vLj5|17-t0%kbylY1W$m+Mr=W3)I%-s z^8nnnjfe$T&~*gV!%+^vKTnL$3;-#x19&(^1YmEQv;vOQL!8tCLTCd05~`W8wFz47 zakaJ|ec%FHZEV94Zqqj59_xNk#{sskHeyTzt?5|H;&HR7fXRxya^ffgguZ!5*T(zxcGp?xUO)-SyY7g+Qm`y2|rsoVw?#p z*h8Smp{Jb69oCbmg!!3&TxozPnzK1SbxMVZ1g z@y5_gjMBe}R^+kWc1_m5|4G%;h6Hep*L!`|E5;P;`&Nj3*8sY{YXx{nfD#Oojo9th z%RP_KJ>74i9Kn^ywD+@bJ3&ahvje`eU%TKpd*OTg;3GcYn>(s^JK-ZfUfB~Co2_(e||B1jTnruZ;IABXXEfDREiDFAilq9t@ITR?RT`MUgZIK$-P)e&- z16q-iFd)h%TkQmrX*Y2UD}fIOAn^!uXV9NPi54|lbm&o~NRtdmqEQM^o;#x^Wja-( zQ>agmHkJA{E77o4VJ4CC)GXSwRn1D7IB{*1xN8T@l`Cb-NW4liYLP3~?B9%Mi>^%~ zA&FmsSv*E@m?VK&ut_3__388LfFMeQEEu3*rvf3Gl_;5@WPp+>pMz*tphQ8C*q~|4 z4lNt^?AEziPm$gEGwa&3VGBPjJBflMs1pDgfM6$dfeD=lmEJS@&V`NLKsp}5of%T(86Qnu;O<4kOcOLxEa^OhpfohyXGV2cVHX z_<~A^$Cm{1aR3RV5OO5){30)`_R2$QsV0qrPe&)EoYJTWG-;)sTG|=oMoqM2r5!Q` zunEgClGwtYmBz?&ONiAC`bt@OOqses!fL~(}Eo>YcZ*=ELp*F z08+^CN(y_#q>;>awkS&>^OXFFEGm~Q5Y+b2+Q}SjDkanqk1U`o>N2aP9C*` znkcQm^BTLaJ^DIqj{sPhytI*sY_0+P@@udg?>x()y1@d9tWK%q6kJdJp7JNS>)Ht} z|CkbLjLEwns!Az`6w|fWI|qkpqQ$LpNOHTSvYT_f`_}w#qdEtj@2QT`2z9PT_Z;+x zR)1Y})@6Tv_Sw-&9jYka0xYV*1pB=&x9j3difQwLDQ@3=ha0fe5JRkY-RtrwBXA8n znM0@_{s?l^KjU}b;J^?1YN3OeAT`#MNSb}4H?wfI&`Ps#eWTO=SvcEj8+w2RHZ}@6 znCY0v2FS6XJmr5)3tf|%;Hc_wHc9Fb^4FPtE{(sn@X5QRw2|B_3P zm^i2#-N=R^1J%hESVb#dae+{(j}OHc@#-yF;{pwZ80 zP~+60RTE#>yr#l1*ww6p(yE~mj#HHr9$>!nT*L(Cb$nSA=rjvaI`3*#P3@AC+-%0YVUfSWmc2fX%BvhYeT?3+7nDipE6lO3&evnIUws z(X%haVGkX~LruX*w5V0Bi{6QZks$I|uq~3?qVPpmg$zm?wPM~X|LV8gDus$lf@2Ly zMO=h-bXdu~TYVg&*Rmi9T&G2nrlN}#gZ_3?W;B&ho>;?MsVbwsGF7f%imk$0h!Q?#E+`nlQ_T6VkrD5LjwJ4@59bdT2b=wgTIO@HpvYH6No+C!eE zyrj9O5=a0>GSism#mZU?;&RB2Nm6Nwc%=~u#Or2CNX};X zh02!k3#%K<4VQ^V8)^$oe6|^1a+Z^y%^YVo+i90`Y; z3UbD{#-$)<&}1Z!R17Y>|6KBe4zs(+tkOd>311v;|5vw(J8r1_Cd`yOiPAx_xn{c( z@+WGNO7aOgABS#7HacaF2Q2zuo)=ISN^HPELgkMPsmN*#4tfZFWPTBe8n;|4HDCOT ze9HsjFxnQvNI%gwL+N1*uX4#99vFp0SVDWdyn{9v;Oer26?rE?-Wdwh7u5j(EkdP1UxjiOG$CshXGL3eS#2XZrHN*J_iAQcTG&pm z9MhQRJnmCSrZslc@RCzXFc?VOZ$6>rB* z0|I0YY`i&d;V}>crKrL*yzY4*Vn|FwT`0^U1PD^v$v&hYYV2byFoW0tBg8yo0h&VF zgac>IXNd2|t1+Ww_tNUsx`VSL5}cVZsrMD2`z+Z zMo>iDJS4&F<2_2tw$gA$RI7;cibNU=<SE(WB;z^`UHn2-9wSNkZuzXpD}qba zMhduUg;Nu>xI3-6kNtkwMMb4!%s^`R3s0#y5U@i<{#z$Z7-m*z=I)UCU0a7R!sI+6)MYUVXoBe673Hn>c~s!Crx12sC9plI|beG&VVW}7w|t$q;f0+>6EIRgib2Za&QPk2$Zd?Iz(SeV>PzyvcyMy z!YVdA&-1V;d=yfAx@-z1Be259+Gvg)XAFmof?;CpJ6e+lg|OrXk-DaY90P=3obfiv zF_lKhl?aA53QO*`Q13|SuVBLq>4g*314kOpMt+Fka;Qeo&a_mqwtT2IjpE`uuH&Y_ zJ1-?KK!XpXNbM@DCkYC>|BUF4l8{tF@e|z>KHpP56O)vV z=m6}wD(*uPfG_H*JOb;1%t8~kU=#N1Sn^^667VGeq+NG^>|L z!)3;&WdiHUK8bud)0#%GG*m2otOl^Q&;zq73qk1eDslvABRSg7aJZ(0G9$*gDoC8gC&!2<`|bsy7; zY@7o+$ZaQ_0|?4&JkXF|lQ0c=&^>(gN$Bb*(hP$O)-TVsFci#4zDB#Urrihnmwwnln}Y0#%Bo_n;{1++!!av(+S_&Zgkvroc#I z5m$0lPyK3&|K4xpcuu&Yz(L1g6o{4#igpu@)@YGdX-A=HpSEb7Hfo`EX{%OhtyXE1 zc51g4Yq?fytM+TJR&2ADYR8soxz=pQAZ*FjYqOSU)s|{E;cc&0Zrc`Z=eB9z_G{M` zY4P@KkJfGNR&4>W5@+SSOwlYP;k9z;F7m=*(8Vie1VIslJOEPVf6)cXBu2`0ZMzB%jE~#HF3}xC5vjV0?v-RGVl-~S9Kq{!o8c017 z$Tex{Ma*+Y=#jPB<4l7vHI<@F(G5J(=$!)S2FqsfXr?rr%5qQWd-%s_$m$!#abJ=K zlpZ8S|ARw6R?k2tuU@{Qeuxu%2K8Hh?3@x)&Cscw91waW1CT5V76VCEeiRNL0-%PK zPKzfe=|a!6Z)bh-ZUT*T#6k+%zzuA`4ea28GZ=$6Sc5y5gFo1VLl}fdScFTMgiqLn zQy7I;ScO}dgsHLEcUUiZ+EDE{iZlz7!_HM)O$pk3W@+}r zjKQ}_or+}`5;K(}DwKmgp4Tbr)$o2a_C5vz`v@@p8J)G6or(ET!sy`mXup(z;9?3fb_(h&Zq5|oTGB=jzXdO1c?&N3)wJMv z5Da;4WNrG&?CR)L$VFR5v_w?yaY4-PBH*y1`BFN5HoZ>DwxGgp$ z5;epWJ8131{FhhQ%=Y*uSLlMR0|Rc{!dPG}ptwuT{up`W+KP+VSim&rblGn*&Cnid z4Cc9+3;UUGz_6zovE$hV7Mrjg`>+#Rm>v5D6kDwY9mhLA$X5da@OJvoTw?dz-fn`?pK`2HIe&Jq5PQ%`EjZ*P|0Uy#TbK1x zq;<#JT!wx* zkg;P3$C_YykzmtPNghbT8D@{_O(1$VvJC4*-%h2;5n>A_$_$i7?B!WdH%IpEdqhs? zfXze6Qz258#^oXsSlL>Nm1gxq4Q~!XInFz48A8SL5tY!dujpraS-6ZGGDtz4r5Vcg zd7Yy?o2h)trQFK19Lu-7%DMc?yBy5FT+FpR%*lMrz1+;x9L=}fpQYReHsFikuM}~J zNMKP{BNRbhEGRmTUlKqsAbNXuqE7Jwqc7UkoPxf7W#?i=S3^`t|336F+Eb)KrZRel z%KUtm!1px{i{21+cQqVgJzSPF2$p4Ri)>Vnk(Zcksdz(0M^wFe^_ZBpCkEwlNP%?K zc?3|2tw2caAjxOG6YJOeN4`->cdx8TzcDzw&@`9Lew;$5{^D^E>^PJybByX-awUTI z+`M&1cLEBj(+Bu$>dsItE)n3(2FELe&$|)WP8HR20{h69A}Av`D3Kxo$N-=h8@EZj z-}m|71D>-5-ron_;0qq%0si0>KH&+T;UC`NBYxo}{_;y;_VTicpR0NcwiEF}Yd zeuBG;>lfE1CO`E|z|OUVm`0dm|MX&`^Lj0&j+4}nFkFi&|Cp$EXipK(LS%Sfw$qg-|OUY5g5rJEn^u{C}AUVn*UuD+Otl%Te#igvLmI$Xmo zd8Qdw;2ybz;)UBxgl$S1(hI4OoRD8!+!O6S!H7i`1!IvC@HGDZKLS6IBrZGaV>@R# z4{0*MPMSmK-AT&rq}h|^+{4Me+@0~co!wmX^O^HAzw`gu%=_8$F(01A{PLe1^FcrL zS0D9DzxB_&&0pX3*W3m;fI2zR*rZ?sV!2{QVj?hh<%lA-W_&%~i5VO8)h>E9E_#E^ zV^@JzM2oScU&82Oyr3n$Ie`w~#45yBX{AZ1`@b+k|JY0^q{Az2bSc38DAXUGVw3Pf zrA)I1JD?cBFLygO9bLoKsX@cORRbV|3{Wyfppqp@6bx7}K!Fm53WPu$KvCgOjp&jAsT)Z8Lv%M`Lx%Br=hKq*d@a7oIYOSi7w zxOeI1EQ&WTTvje_xUdn}4Pn8AZ5R$bc<^Gxjt@6hEIIMx$(Joxj?7qdXU>psJkI<% zbYszn+ax}HTJ>Ppt5=)eJi9b&+P7`v-mSYg|76*dPmezAhQ!IABa!p0iIX`>vSc@? zodS2I*q>s%Qbdp-NmL06CPdzncX4nWx z{1>2dLZuXxP09K9(Siw^SJt)Kk33as4OdL7o(S{2u@ezg}Ql~%?5>WKv00?m8 z(*W9;ry`3<>~!97EWUW&jWyo1qKqz%bly!ry2w!y3GA37MF~(eQi60PiDZ*2{#fKq z2&~9acO*GvQH2X6^pKZYf(hnK5osxenPH-t(3ur#xui!)N)UwvQbh35oG(csr&1b7 zL7_!;HizYs6nS-1cR?W<1%OgWqJISIlxfDrAIN2~q3ZQzasFx}{>7^tNu!U6`Z}RBIXjw|9 zt7(-86Qe3E%95Rut_ZB5OVa8u%tIy#pjR7;S&^6zw#hS?Z1ybl&kgD59TuG#OSAtgig`%N9|0V$dM>Fm<L2Y}9Hbrko zIM7CEZ|Tuf6*Uxu5=n44;z%$pY+&J#CQjA_`!%;Kfx{wa;8(l0wAAJDIW~HVB_VBO& ze)E{MZ<%pH;IF^;)F7#T=h#nuVPB3{FDIjOrR#MQ`}lg@~Q-|XFVih zj-mE)xs(V6VE($*PDYr&|DA-8D=hL#{!ABuoNdT&54xL0@P?s{xGimdi_qT^@)0F4 z?kR6`&{HsCx~?!SYdad1PxexmAo-W>ss3Z+~{DbR`RQWg8- z74wLzx=3LXC2^G`{Y1%|%bo)wZ>)|A$?P|k&ET0=m8tklSh(j`bf ziIIzN}O5Q3I5+D+>Aaf(g-4+nI3JpLaHvHm590V~ESt)HHsYnoD;*y^n zWi3d>psn`TtCj3CSeNS@=QJl%sFXx=WuYKe;1Yo!nZ#x%nT}XPwguU}#do`7qD9xr z*1D)wiYWmMYChw<-;k!R^`q-u_qrLpaxbrTJxm!Ukbu)gKm#>!feQvOffn$_du?!L z8wzuSGDtuJ|8=kp^GJ|@GUTQ`JJ-+@MjV!4YtdHy1GdqPS<$<%?3O!lEA3i3+nTUr62$O{8c$+iBV)@;4ZMX>(p$KzkJsB#g9Zgf$u)NzUWb8sS$*E;76_V&Mu(>+k>N~q^B*7Bw4cvss;kahK5lpVd@+jdDh($-^?c# z5eP;qh7_ZEN(+wC!WK5Mp5fXFgwO=oqLx(39YeEG@sR|jE>_N09kM}|5~QbWR>h7! zi6W_c z!B{)BpbaD#fMTD8u5-CT0ugWxw923W%-X;XnlX$WT;NPnD3;A{b~B_WT`yU_d0(Xp zn5Lttlo3f_5}lI3HIrg6QN4;FQ$TWCV&|T$USwp~L?^B0q%b;BSt%AIq&@E#pvk>V zNrrOSkYF~dG0hM_LL;b!M(j{C-eklDO(;QaY9dlmkyLZpCr6Uzmk7({X&Bw^L~AtB zjUI114+gMDDFV_Lail*aK{a)L$hW%*VF@P+8sE~!xViKULowXjM^54sCA5&kvxAAO z|Bhn0k3mYtNM&_w&-xagV0VuX#@wlK>y)&BPAX|h%YG8hRWGY>Cc!l_SzYaxts3a8 z!xLWdh!?z=rxh>8yZO1ZqPvwOZ+Y{xpZww{^r8p-eSt9p<0g9pDI{P7c9_5h6w5dT zaG(r!C;m;3R0r-9_S$QV27j*;X7_Bx5x=P$!Vvam=n2_qlNJy7gbFd`4V6Y>?RTz zAqZzTtf6d0Z9!Z}+L99?A?Q#c6PWLb?1FlOQ0Lk0oypqzR#3RvC4r`sO8G)d9+*qZv`e=%f+5IEs}yGv&;Nb>@MPo@o z0&TzrRbe_>@Mj4i31uY#Z9r%mPzyMy2@x;`HUM^IK_p~AX_BT)P1uBl!2u4Y3VtZw@IkN{;IrShPGDG-5BOF0g4JSdavy16L zdC74gzJh;|LuML7L3eX%Q&olp0V$oAa4$i5wwNDJk`orRaw(S<0Z3aocZuBCjolbm zrNLKv)mP#eSmSt(=9rFv#ac?2B!STd3gCkhAOU5t0Z1TYB;Z(O&;n(^1qiSOUzY%F z;0k2`0AyfUCDK3x&;|`;SrJeNt^jwZHIbxMk)~ylp+y_wfg~g#|31V)9DY}3$U$4q z5e36Fd7|?ktY&J@r4%w&6Ug`~8M75j5f#y;KqIk?Ay+XW!#KgEdG)a?NN`C*QA+qn zk_dtyUy%fIBM=;+5oI!a1BFA&b|Db~5f4Eo8&Nkrls7x{LL$--KLT&jCw%=f7b!J1 zPK1f*hG0CBD+yK-ZwZRm*CfICWJPo&-Ue=X$zXXA1;Ldt&s9?fMPkvWCJrG+K!Zk2 zmVW2AGbLe$ed2za5GiV*PFnzRbn+8A)??G%ViW6VRShKxi$|65yS^L@)c&FDHjbI3_SkHdP6CnI6=Itp*i7^eU-lYM3%lwN@da zRxznENeS?v+;m5H_-((&Pj5jh==W@dxtMFhY$b-6V3a2MCPphN6$NEOK4CSE*=2Sy zQIlvFHOeq+l{FfrES5+$n#d$#BNuC#B6CSfLzxoov5bZXA@wFxPeGFxvQlaTAvL6> z0rxi#<8G8-p-CgrL#d~wU6MB(HWO`!C}k~P8h|Cr38eH4|Wq0|zkc{zk6P#B7cWb`Lu zLMbdtegNxF4kk_!A!PJepe@fv-ER#pw@lQ)T z5(ERj%Sqr;=)XBV8g>x&*^1Co6}JIWe4>E2EM}yy7n+N;94Z zO>A^GZ*oQ`i?SdVh~sCNF?vvlG$ISe|5iwIffJ~Q*QRZxlps73CC?`;C32G1NC)NnSQ25+or7vxpJtVT!zXroPxzFc-UXagsk_r$oh6 zu(haEloA8_FbNO@)B3&>)E0R9a$cLjUfZaA0gkN&SP=YI5{y0*>{k?g!4?cXWl#cJ zKmuD3tBbZTC9tal;K60k26j*eB!H`2K!Y6I1|N)d8w{##pfMak!!|$$9y|aX&;k^B zkwBc0LHxr)EX2?w93;@cX^NDu`6xH>9;xX%?x8V5lzBUuIi%+~u0j=sGlRD|A zHK`=CQ>X8?T{U4sFW0VYEU_rG|9Nh6A{c>F4YI!98zNHCB?tk&PWinY7B@RZCiFTJ zOK@*lsQ}MQ7fgd-ID%h1BCm!rQ46z{(-)T!P(aC>ml*hEM^mHMrX7rvp{M4uW&)#Q zbVh;Lh-H$ZAoeqKqE7Dz9W+)JawKE3>|6I_ls(&-wVOe}CrB%ECj_drys5N|RAG0h zwb_>x>ja@vCTg(afU_dI%3*;-YR#Lhz+kq`x#GV!hi3R0&W*dckah!zwk?aMXo+Ud zmUd{Akc=TKZCoA z#L3&yqs*5ae)&`+kpOMVwLcQ1D5A*BrzA;0$;A@2!Kaitu{d#SL4%mcZC_h z;TVk#J+J}Ujvd*aE!m>2tncbLgzBvR17DQ#zNaz(8(=C<0aPHTlM3V%U7R^K*?-u$ zj9XzzGZ_<%;;zeK|8YW@LMCLC#4U{X=B4n~)M>NTHZ+K_T}Eva-QnABS!p+JW3V^n zO&oT6b+Mx@lCd=%dJ@=CXL%P+q(yZZ)V+d$7`A;W5&@DB$`zeZ(k;9$U4HwWh-mb1 zAH#z(W)%{xCo*>6p5oB}O(IV#TfhfRw<63i`%locNU{kkGSjqrT15)zCmTj(3h{uv z#!p!x)e)-ro~y!Nd1fZ`xWU5 z7o=nAXjRubCwxEi45#I`5x3`Qn zDO1vQ5;l9+HKql*4TQL)Ffn8yO8 zQ*7gU{fBxCFaH%#{fR)(AI`gp2?pq;_tOaWiEs(>5bNG-sfWw_$=qg%-j>r8p$QDQ zP%*mZB-Y2i3v59^*<8z?`Ge|F+ zOg0y|BFb8hD%s>*J9d7+2WG+voGO3f;oi+9$8-00f8hM%`0Vz+#N#$z&#xr+(o&y6 z4)=NwL^uU2OCiF(XHoD_w$Y3G<~& zkS!>>A%P@HlAS$y{`Bcn%76h~R zKv*eByka#97O9j8Ri$i@qTs3$rb!0aZK_izPb7CE*nNt(>;NPY`X>3i)9_s>d!zK# zd;fPp5UvBbDp^2Os*)uG6j;_w^z-KlmM;$wV%l?R%$!?Wp71ql*CYwV-X<&-0dAtZ zi2~6r7C6zvc=3uoe!K60C`5lQ<{cfcZKBkpU&o#ucLKKE+qNC;S;_42c1W8fI z4HpO^a-boDG_pt{k5rP$Ae~%N$s~~!Qpzf+gmOqIr@XSuC#z&K%O<1bGE6eNH2<^A zGt)$KO*hqqv&}fEM3MssePl7uqK1lV3a{iM$|$euGb*dWra<&4vG^3!y{FWYtG@lZ ztFJ8y?2%Q+qw9Q8I1lLNId3hh#_Rr%HvYcyBmy9_?^ZXGYV7zy)@ zMqjbh)w%2-(+)V`j$3Yk;Uoht*}jI0pjqL>I*h0-+`4ut(OgpkGtj~!YJnuWRe-gm zqB?hg%(z-0h|wsk)icXda}P8H+!f+pC6c(dsB8b_6X5%HJr1zuh}sF^Y70hKtb>`u z@nMM_Ua(>0EEX#PAZ+8&zO|NGO5i{noA_6gPlmB%h%r_8i2jTI;O0_PXn> zkG^5)kVwEQVde}DY^Snz(xRvhgUISOqwbSHi@3F*tEjImOUkG{sXD6LvXroms;s<< zE#$Q>U1|ffqNppky(Fvlu*V2njIS6UzH4)ym~&U&d(rJyt8zyZBC`d&{Y>0$QR_Cd z*#FK~T_Kie&$0!C$m(^_h*LH<;)x|*+T@MT%~a#O!&qj@s+G zM?L{bzUwY4Sz$%bJ@r_#RXz1>&9~OpqIw-YKfN33{-q{OY()m~eE*JJ{8u1RY3M@| z`cMK5=p&9TkYn1j4Wdfa7A;7kC`+-;7NX#kC^Y9e!U7?|UIaP?fevNSF(JazMzIk_ z%u|X9;7$^-g^jSuhHsKn4sRHz9qJH=Jp^Ku%(NvR^6-a8G-48qxWphD$sjJ601T!0 zKNe}qHk#s567;48DRA*x_0d2SqQW?%7)281qstk4HVJ*TV zsPZTlP~pf$9?as4Y;(Ty*lt$0ir@L(S4hpI&ykCS74tOYz2H!?SIpa9uE@YhF8px*~ggzvyXEI!>|w*EQ`o7jK*5HO^9)`Ibmtes9M-CaQYEDXL)8i zvo*5O*%4yyOd)pS*)od3^PTrJp*{79&$R`mpFbHu32Y`4fV!qA02lpzPb=u9|*Gm+TDqA!tJNM}}2kY@BDC*i`Sg7UJJ3Po^txers86SuPb z3sXn=*AzCum8$$^Pq{iuR)k8I%`BxYMm358+ESKFjS7^;GmK&m(>XnM&T^@uDqbXj zOL?*DGQYc}5?aRJ=+}+M8)9XO+>p zqzXev#p{SOJDR)>U|RXTPkJX&w`pHwXLX+VB(j*|p)7m0g&x+_r(bR~N-T%c!5uNE zQ!q3TxBz&YJ5?w`8j=tK57Z$~AutMIxn`%XXrI7^7EvgA$^a2`LgE%SN5{QUa*+$b zJOOY5WUzr96e3;fM%TL4#qM>rn_cd1*Sc=FfpiHX-tbO$AmttJdByu(I#oBl?`|xO07e1Mdy3xx zXP&PL!K>s--Dk*ERyB8ZEaLfHxeS>U-^Gf}baSS^oN1NMDVA-OL#)~wbmVZZ%+M;k z4LwcOEKqU`3Eauno+V9Zql}JaN z)vacAs$nhbRm+;zuzq!}alLC@_nOzSM)j|6ed=Kco7lhhwXK2u>S8O~*R|fYvu90$ zWG@@lZx-|lRS0TOciDsZ$y5}$SRKzmum3BTEn~ObC72U4<}0CHOQahoAftxa(3*41 zat2cr%^6H{&JmsH#L_xoqHYOh=1N*mr!Hf%vCiSCo4sxWuXe%Jt-F)WUZ2Og<=OSh zRQ9PWmBk~x%Gi3vi(V;@{L~|B2eC<(p5?rkoJu7@vYUlukB3|yrvOSS>Jv>61aKKJ zmhXPJ^`KLj(?6#FgoC=Z5T|a$+S*oKf!1jtbsUJW2Xb#wY#EV>BzU6FXkmi`!e)(A zM$KJ03{{6t+X_cmLKn_GL3fWK6$8kk1SEh%eyu4?N=gu6V--p2>bE zcjPDJ^~pD-@rw^U;s36A!~i}53IDhh=0)#$!6WGMr$4;qsRQ_?6bSO7x4DHvUwF-D zEc1bv%V!in+tMHY>{G-$@DX!bgbn3IDjHdY4)&eOM8J%Isyv?prDCrXg?vYCv7`_q zpz7>V#@<&I$G<6XCY6T0v-PwTS*beYf*3vjuoL2{vTf{}587#_Sq3IPJU5G2ir zoOA-2s<63A8!djar|fX2hX0AeO_M?=w8DLADVEa0EDQ?A0E&O&!Y$;BFzmvf(2K`F z!!sm~%^{Y^Xv58k9*N1fp6I7Kq(gXOsmlS1Gvq@vOhZ2$LzZ&Fc50`0(h271Lob9U z$8eZKTtt^i7)1=k&^g1GQ6W1b#4v0^yQn^d(Ge~(yK|e3!w9OpsE)(no1-X;49tpo zJF4y&GplflY2qNgh$_TrL&>8ked zs`D_y%ZLr%`HBv_jVNP|>Zv4@;|;ruIbHFMQn?LtJ0ZZ(I_YRT-her;ix9EUmd*H+ zL#h|evaB5&vZk;Q}af&)0=@GuGv8>ZazB@>UJRm&Lj!KE6 z6^o0&=%YYVJ4`bbKEexwoH6A}E(>d}lDsegLM^>Bkd#c2JHfk^Jjj=15EL?}hB2%e z!zPl{Ns~ma3}MN=Q_26~Ai@eKOEbzo610YVq2V%>1F@LlTbT!8F4D>q{~1b?#7bnj zi@L#!YZ;+P2*n90i$OAr%Q6)yu#V42F|e@6OR*vWS~^eh3&pCjYjR2)6Cq*YiUY~L zz05u5xVd;Cq`{mO`b!VXu#Mf|Kfam~1YjlPS*(<+rUAqa!~!`}(#q*cIgtZ1nd?9A z(M;|D7uR?zt^b%EzY!PuSq=EZ40tJ*g99tFlB>Ho9rjBCdfB%m5CAnRn95lj!Kx;f zyBJHO!ch7qLrXMHqrz^&jRsMk2tk6Uh_vZEk==_ZY&KdkFci8NLgpBbg8>c{ zR2;UPH=#i2GiQ94+8G`*YrkVM zrt&x@*Z%-3VY-gXoE~$84pX{JZG=NpN~N^(KhMmL4(l+=WIL0A3>nSG@JJulY#+m< z6LaDg5azf_bR3YotC&n-N&}h@8O@##*(9smxvi4J`WKtI^EOZdr6<%$(Zz!DZ0u{!&Db~N|>BGmvp+k z8_GQOR0aY{P7OX&T~#{0v5~Y5Df&IPvq6^GIvJwXO`WY=Rn}X5Nea0^uIP&{vJXv& zn;Fy4tr8!>`N)(5QneTqHmVe`8yrFj)D^)P?^D-6`V<-qm2_Oz*Ls!mptJe0*CJ~b z%KviHH9ba^!!pJ+MO`sR$D};AD;VLdCSB3Y1?j)!7!C(4$LpaaZv?pGNDDL)4UDsl z&X|v4+6=$}jcP29Zn+c@bWO3SxE1q}ulMiK~Ugm&wmXi4Ob3 z!v-x-`K-ch!$hkk+b`T&I=n=z-L$1u+qZ4nvJEvmd|F1t!%MV70rkVY5R9R)jk`%F z8r_MA1DUk>q>OpAVWdW)TZ_h#3bgzRr;yQ6vOzYaDqbYTU4+@f&|J>hi<@M>T>lEX zZpjMX5uVq$jEGyNuc(a5P$tZHirt`$=|G_a?5hWix#;MlPPz_rT*r%nOkbH<8i6^i zv)yqe%-E1W){!h*0nG7Og7vVb;Zv>VVh#*5$#;|h0+E8h5LDM{IZsj41DcRi3B88A z%Ttk%j^tjj+kz;Yj4tUy&r=Q_af%^(e}ylh|w#$cv=G~C#qrig+q(1iQg0!aW|&k!8(nF2`|LH(1a@tA@! z+A#c)06!TEvB;cySDwOGHdawyG9V}vvGAe}9WlGGK$xnu6^0JOz!ajgiby%JNOMt;t=zHz z-$&z%x3SS*r47)j(o@RazDUPXVqvNS78+sH?7_ORP-J{P%via{oSWCpqQ}H|A)ma{ z+e+0twGh-wv<7mj4cQ=lq`Ir?-|m%413}cSBS*=Tf=S?_v6G-gNfDwf(~e9|V^tw< zikMC{YF%yCqgGa_8&#(6$)1Q@Tcq9)iUV zr8`*d7}J`ZJWt{tz4}a;LqOmyISdtx1*BNQNCMymGq32DYZ;2tFrQ#jGk570A??7; z@YwMvoyj0sT*9T(G#!9*3_DVheXGpjB$$U;=z}>#@`D(S!NKF?jhto9&vDfsG|}Se zyU9aBb?T|XX+oyO@215M6SjTpU61;scDbK&lsK3qRYRFf$C2 z6ABn>j(sCsV)3`k6~8Ye+~dfVVInK(4zbe^j}2rvuKy6(b-9cZgpHQlVC;a5B+y3C z^~S;oNc~eKKf>MUaoCyrwl8(!{O#__>%P#kxylF&1pvFHh(C>fQ&-8IsOY&_x^vMO zz7FajDUgH_7p{UN$&3Lc{FO>hQXoZ*tyR&H*K&07)efT)yY7fz@QBn?IpA+>SN`Sn z<;vhszu-^@^-(t`9T{~|NA;5I-&6l|kE~2qZ{Qf|-RdQvBCIQNixB&;ATz>sTABo- zIPC4nKCoDGH>W-~>OM^=)bWG#k<`ViDj*&43vVu!&K3{WrYs^avU?=6Bp$`yKmx)H z-d_>G-Bq%ayUYz4UT@qoDeG;YS{CP-9*+r^+W)@AS@`SMjFU7({H2WR|{d8p65gS`Bk1$vKKkfw%eq8L2P}y8wVj*|%yp zXB*XLa`rbI)wY~JM)AOb2;4j~;JMEh0V6j8~S1dcZ9;F@qWVa*gp(~D5=l-$Yuq-910FK0qrFjJv&aR%=$R5r`&1nM7>bBuoKp)T(fcz#v9h4w#~3 z%785_leAni;33W+N|a!HsZ+^<$B`EUro1@F1ea6v4v5?mu#_lTM3dIyR_ke`XQNO> z%DSxDutcYZoml%JYutym=B_QVH^hf>2OwcBajF!&%9At4I|Ze}x3$f(u0H*`_3YT+ zaH1J*@fi>d~uD@4h|!@$A{Zryu{mbo}eH=YN0R`+nPzH=lL@5;z@r z_N8|qfdA!(9fbT@mlaAt7)KUJVKFC#bi`RCR{}tANE}2T4zPg~C=S5fLkjsd(27$? zF~LDI3N_GONpSevM`lsvqyJTFkyzYGBNAB^i6;#ioDc&vsgqVVEx{OLLM+fEL4Oeh zQI>lFrhsCMJ@!}<4-Ejo0Gv6ggq2`jgw+6KCAE>9!$Bk`iFcwECs!C@2$!BC`Kj8T zsqLv1ZHFEjREdIOv{C|5$S9*xj-`oQr9Nr;6Q`Sc+Nn!AwWLsJr7jc&MX8>oYEY`C ziczYl?iNu+4AqJhtF=-T6tA|@y3(#5K}yoCiXv3d1XJKu&=k!|p+FL&1?wuTw$=5j zMA@#ot*hL6+by`?iW@Gu zK_m%>E4}upqewwIK>xA@p*R6y2h~{6KnOjAP*4^p6xMOKk~C6CAdAeATOE}|?8(q( zDnw2^(dZMDoyz@Z)3k6dLrm~GqR0Eij zUu0qvzxYKb6JXhvM5Pz3c`a=(2~%V;k^sdJhA&`}-<^_xC#T?WP-Icc4~bJ3`7y;Q zXQ>}llxC7dNd+o|dZNw_1t*0e>}1Q5LI_`i!cW_GcY*)LXjkbWruYKupC2HJ=tn6q7r~jiwA`DN%XKQLZwTtW+f|Unxsh(z2Dd zjAboxdCOUz5F#(vN?@D%P-)l{yM)&{*$t)(4q&KxplcSl60X z`4p(EU6qjD^mf;>!c{;73hP}Xl-JiF0ikROOmxhICOJW_uq%2=4c9W&p%6zXWRaK@ zBt}9kf@MYuj7~}%Sf;ui5F~y}Uhuy2Bhw0zC=X#1m$cM2B~0l`WaNuY%vKbLuuyAa zqS69_FeQ$PttMvN3R>#N!wdhKvae6c&9@M5jJ(&@U_xK`e&TK^YhSpVAB z#QvSJfjvG~FB^8)Q(yU-jcn*~(tDK_U#qLl>|+ZX+MgR=u+4YmLK04J7!l0UFv2!C z7jCj?LJLJIRwgXAH^?i(k?IJky37WP+t((bIBd%1p$ zNmb50j>;^&-wUaCzax|J9@#tO9lv;JlFXBex3BHA1^G*kQ!A#i2yO6kz&(MJHq{iE z!VYp{iv?K$&zd*I#FUYXMZse36dATA639Tplbjx@6dY{@t&DiaN3*O*%x&`C)~U#pY?8SlaVHhfC5? zIYvrj0%>qHZW+tWK7GRj(-dqPYiPuVU{PN*T3sB>;8aT|LDg~W#^Ue@*OW?jaN0Uq zVB$zb5&%Gmc*v(!RjFBx)j&t;%$0t~6=21c3D$@3vAVg-ZNC7370c{N1>6_r?-mom#wB#2$c~@Ad5wKjK z*qMq(!J^n5$IKnZjIu3Yj%#S+wd%v(A6*o_=U?d`_J_~W=)7`dU!KPn!; zoCLIJOGh;1$Y4Z3$xO^lnUnFvZH3~VoL*>QBqyR@N79_0h#6aiTuI0Yov0aeJw-*0 zS)8ooB?=9k@deswiD9r}36aeQQORQ1@fL?qj+wc4-Mnp!^9^iW${ z?wYeb(`h{+4Gvs)5Q(l;mT4i|swo?{l^|Yj&i`QQNMU+MT2>nONZYlgWm9S!Tt-{A zP3B{I4h=>?8@Rv?xPcA0!40%QXWBq1Y`}M%%1GFyS(wIF@>@m}R&gkh5^#Y)pc$7a z2SeD5X@O#8$xUWWpaGuc7^0&AX{8~NmT{ir3>pw=6({R(&FKi70pZT<5eeaFk{OxJ z*T7jKP6lIG91IoO2FcA)4AImeg;KnUpPVG6$q$(A(4Z`mNLG|(HJ1!&moJ8*&+O4A zh8k*Y;&`1@B~>KQ&BV}2nGn28#FRztZ3`)(%H2pprzHg51O?MgU33T@$B;zF<txv_mbl z11lJ$E)BpYTwWBAL+XSQMQj0&@+d1{4&p`W--%KLkir<)R}`>S!_Tnbfyb%CTD7<8@K@noax}*={TL}LXZ>c(NRD>1+w(%p-_`i zt=??rDKP4uI+@8os?i_mUbbA)AJtxU&|V=yB~_pd$dru83=1ndS!bx%DTc~f7zLIj ziGLEu6j?>0a36GKU#4mk%wZX2odup?Mfkx9D1up+wFddQ2AupVoMp`h@t70@fT}s`<=4^sLY{DpPLMzmRX{<#lnFUHPY6=@me z##~VBMcA<7lVQoG48*d2s;_tp)8Q0^7NZnUgnPBFx9k`m*-EdF%#OjEwag|$q^Li( zt~eEAf>B_jw5T(>8QydrL`X|GChs?fi^KBQk{T>2kijKw0V%M;C}cz{L@y~|P6V{W zl}5lOIBYs5!5Gv7f7!w)tOO~L!x*pzDHzcECcze@uOv9^79^4;kO3)>f*b*O>G^(PKcC z2+0(cw2d0SRG6^MUu4Z@bl;)f4I7rlsT81c{Nv*2hQUA}-!QI2B|xHVPUXPs!6-zh zktlP{>sCq)q}a^kSPmtd$%F+a^2APL%8s-pk7GKfCR1jxX$~paf+lQ%!6MiwTXfqra`?7`77W}hXHY$iffS%`F28cYCc!BD1BbAJ zmfFK8kO4b9EdLoW@FtXn$&Lc)TtqtvhAr%GJNQFj)I%$1Y&!&oFGxakQYQ6y8(f0V zTOLmNY;ruq^ZK9#t7*>*2CbalfD5=l0w_QUd?pDfCa-alZ9qp*I>j&Trv01-W5jOA zI@SOpijEw_ytRniMlGHgaB{~(jijVsnJ$yk``#egGs2s^kS>1AMEmx12fUIpr{MWqFJkMix^~R zAXsQDjQ@2(gd}OeImReBwFJB(9+@uom^QYV(h)1zLyz|879c?`2gMfDLj*vmA(6r> zH!my?z&A&MEo^BLWbYh}0RyuGE0}YZl0w{Z>?nBY#!7E3)GsTX!DhNZ zoh}nFQL62I4=_@t3WFq~pv66oVQ`oxr-oKT%F3huus<@YIvo(DM(3lBPN$|uM@-qK zAaTy%q)zY`5q~w6!5C6?B3I<+tZpH4QCdOKYEKo%;$HE4Y6V3Z?uX-Q;(mA`YK;fo zkpJu{#@xIJ{@tJc{YAul$pIck3>v3%qQ%`r%R1dJ;vCtJlj3vn$hd-Qp{AzYh~B zz+o!L3m&Jv-4ARuwMjfKb%|PG*$lGon`n&)YGn`wxnUd*8)=cDN%QL(hK6(IhyM~T z2@inp?IFV16tx7XML|)OjZB_JJ6wHnv6La-rsQJP`QG>Rw+Tn8!nTreUtYxG1wUV-?njv^a1Cue<~&0ch_SH7{v9NCA+dikPFe{I-JxeDeU9 zvS3SsCzUUM1qIFz0LPwo&Hw0?wgM|GgccO(D3rMzRWlt$3URYSJH#DwD|ZAOvqIDZ z1F^i=OR!p$j8KT!2Dm~SD1ZV?!AiVoXmWtUmy3@ysx0cn5JlE|Lva-(Wqw+ zQL#~{rxugs)EJRUlIYLHWSX?Z2w{11NDK&RhGwA9m%zS^N5zP&E47+V0qO)^NT49s zYoQ>~RJM;HciOzN2E1wrS32^OXJu8o=8-joRdMT!49_U9C9Q>ju66RZVH;r9^Z3uR z>69|U8muNn0dE(Fa%b-rXaWOE0VyCilk%@AM*%>zY9(bB#E-gp27i9k_?by zZ_^f5trU*>w;aAT*A6*^v=7-3?-fCU4V2zzkg+OMT3nW9w6>e8tnn+A+Jf@}pzJ}39A zWPp;-N|a1s?mP(d0i6*>VEULTXwcR}W8ThPv3By0B`9X?szl%>)hwB z*Pl?kl8n;H8xis_Jqev)XO3wN}w@u@x{ZqW{3nmQIK^Xu}3O+K{4!x!kZJ zUJkk?RMifPL}-IGvyv=Jwbt{`Jjl*elE8v-l&m%L5>881Bn4xtU!xG}H;OAioT54H z@YE5>h0FWTGvus`Oai1^>x3FH=h?PTWC8}I0abJ}{a^mxh}V1lnrm?!OmzIFh?3m+3GEf%M(%P|=D02ggQ0vy83^$dm>=3NJIkWr0z4E7(; zL?j3ZIgamSr@O^8?=O8BlWk~YH{E0qx>=iQ8j}(sEFo zN>r{=m91puD_t2&Sgta9!>W-iIW|jN>XMhcR3+xJD754G@=qxtg9}>V0%a;QnJy^7 z1c+Ij1ua5!L)sfT_OWo9N1PwS+&E3RICWl0oe8-T9UocFDn0Bt zY+GB5vI7M$T98F)w9s-!L$d88sAd&>QW1?dL~cg$JX#EW=u81a!JNuZ zfe9GUbrFG4$eLOXH^icj2XL(c3QZoD8Qw4kgiCdbL^30?$B?r>pz|tEb2GXvZRIF? zQQlX)qLs0PWvyy`O<&fU*0KENtZrp1S?bzWy#iG%eBJ9^0o&KWj-{z*=?Yw};#Z)O zwWzXbtYH;9SidG#vW9gSWd&Q-4g&8#5m0~xKKoe#M&M*81MFsd1CjK^6f7PZ8*_lL zyCggiNd%+Pe}I4)%VaeH0az_^3>uv2q3$%r1&&`zQ`Xsl5QIYG$!~6xT89t?H3OKT zZgd*9;ZBz+c{5?$W(u7zuKzTkaA8VZ#)}XDToh(YlW5h>gV6#_)T2zB?S1OYQT%FE zt2yJZPZ@;8ZSqW^5KIucwvfp+$>@@%WzKi@xg36`EVzZ#N}OEAA61Q#M-jOg=`^HC z5dD#y*%@TcPW(p|FRVi?28xyx*(FGNERqkQ@xMx3uxq|aO_Oj@bMkhs-+8NEMILgw zhO3J-l<&CB+N{C=t$z4wJmysOiaAh{GhxM|U{n9ZoN0~_} zds&W38zOw2X=Z3*Xu&QN9;G~4VKf4!IUCkT?O-X$7E6zsy_B7J`niunv*(P|$!Bt1 z1}XN0sTwhKqZ9dOM*lb4qB);bQ9n9uZv-}?dWcrw_xg8PICMD!T^mn|Q5fU>9)me%O<@^8XY@ygoqTEYB1}2!~i-|Of zzV73_sQ>4GP)cklFTud*pH2qos>6+VEpq|}HB!Pkgn%hPu%<4jg;GkSa1GZ+DAzQ` zssJXKTo8ez4Z!9kFd*l-93r{&Lc2nv#0ZBppbB)}MxAV9te#HYDvQh(>*3aRi4Bg+c25DP793h@f5wlEC6FbQYyOk(g0nJ^0VDzRLLt^{kdV#tK9 z>*bh_HM(K~3P=h#WDoVQ4>y35`YuT()Vd@K` z?EfyJG|JBWi~kPhXi6>B1n@y1Nbd%~?=;CUwkFRoA!rX|` zmSsy4Z1N`0O)^Q&Xkx{rWW{u*NuUJBJ}*f|4@d$-l59-&Zp@K91dpnSsn$fKGKrHe zX-nn=%j|@W3TMsEY{}4!Ai=E4dL$tCgv->-UIaxUKPk(8r6Bpp$Q;r}ss+h5(jYz3 zBEJkO6bh|Aa?Kc0PdXA%Qqo&yghlSjG8`!}Iz$U7WM67>Ls|@D1ZO)8@1XYMdJ?9d z@Cju6EZc(YD9dk4>d4%{1dg;$2KmYUXyiu3t6{PV=p^Xyn(;*<0@H5m6^Sp@82_re z!t$Ynh8V>%7{!Aui|Fp!vhAwKE&FfQtVV0*ZQiotIdF)EQZW^IO1uE7IRap-M2%dI zqorbsf{x=ZKZh~rO=HMuCzqnzmO^p1!!j$gyE3x|HSVpJOE9#nKUxislz=8UBy_ff zlk9D*@a^C_6XXEy-(<6OR_^1-C*W{XDk=wiyh7o8b9FE-IBC;1fwMOeE(ga)-7N0p zZZqFz(|ks5Ih)htRPN+Bj^&!OI&1Ubrc-u!>gAR|2*5J|k_JN3=|5aVI;e@8$nP>B zV{HaNbdbZFtR@bHV|1*in2_tcmU<7DSpNn-hpjp+ z1N#;vGuZC`WH1+bj)_de)wbjAQ@C7aN0VyU2 z$!9S@b4#jq?k+=G=?y?R6S|BOv;ImAmoQ%0l?%~g47Cs|z|dalbzgtVtnO6`Bu@B6aI(*y zR%QTTDlEIAIDiB-J!DH`Z_(ON|0BB*6xSY*BjWAThTjGZ!Q`7a=?Mb2T?~IahQ&H+lY*bT{{|O83aD(fu-v zMhk{v02Mx>AQBoY*&y%JSpm^40 znh(?1=4R$g|Fmf&i7z79gNm-GYso|Z9zH7!`gT%rBc%|zyGRPrxk%kCo})-{J2hGpt7(s zGpWF2l-RSRTN;@1xI+NMKKt&50S z(T`=YLL0DYCv-i`1AaA%itcV!QKMAd&Qu{elK(47%Z6XBiAA%oFYgaLVr26U?ZYJE zZZ|2!_V!0tG-JTgO*|(71hq)n5!7V&#F|uaqyL2T94Q_nNjvB^C;e87LM$H>OhpvQ zmeZ7w7 zHaPSPd=F$Z8hQbzHlYzYi!f@6`Yr`i3Lyd*jCI%Ql3+J>QD~=0B~Z#)S+IqwZ3Qv< zbEaT|uN8sTH!Zd`aKH_6Y{Od-Xkv1srGfG?Ot!0_H8r(vxr~rumknW07kFqkUI)uv z8`fao5UQp6sU0h_1~#diP`O^3s`YiU68|;^of-<6@N|*-3>WsS^TIcRP3we;Y$_?Y zZmu$111uBZ6f-Q04GP~xCb^^l3YH4r9?@kb5#36suz3RxqmVS><~ih0ygZN)OObzP zWY>(glGMvQ*e8`+$|7gpQDe38aVwU@wx5t4n#kC5Z_!g0b}MgY=A zdYz*Ldn%1cgKY0NAE}9x6fBidIb-UU9M{pmniOJ;yKlLeO9F#;0V5LTmPEd(S)IE z-7Kew%PL}EmfhZX%-5J>_x~aePl#dnB#+UiVz`byG<`Gz8jV0|rY##Rqaf}+)LhFF zL*onY($`e~wAo2DirRd~CQuS`7a^8_ryzIO12d*h8Ev$EM@a`yTZ~Qgk(9~(&}7+2 zF%?PYh)DTN^JKY84)l96m%I!JP>E{uyM(X}oh8aZ#_k zB31m{Ip*a#{o-iQ9-K!&&v~(#ZWhv*T|=5W6~aVDkR$nuR@+qB^2H08d!c4(X%Ra* zwtXSGqAg0SXYTqiMe@;=D`u!7kpsXriE9Y4ta>Y+4Bps(#O@h*@ zRE|=qcD)Mrt5~gMy_OAocC6X8XxXZ53-_(uv~=CpjeB>l-Mx7E>V-RCDo(5_2lqYv z_itdrg1ct*n>X*s1W6=FI=E%xmMuGh5*~nrvcv(BYHrc8lQd5$Cz-k?2;22ZBsUWv z5lWTo$c<5=Y_!Qc(&~d51G5gS6FJU-5<5EgUAd@E2|1-WSBYCF$e`Fk#?(%908^Ak z!y_dp9*$ z6av3Vky%1hD3MTw6e>kt5*J#i)CML+Xq#X~O_f=StYOIFg#&%K;TB3TG{KA&**HOJ zIBmzHQM{da6oEQDNZ^k{a)lakGbM4{Of%IqQ&Afw5Z_71S*hX{(MiGNlAU!mRhVFc zxfoPqiizf#YNpBNnr^lU=bL4|NoSmP)`{nxdgjUJo_?-LAXI?{+GnAD4k~DvbN#b1(qLc)<5Tdm0Q0L0Gk#>{LRwaa397T3s}#R!Mw6=fX-MPJ7rrL-|iBYR9TM-n>~n5F4;?hoMi-6r(Ml)H^wLf@4fWGfM@{wAR#)A$ZcL-} z9oAQW?G?yikL{I23#&NABwrTj5vDaIv|2(s)>Pw33)uLYdkAcM8%XU+S!8EDtwvLj z)E)nRR8EE)?%Q&TBYu)jf4}?p(C_6IFhSxfFe10>e$JkGphFlgd+Em8t$yvTuKJ{W z2c;@b=GKefXWmws?tE`61)_x*3KWDANl2?i5YHA=Vaz?&yHl1*WON~<7Z%r|uGMFh z4?Q2NQ?~BZ)v>)I%RiHg=?}pC z39x?wB;Ww|hrj|R@PG%YVT@L&q$RM84FEvr0fM&Vle_dt zD0Zy#mbnD9#@3}rKth>a>)cq!0{I7t_90|>3^aiFL;2&^?T(orHqvaQeL?mfA~k8R+yo}Z3uJ*Y#XfpW7q)5+(EfniV*u(C(bkxr@E zI#=l+2_JWL21FX_YE6DOfM`VvHW@0)Fx%5BoHQg;8>$iXs&}Cp#T7>^%8}%R)V`w- zMms7KWJZ>}Egf z+0e#tOf8(#W6TslE=gd9qV3b7S_|4RvDStME!RhgbVIhjO^d-3j}ZTYD4xoMrgKvY z%nV~k8(syAik+DvYMv_vSYgpgn950HZ2~MUddVxQRTEg&)6!HWF$puu?rK|yNTZ0C zHs|SE>QGW8r~0wIpxFpvo+@AF>9Hu)>fE^;`MG$F>s*f{OqJr*uLM(a!Sj2~**4T4 zakZ-}67ko)v zV52jYI+1LX@|us2w$2}8EyzJ8n~{ZlbY)g`jM?jd!c*XiZ;(X3e4Zkd(s@NDud<)p&HyJbCltO8Wme#YJv$mD`R>|IF7H zdq=N(W({>dl2rfdcXW(ybc2YxQ$Ye~J>`nPq~A!DRk3H%2m+9|IPGcI>8Dl9dgJTb zL*`5QZebr<$Pkslg-n^1b!XDy@21xxgy?ETA8JU8$P3s({q=*N!Pcy#^5?y>n)|e21f*MR1NqfK)Uhv!Ewjcpnn^|Qw5ZzK?HyFe1?r@Jg z-lI(+y}>8bgk9Uq_ZI3&vLv!q7RBN#-BpISAr^JWSgVpMl%*Er_CRHLChV4Q;#P($ zq$r2@g(K93YzT;qa&Y6-Kc~f6ZE|z%#wP#A6-KNQP{ZRP8bu#eXI9(;ApKP-RR;hc zQBy;t5(=PciuMtZ^+hLTT}l*-_v3QRC0#2=UAQt`UvzQ5q7snxZTgdkhow7_#Wh~^ zNXr9(YvxoJ$aGkhM^D9cwj))GXMv1XR7jA4*$6s0MHEV*F9Tp_Ak9h`Xz)>0eI1voB z8WRI&S6Ll!hI&HQAy|oBPZ1LtbB{wwmad_bXm%77BTMbUfDynG`uJoc!i_}%lru75 z0OmJNd1v`&XZt8;8aZb=GE!F=QebIae8m;YBs8?wlZuxTSm~G&sF2>+Xd}32m$M%` z6;&eGW1YrS`^7r$wSgL_9?-TRQ6M0@<5jsuThbE}@8fJ+C_oGWBQPQ(ZxuPigM-1S zLs;=c9A#`EB%HxXoIqlltpaURv~{zgY|18BEf_zK^^sgCZMrjcj5sfO zUWIW|#1jyw6w)~bWA!2AI4b|Sb`sVm1b1^ctEOvjwMxIEA??{vyhaeOHUY0@n_#7D z67XuzLYw=!079??O7JXGumn?ppbCnhWLKUna-i_}o(gI`3Hl*R(4Pz;FsfE<4aGb= zI6d=u9Kk{uTsRn|b#1n2MYR$s54M6*umLMMJ>XeF~rg*=K9!qbz}p1Cmol zN1FFxn(a|_vnDS_abW+5RDn~+JdE^7RzgZV@gT`0jtXNDWk*SDR~{-gdN?yUtaLXA z>8k8UF;QtrEzx7dWJ`a?ON3{TCJ|%n;*P&69Z7Ll@Z>ijQF+YNB@}60iq|6}LmFm7 z5v%%9b%siH1~F4f5e#K*6;Vo7$su^Nk{yOhJ4vn58kl(l8y#1!*g77tF#t<&Hy$cc z3&5ddNoN;QmuW_JYUi#O2CZ_IfAU9X0##C(YEl#SOYnDR{Ae@l*mxX8k1K;STmu~? zReJBp9Wj-aS(%oHBLz&MN*2QucQdlEL9%5@lkxYl?s_?!G!fo9F>oUZ%JgxXbAF9x zXUK7si=!Nn^K<_l6PKR7hEzGTpl(r!IV@`wSYzy zFPI82_p!C!7*zJ+Q(T)!J0+R#byM}RsM5$Ffi)jwyJ_mjE%?%~2h|y9qk^&qbi+i3 zzCxSxxq~jLg@YSVH!=m;iAvo!xJ3v!dxkAq^)7FRY*--yR9aEP#bTHn8c{V|jRj`F z5(Qb{C3Li2wCF!u1TpLp1*cMIC&(d~k{Yioo^SI!zA_^w*gF@x1R;t(5c(_-u@n+2 zpScyg&7*5V6t6ZCpAxzg6EiV2H~<&Q5E`lkN+1C7`kwE~BJH{a%v)_3@}A)<9`Si= zuWgJMq{f@2>gXaYf)Pg%xW6KR|JxzSn2g<(i7k4k zKtXnfTRk;Gy-9kcO0WbMYN1Oohg4*L1Mn=_1#-carEf(-?ROHtg|#UGej+p*T(XI` zVspI6h`d-o%jI%y8f{Brb1gi-Oj5f8OlY?2x17i&o-|Yzh&t?bbsLYH_U3cRCgc1f`??#LYzHXcjitjZ^lA0x4ZQ87@)OO zqfvu%Xp1>vh&K|3_Oy%>IsBrI`$97hA*>Q>%oFQk7VAu-*CB{GIqDOzhLZ#}0-q*} zq44RXrwl5MJjQdTn?jVY;z2kQvpZ6hy4uV+GNV)H(PwZ8m-jcAdwG8$1+;YLG64H# zdYR8}mNG5nm>nXLWgNhoIxmyjAOwwdlUc;-SEy`xFKd(>r4lYl5Nh7ybV?O!mGUvM z6KeUvN2`MnUNxg4J*ae4KnYBMCgQk&6&-@{om8Q}0>M5)h-}5_AV4Cy_9Y)O^MC)E z3qPR~b(A!J3Ns%V=$(HTz~kFr}4;d`Lb3%t^) z6L-^}5lo=DCL>AeJF7(1FcB z8g&x1>?G3F(gn>JmUzG_XDe)#r4zs;2ywbLx{?{uU16D>JPKKlL2x5vKNm-)_1bF* zO3fH*+UvQbT`j%}8roarTc&(T(JL_IX}mmv!#}J!3z0)pN{u*3YRY23^Sg^eia)gI z*cXS3KPxf6NWVCIxHji1F&I`sNnX98r|w~r({f%%fk<QWsdLoZD&p6-WQ>Q{LfH zo#_Q2V2qIVqF<0(&|<4pSUZ8vS{NhPHV&b7>_|%ZdtqSwdmWKRp(ipXgWzE!u^pSb zgSVJOK@zs4t6EcBjTWg2jT%hhmcDp}j!Asvp;Ev>m)&VpX9X~r;$_sj6VM8+@(Lnj zOdQjCvUgXl`GTRIQc5)uQAE_PX;yX%Q&5-T+OEN&)hey%Y@?;j%{MMlEKaR>O_kFs zo-3Y}>pHLy*-lN?GegVe{6}~EO`}N>%wfLb#%#+Fs}hn^85PUsaCcFFh8;pH=Re^} z@ao#wT(Z?%vJ648>)Ecx(Ks#{8;opzJOQ%-YLgx}k~L+41pHiDcrjlDg)bow2D;$z_Z9lZ~(FY?K>qR?VicLd$Lax}Ne| z!plRrOCd`@)V3P8=7G^6Nqg5le}GrEG;%+(TFgZQeXpz@xP zQoQC%@gqMsYKn_g6kREg*z*y;(ll7L_@b)C*7y5WQ$**mnVkB*6=ZeSYbx;8o`_sL`k3`&->RP89W5hTlE42<3d?w!gDiE zUCJo)z>ywje?KqxTrA(FG~7i%4BG?DNP0RiYzM>v7!x&h-m-pmR|T3!%$X?h#A$mV zI<;szO<>+<&Cj{s@miU#@8 zK@q#WGeWo|ODps&qhr;<6uZhFBcqYjrIAoBQ5b`*8EGN2eXRq_$uCZp@9HlY+~lFE z${|Zrq0GsD4jXaPV2v!VF{#RmJhUDwe;f%N0OK<*26+GS%(LX!#loEa#ed8z^HNW- zwDAxBLQ|}L#x-beXNES-QlRJj4-iTgC>fwcfxrO=3mzPJP$5Bs10+Tm5Ftqdi3uY* zG}tkL6fIIjh8!tnN)nD7Ga`|g;Nk$67$;VwIRJ`;0XQW@+1WEEPo6o2`jqezqt2g1 zMM{ydRAf`AOqb#ukff@Di&o5ESaLjC0MI4t+HfkHEqVX660p1n^ERm zx_IH%9e@C)T)u(RzGW#92*m+~qxc1o7%@vAGZPO0lB6)$$d}nBiA*>1%E^%{U(P6U zi;^i)wy2)6+O^5nCNBcPm;i}wiBZx<5o(npZ=CI=;B}JtqkuqTZVBPhlMA2S-{{H!* zh_9~o#7mDjtD*ocKR1LlbgcxXw0hUmrxuT|UaKhBe8fXEr^b^Ux6HQW0 z2^K3HQHX;iENB1=g;+wY5+#&y3JW*PD7BJa8>_-4YP>PE2VoOYASTO-P(Ktwl=3x+ z07S90DnUX~3;TFNE(yfes_MM_6jYEt`{+BT}Yh_z={OK0g0T z(9Zz*nfDef|f4C{E`TP#}Mm`GSDRQPP2?Yvr4qb(hY4qdPSS;F8A^c z%)Pw=tII9i`tp}9cGcaBt;vXkZHq}DoI-*DCzxVliT#bKqL;V=7-L{N2Jzz3?dzpdOKFJ|qn2ulNf^3%xvf)k z+iH%Q(gN+&CO~Zfzb6K}DfJ6?uaxMD| zMgTdQW_C!Uln8QasgN`}}Q3I3|F*bqTBWM?K4}PvNg;dNG*I)|Uiv6)=HyDcE?HH?E94P+*{$i@5?rnsoIC zf*W)UU(S`lxWtQtq+t&RkwE{EC#6tWsA&yM5^$dKRHZoK(M?fMR-I_&@Hg0*54f1O z!{j?>1%tGDG*{rqNg?SP<3bt3!vzevm{J`Ul`#H zZW7=$2ldKKTuPFV^b;b~ET=54a*>MclbSnD$&MvL5k!hqwJ?H&S$7ly@r3ZCH@(Jh zFJh67CS)JwxXO@6dZZv7nZio$XhN%*k98x(Sj#`2F*0z#xEiN7uTL{HrU>2AgaYf)<81!HS+m#sV(CacEyeJ0^_)!9W zRHP$i;7Sr;ERzDRa}$#S%5D>diWRXo9}^($B-gSfs%552EE!KFm$Lh5#Vs>iCrOQZ z)Ve^dApF@6e{=)B?3}49)#(Xu5Cl7>#D!l5bsX5H_f-{zD6C7_!W633HL-$~Ict@g zNcBGGZAGd z>4RzKr1Ck@iOm0Wn>`&;h_*V_wXQfoiJcNEXS>t#$FV^nA5vNiIDsr-M4*x_lgwtd zzs~J>^y14#Misq+kYswRLJ2{F04|rE(0YoC-pgzuxk{{UA%3^;y=0M9IezVTetqnNcRI)J#kjBu=UcavYa* zDY2eL0X6@sP?X!W$*lEAl5(67n=n)shEU4N2F@f|%`9Xzu~ADu-rbf=$wlnw257m_ zaWZ%H#j=Xbk&09qv(ThVlO)S6sq9j*e%U8sBI-=S$qvR6B~K_p%x@ZU6l`a!WF}1- zQ!gSO(h6jiPD$jOpCWZa4tYi>SrQ}&vQ2q5#oU@8j6Td;<&N*HN(ULVD92gn4RMv| zHTB6@gFLhh0W(l(@lT=E8i1$hb6k`Z1PM}LNdmp|P`)6nGnPRYyFPO+!|dh0^YV7R z(8ZUQsgrwisUL5vqAz)=w|)Ifj1)BCxrf1|EiDP-BqUZA)VA9$JWCMzPCGe-gO{c> z<=FpUI@a*;w%5JuoZ`*gOBaY$Zb3fFP0Fgn=>7am0VCVgPb$tAtY|!Ui#;4+-)7I! za)huAtB-DN?l!mi&1?e!8`-c&mZ{mT<@G6~sShI8vGy&F2Z>$K7l(7FH{Ecn66D~z zr0@aiW(Q8;SjUrTB)W)N_)%sAx7PrgdF*-)BBFzHisf3vF~l-n>8S&g;Kp z5{ZZhk>dH?woFRiL5k||jFcL#5RsEqLJ|^J&l^lgNZ?lNhb5<-uj}UP^fx#k?b!nNa;%J6Y>>vEMWbDGj7;jvzD;yorK9?eJlT3 zz_=LSzPVA%x$wg60={X*j`^5HBqRZHm8>XvNq}v%BOIROy~0n$PKN0sE#AxwTHnGU zdj|HK6EY7Y+yP6gMLa|$-sXi$y>V~mZI>c_OT3&yR~^@C2x7Bgo2hGvZqDd z#Hv6jfjf@4cnjy#r~cv$01J#!EFg2sHdK@g<+B;Rh{cyVyn#WQ^&%+duq=_;sxeU! zznPiSk_ag1HGsvOV4$gk7L?E@gd@HFY5ES;b%pP?OY8IxrMi=|vRWlJbhLqa&?J-(2*iz}*- zy1l7vkIB%lbBniblS}->7>NQ1v6MnG&KFq# zDakCD}f)r|Um1l}3LyFFb_>Mq) z3*hh+;VG5kYNfy#fKyQo(DX0h%cemyr7~$vT~W~{1g35&3T6A08yb#8^b^S}3ip(u zTT#MVflNe4Ng~AF(q$m+O6jk&N;!Dz`Jkp5*4f$%IC5_7xb<6&t#h1~l!q~l- z>6d(&Hny@XSZPaznHZC7N#yEArc@cY5FmtWEN}#wm)QS4dCSJoqeeTmnUk})vx}Xd zh=ND}5J@P*gaMXfVM;JMsgPq3jRTp)JDSlFo0WSy!K&0KDI66c8=K3Jz_Bc)iypAa zt=sAdq1zfv#Z;*Y8N$1odQ8>nF&v@mE7X&ph!iZfXdS3RnXh1$`5~H>;~n0a)S|eN zrU<*KiOJF-xR7(Zs_Y3hL9O<4$&`fFm*l$4Qyj&?wBK0*hOnoz3OtE;&g6+oCt{x} ziMGXah_%uhv>}NIVvAmzj%xJP(}TOxBR%zz3$ih&0kR#^!&k?Wi*{0)F*&w^v$?9T#Fr=Gxp1<#!$fB@eT5z4S5Yj`?HOU07h)8nLrE| zS)mE;sEj^4mMcOPA5kV9OC#4@iO)>XFT#myQ8X)ImfHZK31p>t3bIst6I7{A_!v&- zBoZt;LFJgTOGy>uQGjpVG$nA9-eg-TVZ(GPBn8kjA3NOew4>{RG3tR5s{PG#t%@2F zl$=Gs`e_@v3r=ccqrVF7#k{|Sex0CS;>AS(*fejh{K=t6)AWdsRX-5Ed7_L5U#Dk z39MkMd14w}t-ZSQQ`i~3=UU9rQ&iS^Rj`uCf)u2&$;XZ;o~Zb$el!RmnHZHoNSkvx zv2q){!bh|DH-&UZ&!Sa@L>6#Vo%DmOvHiN&g371lojU0nW1UH<@X7`5;w?hSMWx7T zH4}<-Np?CBD%J^mw8z?-t#7rbzf1pD1a_i)5fi(JivU8b;Q|Rw$SLGHUSCTJjC4w< zq>i*;x^N1h^D({2T2`~8JyjUZ^iTgv4h`^#365A1#2{L0Z@3Q|N=laH$iqCK|> zeBB&NmK<^0wxyC43A2H?N5M;#H@Z$2$rcc46gZrKAn+RrfDs@0lsgGgwjDu3DhM6) zO=iI(UyA6pZCw3O-hI+uVdMXm)&w@MRi$JKX|I*Ei9wA(Itg$-XU*-;UlM6b)aXE& zkE{jhRJvm1gr?ec(AvEep4PI2_*qDn*Cc3+ycCsmX(LtJ0x*e;#!%iUfC4#lz+7X( z%~fdyxr_o`Q0k3OV8c=5*wO8k-1htuMk5o}z0ud}#L2v>cVfT%0*mzBHhY;;#gMgh zfj)8rjrNVpk{OSS&ETQJ%y&CWe%UwBvqk?6i(>7_T-?6L;hreSCCHi~5Swhen<1W} zH)mupPT;R+3iSZ_y+#nzH2G(o65}w$Q(ZR%J`rO3X?%k=JC%(IHteux-$!aZ@L+LtU z?NhF~=Ne>`ZvDHQtAgYD~@=xY?G9D$wFtO!eeMOWApH91AE^TID})Zcx1(z&o$8z=1FYeiKQmuk)n z7!m&B*X(Y4srp_UEXR5c%cz>j4$!(OcW26z=*_D7v4>x|1%GK zDkEC~jEX~`rw#w)v2o};k?G7W(ABNA4d>`DB$m9C2{dX^bGoG% zbf%&c&*eCcJHaCh5rCX_TMT=q1K&?Si! z+^vwZ8I15Sa>Qur1PH)&);GRTkT(I46Tv7`x@ZvYr1*T#V592iMZ|PR=gHe%oQ?O7 zk#`)OcL+n^gzQI4s-}6!^==ASYAv;|;zGVkw@+iZhx^dVotLZ~1~%hk zY|1IVEJpF0o$fntrD5R8M^>CSby=VWN~%|7kcqs%*`a&%xk}2HF4AhVV7bb}lbn}f zar0U@iy*Ji&*Px{uEdA{#> z;lTk)98M9kz@S2fLKH}Rs3f5lgbI}`0148e$0-JtED=diU`T-u87i3)Q_6q=QasvB zc$1;cBs8@|p;_~%O`1t+4oxDVrq82Iqa=yK6sVS-QiA%#n$u�Zp$;$r_gCSgd5l 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

JmG;qbOER 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⁣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�=u{~cq6VxZHH7wOC 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≷pESmgfbtINwtV7>!`RZm5Bc%WJ+fQ3*eAa z+Ji0);ZWX#mM9uOXuQ!XQa?9*&dc%AtNc@?%h8qaG5&Co3w04CIMj!@&=vux>x|0T z%aEUXw((j|S<)g3rPKzpp|E7rFzu0@kxu!vQA(`8No}__T}8%t2@_?JsIej-a1E7_ zx&&>G^jV3|94=lB4t3NBUnL@~5J6Rw)6vW@#r&ToRMqcv&aK3Z4pR+qyuyP}f*!1h zDG(AtS_y6SwSs8WgE-WVxYnQaPQHQ7V<}awDAe(kGgOmLC_T@hnX;0@o$lHTl8aB= zC>du>PPU0FRLwljbl2>nOI+=>JuTSU=m=}tFNduN9}CxA1VsNTyRCx>m2f$`*0Pqa z{G=cq36+7CI9gR-1jp&Ln~7S`%llP+nkUOt6|f^8-~c{gy`v=%wiEBOC z)FHBhOM*LX+FZQJYdKi9wb)}_Dxrl%mB`ZQ>6L12K!<<=U13hLeOGL4I)Z(WWi-p^ zi6qg85Ib8=_FN)?bzHTyudM7yg%UYxJle?&ntl3=YKi}vP{)+$5tOQtOQV(mNzsm2 zohQOGZrobqt61}klL%NH&hQ`VBctdArCcdix6EDV1S0QC8=|zWY$4yJEv)@*bL zW#S)y&6RS!+yRhZ4UykPeboPnQ;dL+HR_dCB)Z8R)(U4aw&WF=p>NB_C z;0$b0!A;tcpla3(TR-!Yw!$?`p0%hAu2R*VNVN%FhX_~DJqWZYVX)PR6PBayf*Sz& zwkj%N%Ner2#bF)_8I(0#WaY(yRS9O@(xl;`h;S#bjKHuwpd?nh#{iKA-rEEd6XsyO zlLV=e$X`zFHQ7|q&G9_83Cs%~){%%1toYQaT-E;?k=Gx7;ZAK8y7E}rVp@X8-y2l` z`K=9XT3-eXn9XR~5TnXLIp7Cw5G_*R#0pq+T{yRO4)v?sz$;w?yBk*=$?8l>NtQ}2 zwXKFikJNazOM)^g{hsn2&cDr6K`bbnv>NPD+&LN(NvkPN9=TE`PZ7?(PaafAWjZsZ zjUuD9=i2xT>j6|M_b&Z>L6|CM>;JD0~getx_&tSUZZ$;~fo> z)t?+K7MZ{%4^7Z~;ntQ);Q^>)o{-;bUAF%*rf4m}WA-FKV_hjRnaj5|(0XOpD=O1n zc4u@IlbQk$c~;n+C`=rdz*{5ERHTW&=!iiEKh4<-0Kw@aZMKlI*M7#)=XK5ocIkVD z39r5A>j-9zaM*`F2nl%T6JBa8+>9M*LYhDVaqQq+u9||;&zo2xTE$+&1)@22y=TeS zRohuvoFK-l&$i6wrJ)l~*BKcWWe+}7>gCT0JFilP%F$AcZS_={&}*$Wp|i4#U{PGX>`rr)$Z z6%9JF#hPd5bTWp$4$c5*+V;VY7{2_2kjckvg8@yTWCfncEhh-PV4 zTDbUZT^@<$Htj=23m-p;L)~!<=LxZ1rZF7im3Zi`Ys2e?K)qq{wbBZe@tF38E7f|8 z@9u0TyNE-cIw+6vF(>mfe{uhMGw<5)*|z!RyOb80QM)c~Y=?N%9!mgr!A!6oiECAY z@+b|>9*8L@S3sX=akcKJ?rh-X*=;!wCZ69zf62a`6)=i|I?jkn$KAs?!5~#>(fIC{ zI1llT&xTNGGdJ~9M|HBhj7#TX6sB?9Hd}O;0_pJ_$c}Xn`RSv|#q4GzkV`b}7))Xu^pMhAvo7^>HWn za%UB071R(mAs%Mz15E;7dBEFf*pBeA%N__9juVHabpg*6T=CkOfb80^wf3FiT~{N2 zA=z&=b`NggIu7PKw(b8tMT@ka^TbJPmZo!_;Bs^4_>TAZ3_A>ih$g++#VCMh)gJE| zpU81l5W0PDj%~k_7xTk(aGLjEOm~U%l>%m$fC9;1DcJci&G;Oyc$L5joX~>k;33@p z_@;MyRQK3?+4#WLbJb!<%zcWZhjfQPx$eUCorw5@Sl_P=c#YWi+Y;m|A3=p59B5&2 zfmm%?_Lzp@bh<3hsvn5&exjPtQ!0Plrw9DN7yNT&`=NJsf|z>!C^;vs>uVC-X&(va zUI~eoBU)dYxO7ph)%ta3ir{*QOBxj%--+_TS~E7Ei+>CQSB{7nzJqRvNuuc}tAJ(o`g;|ITbkWC>wRSvy7u)O)gXQ9a4#iJ zo4DeKSa0G7hyelz5-e!&Ai{(S7cy+<@FB#A5+_ouXz?OOg%J`;DcCXNKnV#qW<)Z; zqELarmoQ1fj3`AXLY@wVCQN|PBuars32u=h(r5%EQ3en# zIF%rfh)4%sRVZ`7%dANSj+NP!;a7q{#~RgQFzbM&3U#LK>F_Jii)Zcf?d$h1;J|_h zOO$KSFvS0_JqQ=^K_zw7f?b%TrG&+RHFJcF7;?ze5OE4*9a!-| z)Dx3bJ-AeM(Tt4+x@EY#;BSL?2UdQFATD9D1dk_gxECYl=F+EAuWtQ1af7v^6a4u6 z;ML!o6JAY#J2t_kC~Nzk_>>?@*FATS?`+U!LIvk#7Dq3UeMCu|Hyr> zPD~}#+d@1+NL)t~Iu?-@uqm|HfCd`mR!84q2T_Nt)G{K9DXO?4ix zOr;@s9c`h|SO9W{(G&|!09k(^B@tw1GZkc$eEE?$z>60Z$=yiEMJCX9FXm_-b=r9+o_X5I-b+P7RG$X>B~M2OpMIhFZ{^iZW!9Y<@<_RgDZKT33{b zA|&fU5GD#0s|do`Ta>L1FkVOX?U<0Ncm6Zbu?G30C$r5u`)otKHYAr6dqqL3jlmXV z;bz$WNDxolq12Un5#)vBuPG6#KoGhXsFs-sZT3-KGD*Q4n*&rz5KdEQDHFN{Nh?rQ z%oSVgrP@72=cW!Z*WjoMxkZz-k#^UR#RWYq7jsD%6==p03l#E$5g}$Sv}dNgGRyxh zv&b;S5sBy!$qn^sQM}U87bedNWvW_2G?|(3Ko4`}aj(T1RM}Rb9!0RJ3|+bvO3@AL z*UYsJ#O=~2jd?XeStE4Sjz9TY5X@m)7q2}oyZtuY(g8&@c@j6oSh`-9tm8zTI*kz6 zc@GqD68M=0<;XAD^fN|v%{@Q>G!N8dNp$x;5Mn1kWY|^geF~;UEcIMabhpNQp??pl zI-X7p3C=EO*?C_c5^<~E>9)k4^UCJgS-gUcC?rSxrVI=M5tk7&c?&{5Lc(w)a-RS5aStK^%Ug#; zSP`NraUhY49&6-+8l1Fb0tX4$iw0&p$rR5%aw%VjN;$F(imG-)%vE-XXS-{9q=7NX z+f>Tp%`u(rVqp4GPA+)7bfu*?v=a!}EcGE3RZ(RGX&V=NA|_5^(=Viu#8gNjJWHOk zpv@|j^}Y!qHI1>EJB(q}l2R&Solu&Dtfwk|rjafcS*SP5=EH5;X<44UmfDg)iU4B7By9taMF&IF0kkbywm`^I z4Jy@VWfGo6HAt3Rcsg5V&|Vm93cnWOn)=)_bv9i{5IDM$I+p*nLB&C5dKmOOPU6Ne zGi~G{r}8C;s!oijawwcOMU+@R5me&D8(OFt)7gv?O*EaVjkbiG@4(C`T}kOcTA>i4 z+TvIO9l#YKD_SG%Qg?ThN#Lf}QTymkh7C!oSYtcQi8K~sYMmTKRE3!16e$8MY^_=z z3*6NGZDF7EtBv+T5~_W2YY(}sbBViH5_LsF8*-^8+b1I73MQ%v@h)E!d63V}kRh5a z$R?U76^0yjwC?Q*Y!eHStLaoQbRvn-ra+njC?QD3BnSu{qD+Id)wBfB<=sZtFy}2t zy3o;}N2`L8;~dgJ%N_3TX6wNUyRd2I?B=GT(-F9WxS#(bb5;A)*3o&fQ^78NZ+RPe zEMFL;y+l3HvA`=3PwFJJ?X5^?1;SYv6FEg@VyHILxK)TqG$V{-u!EhhCz9cG$(OoU3jdPHA4`kW}`R`V7(>#)W#W0l$jeUOh zXiZBn++IUKxLC`~dt>-7bw!gAtw-vLaG2I8R~YOxg;0Q(vzvqRrc)N;)opu3TMJK- z-|RbpDxPQnxr@jaeoW)!d>rI%A2)5+X&0SP=7U-YTPa^XgvI>X(wAKami!YIJ3kbK>#sVzdmrzcbb`1Z=pzcMWK#bg%Dcwd)+gGSo zy3k#mp`XuD)Rb6+r3oHil+TlCAp1Q{QZPpp@R98tn*UjxADh+fq}TyNZr{I~?Y5MN@XU@o3m%B30uDh-RtUMyB3wSC1U z5+gD?L{bcxPvFKA3XUszq99#_8499|G)BfC*1wcu2~Cp(1b}`_(`_ME&*%iqeVGjo zU4wO+;_YAnk{C#YNO61{LX`j7TG)_WO=C^P;Q-#B9V+5CaUwNQU>KemMEutg`i^D6 zVKO$Pvz*=&Az}wzq2sZM8KF(%Ap!jz1S&caP$+?Gs6-q+T9u`UToeln0>#73&H9m% z4n9{bie3m_mp;0qVAPA&xezn*A|QH?7PtYHte2qup+goWfv}@4{vO)h&LeJ`gQTBC zu$&my(T5R48a757K3^AxNhp>eEt(AX$>CglM=z;HsgT|?IntoHB2soA!H6E`EYA#S zOG~6hU5-;9Jp@DY1Wj0rK-hs%2Bu*0PX1LyJGl_)rPyGUqLfYLw1gK-%$r_TM3dE$ zR0w5aWMYbeh(!=(aRL9xOBf;;+N2)_Wh+v|>nvj%5uHxFL;@(&84adv&Sr89Ol1_> z6!zc0xmpq`CQty|RiTQ_{6-soM5HwrO)%y~QN$WPQ8cBGzA0I3j9hh@;smma$$f<7 zy^w^#PE>S;4k1Lx0M|2`n*1e{YhA?!Q653^BO1{re8wk=?4kWVgsgDUcyLW`f&@ox z6lYut;Xx*RF`3U*CUmNffE=N)ZNXIlT8A)5S59W_goptC$qf1j66nNO=!9786w^%M zBPOJLj%WlDq=$XZ<5`jvtk1SmX44_MSprYNUewrOevsDxIJyxJWW09%BPDW=Y*5fz8nxDtAD5a4ta1BDprM5ulZ1f6;* z8HxnuXkl=K5r`odx-_RULJ5@|ka0O>_j%473Ir5zo2q&sn;^w^Do1Z&1cy{5=Yhn; z8Ah*oW=`@@*4c@nAs(kmX{KiDrK%u9um_mxD$I1G>77zWrD}?DBvsaG_qkv}NTooy zE5H3q_rd=nSZD#|ZJtFCpI?$wDSbzMV9O@$AG#e1AZX(%*A#R?VUA*W?tw?s3REGn{=VX(qfRxQqR)1?Tfw|`W++35^aV& zO9>DJ3ABJ)phO!arO^)V%tl0%2yJ(yMLwo!itdG)j4D}Vjzr|wF)iogomE~afK4FS zT8;kPZ>w?Er8<;2H!65U%o0gw7I1ZTMd#)fCU>DQZS09)%?tKHk+;ElBj1NetKu zrcHZd1my0i57`ysuGZB3NXMCJP0kL=Aw?2U;DAI)3|@yo0d7K&K$slw^8W9PSgA!x zu4zGQPpT(`9cK6$#P|kH;`wL-M9QhA2CLfaj-t|N9^)>;D#0`jNyK1XKtbjaObjJO zIF%j(8*JA?%*WJZH`PU?q~*ho#8j9Gwl>EUTm>oo&kY0c@v==bU01XKzmeBBfaEw{Y%i{fyLSR@sjWhZcHuliP?2dV0R)!f~ZVs zx@A%%L81U3lRby6%_Bu9tg2FJD}bB^KI+}GbT_cM03>ghXFNZ+Mw4f~XXIZ4mdf;tHVG z-435B2+I6TQe8#f7HvGYv;et}L?{g>6-iwbq0>Q4XeyQlsR|wOTvh@Nqlpz=d_|D# z24fy)wDz1SOO`QbY+llI``4cY&*7-ii?sHr*+ zP;YGA5RY-K;HQ^{Hd^0_1{<*`)}vosid_|6jy}j);NhE8YHI8VmXdKdQAX@&*Axhm`My1P(UmNYudYIcJR@DsX8lw!jE7{ z+U|J=;A*$XRGb|O=@I(%FumLwHia!>LuKz(hE(FlEeWbe2jp3`nr#UgJ^d{ zGioFS(zXhb97p~|Xm5fZSTwkH?I^k#HF4N&~* zrMxvo_-l4!3o~X2LrIj{GIzQhH(pX~QFg_S*h4G0#mfqWCJaj{3_vFI13|RH#)axH zxLjAzo{B#U4_`#M9BwzeO4dxO*nUfl6J1D%2BiUKijA^F*s%E?Sb_yQW0<32Aw`T# zufv=UcN9uEZH!x9B6m9HbU&&-p znZLO~fcURyK`3Q)o!1FUJ!fKHFGa|-J$@|#_YhCq7GLJZ7aQ0-ZRDSWO&rlhK56b4 zLNs^Fn@aH3t0zQONaQ{PhJmWgCKWP**UrRA>+t{;mU#a$G_zDy97)UdOxvAxvrOJV zyg4aU+}LG;_Xq@=4*(?4!vNF+_7$7|Fx3E*08>D$zc|AC`>(GEW+hF`Zqp?;D6hc; zVqo6GyoksV*V5v)gZ;Hq#_lW&V|L3IW*RqTV=}s*1yQK_8NC^r&PDW=#td87G&U&I zUeDK2y6%Lx`neZNr#Rr8ctNbf0Js8@gc28U!a(Rc{R{vdNBkF!1+9X_UFsUTO9!5! zX9~L*^kjRROg*$CGM3GmN2$!VIz+6+3jmI>pDacxW%z|ovvrNO@;M!9Zki{UEsaV)hnGvrkKBAe&-8*tq9j;MhgU>P0R3x=B9Mx{QI>dt zflaSR{s6E7!Uw6b34}Wkgz`WBh`0rmvX5Pek(AQo(8?E1s5F=&`dtc}TYP;tbx2*D zYNl*8)4F`zQ3ORM$NiS(+gj7Xc{`k$Z1=o`NZ>s{43Hvl-~fXK3vMyEkYPiIZVX0o zIFVvSix)9w)R>VCLwglDEtE)cT|C z&7Hl7b>`jwJO7?4Z&V*>2$zP zgGeUAy(o78-I@)PoD~Umq865tDEf^!*kRRyT?u|k5syWGQyyM_k5NQ_CGy6wbq#qELto zixR9zlZx6&$+ZDSsmGz&xcE@U8ELF>CikrWGl)E;aD*uWxuhs-KdKNkh&r_#7h|JNo9ydb5EifxWVy7#Oa)`>9#EU}66}!`@ME1lR zs6(rmTL?&sMdCvaochM3?*=4=q(M ziULe6%)78yj11+lSA(20S`2@SEQ%T8%GufBKEpptwhAr3Kcj09S zO&#%ct*E311Z$*UjjVOvesdbqp33U>h&+!iA{gB=Yb~;0sFJwMqAMjf_o<=&-AS*7kCwL9PInr} z?2Hb3X}X0x7B8o%sK!Xix^NooPKHXxC~$7)z3%Tt3B1y4m-w@AgR6?V^YEuB?|I^S z5ud1C$~o^`xOCrkN#(t?qmQTF+`7{8nUIZW1HJsyS(|f zc5BV+a}L``CXymODKu0t&GAP6T8g;EjFTiiRKX%UXPM=cqFvyp&D!(vKaAOB^3hKp zI8h6~NXyRN@B1RFbrqV#nbKlatzxN^V%3&nS1=$^rcws^30xMZkpv1WC?EPyYml(I zg0W;E66{OzdPSTKCEzmEdfu1tB0jNU4ucj{pG*d{xpNf_gEc$h3t`w2xZtg7tjh@S za5NA%xnyph!iWc7W{|<9jfi@(%H(vmkYf2INGy!f=BVVJ%M2tZqtnP);G(7H1Wzdb zn+X%ob(0;PWqQmbp|sX@xK1Ge320*5T~rvu8Ubx0Oru~6FDFMm?vWz#n~BwIb|uJg z3Nqh`KvKYm6jLFlRB_w?ok6@6wgK$yjLxG7AR)=E(v>HKH&P_ykZ6%1#)%>x>xpkd z83Yc}jWXANnT{;bs;lohqNax2cDN>kcyc^cq1IZ*z;bGeg z)MTVbkqTL4ckCHR0P8bN(+zWhVPZ%(H}cAfoG51xB&BxplNBotMH7xG;%f5bmG@jM zOA&}(Su$fLmK1YjyY%Nj0lLfR%t)N6>Q9dn6wQytq$s6wl_Vt~F^8TGn->wwBPUYP z0Z7t07P$;Kh1ZseByc`u!emP%Gs?JB%r8z6$_FK4L1z7JKyaa1meiS%k$kjb2iXZ+ zj^Y##?oIIXHCVRu$&86%hVOhLGlpreYCA^h=EOl5MPAC)vSOv)@;>@uCGc<($+MV3rR;UbpUR3}%} zTwZ6{+s+h~vfV{rf)rbnv<#3YR@~xDTv|M3owTzXQNVX%6)TwqtfNR$f>=t+TFPXP zArjMOR{o3sIW0|Ps_o&=Zi9u90hJ{Ri?Li+xcjx?b?s>80}$^fld+TVCs(xfFlzZb z+dRI66|B&U3Uw1l8-Zp--gU7qc_WZJ(a*yOE-y`NyxCHcwZGJ4iEEP}mg&6LY+AGk zm#BKic`c_Zm!S(dWowfh!{l#3#jJDH=EAFNp{V_vqzD64#s09Rt5neo?Y`w2J9Vc+ z`I5_;B_X@!^8v?vj@p=K6v`5|hzUnLcFE)# zZID*~umVLD>2p~at0K<~#03y>!Jv^X#|Q)GvN*nr?l3~>hDh6)@)TKfs2$HDx`aWd zMJ=vif?W~jTCR{CB9QD7N8I90M*L}MQO=~6vUE7K{RvwfNjB_eo>s>!c@{a79dLm& zWX=rzil6!{nk1-*+$_1l zz@ffJm1^cF!`e}E_qo#Hyb?-ldYz*sTf6Lr#Y0Y=$pXDb9*~AGepOL1p`7A#+iqL` zh+{!1yJ<_~0$(XF`dp5(LcI`hr)}y=Wk`z$kY|jvqTmroON(1U3VzmO3r!yk@)q*+ zsBfNg!y0eG697b+2#QQltWm;%g~yGG%tEh*r4q8eY7rl1(Vtd0oGi~7<=nAm%^L{+ z3<3ob;ZwvElNJ~Qlaba?u`Y+4=ZEK3KlhP3i5443vpX`ef-eN|wjhOKGm?O+J7mu_ zK{@BqPr36$YA6k73VTcG@!2j9)y+{}Z(_fCVWQ_lDt3>@uEffQ=j}A&KUAtjzJspT zO(9$jW72{F!_FZFCn@yeRxSduAT3Gy0|=xiX11d@h~qJ`ZfnerGc+&#P*76;PEc#s zMs9AeZ8&T6>P`s|9BBC~8(yt;%vG7i;BDV=Wb zcM@(hYS8Bv4q7bkehdal^r8Vprf2RilU^cVu;{}&sR9WoFDk9n&gbobuDAYfn19plV|A4CETDG4U!>Rz#>!dN1|{UWyknX z%NcWT%I>e4dW=vOaoTt={!&X)bP&rX#d~t9bnYejNQWT`5pL#b-U!IL)DRutW2&^m zSOoH2Zh&?crx-Oa7;gX}4PqFF@gfWIB8KP|8?q?}AQ*vBbOyi<04LNSA}LDX1)!n@ zPH+S$f+?YjUr zBG9Vx=?Ic58R9c1!VOA`3|gQK@FM%RU>A47AYC&v4Jf3-N#RD~tIo+1AubFhY%Uh2 zQ`RLXvLh%2~^DbW%eE21i`vLW=-umX()CgK!W#P}{{#RWvvUCdgkTl3BSkH*FLTX<%53cH zs^20m@I;1FRPVJKlas_|xdh@lngif;)YOovNVPMWM2d$V5kJWVKo_C}65w%c(;x

rLnKoh)$=@#H(h=RkxBxHiHQ?*!ZiZ?oo;-@FYc;*?2kF+!W74nB_E5U*Y| zYFMuHuxt}T8KO#`a6AmuAxgEAEVUsP=O?ycDH32x2cT04<>_R#X(ogwj^g)n^_={O zPY7J!G zd1FE?f)o;9O}ZihGIap9uUxhOR)wQ7OX;#KPdqTC?LMg)84*t%VqwCDsurLn7;`1% zbW6x?2Com5zN}pb;8fip7a?{@UxFZcEK|)=C|kl8&7dLn#uVViAYI@FO2I#Agc57Qj}C+t zVGBtUVAQT@8ykXl`tst)kiLj8MTM|LJ9Z)ej#UBhb^!QQUF*btv~2+P1};2^1NZS= zX{0(z&h^4hhs4u#Oz0-JYA)LAKJZdL?1>B$@pQ0rXdk63>Yz-u%ptb6X%WvA79wh0 z!gU8ARRuX*~o@X;AR`lrtWw!Psj0GD2O$hFGs` zGwzFIHOjT1H~yyQ^e#kbIU{gd5ARZiSvaI!xHqsocdIyb#A4zyT2^#}!%5DfRtJC# z_Jm*w)+HW?%n-36Tys~%0s%aTbwQOPa*<0|Akc`{T@v_1)U_jlmSYp+d+FA&GNOG` zO9~`rMu#Kga^hHZ7AbaTD85yA%9lI;cMwp82sBED3LlsuG(j@FpemsA|X z1T)>&MqVIwF{0QkLM#_{ekVe)itP<1v`kHxFAahP8bUPV6(h!gH}1?JIKhd75hCsv zB9?d|3abqQ4g3O)Ef)AgDAGeH(?%VYV~eVgZU~Uh!h+$HB0Lx-K2{CG&k!G#S|UQy zXaXJS>Vghu>I!d=VsJ-msVgT29tlFQrmrfJAUb5_icXET)KtMj?vP(hcwvH*pJXA1 z@o4c$^Y|jnimWa?_5q7d8Y#ch*zVIdgw&G%=x*^i4CM;N>?-7!b)Fw|?eAU8o6+);k+J^frYW6p$ zC`5S90st_jTC@a2@uHt07cxXJT*K8ju%cn3E*8c5g;wx>$!8)>F(VSUA~9L&}fDs+g5rBKT^gb{4xB9<5r^QQS>paC6%L3Xco&+S+6yzmAHt_0?xhLZ{(|xpJFf>TbegqBT5wpbMjoj90m) zqCzukh8E%mmx6}>ZZPm7V4{8IC?qy$Z3L_ZZ3U0b#mPm+%O%EVF~X9oJ>XBiSdHfH zBntLMN$hZd^Jtdsd4kDyWS`MUDM_ED$v2RY8LfpsAWXZCx(7kGEGo!KhV;s@qEni? zd2MQO&;+EUFFdoCmD;+s8~Y+80sd~{xi`Xcp{^FeRJ|>N#yN70-!6SA8F3IrFWz%= zkCP%e3PYyzIq~@UwE3}VB03ieqQ5D!yBa3oo6V9ZLF9v?sSJGS988V^RDYr@Kov&& zM#%fSmuQ3?DBKpJps>zj69oM?AVbfgO0_LwmDPI|-9Vf{x(ew<#eW^ZK}*aEOoru> z0-s{5??RIQq8x)SLI~YzB9eJIJjf5NS0m!CT>izvXi^X*S1|^HtP62XfbWBgqq~7U zN#!znAMURxTX;14710Z8HT?p)txB*~_1+ViG|=6#LxDYEWzd17aa z-bcw{I?^XiD=(MG=W;-j27D8F0M1=~bHt4Hn<5Cgb&B(Z$8J~TqAb$O!QQ7U+~RGj zsKY5e@Y43uG2$Z(A|*&6-~U0*S`pxRQ7LU*ffv*z3=-GjmDVFVCVE0Hw*9lrM8gTg zkKT?hWJ`iIzS6Jb;6r9^HNxv7-c^7wy-7CI=wc^=U|hcL%dY&<^7$^ws5*9JN5o@h ziwIHwQf6DKIuTzOW?G|LCCe|wgFC$J5l3ao0*{TTlY|Id)eGE++6;yITPcRlAo9H- z+TkqNA^T36A}XI4TNiyo8I%DEEr*`HK|kp)BBS|p0AP2M?rLSn&4C|ZV`a#|FZz{Y zjZQt|O>!dQxASxR<2y1fBkH=oMyG+Pj>(3isI$xfU!u^uO}oSiq?-qk`FqKMGkLJi zunQuN-bQnUGQ@_Rcy59WNPGJo0_W?lgnc@+|B`Gy2OH&o1H#-TWGVk=ME`?B{sCfu zzzG5caws@J0>Xt15fUUQMM{*04JS54LQ%@X1W7JZq?q6%LW?3rVk}4!p++r9LJCa( z37}xig&GkmRGDz0f{+~%x-1xEKmdUXN)`n=pyz;-B?SUmDzo6vrb?Si706T|f&ovh zdi}~U!bgoY2WUYkiQ$%lHB+KY>UAnsfj3`*MR;~V&AeutMii(tD?_<@%ii^h1i{Iv zZrLv6d)R8dl9MS47Dy`c;j|Pboi(gEbY#vd(~=gAI>6$Bg|1JRh1~G0 zmd35gN|F+Lw!q&F#fI+K)41xA$gN&R7$IxTvQ?KOJZk;!bHs6tW>;Qtt7!2Bk? zS|Dz(yDP$dTd;cds|{74;} zic-i|7kWwvG}TZA1!-Vp4QjU#jtUip9d-*1>EMM>F@&RwfC*$}lFC8I*LsD$9R+}5O_-0v1(q$NK|1rfBN%IYcp@*ZS=2ANi8H!q75SC>aidsgN z5^j+F^{8HziX?@Y`cV{Sj3p^rl4qJJ#oKdcR%Owj+r4*bd>>^<9$`%V8QGm8Rn?~6|7UoCH3nRRHpVTLyk_h>HsdyGyupU1r>mlycjl+9X65yI)lqJY4U#ygo0|a$xP=7Kkm&tb} zp-_3;u3{p^+d2d6%7_p=MEJqfhdR(-XI} zsV76b%!TBKrt93QA=I-<4KGGL04+%=K{yJn3`mil*lHo%1Ks&Ba=ztRBugDzms&cv zv`GytX(#E`ndStTB(5$+EP@m6`hu+7lq8I-+DLOo2cr!CrZJ6|vrYij$i<9I@P2S) zT7xA!iGXE*a!g}Yj`)#s4W?rmQ_53}gfN9bNC`cW67>RT$&W}6 zk{+v}Kmrhwoz%>DbHSiu%45LuOpSG%i%duO^p&27hg3}gA^Tc_q4^B)G2i+K>&}Kt zpU`TLsku-aNhBxbq@;KgR3W%Fe3~==c$(2sCIty(3qWOz zlUpj+sb7*P z34arpSxq>o{Y?M&T~vc*%7Ux!J}i|s8lolr*O9a#ZXe03aG&ZGoSnV3S@l8+QW47xLs{4 zd*9pD^)}6&$OF$@1tVWAHL+Q)6k2MOpjYc;j&H_2;Z35@Q~SO%MT+fTRY@{W$byB8 zs(XyIpfJyhv?onXf}il3g1zv41hiyrTZ7@-wCJLE#SNX`rSO>F5`ss?COUB`Z6-qn zJVmDk5nW%uG6h{VJfBi@o#hT??&soKm)<=bjRIV)%;t?D^GrU-$6MG)!KpOd>=Uhq2TsAkDjrek8B$U;#xYniNS?gL#t&rT!sLMXs6WMg3~+h2BpZL0Bi zm<-LtB~M9qqH(*>zLwgyF*)h8u|?@bqmg80&Q7l|%@A~ZMM^bNH$q4k>n(}<#;A6Y zTWD5DS340##kSO8`I{y_E6iIWuG!RBz3+monOO8)c6K(=3U;)D6|7)~`X924a?h+?@samgqw{y!$9uZo}^dgciF-w zNKp@4oLvfIs0S&|&Wct@Ap)DQ$0*1E@m7GH?0mn76eteyK@Ff48qfIP1;2%~Tci~d zlvfkyZ8(lGn$+98QcCVylC3bMD;XV^>Rg0C z{xGJhra~&W%gRj$Nm8#6Uu6h2d3+)o2s_!O>0??8` zc#hD$7IRO66xvatcHk@lQc(Mf+)I6jOM(@WNWdm+(Ybc~XbbXp7tlu0igr+|!l@}x zlqpXoCzM5YEKbTfxug-?8CUKQqR(_$4}lQhH>1ukS2 zgz51fP;au2~rSqThIzo zsDBdji>=c*QV}V~$chZJ7KepKv!)g8v^Uj5QxWnfm^KtWge7;eZA`LPyGVyfGe)hL zZ!}>y3gk1uL2$wmULMmi5sfR(OU?942#(NM}YE1!PbU zTd;&N87Q$hjw|*b7C{C$=zSIkMTVDz?lN~KGJ9=BU+uSm9<^W#F?+7}X|q@oYzS_p zqX1OWB^c=cF~##Sar163!4$K%MtJdu{3jZX@j3TsFw^*I^!7whS7G&pAG&r=T_uC5 zSc5+@2I+_)PdEUhPzxvFY&$uQTTmh2w*}n7eFBkx7gP(_SSh3SBEGd0IKvfh`IIG5 zZIKZ~r0Wve80B%?ipmbc#H55Z4Jt$)M?_B}D;mfU^QJ{=^A(b1Z_oyk zsf9neqKo*X5qvmGpay+(qDCsjcUDp%bQhRrmw$PID0yj^ES46efS9d-U<1Gkny`rZ zGZD@=L4Sj1Klmdgc^8=JkbScp>jj@iXO%jMP-WF`pVAQI`62k`PaT3SNBRjumUGerVHBlG8sYdRSLQfV;C}~!>#GDu+rWTrrE)`6; zbcsl*X22LtUm+(zbrnH_8?N47Rd zXt`J{7^%o;FigrGCP-@;q+liCh)v-O3?Z4KYOZ?5l9hsj#tLS(_>aWbQB9*w>FP?o zI;)ztkzR2=x|&b#MPdE-EmfgMarCMap)w1Y5+I}_lclJSRYDClIhC`Z@XA%Z0U@S( zu5gC2snHd6*px~amp=EdU%{gEQClEWLsa<@YA6Iq0f8!66rCi4Wk^Z7JHdc=NsQF<#`(~oVnulnUUYDw01CXh2MYdLG zC`{p(dbY7@Td@ihxpm|-Z!4m>S`xz=GT>93BP%gYA*-j!Ri;^nPQ|M`ceF<4dHpy$ z#|I+Gfe{9)9F;plm^(nmS&c^98o1Flb-@?5bgg=r9wb2=5kaf+@+==Qt^>dhN)rX- z5NQk{c&N+15z-}X>Tt{$LkH_3@#BxT`JRHM1W|$zflG8eDjHS^7ek`|f&xLn|Jy3B z8!W#FI70PB`pG-_F%g`*sr;v+%o<18MXjL5J4Q30pzelwp`FkZ|h@7>xj3O58L3KG%6Mte65He$B8D|2qaSL(6a%mP( zK(8xI$3VEmvZpdY^RY)fxP`k=v9hdC86KfwKq*@~e7g{c47G%u1iA`_jMkey78PGM zeYNC9nT4O%(zs)zsNf>TkCHTMS+?kcZC_Rqb6m$3dTghwMlojp7)=B+RkW(dqq@YK z8o7%aPhxIgv6?!(5CmZzk&_isfXi0XE4gN`cp+L{%n(^%u}6hR(HkS$N`keFG+e50 z?OL{+i$EHZ%HQl2@Y`CH8Dks>vPmpp$hAXb>QzHmxNUM`>M4NBGn|VYwfKUMtXOkp z5naU8HPZZod$h^v?9Je8&?L%t$V@hU6jBtS!2E>HNN^`JkrE7ZOgyF&RoR{@Ta`gZ zQyDWPRC#V;qX0Q1d!m8L_2xqAVi6UIq|0G8FL8&O5y2ark#&Q)>hZ-WaVJ%S8zFHa z{E=OaV$5rD&_{h7I3pI~9CA#}k@%a;h6~jL07HXpyFOR{p%qw=sA0%L+rQ!jvnlPU zkweysqobF3)u3ZF8HQm=rxG6PO9(n5j)EeQI?7;5OC_SHeu$t{h}3`WNdi72ZcBQhF-|mcs)8%m~a7Mq*s0NlHK})$-z4BOJVsJ9VZU ztuH--7|F#S0YGC?h#LHD>ATd^>c#SMA)6J*fX&+@v7H$w3ALSmLnGFatwzIgF+!}_ zHQTqZrmO%=v-T{w@bw(AOx!Lq&`CnsmVCABqkFp+$LcZDTY$A(yA~*t*RWTgBwF0t zv)!fL+bcYZnOYEPM{JnL6vh0|oVl4vMwp?kB7qA3(G{3(Fk7PmwyX8ZnndB%?z6)$ zRp6K=%wKWGeEcCjk{tZD+tp_|wY$w9!Fx~lU9GKZS6Ya}LDza5h&WN+V7iu%(%$jS zzNa_<|4K3X0|I054Yp- z6%O;?CGQcP34k3o%QAczjr~1O5fd|?nNQJ~O%5zF4>#n|ncHS2w`;`NX7jV_&?B)b zWIgQ?G5|NQ5KM0aP2mP2@$>>Q^#T$9^-W(8OwaTPvGsS+^-WRrUyl%1zYt^(O<(U1 zln&pA_Nfa0A@Vigp?x07mema5!k z#4r7|AN$ph{MY~d*uVU?KLBm;5tV)z-wRC`AM{eKSZ@Qg(oTSi=Epb^67v@A!idC9 zUc@bv@%&9Xl`kytqeZF?5Ca7NA`w{7pg;fx6ADD2@Zdv;2OAQMSkYpVg#&;LKoTWl zLx>S5Y7{8NB1n%GA#U8LvS3S>F=fuAS<@!X1O;;@k)U8e&Yc5%0v(X#rv#!vkseJT zAp+8+N}Dz{Iu$CT$$6n>CRVq}fT*IPen>DE2sB@8S zxoOg%Nx%jD9t`ZV@PNTLX&Oc7Q1L*65g0zUm@(qQoE2dj-2BorXN#Fb3S>M0<6tE-)^wGM2OGZ_9kEd-u(H{DkbkeDEa%t_1d)xWbd-RZu}P6-`Agie8v6zyDvWa z{38QB1knS6D4E{tZ90hFD{Ub0sJp2l2MbDKInj>etwQ4>8c8_fGCVJe2@@PqISC-F zXu6Rs+wC-hV2tR!&Wdx*G>B4@X(ZXUOHrjH5__nn9hrm3MaWjl%p9T#csoMOEc4^9eo@C0RHSD-524fkP)32Ro^ewY2VVq`5UHeEC$wiZibd9yU+a2ZSB z&x59Y$li%<$_S<9v{czb^o*K0Wz`INIWkXKPH?%@9>s~_n&C^d8_E zTi~SWk5YMY3I2%aZ-po(w)>1?y5qB>)g%H*u%AVYSCZ-J%pn`m*Gv$YfaiGRd=>G_ z=gb#DMM2JaBP3x7P3V%&j08|C8`xu17BtidaBRKnUjk#uLImy1a@m>9;!r{;9{L7I z!b2MW0Y#+}{nctalrqtGjJUk^;c0_f(@KCCcS0;?QHxvTVniC)MUU|hagmbA4~aK2 z8>xqZG(lkAG~}B5q$F_rLJqX=i$O59CRN-2@3WFs%lnDRC=#Uh#Nj)ltTNF9i+ z{@hE8q=*QL=*m>Q=GA#VTNi8ct;l5*u8^(eEDoT3d}Ttg(z zS{KPxtyCr|`=Zj)<|30tHJIeOpR+pjOlv{4KnBr*US0dz&3)&TCvBf7CrefTmv}X| zNPKB!heyfWlux(6g^o&3^H6~C&5V5eqy;%L(YR_VC{Uks=AWFlRS zEmpG-WNAfwN?w8pm8`I3Z+jI7nv6}dJh+9dOMH})vp%Li)5;Qyp@BU{%2{IVb(?NT6R>RuG5*o35{ zV$;m?-_6pBf5T)D3T>CTymy-X- z{ zob}72t-W&7KyL7Er&PgCQzoooj!A_BmXOUH=8=iHS+&|YBn*<7Z}tKas)3okNGryk zL;axiTmtD}Ygt(gJ(H$!cti3W45bIzqkSDK%=3WsXRAhS^s4%_(7x8yQ?d?K|IDp? z8j&b8PIfdC9oKfdH>pS+fFxjSYA!!D!&p2m50Su38LEg@{Gkm&z{}vl;jKN5Z76(c z(m}%UO_2*GvkdOleBh+9GvgRotKj`2;>g`ZWw?Y?obdHBxuVM zuecXoosx%^PHa%hFP_wtHo!TT;S~*Hip&f#EAr0hclNlH0RFW+v(Ld?8TV%I!|o-4 z6455Vi9ZaYiC>6Vpf}m4d{C6DDW{$5nCn-}$#d=+2JgWUChlY2rz*IfnCa)C?KYJr z>d|C9nXIeG!MjaQIky?lF*M4!G6U<3XGHRh+6}LpCbO^}7o#`+*H25ia#=P;fN9mBhef+iJnZ*5nmDA3KwHB2of zn{;+|&Mv>TrkI*DwGulY4m3J%!WihwH(e9Jb@DXCySDmc93&7q5lM+wI4ZR}h@v`( z(Hpr0w3?i7y8&>4*b@qti@gBcJ8H8#ALg-|8>3j592zy$ikY$jnh+F-NBTVG ztF!ByTH zjdoF&h!ICTtT7mhz937hX`?wva>q1uxV9oDJ6XLF@&_jyfMOhgvMY#vtil2CI%j+w zSgbkdSv;D9iPA`?0!xA&!MJ)f8X@yGI_t7A>X`&lJei;);s~`_=@xcVEf--Z>JuAq zbVZ1vKhcS!_A5x3e2n!oh}T;~Y=J79L`Nn6d=qxWH#Jj8j0DOP10HM{uCtjf-P0e9 zN)g)dyQ?5|NkIcY0hKs;LoHIqkFKEL`Lb9Z@dC8b8OPR<-^8m{?IYkKy zysV@_CrJ^*VXXInN@b$IG}67c1hJnXM4qG%f>6t!aWw)WOBX{(1JVh@w3d{#ntj?w zfshk9*@S*HOUpDyhe@5nbRNd25H1iQnD%`I=})m*@Vr-6iQZ`&E8l;oAkq;$fn+ymJ$I*Zn-SCysmMq zq8%e8FeDEMStZ_t$5N9NAkaxb1Q%QkC9F9Oc#@Jf0!1Ie$IbDl@|;kGq9dMq&px!X zhS11XTPylvnERwS$Ot~^WEf64(3X-a^IV#pq?*=b$)pLDB}zmtqEQOHQ7(c}5v>}) zb51tQn&tEekJ8SSbirpsp+d=s13jPwy(lpQ*NO92#K%BFa|$jebLq=F_I-TMp=xEz%sE9knqzEG02oQop(G?a~UEUzhQO#7ftY~%>~=~3FTnmct7wS10`OtO8lqmByLFDA%NBr2Wyn6P>`}!R<_tQEFTCOjD2BqvzO-#3I!%T#39P6W3Hn zE6FNqy%Zx;s3{c)f7M&iJ(XOfj6uo0j`XpV!ZeB_kkjF;_#ZS*mN%0%Wn^LPHqq zzp4>i!AV3eshAZ10k2SLr*)YS0`3&f6W^4%@KSP`tDOtL0;a4f*8URd*s-<80WnR65KgFya zLvl7>fx5DxV2DBBn2>_tG*(tjl8Wiw@{qREt4O~cB3==DuT);*u(T2*}jJVZ+;ski_fp5<8ifLzQHU zY$b$wU!Q3X6S3)^K!Bv%S;>`WFM<%NLfU*K>KB|!xFw`h8YB~TUTcjIDJBo2E~e?5 zK#8%yk~Ro(;7Ws7YKwqOfv^WMFo{=vo@I9G1jLxi>{(rmX=YYsSDe4O#++0R;**R~ zh@NHNn25(1)1qrm1SBq!h3Lk~OGpZ8QnTSw(pdJImhX!RsE$mCfWT?3ZM}vPE${{L zG{CzC*Wi3u;>PK8E}I|rRMmw|0Tzx%wq5GAUlAlQ@e-KcIzY&d=)aw5$;MWY5a^x% z?%*IIXao_7;JOW)_1Rjc-dcf9s!0h){Oy#GjBXtn6Wbs!IS|kkD!=fkDwUH_umzDT zs^HeEmF-wOX+GSE-B?cOZ!3^AUhBvJE%|y$2qtZO6(hSO#iA~5Z*EpvA?D5w+&O(_ z-#A6k{xScJYRs|f^Uwl}*^yD8tGki{lc++wWgZ7C2u-MnyLwd$p9!xks?7Mu>ZV^7 zL~wd(M?-OzxvbAgHVP8m;pW`00cPtsPGIgOQC5ZRm~}T2S3$&uZt)hE3&*koSJ8vO z?e&~G!Y&BhHi%jnz2SB6hdt zC}w;!S(FqYXupY6TpjoPHHG7`GskHuk%CQlKwq$jIbXd5&;)b02U{4whl%rBe~5N~ z&}FX&InnFa6bONo2|PD)5=(3@jKSD~cK8Q-ka?Q_uLrtnb1CSj zf7p4Rw+B{82^W76JfC-&c-3jCZFqac0qEB4!|;MYdYF_KWC{9_f2^Pt>tOsuLPTIB z_=-L$`8=1}o5mzi^rRjUFi_mf;Tpzm&)*_V)j-};rh@TV*#dj`g}e8MU+@Q+$9txy z!I=MtU*LJde{)D$zdiS5ta+Q7Uiel6TD$_=X&uE6$E`Dq2nk4X2&-Hm z(DY0$Zq$KCNNey}(SmxQd3PU$2UPu}P6?gwdBWd$QZV7eFD6~FQ6f`vPoE`qPI(Z= z_<8ZcQ!Ms&WpAgyjBOv>JiQx2g?MJBRY}QlkEPvXo@@;nNe@@>x=IeK5fEXZfAi;tL4f({2A(z>@@{xC9a<$w8h4eHxq@(WgS zj|Is_Ml7{p*P${EMu0p}GE0sEP4~>%P@~U_RX48wYH{`H!LnI?|CLO7F>j|3ceAv- z5P0v8CW8Y;ojP&eU;cjC^EHZ$J?GG!vnrUN9^Y1Y<#M;%syO-b=Fg)~uO6`Q@<^ZF zCPR4+Gh}E1qsNRfr4#S5lKm`B-&?Y z{iW1{8Y(oAXA}`NQ+&m30@qrk3_zWV|FnV`P-*?+PhH~;K$nem)l=bmKLQz~kVCEq z;y^|kl#o&ilGT-kEeSNAPmTEm5t36DmDyARjR;swU){FSmrz!8)rm=wY1o4X;>6%+ zvsFaYnQz`ir$KJgl#qfD5@Z=jwyE^le8K^T6oC<~dDMc3|Ano~JDacT_Dw`J)e0TnLn8$!tl<#tZ|5;5C001Jav7+U+L~?CbX-N~d zkY#8wWBaXipHKuL=~9&uB@xBc8*22Rm8G`wmOWbtl;T>X{xpEgHNsUFjdlHUF42!e z9{G=Emff(ogHd+Un)NyEl!iv$mV{*Qt#r5LNY{o_1ZOUtY=IQdnGnloPE9Sb0iU;Y zeR{HdG)te4jU3&7iA{0F{o3zIe8GLc?=|9*@9=`bF ztGAo)$nE~4lmiG$lW4_9bfWz6!~boV@h290fgE|Po7oykfG82-Nk;Z_k@E?rDUi{L zk6O|-!wu$veM*?Qdb0_)s0%KnXy8Cd!9DJc|AK?$8zBixD41nQ5KRQMlR>DGH3_j# zRsh;fRT6+O%^}b?5i!k!#&i&}KxBm&Q`Y{52dAJVz;u^$Nw<_Z7}B)vYb`vF6HTQF z=P_^|c!ynbpc%VTPe$MDRmxxF(4>}Y~ z3Sy$NRPl*-T%rznlf1-8fefs$g*|N14pvCPYDkd6CR)*sT9D#rX51tv$rv|0LM4fL zD;*0phJ?;Furdpap+eq6nnW2%f=FQ7gcQ;xg{06yuv^Tq;&{A8xoRNYLK~b+r$)yV zMozUf%rT+zLcyFQ0aDO{B(6pgrNt1N|Ih3sH@g`$-^pg1Pob4Snh7g}46Hw)q)15u zCCrk6i;cC4=Iw$P8CU)#3H8yPfKGy;JP`z+QSx2#Amhsh*|RJ$DUmKIa!7XyOq?x2 z*+U7lI&O;4n;O+ zpAuC%0yeRPMM>FO$`v+VMKlaj|0>>w`b%W(1R-|n4>2t_v8>E#u>-6&smx^&P0O=HyE}gh|BqkwjhR^Y7uX{j*HsCmL^#CO>C?pEsqZs zlaa%Aldpo&!auSj5Wkd#aP1(Ke1&UZ-a_+sGCJv8`vjcjLFF}Hx~10yW6*}wm1CJ% z7K6P-6lfK&xUwY^{8-yCHI`Mh(>;%X7(~tnBQvnq>} z1#WW`=loiN5KhifU=f3oOpx)su*-cWAwC~Xra6@rin=W|aNX(R*B;YornW3>W{r{i zyn3{_c~vos*EJIvkYUBKi2@Fygo2d&)TI>2xs_UOCA65dB3p=Pm~;>hYEG}^I<%SL zCj|jEw9k%flt5bX|676Fc>r8QEZ}%M2Ez&jUJvpM5^Oz?JP&)LP<4q-EWV|}4#Xx1 z#)`gsmF@wY+$AYDND%0xfb*SOASWj`%4?1%3A7x9Dn9$*`FkrOn%;lZ{dY0N$_&tjT{7TCkimK0$%}OhLYmP(9>& z5PSG~IDM-$2Mkju1o#Duf84-K`0P zjuphgNl`&y-1LE zDWT=blj#-25|)Pkb=!8Wm|_6W-HglPEkQxV-{{SrKons`1b_hMUds`n7d~Fd9ig4H zoMfD#|AP>mGgTmFSlguuM3M>HCUMZf^&MaUVcn5jAR<;D{^1OU55SRy;f37!0V0G{ z2vPY+g6P|2K7oh7|N*Gd>mA zX#rWB#8zA*a4DmF@Zx;{T1A{&0J@^O%_3kFqrT`5o4G{GLEgKO9@4?%Eq)?Fyq?l& z1OXC22W@1i`tb z+v1&D7b2k%M#SVP0n-uS;-#ENu95f+31--kuP{Vdh-1`s-X3n?Qx?veaApNDB`W?9 zO|T?Zrpo5v4rUO?R#0R=mLoYXV#np>Uy$T$isB}UBtcZ(7`|oXb>$fr-8q3*|1xP> z6*f&c1(Hn)AObm_8$zAbDd%k_lV!lwjIkI+h$RIjS(0I-X?~_0&QW->go2Q#X_gUC zC_o{uA2Slg9}XFC9i((BMspg*I1+^tNSlfUCAS3#6%r*yK!(&w!Q^!zQ8?xz5`_5y zhv{WvsVSj53ZM`u!4m!@6K+ZJJd9J)RRu0h=XGUP08Vt8=ZN0cHx5SOg#|&j5JYGs zSF!}(b)`%A&*AY2a|L8>KA}PcpooGV(-0s&*2IaJXi^pzl%>?7sbhIa#(~CT$~h;? zdBhQ>+&H4%ynTg=-e}cW4n++NR6OI^4e1z_CW#6hZ)`^I$QXk1q*2ae|IC41APQSF zk;dSqB~iQ~TOJ~26(>|sMgomSe6C+f9^t>O-$86f%N?CZrkqBeA-v({Q4Rp=DWNB( z7C&l)L<$JMnMB+8o@6i=Y1}6x7K9YU=nRf2nM&2)X`lAZ*Iz_|-N@DNvFWWO(R|D( ztR~$b=3_wlq~SG?WF%%`KB^|ZBVv@QZVF(FZkD%<*b$A`0liLowA%kc1)e${mC^*B zZlo;%s!M7_w|eF0eclw1Yt5-As-kPU(q&6tQx0`s-zh=XJk%kDUDRcUHzJ0C>dQGo zMN|ATB*Dd|VMUl;Fb*E-fuuk7#@tky z@~qil9Z@Mo$XQZdj&`EG%4f~lA!(Q%K!&EJE?ZCnA!rfa=W(oQsvyWJ*~1Y;*A_%~ zvd01%PBrP46UB-YpzS~$*|E-+Q|t#p7Mefeq>hH)VRF^O9)_cklcy5MOn8;YBFfoh zm5(fdgtD9~CV?l4-pK`~%$Z@-MQ+pu0bxeVj3&Y4j-e$E?9`5G^7$-+%FzRPsA;;v z0Hm(hX51aDuIriCOM{(T?rMqEDVtWx6;ixvp;l~Q zY^M*F9aS3G>K23xux_8(uR++r0OT*x@Dr?L@sd)h1=0(Jkm<5M{ z1t2Rg!`AS^ny~0OZt5K`?r8-MN6A*4X}O6IwzWhQT&zUin`+Vt5^Ebn=;YSgBOdc| z3F)!w9)uA$SyIBWUp)xZt%)wfra}0~uf{MX(g}dPAt~l4Vjf-1k_IO?-MNV}=qZU_ z8Vsm4YqSPW^)7})35X{HMj01G8TVSVL8IX`(DIy5>m(1~z3*UrUUo8KxoJU|_VSO| z?=KGkK~qE#4}?JnG+z0Y(#`10l5QNYv6q@7|Cj8_8?rM(E%O2+X=#lF&900_SB^?P zMRYcDO`YLy8XZBLbSM{wMat+CLr{e%0s6shVZ9gWwg*5j^u8GJ5LbjS55Nu3FG2Kh z5BD@dY(NG1(`Zb@eJr(IePn{p$HkuNXdsw^5T>IJg!=In0#ESetck)b69bz|e26S< z2x*e^-=2;xJZ5xyI33@vXB^gS;!))>||3r9vq#b^$fQ=1^Ai-PW956S*IcSHbn zK}WAhb~vgkeX-KnHU{Jhw1&w;7!{dBj}Y$sVNYq-=&9-y-vq0moPp@=!uZ zt7xkMD@04brq>m%wblFbspbMfN_iYdYD0i0!VcywEfzFOAxg{_^?nfoHy;S{jT}AL27M}9*iy` zZcn0Es(M5xrTYG4jQI{&&*Ju8SFAxvTiN5Yao2De=W+*(&TTXoJ{@8%of1qy0n2xT zj^2R|MY{Qpssn}S7EXO^1^P*Wfc9ZH^7b`>32^{U{OR&luexH`K~c~8L6pD%6g*#l zx2=~!xz&NpC0UAh((2wo|F6q+W>or9SR~)M@m|^-g~ zsgI;wwyic!*-2#(NTudfYv)p{WM1AHATv{tZHGM5KE0R#$ zU$v&FMTE`85wC-gV$3xP>Yx zBjzwjLpkxD8*S@m|K*4LptBxLs4`7R#h98iO1(!EO>0}f2}}mLQ>Z7P%kGs=8ro8% z7Ko6H&~n54VOG38g3^=(gr#9rqviKY7YIOL?C(WHbpX18QL8?>Hc(c4IkGqYmogoK zO}MbrjjsVjlmP<;4jh=oU_ylh5Efkc5Mo4$6Db;$QZXXJhzK4=NQe*#$B7^*ii9Wy z$wUAOfectF@g+lvQDQ<&a&h36gi0hz(70g0l!r=$3@94FU=W2$l@3snM8U(0N}4Lf zsdFJ#gAy!8yol1_K%4}%P}C@KEWrV36Q;!Ykn3BybLrN#dlzqBy$M}FOfaC1K@xJ^ zEVL7KK%0jg{|w&P`xvs^z6lFQwz`$>*^^wQXqI_!tWc*0dH((QS)tq19#?l2YY_2( z*hy!PCO!0aL?t{WY9uPNs=1G}XlG1~Vigp|SxSRA`IA6oPPo5fmZ=q7B#llcG4+919`xDq<_G z__X2=qa?I6C?)8sJV;9~&(cVNCBaK_AOp*5YPKMvVswh&I$LTW?s)Q4$I~VX3kmuX zK&Yi06{0aA9#hNp#$8pjbs&>sT!^)=Br?w~@C@ClB16w~EvJMYO(+5|aa~JVyrOva zEh!is=*Q@$1(e)!%}vO$glyPQP#Xqt*B}?tH3;6u25`ZRdC%Q9z`x=fOA3I?YR^mZ zysYTpxwOm=*I{i+$YFz$NLb9el>M(MT^9nASc4)?g2!vAtMN3Amovzum?|7-B_L*H z|4n0x*jhG41vt%ZNz#fEf~VPTMpnwX*wPY35jSQCMTe#pS>l0W{OhbK$eVy>;rP88 zYXaTXmm)vw9YD~5=H=R;IK$2wP#ez93q7HN-qJ3Dh3<;trhA=;##mi_NQkJ&qnSKb zD;}-MqCC^gQ2x$38Lx?zgY==49K9~)xng8GFMrW~i!08$gu7L0yL$T8=ob1bfpL30 zZvd_$-W>MW|NB~@4L78HA>7~HUG{S8^>Z%zI&YoCjV0jrBE+hGYx##W%P68KhHc(l zFf0EPA&v)#xmxHqW?K862oIv?@e)#ir=rNi=|~_KTEI{xghDUpfuKyUu4xf%{}l3t zsuOu>24Ri-r0}-#6t8y)RG>u2Mz4Xa&4F(L9`F{}q8qSFF9)mJLE3XB^GQVsQV5|z zM8ho!jF2rfQqiwuk_7tT1Um6yO+h>opQzkWJPWv)LIB4)93mzO;R06@l)ysBz;Gdt zBF;$s*T0HD$7Bz=-T+L4lL-hBBFM@Ofo6jf4NL@!q8mU#1Y#QL2`~z{!W^|!XFBPK zQ6Z#450nJ5#tPo?T(qO$UVw)?2;vct6Zwl!;$o};TyY>iaSdXgRW-T2%4(TA2*hMZ zvz#Fyd~)GfNFMS!ia>`xtU=DMD6&KWHgP?JJKtMuwuD1zDnc|7coVn~U!&s8T(NLs)HFo?uw zgRDc%p*D7^OirXKJA_D*nnXR%a6}_^+=#?<*^=xHz?26iB|PdNgf-BKkyfT~Cj8J8tmN9-9|zI`vFRnFVU5gWZa`L<|IJh<=($KOjS9N; zp{Sr?!U(s_A~C)ugi(SU(n5l8k#8x5JWUEtxct@;H=-;rD@ln+W(C>1k@AfG4SWhZ z>n=4SPpa7ZmdY{SR-~HqjZA(DLXw53)0L_m2>O_%s)?kf|0q?#R6=-GKaWkZyBdp0 z6vxP;eAe`_IZjbsVyNK((d@Y{y_smaq&>EvZa^O4XNSP#+JvAqzfrEs4eX#0w^lhJ zSVotB2SDW(VcE-Fwu58H2Ei~p#$8|2vX&K+W;T}%&Rx!O+4NwIJtD)d-cKv{uULvup*T;c-BmV zHb6PNDA$rZWsIN z&Bf#lT}vZd7u{c?z;d~;Mtib92(D@`I-5#fqAs6g{3wFM5i?cqq6Yg6y9X86U|XGm z&-bD2Cz+Pksa{7c>2D11YMK#Kd7x<&W)VIz7xA>N;Px z9sZIp$e4)4djGH8iB1pIvc~K*455;1-h50_5NN~v!X`Q+0h(ge@a*z>>x2;QHN>f~ zB7*m>Z)B!Tx@Lsrj?W-=CiDJkQy3yXOiVl+2ifL==RRrs9t`JHt^3|Wt5PcGUT`7o zi3C4K_>P4xx+y9=kN)5Y{}jqDKu*z^|B6NIj|UxW3a0P>{4apYNP%WZVrY+y4v+>Z zufkYF_8vu6Dxv`MO(J5%Clr9x0`Q^2>71;k;R>z^5e7XrFEWS&#`Z?oHme5lq9szs zvch5|T51QwLJ$RLi30KQ5WpjVX)KPUy%Zuz&dVvfZ9E!luzo}RMy%UNMD465J|Hct z?&9k5g9?Gql-T0y8mtOmF?!}NcFxc;RLAUc&pM3oBT5TbjHMLYLef0rOc(_x90#i8 zVquQ3uXZSBR%HNODf7^2+zLcSTu?4jW=H6PyCR}YbPVU15JP^?z20XCnF!*B#XmF- z|Dxk{B7hdFu0?3XTYMza0u2`L{}I1nk0QhokYWS(d@PFshIsS|j~u4nM(cx43QZ&~ zHL4HmaPUP^Vw7ZLsX!@Gv_)^i%OHT_>qdh&L}<{CuOngOBW0tZE}WvT zang_{*>U3_X(&yLE~;|4zC{Wq&ET})9e0wZ;>i&0(U;UwcG5@(O(!uaP|Ueku)5o^3D3I(Ymdg=BGGbrtXJNykhBUD0T$EGMsA-OY=w1j3*PTY2?E);Gk z-ExZ{gCXw%IxRyZ;3+a3^1CL2og%_-&TmNeZ6d~lCkXHPzQp8^Yb_QqTN151MN1$$ zj39(9M(`??q9p?-|CC9abb(NE?4Dzs9K^`V?b;qxF4oN|p@oTVhGvk(P&@_7lz>&1 zNSzWUd`x0-9%BGQb2UrH0Ws??x@#KIr#+mqx$dH!dMiuV2*)Ub?yAx`!a_mw66>sL zxDs`u7}QA{)lpS4M?}iwv0Syqe(my#|Yk5?*C zH<`nZ@Kb;!|B_UFGCD1TCnWX9>hM76B3So=bV%>IF4Uih$5XxWSr?XJ%kCgmOEN<- zxF#YM4HHbvgJ1vTCEjs`f{ycs_#+6yuRv-pIdIl3 z#sYj2fb5jM$+NB7T<`|L>2Q{SW6==hraSo zXAMeb3^qN4ws{xWVwp8`Me_&URxV5rV&%3~^$qjPm8!tWq>G@|kO#254G=PYU^BA#|GCUTeB z2qD@sf2(%rSZ7%j$%UJR>S(n7n57|B3yY66L8XO??NWOawpoLW3~M+Ebqp@y)bfg0 zFEm3857#j*le#RJdpn6?diOtimSW=vH6w#OhNU_x3yPpOx!Bi~;}9bL^YI{ARp&Fv zx+_wTFE~jf6pw`2Y@=QKNgAit!6L(|w8t&<5$49?hXYU|T+uphF*EJaXulJY9XUYO zQh|?fgsjVDpo5U3?I47Ngt;}3LkBb%`QGva@H{PGTkT+RRZLd5m1nb!pKLyR|7Dak z=2hu*WSVGrb7XiYRf6wL)Cx6`s!6T}vRLV`9s!mj!eZ(&IoY;ZLJwD(7nqTvl7rFk zdw0xGAG2q}Clp`A^-?*xM$e;lOEzQCZ2P%`ZS^5IQZ~j5BUmN9jq=nu%n$4D+H`-qp|3VWULK2#~ zuqDC{HbA1q;zZ9ni$Byo`~#&z>UtmRx&9e{6IzvaxwGYz2KyKq(BQm4k40OE^1pRYoQ|e1R@08F6;rlNr4P%JfX*evL!;u3!)wpg3t$` zyp5b9;3WYhz^v+9F9pyol&0(cCn1OfiQIyKOY`+Q9Z1NJYbg;U%tJ<5x?3f@`-H79 zW3bEJ^)dLi93KO>W709zFwSk8pW2bLQT@dg;z#&{ElzvkCY`X`&M#%$AZlC+DqYd5 z9l@c!+C4%_I5V^@eZU654!p!&!rXsfi=4fa2FY%3>w1i|{}3Ke)Y(zRr1tky@q+ID zg2oijQBKAOH!fZwYj|a>!Dk(@im$zNcSN&gmmpW8f0bJDLj#g=0FL=lO8s@Sf&q*8 zB6M6rAi@_$VE{(K6|-H&72O}CHrpqn(ZzkfLMqk(@R7}$U@2DZVp|=z1zX-w-Ip}0 ziqS==X7hq%Zxsh{Np7|I+fR`xg z0t0vAlXcQGUY;((9gevDA+UnlLw+xcJZR9pVJSBOq$I8EA_`_>m@D|w=^=mqoVoF)nh$bptgR|NQIVP-K%R^RXq=sHBGfJ~T6l zuY&rQ4FZi9STg`!+baUS6~Y$GdmUThAD$)d6M_}EwDt$$9||1iZM(|~BlNr0M;-4* zhNbm2x8w6qHEkX_A&e?0qCE^`TOooy-RC|#Rw~HO>~K9=_0A(a3q!3VMhKZx(&A42 z+_)YyP{%$~VeWNao9|0}0K(nawR^Cf6(F{-8Ze+0!GZ@9DqP4gVT6VZ6F{8EupL85 z6fQs31AOMD4XAU^~@#@sHY^Mw$ z3Q=xCyGo|y4Wi^=UxiBk4iHT6DdD*Te$rj3vFv~-OA%At+AwHQf=P^Kw7ih>fT>w2 zj~z|AwCRjeXnH=q@Zsvwo+GoKO}n;Ax-JOX$nECF?7o^sdmS5uVdjOh6DD7Lkm&2g z$sucoc)ak^+OL6cKN8G8sazFb~5o)9Z%hML@1hB5~RcemuZwl znFryj;<1tGn=f*cg%=S=tHQ-3|A6Ox*3(4hHNSmLR2ms(B$n zT2yzGf=NvEuS62n`7p5GwoK7$?ZURPPBFV|^M;Oo7^QdJ8UWm08A#*ImN|wa4UXUG_-P zb}$aGbAuU;I5o=(@!isU+tQ@i01sCxMd4%dy%C@~MYcsljNdHzU9SE1r)kdp_XJH(+kJXxbhqtJL-#K5rio@$ zayj>^En_r2_3lAWMPBKoV}(Z1SzS^O*fs(H*MY=H!kXPgl6Ro;Rf%t!VPNhA1})D# z#8@BkO#CiGlqon!35xR`_`s#7r;YH0C}fEJ@W(9L{UiYxx|?7`*g^_*i8B!h3WR=Q zK;`8PA`aBZ01HMD@oZ;+0vii}+}1X^P;Ho7sgB(G0B(C$>5s$!hSr3CrOm|VFFLbFT|8O)BWmYIQvzkci zq69E$`m0vT`iQtTg3VBZ1OdZ*9cos|km3ZvmsJvi#1a@kqlj@KWc=8yj3lP42o5@K zqFRukN2&5jAqrY3ra%Wu&^tOxBAjFhoc44ayAQPDzyNXdx+ zk7%G&VCB*hP6Tqqh;35H0AWH%(cvX3UtE}HLI=-PZjf^q1c_yWLbscOB%B2es!)d- zAz)vJHi{m3R;)~eIDRtrxzLSn;~Yk!pVAI?D#VPm zAhlGa=wL^(#d8L1z|@@J`b4&ZUT z3Zh)3|N0QxR^^en)JQ(bnUd9{h9*;dYi6ZO;R;(=AxFLJUy(qd*QAFdBC}madnKB_ zT2-27;FnA`lE zqhu1dXl_cH9&u44SDaK@%L_{PI%zid+*KNP7tNf*u1B=G?~gc>dS@i`K`O?ayApPc z3Kk+nByixUN;A{cdtah8gPo!QEg|pxw#GLOK1XHz+|^>##7ZX{ezS>4B%8H9tG4Z_ zrb(9$sY;?DX}wyqthG6Ib4Y|XQ_RMALHu%+wzH;P?=S==%#rryh-^zseaUc+{t4m` z1vbqAZr*GHlw)Qc1vrV9<6sXv94!;UMkAIYn$dzL;#)=l#mvkpr8$=qi0*mo|CcI) zDq@Y#D!Y)VcRZpy3j%$8NWV7~ZDXbJ#V&o-nzGzq*HU`iFBKt~$UHF)M$Up?j8`dq zTuP;TD$HkFrSDTn15zSC*X{0vDo;vXJ-A$ZK~w zmsa1V>8$@IM-(Ro$;;c_N(XLUGXnS0%ys5OA9nsv^wR74lCf~hS7j`5AHn0iH*z^t29gMPEz-Dit6i>V5N612U2xnfr z0}=jJT=}IFqV*lW@CqB484M|9RCHPw^W6 z1Z6-0b0U~$E+ltHw^s|75Unyc0HR(c@^cJwaSy>&!b2pdl6>L>fz>yCb%#9)p=Ev{ z1xA55vlKpjvnFttg@06gUH5?$Q70xAg5Q=))e6Z6oLy z7-TvXa*kYd?O6?D{cb#wP! zqr(|K`56DGEI|Po5;0;bB9AK(ZzJZEok3BV*+P?PN0Oj6 zle(r7b}=0c#FB5aH1Cl!Qa;Xrw z69Dh>MSnvOQxR`kGb8%rew;yik`|uyHXS_KWvBRr|GZa#%+ifY7zMgkX96l#O*4t3 zg+SsMdmN~LdIyDw0YSR>qZE;m%Q7J_G#h~Ep5_;k7v&HX<%=!%5ezzUgP{NlC~q=J zdlcCb37DmYF&0)*njIm1@3%oS=cQ80Co!lTb7n>?u~g!sZ)WsV?Iu28YFG+l6nzyU zI$|Z3ITn9v8?*Qka3=-0g8*DkW)2XT(aTuDo z1hM0v5)v~R*L{T395gYVM)rSp0w*EzdEmLK|1V=Qvj&{Sg;)owlbjKzulQLyiFKx=w4<(8DJh83tk^@GkOq&5Nv(g$k?%)2C$cjH$%|}w8Mg`& z1-lSdI<1Rzuw2TD6VZ#T(S#%#JMPtWqlu)p;WLu+9?a)|LwBH3)35WnIrrI7=!Qd! zX&j;R9m~k0tif;Y8h|O;pavr{@d1enu}S&YgVGwLi&{IhrCW4qV`TA%+-5RdeXC|!jg{%0;9zV65WU@GrNsB%dhIyIR{i5EaQ17 z^04JedBBxvv*~WSs~p=>8z8hISt6D_F+WWRClZ^Jk47cQb2W-X81XrWl|n|ax};Eg zlFgy9Q97;Daj!Co9h^ZFM$xg75nqNj{@WT4oR?yI)cM3pet zv*k1x(=o0LyjX&OWjj|09-O2y};HC36v77U=x z7ihe*LORh>W}+@X%t9@3#5_|zkt~hbizcibm7Ywj{>DPH+`rg@tzM-bOW~Yer7ESH z5;3|Gqyzvu@^ePXxa47w|G9I#5=dI+W^L;lAL-Mn9YG##YJSyYSkN-XiDnZ+f->Sr zARh4QKhYVdO?bMGQ3C`XV1Sn1p?3!Vsv)hd3GrbIiRK- zwW-H*GA9i2IAH9Av(y)oD#Y)Xfhy{F2cfv~($BM+N=raI=_3;Xpb$3PxCDY&vcVUj zrOgGo9JEZA;^LJ)yOz|fc|oECuFFK6;mrKEOIk$7Ik%jW$iOhYuKgoYxPnc%B^SVw zJh|(v8R1O$7pNl4nlVebyF`bH(KBA15WYm6pLo0DRDFK*zFbRvT&xm=qJCG%xgmj4 zRoS0JW+mVoHD@@3|F7Y?DJ!&Y9U*n-a)qlrs|KHR7ZOc~)v)xDErW#QNE#cu5sXb6 zy9jt|k{T5}k!d*C(zj7;EhaT09%S5IU_+L4Kv5ip@gD_FLCyfNO_trvT4z}yfM9i9-3f@_&iEDf3;p+`EL z5vZKD{&8q>STB!sKbi|kbVD1`!WpQ#+h4j{?c##KGuZySDkjGf^#uedS)M1NUURu1 zwIUium^h$#F=Cy;rWvlphm&h$G}FRbUJMc*Y9Jf*$4=;@A)$1k_^m2gt1`&dhYJ$^ za!Xsv5t^Yl{}^z@6u-H>Cs63;efFiEN%_(4H0UMu&6CM>jQv#K9*y#8eB-2tLi{NTEf(ub!OHv-| z2@yb@%ydi{*p#CY@^?vr<>iMVjuGNRYP4vqP1_@!cEnFuyb&zIGnwjRWXe0|!^R*{ zK3hYm|2v$l?R&zMC*QI2dDHQ|*AIhMVtad92xg z^`@e%1?k)7=0CF86$MbN9k@Dql5YeNE6fxHi>yqw=9#(x6C*=*!Q9+gqzMAc0H{U; zpDczu5${B}yCX72@u{G0de0%|`a9+nK`-<|MmOS@70%I`>~i~*v@<=LhVm1HVwv5N zC(QyS>{A^yO0=vFzYy+Xu2b%ScYgiNO_*hTxcjh%#Yl5ZLcsKmK0&UwG$KA`lVRK))bV=vyms%7AB3}5394MafoKg7q)61;E!Mm>M zvK95e^c2nZ;BF80ZwmIl4qFPeW7VcS>T&jpXyin#tj|G)BBxrQ%fU8R} z#>C38D@PzF5iC7BFztY~21DNT%9dc-u4jQpjB9deUcN;6UPKDCYk~n2+;YuI@MmAI zHwiP=3t2K_xR8^K9eA^H(34;jLq-}hw9e2^`x^E-Q}xlmCwY!02%96s*C)3^-UwUD zRm_=9j=eolc44ZF$Cj)N7xVCwd#i#hm}KTt>LE=}miU<2{X&7JUi&T|P8PT;(Kdj28H77WiTBr0Q0rvTyd2!Q(HgNZNCgp181p#Q>i zE;ZyZn(D470wn0af*c#ry#d1GkVEJ+GO?ij_>v%}lH$9Jzngkvjy#THn&QC*2jI!2 zuXIuZy^*%yae$RDYN;?G9_%qBBAXmY$gn2MF(imQ3vMdU#-i`A{xF&#xQr+gZK>P3 z64NV%-m5UACSStn&4H36C?+X^U`RHJYU*qvgg_!vG2gz#NDD&KGqFI@Skx(r{Yd1@ zMDJ33i=zn-9Z12x5TLX^y!hIzBu+<6tw`ns8)%B#MjL9qF4MazIZRJ_^-D!TnkvS= zST(6YnkSu*5ru3DF2jdv$1Mj z>uV()1r4daTcebgq!q0iD$Bf%<7i#0nwv?x$J}++thqWBF<`#J{jx2BG{p#E0KdDh zptS%<0H}u##!F#}Inp!=1^+BIib-|aD2jMv6X{b=qmvAQ&5)RMMvff4%ekC9^sC_! z9kZF`Xa_R%IoXWj*0SfSx{%bMbWM5^vWR}6;J|B z@R-^!2zHM}tx%K)qIuA0yCQfg=Y-5P&65?Y$XbR*H<|CaAlm98iT^{I7-@?$Egd7e zUS|y9wBC)qU;a!q45^Fq6VxNmKkHRsVzzGVrLfnl>x&yGa+7MyZTs@_+6ba;pNk+Tqj*~i|D{&zkN>&N*Ink8622XY z2Vfy_ROW^!J?Q{YdKQ6=X&5pU<=v|<0{qgsFeMbVG)gfBV+={UC8)CC$txD4P+S18 z!0nhMVpqcv{36n#+`$bx644XLOoX72+=Y4uB31rOqM?PotZ%6*AX7$WK_g;>fFBXl zU1<1_y(oogOZi@0zE`#E0Y(T-YSLDCqCvk=BuHh$qLnOizW=!N%x?r^;drv*#*$5` zfni}I0{aFLk=bx)l8GY*2k52_N+bdvGGqs9HUP&Ju__nAn*2i2$GlXCL5@019G`O$ zK?diClX)V07DFNmob7Nl~}@=e6n z)62sQ$V2;lAx0uL6NbDnK-&2s7|95h%#qHUeKBPX8FIgjJV}jN?2!@-vxGk}OPf`B zN=yt_CxQsUYe_s`Oj1I)a*7RUhr*_DeA!KQ{$@M%ODjQpv(UVJ6@2v+0^uCeo&=!M zBxQk=BDHfBIyMnA;acESPU^?zG`59|!qkJ#R~FhSY^Aa^iKgB~yG_|gk^GtH=j7r} zfhDz_r`_e`XjwkS+DtO6wcD(Q1Cg0rs*G1gMv8G84^2!JYWSRvhscAO0OJkN?w}8(Se`UBA__WOlVqfA;ChyR0a* z|7;%JiYHvhIt#W-(UpewDnplFP$W}@>MZ2DdJF0bY{5$ zK$Ix8!jC@n7#>K9jVEr@f{r)|I%$pbS*nXbr`G#e;)$juTuWk82{HjX#RZ>c+mS<3 zq6E(vCVVk0$W`;H1csA}v%NZH z4`3_&Udf2JIU_dlC1LbVQ27#%6X9<;74#2X_Ll|e{TguNF^_cYZrP>(E6&?yr zJx<;;X$z9&yd;2p=j%;ctH(sx`FOVQex=~9vHwTCLV+2X612`m)Mo8uUlK|6~1~dzrL9t zU(#Y)onZD*E6VeCYKQ@ko4P619d<=TAuNkr|uxAYN-kX+i>Hrh_~HH}d3)X(Q7(#dH-n zPx9Cy)yb&8B(D=6RePvAS`+g*nJo`QuNo1;Q-V_=U;;7088LRa4tjHs%ji;j26~6& z@;_^rr*%WOGk-w18BIx=I}lFK$Nwaw=YRx z60D((i#$pb8T&5fL7SJw8hOxG>m*ejUA5)H>Tp-nw-bsJ>);dF%CNR@@Q&Yb<@{bY zMrIG}C;xr-bfwlVfyN!&hJ^6-bdVt53zrC|N8}S3f1|e2rHwRG(Pu4C{mUDl0hf8s z7X_~P`Z>N(JURQE0`#2^Y5$Z*A+wz+iT&6M{XnZaa=O%Oy;p-Tt~e~k&ZVt zoiL3lm?kdUB)(`kAhA14+otPVA2(yS(DS`zIvc5$EkR;$k;HkO_?1>W@o)YYn z*25+Y60e)sK`U`1&nO9~GDJa(60XspVNsQ|K^z}J8*zF>?vtF`cplM6Bw|~j?TZtK zh@0%wLNxI`yl_Gid;b<8dYN(yxZ*O2mQ#Y2AiSYyK-PN?6LOX`$st%uLIqs8Q;ZAP zIH3PK8Q;i>Pb!hPfJ3f8oj>7;VPiYsOBKwh5`_E_ApAQ*L?B!X zoW1LdEULXCx&JElvC8S=h!RxAPozNZQ#nTLc$2!xu*!hL#e)Pp)T6VO>LmeUtL`aDlK{z#EG3`hC_j7_YrH%Vgg2xDA%#qj zFJ#EEb3v6nNznYjqq53^q`h2Qpt|(EPg=r7c}z{)$Gd6>P0FIv+!eh*p70_b0fLS5 z<2pdQM@l2f;$)Dn$idGDjoD%`u<(pdB#5W@D&V9xtV<8iv95FqKa`{>_wWus!#+}T zFU!~$Mj}6O45EtqwbCRNxX?3~x<-pqt@lj2wL!=F^vmt&M)_1mi~2&#Ym1LLAOUkN z1!*M0F#ioHLMX!MDf1)?f^eJwa3SdMkOKv-6e$b4a3wJt&@n3r1*s4;3<(L1POl(Q z_h_Ui5}*i3fOq*12|%RLpdG^aj|`(24yl|Hk~X+Fi$>Z!QAz*{Z5;emq>@sQ6^j(P zAQ7YB(Gf`iHIylX$WUs8&usIM43z*50il*GwJxPR3v&(+K^PBFDcCV3%t*r@^%Tpq zu#>P!Z{!FKUC+sg2_KCJ5EVLM!YKS~oin@`6>7AgD^EhPPWa?QMf$nFG%dcmP?7XJ zW(&ZHS_>Nu7~FBue4C%(=OH=*ScIy^Q z+W%Ao#Kx+liHRCdN^K9%)G$+3$9OwWSJlk`{0^wID3(!3UeyUQ1IByn)tMBxOrpI0NvAgwN`wkwa>yJg*D24-8}vR7^Toy&bt|% zc+XZ{R+URCYa^lw?ICsJPR|6-llj7KtQ^bRR{20zcukpv-A_by)M!!GJJi{zrT@$# zI*WT<$FdMjQ<~IYThXD*I%@;lWYZmG6;^1K##80b(@WQvaocx#TUw3Nu5DQ^1VdnD zj4s61B)D6-?a%5-TVnk`H}xz6!&p>Zif$V^QOUp?MX;d@*U$Pw`n1_5%UOm1fKw49 zH4F(ov)4K+J#cH=eB}!<6xxR+S=9YgLg^IA%`CVn)A)?tWJ-|I%~N=pl{QTaK;%6l zjof)nm~qS57BZMNJyJmBS#is@y@lLa>QimqUDBmqn#~H$YS^5Zn9QM_Zhc%OgQn~%@ zx%C*&bc|gjIE()+V7^t{ytv=y5ujfU+{KmJ118`LhSbX>;8{vq!`)ylOkh>|jX2vK zxV4nEO^=54ii-_28C(h)UdNmLH+_Aq|J2_@G1l~0UvVTAg2h{r9pD)*V#Yl@ssLgC zAi&MI*a*<9XLVo3z^p>k9gV>V9R894-UntTrSQpv9hggQVhC;&MD`2HeN@EzR8Hj%oGCmLM*qj7WD8mDi+3Sq zmp!^%HsLDX-P>&|lvPH_t*k)3*LM9Zh=Gg??p-t7ndRkE_;p19B(pc=ifL3=1b7Vk z9AxH&YpHJ%JXB# zgXAu=UuU6Y`{QF3Mrro^Tcnd|n%1vJl?X)kp*c-zh3@5rg#Qepgl8&-Rrp-VyhWKh zY~x=0pQ`pSKV=4ck%N2cJNRb8c?r3pb(%p}dM4#BprY0tjvBqlWqLxKVUmwH6) z|I^UdQDhrd?DWK5&4UcBy~7xESrmTdxDC4djleAx?WR6J5k_La)ocKaZMHpOn;|{n z#%V!zWHtHPTkhAQykkqL-&S7ge>zmlqc*agY#>Uimo8pPVdXq!zo*t~2$Nu|MOQKd zn4&}LKegFwEN}XT<@L4M$DkSSAYWiUW`ARy^(71bM*nOGA#mF5VzEwu_iX6b{!^Gy z(%;RfcXr=m`q!j0CBi@oimunF+um+F@ZSyDVK!pL_}0p{vTknD5f`@*=~u^P3jycs zSksUaf$@dK&3K;O?A0jyn9_Hy?{x9#?G5tQ1#QpT=y#sO#=Xz_wk(#(XE*k|x|rC7 zDRK%IH|^EJh}PWXuHo6{GYQMQ5y1-hw2K^PXcSP4g79gl2N3XDB#KMvMgQ|}=I zUUXW)b5CJH5klog2jr=Jxo(pthJ7L1r4KR13!tEx zDA3XGW^xp7a0LN^UIL-TkrdXXCEGp>hVbH#q7ONJ?!%=_+O8e$FfhiLic+5y5Vg#e z1=-@}@iNY0$PIYK)?Tmv@6*YggyvzHZU3y8{LoJ+pZ<%Bl2?x%(o%5qYkJmDh0W#! zU+4nAVrx#`w-f8lt}~lwB6mjaF_zt>IOA_T^GgYLcxUd$Qsw4>^+2Cvh5x^&2lU0C z6~#wm1dsS1-XWX@U>PjHADZ_{CR*8kTJQd9au?wEPGwPzD93MiTHSj<=PX5=u*c0@ zK*e6SWkQngTc0g6(@K5X4{P1V*F!y7g0|`eznpEwQN%xqrj0MU&kJ6UWJ!;6#mBHi z5iir9^dbszz3=qaVtxzu6l$JXXDPappng0?bAEzASgjBUlgzul!?u{}goX2XbMDhu zDnbExxhH?f&HQgh`059U0RoW-EdMyLAVGmi3^HUG!C*px2?io)Xi?(Dj2bsCJh<_r z#V7_VGE6eDAxVQBOM+|}alpxoFE`HASTo~IhA~IFL`bt`!<`mW3LQW&Vak*Si-J^| z@u9_>Kp{>=n6%(kqfP~G9gubE%dP_!hQ&Ix;nAoqyME;<5P(6b2H`GD30EaUyJj^i zm3wwTl$0y+axHk*=vjhY56@+&SfG@ZaMSXYIC!sD%!gCn%o=4g=C3QSMg)Q}FJ`xh zQ4TQuk)%kqGjHBxyb*R)i=%U2j3TvgL8yxvy5?=W;cx&Pkinblte{g$}K@)yOzFPJ3xYr|%dB*4#G;eS=Z72bJ1 z0jE}g3Fh`&fDC3-(Rd0p`hE+v$8A$SZxFLxjImls&DS|{? zogvmFWDIHN+eb(~s1cYwnK`19L8h6}N&eBeri-+x*^m@+ZX|_9JU)rtMhSdqUTzVv z#gULR>Xu-cFH-npo)hY+Uyc@uN!3NBIXG!+MsDOLkN_@7=PGLG` zTsxv@pQ2HMHE4@sI{!#tZbg-<;I4bR2<44ya{1>*5z;8)N{{{pXMzkyG+S;&F)A#E zsRDQ;b`RmoXMo%CW}%I;Mn&qlHi?yxlCP4OZdDM93MgzD)$4}|A>1lM;c zdz!ixm~vZvW-xUn*C;5Y12@XtvX{Q+DNxtV2Q$1G?tHL8Rk|1S&wv$Vv_gV`v=FBk z>-K2CGAAsZzM7%T>eWaC)zv}>1KsSmG4{&gOEz2FB83AZ0oBG#`f_A7Qq;d-l_@=-fp6;3ES5-$d0pYuZ$Xop%!r8wDt>zM@OKh$KM6lB48#Z3;NGHb6 zHn12WxfO`F>)0aZK-ZG_orz=1;tl)OMZgX<$yVPApw;~MHJDNcfXSM2N4G4pw&u^f}HY*CmQek3A=7x5V*_|jW5adnv zcr>L2{)b6jqfl3*5*`|Ei-iYjVi-%78~_LhDxe|AUB2`z62|a9&ST9W>z11W87f$+ zN!sV|_cXLs&u<~BVCNF)D4?*Bk_F@3{ZIu&Mb-)^Vxk+ND2Tuj&8Bi&`$#9#SHM;& z%z;o^NGv0Hkx`D&gf%qPf6kaby`8Ni!lckKpYlmbZU}}XI%HK$qqpngMheC;yV7 zFlL+#aUx6hs2@OjQioX+-Zgm$D=MB8Rnf3S8}eO+Pv6@__ZNQK&ksFOGQ+#A*ofBQS_*L#Van5dM{Q;3}CXfry{xdE{8L9m9OH9w~UHb zKD^A|c00?P&E{sYT=8FmnMGsFYL#|Yq0quAq+Syu;3!Io9Fk$gpja+Xy%}tnOBrh5 zGo^*TDpqhse`&X&!b!V6CXricDoZDIsVZ6`IVbc|Osj~|lH4@43L;Ej zYs56bP80mr1ca*;xgr7JHMFB$NNwdNFxG;zw6#}}W*b_;aM^armLnJHZKax&0%(k! za^%MqnOR}OcDCa!?|IW(M*VS3fhm;ldh@&A{)W`QCnV{B3;VbQ3E99?B-|7Q1OOrV z1O)>C0st&i0ek>50et`f2>$>D2o#WHpg{o%4ho2(u%W|;5F<*QNU@^Dix@L%+{m$G z#Do(WDinE8ipP^EQ>t9avZc$HFk{M`NwcQSn<`Bz)LF72PlG=P1{F9|K+&Q=3zk%x zbSG1xPl-k~I#o*5t4^~n)!KBc*REipauxfPEYgWn2}%TckgY+t1K|pki?AWxyLJUc zXseg+-nV@L|BV}%@Zh{EA z>CvxK*Pb1_cI(x*ga7|dKD_zz=+CQ9&wjo8_VC}!k57O7!7WjcS4<*B${0;s2(ZOb zJ{7o=fju3lV1hU`=-`7LNwLKy_%URhLrf(RK@<}b1))p*2}Kl7I)&(=Q6!EiB8n@T zXq1X4x>#b0EXGKqj4-}fqmDT4IAe=91_|VlHX=A(ei9icngE(CbdZGuK}nL7Q93!L zl~qC+8kSpXiRG1BhUui3V2){KnP^r?rkZE6ndX{swi)M}a@I-boo?nC=7d{#29a_A zGAPtgE)KdAp@<%;Xh|gkbz+Q;>Ii9zk^a;urI=2tDUX$QnklEBUb?BMppN>eq>&1! ziGC4@wuKf8KL6R!g%8o{5Use*s_RI*%F64nz6NVhuD}l4tFgthiL9{7HY?_`(6-7X zerI7AL7>9w1RAUYNTMx`whj~tfu~kPuAnQTTkg83rkm=!?#9dRx$w?wq`d9g8>@%` zMiK6lUhgtYr#<#%x!4>DSRQqktEC$t_$lKEV0Z!>#Uj4YV0w`8)Mut$RCRw z^06l;`>_^%HiSgDfWkVXBxAJGN;|dK%#If9myqMt|N)LP|SF8>Pi4 ztw1NL!Ag%}=)R_+O6u09a;b!-2`i)2 zQV-svX#e6*E2Id}%HRgGQx7SC*U}0Zp=m+NKcxgHg(mgbLq>@t>7)fKtw=EizO|xU zvgjn2Zu01IpKdzos<+NM%98Y16srVX8z4|RNgzNiCUI!F!I6wn&nQE)(q9&u)Iy2` zCTY@&J+5pb^eFY%!imtZ-Y$?PT4=%wJ5D$0t-1H=t8TvN(~GbA=GU8k`R`*L|M@}n z+Ys#w1w3#=qzx{R7Lu@sb)ulW&2?@eVrYl)@Z&gJw1X6-$=l+hfVi9)uX{PWS?9Ju z3dKduNxhR+>Rva(5@u|5CLEdTQkb$6VvJ=|@sdJfW;Ua+f_L58!taEZ1$MMT5;t=i zJO69}oh)QxaI9cO_YyaXE!b=mWH{Ww*fEB{?Tj2B^r4RSmo~O}ZEc|{n-|3x#Z3VJu=8SslktZ^K&0Gr}@lk%8#1Y zv?l!uWWP7gO<=l;g8u{nKznRKca!tQC=BSik+3s~wb(?>NRhYxM4}d@NMzs)sQ(39 zkRm`F#811*G)hpmu%HM%s6suNP=+oPg$IElMq=i+8=53`_K4aT^45-S)q)*UXrutf zB>*E5ZWIo5PA!`FL{ij)49;Vk)rQFqS8!qsKK$JJ$e6~Sx{aqlWn)m$IMg)~^@~Pj zn;S9WDu*;Oi6brNK>W$TRq#=#4C&7xJ6AJSL}3hwlmg-gSB8isZy>FR!X^SIfarNTU+_Wv#v~;TotwM+=is1IU zw+$~T!8=~@8gz7fov7_N%dkbAFH(pNu4p?uTKd{|zW5ETexsRR{_fW#aQhb=QCraN zo)@A9j%|4td|>i6*t`mkXv-V|01QPzvDD4*bT@q2qjK28Le+4HKb%zPlGwzkx~@U| z6q@Wp1h=1ouw5A(;Tq5Q!8E?{vKX@0p|IGm+QVjj`zz%8{+GQ+2CaXWTx236SyBKl z9sW*><2u>clLXbVmTjA3E?4==y6qKjN4DY%BTPh>VjoG(MZ6 z?0S2xcSS-AP!tH`l)Y>+H2c{UaW=E3JrQXOz}nb`_O-R0ZEAOW+ur83xWi3uaGU$v z=pOgE)t&Bgw|m|0ZuUT4^{gl}WHD3LAILaF1~<4t0B*3uzXdXIJ2b@L6hZhw6fO~l z55(aDfw%x9PVs|VTp<<5_{A5#af4)>;~Eb+$Vcw+jz8Sw0{?LVg=jVA{g|0kl9&J~ zTrhAKG{oi~%DK*W-k^ayqzzmEV2b00-8eRG1OL9kKx}{!pY#0bP>(uAaNZC%xWHh> zGUee!MgzT&i97& zJ??%FJm3dEcfl8)@CNz&;TNBH!#5uBcgG05&BWU*&(O@4k^~6^z;uIj{ve-AG%g?F@JN zK$K7LiZCDG&ab-k74rP*PyZm+r~dT~l6{BRfa=}n{{QxuKmO)x|NPj`yYk&&gI8Ti z>%?x7*TMe%vfKau_}54v`K5__A0*%4G$mTV1qP>hkGBze=Xq2Yc>{rSc87Nhn0FEJ zc{dP&4`G14M|ufpdveEg8whyaJdk}GhcUJ-}aC57da=v$avNwYy&;~?U0yJoYt4DP;=z}v@0!r8dRH$@T z*aH7%g*8|Ls^=g$Xc292b_PLw2Ei(>B7X_vb`bJ!KGy~$5CIX85EFoNF7SPw=LT>W zgnL&8HE06^X9G%Te%{B2*CqiRAaJQ?gbJ8?9RE-Pd*^e8I1nw601A)*5q&hc_^Z`A2Z=muXHCJNyw9 zNI*MX=OO)30%50fH{b>&fQef$APKMqHV1o)NCFD*f~|1tpgYYd0G-H(o3ME_HxTA11(zcMW#9r6AP}8Mg$W=9f|vk6AOT9a zkB^i9CGdQ?C?I50S_7eW`W8_HxOZTfdU^l6-6#N%_!ppobGnlR9MA^dm=F@c1>@L& z0PkKn0+|`1t|e+uya5-j*zI3qIY&Y z5g^_)5|P$8Z1^GUXLXp^0!r6;ZU11EW#9&o$N^b7mb2-FTab!&a83lt1zI_Vnxq~)gb%@vkHn0I3z@ifIZ|=t}JVp>!!7ekjUbth7 zI~R~i5REqHZ-Pmf)VKw0u#W;T0Uqg&2|xmF;Ehh|0z*2Bb});|*rfkvb6jw302i81 zija4A2Lb>983}!4@QeeurC*wm%hv+zXmh~X0<1}yotOa1scf3*Y{D6wNVkl-GXbu! z0ZKsv24|UsiJ~>Zl~UlM6aSE#(s>^ZnRbxzO#`zn6ZwHL5uWTfha_+ZGN=HnNuK6; zj^|hq6M&!3Xa`yl0f`8QV;LZwcuuh@0j0Qln`e%8fQb_)pfx7|TY3=7NCx8x5}mhf z12LhC*a9{;1+Q5KrSYOTIg_clJRZ8Cc94}pfRuO8o|tHk2ucPy`60>J0!rYZOy`zm zr~z}if(lV#4M9;Z$a6GzrV>B~B_IK*>Wz@8udLaL^m=Wn*anQFJ7u5%5>N`u=%ke? zu(LUcT*^3ZAOT5G0$Dk+fnkoMS#W0>WQQmPH1`79=#3^(20;j=0x_{xH*rfj1(ErT zMlqP3=%f)#5L(Cv3IFhqH0K5!P_F=ot}fK07j~xx`T*zAfL0@wOPBR?HQ}?_?}}+iA}n9TX2~ZkOWQY0tCvG?x+wT z;Rf8IJ0mC%x^uGz%a!=rlnyHppJR!3TLKATm*6>`005vj&+z?ZVsb$B0TEL480l^j#0e-a; zQ9yqoT*ET)!A6{aCwz`30TP~;w3Q0K6q&>>QGbhv!)1rX_ZOE6!CNNr6Ye@glT$HB zlY~^<5<)AD`G>?(XLFBLhADiqt&*Kf%Z6Hf#vS3aC5*>Vr-zn%5I+2_s^lpBLBxD~ z$cQ`>WdA4<0ah1?F~{IEEG%QdiM$aPT**nCj92$-(~=gOiy>n?T#_KZz_*B{e80cP zh^lPLMaasj?8>ct5QtjD5W>bsY!f>UgQ zcZ`bxl z+|Ka)&ho6z^IXsL9M9`4&-vWW`P|R-ywC3J&+6O)_#Ds%eb4$#&?NxS2p!K3ebDy2 z&;hN`WI)mX4AJ}y(E=UO8U4@&T?Ql&bS4oo_tAeBk`QvyJNl+1rXe9;ELbk>xiTHo zH2)3LGL23*J<~9~(_fs^J#7*={n9T@j4u+@M#0lME!0P?)IdGco{Q8!EdWOS(>Bf2 zP<_=_ZPina)f+(7QBBiNEz~;Y5Oj$aEeH_=W*WfOXb^F10>R4w#4Qm+U=88c2NO{T zQW}=B93(vuTr^8(fmoc(N)18RMe)}WK_Z;o*9I}yBURXQX3p?45ns#`ef`B+aBMxj z)+PPK-z0x7k~zInEf-@ko;_sflP{#5DsA>&93e=rohsWUKdGG&t!3JstX_Y$ChD6m zLLw>4VIU?l+@NzVDIzo*gA|FfDcZ%_?NuYn-7e515sP-(pz$pb(IXurF#dvF$p5Ca zazoTU0y;I3E2kYNq4dP(tyo!K*yJSP6t3V2&T9PA;Dj9!`rY9Zu|Gn` zY82i*6QTty_9spCAO8V2|G^|Nt_d+N05g8$YS<(+E`K=ABtE|5GOpu24&+2W2HR8P zL!RV9zT`pPmzU5M0fz=#YNsk^bn3j^~lC=#rl4lb-36e(9QC>5JazmY(R|q9Ggs8U>N+YM~szxazL1 z>acDVHwx>oKI^M)>#08Lxc=(A-s-ge>$^@BHk#|c{^q~l>%(3gslFt{?&`vR?9h(v z(LU|cUhUL=?Yj=^QLwq|{g8YSI$`23rui)0PBPs+EK_nJpaCZ5&UMGJVj^VjJJu@% z6)x=#?(?oDo_+5YqVE1)GTj~UlGfaEGu;s~*$8r@^P})W#_(p5*h;b58Da1&LGhFg z@sG0YHi0JNz7R;lG04I0$g=LZJtrk^Cns-Ux4mg5-||+rF}DI+DgQt7=p7SL{V2xm z+X=7pIM4HL*7HFB^FqI9L+|s{?ej#R^hUq)K~MC~-Sp(`66Jm@FowxipK~HH^;f_3 zm5dd&ZGUgFBp#m}QKBCmFDE4L@+wdBD6jTx|5|Pz_b<=#VOgJM6QKUDuAnYim z`K>^7E978cX8JHMV_pXL4;fRW&^ueeIj=7TQ3J$M@IV$q3f6I84Pr1x?hj2AG>a5F zyF*S%064D#R<*DkE6(-Ke-O$c1-2j{P_;R)4>*_4M;B%f!~cW?TF?q(P~Tz)CbnM> zYyL~@kN^b%M4J!=>_7@ip#|n|>UBTz`QG;UpZEFC_V69^03kp?6oCT^5)_EgV8Vk9 z89po+QR2dZ5t3{nWpPV837c9;Nua5g6f&$VmaMfYWGzVs6~1&xapFvxH780DfD@<0 zD7K^!j6$ka5&=o12#wN;6hbLJVMg4UvtU%JQ>_ZDiuI~gtzEf(%?fsF*swOek{z4& ztlFAo3u+<7Dhex7QZBaI(lm;cR%1w!N)u+4Ge8IxN71( ze-ag%1mUP!N$b^W7uhj!>ea1Z$DaKnsgZw+Vjh#k_83;1N7~MQ{i#eTjVZHYmw@Qp zy6nnpkz_H-OUMgDuLm%u03jNXq5=;TFhK$pG>}0A7lg3EoMtnsoh?R@D*-8L(IkOU z1Ym~@qe5gwi^UvF?=ZA-a%!ODirS(t@#-R~Ew)x9EJqx7ys^i^bo3F(A9);-ttdR& zuPFh@(*lVx*s*I1c5KnYB39aIB}lhYjOj#yw6JH3_v#_Tw|2^lz`h#$Q>;sehLg$7 zHs_3!PB`xbEzi~T{A^D@`vla>Kr1BW!@6)Hh5xrP1c+e6dT@$h6JI{8vr;&@L~O2~ z1lpt)p-3TPzseS>5mQr7MK#r#wi93!6ZfKPjJ*cJP@p8>+Ttr!O&d^DTNz^WPyf99 z55)){lrULjmo-+|W|=)!!T%uJufN%3!ZTVrQ`AXUEv1SIs&9)VS4eY-Ja^o5%SE@{ z9=nCt+iuz2D%EWJEYMOucjdQVe`~r_y?;du*Q|mEMmS-GX*zh}OdqT^LP7a^s90^C zy%<`IH`ci0XFtwZP6LAtdE4~dU29%&*JT;ymeqARW|(KDH|3S%RaxAc?cG=8dj$pB z=br5xT3=y>KAPyHjSdu{pOFp}>Yz<_xc_Rauf{s->O3x)W01Y>nrpDf7Q5`P&A#~5 zcz2eWZJJ+pJ8rn=u1e*$>3*AMt@q}e*S-%6_;0}n_qSofRYjZZvlkDWam5>lT*6Be zr(9&U-@ZF@%r}=?bGZY@yK{9>eOl?LO`n?S)Js=gYS&SJ9owQJVr3JYSjWBS+z;oy z_fvl>=%0V^^1WXG*|Zk$T6mdhV~q9{lf_7vFpH zw?Du8?I-%Dx5wX4{Bpa!Ex!JN|JekxhI3w7=N$dt5?l0kq77_90J$XSsz#s)Z2tpEOFoGpKp$Q?lLJBglRV}38hY(1? z4Z2WUgrh{$>K!1s6~E_Q6Ofl$rx?WhBLB}jAn5o8qZh|HPSJTZj6W-|1pz#OhgM$ z`Qw+~GLt|`#6*Jp(s~vapeT@_4J{}^3mz!|Nwz>Dl`Me(CRs^=JhBX!)TAW^(t=M; zGL&pI$w#8nlAvUzBtzLrQKqt%x1?n*XSqvC&g7P>{G|A@Q%vY5Lxr9j*u zkUdVs76_3*Orj}~NZ=?U)BmIhHm~_7&~b~38j!#S!Z}WHmUEl}AZIwGU`}?Xvz_7u zCph6bPI*cop7x|CKI^&9e9rTo?gZ#R1uB6FjI*EvMQA`3T23hxv`jSlM|sR;6aE>7 ziZ=TZ=|D3ai|q#}s3F;CAVaclN`$1U`B_PAqEevoWr_AUWW}D6QpGrpSfXJm>1t#b zi#|~`rJBl4FABve7DT96IciRl3YDZ5^;Z*J>QKXCi)I$Y9wM^e04Y|fiRq6f;!DV# ztmU|gK`nkX8EfRq8a)X}f(-TWg#c`Um)&h_t?;wl$@)jsC^AeePW35YdnysnO?0UK z^J`!Y7o?ozC4lHs5kcpmh^d^GrdR>vXz?nWFp}EzO*l97Bp6NwTELlPFWFT*de3(Ci!f)6@49)uH0 zn4pCXCRpKx;jQOkfE|MP;dtDlB8)W7Xyb@Co|xl`J8Jk9 zNFYg~ns*U>7vO3Q+9btlAS&79lTJnn<&;uZN#&JRW{KsNT6W3hmtKYm=9prZNhX&} zmX{ca52@x6kUz!==bUoZN#~t*=85N?diKfZpMC}k=%9iYO6Z}6COW8pszo#&fKn`& zkff0=sU(t?9$6`-oL;)=r<7_Ms->fLDr%;rqH1cYX|C$(r>D063M;FgmOAUJw&tqp zt-R_gtFN{0O6jnc+QgVdYbHo!q!PS1P$U{ITOyDW1nAv@&@M<~B+W)jslCU5L%$yKK8a?3EYEHlb6(>$}s zHRF8q$~O1>qyWh-lmHS~CGqBuk!rEY7@KU-v?fYB?X*?ijiCwCTco(4BwJ`AP|{k< zS*a#lAZoUvXrHZi+H9}wcH4Cp1mHuDeogEq0<_|bJ+`#}LW(A~)MHCKwv@636k60% z3*oNVf?%Yh*yGBCqxiGQl3#Zk1uLXniZQ6P#v1Ie8k27N=%|aXdg!d|g_%6j3?QG#Y;H^Xf_~pK{(~7lGh;oZPWk(T7E&h=4-?j9r zCIvZUD8X6;>he2o!Qz&WZ~EV^?>_qP`^)~E^2e_}{P@?O|NZ*+&;S4J+h4ngB)5q~ ztW!whoTao-3kGe%7E#bb@x%v(QM6(TNV1?UMzN%<+2V3h7zHUvVJ#_af)#k{ToOdc zir19zR66q+&tgc!8QSnzs#<011u!3-#2%#;2XOGTFu@$Xw1>Q*XwmQPi zj(EJI9`i`3NX^Y5bt|Ff6u25q)B=l0sz=l8(Fzt?&TbYY11pTzicQFI3{^~md4g99 z5Y~beTVRC%#5amsq$hU3qMht)hsxQtl9jcCT`X0Z%2&#Al?VzNM0O{?W@TX=P>cle zjOQIK&|?dd2wW@LQORm~YZH}3;TYJlg;s1~6t1w=G`UbbtB`^WfU8H|1_v~Ql`CNk zQy4lArp|Vz^PTL3=f33GuXx&Xp7*RLKKH5r&wd)Lm<3ECd>|z&YZ20SwU|VLG*OS? z6;BEnL{$hUX+cte@q?sjMYlvjiz&FmKbso`@kn8wO>hBIBLia2c1Xk=s#J(CEn-Yv z+ESLT)QB)m8A1eFw4>cAgiwsaFj=FCR3AreT?C9rb~(u6(Qu{cI@0STIL#}--zNy9~< z7S@zPBehV(Ko#3klziY5EH{W64T1L0-)y5%kAYRx9(TbFlw zX|3T#BF9mPEs$dyTLKo@p9{<9KaspnelGdRNp^CSne0v_PZ`Qhj^J9so4NMJ5WV%y zseQ*R<}%0E%wayWn$yf?FT0ulO}bPF0(yF$2;2F=c)qiq^UUY;d>4=tw%ccMd0`EI z_|Su1F``FoVnrvq(U4ZLiCw(Q^i20!{u3LV%(bl@m(SA+KJKNtdtCvJ+SH{Mb*h)U zT~xPP)vsptz`RRghkQr8X6Epl^GoJ6@A|&L?sc2#`)gqrduEh&NPqtnKmz~id~#ZF zfCDT)X@6S4*q-*awQcQgXM5Y=_BOY_E$(oW``qJBx4G3_ZfpAqq_qZ0#6(9ddZmhY zCA2q6L8osG7uw$S=C{BDPVjpV+~5V@cf$QmD}W>X;R=U%rTXpgh+BN(3@7NPlI@Vu zV!DJ&gRDTfFc6ZDyyPYSC&S29E&wjD+~h4s`O0VB@|Vjz<|ofN&UX&;p5NT(ItMz> ze@^tE7k!l7MN}JXz$M@$K(IoCLvf0hA_a;SFA}s!p~bDZySsaEDDG0+-5rV-cZcG| zEtBt`IcHY0m|adzHrYhp=id7sNPgj;PG-F-q+C6e3Ar~Hg|1W*d>f70GRwA;FJ*ys zV_88&7G4_!1SM$Gm@qtwPb)wgUiY1V{8|A!3NE$F+SE>ikE?$wZae-xpINPYY&;9O zc6Dk~Syg>r7#8tQ0EceBQqT39E&}3m)1C##v~Ilq;yP~PeVR7!xi0~C8zXwT$_xoT zRGDy}&RavM+Owz@#KdPwjrd<<%>N`IiQGbYjz*|>;j_>}s z#Q}o60eonIpNRdqz6Xj91@JZnNEQc5G2%S$dp5n*NRqUgHSt<<3HqKAL}TZHxyK&g zW2DviX7|?jNDAjyvNMmO&(OTL*?}`pRWPz0l6Xq+aFNd|(O|5pV30@%UUvv+D%e^v z_*Ba0LdwVPE>H>ND?{rWU-TXY&gjCWkHkU+pcMhJ09^cwPpyTjg^B3W&Oqa(bo3b=P0T+9>B-36rc^|ih8U1$oiT>#T%18mW778pHg zZKFY5(I7>TGz5KEVJK1JP7MUxL-EFN)e1p1=Je^0;qsjO+W-n zkx~IOp`N`>5UVPnBC!cMPmmJ3mXf0HlaezlLWP=vKSaP6#rAte!ASb3+=|hfdPrzZ zahPZ!#|K~*xMI{ISBS%4v{g1h9mSoeDh@RVfO{@~2@OL?BJGbL1e#?h0LTzZ2m@$} zU|>+8SlPmisuIy)$aEXvFX}J^lob~Tg?6(k`9e4z zEXIHV0NhAH`T&dz3r>Lk$DPutA8GYahZ=oZM8M7>U{o{IKgwY4uEdH3aDzHT#Vo-} zB$*TzHjo_boe~n7LLUx=Sks^{5i-S>P`))oQYA^q4UNZO2bRO)aTO8oC{Y;>1E@@b zw^NbbNMK-KLSqU*x+_K|8|6$Lj3gR|t{9=pmuLwA-V|pJh{c3504^6&RC55}@6JBW z(NEtka*0zgAW68{fOuXY?g$D-7s{rY0R3>LK?(9(_1Jex&ImnrP!Asn^FPp!JP(e< z`TTwin&FZPU}y0A<(5Vy4Qr@JvC<234+CiW#-pr+}9~&SZb`#m2d*Ao^_x`dsyJzOVA@i^pJ|Zh{m00~ zGMR^9;C+tI1Fm%y3NAYkFT1pX7)LAA%Cf`>^@_=s56^NR z!!1=6UGkBY{wcOpjig_A#R!xZ0ij#?^SQ;)!OB@o66+e{fXyf>%NRv1K+SU)+PfIz z=0qSY8FW!@ftJfe?b(}JfvcbS4vk?Ql@h#(W99UY?M>XLcMywTt^kb++>NxT62PB* zkg{F^>!c4)TFXuf;7>@=r=I{LNE(kw#V#sL)k1TYKQnp13E8 zP>*Tx!5HNS*Z<0QHQ{1#c>R&7G-QD%NgI?Dr^O{+yN4c&Civ z6QdylUPNAMO)LQ z@PnR=xGI%|rb!|NTtf(^e2dYdNH_Aw7ovUm;>4P~^BF>awE5k*<_<74o253ZRp&yG zm{?^JI7D51%;S~HAhxFAu)CsUc#7*fLI#W7)m$ON_aT@chB0u4CtV>83*8%|wFYnYw2gkQr^j8S^H9j)lxauatc;# zq5N{K*K$L~a#QHdm1bGD8S)Oj&ujrXjdzRW2dV%&>~E{H zEOrEgw)i1-M9Hgb@KxItuhmuZwe|MZJulmBuQkkXYX>ZAr(XIJQDbt`{otukk1aEq zIH8{n>l;0vgi&nsKiYu{*XM8<w@gMBHMXism zP>58$2ig= z5~_2QGk%!gaVTYX7_V?7xrtXAeJIm?l%_+4T=&~~o3icnlUNi*+soe`isQc1zx~+9 z1DVG|9ml;D$G^vq2Vah-DNbfjkN;qw%w?V|bezmooUD$Y%)gwhvkEMq{>`DFG}z4i zd>Z?CIyP+cG`8n-mGkUE;f&nu?D*yMQs?Z+`|P>n?1kbSAbftOa}KvY2gRHt`<%bZ zI>+if$ELi1WSy;vUVtiN@w*v3$VACrACto`C@3$fgfD4yFKK-)>9Z~wD~;Z*UoxLv zvgn$y!{L`)!vDB+|M9M0a(d#BU{h)UKB9oGgey@HlJ;5m3hHwu!*(TSb0wd3^`-Ml zLHJtn%eAuZ^>?3Z4a#dRn``Z?Yu(Ok9pM|jFE<9dH;PCfHTI8^SSg!aWNdAC>~%LB zb$6X9Z=GUpU4(Bv5COT$TVMFC|JiNe`fV`fT~N$ji11xR)?H-fUHI82GjAN_Y;?O0 z!>^naSpN6vo%eh3_u1?BKZPH1&hGQs9twOO3bP){Vje0wAF_>wC~qH1bsx)Z9tbEN z8@@a?c0N{7isrH68X0bUVZFUmdqVMkLXLhK>wFsj!aCe}JM#MZ_m}61$|vGvo9WJH zJGk)k+Qjoc%f{6D^NP*WuJFrFt`VKm{ie<8sn4pl_v+Hw!nrQ|%m;px1;6WrKdi$6 zI1=HAr8X==aaTosv0zMc?!Y@mgFb&yJ`@+Gv@ID;E@&KC6QnobN1K--Zg!DBl0c{4 z;Yi|8FqXt=HP?s!uW&q_%kAZg#Ia~H^K%rT1jZGkB9n%YP*AB-IDJ6uD~wPMWh%9D z~J<;(Ss%W>rqx7J#%4%ZJ7Y4vO?ZJu!4HO;$h ztv+v6{_)4Ai=ArXJe^Zw`{INTX_8h)Z9%n#6Evvi)L0tvW=U@~XB@RTZiW~2;Wl#v zSemydtBlP2p1(Dl&epoyLCNG_N0R<9qnMHeeE6XOj2kEuKjGp#Ir(012)2oR*Hf0i zR9|EASHRSxehJ-l5F?NNx_k{2!gq6V7Wl~UQiLV~M5477LBbS27YU=)m+)0vz>yC} zFj`Tfd_GlB;`ZdSm@gV~l>`O~ogHgiF;|`$ACoz?L_{HXwFDl~U?^J{%MtZ9FCzI& z!<3tFX;(rSf?qR46@$znO(Q=tnX3jhD@~G5FQp4t(paQHXVJLW?_vC|Zz3I$#EH{Z zLK82N?K}iEpn6juO5@KsRE+vjllz_>L)jchscQQ)POftZjFO-@gduSSSCr_)aQxLz zjLW4YiIu^nBs}bJRUt1P?wg=?^-5*bxdA3Vg2wH3slv2G(wi#-PnX3U9T8BXEwi?= z8syeb$j>MEMq2-yQA1w>Q$LK9mG?)oYQy4b`Y!9DNzsW7wQ))P$&zVo&_|xr^X2>` zr8Z@!ekOJ5UD+oMzZt@!w%^rujWPL~L0Nc0d5?qLvyL|)%VMlGDd$cq7u@6<{1A56HF zhku$$;+mv6bf`m_x{j*|VEI?2g!1Oqq4>%bD{f(S;6xx=+f64B{0J=BW% zMn=?(@+O@OG~Kb#_h9}X4<{^h+Q~FsKdfv0+Y(52)*KfmB6qYxH9)cbm-4G$;_IVj z0fid!bWf7I<%zjwd8SbM+Y-7`{$C%C-6lKKxWcwf*N2IFJsT^IQGCO z4t)%z&>ov06k5H*5zNl|?v|lazx_O{ikA3R*VXWlJWTC986I(J!fFR`fm|HvqCP76 zsW73yEi1>+K63B<;4NUP?$cGGY?M*Nn95Lhsgxi`^i-sgWeO1`9pPbEnK%}g`pYrH z;PdZTAD22qioe9-0@lGUJWm<=Izx;^?$t0m57NcSB&fKCVywLf?b}iAVF~`4SO>!d zZ|v0cW|9G0+u5-i*J1+75#w;VS;BXIDKZSK)rsAA9+r6@n{hAYF}^yq;Fl-AZWY0-!DyqzWT zc1iK+`>z=I2U8WCD`qnGBFE^z5vMx;tj#>C+x%GV->T9Pmss<({~n2dQk8Jl5$qH# zf>SCpbE1&-{e2-jow;1N0+%~UovB1jz!>Q}m7kOadt7-W%CP9!{Dh!{c!J9!4MP_7fCC)z|H=UU8ay{js zxAQt`;j^x5y@hO9$;5g|e3Y<+r6S&^+5WAs#nDz}aD}k&*+CiZ8i9681^wArADE~z z9har)+2U_c9nJ(kWDDbLG~6iKy823077O(V4J~TyhQ{=AD@u|JFkNf4*;4tn6X-^H07 z5Vek1bEw}iEB5{!NDt_t@+|1RwVFf=MbQi3UdVY%WsMZZnY)D(vCzwgIH&#CWANH$ zr=K(WBHZYeA^9!uTR!XRFf%QK=#?%kde(SS4!Av13_IUDnen06h+{C%!WNO|ZrNn| zR&HdI>8Rf3rNi`=(Fd2spZb!VDHALB&6#_Mok9$B4vhTQ~b8p7KNE5-^MHKFZ zT1=3jsW4{CWZ<4dE|%B+XC95IP#wp7YC$t8q@UxU?5jNTc2io99ZIYtRTVK7W}H}! zS;Feg5{dR2rN)-ooQm;Zl*hv%ncRH13teE|YzrL+Jy0u{yV8N&(g3b8Kfuae9aDa+ z7oR;pbm~;+hh=5_c6q5|prNj$9SF2tUS2)Dsd9L>vJYroS#xe^Zf&=4vY}dCqqrsX zzQFOxAN_RMbK9PWR^+veyZ%&&)s?fX247XjfxSMCA*$_346=x$!tYDaL+(A7l1`7p zwc#CLsIZH65!j|cy&t4gunP`Z*`}ksA7-mBjegpqjA@k_qa(}?_(NtubgCW9Jcy^S zZk_s%6KxV0QJzts`cpE-7k!IjO=J^FNw}E@0^enuHVaC(H01MsjKR`H@+L= zCMN&XOM~%&=SXGWkDx`(h4nh;7A|zu@fy+X_Gs!+KKK9j!5e*82(~kLPWAg1<0_dF zgtw%O8iXxqvRzgs#Kx=H6z(wa4~XuY_K$ zh-{4Jb+;7iaO5j3<>2BAYVnKW%8BBMcN2aUCHm1#l+aC_-<`|AuT*n8w& zHvG?Qw7vAlVw{0uZa~qQxWp;$1Z1ATUY>+r-uzy^x?cXi-cPf=0z18eSG_{WeZu&C zBD8&?Tzz8VeV?yBC%ZBxQZ-3^6@!X@mX`Z0Q`ZOW>ysYqlUeDLo$dRwBd&PWr%2nc z#MQ4LE}r0`=v*o6qlE(RxCT-j{r^>dXjQf^BltDFxG79uGz6I% zJAn~q&=ZVDWZpM)u_+lt{?;3xgu`$+{H?sdmUP^1KcYK}0gHnbil(91;m-2GibS$F zEk=%+u8gPBrCjLg%z8soLw?vLJ;$&_oZ*&Q{!#f^jo zIwXu|3x-6~{B%H`mKI8rEN|ibJ5``PC?xoJeYDi1(mUss)@Zq2=ePW_%I|uyIp9J$ z(XPeousi9&lSPr?YT_sTqcEC=PWtw2tv3Kp$<`ro|8H+5Pq(r|@bUI^yEluiQ|S5e z=HK>ur3dp-KxQ?)o-eZXH$8l$H^o%`sPsb{{@9WW8-WnzyNw`RwPNaELgS&$V2a>{ z%}^=|MiFFGBZe6hB%^uVaL^UQ+X&7U=ynwM9`W1gPeq;UjQ35(;Y8j{Wnp~}8kSXq zHEPTi1Kbg1wIlSS$F;MPm?w2}Y7r+5+8pl1IpN0n1u_v^SE)%Gto$VrESbL`xk3Ys zOs(HWG;Q*)dOlUQKdiN~bv)Hzo_E0skI%ZF>EBm%V~on4C-Pvc?%Sie50aaqc&d{TB5Iq5PHa4@Nm=o|rQ}4toB}vI)H;rSvm1p^mN_Dg9W8%L2ge`&){SC69yiQKKb|(;RG zX@hMAwpvv$VSHC6U@1o|_Wn3n zU^Ermhr2d&7Z$?ZOFasAX6&N?u{etT(+$suh3!fM(3MS5NUGkVs8#j&rz4I4HAKUY zZ7T`2Y(GCpeh62#&9O*Z=%J5mK-ovMSx-~^X_FWL^2q%%E~9y?H@uBPTPHE@SB6yZ zrng}^#V&^q*|@k6lp&N*f;^bmC(EgDjXJ~dSJEI%9;ycUDlt5Rw@A#i*~sWnD?BSG z2w#RFND0mNRnRZgySn}s%f&d&@>U}jyXG?O2ae>nggG`3^f7&m+LR&My|6YEJg3bF z3&$%3=1c|vBmabdzU%rz#jONWl^nzDlzJcm)suQ~r4$ z($bmFBPkW=Vi^9#Yi%a$nR!DP<;|oQ2D`x$wE^y%yDmm?G0XioK`cvy*jUbgsop1u z%=OWu&qVo?)5Px(b8Uv>`6&b5k(Q_9!X)m*!_SB*YKEdDmWsm;W)GHH}(BfvS9pc(!VQIX7j3^8cfp~2KubdkgwsqXFI1`3Bu=ck>E zH|lLr>`Es-PWfTLhg8{a(@4SxDsuqNFX8L3@?=$_X4|XK?sTnloC*{yCGb3QJ1-CT=Wjxx2=IZ~lsM$^wW z1z8tOEwAozH#Nd|KPIKEtP?i2bZVb+)qGk#$98EOY`1n>PFwp|!P9Y8e&)UZxc&sb z>p(p{^CeB+0I@X@F7Z%f{oC!`TofZgMo4E}_ZDGeZ$D3_U9^qXHZiQBHLjflP9plM#ML2Xl?Np}H{#R@LVZPtnsVe6ANMGu4v0cZx#zOnVD&%o_ zQRudAX7$*vvvv7G$EobE_NnLVr!~~qu08OKQ&W>x(vhy_uzN0gg^oCUs4Xgyc*Y5+ z%3YM}3uOFt-#_IqXa}5Z57VSSu8Mh{_f*&2=6u$!bA$ztrP&^rD%Wnx2cQ39+9UmL z^xfjFqR`4{Hrjbe7EvY^G)|g$+WRE@K5`etvN{NHyH(19tUA zL&I~1cujG5VNGddRijuzoFbUe-)IgL2PnCU;wH^|J&B+u&wnc8=d7Lf={jx%QEE@yr7$9`E zf$~si@lYS}J9ps&f6#dV8N`E}F)(KzBzzYL5&@C1JF!#+3AzT;DuN7#yfRUPz9)P4 zUARi)i=2gcAutdx8vx1%pzC>Y+j{-mce4TnI#U7OGeQWy*=h5*Tf@&iXcc|ftAUye zf%8&+L1@SzUjV6ZsAd-;835M)7K-jm^8*&5q9{PR0j|6b%t`@RA?P0fAgco6O@h2# zya^n#fjUS6CNzyzR4-jE(i}XVTgs6hzRRw*Y4`Zzg!i5B? zBm*!eqgf}za1}vKi~x~?Xiznf6yT1lhuS$G27-S8vQ8qNierJqfi(r{Xl#B16GP9p$ zsQ?u{OqG1V<503SgoCs>S_kfmWcV563`-}Jf`Qn%p$y62o5GN(?Lb{Tokea&A~0On z_&Gy6BgF{X^LQi0SZQexKm=?p0s<-~;`!37@S)&Vp?oi~8$3w!Yx0a~iVI={vamaC zhDO7sJncUEz7mTZ+Xo3018T#f3_}r(*kpol$>~hVIZRR3fE+k96$9pov60H_n#<+q zbHW%HA#Ha`l25>pyv7I_YKpGJciLS5g%pQoq$KFf2VC=Jab9>3NWo|UIa;TUS zV%i|_TlfK(43_spokT3PfLsHD*#v8vhT#DHrvAlGxFAiY0^o;;4mMD$Dur|@H%?&NOz$9t!a{z{; z9uG8k)FjX@mE4;Nh2=b#6p({J^0^r+mUj~9UCD_2#OtGE+Q~$LQe+`>Csua5lj39_ zMu_J^^lOb&A{Qr_;mG7>pm={Kw;rldOSB=UUBFQrm?W2?4qT; z87#1ZPlB$lWKtVZNH@}OC&Qf2Yp+XdcX`V|>?pkVVanN=;LYsa;yk>naAcqmbwF-7 zKLk%N6J;~VGpu^K890j`bv65IkQeNRmO*NY^tshDnWs(-HK84fN9Asn%9Y#66l-N` z_cJ6$z|?7y5m5=3tXBB!0<1TtBYcj2KAMA0fCWdm>& z@9u*S{ITukI6k2a{x>?>fK+l`CpuW-2_|8uTjLV3PxfPn1k~HMILeX= z&nTpYxz!9OR)mBQjSSDG$Y1GO3+AzZ&12^TCLVLB4>7O*K2P__VFU{((rbn_f3pnT zt%ot)>m}s9;~U+(gx2pxes>mx%N9{sWO$pdz2U@ol^))lZC=HLHJsm}+dLel`aRdn zgvX?1dewc#N9z=)r>Gz7Kq@&2I~0y0J1?#Do^W{EkWshu zD<~CaVoyZ;*pL+%_boyF~?AZne_oUS!Le4tRJBR_?p?j|Gm%xet$x4IYn;T6%Pv zbr`1;_G|t2D)S0^4>95Wo*yhu{mI};90Vr`v@jjlcO9?%Iey$0d~`hiH*);^{Y2#w z==^y6Mr-0<+xTtS#KqVI{3+{BVDiOt;@)!d`TZoId=gE267~1QYx&7nUX%A@!JTX(vbd;&f>*l}o_6%N9M4kEn|B2EvYGXLw& z#$g{O=^Umg9R3tKO!q!aJ3Y+EJj{7H%vBJze%F<<(taO zHxrjkx|eM5&i_$<_yy0|C8^Ja0D}AB|2V6ywrM_Gl%TI*pB{N%tz-&8JFjH2uH;`| z%S>FUz^@JrufMKesh?db`CMyvUMp8#e;2;d{c@wKdt>TzW6pMCHgRJyacx6+W4nG0 z)s>=&)T-`42`~5#p~Ux`IQOQ!^I*I4UB3-jzYW#B3y0rEQr?BF-^HBWMX=q&gzsa0 z?vt|a6Fct{*6&j$?z7JBf4;s8c>Un3dt#8Y?{aXx)p51kVOy3Zqzrki`f}X>e|R{3 zP_{X3p?qvwe`uzB>JolxV|(iV^3>_`G?Il-{>R^EkAN6Rt<7V*&m)@tm3}M$v6@c+ zX9L7`U9g{Byg$1o{_+x|`yx1TcVKh5*Ln9h>*A#HWnUP6`UQTe3%~P$KTsk*eO?gV z*>Hd~5;_L0sUmKVKN1lJ6wNN@GZQw+8~iFGJ^WB|LGPy~iFiVwMlNiYCXAp&?Y+AB zo8D5R(P(Akk(I#9AJUohN;fO_GbR&pqJ9`G;f}?MdHjf7d>O|>r4q#={_=;f7HSo8 zjSrC=!A9fp%4%_Oxkh*;x%p75O;hLmuPwB)ODL&C`Sek!4Cea7*(HAs?MO1*2MuvNH~+~>VPJXELJG`1pnlR-!18QfeK>>}t`EUsZ zM~`_?Q-WHLeZxD{Bj)~?xO2u&6;zMov}#8r7+;uP7SHpqxqC)_RTOh@!Ii{`SQ4i0 z$l8ylBpDLxrlD;0?^FtM%?mO<@Y3|>vuM{pDCRsF9R&<@#jDqYnZ@C3w(l zOyXHlQmUb3)S6`~>(1>_Tr{6PaW85{X%j9QCmL~Um=pv#Ygqj1zo}0#N3YLdN2j^| zDi6i79+OXR0ClO;tMl)!Ff+v zFlHg#EW-~v-lGNyW5hC-57_(}4WuE=D~7PpmHU0mr@;9ZN_0ynA+CTk^*Gts@iA#CYTtsA><_Wj zb$fMm=o=i;?!j1UTw5clV-notyE<$_s{3i&q$=bSG9AQ;apX&!vTdHY(e79EWO?f&R)hBjXO=~u)VHEte*IfzF*F&~n8r=6 zoi$?3!E4uks7dKYE|lmArBQE>2s)qHCMzJ3H($c}IS04QBm2cv#rg9?n$zr_{~Z+9 zxZ!V%ww3`M178nqX}sS_pb7sriI_{cZN{xIN_CX3Ru{ zAXGY(7GO00Z-+@XRVGZ0E0?H!Q~cw*DFJKzJfXfc2-`P7P4y2E-^354Rn3)?%%=*N zP<{{^q0S^5e~1(hoagRtp0Nm?DH3=#{^BPi6KS!T zM%e35{^Ysu?lAWkH|t*3R1M(o>BpKa7~a@dhsqbi4cP8Um7%{sM)#K)cr=b3@u_^` zConfnF8w;Kz*$oGToQmhjp2dTMOkqzp>Upul9x$Xhe}%1FCzBqDBYo4_nGCJ-zT*y zT%INk0t@@a@ReN}J6H0138|;&FMxM$qX7Nr1ZSXwu zFPDBDYr|N^R^0N?nVlx;xHU2lyZWRXy2H@^*l*)QJsm#pzEclB52D}lm{;X)im!je zw1+19rsG(G?KfX?5JB07M(R*6*|?U2h*sC@eWSiq&JW=#j$7E8#7PDoA4c@za(x1s z=y;NlqtWByPPD*-!sFHIeq-BYMCyanEoSst@IySNx*RNP(*Qu`3YZkF3tOqdp7a=i z^Ugwj6lD8Zs^V4bhXB42mD8c*ocBgVddPPsH1b;^-Pd1AyAlRBN8#F0N(R`0XZPYEZES$KuZpd7O_ zn=5&(sj6+RG;<>)PnQcs#|?s7W)pDR0#m5%1K2S)z@XwwtYbYSo+ti=-kXnA!&*kh z3~7r)gw9ooR+hS-Ntb3ioU2x;P7EDdmsVdIYJ25ROe4}(7QDHeM%%3|JknN=)EWS} zzmk1s4QMf&dCJazZ+qURt@BW1civ_g!u|fGWRwmZ#>qCKV8cWJ*bJh*bQE^sU(%82 zOz(PG6fUs7rf*ZMyAGj1>_bh+b|~iWhNU~~6C2Za*--C?v~}!KZJxZZUZjcz;slm3 z`u-IBb9;8rB+QYjJXmIGd4WaafB$9MQ=p_bp3my!*Ti@)#viRZ2 zkSY3?foaKq2Ibe#qG!KS8=7lDy3gC)?}e*Ygj5we>Zynl`O?@Vi|7k&ln&n(yHCZ` z8-0o2q52#{JBK=b^F|yh#n0mF^928_%TDm)8>N}*X^-kARei#m+d{(cB4trBtP+(u z%-#rv&OGvR(n!rIjFBg{%F)|jm}v@KMX&K99FldS(h~&?3f7+wOb8z~JG~!fW?z`2 zJV1D+*Z<}z;au_@ppgSKn zGx<~Z8D`J<+a8J)>QTRfOAldq@2h)5F~<*`jL29B=%@D-YpLyd7udtp)w; z?#Am|QO;q6`bJ!!o#0kThYQNs_d(@~rSiq41N)@w`ege0)WFv@8WZles*kmiri$K{%SEtSU7S^vB*soP5q5XueA=jpjJfPFpub1Ahk1wh7 zUh+p-zai~_k=%gsQ~&)ma!M>707lR;gwwIW9=joFbv$5mHDG%@K!YJ=PbOuzGGH$* zcIE)4mV zI#Gxvl*JVq7C97FH#8L92MwKthOZ1o91lhA48g9TvB<-*T*GnV!!ci_Wy8U3($;d)N%_N0AHqnl(D+3`d|{xq+-Sy7|F6jGTt7w%97huTWPtG_ zg^@C)=_5sLBc**Zzjj8-uVl)RN6YX>D_+UgkjWN(9eI%%DS0Im3hj>x^`*5fb_R|R z*N(RKjke8>w(pE~e1&!*k9FaXb<>XZjEy#4q4jZ%_5Tg{dtV0SIpu~M3dxdI81+Xpzl3Ye|6kz-3ziZ2u*-b0RzkM%e%afK(H5WQ z2C}j^cD-JIOlF}r-Vca7li$kz7j9TWL;sLAtCjpud*YQSCcdC=ompHFPo7SBi<8M* zrM6G7pr*6wQlnMOK)a@k*%GM@Ml!!1uj+Px*jwF-wtKt%;Vju0g^YX0zkhNJ*DKl| zoz50JRp5UxXLH;V_kl&XtsR07w?~_`$!9_x&-b@~5#feT;b-_gaA@7bjgAM;Wh*Y3AZpo0TZC$YRbe0;wzz%9#=^}xtCQb12naY2e8F0VUjeD`*91#zsl9* zgJl#!%CpKbEH?|vuSu0)%+@UVj*Ozs+jG4#_~g#e5r84BrpBiRsNHS}j;XS2jarS_ zd8#?R=lM@GwldpZNGs~LBN8;HpRwUpw#0wa0qKN47iO&SUo3Nj@HOjZFuIW0ub6`bHMLk21@q}eB|p_eK}SpVcfW=KC$Ff6W8SU*-J}P_!l_YAS}%+L zZZs3>yxj~TWo_DGsBouMbRddQ6x8G;l@Pptcx#FKu~7`dR1WJIsVehj?Oy=t3*hZ; z&c%1p-;Dhp8IebHi%$}N*A+>f97e+M8%*sBSUi_iWLK|U6^;O9uV6LENUm#VrW6gF zVCLVQLblAuP)I-F&GGR0-Rtrr*vy4sMuME!pm5`|a1R~>3 z|B(NVbMUiM#-Wn2%>ol;dseh688BJ@83PpGv&8k858lq|U9Kk)0ypP=r}Lpg&Ci2i zi!ix~p5r1+M!>+#T{Ry@jf}2Qg(`YXjUM>)8Lx#C?VxI*i+AeSr{Evi{t-98fq>a? zDo?xLR%(!6p-}T~>ec!fH$Zu1)LIEc878C(W3e=lvF`mwoUxz7I2MTibBM@zC>uI9 z8{_p?mXe;QWLV+nL_A6A!t8tXbUukLb;iYv8DFRVpCb9{MRK9L0>nMo;jn-=W4owU z!?N0Q)5&k&50$DsIpOC*9X*%u$P{cYH2jpb=zHkb zPYx|t1wXpC?-ZOMKM5lM+i+X0g?b2`Er+=zKS;`EGxM;%1V+;B>Q}DTLTZRcoYZzv_j6SBR z58Kbx6y;f(@>qOevdpe4I-99n7p+;9s7Hp!yqW`f;i?9;4IqcIYFi8w(R=-Qe($md!=`41fpGk+xdva?h9O5KdlkPNSTt``xrw4A2T!NOkXD3=lRtDnG@}mf_sK_=eojvL70ZgE|_JquG!|?DxmBW z{odR;VCVOy|D?y7Npz#=61kaLtNSon4=(2KsB(?gO_W`)u)vR2o6MX~Bbb9Ospvug zyGB1|e71iQ1I&9b3T?}vO}6CPvGwT6+kz*!GjDNJ%5(vj4WLLej+D$RfI~|Ygsaz` z+e&ug)+j(Z<(ixI($|M!sKp#55 z5jEQo*73O`3M2WtiClFoOYc*u+h0RN!!%>>53xfjUk{e6dIgi?6-`UW8DGDCOseM-y%%oe=& z=aY7WrNfiHgcpTv>dOEkEp{Zu>w?&+SJCr9G%n=uSbDy@>IlZHE{*$6u$$h{F{mTA zyV9-ORG(XHGBrNFBMPG9TOkEDjU{@lxlFHZg_M(OAwZbUCt*jxYF_{b1Y-zwU9*Cu zt6`v%dO&x;PYo`t4P7NJ0Fe^nPYpk1JQ`yV09lF4#nrfj4n#GDfIa1*3<*+Sa4%~L z!t?`N5BX`#BNTE2Y?aK7l!B}_f`Q$^z-s4l4jA|prixp=q&qj_VoS~~%{5MJ7Acol zOkeOF7Pp;?RH3u65-iw{9mwXUrH5*i4G@_@X?@!lK%UZj6-8*A@=$6D-D;w82KW=P z0t#4RRC~W8D{*`T0j&2C)O%s!HxWely_o@mmQv84BP{h4>^EAcsX$*?f8RnbfNVEB zG8jRd)fEL4WHSYW#OgB8Xu-t_!*KwMobBX^Xk59+$g-)C;^NQVWSfX*OmBwBf#kTB z3}{(EFwO>WEyBaH!a9R~sKxrUO+>*|F#$^g8`uwnL-_0f7DxAca44?K)7(_Y^78Fgq%78bKBE z!#Wvv{)e^Gu8Xx!ff6H4bqtK`LnFGIo#vxw*es~m46 z75Y;H(X82HMB07W1o%VRk*&v!6v^^^GjTp;0DO@#GWgqc54`Axhlv=%MqC_F&jQ5{ zptXUJy~uEK;9bfM19R@^umI}}_5d#;*g)c#)mV+m0UNncw?OnenOKo27gZ2k0lQ5( z4*+S3;l}mTj}Zj*q#wwv!HP-7MLT}R5IB+ZpadBgY!FO2YZP4xE^3oQh{-qRyFi2- ze_I&+Pg1aj1wmYTj@U{F+HV`)E*rjB=ZWR?Fi7UW?T3`ZLHHz7L>(n_u5MpojmPOe zf(>hy_J;4}p@5I7H(ZVjv0h+-5(2##LL|4%tA-9S*x9%{Q+q05Zx2?h8b*5xA;QFw zZ^wy?72W{ZktSOVR|A2=%s(`QdOOKvu_gR_ivp!SS^W=wjyv7mMzcsMhqVE>^7(HR zhz=37x&lXe3Hz`nfWVwPT@G#^7*^N@a6a6H(b28$`kw9*vV&}z+ZU4pVIIdK$pVD^ zKs#4ACcXe7MC@O57GHa;mqhLCG=uMui@r(PH#C|7MI0Sv9drOcZ(Iz%b0esHE!1kY zP1GpfPr_ZjfyFq=NO;4vjU4r_8nk+^`Ndl;Cl1riUfme^qF8VG+v6X*k4GqQg!U#q zCB!KXsC30qM0ifama{UTa0K(;1a7~0oVbK3HWVE%4*-13cy2- zu1l3o9+@1d<(zMxb@*}++T-f{0%ecKx5A8{mASad&uw3J}+i*gc| zjfs|=@Jw3pc=a=$T1*#P@V>U>$h8(~w*vKBnY;b+^3=IT+;zy`wHeWQ%h-7%$NIq7^(5DI ze%$r^)b+yO{bu=b&$D|cy&I{$8|9?)h`(zCE-x1W6EO~nbW0jvo@FGrhoHTO@VSSK zq*oiZmr9;BTcuaqp*M4;hkmSw@wu1!x%Y!tkGerGS7h&}$UY9QK6ZIl&h|crlRg3Y zKJkzJJUabSR{gBy{n8nIj3>REE3{1e$qS(x>g8W1EolF^G-y1zKGh5`P7eSb>NU{@ zO{@k?bq3Aa2Q5|xSw;qJPX?tJL9s*?Uv!kCF7QqgxJ-L!TvC*=dxmf+h7m=EeXPiS zWDKjm;S5Iz3`gk<$9N4#3do1ckHqSXgnEsnS;;fqVKWWj{d~sF5ui>&_$p;EiWNCZ zEGoLyKU!Hn8n;B}VuiEHi8+BldDbuGiAm6gMx$~`fPzr*34W~2OO<_zX81&L#A|GH zWo+zu3|n7yrhRN$e!Oe!SLDqg-v#}O7sKlF_!`LsKHS7kIsNW4i9&;#BJP)ya;3k| zoDwt>Gnb$ntPeLC{WLn0k1GsME0fR9ldmLG0Kuu(j7d1}DG9Ghp!F1TM?VVF6voRW z8dE>!w`ugKDID+VcOBD+--c@kaiMW?cIm@0q8(Tx8MUD)tmQog+^HTj6 zZm^z%jh%x&wRBhK^eW~wN#|8N<}|G54aVopzWqZse9xRWU7dHRn0F*yaPnSo$y~7O zSg;zO^HG?W^Z$*H3G=B2J}opC`2K|C7P;_CKX=UWw$}jJg(U+C6cdHYmtFwZu^Q$Y1OsjvstuA}7F1@|10@=8~ zVt&xlV<(~l;Ze05j0^9NFCU$*ov*H)X0DwptY3|7AVZgcu(}~_QQQR}t z-TOYVXP32SL$>Fzw&y~&Z^^uGTe;^My$cVs>!-MX9|u)Q!lx^7b-XETg)y&izoU*u z-;U5-34h&+wONUO-Asg9!8;FACJrHg50hUHGlh_{!rJp-rg2pp)#RjrpWQ=wwj$WElNqsPd!(U9kxr`}W&ze>98F zt3rq(Xcm^QVG3p01~tDLK3@;@c?P9GkF7@N@0ubCJ;%=C-|fF-JHl(*=l_}uE_}|e zqtC8sUB@+S_IggWFVC9c>hgbH%_(-1q&nu4N?!bO0MTE=fB7M1kVwmu`gzT9foNyIr?9 z6E=+kj;1oXWEe4%Mf?3UB^1Gw3cpVIM`1uJR_k>*WArPI-f%vM_i9fzmCHG8MRYW& z4Q9(qfe2KBHm%TzP;HQC{G}o+k6m|V#G#uY@>_>uLaq5P0Fw%9S|&YCZbD5ts|6-s z_eQ^Z{-6b%9OfyY-gxrpMb5=`y~png1^wi%+Mx3XF_o?k!KL9~5Vl<9$)dx~uS{OC zO3nGTV&%$aNK{$DsyMrnc*}?17Uia+CU4x{1A^qx{6n1e0OKz#PPQu8bw)%}iYRnN zSduQ(5$vt%?Q_0QgF@fhZcbL3zQ3)Jw!2<#k4H$o*Y$S4R;Q6MU$FRH@jG^@eiX|b z%=t;G_a@?{=~TC~!QRaVwhPcT4M-xz8O#Vzy($k-ED%^HCnOL9HkWI*LwkT6b- zIM!zYt9~2>9ZU(_??#xC_!1-o?`ya&BtB|r#TsER&O8n!GUZO?CU{Dx=1R~YO0zam zvo2LM9ap1Fuqaqv4B>ft)j+E3ty1mC55QZ03l7IPS;rG6PGrXu7BgzcKdp*8D)O)A zt11edl{-#GF4h!~X@@V%DtT(jV7=w36c!gpdMZZHQwry7Tl9rNkSrU=hqp#$X-6Os zCd#H}R1OTfWzH|->Jo`_V_LyCU%s;CC31Z+thlLL;tMQp3LgtM_{g45-dGkw#Br=X zz}Y%J6P7D(JJv2bW7czpBp)Ma)il?*Y}qk>t8L#$le~;G5~ng*g#dRqhGZ8ZDpF&B zbD;*xY*^6sFx_z-@qRhgkn}^uYu@lZ8@MYAyt9~5F>~)Np*zVBW-y4L7)&XQtlPS$ z`zbVmY!oKdsc9I`kN2=8Eur<5F@`azQpJ>GAhFS_ZuyIbvEz8lex|i^;{H!(bfSZ_ zFrh~YIn&efuWoG~&EM=83bo#j?8liFj>@a%i7cynf{Vd552cM(l|x+E7Ve)oQ`XTj zywagh%q(r2*0VPbXR0&y6)9a?bh8EqFNd-IVlp#KuL?Wm#W==cuL#mAGxqegCg( zoi|43{c+H`x7$Vxcb41UPgkMG-2#oy$GRq3;>W|LrdNe#;yqAPGp5j;*wToUuh-3h z>G#dsK38F%`+Z?w?}xYOn%BFVpGaOkV(W{)r182FFj$liPVKHg@&G0kG@?NYaN(AfdQMP>oR_JMZ(o5sxcf8+C!XIsv zeV*%b@yd`SUpEILJXN*uhZZH?c1`Tk)7ADj+;~R4Cmij|smRWxhXhBb74&}x{8n_} z6HN>>S%;YLntFFIuqAGI76Vt=I1Nl|6V<3l}eCjq#emYtkuxq zL*hZ-7d-p0idhOwLx%pZohnHre*y&2#Vd|$E|aRSb#2UC2Bgi5z~85nTCskN+2cBX z8-a^yh1{o4i5EfPh7yzJS{ZUCILr8NhtzauA>5pmXVz$_8N}ERaUJ<(j2-@THY#u*$u#B+Xteq_{GK=^dso<9?G2hrN=886);O20<=E-j$6tuuyf=wj=rh2}i zBDlhw_k3xgaK66m%c*r+uhyzZa8t#&wT(u^a@7=GW7q1bovrrrHrGOP$IGc>Ccn-eJdf3K<>~jSnfAT^ zn;cR%pWFmVN&UlqAwk%>d6Dvgt%#jUANDZOlRVxuXY8k;`r?O%QdL=*XJd$Y7?~a{ zwq-~9=7P;z@s0zsI4m*@op=p?7WHS2#Jg|WxTt~ZeigecI+E+rQgD0C9i1_$hN)@FWlM_Uc*drWaT+38DX zr@b})jUXl>6Xtlubmq%Oal_WmCu>f>H>*Q93!Lwqp41^CswN<9l{sG3n=+ABP|MX}x!3Zc@A}6vA@auLSq1K0@q3U6v_@_AKY!FK9at*Hb|!`FP1N!o@q@!m zKCL}O8lBwY_mK|T#t^Sq;&Hc*2zClc*=NR@aQbY%Gn1IqmcO)d>b&SU^Ehr>e@?pY zf+w?k3mEd;KuG3%kC7@B9K)C5%XI?~eX3WKiDlbYkEK5y<8C+4_+q-}HY_4^sU2+g zar;;nixL8d;I2MAEp~ZsAk>)pyLyj1*?q#i(lH%68R19tm<)V%%)!q*khxv7S zMqx(QCjZu$9CY!iH2r9;(xauq#-`GC^;m12GS&3AlPPA2uOI)DhR3sIrO!Z_Eu!Vh zDzj@2~&t#X$ z$pX8dV%#Te*RC=VU-l*5d(6bFT^C5b913aFuS zlf~yGM)-N3yX&E;>t!&!@#QSU7b<`9eOy?7y&HNH!4-~ukt5-LLF|V53#yQy8(82f z=+3u5ccnBKK?fXZ21Xj|LeB3-5hy4MqeOG+Lfh$ncMWbh1cRQz^wVHWP7y3L5gd{p zQw9-S0TI0VZi0j!!u%eh`X1u`9+KG}(w!c%>z?;;z2rE(6x6+xoV`@yz0_*GG)BF& zPQ7$NqQv!OP=&#V`d-HV-jD6QTvLop*S#!oeXKZrY*t+i)O{S{eGfoCPNTjzu6E%; zhd!Q!KHmI3zWP4?{yu@(KEa(nq3b?jxPCBBzX)}|C}+Qzc)z$>zl2f0q*K3CP``9S zzf68VRAC_3-!DJgudvgvc-{XQZa@iVK$&_#g>yhvd_YZY;EU0Ky3>G0(12#bz}GS1 z+B~SjKte#gMQ3L~ms*UWR^t2rR2UeF4;rZr8XFCoI1QQx4VonknnUk+^@EoEgI2SH z);ohX*MqijQ1jf7J@t?S=a8fLkkfxC44j7kQ(=%l2xu(Ka2Vp@nc7^QOAl z(J9#|1{sUbWzrRA1yOPq=VW!@%{x)Lb9cuxFLoD;#;GLh7VLc+Eq<4#CA(UfY4TW7 zw5Kpi5V`q|+SJsWy`D}Y1nH!A^#sNqwmP&PHr|o+5 z_%C>Oix0Q-@%H$v3xN3Xyc-VR>bwVuuDn_sllkPl4R@1LY@wdrAg)du~w`CZHiUN7@2bbT%hK(HA3K?sG;OsA%7*$fU$upQuth7JHr1JM@$8; zxlF*o`(xDpx1dHJuEtx%-MakKJ2#y_Sc3PPsKn9tTany<@3$dR%nv&W>j|#ADUJup z%Bilp=i_PSTP<3%9?up=_0d^h!b+R|J|0)+6}X+qjVnH#LUVbZ{s#S-csk4fhAyC( zi(&hGF-%wWd^yH__Ix!Z#qx4Jt6}?cvuIlNa=YSs_Hwro!t#2*lWhC?a8OkB`gqcG z_WE=_#Parhy8go`-v?I7Q8^Kj7g0Gfm}R6e$Ei41@l^ z3WnbQyyG|M!QgQ`S{bRMNKe4@Kp~aI$x8@ki}>(uw7%qb zky75$Eag8110&GjzeADiwnsDNnkrY@+^&vRe>GLDcliNP$>f`>H~T`d|1B8XL;r~) z?f&}T3WjInv?#P-q^(j@2e&p@j?m~@-qNSnTKHRA9Ive|Ae^lS#h~B_O*Pqe4f(4& zv5~u9Ha6i)vJ9`7-_-XPkchiIA*>t^3<K=dh3Y*xN?gON8CiQfqSR}ENB9+kdjFbW62EE@^$G3MAT>RpWl~F(;x+_t? z3ZP1oAl9RE!BGi^tqH}#!kK`h66L^C%M;~B;am@4gT*t50smFol0xki)_hmvB(g zPYL)v+mRNis_PM@tQrWz|536* zJ-;}6jEmSxmH-du)Q(W$xcp0nmZfs-LR!Cd)1LVFx>DwJu@}Tx4w@YWpSJR? zw`@!dp;x>^x2poDw?A3P|B9|Z1C(2{`|%f4|4?E;mY6we+7*%mwcM8T0T|!fk1Z6- zJ_vva5&v*NF`oK7iSAW{;sM%Mk}om6r`3Ctv?|ida*T~6#?^SBD$dcMxY?O#oIEse zCHQ0(t46|TQ7n-uQg&u^3TUltKhP^CkP<#YZ>UwDx&MguVABZ%?!IU{}sILGk=ECKxMevO>jRWsM% zMcM*>%^>9^e2o;w%EcTf8W_v8o-kJcVg+%0mzMOX6D+WGjTR^`5-*2`gte0cVIZv!Z2&ZL;!^GevT&lk zI^5&oLDN(YA}By_A;nzpv8F$Y3glu{HT2P>4TLI28bIO}L2oklAE#laa6@1Rm>hz` zbUTnvjdOut`oDcddSHE?z#Q zH?kg5uipr?^;uH&CsF}Fk)nS#G7GeA=TNlQlBQ7(4S>r9w2MjVV>cA1;xtZ0U&Q8+ zeTwj-wa9rxjyd?4DRohpF?vPC4hc|%?ocsgZU0OL(ZQaGipoohd=jmVFl&I&W94_F ztKhIZR1g5M;vjJ6?>3Ulr$hrEB~T({qH#uNdskZLxC4q!VTn^@7;y&W3lixZ|3qNt zJtzCoLu|0ik+Ca4pM}{gOy)Y1FoF`7hgvd5n(3D5r2~QigCCV}55L+!wV8U8xRjot;D3Y)4J&4bxy0YT+#=s<82@P$U$RiKlLs zE>JrJg%LS`WXxa!kP^g|;tV!02?_jjR-)jfFW#pcm5?Kj*sb8e%8K&!i-_)2)eU!( z;72y{TGPKX%j=a!lcXrp-38#cr_olr;oC#w7JQvQO2ub~agivig&Sb)Snox10avSA zW=wa4xL6@dHc3Ay$HsYSj0Sx2@vjAjcj(JTe(9mtr3}gMv8O+bnJLz#EsX7PwLPSc z+eO!9?91=-Ek8`SP1I%GjqM9PJxuzc*JmRt9EcJ>PK7Gg=i-kaNb)~UL!#^R=@brS zwI63vCh7~JD3YS*wNf+vHuAU1OMms zo(v}8-|Vx0z~TSydT;X2_5S~IT8EQ;|KCq*4$87Da3J)wW*rq}5Rd<_)B3-z_x~+8 z{Qu&#cKl7uEC9XU^KyzR=Bt*Otmr%M0xGG}2^T3FPnTV7H`d-Q7K7J;&c}oN8Lkq< zKzTY1%c2~{;NetBZd3u;fS|&npU#2R&FW`HRm5-jC0>;-{x;n)wr;QO3)DEPLz&F) zUB_A)kXxuR-BkzjZ-JscA?ApVVn#oSdpa|e5JtP`Aws>#k`j0c z`OBD{VHYC`5TqF)T$3*s1BQZ~hDBp20F3=9URQ+bn+HRXv)!|?2^x#034 z%G1cx8OWPqkSvS~8OTr4UBcK*c?k+*S^L(*-CVR-ca;>Gd%O~G`~>}BLBc;)v<#ag z^MY&(A_lKSbn>H;eBCsQ!ZNL;qvD^EZx^NIHBfN4qWOnMS!I^W(s5+h-wzDc1t#@S zfLGeVs`l3hs16*qae?`%X?~So9Sk;chPkUWW@NVlQOac#AI3|U! zPA+X()6=e}#muo47QPw2yInL$erfol|8MqLd`IK5 zb>6$X6^DfvuBBm%t=Qo%iMJY=QDAww-jr;S0MASaekJEjB+Fl(jTr1To}C0avWJ}{ zjp&EHWY@};{nU_&hmD`VGkA7jWehAj;AnDka6nq5ZqR39rNe2>zE9g|{Z;4FN!KzN z&)=Rq^yl+VDqpW3gQ$~U7gLO90v9vfw%*s18t(;ee$)NzxN4nb4#rC#J66h9j>Np5 zX5?6VeL5M!;DGvgx_n;l*Q{g#=%MIOI}q0BAHDc>h%& zLj*mW3^>&f;L?w9A%|mV1irs*mXbO9;^3ZqLPpCpGNRz25})0kbu0PMAulS8Rc?mJ zu+)Phvr>b1a=(oysT^^cGecGm9;LNFmN`3&_S!>@6WxOsxtX^0f-Z#JM~8kyoDaY~ zbVMZdx{@OKaGnM~wg=NB1GX{voxXHZ$kP>;z*fKQzqg{nB$)%xQ0|CY8X176sgJ5& z9gB0KXUKzi{szvYE~WAmpy*wyVPVL=r0aSJ!^8P1lEh3q#aa#2USN?dZDkN~fSDN+8fJt$19@i^rKeT3RQig}oS zqum95$}xnMJ3juvJ(&uyof(l9M$g6rlK0Jv@{TB8CMFb~9MegBmF>dfs`mR-u2)cq z%zm$obtpb6yJ_C9)BB~E=8;UrZ=@-^;ldY9B2_~hvrTzX6#J<*7@R>b=+MfQQ3YRQ zHH5sp^ftlOc((+rL1@lj8C{iB0oj%_4;%Ep#iq0@pf`Dkvfx5lfE#UOhRhp24RKM+ zU+k!KDYNW5aY$}`e`Dj;q|IfF5>!S%N5}6_0`G#>oi!S6tkV<0NiGBzAda@G$jIY2 zEt{L^;hf9+o&Yn4_e&|FdT9Xmm|ih60YhHsKAu+WFD)JCt~&z>L21-B_1QoiMTui! zv3hkylrP3XP+Sa6fA%&-cc* zJm)Y;!^o&C=6Y@Qt(ly9uIJDy43=m!bz;?mmuGGpb)!#{|H(eHbi_#~2s|feWD64E zd}~Udq5~ohPuBBMx0pQ_<4Bw8vtr4rJ=sQ1B$``T3VqTDnQ1UJ{~0gTNk>ht{ck>o&xt>m2>PVq5F?J!vYP`LRH}GN62)(X0R^h~mBYlFGX=!RuXJ56fJSSwHc?B-&K-iIZ zYE8Yq8C&76U2=M%i{Y{>KH*95hQ^YXfX>t32oA+%{@FW(hE9o9Uh^m7b^pHYQ0?TS zulq~$h(irM_{_&Yh8{Qb`g6`f6Lz8aNp&E?+uF?W3lmST?f1U71!8OVeD7U17T(nF zn#ad4MO~M7H-0=cnRYrHW@_g;wJk3%uKwxVO*TtbUg)DHZWS!}zjDPh~wM$^C zCi-E*R`*H_wPOzTa?&fJ^AgP6K!%EbThrEgVx-}AtpD~{Cnth!U<~Z`7`a`l>TtE8 zOBmeux$D61`rH3mD2Pix#uu%htRbZtI`Zo5%oDKlwSCwmW^p^k?|cf|_jyB?*+kvP z&&P|p?QHy=c~yDw+$r{a*Jv!|Tm0^`3uG^Qq;ef1p40x?RR`TWGp0#!x##A8)$@Vh z#Hb+ue2!qJd(A-;=j<{F@=S1n>-iqR31TVqCmi;N&+(^h_9vANz+?-cLBgcE_a|%i zN3RKZ?;pU-6Nub{fLsi^RZ<$>mc28TB`^~h7W0k07O)8sL7&yqhDKYlQozEHaj{Z- zrU%K;NXo(J{y%^s?=2U9m>&F4A0|Wg zC)wXbXgtS22?aUqP|&Ed!)=BDr$hXCLdnHKUj}#_8o)z0Ah$vOv^OPK>|Bx@f0FnE z*!Tm4Wco1m&@g*5q6{9uSDvt6FyX1qVY!;&pF_ic#fBG}1t%?rmrI8o_=i^!L{v$K zSB8dX5Ja>sM%3R&RJftKYl3cB5lS5?-U|5Mf z?@E;uu~~5XHon3+DJF=|@=(Z(7f_*x0l(=5XACwZO!7)q^>TG^P4ea{O4=N92;@!i zaY+F*n}u?#g#WP)VE`F*CjeuU+f3ZnhkOjKe3nC1O+Lk6aM|V$I$?zJI^%d0CcFRS z@Q`*+`-se%2T-M!ab_=3yE3s7%=57LB4llls43&IN|h**B2bQJIIZf}{Wad6-F`UC zWh6}0gxBwRD5L9-MfZbrlZ@o-Z?TS+_*sUG=HKbDZ{h+H^j5kp$*!gf4}n>KeXEUK^L{jqx;2M}D7S&iZk~WVy+Oq5He-S?ZxcC> z<3nDTd7ko*ybbrfPfK|Mk9oXDc_JwJ{G%52uKE3cGQ^SPsRKlOT7J$V7X0Qe7?vtf zc}&I~2GJCz#w_^gjut@f3cjHf8W0s4c@!F^6`Hhi0rI%9YLsl)@w|WJ2!?<_iPAv( zBDkC)ccLQEo+4P7Vsh0Y31#YEGx8y6#i6am;crWdQKQA%z>?_J;&_kZ#3lJ;kB_ND zB{54S2~dCVQArX}>CX?PDMY1Hy(J|_#bp*urF^9em!*)>;unPVc?^Oz?}fy60MW-2dGs>;Nw&X%}u!mI9D`5s2Ao{lOnm#P4k zRWMIgSEW_(>D6#;)kwdpUyrKtv8#fqYH)~aFi@+pe^n9vs)YVKv0-HNw|u8d3aC&s z#ly^sOGHTZ{{Hg^m*3xR%vAvNSt3r6r^R)7Dn-P$RFa6_&k z4JYDCEmGpBl|H}&60awrs8UKdl71uZlufUf#wBqQ~ z7e0mDGJ=kGKFgecVL8!#fTxI_g?0nfMy^pKo=`?b?Rp;j|!u`LOEmVfz|@ zlwK)=m>FZ(?f-(q?PHayJ=WbYC`z!}5CCy?5I5`i`|?Wrr@mmXqH<1 z?{jcpoJ17zw84pshA(4vJT$geXY$^v1*$}QC~x@(9FF8sJ%Od^#zZEEAKgUIMyqlr zq4`b{T2T!T*wS|!@Pnrr`&|rg+3p56_WAD|Pr084ZyBu&ISj5>PdYga2?+_AReQim zT^A+{@(yO{8!+_qv!phdy$l;0*CCxmgn!O|B3ocI*Q!(UouoMbzyTYe!Jnjcv*$t^ z^J=+4%abBzzJedQQuDa+;Al+uW$ZiYyxwa0)+mf36X=NzkZlh%0t`2&+ph~aaVtpV zwNwcQPKdP8E%7%?ME3i5_xlMh_%bc}kN5vL?GJf35ZbYLN<^M12dh&JfpkDfs^Nzy zYhGkAF%)VSKh!ZF|KVCDr`MnmRPcM3*-ks!!7sSD|HLEOF&uxjBrdot^=(#+^mp@1 zRg|Hsa>XCDUzwWUDti?w`#UNInC6EC=SMnL#ss3w(`)Ul7vhO|XPEfrD0)MWzsCQb zd?J}zJ$+eSAzcH!Tifnvft0PTWfp+^;nKZvR!N3`M%7hY5ocRB6nP6Dhw~8i#xcjQ z2LQps@0PE(*Plr@Gz@u!($|CIH_)Ot&|gO}D%UYPH?SwxK|Y&U(VIAblM#f5QOIiE zje}J)%b(xXBHC;r2W?SJu+#d0;e57^1EZ*!x5?%H$v)#2+Tv2&=7`=F(A^fw+7hhX z7U|p;Mc)z6+7avAVd~tHc-^@|?FB{DFe4A#p={yGLB(iQU)QS7Mt8Mep~!Iccik#u z<~<{_JyR$v4>fGBxR0m3Z<+N64k{)2&s>22npY+MuMXJ%=Xuq?9WXxd zXm85@&mAz{>L|QSv54psT8fhCVpTfk9FN+e`6xM5D_~orbt{+6@t&oc-kE=k<2G)m zXKn;cf7s8&4v2ftwtP;^3)3#S=pXJ`S;Vz3?u$qRG9GWP=`RoW=kI=DsIB9c^q)Ew z^mU#3R9?Z@*sS0qwYt3cOUt-s=>RE<(v>A&LUi@9%-ArkMMX3rL3Irh6xv-3L3(n8 zCgQ8&D7x@uqNE16xnL^V*ey#knhPQk7L=XbNQ4@msc_5&Gw3jCB2+0-z=b*=%tyIH zB_c%DvJH@fb*2NI=s% zlnPTn^dA;xQ(l)86FRqUXd5Seh2$Z%;147fGQag( zk#D-9DECuY^OaCTWwYtt(_ZJ!(K1UHT!STT_W{<)UKbMLNtFbTB!oH~LpY6E3cU%b zW&q1jhb@!%>Q9X`={k@7Ac?RHy9kA9`OXOCatiye4{cTs!}zEVm*b4vAFn3hH+2|8 zWz^`Lro=I+J2+b=~iciMxFbfmC%$f&#sGDy-_y{dUAtSmS0S zszT#df}s#^K&oS>`_@lwUHAR$?|)kk3u4Il4s$J|J&udYUipset0vsjngY>z_nNyZ z`Q<;{et2F)$9|7pJ&eCxwm8D^z5MDI_IvNE8E$QXn?>R89TijB>wbZDf5+JR zJREqw@4PyxV)4H3i?4dU2u0HeiZU*!s?tjK*3zd|o#7gE7r{RhXlk&>N$&;3#Q^yQfAEU%; z;*nr-iH*>B&Luc*D&8Ue>~#wKNi=QN{=haBW$L6$vfMn#D+-EsD>oz?FdgDPx`^>w z$s>W683MyPKtew5+@Xy~i<7aqp_NR$WZ=OwWiTNp)l*~rN|O1FdmfJfS3oZ&GYYHj z5L!n?1A7e5Caey@IV}zrv{H`If*7FQR1W|wrlZ*wWwGkZC7AyB7vN+m1#@NOu*Z+c z8@95BjEfg?Sn?>CsbBrTS`lYNm_kutRYE-_0P{D3;MF0yR$ErV)T5H&j#^jIhJi+T zlua@WRw5`BdINaWId8!V(AJQ)of1FPhoX~Zf|^!6#M?nI_=EjAM=$7rfaYi_RLdzB zKXHdyDhFO=Ho&UFEEq@c&*xZKn3N8*C9c>cWpyq&3Dd}|aLpbRTpE3}%^(KCB?@?j zSy2?U$ZmR{C20vF+$;%+50vpoQiZn{B|&OO%IU4MrHZ(vek6X-P9Lex?JSLIuSqy>6%GK)P#TnVs; zW{kPjsyV3~D3+uQg!S&KE@mRWWoqQ|>F}a8HF-1Mk*Sg285z|`C+$aj^tcjRn}fUK^uhEyibl=IjoIS6w9gSLGV1lY+1`TX5LCGx z3SxJ2peCDZfgVO}bY1pmG6191^!KO6t-SBQti-7Xxkg*UXO z?rqvjk1lVGc7H3Zmq|?dem!J%(b%N^QEtqP^C!)>BWFC(pQler!gX;e5HObbTo{!z zYQ#auC>gtQbY0i+>daEOp8jtxz$s}rt)k;se~3QLe!Z&HHp7vE1yMId$FOQ_a1g{d z=0WtgI#Mv>7~}47fe@XmDtKJ&An~05x&YE$IrnjKXJSY^Ty|N6{3(@o+tOmE%XIx1 zh`H)dgKZ~AdS9lQL%Qe0{=9YTP?U|8q}{lsk6!!oY4_n}^>o%+ednj~Gp{@1*|#-U z%n&Z?;zQzj*tP2WQN$B{ey;^kS9Mhw)5Q-doz2nCn_BM5i)an6K^Plp9YLw?0Mn

B`+{^@`P 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%0Du6Jv@0vmC2)xE|#+Fw(}zjOUm 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�SJ6K{zeR-aKd*^NGMX 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%0AYYRk0cD#S%;){0Jhk#6l@U%Qm`TdMAm{Y+OdUA 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 KV_PI?mk`^3VoKSj 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