From cea40f6414f739450f7efe40d6e59694c61e4f4f Mon Sep 17 00:00:00 2001 From: Federico Terzi Date: Sat, 21 Sep 2019 19:47:52 +0200 Subject: [PATCH] Add basic index page --- Cargo.lock | 841 ------------------ Cargo.toml | 36 - azure-pipelines.yml | 37 - build.rs | 55 -- ci/build-linux.yml | 9 - ci/build-macos.yml | 18 - ci/build-win.yml | 17 - ci/deploy.yml | 35 - ci/install-rust.yml | 35 - ci/publish-homebrew.yml | 21 - ci/test.yml | 16 - images/accessibility-macos-enable.png | Bin 103129 -> 0 bytes images/accessibility-prompt.png | Bin 38001 -> 0 bytes images/donate.gif | Bin 2993 -> 0 bytes images/espanso-icon-macos-statusbar.png | Bin 23236 -> 0 bytes images/example.gif | Bin 142687 -> 0 bytes images/icongreensmall.png | Bin 11596 -> 0 bytes images/titlebar.png | Bin 4555 -> 0 bytes images/windows-smartscreen.png | Bin 24546 -> 0 bytes index.html | 13 + native/liblinuxbridge/CMakeLists.txt | 9 - native/liblinuxbridge/bridge.cpp | 383 -------- native/liblinuxbridge/bridge.h | 98 -- native/libmacbridge/AppDelegate.h | 33 - native/libmacbridge/AppDelegate.mm | 73 -- native/libmacbridge/CMakeLists.txt | 9 - native/libmacbridge/bridge.h | 142 --- native/libmacbridge/bridge.mm | 266 ------ native/libwinbridge/CMakeLists.txt | 8 - native/libwinbridge/bridge.cpp | 644 -------------- native/libwinbridge/bridge.h | 144 --- .../project.pbxproj | 312 ------- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../UserInterfaceState.xcuserstate | Bin 22877 -> 0 bytes .../xcschemes/EspansoNotifyHelper.xcscheme | 91 -- .../xcschemes/xcschememanagement.plist | 22 - .../EspansoNotifyHelper/AppDelegate.h | 26 - .../EspansoNotifyHelper/AppDelegate.m | 69 -- .../AppIcon.appiconset/Contents.json | 68 -- .../AppIcon.appiconset/icongreen-1024.png | Bin 98365 -> 0 bytes .../AppIcon.appiconset/icongreen-128.png | Bin 8027 -> 0 bytes .../AppIcon.appiconset/icongreen-16.png | Bin 1789 -> 0 bytes .../AppIcon.appiconset/icongreen-256.png | Bin 15943 -> 0 bytes .../AppIcon.appiconset/icongreen-32.png | Bin 2728 -> 0 bytes .../AppIcon.appiconset/icongreen-512.png | Bin 20639 -> 0 bytes .../AppIcon.appiconset/icongreen-64.png | Bin 4483 -> 0 bytes .../Assets.xcassets/Contents.json | 6 - .../EspansoNotifyHelper.entitlements | 10 - .../EspansoNotifyHelper/Info.plist | 36 - .../EspansoNotifyHelper/main.m | 30 - packager.py | 156 ---- packager/mac/espanso.rb | 14 - packager/win/icon.ico | Bin 28522 -> 0 bytes packager/win/modpath.iss | 219 ----- packager/win/setupscript.iss | 66 -- src/bridge/linux.rs | 43 - src/bridge/macos.rs | 59 -- src/bridge/mod.rs | 27 - src/bridge/windows.rs | 60 -- src/check.rs | 60 -- src/clipboard/linux.rs | 66 -- src/clipboard/macos.rs | 61 -- src/clipboard/mod.rs | 50 -- src/clipboard/windows.rs | 56 -- src/config/mod.rs | 699 --------------- src/config/runtime.rs | 471 ---------- src/context/linux.rs | 102 --- src/context/macos.rs | 140 --- src/context/mod.rs | 61 -- src/context/windows.rs | 158 ---- src/engine.rs | 204 ----- src/event/manager.rs | 62 -- src/event/mod.rs | 82 -- src/extension/date.rs | 49 - src/extension/mod.rs | 37 - src/extension/script.rs | 74 -- src/extension/shell.rs | 68 -- src/keyboard/linux.rs | 56 -- src/keyboard/macos.rs | 51 -- src/keyboard/mod.rs | 52 -- src/keyboard/windows.rs | 58 -- src/main.rs | 585 ------------ src/matcher/mod.rs | 152 ---- src/matcher/scrolling.rs | 166 ---- src/protocol/mod.rs | 138 --- src/protocol/unix.rs | 82 -- src/protocol/windows.rs | 76 -- src/res/config.yaml | 60 -- src/res/mac/EspansoNotifyHelper.zip | Bin 118226 -> 0 bytes src/res/mac/com.federicoterzi.espanso.plist | 19 - src/res/mac/icon.png | Bin 239 -> 0 bytes src/res/test/config_with_bad_yaml.yaml | 12 - src/res/test/working_config.yaml | 10 - src/res/win/espanso.bmp | Bin 19256 -> 0 bytes src/res/win/espanso.ico | Bin 28522 -> 0 bytes src/sysdaemon.rs | 124 --- src/system/linux.rs | 87 -- src/system/macos.rs | 77 -- src/system/mod.rs | 51 -- src/system/windows.rs | 69 -- src/ui/linux.rs | 50 -- src/ui/macos.rs | 144 --- src/ui/mod.rs | 62 -- src/ui/windows.rs | 111 --- 105 files changed, 13 insertions(+), 9050 deletions(-) delete mode 100644 Cargo.lock delete mode 100644 Cargo.toml delete mode 100644 azure-pipelines.yml delete mode 100644 build.rs delete mode 100644 ci/build-linux.yml delete mode 100644 ci/build-macos.yml delete mode 100644 ci/build-win.yml delete mode 100644 ci/deploy.yml delete mode 100644 ci/install-rust.yml delete mode 100644 ci/publish-homebrew.yml delete mode 100644 ci/test.yml delete mode 100644 images/accessibility-macos-enable.png delete mode 100644 images/accessibility-prompt.png delete mode 100644 images/donate.gif delete mode 100644 images/espanso-icon-macos-statusbar.png delete mode 100644 images/example.gif delete mode 100644 images/icongreensmall.png delete mode 100644 images/titlebar.png delete mode 100644 images/windows-smartscreen.png create mode 100644 index.html delete mode 100644 native/liblinuxbridge/CMakeLists.txt delete mode 100644 native/liblinuxbridge/bridge.cpp delete mode 100644 native/liblinuxbridge/bridge.h delete mode 100644 native/libmacbridge/AppDelegate.h delete mode 100644 native/libmacbridge/AppDelegate.mm delete mode 100644 native/libmacbridge/CMakeLists.txt delete mode 100644 native/libmacbridge/bridge.h delete mode 100644 native/libmacbridge/bridge.mm delete mode 100644 native/libwinbridge/CMakeLists.txt delete mode 100644 native/libwinbridge/bridge.cpp delete mode 100644 native/libwinbridge/bridge.h delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.pbxproj delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcuserdata/freddy.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcshareddata/xcschemes/EspansoNotifyHelper.xcscheme delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcuserdata/freddy.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.h delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.m delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-1024.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-128.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-16.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-256.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-32.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-512.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-64.png delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/Contents.json delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/EspansoNotifyHelper.entitlements delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/Info.plist delete mode 100644 other/EspansoNotifyHelper/EspansoNotifyHelper/main.m delete mode 100644 packager.py delete mode 100644 packager/mac/espanso.rb delete mode 100644 packager/win/icon.ico delete mode 100644 packager/win/modpath.iss delete mode 100644 packager/win/setupscript.iss delete mode 100644 src/bridge/linux.rs delete mode 100644 src/bridge/macos.rs delete mode 100644 src/bridge/mod.rs delete mode 100644 src/bridge/windows.rs delete mode 100644 src/check.rs delete mode 100644 src/clipboard/linux.rs delete mode 100644 src/clipboard/macos.rs delete mode 100644 src/clipboard/mod.rs delete mode 100644 src/clipboard/windows.rs delete mode 100644 src/config/mod.rs delete mode 100644 src/config/runtime.rs delete mode 100644 src/context/linux.rs delete mode 100644 src/context/macos.rs delete mode 100644 src/context/mod.rs delete mode 100644 src/context/windows.rs delete mode 100644 src/engine.rs delete mode 100644 src/event/manager.rs delete mode 100644 src/event/mod.rs delete mode 100644 src/extension/date.rs delete mode 100644 src/extension/mod.rs delete mode 100644 src/extension/script.rs delete mode 100644 src/extension/shell.rs delete mode 100644 src/keyboard/linux.rs delete mode 100644 src/keyboard/macos.rs delete mode 100644 src/keyboard/mod.rs delete mode 100644 src/keyboard/windows.rs delete mode 100644 src/main.rs delete mode 100644 src/matcher/mod.rs delete mode 100644 src/matcher/scrolling.rs delete mode 100644 src/protocol/mod.rs delete mode 100644 src/protocol/unix.rs delete mode 100644 src/protocol/windows.rs delete mode 100644 src/res/config.yaml delete mode 100644 src/res/mac/EspansoNotifyHelper.zip delete mode 100644 src/res/mac/com.federicoterzi.espanso.plist delete mode 100644 src/res/mac/icon.png delete mode 100644 src/res/test/config_with_bad_yaml.yaml delete mode 100644 src/res/test/working_config.yaml delete mode 100644 src/res/win/espanso.bmp delete mode 100644 src/res/win/espanso.ico delete mode 100644 src/sysdaemon.rs delete mode 100644 src/system/linux.rs delete mode 100644 src/system/macos.rs delete mode 100644 src/system/mod.rs delete mode 100644 src/system/windows.rs delete mode 100644 src/ui/linux.rs delete mode 100644 src/ui/macos.rs delete mode 100644 src/ui/mod.rs delete mode 100644 src/ui/windows.rs diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 80d9ea2..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,841 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "adler32" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "aho-corasick" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "ansi_term" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "arrayref" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "arrayvec" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "atty" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "autocfg" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "base64" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "blake2b_simd" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", - "arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "byteorder" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bzip2" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "c2-chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.41" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "chrono" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "clap" -version = "2.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", - "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cmake" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "constant_time_eq" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "crc32fast" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "dirs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "dirs-sys" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "dtoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "espanso" -version = "0.1.0" -dependencies = [ - "backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_yaml 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)", - "simplelog 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "widestring 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "zip 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "failure_derive" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "flate2" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "getrandom" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "itoa" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "libc" -version = "0.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "linked-hash-map" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "log" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "log-panics" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "memchr" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "miniz_oxide" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "nodrop" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "num-integer" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "num-traits" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "podio" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ppv-lite86" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "proc-macro2" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quote" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_chacha" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "redox_syscall" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "redox_users" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "regex-syntax" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "remove_dir_all" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rust-argon2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ryu" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "serde" -version = "1.0.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive" -version = "1.0.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_json" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_yaml" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)", - "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "simplelog" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "term 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "syn" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tempfile" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "term" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "thread_local" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "time" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "unicode-width" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "vec_map" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "wasi" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "widestring" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "yaml-rust" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "zip" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c" -"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" -"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" -"checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba" -"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" -"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" -"checksum backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "5180c5a20655b14a819b652fd2378fa5f1697b6c9ddad3e695c2f9cedf6df4e2" -"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" -"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd" -"checksum blake2b_simd 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bf775a81bb2d464e20ff170ac20316c7b08a43d11dbc72f0f82e8e8d3d6d0499" -"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b" -"checksum bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6584aa36f5ad4c9247f5323b0a42f37802b37a836f0ad87084d7a33961abe25f" -"checksum c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101" -"checksum cc 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "8dae9c4b8fedcae85592ba623c4fd08cfdab3e3b72d6df780c6ead964a69bfff" -"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33" -"checksum chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e8493056968583b0193c1bb04d6f7684586f3726992d6c573261941a895dbd68" -"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "81fb25b677f8bf1eb325017cb6bb8452f87969db0fedb4f757b297bee78a7c62" -"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120" -"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" -"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" -"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e" -"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" -"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" -"checksum flate2 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "2adaffba6388640136149e18ed080b77a78611c1e1d6de75aedcdf78df5d4682" -"checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum getrandom 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "473a1265acc8ff1e808cd0a1af8cee3c2ee5200916058a2ca113c29f2d903571" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" -"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ae0136257df209261daa18d6c16394757c63e032e27aafd8b07788b051082bef" -"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" -"checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10" -"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945" -"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" -"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" -"checksum podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "780fb4b6698bbf9cf2444ea5d22411cef2953f0824b98f33cf454ec5615645bd" -"checksum ppv-lite86 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e3cbf9f658cdb5000fcf6f362b8ea2ba154b9f146a61c7a20d647034c6b6561b" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "175a40b9cf564ce9bf050654633dbf339978706b8ead1a907bb970b63185dd95" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum rand 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d47eab0e83d9693d40f825f86948aa16eff6750ead4bdffc4ab95b8b3a7f052c" -"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d" -"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" -"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" -"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" -"checksum serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "fec2851eb56d010dc9a21b89ca53ee75e6528bab60c11e89d38390904982da9f" -"checksum serde_derive 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)" = "cb4dc18c61206b08dc98216c98faa0232f4337e1e1b8574551d5bad29ea1b425" -"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704" -"checksum serde_yaml 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)" = "38b08a9a90e5260fe01c6480ec7c811606df6d3a660415808c3c3fa8ed95b582" -"checksum simplelog 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe8c881061cce7ee205784634eda7a61922925e7cc2833188467d3a560e027" -"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -"checksum term 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5" -"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" -"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" -"checksum widestring 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effc0e4ff8085673ea7b9b2e3c73f6bd4d118810c9009ed8f1e16bd96c331db6" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" -"checksum zip 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3c21bb410afa2bd823a047f5bda3adb62f51074ac7e06263b2c97ecdd47e9fc6" diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index 991b459..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,36 +0,0 @@ -[package] -name = "espanso" -version = "0.1.0" -authors = ["Federico Terzi "] -license = "GPL-3.0" -description = "Cross-platform Text Expander written in Rust" -readme = "README.md" -homepage = "https://github.com/federico-terzi/espanso" -edition = "2018" -build="build.rs" - -[dependencies] -widestring = "0.4.0" -serde = { version = "1.0", features = ["derive"] } -serde_yaml = "0.8" -dirs = "2.0.2" -clap = "2.33.0" -regex = "1.3.1" -log = "0.4.8" -simplelog = "0.7.1" -zip = "0.5.3" -fs2 = "0.4.3" -serde_json = "1.0.40" -log-panics = {version = "2.0.0", features = ["with-backtrace"]} -backtrace = "0.3.37" -chrono = "0.4.9" -lazy_static = "1.4.0" - -[target.'cfg(unix)'.dependencies] -libc = "0.2.62" - -[dev-dependencies] -tempfile = "3.1.0" - -[build-dependencies] -cmake = "0.1.31" \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index c8d63ef..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Starter pipeline -# Start with a minimal pipeline that you can customize to build and deploy your code. -# Add steps that build, run tests, deploy, and more: -# https://aka.ms/yaml - -trigger: -- master - -jobs: - - job: Linux - pool: - vmImage: 'ubuntu-latest' - steps: - - script: | - sudo apt -y update - sudo apt install -y libxtst-dev libx11-dev libxdo3 libxdo-dev - displayName: Install library dependencies - - template: ci/test.yml - - template: ci/build-linux.yml - - template: ci/deploy.yml - - - job: macOS - pool: - vmImage: 'macOS-10.14' - steps: - - template: ci/test.yml - - template: ci/build-macos.yml - - template: ci/deploy.yml - - template: ci/publish-homebrew.yml - - - job: Windows - pool: - vmImage: 'windows-2019' - steps: - - template: ci/test.yml - - template: ci/build-win.yml - - template: ci/deploy.yml \ No newline at end of file diff --git a/build.rs b/build.rs deleted file mode 100644 index a415c03..0000000 --- a/build.rs +++ /dev/null @@ -1,55 +0,0 @@ -extern crate cmake; -use cmake::Config; -use std::path::PathBuf; - -/* OS SPECIFIC CONFIGS */ - -#[cfg(target_os = "windows")] -fn get_config() -> PathBuf { - Config::new("native/libwinbridge").build() -} - -#[cfg(target_os = "linux")] -fn get_config() -> PathBuf { - Config::new("native/liblinuxbridge").build() -} - -#[cfg(target_os = "macos")] -fn get_config() -> PathBuf { - Config::new("native/libmacbridge").build() -} - -/* - OS CUSTOM CARGO CONFIG LINES - Note: this is where linked libraries should be specified. -*/ - -#[cfg(target_os = "windows")] -fn print_config() { - println!("cargo:rustc-link-lib=static=winbridge"); - println!("cargo:rustc-link-lib=dylib=user32"); -} - -#[cfg(target_os = "linux")] -fn print_config() { - println!("cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu/"); - println!("cargo:rustc-link-lib=static=linuxbridge"); - println!("cargo:rustc-link-lib=dylib=X11"); - println!("cargo:rustc-link-lib=dylib=Xtst"); - println!("cargo:rustc-link-lib=dylib=xdo"); -} - -#[cfg(target_os = "macos")] -fn print_config() { - println!("cargo:rustc-link-lib=dylib=c++"); - println!("cargo:rustc-link-lib=static=macbridge"); - println!("cargo:rustc-link-lib=framework=Cocoa"); -} - -fn main() -{ - let dst = get_config(); - - println!("cargo:rustc-link-search=native={}", dst.display()); - print_config(); -} \ No newline at end of file diff --git a/ci/build-linux.yml b/ci/build-linux.yml deleted file mode 100644 index 6fb6721..0000000 --- a/ci/build-linux.yml +++ /dev/null @@ -1,9 +0,0 @@ -steps: - - script: | - cargo build --release - cd target/release/ - tar czf "espanso-linux.tar.gz" espanso - cd ../.. - cp target/release/espanso-*.gz . - ls -la - displayName: "Cargo build and packaging for Linux" \ No newline at end of file diff --git a/ci/build-macos.yml b/ci/build-macos.yml deleted file mode 100644 index ea7bee9..0000000 --- a/ci/build-macos.yml +++ /dev/null @@ -1,18 +0,0 @@ -steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.7.4' - addToPath: true - - - script: | - python --version - python -m pip install toml click - displayName: Installing python dependencies - - - script: | - set -e - python packager.py build - cp target/packager/mac/espanso-*.gz . - cp target/packager/mac/espanso.rb . - ls -la - displayName: "Cargo build and packaging for MacOS" \ No newline at end of file diff --git a/ci/build-win.yml b/ci/build-win.yml deleted file mode 100644 index 726a210..0000000 --- a/ci/build-win.yml +++ /dev/null @@ -1,17 +0,0 @@ -steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.7.4' - addToPath: true - - - script: | - python --version - python -m pip install toml click - displayName: Installing python dependencies - - - script: | - python packager.py build - copy "target\\packager\\win\\espanso-win-installer.exe" "espanso-win-installer.exe" - dir - displayName: "Build and packaging for Windows" - diff --git a/ci/deploy.yml b/ci/deploy.yml deleted file mode 100644 index d429d6d..0000000 --- a/ci/deploy.yml +++ /dev/null @@ -1,35 +0,0 @@ -parameters: - github: - isPreRelease: false - repositoryName: '$(Build.Repository.Name)' - gitHubConnection: "MyGithubConnection" - dependsOn: [] - displayName: "Release to github" - -steps: - - script: | - VER=$(cat Cargo.toml| grep version -m 1 | awk -F '"' '{ print $2 }') - echo '##vso[task.setvariable variable=vers]'v$VER - condition: not(eq(variables['Agent.OS'], 'Windows_NT')) - displayName: Obtain version from Cargo.toml on Unix - - - powershell: | - Select-String -Path "Cargo.toml" -Pattern "version" | Select-Object -First 1 -outvariable v - $vv = [regex]::match($v, '"([^"]+)"').Groups[1].Value - echo "##vso[task.setvariable variable=vers]v$vv" - condition: eq(variables['Agent.OS'], 'Windows_NT') - displayName: Obtain version from Cargo.toml on Windows - - - task: GitHubRelease@0 - displayName: Create GitHub release - inputs: - gitHubConnection: ${{ parameters.github.gitHubConnection }} - tagSource: manual - title: '$(vers)' - tag: '$(vers)' - assetUploadMode: replace - action: edit - assets: 'espanso-*' - addChangeLog: false - repositoryName: ${{ parameters.github.repositoryName }} - isPreRelease: ${{ parameters.github.isPreRelease }} \ No newline at end of file diff --git a/ci/install-rust.yml b/ci/install-rust.yml deleted file mode 100644 index ca9e2c4..0000000 --- a/ci/install-rust.yml +++ /dev/null @@ -1,35 +0,0 @@ -# defaults for any parameters that aren't specified -parameters: - rust_version: stable - -steps: - # Linux and macOS. - - script: | - set -e - curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain $RUSTUP_TOOLCHAIN - echo "##vso[task.setvariable variable=PATH;]$PATH:$HOME/.cargo/bin" - env: - RUSTUP_TOOLCHAIN: ${{parameters.rust_version}} - displayName: "Install rust (*nix)" - condition: not(eq(variables['Agent.OS'], 'Windows_NT')) - # Windows. - - script: | - curl -sSf -o rustup-init.exe https://win.rustup.rs - rustup-init.exe -y --default-toolchain %RUSTUP_TOOLCHAIN% - set PATH=%PATH%;%USERPROFILE%\.cargo\bin - echo "##vso[task.setvariable variable=PATH;]%PATH%;%USERPROFILE%\.cargo\bin" - env: - RUSTUP_TOOLCHAIN: ${{parameters.rust_version}} - displayName: "Install rust (windows)" - condition: eq(variables['Agent.OS'], 'Windows_NT') - # Install additional components: - - ${{ each component in parameters.components }}: - - script: rustup component add ${{ component }} - - # All platforms. - - script: | - rustup -V - rustup component list --installed - rustc -Vv - cargo -V - displayName: Query rust and cargo versions \ No newline at end of file diff --git a/ci/publish-homebrew.yml b/ci/publish-homebrew.yml deleted file mode 100644 index d5ea1cb..0000000 --- a/ci/publish-homebrew.yml +++ /dev/null @@ -1,21 +0,0 @@ -steps: - - task: InstallSSHKey@0 - inputs: - knownHostsEntry: "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" - sshPublicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsB9zcHN84/T5URAsfIpb52HnJl2kUK7WWXyV9pFXaO6yz722JxzVq56J3TTrcUCDhM3DKSGKivB6n/tmLw4mefcY3t7kh8puAtaNrNnB4TWqVPFHZtnpYuYslp1rM92r7Bz1FHfVfsDZxqSWlGU/lp0gNEEgXbr2PCExbCh3TGTsKePARhMAtPEvyEZk1+8uA/HvUTjhuDp7P+BbejAsqtgVF0QoEvqDE5af8DZY6+i1cHRgwBYgSnOus8FHsZUGMyAJQtb+dD7imGw/nzokPJzbmQJwQetyhp52CfThpAm12EFtIU43imb8nndlVAmsIHF6czbmI5LP3U0UcTLct freddy@freddy-Z97M-DS3H" - sshKeySecureFile: "azuressh" - - - script: | - set -ex - cat ~/.ssh/known_hosts - git config --global user.email "federicoterzi96@gmail.com" - git config --global user.email "Federico Terzi" - VER=$(cat Cargo.toml| grep version -m 1 | awk -F '"' '{ print $2 }') - git clone git@github.com:federico-terzi/homebrew-espanso.git - rm homebrew-espanso/Formula/espanso.rb - cp espanso.rb homebrew-espanso/Formula/espanso.rb - cd homebrew-espanso - git add -A - git commit -m "Update to version: $VER" - git push - displayName: "Publishing to Homebrew" \ No newline at end of file diff --git a/ci/test.yml b/ci/test.yml deleted file mode 100644 index 13decb1..0000000 --- a/ci/test.yml +++ /dev/null @@ -1,16 +0,0 @@ -parameters: - rust_version: stable - -steps: - - template: install-rust.yml - - - script: | - set -e - cargo test --release - displayName: Cargo tests on Unix - condition: not(eq(variables['Agent.OS'], 'Windows_NT')) - - - script: | - cargo test --release - displayName: Cargo tests on Windows - condition: eq(variables['Agent.OS'], 'Windows_NT') \ No newline at end of file diff --git a/images/accessibility-macos-enable.png b/images/accessibility-macos-enable.png deleted file mode 100644 index 58af7cc7c2ce2752ff8bdfa13925d478bf13b4bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103129 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
  • ImV3*S7qG-l16x7dujyid`QNZq?4U(IN&H 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

    F7{#7`%>pb_y- zr(DlWl3^wU*SGN>bZkNit0Xp=LUmUE`y;%lFlfUNc7_F&H0?ynqUx3Y^T(^*%Hi*6X$`{d9B zKB)pa!a%UtIiBR#8q2D5^~HDD+(jYDMGM4OZl6oBu#zkgZ!culDO(hGA;^L4$y95x zzg|0b@rZtIl`b5o6Y@vzk(2NU@G|05DwJ zCoGJ|+AZvlaTLWI4U@adkC73tm5n8!CSZxE9Ek2^?(V0Tya_x{Q1ECmsU8Z6nYfy> zUV&l4>$=dR0;BMq$%xAlY9O6s{(KtZaTm_xGdO{$d1%u0W}EGb$k6n}BvaY%l<8SP zUq$!`JxnjDXq+&QfsHg}DcehLWi)Zc54-dM$lJG z($C&y!Y?;-KevacB2ruVaP4w?; z51}NxvVxJG`p&7taZc2qRPBYaK4c6kdkv&xbdl9fGBoNOBGcfdIS`R~P-E^PGj-Qc zk=md)$$LXuA8$_vgE*D)a5Kr*`pYkxZ$js)Y-shrXrW8woNzL+n|W#S$S~Jfp?kUv_=EA52Bu+4$(y6jLJZ%i5^Bebv}hmG647pTT)RT9-w=QP$YsydJ)z`(WIhd$j=C$#r zH&(tgA4SCd5}%{7X}?W7J|EiWM!>$l_96N)4lGh#VN9PlIGY!%$@6B2tOkW7i?|az zte93&UA3QEvWJ^y6DcnHu==1=S&M#Tc;}~pBb-6cqA^gFyooJ}ZCdc9LmxO>WbejQ zRa}6cWPWTqXO@x5ZvK<<+Cb==@H8YYC87adh;lfP?NVB(WHj8xqens}WfA#NU)DI@nzMgg%@rCiJC>0a6RYm!<$3KwMu&$-0*O#+hb-MpRB94Cr-i>%W( z38_&Lcy2{Z&)}e}J@HbDPTL)1$TO?XWsh-f?|#fJBN|^GHO5k|tANQ+lu~N?4LscF zYp-vEE>zT?mK&T+_h&=D|4h0+d{_ngZG9k&~5%DFzn@Ahv3&xnVBK8SU!+g6sb+^t1ly~ zg=f0e6Yx_iuAAIy1%M3q!WyjPJ8cc09=;4qg=S@Mog(YoEX?P(y;^K)k?M=`HHh_% z2l{OD&Cz>nZD|hTsbn+I{A|=fYdUv@h4Kp{9u-u06Xpl3j}|8Vj&M|c$rW`hPhTFo z$tI1agpH{$j^`d0UptmG{j9rU^`13{80V1^KV5qj7z1nM3O4hMLXk+|q3tSIin=j6 zqni9Of07fCu^aiBL?vAGnqAg;IdpOI`rz@yB*P@s{WB26{{n)Qm3u*WQTQma}x_6+5ii-q$(ilcw8;_Z{7-SNRj!E)qeLAbGB(NxlD&CB260!7` zvvd3b@}9qB%w9YYx*355fu;T}XPS!; z@3UhERXi#!(}`{#K1*y#ot~9(7|@HSv5cP zeWy4`DXS+wI(x6hk5iZh(+T6w==^q1Lc_3-Lhnb!n4B`-;JLCz+NpGf{6lIO@yVP% zqE>M@#FESfnI{9&I1z&Zaex_ErbCFM``p-gyM3M=U{TFnRo+6~x3UhMUtGV@ z9Nb{Pa8h-Ke(iP>$VwDoH*PLpa6vxC3@D)WUPxCxeQj2TFLNl~sBdOrnGJZo;H0X=%_&Et>WTd8ED zT%7$Mu4VcS)F*?*HvvT@ab1e8;O26ECZTtjd3QaH+drH2b{$Cds*-V59{K^FwElIjjOyhZ%&nv;_F4B{b$tU$7c^#xBhhr53WYsTc;HDlD!6 zS9&VmmmcoSahAUgIh=tIZKVu~Tt&@nl`^6}aDLIcy&+tbL*aNd$ePO8b@qqL|N`CGQe|I^>+A=JjM_y>9Ek;^zOA`Id;U-c={>J;momvwybC z%?0(1v|@dJr5-5&b+tBOhCyaQnQ(X^A->Yo^r_}S7YP8CE)OOMDw*SR5Pw&;$R%T+ zw|!m@4nRifpg4S6ulaBhFRbBat&!weQQP{LV++DHSX?DoC%!DARR6=w^ZLA!c3@Dl z0llT`u_oWrpt>hXxqpJZ*{>fVUwzN}nLntxqzywaj^lK?FdGMPee5P){0H&Byp9l8 zn_$n+3Q1K{0CII)Vw+Ob5d3AO-b6M>>C=m&05w0u``wuy(|nU#Qj;~D0ewi}pL7=+ z%xa7%^q~G9nv$T_+&0f};ka`k+42SpW0VH+6dI8_R@r=@!_4R}`n>i5!{O`r3>jIT zrK#Ndgowlgo*J^Jj8z$;=zu*z?ZZWjz~2;lqd!D)gj$IwUs-A<9AX7e;9~h(+jbqy zy6L}oeuF|XQFw@}*xxUw3#4(ez$bqV$*Ls}WP~h4#ti-~WZ=hwZ0V8?vy7`uXuQfp zh)0#vOfGwLUeW*OJOW)c*d^a;rR{_n*`~tSn&5C)EQ`MlO4bHV76B|fm(MQOoYmhR zwB-U!3>E@TMCCJZ(2O1`ql_h;7*|2Nl%H+o_5aaU1_(A-FdbQQgP?u}w;CJ@LKo{| z6RuAc9VXoCu5ujzOE3L*tXCr;+74D|bNu(3PAt}vQ!;}#z5HFLy%+1D;@3}^oI{k#l zSPWUH&^7htz`V#aQ~B#B0??%V*RRvEKff1OGZ?twiF)%a)=RJ!n({c#a)}4Q|gBZjtjq-i{OZPy2e zGX;a1ly*2)R$z&C-B5kM2Uz%=_~0=T0df`=wD;N)Wc8~5?7(W6|E{UPSy<=eo!I$c zWL*#o6jUZW8v>TP8A@_>o)-1WUE&zh(FR4H6+4?T+5zjQAW(%mIV&qGTc>`v;};{b zeR{)7MwOQ(Yb!9@Ze}d|@sCd8Pn>VrW(giA>zx1jTiUUrE-svkm}gcCH>_+v6C2CF zwgNA{x^4D!J zx)`J-v-;DN{k<@n()$&>5>;m~ zywF@i(i2y)d<{;4PGCfYEcvl31FZNM$C$$_UA53N@}0zJi5yET;UJ%*arDF9jbT3A>Zt@H5Et0)$gg)EElwAH+pN zQ&#zNJx}xGpQZ4J3BtYkmFZ`lwZX7qCXSJM>GdQ4QOHmiTH>dmHhIz|#cBx7ehLaw zhaUl3C6g1(YrjcNDy-~4>id96N*bA_Ne&i_zoMo#Edy7InVRAxsA9z>rI8UVT1kT5 zPzX<+X(mT5dv(Nn;}r zM=r_nR%$T0tV(rFjY09GmZfH7J0U&(%W|v5JW@baF;d2FYI)g+53b(KW8+}ukDth4 z@T3*4@+&P+)t?rPv*$_7X&^E0s%j7ZZyy#l7Z>#?nFyqmZOx!G$C{?|_gtzaP`5&o zSyVGFOLi%VX)0m15ka)R%;3NIkse-9;9Y7O9b?vV5|^tXPtA~!fL-hBQ{JGX@aD^^ zLdow6ur;+GJyPV@_o~^C30dKyT9$ktcd+WbC#^b|m&SZ6`n0spoS&qkx*rY*CvbLm z+_g}e0fx%>Vyn06C}aPhLaw}VGEqgzk3)WMh9%zq`dvd?xk2((JO_q<_Seswy|($I zLaNGQDDj#sA|~zoiUwn9LuTf3r#o;sqN8S80R*hLrq7Iuw48#tLaZHKO!P%{#vkZ(Wd-^uA5C}z=o{Zwq!eZ z-<~#1?VS7l7WhMPmfG4X2r2B-GcfciiM-6u?{gQs0ljLkGyVAv;k5q5F1wm_)bA^D z7uU&twAyJ2c;7(t1d+N*an_1sPQ|g8cRp%lC<2Tn|A`kmcW=~;vdPF!jj`J;gbSrG zjyN~U?`I=pJvO$0u3wcHu!90m4|EKlVgZ_tS8?`@(zHv>Y#fpC!9;py&35L+H#_cJ zq6p52fn-NSoYY!9s1Ad=DwEFmAEC*%<{xA<6Q6#WD=E_!B@w71HC613e`@Q?6_w%1 zzSnpe9;IL+Z%k0U<{ zbr03%?aGF4eZcuH`2^*~a;ZB2#M2Y?mSe9=h8OTTI`+ciwGuZA-)}*806Z-|nXf^q zVs^yosST0e^Cj=|MgJvW<=tvtvva1pukAsNGn?pdd5Qd0N!&~nG zB=HB9Km)=S4nW<``9Yr4>y%vs2yX$-;F0w875;OK(f2$RkVOCR7uJwL7&(M5+m*PJf)ER{?)yogKH3SXigEI8ef zP0juZ7&%nwtB$^7Mr;WzMtS?LXtZ+Pg+;3#<~ML?QQai>TC4ZTVpV?X5mhri7ucdL2D+}~M^>B`cg7~4;t;m{0md@Jzfs7DnUcdOOcC+-KX`};R^i<5=WT@yXLxU2;S)q@P zjuf3wu*6>-#&TEHtv<+1d+<&+?Co|+`^tENI({v1qFQEL0F25GU^Q~yj0UW)OX&=B zbqn6O1W?%|fOlsJTWRI3eXOmD<5<2XsZQvLx=%{ zL!1$YuYfxUOw0}p7V4>g##4NT5O21MkHa|QhAvBphHR~kP@=rce$_aUB-A3`fMTcs z2NgZW(cM)fA&sU|m~?5_GQIoQZrmgfsZQJC>!rS$IeY&I2#b0!KM-vn?~y7_Zh9PM z+s%N?%t~z3mBV2R%2xo9oi0iBqLPe^;~uAGS@QqK)muho)pg;*f=G9FcO%{1-3`(u z-KaDu-QC@t($d}C-QCUE=<|;6obQK&A96G9z4qFB%{i|^lDnwTYsG%&%{X)$bxJd| z`U7N<$+*$MK?glT389~GIJ=Xx<+?{Kr5h6FLPDVBfGNEWK;9X}d@idy)E`j>Oc!xPH6P5+% zeDnyF=8YMwOcArIKlB0@YjEq+O#+kvQL$kcHXUg^wpzQUH{um`J2|Ts&&PZJ;Yr#K z3=Jnyo<D*Vq zlhq9n^7^{FGeny&)?eyf>)8P;p~g?@!>C#q0{{ae{pi>XVoU_28~p=ZLAfW!kX7)*=^;h7 z7S&i5ZdTDcGMJSaF_j9*^u_ZsrU&ts6E6Y3Tb5e&YM` zr`mJH2U{pu8K<=vdtTkJmkn6D|1G@toggC%`n|$4C)xT0@N5mRfvH*oSTu_%S=ELj zjg~qY7riUk>qOglc%A$kNcj*e>x>PI8hx==9W?@t`fgTj>9B0n6wC*9IE_{={qHsL z9LylIf;z<_TbdLIncLeUD$-glh_kUb0fm}82`r7Wi~B%g06bua9CZ~Vg)HSO0k==r zu)GOLSeK|HBN_qH(tF_A)V{e%3B8o7{76r$z8#7`+u3xU@wG;IZ|ZVe zCF7~yT1t!kmwGLIiA+YRb0E7=Wk-od;r88kfa)2n6%ldCs{FTDNzFLo{1>o7P1*Pd z0?oJiUpSUKGc&527dcYkOb@bBdhr$|(*vQR3jtmt4=!DHM~@YDKVJ6=3uDR>R=lwa z!}#Am5IGC`a3_E;V_K#@u;~3%O3KnC-;&ba2Dpda&1bS*dsFQljxn!9I0>j5zAy}S z%!JlOeV2bLeMAdL$~96|GRGSf^^*Xz0vhCMt*Wh1lxz`$KcrRqJ1TCu^o`Ii%ITkN zHdO2Ny9SG1@7*rysC$cdsv$!Vi1Z3fS^4h)W-Q4f9Of^G@w+NXwHObtZCsCXxK}$eui8wGZtQh^hC^F!*c06gG7XpSa2R$q9On!d*|?3Jx;V1X)tt-rx^WfmpstF-7^l&<;^j+QVtHt^L{y0wF7_s;L#e-OgYSczXFh zpl#I3&CA;W>gmqLm%a@VtO!aSRF6lCg3Vj*Q&{>=*s`V3zmuzdb1+=_DJf3WA$|u~ zs8lfV`#~xC?I58HPrqlZZQ53|z#$-6N&+4J75-N(F4Lz>X1i!dqEthQSzg{xRMpL@ zhC(gOD4BFL1R_;ce6DgRJ{n1{@{w>KC9XG7P{0U~J*qgvf_veuq$?ZD#S|HvWwF(I zV!9(e<>N#wo7lHm88mP7tf)r$s^6$bR(`s>@y3=~E{r$1*%+%%R8^87t^ZPfE3?*M zJ~Pourw>eTSibS=EQ%vt-*!$4p)@ z^mVxG(pS?zgubmXN@)Y&kRdfV*>2{yuN=#G;D5VTY~i=YrjK8UX_s7lez;5z)-JD=1Ugk^EORX&VJ5+AJ~?(p!x&!dl@JpHZ-k7#?2Tn# z78;3><6B5`wBIc%NDa;KDqov91uWuwA*ze|P^t@~{Sz($dG|WNJV##}`__DA6v2tk z&<|P`(k+V5j^hqkX;ivh5GTB~TAT%)?RJ5I&wWc+0}4A}B`d3t2<08SD$R~BtTbMX z6cwm0Rxk*1&b-U;6!F?t;6JPC1?PnrH*u5ASS%Ae7tnwX`y>c#@2L}$(4ZXoS568G z$iN0s)Dcg79$}z~GTJghiZA6Z54++I)sT|`&CaC_=y;$2dti(Kb1zh#Arqv9@HP?B zs0pn^ra%$S%t0g+3=1juIo={_H&`H79gde<6=o@YiLpCQYtJU8hY0dnGt)kEw^;Zl zq!yB!`0UO5G55*3c@T74mF6}g$!D!C6vD^QuZL{??S>$Lx5>=#hXGT1@-=zB%!|yi zytLiL?>@-`IFeGDp70;y3z+_=$I#H1OqSQ?)=^gz!%6Uq?G$9>zmMLc15$M)7MdH@ zFqnsShCnL^Vlw)q8QQncl0r>zF@7K6jX(i8u)M1%OACO>3^f1CeNIgh!fH41zwJm3 zW~}2N6Y}wE2e`K|!-INcrJ7poR*xBeXQZ_llzm87YDT-`NY2Zl$zFO>QF7D7sc@&3 zE?!963;22hC-ckH-6fAh>voLH$4Uy z*>RYRXK!e3y7yuog6V2sYEqAhhEq&@|j%xn}3Hyd1<{dO}GWWOGj zuw=(Zb6z%74Q}>Zobry3VrAkn0fn7 z3&SzA;;VX^nUFdSX!vQgMrC zywFo|YA(<423(mGG%uO#H6H;EP+xvCkMT?;A^SI<_(O?*sXkUqpbi-~=dMUzuydyy zd7tU}g!z0xLmgd>?hZAMBkBq3!jJjjMSZ^XW@=tL`SVpxn(hZI6 z$wQi}Xeoee?$9Hz#EZb>nkLqv^r--L$46Zi<7eJX7o+9U%d`3pUujADx@8$qpa%+k zLri>p(b92oV?!^c?;Q0rj8xYN)7E1UaftvqDWcB}eLdwQ{)|tUhs*(2{8Yu9bl{M- zK-%`r65VFM0p+oqd~0jWvwLc+-LKC5s3+vt@h`HuvIMA|$l2v8{K*$Q)?)n-f;kRFHan1=G}o0N{tQ?A zKzO|1EfWI@4AoX@7>=K?Scl)~_^*biGHF`-2;Q2lmVF??`*dAbeE_Kd@+i;I@htni z!{0N1To96DwfiDwi!MO$iw5}xw53LzF_X$=J`s%7vMREV*E|IBtc{Sy?=jV~NLhYe zxDUcQ-C^nq5GSKAc+O*#Rc2&g9(k_ByGaG|sY}GuL(n*%vcwguODpfZPZ(^xfU_(! z4RRcIeUU1!UuvL-6{T8-u7H;VAwW@60$Hf>&!*?HQV2TZB%zlAOahkWPky5`7$jPjDK(_Y3`IVHzEw2QAE+}zZRYtbsg@-=(c7$RG|14;agt0e3FB zz-e(4trXS_;-<{zM6w$4!#*9f`YD($717Q;@m`W6L&Fn#46}}c9`;#PX{hBi!%oZ6 zjHU-1$n8@@MU69j!h0z>`fb=oV^EL84_~r~XpRnY`lUyo3`#@JRA1+!)9`vss^hW+ zx`l~C5S^J-=f_wJZH*u?|MxcuLN62C%yag$H`zG@5heNMs2Yq%af+=v_JXaRIX)oz zw0-NB;GJt5T=R526q{s8+XSqSJiyVo_ypVpjAPC*E~cpNv;+FZqTM@j&v}{xdB--YRLur)s%kkZU#EkmiWM}J zf^Hm86V!;+mVboJI}^ZSHkEz7NM47m!mumq?FOFZMV}81+B@)SEEIborb2gZ^LOz9 z)iDCJ^@rS*ieZ<^&f2wXP2mNQ1=sW72{+3iR%#V}b@I*ydsJzuxMjrurO8jD$n&T(0w&Z8&G1?1`?u&cdDfnZcI5@DS`s2F7!vQz{L ztl_b0YBQNC-z(7*28mLjP*JZ6?YdQ#qeC!!NOK3#bFq>>R*tx|PPDHHz~Z;CKH9Xx zd6?cgA|TA#`l})}j3b)!g91Hk)QQ>;8weWv0DvgP0lR9ckpsPhL7UF&jjULaPHD18 z8?IZ89@Jlh?0Y~4Dy%BwI?5q372J9PUCu)DM7!2v$am*W3KzXH+mI4_- zQuT}qbBEgR3tyL0D3G^EW5Gzp@^5#`?vX@yX2K(tjHKW!byawfdnR0y?=wcQBmFj7 zzvbAjdG?>KVDMHuAZ9EJ>lpMj`Ypm)(s0aQeQDZ651Q9Vf%6&l@4#wyOwSp#ZWzQX z?Sxl}_A~u3-5Xu{I8>X1fr~h!H-kceoe>V<5iTsI%7gD_NZt16Y4egz%|vrK6HM0< zy9GMT#TikY$0yKVk_evbD*q>uSG+EVDWy#U@RI5{iT?*#&!d%yFfvB#X9+^7eP6znPw21d@?hLVjt>nkYZz7u6@54I zuMi~;FwYFR)A^5_MI^tc%ax`MQ9S9stI`KaMorsqRzVQ*m3z|c$j(7D$NYV>LtC2|#gFYv#Ej~Um8s2}vbs4t-FZl=P3E&{wZ56}!676t^0N>+I>#L4$sVChP zxpNSQq?wXZH10?5WBLiQBY)uczfywYLhbCZ%CUhqvRcr3Vl=brd2VUTJh|mB#V=YY z4#=-O@tsVQwR1n$t2vXFx6q4=sbRl53_#hCn+m6x?ELL?=A#kMX~bVVRH>m<_R9j^ z{QRB!R_^|cBjp&=%(7@MVAI(sQ!7v|eeitzv*c;*8(;gE2H-;5xG#`%p~3fb1M`cKCQzLh^*(Mq6!=dS1y%T2@%=4uAf~u-hA3{z+Ra z+Fvv-^NKj~D2}7; z3kj*vvlhI%_`gc$@gO9-`VyP&o!o@A@EO^!_K3HZ8fGu|bZz(hc&HfVt}6z+P<Ar7`3tN5;SRa!|r`u z#xEsAzfdUdmywzH_ylXqOlm;_LI_So7J8B6fWpLJBWBmO3#y8*QNYpE6pHfYSXk! zdZ!FQn`<6?6KyP^R5W__bHKaBc7+r>txSQPN2IeN8kCYQjBz$reW`MBt}OL>?=yA? z?esT&exZ$6SiW&A+ppNmx}+Kz*Une<_Sb8Bo><0cp7{Q^g}IT|JKa=^qrI9g)P%%k zc7$LHUbi+;n7%HZq$wX4y}3h$?7eL!o(PJkddJpYyR0q-|GO*hNQ9bs-93Yg%8p5k z?);QiN$;B+=^f}T(uI@oZdHnsdiua_NZ~3i=sRDGj)C@RfSSSV`tr$>xQO-t#w6c; zq1nJeExQg6;j7g+9Z^+eK;4MEbm?cyG|8HIOg1t}QK9W63~4l=J~(`fRqtCS&g;Hb@1UZy*my@Y1pe8Q}~VLYzh^W0BbfC<5P zCKsve?YD&RqEt)!w+!!}2Nqp`7u1GLfA?*MvLg+G{JzKz&Ib2<%5~~ut0BYa$Y6<> zi(C!zIHEkhxR_e!#|39~lz{4wGW7pHC4~zTWOUcD3N6S|BP`*K@)7nma^_tM zziYjipMkTpGh-W>*mR(}u%Q5=b%sD1B6ek&AR_JR?L7$0~mklqOEN|N5tTuRBTB6@8Wv+0MVnU z_{7lAbY5IG=zIvFkpB;ye!tRMWRRIku9y#(YJJKt#&LnAf-xV+EK1d(67!3QzS5j6 z6xCQ{%uDp%=xptv#ZeX&B06aKDJ{@uwPfSg1&E%Pjfg%M$4Lz6hMm&HZ%yH2VLIGz zV6wSYx@ky28qOAR+lKw$OOlB~ocVp2mF`RPAv-vto|OJPX~A$V5wj%`oROg+@ob># zQ%7WXiUDg-;Z)*mrbuo64y$S*ZJB_s9-rZCsn~KbngpU!a+?j@rurVS$BT!E>Re;B z^TZ~TAmbq!eLHy%`PL=MH$n;u98XtRc+;o<*N|i!9;|;##lD#61gtX|Y})L6jY`Q{ zW5EKy#KBRKuA8U57F)I2PdyfKVt%G1iV%CMQI#fA^5ozW?L1CBySx;)x(v>;xL9$i z6^D>}QcY}zOGqmFFvg?NUE{K;j*^B-R8Y_-a*mc6&b%*SGWhSa``@M%0E_+Bq(BGa z-!<^*ZMGB|B`8f@XsmUPm~50UHZE=>g-V&xWkZORUO${;B3o>Lg})oUPEKW*G>hf9 z?1YNjgN&TWr9hAp<4$j7^nnDLp%JW(N)i+`jLN?hT7LPztYKvZ97+jfO7)&7Rn_V6a`^c}Q#|H8W*#lJM# zUuI;&$dk=ni5W06v#6hMjMeZQe5gU%8AC=0Y9nxvLX2{{Y8~ri5I}Yt6Zy& z%iJ>479u$1y-ptIL|VU(%*cqSt*tf1DKs(&J_b)rjNQKkd`4%H)R{k8qH{Hy|9vV` z5ZB#k-U1Aw3LhmVKzEB_c|*!IN}|=s^qS_S#+ID+MpBdT3eM(5rO|U5)%qLfE1+v& z&Ba7=w8U462`lLlCSD%1Hgh5noA=TS-S+Uh5pX}0>iYRt8Ldm7`CK-vy5vr`Uo~cG zDu+;3`Hj%hbx{xWJ=tx<1pzDM#fh44mj$3AO*dR=pOQ~kO}SIw%IIb0#Ij3hD)&`@GBF?MWR)5!@LL~D~X`BKpvU>Q;^zTc^WH7g-(=mk%p{HR9W+*#a-9(ST z$gw)1sgQt{+e|EPr^P6>Ak`3Ft2?U-v76L|Ld`blfP%C@t&1wHI&y@%PXQe(2*D!) zEZ>8KER|!BRtnfRMV=0ExKP{5AV>BaWPJuxscTO~k)X zr3V2NmkRu6azp*^7oX%fcVfxQZ8SbhUT2K4Vs(Phzuwr|GtB z4l~z%A~Bt3?1sk+-}m|G6N?%Ev78(4W)h69#6c4r9K7t#C`?2A|L{h>5xD_4)dk=k zfY*Fn4db%vzNa>As0n`DzfskAN=rX@biSD8nQ)h+>1eT^FXX;u*_2# zy5VoN(fIv@~OD^o~xB|oo> zF9P{GlIc~v0u~Pe&<|~^FT&M0PW`@;`>3?0Qilg?oG)C6?r?h`2CwSf*VrB~CpS8t zuR2Y>Ly%>|_t+3 zfjfKw_$t6q$p5j(Ho28@v~Ju8#L>Y*K6^J@y$6KpOg|o--gV}qx!(1j?=A$4fN`g7 z96CD~7aZuSPgS1SffHKS_V#0$>C^2=2$^(z;~IJ^RBhg9{Hev<|4M2~I(i`!_aq!~ z;l9br!%t+z$()n@#h#6%rK4!FhPV!{OLzwn{QlPntD>{)`dNEN%8|F@T@p>}#NBw; z+#mD{Z<5bwa0`g#zuaMO(!s)Pt&D6qD8vXCXLoX z`T>}B8vts^&h8)-U9O6D!0P-SFcYvJ<=pe$d0!QXiiy6jj@JD{LtXD^F<>3dAQBfvV_R^b>}vJORYJT%gdK3vC8?QT&} zsjS(bFhziAbs&(d%yDuGc)I?q$}W3%gvS-+JIIaE(OU&LW@B)@+Lm37_FJi@iJ#2p z`Vw%;+w$w zfVW^88c28rs%_yGOBbQRP7wUyDy){ql#Vsh`OhC48)|pK1>Tw=@%^W&Xw`PaflJ>$ zff%R*02X$`W%9j)}>{)#?24@8N zGZq6!#0fn304;5~8Fn(@vB*s6r9hIAm36*Dm~l~V79QDcf4yO70nBFMiitP!&pk;? zP`P*ubQxG%NEevRM!Nyd)N%O*0&5fLDK%Z4Pcj)=6Xd%Q#|2;;u@1a7{{Y6$X_6lZ zw#fqp)CIlQ+`~UTzbH&;=_;R?io62u)P}(JaAIi26;{DnQhl_30Vc)((_5J^Q%72O zHRe0LghpKH;V0W(*@=!YdxYB{gfP9Nr2F$FEJ~#IqJaUb*8p`8Ik5yK(y-LqilTCR zYzbsK28*2fZNPaRHd<%)XnML+gW2P@qalEd5}nQ*Agk$c>e>^$4TviROnNACjANOD2W;Bwjtuu~C(Aw)7kxxK$R8Zg4}0SW{`PrvAAH6yCcnwaVXNd_d+m|atCr%Hi{_v&J%_$1Myc@*tyPH)3Cydk9JkPIaZe7e z@mvgjw==O(L}M+y{sS-<8a7E5I=uZ=1N>vR&j46&CRdE8VCVO*5U`l;TY&EYFL%T~ zh#OrAu(`ODA?QapH>r@f6)a?NGy;EcT=tV(0LC@M%6iC+zRB1Iaw*9`mn#TR6(+_$ zJS-4vvn39G-CSqgHPDM+nBT;M!73=BiB@aFoO+fR`F@{bV9 zX+A}&ov-%AumfEkQLWx%3@^aRx|nN!MFVJDj*HqJ$o=as4ZxFtgP3W`swq~GxK87| z)j2cc#MsvpTy3fUxq3M4C+q0k1l8lx7RSNnq*zv|4U?%#ivo9>mX6L%@! zU&d7vGUy<0S6Gq_En1jBWUGbgC-0B+1IPuxg{&!9<-Z9%((O2Di9@OP03qD3VZ}yX zjf{qWIs+PSP9f~(vwm(gcEO9(U5A7ewq$<4-}tFf`Ne1Ido{6dr#M2|gR+(6Ndaij zH8m5#dQEL(E@T7WJ*EpjpU5G9_rh=>GUvc-E~3$+eQuEVVv+}Q&C6Gc5o9go#Tq3E zo+WCX`5uQ2zJ&T(!Ly+N%ZD>X~N$g1YBz$?r#`u`>fAmX8fsAl&wv{AGaAlSlj(T}4BvMu2duQDlb zJ-d;=Sd;1U(TI=u^VuW;OoNf{wc-%-}ZGdU4BU z>=1Vei5F&mJt~J_=Nd=7_juMfM&--3t7I2Ydom?ey_x~DOIB8(#0KL zDWTmbGipc|n?#5#U@7+dJm&UzI&`x8CqsRzAd%*~3E1+VCp%Mrp%|i-;-qv%`rq5g zdr0O=+rTO4WO9vA*H{eV1@O(&&=YV%fQxPGX3(nbUl^&eM)e>iTFA?v zdq+`VeQpU6xxxcyk<_}dlc|)(7Toct6>bmXf_65cyr-7FCl&_zMUQJNuy`YMY5mTx z7Q3`%2)``?*%1r%2;xjV6D>-aj!Orf#Rw|+kOXdqXZ=It;Dz?R9}I*%ze7b)CBq(~ zemhe}mq~9)G1qwN+ZyxI_YZFTDqe~mZ@IG2`2RZmA|o?XJ))6$3Z; z_OkZ&8w>HKVc5dc(nPh9=ohs02ItCHwR8f#v+^?#Ci1b7BPLlB?}_D&aluzBU@E*x zqPpl?by=$OhABC93&qM&k!Ezh_P;jT3Td2)8P|TNE;BF=i=`&eBgQV^M#~Ig!KHjX zufV(0muEq&E^|Osp!Pze&JxXIZ#z>AKlVy=D++ylmBVt7A0+GcPY~_>e%z`s&!_1x zt!~i!Ii+gMTJL}UL@ZMc^6&_wcfEjYrtvZk8g{6-OZBHq*Y=ph#i*~%ep=M@X%n}y zpvO$+yG4`WlCtfSIfC?B?{}*F-MH8AhDA#nvzWo}qz%m{^(i!+Bck`wqq0Kg)B?T( za02^KJAiFpA4vqyW?2&uHG7u}g{uF2fadQ`*+TI{v|*04Xh3ZKlW-;sNe6~>GVvr1 zQUKrNfvKbPD_+2*{8=A?T30ccDvZ()Qc-7Hq)vW_@>5~5R;fnoDAJYPk45J>U6Z_u zj5smrq#@&i{40k0nxiHM)%YCn?9$R{UY^ECA}S(yK$?`$qxm2QgIc7a*$m(_zdEMR z<~IFTknL9aobTJ$dI&2Tu^U?SejVd`M$cg_EzhzkejJ43Ym8$mSo$3qi_e|@<5p9B zrl=tO@T-W0nOqp9u-rw-xc+C|Df>UO01%MihpQ%k~1}9e|B}~5(`ut8+03q*>u>B8Ra?cavjt*|A4kHJ`jpY;kD?8S+W#R zsLM`=WPM`gofLwfx7cK0rQ*Y;aZoq77~h_()Zj`K&QRqCbdwhFGdx>Tx5 z=`!w@GTL&jDnm}Spx+;K^>(CwR8bYpTW4Ho&>wU&;qLzlrh6AHmWg@Omz1X|1((L^ z=r9uv#c`kfaiZw?;6O=}*shcRgi+$y&>>I?rQNfK~+(pUtEA!lFzD<1^6 zqEQeepyV2$wrVwGCt_n;excGq6vc48W|x&mMj@B!0BF|Btaxjz#>875tJA#hY2;9) z39HZ&=@#nJD4_4;dw>^o4UH@Z5dHD=u96RH%X|CB@|r(V|D3G)#cRYPq2ZpLt15iL z2c=)Q5~Fu?O!U-4BAQ<^X*}rlo3`aL2qyJjV9dg?r^~vElFeXe$3#QF62HX%S9xR+ zi(CPxVG}uqm5CxcJ7i(>0i#sQyggaSQ$lU+>HT9G6$emJb93X)@(B|XBW602>r-*w zZX4hBpfS*jy_JH|j+J!aI3hHMO!XL$ZodSEmQ#xEj{Bt zd3n|TxYw`wFcZ@op>Ua?2?Ap4vHK4j>tjdXh0poSi9raga)`#M5H)JS8c)U6AIz3r zN|yfw<3OCV$Bnl#+_suzk#-xFw0*>3RWJRalO%?bEO{R8K4NS&mj_prQlBX+$x(ec zazs|L>ID3&o$XC&HglZQ(r(`Yj%^XJWE_&@=GnL^V)d&_peKNJ?`DCJahxOm#BxGe z_u;@0T_Gtt{K%&HWBc$klqgvqB?AqHu45VpeuSXVcTgo0k9JoV_|K9OCia5${`d5ukT=;Bik`uMJ!gx znOG!gjnxFC(XG{=&sW8#DlH#A=Q>HptJb`b(!pqgC`ma;aWjzRN=e3krk|ehwPFC)>{$0VHiFcYa3H=F3{g^VV-KJZq;k+(w;{7eT?H*KW7;E0DgTP zqw1Bko<~RAS!D(o1+Ef5TBg09Jmp~@+*K*pwmCV`y4D>DSx^inSm1-BzM^-GMmwDn zX)Epav+x!4aRgL|)N&dQw$X6jAS;pOWf{!9a%rBy`oIf)IrzL@UE;0&wo=*IaqHLG z1AEommAzx`<}N(C9~{J%?gZDBsDmF0f}L4ad{7KBPxu6H@;bP=O(J3a^|WuEK` zBj5%9^lvb|IC;uZ%r+}0T%Bpu|5m=ak4$@ zM$`RYufPSGRr7!=?o4ZfIVo@~!rHk$`KtuRtix`n^ z>P^#?-+TJ4#izGdtgP`4_{x)>yjt}hc`Jv<3pE!91sT4kpnebtHlkesS;mMA%C6n> z1sk@ujK=!+f6FZtM2$ow4rhhDZc;m3Sg#-Y9~cVhv&iM-b%AEQ`o@?Y5{#{Dqw0&u zyAWNjs<{*sByxFmkYNP)ea{1m3VVQq=~rIvX6HSPadSI8@)?)i-R>h2*LA^M)Ob~G ztFt!e|Ly^oUSQxcd*5CqIfzG9iJ#HSJ9G>uPPnm`)c?99LOT4g7N}Z}grQSqKpG8< z5GuH9vj(b7YW`Kpz?Kpgh=Z)PwieJBFu%zTT>NecEi(i}aJ*MUA{_~U_WucAXp!d4 zX6@RGG8AV5m+)H6#RmA#_j~*sk??N1tHeZA4tu(?dO=EyHHW@_@@jO3)hZ0QUtiI| z4%dN~vZa%tU>~ai34P;XqnMT~@X7ZI9p@tmvhwAKU22R49Artg2Ac@XXB(LEU%u~O z4bdkQf=feq!7E zF@L|edl%$|_m|`>g}<%?9dsr$i2}!l0&2tpOzUY2g2iTMF-b0MD|c~-G*>otN!NR! z4kAq0iKrl&N&RtPh-I`KjI}h2G!7$fyee9PyiD(NvHk7O)2~uegWHIP)a7o_0g1aq zRh~b5x?!TyR$z*#iX>!Zdwv;oMa56TsVbcU(*1sM`F0-@*_{A^UJgO$G*8&34SqCp(EGsnlTu zGorJTxO7Ncy@HjF5;a$($=t2QJk8Dj+i za`%8hkqPihzN*_-sN&cD44T(`5*nbaCpadaAuwh}P9$YYv`A7Xrm^%fCGOv|C{36N z^HRsGM=!;P9bb9rYdY;4g;|Y2x&-(v{!!QW3TqRRQC5ncpeX_J5AhCbbFWAGzt^$W z6&95VmURzFNmtqE@sV#M zwkNkKe-UXG2qm14GRVJD@FsyH0p#=JQIIM(M=<&(qA4Y%G1kiLyY%YTHj!w5w*+A5 zKnqD(Fc}#}*awZQ#y~aWMjFHD5_@RUw4KcF#aF-P`E6RX$8h6$t5l07XpKNq zGiiUVA|mD03@bQLw&&^k)Q{C__ScCOR3rcI_eba+so(A1zMD>a)s*9~TW|S)XWNh{ zVXULa*uc8bLA#m58A>|62(%i$PCn+h^>8$1e$?61pB+nH zx9mC@th~w+^t=$I0K7Rv0HvXU1LqSKCh*MAp55p8_SGq6Q}CnWQfK~$lrGP>T_Gm< z){yR!4AB)=$E9cO-NcKlOX}mhQUra5a?A7VB}g#o|1RDf-A7>+C|zma{VPJVl9F46 zDcTCbY8rTG=gMgWY;5Qqg4=|2OtQFvpWTPcb%GAXnCAWEQRiyvsyPzq)^yr!xF#k$ zqgDa{BkVoTkdWxKn^9v5=+YwutnsSfJZhNhE>=s`zP6aHy3t9sy&=bWafzF9X165x zU5soHW$Nh6k;yz@Gi8j59rnl*@8oiCe7jJdMo;*(G^66b)rnI>V|NY{bZ_8H8}3F1 zWjkE-mHEKB*i-s%Ech2`VS(QT34T=I?~jwLaX$=CGR^VG8rIgL!D8O-_V#)KfmdXY z8kR;wYD?mq1eK2H=zK+y_X!6iIFB*aF{8l^X$P@5R=OE>(5i08Yo< zuc7&xX}XX;*8>d1_PeEGyjrfSoRmjPIEV>$Xs+@i2jXX0rp?wkJ4@3r<@e2H4-RbE zvuF@Yo7&ar0|;$F(@ZGXU)9H8pQs$$@i z#pyiFdGq!uET!ygali8ARwpAPBwAxy2 zvM<~D)l|qzNeLCXkx?=*^Z~El5TK7}W$n>U`6H7pdWgP^YPFaLfR_l|5`hyH#z)U91u~<>$vt2QL;dB%gOH7*ds;s{ zNNgt$Bm1x)N}_Swq5Jza6kA4&|9Jtd<=Zhm==P23Y=$>MtO;!p zac@?33t#BkC^atsseO8*$yH?|ao-;2BJB=1@M0|ZALNV*LRR2`kL~g>5$j(EcoR!V zOFJ%=s;Q}M=(nS9)>pSy>27!|*Pc?~I;?|)=c3?(=KHU}r1!?9-X0v?p$eSr2YNt% z!MQ_f(C!L^>-q`EcOZ|dO@PU0MtSdamI0vl9teQ01eo;eK+veOyE*bX;FbSzjOQw}@$T{eL1&Kue}?Z0eo}O2 zKqN3!)3KDK6 z4Di7Fy^&-KkP3GKQdl1pIgTvBG#BIr$XuBxL@ENW#X^)%6u3XD@x<7r?#QR%u)V9P zDu{RU)D>u$(Nm;2wh*OHiicxs)v_-`qSzjojd59(f?;i|=4l+84Z@DI?;>(a#(Amg zd!FO}ydT&;ba)`Du+(dpn}4j{_f!~GZKNr@x<-ZbZsZ9$R<5HLGF4O7=HP1s&66aB z5o1Xc1^P_xue%TS@?@UsR9Qdr!0Q?tr>&Q?NVQP-jwR3~I|{3G8*K1CfBwvd30`kC zkuAyr3}RP!>D%rNT{D0}aV&|J2QWF92j)tDb>mObgp+Nt%{IDTFE{tVJ+Xh-N!S`@ z9_t3u41r*_}<&A#!B~c0s62h(@y z|7fbvQ7xkb(m5I$$x%EvwsWSGClIjRT&U=w3^fDf7fk1cMe9*{8aB7TIsRC2uA67Q z=zF}{H9SiV+TG=E!?}Y(JXw?3jxh=1aB|?(_^DHSgbGV(R+m+6)vTr_>V@ zl{=}c5^E`+Fb`2sP!Ne8>mQ5;hmWHiFwwKy z?*s7IZBnO-fvDkmBpweEOzLKbcfqgRlT@eF2Fsg26pGGwpf7egAz#R=3@7k{eftm| z7UnFHpk-h~_XKQEE@prS)W-!n#3j#lK&p!04MQA1Fp-1;bCp@svXFm|Dsxg^V94eZj>#F;UnW4Q3;+WA1 zJv9X@-Set_euX>#>An>!?qMMo(9rA|c820GuSR&|Ex^6FxHu`B8T{A1?I1z+<+NA` zc4FIf*wBC+g#y1MrQvmd7Qykbjbh*VC={y6wnA5aIOkPMqI$K<5E(E`W%JmY@pa=c zBz~nb_bUf1Dh)EDjZo%xec1~Ej~gQpS8<@WF_y^mF@opvSMwVXUZkV?9;<<)a$pSu z)d)@CUpu90F)HGdY|uLDFg-qr>YZ#9y$j?!YnJ@kpQs-1-gDeTL%Yt5jPL^T#od67 z>*tQSK@N>t?~|*#6D>{u2N*jX9g;rq-p(7Pfpd_P-`7o*qKjdI2Jr_M4Te;(SUOL5 zK4tHB*oRGWOM~jCN9TL4Wpc)?m%Dmic>@be>~;d+k}jrff53w5>b>*1A18NPcQ;w% z!lL8R`vy7(c}PmbBCEju_ArM?gz7nzk~a?cy?(r4_|2PnO>R*)+l=OSAcl z4FJT#jjX4mbIj7sqKZj*+5rzd^ZCIV9;AeXoI??Rt38i)~YJ0g7&? zRs?z(C}DXIZI3?GxlNXwX9;>CIbzf6p(|EVF^6kq^rYJ7wJnvHt?l=$Zska1rO%@= zk&`31C;hCtR~GXsO?n7$4>-1xjlUdA%IY0<#prgdhn(AB0VEVgsEwk@Fkvuc`(g7i zoFNg&6i0i(W;9oU)TN0A)`6aV?^uqrQn_Z}b``*DMpFP-6b4W6JCJarU2N%BK2?T}VKTwz z0#Io(!;00-Ed@|Oo0_s;PJvXjl@8;Ml!OcZ*NX@@Ai}f*0%3&wo-?u~S%eLgH^USD z;%b-uuzOLud(9TYx(e{=o}R0sWVj*XM(Y0`*li(qZ+P%@E-n(M$~xG)#)#l?m}w_S zQdg8*p7q*$!^84b#hy@bh}AjmzzZ$KcG0Inj2@l)G9#Js35u>=PGX&1e{PQZ$K#%% z&^CKeA(G)BpFgyjE`9SgvfVLMoO|_n%v`L0&C2^ZNWSVqQ{J-afa|hPbl-(lU{uuj zqU;Wsxm+ZaypHV{@bNmOd>vu8m~Cxbf~LQAXC`Qkr*1 z<`%ZVe6*x3A!&^Ne1aI@Txl22s{n;j@)VW)+LnSo=ZT1kkIJ`wX-xe+YCd)}m30Y^ zxm(bqXue`{H+Jd{cX`P#Zq@IO^SH7r)g^$GRZz#;UU3>=8?6unwmn=!E7I!oHT-%P z^>Znsjd$2vSthLy7BNx?pgIroORD9Udz&=Y6d1mWFhl2&!tnNs^EBm+ovKLXHuWhX zfA&E(I$;=`7L6A>l11o2t3u*4_l)G(4h51L1Bdv3Z}A8y)Fjhh@iSej-n}8?tSAj@ z6f2PYM5v=@7-FG_%ifW3KP#xzyyu?t!@B=A>u6gT&}y;TsJAvxRG0tB(6*gO$T8C_ zBgG$}VOmSDmLH?3>jb&3r38)@c=_y+zkCeH&T3olgh_pAQfnKcZ*JllE`aF6MBBU{ zopxQ;c)8WKwXA+;p;iVEb}$jD#CkF6;zM~FWJlA(vF4;(tx7=0Nle(poR&56S^+bv z%8}?ag~%Je$5?m)2i2y=kkGi5(%GgW0s4Hy40i>Zeo^%zAs5GP?hkbVr7_}artvjL z+brluHX(L(t?C*C7>q@Bgl_=U0!;4fubQBF!QFNMXOpY+O+ei40)YZBeZIIdj($>Y zQV7|LeYe;lh-$B8{&77ap2iMh`C~!-G&)bHQ@*U&QY}%OOlO6~J#&PnuGo^j6_-4|+4wIP$U7TOd&)lG%b}Ch6 z=u4wp29ZQ)k>K0I5u&mhKgXd!(W2PvE$fJOL3qGMx%-v1d8(FlGSkcbRK#fS5B3X0 zhf#vJZ9U5fzC(!zS+ouGi>8Z9X@(8Oq@GOcQy{R)`(57eK(y<`={mwX$ChY=V2v__ z>%5KBc=igxHS7q{N42;!biXA zFmDqJwB;F<-umw0s$+tS-~S)N-YP7vCRiKAg9UdIAh>I=;O-8CySux)y9FmCNEqB5 zf;+)IxCM8If01wR{hYgV!5uKOdUaP-SH1FEcC^fL%yOr0YWzdZGfWUt98k?tT^+3A zzWYHO%Z95Lo(yK{vuiyGGjbdeeJ?9ML4?Ps)r-E2?Cw^+9Jc@mEp{j=EFIMEg%y8t zu)4~qc7@gTE@yK#Q6queYsgAsZdFxxXlN*|jKejD%VWq&<^J>PoBZse;nJZ!>HTsT zQrg1zHa2;&zO!#1m$*BmIK}+$wFz@nVx#-140nY)(-J*{?bqb$dKX1c1PGAEmvGmz zQ-fB5(+wB*zmy#kEemE1Z@Shr!%NYiE+t+zjy+zq%6iMS;}CE-9&%7Q2W|oKO3}~# zC+}Jsw&*7?{rx{&U7W9rppq#ah29%^#V)j|5GCV|-R@A_8C5GhFR$6T)v_h$dXMW` zpG*v=(goiXkL_3=*8ful@I1)nxlK2i3<~mLslTiEh2BP;*eD8aX#|iU;$ch^P(ghI>! z2)Z!|`*Jl{7eRtQqv$I$*_IB&Xdk|h1JFOy#SYwW^D$XW0urKM5U$mHey_0MI#y5Y+B#ZJmQ}4gh2q~#wphHH+snv zixpT%q*nQz{R%I^>5N9gWf1+-YP!$u4}a017rrloV_f2a3V+;+%N46WLThPd;vF@Y zO1F_dxCzBCDLf)hst3@}NIpPmVxEe-;AIV|aq2|3gm_ISIGA#h$9967_6br(&bBa< zKy=Hbd2QhUZh&fIfyZA=Oa}!+#HJ;yh4`ItoaxVK0b!fw1hx1xeyj(|q8~*?1(g<{ z`{mtTJo4Z=%{_USEB3N`-QC!$a3pLs0Iq<+-r80cx!~)!mDt;B|!((lIqPVyXMS&f66P@bUDx`F*x58 zGg22&tkryLckALo#@R}3>V0NpBvK-;m{N~3zIrBwG+K#7w$nq9`yQPviE|Skl3D>W z8_(X*QD)Gs!P2}8i}o+2CLcSEq>%B)?EW$uSm3)8oG*FA6m23wT&YVZB$t{~-Qup` zTv1-Kn%^Iair}kg@evr3B*qCgGIa_qX{!*r8b2F`=ewNp5dhkHPze7&AcUf2wTM`g z{xYf9;gbH8Xhf0Fo3FfIvi6Z!*#~HZtC~kvfxGOV3Nxn-YEBS7w^It+?YC#@&|RTp zbUPZkTUGNMUwLqpbK)!jL*E&NtbCq_MN@&iiI`i_X+U)FXXU_5c?krgSyj$Y&CyWvLnW}2R;Yax=dH0-vJG|Z1ebESq zJt$hFePpP7c6EwR&l~kf6epmD+mO{f zu)Emy$9ISB&#X|`G@08ONzalhaNc_f*~|4taj`Tg;mwjZv9z9Zq-wF;*|CNCP6VL9 zqwy#m^=+3xiUF_Qd$u}m_dC1X)|akem=wVga=?2ShL*VC$v(GG4OO)o9HtAkViZjp zGqj68OStD#X0TJH(l38J+lb5CsZI7$Ec08W*Q!#_7nwv$4ih$WAlU%ax*5zXbTdLb ztVn|T+jeuLQH~PzcU~;96C1e=CY7@$$T3c;wGyTj-QsZ&Q&Ll#ZQc9NwZCw_uY7%r zoTDITKvq%8Hx&@kiDmPMt#HK^ul10$$>ORU5m8zIl z)r7%vh-bnw^x{(rOcoMC=ycq)oN;%h!g_v4b4igWa#wd1M=ZdvljZ84 zgiu+W>*T~0&x7?dhHqq&sZqmp@zn2@hnLN=U}ekZsP)uubm|ANj7XGLpW?rAZ4d8w9E5*lpkUGnsTjybR_G1s zo`SyV$yB%MH;SEuyIkmerofO8QJ&YHlGUK|b1gEhqxZ-Dll>e2@Pf|qK!7fBx!SsZ z_YP)R1I4DPyg;ktv8zn)dTVdN`HzU??Ou2^qIB^7tE}VQ-TcvZeAYV?uI{DP@l8iM z>#~<^#Z zX@F%@(YUzZE?vJ2mCq(-t4HhF6K77v>BB4qiO#pbCz;XL8}nVed`hxTus;DmzTuE4 zqBC-@7;gw&m^(udtxU>EgzN;%`E#YshTXK>T z?v69LwSFkuqYcy*7wrDx+H}54V8l*+dKuejn|H9P`n=@?*7+sf4bJRbu5;sa*w3Le zk)_6e_PYA%sHsV_NI$9dy(?A7Fn!XSy6FBT=v#E2i2Itdik5N)S;2zleI(s@pR`VW zIX4CW#GO-dSV)$0p84(llXA6{n~MpeJ;f366LmGj#3#29*gpFp4wVD zPX?%bwe&;%H%nPovihlrS>Sv}p8lo8T*;;DJQMpg%wAVcQg~_|c2{!&9dCOk67=YE z4jn|NqEw}|Am>TE)PS*o4^yLePo?aislBDF&D4(8!QXDR&FR)3*$QjYJPT7Bl#1*# zxTb{&cSWeP#adUUT$VQ6_M2@ddkNzegg+Pc=^KvO6TUX?6OxFGS^nLgZ(qB4B=>ci zwq4|6$a_!h+8`WiNQ!*m{e4HzXA6*2`>U4R9h7P`5~bQ&uU;q^ZB9pb8at zAbA>JPTr&h0N%*6Oc&YTnn#X%c%99cI16|=$(7Dg|*APFi32gmLp zU0P@ymBE^#9xBzfT(W*|$q&p`Pwujefnf40W7vm(Wowb5>kpwAbvd1nr81Os{uf9EB^D>U=31|!5BI%lW|w&t zrHRC+_)p!Lx$5K_)k(jZe!g#$jQ5n`B=+FqFprPYv_qr@B@;9x2pzw-`uVo_`PXO$ z+n6oTP4A07V>pGxr_G(+U`v+S!2PMGrz>FsdS0tjD?59^kcuvDy{wl&kRUy zOUoVfCLtT zT?*PM)o`7j^riUS4S)A!;oq}%u&c)aD^{|z_NiK92XYESr9>kQRB^@Kn3f&T2fbw2 z$G^JqD5p@DT4?Sq6T!oX(p}|>jg8I4iX+ zK*`~}+yHILlE^WLrmrbZ@%!J`TEK?c+`+e_d~kNjgMPvSyXEH*3tezysa1*BHk=?1 zddUGNJ2O}C=Eq(_O)o;hX@}OYyh`zWYh1|$BX_sx1x~=s0d|3x8uv21PGqu*-(tGs zc(XPctNR&h{98Md9;@g=@u=JSX3_Y%V5OJl}o>wJUb@u)=p1> z*ptyUC9q5p+EBZiG!x5bY|~#sJ8q+MriO)Tsi{r%IH1=0dq)`|o(dq)s6riB&wpP{ zPPR%>J7LG_+Zz9wxTefHdTA%fN#FURvDLby1_Ia4sYa=`2sLBI(`b3SoH7b?z)rZB z9DzEyi*2>Bf7*dsD&OABf+5sQ{>4NS%!0UurK`5aYQfBjGgt~Z5@|99gJcSWRUX$4 z@}CeGYOZsaO(lzVUY^-}5Yx4H!5xtW?7H-oIxVW{Oyx}M<;8FRu7nt}arg7%T(^}x zs%HA!F=kl-`=K4VR`V_mBn6s3jI#bCr_=6?j$i$L{NAs|<%GM|Psi17$3hUHmjP13 z`b!uFTerQhhNnagG10A4wDKV$TBCdUM|I%fxItw#=8rMB&y;K(E<%US>u8ecv;Es$ zz+Zo+fRyl#;tB9Ztopd0Y^zb#!XtD(oQ_>#$8uOv{P_0&sRDZi)*?cJf(UXZIuAKQ zrd-6m-!o@^`)`NJNq5PH6>8Lz&bqS0p+*o;);r?tC}L>lFESc7`O9*rh0 zgq1M7#QtHu^J`_3&q-VHVtplv>=*1J2>%iRK{`ae=#M{D>K5f+dYbJelJWVWdacxn z!ePOL**_(@wNqD2Ihg)5woxIfR=D-xMf2xPe2{2mLIjO}Fw-DpRI!G&scXqBhRI|L z43TC^s%R?`$A!jlcUd0eoEx++iz(yCh@DMo07?d6!|*`$iG|KSti(;M*e;juEJCN% z_iw|4=#;>i26h@%ASSD33A=Avq~{dP)KHhoD#{78YytQ@ET1ONQ{dr(&b;V$cGwCU zl+9F}-B^0oN*rvPPZQI8%-i)J-tp3b=9>C!IiF#Fp&VOpTZjGknm+Rf>a}})tE#FB z`xZkGY+BC3-LFI-bI{kK+r&DG{R%wja_Qgfx{vAKy&8!J4v9{qab|03SX0u|31uv` zBRjv68l}>ZQ<_(JV=_w!8Yz=1C$lD`5eYXuU3#_ezVEjeJE-w`zr}hnHmiK6y4ql; zMIAU=I5N34_Bzwl8U-Ex{b~mD|MPv`Ls~`f-L7DQ)hoq?W_^M_XzIorrG9TNXXkdB zZT7~DPn}Y$!&lL$`qDS9K&Myk;QGOEm3`BG4doRV8ynx6M(#vsjFP(Nxk$DFJ5`9> z-<2r|QH2$dFWxdsj&wkQDRC#I7PcFFoB{2l1|akZ}X=w5;xxAz84ov6#era+83w z@gkcoVW!bN)@SVBNdq=&6~M^u%|x8l0MURfH3}uSWa4^oK-OxhM+9v1Ttg8Zx#wTY zGz!I1L>_X!xCSZcK+r}{X%Lx@*&0l zkvb}jI54}0rn~Ip@KpaN?%G<*=z>&RmAa|Q`of4Ok0)L0yziKjL(4H86P-HWe+zh^ zf$|(_A7-g1k>Bd5w`9SS4k6JR%fapjqKXO{*uul%{+nYGTDshAb!npxD`;pXMAz*psi8DXqxmc`05^~ypHkxgDr(xHk1~nGg)g_T9TySU8ib;&v zhq@Y_aA#@#-}?ks4vg>>UUmw>k3Vu}h6Q3cZB9)~8*@dNy{5K4Rcy{SZUAe^1#(@M zSH1$Vh`fhtuIOr+Sn#5sH{V&`j&Hmg zq>0c|iiy8rcchx3Dn8goGlf;Ua0ihFEOJyTX>2wkgSgVK4SBRkyh9o~EAiQ#FE1qvl|InQ$+|LYfjh^o{gfTCaDdZg?YjT_mng9V^S}$Y^&CC3EDmO;+SUFfwD051`#cAr z$GZ+tum=Jlp}Rd>zQYg*lT`n}dM5U6>8JTtp^M&h2^!*DGqz4?yo!msKs?v16qTeb zSkx?8VLex}y!5cSHBPOSuNSp1$ZsOAq`DreGLvYlt#0l; zZX#p?_$V@|>pihl&v$XUI=O_gP2hHo}SH0EEPV&u?FVr_Kd<4IEV#3oQfO;EhQM;=UhJ$pkLBAUjQ% z2Yxy``U}5!*_ZHB=p{3eFj&%Pt-kZQF>SPMW)(7We)APZRkt<2#XSlyvm2WbI!nxd zAtX(%>#wXaHGJfFfkkTiB)A3>r|d>Z=7ZZBzl$x|c}SG6*&R*P9F`;OS+r}4<>d(< zMRw}w74D=IZeT)$lAVfEFDwal&}UA_XmecS44d!|vv4099ul*6gd(Yw=)ZlEoKYjE zc-UZ25KcUW|1q@JQI>9M)O?}UM!D7UWev-U>IQJsMgTw`Wf{mfzupnAkMo@N?oWPq zoKcdP^)vcdc(s_rW-kA+zOIP^b1=6PLbte0eG8{Cju%an>Z3kcC%Y*YHcpoLhf{84 zhq=B_7mEu9NH)5-zn%WwoaiVFVty2im8k@H@~c#XEa$5XTrXLunpyE`B8}*CF<`AN zEq`VpW3T_#HzV~~=J;M$Lxz(+SX0K-9$c53^Mg0wb9I6pJ+=7WAIPgeOz7ab@PtMR zNaH0cgWVbkGn=1Srk&WDkOEV%I#HeQ_!%D)rrr49Qd3Fl<rnNK=N1~x_ zLonsLz?B_Q&CYvau!jI}>I|TW8UyP6{SRJ?rs>~&z0KJR084rpz(1WH&{MZwL11jz zCsi?Ds^+gkGbsCg{{o_;V8HkLY#Y;% z(xd1VC*+cvLPwHcT1u<87#Rb2MdxYzZ6k(mQOAM>@A^n3FY_`2uO`wySzaAbOO5sQ zv(qV78PQ3n5B8Rh2|cad@^6o&_d$H|FuCzZBd$2#d^jCB7h^_{xuC0}?!-XiwCgL4 zvazwQW#XWa>+gPYq^4OV515WIO`Ts!L^Hs~c*h|iutxuArTHejaMwfp60mI7`u>eo z4p4DqCxO|Z<5n!E(L$A>2O#QDef!5d%Xs(A+#tWoG@|^?nxhj?AW+iw<&X>+1~JkYZ&Mfv`J@+l<6?@{=#lRhmv%0HEx zGT-B3Iw&juU{764^i*xITrL+GOV-q5HTVl>RQUoJ=4dgefL zIsCp~fP=!@2CTq7EvEU)!+d9EDb~;I-o7V7yC%rhR(H;OAV#t;M`BX-mvsW?>#IF; zjFJr9gN38ix{OLThDHr?`|G(@>^Saw{Fv+V73_Stl+qY>CdgH)h&->!8v^UNG9tJb z3O<3EA(dr>gWR_gE#DDA0}1SikZ;E>T`ye`<%RtSPF^8R#Q`;@)^|XSHq3r#Xd^~s z{v&bUV5C|>E3Dk$vrbO=i>U(gQ%30QVVm`&-&yXRaM)!Y!%EbtVvy|Q#W7R+JKu@y z2r=x8J5Od)Wj$^O<+pe|Yv(CHDho~J6%!JGZNQ#$5>dFlzH+$O^(L(yxxlH z&%iNU(l7zenau~sUiAK15~A|IH-6fe90wN&k_k-2Cs;|dB56AA^=-P~m$TK-a-TJY z;M%)yxTiDH{ZBMqbsEch}FFbT~E9&J3GsGtfT^cr#; zMXiu}&x}D09yGqzu-}Y@!Z5S~PkqJ0EAM$B8K1RiE@qpFDs}T*0P~u!QtH<~4=bjt zjV0bBJ5K1CSs`?x3kqBQ-kz=z1L7_znmQYAb`QGltD*e94|wMU<$Pn-xiA=dIWZvz z`g8j$OVje=2LXQU7g^45R7@9q?LPNTn5-2I9Szp=D9;bqJqe#gOoUCvZPmc3wjbZ8 ztdjc=)RI4~77}5_qS5^onJqo4gO01wah+9b0yvdpgJ@Lp;xe80WA>vKQgy6jDsPo) z9Sm?0oU^cMyuyt5i&51c)G&;ds>`aADj8J;ikw$Z1}L`&=zh=?N& z(?Y|0ASSHyD5i9l6{s~E0ht2tCF-SoLg1Cx?{RsJz&$9HPW{c$gKgfNUgKq)EAnpu zGzxQawH0^*K^v>pg%jusqN6miel6l6CHa<_^x~uvi<0hs9Hh4Q{7u}?c|xPjqZ(gn z{V^TMS(HE7=JnoStKeg{&!DrBuVwA^>T=EVj)fgOpZ#vSg62%ci`M*%{Som~)()FXmVei=qkQ&sTaUtk^0-By2uEqSE!j) zsO906rG0zeSunoksEHZiu)jOoXaa;?&H;en*TrYsr8<^@QS*X&%b60TbwzDtG@R?u64BYG{59CcYOkPFAKeC%~YT%W*){$Rq}kNckGd zb@a$T$G}Yc4))`76CtSv&$9%`ume})GOX^Y1%BQgoSRV1I1_Ro^KuSINoCRfW*?;V z`vf5DR!{~^8jj!Ey1-@M9){~!IwjtMxOmU-*Dxw9o$~SApATXhZJL?~ZCRO_R$-X6 z(zOZGg=E8V$DyHY>4wKg$~HqsA@a?-2?R-arIDYW+9)xPy*|WLJfn0K)W5#7H==2| z{TT08sQyW#38LAyl_W(gDh?x`n|X~jp0%w;qh zt1)&@c+o4uBW1c$ulZUX4<~p2zPV9QNum((HqG?|)>T#o!M{sK(GxqLkL|@vrU#w@ ziFl4r7kEl0jjL`w(5Soy7jID8C%|{rlH-2Kq&prST%1|DXmTo2jeW0Sxd(#b^ebgO{PZuyqVAZpsKbnHaM|vb8DgT z^v@aJW1S-cpt+u>@iATBQ_5#WFhy@}Pey;+@;zTTKlos?Z`!x?o%XN@b*HWt*2E`A zu{Daw^Mref+J;^HF{!5L8no|D?r*2qqm3(`wWdHK}hFJ&b|zc3xPw zZN~@f!{U31!ii!S?g^DXA;GD_aYl_;2g0wFUku|~JM;5e!Y<4iw%2J>qC=ZZi7Qp3 zmww2#*?(7jsGi>{Z4eF*^Ws3+=G-Z=9y2|9Kf=@s-{EHKUQ)j6Fcs$`Ww*~A+7l3K z^i}UtKmQ5NlbWAYf6F~lqnzmysGbO+;gGxT&bNLIC1DjkDR($*bUR>T)d4y@A0Dm_ zFvpE;b^(QHcy%4e&`4al=tH1RM;3?srf>vs>UvyVCEgBY6&<`P+szPJM)&Mw;e`zj z*qR*)e4MY{#2T*zwK+)*3vrFZ;)H)zV%>Mh6)aI`7z>i3gtSphGm2Y< z;)31DuJpev`t^IOS z;d*b~eQ6Rsgx?DTRMp;fqZTUY<+6t95bm%lqyl9Tu@cdrPQ&M5#)*nt4KK|yu+&te z>`0}(Pxa!UH0A57$RSO!e=cMi375?>Vv(~pE7xqfJAJdBKm z1t;VwN3`{hl?<+h82h#wJIMQQ35t&?#bX%5ZZW5+ zRBd}iw*!2`&0_th&GXHoZw%K|zRT!qtLaGEaVg`0YwBBbCRURym<6*nPldk8*3ga|g(;=BPdZ-0m4Q=+G`}_ArLkgpyAp>%Y5Ew9WwQ6z z3|pURrDbFlpU?s6I0oS^tI>7#Sr$NE{Ls`1Fx)@sc(eo9Is+l)-v#K*pV*oYmwj7f zZ?p|GZFeTeCwc#c0b@*N%xCTvg=%SM+D2I)(Gh3bQiGkIktmP~x4i!ue_3iOs*60) zR@uVIru7$xGr=oD)gWnmilw4k(Ruc)YOiaZG7BD<`;bNMP-hrROx#uKnPV4X?25O|6w|wN|4( z#4YIlfUOLtBU~hj$_hS5p>YnIBs{RJZjH&u`O%XF5WaAidc;(X6XyE>)4GM5#0{<} zH7$wF$%*vaZ&C=KC7_;I2ZxempIXZql*(!tC;oSabS~9Z&OO#qUzNG+cwePuZB@5i z2gRYK*|x2usH`!C*aNZnVYt{EBK(?jkl>G7`$=8hXY#@?X_<06kg7H#Y#oL>7~oWp z>O<+x$?CFCL}p7;u@Sr8AK0Y{k59iF?e#AUlX~X+`ughKvizs9z`PRwj_cdx08*mr zOPU(nU;Auz@QGMinISQ#k-A*2t)B|6cpk{SwtzVsdY*Qp9ebLJAG6a>6`rA(mrATc zoq&A(PCv7IiQFFEDE(M?w24!=V{d25u1=P?u(QH{#brK>7C$h%aMA=x)MfHCwAKJ& zixW{|XSje#$owLa&uu<(-uDkuXc2ZfFrQ9f^@5->bqs`|ThL4gsYR(gZn8|6YRYV4 zRCZ1@oivuUg~e|Aks3~#M6#P}Q=g~yj=^vrli17Vt1vQqppkV9T$fwz{X5A(0GJW) zn#?Yc1*C360!lIQcu7hPT#*`<2;%2i={RV3X#_3DfYoC2O$e8;Jf6Vt^Q$<$B&T3KStnq6Df&f_bW@`)q_z`M*#1mvS8sva!;|bXQ9) zr@sccfPsG0&`&w-GlCzJw1BZmAOVath4?Omd&K?+Se;Ar^(}?JRG>x0$TEY^&q(V4 z&%e48n#coh0i?Kvk*OpAwKdKygFGk4MD7`TInLMWmougHFaCq%yC!o#SI)_f+CCJ! zjU8IWVOZ$G_&p&soxlwaV|TuEm|hU)`XhL3F{~q?SG#_!~w#ZJPDqCjw>u(1SonpB|eRAcBtBXGHykFp-PDR$g zNqj;{c2!;ZWt2f4A+Q!uhp&HX0PU6emLlFJ2fIQ6nbTUJo=4Rx*_!vQFdB}3Q@8|x z@x|Uj2k<-BBvnQf4%1_<>Z8Z-G2F=epM*|%T$A7-S$|pWSOKyO28&JxL&^bm5Y`wsixssM9THpsYL?dKr|eLLGsgYuFF4Ez4wMM9Ny2pQo<>3kv> z{wKUUQ>mkyfBVLy@NJiNqG5-M!n7Nw{;)|s!GsmvT5dFURD3jh z6a!@`SEH9KBX$2?+8cnwnG(&Ge9czyeY{u;Te)Jr=S>s$TFH$Z!e=C?EE8Z(oi_gR z9B|mDW*~v7-qv#V^wpf|iTNGTL;L^rrqIk`_In6^avrlZ8ve3kTfH^Ev?z+*>wR3n zukS)#{E6{#@!OMCQ~Wy) zcAo(E5+yzweuUo452>lJF)0Y3PL9b`z>msgGNAZ-L&{nGT{Q|3UcHUF8IE&3qul>~ zt`Q({SKE@Twvw4L09@Okvur55v+4bu`TKohYDKHRY=JA!hvMm~DJvncQ`_EYMbqeD z!o(PRrhZIvOdYCV*t5g#RgCzC{bADjTaucV6|0x4WqeQgb^k9?X=*L@dSxg&b+OL# z>hFXnjRfr!27<2|6lY~xA8Tci{%?}24(0ZF4N)CjYvZ5%6`e+r?DEO4vz(Yy`wu1q zIB#4x(#f9t#p6b4e}QG*LM1YI9bOetjgkyxdT3-QT^h%L3OzBmUJuLmrc+m6NS7E%1~Qe@Hu z4k|f-<;vlr2`IWiHMb^em3(pO466{Jim{$kK#lciMZN?J$x`gMal?+8{#7WvVl5MC zgK$hSc9Q+yAvsXQ{OQ3?Jc+gfrXx2jpq*YedW; zwiFGM%~<6n2M=G=P+lgd%2-;Rz;M{atoDr8M5!55JOuaSUBegtAW@as z2lxLC`fuP2gpGU_1dTDv<{=h)5b`DKQ^^{ojK(4*h(Ui`B*Tt;Armu6S%0!M z%iAjYs0Y_5pbzsRsAl7O&fU<8VMs%1?Sl!}hoV$&eKnE5W6{7zF5f1s(Txlb zn}8v93L})$nQvv%WZR7@(5vK|HI&6-SR-!((5qM6^9GD5LAAnpW8oej<;v3qJN>!} zacA57!)mPdg(2Cs7jspj4c@yR)U@ZG09b{8lgJ26D3G_f-J-A6YzZS|1GD@|^^F}| z+Zo6!aZsa14GQq6scszhtZNu9lFnz1KY^^P$Q-5zmkzu?jB@12mSu@I8EBFVQLPHw zsO!&xzJb28`g_%v&QgiSYau$y$`Bz3NX0GNw_-1wOfB`q^On(t4a@PMspIe!}hkZT^4}y=(cQ?f#rzXQa>D^vMZQ8s4}2-Ss~FEidUMOwR3J+8Iemor*iL=0$ntU$L&J*`z01uH%L8liY03 zLl=!lbhKT@7dzL(BaBIVqNcG-XV+FbbpP!J!C-ieZv=AAtV~B3T_DXxN^jEmE!S@B zM~F^Q=lAn_HVvQl1{QE@+%r8V4p7jRfHa@S{ z$akVol;q?_cfYwO?W6dhX&M0nFb1 zrC~RA8b}dA;ku2bPD%QDJV(94q}RW6*dS>5uX{N@2<=yG&XeNehG8cxSZrovy}M6P z$V4rK4K`Y_02%mWJU>5r4v+hL|1JA2in`MOg33%Xgv2FT@@&Bh2(zrA;2(-u`F9^! z1|mrBTUdXW4ld8bRqA^Z_;8pROWl_U+d=|GK=@!^1~Cu(&z~ zI6NAie(l_^z?|qd|q`HX^7cQ!!-S*kARyZ-pDDiK=E$JONLWF zq^Oe>^#F}$4rr#0Hj|0RbiGMuH`p$30tD4xJg05O^uvJZJGWiS z0p;5`;h%^)pfGB9xjV)Mh`l-j-n|6?r@n~qxjGqvUjI{avuI4emY7TnCfeF;Lfdvu z$g+cPA2=O-RS=Chi}aC;0bs;M#7F=cyT1Le_G8NdG*a8SD6*d+^>q3H+vM zboSMr^ZGBF{1$`?4Cpn*FtidYgxWm&UoC*r<*DK4DwzQ7A1!p}UN+=7m*%I}q6u^)56+h4u7~gFH`m0^Qcp~Dkq7?I*a2dfy9N(4s8zQS z!7)67z`2TprTcZ)0oP|GGg7WjUwL6^CTi`=wX?^QYy^k$0k8H;c_G#hTzwxFKvEno zO1Yxo`f_5~*a0Ax`u75=*^YoBJN~)voTm8(AZ6VPutdTbG5%NpjtWK3z|NkJFhJZk z>jHY_Zb#$VjIBO*E=*wORwSce2 zPhl{|bs=7^96X&C1E5Y6J|S>dS)ETAIXkQRzR>VsQw)!L*I^4Kf!Yq*g(;uwnuRn# z;wCnv@RgRK?7CLe{p1LlL0R$bn(g+p{{|4}A9zRXV-RBH=GJguMJ(-$!pWWtj(ny--fd`P9GPGH%{}7>c4er^KW(Jaw8#`Vr?$TFp9KR*ls8c zN-&Rv3wgT^C`{wz_htp43Sd4P^+rx0+k&?jkRYNe8x(khTP;NkVlpi3ofzYBmELg$`MSeWoc`QSXCk0u-RND z={S5zvjm^wsP$Y!5_rV5QC(sur-r!Df?1x2m42mExHChkw*`nfarRsQ-Ai#3{`>9Z z1z=|gfsYa;h%CW#-Xjj0HivDO<2`_DxOU~`zI>JCH09Htz^l-Fg|3i*rZ~&*nO+#b zOr#Z0RAzU-Roo?K)b+`CB$N&j6XL7aTV?%Wq^NqisR8adK#vzn zHksr&poiSyb|xKW;?>71NQR^sI6<(rsVS^i6zo+xtU%V6Iy>d6DfTXNVV%f?R0jP5 zr&x+ceopy~5h+=~;UhFdweQ-GLz zM)l~7Yag=mHGKU*thB=zzbQTr#-1DD9|EnipLFN#wz>8f?mqXX>B1c&n~}J=5{lvq z!$AlOI;w&1m!;3M_)tV0EhFzL(~SSlD42XU0$YBupBB${?6-8)H47gWz!A7)F-F1E zzwkZ>_QzHTX52t3t7FYl`te7r=96T~2>-`yV&j3^@>ba5{y7Hiv#~P!zuLNo{|Xc< zH0BA5p?a+l>=F^6X#p&;n?OaV6*knCJFRdsRLc3w*f3~=b%0{MO7$v4XD7d6Klkvbs75I^t|XDrOmsXO57NBhamJzq-xI@*MfAC8p~4{mjI!kyBwL={(w7R*cLDf19=o2B7U3;~gujWK4mk`K^jzm- zFA3_(%!a3Fe&W2B&U2v*%N$9G;@#^f`@4}w=HDf@Nm*-lO<-bPFD7L9DJ;i>6%OSn zh~wA<9bF-#2^#BrU3aii#*>C-_NVX6QyGduP2)eJubn@}aX(1%UeAzUhNk(8)IUGZ z?y3J`>WSxnh!92LhH6}M4CmefRF8fYUi3LV)LG(r-)&r5nuQ9OA55HK$9 zI)g?{LZw0l4GKfq%e_$14%5koK+L7SQZAy(>_x1>K#@j(5pB&rYRe~m*@|Hk%u{NC zS4?QZq!MNs#k!wf@&vGSA<;lF_;|+eUNjV*$tF7P*39#?=Lc_i1rD+D|e!OT^FTOl8C^_{+HfCiv9^;ZcnRv|3-VpH#K z-NzP4Q1DY?k}2U5sDo1XX6T024mwR{);nLl6)36PlJo;(iX?mEVWa22=~puDPj=GH zRWb+*MXIkvE_G>B+6i40v$^ammT5I$XyRu`Vn-jTrR&B3j4n*`=Zy~`z46)p#V7A< z+8>nFB7r7s=4r#S-NrNumqC;0iw8nZ?_PUb+XsMQ#!4yML{QoBfC#G4iCo=@-dlV1 zV{36gwHw!LHH$^=TZ?UW_GkTcD4)#KywxAeY5LUt0%X&5kw}Q{y#4pNWG?A z66(;4QTJ+3e+Y6dR*wKWr3RjO!+OXc>A2B9-;5E}8a2wn=yagN(&C->Bvp=>4v9Wz zY*2!_Myd8wTXB&5KB!H1@#W%WNtCAdHv_7!9WEn_U@)=zGY9k~hzle%SKgR{TTz_r zgK^Tl18UEzkb&Atp5SZ749NA`4IYroB8>W&vUC!gApLH{22q}D;g26!?+*L0t9 z@KRz5RJK?J-A%ua+|AX{gS6?Lsq`Mh2w#kPPkJMhf43?SKRw&aKc0B~$8aEle0*{_ zRFVnvBtj_10u?vZly{-R@x%KA<_Y4leOfv?Hep@Iu71a9sB0`2Rqj-OMgWvRaOWQ% zHb%^mZKg|GE@~|yld!7M0DVTk@50nRnS+zG#A;OW0bDB@$H6KW52$z%8)T?ymp1J% z$VxaO|_i*clrhpRzPz#m&WySHP`*l z60q>}pHgpb5Ov3-e2|~W;+)XvumUT{c-LV|TJa3%n&Eak{MYjZE)z3(0kMdxuWSwT zKSq>P@bXJgxr3H9BJ&KhdwS4KizGi{&r%zPTAS?j|D74Pk${r_Mb=5r7Q)o?gjPMg z@$%fqnacDBjQ(STnBHAbsmj?Bgo&76I-OEdCLPV-F8YF~T3tTOUKUVZT1rTLlbmuZf?OriLObho=pllE|}ibnEAiG!a7PQP*s1+ z9_V~%aPb*3EGNmNx8wf)e2BIBph8(Lg& z?0yn!h%uEUEJa=?Y(HoKe2p@l40NFy=H0DSnrkW^b;3f1k_%;%$;Hh~&|W;&fB4#% zK&c2Mbu~>Jb9zK0eFx0R%KJpo`>Wv3 z(`ssKC#yx?`Otth-Y3rnwhVW`3a+U{O<4?~|5%nGjc-inVuVJ1WD`l#G)1%1Q&FL# z?23SJU&AGYcve#@>)-v~$NEi+;P81ZN)0MvMWIG`mOlVWwY6VUA|cWU2-4jxpn!BsokMqb zNw?D7UD6y5-CcsDbayuj3P^t&uioqX8{Zg=!9TF~UiGZC<};r;&#VX*^mKBD_H9-K z9`B?()ioC2_8eR8dNYuH+uP}&4tavX6cIby>at8&D*FB3IcEXK8QFC90Gga8Y~n#; z@+=s_pbJD%1hhbDk|H&$yP{%@I!-p-l~f;)up{LWvs*6Mt*)CBMYy~6{t@VLj_@K* z4BjY#@?X?FUdRbiJb{3U@zA_kWLM`aty8P{XKCk{-H8~a4BS37nFSK< z3MKsNJ*84^M0n6w75(6<&o%7d;D4oH*^v532)Bnqbbby9`l;UIwn8x-nos9Jbeu*Q ztZNP)vsQIA(1OBzLx2%CT=2G%ugi?Y(~INaxglmj59m)~j|s>>aj38Dt|D=ggF-YMh@%JDYZ1cyNC%>p4^g1b$d; z?_Skd&M=!0GyP7W^^#%mrrJgng5#)XpImH_e~0cn%>d<$*$7$);8JJeT^mYR=J}Wf zIv)0Bb&~4#F9sCDO=N_{8R;;Yq&fB&;g}ht?6bWC#^wu!GxsPbGJpllRa$)KX)wG(-?QK)s4l$OnFki z-@jNLo{o+Ak<=gG|cVPzLBA<43rBe2vPc}0kwo%EIKVOPk-=5 z<!a<8R_Ty)h7J4P$lB1S!GBxva^K*h)oT_iAG@^6iGtp72*O?GWq@2Z`?L+!F z?PAk`Mh0V*i;oy0HQ%*96Am+}=jT)BswSPk^i;DYdUZ-lp`l*zKRuFd1Lr5yVMfoO zw3Ik)0c4&foj%Puj}3^gGo5&wso%akmX7xrJo#K56}yG!DCT-94?%!9Do}w_T9;J2 zinob0Um#{;)`2+lyjk%(5}7WOPdj&hdVWFqaWwJ#fgcA~4@tE7)BC^1*@CQN%wnH0 zw>B>mx9mK=D6Y)vBW|Vh8EhH}i)IrnR4XlLh2%BiTw{g;9bpUk?wbHL>A@`!S?@Rs zW;QOl-tZui$bNsNP)YRFHj&L%0mFNxBx9xa#Tu#-dv~lc?s|$y0SlbOvOy7jef^fz zF>m_cxs`{hIEPVTkgy;Lt62h6?XbOIg654#875Q(y2&p%>kDeB)4f4FGZ)0|F~19n z?t3-&Hu^9dNv(RTuYGfja8NFXt#O=8$T?3wXY`t!&2wf@Hj0VxJ%s267Zi zN%IN9({-P>MOq?%g)fW;(egmF=cBcjGla&&Tpw>ru|?iKNf`-o zcRswqJIfJ)0ADqEFP-v9r}=OF_LApwi7N~{1C_dEWGN@oQrD#jsqsSM;^Mgh5R381 zCc?t}q}%D=<==8|0jN=@|FD^pp)^>(QzPxs)RN?cOQU@`21;o1lSe&FLZ9+i9*4?R zm-0Q8d?Die2+o^Py8#10$ohtcI6oFwE!6eoWNinNo{`b6bJ9A|T8ZG4*DRiDVSd6X z6R>}cbP3@_nslcC%22{DVcV=1xMi~hh#x(Aw0altOegsA`_9a~jxx@dG#+%GrFY88 zoTb)v>~J^D^nh(FO_rwtW9jhaxw*Qr;GFKc=ARwo^+Q22{gj!KY4l2C#UT*O)W<@> z&DK}PT(`Kw{N%h0=@&$sEoby7h*(JwQtW^Yc2+gZH2bb^3M7gI((V&(DGn z!n{xLSv!#SwNLngT@$tKa{IZ<48R~c#DHy^X$BlEhtqh{SPTKqR^(ULgzK@VT=RW2 zCn+7O8XANEWNLaf=>5BF(XW7Jb(d(&wAZ|L-#yZsE0vK^ZArV*pp1%fm=L9Zv|Z2) z`Vj~66a}-m_vnq}H~0xFqir99_rX)5n9*MzKU<@sq7DJhUB!`FTy14TGzt@`NYl~& z_>!?d_0i7smm2ITOn@pUKxZ%D#G}XkdgcC($1|N`?6HpfUjDbrV_H8~$_`T$3Feod zmUAVd2*)^`d!DfmjtP7{WD_a2>q+SI)GT`-Z2-Z^%o8qh8|RI9jI?GBgCax>7kb{E zEB315gHFl`3p4DxrG+p|Fa=93{nr>oRq@Aq}u!-m9|%`xUPX{o}<(amI&CQp0*EL%37Y zj60wn`{1Xz4kVt0jE$)xU!6*70rh}u2j9tSepbEWAjS^+EC`egki=nY~4wnX}9t^|`C6jBH zz3cSWKRvg`v1UXg&cH_5^H12`&eVY@b{R%P{tkO#tOb;iYt&q~eU zxf`)g6nUDpGV8?S3m{d+n)4G#{jy!YO1XGb=?+*~r_{NTJcz=zLT!8=`SrEyx+vEs zG#>n7P(7sP9`t7}JsraRVrGn)Bf^>Z#x6K1S;~XuvykK|xETg9qt$N{Vt0~Sn#-EO zb-3hwV$f46VJ=ed;_x2n&c0wcmnFMWWRI;lM*_?an(01L3WUCCh8$IT!m)XbWWdCv z7x{M4PE>`B1jTM?3|2Qaen0qKX%%08S$Lw%g-~f zlb&Y<$wvxW)!KD$59rG!{02qC7{8w{d)R6@&lzt&9|zJ5rUSdpgV*@H4wS%d5eTG5 z39`J-Q|Km0+9P3ZSq$^%2MjWDFCV(*7Xu;H*YKs&A>>_i%{VANdCUM{v(>dUl$IW5 zH$#j07iW(gP1=*yA`;>ODxyl(&zh@nCy=mC$ZlRw0y8{p@v{m8E>b*z4fTNXwAK#*)qFw zLiqV2xGtUjmVN1Kl&%ZzYt4W9AYNz#%dQz#p@^LTjeegC2%JeZa8oF%maUF6AxU1j zL&oa#D8g4csk6lixByXE-&y0K)_SW3iYVp^{1Bedi`>9gHeBVm;S=UR7128(;?2_3 z&?uQFRXq?M#oz{1xf?K_)w~>^`3}f$hq>{Ikv!T2>Y<3rL|`Qcp|{$Amrsyz+(m=u z<*D6yj#yZDRtZ|Ld`us!0C%M);DA~Y#8&?*>#ph;6ygf3hqlIADvx8aXWB;4#)(f< zoo$Qj4Rzc#jNE?jLdb?#ux{RWv>Uh0*W22js{MNa6>_8yA~rmNta(XPhjuu~HHA{U zLhY<=c&4)Nf~VpwA>-&%)XVMg0VXDjM_9<&c|{5)h%^LYbfwCiVrg6IaacWHt3J_f ztiuQouXVBNbwa%Q%c?d9bUt9wWRLRv_!#s;7$|?STlIT9?JhtgXHT1nT|vtTz_Dzb zTU%lgltPyD3!Xs6*?uoS$>3ER*Us~RP{acPsbb(bvW4 zvC@C8PPBg7V!pY)lWI4n0@bviXlKLC;*gu`3>j-kOq?wTX;N_iRS;vh%2F0 zHeOv0R$N9M9&Az7$iZXzNuX`yd>uGdGE~7mxR*9x{Z^1JEy!6Z=&qbB1V_kSe0-qs z$-zK^c8Y5$u@p_lJ1iaVOXJbk9n^OMhlAVpGHmK9D*gcPW-flBeiHE_iU`ra*NfOe{bAEU_ey8Us$;_VVneNM|%K0 zRkL-qs;^ENgCSa0ADrmgY#Y`PUB3T=eg3+n)?mR+l8UE=N^c16bBNoryDdILP1+nA zSIcjLbj%tCl3W4VCd>GHLT?=22!i=Qj-kEJd-8{ZAC^}bKV~wwo%2Cs^&JgWasAAX zYxbSR7}iYH$M%A3P1gMQe6jhpaNpOw1J`^N+u%S5T)kAPza4hQQDN^fH zz>$F-p5un?aG)pRoq)1 zZ<|O=z;2?un>1e__k7`9YyEW6bQA65wP-0mbq6gr(P`BAqt9Rig1Fn}Z2<})J1!25 zK1&(TuP;|TElcu^{|R8DM92yZhkZMa+84sA1HD>k(M^C1u>=Jb*RUDWbt4st%}o^L z#bY(2onH`+R#b$xnt!q`G#3YY8e+};C6Q$P#go{N6K4n0t4A~U0bXLs$E_={+uc4> zr^c=aXZ^cmi8F6L1mWv~@li{@ciK|I&{fGb_I{~(qwLz$W2${~;9h-4*f~4e)^L4g zS$1F}aq)+GP3!lQYBhXwqD~{BL8N~>xO83{4%!r9x;D@jBn*oQ)q0sNtp#4Q^Hj(n zyZeAn5YQ8bXK}PzcrqzO9PLdJ7FL>q~$#DNBq~zPn{supQJ6a1lYE7$hOs zRX-ne|9-veVNcZtG~HzP8KQO>4N3Ac6#2xOfeJN^wcaoDUN$LK6x*aU_mCg#0*T*6bu??vgVjyvLuoZUh1C%3#iNLY^s%6?^& z|9uf62CKM|1!t~`Sd3zc{mNy#c16=dO(G~wf<#On8Zz^#0iuJMsItRuXB(c6^A$N# zfUEv&8>m?{7BP>Nk5vGynVvDTVyCflaM%wJnED?mXP+8dmB4XQ`Zk*R9{$Vg{pVat z3X82CoEj<&5-&Gb=0sGP8{bbgDlI;CruhC6o6$SYKhvNHp-dj+gzYb62w6GAKZ%Sp z=2a=tEj>1>1l^G73!zX)?Z{M}HJ}CSIWblgNc#MPwft_+WSlR-@J?SFMO!#qbfS=j zQbCa-961wIrS;2Usk=@s0m#s7(ih>ZzWch)a{GMiacPcGXDL6gYdVpJVfX%|HXWlb zRa;2|F@BhJt;6eIi~r9Hio$$rD*~5b!ZAve0PpfH0VqHqoq`UBsRFD`PX}ps0RK(t zfuSE5BxZmp7K`rCDoT{_DWs?G1LYspLcYadu004uLtGs3l-pWZ$w8^K^R%QMBJt;- z@N4iX^|%T@Vsev@69`Reyq9gN>b`eA5a`bw(knaJ?M}_eh=?TSTLoMzIx6%%KFU0% zX=rkciZq_`1x$Zd8&1iiw8aov;Y&sUk@|OsvzRRf|2x`&*xBbbfy&MKeryn#j&qbR z0qbKy2^Ss45+ec!j4eL~27m4k5|~_$s^O`GO@=Dlq{!aVx5FB0CA`u!8N?O?N<6YY zIDX+<(BgiI%tmSV*}Nef&5KwiKc=_sQRGKIOS1`jvRGpiMw0a|sM3vz+( zp{fiFGmXTIGUdnNM(xCh;g)+`|E?AQCs#sJ@Nf`X_$9{|D=`K@VW)wmX0=^|@^w|8 zPf)0quSv=mYghjI+#+;X6!1RRU9N)@UUSu#GJujCsH{#^ZkPb^L! zIHF;6nz3S>GVvs^Ihc7`g`zQl0hNGC=x>*Vzi^&PWL6m8 zn++d{R=(%^V?~Cy;35so=jeFTfJO=zH@Ed$YzoVNt<_`u+1p(B<^^XbZ6lYU|Lt(KIiyS8tddBM=SmLErUwS%4)X`oWQad|#-_a`eA~W;*pPB~fi7p9;To zRM18Hac5w$?eied=4xUgZo}O=_%3pPS+Zt^O|*qiv_jl2zt||el=``v#Oc|d_ax{m zC@?oL38lo9>fca;D8_z5g}E#!tJ7+RHxccp{_Pf@`xJEg9*T~qRH4l^NzUU1pQ2?kEH zu>CI$MX`E+JObOmX5J5l6<4?RF`SWdFu?X(E5#)4z5JQj?^Zo?^{wZ3oPs#{jmjl9S@|Nmc*EkSx=K%Mw zoZv+Zl^WPhu-6o{2xF#RYj749&=L1FQU5#@gU>~-GduHz%GK+>Z>p;|UNX_qtDV&x z6O~L%#ErzBw6ssw8lwi-d;&;RiIV)feYz9ls7R9eUZZL+c-SA(N^AX>?Rw~YG_vUA zJ|wxC5^!mY^k)zXm_kE4t_%uFh>!@K@%KkSfcwJAJGeo|MhHWrHfEY&1M?uxx_n_m z2TpKhHIhUT#ws3QiMtyd@O1r_%>IOAzGuNr8kjH!Dy-?#f@h!|B z;pGQEtu@0x7pF9w!V(m?p@;W4FBi=^KIx~+^e&uN{Wq><8)L4TwHYcnd8!dJSiX;= znVvzg6mtqwNi$XaR4oG|qRK|tq0gTFHVf1QJ6hGG<*DIuCeLlaMMXOes!XgVtz2>f;Is*TujFRYuCgpi_KR0-&z@3KWZwW z4YS!IizRrgPxN$>cBoT*nUi2V^?KeHj*2k7>c+eD;_$0gIzQC&p9@7T)6vpiWKSNv z2|!Y6Z-9^Yk3IQDlOs*WQM~DN@mRpBR94j37^!DVNZ%aE?NLn~^}3IsdyiO$ZC6xpZcW!8j9Xw217D{ zP;%Z#XZAHl45kSzojyg0(~sn1ObSb2VB)oQfa7^%i216j-N=&OVO}M4YbuJ9P1@8r zV6;7nL=Y;~x$RHca_#g;o+QEGMtxp3v8Pqb^LZorNUG^-spR1J5O+uy0Y3p)|waUUzF zV2Ucbp_EYYQ~4i4MU9MjKT|6+mM00SyeFA9HMmP9z2jL3`uIAwQi27&z?jltjYW!F zEhE+GHl4#XQq7jZ9w^P;c(_m7+gAp!Gdj-qMm#?O+`^tS7y)(m4>#;}059Y;_O@@x zc;!}w**ugzYOMY_l34C?D23xevx9<#1^uu5LCCR`ExTuZ{xN!|Yp zdYhpCqZYR1+?tS&Cb;kH(aEiF69!Ck7_EGKhIl|=Zs6J?$|?LxI{{eg{ZbA46pY!h zm8dxi+~QvWMc)PCcU1t#kQPw0V0i@~yt@FXh1qjsa0)=3*%cKSE=x{Hn3eYc^S;tz zir(=B(?=?*szX(ffnaQG>^A_pCTRZJ#-HhZWsZY`BU)-XQe0HjF`s+b4*l`Xq1r(UKO5}LB)COOAVFp^sR1zPvLLJEj8ba{C z7&&^tWt1I~CafQjtd&^qtz{$p3)pW)h&2?FFHdcz4g>;P-e4_)qST>-tP z8k+nX1^-@TYn}kd<|I}SwNiq_Ih|6m9BsXslN|eFXFTxKYl&^ePoE42SfoYYR=RK3 z*}IS6Lix5_MQ1M~qAZ#!q-370s36~N$w_sPBl{)PH)3Tt5O+51-!Jf^!!$!IZp#}d zOk<^NDg8KEKl$Ro?)6AuSAKl;Mzn|Ks^TK@NZ)PbR8<#IUSOpPb z-{@$>;)y|@+v&!GFDYsKTrROGMn@?g7Xr=D)(e*}uXp$@%UdrX)Qw;Fo)VOA$-pW~ zF|@RTZl8k7$EonaP{00tys{>D7}hdP>!4Qek8%N|%XZyp1x#Ys!Ol22P0mLe6MA1V zU-Q$L0ybKBfi*d9XJp>wV?a8grxZZmjb47Fd}>XNoh~nMX~g@r<@+XJkQoP8QvStOt4398YMI8synG)*`1-C&z1n zt;^_=@D0Q;QBZz2 z@?l>?!AiQ)O>ANSp$srXn;n2><~bq(rf!!hAU5LwP;&b&+Adym&}1J1;ncP+-%O^G zr6(O`*tYG1S|RcLg0eg>74g(pRt?Q7w3wiZCOND2M`C}P2(%R68L1&~N)~Qaw^#W{ zCPbrZJkE(;PD#J|ixvEur)JN$ z0dg%Jpk$agXP49e1D*0{TGN&*f~tG#K^DwtZ#=)s^~B(EvQWSnJ1H71#Auhq;qxa5 z$=$aglMe&Dh7NfCu_2(@Omx0v+L2F)m>Q`@&fIY^t`^1JEM*TrI-d5xc$X^8= z|HzLUeP^IT_L#Rf63?1eU~{J5@#9UvI_Y#WR^CDOJ5^(mM%lBaJpnF!=yF0H*pYu301G!rhPtdEP_=Vr>IDii`JTo-PAqy zeylKI)aEdHiRRo!0G2KwdK>!2eQgxEHpj-^nn*-S?xc2Sd0eZ>FVCYh#bD$_g!U|vH;?XxCvR*(2x7Gav$rs zW}r&Km{7i6O0K;{$S8_;8(+P~EG7k4Z^g5hz;qK#+c#pFu>b62kMrt1GF%!+y$md37fsLFc0*h@{D6$i zoG6mpmzU@1GG4eY)o?TcE!;^1GXi|#ZFVLBo?Eea zmp&`Yl;wg(ah}^8UYbE%?X3ZkV?tmMD5aM}ka)p>GjFzNoBzu*YQ#2Kus5HBrG>?5 zuH1$?t#?T{;n?UX>CiEY(T)bKk2jHZVTL!8-nlR0PeYPxwP(s9HxBlTxUg2qW63-1 zIC+kjQ3AL8CZON|)MwK3U_R~MZY>G;*PodwZhl7$;twz*8nVb?N2{bu_The$J&xN& zhLIro+=3K{BG&{A!pCn)EIfA^-qA6cKC+8;jvjmD_i13~K8g`ajgh!>mZajQp{ef- zn)$88+PtRCHMGda$-0E|#w+T4*V3TEtTwY;ECo=Bba8L-=c{uwkmi|)4*qds_)sQ@ zxtv!`l~}>$>n&52cmBZaGqC2X$8Ma>k#OW>?g4%D>SVO9wI!Eg#*f!gRagKgodr>& zhL;&o1C(z)EZ$>@RR&mU4Zqs~{F-&bROpsFXc;GYz;ED?S?_+~E<+_*s!aaz?c*Hl0svUU{)6IaIS^z%od;L=J? zjNpHZGLRR}?(MCr`=fi|5{Sy3!(Yd9Rt-6 zb)2d$gd1d|pUi~+TO&`f;4r`&S@WV) zI!V*}oT100V2cXe^b+z~l%r^ifD#IuqN?1H0Mno9sce zwsBTYC^Abx)}CjQaM$>!gm;Hef)2J}t4(YAr6jlq-rlRwwKp?UV2gtXEr&%N{8hBU z3?aOYSneB1ZJr@Y?xQw0$TV32r;`1vfhc;Dv{NUZWx z<~W&h>x3-bDzQ{B=b+~D1hiSH7?1m}81k^owqsO;%ZTS%6vc?H9; zw7$`6hj+JUa;JxJX`8k_&n}Bk$Li`V+-^I8)nQY68aGF9ImjgEaNT|6Fz%61lxQBv zewLzkW>B2|uHd|-OvR) zKUa}~B|f|F6&r@AmnIb+m#XGylvg>Gs46^t_Hf?#ck!{ZBE-w;H*1W4%%kTYL~(ya zGK@K0V?+aqR$H{AE?H*LF4Ud*Iaw>=vrOII00kv7TE$$Gl*P{wsWaK~X&BwBLouQm z6}OB}Z&yl?J8);X`*8)051=MfP;Pp4>j|;%-yM7H|7-ihyLB-uv_T2U^ty6=^a4-m zA)Ym)`b>G&wZh#us0NoOQ8R--_Lv+lx8xl9T_BtD41}Ai5}kEB6Z$3f#|qL?Kb zD&n3pr?HJvhZT_{hYPP^hqX_GmRuZV7gni`uwCKjqK^Qb?0CwF5HqyN=jy&zIO zX(g(HGDfZ(6mvNhXof#-DFhodQ_=MGgg@``f*PHdZ*4BscK0Tm$@h`eDN3FdEvot@ zFwM-3Uc6Rr8iL9(m>N_|KsSM`nq0wcWsy{{Q@J81z+nPS>PGjGisUa-Kc6p=uCtPI zb~}CajV)u>Cg$GyP#oufK4V8*h*$FqWrv4F9#_7;T$~d62D<5E#efQ7CH2&j;$o@P zv@~m(vHksFX@Qx+8uJ4u!E1K)I;cFjJd^T3H9T%OBDZt_1Y+q=?q_hao^paDXcwkV zJslPlR+Yo2u$-Bmn=Y_Q+qVq5DwBJo5%e8|ZT;5=97PDFI%>>vmMn+Hqm@`Hzot9l z_mlgK7F2;PF&~8&|JKdT?O0h+Q9sY|>c_CO0neUkZOr_Srs_@8=JEY~%(`bR*C(fB zk*A)0@ap+(oU7fixn_ock1{`@pT8hgsM1S18TGAn3w1|ssJYTSw%ai73vt+BN)kz9 zC#N%33pY-#|DrB%3?}jO_t?e+?LhZk=2EBDd|L{Tt-9P_bN$)%{>Vr>~dE~vRf>RTNz*gFGmMx#f-tN(5*sa|sNB4W1)dI z3?{m0euljcmx^6Z>Gh#^GJ-GouMPU4m7PKz&ZwYHc?G$c0XV2l_kJFywwuO6YGjn% z-%kbJpUMr&*~n3h^z+S}6p

    Q0;^!(8Rh|!3{(*56$@$29wU*(2U_a3S8 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

    R94a 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 BC*c49 diff --git a/images/example.gif b/images/example.gif deleted file mode 100644 index cb0840340e9b1e662f541b6d99891f7bfa4f78df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142687 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

    UYa0A)01wdHioI$q18vwDtxeX%rtL6m;S+@O>K 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Ⓢhmo;;JWVYD7HjhWW65Sb!|R>Y@4r7=pd^8 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 C?W*kn diff --git a/images/icongreensmall.png b/images/icongreensmall.png deleted file mode 100644 index 9bde0d24159582e4cc84a24a3c9cec2010040328..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11596 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 KMNUMnLSTXr4gyC2 diff --git a/images/titlebar.png b/images/titlebar.png deleted file mode 100644 index 576998934797551c220944f4c0e2e676e4948a0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4555 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 L>5U3q$4CDIm=C1a diff --git a/images/windows-smartscreen.png b/images/windows-smartscreen.png deleted file mode 100644 index 3e238ba4712081f174ac8c1203345ae2c27aba28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24546 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 + + + + + + espanso + + + +

    Coming soon

    + + \ No newline at end of file diff --git a/native/liblinuxbridge/CMakeLists.txt b/native/liblinuxbridge/CMakeLists.txt deleted file mode 100644 index 4f44763..0000000 --- a/native/liblinuxbridge/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 3.0) -project(liblinuxbridge) - -set (CMAKE_CXX_STANDARD 14) -set(CMAKE_REQUIRED_INCLUDES "/usr/local/include" "/usr/include") - -add_library(linuxbridge STATIC bridge.cpp bridge.h) - -install(TARGETS linuxbridge DESTINATION .) \ No newline at end of file diff --git a/native/liblinuxbridge/bridge.cpp b/native/liblinuxbridge/bridge.cpp deleted file mode 100644 index d8d4012..0000000 --- a/native/liblinuxbridge/bridge.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#include "bridge.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -extern "C" { // Needed to avoid C++ compiler name mangling - #include -} - -/* -This code uses the X11 Record Extension to receive keyboard -events. Documentation of this library can be found here: -https://www.x.org/releases/X11R7.6/doc/libXtst/recordlib.html - -We will refer to this extension as RE from now on. -*/ - -/* -This struct is needed to receive events from the RE. -The funny thing is: it's not defined there, it should though. -The only place this is mentioned is the libxnee library, -so check that out if you need a reference. -*/ -typedef union { - unsigned char type ; - xEvent event ; - xResourceReq req ; - xGenericReply reply ; - xError error ; - xConnSetupPrefix setup; -} XRecordDatum; - -/* -Connections to the X server, RE recommends 2 connections: -one for recording control and one for reading the recorded data. -*/ -Display *data_disp = NULL; -Display *ctrl_disp = NULL; - -XRecordRange *record_range; -XRecordContext context; - -xdo_t * xdo_context; - -// Callback invoked when a new key event occur. -void event_callback (XPointer, XRecordInterceptData*); - -KeypressCallback keypress_callback; -void * context_instance; - -void register_keypress_callback(KeypressCallback callback) { - keypress_callback = callback; -} - - -int32_t initialize(void * _context_instance) { - setlocale(LC_ALL, ""); - - context_instance = _context_instance; - - /* - Open the connections to the X server. - RE recommends to open 2 connections to the X server: - one for the recording control and one to read the protocol - data. - */ - ctrl_disp = XOpenDisplay(NULL); - data_disp = XOpenDisplay(NULL); - - if (!ctrl_disp || !data_disp) { // Display error - return -1; - } - - /* - We must set the ctrl_disp to sync mode, or, when we the enable - context in data_disp, there will be a fatal X error. - */ - XSynchronize(ctrl_disp, True); - - int dummy; - - // Make sure the X RE is installed in this system. - if (!XRecordQueryVersion(ctrl_disp, &dummy, &dummy)) { - return -2; - } - - // Make sure the X Keyboard Extension is installed - if (!XkbQueryExtension(ctrl_disp, &dummy, &dummy, &dummy, &dummy, &dummy)) { - return -3; - } - - // Initialize the record range, that is the kind of events we want to track. - record_range = XRecordAllocRange (); - if (!record_range) { - return -4; - } - record_range->device_events.first = KeyPress; - record_range->device_events.last = KeyRelease; - - // We want to get the keys from all clients - XRecordClientSpec client_spec; - client_spec = XRecordAllClients; - - // Initialize the context - context = XRecordCreateContext(ctrl_disp, 0, &client_spec, 1, &record_range, 1); - if (!context) { - return -5; - } - - xdo_context = xdo_new(NULL); - - return 1; -} - -int32_t eventloop() { - if (!XRecordEnableContext (data_disp, context, event_callback, NULL)) { - return -1; - } - - return 1; -} - -void cleanup() { - XRecordDisableContext(ctrl_disp, context); - XRecordFreeContext(ctrl_disp, context); - XFree (record_range); - XCloseDisplay(data_disp); - XCloseDisplay(ctrl_disp); - xdo_free(xdo_context); -} - -void event_callback(XPointer p, XRecordInterceptData *hook) -{ - // Make sure the event comes from the X11 server - if (hook->category != XRecordFromServer) { - XRecordFreeData(hook); - return; - } - - // Cast the event payload to a XRecordDatum, needed later to access the fields - // This struct was hard to find and understand. Turn's out that all the - // required data are included in the "event" field of this structure. - // The funny thing is that it's not a XEvent as one might expect, - // but a xEvent, a very different beast defined in the Xproto.h header. - // I suggest you to look at that header if you want to understand where the - // upcoming field where taken from. - XRecordDatum *data = (XRecordDatum*) hook->data; - - int event_type = data->type; - int key_code = data->event.u.u.detail; - - // In order to convert the key_code into the corresponding string, - // we need to synthesize an artificial XKeyEvent, to feed later to the - // XLookupString function. - XKeyEvent event; - event.display = ctrl_disp; - event.window = data->event.u.focus.window; - event.root = XDefaultRootWindow(ctrl_disp); - event.subwindow = None; - event.time = data->event.u.keyButtonPointer.time; - event.x = 1; - event.y = 1; - event.x_root = 1; - event.y_root = 1; - event.same_screen = True; - event.keycode = key_code; - event.state = data->event.u.keyButtonPointer.state; - event.type = KeyPress; - - // Extract the corresponding chars. - std::array buffer; - int res = XLookupString(&event, buffer.data(), buffer.size(), NULL, NULL); - - switch (event_type) { - case KeyPress: - //printf ("%d %d %s\n", key_code, res, buffer.data()); - if (res > 0 && key_code != 22) { // Printable character, but not backspace - keypress_callback(context_instance, buffer.data(), buffer.size(), 0, key_code); - }else{ // Modifier key - keypress_callback(context_instance, NULL, 0, 1, key_code); - } - break; - default: - break; - } - - XRecordFreeData(hook); -} - -void send_string(const char * string) { - xdo_enter_text_window(xdo_context, CURRENTWINDOW, string, 12000); -} - -void delete_string(int32_t count) { - for (int i = 0; i 0) { - if (strstr(class_buffer, "terminal") != NULL) { - return 1; - } - } - - return 0; -} diff --git a/native/liblinuxbridge/bridge.h b/native/liblinuxbridge/bridge.h deleted file mode 100644 index 89d60aa..0000000 --- a/native/liblinuxbridge/bridge.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#ifndef ESPANSO_BRIDGE_H -#define ESPANSO_BRIDGE_H - -#include - -extern void * context_instance; - -/* - * Initialize the X11 context and parameters - */ -extern "C" int32_t initialize(void * context_instance); - -/* - * Start the event loop indefinitely. Blocking call. - */ -extern "C" int32_t eventloop(); - -/* - * Clean all the X11 resources allocated during the initialization. - */ -extern "C" void cleanup(); - -/* - * Called when a new keypress is made, the first argument is an char array, - * while the second is the size of the array. - */ -typedef void (*KeypressCallback)(void * self, const char *buffer, int32_t len, int32_t is_modifier, int32_t key_code); - -extern KeypressCallback keypress_callback; - -/* - * Register the callback that will be called when a keypress was made - */ -extern "C" void register_keypress_callback(KeypressCallback callback); - -/* - * Type the given string by simulating Key Presses - */ -extern "C" void send_string(const char * string); - -/* - * Send the backspace keypress, *count* times. - */ -extern "C" void delete_string(int32_t count); - -/* - * Trigger normal paste ( Pressing CTRL+V ) - */ -extern "C" void trigger_paste(); - -/* - * Trigger terminal paste ( Pressing CTRL+SHIFT+V ) - */ -extern "C" void trigger_terminal_paste(); - - -// SYSTEM MODULE - -/* - * Return the active windows's WM_NAME - */ -extern "C" int32_t get_active_window_name(char * buffer, int32_t size); - -/* - * Return the active windows's WM_CLASS - */ -extern "C" int32_t get_active_window_class(char * buffer, int32_t size); - -/* - * Return the active windows's executable path - */ -extern "C" int32_t get_active_window_executable(char * buffer, int32_t size); - -/* - * Return 1 if the current window is a terminal window, 0 otherwise. - */ -extern "C" int32_t is_current_window_terminal(); - -#endif //ESPANSO_BRIDGE_H diff --git a/native/libmacbridge/AppDelegate.h b/native/libmacbridge/AppDelegate.h deleted file mode 100644 index f35f5d1..0000000 --- a/native/libmacbridge/AppDelegate.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#import -#import - -#include "bridge.h" - -@interface AppDelegate : NSObject { - @public NSStatusItem *myStatusItem; -} - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification; -- (IBAction) statusIconClick: (id) sender; -- (IBAction) contextMenuClick: (id) sender; - -@end \ No newline at end of file diff --git a/native/libmacbridge/AppDelegate.mm b/native/libmacbridge/AppDelegate.mm deleted file mode 100644 index 35e9177..0000000 --- a/native/libmacbridge/AppDelegate.mm +++ /dev/null @@ -1,73 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#import "AppDelegate.h" - -@implementation AppDelegate - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - // Setup status icon - myStatusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; - - NSString *nsIconPath = [NSString stringWithUTF8String:icon_path]; - NSImage *statusImage = [[NSImage alloc] initWithContentsOfFile:nsIconPath]; - [statusImage setTemplate:YES]; - - [myStatusItem.button setImage:statusImage]; - [myStatusItem setHighlightMode:YES]; - [myStatusItem.button setAction:@selector(statusIconClick:)]; - [myStatusItem.button setTarget:self]; - - // Setup key listener - [NSEvent addGlobalMonitorForEventsMatchingMask:(NSEventMaskKeyDown | NSEventMaskFlagsChanged) - handler:^(NSEvent *event){ - if (event.type == NSEventTypeKeyDown - && event.keyCode != 0x33) { // Send backspace as a modifier - - const char * chars = [event.characters UTF8String]; - int len = event.characters.length; - - keypress_callback(context_instance, chars, len, 0, event.keyCode); - //NSLog(@"keydown: %@, %d", event.characters, event.keyCode); - }else{ - // Because this event is triggered for both the press and release of a modifier, trigger the callback - // only on release - if (([event modifierFlags] & (NSEventModifierFlagShift | NSEventModifierFlagCommand | - NSEventModifierFlagControl | NSEventModifierFlagOption)) == 0) { - - keypress_callback(context_instance, NULL, 0, 1, event.keyCode); - } - - //NSLog(@"keydown: %d", event.keyCode); - } - }]; -} - -- (IBAction) statusIconClick: (id) sender { - icon_click_callback(context_instance); -} - -- (IBAction) contextMenuClick: (id) sender { - NSInteger item_id = [[sender valueForKey:@"tag"] integerValue]; - - context_menu_click_callback(context_instance, static_cast(item_id)); -} - -@end \ No newline at end of file diff --git a/native/libmacbridge/CMakeLists.txt b/native/libmacbridge/CMakeLists.txt deleted file mode 100644 index 78689a7..0000000 --- a/native/libmacbridge/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 3.0) -project(libmacbridge) - -set (CMAKE_CXX_STANDARD 11) -set(CMAKE_C_FLAGS "-x objective-c") - -add_library(macbridge STATIC bridge.mm bridge.h AppDelegate.h AppDelegate.mm) - -install(TARGETS macbridge DESTINATION .) \ No newline at end of file diff --git a/native/libmacbridge/bridge.h b/native/libmacbridge/bridge.h deleted file mode 100644 index 8f414d9..0000000 --- a/native/libmacbridge/bridge.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#ifndef ESPANSO_BRIDGE_H -#define ESPANSO_BRIDGE_H - -#include - -extern "C" { - -extern void * context_instance; -extern char * icon_path; - -/* -* Initialize the AppDelegate and check for accessibility permissions -*/ -int32_t initialize(void * context, const char * icon_path); - -/* - * Start the event loop indefinitely. Blocking call. - */ -int32_t eventloop(); - -/* - * Called when a new keypress is made, the first argument is an char array, - * while the second is the size of the array. - */ -typedef void (*KeypressCallback)(void * self, const char *buffer, int32_t len, int32_t is_modifier, int32_t key_code); - -extern KeypressCallback keypress_callback; - -/* - * Register the callback that will be called when a keypress was made - */ -void register_keypress_callback(KeypressCallback callback); - -/* - * Type the given string by using the CGEventKeyboardSetUnicodeString call - */ -void send_string(const char * string); - -/* - * Send the Virtual Key press - */ -void send_vkey(int32_t vk); - -/* - * Send the backspace keypress, *count* times. - */ -void delete_string(int32_t count); - -/* - * Trigger normal paste ( Pressing CMD+V ) - */ -void trigger_paste(); - -// UI - -/* - * Called when the tray icon is clicked - */ -typedef void (*IconClickCallback)(void * self); -extern IconClickCallback icon_click_callback; -void register_icon_click_callback(IconClickCallback callback); - -// CONTEXT MENU - -typedef struct { - int32_t id; - int32_t type; - char name[100]; -} MenuItem; - -int32_t show_context_menu(MenuItem * items, int32_t count); - -/* - * Called when the context menu is clicked - */ -typedef void (*ContextMenuClickCallback)(void * self, int32_t id); -extern ContextMenuClickCallback context_menu_click_callback; -extern "C" void register_context_menu_click_callback(ContextMenuClickCallback callback); - -// SYSTEM - -/* - * Check if espanso is authorized to control accessibility features, needed to detect key presses. - * @return - */ -int32_t check_accessibility(); - -/* - * Prompt to authorize the accessibility features. - * @return - */ -int32_t prompt_accessibility(); - -/* - * Open Security & Privacy settings panel - * @return - */ -void open_settings_panel(); - -/* - * Return the active NSRunningApplication path - */ -int32_t get_active_app_bundle(char * buffer, int32_t size); - -/* - * Return the active NSRunningApplication bundle identifier - */ -int32_t get_active_app_identifier(char * buffer, int32_t size); - -// CLIPBOARD - -/* - * Return the clipboard text - */ -int32_t get_clipboard(char * buffer, int32_t size); - -/* - * Set the clipboard text - */ -int32_t set_clipboard(char * text); - -}; -#endif //ESPANSO_BRIDGE_H diff --git a/native/libmacbridge/bridge.mm b/native/libmacbridge/bridge.mm deleted file mode 100644 index 361bfa3..0000000 --- a/native/libmacbridge/bridge.mm +++ /dev/null @@ -1,266 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#include "bridge.h" - -#import -#include "AppDelegate.h" -#include -#include -extern "C" { - -} - -#include - -void * context_instance; -char * icon_path; -AppDelegate * delegate_ptr; - -KeypressCallback keypress_callback; -IconClickCallback icon_click_callback; -ContextMenuClickCallback context_menu_click_callback; - -int32_t initialize(void * context, const char * _icon_path) { - context_instance = context; - icon_path = strdup(_icon_path); - - AppDelegate *delegate = [[AppDelegate alloc] init]; - delegate_ptr = delegate; - NSApplication * application = [NSApplication sharedApplication]; - [application setDelegate:delegate]; -} - -void register_keypress_callback(KeypressCallback callback) { - keypress_callback = callback; -} - -void register_icon_click_callback(IconClickCallback callback) { - icon_click_callback = callback; -} - -void register_context_menu_click_callback(ContextMenuClickCallback callback) { - context_menu_click_callback = callback; -} - - -int32_t eventloop() { - [NSApp run]; -} - -void send_string(const char * string) { - char * stringCopy = strdup(string); - dispatch_async(dispatch_get_main_queue(), ^(void) { - // Convert the c string to a UniChar array as required by the CGEventKeyboardSetUnicodeString method - NSString *nsString = [NSString stringWithUTF8String:stringCopy]; - CFStringRef cfString = (__bridge CFStringRef) nsString; - std::vector buffer(nsString.length); - CFStringGetCharacters(cfString, CFRangeMake(0, nsString.length), buffer.data()); - - free(stringCopy); - - // Send the event - - // Because of a bug ( or undocumented limit ) of the CGEventKeyboardSetUnicodeString method - // the string gets truncated after 20 characters, so we need to send multiple events. - - int i = 0; - while (i < buffer.size()) { - int chunk_size = 20; - if ((i+chunk_size) > buffer.size()) { - chunk_size = buffer.size() - i; - } - - UniChar * offset_buffer = buffer.data() + i; - CGEventRef e = CGEventCreateKeyboardEvent(NULL, 0x31, true); - CGEventKeyboardSetUnicodeString(e, chunk_size, offset_buffer); - CGEventPost(kCGHIDEventTap, e); - CFRelease(e); - - usleep(2000); - - i += chunk_size; - } - }); -} - -void delete_string(int32_t count) { - dispatch_async(dispatch_get_main_queue(), ^(void) { - for (int i = 0; i < count; i++) { - CGEventRef keydown; - keydown = CGEventCreateKeyboardEvent(NULL, 0x33, true); - CGEventPost(kCGHIDEventTap, keydown); - CFRelease(keydown); - - usleep(2000); - - CGEventRef keyup; - keyup = CGEventCreateKeyboardEvent(NULL, 0x33, false); - CGEventPost(kCGHIDEventTap, keyup); - CFRelease(keyup); - - usleep(2000); - } - }); -} - -void send_vkey(int32_t vk) { - dispatch_async(dispatch_get_main_queue(), ^(void) { - CGEventRef keydown; - keydown = CGEventCreateKeyboardEvent(NULL, vk, true); - CGEventPost(kCGHIDEventTap, keydown); - CFRelease(keydown); - - usleep(2000); - - CGEventRef keyup; - keyup = CGEventCreateKeyboardEvent(NULL, vk, false); - CGEventPost(kCGHIDEventTap, keyup); - CFRelease(keyup); - - usleep(2000); - }); -} - -void trigger_paste() { - dispatch_async(dispatch_get_main_queue(), ^(void) { - CGEventRef keydown; - keydown = CGEventCreateKeyboardEvent(NULL, 0x37, true); // CMD - CGEventPost(kCGHIDEventTap, keydown); - CFRelease(keydown); - - usleep(2000); - - CGEventRef keydown2; - keydown2 = CGEventCreateKeyboardEvent(NULL, 0x09, true); // V key - CGEventPost(kCGHIDEventTap, keydown2); - CFRelease(keydown2); - - usleep(2000); - - CGEventRef keyup; - keyup = CGEventCreateKeyboardEvent(NULL, 0x09, false); - CGEventPost(kCGHIDEventTap, keyup); - CFRelease(keyup); - - usleep(2000); - - CGEventRef keyup2; - keyup2 = CGEventCreateKeyboardEvent(NULL, 0x37, false); // CMD - CGEventPost(kCGHIDEventTap, keyup2); - CFRelease(keyup2); - - usleep(2000); - }); -} - -int32_t get_active_app_bundle(char * buffer, int32_t size) { - NSRunningApplication *frontApp = [[NSWorkspace sharedWorkspace] frontmostApplication]; - NSString *bundlePath = [frontApp bundleURL].path; - const char * path = [bundlePath UTF8String]; - - snprintf(buffer, size, "%s", path); - - [bundlePath release]; - - return 1; -} - -int32_t get_active_app_identifier(char * buffer, int32_t size) { - NSRunningApplication *frontApp = [[NSWorkspace sharedWorkspace] frontmostApplication]; - NSString *bundleId = frontApp.bundleIdentifier; - const char * bundle = [bundleId UTF8String]; - - snprintf(buffer, size, "%s", bundle); - - [bundleId release]; - - return 1; -} - -int32_t get_clipboard(char * buffer, int32_t size) { - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; - for (id element in pasteboard.pasteboardItems) { - NSString *string = [element stringForType: NSPasteboardTypeString]; - if (string != NULL) { - const char * text = [string UTF8String]; - snprintf(buffer, size, "%s", text); - - [string release]; - - return 1; - } - } - - return -1; -} - -int32_t set_clipboard(char * text) { - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; - NSArray *array = @[NSPasteboardTypeString]; - [pasteboard declareTypes:array owner:nil]; - - NSString *nsText = [NSString stringWithUTF8String:text]; - [pasteboard setString:nsText forType:NSPasteboardTypeString]; -} - -// CONTEXT MENU - -int32_t show_context_menu(MenuItem * items, int32_t count) { - MenuItem * item_copy = (MenuItem*)malloc(sizeof(MenuItem)*count); - memcpy(item_copy, items, sizeof(MenuItem)*count); - int32_t count_copy = count; - - dispatch_async(dispatch_get_main_queue(), ^(void) { - - NSMenu *espansoMenu = [[NSMenu alloc] initWithTitle:@"Espanso"]; - - for (int i = 0; imyStatusItem popUpStatusItemMenu:espansoMenu]; - }); -} - -// 10.9+ only, see this url for compatibility: -// http://stackoverflow.com/questions/17693408/enable-access-for-assistive-devices-programmatically-on-10-9 -int32_t check_accessibility() { - NSDictionary* opts = @{(__bridge id)kAXTrustedCheckOptionPrompt: @NO}; - return AXIsProcessTrustedWithOptions((__bridge CFDictionaryRef)opts); -} - -int32_t prompt_accessibility() { - NSDictionary* opts = @{(__bridge id)kAXTrustedCheckOptionPrompt: @YES}; - return AXIsProcessTrustedWithOptions((__bridge CFDictionaryRef)opts); -} - -void open_settings_panel() { - NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"; - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]]; -} diff --git a/native/libwinbridge/CMakeLists.txt b/native/libwinbridge/CMakeLists.txt deleted file mode 100644 index f0ae960..0000000 --- a/native/libwinbridge/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.0) -project(libwinbridge) - -set (CMAKE_CXX_STANDARD 14) - -add_library(winbridge STATIC bridge.cpp bridge.h) - -install(TARGETS winbridge DESTINATION .) \ No newline at end of file diff --git a/native/libwinbridge/bridge.cpp b/native/libwinbridge/bridge.cpp deleted file mode 100644 index e5a4b27..0000000 --- a/native/libwinbridge/bridge.cpp +++ /dev/null @@ -1,644 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#include "bridge.h" -#include -#include -#include -#include -#include -#include - -#define UNICODE - -#include -#include -#include - -// How many milliseconds must pass between keystrokes to refresh the keyboard layout -const long refreshKeyboardLayoutInterval = 2000; - -void * manager_instance; - -// Keyboard listening - -DWORD lastKeyboardPressTick = 0; -HKL currentKeyboardLayout; -HWND window; -const wchar_t* const winclass = L"Espanso"; - - - -// UI - -#define APPWM_ICON_CLICK (WM_APP + 1) -#define APPWM_NOTIFICATION_POPUP (WM_APP + 2) -#define APPWM_NOTIFICATION_CLOSE (WM_APP + 3) -#define APPWM_SHOW_CONTEXT_MENU (WM_APP + 4) - -const wchar_t* const notification_winclass = L"EspansoNotification"; -HWND nw = NULL; -HWND hwnd_st_u = NULL; -HBITMAP g_espanso_bmp = NULL; -HICON g_espanso_ico = NULL; -NOTIFYICONDATA nid = {}; - -// Callbacks - -KeypressCallback keypress_callback = NULL; -IconClickCallback icon_click_callback = NULL; -ContextMenuClickCallback context_menu_click_callback = NULL; - -void register_keypress_callback(KeypressCallback callback) { - keypress_callback = callback; -} - -void register_icon_click_callback(IconClickCallback callback) { - icon_click_callback = callback; -} - -void register_context_menu_click_callback(ContextMenuClickCallback callback) { - context_menu_click_callback = callback; -} - -/* - * Message handler procedure for the windows - */ -LRESULT CALLBACK window_procedure(HWND window, unsigned int msg, WPARAM wp, LPARAM lp) -{ - HDC hdcStatic = NULL; - - switch (msg) - { - case WM_DESTROY: - std::cout << "\ndestroying window\n"; - PostQuitMessage(0); - DeleteObject(g_espanso_bmp); - DeleteObject(g_espanso_ico); - return 0L; - case WM_COMMAND: // Click on the tray icon context menu - { - UINT idItem = (UINT)LOWORD(wp); - UINT flags = (UINT)HIWORD(wp); - - if (flags == 0) { - context_menu_click_callback(manager_instance, (int32_t)idItem); - } - - break; - } - case APPWM_NOTIFICATION_POPUP: // Request to show a notification - { - std::unique_ptr ptr(reinterpret_cast(wp)); - - SetWindowText(hwnd_st_u, L" "); // Clear the previous text - SetWindowText(hwnd_st_u, ptr.get()); - - // Show the window - ShowWindow(nw, SW_SHOWNOACTIVATE); - break; - } - case APPWM_NOTIFICATION_CLOSE: // Request to close a notification - { - // Hide the window - ShowWindow(nw, SW_HIDE); - break; - } - case APPWM_SHOW_CONTEXT_MENU: // Request to show context menu - { - HMENU hPopupMenu = CreatePopupMenu(); - - // Create the menu - - int32_t count = static_cast(lp); - std::unique_ptr items(reinterpret_cast(wp)); - - for (int i = 0; i lpb(dwSize); - - // Request the Raw input data - if (GetRawInputData((HRAWINPUT)lp, RID_INPUT, lpb.data(), &dwSize, - sizeof(RAWINPUTHEADER)) != dwSize) { - return 0; - } - - // Convert the input data - RAWINPUT* raw = reinterpret_cast(lpb.data()); - - // Make sure it's a keyboard type event, relative to a key press. - if (raw->header.dwType == RIM_TYPEKEYBOARD) - { - // We only want KEY UP AND KEY DOWN events - if (raw->data.keyboard.Message != WM_KEYDOWN && raw->data.keyboard.Message != WM_KEYUP) { - return 0; - } - - int is_key_down = raw->data.keyboard.Message == WM_KEYDOWN; - - DWORD currentTick = GetTickCount(); - - // If enough time has passed between the last keypress and now, refresh the keyboard layout - if ((currentTick - lastKeyboardPressTick) > refreshKeyboardLayoutInterval) { - - // Because keyboard layouts on windows are Window-specific, to get the current - // layout we need to get the foreground window and get its layout. - - HWND hwnd = GetForegroundWindow(); - if (hwnd) { - DWORD threadID = GetWindowThreadProcessId(hwnd, NULL); - HKL newKeyboardLayout = GetKeyboardLayout(threadID); - - // It's not always valid, so update the current value only if available. - if (newKeyboardLayout != 0) { - currentKeyboardLayout = newKeyboardLayout; - } - } - - lastKeyboardPressTick = currentTick; - } - - // Get keyboard state ( necessary to decode the associated Unicode char ) - std::vector lpKeyState(256); - if (GetKeyboardState(lpKeyState.data())) { - // Convert the virtual key to an unicode char - std::array buffer; - int result = ToUnicodeEx(raw->data.keyboard.VKey, raw->data.keyboard.MakeCode, lpKeyState.data(), buffer.data(), buffer.size(), 0, currentKeyboardLayout); - - //std::cout << result << " " << buffer[0] << " " << raw->data.keyboard.VKey << std::endl; - - // We need to call the callback in two different ways based on the type of key - // The only modifier we use that has a result > 0 is the BACKSPACE, so we have to consider it. - if (result >= 1 && raw->data.keyboard.VKey != VK_BACK) { - keypress_callback(manager_instance, reinterpret_cast(buffer.data()), buffer.size(), 0, raw->data.keyboard.VKey, is_key_down); - }else{ - keypress_callback(manager_instance, nullptr, 0, 1, raw->data.keyboard.VKey, is_key_down); - } - } - } - - return 0; - } - default: - return DefWindowProc(window, msg, wp, lp); - } -} - -int32_t initialize(void * self, wchar_t * ico_path, wchar_t * bmp_path) { - manager_instance = self; - - // Load the images - g_espanso_bmp = (HBITMAP)LoadImage(NULL, bmp_path, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); - g_espanso_ico = (HICON)LoadImage(NULL, ico_path, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_SHARED | LR_DEFAULTSIZE | LR_LOADFROMFILE); - - // Make the notification capable of handling different screen definitions - SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE); - - // Initialize the default keyboard layout - currentKeyboardLayout = GetKeyboardLayout(0); - - // Initialize the Worker window - - // Docs: https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-wndclassexa - WNDCLASSEX wndclass = { - sizeof(WNDCLASSEX), // cbSize: Size of this structure - 0, // style: Class styles - window_procedure, // lpfnWndProc: Pointer to the window procedure - 0, // cbClsExtra: Number of extra bytes to allocate following the window-class structure - 0, // cbWndExtra: The number of extra bytes to allocate following the window instance. - GetModuleHandle(0), // hInstance: A handle to the instance that contains the window procedure for the class. - NULL, // hIcon: A handle to the class icon. - LoadCursor(0,IDC_ARROW), // hCursor: A handle to the class cursor. - NULL, // hbrBackground: A handle to the class background brush. - NULL, // lpszMenuName: Pointer to a null-terminated character string that specifies the resource name of the class menu - winclass, // lpszClassName: A pointer to a null-terminated string or is an atom. - NULL // hIconSm: A handle to a small icon that is associated with the window class. - }; - - // Notification Window - - // Docs: https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-wndclassexa - WNDCLASSEX notificationwndclass = { - sizeof(WNDCLASSEX), // cbSize: Size of this structure - 0, // style: Class styles - window_procedure, // lpfnWndProc: Pointer to the window procedure - 0, // cbClsExtra: Number of extra bytes to allocate following the window-class structure - 0, // cbWndExtra: The number of extra bytes to allocate following the window instance. - GetModuleHandle(0), // hInstance: A handle to the instance that contains the window procedure for the class. - NULL, // hIcon: A handle to the class icon. - LoadCursor(0,IDC_ARROW), // hCursor: A handle to the class cursor. - NULL, // hbrBackground: A handle to the class background brush. - NULL, // lpszMenuName: Pointer to a null-terminated character string that specifies the resource name of the class menu - notification_winclass, // lpszClassName: A pointer to a null-terminated string or is an atom. - NULL // hIconSm: A handle to a small icon that is associated with the window class. - }; - - if (RegisterClassEx(&wndclass) && RegisterClassEx(¬ificationwndclass)) - { - // Docs: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowexw - window = CreateWindowEx( - 0, // dwExStyle: The extended window style of the window being created. - winclass, // lpClassName: A null-terminated string or a class atom created by a previous call to the RegisterClass - L"Espanso Worker Window", // lpWindowName: The window name. - WS_OVERLAPPEDWINDOW, // dwStyle: The style of the window being created. - CW_USEDEFAULT, // X: The initial horizontal position of the window. - CW_USEDEFAULT, // Y: The initial vertical position of the window. - 100, // nWidth: The width, in device units, of the window. - 100, // nHeight: The height, in device units, of the window. - NULL, // hWndParent: handle to the parent or owner window of the window being created. - NULL, // hMenu: A handle to a menu, or specifies a child-window identifier, depending on the window style. - GetModuleHandle(0), // hInstance: A handle to the instance of the module to be associated with the window. - NULL // lpParam: Pointer to a value to be passed to the window - ); - - // Register raw inputs - RAWINPUTDEVICE Rid[1]; - - Rid[0].usUsagePage = 0x01; - Rid[0].usUsage = 0x06; - Rid[0].dwFlags = RIDEV_NOLEGACY | RIDEV_INPUTSINK; // adds HID keyboard and also ignores legacy keyboard messages - Rid[0].hwndTarget = window; - - if (RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) { // Something went wrong, error. - return -1; - } - - // Initialize the notification window - nw = CreateWindowEx( - WS_EX_TOOLWINDOW | WS_EX_TOPMOST, // dwExStyle: The extended window style of the window being created. - notification_winclass, // lpClassName: A null-terminated string or a class atom created by a previous call to the RegisterClass - L"Espanso Notification", // lpWindowName: The window name. - WS_POPUPWINDOW, // dwStyle: The style of the window being created. - CW_USEDEFAULT, // X: The initial horizontal position of the window. - CW_USEDEFAULT, // Y: The initial vertical position of the window. - 300, // nWidth: The width, in device units, of the window. - 100, // nHeight: The height, in device units, of the window. - NULL, // hWndParent: handle to the parent or owner window of the window being created. - NULL, // hMenu: A handle to a menu, or specifies a child-window identifier, depending on the window style. - GetModuleHandle(0), // hInstance: A handle to the instance of the module to be associated with the window. - NULL // lpParam: Pointer to a value to be passed to the window - ); - - if (nw) - { - int x, w, y, h; - y = 40; h = 30; - x = 100; w = 180; - hwnd_st_u = CreateWindowEx(0, L"static", L"ST_U", - WS_CHILD | WS_VISIBLE | WS_TABSTOP | SS_CENTER, - x, y, w, h, - nw, (HMENU)(501), - (HINSTANCE)GetWindowLong(nw, GWLP_HINSTANCE), NULL); - - SetWindowText(hwnd_st_u, L"Loading..."); - - int posX = GetSystemMetrics(SM_CXSCREEN) - 350; - int posY = GetSystemMetrics(SM_CYSCREEN) - 200; - - SetWindowPos(nw, HWND_TOP, posX, posY, 0, 0, SWP_NOSIZE); - - // Hide the window - ShowWindow(nw, SW_HIDE); - - // Setup the icon in the notification space - - SendMessage(nw, WM_SETICON, ICON_BIG, (LPARAM)g_espanso_ico); - SendMessage(nw, WM_SETICON, ICON_SMALL, (LPARAM)g_espanso_ico); - - //Notification - nid.cbSize = sizeof(nid); - nid.hWnd = nw; - nid.uID = 1; - nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; - nid.uCallbackMessage = APPWM_ICON_CLICK; - nid.hIcon = g_espanso_ico; - StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), L"espanso"); - - // Show the notification. - Shell_NotifyIcon(NIM_ADD, &nid); - } - }else{ - // Something went wrong, error. - return -1; - } - - return 1; -} - -void eventloop() { - if (window) - { - // Hide the window - ShowWindow(window, SW_HIDE); - - // Enter the Event loop - MSG msg; - while (GetMessage(&msg, 0, 0, 0)) DispatchMessage(&msg); - } - - // Something went wrong, this should have been an infinite loop. -} - -/* - * Type the given string simulating keyboard presses. - */ -void send_string(const wchar_t * string) { - std::wstring msg = string; - - std::vector vec; - for (auto ch : msg) - { - INPUT input = { 0 }; - input.type = INPUT_KEYBOARD; - input.ki.dwFlags = KEYEVENTF_UNICODE; - input.ki.wScan = ch; - vec.push_back(input); - - input.ki.dwFlags |= KEYEVENTF_KEYUP; - vec.push_back(input); - } - - SendInput(vec.size(), vec.data(), sizeof(INPUT)); -} - -/* - * Send the backspace keypress, *count* times. - */ -void delete_string(int32_t count) { - std::vector vec; - - for (int i = 0; i < count; i++) { - INPUT input = { 0 }; - - input.type = INPUT_KEYBOARD; - input.ki.wScan = 0; - input.ki.time = 0; - input.ki.dwExtraInfo = 0; - input.ki.wVk = VK_BACK; - input.ki.dwFlags = 0; // 0 for key press - vec.push_back(input); - - input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release - vec.push_back(input); - } - - SendInput(vec.size(), vec.data(), sizeof(INPUT)); -} - -void send_vkey(int32_t vk) { - std::vector vec; - - INPUT input = { 0 }; - - input.type = INPUT_KEYBOARD; - input.ki.wScan = 0; - input.ki.time = 0; - input.ki.dwExtraInfo = 0; - input.ki.wVk = vk; - input.ki.dwFlags = 0; // 0 for key press - vec.push_back(input); - - input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release - vec.push_back(input); - - SendInput(vec.size(), vec.data(), sizeof(INPUT)); -} - -void trigger_paste() { - std::vector vec; - - INPUT input = { 0 }; - - input.type = INPUT_KEYBOARD; - input.ki.wScan = 0; - input.ki.time = 0; - input.ki.dwExtraInfo = 0; - input.ki.wVk = VK_CONTROL; - input.ki.dwFlags = 0; // 0 for key press - vec.push_back(input); - - input.ki.wVk = 0x56; // V KEY - vec.push_back(input); - - input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release - vec.push_back(input); - - input.ki.wVk = VK_CONTROL; - vec.push_back(input); - - SendInput(vec.size(), vec.data(), sizeof(INPUT)); -} - - -// SYSTEM - -int32_t get_active_window_name(wchar_t * buffer, int32_t size) { - HWND hwnd = GetForegroundWindow(); - - return GetWindowText(hwnd, buffer, size); -} - -int32_t get_active_window_executable(wchar_t * buffer, int32_t size) { - HWND hwnd = GetForegroundWindow(); - - // Extract the window PID - DWORD windowPid; - GetWindowThreadProcessId(hwnd, &windowPid); - - DWORD dsize = (DWORD) size; - - // Extract the process executable file path - HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, windowPid); - int res = QueryFullProcessImageNameW(process, 0, buffer, &dsize); - CloseHandle(process); - - return res; -} - -// Notifications - -int32_t show_notification(wchar_t * message) { - if (nw != NULL) { - wchar_t * buffer = new wchar_t[100]; - swprintf(buffer, 100, L"%ls", message); - - PostMessage(nw, APPWM_NOTIFICATION_POPUP, reinterpret_cast(buffer), 0); - return 1; - } - - return -1; -} - -void close_notification() { - if (nw != NULL) { - PostMessage(nw, APPWM_NOTIFICATION_CLOSE, 0, 0); - } -} - -int32_t show_context_menu(MenuItem * items, int32_t count) { - if (nw != NULL) { - MenuItem * items_buffer = new MenuItem[count]; - memcpy(items_buffer, items, sizeof(MenuItem)*count); - - PostMessage(nw, APPWM_SHOW_CONTEXT_MENU, reinterpret_cast(items_buffer), static_cast(count)); - return 1; - } - - return -1; -} - -void cleanup_ui() { - Shell_NotifyIcon(NIM_DELETE, &nid); -} - -// SYSTEM - -int32_t start_daemon_process() { - wchar_t cmd[MAX_PATH]; - swprintf(cmd, MAX_PATH, L"espanso.exe daemon"); - - // Get current espanso directory - TCHAR espansoFilePath[MAX_PATH]; - GetModuleFileName(NULL, espansoFilePath, MAX_PATH); - - STARTUPINFO si = { sizeof(si) }; - PROCESS_INFORMATION pi; - - // Documentation: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw - BOOL res = CreateProcess( - espansoFilePath, - cmd, - NULL, - NULL, - FALSE, - DETACHED_PROCESS, - NULL, - NULL, - &si, - &pi - ); - - if (!res) { - return -1; - } - - return 1; -} - -// CLIPBOARD - -int32_t set_clipboard(wchar_t *text) { - const size_t len = wcslen(text) + 1; - HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len * sizeof(wchar_t)); - memcpy(GlobalLock(hMem), text, len * sizeof(wchar_t)); - GlobalUnlock(hMem); - if (!OpenClipboard(NULL)) { - return -1; - } - EmptyClipboard(); - if (!SetClipboardData(CF_UNICODETEXT, hMem)) { - return -2; - } - CloseClipboard(); -} - -int32_t get_clipboard(wchar_t *buffer, int32_t size) { - if (!OpenClipboard(NULL)) { - return -1; - } - - // Get handle of clipboard object for ANSI text - HANDLE hData = GetClipboardData(CF_UNICODETEXT); - if (!hData) { - return -2; - } - - HGLOBAL hMem = GlobalLock(hData); - if (!hMem) { - return -3; - } - - GlobalUnlock(hMem); - - swprintf(buffer, size, L"%s", hMem); - - CloseClipboard(); -} diff --git a/native/libwinbridge/bridge.h b/native/libwinbridge/bridge.h deleted file mode 100644 index e9ddbf8..0000000 --- a/native/libwinbridge/bridge.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#ifndef ESPANSO_BRIDGE_H -#define ESPANSO_BRIDGE_H - -#include -#include - -// SYSTEM - -extern "C" int32_t start_daemon_process(); - -extern void * manager_instance; - -/* - * Initialize the Windows parameters - * return: 1 if OK, -1 otherwise. - */ -extern "C" int32_t initialize(void * self, wchar_t * ico_path, wchar_t * bmp_path); - -/* - * Called when a new keypress is made, the first argument is an int array, - * while the second is the size of the array. - */ -typedef void (*KeypressCallback)(void * self, int32_t *buffer, int32_t len, int32_t is_modifier, int32_t key_code, int32_t is_key_down); -extern KeypressCallback keypress_callback; - -/* - * Register the callback that will be called when a keypress was made - */ -extern "C" void register_keypress_callback(KeypressCallback callback); - -/* - * Start the event loop indefinitely. Blocking call. - */ -extern "C" void eventloop(); - -// Keyboard Manager - -/* - * Type the given string by simulating Key Presses - */ -extern "C" void send_string(const wchar_t * string); - -/* - * Send the given Virtual Key press - */ -extern "C" void send_vkey(int32_t vk); - -/* - * Send the backspace keypress, *count* times. - */ -extern "C" void delete_string(int32_t count); - -/* - * Send the Paste keyboard shortcut (CTRL+V) - */ -extern "C" void trigger_paste(); - -// Detect current application commands - -/* - * Return the active windows's title - */ -extern "C" int32_t get_active_window_name(wchar_t * buffer, int32_t size); - -/* - * Return the active windows's executable path - */ -extern "C" int32_t get_active_window_executable(wchar_t * buffer, int32_t size); - -// UI - -/* - * Called when the tray icon is clicked - */ -typedef void (*IconClickCallback)(void * self); -extern IconClickCallback icon_click_callback; -extern "C" void register_icon_click_callback(IconClickCallback callback); - -// CONTEXT MENU - -typedef struct { - int32_t id; - int32_t type; - wchar_t name[100]; -} MenuItem; - -extern "C" int32_t show_context_menu(MenuItem * items, int32_t count); - -/* - * Called when the context menu is clicked - */ -typedef void (*ContextMenuClickCallback)(void * self, int32_t id); -extern ContextMenuClickCallback context_menu_click_callback; -extern "C" void register_context_menu_click_callback(ContextMenuClickCallback callback); - -/* - * Hide the tray icon - */ -extern "C" void cleanup_ui(); - -// NOTIFICATION - -/* - * Show a window containing the notification. - */ -extern "C" int32_t show_notification(wchar_t * message); - -/* - * Close the notification if present - */ -extern "C" void close_notification(); - -// CLIPBOARD - -/* - * Return the clipboard text - */ -extern "C" int32_t get_clipboard(wchar_t * buffer, int32_t size); - -/* - * Set the clipboard text - */ -extern "C" int32_t set_clipboard(wchar_t * text); - -#endif //ESPANSO_BRIDGE_H \ No newline at end of file diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.pbxproj b/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.pbxproj deleted file mode 100644 index a3fa5be..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.pbxproj +++ /dev/null @@ -1,312 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - B6F9DF16232283F8005233EB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F9DF15232283F8005233EB /* AppDelegate.m */; }; - B6F9DF18232283F8005233EB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B6F9DF17232283F8005233EB /* Assets.xcassets */; }; - B6F9DF1E232283F8005233EB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F9DF1D232283F8005233EB /* main.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - B6F9DF11232283F8005233EB /* EspansoNotifyHelper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = EspansoNotifyHelper.app; sourceTree = BUILT_PRODUCTS_DIR; }; - B6F9DF14232283F8005233EB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - B6F9DF15232283F8005233EB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - B6F9DF17232283F8005233EB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - B6F9DF1C232283F8005233EB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B6F9DF1D232283F8005233EB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - B6F9DF1F232283F8005233EB /* EspansoNotifyHelper.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = EspansoNotifyHelper.entitlements; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - B6F9DF0E232283F8005233EB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - B6F9DF08232283F8005233EB = { - isa = PBXGroup; - children = ( - B6F9DF13232283F8005233EB /* EspansoNotifyHelper */, - B6F9DF12232283F8005233EB /* Products */, - ); - sourceTree = ""; - }; - B6F9DF12232283F8005233EB /* Products */ = { - isa = PBXGroup; - children = ( - B6F9DF11232283F8005233EB /* EspansoNotifyHelper.app */, - ); - name = Products; - sourceTree = ""; - }; - B6F9DF13232283F8005233EB /* EspansoNotifyHelper */ = { - isa = PBXGroup; - children = ( - B6F9DF14232283F8005233EB /* AppDelegate.h */, - B6F9DF15232283F8005233EB /* AppDelegate.m */, - B6F9DF17232283F8005233EB /* Assets.xcassets */, - B6F9DF1C232283F8005233EB /* Info.plist */, - B6F9DF1D232283F8005233EB /* main.m */, - B6F9DF1F232283F8005233EB /* EspansoNotifyHelper.entitlements */, - ); - path = EspansoNotifyHelper; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - B6F9DF10232283F8005233EB /* EspansoNotifyHelper */ = { - isa = PBXNativeTarget; - buildConfigurationList = B6F9DF22232283F8005233EB /* Build configuration list for PBXNativeTarget "EspansoNotifyHelper" */; - buildPhases = ( - B6F9DF0D232283F8005233EB /* Sources */, - B6F9DF0E232283F8005233EB /* Frameworks */, - B6F9DF0F232283F8005233EB /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = EspansoNotifyHelper; - productName = EspansoNotifyHelper; - productReference = B6F9DF11232283F8005233EB /* EspansoNotifyHelper.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - B6F9DF09232283F8005233EB /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1010; - ORGANIZATIONNAME = "Federico Terzi"; - TargetAttributes = { - B6F9DF10232283F8005233EB = { - CreatedOnToolsVersion = 10.1; - }; - }; - }; - buildConfigurationList = B6F9DF0C232283F8005233EB /* Build configuration list for PBXProject "EspansoNotifyHelper" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = B6F9DF08232283F8005233EB; - productRefGroup = B6F9DF12232283F8005233EB /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - B6F9DF10232283F8005233EB /* EspansoNotifyHelper */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - B6F9DF0F232283F8005233EB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B6F9DF18232283F8005233EB /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - B6F9DF0D232283F8005233EB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B6F9DF1E232283F8005233EB /* main.m in Sources */, - B6F9DF16232283F8005233EB /* AppDelegate.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - B6F9DF20232283F8005233EB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - B6F9DF21232283F8005233EB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "Mac Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = macosx; - }; - name = Release; - }; - B6F9DF23232283F8005233EB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = EspansoNotifyHelper/EspansoNotifyHelper.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = N69XJWRM3X; - INFOPLIST_FILE = EspansoNotifyHelper/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.federicoterzi.EspansoNotifyHelper; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - B6F9DF24232283F8005233EB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = EspansoNotifyHelper/EspansoNotifyHelper.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = N69XJWRM3X; - INFOPLIST_FILE = EspansoNotifyHelper/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.federicoterzi.EspansoNotifyHelper; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - B6F9DF0C232283F8005233EB /* Build configuration list for PBXProject "EspansoNotifyHelper" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B6F9DF20232283F8005233EB /* Debug */, - B6F9DF21232283F8005233EB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B6F9DF22232283F8005233EB /* Build configuration list for PBXNativeTarget "EspansoNotifyHelper" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B6F9DF23232283F8005233EB /* Debug */, - B6F9DF24232283F8005233EB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = B6F9DF09232283F8005233EB /* Project object */; -} diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index b73ee34..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcuserdata/freddy.xcuserdatad/UserInterfaceState.xcuserstate b/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/project.xcworkspace/xcuserdata/freddy.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 84373c4e00a86ad03b782eee20a1609684346f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22877 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 VRNjI%1DfLg@=Ckd&nR!v{{ueDB@qAs diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcshareddata/xcschemes/EspansoNotifyHelper.xcscheme b/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcshareddata/xcschemes/EspansoNotifyHelper.xcscheme deleted file mode 100644 index 69a385d..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcshareddata/xcschemes/EspansoNotifyHelper.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcuserdata/freddy.xcuserdatad/xcschemes/xcschememanagement.plist b/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcuserdata/freddy.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 396e625..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper.xcodeproj/xcuserdata/freddy.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - EspansoNotifyHelper.xcscheme_^#shared#^_ - - orderHint - 0 - - - SuppressBuildableAutocreation - - B6F9DF10232283F8005233EB - - primary - - - - - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.h b/other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.h deleted file mode 100644 index dbe09df..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#import - -@interface AppDelegate : NSObject - - -@end - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.m b/other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.m deleted file mode 100644 index b076bcb..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper/AppDelegate.m +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#import "AppDelegate.h" - -@interface AppDelegate () - -@property (weak) IBOutlet NSWindow *window; -@end - -@implementation AppDelegate - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; - - NSArray *args = [[NSProcessInfo processInfo] arguments]; - - NSString *title = @"Title"; - NSString *desc = @"Description"; - double delay = 1.5; - - if ([args count] > 3) { - title = args[1]; - desc = args[2]; - delay = [args[3] doubleValue]; - } - - NSUserNotification *notification = [[NSUserNotification alloc] init]; - notification.title = title; - notification.informativeText = desc; - notification.soundName = nil; - - [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; - - [[NSUserNotificationCenter defaultUserNotificationCenter] performSelector:@selector(removeDeliveredNotification:) withObject:notification afterDelay:delay]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ - NSRunningApplication *app = [NSRunningApplication currentApplication]; - [app terminate]; - }); -} - - -- (void)applicationWillTerminate:(NSNotification *)aNotification { - // Insert code here to tear down your application -} - -- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification{ - return YES; -} - - -@end diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/Contents.json b/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index ce3f357..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "icongreen-16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "icongreen-32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "icongreen-32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "icongreen-64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "icongreen-128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "icongreen-256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "icongreen-256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "icongreen-512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "icongreen-512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "icongreen-1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-1024.png b/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-1024.png deleted file mode 100644 index 3f2555add7bf56ad0b9f48e3ccb965b47cbdebe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98365 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 >ZJ1B&W+)9%-|HhDdt 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¬c zrEOMTPtxx1p~B-Cz4Omk-b?Ty(U;Ss{f)gTfDPJX?AFH3>|Byyb{>}Ow0zC{oV;q; zU|)c0=n>8ZhWGnweuCgu?<9hSIG;eC4GPV`#7R*iN_MdUs(Y%+&=J120HCoka!u6D z=baU12HQqleM!dEyfVDp|Kimn_Tna+NzT)r9{G~YzN-I!^D(9xQ)V8SjV-8gtxDQe?|4Rmp`huE(x z2}4RDkp5cHc%iQS8mf0!c9L}hY}Hi1K<61?h(^`5ycRzb(?as!9Lk7BXxNQ$jJ3zI$9P@CYr_3RbJqjG_u zCOPJTLWgS=T60>6WVpO@KH>T!rmJ>}Jmk-~?gw4gBI)G?YpUc^R8CKDEwEMAsp7kQ zOY2Zu_e7?94#hy7C%?e9+9uW#b-7gMMO3XtQu)lysXhC?==BeVW-f2Hs?7Gfd4iu1 zTk!`Wjy)wn+-4OM#YDx5`0{R(kB!?i> z$*dHnBye5@YRj{bd*m(*6=C9Tk(w}Q5O)x^1>$WAbGXBZJU#sA7`8Tz*81SpI|Eek z{?cD}ULUH5*&cf^C#gfPjVs7K77GTIfWe0Dti7$x?18)S2#-OJX+dB%hbXY92mGVYAd)4DM2pHcd86NB9=dgFr22Si#2<}D-@K> z;N`HPYHIN_mkeO*l0PhM8)!d<#VLuhiaL}(YEQjd6n`4S93gIlGHIW=U;CLY_aN(g zX_pYENr$`r;nME4@9KfkpiVA16GMQt+^l}3urBDDY-eJp1z~#>^wusu==uk*BwB1j_{=~6Ti^2s;#3b zPxMBNJv!PHpmhNw>TiZG$Typqp*YR&ps{*H3~mgU;H2dYQWdw&DFrq%zx z)v;$pnVfq}l8KJI_!kYv(MeQvxQtY0l9t8TA@j&mM@zV8lJ3005Pj!!T$Q~@<}8RG zMWp-S(Zr)linW1HMdMqa8!rmfjwa1J(gzQPf^b(GRrDHq@r@nRWOlwS{|Q_OEUP|m zka=dHTVBOXOWsPk7TK|(Zw#Woz)TDZg-UXMcpAWAIMc0BUCL~^pTh> zK;;xtrzYlAVf5?{{2Xy-{nepaGWNOq%uc?c=Cvz9(Li54-ZySW_%Q2CQS~l@=!vc;m4nKRGkk9Fm3Q>V zFNwzh>?oEluU4^iAI?nDOuFaq&2S9l&5!6^8y8_ZiNG_51wc^h*Lev|UG9{5drT8k zOqX=_&#LxmTOnpBwoiLWwUf;LL!k~G&e)pjcs%No0Y?1M*}?FC;d<|ppHzE2>U8Ms zTz=fmHPm`yDXo=%r{)Ae>~HJrUQ^ia>1wL#okI8=Sw^RC?MR@AH`lqF;N>^-%LhJjcKAJ#{ji4_#Q$yC#tVpa>3K5Ml!tUq>WGhBx-%~`ce3p7%aa2fS&(@GHJd$6 zVx9ERBfVLW#uDzN^l}_`A|G|ygmuO16{B*u%7Wss5;=Zi8P)GBi8D65NpRBkGI#oR zv;YI;8zYI=>uH-R%mK{A=-_BxfWDPe2-0uQW_}-CTQ>w!TR=ZDv4%~Rbbdx=6^i?4 zCR}eS$HZgi__j%dI}syGJ=L{Y49}k%bOMAT#N5Z6!Eo4qiuQ;c2K4h= zx&7^77f|;hs9zZ$tq-Vq6Q z8rJ6i5t3hwF?CF0DH8qtYEH7~HYjzk>y~{R9L6xzY1swWdC64wrzA%jd z>XSP5?8t!fBWa^Gr)FNgdNb%A&*xP&4bSjmB}(_xg!`I;9!B%2#9PEG9XDn1!+ZZZ zD<8VI_iHKZQYmWlk{9=C&z#8xx)1npGp=e;eN&_ zos!)32X9MGL@^D#4=2s9f(V{m+#jG|Z4Cvry>v|+V? z^qb`e%=j3l=$WKg(ng<8g?SntNR-~2LO$S4P~jKZSqhE7g2PCiILOJ=gl#Q?-bd8w zr(meTgS^|KP@IZY6scKF9%Q0$VE`TE0(T9qWqLH+*ueKxKLxH&SL~QL9G{*FJLat5 z`{p|`f8_6n-YRHlyhcM_;kTpeoyvD`8ifG_bcl3sQUPL>!Dxn8oFXeF3NtyG+A5G8 zLl2C$rkU5`ZCajDkzBeov$bw_ShTq)kN*#^I6OI-wk5!AvQ<9d*=hDpTygl=(%nkp zOu+E{z=LC`bfmqM#}MF^wAV+;2yHugYelhaO+0G7ZO$Wf4L~e{U(p|ZnUeKMF@lz7 z27ssS3dEWQh%hmmuI<8Wv4|bs8S1G$b44}7z`tv<01j?NU}X+Cy4t=K_ICk<;~{)8 z9^{zoO!drnx}^9erAw$WIgO`6EGS3>5MFG^8>?mXlGa7Z<*)R~eb_GS_c>6$7YDah zjImZeKuDe2mg)_GBSwmEY)Jl$%G)t@+AnBQop0Oh3dT16ou*_w`FCNgwzl`zQ$OAj z<Wp@DaL5f7WV|v`X2y?Uy<(yf? znU)Cp#odt8WB~l<9>(`J$YlOfPeola3zbt6&e5Wc)#E9}mct^jR>Fu#h7ql&Qj2*s zD#Fc;i)?;NW1>|~e(y)d+Z7t_nf2`gn1IDQuX45RQ;c$`AZSGCO4Y@Rp@D=&Tdt>Y zW$4dvQj;@47186!a4%vhy!$S5+(l{YxVM>zLX3)f$Ic%}Cu<(zRwhT%qZQI|2XKHA z9gheDn}++J(rZMkTb#PQG<$jA#zP$Kz-b_|wJ5ukFA|p=pUHgrOfX zD~3#j9cCh)i5+`}8FBIVPV@ZCw6)vikzdtR6Xo$Slc%{GH{2G1O|vo?3LHbb!gemDi{ zsLDtYrDsNp){5j$7e3g{xg4d#N#q6p8b`)d{>cnb_Y0wA%9QUr)5^frC;vNU0Bh?= z&^v3f+2NfCBOCAZ)ILi}wZr*saTXEn{wy^t;!nvciW_Gh?z4V!oh=K*W*49T=@UEV zffdl=*S9~Q*XDgc_0v*;g7wJ!lQRNAO;mC^LU()8B8Q)nkoVv;$^*VhN%Jckl2d3W z3&-|}w}qOGho64033SNfkg$ zg#wJ4mJYf|{q(%=uxrjy#Rf83<=bHV%uBj&0_|p8=Q}CxRBIH-QlNwMLB(S@co6%o zXwpM!|0L6VVvFwFmKFt7qs(>lCsMd4Ney%*`ej!80YjlTR@1cov9yJR)=hDu+X`ev zvJ(I@R1x&l_X zxjfH~MFN(vCMFHTD&W9A7#!C6`~85=Elu+%J^0soc0>R}US~fd#I1eW|XkrSDI zng|9=lR7ms%&=A_fTkB+d9i^-Ie{X4Oq~o9aC0xOq|F#0PYI^yw`!KNx{->O>>(J` zyn`s_7z6^IL4owL#E^ma_I4j{dh1&yhJ9Rdi%@;$skg_9ZQ1@CmLv!|=&&s9M2UO% zz@y`6>K#ciy)cLcs<1Qw#H~(gxN!Z6lWsJH^dO8OSyFQxrs8AnY~`0y?YhSg7kl?l zCvAkS1<=rf;QKzH&X&m^9ldf?swM48=Ub|w*^=qB>digxW6@==QT9Io2M=X5DR-nm zf-OIvlFDF_MbZ81I`!v9mR0~+0Ou?b@aQHqb`ypy_y0bkbWQa7fJ_hIJQI?eIeKnE zt`v`}=43s-tvvX!Z!}@@<9aUAo?CT>VIFVx{zA}&G76hZ`+Mw^@8{uj)^I_F`^@9b zQtKPbI;vpo)9EvOzy=&SX@CCeLi>jp2MS)7b-yf2ME6$nMr9G=1?l|qfoBx);TVIC zeGjVlM8#4fDV-rrTcv}T;_1<1Q}*t|fY+kuXR+2o!g7j5{QdH6Y}W$y)jb;v+$+4$ zfEYiZTrc{Pv7&nOx%Q2&dt6V6fz$hGo$^ylzLPEF19PS0^^GDt*)~!Jp#2NOuVF1J zea@)7wm0bLD;Gi1qS$b~eAcZol%+kc`sF#pj25z;;Ynw-8ojYYusjqusqjG{yAL0^ zja|II0d?=4zvEmOz{^!;wX0md?xv3=ZzuFlsD`GshMjp+Ncj9)^}{{Q2VGW=Zd1$yqmt4cN-E4rRl6%zVgR@oZ=wRm&newxt+*D^+~&Q4QVG6({7d z0~oibK)n!#RG@wP6hre`!LB;c_G?+`6s)p$O=rK1OBCvn(FXlzU_XjT`j}UMo-stq z3#6;-QX#|cQVYvl4N;{S&=ofRDjvE@gGV5ExQ<=e{8KZoKHHCdo`)>uw$NaOsju!_ z|I@X0!Ekv<(QDPS;TN{BSYU=>3r|}H3#lJ;GlLQ0P5@*`k&-+oP@5Q1({MmZ=Fgi+ zr`t6erj|haxXZDw2b*3r4cM9@v}S99w&=#s9yqn5`twinoz63QI?31Z0w@d%>eKq) zBW=_{64keC2P+t=2=IJAUhw%i5kEZdm=QUIA!}0z9b(4ooP@qvHFM<`^Ew1r*YE#+romYudNFzR3T_?#$QiG_&ZGLb3@2362f2?)MNo!sHlm zDqgpdBJ`$1K0{kgZ!@Cnm378&xJtru9l@^3Bf2tsrC?zDCgu9y>7?yf^i=v5CxIX(#`2My?W)9I z%Wd)|e|&Gv7u_zgzV-rtgZsX>j8FeW+SXOZ?DWQ>FZ)z>sdFh{GW1P^XwkedkWZs#-8JT zw5$Z=rp?e5NUWI}D&PHHgjKxiVaR~EL%;`#!B@t1u?Q+yqV%p&Hd%)PHGKIt%ZdqD z79mZbY`U>C-r&DS)Bv|w{CmgzrLKQ(QwFC58d|Ce)3hbp&6+MLCR>hQvr#SmDe3E6 zxMZZBJ#AaOG;erw?khf`>v}^+f;z+M&W+~ivlNWlvyNvTR-(<0k3IPDfvoxA2Ucu^ zT4!KH9Q;ZhDH}5mvyE45~`r<1y^S33XiQ`^BU;pfTc}&r)l*Pw4l#45BMd3J?=z|Ie%cyCE1{Vy@ zDcmwh^tw3N4>f8uN=@peV7^+{dO*L;{XN*(ke2h-`t2+Iu}K@)F~{lK&b9tKeio)X z!#z#->pQ&lTtUxCJO#{16X+kN2?FrVjyYFm>|kz%#3aS)Uz*D<}c&S zMig($eNgePM3F-o|U+#SDqk&)dPStbU1Tu!t!wFub& zU{Hn{4&MP_PBlnzL3j7xCh*@BRPQ%#BY&7I9!1FMgbWVTcMCp9OZ78C{v21mNBp*z z$b307{;AFG)`z{aw972iFYjPSvkLf-PX_QMs-|XTe<$#|;55R+f@sCEQ`}eP*oo)j z$xp5tlp~SzfP@0G1>}D=l{*@kf>}NUOJ3NMv>zi3MGxeZLOD+(MdA#nsQ0c!UV1=k z;A<4{3Z2GV#Ahu(VKUn09m!ewOfvr$fUp?b+_#mb5{$ql!hWvqS`r!S7S_~K4u2(Sf?7bmhz|93wtv>?RkC5JR8i-faMT~gq%TqRr+&R&a(G&;oG(p+DmR5dZ zJec%bs6Ff;Bts)mGL@D#r6tQVI)-&`<;V|!!9n>{-D{&~6?g!HAqE)$mJT!8?L(qh zpQP_@!k%z!P0@v-HKO)Nov)Z8(u4Ch#@tB{9z!EUpkqB_fW4)zo02)km{9oi@|(;b z{~#(l=oFOej^RwD_Ycw})xadbnP0O#K_v(}KlV%5#u4ejSd$(EP-x(bqc6Q%NMF<@ zebMTc?P)5(FdQ{8vAsDZAAV}dX>b5mkJ1DyRw3F-f`kTE<4<3Ug*{~qZ-zVZQaa2E_Y^8Ch z#ac8G|4U3U3Y371ZNqvXcnluJuf7A+=X{o0hY&jI%3K%}Ip$^o7tqn2hIF9c6Ez@l7UJEJ~s zUOU?7AV6nhE%P;u^xhsM-Mfj|HUu-OXEb_+t?y_~*@WwhW)5URhZ>Mbr3t8_! z=i7HH!n2qY%NUUK4FYI&oqstxSZ-j)qwY+IksQq7$6gpUS1a0;U&BB{#8+)UzvOM@ zO~0cJ561(NIddS@~Z5No5{DT%ipuO3nbkZJ~ARPV>Y_BU;nO?CF$ zJ~O2x6nGBDuqq)w{o}@Z`yA-w9~;H5$tY>HI?U{{3F3dv^y3HI%5j7be8n*5)&1x6 z^Y|m=z%BZno$ZC#Qx;UeM8Sc znrXs~BD2v)W4upzjkgU~dwk|da|bup0fr+ZFH#AM9o75W)5>h&=}FxlWj- zljhQ`!J<%}_hW|Rc+o7SC!}qOBblwY`A26okpk*}qekAr~7INP)f zIu>DUz>M?2`35{!$wlwjsRC|ag0j3eDFOnamk8MMkg&9q;D3RrwUa~*J3@CL4XVhp z)?L7dJ0E%B_PR+y{mNQiEY@dMc)iE|kmfa@H(E~duHJHh`mL-7no_4qKxz`-Z;@Wy;W8|Q`Hn#u}c z@vc}-b%=c)D_yJflJvGk81y%4=<)|rM80R|L!I7_0y}6O*3b*#q<#D+fj8-&)RWb+X2wo_G# zy5On9HjL4S9a;y9vB2mG+NVAK+E_fQf|tdyY*esi(YGNcNy>>LEFTI8#()jhmV+b# z$-zJZPQGq+1SZJQahG;xeBjVYp0gJjsygD8)(?JMKQIa;^DH76OSu{ndR6gK3C zg*-5pTm<-e=(lk{u*?AhF=rA#XCVL4dVqf|S0vrxa}SWzhc?^k5t<*WK8C9rC+!Yx z<_O7)Zh;#-z-AuN#N8?(o&Rh9R1lW?_fL}a8mLD&2CPY>mPU)7qovNbXrm4xiQ^-Zj3ibR`*f7a)RlTH zj1NkEd6KmBLFXCLn^lcF>)T1ct}CQ!dU{2?v-R(X0%`X+EAXI1X5`@cR}O;HI{GnA zG0BI!a4^tq4IC@%@qYE-4Rsh1Oy-O?Ew#>>hFt9V?2)DietXI1O&jkmhaK%uPMk+W zSphG6krcy_J~8}Auj|i@_^hQ#p6!8a#R|#` zJW)FOyeQ;;`DjD(091dP31B$eWf?(9;NR1{OXHMi9y<@jD{jEk-E@ z6{lT?-oSoqxFT42sNF#IXEXHlI@ibfvLfRG4A|SGJGK@d+%(@8Et-~@dT`6|Womc? zv9{^-TZ>0^^9PlAV|2RRHY2(38(P%CS}H?vN25scF2@n{uyDFD{@Rq!ea=j1F`l+1 z<3QemP?oPHB^Sgx&!LFVw-TM{JP0&avTtdh!$&GZAi19>n?xVOC<*jCP}>JBzJeeW zJi?an{5KsrW(Tkp;sl5S)iT10&#{1M5$A%5YneGqP zkN&Fwl6(;eiH_V!1uS?6=1&JWSMa-0AFj2I-*05-2l3zYpVIYX+4!IvtM^{B9}wJ< z#KwU^=M%CnqHN`|{5bmdR|giH!!W-RARa#ujTlU5U2Ucv{rBZ&WB`}MKDfpu)5T_U zpYW4-Gjh?>bmC`V=)k_>>^4X=Fvx)u>822W=hFyadxUn>nLdE4*ZXUx254%Za=w17 zAb-HDaVR!Yf=F&XEX(TNsJcE}I{1uDHeVndYjqdBlACGgxOX-SA9*uC(+iGq>HJRG zZ4fNQ;M^#Fs7pwPbAdva?}%fX2r!)2^|im5ynoEh{R|qDoGpC*{2(mOWxuPh{?C@aLb?8#`S5Rw7f5@O+4sBT zZ~|ZsL;M&$Se$u?^km>v8IbK}P;Y6*(1PYkYJpa|hdSnB{^vdPY<~;WOO>}J7ar8= zz|*=7kp{tU{e?w)H$m)zXS=>hl=?c-^@11}H}jJ;5h*0 zw_jAXJyamBUpgOI^yHOmoQ<6zonX*6L3@pDRlDT>+%N`DS#B)s*?Z5KZD1D${9X%{ z;uU7Y&se25?-gyG$->*M%S({f-zg1>u<#I%du$o#Z;S@}8y3Haz)i@n{gG7I^dyo| z{J?g=y0!6gvW#*<2m!4NiQNC;BI4wU;sz#zOb z3Qzjk(pc>0t{m}7s(}T&?~5HsU!4k~E$1$?f=HDRw{8y$q&w5P13)#mbJXHYL#7;u9w`cRkxt!QkT=HfsXrTjR99d| zh3Od#uj=9~b%gyxYbT$T;YSm^ z7qB_Y(Pb?||0Oq<)G*jFMbIN4dBQYhX9GseYASr?!G+^>sG54N)0XT|2n82=Dy5o4k zc2u?5U?QjOXrB88rd7hLNb%Kl$V;Ze?l>~tgYa@Hx^SOhP7?)EH!uL`-k{$vF((Mw z0={glwf1Nu^Izksy&xnjV1&$wpG-YeOu$lvR6*T28|mxyz5m0Y%{m$7rnvcDUju%I z_sO`YsfP$8QW%bv&JQU*)Fw1wXbz^obB91@;&PFU$+GAB#|tC_dbrasaCCYEpDMnK zl-r)KkEU5}vfZ%qj;l2|3fork2eqt>ep;#exVan(Em&YO1h_-9|5Xj-OYsV9%0rbN+KLT`7nCWj8y=7@GW zQwFbVg;KIv@k*{HuXFgOou}oxW2^tZcvE1C`~DsC^(&6#IG35xcpg#(P*VwPx(qdj?BN{{Q;dLHs8fWDpU^ zrA~Z#`MD74UgWncdPJ8hma3gxO}k;jyvOBzbWCFZGx{HU2Im5Yf1KoGv)FcQ4iehQ zaE5CaD##A4nGU_zVx481ri(Y3v>Ru>9LqoF#XbY!HdI+&Cdi1X{9C&iYb1sERtm35 zz@qtzzzeS4kkJ9j9{2s9w{k?F zbYZXK!q9E>Va7>v@q6?*8eC?@9KUwX_w4OeeLzj5@^j}Pb0XRGr*(^oek^Mx74+SG z4|%N?0_;rcMuY4Nu%jWGqgCN2?8s(%eG2yG;@fMHh_Hv-qc3~umet3i7xya39%D60 zJfA?VNkl#|$H*}^6+6Dz-hLzHGnUH!6cFm_k3?33n}2|}lR_liQyf@|esH5CY94F3 zYzr&qEz%6_4XiI$^4^tmEnHr>RW)6k0U3?kh;J**{JuzDmnZ^_RpRFXM^(6r_zriN zKj`Tq2}zI&6Yj`xsrboj9NIVLLsgmA?~7=2t8i1}Bm)O*{FnM!g$6gYEE?&fAKW3` z*n6OJ$ACcIEjYcVef@?;fyRm%!diS)B!>4#uQcr9e5SN}^rmV_18+o4=o`h6i!3yx zEpXfzjv}}Fut~A?z0ibLO)oH%^LUDlVfpcVf3V$-TOJ5bAO@7F+p zXg-&bl+pef<$JDup`w8Teu=;jR5S!-vE_`W;QoVnkR%t~j>spCXP)eZO3l5ft4dQ& zZ#}6x;FWy|`gwQck>AW4#?r{7Cbw0m=UoS(^T9?Pt`+I;*euFEG-~>iFvM!ArMw&4 zIC{p^d;Q|5W}oBto@1GMIWppnb~nEM|9(aK;aijm>tb7`NJi@IYBioT5jseZI_Tz` zi%y{6%Q`lEMuawwr|WBg;1r|+81f@^^t0+hcM{5<9UF4EE z_jJ&gb64`_qA(!7yx95PpV>D>(8~n5$NL-Nb$z=z)w=WkXF2abZ%6WZb=_2Be>SqL zbEN0G-`$F!dfP!}@9zGY=2sCr|L_|ZTYZ*4j$+jJP6UDMCZT`6mg`@zcBo$@6_cUI zO^=>=EoK=jmJ?C=DnxfQ*)c~6GP6t&eqL;u=&bfdJ>DT~>5M@FYUu*Hsnr}*gx8~R zvDMDa+&L2?w4Jg4pM4biuXoD1S0+doEKS?(G4c@?;VgHK-;mDt$d(FHkX(nRoQl!A zTB{_^XHaT65M#pfn;V5r1;w_*9ZshJ>k>>9Vn)0Y$=I~73!;q$8#G|^lv=aOS>t=d zafqx++n1lDD_}dwGO+bi|Ao*8CQ7i|4{7}Nur+BjaGx0YLV~4R0oa8iwxsdYT||1Zoue1!)WG0w&bx~At?+TPdj;L|2E^$_WTD%ifqd-!m1 z*rgx;KldoMW<^QXZLpdq3s6=EQAiAim$J#nRV-fp++yQ)0Jn4iH8l3IiH`sDlM1OP z6)`5w*6Vl9%FB_y9wCP?c@j${%J%>4OArrZ`H9dR{a=mV6z5DtSRkR57}+5-9qw)x zJ@3!q2BugH9hK`x6Z#NuL(?%6Iu5V*BTPnR@SB^hDSS}POee#?z|;N{)%%6(MzLQ% znFw7J2!CdZ_^F-TIsN+oQ1#vMRKH>WpK~00MnA!SVH#_vuG8QktFHpRne{{kyjT<6_bNjP&RwP!JMD*pg(0B}4=M7^aZEkJBU4$;{*2SpUo_ERe3lA#6 zRakREf=2f9(sv8s%HJ1kET!uzZJl>wYJe|NbzQg?#f6@YrI9cGzdj4tz`J+5ltdaG zv{&AyV_8}jS2mGTMtk)~P(vONQOqsP+i)rNoK^|vrH`3`l2X7)1qsbt2}Y17|5aN3 z?}XOS07B-zP5QKh^)|cvVCeD$5y-&p;u#$t!w1Jz1#UE)7JzgBjz9-^;N?E|YI4l_ z4>l(s5+zQR5C&Wk2Ms_~Pm8!Oi8}!Mx!Xffh}L?6$SA{G2%>+N+R%EPkc@%Wi;Xc1C&%X_<<6f3H~?KKF_9Ldu_%P@@v>qH z&;JGu37`I#Ih6pJ(;?@NDjjZxf!t0f&NfDGaeiqKQ(_3+VG_{*C&WrVr1{_pdSpOz z^HQ!`Ju3w=#4x>v@IPMY-&^KK>i>vMIMgq)%{Ksb@`-owH31eZ)-!bC@=q1$Iy;Pe z6$~GEWih|> zK}`b$`Q{-r)1wpD8dZTw(En@_d=a zyvb?w;k0Or{iz1cWkNZn-`Xt{Cmz${K$S^tAPQSEdGkFM6Y{6Z|3uv&JIDZAG$Q9+ zA=(*~#gUq+?ENk=#sF0{k*B|$ChK?V49rsI&f;x;Neu42bG!nATKW?=&DvZ0fz*A6 zk#b1NJGwwjsL+(QkNj`h4a_PK#7($yNf$3&C{>CXG&N+n6guiE_fsvktX#&~q^&$i zcm|7x-co4p68FA~XMm|Aj_f={|D>Z^*m5?|jG6Cf{_lliO@^v)q2<0`^r^5aABiK? zy&W|vGED$=9Um7v^KH?w**uY`j$+?nSPWC1(}F)KO!6Yb5b%_9(hv{M#6B&l{@*n! zCJ3`B-RMcjXrlNoSyMDxb9`d1%REfD{Xkm*S8`5$q4v4f%u6cJ>4yk8J*)y&1QJsb zLh|EZ)`oBO7K)1}^E~;l6oc85z#`b;ASgx1O3qLZ99JLNecSf@A(ZooH!Ic^If-Y& z&zO<|J_2}`>s8o!`>kL`??4}y&<{ab&r!7J{RZaUznd?U!4vAWgj3@n&XqpczhJ`h zGG4)hZ;2Smp$-xI4lE`a16N*ast#pZWvn9v)!S#`UGpNqun!oZ;cQK>n41!4{q6Pw z8>)cs#?{p2TwQ9myS)7iGZ{Www=jgSzh`?wdoCizEyk9Lm-Q*P2ScOFotaNzU`rWm zlXZmBFhIselI-i^>R>UGY30-7M(Nj%1V`52mcc6^XR_x_m*azeYtbAo3IpcOzos&I zAYLiks-=iv+PVw~U;;O9t{4ULW{{bwaoiKCa`o7zRR$Gb;cbhNeNeDRDKU3HZe-R1 zG!u$^K7jH2FHek#j01tvlHL_vTlEz2&H5nPnZZuop*zLoW__Q>0-~I(mgI%xe`(M< zOAjQ1>-=QBA(7GhWOFO)2Q{n|5-_1jj@Z025TXfPsK+M>-AN>ZjzLh+jZ*oPS`*2?TjicKI@Eb}6jPc~E z3j|jMIERZp?B!uw@9aB=J$6dTH(kMO}{Pp(8}Uz`Gd)Yh1tahQ8O;+PA)ZP;ocTQ0K7BO9l5D{ zXqR`I8Z*Dq*~olm%d({?m@@yM?XEONRcUyC@0K4rP`+fzXU+O$m< zv-s;}=VFW>>4^U;dHSTD{f?C8wtu=vcE*_pX`-6H@r%D>grjahQ)Vvx968u_@zrtd zI1eqCaqSToF4GUdMW4Ox`OI&w@5O$!FkI7F*n5#IwZ3?ASdmM$7FY+~`AfP7(0{BVY%< z3`0dmn*BbZDKTSw4$i5sh`rX~hIMf~$2GT|)C?E!Cqg*wV!6SE4j=z+#ZfkodY^5> z(I91?AgL{Kqr(5b3}t(+y=N|wL+)4RBMB`6hYbRK+8@QZ{J}R*;;=U%9}=-ZG9JyV zTXZ@0?YV}>9GHzymyYCB&3OE7n1oCS&uF&?mownwIu``dhF_V!5k)n3GTXkn%zC7I zWByEBik!w54zgdB6M;)AU7j}FtKF%_+%Uz9@gIZ`G1k%XG3omZ8u5=R0i%qGe)0t~X?fr?)YfsKt7_-Fa zc@#xVk=OyGD!L-x?PVizQiuy5Z~dE@5t3~Ose02lrLbm{lF)x{)D673)34#=maw>$ zr%(6?M?c8Dy$p5VSGpJfkpXfO*tViQ+StHm0MF$iTzDlpL|XHk>>V`3iG59SLOF*N zz&H%5$;LCVaoxThiwQ|ommR_$DMqdvUgT?OFOY`?)m~&r?gtSN1e@2hbPz72HjUUK zrQUF?-&<#Pz0%RPLfc@PmCC(R8Re(X(5mzzi<*bP)CXtoSIS=q!<-mmZ+?`fC*>_e z|MQRHH|J07fJkUhT64P`33SxUyfd)4Y1XkRtr3qPA=@JBKjFA%I$7cQ8HtqdO~Kl9 zPX;g*WNG#86LdWj((HK#g#|W;o!KVw)FqlX*2meA73blqjM3N86pzU+HY0VU@`Urd z*iP(M7^1Py2hDu+jPV{Gn?F{nYe_vDSbI@Lyxe|uQuO(+g+S!7G-m3j6rtlK$=T=L z+Y=Q9f-4VQ@=vnUb)W}zzrKjye;WtI`q}8sem)w|o6UTArhG~3sR6xP>7TgxM1cv! zUhvCm)m`o{O&^+6cLOTHaJtJoaIH_3lo zg;8b%dR=UbQMcda{#AvQ8x@P#P++oOUh4YBNL6;_waw0czKp!X5VbX5AU5=toyh?{=CjV-dHUgCsu$(pOu~x1(icsZ|L| zDl1ZgJS=Ta8CJ$H6(xoCyGGcKJJ#<=jMxJ+d026=C%C`r!@XojagoRkUu zMC{9Jer4TJRqY3Hk7FV-5)~e~?vBrRH^3pt{h%s_RrV^#e>?>o#Q_$C<*mEVWWJds zL(H)2Hdg(g=6kldQ}~WFXKA)!f|ep7V*RX|B)K>~DW1cg&_N#K0L8^8ZmdoCcq0wP%iIJ%7K>32jlQB;^omU?1r8n zFO59LiOwJSQFPgoH8>QZccbv|p@Te@d9CM?Cqk&tZ+uep&SFUdTgLuR(8;OiPdsXHx5b!0)@V*{fJZTw-^+4Xofoh*$a*NfC4;5ti?TI`b z$IU#8l^$V7z}Kqt=_|7H|))9TTZ3+4}uh{coX~IclO6Nd!33o zf_xU6bPnkZ)z2D|c247$+A!ghr43#K)siv|0hLL@wQ8TSbUo-fRkK)W0sJtQfGRfW zHr1x7x$X);F3xVBW1fQ^{Vyg6Z#^f>iE%}}`YovHckk|fR|?&)zMu1Cu#1lsI?uBs zmnBJg{4&DPBrO_oDEAxGt8EQL{LuAyU#b-1J6;-I(~U=39g5#2aJT zgu-8)4NXy|D|SB`S7$^V+ho5cnn&xB28h+2$=vWDVMpJ2b$Dky!$9!p-EO=J&)zcY z2(@jgS+YgYsYKP7vohuE$Gz^p@6o${U_dsM+Lf2Wyfzf9)4MAB;&fYPVb=m=k_k}z zI%MVqc_FA+f=;|U8Z;7n5>cvr6OJ{cfp; zD%)C0=k%R&O%+cR)$pFbv6UXKb-)W4ShB?D2aB7n1fAR@}a( zXRjpPvD7-VpxxzbdQt)lrw`q<8AgZ`)56Q3YsUH@orr-cZ+TLGPt%H?rMH8u+9q|;DKDRq z#&43sN^!OrS*hD~in(W}o0%WV*zi6I(&F?RrMoP9*KR=mC_6Q~?MPPKf=-F*T<+EC z)YD#1Nh=1q+R*+tnmrMd&(O!ycWsE@!G2sCA?(0px`4O%lmX3kL@p?;2`cPL@90&p z4!%vh0CAzt7iW{y*_-!jthWnVrFYEU)2moMK?twatTnmWBi6{M?{#XF-k8nTo_)+` zk!ob~I9t|kkGIo5enQae@w+ugoAs8XZuVexn-fks*{`J^J>YW0-kTW3?dt+g=B+O^xY^ak?3estN^|Jvwo0C7P zPP}}b^QK^%MV91sm-W&+SNVn>eB;bv-+HUc^;A@vr)}p*7o1*^3rW6?JjdR{DQf{F zZ?)+cS#?*Jd(#Pb$|e)w?o8{ozdqr+>aj6L=6ApvYQjz5G8nRXzfllRMR5w0)h54#OOk{QcrLA z1pF4W?WiLE_nH8&C?S!^D~5RPhKD0tXJQgJ`J7-fx?KGQ_~=aRk-=ap3CUOjJo`&< zH+`n+U73T@mt&3*2n!OpF<~LL1PM^2iE0cAqXuaZioF^-%@< zUEg$`!JgRfH_5SZLM?c+5;4!d6BVZD3=aEqRqGen`O{}YtMwNR(}N?#9_uk2uqh>{ zWo=F_FCgFf?fv{lgclu$o-fqjf0+(DZC zGyYtzF<~)Q-e%xx3`ic6FhfR{lB}^U{3%nINxup0yVx4TDtOBLd#kAfC`9CVKG{%x z9GwkrhR7RYQKYi>3#-_>cW;9iD8MM)(uWynQ9mxM<0pejT8!0fHk-U`7d{4?iGP9y2~lMk*jJL0aJn7n z0Wv}jy*zbFAXo||h{)8GKj*$Y_FW`7*~#OmKXCIjcoS0yaj2stjrv+s{~AfRS28}w zaO;7_To$G=0cSp+nE9r<9#1^_B|yp~g#Gl@Y_f^*%+UVz!hBqE>47v3>tAhtfm=;0 z8$1Q18pfAkSE}al1)_q&wMJQr$So%J5DgMS7vRWZ(nshi?v=hQ{GM9a$KnLDZ?L_E ziwfB7s@Mr1+@PsnW{Ezk?ty7_8#~Eb*j4mysee}OhXWV*cP}Mx_+NPkv51F9?rE#{ zq=b*DEs8v<%1ygO7)ZkYg&|XtwS2uqnMbSqnHmSS#-gC7)anhJcj$>T(mo1%hJ+yW zFlisD#-~1-%TR!r7@Z?0Csd3@HxPw^$>l{ufurglZdc93yyACx#xa{@aisHB3aWA@ zj$azFc;wFEU}a_EV>e<$l0N<;Z*8%=H>q6;SYV21ea&o-Z8A0k6E}nqzA##RFT!_r z&k=rQfpgK&jr%oD3wetKBN6(E{h;gwe^1v=o@r-Bk*!H78W_n8zDuUa(WSR!INRaM zbj*!mIiAjDJj9e`*n(Xx6opF-?ZVcd7}=e?7Xre^qMMb4+34HX1Xp@{p5VrQ^gT;= z?4me6Ud&UTlY(bFTHEVXqr=(CjS|x71WHn%J$e(_*Dfz+Y>_TVpUr*p^?^?%yxk=B z+uD|MU`==x%BD=;p83lFvYE+wZ*|!Ra+oq?(y2E}La6x4WMZhF||+ z9XF8RkJ;U!Q0sYSPf}a^V7p0O)P?Qh&(*8F&yCP_iNEO}(RU)d}I7~PoiaKw~ z1XZHFILN(Bb?l)k<+%7C>Cj6<4X)N;Ci$T}JVoU@S2{G9JZGak;6(S$B{#p|7x=hX zzTpFar@#j+Wm`Gle&;755`G^cZe>BnW%?~#HO4p|Hgwsn@nD!}q+uz<*Gp+Qwclvd z5R1F9sX6IppWKk(O5>ETr1iRdLE{dKAx3*G68*W+bFe)hQ1n9R?^E&x{iQ!8CNLNw z@ZD;zE7a|e&*1mE%g1hZzCZ6x4S?SaL;oDE`4m6cS1x(+EP!D4+N#z`{5&0}NfXOu zZpJKWPR*=Frl2Zc`el>-U1a$0-hv$mP!5zO7tq#II%u<(C!~bx*2+cOwmH+|(0A)t z=V29|b#yQ9NBZX`I)=e3$|jg(^d+eQQVY2VWGpGXYXu!qRIk;V!g@dW$swg+eFoBX zK1B&aPp6=@TQew5BMcI?iSjmGO&BF8)lDjW6SbOW)Q2WjnMNnMZqHe?G= z`0jmtS~XSF_jUFpPR}*osn&=acG8b-czxf!@tWbq;0N{dw(}uP=JdrpNipfzr8ufK z)i}akzSCcam4W<|D8!w^Jyw1+C*X zlX~VAfxlsZO5X92Zs0L*5&HHxr(Q(+=I~{6#l;f}-(PMzY_7uaaJnil*6td7+jiUQ z;@JK4K&|fulH_n+GVCJqqy3VVjU1ZnUXF#r%{{8i26_Ud{+?TlfkG?joleJNf5wxr zfRzqw;3uCm#dv4@3t`17q0Qp1Yn@@LQJ4Ymt*wcUUmVTWdQts<3M;*Amd#utV-}xS zLXNU#0>@?(HKk?9-@g6gn}i7^u#SMSCabfYjUQbsZ+!1ryPE-qEJ8PtS?R@&*Kt3={1(`3=jDCB;SZ2xRUkYeu&x( z+Ph+b5u8#Hs!$~w*80LLq1ju>wsU^KuEL)28YyZepW&&-XEo7nn(_8~Xp=4IIUTPv zhW$I&fDkVB1F$TJG)YDR9oi#iCb>a2m5n&jKw@X(vq?+n(j{}+5A?@pxAJ)U6lierOvAGo1bTwC( za!zvmJ?Ueg4@(QCP{(PjM2;k2f8~5c2%olvN4pMF@f1uR2bkG*GGw!T`4IaI7bRIu zrq6Kf)8tC992~Rn_89t5ja3X|JE2-$Qbyw6PO82x9v?H)RL~|ZQ)kil^no&yBjOg7 zR%z@7YXQlYbv5;J-_jLdI&+vy-GMO0b?aCD6%O2ICLEk2;cmyI4CijgKcB|;&NiRP z?~JZDtI1!<`PF_?5}pBV$*SW#>4SnQ_REA{qYlrvQbX;5c$N=iu*o;{?0)l)APawX z(=>~dKIL#IMuQSH&|%TC_Te|on9%_12h%(cK3gU#0(NA@C1K99QG%1OM|t)4aUr%I z{oojZRHVDZZp9r7+HA!)sB4A=oVHb3NrI;1V9JMN1 zWNMm(&{u=7ij%~j9t#Q{JMXuJD&fEC$7i0^8mM19T5cNN8zoHqU4VGNX8JNzsmqAX z^vs0uNLxJq>qkzFD0ha?VsVoyJcovH%`E@h&cZx9r%%i8NYSOUP4*h&4PYcXse+YX zQB|R3NZHR`QQS1HpP|W(O+2fuxnF?os_12<_p&O0E&t6WyD(>8b0=ebx)K~z{6o`A zsMOY)vXvj7OoGg7r2Sx4yvFP~F}H)$YVJU4-)PIt`)l9eu%rBH8*({)teRrmTbtTs z<=UE`wQEXo52SD`3yKv*cCoobT$*)Dmnssm79SMyl59Nur*&sVL9@J$raxdUgeIJ7 zrk>h!P@VM%Zm* znLVq^G8t%Q$H?G-gQ?e5;pC1M7J+6rCp~?wPZeKo?TpJ#J(=zn8MiR&2|C#!?Or~= z=nnsAeHVQ#OlN}DS$1Bg()-SpJ1^RB;;-*RN5AXQrrd%_-F2O1q@0R?JO-c!K#jNU zS^ejQ;l4iQM)ue|I5Jwp!RW2?s~o9hL=sI& zOf@Ju$dt^ZuY-f}SSDWjP4?ruPKt`T=QnJrZE4MEGwPX1U1-oNk28;YJwiar>5`7HmVrV92lBm=!K zgqVZ>NFP%`8ts{n%fvWjZatQj4qS;o>zoSRp#V=!e>`d~)?BkOM^;7k@&}JDLx4H< z##ALs@-*RW>u3LtH)GJ9K$0sLGHxrdV}S)UCzIOnybQf}Kt6ZG+pmF@jm$WQ0iPWg zS{VwXO@12k4kQ8V4j|Pmp(>fd0Qv0$jKxaOBKMk%lL(~y{zK=5he0F}1{z7Ol%q>* zIr*@=aujUg2KI%pI9VodA&!$rRzwEcdX30UA4JTzn;m8u!;0Vfaf&PuWY53Lq8PcS zU1o*mX!7r@msK*6k`$3$2@Ri!=mLbnxMDWbkdRHf9S)$5&}MgN-=ldiZF?xH@axl= zUyEzUAp>jFkqZkiz<@qxan&6Uoubxff|>+FKx-Y8?!q8=3C_?vVn9*($vhOXjMfw_ z|3L3!9Jq02?RxzUkE@?Syif}@EY>=kKbBS7(x^=GY_WirESkH~NeeprGC)vgva>c* zr8iy2yHOgo(%B=Y3p{|$$!HhR$*T-;)u;DUNQsl5^Teq#ge)$7Hf7{iu6mP<@^g~H z*(5F{*cuq95?gq)D<^gzMA4(8uHv5$9?H)D;-jFYDRRNngz*{{p z7G;bqHow~Pq~s^8B-iSJ*_}yG*H#RTKa>Gxyf0UbJDR)IXj;}UcG+ywnO+|&dO`li z+`^_tg$3~k;#xjMHrUz3-tMK_vagDO9%Ve5*(#gfBxv_0?*-Y4i0n(_vyX|rL2}k- zAM=-a!!A^R8D-{3{^ic+Mu@{bf?MDqf}aEdfWGRP{*Gp$8Qx9T1?AG<566 zxo^XvMV2%Lk03*4M)DQBvmjeLhLFHZw&xrRrVMU)kTA9_mqd*v9d;L6iKWX*4g(}3 z>1&|D%seOhy#9@-mN)?jhAQy{PSO4iipDUed@p&4pf?)|=F^B0oUNIMz;a!g4@M(q zJ+D}rCE*&$5DB@#%0~3&*u6iCRd3)uLd-?Iu;SA_>M~GmGah)+fUaM>LsLKt8%ui~4{+`r&iv$Cy@z67HPM(}~L6S#7(b{V9=mFYJ82e$~(= z#W_#IE^c*Rt_7r{n^m{SweXu z1@iY)m$C0_m>J_;@oCb(go}1QIc3J`yK`vbyup&kl)&)}=a8aL&qpFWFC3fgnxyVa zva2C4Z&F?iwx_f`sR$>0^7Afx*N4yO?>zr$0W4p+@}Vt%{-pF2+kJ*S_~qDJp5P6q?8_Y9 zTwW9EbxpoXgpwE#{0^Wg!9)q~W*gR=6qOCI8Wu0+7?qhS5rD<^b|itE_i2WJI(E+E zQ|o*ApP~|xns|>kJSeLcz0&SHH`Z>C*qV+QlOfG525&@MaT7|&lM5PMC|9S1sHCMb zG++O0IXpc2+;o~7Vkc^uHaaqZ9@62K^;awCu zJor*}_}UBikoga#a_EEl9E91j(;h*oDe6_`O?s{=I z3-#g#cI-1=`h0N+o>>IvUa^pkX)!QE8~V7-j>+geJp~AW{8t@q7laz$a4(8Br@rke zV_8{PNT?8cmWMLK#67pWXLrah_G@2P44qFXzCdwD+kLdpgO$g}uG!sl*N-_U+FDZq z)Yq;4alzDmNx4L-%!)642V)Gs*9str(*R5C`{xc|2c?40vvl-*^4QC)5D};L>V8R0 zH#>%H-^`hF|5{7Kdsd8lkP1>BIeK69A9owshL4nuWfA{EA~)rwxAN=ocv#@#bAE`h zT5XWWs1tM?;)~xMotDEcCxR*F2j@`?87>Rxc(0_M&8&zVpO<=Di>~GkzSsr01EyeY z_8fE8UFC~{^Bi1|Y?$)|>v%64)#t^%SXh!TXn`JlekP;^7@e2zVpXiUMwPrztPC#O zVBS1d;s~M_mnWxDffpgR=3ASCZS22eEy4eh8eW4U@?xlBuxTYSv-p}OhmCqQ;sgN<;dyj50zL1-D!Ic>@r5GiS5q`@Qagn2;I%7b z9Q4mF9fMs_gJdH$MC`^PeeGwy|^L8gPU{V z$?ZsBrI0U}i5UvV<@(^4V%VGjeBaJODVh;yzihr2d(I*Sk)Y-|F!2^Q^j$->?gbEo ziM_uwwbC@4!-)*J8>0&b8GzSro?WaGEdB@90%)F;Wxcn$-!yES12Z{e7X{h3g7qhF znUD-f%#(!3bFlXN2(UW6#7kkrrEyC}Bq=i09k2p#*~hzMUh?iej|NO36%+OWAbpKO zkVO&Zwmo@Z`rQZ{A1ZtvCJg2u ze4$)-kgPcL;)sdGIT@*gFFb#O_UHLuz+g0|b+%oZFo@Ov>Q;wJ&MZRDE0oCo9%c&J=&k$;uttF}A@sWX zCr%s|`@ZUT?VBMtSm^}<*n<%imV77#KS}=o2lK>YCYw%L)O&li=bEk;`3ls~A7Z3K z#70oha$|9b;fCE3U(69FxiT$m1z>HXf%76*Lw|n&<;sE5b|6$lmm0pky7yDpRoV}l zvP~?am?W-TUuChD0zq`Qnb&+a7-sT2sCN)~qW}gx_aD}5FB3WX#8#}wy;AM#;qIGF z06?00_}N*^ijVrYacbMsTeS}#*<7~%(KD^J?ZO6<7N4*aYAELez~}z`K&xhZR}cr$Irdy+wI@lP!S@ zzE(`3kb9KNU;I0wB-dXX<<79TpfW1wCip*JWE*0I7x0pME!|9+M^u@{M+{5}sKI@D zk`%it6@N$!zRz8XzP^L!b)BI~Vir>wAPd&u13=+tXJbNXUC(0FmI?2@m;L*?|JPq8 zT?FmcVGv0#no2*Se>7$P=-v;QE8fucVoJl@Z-R*r6ck6p!`#>+w-!t=D78#e$lqDj ztEEmaKxxnA|D!Mi#uE!!QOR4u7k$p$A8gmw`~q(1L3B7Z`;8QoC24XLEl;jG;rc>) zFK**62-pS0Bgo})k_jz~jZ$Wf{pBwP_eI|@2wdi6?*HKUKl6zZ1wh^uB2F38v(x>i z&h%mb-dstXEOxsU&nYM|YPqZ5cpEoeBl_hhwkwTLs}dZaIVYp>+!TWCK%=(w)AG&` zSY$nLH`@OlLsy_r@uD!s;BNZ$)M=&r9>i$!vq|&>_v0hEJ)-k@9qS(zt zlx1Uwtv($w0C^E#f1Pdr{ob3m zz@~Hv7Nf*$O6D9#LpnW&F9XkbS*zEZwa9-6!6-TfX>Do^?LybbS1H~G`fx*W6=7ph zzatC}JQ6FjLUEz$I}E{ByqSaZ$c9WIt0mS;mhu;AU2O@#qt@vqnZUK(MM=!OTk7F8 zaP^)TKm4CVoRgDG0Sm7T778jGoamQfI2B-`+}`i3KX4 zeCXBkMqe7@M4Nk}Acx|r=MG3+9|hD>0EpNC>@rf~ zH#*d6pgI9*fIla}7RJmKUT`f*#J`p1hbK2 z0)GNIU?=&{2v!+Z@f7TKdg;OUATjQ1>-Dy^a0$Vy25eXHZfR3fT=>z4G6Iqk8yVjA z(7VMN8^Xt=l(3>Lyg6KPe4Y>DVBgqeqPoxTU!;iP5_&*3kKg$|#?a-hY+~%0ciSi< zOiT>YjTGW#UjXgF_N4#4e^@tetHPZWAiqlbNM>LH$V`EkNK`Rg*5m$IH_&?7e`o#s zRh`JY{|O}p;XB}uw|EI{@P7PmF;16>5LAPz(i{tT-wLMp*>S(NJ@WGpbOhTU_gaAZ zc-vNgEEnUbrC`acIz!^f5g#AAh^aJ0gc?%B3q&eg#g)Tl{oIY?d2c1w5~w5cff`GX zWH8=M3Vu+#1uCb1!XiGruu38vBQ;yWl+Or3W9r42b!HG#RPM=EP9(gPr2e);=Pb7W zC)iQG68v_vmyz%B-9U7ANVAcW8aFxC$s-l@Z`|&UU=kczhPK;v_<8?**_r~iPT6mn z&~-0;eFAF>0%}eTxa(4!sJXVc^c$Qp;y*)}NtuJKD71d*PJ8Bsm_k>bHPclkd2}}1@Ye< z|C6%^t7zytETu&cM;8o7mGj3d%Zoq?&JMf{)EuIZi=J29i;-o3IIz}nSmXb+n;n3K zzYsT|%X2rYxZ5kz!d5Xu%mhmEAWoAxfrHEA@HjAdD$O~GQb%EY1uwQ?)!zG-c+R_aU^!Or?yGp2lPSnjBy%s z>EQ)CJs&5#1kb+htgs%b?B-~vcR_n4Vz(4FRN(k5WX#fIX`5r-OHE_y$A#~3ZCUOr z51nDI5fA~8!WiR~`jsmhM@#x#%+ZA3obIyA;UoVLGsL(-db#mQwK?kLzM>Xkw)ttl zt9;;39-=Euoi6l2-{PdH@8Hd6&%Sjuk{SR}vn%y`2p~_`XqO#iKCk;s>mdU^Zl4r^xElBZF2+6sQUdoh7 zQ(bmEHX)T}&fj^%{3#;;k9^%8xdZDA+QeVgZN2R;PomuoA9+;Hi~t1|JGZyO=EaQO z&_)n041|)wOGiP5#!XZ!rBiP+g|2En1c=G)OFMYv%0#eQjY9HvVz?f5LATj;Lv=m; zoMrAC{hd*m9-)w^BlPur%Kt7kR*Hrzr{z^Ce<#gzY4P2n6utm%yVMuD#aNeC8iUrY zZ}gLHYl}ud?@R!Mc_+?gflZ3h?-D-Q~b2{b0=mUi7y~?Gx!nX=nD?lcVg^d zX(Grc_KkOzMcdfRf0y3*?D#5#daMB7ltUv5L9Q|fTuy(SYB)T8*dpeu9yqV+%)4|h%YobeAv zJcH2t_oz*jzZFx#;S4sZL?@K$b?X=r`fES+;ViO7hl@jTvFkIq z0@Up--?r$_#+;?P9|2o=fK)w{!Ju8u)0p4wL3FBo=~wSXQoJfqr=l(c-3 z%l3^q^h<-a%<;47_ylsjLq64DWfN=uQEgD+$XV8HJ3CO_v6twt8lRx#0QO~07!`XlI9G|?&Fx3E zqgAhh8qJ>vyr@LCn6VPPZCSpu3h${8rMi7VZ~e-wpgFy?sy+rN6B7XywXzde$7$ye zug09(33K>NDjr}za-=^p-UilcKwMpfZ`p~jty+5F=xgG?QM3>-Yn?gg- zCv@T$dQT+~H{DqiJ5BlMwB_YbmC~6tc9gP62V7`D!A=FKiUr`3@60C?g3b=Id(+BW z*eI89|0Mt>IKjUNa&u8gO#lS3I&6h&6!|+Bn8MF3SW2c|gpSc2CSCe-3p1U>370j?J^Jj*+!$1M;@{QXZmF=umo1JFx=@w^w!fQoYoTN!jxDx6z!tZVw%$} zi?9(=d00}N-AhuCakRvriaw8Ao(-l(`Dy%N1hwD5JMx)v-%_i^;o1LAYg1%R*KZcD zi~_3*Z_TjjoN@4Ukw3_fz2^L351ve{7}W|~j0(A-2F52xTS_DhzFzmMDr(8VMfhOp zgRY05o$kl9DgDJyAdbS3MOC6hb3S<_AnouU-9wj0<{m4()%PpierNHpH%-vLMZQTO z0@}lBNpv_TY@148DtOP;V+x&He!8Jz2{iRzjx`z0`n@qqNionrs2Ql;6ztzm7!S+G z80YfA_7jF1g3cLi*3qtCL+m+0>iS3Lg}j%}74FnGOuBCl{KzHUGD=R~iDeMBdt`NG z`gh&j@!q;MIXL2mQA&P)$#uKpw6A+|$GMW1RP$5c*~GJelXZDPt5sZ4e89E^Js?Ns zV88i6*mKl2Dwp-F&)D>4N+lZKkVYdIp>rE)jmG+%%~91efxh4aM8n5R{ie|4u>M>X z%N~Sqwddqvo|SkNLK6yZ(!_pKuC-;{?SXBFpxHV3a~Fp)lXW0hna6`D$FvQ|XqV^w z6TxU%4T2Ci0#D!|2=%m=4muC}48|j`zfy(i5@PTDp|Pj@Oi|g>6#m}E$t2uCXg=%{o2`77rXT`HnV1@lFVyAco(T-*aj6e2h%3zuitQetU$G4(gnNb9y0OpEt` zpN;-h)u}rYkr)l1@5P)%ia8;hE&LY#DxjdK6>^g;Cg8TLHf%_Aj_x@^P#LpqEcB$) zNl=)NLV}v$qZ~uqh>9)Mx~Z}#Tcb*9RBRA6@dsE$v!tXHxWq~E3!cm(yU|iUGNrX^ zRdHqWT9+^U@zUiJ+a1U(*U@C->6&jsQ6MSwcRjM;`2a_NuXPI-TT3s2zEnN|ySBpL zSlT8SiKVZVH5qW%{JTktOv83#$(VOn8o-=RS-2|t{PxhSca$4M`X=eZ=F7An*CX#Yv30xX!Dtajn+8c=qO#A7b z5m;Z^zB5Z=YKR`&Z>z@rBi#Y8=l6{81hsju$|@S8JNQMlk??q@%gJTNk=dt^^K-(&4qte5o_S0qS@xfuhN$`A#U6i-h& zfRIh8Af+;9P_^jK-{S)IKfCnun0$S+QMcVWV1FRtxXllm9eD`_w^ZspiS)8LFE;&h z8u9HX@7C+b^qQM_!i`*Qu3`m?k9Lch>GvsVyE z_(wK~Cx{nImP#jG*_JgWF;1MoTLuQhd6Na1Q%BPJZhR#WDqTA^y?kcv1LQ@iV@Ty_ zxV&yqkpcxgWic3lt`^|dO(N$;7^dd1hjPE`dOUy zN455tr;Vqd%eV2@=sg8a3iLJ~_=*?_3@@7`?;N|6*z7R&Jo|U7dMV}#zen_4DGqA~ zaXO4OhuCTq6Ye110M|Npx+PZCdk&&-E9%89GBEg;$r`39=5QD?(&mYgnyAaX4Ef;B zBBPk7KZ~r|U|L}$KoNJI7kelBiEAINs>^|E-4xD!T0oRnmC$#a`>GWY0s14hZ^*e3 z&KCGTQjgvW>l3Ok8s)V%vvByqz0VBmt+&O%KeC}1!d=n|Xz07SR6l#Hv5ue9=CNz7 zyN6Id7g3DHH2{!PP z9J-vlAL@SO2jFKxCvLO*#y$xoAi%xcXwB}6EiOt5)mvgK zT4intA$%Yss2p~=cD?yqkJ7;ki_NQK(odJ-R8jg+oN5X6Y0y6~>O`EbD7kc$8Vw)A zh5Zd-O2L-7{u>yKwxpz_MX__wixd&Z$yDC=r3Z;S*RC0#-O|{q0+4J09nkS0Vk4b? zberL^bZhdhL3WBnw*6W5Qa|rwpbgrlYGrE8o20C z?OZQ7dNRQokI0>-(3z22m>tFDY60i|Rq*L`RXpjHCza?!h4FfN z2e*x@-%m+R)9%^YskJU(uiRPcr4V}+0F-2L!RbJSC#+4fMOxOzu^ga1Q@GhF4!d|7 z8Dy%ls%q3A34~V@kOcUTc+r{9(Uf64h0C+yTblhr1k}%TIe^Tj0A;adYf}B|u2{v& zq=LfO2^%2uw-(aIFmXU(l12UO5=l&srBL{iWf20TNOQ{wH8tSpoZuE99=yaT4heIj zZjF^OfAD%j7M#BDeBy`}mD-G^n7;!0sSF`zT#n1TQiEcTHw`cF|6G!dY|uyMk=qL% zlIyo$c)gz?_l?aOH0xOJvLd?m8@tQ-qmLbPk>t*{m+;2Xn}7=#Q8g}hJ9~h#Ayc!- zTgf2Arv2DEBS$$7WUjEx zw{3_L(tJRLVnQv64ZA1Oky%0f8`t~my;7I%`5M!)P2bYz!e3h^xkoDrX1g8lQqFQv z7}blkJMd7>oH8^q+l7he?#gE5;sK#Qzu)A}*{<*-lECXT-im%uGwH{Ki|xZQ90Q3q zdu%&gX2}0Ze4!P`nJbZ_xQ{V84GwG{F?8}hZnNu3eVU6Oyri8XC!`4G$wu7C_a`|# zL;+tj%QIJ8dzd#X`srYnqJ%CCfOw?f^Q~$WU4n6ax8UikE%on2ctOgGhUz$U^*l*= zcRT-V>RrI|`d2@DdN^Vp$6KW>yq^X&3^oB;#2G}oLUv*?ZI+TYhfg*kZX}=H{x>$M zm7?{Al_w!il-dWwLflPi!JYeE)CtgAfO+ikDlaDfv?xA!tFCZ-AOIZj$x-+>Mpw#V- zeSC26%9Q5CGxT0AW3o{Ajr2ZhLvGjhUmYX=kE^!~h^p(}hi8UCN-055KuVO5xTSjp z1Zj|N5Tr|yj+s#q1W6U7B$OVydsLLJn{K4Ln~C?}tvW@_SH5Hy^N-*cUMWNsr`(8A&5Ah9-fRJ!e;i5XOJ<>@xMk>tHFFAs!w6ypUneZ!C`K`E?}_dWt01ta+*S(F4BNMK8UIxi-J@+qA*g zLfQz^XN3P#9Wsc|O_Hyia^`|#WgD2SVSbEbCEfh9H`7$3@H?@!QW;cS<3UJSOBsQ4R!b;NJ4c><1Xnpk-pe_wJ$#epGiUNW?YPIP zZ#diYI36e5XUKeScuDn<4QtH(*dHDDI32ugy{095gN_@Q7rgy!k3z=2%PjRz9s9RG z=slP}l1}r;IiK{vEyK@DS@if~V^-lAX4@f{V;Mo32hY`;Lu2ujN4;(EGy}HKP&5n4 zigA{AccxQ<`<1IjPp(D1?L{#c#N_q|p=i}{qI9xmGWKgZq_O8D)|*D%V6oyO*#gLc zUEot);*CV$vtA}v_|kaN>-_J!a&g#I9e7vDBUc24l;1QX-@EoJC3clx7+Cw#AbEb5 zi(h@tSYr%WJ)RNpNZQ8}@eHiNHj?7wK(AuqB2Y@0`$yfO_{%;e+AcJb4#$xHu}gmaK1s8hQUJ@l2*k z0ralJ0|X(*ZjvL)6*JH<9n)Q3bSX%+9}+N6ZoK)dfmkX9_OP@uyASt-cbQHCB%)6_ z7DhvAg}?HE^64(#{YS$MFtmz}c!c|B5{GGhu+s;3-cNS_(u{p{ve@PzLO1QrV7r|T zd(OUC_b)%PyLp`F`>6M3?KzJR4H&w2yRZK{E_uJ%jr6H=Q=O1QRJ>yQm6+ZtGhW;F=JOz-baFd1%eQp($z?d!XDIun^sTe8z({V(+$z&PYai7T)$Hg zUyeX~d0_GGo=fqyI8zLTs*4Ue^h`fJTjqxWEe@V#`!>zqX3A+vu5zGSsT1j-6;{|x zctE79dpWJr%lM`Dfa8LBYc{Tib;vrTP6>r;a7K9y|7}F_leO?LQ;%$|)gF>1&yYniJ-lwM7IKy%2b$UW8~HIr?RR0D-F`H} z!Au~3w;=rX$s{3N`Mr#r6kq~nplIb}{fxbz`i47a6d~H$T@U(s0XJ{qqNpv)_+8+ewV_^ol^jc&p3r7su zV%x5g7GGDDDR_mQAFgdKy7Z-ATK3vBB^Y{1g(VmyNqBjrF7fm|kHu!;wH>%q%Z|H4 z3nr@^{%;C*WTKnw*@x?|PbBDb!xt?*I4I+f0z7|~CAy4s@mn<7=+mAx=Pt_D8)cI> z2?)kq0YfQAO~6+eQD6Nnt6asSgsV_i^;)5qr#F2=c3u%*j)$!fuQ-MvN{nIhpTb%@m7V?M$>`xQxDLFS)w}g^j@7hbqM%g;zI(C2wscD1iYMgx zfj8sF&I<$BNJLz^?RkazYgD}TI^OroSb@i#so>M?f&;}ZBMzxahNnMI+=KkFj!t|* zbpd^YnzU@kSB;;|ql$37>z&ONBSc@%SrKSU(gT?TPb9M({u>SA(IWx7R?Q^#EbaY- zo9CB28pIys2EXWJGxp0$eGu-_rg#bCeRI-_w{mO2TW~$T^X7zqbxw9D4DNIHF5Y3# zq4hgnU{K@<%(4VJ7-fF}w50g7{|mJ5UqpWf=czoFA^MytLNTyTfl4&PFjU6nb*-E? zuN1|QE17Kl4Rg8aDImVhC)93EExQ#G1d8wJ zEGyC(!K4D*4t}7<@8^%q8XPpBUuT|tm}ibVaUdz2c4V?5j5aC+K67+l%=N{>2*L)Dx#DeiU1bdhA-Yb3-e^OSGFn?ipVjLfaSiTgW zzDxzbH1euwj*AlVk|UiW!+aQ@STie|e9P-`lesYyip{;^KJX@_6vcGM+)4X`5J-IC zKF^sG&-0iByoPDxb) z_xvGAQ3WHOq`3;d%socNV&($zpm^?9kpcRN;bKot&^O(i1H1#Wd-! z+9w~nezWQMrxlNT=qm!K?R$i<(+$Cz+<-3zYf}q3P6-m7*~VAqiJS>;qr-L)dZUNm z0yl+4k8rZdEl>Ov3m`4V^s~uAbUC?spnRP(&mzfP0toSBHSB|33YR8KaMSU1>7Y$G zsXdR1rD-hKDr%42SWdu(c{~63pUK<1ilo$mmjLFn3xU2ef<- z`__OH=UqNN>p&$s6eU;3=X48qZ@by1PS2PamcBGK{uZFGB?7&qj$WUTUR#k2nrhh+ zW*Fm|P-`B>*uSsEztn%9+}cTl02kJ{kE&XTRBvjJRu8tXTDCIrm zEagGSP`c3$DtGk^aCw18BNqhkJjY{;(z-W;3PW7AIz+tP7AATdcio@`L`E#rAns3p z6In93rzBfl(jv~XVj@(vLWdd7~!VH51pHl{FR7aBGe{xB3+y?<4A}Gmd z#)lu;-rHYFJBd#wA7T0Ss7@;WB{|}L(V^oI@AY!8xdfcX_jhGRv{|2Jdj!{r(+MnN z*56wzrAI@*TH3TxQC3A|g4uvX*}?upW1-gdf;xV|tC6%GHCiIAlex+jEtcX@{!Cz6 z^{Xtm)0JA`&sZq=mQp*$9$mvzat#d5sJ5-hW;x?V>eR8Rs3Qqb_MyK?zwj@FXCYo0 zXB)`3-anH|i<}5qJf*;CI=ytCWSmbWTmjXTccZ25&1@BYycuc!sCaVTF$Zo;WPbC* z%Vii94ES2dSI#E|Q$kF_oJT ztztzm3j^dEU(DL}oMS=J;YV@sBa`pF#)bMwC5O!sN`tGnW4=DbS9(pUi5U2|W5-F) zDOhp8b`e1mOi>?m2sf(s&}Qrob&3M>5QNr8g6P5~(l0NV(G`5}fAn+5J{}vBblpl1 zVRzWtkq;s;N@NrQVs}b?3Qon4>5w389njZjFO)in)E>lwXWUOJ#2+#K1K%1Qo7P3j z%6PTV(2Ap9q0>p6pX?TMRp3Vwij$mDvri*Kcx=_HJu1IX3nfw>G4q`O9%DMBS)!{3 z!(5TH!t)quE9a3{YD+qCfEA);ka~;(l#|wATgl z!w@ldSQIV=FS{&W=3Mpm%Q~-#^YF5-?pht8b87RZ(r+cE!wRRizD??E&h5u?MIID8 zsC2yuqR9Af11-s%ZLlM)<^wHb?<)Is9U3Q4@R$hvm!c5{rQYv9uS6j64o-R?9ieEB zr@kEgv) zbouYiYBEVZ=?G`El(%dqbWIy*M%@Z>Gf&o5(x2!WqVr?NZt5~YRL-k~|7F(i0)PSF zE*1zBP*4c<<_Fl9_wjXu~%~y9P5A6G)PGoao%dl!s6D*(f}}nj2A`_AhJd#>;PWl$0Qe|B(!mcOAk%!AXw|sGE!$6@h}y{0PJ4d5gYWYlbkcCfNTM?P*-^3edFi$S>)nL z`~G=2jmHDd?ni1s?|}VF9bB8 zICVebgTB&dc@7B%;{*s<)Mz=KHNf=Ry0A7Tfqa`69G;h@WP)^c2*a09aillbQO%auMNz2;0tN5$}&IL)D<@m$irZ0#_qi^mmbnWQmnB(Qs0hUN8Izvr-t0oKS8K zhP9xxwgSH`$wyy$@x$7m3Bu7m#K+M=lum`GGCK(+fBBCmlySJ3l2srR`XZ|YY86JN zr6k9Sx|iNtZ^QEl79DEt_Kd{2hI|b!?}c->x_NK!m~YY(%>1fQqVB_t7(C_XzU_m= zQ#a+#BdGU>X zzLEUJ@lC1eWR)EyZldm736hUmE$A=_!ZwbQXxh^lx5oFW%~=uHF)wwx6Q=#jL#M_k zr$r+1?_-;tmfn9ZF6hbht9DIU+L@90I&+1ID5G3Cx|9_VlsM*4)@>QY1o~z=pIiV* zImv3)`6tWSS`Xyblgkc}IIAM>j#p?(Qs+f-V)h2!$n)u@5PL*hmC!hIa^0&_o^Tps zo-4toke?BJ&q42maI*QUP>s$?S~)&s_d{e2-E~WK)QAK1i<<*9(8k-7ufmX&571Tq z5bqoPGxQ@P5AjQFL2W}bLl4d?BoIj|)73*@fiW$wpzg8e{0Yi&*#dD)1_44GQ*U6m zaUBe_5&@9%O()^lm|6m~rRRu96aDR6*9u8v5;Y4r7r}hwp;5rf8su3Nh=cP8%*^O} zoT9wLh(DO6PNYCep0Zky(jC+_)6*6!kp^>IV%D*NDaV3aJ85;yy6-2x1;koLoe$T+|!RX#QvAWkYOAV;*&Ja7HL zMx=5UhRU^09|5OFy_9o11e+PG5eT(FX@|(Y^CHf&m)5=Sd4lW}nhVJhPHV&u zhgfIdeU}{+zDOA$(DHzzUiWmu#J$cm>dsFVt+VyXmEM~}QjR(nTyFXDEQW$LT@U<& z+QWXZg;{H7V}AI2dtjPersbwD*Tr_kKr*hv@FRXOdK5< z8_0+AAH)z{!~up#J-5wep&LF~u4NXeEZgs#uTQ>hy&E}h22p{q7D|#H!DlavOi?1v zUo5U{nk6UJDHe51pJn>tSBS^2KRJ2y8xT*fv`SinFh>*ims%z!E)P9y5{N6rdTJI4US0<59pWSk8islzHqOfy2eKQ zb&b#@7CIqqC%Q%Eu{mRIw$fcY9OElH`N|$q z0?5uRVeyp)VGeD+NzrS4K@ccMCBcCfA$nf?*Vpej3;Io0hnGjp;N{dUOag9gn+b2M zOHzSLiZT9}rL%A5Lj0&`AgErXGDz&V@YOa$Z0qR=qex*g2x#XD6yE9WLrTo z*}N6$Tiz4lw}`7JTv*FkQ0A1b$Ik#+?<5yAiXTrjy3vA#Hmp8v>0cu~}0vG_=@QWEtI>m0y4vHd?Z0Th`lc^aNVnlD%6>=UP1> zNAyt4>mq9jLLzDV?$i#^SPEXH!`QuT(dZgcEg&$tL5@KJv4f9g-Tk1SCPs|1wI8yY zYyzs%|7fZcRvWq_}{@^Td^?F7j^Ef7Bleq}|rikzi z*CviOqq6KdE-E4K(kQGwS$zgvEG<2ognwDxZ^Tg^q^QKa2QK;Luzrh%wj>)A!fxoT zPqp~zo)UGV+`COr3{@XI?sF?yKSV}Gffz9kA5xKUqU?+nS)#+F-w^%}7=%=(JG#msr8 zeq**v6%G?_k6y&I0%7ni>UbiXU%LEzjYuSQiCN*P_k%=yj%h#U?Om?{p0QJbsRZ6- zhyrK<16`rT*OKwA>Fa;8b!b-{LzM=Zd&t-Mb$xmHXU{K|NWd}c=W^PYZ7?BIu`6#f zliMw;l{IVW{Q&UEW>!oksmAkkGtR?w@e>2e&aw;-aOFunLXEZhoUC#L`l*b3f6ox+ zN;v3Meb^UI;d0hjMd5{-%9su` z(`J-NJ#6Z|tP=fKDBu%lM)u#_Di%K_UOXq@3D)ia?!M-35G^!4)L6d%h5Cf9d2<*y zS3Tm~TKwaC%@(SW(RcqdsrGf$3-^luqf-l-unc^Gkq!KZ!jVC8_r}PzRKSg&&s#b2 zGeD%lY#=czSK1n_O%$_0q@h!=Vq)6SFzO!dtUg=N|JmvEUZ{v1e#nc$<>X>S(H!_9PXYr^!wNHP>xm+_uB*4D&?E!yIPD?$Fq;Ep2uUIRjz%9X`Tc=&Mbp4~o z_>puHx%&@ee~nuqjOAL-|2_u{JySq?rHUG$s^2=aV_x1>$u?-t7m;FscvGem%#sUC z@`9g`4dt}%y|y?@exQT0H-hPCxuZX=*|1x9dy6&fvk(K^l(@2@w^b~SCV`pvR5L44c3tqCi-RygK?nTfxnYuH%SA%= zFBtgWEr~to<$UTrCzIIXHJ8uxY`3}fy+D{-E9Vx=@c2jOeG{WcVax36c5g&I&Z=|C z5zf67FGUspCk_ZqlFNH@e8Dj}RK(A|fMNgIrbkbtH!X3-q%-lP*(_NCX6@?CFn3g9 z<>weRZaOr_6)fJN(f(kIe?j~I>=5Os1DFF_Z|i*E&CY=B)R<}%KiBJ?#Paa>gG&bb zujI zGSqL5FJ(j)O`5H4YA$#~tFBs-AA506dfx#%nPb(SR@4XCS0o3bm5xw{xbuUBm)?Hh z;|s?BXP3}XBq%>8S-aG@3pIGglTjV;Z^YP*K1B|6$W3NFzpo+<61!kcL*`2R-;)cc|iD~-O|6X@u59Blo zVcxy|?tGsB^mo&cOw@gC$>XCLg-qj9699R=<_mQ6r zFXy2KuxBM#!+ob(@uuCG`c@qI^-d!94898#M70&U8eL~8UWP6z{(aOa7kI?U#6+;L z>d404Bebeon;{@)8i8HV1b`DWblUS?OpVZ|+{hv~IZv)1eotlc4((^52anLH?6#W! z+pb!g6%MRUy`Nldm5eLf{w|^QZMlhLUwo|;vlprlNErXqk+PL*?71}OG4*+8p}}M7 zg`k&WnttioC6%?y#LIN4YU0wuoIqaqkG~=y3690 zSqn^+$$7+#c{x+_4Z8Wd@}p-9k!)Z!LiRrrT^vJAJ>sjaL3tbQ&FhU~k>s&rUI|&Z zrsG!mI2RG9mx50@dm;!V`AJ#fzAl0o!DMA~XM~VXS8|<5jlHK!?cJ%vcP`%RZo>y+ ztg0iiC*Z%U1tCqKLJ`BLkSdSgQZiH)y7^vfX4#2>bae+kgqb%*BJRbfU@&)->OO6` zQ&$F|{r&atjF+EjG0ZHDO@{nkDgxF-=nO>KPn@s{YaRF+t?2k=nS+3rpW&x6yk4IU z6hIrV9H)=-UaNXA2Q|4SbpzRP<-izqR|W8BoqZUz?fmrqDb-(AQw1Fq(PuFFgwN<^ z9Pi1vGUcRNpx$_R%asaH$9V80m-5j*IWns_c|7*cWT#QwO@2C+oP%J&a2G#g=4b5N zKKH!;f-Eshj3jub;zy9t=6t(;{r;(#`ZYNQ3Gd4^KD|&N9VEEM*c4m#o)5@+@6f@8 zqQbM3?M!VNT~-MAc7Hhd!fewQc2MbUfAkInxiMu>U-Ri7T-|G|?t<`MT9&FRGsZ%0 z>n?B_>KAO{)00+{|JOB5Ckb8{YD38(qwD|HN!b>GILv-~9j-iY^|mA7@Oa?yz4|k~ z%EU3s(I;RDkk|DOQ>w67(3y~l%&scD++O89R~9(zFvI&_`^>AcpcK~siFHb)Rporu zQ;1hT10Q4zTw5GjQEGUu3U?Eiz4Y$6EWm$9HL)p;#~AkSPIvUX?i}QKk7pfSCH3`t z_Yjei3ZnD&1UjhBmxY^m3NcU*u>*BGxMdRIa^qE-yddFzj<$Cw}^7jc6}o0Z6+Yve9- zeImo@^qttnql(e<7lMSA+ui%vC?FLTT~p-0_}w>6n5=_9fIa4g%&|%m6>X1_MAly5 zD=oi2CS^Ga{n`f4ui9!L6`5~LTYd0d=2$Kv0&i8YhU2H8GXX->Z{ESlv7iwZTe+W_ z;Sl%mODxouC)`QYfBAAP-AW|Jt-^DvRenOW0(t$k7wcQ<2HI_E6m&~*Lynm5FRjYj zk~2xr`)?n>&(nBrusoVUf5?U!{tSj++`1J?q9)(i;vNCIud2&;o z4X%~hZW^CHyoO*Fr86QhM-sqK=n5VP+IHj^_lp)V%%Wsi;A(gc$2^!Pw2wq!=MYFb z{~^o)qyRD|jaPV_9lvfHe?3;_KQO4)X`1V`r!1FuejmXF!fKKE%DmbEi-}LEk$Opl zXDZKQUhD=b-#Q3iI&Dbb_#+_@6xcM16pmMAL^6!mWpsCb$6Fe#2{20QfL>)>BWk>i zpR1l4x4;}3FJPW!e7I|W2|Y1&DuAt-O$FqMUnBb2z!||F(>!Zw8p% zD~^CyK9Nrrsc?~JNQlMbiYla-n8ZPQx)WFn{fk1jRFX(5Pu2!@dc6GgF>^mO{~H#* z!pQnZsSvPf!mr=qj+?6CwyE}2^Kf%bZl|TMt;Wx^-^O1-V(C~QmiTo9dkyRCA$SbM zyi#;$S|e}d`M+05+~q^l{_HitE%nkx_n60vGOjR;mu09kj8{om^5M=ahoAYF0^v!? zzvoSD#+-)>%d+BeV?8z3JDWQF*}!K_Jz}sw8p+ZM8BxL&rU_J@M3nLubqB7Tz8bEW zo0Dx_ejs}-l^79(df&kOR)%v~1``mttK}`+eu0>)u)m0jl(|;pxnSWk()a3$ixKep zn&D>w_Q30F_RgDD6d(tIv`-O#4i)y1kp8sSW0S%bpeXcRex0q_S4m=`{j%Tv`2`xd zd3R6N$MXl3DuNiK@e)VJLJjnvgt7l+p3iQf+u%{${%zqZP;`vmiq^HzhlmW6KIvbV za5){sjwdj5VBEU`1R$=4J37r|lq7xI!Y#Xh%}AaX-Gr5v-0j_OVX`|+mf7DGw@CTPxL(m_ABj0 zCT{xAcV!*eB^{EwD{CoaEtcn+Wx2yX)yN_ja36chsaBYgi>if(-)0`+Oo#26ia*=x zDtRfE8fg}=TYiQ|#j*b{xS+R0)_LO+B9Gs0-aV6@)9`XxUC$OlFaGTF;DZstdNdJ8 zzM#srcv?dD3r`i!{pqbnNNLaATv0DmD-h8k4;3GQ*%wBsKRRCG24S7R=Ra08P@_K; zwY|3&l9fe)+pG+fWSgc(G6BI4(8D(N9Y>04GBX#}a7o+$`isk zJ;Odf^*?uYNt?wKlQY~z!-p|rY+O@%Te&!6AJQ`5OnkWlz;pt$K*j(~z+I_;N}QVv zUD6y|8y|wy2@Qd^fEY@|Ly*SR|DA(BEdZgRRW=)iirDT2=M-~6{Naq_D)n;~WdqYNS*ksxLjRvA4DAK6T7dgnFU+XD zsV>W_W_Un&#WgUcFAdD}z7K=euZpIN+VSg2>CgrxqyXF(egis`0vJ0m$6vc0Tq1Lk_2;c1w5}v+Kk8ME6$RF?r$6t@ zw{3e1p($bQb?dx1rQD8f8*b>$Je2U|gZ+tr+y3eOvES>r{6N@{*_eD zEjz6p+X& zyY7&nDLgT=z~-+g{Z%#_e&;omzNsTy;rGVHI3cIon#X;TaI3OZ;6JCdV>Bh`e$aBC^lp%iCi%uY!Ka6{FO-62Xyw!bY@{uaoN=+7YuNL>K4ya|8B zsoVsA1=!!^{)JH4T21WNIm$lxfA&vzV z8vh*aXOF&-kXprSAw2xCYB){jDd|hYTTwu<=RdF2mH`{__aF0--R!J#%=Gcw9sgHP z=jQse-L!AzNVaBq7T;FsNhIthq1-KmsM&r;gkaUwQ<11U4gY>Ow$sREPv0oyUwbM6 zTvFkxW&8V?D{y3=>wft3LDM3;hn}ovlC8+1>UZ(|49(Im3;YO+QjHR1_huu7+e;Xp zEMW4(577XpaWU6nrMD~U>)3U^dv?Mk>4mlTlypH7U1!bL#O3}9i%@isNc<<^`7VB& z-A%@d?VO+P-EQ-4Wra)AyztWVrJa=Ywh1!#`{j*f$4h$Y#-6OyXrLi6U_>~ueUwM# z^2$Ns?gv+;cR-Z{@S5wZ_iKNva{4xOP_6umTYx-)$Xmw(^{U7;E`|4m`;%m5mE$!h z+x6V@h$9`qfU$$ijpsU+g4F5Qv=5a8m2+;MfoI8286ykqe2px)GuRO+AgqxGBkk|w zTF^j?zCYOR93G!h5j^(3Y7lTZUg})5>o!2nj<1!x&bjj^Z^01?VWo!US=&V#iJe5q z0v*Wx$|0A6WfnN5((*-55w1gb{ts4_P(W@Rh_3t12wP)yZ8mI%UAnu1((}O#K>n@f zEdapYaX*8gB82)ge8ovQaR~?OKOfZ#esV_4sIvoNzf&Cdn0y|Ac3RF%!$c=dzc6 zud-AAt9bsRW*cP)9Zc511AN`npfMWYw;gIfcs9RhQRt6&oi>h1L*!XuL})Et_K;Ds zzk!=y@op}4@2iK1mhuKPKz9^iDp90SOpG%Jm=*=S{*bK-Oi7X7eVh0<;Hsw zj`-ltjq8g9C;uF(r1f!wt^H(iMP7`lOl<$*FieB+Yg@D82{r{6$QF*VnWAeJdBjt( z1cblxg?!RIfUh~`M%ynos_aTZtDpxD1TT`G>+1sr$~0W-s9I|3KKp*e^(RF3_FPF( zP3cu1yLtZr5CR=YX5aF_CBLs~+}=7d4`B1RUKbbfo0^lk{KJRaW_VA>f_})c41!Q_ zxR)9W{r{|A?-_bv_{?M6?PtbOcf=q6g~X6PZ>$DL#z2#E!R_!Ix?)~4;l1I^mYo+=WXZM(t)#qgW8TAGZ#qs-fn= zpLlPJk5UdttG#M+_A@_nDSfy=bfK^=s`KVbuR)9#o;V=IEU?d~SNwyrm85PzsqVqP8J3P~X zE+x%5fY&8?+b2>yUR>fT=i1gqN=340L)Z;6lus55+Imm799TUTNg5Z zNlV}kyR|UcHsO2U_xEPZniI;IIGPb~IywHMt~jiDI;d9vxyJdUKWjx+%}KL?^2boL z8IU8WAtR??1;*db9vh=X*8SA?XLUk)ZzSC0_WV>W%sl%B$Xq_he>op#*8H0{+hZ@; zVm}vG|D57{XDKZyx1{V$a??||AjMaf4u2|sg>%)FOhDAPI%Ev)N*D!b@b{3F>&uwy zA!XPni%_xryH%mW94rbD$}2Gwf-hhE&WNJ35d+Vau@UjYQJJ~Q_-MB7)84wRp%5}X zUTiC%Xp+2uk!eJf$pVV@{QIx^WCZtW7;i29tFMRRPiN+Vsn)|MqS-mS$JI~1|539A zbr>tQDw_C7|C z+=hy{^6iL_m9kz;#Zy-eDsYFZQ)Td#fw4XB$6Am7!|%Pj=^2!jNI4VEiq~=zoE5Qh zCR`PXaucs3@KR~a?*gj{>5-EzR!7k=`c?R$-~(P#Ex*r9jU(TWs77|-X5MLK!)aG3 z3!v`tzXL#+IkawiqVoncF*5uJ9&t}rQ0JMO6X9Z&@6x9mj8@NY@!x?gPBH@y_NX=0 zyE_3fLT5ZNIGs<&v-|up_Ost~(aO0?hjDp+6e30}Mhg*;diC8!`zla7Y#<4a!JjEk zD7mmyhR7vzRz%7%k7gbv+fds zXsD1)lv>Ld(7O?e{$hdY|Hl5lKbrG!^LjV(T*G>^CjPQix*Xcj&MBEEQ5C9G`3t?i<9`xSa^Vo`5jcQ4MxZvJ)T z^x(gu(HuPiqb3De5F-x6KJ+&=xMXa}zA$sTIGB`HEs~_th>hd_?o?o*#}Ec|?jBuK z$^xyH)v01&m1_r^)xRnJ+ci)hw^)A#AFiIXyMF_e>@)vPDh9^XL-*T-)6*bh7G+6! zn6exvx|}SnS$AFKe&P-2R99b|lEDl9;pF%!Mn$g(F1q`wRG(|Wl4Qky?;>3Omwr87 z$z@q{Wke|@LMAg0bjOIpvLrw5(;vtwk6oNes^xsf@1VDkSjQja@>$>hSMcmd^e~`H z`2|{rw1gBbGq*oXd;s9C*e~2AOBji})pWzZkb1WJ^UeDFn{~8{mkdXG1B{;4{n0U5 zGW*NlijK$mGOm28QnMcju2Q$353VAo!(&YY8BNRqLf)pTuG8~{vc`}%DO_3O^DcX0 zsnY!2^X&tdv)uSDUqwQChBtEVeQ#|}V=Yti6>UZAkcce4)u5!6pPu^dITE0i{^8d*o zTFMeue25+Ax=pH#)kpQ-9#To%D-zhGE_cLzB~w?#9+&(1xIw4608o%ruOUKWfmX@W z$CXAS_k}3ns;A4D`V!Z?)!p7B+9sIw70}v&W3TK%Y(7WT**@NX?6(BiA~np zyUXc7ZuTF-znEAI8t}kdMJrB7erubT4vc_ycp_%eq8-=uX4+Bab(id$Kp|=0TY*yn zN|lw#ZoN&ww8~Ftjk}MSta&8boY>G~ci@SRA&>Oq%wv1;)VFyaa6OCWoC^I}U(e=* zqd68Iir-2HgV9lJc70I&aW-}<9G7tz`|eLn10O06lGto~ry6ad1VY5r9wk*@jyjO5=Er{xIL)ZQbwO3D6ZaMeTm zx4~7)_MZ;MxlJ+KH)JFgEpq_n7zOgvF9C6N3to%6W$I-62t<_0i-^n=?$ise1>$8I z8>yjXf4NvaTS-1=ORvL?xzD{_Jf#r^w(53zrJx?&g4Lo1cF6}IBoiGFs<$eSu|oXW z-7$|n@A4`1in-k!Fs_G>F~A3tRuI$DM?YxWscJ+I(e?jnu|NuhwOxxQe!Fw9$j~6J z*=afn{<$BYhgvr`tI;aFVpq#W3;A~8FWg7?vlwi_f&9$pV|1;?A+}F8(y@x$o9ukT z%>5zFz|gA)x1ZIA2+gtIT*}gb@ZCbMxxOww;N6FW!Kx2=g=f_rQz{-81+dbFnWFJ> zkBd||BdA`nGm2{T39`g=mZG7=+)0C_QvS% zXh;5bdb(Wsu#>8D1y@n9h@!nyu!xeqzx%GNjj+bkXB_FxK-q(m-Uk_>7lJANap&y- zQQ0U{RN2z8&sFJc*&Vw>4jGx9#ZRE$0bz+KWEkaeF#E)5@?8W^GmTyUo~cA*k*<7V zt=1JC2tW`m5rlDI8831sVAKvO(j2q=#^L5^h$D{-rCEOn-1bpnuTvoK1sxNu$={R@ zT?nb}ITY>Tn^4dW5lMQs-ktcJLSJ5i6@cB#7ujw3N3k>nNZ!9hcQaS#I*&onl)}yRHY42beSbPg!g z7U6+HZ790$qAB}8PYvwB3v)%78pwwHm*by(1@geU8SY$#oYJNfurzyWwtL(LevzUl z_WeJIp1lTMI-B|Wg`apq7jPaa`cmI}GSH2Sm+0TCeYiohs1?TcAF&Z|hG-CydSKVP z4wlXK|N}Liu{Su?C8u1J? z5%V41&2Y@&gw>-n2;%C=T&#WWH}&CV;#dmz2e;cQ(Xb|{{p@l<6BjRJn^J6#Y-sl@ za>Yp6eY~RE`@D_uU(PS=jzTmIhYuoe?1=A@3vd0GOHbD%MD>qUZ{`X%7rcktq6B%e zZOr@oHM~crI#robMTe`g9)`p$B}5RQf=OUA4M7H78|}E#$5o|Dr1HsPZ#wN^>Ulxk zjx4Rehxs?6tRR`7sEdKIi>JF18@fp(?k2oBELUd4$~$dh{OW_UM!71#dE+AO_O1dI z=8N&7i}a4-tSz!|5=5645gq?gEormjsxJ_~&paKzS^gu6ex970jb(w5MHJobh54`g zc#)heY948}AG$sh){xd`r4C@4o=QlF@%g&y(o2iBvw7g+cA#BM6D;R{tdn-E2wYB^ zKh%;U+RvpUwW2Pvqrsg9mOtU zG!3(-p8xVUZ09;l3?En@$Nx9<)6B-JzPc$&sRbkbM zX7l*&pCjQd?^gD<0!w+G{hSp5jUtKhHTB;`lK+ti)ri6jo+76VV_*N zoANLcFB3wQYFUYxnz!ry4X{{5K;;Du)fdK%Iq;62wa zs>C22(AL(sPrw{%Jz5iQ`LlGuuE(=%qo#c$bZAg4s{w>JGUP@3dBbEw-$PbR8>S*> z{^OE0aHOsWCbhc1jt|3db~*#Jk`K4wmLr}v2nb92j$r_(*oId(K!Ay2ZXgeB?)32) z`;Gtvs7HC277*U0p>Qs|W_b^8oC;>vpZuv!cqOH8Yd+MM%sk>(ED!4;y!YfZ*}xi` z#CHatZt*(v^TN-kdX}djG|=UzrZ8v+0OD%`<<70EZ*tfXXcr)BODMLj;mNiixCRxY z^7YVX0&@r(Djsg^h+oaTfb3r=HM<4Tpl~Xg89ZDZ^BPuLF?rs!(zVRS&>c60-|~?P z2SK)hyg9m_VHe05*VLmAhagc2^KXkjFoxG{ZV!9n*@qQo@)Dv7c)yh)y+!{t#0+}7 zIz2Yr{}HG>lPXxG<;Su1nTM>EmFHU-Q}*`>_H9%G9etMzR{-q@;(@aZagOhaqyNYkYyydaW=OFL)0P zV2}TR73aL(#4!P30WYM(^!dhny4EtUefL_*z)}DGTn}8Y!&oN4*{pbO6k-%0ZBj}y zp{~gJUt}JcaZM|<_E5k5yde&gs26!wtQ3pYbLt+_AHfEg=HKNH5@pB92a;=vL65Y7 z#93g=av>GHBQlu{LN23s;_Nt)MUc9%+;Dv7-n>jE8D6JUbb086>q;d-$bWrkv$w(P z>URWjaiu{bBK@i&;Y%YCs|s_fn?o}W#S8;BE%@8~K?)#bDv*MAv6CLVuvX>SIgj1> zdCiaZRrRgvj&MUJP!8>tozFk;Jj00uXX0#Zvl>2=ziN>JB@h#K+_WTfqGuppSa=Oj z8;Dm=Zo%tj=^ECQ9liJU_(?W~j*lf!0y;^l0M2EZA5QSVlK6knXm2f=xfuCTs3*-m z7Ot-YjcR=rhG5No68~crG>vs7= z2iXZb>_B>_#0fa$jT^j@iomUEqybAxD$%k*X8|Kwtpi=s1RgjxuMR@$_DG^P`@G|i<$(r(hB>^J<+lR0h@V2 z9SPXe7lORZBR2>`&hhUeH=fh)dLLGZAGe&;87Zd#VYUiz)64}GL`q+?eC`tc#a9xr zF230z&{||r7uS637%&;ohFY&Ecb2=79X~YsIujxnht{r)3nQ-4Xr=h|lEB+BYcFP2 zKdjx@bmQrQKVll+&k}25RO&}5V(hN(ZkOMfcc*O213JdV3w^>PVa%k?3Q!x>-O~48 z@9UHhsr`fXkmyljv->#o4)IL^dSF%f^x>}uGXUqyU*FbnH|qL;a?sFo?Act#R{rZ~ zn>QyOaV!W}Gti{h$1nWlDGLH%albQ%{_~o7_YYBW;3(te9%?Fg;68+3?0h2v&C8CH z3BP?1=&8;$%)fr_=vDQu(YC2zd^CZ5ULAl>WIgaecRI$Kz?KKn^g%n`rr{SJisrX! zX9+mgDL^-@U3P|lNhS)dV&3IH@f_J0CUX@^zNk7bmRm*PuLuSK|0@HiTe>Fqi*LXq zy{TB(X3Y>j^cM$iNk>S(JM+NQD-s0pzXQP8w9&o>01^Ta1*p`UoByTBeB8l`80N_+ z12zOKjRaVs9qrejzzU^FCvQ^CVzsTE4dqJgQ^nIw!Lij%xga%}<*nFvIlmV95SDR1 zJP}oP`pYb$?b~H!3vDX8c9)^RL>H1S-AZal?;#jC473Xsxb!vmbPoIxvtz5-LfYXp zV|1i=G06w3>-T@hM_bCU8TN~~Yd9&SZ7ktXy3EpLZ>X#0wg+bWb<7=BU|6N%a86j8rr2O4z|MOEE zlnQ(*&BZAWsQQj8WcWNjB6FnhkW56_;@;B=O5c521I=U)%{Rr#?^_aqHbV!H%^_S= z^(KG^I3Nc5T>}U1qo|Q)Lyynj=s$gXV=?bT+Z)GMIkvF}~d{{Ly4ah`le}v&@_4$;5sTyy(^q>CT%r}83?+a}W2V1(N zWBB*S&m>gKKXs6wpd>&VzVjdT*#(|M{_ECWQ2f<(s6&KCmE#siTSkU6pK})__xRm2 z7qxzKvb?05o=&`=#nNt-$aN2(kn(7r|F6C4ermD{))0!QNRTcaqk^C)A|Rj=k$`}N zYWU~~NDC0E(u+zLDT?$WNKr}KfMrW~^S|}Av=D1$L>pn@jO+CA-ln=+7^F8k->>Zgx&zv&ZP{=y@dbxjU%3kdG z+$&OR%Hk%}mg2e|#5`}-cOQTLJ4JolA)`H_Szp5%BVSy`#i>3HG><}a8Il9`a-Pjo zVUTG%oS8vB2i6cG3Au&*!oUx7KN94n=fXc17jOIK?KEn;IscZ$7ZwAoKIiBKO$)L zy%@OF0CkFgr~}E&);pXUz%xcL`^}4(l)9hk&#&LFj~TJ%O@Ie<)i`u2&-EE9u2{WH zwyBj0Edt}*S3DU0d}XWnLpjwyxL0X$TjzgKQXjQrJGKnJaDQ1FPAJR4=bf1YKDy`8LxOHf zkQoHaId?5uc}`)+XGEoy}7WpdFIR0RdO`xy{&l|xS)Om z(fzQ*Scq+y9@~#0l51a^an!Eil?N}Bo9wPxSQyQDR~k5HkBo(;54i?BTVK|$TagC9 zoeBc($g?hCVC##9DeOH7ZbfIvCghIXpK`dv;W_4Wa8u(Xm#*jBNvR9%>?P3yO-6`7 zBtLCM(kNcr-;aLiDvILa(IPHl^rb+R<&vg`rm3{Ts^s|fd@W^=B`0rzyYXa}G6kCd zEf$ECtHHppnZA2EK%*A?{Ul{9QFDC9!77^E#y&|p8e&YnB_}Te`0s^!s2A#G=|u1v zkSCbGnDr1ql|QU3>;E!M=ytLf(zg-UyUl_;%x*#QP^v$|wFL3H73{;tH!|&dV`=QT zb78!~`VAF2W8q+3uZJ~!BrOhw9eBspYD=g-aoC3|c4C>4f+ScWEN13w9uQYKAHa+X zj-&$abI_ZNO{s?Ydx_}>vS>L@A6xlxtSZ376m-G1I2hb^%H`A(N0-UnGj=#90?T`G z59yipN8mB^1z$OzP~Y={s6ZBmM0X%21Ywi=L{B;>wV{I+UFobBoSk!J|gP2iD!?SJz=skR9xuyV8VD)aghA; z`z(aJzCqB`b3P8>nTAY=Wc0H7%CA15i_W$-zOEyZGr@VhC2f!`kVc7~Q4Qsq3LGw_ zp#rg|HeER()#GmAm{->CC|n$OF_%ETBAHkB7SlJn-iSX$DIY}u#1Q{piiLtIoi2>A z%0@Ijj0(1MvEj~v{}9zO1f;L$1C9$W+Dd_}N#hW_VxET@0n(O*=TwNjk5e6{P?9!* zNXwycFF*nyCxvLk7(E%Tn}V7QE)1^JwDrp#yq|dhmTQ(E_bm*%k`eTA15d~xMdN9? z=E!1p6OgM8BY>-{GbC3+N~wo>lTNYJgQ>bLi*cA_}mpi z?9S(eaiJ7cc1v}hdrrV-!{09rH$qR_bopSv*i)jzpOFq~(`8=r1o6PWeIn$7&GRPn zL^nz7?XQH@m5A^x8Q+EZ3ihJUXH(+p4(PcRAb9oU0+Pl#1{-Y&kyTEd-6iAi^-X!P z$?iXp$v1Oe-|(Os&ilZ$Ayic7XFBDJ0OjtRgtN-(@OkM{FlFu?(YNe-aSYwD%)nUR zuvWc0;WLEsO6`gBtD}%9XLpIy-rJau4m1{k z1x$1Mc#gX6r8; z{l`7ad&`5{2L9%#lnu9E3Rm-}>7Z3V)1U>pVZagu4*elUgk>V;n!iewC{ySGFYa7UkIX5i%ItjWi$ zUp0OE>Nih16f ztv4T)wVo;rZTH;y79Vx<<*wQ6J89H6OY1o$kW4|;`PNJ>T69jyO}IMoVaK+?jPv5c zR+Q!0XnX;IXfRH2@>>syTu^IlPX4kyi0Nq0ag}kBNC?oPq)$N`*h5U9b647$6(Ag- zvz@>=x+kSbd9hmIH<;?{@vPp*)>~xh6zSZJ99KN=lIK1mk!*;f-L$>XRqAG_<=p92 zz(6gj%oNmE=>6QAnO1scCG_NeOb&U=kh?Wu0IsE8TW4iqwrtho(0krpJ~X8$e{Nhc zyI<<(a8kw&5xvNh^hJT8yi)@DCVYed;xQHZ%@5g!xF zw0s^dwdF+X_PBtj3KR7*>rd7a?leX(IyR9^auYHa!_Vc;^jrXFJhYVkvlZZA$o*@f zT_~7&dE*^z1exZaV$yruK34xoV7tBlnHs(Dtd{t4d}qpWv$lsTRl|qU9Wa#-Cb*u) ztHnau$mC=`hV^&bhZ_c7IElV_*qnf4i=oy9(V{3e90|;1)3-d+eHy6$H1OWjz>Omo zmZbT2%Hec-iO-{#Gfdu|c_?QNOZLGv<@?Kn0*`Z#5i1?ifBaDU4s|F*9g=UtW6|MiO6HVR%%Nsit-%QLd3IEo$~#!H40@YuvB z5HUlK2IMG>{sZ32&~_RMtLZiXI*939URY=X2Wvo)? zRnvCa#W%*9ic@2iOWQ;(8lsygp59|%JKqojROPnY>MDqxgsXEo91r$OyOx!4OZ6@% zh~oqY3w>PDtgEqT`IMn#xn1KUvGIyDyUneR_b+94pO_r*LS3TnXxOuoRm&phyO6__ z9NS%mbMVXiO{az^syKWppb_LhT21SI|Ej&CFQ$)%X_mZ2yhDv*uvK=qx@}Y5dqTtl zDFov_dvVptN0#0@7UpgZr)>3R{5*!(NO4Cl zGp3h(GJ=^8yn(SK?s|tyVn1>u{xYPt0)MhCK$K8q<2vP`$YvP30LgMJhZfqK%i1yG z)EO@w?0VV#bV}@UwB79tMMh&S4SNf-PWHQDVqrY8bi4V{{o2fOjH$AD1%;)L;b_|p z!?>6eU^8uV&r!hD;kMe0nK)Mm9gT-WWp^e%hPav-uS+{s_*zP+#X0rz&JBN{jM|(Y zuh?6w-f2Cjqbom841V`&?ay>L(i{iD6CRrhI7nA8pU0ORtCya{eZe zv!41;D$ed$kYb_O_G$TCGOGrU))EzpF~1T?AoEIOVy{Fs%Jmt=2M#d2Y2u)DBGwBe zT`t8p`extVmWi6ByfdA7iM~MmCUakpd|^HzH}{?K;PQzCkq>6zII6DtaN`?%k>Uw{ z{inqU?th5fZ8X@3>kC+z7$BoE!RbSMiRl&7q=4HNh6e6cZ&P8-5gICybT8Z;s!ddV zjY|xCFS<-{h`FHnXp6Hv`q0B7I`4uOQZc#(O42uTDb;bOk1D=F1`jY?Bb>>kY^Ibh z^O$sFt;{(8b(|?f{mgP$S6)rSqUv_CttGK&rNKwv7i{gzigEGDZ&lep=q$TC=FKHk zPA?oN90*C}wReyV4htr5bf`Pks!g4<9`HIK>Ozzx8D;Wpx%M(}ZfoaoO2oXSX&7PU zUV|6F^AQc03JjwA>||Imjim-cWWK1P9xj#LKzT%*WJ=jD5P8zOrqZNUqP?=w^1J;; z_wBEh2Tva?E4GDh`+h({M|m_7>~8wu&L}(^3sw1)tJ_FNbn=e+?$Hz zp22-=BVnT=tZ_=@Dr-55nd4m*i3J4ewg3RXK+qbQ7c@!^=SdJQd3F^pjks)`)`va?%unO4p_qm{?F~LfF;PWHW9KV# zxmLmPsjl!PGE#ea32f?<1~vlIT)`<4%oVyFecFuzt(31rAZ5Zf0NQzvJMo zex?y4;rTR*ea!Ucy0Tw8G9Rh#QH`3K7x0b{-4-?2 zf-mn=Mi&w5M({DNYE9{lQ82~6nN$3DJ*6v`j(qJ+@ylezt5<~sC?0jOyG_FKx%Cx2 zF3$gk$&h?kr_WOxY5x4Hhcaexxa#bxt#=HnWk8-4KRU*tTCyf?7&G}Q>~YbK)D=E5 zut`5}bQ=7m8$Guqfj_onZQH-@1Y#+|uIhu!PFJ>GHlog}xUM5_|1r;@QPG!O31=Js zD$n2$pZT{G03Q3ep(vKt=v<`=o5MJMG{ue80mU`8>b%^_Y!`#!M&VQGDisE!2}Z=X z%SAr;*e%Cse6jnE46&TBC%eq`p6m@nY#6cp*Q7r*`v0E}x1s-kf;{;D(iuu5VFwB& X`oHNNf0ag3fj?CgTB%sk{PF()e%sh3 diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-128.png b/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-128.png deleted file mode 100644 index 181c5e892d1d8e0a51bfbaa618c349d95f28cdef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8027 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 diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-256.png b/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-256.png deleted file mode 100644 index 7423ef91440039666f55bc43db333d553e812304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15943 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 IB8Gwg0e*&Ii2wiq diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-32.png b/other/EspansoNotifyHelper/EspansoNotifyHelper/Assets.xcassets/AppIcon.appiconset/icongreen-32.png deleted file mode 100644 index 520331d04af5a1dd115ea50710e66d58c1dcab14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 zcmV;Z3Rm@sP)Hg1+lHrgWSWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6 zwD^Ni=!>T7nL9I?X}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8re zhoBb*p;u8ID_yBf0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J z`jH<$>RKN5V(7OqK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYv zwjAKwmYb0gKL(K8-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z> z!FI&AHCpoWI|RUqx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVT zrI(b06~u#xf1yS}_UGdMvD``!0~u->P=lA4?YN`hilQ z|3tHka)7T{2CGqwjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^ z7T9R1gAN8V6s;5)ieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2b zW$~+pTw@bIek?ZvKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L z_AC5qq~L$#SMj%U$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6= zb6>{xYV#Ue-+LB$7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re z4r3qYr~6#KE>;1F`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+ z5K}u-6REM(K@W$srgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5 zh^QEb$V`rCQ-|7ZS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX z2i^rZ^Mu;6+rb@?NPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV z0id6JRRdfL?*IS>N=ZaPR9FekS6OV7RTMt=U#81U%S=mW*q6#`!4z-_f+CP$cp#>L zfEW$>;1Uw_!37XyDh4s&qX~WR1r;cT5`#vll9U)j69l0^5k#OZ*mmef?Ub4Mm+Luq z`v3g%_eTmZdefPE=bm%VckWql0siB`9t1yfWV>JLO%CO<Kp2x}%9j{08P!8AK+`*Mv0E}>$GsH!R|Ue=AHNKew2i6CaGufzf@Z34 z=NBpCQ-N!G3z+8m*wT-7-63YKycOV_MGkJ+%4K;y-5BV`4>I~K!VF_uTiJ&j(K;@( z0mxo*!_(#MEK7Y4bYt+h_7X(O;~!dMuK(;&e|%rUTda-mSiwB zKMaqAhQqMzJRl*hiC#F_c^xkH+yoVsAfAjN3B|e%L!aHTJo>vuQ>+Eeilmo=ss>S0 z=eE607&=S~4ucIP^I>6R0_4aU$DvnG!LF+(VavIrU~m%^b0~oqLdymfZkD6Km6lLD z28#AYOEHZ;#}u>oEGC)>e17C1*fVD}l;X|R^o^V>;6oQYRyZ1N8yfr^yM`BXxdT%d zEi*B9*}U)is%l&5u+6~~hIy{~Y^ORz>v)^uKmqK0ybOkBij^5wWd2%Z~-)z>k;xO5zLTsQ__Up)l}n$I~X z04WSq`eej_#gVQl6NZIHjHE50fGM-lAThs}`AN{6qHz#Z(`BCyk&pK_o}s0A|V1BsRruAq^*xqn#p#NHJYFaKqSE}!x;Qd&=LOy*liQmA|tK*fF0hvR9uFZy?Hh8seKPsRh;B6qY)0#?g zt|Ee)#Ci`33&bK!Vh}-S$T^L8t-rAK4md=mHwv{f11z0KbG5-&@Tokcm@jGYcLnE8!5A9_i?52Gy27sBY5>;R2WTrKh*Ke<% zhjo+Yh{(6-RF#ehyR>Ec#t}g$I zWoNy}6Y1cx7-^=P1+d9X$Cf-fzX(F;Z|ahb@orSE1)6Xsmw8n{mW_Qbk^CmMbn{E- z8@ox^F(81DpjNAI=?QHz_U=dB?*b|=DXf-t?M?8@&1>n(jaR_uhiK2)cPTz73;VhD ztIwae&IwMKnHCUQ0E7-j$Ecco5D(7uvP3`IpeAwiq;^Wvjk2y4(I)pHI|!YGt|ieX z2F7B1idWO~8t8RH#WrIjAm9c2biY|9CWc9S-rJTlT3QYtwg~yn8fmgRjhVP zN@1VpCjT3q`Wy09s-{$VW9h~Yw=DPXK`G!o6gdzr#(w&+$zVL=EJQTUc$dWCDn54_ i+LlGHIQjqg>wf@Eyl7t9YbVtJ0000l_dk{Y|NnK4gJYBOMk1TYK9rP@y+cE0NMv(LWRtyeWbeJl zIp53c{rNAxKXJRA=k?sz<8go7@AvDqfu8y`(wn3J09@15xN8IeQ1D+U04Dq_I2>*DrFZtph&Nom*H<+NzO|M`{i~%0jpRL~ zm{P0~Ng?H$97gggR-HUISb6h#Jwr}B!@2(JjN?}D{=4m*pshNmZNinhV)N7lY6xv+ znGl`WoKMu-R|*30FQW43h~AqSG7DH0=|H9Q$^5G=u_`}$Zy;$wO zEftczdJEYpFzNP#1fC_ZDy`jTIkH=+xrO>A5?K4seyr6;F*Mfs(SqRI&?`a{W0zNH zh_^j$Cu-#9w<<<$@^oF+i&qvu*kwKaoA=do`ynpZ?Z@NDeYe(v{)}A37uydXoC`>D zE&nt8rCpqut9AjOd*T-IooRL|H7kKqi70-0CbRrA<@VhNrBlSk&AFexR7bOgF29i4 z7n~D%)i1r=W&C5jq&TT9`-k7J8p->6dvY+$>w3$~-QV8lZpJx#%ZqE0ncYDFcQ4Kw z12m38ymMtYSA$pfU!)2VU*xAHKd1Ti{8iX{wL3@4bGWb5S_lFLmz#^4VZwDMNwlOAT(rd>Y^H_F4`{r1KiU2Z{CVi*&vKPgnVwti~Z)<+kd8yqQB5+2rk z?HdUpZ@Oqy6REB_0i^>kiU>}lFDKGY+TD#)mmP9^s+HV+~{+b>R;KahCExmIKR#V)&5;bn~4PS~Xp? z+kAbnDkyFEeU9N>y;&FT7u*pa}6%ct3}1+(26@89=(8Y*>KH(bqq{7r7U5zW)? z{K;s0-NwA{wYy+Op%$9jnXz1cU?p$iA$(n}G>!1g<(?7|R(`6@4APLlO1uvtOPY^!$Q(q{zL}Xl>Ab zCIo6RblZLXS}%>i_F$6T&2lOJ)XcS&SB3O1J9Oe68%IsL-Df1+o;i4XkR{eYL1ihd zo_$V^X;#|ZI2WFas{&G)(BZ#1-0Azfh-V08_Fqg^PW@m`&{o7J50n zI{nM1bXf>pEiL!11-tD#s))ju08X)Cki6Vr6M_e1+W>$9H1FQI_YAW6j;!K=Nk-w= zmP$nY8(D8zwjX59qVPMtDy@r#)-nllifT;W@RdUG^qA2YV@Ycb-QH>b(ieKXMK{0j z&3cy%^EKUlbXWZq2^}-@XZq_2bA~T8fAT_JkB5^5WRoA=q2k;*VEb!l+ zd9rb=I4a3x13^*uxY>0IEp(gLNiJ`lG`2^36u;bqqRA}mc6GGq) zC^Ud1ctuUg4e>fEw!T5!Vxa1h5E{))o^-eQzVs6NuN(A*n}PBV8Jh@C_X?!K;0WNv zUR&apMqZeGe%P5gHqZB8H@(8&W1@%tHoiXeclvJ)C=f=SwZD9#l5+pJEuH}S5L^ws zd**RgJZ2*{WzW1xqA*D$W==y6XP$FV_kazdJ~hY7GCJqJEie+raND!Zvm=8CT!Xx` zaauKOCiv&u@R8eKqc)a`p;Fw7Y#jdMGR&^K@yjV@W!K z!~dBVonKE|%Su<8ZK(TGu8IcoR3pqpNIJ|zOW%busptOV!)jAGl_zg8zxr@unQ)yb zT`pe1TB|AwfS?t=qY`7_9eeVBtL0t|^}`=`v`IXNDBP3i@otT0jL5C00#2OAW~*+W zeJUS5ynpKL2^h#wKus>62goT91mt~=lLx1_a3|w-3_@n@V0A|NXPR;W5+nM9+ViA~ z1_}ep%t>Y6-k=|^aF2Aa6-)4#_>{Ltr<9 zHpa9En?&?-C(a4S(fo2Z;zwXvb4HhbOJu$ds!%d;Jab#v-N*W~E0s+$^*Ia|n+#rK zM$o`lsO`JY`TAqcvE^eL*Qo#o4@5t6%p+g(+?jR)`?_AHAQ zBHoEPY?D^?n*XI>HiB}8J7^)}hCQ+7RjJQki?wMzWCo|}3;Y_JK%_t2?(Lp43RZ|y zV$4aNNi&!qZw?V;#tgD6AFI3;qqkB(a~ILuppD=ZQQ;HG5g zt~q+!G*M%V1O%3i*iukP9q5RW!u?K%AEL3j)uS-Lg6dkS{G&tSN1nsg5kLu1sp#{4 zWdtDO@zahv{^^Ci*Q(y5L%P=7`)o+q&2ZE`n@&Y&Rg?q_4h$NQ$@C|@JJ+glfeAp{ z(QAl`Sj?G9{u#d?ZB?(JU$+WiTN6^65GNG$&Y(j7E3>s`*2@v6s~>I!wR?5(5oGYhYt|U z=IT;C;Y_;t@U>a)kQ}f2T08*(MeICBF}b}tZ#Naw9H8*|{3n71Eio+L!J!W%gxnm++0WQ$_W1oRu_Ujkm25rNNy^0j?dZ4!- zDViz;0&$D~4huf&U&@4)Z^n2dH16c-c%VpK;+)=g!dhRgcpVHG;z;xG~L; z(5zelqjFxEl^dm|$_1xZM_a+(*n3nxf&w3(?F(fqTWl zAfD4Z-=s>DlFm(K%82Gv0O%H_d5gzsX3Ey<*k3|mBoVq1*VHA52V=Zi&Ka{f)0{Gf z2O6l6H!Lkx4!8D?Vs6pBO`#)p?_3^>FaZ{b`!GS25`b zH0l{_l$C$PY~&?>_0BzieS0WC?ArdUg+NXDE*v!rhbV~58eqqbB7k#77zDj2<-&s1 zPHS28Qoa_o`7>e&d|W@z<~o~w z3(#;)6|gM|dE{np`RA{AWqU3eh)2LQFhdHc<<)Ki+fxh`w~ z#1j5X>kE@b^P?uAy%(Is5ENvz{ge)P#}EGYgaiSjw!aBQXV=YN_z>wm1s6;OgG2YE zsUWDh9xt5i&(Hkegk_;H$Z2K_faIBx!Dpk4ufdSB5|9Y=MUOfVPw?dXQ7=Ty1O$bO zl(y@$Or@P-sMdHd+)IeDJlK#UoTh&4z?7BdnE#!8wtj0xvXx0S=7mQTuyZ!^W?N8D{?hR#6l(?&Xoyx4@+E z#ODHuAmT~#`Q$-_;Ddtwp~Rp}T-h#Zq2ZaAp6*BXW^p{;Tarx`S6@{?n!6a|y{k!;m#xgkJh2vvL zymr+;1?;R~9cz0kwDmqF@7oRFlSGSzJWbmhqenc9|6%F_Efk(e|BbdzvtDNcfF!JK z$Khn~)C(O@a2TW|)UcE&%c;!4(i6x(B+Rq_%-=Uz@%_U+UzN|1M)d#dLD}|Cj6S&< zakI4iv^LxOMaLVqbhJ(%bA@dasITVG2OH-tl$(VCBmt6X=We>`*$)39dIKQ5_MVNr z*u4o;)JUI+CJ>Kt_$F=Ibr`6bt@KToYKNT!93UJ@QXwzO7R(Lt1Guzx*6c&Xx~Z43 z;WRd2*g#aEfo=k-o8dqn0dLcv{x5>Z>%i-B@Q%U9@1n{FT`v5lIFlkP5rEFalWbnISC98b%ei?me^vC{pwG8wJBdv8;>Kr~(P zagLED3&^`>&3#!N{!{4cWZiERrW|yk6;x7+v*xmrGTG2lt{DeoM5HxWwMwmKo@Bz5 z?&>uyT|g8fJawT5{8Ybstc+?P2|6Ks@{HpK5M$3Sce(m@@9ot)55O+iD?XeuZl{?l zJZ@z|b2l#Og)wbUso1j%TurB&WcWZYTzi6V=T*uIWPr)xTkhl1ZM}de0rRS0)B!g` zLqBiVQl#Z{_00|s4+Q;vu_|ztTk3qb!0_XLJE=*satg#^FEpuM?5pmm0N=Kn0y6w? zl_MhmTki|y|GTQjyldZw#8&|HA#O7hc6_xS*d64_B_x6cO8-VX=A3xfKQ8fV%5fY6 z*aOJ#5X!DtTLQENdu5Vryog z0x<0|ny;%_T`k!P0e9m?7P6oN`BE+L5B@t=AbcMFLW&xp0}QO3nH2|Tx79)Z8xw(m zhF>Fu-GX6C!*JiP?g$FW7jEzp8nFU_f3f6o=HOxe@7$U6k<_{WLMSi^W%!lP^SV9E za8w>uxHC_7Vc$mX2;W39mR07!vii6>fp2Js3%0?5DF0h?@i{ug+mR<>3<3mQI*l3d zcCtd3v;7{aWV|6>lCtjRIV|z-NuPKYw$)isy#FX&f$u5)-`L1}_21YtYlVxKleg;& zc5%B2R zvFaE7%!NffYW^kv5{f5p)tmjXoXsR;P9B@Lf8In6oJpIW6^v=O4C}@ggc0Ls5CJaG z!AOz6$7b15$LTz)MLwtJn-pr+2H3Dg*=p6}8=_+v8#%f{i%o-~P(QaqBLM><4wE2R znCKVlM9nanFb>_9%KO}&U7a2#X}tjjH<@@#KK@+{AbaQ)B3AY1=1e?G#P&w0T1d;8 z#1C|vl#fmo?z6tdV)`_5+hG|oS`yFfrUxa4Yt-OI775pqe1t_6`T8MDMRz&rH6mkm zk`Oyy9snMS-YyT)=zEs)>*e%IbT!QLY)NOoFh_c)Mvm1?zwttzilq19QT>9?6zGw&-R3!u7%akW?HU^zkGwm<=O0$@2?`6 z$`CuQ%6ZZdl+PU2^lw~OSryj;c^X=NGt6&Bb#2H)$)>YXrtE@b`mpQz;mAAvibQ1C zf$*652o;p>T#RiXOA|e`{^we~Ns5)bMaPy>c%;u#5&k`M*ptCb{LQJ7_d12iVU^Ld z+Hz7<@bM@7S)2mWA-Zkc?+3f)R4IUN++b#IZ~)~q{Iq|GWuHygi{?gjL7{peY*gVA zP$A$OCroY2atyaV09GXNHETp2l`R+?shgQu`*FF#vGSp+LbJYf%jT$2>*SCi~O&U>v9$7}DlA&<9?w=1v3|K)(PhWx&9xJX76Fy}x0dC-0z!})ITdSb^N~Bpmtzr1?L_o@_F9l{J$epD$Z7ymrLRA5g9s}54Bqey^6`LSi zQv=CF`GHlw{naH=x+xy@(}}C3I;l#dbls^f4-mXD=#6fCFaF56`d^5O&W=D2=_3L6 zL!#-E8G#h?ZO=P-s+gy&3$7G^KK=`L#}i7}FUpIN2(0l~8XcXX!c*G2C_n1Pt*_f( zjq;E0|*mFBs1IF(=ds*_eW*7MsnBokJP?LPw(>-#*k~CQ1jl5P>dH?5qP& zIk=}j0z(VPcw$JvTAF5PO`lDs`qSZm^pFVPH~AyIY40KFjFKOy&OSn*Ozl3At9rsq zl8&KwF~^l2Ee{9c==2e@wGi_o~ZM z0X_A{OOBJ@7b7;c4_T<#>A7U7XBfhhQyN-%zHGI`Sw{go5JjCPKT+D*@z@F| zbZJo3I{<2_4JX_^7lM+|GGXoK*o7Yr8}JU=KO2LeHrRC;12m%&xzQGb`%54 zU()p;Qz7Xi5VR4cHh!>L&RZ9Wq^e}8T}X;K)t~*Tz7KQYoh_%m$T^KJ{Gkl>I~RRI zfL{9Ea!GriI)RA;*=O_JWibL}2y-yO$QHb_xOX^g$rK)%ML|+21-!Cr;3$}zq>}Vk zLA75vzA+VsQ|r#Y*%uMG4_gyKqkEfsx_~PxF(G1corYjHK%Ov13$A z*`EY99%$}6e?vVshjME94_!)CuuNv7rX)Xs<`Q&X5m zUKb55gpr5fJ`Etjqm|t1Li;$2CY%u)l%FUJE_7UP_PGz%zTs6znk0nmzh>jN4cXWI zPyrKE@zuCJhc-e89XzFRE`lxoJ?Un_qd5>Kds2-x$wNLI{JQbTbm+eR& z8sv5Y_pl}zcAqPd@Zjw|rAJ|Sq~K<5B00f{(-7y)iG}r2IPl1$G+9!nq+TtNK2f6W z#>qaRndp3rIh8>W1&p3(1(GvmktP{p{qMdxCGbmq6i0WR05Z*noX4dEq}6kXCMxG$ z3y&mls;=u6!jg>7?Qg(=xfStdMyAV34oq#BpCDh6In=CIw#6J$*o1(7QkS+5Lr_UkL*TfZ!q zvv1xH%mZLA(5@D}6Trjogp9#9yWri;zMy+_zJ33Rh4keiA?wy{RtBW4csLh?@#&wVe0T&Chj?#uZ2b*x2|G!V7|kwk!@g59c3ZEuS} zFCF-%jD?x~(%2vkC&Q`%v(aBFQ@^b|L@N^jG-=}(JnOWJ4+F&3@mpNKqFFL&QzRf0 z6leh*s44{kH7y`|uGB-6tG3>6wGX$xru6^A+4kd*->)biv8=753km^xawS2M-& zr352R#`*S(tq2T*_#?lB%ukAxyn}SKbbxs!WrY5X7m4ma%rp+-j&N%U3#K`jbBwd4UAQ9q&Qo(kki`=~B z@qq2kAUu!gHO(#a9ZDn$35OQw$=!l07*;BTe+af?1G&fFY~Q7c{oimS<#6w$pS%D0 zu!*`nMaUd481EOox?jqf7c#e~3OCgN@@SX^l`YnMpQ8oO8x}9}-QjPN5glmYhdUAC zukeTXr+qvNy{<iabQGh*0>o-> zOIE4>GGBs#wK&+QB~jPKydac`-5rH|0==ALJbus+D6<|>z%OzP*p^b;zsT z3I_Z=pVU}dG|FRyt>vHPrTWU~JNr-oA7pM03jlk=3H40uNPWDw@=ddCn0vXq33mGQ zZol5*&i0JK+l@2ldF<^FhO|*^@k+VF>Hp{vo9*bUO_8teJAC*c z^|nrVT4+i^#PH&ENWkDUnEMgH!Q)ESn8rN!XKT1$`sdEYNd+V2R?lc!37ltj6PFWv z*GI_CZ88@u-J?*m21U5GU+a;dvHF4ld~11g^EbWKrMkUhZXQ zP3-Nk1f%+5CEN~HVAXLp0)SPr#n-&;kpu>;@JzTQUAf&d>ULa^cu~xL*z7+K$@ptQ)@^PFz1gSx{iOTpUwf>v7)3Z(?P};F z^=&dNfjlokowqNt6{&2;TDHCfjS0w=dgDHXZ`|6+fA`kEoLm;{co*iqpHfE%#2(`3 zO%@bj65&32a!FSBdRLOck4Q4`B}47G(=C zoWuEBQp>fp2VER|tAs15^s8*5aVR}S@iYJ#_u+xGG<{S;P3n#K*f7P*qkW;2KEbO88PKC{Js+tv4e-d&4dW^IrT zAR;sB5^bxo2_1!MPE-ENpH%dJp=$IIwzrqjPJj-NrSZaDsyQ3h`oP9dc+tw-gNizxB>m%znOm5)jf+1EZ^Tf((*`kkp~P8Z|LLIbXTnZ30`Wui;vag zem~)E1;DBrr3IBe(c6arj6i->bISy7r*!(L&XZ*>c8b;0lsMpnqa;dfUo-DFVK@ma z25*o_0kF5@dFUlq-in=WpY6@%F>sn#e?JpiL+5@H^V2%M_+ci;^)Co4tC_=@f(v#5 zl>Q@n*8;}lpPZgxMRm=1m-;?-cVmgVZlh~&7H8#0;!q@EsdjA6&tONRilo3gO8_1A zH&hJU-_Q8MaNaX*t71f{+BrB!kB~A^cnpj1k;HFN-iCtw)g(wP5%9;{W!!;Vc zapAw(Bl|h}xcC8U4z3NURI=-k_35FaqO!i`4ZZjIMQ;xo-re<(0Bngd1DWf?XShF& zWCePdnrl!+g-d)U&(z&7XPEa`ZY}i>7&!e5<-lVge#~7hT$03TaKEIUO(|3^r` zS$|T-`qMhaiJ_;sqb^nkD-v4?U?7RU>nK9CQl2CmHwuZn)CC@-KEHL83nZ&+nnPC- zZhbT5itDnVlWms&2tk*16zCPD-#x}utaHpI=7L_t+<=$`m6Stt-BOqzyneN zKwiqdym<9vc#x1?@kKinFa>lX6&kl!aNDjv6B176TkqacCH@qE;uY)11VRkBEuq{Y zMPC6l4KN`EP1F8(u9R`ud^9)eK*FqLqF97wbAChl^t|Iu+dZ8xdI-@~?N~yf6!84u zw#d%;7vCw0ZCPKvYI_*RAkLg96=s+}7A4Di>f>Lm_FMqcLkM(jY^WBH)7Mt`;{Dx$ zw{crXgOm?sJ@uRx3G{a76Kse|6^eN{5DZxw_JY7GjyOQ?(SsJ_&LySg-aN+Iq?8uJ zzoUGweX!j{Zyy*_&2}slo$h=wnoLX8^%A88R=Ch=P9m95<+_O*S4ila(7@23)Hbfp zKQm;7+!fnd$dobt8iCC^$OkvWO^W6Gal_i0c;9nnVra7;Ui?73`d{0Yw}TiR>^4Gl zNjnw>{3jtiR}N+dAhKs^w`TiZHZP|*$?Ft_i168klXvEqmZ5U+M; z??inz0@997GC%y0maCoEQzQYx$^_#*TDH=+t%|CipZX49F)-lJC`7bLW8okYlfMBS z`;&Z5(NY#XMQqI-Y7M3p!{d0WtD;}TEaZi&aZ-KOUXdCUNJ8>XF+*b@{@+KGV((o| zq7BSLJ-1%((;YYe#a%mJ&`-D-#AV9~%u-{ld*?z!Q}JBi{#7_Z&@q?$2TIkO`D4pq z3Hk0eB~}?!A|4%$+`0iUaY(a9a8`KEmLdkX| zXS(gLLkKi!tC95Gu)R>qSY?^sRzGfuImb3RScv5l=s*4aEsKB$eI`ZOArFXFKMdC$ zh<9{>#^CjP3l2B?U4rg=ybGaO#+RpsslAih@e@vjvl;+{JzE>`KK4C>oC2J_t%TzF_=h?Eavp~za;|K ze=PdUE`Dk`7deIL<4ANx#PJiyN^F9Oi)zSy7Qk4Jc2Vs`bRawO94}7QDE{;JlLk4S zN{Kdg?AN;reiNkGVan(7{&}CbW_}EXDL>%MdVwavYEfV~E9&0GVKOei4LXtwroEv8 zxM~|fSUmjHsfVKHep6AyT#;@Q4Ja+sUs*Qbu7z#ZJvjVpo$W~&%3_H}{4!%Bt)o$$ zsxt>KvJtkr;xvQ8a6^fp=*MNcr0m+wFxq~H3ndaSGj58ySSn3;^Za(W2RMf~$}EhHWEy8+^7m!@I_o31ku113CcZ-c>Q+jN`n@v-fb z)iW$e_E2!e(?FL%sXpC_N#~jlpz~-==;M(a!1?4%Np71x=Oih^v+JJkrT*(E5uvN) zCfs^J7fFKd6g-&=|KmX7qj89<+cp*Gzu!S0_OevzXk2OVFqcg~T1*|e51`)SDKe?j z65Y5B6kl)QIgci8)k|xN**iO^;nkP3%dfKQ>QaCDUNJMpt#u{)&(!``X8^7n{q-l; z4j8yvO`6GiZHgBg2rGJeYi(zBvP0>lw36<%Ury}sT$A0SzVcx3?y-ypfoPk>C8bF# zz?DS6@~|tuho+!6KS(Kvip6a14HiS^2`Iv}H$&Vwj{}Pk(54$mU?l~4$_O)u z#Fw&NtPOai`1b2J_6_u1lqO-b@A6q4d%p|XE86%XN|~yfo2FDvx$KdkfXJ7-vTE$I zA9BJTt??L_^}!sR6#T~4dpaYj=Pp<$4vp#Vs;a@OxZ+Q}Fm6x&eLjXcY-Er@-y<-m zQFhKPhn&F9RCArP|Jp&4cgdS*qyZ-+J1pU#NKPB<*kX{pwp3dd#%sGC_3?I}5|d?A z9v=h+H=*kiC90gBt6xMoWk`O9<|eNM0VSh@;YOkFFSmNNb+uCfIWg5ydJ{=4C* zZP0uW=%hgcs%{0at8!vY@yIImEWiajFv1SNn+P59l!5>UAc4J<137gbdhxHtDN1Qw z@Hxr?H2ri$b1s4c!3^R*#`18LxakkEDsmtWfS}~~r`Mx_-++JQn_sk4@w+&Ew~0^R zw`ZKcCch#IcLh(yq4m~^kqnW{`p^+{ zZ`*ljoM@cGhv*}z{^gJKo2oo)C_t2i-W`-cLT{Y>=pb8b-=x?X-Yy9EQ%nYKsuhNP zbr&}I&MhpMe+!lO3@X-&@6W;AQa_>fAmyxhfm(u~n2P@Knm$imiK4%fL6UusvHKTE zu4^imo~h`Q(bC9%d7$Gys_Qu@%*3Z+Hb=g!#W_iTs}d1H?FHz9_xH(urkOjgXQR~c0oP}ieBnYN)lm~ZU0akYLE(S0|S}1}y z8+^i(3W1pFPEY2>_`u12g*M_d zfK5_?d4YFCyYCv7JBIHx2gRy<{k?b0-ISKm_ZC!kZA;f z{m6g>|G)8@x^H+;fI;K6cmR5b3bRV=7Md&)k4{)U16>Jk$cA4R`*2pAs@NDT_pbDR zRV&^LM>DmaUsaxt4s?Id73ry&W2nY!f_0a0nJmEkqx}YGb_@2XS4&Rz)$){xQi&8^ z-9%w`Z-1jRm&Uv+9F$?fbY~)DTt{4YrQgcvq2m5t;spA4lecS`DY2wb6DlJx?H&}V znlwEzoOpprCIJ;pO%xOE`MH15@254mtJlI<<5L9sIqX+KCSpnhuvIqb0#&vRHYC+? z&cOUhD~CzW&gLz$L{y#tR1J#ejbk01f>8Kzk-P@AE&-CN?90(V3b6&}X)fpVtu=#2 z@I`@e4n@hJO%SR~ywQ9OZVwCW6C<9ESZ%~_bHhJo%S7f}zR;K$7R?6Y4O?l9U5w@z zgoZLIXC+tZq4K3LkO;yl4s&WdNFq>aHUr z_uBawg*6aiDJ?Rq`uMwZ=JDsDA5&$Ms6{d1U@1f4oB(3 zmipzJ3N9R80jx~XxP0uwR8(cNPvLZ!T>B$0IJq$BqmaT005iLxiof>uWizFWhgypV z|9cA1RFH^%$m${ih{^{2;q>X!)3ZGo@JQm}&cD4}CI0?DL6kDw2%FxZ0&qKtaDPx| zpNB2*UX`}yr0Ll-d~Ar@;a7UMCXreYaM!cx?QVr8Aul6Tn9{uCE-I}jvJ{k9P%OxBHJgo_4WnN+(|vN2J_eR?_R$>1HUg?aD1TOt7R%}HjxsBnir#^gtZgGLi`@;ri%67*=qqP?)rir^a_t7o^5bU?;7R5pE5Ak`p2@ie;j# zuWES|!%Q#lN~&G>o-5IC6QyF8DC&5i0}^fkUsw>=?|8oazWM9F)x%)BSowqZarPt? z3$b*I4x0dX<$j66sx=f55KZ)lgS}eu(`)mpe0d6 z%JATqn9nLCUTYro!TuqFVD6GV+p);8bL7j5ar5Eg@$5d;9&v;L#?W(+H7@LG)Gp8w z$9036u;E_$Q_Y5pqwfA-~pd|jD&K4>=!GF5N)y+NKyY=y)Q3HuofF58Rey1dgu^C8)Kxd!v`H%sb zDc9eYXCLDb&v0f;WZ9#cVGTPf&ffwvw#&2?bGn0XtWrMPsHD+)dDDSifDR^z6wNLm zKP3XZd~I^N49!Ae>2B|Gs%6;QKfm3fa*_|dVG~%~>CU5Wu{T z66%P6fG=(mwzSbYs99nT5l#)&L_b(_^K2_fm}k--d;G5dt3YxacevM&cvbzpwP_l@ zu*uO91)qZA?qp=FbvuhGTs@ zW)i3aZv+{%?glSLdWi){Ud#XY;JuNBJ1mFcp}?s1!)^n#{Iw`w&3^TndEC2`u0|jb zdfRaBT#$tNA0tS!9)VP@xk`y6NnGUy5-A7mGA#uM(vYqKpAr+eG~UOSe_C#BfAbGu z{4)1Nr~0!;kI9c|0`zCU);bqW$2!VqwhL)>Ba2T|_ap?r4TiKh3}V0Rr``YZ83uWO z*kSI52#aJCR<2ftqRsi1Ak+^xnbt0r%|dfjgm7kTcQCQrO@o%IZs`YU)McgD;rZ&^ zd{l#u+IhUW<{E%!?LBO=kfPSNNHkL?KXHZUp&sg}0^ij(_G~%$*XbMMlz-Rh%GxV> zxW;Oc{9?DY{`VNh8>MdPto#-4{3%nEtMfKx{H_nU~#k z%d2a~g&mimFz)+#s>LcR;XPU; zyMHxybKFxzA-oV}V{Q%%$n3tdf(+H%eB;yQjcKr+c=+{&do=g;6};fZtFxuB^D1%u z4`RM-`}B9+S%ovw?uei%QmgI~ZxZawUwV8PjU)uvH4>~?sqXB^T0+SQ9J+mioyAx# zYgul@OCCtscn_D6TaDNEDG4#&vcuj}&W(UmPh5)dAJcsD|2X*^FVpDM z{#&U+N7cnI!P~(92)1^3YXqOGXF_+}-`VV`C9gGGwd!G*J0L)an=Or8JH;~JYoLhX ze`xcID-O@$Bx1@aeEH%m^{3ugi9?ZUv*8(R<624dN(wRL?`4bsscu-3x=GTA z*G~tVg{L<4r~_{Jo4w+6q)57yq8CQW7c zG5GkvrAQB{72$wb<~1ueA&Y0dpg_ZRxou_nO(=N~X$uKI71yspk>2%8Knp4MM+13v zls~!YuD$MgM{?2H$0NtXP6%V-5H&8x%toL{p;^(>7fy|hrZ9lr!0-^DkcKPqQ5sPI>#)ifEdsZVg0=HDOu8iJEC@eqSqZBos7`XKyj;j z-^tU4R(~#E7t6|60A*3#LwX`n`{ke7`E+?;T>_#y1Nkdq)dU1}#aQdcka!F=BoLyL zkpBQgO@#l`X3+`nyQJDk!iB5m?}-hP#gj5-fMAdn{un#D<3+n_X96G}%<+Dv!+ao0 ztmYjg!?4}4FwO_uVBMm$UD`81^(CTLDO|DJesC z3Y8c4qBgFdIO*eMI8*+Ns6Z*Uu#4|a3mqcRUle=00CXpsJ2TJ9Q4xdyYhXSZ=b|3G zas+myqnK6+WE~?KBGXbJXwOQopD!YheC~f@tWlb+x`4AvL1a}E$e_$5zt$|7hp3Y= zlK}c1gv^Cf*0kZcn$l$A^l_Y|5e=-8qhcBJ*e}vBu^d)9dFsLL09ph%A}TpOKl}(j zzle2WG4xhbpo2Z&KtcrRV4t~dYbd_m24wCMta$*e7xqgQxCB!zNeP$yA0vu4`6XA7&|E!pTA3Hj@sqOh745YP3U$^h`Guz#n z)rE>VMegFI19rBaLFc~x@@K}!TKSh!05CJG`CSpT)n@xEiM@|!pu@u9lPhT?$`sc8 z?L4D2`U8_bN$uRXZ1{gUE!`UQ1sQP{9=6)J8u~X?+W)jtRK~DC@fG`;K`-vyScgmG z;Hvv8^(v&GvXsE9>9V``+~|Euw4u`Obv6pO>l?Zsa7Lj6pkn7X*Q@3tFb=Q>dnSD_ zV2~^?+>GaWUq~3dBN%s-|qj9@yX2i>3a zp0p0N3@vr5oVX0BFB+P0Kb4^YUbUC0nrE2v%_=(>&4RoDgbMYP5#I6ZUJlN!;zg5K z?MfDVke8nDMCrBl(4rP0{hSDoU=Gjupz?d5FY5d=?U@Y9_R7lmf%Wfu2X|6B7&n{2 z-F}g@Hs4>FReWNA+O%enRw<%T^u+-YQNdyTXJwIs;>t}&H zOmFZMaukU!m%kK=><$O~s5~d=WMzr-Mwp12TejYVl*pI<#+P?&CrNmUTkh`!^^m|@ zrz0PC)`qc-zbm=tcga{6*lV;5^B~=Dr9gLV55{SiNg)^)Q*(d}D$E)PQRbU<<}N^g zPz~r{z$Uj#dj2IoWZ-eAh`>(o8yqeuJ-A)iaI1@`c z*HPM2Sls-Mhf}cK4rl&{AEOG^tsI^!JB(}RB9}Uc@19lG*M{jm0|siJKr4s0KW1$k zmE)Gotd_Y{3So0Cr*BIHl#cEMDTMXCExGz6FR+O-t3B;<04@~BR^izv|MWP~ajnYv zw(vp(iV<4b(&8%ICLHEA>-j_ss^@+xmmy|N4teEW{a#DAErFa6^xu6A$|5J}pe%cU zNY}6(iHjPxQ3w_33uC8O)Yrv`v(D>Mpt@aLuMe~Tc=85w#khx@M%)P`xQ~K{hHRm9 zzdUoH;yEXrCK@c>I{U1&d2sZZc(%~n&|Z1=&)Y_j#o^QO05-2u-6v*G z&ZvhD7p$Ap6aZzf(I#mTW5XU=uR3Wye}4JJg_>eXGR49&(ETE(%;C%q_162v-0yDM zqIh!u!vSXm<`Y=3J;q9wNb8<8wc0#m1YYT;BUU`SdkhaiHQYGF3+K4j74G9*no_KT z!0cw_-E_}T)VpBx=%s28+u3Z|7kGUSK{YYKx--0E%MWD1-4 z^}MirsWlXDY|*vO0vHC5zO1HcQkm5?zB4NakKsXvV_0*l4M01DJWgs`hy!VV0VcNE z`sGs|i++y`w+jT1b%V#LE{&3}b9v-31YP)LnZR{qA3|HLjJVE)r%=FHw|ThCZDkr_JH~C!l|dmoPGEJ;N^jRVoNlB9R!R=Rh3C zevvS(jU*%xTo+`L(Qa~DT3vfi;3WQFplbJ7REwiS+T{70=ZDh-0u_Gf<)9^5Am-sXzmx>%-YE@qi- z(Y^#hVv}h7Tb_%?n@oqk>c|Rk9ocy=f%{t8(iAEXp_`3McV|KmeLb#9pQ`kBWavPxo9 zveMO8X9pzuHQ!M?q>wCl$D_LiI&y|hC1Kw)i)^@L;!9oucSiqqAHE^@SbP?!Tb+H; z@xw4@h0)=p-w`@VQa0HT-0LR19&dVNO8`LHEg;TW*G^rL$U8qzv|rK`il!y8w&E21qp5$f@j)2MnS)=!>Op z5By0GTQdb1T|cr4kBqJ5pxxM{0AG;mLn5dlmzLO*UJ9+%qplkulmSE8mpbxKqbyYZ z|B;Uv0%$BY@U-_Bm6l@yssrrFNx8l?1I0P7jljo2#?4$46*{jXvnawB3`Ki=QcEqj zC|BxI0&OfHeA{`0Ia~5*w7Gwnr#o;C=={HG&ix&#?T_Po?*=m!CUPW~HimIMu0s-M zOUfXZ4l2qaxs|>yxs;>YgD4`mG>8=CnoEjuYY=fFliX4vm&&a=8o4CCYxkV*4Vk`iR$VxYz=}oG6*k#Hz5Xb$yW>@>9(%H@=w-T$IN1mg$sh4K}g6y zk?+<#L8ynHZXq%9~DRbb|S9no`Pz|dd)lk0^nQQ z&kU{gw{?z@4H8c(tyT);97oLw-_c-Gk z$6rQ_bv>GM?Ynfs)XZRph>;Pb+{mn2jla4I@Ij4qNse@d55iIl!(osJHkF$9f;#5ykslNe*gOz*BN6W72iwi8Fdxo{nbrMrf$NYIiFovef#5Cw>DfV>rVmqhTR4@F6v zpJWkmVl8=OC9YE78MNW(@IbeALUhplgNWTZPQ=rhi4-XRkZk+b(2|bJ;G+Zj$KNZx zix9--K}a@{ws%((P$UgvLwOgkkYF?0d~2X$LP4w|I5s6|kgHr$gzQJt)7g7H!;_Y;C{e6eQxNeZzbe9T%2Q=qXKzQE7PA%5nBc!~3eBN9_(IPy>}K zSUC9MABZEqhP^5iCuazz0n3HbV=?dTO~4y}s$X1L5^*J?e+;GfD4zEQNPdN}xx2F> z9{`p?Q(Y3zFLC9UcPlSBs>T4LZh4(Urwr&8(8G^`CDtwKdg=ymrlgH2jEi}iYee~$ z%YN{g78!6hG};pgW<@)tZF%*o@23y{G}6js)=E-RCU*S1GOr>?j#XAigiY%~z^NP`w)rUL6@UD6g>D5S?E} zg0i=U)HzvErEDSrTF*%(u|Mi7$lPcEHTw1p>7eunZYRwOKi&~)Uj!p1r(ty=!*iJ` zjYZqoqa=tWaeWBqY)q&DMLj$pFywWXrqDQ?1Z2BMQ`Axk1Hit<_?U7Zwyb#7yi(Ob*F-NXv2AZ_gKOCV-2N3*c-5%p*8G z;fo;%OP+->!`3-kEyi8}j}$=an|@?i?7z|?!D-2$K!@*V@M%~2auIoS*B8>kKJjqT zj}!>TY!=&ge$UPnc)C2A$yPFV#<6pxtqJGVoN7M|_BJo|TI_28T7oZ~xA-PO2ZXUh zv4%Je>D`5rei}Pm8WV2pc^^!JG`qGJY~|N0alR>eRm$M7kVQc11^f^&lgK_l+cw9T z?sPPrlm)jUw+|XjS)hsXzD0BCz*xd-`j-+(7;EJJQXhuE!|IpMMUzJs1zEQT^nq%p zu00}@pQ3q)iyn^s77e9*uhY6M8Vl?q+!W78(WqaZrg0wQOj-0hxo27-UF~6$l^|IDbaIKt)u|H(+5HsfGjtk^hbjhJ%2sU&dFEoCNr9_o zI!W>ucosO6b0A{8>oVrvT$q3#N>+F z1rcxKS+IrE55R10rsd2j6G{#^rffzQEBooA!lZn;|C{pGhVmo`#^W7L?kH1q^~Gx} z=*hAOfwj1%4Bc5UZv7Ugw{AYv5)9h;XkK+RuBLE#o@xSoTHHo+7@ibU>f4rWW`9@9 zy>00dY0$L#l$%C^jGY)*7MUN>4I5G!<9!9HhJT$*mPFAlZ8siOGe&v!4E0!LGYC`t zk^wd1{qGsMQr5#84_G_^vK1V-prF5#5`I;+w@{=4OPU!i*Y#D-6Ef-bWj)PmuTMSm zH-G&}u!+#RxUe@V#G>eH(c&;B!n&{{)g>=7qET*~ zeAjw*CdQ$p%BQ}%c>h_+n3Hg1+lHrgWSWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6 zwD^Ni=!>T7nL9I?X}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8re zhoBb*p;u8ID_yBf0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J z`jH<$>RKN5V(7OqK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYv zwjAKwmYb0gKL(K8-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z> z!FI&AHCpoWI|RUqx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVT zrI(b06~u#xf1yS}_UGdMvD``!0~u->P=lA4?YN`hilQ z|3tHka)7T{2CGqwjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^ z7T9R1gAN8V6s;5)ieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2b zW$~+pTw@bIek?ZvKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L z_AC5qq~L$#SMj%U$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6= zb6>{xYV#Ue-+LB$7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re z4r3qYr~6#KE>;1F`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+ z5K}u-6REM(K@W$srgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5 zh^QEb$V`rCQ-|7ZS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX z2i^rZ^Mu;6+rb@?NPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV z0id6JRRdfL?*IS|B}qgvb`*XEiP!Vg4KW^qiroXE({bC zN}XzLs~u>^w$o*5tFlCvp`(Aaovt$#?YI@uPy{=UR*Tgtt{@1N5ds7xBq4cZ&wKCN z`a3uI!h0`o``&x8nJE|Jx7_>Pdw#!r?>Xn5dmqvHbe@6#YX-z;fxc{OLnV2fmneo& zL#DXUG|h?lD;7eyxP9EKxIc@((V3P1{+jynJK{u0W zECj&INeG{CIe~|pG#PayHo@hpNbf8`g5Ky4$O%VEby1!?0$K4P0 zrt*2BG8q$4(YStz=@9E7;4BFmJwB!hBZA35Tlu5PPey(5$M(k5Wiw);v|C3h3% z=yy1Xd=d@rcV9xbIZmrcRqx$l_@c;M=;cR&gnth1+?B84R%)|C_|j zd)#D(w0(vl?&_$2V2@ovY!guN+=GkB>3ED3rBrHbyDg4Ed1+k?qmwlK+ilC%?zGc{ zEdnaGt-FmB$D` zL;xf6j`n418&i=nB?8K}ZMarA=ee64jM3v)r$&5N_8ZGpHu2Bjr2;o*{$fRN(SZi6@te zU0%v@U`>Rv$ON1X4N_;YpSnW#DdS!ekFSY`#Xm;2Qf?L>bF&kMhgTl2)m z4byaCybnjmM@D8!4~mllh9&`DUvV+rIPntte9=Uz^cGOQ(@jn>G!S)^8_+}48t9`B z{HJL9rw3_QYZFM*$gN;l+f54UHH{93smwlIzp6Rb=W$1XPR9LkGJIwLj!p)Nd)$jP z(aMYF(29$$rs)NxacgtH*Dr8-s36}%)ALK|wyCq|jWfq-)&7_0Lw^fKN?dVc*NKi3 zIc}dG2;GkYD`ORkIRYwotoxjyiTChhU~(w8eQroUZxXGY*zU>|hF z?`JQi3QQSRlC~126=N}kxF^s%g9vJhocBk3~h<Q5 zJuaR!gC@Xw*fx>~#xN$up)84(U=#u55OtZ%dmf^zFJC~_=&@|43-d~7a&8fvQJd3% z1;JDRadpu$MG#QBb;Bf-x;ovpJ!|}HeATpU>dfeNMm;z8chRQ*yhcCVvy+}~-bXxg zk|nkRJf#f$vzvx7&6OC#K8~;}PKQ}bE@x4?%Um9s-<>{>T*G!fteuG4{avke`&)md zqkWyE;NK&M-=WikJ@nI>>mtgJ4k=$GvAwUgj9-%0%bm-+(T+M{?@TOwkt03y8s!L(Z3+Yl2c6I3#x&o`h zWHb77pqGC1!44Y422on8!fGdhTI_0AV;x!iLMatkmx~9$S`^9iQK7m3{s#C-%{%gS(*ld$I>! z2vcGmZfJx6!>bP}ni51<6{|o?jMT0U1S<-&vxEbImk^hSwOhij353^irS0OTDHL7|W?Mz$Mu(C$s-ngVvS5>xbR%K=`Yv&rf^L zw$Sd5W*PW66YN8sSp;r13OTX8+RIq2S0e=Yk5FIPOtTG6$&}RLTh%aS$-mlqVn1y? z@sV89Gx*NXfQl*0Bc^QS zC%y8hQsD>mK|?1?E%4%=ha<%1kNbi>Kx}15zrck%D{=6Y6X$0&4f!8U66 zF*e2+{#^tC8tES*1m42OQtTvFf_o9hPL^1kZ=7`_`Ev4U08>V8f`B}Bq*y0hUQ|iH zu3bzMkv|2_(l;--ind;R2UX$Tb}TSj7{&x_5@T3iM6f;Z%xi(XuU%h@egBzu_5gVp z^M=N02s*!=u$;b~+8~|}*y1dx($;cWa zJU`WYV1jBhc6QdSeLDP`b4t*9YZ}jjDO>Iu6VL{CweiFO`oSgFST)7H&cveW@p;Ro z73ft%a&v?uzwy%SlF8B$VzTUOsNq_nr?4D+HoA>bV;wr^73{4Yu{#aeeEqrU9coWO z8CpV=V)KiM7KPTJ2LDcaoh-pKx; z?TWbffrT-}`ZhudS_S&I{Ieg*(19J58|)s1VFzbddy{mf=ECl?OPg-$QUi3)`_I!G z?Z@nIi48Xj4188#efzDeUydb5Oai!|_r^Kcb8c9h=rpOkU@ zshH<>lo!VrUur!p!M~1r(hY*hqjai%!077x-oTDGV+I@(%7sIa3vmeYMG)XjCsM?o zoEx@(F5&>ZB|Zn*oHtC0;N|gqZk(Mc-bdtc*-_{aUJ$(u@cXbh;=Hs2AlwUz&~TXY zW*nv*rTnbXkdOc_gu_t}39sj8>28y==~AUjYoaGzRO0r+)yBUN?riA3MN& z<=*Fg1-2@gBy5Y5IT(Bxho$aKRL^KXAgZ+6C|DZ`_FaX&wFT*%6k&$Bw>etKWH8W< zK>tu&5YL>?(}ovCY)PCpy-<8UDnV8punxV-vX9D)dXaPlaCzQNayrd_kjpUxr!u3e z7+;Ul<5TsIHBH>mxqMYp|2!oX%@v_wy{Q|=?D_|vB|Qw@)Qn>+YbxMbwv-6qf~V_N ze=M+d4iXMa)50&uQDT_@{;&vYOIX%aMN63guCT4H;Q&au2@UOLB{N=J(jxoi=@6}Qzl91V4;w@^@hOdd$gg3_`ha70AohFBl({9mesWK4k7P{sCj*mqZc4D3r_DZKJTMz)UB^J!6> z{{^{&5O@a(<5z7<*F=Q2EII66vqpf`Fo?kZyTSpLr8ps4Gqe~%Fq)6p^T;qb@OVxp$1tv)|IKJMFjr>Ch(Z7ix=BqA6d%tCI!+=$HHm{Zl*{m~WU4>6=D$em5 zlMJCv!EXvHa8RMdREB;z3X)U+_2ajJZHnnU85mSfb>Dtp)_xlpQ=s!N&odwy_%9R- VBms$R% - - - - com.apple.security.app-sandbox - - com.apple.security.files.user-selected.read-only - - - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/Info.plist b/other/EspansoNotifyHelper/EspansoNotifyHelper/Info.plist deleted file mode 100644 index 6b44964..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper/Info.plist +++ /dev/null @@ -1,36 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSApplicationCategoryType - public.app-category.utilities - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - Copyright © 2019 Federico Terzi. All rights reserved. - NSMainNibFile - MainMenu - LSUIElement - - NSPrincipalClass - NSApplication - - diff --git a/other/EspansoNotifyHelper/EspansoNotifyHelper/main.m b/other/EspansoNotifyHelper/EspansoNotifyHelper/main.m deleted file mode 100644 index 68731bb..0000000 --- a/other/EspansoNotifyHelper/EspansoNotifyHelper/main.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#import -#import "AppDelegate.h" - -int main(int argc, const char * argv[]) { - AppDelegate *delegate = [[AppDelegate alloc] init]; - NSApplication * application = [NSApplication sharedApplication]; - [application setDelegate:delegate]; - [NSApp run]; - - return 0; -} diff --git a/packager.py b/packager.py deleted file mode 100644 index 03e6510..0000000 --- a/packager.py +++ /dev/null @@ -1,156 +0,0 @@ -import subprocess -import sys -import os -import platform -import hashlib -import click -import shutil -import toml -from dataclasses import dataclass - -PACKAGER_TARGET_DIR = "target/packager" - -@dataclass -class PackageInfo: - name: str - version: str - description: str - publisher: str - url: str - -@click.group() -def cli(): - pass - -@cli.command() -@click.option('--skipcargo', default=False, is_flag=True, help="Skip cargo release build") -def build(skipcargo): - """Build espanso distribution""" - # Check operating system - TARGET_OS = "macos" - if platform.system() == "Windows": - TARGET_OS = "windows" - elif platform.system() == "Linux": - TARGET_OS = "linux" - - print("Detected OS:", TARGET_OS) - - print("Loading info from Cargo.toml") - cargo_info = toml.load("Cargo.toml") - package_info = PackageInfo(cargo_info["package"]["name"], - cargo_info["package"]["version"], - cargo_info["package"]["description"], - cargo_info["package"]["authors"][0], - cargo_info["package"]["homepage"]) - print(package_info) - - if not skipcargo: - print("Building release version...") - subprocess.run(["cargo", "build", "--release"]) - else: - print("Skipping build") - - if TARGET_OS == "windows": - build_windows(package_info) - elif TARGET_OS == "macos": - build_mac(package_info) - - -def build_windows(package_info): - print("Starting packaging process for Windows...") - - # Check Inno Setup - try: - subprocess.run(["iscc"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - except FileNotFoundError: - raise Exception("Could not find Inno Setup compiler. Please install it from here: http://www.jrsoftware.org/isdl.php") - - print("Clearing target dirs") - - # Clearing previous build directory - if os.path.isdir(PACKAGER_TARGET_DIR): - print("Cleaning packager temp directory...") - shutil.rmtree(PACKAGER_TARGET_DIR) - - TARGET_DIR = os.path.join(PACKAGER_TARGET_DIR, "win") - os.makedirs(TARGET_DIR, exist_ok=True) - - INSTALLER_NAME = f"espanso-win-installer" - - # Inno setup - shutil.copy("packager/win/modpath.iss", os.path.join(TARGET_DIR, "modpath.iss")) - - print("Processing inno setup template") - with open("packager/win/setupscript.iss", "r") as iss_script: - content = iss_script.read() - - # Replace variables - content = content.replace("{{{app_name}}}", package_info.name) - content = content.replace("{{{app_version}}}", package_info.version) - content = content.replace("{{{app_publisher}}}", package_info.publisher) - content = content.replace("{{{app_url}}}", package_info.url) - content = content.replace("{{{app_license}}}", os.path.abspath("LICENSE")) - content = content.replace("{{{app_icon}}}", os.path.abspath("packager/win/icon.ico")) - content = content.replace("{{{executable_path}}}", os.path.abspath("target/release/espanso.exe")) - content = content.replace("{{{output_dir}}}", os.path.abspath(TARGET_DIR)) - content = content.replace("{{{output_name}}}", INSTALLER_NAME) - - with open(os.path.join(TARGET_DIR, "setupscript.iss"), "w") as output_script: - output_script.write(content) - - print("Compiling installer with Inno setup") - subprocess.run(["iscc", os.path.abspath(os.path.join(TARGET_DIR, "setupscript.iss"))]) - - -def build_mac(package_info): - print("Starting packaging process for MacOS...") - - print("Clearing target dirs") - - # Clearing previous build directory - if os.path.isdir(PACKAGER_TARGET_DIR): - print("Cleaning packager temp directory...") - shutil.rmtree(PACKAGER_TARGET_DIR) - - TARGET_DIR = os.path.join(PACKAGER_TARGET_DIR, "mac") - os.makedirs(TARGET_DIR, exist_ok=True) - - print("Compressing release to archive...") - target_name = f"espanso-mac.tar.gz" - archive_target = os.path.abspath(os.path.join(TARGET_DIR, target_name)) - subprocess.run(["tar", - "-C", os.path.abspath("target/release"), - "-cvf", - archive_target, - "espanso", - ]) - print(f"Created archive: {archive_target}") - - print("Processing Homebrew formula template") - with open("packager/mac/espanso.rb", "r") as formula_template: - content = formula_template.read() - - # Replace variables - content = content.replace("{{{app_desc}}}", package_info.description) - content = content.replace("{{{app_url}}}", package_info.url) - content = content.replace("{{{app_version}}}", package_info.version) - - # Calculate hash - with open(archive_target, "rb") as f: - bytes = f.read() - readable_hash = hashlib.sha256(bytes).hexdigest() - content = content.replace("{{{release_hash}}}", readable_hash) - - with open(os.path.join(TARGET_DIR, "espanso.rb"), "w") as output_script: - output_script.write(content) - - print("Done!") - -if __name__ == '__main__': - print("[[ espanso packager ]]") - - # Check python version 3 - if sys.version_info[0] < 3: - raise Exception("Must be using Python 3") - - cli() \ No newline at end of file diff --git a/packager/mac/espanso.rb b/packager/mac/espanso.rb deleted file mode 100644 index 6e7f477..0000000 --- a/packager/mac/espanso.rb +++ /dev/null @@ -1,14 +0,0 @@ -# Documentation: https://docs.brew.sh/Formula-Cookbook -# https://rubydoc.brew.sh/Formula -# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST! -class Espanso < Formula - desc "{{{app_desc}}}" - homepage "{{{app_url}}}" - url "https://github.com/federico-terzi/espanso/releases/latest/download/espanso-mac.tar.gz" - sha256 "{{{release_hash}}}" - version "{{{app_version}}}" - - def install - bin.install "espanso" - end -end \ No newline at end of file diff --git a/packager/win/icon.ico b/packager/win/icon.ico deleted file mode 100644 index 1d1c06c7ef5bf408ce91222819c303d8c22201a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28522 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 -// Homepage: http://www.legroom.net/software -// License: GNU Lesser General Public License (LGPL), version 3 -// http://www.gnu.org/licenses/lgpl.html -// -// Script Function: -// Allow modification of environmental path directly from Inno Setup installers -// -// Instructions: -// Copy modpath.iss to the same directory as your setup script -// -// Add this statement to your [Setup] section -// ChangesEnvironment=true -// -// Add this statement to your [Tasks] section -// You can change the Description or Flags -// You can change the Name, but it must match the ModPathName setting below -// Name: modifypath; Description: &Add application directory to your environmental path; Flags: unchecked -// -// Add the following to the end of your [Code] section -// ModPathName defines the name of the task defined above -// ModPathType defines whether the 'user' or 'system' path will be modified; -// this will default to user if anything other than system is set -// setArrayLength must specify the total number of dirs to be added -// Result[0] contains first directory, Result[1] contains second, etc. -// const -// ModPathName = 'modifypath'; -// ModPathType = 'user'; -// -// function ModPathDir(): TArrayOfString; -// begin -// setArrayLength(Result, 1); -// Result[0] := ExpandConstant('{app}'); -// end; -// #include "modpath.iss" -// ---------------------------------------------------------------------------- - -procedure ModPath(); -var - oldpath: String; - newpath: String; - updatepath: Boolean; - pathArr: TArrayOfString; - aExecFile: String; - aExecArr: TArrayOfString; - i, d: Integer; - pathdir: TArrayOfString; - regroot: Integer; - regpath: String; - -begin - // Get constants from main script and adjust behavior accordingly - // ModPathType MUST be 'system' or 'user'; force 'user' if invalid - if ModPathType = 'system' then begin - regroot := HKEY_LOCAL_MACHINE; - regpath := 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'; - end else begin - regroot := HKEY_CURRENT_USER; - regpath := 'Environment'; - end; - - // Get array of new directories and act on each individually - pathdir := ModPathDir(); - for d := 0 to GetArrayLength(pathdir)-1 do begin - updatepath := true; - - // Modify WinNT path - if UsingWinNT() = true then begin - - // Get current path, split into an array - RegQueryStringValue(regroot, regpath, 'Path', oldpath); - oldpath := oldpath + ';'; - i := 0; - - while (Pos(';', oldpath) > 0) do begin - SetArrayLength(pathArr, i+1); - pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1); - oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath)); - i := i + 1; - - // Check if current directory matches app dir - if pathdir[d] = pathArr[i-1] then begin - // if uninstalling, remove dir from path - if IsUninstaller() = true then begin - continue; - // if installing, flag that dir already exists in path - end else begin - updatepath := false; - end; - end; - - // Add current directory to new path - if i = 1 then begin - newpath := pathArr[i-1]; - end else begin - newpath := newpath + ';' + pathArr[i-1]; - end; - end; - - // Append app dir to path if not already included - if (IsUninstaller() = false) AND (updatepath = true) then - newpath := newpath + ';' + pathdir[d]; - - // Write new path - RegWriteStringValue(regroot, regpath, 'Path', newpath); - - // Modify Win9x path - end else begin - - // Convert to shortened dirname - pathdir[d] := GetShortName(pathdir[d]); - - // If autoexec.bat exists, check if app dir already exists in path - aExecFile := 'C:\AUTOEXEC.BAT'; - if FileExists(aExecFile) then begin - LoadStringsFromFile(aExecFile, aExecArr); - for i := 0 to GetArrayLength(aExecArr)-1 do begin - if IsUninstaller() = false then begin - // If app dir already exists while installing, skip add - if (Pos(pathdir[d], aExecArr[i]) > 0) then - updatepath := false; - break; - end else begin - // If app dir exists and = what we originally set, then delete at uninstall - if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then - aExecArr[i] := ''; - end; - end; - end; - - // If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path - if (IsUninstaller() = false) AND (updatepath = true) then begin - SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True); - - // If uninstalling, write the full autoexec out - end else begin - SaveStringsToFile(aExecFile, aExecArr, False); - end; - end; - end; -end; - -// Split a string into an array using passed delimeter -procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String); -var - i: Integer; -begin - i := 0; - repeat - SetArrayLength(Dest, i+1); - if Pos(Separator,Text) > 0 then begin - Dest[i] := Copy(Text, 1, Pos(Separator, Text)-1); - Text := Copy(Text, Pos(Separator,Text) + Length(Separator), Length(Text)); - i := i + 1; - end else begin - Dest[i] := Text; - Text := ''; - end; - until Length(Text)=0; -end; - - -procedure CurStepChanged(CurStep: TSetupStep); -var - taskname: String; -begin - taskname := ModPathName; - if CurStep = ssPostInstall then - if IsTaskSelected(taskname) then - ModPath(); -end; - -procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); -var - aSelectedTasks: TArrayOfString; - i: Integer; - taskname: String; - regpath: String; - regstring: String; - appid: String; -begin - // only run during actual uninstall - if CurUninstallStep = usUninstall then begin - // get list of selected tasks saved in registry at install time - appid := '{#emit SetupSetting("AppId")}'; - if appid = '' then appid := '{#emit SetupSetting("AppName")}'; - regpath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+appid+'_is1'); - RegQueryStringValue(HKLM, regpath, 'Inno Setup: Selected Tasks', regstring); - if regstring = '' then RegQueryStringValue(HKCU, regpath, 'Inno Setup: Selected Tasks', regstring); - - // check each task; if matches modpath taskname, trigger patch removal - if regstring <> '' then begin - taskname := ModPathName; - MPExplode(aSelectedTasks, regstring, ','); - if GetArrayLength(aSelectedTasks) > 0 then begin - for i := 0 to GetArrayLength(aSelectedTasks)-1 do begin - if comparetext(aSelectedTasks[i], taskname) = 0 then - ModPath(); - end; - end; - end; - end; -end; - -function NeedRestart(): Boolean; -var - taskname: String; -begin - taskname := ModPathName; - if IsTaskSelected(taskname) and not UsingWinNT() then begin - Result := True; - end else begin - Result := False; - end; -end; diff --git a/packager/win/setupscript.iss b/packager/win/setupscript.iss deleted file mode 100644 index 6e3ff13..0000000 --- a/packager/win/setupscript.iss +++ /dev/null @@ -1,66 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! - -#define MyAppName "{{{app_name}}}" -#define MyAppVersion "{{{app_version}}}" -#define MyAppPublisher "{{{app_publisher}}}" -#define MyAppURL "{{{app_url}}}" -#define MyAppExeName "espanso.exe" - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications. -; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{0E3D83CE-A644-4E0E-8487-657C7ECF6BF9} -AppName={#MyAppName} -AppVersion={#MyAppVersion} -;AppVerName={#MyAppName} {#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DefaultDirName={autopf}\{#MyAppName} -DisableProgramGroupPage=yes -LicenseFile="{{{app_license}}}" -; Remove the following line to run in administrative install mode (install for all users.) -PrivilegesRequired=lowest -OutputDir="{{{output_dir}}}" -OutputBaseFilename={{{output_name}}} -SetupIconFile="{{{app_icon}}}" -Compression=lzma -SolidCompression=yes -WizardStyle=modern -ChangesEnvironment=yes - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -Source: "{{{executable_path}}}"; DestDir: "{app}"; Flags: ignoreversion -Source: "{{{app_icon}}}"; DestDir: "{app}"; Flags: ignoreversion -; NOTE: Don't use "Flags: ignoreversion" on any shared system files - -[Icons] -Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\icon.ico" -Name: "{userstartup}\espanso"; Filename: "{app}\espanso.exe"; Tasks:StartMenuEntry; - -[Tasks] -Name: modifypath; Description: Add espanso to PATH ( recommended ); -Name: "StartMenuEntry" ; Description: "Start espanso at Windows startup" ; - -[Code] -const - ModPathName = 'modifypath'; - ModPathType = 'user'; - -function ModPathDir(): TArrayOfString; -begin - setArrayLength(Result, 1) - Result[0] := ExpandConstant('{app}'); -end; -#include "modpath.iss" - -[Run] -Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent - -[UninstallRun] -Filename: "{cmd}"; Parameters: "/C ""taskkill /im espanso.exe /f /t" \ No newline at end of file diff --git a/src/bridge/linux.rs b/src/bridge/linux.rs deleted file mode 100644 index a7f40e3..0000000 --- a/src/bridge/linux.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::raw::{c_void, c_char}; - -#[allow(improper_ctypes)] -#[link(name="linuxbridge", kind="static")] -extern { - pub fn initialize(s: *const c_void) -> i32; - pub fn eventloop(); - pub fn cleanup(); - - // System - pub fn get_active_window_name(buffer: *mut c_char, size: i32) -> i32; - pub fn get_active_window_class(buffer: *mut c_char, size: i32) -> i32; - pub fn get_active_window_executable(buffer: *mut c_char, size: i32) -> i32; - pub fn is_current_window_terminal() -> i32; - - // Keyboard - pub fn register_keypress_callback(cb: extern fn(_self: *mut c_void, *const u8, - i32, i32, i32)); - - pub fn send_string(string: *const c_char); - pub fn delete_string(count: i32); - pub fn trigger_paste(); - pub fn trigger_terminal_paste(); -} \ No newline at end of file diff --git a/src/bridge/macos.rs b/src/bridge/macos.rs deleted file mode 100644 index 830e994..0000000 --- a/src/bridge/macos.rs +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::raw::{c_void, c_char}; - -#[repr(C)] -pub struct MacMenuItem { - pub item_id: i32, - pub item_type: i32, - pub item_name: [c_char; 100], -} - -#[allow(improper_ctypes)] -#[link(name="macbridge", kind="static")] -extern { - pub fn initialize(s: *const c_void, icon_path: *const c_char); - pub fn eventloop(); - - // System - pub fn check_accessibility() -> i32; - pub fn prompt_accessibility() -> i32; - pub fn open_settings_panel(); - pub fn get_active_app_bundle(buffer: *mut c_char, size: i32) -> i32; - pub fn get_active_app_identifier(buffer: *mut c_char, size: i32) -> i32; - - // Clipboard - pub fn get_clipboard(buffer: *mut c_char, size: i32) -> i32; - pub fn set_clipboard(text: *const c_char) -> i32; - - // UI - pub fn register_icon_click_callback(cb: extern fn(_self: *mut c_void)); - pub fn show_context_menu(items: *const MacMenuItem, count: i32) -> i32; - pub fn register_context_menu_click_callback(cb: extern fn(_self: *mut c_void, id: i32)); - - // Keyboard - pub fn register_keypress_callback(cb: extern fn(_self: *mut c_void, *const u8, - i32, i32, i32)); - - pub fn send_string(string: *const c_char); - pub fn send_vkey(vk: i32); - pub fn delete_string(count: i32); - pub fn trigger_paste(); -} \ No newline at end of file diff --git a/src/bridge/mod.rs b/src/bridge/mod.rs deleted file mode 100644 index 3c6b412..0000000 --- a/src/bridge/mod.rs +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[cfg(target_os = "windows")] -pub(crate) mod windows; - -#[cfg(target_os = "linux")] -pub(crate) mod linux; - -#[cfg(target_os = "macos")] -pub(crate) mod macos; \ No newline at end of file diff --git a/src/bridge/windows.rs b/src/bridge/windows.rs deleted file mode 100644 index 6866cbe..0000000 --- a/src/bridge/windows.rs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::raw::{c_void}; - -#[repr(C)] -pub struct WindowsMenuItem { - pub item_id: i32, - pub item_type: i32, - pub item_name: [u16; 100], -} - -#[allow(improper_ctypes)] -#[link(name="winbridge", kind="static")] -extern { - pub fn start_daemon_process() -> i32; - pub fn initialize(s: *const c_void, ico_path: *const u16, bmp_path: *const u16) -> i32; - - // SYSTEM - pub fn get_active_window_name(buffer: *mut u16, size: i32) -> i32; - pub fn get_active_window_executable(buffer: *mut u16, size: i32) -> i32; - - // UI - pub fn show_notification(message: *const u16) -> i32; - pub fn close_notification(); - pub fn show_context_menu(items: *const WindowsMenuItem, count: i32) -> i32; - pub fn register_icon_click_callback(cb: extern fn(_self: *mut c_void)); - pub fn register_context_menu_click_callback(cb: extern fn(_self: *mut c_void, id: i32)); - pub fn cleanup_ui(); - - // CLIPBOARD - pub fn get_clipboard(buffer: *mut u16, size: i32) -> i32; - pub fn set_clipboard(payload: *const u16) -> i32; - - // KEYBOARD - pub fn register_keypress_callback(cb: extern fn(_self: *mut c_void, *const i32, - i32, i32, i32, i32)); - - pub fn eventloop(); - pub fn send_string(string: *const u16); - pub fn send_vkey(vk: i32); - pub fn delete_string(count: i32); - pub fn trigger_paste(); -} \ No newline at end of file diff --git a/src/check.rs b/src/check.rs deleted file mode 100644 index 34b4f80..0000000 --- a/src/check.rs +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -// This functions are used to check if the required dependencies are satisfied -// before starting espanso - -#[cfg(target_os = "linux")] -pub fn check_dependencies() -> bool { - use std::process::Command; - - let mut result = true; - - // Make sure notify-send is installed - let status = Command::new("notify-send") - .arg("-v") - .output(); - if let Err(_) = status { - println!("Error: 'notify-send' command is needed for espanso to work correctly, please install it."); - result = false; - } - - // Make sure xclip is installed - let status = Command::new("xclip") - .arg("-version") - .output(); - if let Err(_) = status { - println!("Error: 'xclip' command is needed for espanso to work correctly, please install it."); - result = false; - } - - result -} - -#[cfg(target_os = "macos")] -pub fn check_dependencies() -> bool { - // Nothing to do here - true -} - -#[cfg(target_os = "windows")] -pub fn check_dependencies() -> bool { - // Nothing needed on windows - true -} \ No newline at end of file diff --git a/src/clipboard/linux.rs b/src/clipboard/linux.rs deleted file mode 100644 index a20c2c6..0000000 --- a/src/clipboard/linux.rs +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::process::{Command, Stdio}; -use std::io::{Write}; -use log::error; - -pub struct LinuxClipboardManager {} - -impl super::ClipboardManager for LinuxClipboardManager { - fn get_clipboard(&self) -> Option { - let res = Command::new("xclip") - .args(&["-o", "-sel", "clip"]) - .output(); - - if let Ok(output) = res { - if output.status.success() { - let s = String::from_utf8_lossy(&output.stdout); - return Some((*s).to_owned()); - } - } - - None - } - - fn set_clipboard(&self, payload: &str) { - let res = Command::new("xclip") - .args(&["-sel", "clip"]) - .stdin(Stdio::piped()) - .spawn(); - - if let Ok(mut child) = res { - let stdin = child.stdin.as_mut(); - - if let Some(output) = stdin { - let res = output.write_all(payload.as_bytes()); - - if let Err(e) = res { - error!("Could not set clipboard: {}", e); - } - } - } - } -} - -impl LinuxClipboardManager { - pub fn new() -> LinuxClipboardManager { - LinuxClipboardManager{} - } -} \ No newline at end of file diff --git a/src/clipboard/macos.rs b/src/clipboard/macos.rs deleted file mode 100644 index 65c10bf..0000000 --- a/src/clipboard/macos.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::raw::c_char; -use crate::bridge::macos::{get_clipboard, set_clipboard}; -use std::ffi::{CStr, CString}; - -pub struct MacClipboardManager { - -} - -impl super::ClipboardManager for MacClipboardManager { - fn get_clipboard(&self) -> Option { - unsafe { - let mut buffer : [c_char; 2000] = [0; 2000]; - let res = get_clipboard(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = CStr::from_ptr(buffer.as_ptr()); - - let string = c_string.to_str(); - if let Ok(string) = string { - return Some((*string).to_owned()); - } - } - } - - None - } - - fn set_clipboard(&self, payload: &str) { - let res = CString::new(payload); - if let Ok(cstr) = res { - unsafe { - set_clipboard(cstr.as_ptr()); - } - } - } -} - -impl MacClipboardManager { - pub fn new() -> MacClipboardManager { - MacClipboardManager{} - } -} \ No newline at end of file diff --git a/src/clipboard/mod.rs b/src/clipboard/mod.rs deleted file mode 100644 index c99a4cc..0000000 --- a/src/clipboard/mod.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[cfg(target_os = "windows")] -mod windows; - -#[cfg(target_os = "linux")] -mod linux; - -#[cfg(target_os = "macos")] -mod macos; - -pub trait ClipboardManager { - fn get_clipboard(&self) -> Option; - fn set_clipboard(&self, payload: &str); -} - -// LINUX IMPLEMENTATION -#[cfg(target_os = "linux")] -pub fn get_manager() -> impl ClipboardManager { - linux::LinuxClipboardManager::new() -} - -// WINDOWS IMPLEMENTATION -#[cfg(target_os = "windows")] -pub fn get_manager() -> impl ClipboardManager { - windows::WindowsClipboardManager::new() -} - -// MAC IMPLEMENTATION -#[cfg(target_os = "macos")] -pub fn get_manager() -> impl ClipboardManager { - macos::MacClipboardManager::new() -} \ No newline at end of file diff --git a/src/clipboard/windows.rs b/src/clipboard/windows.rs deleted file mode 100644 index caa8e0e..0000000 --- a/src/clipboard/windows.rs +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use widestring::U16CString; -use crate::bridge::windows::{set_clipboard, get_clipboard}; - -pub struct WindowsClipboardManager { - -} - -impl WindowsClipboardManager { - pub fn new() -> WindowsClipboardManager { - WindowsClipboardManager{} - } -} - -impl super::ClipboardManager for WindowsClipboardManager { - fn get_clipboard(&self) -> Option { - unsafe { - let mut buffer : [u16; 2000] = [0; 2000]; - let res = get_clipboard(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = U16CString::from_ptr_str(buffer.as_ptr()); - - let string = c_string.to_string_lossy(); - return Some((*string).to_owned()); - } - } - - None - } - - fn set_clipboard(&self, payload: &str) { - unsafe { - let payload_c = U16CString::from_str(payload).unwrap(); - set_clipboard(payload_c.as_ptr()); - } - } -} \ No newline at end of file diff --git a/src/config/mod.rs b/src/config/mod.rs deleted file mode 100644 index 4b7f686..0000000 --- a/src/config/mod.rs +++ /dev/null @@ -1,699 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -extern crate dirs; - -use std::path::{Path, PathBuf}; -use std::{fs}; -use crate::matcher::Match; -use std::fs::{File, create_dir_all}; -use std::io::Read; -use serde::{Serialize, Deserialize}; -use crate::event::KeyModifier; -use std::collections::HashSet; -use log::{error}; -use std::fmt; -use std::error::Error; - -pub(crate) mod runtime; - -// TODO: add documentation link -const DEFAULT_CONFIG_FILE_CONTENT : &str = include_str!("../res/config.yaml"); - -const DEFAULT_CONFIG_FILE_NAME : &str = "default.yaml"; - -// Default values for primitives -fn default_name() -> String{ "default".to_owned() } -fn default_filter_title() -> String{ "".to_owned() } -fn default_filter_class() -> String{ "".to_owned() } -fn default_filter_exec() -> String{ "".to_owned() } -fn default_disabled() -> bool{ false } -fn default_log_level() -> i32 { 0 } -fn default_ipc_server_port() -> i32 { 34982 } -fn default_use_system_agent() -> bool { true } -fn default_config_caching_interval() -> i32 { 800 } -fn default_toggle_interval() -> u32 { 230 } -fn default_backspace_limit() -> i32 { 3 } -fn default_exclude_parent_matches() -> bool {false} -fn default_matches() -> Vec { Vec::new() } - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Configs { - #[serde(default = "default_name")] - pub name: String, - - #[serde(default = "default_filter_title")] - pub filter_title: String, - - #[serde(default = "default_filter_class")] - pub filter_class: String, - - #[serde(default = "default_filter_exec")] - pub filter_exec: String, - - #[serde(default = "default_disabled")] - pub disabled: bool, - - #[serde(default = "default_log_level")] - pub log_level: i32, - - #[serde(default = "default_ipc_server_port")] - pub ipc_server_port: i32, - - #[serde(default = "default_use_system_agent")] - pub use_system_agent: bool, - - #[serde(default = "default_config_caching_interval")] - pub config_caching_interval: i32, - - #[serde(default)] - pub toggle_key: KeyModifier, - - #[serde(default = "default_toggle_interval")] - pub toggle_interval: u32, - - #[serde(default = "default_backspace_limit")] - pub backspace_limit: i32, - - #[serde(default)] - pub backend: BackendType, - - #[serde(default = "default_exclude_parent_matches")] - pub exclude_parent_matches: bool, - - #[serde(default = "default_matches")] - pub matches: Vec -} - -// Macro used to validate config fields -#[macro_export] -macro_rules! validate_field { - ($result:expr, $field:expr, $def_value:expr) => { - if $field != $def_value { - let mut field_name = stringify!($field); - if field_name.starts_with("self.") { - field_name = &field_name[5..]; // Remove the 'self.' prefix - } - error!("Validation error, parameter '{}' is reserved and can be only used in the default.yaml config file", field_name); - $result = false; - } - }; -} - -impl Configs { - /* - * Validate the Config instance. - * It makes sure that app-specific config instances do not define - * attributes reserved to the default config. - */ - fn validate_specific_config(&self) -> bool { - let mut result = true; - - validate_field!(result, self.config_caching_interval, default_config_caching_interval()); - validate_field!(result, self.log_level, default_log_level()); - validate_field!(result, self.toggle_key, KeyModifier::default()); - validate_field!(result, self.toggle_interval, default_toggle_interval()); - validate_field!(result, self.backspace_limit, default_backspace_limit()); - validate_field!(result, self.ipc_server_port, default_ipc_server_port()); - validate_field!(result, self.use_system_agent, default_use_system_agent()); - - result - } -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub enum BackendType { - Inject, - Clipboard -} -impl Default for BackendType { - fn default() -> Self { - BackendType::Inject - } -} - -impl Configs { - fn load_config(path: &Path) -> Result { - let file_res = File::open(path); - if let Ok(mut file) = file_res { - let mut contents = String::new(); - let res = file.read_to_string(&mut contents); - - if let Err(_) = res { - return Err(ConfigLoadError::UnableToReadFile) - } - - let config_res = serde_yaml::from_str(&contents); - - match config_res { - Ok(config) => Ok(config), - Err(e) => { - Err(ConfigLoadError::InvalidYAML(path.to_owned(), e.to_string())) - } - } - }else{ - Err(ConfigLoadError::FileNotFound) - } - } -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct ConfigSet { - pub default: Configs, - pub specific: Vec, -} - -impl ConfigSet { - pub fn load(dir_path: &Path) -> Result { - if !dir_path.is_dir() { - return Err(ConfigLoadError::InvalidConfigDirectory) - } - - let default_file = dir_path.join(DEFAULT_CONFIG_FILE_NAME); - let default = Configs::load_config(default_file.as_path())?; - - let mut specific = Vec::new(); - - // Used to make sure no duplicates are present - let mut name_set = HashSet::new(); - - let dir_entry = fs::read_dir(dir_path); - if dir_entry.is_err() { - return Err(ConfigLoadError::UnableToReadFile) - } - let dir_entry = dir_entry.unwrap(); - - for entry in dir_entry { - let entry = entry; - if let Ok(entry) = entry { - let path = entry.path(); - - // Skip the default one, already loaded - if path.file_name().unwrap_or("".as_ref()) == "default.yaml" { - continue; - } - - // Skip non-yaml config files - if path.extension().unwrap_or_default().to_str().unwrap_or_default() != "yaml" { - continue; - } - - let mut config = Configs::load_config(path.as_path())?; - - if !config.validate_specific_config() { - return Err(ConfigLoadError::InvalidParameter(path.to_owned())) - } - - if config.name == "default" { - return Err(ConfigLoadError::MissingName(path.to_owned())); - } - - if name_set.contains(&config.name) { - return Err(ConfigLoadError::NameDuplicate(path.to_owned())); - } - - // Compute new match set, merging the parent's matches. - // Note: if an app-specific redefines a trigger already present in the - // default config, the latter gets overwritten. - if !config.exclude_parent_matches { - let mut merged_matches = config.matches.clone(); - let mut trigger_set = HashSet::new(); - merged_matches.iter().for_each(|m| { - trigger_set.insert(m.trigger.clone()); - }); - let parent_matches : Vec = default.matches.iter().filter(|&m| { - !trigger_set.contains(&m.trigger) - }).map(|m| m.clone()).collect(); - - merged_matches.extend(parent_matches); - config.matches = merged_matches; - } - - // TODO: check if it contains at least a filter, and warn the user about the problem - - name_set.insert(config.name.clone()); - specific.push(config); - } - } - - Ok(ConfigSet { - default, - specific - }) - } - - pub fn load_default() -> Result { - let res = dirs::home_dir(); - if let Some(home_dir) = res { - let espanso_dir = home_dir.join(".espanso"); - - // Create the espanso dir if id doesn't exist - let res = create_dir_all(espanso_dir.as_path()); - - if let Ok(_) = res { - let default_file = espanso_dir.join(DEFAULT_CONFIG_FILE_NAME); - - // If config file does not exist, create one from template - if !default_file.exists() { - let result = fs::write(&default_file, DEFAULT_CONFIG_FILE_CONTENT); - if result.is_err() { - return Err(ConfigLoadError::UnableToCreateDefaultConfig) - } - } - - return ConfigSet::load(espanso_dir.as_path()) - } - } - - return Err(ConfigLoadError::UnableToCreateDefaultConfig) - } -} - -pub trait ConfigManager<'a> { - fn active_config(&'a self) -> &'a Configs; - fn default_config(&'a self) -> &'a Configs; - fn matches(&'a self) -> &'a Vec; -} - -// Error handling -#[derive(Debug, PartialEq)] -pub enum ConfigLoadError { - FileNotFound, - UnableToReadFile, - InvalidYAML(PathBuf, String), - InvalidConfigDirectory, - InvalidParameter(PathBuf), - MissingName(PathBuf), - NameDuplicate(PathBuf), - UnableToCreateDefaultConfig, -} - -impl fmt::Display for ConfigLoadError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - ConfigLoadError::FileNotFound => write!(f, "File not found"), - ConfigLoadError::UnableToReadFile => write!(f, "Unable to read config file"), - ConfigLoadError::InvalidYAML(path, e) => write!(f, "Error parsing YAML file '{}', invalid syntax: {}", path.to_str().unwrap_or_default(), e), - ConfigLoadError::InvalidConfigDirectory => write!(f, "Invalid config directory"), - ConfigLoadError::InvalidParameter(path) => write!(f, "Invalid parameter in '{}', use of reserved parameters in app-specific configs is not permitted", path.to_str().unwrap_or_default()), - ConfigLoadError::MissingName(path) => write!(f, "The 'name' field is required in app-specific configurations, but it's missing in '{}'", path.to_str().unwrap_or_default()), - ConfigLoadError::NameDuplicate(path) => write!(f, "Found duplicate 'name' in '{}', please use different names", path.to_str().unwrap_or_default()), - ConfigLoadError::UnableToCreateDefaultConfig => write!(f, "Could not generate default config file"), - } - } -} - -impl Error for ConfigLoadError { - fn description(&self) -> &str { - match self { - ConfigLoadError::FileNotFound => "File not found", - ConfigLoadError::UnableToReadFile => "Unable to read config file", - ConfigLoadError::InvalidYAML(_, _) => "Error parsing YAML file, invalid syntax", - ConfigLoadError::InvalidConfigDirectory => "Invalid config directory", - ConfigLoadError::InvalidParameter(_) => "Invalid parameter, use of reserved parameters in app-specific configs is not permitted", - ConfigLoadError::MissingName(_) => "The 'name' field is required in app-specific configurations, but it's missing", - ConfigLoadError::NameDuplicate(_) => "Found duplicate 'name' in some configurations, please use different names", - ConfigLoadError::UnableToCreateDefaultConfig => "Could not generate default config file", - } - } -} - - - -#[cfg(test)] -mod tests { - use super::*; - use std::io::Write; - use tempfile::{NamedTempFile, TempDir}; - use std::any::Any; - - const TEST_WORKING_CONFIG_FILE : &str = include_str!("../res/test/working_config.yaml"); - const TEST_CONFIG_FILE_WITH_BAD_YAML : &str = include_str!("../res/test/config_with_bad_yaml.yaml"); - - // Test Configs - - fn create_tmp_file(string: &str) -> NamedTempFile { - let file = NamedTempFile::new().unwrap(); - file.as_file().write_all(string.as_bytes()); - file - } - - fn variant_eq(a: &T, b: &T) -> bool { - std::mem::discriminant(a) == std::mem::discriminant(b) - } - - #[test] - fn test_config_file_not_found() { - let config = Configs::load_config(Path::new("invalid/path")); - assert_eq!(config.is_err(), true); - assert_eq!(config.unwrap_err(), ConfigLoadError::FileNotFound); - } - - #[test] - fn test_config_file_with_bad_yaml_syntax() { - let broken_config_file = create_tmp_file(TEST_CONFIG_FILE_WITH_BAD_YAML); - let config = Configs::load_config(broken_config_file.path()); - match config { - Ok(_) => {assert!(false)}, - Err(e) => { - match e { - ConfigLoadError::InvalidYAML(p, _) => assert_eq!(p, broken_config_file.path().to_owned()), - _ => assert!(false), - } - assert!(true); - }, - } - - } - - #[test] - fn test_validate_field_macro() { - let mut result = true; - - validate_field!(result, 3, 3); - assert_eq!(result, true); - - validate_field!(result, 10, 3); - assert_eq!(result, false); - - validate_field!(result, 3, 3); - assert_eq!(result, false); - } - - #[test] - fn test_specific_config_does_not_have_reserved_fields() { - let working_config_file = create_tmp_file(r###" - - backend: Clipboard - - "###); - let config = Configs::load_config(working_config_file.path()); - assert_eq!(config.unwrap().validate_specific_config(), true); - } - - #[test] - fn test_specific_config_has_reserved_fields_config_caching_interval() { - let working_config_file = create_tmp_file(r###" - - # This should not happen in an app-specific config - config_caching_interval: 100 - - "###); - let config = Configs::load_config(working_config_file.path()); - assert_eq!(config.unwrap().validate_specific_config(), false); - } - - #[test] - fn test_specific_config_has_reserved_fields_toggle_key() { - let working_config_file = create_tmp_file(r###" - - # This should not happen in an app-specific config - toggle_key: CTRL - - "###); - let config = Configs::load_config(working_config_file.path()); - assert_eq!(config.unwrap().validate_specific_config(), false); - } - - #[test] - fn test_specific_config_has_reserved_fields_toggle_interval() { - let working_config_file = create_tmp_file(r###" - - # This should not happen in an app-specific config - toggle_interval: 1000 - - "###); - let config = Configs::load_config(working_config_file.path()); - assert_eq!(config.unwrap().validate_specific_config(), false); - } - - #[test] - fn test_specific_config_has_reserved_fields_backspace_limit() { - let working_config_file = create_tmp_file(r###" - - # This should not happen in an app-specific config - backspace_limit: 10 - - "###); - let config = Configs::load_config(working_config_file.path()); - assert_eq!(config.unwrap().validate_specific_config(), false); - } - - #[test] - fn test_config_loaded_correctly() { - let working_config_file = create_tmp_file(TEST_WORKING_CONFIG_FILE); - let config = Configs::load_config(working_config_file.path()); - assert_eq!(config.is_ok(), true); - } - - // Test ConfigSet - - #[test] - fn test_config_set_default_content_should_work_correctly() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, DEFAULT_CONFIG_FILE_CONTENT); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - } - - #[test] - fn test_config_set_load_fail_bad_directory() { - let config_set = ConfigSet::load(Path::new("invalid/path")); - assert_eq!(config_set.is_err(), true); - assert_eq!(config_set.unwrap_err(), ConfigLoadError::InvalidConfigDirectory); - } - - #[test] - fn test_config_set_missing_default_file() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert_eq!(config_set.is_err(), true); - assert_eq!(config_set.unwrap_err(), ConfigLoadError::FileNotFound); - } - - #[test] - fn test_config_set_invalid_yaml_syntax() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - let default_path_copy = default_path.clone(); - fs::write(default_path, TEST_CONFIG_FILE_WITH_BAD_YAML); - - let config_set = ConfigSet::load(tmp_dir.path()); - match config_set { - Ok(_) => {assert!(false)}, - Err(e) => { - match e { - ConfigLoadError::InvalidYAML(p, _) => assert_eq!(p, default_path_copy), - _ => assert!(false), - } - assert!(true); - }, - } - } - - #[test] - fn test_config_set_specific_file_with_reserved_fields() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, DEFAULT_CONFIG_FILE_CONTENT); - - let specific_path = tmp_dir.path().join("specific.yaml"); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, r###" - config_caching_interval: 10000 - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_err()); - assert_eq!(config_set.unwrap_err(), ConfigLoadError::InvalidParameter(specific_path_copy)) - } - - #[test] - fn test_config_set_specific_file_missing_name() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, DEFAULT_CONFIG_FILE_CONTENT); - - let specific_path = tmp_dir.path().join("specific.yaml"); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, r###" - backend: Clipboard - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_err()); - assert_eq!(config_set.unwrap_err(), ConfigLoadError::MissingName(specific_path_copy)) - } - - pub fn create_temp_espanso_directory() -> TempDir { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, DEFAULT_CONFIG_FILE_CONTENT); - - tmp_dir - } - - pub fn create_temp_file_in_dir(tmp_dir: &TempDir, name: &str, content: &str) -> PathBuf { - let specific_path = tmp_dir.path().join(name); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, content); - - specific_path_copy - } - - #[test] - fn test_config_set_specific_file_duplicate_name() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: specific1 - "###); - - let specific_path2 = create_temp_file_in_dir(&tmp_dir, "specific2.yaml", r###" - name: specific1 - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_err()); - assert!(variant_eq(&config_set.unwrap_err(), &ConfigLoadError::NameDuplicate(PathBuf::new()))) - } - - #[test] - fn test_specific_config_set_merge_with_parent_matches() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, r###" - matches: - - trigger: ":lol" - replace: "LOL" - - trigger: ":yess" - replace: "Bob" - "###); - - let specific_path = tmp_dir.path().join("specific.yaml"); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, r###" - name: specific1 - - matches: - - trigger: "hello" - replace: "newstring" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()).unwrap(); - assert_eq!(config_set.default.matches.len(), 2); - assert_eq!(config_set.specific[0].matches.len(), 3); - - assert!(config_set.specific[0].matches.iter().find(|x| x.trigger == "hello").is_some()); - assert!(config_set.specific[0].matches.iter().find(|x| x.trigger == ":lol").is_some()); - assert!(config_set.specific[0].matches.iter().find(|x| x.trigger == ":yess").is_some()); - } - - #[test] - fn test_specific_config_set_merge_with_parent_matches_child_priority() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, r###" - matches: - - trigger: ":lol" - replace: "LOL" - - trigger: ":yess" - replace: "Bob" - "###); - - let specific_path = tmp_dir.path().join("specific.yaml"); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, r###" - name: specific1 - - matches: - - trigger: ":lol" - replace: "newstring" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()).unwrap(); - assert_eq!(config_set.default.matches.len(), 2); - assert_eq!(config_set.specific[0].matches.len(), 2); - - assert!(config_set.specific[0].matches.iter().find(|x| x.trigger == ":lol" && x.replace == "newstring").is_some()); - assert!(config_set.specific[0].matches.iter().find(|x| x.trigger == ":yess").is_some()); - } - - #[test] - fn test_specific_config_set_exclude_merge_with_parent_matches() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, r###" - matches: - - trigger: ":lol" - replace: "LOL" - - trigger: ":yess" - replace: "Bob" - "###); - - let specific_path = tmp_dir.path().join("specific.yaml"); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, r###" - name: specific1 - - exclude_parent_matches: true - - matches: - - trigger: "hello" - replace: "newstring" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()).unwrap(); - assert_eq!(config_set.default.matches.len(), 2); - assert_eq!(config_set.specific[0].matches.len(), 1); - - assert!(config_set.specific[0].matches.iter().find(|x| x.trigger == "hello" && x.replace == "newstring").is_some()); - } - - #[test] - fn test_only_yaml_files_are_loaded_from_config() { - let tmp_dir = TempDir::new().expect("unable to create temp directory"); - let default_path = tmp_dir.path().join(DEFAULT_CONFIG_FILE_NAME); - fs::write(default_path, r###" - matches: - - trigger: ":lol" - replace: "LOL" - - trigger: ":yess" - replace: "Bob" - "###); - - let specific_path = tmp_dir.path().join("specific.zzz"); - let specific_path_copy = specific_path.clone(); - fs::write(specific_path, r###" - name: specific1 - - exclude_parent_matches: true - - matches: - - trigger: "hello" - replace: "newstring" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()).unwrap(); - assert_eq!(config_set.specific.len(), 0); - } -} \ No newline at end of file diff --git a/src/config/runtime.rs b/src/config/runtime.rs deleted file mode 100644 index e817352..0000000 --- a/src/config/runtime.rs +++ /dev/null @@ -1,471 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use regex::Regex; -use crate::system::SystemManager; -use std::cell::RefCell; -use std::time::SystemTime; -use log::{debug, warn}; -use super::{Configs, ConfigSet}; -use crate::matcher::Match; - -pub struct RuntimeConfigManager<'a, S: SystemManager> { - set: ConfigSet, - - // Filter regexps - title_regexps: Vec>, - class_regexps: Vec>, - exec_regexps: Vec>, - - system_manager: S, - - // Cache - last_config_update: RefCell, - last_config: RefCell> -} - -impl <'a, S: SystemManager> RuntimeConfigManager<'a, S> { - pub fn new<'b>(set: ConfigSet, system_manager: S) -> RuntimeConfigManager<'b, S> { - // Compile all the regexps - let title_regexps = set.specific.iter().map( - |config| { - if config.filter_title.is_empty() { - None - }else{ - let res = Regex::new(&config.filter_title); - if let Ok(regex) = res { - Some(regex) - }else{ - warn!("Invalid regex in 'filter_title' field of configuration {}, ignoring it...", config.name); - None - } - } - } - ).collect(); - - let class_regexps = set.specific.iter().map( - |config| { - if config.filter_class.is_empty() { - None - }else{ - let res = Regex::new(&config.filter_class); - if let Ok(regex) = res { - Some(regex) - }else{ - warn!("Invalid regex in 'filter_class' field of configuration {}, ignoring it...", config.name); - None - } - } - } - ).collect(); - - let exec_regexps = set.specific.iter().map( - |config| { - if config.filter_exec.is_empty() { - None - }else{ - let res = Regex::new(&config.filter_exec); - if let Ok(regex) = res { - Some(regex) - }else{ - warn!("Invalid regex in 'filter_exec' field of configuration {}, ignoring it...", config.name); - None - } - } - } - ).collect(); - - let last_config_update = RefCell::new(SystemTime::now()); - let last_config = RefCell::new(None); - - RuntimeConfigManager { - set, - title_regexps, - class_regexps, - exec_regexps, - system_manager, - last_config_update, - last_config - } - } - - fn calculate_active_config(&'a self) -> &'a Configs { - // TODO: optimize performance by avoiding some of these checks if no Configs use the filters - - debug!("Requested config for window:"); - - let active_title = self.system_manager.get_current_window_title(); - - if let Some(title) = active_title { - debug!("=> Title: '{}'", title); - - for (i, regex) in self.title_regexps.iter().enumerate() { - if let Some(regex) = regex { - if regex.is_match(&title) { - debug!("Matched 'filter_title' for '{}' config, using custom settings.", - self.set.specific[i].name); - - return &self.set.specific[i] - } - } - } - } - - let active_executable = self.system_manager.get_current_window_executable(); - - if let Some(executable) = active_executable { - debug!("=> Executable: '{}'", executable); - - for (i, regex) in self.exec_regexps.iter().enumerate() { - if let Some(regex) = regex { - if regex.is_match(&executable) { - debug!("Matched 'filter_exec' for '{}' config, using custom settings.", - self.set.specific[i].name); - - return &self.set.specific[i] - } - } - } - } - - let active_class = self.system_manager.get_current_window_class(); - - if let Some(class) = active_class { - debug!("=> Class: '{}'", class); - - for (i, regex) in self.class_regexps.iter().enumerate() { - if let Some(regex) = regex { - if regex.is_match(&class) { - debug!("Matched 'filter_class' for '{}' config, using custom settings.", - self.set.specific[i].name); - - return &self.set.specific[i] - } - } - } - } - - // No matches, return the default mapping - debug!("No matches for custom configs, using default settings."); - &self.set.default - } -} - -impl <'a, S: SystemManager> super::ConfigManager<'a> for RuntimeConfigManager<'a, S> { - fn active_config(&'a self) -> &'a Configs { - let mut last_config_update = self.last_config_update.borrow_mut(); - if let Ok(elapsed) = (*last_config_update).elapsed() { - *last_config_update = SystemTime::now(); - - if elapsed.as_millis() < self.set.default.config_caching_interval as u128 { - let last_config = self.last_config.borrow(); - if let Some(cached_config) = *last_config { - debug!("Using cached config"); - return cached_config; - } - } - } - - let config = self.calculate_active_config(); - - let mut last_config = self.last_config.borrow_mut(); - *last_config = Some(config); - - config - } - - fn default_config(&'a self) -> &'a Configs { - &self.set.default - } - - fn matches(&'a self) -> &'a Vec { - &self.active_config().matches - } -} - -// TESTS - -#[cfg(test)] -mod tests { - use super::*; - use std::io::Write; - use tempfile::{NamedTempFile, TempDir}; - use crate::config::{DEFAULT_CONFIG_FILE_NAME, DEFAULT_CONFIG_FILE_CONTENT}; - use std::fs; - use std::path::PathBuf; - use crate::config::ConfigManager; - use crate::config::tests::{create_temp_espanso_directory, create_temp_file_in_dir}; - - struct DummySystemManager { - title: RefCell, - class: RefCell, - exec: RefCell, - } - impl SystemManager for DummySystemManager { - fn get_current_window_title(&self) -> Option { - Some(self.title.borrow().clone()) - } - fn get_current_window_class(&self) -> Option { - Some(self.class.borrow().clone()) - } - fn get_current_window_executable(&self) -> Option { - Some(self.exec.borrow().clone()) - } - } - impl DummySystemManager { - pub fn new_custom(title: &str, class: &str, exec: &str) -> DummySystemManager { - DummySystemManager{ - title: RefCell::new(title.to_owned()), - class: RefCell::new(class.to_owned()), - exec: RefCell::new(exec.to_owned()) - } - } - - pub fn new() -> DummySystemManager { - DummySystemManager::new_custom("title", "class", "exec") - } - - pub fn change(&self, title: &str, class: &str, exec: &str) { - *self.title.borrow_mut() = title.to_owned(); - *self.class.borrow_mut() = class.to_owned(); - *self.exec.borrow_mut() = exec.to_owned(); - } - } - - #[test] - fn test_runtime_constructor_regex_load_correctly() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: myname1 - filter_exec: "Title" - "###); - - let specific_path2 = create_temp_file_in_dir(&tmp_dir, "specific2.yaml", r###" - name: myname2 - filter_title: "Yeah" - filter_class: "Car" - "###); - - let specific_path3 = create_temp_file_in_dir(&tmp_dir, "specific3.yaml", r###" - name: myname3 - filter_title: "Nice" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new(); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - let sp1index = config_manager.set.specific - .iter().position(|x| x.name == "myname1").unwrap(); - let sp2index = config_manager.set.specific - .iter().position(|x| x.name == "myname2").unwrap(); - let sp3index = config_manager.set.specific - .iter().position(|x| x.name == "myname3").unwrap(); - - assert_eq!(config_manager.exec_regexps.len(), 3); - assert_eq!(config_manager.title_regexps.len(), 3); - assert_eq!(config_manager.class_regexps.len(), 3); - - assert!(config_manager.class_regexps[sp1index].is_none()); - assert!(config_manager.class_regexps[sp2index].is_some()); - assert!(config_manager.class_regexps[sp3index].is_none()); - - assert!(config_manager.title_regexps[sp1index].is_none()); - assert!(config_manager.title_regexps[sp2index].is_some()); - assert!(config_manager.title_regexps[sp3index].is_some()); - - assert!(config_manager.exec_regexps[sp1index].is_some()); - assert!(config_manager.exec_regexps[sp2index].is_none()); - assert!(config_manager.exec_regexps[sp3index].is_none()); - } - - #[test] - fn test_runtime_constructor_malformed_regexes_are_ignored() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: myname1 - filter_exec: "[`-_]" - "###); - - let specific_path2 = create_temp_file_in_dir(&tmp_dir, "specific2.yaml", r###" - name: myname2 - filter_title: "[`-_]" - filter_class: "Car" - "###); - - let specific_path3 = create_temp_file_in_dir(&tmp_dir, "specific3.yaml", r###" - name: myname3 - filter_title: "Nice" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new(); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - let sp1index = config_manager.set.specific - .iter().position(|x| x.name == "myname1").unwrap(); - let sp2index = config_manager.set.specific - .iter().position(|x| x.name == "myname2").unwrap(); - let sp3index = config_manager.set.specific - .iter().position(|x| x.name == "myname3").unwrap(); - - assert_eq!(config_manager.exec_regexps.len(), 3); - assert_eq!(config_manager.title_regexps.len(), 3); - assert_eq!(config_manager.class_regexps.len(), 3); - - assert!(config_manager.class_regexps[sp1index].is_none()); - assert!(config_manager.class_regexps[sp2index].is_some()); - assert!(config_manager.class_regexps[sp3index].is_none()); - - assert!(config_manager.title_regexps[sp1index].is_none()); - assert!(config_manager.title_regexps[sp2index].is_none()); - assert!(config_manager.title_regexps[sp3index].is_some()); - - assert!(config_manager.exec_regexps[sp1index].is_none()); - assert!(config_manager.exec_regexps[sp2index].is_none()); - assert!(config_manager.exec_regexps[sp3index].is_none()); - } - - #[test] - fn test_runtime_calculate_active_config_specific_title_match() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: chrome - filter_title: "Chrome" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe"); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - assert_eq!(config_manager.calculate_active_config().name, "chrome"); - } - - fn test_runtime_calculate_active_config_specific_class_match() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: chrome - filter_class: "Chrome" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe"); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - assert_eq!(config_manager.calculate_active_config().name, "chrome"); - } - - fn test_runtime_calculate_active_config_specific_exec_match() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: chrome - filter_exec: "chrome.exe" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe"); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - assert_eq!(config_manager.calculate_active_config().name, "chrome"); - } - - fn test_runtime_calculate_active_config_specific_multi_filter_match() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: chrome - filter_class: Browser - filter_exec: "firefox.exe" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Browser", "C:\\Path\\chrome.exe"); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - assert_eq!(config_manager.calculate_active_config().name, "chrome"); - } - - #[test] - fn test_runtime_calculate_active_config_no_match() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: firefox - filter_title: "Firefox" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe"); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - assert_eq!(config_manager.calculate_active_config().name, "default"); - } - - #[test] - fn test_runtime_active_config_cache() { - let tmp_dir = create_temp_espanso_directory(); - - let specific_path = create_temp_file_in_dir(&tmp_dir, "specific.yaml", r###" - name: firefox - filter_title: "Firefox" - "###); - - let config_set = ConfigSet::load(tmp_dir.path()); - assert!(config_set.is_ok()); - - let dummy_system_manager = DummySystemManager::new_custom("Google Chrome", "Chrome", "C:\\Path\\chrome.exe"); - - let config_manager = RuntimeConfigManager::new(config_set.unwrap(), dummy_system_manager); - - assert_eq!(config_manager.active_config().name, "default"); - assert_eq!(config_manager.calculate_active_config().name, "default"); - - config_manager.system_manager.change("Firefox", "Browser", "C\\Path\\firefox.exe"); - - // Active config should have changed, but not cached one - assert_eq!(config_manager.calculate_active_config().name, "firefox"); - assert_eq!(config_manager.active_config().name, "default"); - } -} \ No newline at end of file diff --git a/src/context/linux.rs b/src/context/linux.rs deleted file mode 100644 index 152ed0b..0000000 --- a/src/context/linux.rs +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::sync::mpsc::Sender; -use std::os::raw::c_void; -use crate::event::*; -use crate::event::KeyModifier::*; -use crate::bridge::linux::*; -use std::process::exit; -use log::error; - -#[repr(C)] -pub struct LinuxContext { - pub send_channel: Sender -} - -impl LinuxContext { - pub fn new(send_channel: Sender) -> Box { - let context = Box::new(LinuxContext { - send_channel, - }); - - unsafe { - let context_ptr = &*context as *const LinuxContext as *const c_void; - - register_keypress_callback(keypress_callback); - - let res = initialize(context_ptr); - if res <= 0 { - error!("Could not initialize linux context, error: {}", res); - exit(10); - } - } - - context - } -} - -impl super::Context for LinuxContext { - fn eventloop(&self) { - unsafe { - eventloop(); - } - } -} - -impl Drop for LinuxContext { - fn drop(&mut self) { - unsafe { cleanup(); } - } -} - -// Native bridge code - -extern fn keypress_callback(_self: *mut c_void, raw_buffer: *const u8, len: i32, - is_modifier: i32, key_code: i32) { - unsafe { - let _self = _self as *mut LinuxContext; - - if is_modifier == 0 { // Char event - // Convert the received buffer to a character - let buffer = std::slice::from_raw_parts(raw_buffer, len as usize); - let r = String::from_utf8_lossy(buffer).chars().nth(0); - - // Send the char through the channel - if let Some(c) = r { - let event = Event::Key(KeyEvent::Char(c)); - (*_self).send_channel.send(event).unwrap(); - } - }else{ // Modifier event - let modifier: Option = match key_code { - 133 => Some(META), - 50 => Some(SHIFT), - 64 => Some(ALT), - 37 => Some(CTRL), - 22 => Some(BACKSPACE), - _ => None, - }; - - if let Some(modifier) = modifier { - let event = Event::Key(KeyEvent::Modifier(modifier)); - (*_self).send_channel.send(event).unwrap(); - } - } - } -} \ No newline at end of file diff --git a/src/context/macos.rs b/src/context/macos.rs deleted file mode 100644 index 3e6c0ea..0000000 --- a/src/context/macos.rs +++ /dev/null @@ -1,140 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::sync::mpsc::Sender; -use std::os::raw::c_void; -use crate::bridge::macos::*; -use crate::event::{Event, KeyEvent, KeyModifier, ActionType}; -use crate::event::KeyModifier::*; -use std::ffi::CString; -use std::fs; -use log::{info, error}; -use std::process::exit; - -const STATUS_ICON_BINARY : &'static [u8] = include_bytes!("../res/mac/icon.png"); - -pub struct MacContext { - pub send_channel: Sender -} - -impl MacContext { - pub fn new(send_channel: Sender) -> Box { - // Check accessibility - unsafe { - let res = prompt_accessibility(); - - if res == 0 { - error!("Accessibility must be enabled to make espanso work on MacOS."); - error!("Please allow espanso in the Security & Privacy panel, then restart espanso."); - error!("For more information: "); // TODO: add documentation link - exit(1); - } - } - - let context = Box::new(MacContext { - send_channel - }); - - // Initialize the status icon path - let espanso_dir = super::get_data_dir(); - let status_icon_target = espanso_dir.join("icon.png"); - - if status_icon_target.exists() { - info!("Status icon already initialized, skipping."); - }else { - fs::write(&status_icon_target, STATUS_ICON_BINARY).unwrap_or_else(|e| { - error!("Error copying the Status Icon to the espanso data directory: {}", e); - }); - } - - unsafe { - let context_ptr = &*context as *const MacContext as *const c_void; - - register_keypress_callback(keypress_callback); - register_icon_click_callback(icon_click_callback); - register_context_menu_click_callback(context_menu_click_callback); - - let status_icon_path = CString::new(status_icon_target.to_str().unwrap_or_default()).unwrap_or_default(); - initialize(context_ptr, status_icon_path.as_ptr()); - } - - context - } -} - -impl super::Context for MacContext { - fn eventloop(&self) { - unsafe { - eventloop(); - } - } -} - -// Native bridge code - -extern fn keypress_callback(_self: *mut c_void, raw_buffer: *const u8, len: i32, - is_modifier: i32, key_code: i32) { - unsafe { - let _self = _self as *mut MacContext; - - if is_modifier == 0 { // Char event - // Convert the received buffer to a character - let buffer = std::slice::from_raw_parts(raw_buffer, len as usize); - let r = String::from_utf8_lossy(buffer).chars().nth(0); - - // Send the char through the channel - if let Some(c) = r { - let event = Event::Key(KeyEvent::Char(c)); - (*_self).send_channel.send(event).unwrap(); - } - }else{ // Modifier event - let modifier: Option = match key_code { - 0x37 => Some(META), - 0x38 => Some(SHIFT), - 0x3A => Some(ALT), - 0x3B => Some(CTRL), - 0x33 => Some(BACKSPACE), - _ => None, - }; - - if let Some(modifier) = modifier { - let event = Event::Key(KeyEvent::Modifier(modifier)); - (*_self).send_channel.send(event).unwrap(); - } - } - } -} - -extern fn icon_click_callback(_self: *mut c_void) { - unsafe { - let _self = _self as *mut MacContext; - - let event = Event::Action(ActionType::IconClick); - (*_self).send_channel.send(event).unwrap(); - } -} - -extern fn context_menu_click_callback(_self: *mut c_void, id: i32) { - unsafe { - let _self = _self as *mut MacContext; - - let event = Event::Action(ActionType::from(id)); - (*_self).send_channel.send(event).unwrap(); - } -} \ No newline at end of file diff --git a/src/context/mod.rs b/src/context/mod.rs deleted file mode 100644 index bbc1d9e..0000000 --- a/src/context/mod.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[cfg(target_os = "windows")] -mod windows; - -#[cfg(target_os = "linux")] -mod linux; - -#[cfg(target_os = "macos")] -pub(crate) mod macos; - -use std::sync::mpsc::Sender; -use crate::event::Event; -use std::path::PathBuf; -use std::fs::create_dir_all; - -pub trait Context { - fn eventloop(&self); -} - -pub fn get_data_dir() -> PathBuf { - let data_dir = dirs::data_dir().expect("Can't obtain data_dir(), terminating."); - let espanso_dir = data_dir.join("espanso"); - create_dir_all(&espanso_dir).expect("Error creating espanso data directory"); - espanso_dir -} - -// MAC IMPLEMENTATION -#[cfg(target_os = "macos")] -pub fn new(send_channel: Sender) -> Box { - macos::MacContext::new(send_channel) -} - -// LINUX IMPLEMENTATION -#[cfg(target_os = "linux")] -pub fn new(send_channel: Sender) -> Box { - linux::LinuxContext::new(send_channel) -} - -// WINDOWS IMPLEMENTATION -#[cfg(target_os = "windows")] -pub fn new(send_channel: Sender) -> Box { - windows::WindowsContext::new(send_channel) -} \ No newline at end of file diff --git a/src/context/windows.rs b/src/context/windows.rs deleted file mode 100644 index d45715f..0000000 --- a/src/context/windows.rs +++ /dev/null @@ -1,158 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::sync::mpsc::Sender; -use crate::bridge::windows::*; -use crate::event::{Event, KeyEvent, KeyModifier, ActionType}; -use crate::event::KeyModifier::*; -use std::ffi::c_void; -use std::{fs}; -use widestring::U16CString; -use log::{info}; - -const BMP_BINARY : &'static [u8] = include_bytes!("../res/win/espanso.bmp"); -const ICO_BINARY : &'static [u8] = include_bytes!("../res/win/espanso.ico"); - -pub struct WindowsContext { - send_channel: Sender, -} - -impl WindowsContext { - pub fn new(send_channel: Sender) -> Box { - // Initialize image resources - - let espanso_dir = super::get_data_dir(); - - info!("Initializing Espanso resources in {}", espanso_dir.as_path().display()); - - let espanso_bmp_image = espanso_dir.join("espansoicon.bmp"); - if espanso_bmp_image.exists() { - info!("BMP already initialized, skipping."); - }else { - fs::write(&espanso_bmp_image, BMP_BINARY) - .expect("Unable to write windows bmp file"); - - info!("Extracted bmp icon to: {}", espanso_bmp_image.to_str().unwrap_or("error")); - } - - let espanso_ico_image = espanso_dir.join("espanso.ico"); - if espanso_ico_image.exists() { - info!("ICO already initialized, skipping."); - }else { - fs::write(&espanso_ico_image, ICO_BINARY) - .expect("Unable to write windows ico file"); - - info!("Extracted 'ico' icon to: {}", espanso_ico_image.to_str().unwrap_or("error")); - } - - let bmp_icon = espanso_bmp_image.to_str().unwrap_or_default(); - let ico_icon = espanso_ico_image.to_str().unwrap_or_default(); - - let send_channel = send_channel; - - let context = Box::new(WindowsContext{ - send_channel, - }); - - unsafe { - let context_ptr = &*context as *const WindowsContext as *const c_void; - - // Register callbacks - register_keypress_callback(keypress_callback); - register_icon_click_callback(icon_click_callback); - register_context_menu_click_callback(context_menu_click_callback); - - let ico_file_c = U16CString::from_str(ico_icon).unwrap(); - let bmp_file_c = U16CString::from_str(bmp_icon).unwrap(); - - // Initialize the windows - let res = initialize(context_ptr, ico_file_c.as_ptr(), bmp_file_c.as_ptr()); - if res != 1 { - panic!("Can't initialize Windows context") - } - } - - context - } -} - -impl super::Context for WindowsContext { - fn eventloop(&self) { - unsafe { - eventloop(); - } - } -} - -// Native bridge code - -extern fn keypress_callback(_self: *mut c_void, raw_buffer: *const i32, len: i32, - is_modifier: i32, key_code: i32, is_key_down: i32) { - unsafe { - let _self = _self as *mut WindowsContext; - if is_key_down != 0 { // KEY DOWN EVENT - if is_modifier == 0 { // Char event - // Convert the received buffer to a character - let buffer = std::slice::from_raw_parts(raw_buffer, len as usize); - let r = std::char::from_u32(buffer[0] as u32); - - // Send the char through the channel - if let Some(c) = r { - let event = Event::Key(KeyEvent::Char(c)); - (*_self).send_channel.send(event).unwrap(); - } - } - }else{ // KEY UP event - if is_modifier != 0 { // Modifier event - let modifier: Option = match key_code { - 0x5B | 0x5C => Some(META), - 0x10 => Some(SHIFT), - 0x12 => Some(ALT), - 0x11 => Some(CTRL), - 0x08 => Some(BACKSPACE), - _ => None, - }; - - if let Some(modifier) = modifier { - let event = Event::Key(KeyEvent::Modifier(modifier)); - (*_self).send_channel.send(event).unwrap(); - } - } - } - } -} - -extern fn icon_click_callback(_self: *mut c_void) { - unsafe { - let _self = _self as *mut WindowsContext; - - let event = Event::Action(ActionType::IconClick); - (*_self).send_channel.send(event).unwrap(); - } -} - - -extern fn context_menu_click_callback(_self: *mut c_void, id: i32) { - unsafe { - let _self = _self as *mut WindowsContext; - - let event = Event::Action(ActionType::from(id)); - (*_self).send_channel.send(event).unwrap(); - } -} \ No newline at end of file diff --git a/src/engine.rs b/src/engine.rs deleted file mode 100644 index 84cb22b..0000000 --- a/src/engine.rs +++ /dev/null @@ -1,204 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use crate::matcher::{Match, MatchReceiver}; -use crate::keyboard::KeyboardManager; -use crate::config::ConfigManager; -use crate::config::BackendType; -use crate::clipboard::ClipboardManager; -use log::{info, warn, error}; -use crate::ui::{UIManager, MenuItem, MenuItemType}; -use crate::event::{ActionEventReceiver, ActionType}; -use crate::extension::Extension; -use std::cell::RefCell; -use std::process::exit; -use std::collections::HashMap; -use regex::{Regex, Captures}; - -pub struct Engine<'a, S: KeyboardManager, C: ClipboardManager, M: ConfigManager<'a>, - U: UIManager> { - keyboard_manager: &'a S, - clipboard_manager: &'a C, - config_manager: &'a M, - ui_manager: &'a U, - - extension_map: HashMap>, - - enabled: RefCell, -} - -impl <'a, S: KeyboardManager, C: ClipboardManager, M: ConfigManager<'a>, U: UIManager> - Engine<'a, S, C, M, U> { - pub fn new(keyboard_manager: &'a S, clipboard_manager: &'a C, - config_manager: &'a M, ui_manager: &'a U, - extensions: Vec>) -> Engine<'a, S, C, M, U> { - // Register all the extensions - let mut extension_map = HashMap::new(); - for extension in extensions.into_iter() { - extension_map.insert(extension.name(), extension); - } - - let enabled = RefCell::new(true); - - Engine{keyboard_manager, - clipboard_manager, - config_manager, - ui_manager, - extension_map, - enabled - } - } - - fn build_menu(&self) -> Vec { - let mut menu = Vec::new(); - - let enabled = self.enabled.borrow(); - let toggle_text = if *enabled { - "Disable" - }else{ - "Enable" - }.to_owned(); - menu.push(MenuItem{ - item_type: MenuItemType::Button, - item_name: toggle_text, - item_id: ActionType::Toggle as i32, - }); - - menu.push(MenuItem{ - item_type: MenuItemType::Separator, - item_name: "".to_owned(), - item_id: 999, - }); - - menu.push(MenuItem{ - item_type: MenuItemType::Button, - item_name: "Exit".to_owned(), - item_id: ActionType::Exit as i32, - }); - - menu - } -} - -lazy_static! { - static ref VAR_REGEX: Regex = Regex::new("\\{\\{\\s*(?P\\w+)\\s*\\}\\}").unwrap(); -} - -impl <'a, S: KeyboardManager, C: ClipboardManager, M: ConfigManager<'a>, U: UIManager> - MatchReceiver for Engine<'a, S, C, M, U>{ - - fn on_match(&self, m: &Match) { - let config = self.config_manager.active_config(); - - if config.disabled { - return; - } - - self.keyboard_manager.delete_string(m.trigger.len() as i32); - - let target_string = if m._has_vars { - let mut output_map = HashMap::new(); - - for variable in m.vars.iter() { - let extension = self.extension_map.get(&variable.var_type); - if let Some(extension) = extension { - let ext_out = extension.calculate(&variable.params); - if let Some(output) = ext_out { - output_map.insert(variable.name.clone(), output); - }else{ - output_map.insert(variable.name.clone(), "".to_owned()); - warn!("Could not generate output for variable: {}", variable.name); - } - }else{ - error!("No extension found for variable type: {}", variable.var_type); - } - } - - // Replace the variables - let result = VAR_REGEX.replace_all(&m.replace, |caps: &Captures| { - let var_name = caps.name("name").unwrap().as_str(); - let output = output_map.get(var_name); - output.unwrap() - }); - - result.to_string() - }else{ // No variables, simple text substitution - m.replace.clone() - }; - - match config.backend { - BackendType::Inject => { - // Send the expected string. On linux, newlines are managed automatically - // while on windows and macos, we need to emulate a Enter key press. - - if cfg!(target_os = "linux") { - self.keyboard_manager.send_string(&target_string); - }else{ - // To handle newlines, substitute each "\n" char with an Enter key press. - let splits = target_string.lines(); - - for (i, split) in splits.enumerate() { - if i > 0 { - self.keyboard_manager.send_enter(); - } - - self.keyboard_manager.send_string(split); - } - } - }, - BackendType::Clipboard => { - self.clipboard_manager.set_clipboard(&target_string); - self.keyboard_manager.trigger_paste(); - }, - } - } - - fn on_enable_update(&self, status: bool) { - let message = if status { - "espanso enabled" - }else{ - "espanso disabled" - }; - - info!("Toggled: {}", message); - - let mut enabled_ref = self.enabled.borrow_mut(); - *enabled_ref = status; - - self.ui_manager.notify(message); - } -} - -impl <'a, S: KeyboardManager, C: ClipboardManager, - M: ConfigManager<'a>, U: UIManager> ActionEventReceiver for Engine<'a, S, C, M, U>{ - - fn on_action_event(&self, e: ActionType) { - match e { - ActionType::IconClick => { - self.ui_manager.show_menu(self.build_menu()); - }, - ActionType::Exit => { - info!("Terminating espanso."); - self.ui_manager.cleanup(); - exit(0); - }, - _ => {} - } - } -} \ No newline at end of file diff --git a/src/event/manager.rs b/src/event/manager.rs deleted file mode 100644 index a119122..0000000 --- a/src/event/manager.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use crate::event::{KeyEventReceiver, ActionEventReceiver, Event}; -use std::sync::mpsc::Receiver; - -pub trait EventManager { - fn eventloop(&self); -} - -pub struct DefaultEventManager<'a> { - receive_channel: Receiver, - key_receivers: Vec<&'a dyn KeyEventReceiver>, - action_receivers: Vec<&'a dyn ActionEventReceiver>, -} - -impl<'a> DefaultEventManager<'a> { - pub fn new(receive_channel: Receiver, key_receivers: Vec<&'a dyn KeyEventReceiver>, - action_receivers: Vec<&'a dyn ActionEventReceiver>) -> DefaultEventManager<'a> { - DefaultEventManager { - receive_channel, - key_receivers, - action_receivers, - } - } -} - -impl <'a> EventManager for DefaultEventManager<'a> { - fn eventloop(&self) { - loop { - match self.receive_channel.recv() { - Ok(event) => { - match event { - Event::Key(key_event) => { - self.key_receivers.iter().for_each(move |&receiver| receiver.on_key_event(key_event.clone())); - }, - Event::Action(action_event) => { - self.action_receivers.iter().for_each(|&receiver| receiver.on_action_event(action_event.clone())); - } - } - }, - Err(_) => panic!("Broken event channel"), - } - } - } -} \ No newline at end of file diff --git a/src/event/mod.rs b/src/event/mod.rs deleted file mode 100644 index abcfdcc..0000000 --- a/src/event/mod.rs +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -pub(crate) mod manager; - -use serde::{Serialize, Deserialize}; - -#[derive(Debug, Clone)] -pub enum Event { - Action(ActionType), - Key(KeyEvent) -} - -#[derive(Debug, Clone)] -pub enum ActionType { - Noop = 0, - Toggle = 1, - Exit = 2, - IconClick = 3, - Enable = 4, - Disable = 5, -} - -impl From for ActionType { - fn from(id: i32) -> Self { - match id { - 1 => ActionType::Toggle, - 2 => ActionType::Exit, - 3 => ActionType::IconClick, - 4 => ActionType::Enable, - 5 => ActionType::Disable, - _ => ActionType::Noop, - } - } -} - -#[derive(Debug, Clone)] -pub enum KeyEvent { - Char(char), - Modifier(KeyModifier) -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub enum KeyModifier { - CTRL, - SHIFT, - ALT, - META, - BACKSPACE, -} - -impl Default for KeyModifier { - fn default() -> Self { - KeyModifier::ALT - } -} - -// Receivers - -pub trait KeyEventReceiver { - fn on_key_event(&self, e: KeyEvent); -} - -pub trait ActionEventReceiver { - fn on_action_event(&self, e: ActionType); -} \ No newline at end of file diff --git a/src/extension/date.rs b/src/extension/date.rs deleted file mode 100644 index ea64bd8..0000000 --- a/src/extension/date.rs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use serde_yaml::{Mapping, Value}; -use chrono::{DateTime, Utc}; - -pub struct DateExtension {} - -impl DateExtension { - pub fn new() -> DateExtension { - DateExtension{} - } -} - -impl super::Extension for DateExtension { - fn name(&self) -> String { - String::from("date") - } - - fn calculate(&self, params: &Mapping) -> Option { - let now: DateTime = Utc::now(); - - let format = params.get(&Value::from("format")); - - let date = if let Some(format) = format { - now.format(format.as_str().unwrap()).to_string() - }else{ - now.to_rfc2822() - }; - - Some(date) - } -} \ No newline at end of file diff --git a/src/extension/mod.rs b/src/extension/mod.rs deleted file mode 100644 index 26da4cd..0000000 --- a/src/extension/mod.rs +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use serde_yaml::Mapping; - -mod date; -mod shell; -mod script; - -pub trait Extension { - fn name(&self) -> String; - fn calculate(&self, params: &Mapping) -> Option; -} - -pub fn get_extensions() -> Vec> { - vec![ - Box::new(date::DateExtension::new()), - Box::new(shell::ShellExtension::new()), - Box::new(script::ScriptExtension::new()), - ] -} \ No newline at end of file diff --git a/src/extension/script.rs b/src/extension/script.rs deleted file mode 100644 index a5519aa..0000000 --- a/src/extension/script.rs +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use serde_yaml::{Mapping, Value}; -use std::process::Command; -use log::{warn, error}; - -pub struct ScriptExtension {} - -impl ScriptExtension { - pub fn new() -> ScriptExtension { - ScriptExtension{} - } -} - -impl super::Extension for ScriptExtension { - fn name(&self) -> String { - String::from("script") - } - - fn calculate(&self, params: &Mapping) -> Option { - let args = params.get(&Value::from("args")); - if args.is_none() { - warn!("No 'args' parameter specified for script variable"); - return None - } - let args = args.unwrap().as_sequence(); - if let Some(args) = args { - let str_args = args.iter().map(|arg| { - arg.as_str().unwrap_or_default().to_string() - }).collect::>(); - - let output = if str_args.len() > 1 { - Command::new(&str_args[0]) - .args(&str_args[1..]) - .output() - }else{ - Command::new(&str_args[0]) - .output() - }; - - match output { - Ok(output) => { - let output_str = String::from_utf8_lossy(output.stdout.as_slice()); - - return Some(output_str.into_owned()) - }, - Err(e) => { - error!("Could not execute script '{:?}', error: {}", args, e); - return None - }, - } - } - - error!("Could not execute script with args '{:?}'", args); - None - } -} \ No newline at end of file diff --git a/src/extension/shell.rs b/src/extension/shell.rs deleted file mode 100644 index 4ca4999..0000000 --- a/src/extension/shell.rs +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use serde_yaml::{Mapping, Value}; -use std::process::Command; -use log::{warn, error}; - -pub struct ShellExtension {} - -impl ShellExtension { - pub fn new() -> ShellExtension { - ShellExtension{} - } -} - -impl super::Extension for ShellExtension { - fn name(&self) -> String { - String::from("shell") - } - - fn calculate(&self, params: &Mapping) -> Option { - let cmd = params.get(&Value::from("cmd")); - if cmd.is_none() { - warn!("No 'cmd' parameter specified for shell variable"); - return None - } - let cmd = cmd.unwrap().as_str().unwrap(); - - let output = if cfg!(target_os = "windows") { - Command::new("cmd") - .args(&["/C", cmd]) - .output() - } else { - Command::new("sh") - .arg("-c") - .arg(cmd) - .output() - }; - - match output { - Ok(output) => { - let output_str = String::from_utf8_lossy(output.stdout.as_slice()); - - Some(output_str.into_owned()) - }, - Err(e) => { - error!("Could not execute cmd '{}', error: {}", cmd, e); - None - }, - } - } -} \ No newline at end of file diff --git a/src/keyboard/linux.rs b/src/keyboard/linux.rs deleted file mode 100644 index 4b9f15b..0000000 --- a/src/keyboard/linux.rs +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::ffi::CString; -use crate::bridge::linux::*; - -pub struct LinuxKeyboardManager { -} - -impl super::KeyboardManager for LinuxKeyboardManager { - fn send_string(&self, s: &str) { - let res = CString::new(s); - match res { - Ok(cstr) => unsafe { send_string(cstr.as_ptr()); } - Err(e) => panic!(e.to_string()) - } - } - - fn send_enter(&self) { - // On linux this is not needed, so NOOP - } - - fn trigger_paste(&self) { - unsafe { - let is_terminal = is_current_window_terminal(); - - // Terminals use a different keyboard combination to paste from clipboard, - // so we need to check the correct situation. - if is_terminal == 0 { - trigger_paste(); - }else{ - trigger_terminal_paste(); - } - } - } - - fn delete_string(&self, count: i32) { - unsafe {delete_string(count)} - } -} \ No newline at end of file diff --git a/src/keyboard/macos.rs b/src/keyboard/macos.rs deleted file mode 100644 index 7381dc1..0000000 --- a/src/keyboard/macos.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::ffi::CString; -use crate::bridge::macos::*; - -pub struct MacKeyboardManager { -} - -impl super::KeyboardManager for MacKeyboardManager { - fn send_string(&self, s: &str) { - let res = CString::new(s); - match res { - Ok(cstr) => unsafe { send_string(cstr.as_ptr()); } - Err(e) => panic!(e.to_string()) - } - } - - fn send_enter(&self) { - unsafe { - // Send the kVK_Return key press - send_vkey(0x24); - } - } - - fn trigger_paste(&self) { - unsafe { - trigger_paste(); - } - } - - fn delete_string(&self, count: i32) { - unsafe {delete_string(count)} - } -} \ No newline at end of file diff --git a/src/keyboard/mod.rs b/src/keyboard/mod.rs deleted file mode 100644 index c48134c..0000000 --- a/src/keyboard/mod.rs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[cfg(target_os = "windows")] -mod windows; - -#[cfg(target_os = "linux")] -mod linux; - -#[cfg(target_os = "macos")] -mod macos; - -pub trait KeyboardManager { - fn send_string(&self, s: &str); - fn send_enter(&self); - fn trigger_paste(&self); - fn delete_string(&self, count: i32); -} - -// WINDOWS IMPLEMENTATION -#[cfg(target_os = "windows")] -pub fn get_manager() -> impl KeyboardManager { - windows::WindowsKeyboardManager{} -} - -// LINUX IMPLEMENTATION -#[cfg(target_os = "linux")] -pub fn get_manager() -> impl KeyboardManager { - linux::LinuxKeyboardManager{} -} - -// MAC IMPLEMENTATION -#[cfg(target_os = "macos")] -pub fn get_manager() -> impl KeyboardManager { - macos::MacKeyboardManager{} -} \ No newline at end of file diff --git a/src/keyboard/windows.rs b/src/keyboard/windows.rs deleted file mode 100644 index df3564d..0000000 --- a/src/keyboard/windows.rs +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use widestring::{U16CString}; -use crate::bridge::windows::*; - -pub struct WindowsKeyboardManager { -} - -impl super::KeyboardManager for WindowsKeyboardManager { - fn send_string(&self, s: &str) { - let res = U16CString::from_str(s); - match res { - Ok(s) => { - unsafe { - send_string(s.as_ptr()); - } - } - Err(e) => println!("Error while sending string: {}", e.to_string()) - } - - } - - fn send_enter(&self) { - unsafe { - // Send the VK_RETURN key press - send_vkey(0x0D); - } - } - - fn trigger_paste(&self) { - unsafe { - trigger_paste(); - } - } - - fn delete_string(&self, count: i32) { - unsafe { - delete_string(count) - } - } -} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 45973d0..0000000 --- a/src/main.rs +++ /dev/null @@ -1,585 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[macro_use] -extern crate lazy_static; - -use std::thread; -use std::fs::{File, OpenOptions}; -use std::path::Path; -use std::process::exit; -use std::sync::mpsc; -use std::sync::mpsc::Receiver; -use std::time::Duration; - -use clap::{App, Arg, SubCommand, ArgMatches}; -use fs2::FileExt; -use log::{info, warn, LevelFilter}; -use simplelog::{CombinedLogger, SharedLogger, TerminalMode, TermLogger, WriteLogger}; - -use crate::config::ConfigSet; -use crate::config::runtime::RuntimeConfigManager; -use crate::engine::Engine; -use crate::event::*; -use crate::event::manager::{DefaultEventManager, EventManager}; -use crate::matcher::scrolling::ScrollingMatcher; -use crate::system::SystemManager; -use crate::ui::UIManager; -use crate::protocol::*; -use std::io::{BufReader, BufRead}; - -mod ui; -mod event; -mod check; -mod bridge; -mod engine; -mod config; -mod system; -mod sysdaemon; -mod context; -mod matcher; -mod keyboard; -mod protocol; -mod clipboard; -mod extension; - -const VERSION: &'static str = env!("CARGO_PKG_VERSION"); -const LOG_FILE: &str = "espanso.log"; - -fn main() { - let matches = App::new("espanso") - .version(VERSION) - .author("Federico Terzi") - .about("Cross-platform Text Expander written in Rust") - .arg(Arg::with_name("config") - .short("c") - .long("config") - .value_name("FILE") - .help("Sets a custom config directory. If not specified, reads the default $HOME/.espanso/default.yaml file, creating it if not present.") - .takes_value(true)) - .arg(Arg::with_name("v") - .short("v") - .multiple(true) - .help("Sets the level of verbosity")) - .subcommand(SubCommand::with_name("cmd") - .about("Send a command to the espanso daemon.") - .subcommand(SubCommand::with_name("exit") - .about("Terminate the daemon.")) - .subcommand(SubCommand::with_name("enable") - .about("Enable the espanso replacement engine.")) - .subcommand(SubCommand::with_name("disable") - .about("Disable the espanso replacement engine.")) - .subcommand(SubCommand::with_name("toggle") - .about("Toggle the status of the espanso replacement engine.")) - ) - .subcommand(SubCommand::with_name("dump") - .about("Prints all current configuration options.")) - .subcommand(SubCommand::with_name("detect") - .about("Tool to detect current window properties, to simplify filters creation.")) - .subcommand(SubCommand::with_name("daemon") - .about("Start the daemon without spawning a new process.")) - .subcommand(SubCommand::with_name("register") - .about("MacOS only. Register espanso in the system daemon manager.")) - .subcommand(SubCommand::with_name("unregister") - .about("MacOS only. Unregister espanso from the system daemon manager.")) - .subcommand(SubCommand::with_name("log") - .about("Print the latest daemon logs.")) - .subcommand(SubCommand::with_name("start") - .about("Start the daemon spawning a new process in the background.")) - .subcommand(SubCommand::with_name("stop") - .about("Stop the espanso daemon.")) - .subcommand(SubCommand::with_name("restart") - .about("Restart the espanso daemon.")) - .subcommand(SubCommand::with_name("status") - .about("Check if the espanso daemon is running or not.")) - .get_matches(); - - let log_level = matches.occurrences_of("v") as i32; - - // Load the configuration - let mut config_set = match matches.value_of("config") { - None => { - if log_level > 1 { - println!("loading configuration from default location..."); - } - ConfigSet::load_default() - }, - Some(path) => { - if log_level > 1 { - println!("loading configuration from custom location: {}", path); - } - ConfigSet::load(Path::new(path)) - }, - }.unwrap_or_else(|e| { - println!("{}", e); - exit(1); - }); - - config_set.default.log_level = log_level; - - // Match the correct subcommand - - if let Some(matches) = matches.subcommand_matches("cmd") { - cmd_main(config_set, matches); - return; - } - - if let Some(_) = matches.subcommand_matches("dump") { - println!("{:#?}", config_set); - return; - } - - if let Some(_) = matches.subcommand_matches("detect") { - detect_main(); - return; - } - - if let Some(_) = matches.subcommand_matches("daemon") { - daemon_main(config_set); - return; - } - - if let Some(_) = matches.subcommand_matches("register") { - register_main(config_set); - return; - } - - if let Some(_) = matches.subcommand_matches("unregister") { - unregister_main(config_set); - return; - } - - if let Some(_) = matches.subcommand_matches("log") { - log_main(); - return; - } - - if let Some(_) = matches.subcommand_matches("start") { - start_main(config_set); - return; - } - - if let Some(_) = matches.subcommand_matches("status") { - status_main(); - return; - } - - if let Some(_) = matches.subcommand_matches("stop") { - stop_main(config_set); - return; - } - - if let Some(_) = matches.subcommand_matches("restart") { - restart_main(config_set); - return; - } - - // Defaults to start subcommand - start_main(config_set); -} - -/// Daemon subcommand, start the event loop and spawn a background thread worker -fn daemon_main(config_set: ConfigSet) { - // Try to acquire lock file - let lock_file = acquire_lock(); - if lock_file.is_none() { - println!("espanso is already running."); - exit(3); - } - - precheck_guard(); - - // Initialize log - let log_level = match config_set.default.log_level { - 0 => LevelFilter::Warn, - 1 => LevelFilter::Info, - 2 | _ => LevelFilter::Debug, - }; - - let mut log_outputs: Vec> = Vec::new(); - - // Initialize terminal output - let terminal_out = TermLogger::new(log_level, - simplelog::Config::default(), TerminalMode::Mixed); - if let Some(terminal_out) = terminal_out { - log_outputs.push(terminal_out); - } - - // Initialize log file output - let espanso_dir = context::get_data_dir(); - let log_file_path = espanso_dir.join(LOG_FILE); - let log_file = OpenOptions::new() - .read(true) - .write(true) - .create(true) - .truncate(true) - .open(log_file_path) - .expect("Cannot create log file."); - let file_out = WriteLogger::new(LevelFilter::Info, simplelog::Config::default(), log_file); - log_outputs.push(file_out); - - CombinedLogger::init( - log_outputs - ).expect("Error opening log destination"); - - // Activate logging for panics - log_panics::init(); - - info!("espanso version {}", VERSION); - info!("starting daemon..."); - - let (send_channel, receive_channel) = mpsc::channel(); - - let context = context::new(send_channel.clone()); - - let config_set_copy = config_set.clone(); - thread::Builder::new().name("daemon_background".to_string()).spawn(move || { - daemon_background(receive_channel, config_set_copy); - }).expect("Unable to spawn daemon background thread"); - - let ipc_server = protocol::get_ipc_server(config_set, send_channel.clone()); - ipc_server.start(); - - context.eventloop(); -} - -/// Background thread worker for the daemon -fn daemon_background(receive_channel: Receiver, config_set: ConfigSet) { - let system_manager = system::get_manager(); - let config_manager = RuntimeConfigManager::new(config_set, system_manager); - - let ui_manager = ui::get_uimanager(); - ui_manager.notify("espanso is running!"); - - let clipboard_manager = clipboard::get_manager(); - - let keyboard_manager = keyboard::get_manager(); - - let extensions = extension::get_extensions(); - - let engine = Engine::new(&keyboard_manager, - &clipboard_manager, - &config_manager, - &ui_manager, - extensions, - ); - - let matcher = ScrollingMatcher::new(&config_manager, &engine); - - let event_manager = DefaultEventManager::new( - receive_channel, - vec!(&matcher), - vec!(&engine, &matcher), - ); - - info!("espanso is running!"); - - event_manager.eventloop(); -} - -/// start subcommand, spawn a background espanso process. -fn start_main(config_set: ConfigSet) { - // Try to acquire lock file - let lock_file = acquire_lock(); - if lock_file.is_none() { - println!("espanso is already running."); - exit(3); - } - release_lock(lock_file.unwrap()); - - precheck_guard(); - - start_daemon(config_set); -} - -#[cfg(target_os = "windows")] -fn start_daemon(_: ConfigSet) { - unsafe { - let res = bridge::windows::start_daemon_process(); - if res < 0 { - println!("Error starting daemon process"); - } - } -} - -#[cfg(target_os = "macos")] -fn start_daemon(config_set: ConfigSet) { - if config_set.default.use_system_agent { - use std::process::Command; - - let res = Command::new("launchctl") - .args(&["start", "com.federicoterzi.espanso"]) - .status(); - - if let Ok(status) = res { - if status.success() { - println!("Daemon started correctly!") - }else{ - println!("Error starting launchd daemon with status: {}", status); - } - }else{ - println!("Error starting launchd daemon: {}", res.unwrap_err()); - } - }else{ - fork_daemon(config_set); - } -} - -#[cfg(target_os = "linux")] -fn start_daemon(config_set: ConfigSet) { - if config_set.default.use_system_agent { - // TODO: systemd - }else{ - fork_daemon(config_set); - } -} - -#[cfg(not(target_os = "windows"))] -fn fork_daemon(config_set: ConfigSet) { - unsafe { - let pid = libc::fork(); - if pid < 0 { - println!("Unable to fork."); - exit(4); - } - if pid > 0 { // Parent process exit - println!("daemon started!"); - exit(0); - } - - // Spawned process - - // Create a new SID for the child process - let sid = libc::setsid(); - if sid < 0 { - exit(5); - } - - // Detach stdout and stderr - let null_path = std::ffi::CString::new("/dev/null").expect("CString unwrap failed"); - let fd = libc::open(null_path.as_ptr(), libc::O_RDWR, 0); - if fd != -1 { - libc::dup2(fd, libc::STDIN_FILENO); - libc::dup2(fd, libc::STDOUT_FILENO); - libc::dup2(fd, libc::STDERR_FILENO); - } - } - - daemon_main(config_set); -} - -/// status subcommand, print the current espanso status -fn status_main() { - let lock_file = acquire_lock(); - if let Some(lock_file) = lock_file { - println!("espanso is not running"); - - release_lock(lock_file); - }else{ - println!("espanso is running"); - } -} - - -/// Stop subcommand, used to stop the daemon. -fn stop_main(config_set: ConfigSet) { - // Try to acquire lock file - let lock_file = acquire_lock(); - if lock_file.is_some() { - println!("espanso daemon is not running."); - release_lock(lock_file.unwrap()); - exit(3); - } - - let res = send_command(config_set, IPCCommand{ - id: "exit".to_owned(), - payload: "".to_owned(), - }); - - if let Err(e) = res { - println!("{}", e); - exit(1); - }else{ - exit(0); - } -} - -/// Kill the daemon if running and start it again -fn restart_main(config_set: ConfigSet) { - // Kill the daemon if running - let lock_file = acquire_lock(); - if lock_file.is_none() { - // Terminate the current espanso daemon - send_command(config_set.clone(), IPCCommand{ - id: "exit".to_owned(), - payload: "".to_owned(), - }).unwrap_or_else(|e| warn!("Unable to send IPC command to daemon: {}", e)); - }else{ - release_lock(lock_file.unwrap()); - } - - std::thread::sleep(Duration::from_millis(300)); - - // Restart the daemon - start_main(config_set); -} - -/// Cli tool used to analyze active windows to extract useful information -/// to create configuration filters. -fn detect_main() { - let system_manager = system::get_manager(); - - println!("Listening for changes, now focus the window you want to analyze."); - println!("You can terminate with CTRL+C\n"); - - let mut last_title : String = "".to_owned(); - let mut last_class : String = "".to_owned(); - let mut last_exec : String = "".to_owned(); - - loop { - let curr_title = system_manager.get_current_window_title().unwrap_or_default(); - let curr_class = system_manager.get_current_window_class().unwrap_or_default(); - let curr_exec = system_manager.get_current_window_executable().unwrap_or_default(); - - // Check if a change occurred - if curr_title != last_title || curr_class != last_class || curr_exec != last_exec { - println!("Detected change, current window has properties:"); - println!("==> Title: '{}'", curr_title); - println!("==> Class: '{}'", curr_class); - println!("==> Executable: '{}'", curr_exec); - println!(); - } - - last_title = curr_title; - last_class = curr_class; - last_exec = curr_exec; - - thread::sleep(Duration::from_millis(500)); - } -} - -/// Send the given command to the espanso daemon -fn cmd_main(config_set: ConfigSet, matches: &ArgMatches) { - let command = if let Some(_) = matches.subcommand_matches("exit") { - Some(IPCCommand { - id: String::from("exit"), - payload: String::from(""), - }) - }else if let Some(_) = matches.subcommand_matches("toggle") { - Some(IPCCommand { - id: String::from("toggle"), - payload: String::from(""), - }) - }else if let Some(_) = matches.subcommand_matches("enable") { - Some(IPCCommand { - id: String::from("enable"), - payload: String::from(""), - }) - }else if let Some(_) = matches.subcommand_matches("disable") { - Some(IPCCommand { - id: String::from("disable"), - payload: String::from(""), - }) - }else{ - None - }; - - if let Some(command) = command { - let res = send_command(config_set, command); - - if res.is_ok() { - exit(0); - }else{ - println!("{}", res.unwrap_err()); - } - } - - exit(1); -} - -fn send_command(config_set: ConfigSet, command: IPCCommand) -> Result<(), String> { - let ipc_client = protocol::get_ipc_client(config_set); - ipc_client.send_command(command) -} - -fn log_main() { - let espanso_dir = context::get_data_dir(); - let log_file_path = espanso_dir.join(LOG_FILE); - - if !log_file_path.exists() { - println!("No log file found."); - exit(2); - } - - let log_file = File::open(log_file_path); - if let Ok(log_file) = log_file { - let reader = BufReader::new(log_file); - for line in reader.lines() { - if let Ok(line) = line { - println!("{}", line); - } - } - - exit(0); - }else{ - println!("Error reading log file"); - exit(1); - } -} - -fn register_main(config_set: ConfigSet) { - sysdaemon::register(config_set); -} - -fn unregister_main(config_set: ConfigSet) { - sysdaemon::unregister(config_set); -} - -fn acquire_lock() -> Option { - let espanso_dir = context::get_data_dir(); - let lock_file_path = espanso_dir.join("espanso.lock"); - let file = OpenOptions::new() - .read(true) - .write(true) - .create(true) - .open(lock_file_path) - .expect("Cannot create reference to lock file."); - - let res = file.try_lock_exclusive(); - - if let Ok(_) = res { - return Some(file) - } - - None -} - -fn release_lock(lock_file: File) { - lock_file.unlock().unwrap() -} - -/// Used to make sure all the required dependencies are present before starting espanso. -fn precheck_guard() { - let satisfied = check::check_dependencies(); - if !satisfied { - println!(); - println!("Pre-check was not successful, espanso could not be started."); - exit(5); - } -} \ No newline at end of file diff --git a/src/matcher/mod.rs b/src/matcher/mod.rs deleted file mode 100644 index ece4eac..0000000 --- a/src/matcher/mod.rs +++ /dev/null @@ -1,152 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use serde::{Serialize, Deserialize, Deserializer}; -use crate::event::{KeyEvent, KeyModifier}; -use crate::event::KeyEventReceiver; -use serde_yaml::Mapping; -use regex::Regex; - -pub(crate) mod scrolling; - -#[derive(Debug, Serialize, Clone)] -pub struct Match { - pub trigger: String, - pub replace: String, - pub vars: Vec, - - #[serde(skip_serializing)] - pub _has_vars: bool, -} - -impl <'de> serde::Deserialize<'de> for Match { - fn deserialize(deserializer: D) -> Result where - D: Deserializer<'de> { - - let auto_match = AutoMatch::deserialize(deserializer)?; - Ok(Match::from(&auto_match)) - } -} - -impl<'a> From<&'a AutoMatch> for Match{ - fn from(other: &'a AutoMatch) -> Self { - lazy_static! { - static ref VAR_REGEX: Regex = Regex::new("\\{\\{\\s*(\\w+)\\s*\\}\\}").unwrap(); - } - - // Check if the match contains variables - let has_vars = VAR_REGEX.is_match(&other.replace); - - Self { - trigger: other.trigger.clone(), - replace: other.replace.clone(), - vars: other.vars.clone(), - _has_vars: has_vars, - } - } -} - -/// Used to deserialize the Match struct before applying some custom elaboration. -#[derive(Debug, Serialize, Deserialize, Clone)] -struct AutoMatch { - pub trigger: String, - pub replace: String, - - #[serde(default = "default_vars")] - pub vars: Vec, -} - -fn default_vars() -> Vec {Vec::new()} - -#[derive(Debug, Serialize, Deserialize, Clone)] -pub struct MatchVariable { - pub name: String, - - #[serde(rename = "type")] - pub var_type: String, - - pub params: Mapping, -} - -pub trait MatchReceiver { - fn on_match(&self, m: &Match); - fn on_enable_update(&self, status: bool); -} - -pub trait Matcher : KeyEventReceiver { - fn handle_char(&self, c: char); - fn handle_modifier(&self, m: KeyModifier); -} - -impl KeyEventReceiver for M { - fn on_key_event(&self, e: KeyEvent) { - match e { - KeyEvent::Char(c) => { - self.handle_char(c); - }, - KeyEvent::Modifier(m) => { - self.handle_modifier(m); - }, - } - } -} - - -// TESTS - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_match_has_vars_should_be_false() { - let match_str = r###" - trigger: ":test" - replace: "There are no variables" - "###; - - let _match : Match = serde_yaml::from_str(match_str).unwrap(); - - assert_eq!(_match._has_vars, false); - } - - #[test] - fn test_match_has_vars_should_be_true() { - let match_str = r###" - trigger: ":test" - replace: "There are {{one}} and {{two}} variables" - "###; - - let _match : Match = serde_yaml::from_str(match_str).unwrap(); - - assert_eq!(_match._has_vars, true); - } - - #[test] - fn test_match_has_vars_with_spaces_should_be_true() { - let match_str = r###" - trigger: ":test" - replace: "There is {{ one }} variable" - "###; - - let _match : Match = serde_yaml::from_str(match_str).unwrap(); - - assert_eq!(_match._has_vars, true); - } -} \ No newline at end of file diff --git a/src/matcher/scrolling.rs b/src/matcher/scrolling.rs deleted file mode 100644 index a14df4a..0000000 --- a/src/matcher/scrolling.rs +++ /dev/null @@ -1,166 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use crate::matcher::{Match, MatchReceiver}; -use std::cell::RefCell; -use crate::event::{KeyModifier, ActionEventReceiver, ActionType}; -use crate::config::ConfigManager; -use crate::event::KeyModifier::BACKSPACE; -use std::time::SystemTime; -use std::collections::VecDeque; - -pub struct ScrollingMatcher<'a, R: MatchReceiver, M: ConfigManager<'a>> { - config_manager: &'a M, - receiver: &'a R, - current_set_queue: RefCell>>>, - toggle_press_time: RefCell, - is_enabled: RefCell, -} - -struct MatchEntry<'a> { - start: usize, - _match: &'a Match -} - -impl <'a, R: MatchReceiver, M: ConfigManager<'a>> ScrollingMatcher<'a, R, M> { - pub fn new(config_manager: &'a M, receiver: &'a R) -> ScrollingMatcher<'a, R, M> { - let current_set_queue = RefCell::new(VecDeque::new()); - let toggle_press_time = RefCell::new(SystemTime::now()); - - ScrollingMatcher{ - config_manager, - receiver, - current_set_queue, - toggle_press_time, - is_enabled: RefCell::new(true) - } - } - - fn toggle(&self) { - let mut is_enabled = self.is_enabled.borrow_mut(); - *is_enabled = !(*is_enabled); - - self.receiver.on_enable_update(*is_enabled); - } - - fn set_enabled(&self, enabled: bool) { - let mut is_enabled = self.is_enabled.borrow_mut(); - *is_enabled = enabled; - - self.receiver.on_enable_update(*is_enabled); - } -} - -impl <'a, R: MatchReceiver, M: ConfigManager<'a>> super::Matcher for ScrollingMatcher<'a, R, M> { - fn handle_char(&self, c: char) { - // if not enabled, avoid any processing - if !*(self.is_enabled.borrow()) { - return; - } - - let mut current_set_queue = self.current_set_queue.borrow_mut(); - - let new_matches: Vec = self.config_manager.matches().iter() - .filter(|&x| x.trigger.chars().nth(0).unwrap() == c) - .map(|x | MatchEntry{start: 1, _match: &x}) - .collect(); - // TODO: use an associative structure to improve the efficiency of this first "new_matches" lookup. - - let combined_matches: Vec = match current_set_queue.back() { - Some(last_matches) => { - let mut updated: Vec = last_matches.iter() - .filter(|&x| { - x._match.trigger[x.start..].chars().nth(0).unwrap() == c - }) - .map(|x | MatchEntry{start: x.start+1, _match: &x._match}) - .collect(); - - updated.extend(new_matches); - updated - }, - None => {new_matches}, - }; - - let mut found_match = None; - - for entry in combined_matches.iter() { - if entry.start == entry._match.trigger.len() { - found_match = Some(entry._match); - break; - } - } - - current_set_queue.push_back(combined_matches); - - if current_set_queue.len() as i32 > (self.config_manager.default_config().backspace_limit + 1) { - current_set_queue.pop_front(); - } - - if let Some(_match) = found_match { - if let Some(last) = current_set_queue.back_mut() { - last.clear(); - } - self.receiver.on_match(_match); - } - } - - fn handle_modifier(&self, m: KeyModifier) { - let config = self.config_manager.default_config(); - - if m == config.toggle_key { - let mut toggle_press_time = self.toggle_press_time.borrow_mut(); - if let Ok(elapsed) = toggle_press_time.elapsed() { - if elapsed.as_millis() < config.toggle_interval as u128 { - self.toggle(); - - let is_enabled = self.is_enabled.borrow(); - - if !*is_enabled { - self.current_set_queue.borrow_mut().clear(); - } - } - } - - (*toggle_press_time) = SystemTime::now(); - } - - // Backspace handling, basically "rewinding history" - if m == BACKSPACE { - let mut current_set_queue = self.current_set_queue.borrow_mut(); - current_set_queue.pop_back(); - } - } -} - -impl <'a, R: MatchReceiver, M: ConfigManager<'a>> ActionEventReceiver for ScrollingMatcher<'a, R, M> { - fn on_action_event(&self, e: ActionType) { - match e { - ActionType::Toggle => { - self.toggle(); - }, - ActionType::Enable => { - self.set_enabled(true); - }, - ActionType::Disable => { - self.set_enabled(false); - }, - _ => {} - } - } -} \ No newline at end of file diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs deleted file mode 100644 index 7818dce..0000000 --- a/src/protocol/mod.rs +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use serde::{Deserialize, Serialize}; -use std::sync::mpsc::Sender; -use crate::event::Event; -use crate::event::ActionType; -use std::io::{BufReader, Read, Write}; -use std::error::Error; -use log::error; -use crate::config::ConfigSet; - -#[cfg(target_os = "windows")] -mod windows; - -#[cfg(not(target_os = "windows"))] -mod unix; - -pub trait IPCServer { - fn start(&self); -} - -pub trait IPCClient { - fn send_command(&self, command: IPCCommand) -> Result<(), String>; -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct IPCCommand { - pub id: String, - - #[serde(default)] - pub payload: String, -} - -impl IPCCommand { - fn to_event(&self) -> Option { - match self.id.as_ref() { - "exit" => { - Some(Event::Action(ActionType::Exit)) - }, - "toggle" => { - Some(Event::Action(ActionType::Toggle)) - }, - "enable" => { - Some(Event::Action(ActionType::Enable)) - }, - "disable" => { - Some(Event::Action(ActionType::Disable)) - }, - _ => None - } - } -} - -fn process_event(event_channel: &Sender, stream: Result) { - match stream { - Ok(stream) => { - let mut json_str= String::new(); - let mut buf_reader = BufReader::new(stream); - let res = buf_reader.read_to_string(&mut json_str); - - if res.is_ok() { - let command : Result = serde_json::from_str(&json_str); - match command { - Ok(command) => { - let event = command.to_event(); - if let Some(event) = event { - event_channel.send(event).expect("Broken event channel"); - } - }, - Err(e) => { - error!("Error deserializing JSON command: {}", e); - }, - } - } - } - Err(err) => { - println!("Error: {}", err); - } - } -} - -fn send_command(command: IPCCommand, stream: Result) -> Result<(), String>{ - match stream { - Ok(mut stream) => { - let json_str = serde_json::to_string(&command); - if let Ok(json_str) = json_str { - stream.write_all(json_str.as_bytes()).unwrap_or_else(|e| { - println!("Can't write to IPC socket: {}", e); - }); - return Ok(()) - } - }, - Err(e) => { - return Err(format!("Can't connect to daemon: {}", e)) - } - } - - Err("Can't send command".to_owned()) -} - -// UNIX IMPLEMENTATION -#[cfg(not(target_os = "windows"))] -pub fn get_ipc_server(_: ConfigSet, event_channel: Sender) -> impl IPCServer { - unix::UnixIPCServer::new(event_channel) -} - -#[cfg(not(target_os = "windows"))] -pub fn get_ipc_client(_: ConfigSet) -> impl IPCClient { - unix::UnixIPCClient::new() -} - -// WINDOWS IMPLEMENTATION -#[cfg(target_os = "windows")] -pub fn get_ipc_server(config_set: ConfigSet, event_channel: Sender) -> impl IPCServer { - windows::WindowsIPCServer::new(config_set, event_channel) -} - -#[cfg(target_os = "windows")] -pub fn get_ipc_client(config_set: ConfigSet) -> impl IPCClient { - windows::WindowsIPCClient::new(config_set) -} \ No newline at end of file diff --git a/src/protocol/unix.rs b/src/protocol/unix.rs deleted file mode 100644 index abdb08a..0000000 --- a/src/protocol/unix.rs +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::unix::net::{UnixStream,UnixListener}; -use log::{info, warn}; -use std::sync::mpsc::Sender; -use super::IPCCommand; - -use crate::context; -use crate::event::*; -use crate::protocol::{process_event, send_command}; - -const UNIX_SOCKET_NAME : &str = "espanso.sock"; - -pub struct UnixIPCServer { - event_channel: Sender, -} - -impl UnixIPCServer { - pub fn new(event_channel: Sender) -> UnixIPCServer { - UnixIPCServer {event_channel} - } -} - -impl super::IPCServer for UnixIPCServer { - fn start(&self) { - let event_channel = self.event_channel.clone(); - std::thread::Builder::new().name("ipc_server".to_string()).spawn(move || { - let espanso_dir = context::get_data_dir(); - let unix_socket = espanso_dir.join(UNIX_SOCKET_NAME); - - std::fs::remove_file(unix_socket.clone()).unwrap_or_else(|e| { - warn!("Unable to delete Unix socket: {}", e); - }); - let listener = UnixListener::bind(unix_socket.clone()).expect("Can't bind to Unix Socket"); - - info!("Binded to IPC unix socket: {}", unix_socket.as_path().display()); - - for stream in listener.incoming() { - process_event(&event_channel, stream); - } - }).expect("Unable to spawn IPC server thread"); - } -} - -pub struct UnixIPCClient { - -} - -impl UnixIPCClient { - pub fn new() -> UnixIPCClient { - UnixIPCClient{} - } -} - -impl super::IPCClient for UnixIPCClient { - fn send_command(&self, command: IPCCommand) -> Result<(), String> { - let espanso_dir = context::get_data_dir(); - let unix_socket = espanso_dir.join(UNIX_SOCKET_NAME); - - // Open the stream - let stream = UnixStream::connect(unix_socket); - - send_command(command, stream) - } -} \ No newline at end of file diff --git a/src/protocol/windows.rs b/src/protocol/windows.rs deleted file mode 100644 index 8cabd30..0000000 --- a/src/protocol/windows.rs +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use log::{info}; -use std::sync::mpsc::Sender; -use std::net::{TcpListener, TcpStream}; -use super::IPCCommand; - -use crate::event::*; -use crate::protocol::{process_event, send_command}; -use crate::config::ConfigSet; - -pub struct WindowsIPCServer { - config_set: ConfigSet, - event_channel: Sender, -} - -impl WindowsIPCServer { - pub fn new(config_set: ConfigSet, event_channel: Sender) -> WindowsIPCServer { - WindowsIPCServer {config_set, event_channel} - } -} - -impl super::IPCServer for WindowsIPCServer { - fn start(&self) { - let event_channel = self.event_channel.clone(); - let server_port = self.config_set.default.ipc_server_port; - std::thread::Builder::new().name("ipc_server".to_string()).spawn(move || { - let listener = TcpListener::bind( - format!("127.0.0.1:{}", server_port) - ).expect("Error binding to IPC server port"); - - info!("Binded to IPC tcp socket: {}", listener.local_addr().unwrap().to_string()); - - for stream in listener.incoming() { - process_event(&event_channel, stream); - } - }).expect("Unable to spawn IPC server thread"); - } -} - -pub struct WindowsIPCClient { - config_set: ConfigSet, -} - -impl WindowsIPCClient { - pub fn new(config_set: ConfigSet) -> WindowsIPCClient { - WindowsIPCClient{config_set} - } -} - -impl super::IPCClient for WindowsIPCClient { - fn send_command(&self, command: IPCCommand) -> Result<(), String> { - let stream = TcpStream::connect( - ("127.0.0.1", self.config_set.default.ipc_server_port as u16) - ); - - send_command(command, stream) - } -} \ No newline at end of file diff --git a/src/res/config.yaml b/src/res/config.yaml deleted file mode 100644 index af10305..0000000 --- a/src/res/config.yaml +++ /dev/null @@ -1,60 +0,0 @@ -# espanso configuration file - -# This is the default configuration file, change it as you like it -# You can refer to the official documentation: -# https://github.com/federico-terzi/espanso - -# Matches are the substitution rules, when you type the "trigger" string -# it gets replaced by the "replace" string. -matches: - # Simple text replacement - - trigger: ":espanso" - replace: "Hi there!" - - # Dates - - trigger: ":date" - replace: "{{mydate}}" - vars: - - name: mydate - type: date - params: - format: "%m/%d/%Y" - - # Shell commands - - trigger: ":shell" - replace: "{{output}}" - vars: - - name: output - type: shell - params: - cmd: "echo Hello from you shell" - - # Emojis - - trigger: ":lol" - replace: "😂" - - trigger: ":llol" - replace: "😂😂😂😂" - - trigger: ":sad" - replace: "☹" - - trigger: ":ssad" - replace: "☹☹☹☹" - - # Accented letters - - trigger: "e''" - replace: "è" - - trigger: "e//" - replace: "é" - - trigger: "a''" - replace: "à" - - trigger: "i''" - replace: "ì" - - trigger: "o''" - replace: "ò" - - trigger: "u''" - replace: "ù" - - # Capital accented letters - - trigger: "E''" - replace: "È" - - trigger: "E//" - replace: "É" \ No newline at end of file diff --git a/src/res/mac/EspansoNotifyHelper.zip b/src/res/mac/EspansoNotifyHelper.zip deleted file mode 100644 index 036ba7c3d7e0e080c2d98bbb93798f755cedc49e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118226 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
    )N%^EtN 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
    bKVI}eFVpyMHPp6X=-#V5+n(3xFXo0 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 - - - - Label - com.federicoterzi.espanso - ProgramArguments - - {{{espanso_path}}} - daemon - - RunAtLoad - - StandardErrorPath - /tmp/espanso.err - StandardOutPath - /tmp/espanso.out - - \ No newline at end of file diff --git a/src/res/mac/icon.png b/src/res/mac/icon.png deleted file mode 100644 index 04d9593a33bad04d0cf2d2bdc3d95a47790a895b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G6FprVLn>}1B}jZcz}R(?iOa!8zT^Mmhjl@`mHkHrB>WVv zE%@s(>zs3}Wbd2{?>=prUL%ZB^Td)v+&m$K8bV3K09bNI-n zV8?NUdqK^j163;GYmN)mxim9vIndVX&ZNo6%f!TT=|WvlOlrg74c~X{Iqq>FmCr*; k-huh=;R_ma3`{%>mBk*@9r}Ex0UgKS>FVdQ&MBb@01jDGDF6Tf diff --git a/src/res/test/config_with_bad_yaml.yaml b/src/res/test/config_with_bad_yaml.yaml deleted file mode 100644 index b5d6822..0000000 --- a/src/res/test/config_with_bad_yaml.yaml +++ /dev/null @@ -1,12 +0,0 @@ -backend: Clipboard - -definitely a bad yaml - -matches: - # Default - - trigger: ":espanso" - replace: "Hi there!" - - # Emojis - - trigger: ":lol" - replace: "😂" \ No newline at end of file diff --git a/src/res/test/working_config.yaml b/src/res/test/working_config.yaml deleted file mode 100644 index bcf8bf6..0000000 --- a/src/res/test/working_config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -backend: Clipboard - -matches: - # Default - - trigger: ":espanso" - replace: "Hi there!" - - # Emojis - - trigger: ":lol" - replace: "😂" \ No newline at end of file diff --git a/src/res/win/espanso.bmp b/src/res/win/espanso.bmp deleted file mode 100644 index 882c849d2beaf70e291a0fa7eaef04b61bcf6df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19256 zcmeHPX>c4z6&|}F1e?Sul9Xd&QsxK{YzhJ?Y(f>~GDRxnDxfF|DuF-@CP0e(2&v#C ziWA{DB$j2zvL#EhF6%z6Ti(^Nt9xag-qq?_>s%eyt<`<3Hhin0CheWs*`A)=wSHK& z+IsWm^?UE@p6-7Ax@QkPd*EqqEPmE00tUK0jvG>&G2PQNn#utH6 z2A#)S(Ygl;n}2!zMux+&PHow*f(t7*TKa;Ms`h%sqDUZC|7G+7+hVt0!N?k0wa?Xb zzTxqSRRmKkTw?m;>{7q1BmTIF9(u9tKCyeg;GEZNHCW!hRb$$ittq+sJHEgruM=In zZ!F&*ZAsXuvmBH6%GY;w=D!l|_>i=(FXc7-+}Chu^ruvR*VjGTw%8L_zK6yc|Hxb@ z{`}yi&PS~~F>4Gj{(^siD6-N!mg{xM6SLP8`QT?^??RrOGhHa&=4S{>%?(Uwz0%5S z_J#10yOdhLCGu1AZR#N>RqgYZ^Jj~=GX>n~d@eYjJ6*tiT*!sUE+UlLjVQTWWi+C1 z`@2%3r2Kh}6V!jRx%bkY9}vLH3!E+FPUUgOGoAeZWO65SxsW0b@?>!aI=lX-%uU=s zUc_LLFA}QZKFr~crEx)dTzthNI`co8dV~ANHPiDQb4&emOIF)L_n57@V<_HW2`p^> zO+?9kCoXgEraPM+Wtr`wAVORQ$mq5gOYdc{3vYu9oJga}9;$3VI%YG{SYKOT?inp8 zYJTzKf-Puq*j3ZkGYi*gjFK{Ct$$$wtL4y4_*8WStUFdog_QKnLQkgQNmSRFLUzcR zh96U!{AiZ@j29CpIA zyB1f5#QrmIklNa)J;uHqqx%x2Q4A?c!J@Byl*0w(Zkb>1p|nCH7OLHb;ZCVDf;`ee zG*In|Rrk0@7PFi7aOgU_GT~Y2eN`fsg%47k_YxjJ+U0PXKRKhiANE zbKuM@bYsn1+5UQR^#MG_PzCtN@L&X^cYsDRSE|S5H9k#K)nUw19xnQBW+!(K(5^H1TSVnSU_4|&cbEi}%b_D+=XOM)7 zhXnz80$mRk#f;8f!G`YBn7=Tld1Y2gsQiZ55Sa8Z1xZYlm&*5uwW;S=C$v~of8Y(s z36INUnos6&;lpLjS_R$}^tn#2x5WzrL#o?hr8 zJyArXnW{Qo73*~2q#M4ECMKs;JR6av_jttH(sx=-V#hL)>f*`9rGxn-6;`id+HLmr zWhu3v@^DNJeHI}ZzmUiG(Iif5eEw4jH?itOIafA7YAU5)lX+%e!UmlRr&vq-P{vdiiJw`ziCmh!7i!w${ z{pST?r340E%o?%f56kFhxV5ro3n|*lmWbAyUzWGHvNod>CMnN{5V`fw$Xii#x4HLy zmq3NIC{N=gl}B65qqJZe9l4;%^DN`h69}x@QU7;;l*{rkCslo$#sm&w3Z63%{Ej@P zr^L$r3(IQvzLTmR!^}m7DD*DTpFqoRe1=}Fq$GxG^yRZf+Z%g4Ps)<5u(CFhR(l9x z72A;pEaxTFN;2n{1|?A_Vxli2$j9n6PQTY|jdM68O-VCN1Ci&h?7$p^dSkYgQD*t4!_!W_i?j;Y%qrkMdYNVk-f;RxBK_Jmf!si9iKgtIR6`(r(*e zv^*}EyUa-d(gA4PdRYX(6jWu_>+#v~sL|_hy5P*~eq5P>h9=gE)b0 z8^TAmghQb?hC%5(vlw2@_L2XJ)Z*wqmd4B|6ct2TAXM`iMecc5xVGy}MGmVMo?YzC zssEXGQP5~Z#>u-wv7)NLt^{^hY5Y_#6J55G?OhB-h-if228Isxh}>zw3txDEk_`!j)*2BW@tKf$n cTCL&u^%bnOH}gZg32XJXOSfwPHNbKI17P=2{r~^~ diff --git a/src/res/win/espanso.ico b/src/res/win/espanso.ico deleted file mode 100644 index 1d1c06c7ef5bf408ce91222819c303d8c22201a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28522 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. - */ - -// This functions are used to register/unregister espanso from the system daemon manager. - -use crate::config::ConfigSet; - -// INSTALLATION - -#[cfg(target_os = "macos")] -const MAC_PLIST_CONTENT : &str = include_str!("res/mac/com.federicoterzi.espanso.plist"); -#[cfg(target_os = "macos")] -const MAC_PLIST_FILENAME : &str = "com.federicoterzi.espanso.plist"; - -#[cfg(target_os = "macos")] -pub fn register(_config_set: ConfigSet) { - use std::fs::create_dir_all; - use std::process::{Command, ExitStatus}; - - let home_dir = dirs::home_dir().expect("Could not get user home directory"); - let library_dir = home_dir.join("Library"); - let agents_dir = library_dir.join("LaunchAgents"); - - // Make sure agents directory exists - if !agents_dir.exists() { - create_dir_all(agents_dir.clone()).expect("Could not create LaunchAgents directory"); - } - - let plist_file = agents_dir.join(MAC_PLIST_FILENAME); - if !plist_file.exists() { - println!("Creating LaunchAgents entry: {}", plist_file.to_str().unwrap_or_default()); - - let espanso_path = std::env::current_exe().expect("Could not get espanso executable path"); - println!("Entry will point to: {}", espanso_path.to_str().unwrap_or_default()); - - let plist_content = String::from(MAC_PLIST_CONTENT) - .replace("{{{espanso_path}}}", espanso_path.to_str().unwrap_or_default()); - - std::fs::write(plist_file.clone(), plist_content).expect("Unable to write plist file"); - - println!("Entry created correctly!") - } - - println!("Reloading entry..."); - - let res = Command::new("launchctl") - .args(&["unload", "-w", plist_file.to_str().unwrap_or_default()]) - .output(); - - let res = Command::new("launchctl") - .args(&["load", "-w", plist_file.to_str().unwrap_or_default()]) - .status(); - - if let Ok(status) = res { - if status.success() { - println!("Entry loaded correctly!") - } - }else{ - println!("Error loading new entry"); - } -} - -#[cfg(target_os = "macos")] -pub fn unregister(_config_set: ConfigSet) { - use std::fs::create_dir_all; - use std::process::{Command, ExitStatus}; - - let home_dir = dirs::home_dir().expect("Could not get user home directory"); - let library_dir = home_dir.join("Library"); - let agents_dir = library_dir.join("LaunchAgents"); - - let plist_file = agents_dir.join(MAC_PLIST_FILENAME); - if plist_file.exists() { - let _res = Command::new("launchctl") - .args(&["unload", "-w", plist_file.to_str().unwrap_or_default()]) - .output(); - - std::fs::remove_file(&plist_file).expect("Could not remove espanso entry"); - - println!("Entry removed correctly!") - }else{ - println!("espanso is not installed"); - } -} - -// LINUX - -#[cfg(target_os = "linux")] -pub fn register(config_set: ConfigSet) { - println!("Linux does not support automatic system daemon integration."); -} - -#[cfg(target_os = "linux")] -pub fn unregister(config_set: ConfigSet) { - println!("Linux does not support automatic system daemon integration."); -} - -// WINDOWS - -#[cfg(target_os = "windows")] -pub fn register(_config_set: ConfigSet) { - println!("Windows does not support automatic system daemon integration.") -} - -#[cfg(target_os = "windows")] -pub fn unregister(_config_set: ConfigSet) { - println!("Windows does not support automatic system daemon integration.") -} \ No newline at end of file diff --git a/src/system/linux.rs b/src/system/linux.rs deleted file mode 100644 index df05ac3..0000000 --- a/src/system/linux.rs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::raw::c_char; - -use crate::bridge::linux::{get_active_window_name, get_active_window_class, get_active_window_executable}; -use std::ffi::CStr; - -pub struct LinuxSystemManager {} - -impl super::SystemManager for LinuxSystemManager { - fn get_current_window_title(&self) -> Option { - unsafe { - let mut buffer : [c_char; 100] = [0; 100]; - let res = get_active_window_name(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = CStr::from_ptr(buffer.as_ptr()); - - let string = c_string.to_str(); - if let Ok(string) = string { - return Some((*string).to_owned()); - } - } - } - - None - } - - fn get_current_window_class(&self) -> Option { - unsafe { - let mut buffer : [c_char; 100] = [0; 100]; - let res = get_active_window_class(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = CStr::from_ptr(buffer.as_ptr()); - - let string = c_string.to_str(); - if let Ok(string) = string { - return Some((*string).to_owned()); - } - } - } - - None - } - - fn get_current_window_executable(&self) -> Option { - unsafe { - let mut buffer : [c_char; 100] = [0; 100]; - let res = get_active_window_executable(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = CStr::from_ptr(buffer.as_ptr()); - - let string = c_string.to_str(); - if let Ok(string) = string { - return Some((*string).to_owned()); - } - } - } - - None - } -} - -impl LinuxSystemManager { - pub fn new() -> LinuxSystemManager { - LinuxSystemManager{} - } -} \ No newline at end of file diff --git a/src/system/macos.rs b/src/system/macos.rs deleted file mode 100644 index fc867d1..0000000 --- a/src/system/macos.rs +++ /dev/null @@ -1,77 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::os::raw::c_char; - -use std::ffi::CStr; -use crate::bridge::macos::{get_active_app_bundle, get_active_app_identifier}; - -pub struct MacSystemManager { - -} - -impl super::SystemManager for MacSystemManager { - fn get_current_window_title(&self) -> Option { - self.get_current_window_class() - } - - fn get_current_window_class(&self) -> Option { - unsafe { - let mut buffer : [c_char; 250] = [0; 250]; - let res = get_active_app_identifier(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = CStr::from_ptr(buffer.as_ptr()); - - let string = c_string.to_str(); - if let Ok(string) = string { - return Some((*string).to_owned()); - } - } - } - - None - } - - fn get_current_window_executable(&self) -> Option { - unsafe { - let mut buffer : [c_char; 250] = [0; 250]; - let res = get_active_app_bundle(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = CStr::from_ptr(buffer.as_ptr()); - - let string = c_string.to_str(); - if let Ok(string) = string { - return Some((*string).to_owned()); - } - } - } - - None - } -} - -impl MacSystemManager { - pub fn new() -> MacSystemManager { - MacSystemManager{ - - } - } -} \ No newline at end of file diff --git a/src/system/mod.rs b/src/system/mod.rs deleted file mode 100644 index fadcf5a..0000000 --- a/src/system/mod.rs +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[cfg(target_os = "windows")] -mod windows; - -#[cfg(target_os = "linux")] -mod linux; - -#[cfg(target_os = "macos")] -mod macos; - -pub trait SystemManager { - fn get_current_window_title(&self) -> Option; - fn get_current_window_class(&self) -> Option; - fn get_current_window_executable(&self) -> Option; -} - -// LINUX IMPLEMENTATION -#[cfg(target_os = "linux")] -pub fn get_manager() -> impl SystemManager { - linux::LinuxSystemManager::new() -} - -// WINDOWS IMPLEMENTATION -#[cfg(target_os = "windows")] -pub fn get_manager() -> impl SystemManager { - windows::WindowsSystemManager::new() -} - -// MAC IMPLEMENTATION -#[cfg(target_os = "macos")] -pub fn get_manager() -> impl SystemManager { - macos::MacSystemManager::new() -} \ No newline at end of file diff --git a/src/system/windows.rs b/src/system/windows.rs deleted file mode 100644 index 01e9cfd..0000000 --- a/src/system/windows.rs +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use widestring::U16CString; -use crate::bridge::windows::*; - -pub struct WindowsSystemManager { - -} - -impl WindowsSystemManager { - pub fn new() -> WindowsSystemManager { - WindowsSystemManager{} - } -} - -impl super::SystemManager for WindowsSystemManager { - fn get_current_window_title(&self) -> Option { - unsafe { - let mut buffer : [u16; 100] = [0; 100]; - let res = get_active_window_name(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = U16CString::from_ptr_str(buffer.as_ptr()); - - let string = c_string.to_string_lossy(); - return Some((*string).to_owned()); - } - } - - None - } - - fn get_current_window_class(&self) -> Option { - self.get_current_window_executable() - } - - fn get_current_window_executable(&self) -> Option { - unsafe { - let mut buffer : [u16; 250] = [0; 250]; - let res = get_active_window_executable(buffer.as_mut_ptr(), buffer.len() as i32); - - if res > 0 { - let c_string = U16CString::from_ptr_str(buffer.as_ptr()); - - let string = c_string.to_string_lossy(); - return Some((*string).to_owned()); - } - } - - None - } -} \ No newline at end of file diff --git a/src/ui/linux.rs b/src/ui/linux.rs deleted file mode 100644 index de8ac81..0000000 --- a/src/ui/linux.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::process::Command; -use super::MenuItem; -use log::error; - -pub struct LinuxUIManager {} - -impl super::UIManager for LinuxUIManager { - fn notify(&self, message: &str) { - let res = Command::new("notify-send") - .args(&["-t", "2000", "espanso", message]) - .output(); - - if let Err(e) = res { - error!("Could not send a notification, error: {}", e); - } - } - - fn show_menu(&self, _menu: Vec) { - // Not implemented on linux - } - - fn cleanup(&self) { - // Nothing to do here - } -} - -impl LinuxUIManager { - pub fn new() -> LinuxUIManager { - LinuxUIManager{} - } -} \ No newline at end of file diff --git a/src/ui/macos.rs b/src/ui/macos.rs deleted file mode 100644 index 8bcf791..0000000 --- a/src/ui/macos.rs +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use std::{fs, io}; -use std::io::{Cursor}; -use std::ffi::CString; -use log::{info, warn, debug}; -use std::path::PathBuf; -use std::process::Command; -use crate::ui::{MenuItem, MenuItemType}; -use crate::bridge::macos::{MacMenuItem, show_context_menu}; -use std::os::raw::c_char; -use crate::context; - -const NOTIFY_HELPER_BINARY : &'static [u8] = include_bytes!("../res/mac/EspansoNotifyHelper.zip"); -const DEFAULT_NOTIFICATION_DELAY : f64 = 1.5; - -pub struct MacUIManager { - notify_helper_path: PathBuf -} - -impl super::UIManager for MacUIManager { - fn notify(&self, message: &str) { - let executable_path = self.notify_helper_path.join("Contents"); - let executable_path = executable_path.join("MacOS"); - let executable_path = executable_path.join("EspansoNotifyHelper"); - - let res = Command::new(executable_path) - .args(&["espanso", message, &DEFAULT_NOTIFICATION_DELAY.to_string()]) - .spawn(); - - if let Err(e) = res { - warn!("Error while dispatching Notify Helper {}", e) - } - } - - fn show_menu(&self, menu: Vec) { - let mut raw_menu = Vec::new(); - - for item in menu.iter() { - let text = CString::new(item.item_name.clone()).unwrap_or_default(); - let mut str_buff : [c_char; 100] = [0; 100]; - unsafe { - std::ptr::copy(text.as_ptr(), str_buff.as_mut_ptr(), item.item_name.len()); - } - - let menu_type = match item.item_type { - MenuItemType::Button => {1}, - MenuItemType::Separator => {2}, - }; - - let raw_item = MacMenuItem { - item_id: item.item_id, - item_type: menu_type, - item_name: str_buff, - }; - - raw_menu.push(raw_item); - } - - unsafe { show_context_menu(raw_menu.as_ptr(), raw_menu.len() as i32); } - } - - fn cleanup(&self) { - // Nothing to do here - } -} - -impl MacUIManager { - pub fn new() -> MacUIManager { - let notify_helper_path = MacUIManager::initialize_notify_helper(); - - MacUIManager{ - notify_helper_path - } - } - - fn initialize_notify_helper() -> PathBuf { - let espanso_dir = context::get_data_dir(); - - info!("Initializing EspansoNotifyHelper in {}", espanso_dir.as_path().display()); - - let espanso_target = espanso_dir.join("EspansoNotifyHelper.app"); - - if espanso_target.exists() { - info!("EspansoNotifyHelper already initialized, skipping."); - }else{ - // Extract zip file - let reader = Cursor::new(NOTIFY_HELPER_BINARY); - - let mut archive = zip::ZipArchive::new(reader).unwrap(); - - for i in 0..archive.len() { - let mut file = archive.by_index(i).unwrap(); - let outpath = espanso_dir.join(file.sanitized_name()); - - { - let comment = file.comment(); - if !comment.is_empty() { - debug!("File {} comment: {}", i, comment); - } - } - - if (&*file.name()).ends_with('/') { - debug!("File {} extracted to \"{}\"", i, outpath.as_path().display()); - fs::create_dir_all(&outpath).unwrap(); - } else { - debug!("File {} extracted to \"{}\" ({} bytes)", i, outpath.as_path().display(), file.size()); - if let Some(p) = outpath.parent() { - if !p.exists() { - fs::create_dir_all(&p).unwrap(); - } - } - let mut outfile = fs::File::create(&outpath).unwrap(); - io::copy(&mut file, &mut outfile).unwrap(); - } - - use std::os::unix::fs::PermissionsExt; - - if let Some(mode) = file.unix_mode() { - fs::set_permissions(&outpath, fs::Permissions::from_mode(mode)).unwrap(); - } - } - } - - espanso_target - } -} \ No newline at end of file diff --git a/src/ui/mod.rs b/src/ui/mod.rs deleted file mode 100644 index 1b096c6..0000000 --- a/src/ui/mod.rs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -#[cfg(target_os = "windows")] -mod windows; - -#[cfg(target_os = "linux")] -mod linux; - -#[cfg(target_os = "macos")] -mod macos; - -pub trait UIManager { - fn notify(&self, message: &str); - fn show_menu(&self, menu: Vec); - fn cleanup(&self); -} - -pub enum MenuItemType { - Button, - Separator, -} - -pub struct MenuItem { - pub item_id: i32, - pub item_type: MenuItemType, - pub item_name: String, -} - -// MAC IMPLEMENTATION -#[cfg(target_os = "macos")] -pub fn get_uimanager() -> impl UIManager { - macos::MacUIManager::new() -} - -// LINUX IMPLEMENTATION -#[cfg(target_os = "linux")] -pub fn get_uimanager() -> impl UIManager { - linux::LinuxUIManager::new() -} - -// WINDOWS IMPLEMENTATION -#[cfg(target_os = "windows")] -pub fn get_uimanager() -> impl UIManager { - windows::WindowsUIManager::new() -} \ No newline at end of file diff --git a/src/ui/windows.rs b/src/ui/windows.rs deleted file mode 100644 index 4024939..0000000 --- a/src/ui/windows.rs +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of espanso. - * - * Copyright (C) 2019 Federico Terzi - * - * espanso 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. - * - * espanso 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 espanso. If not, see . - */ - -use crate::bridge::windows::{show_notification, close_notification, WindowsMenuItem, show_context_menu, cleanup_ui}; -use widestring::U16CString; -use std::{thread, time}; -use log::{debug}; -use std::sync::Mutex; -use std::sync::Arc; -use crate::ui::{MenuItem, MenuItemType}; - -pub struct WindowsUIManager { - id: Arc> -} - -impl super::UIManager for WindowsUIManager { - fn notify(&self, message: &str) { - let current_id: i32 = { - let mut id = self.id.lock().unwrap(); - *id += 1; - *id - }; - - // Setup a timeout to close the notification - let id = Arc::clone(&self.id); - let _ = thread::Builder::new().name("notification_thread".to_string()).spawn(move || { - for _ in 1..10 { - let duration = time::Duration::from_millis(200); - thread::sleep(duration); - - let new_id = id.lock().unwrap(); - if *new_id != current_id { - debug!("Cancelling notification close event with id {}", current_id); - return; - } - } - - unsafe { - close_notification(); - } - }); - - // Create and show a window notification - unsafe { - let message = U16CString::from_str(message).unwrap(); - show_notification(message.as_ptr()); - } - - } - - fn show_menu(&self, menu: Vec) { - let mut raw_menu = Vec::new(); - - for item in menu.iter() { - let text = U16CString::from_str(item.item_name.clone()).unwrap_or_default(); - let mut str_buff : [u16; 100] = [0; 100]; - unsafe { - std::ptr::copy(text.as_ptr(), str_buff.as_mut_ptr(), text.len()); - } - - let menu_type = match item.item_type { - MenuItemType::Button => {1}, - MenuItemType::Separator => {2}, - }; - - let raw_item = WindowsMenuItem { - item_id: item.item_id, - item_type: menu_type, - item_name: str_buff, - }; - - raw_menu.push(raw_item); - } - - unsafe { show_context_menu(raw_menu.as_ptr(), raw_menu.len() as i32); } - } - - fn cleanup(&self) { - unsafe { - cleanup_ui(); - } - } -} - -impl WindowsUIManager { - pub fn new() -> WindowsUIManager { - let id = Arc::new(Mutex::new(0)); - - let manager = WindowsUIManager { - id - }; - - manager - } -} \ No newline at end of file