From 915beb0bdc3131e92a87044eee620d591b6af6cc Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Thu, 26 Sep 2024 22:23:45 -0400 Subject: [PATCH] aaa? --- .gitattributes | 3 + README.md | 19 + git-agecrypt.toml | 13 + justfile | 21 + nix/etcnixos/common.nix | 203 ++++++++ nix/etcnixos/declarative-nm.nix | 52 ++ nix/etcnixos/flake.lock | 458 ++++++++++++++++++ nix/etcnixos/flake.nix | 78 +++ nix/etcnixos/hardware_desktop.nix | 59 +++ nix/etcnixos/hardware_laptop.nix | 53 ++ nix/etcnixos/networking.nix | 19 + nix/etcnixos/secrets/primary-password.age | Bin 0 -> 544 bytes nix/etcnixos/secrets/secrets.nix | 16 + nix/etcnixos/secrets/secureboot.tar | Bin 0 -> 30720 bytes nix/etcnixos/secrets/wifi-passwords.nix | 22 + nix/etcnixos/system-mreow.nix | 125 +++++ nix/etcnixos/system-nixos.nix | 148 ++++++ nix/home-manager/flake.lock | 400 +++++++++++++++ nix/home-manager/flake.nix | 103 ++++ nix/home-manager/gui.nix | 163 +++++++ nix/home-manager/no-gui.nix | 202 ++++++++ nix/home-manager/progs/alacritty.nix | 124 +++++ nix/home-manager/progs/borg.nix | 46 ++ nix/home-manager/progs/fish.nix | 65 +++ .../gpt4all-HEAD-disable-settings-err.patch | 19 + .../gpt4all-HEAD-disable-settings-err.patch | 19 + .../gpt4all-HEAD-embeddings-model.patch | 53 ++ nix/home-manager/progs/gpt4all/gpt4all.nix | 124 +++++ nix/home-manager/progs/helix.nix | 288 +++++++++++ nix/home-manager/progs/librewolf.nix | 77 +++ nix/home-manager/progs/niri.nix | 167 +++++++ nix/home-manager/progs/rss.nix | 91 ++++ nix/home-manager/progs/swaylock.nix | 31 ++ nix/home-manager/progs/waybar.nix | 253 ++++++++++ .../secrets/borg-laptop-password.age | 10 + nix/home-manager/secrets/factorio.nix | 4 + nix/home-manager/secrets/gnupg.age | Bin 0 -> 113071 bytes nix/home-manager/secrets/secrets.nix | 18 + nix/home-manager/secrets/server-password.age | 9 + nix/home-manager/system-mreow.nix | 183 +++++++ nix/home-manager/system-nixos.nix | 45 ++ 41 files changed, 3783 insertions(+) create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 git-agecrypt.toml create mode 100644 justfile create mode 100644 nix/etcnixos/common.nix create mode 100644 nix/etcnixos/declarative-nm.nix create mode 100644 nix/etcnixos/flake.lock create mode 100644 nix/etcnixos/flake.nix create mode 100644 nix/etcnixos/hardware_desktop.nix create mode 100644 nix/etcnixos/hardware_laptop.nix create mode 100644 nix/etcnixos/networking.nix create mode 100644 nix/etcnixos/secrets/primary-password.age create mode 100644 nix/etcnixos/secrets/secrets.nix create mode 100644 nix/etcnixos/secrets/secureboot.tar create mode 100644 nix/etcnixos/secrets/wifi-passwords.nix create mode 100644 nix/etcnixos/system-mreow.nix create mode 100644 nix/etcnixos/system-nixos.nix create mode 100644 nix/home-manager/flake.lock create mode 100644 nix/home-manager/flake.nix create mode 100644 nix/home-manager/gui.nix create mode 100644 nix/home-manager/no-gui.nix create mode 100644 nix/home-manager/progs/alacritty.nix create mode 100644 nix/home-manager/progs/borg.nix create mode 100644 nix/home-manager/progs/fish.nix create mode 100644 nix/home-manager/progs/gpt4all-HEAD-disable-settings-err.patch create mode 100644 nix/home-manager/progs/gpt4all/gpt4all-HEAD-disable-settings-err.patch create mode 100644 nix/home-manager/progs/gpt4all/gpt4all-HEAD-embeddings-model.patch create mode 100644 nix/home-manager/progs/gpt4all/gpt4all.nix create mode 100644 nix/home-manager/progs/helix.nix create mode 100644 nix/home-manager/progs/librewolf.nix create mode 100644 nix/home-manager/progs/niri.nix create mode 100644 nix/home-manager/progs/rss.nix create mode 100644 nix/home-manager/progs/swaylock.nix create mode 100644 nix/home-manager/progs/waybar.nix create mode 100644 nix/home-manager/secrets/borg-laptop-password.age create mode 100644 nix/home-manager/secrets/factorio.nix create mode 100644 nix/home-manager/secrets/gnupg.age create mode 100644 nix/home-manager/secrets/secrets.nix create mode 100644 nix/home-manager/secrets/server-password.age create mode 100644 nix/home-manager/system-mreow.nix create mode 100644 nix/home-manager/system-nixos.nix diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8e672fe --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +nix/home-manager/secrets/factorio.nix filter=git-agecrypt diff=git-agecrypt +nix/etcnixos/secrets/wifi-passwords.nix filter=git-agecrypt diff=git-agecrypt +nix/etcnixos/secrets/secureboot.tar filter=git-agecrypt diff=git-agecrypt diff --git a/README.md b/README.md new file mode 100644 index 0000000..7b61b12 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# My Dotfiles ✨ +These are my dotfiles for my laptop (which I use [NixOS](https://nixos.org/) on). I'm still working on porting more configs to [home-manager](https://github.com/nix-community/home-manager). + +## Structure +The `nix` folder contains two sub directories, `etcnixos` and `home-manager`. The former is the contents of `/etc/nixos` (hence the name), whereas the latter is the contents of `~/.config/home-manager`. +`justfile` is the [just](https://github.com/casey/just) script I use for updating my nixOS system and syncing the changes with this repo. + +## What do I use? +Browser: Firefox 🦊 (actually Librewolf :p) + +Text Editor: [helix](https://github.com/helix-editor/helix) + +Terminal: [alacritty](https://github.com/alacritty/alacritty) + +Shell: [fish](https://fishshell.com/) with the [pure](https://github.com/pure-fish/pure) prompt + +WM: [niri](https://github.com/YaLTeR/niri) (KDE on my desktop) + +There is more that I'm using, but those are the main ones! Read my configs to get more into the specifics. diff --git a/git-agecrypt.toml b/git-agecrypt.toml new file mode 100644 index 0000000..368d47d --- /dev/null +++ b/git-agecrypt.toml @@ -0,0 +1,13 @@ +[config] +"nix/home-manager/secrets/factorio.nix" = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH", + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi", +] +"nix/etcnixos/secrets/secureboot.tar" = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH", + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi", +] +"nix/etcnixos/secrets/wifi-passwords.nix" = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH", + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi", +] diff --git a/justfile b/justfile new file mode 100644 index 0000000..d15b366 --- /dev/null +++ b/justfile @@ -0,0 +1,21 @@ +update_all: system_update home_update sync_configs + +format_home: + nixfmt ~/.config/home-manager + +format_system: + doas nixfmt /etc/nixos + +system_update: + doas nix flake update /etc/nixos + doas nixos-rebuild boot --impure + +home_update: + nix flake update ~/.config/home-manager + rm -fr ~/.gtkrc-2.0 + home-manager switch --impure + +sync_configs: format_home format_system + rsync -a --delete /etc/nixos/ ~/dotfiles/nix/etcnixos/ + rsync -a --delete ~/.config/home-manager/ ~/dotfiles/nix/home-manager/ + cp ~/justfile ~/dotfiles/ diff --git a/nix/etcnixos/common.nix b/nix/etcnixos/common.nix new file mode 100644 index 0000000..799f352 --- /dev/null +++ b/nix/etcnixos/common.nix @@ -0,0 +1,203 @@ +{ + config, + pkgs, + lib, + username, + system, + hostname, + inputs, + ... +}: +{ + imports = [ ./declarative-nm.nix ]; + + nix = { + #garbage collection and cleanup stuff + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + + #optimize the store + optimise.automatic = true; + + #enable flakes! + settings.experimental-features = [ + "nix-command" + "flakes" + ]; + }; + + #kernel options + boot = { + # kernelPackages = pkgs.linuxPackages_cachyos-lto; + kernelPackages = pkgs.linuxPackages_6_10; + + supportedFilesystems = [ "zfs" ]; + + kernel.sysctl = { + #for profiling + "kernel.perf_event_paranoid" = 1; + "kernel.kptr_restrict" = 0; + + #dmesg shushhhhh + "kernel.printk" = "2 4 1 7"; + }; + + # Bootloader. + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + initrd = { + compressor = "zstd"; + compressorArgs = [ "-19" ]; + }; + }; + + environment.etc = { + #override default nixos /etc/issue + "issue".text = ""; + }; + + services = { + #fwupd for updating firmware + fwupd = { + enable = true; + extraRemotes = [ "lvfs-testing" ]; + }; + + #auto detect network printers + avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + + # Enable CUPS to print documents. + printing = { + enable = true; + drivers = with pkgs; [ hplip ]; + }; + + #disable fprintd (doesn't compile, idk) + fprintd.enable = false; + + #Making sure mullvad works on boot + mullvad-vpn.enable = true; + }; + + # Set your time zone. + time.timeZone = "America/New_York"; + + security = { + #lets use doas and not sudo! + doas.enable = true; + sudo.enable = false; + # Configure doas + doas.extraRules = [ + { + users = [ "${username}" ]; + keepEnv = true; + persist = true; + } + ]; + }; + + age.identityPaths = [ "/home/${username}/.ssh/id_ed25519" ]; + + age.secrets.primary-password = { + file = ./secrets/primary-password.age; + path = "/etc/secrets/primary-password"; + }; + + #networking + networking = import ./networking.nix { inherit hostname; }; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + # Enable Bluetooth + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + + #Enable experimental features for battery % of bluetooth devices + settings.General.Experimental = true; + }; + + #apply gtk themes by enabling dconf + programs.dconf.enable = true; + + # Enable sound with pipewire. + hardware.pulseaudio.enable = false; # pipewire >>>>>>> pulseaudio + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + # jack.enable = true; + }; + + # Define my user account (the rest of the configuration if found in `~/.config/home-manager/...`) + users.users.${username} = { + isNormalUser = true; + extraGroups = [ + "networkmanager" + "wheel" + "video" + "camera" + ]; + hashedPasswordFile = config.age.secrets.primary-password.path; + }; + + services.gvfs.enable = true; + programs.gphoto2.enable = true; + + # Enable thermal data + services.thermald.enable = true; + + services.pcscd.enable = true; + programs.gnupg.agent = { + enable = true; + pinentryPackage = pkgs.pinentry-curses; + enableSSHSupport = false; + }; + + #System packages + environment.systemPackages = with pkgs; [ + mullvad-vpn + + #secureboot ctl + sbctl + + dmidecode + + (inputs.agenix.packages.${pkgs.system}.default.override { ageBin = "${pkgs.rage}/bin/rage"; }) + + qemu_full + + git-agecrypt + ]; + + #wayland with electron/chromium applications + environment.sessionVariables.NIXOS_OZONE_WL = "1"; + + system.stateVersion = "24.11"; +} diff --git a/nix/etcnixos/declarative-nm.nix b/nix/etcnixos/declarative-nm.nix new file mode 100644 index 0000000..7fea1a0 --- /dev/null +++ b/nix/etcnixos/declarative-nm.nix @@ -0,0 +1,52 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +# from: https://discourse.nixos.org/t/imperative-declarative-wifi-networks-with-wpa-supplicant/12394/6 +let + cfg = config.networking.networkmanager; + + getFileName = stringAsChars (x: if x == " " then "-" else x); + + createWifi = ssid: opt: { + name = "NetworkManager/system-connections/${getFileName ssid}.nmconnection"; + value = { + mode = "0400"; + source = pkgs.writeText "${ssid}.nmconnection" '' + [connection] + id=${ssid} + type=wifi + + [wifi] + ssid=${ssid} + + [wifi-security] + ${optionalString (opt.psk != null) '' + key-mgmt=wpa-psk + psk=${opt.psk}''} + ''; + }; + }; + + keyFiles = mapAttrs' createWifi config.networking.wireless.networks; +in +{ + config = mkIf cfg.enable { + environment.etc = keyFiles; + + systemd.services.NetworkManager-predefined-connections = { + restartTriggers = mapAttrsToList (name: value: value.source) keyFiles; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = "${pkgs.coreutils}/bin/true"; + ExecReload = "${pkgs.networkmanager}/bin/nmcli connection reload"; + }; + reloadIfChanged = true; + wantedBy = [ "multi-user.target" ]; + }; + }; +} diff --git a/nix/etcnixos/flake.lock b/nix/etcnixos/flake.lock new file mode 100644 index 0000000..c371580 --- /dev/null +++ b/nix/etcnixos/flake.lock @@ -0,0 +1,458 @@ +{ + "nodes": { + "agenix": { + "inputs": { + "darwin": "darwin", + "home-manager": "home-manager", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1723293904, + "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", + "owner": "ryantm", + "repo": "agenix", + "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "alvr": { + "locked": { + "lastModified": 1727023213, + "narHash": "sha256-KPghRPcTbqCMktw9ahrtiq7a/seajAyLkEI2GS1x+sg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7c2572e5cf4329ad9fa50d33015aa7be394b4026", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "pull/308097/head", + "repo": "nixpkgs", + "type": "github" + } + }, + "chaotic": { + "inputs": { + "fenix": "fenix", + "flake-schemas": "flake-schemas", + "home-manager": "home-manager_2", + "jovian": "jovian", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1727292492, + "narHash": "sha256-vKkVoZJB35xOb1kmAH6i74ziuP0ZGKnzM6+NVi/OhD8=", + "owner": "chaotic-cx", + "repo": "nyx", + "rev": "9b30ea4a39c8c5a2b6a6519f85da38f72b7f29f0", + "type": "github" + }, + "original": { + "owner": "chaotic-cx", + "ref": "nyxpkgs-unstable", + "repo": "nyx", + "type": "github" + } + }, + "crane": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1721842668, + "narHash": "sha256-k3oiD2z2AAwBFLa4+xfU+7G5fisRXfkvrMTCJrjZzXo=", + "owner": "ipetkov", + "repo": "crane", + "rev": "529c1a0b1f29f0d78fa3086b8f6a134c71ef3aaf", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700795494, + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1726900127, + "narHash": "sha256-v3r7yJY8YE4HAzD5DXOxLkzj8YZKQ0xuccp9yppGW1U=", + "owner": "nix-community", + "repo": "fenix", + "rev": "18eefba7fd0bf03e115785948758a44125a9fd68", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719994518, + "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-schemas": { + "locked": { + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703113217, + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726902823, + "narHash": "sha256-Gkc7pwTVLKj4HSvRt8tXNvosl8RS9hrBAEhOjAE0Tt4=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "14929f7089268481d86b83ed31ffd88713dcd415", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726902390, + "narHash": "sha256-ESAD6AkxsQdV/j5ZBcO4Vg94J7Xd0nfpiEZpJtwSEhg=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "faf4c746c068dd8e41b1fa5f18beeabd34d4064c", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, + "lanzaboote": { + "inputs": { + "crane": "crane", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks-nix": "pre-commit-hooks-nix", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1725379389, + "narHash": "sha256-qS1H/5/20ewJIXmf8FN2A5KTOKKU9elWvCPwdBi1P/U=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "e7bd94e0b5ff3c1e686f2101004ebf4fcea9d871", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "lanzaboote", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "chaotic", + "jovian", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1690328911, + "narHash": "sha256-fxtExYk+aGf2YbjeWQ8JY9/n9dwuEt+ma1eUFzF8Jeo=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "96df4a39c52f53cb7098b923224d8ce941b64747", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1727040444, + "narHash": "sha256-19FNN5QT9Z11ZUMfftRplyNN+2PgcHKb3oq8KMW/hDA=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "d0cb432a9d28218df11cbd77d984a2a46caeb5ac", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1727122398, + "narHash": "sha256-o8VBeCWHBxGd4kVMceIayf5GApqTavJbTa44Xcg5Rrk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720386169, + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks-nix": { + "inputs": { + "flake-compat": [ + "lanzaboote", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1721042469, + "narHash": "sha256-6FPUl7HVtvRHCCBQne7Ylp4p+dpP3P/OYuzjztZ4s70=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "f451c19376071a90d8c58ab1a953c6e9840527fd", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "agenix": "agenix", + "alvr": "alvr", + "chaotic": "chaotic", + "lanzaboote": "lanzaboote", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1726443025, + "narHash": "sha256-nCmG4NJpwI0IoIlYlwtDwVA49yuspA2E6OhfCOmiArQ=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "94b526fc86eaa0e90fb4d54a5ba6313aa1e9b269", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722219664, + "narHash": "sha256-xMOJ+HW4yj6e69PvieohUJ3dBSdgCfvI0nnCEe6/yVc=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "a6fbda5d9a14fb5f7c69b8489d24afeb349c7bb4", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix/etcnixos/flake.nix b/nix/etcnixos/flake.nix new file mode 100644 index 0000000..5a96564 --- /dev/null +++ b/nix/etcnixos/flake.nix @@ -0,0 +1,78 @@ +{ + description = "A simple NixOS flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + lanzaboote = { + url = "github:nix-community/lanzaboote"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + + alvr.url = "github:NixOS/nixpkgs/pull/308097/head"; + + chaotic = { + url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + agenix = { + url = "github:ryantm/agenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { + self, + nixpkgs, + lanzaboote, + nixos-hardware, + chaotic, + agenix, + ... + }@inputs: + let + username = "primary"; + hostname = nixpkgs.lib.strings.removeSuffix "\n" (builtins.readFile /etc/hostname); + system = "x86_64-linux"; + + # pkgs = import nixpkgs { + # config.replaceStdenv = { pkgs }: pkgs.clangStdenv; + # }; + pkgs = import nixpkgs { + config.allowUnfreePredicate = + pkg: + builtins.elem (nixpkgs.lib.getName pkg) [ + "steam" + "steam-original" + "steam-run" + ]; + }; + in + { + nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs username hostname; + }; + inherit pkgs; + modules = + [ + ./system-${hostname}.nix + chaotic.nixosModules.default + agenix.nixosModules.default + + ] + ++ ( + if ("${hostname}" == "mreow") then # laptop + [ + nixos-hardware.nixosModules.framework-12th-gen-intel + lanzaboote.nixosModules.lanzaboote + ] + else + [ ] + ); + }; + }; +} diff --git a/nix/etcnixos/hardware_desktop.nix b/nix/etcnixos/hardware_desktop.nix new file mode 100644 index 0000000..3f45ceb --- /dev/null +++ b/nix/etcnixos/hardware_desktop.nix @@ -0,0 +1,59 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/ff51be5a-b87b-4e6a-9c1d-796ceeaca153"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/3D37-E610"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; + + fileSystems."/media/steam" = { + device = "/dev/disk/by-uuid/df865fc2-6b26-4689-809b-1615f860507e"; + fsType = "btrfs"; + options = [ "nofail" ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp5s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/nix/etcnixos/hardware_laptop.nix b/nix/etcnixos/hardware_laptop.nix new file mode 100644 index 0000000..17a48a2 --- /dev/null +++ b/nix/etcnixos/hardware_laptop.nix @@ -0,0 +1,53 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: +{ + imports = [ + #if this is removed, then niri doesn't start, TODO! look into wtf this does + (modulesPath + "/installer/scan/not-detected.nix") + ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "thunderbolt" + "nvme" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/acbd96e3-e7c7-442d-82cc-ce2913a9e90c"; + fsType = "btrfs"; + options = [ + "subvol=@" + "compress=zstd" + "autodefrag" + "noatime" + "space_cache=v2" + "discard" + ]; + }; + + boot.initrd.luks.devices."luks-0f481d5f-528c-4838-bd8a-d2780b4ba234".device = "/dev/disk/by-uuid/0f481d5f-528c-4838-bd8a-d2780b4ba234"; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/4D19-520E"; + fsType = "vfat"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp166s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/nix/etcnixos/networking.nix b/nix/etcnixos/networking.nix new file mode 100644 index 0000000..f660e51 --- /dev/null +++ b/nix/etcnixos/networking.nix @@ -0,0 +1,19 @@ +{ hostname, ... }: +{ + hostName = "${hostname}"; + + hostId = "cfe0ff46"; + + networkmanager = { + enable = true; + insertNameservers = [ + "1.1.1.1" + "8.8.8.8" + ]; + wifi = { + scanRandMacAddress = true; + }; + }; + + wireless.networks = import ./secrets/wifi-passwords.nix; +} diff --git a/nix/etcnixos/secrets/primary-password.age b/nix/etcnixos/secrets/primary-password.age new file mode 100644 index 0000000000000000000000000000000000000000..ca3ac41dc9112abfb2e0b195d029f728beaeedd8 GIT binary patch literal 544 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUl$_b533{>!NEwJ>} z56MWcD9F#$chB>52?`6(i7fX@OG!#J3Dd7|HBJgn$t;X2_v9)KtI8~o$O;e5@Cgeu zaPc)yu`KrR^Got7^^bHmitupvEzT^-t|&{d$Vay=#lyubJy5~J)6?9&(#**)(yzoc zJGUUhI5EV?wJgc9B*`VqA}z`?)6c*#-7_<*%7UxXr82w3HLyIxH$2HdEvvM`v^Y6Z z+qAGSGt$M|B`hM(&od-4HQyk+I2&Y}uWou#YGQG!LWYGxL|{acLa0@;Teho$fsds& zSFTT#X|khhs<&x!q@PoGW=3XUka1N&P?)K?epOypNRV?{a9*iPWUhySS7kwBa7vJK zSY>&IfsvcJi;0oDA6L0)K#EyNNnmn#R+xX5XOebERYqB)fv2&FkA-%HtD|{wet~m& zg;`cnzN1;HVWM9km#(g^LWy&TWqv?zWpPQ4VNOVKdWLDPnO9&*VMRu|sX>l*M7l{( zXr)(>fw@OEmr(FopUIX?$LlK+94`5FdF{N&*P4~u&!7^?I@SBB7k}pgvGb9iF1^$GetS7e`pz*#M8z;={OLTpR5m)q#VT|9Q@1a3;{8`YTpP1=2gmA(dMg;Z Ua!SKnxmb&~bymkM=vuD>086*N@Bjb+ literal 0 HcmV?d00001 diff --git a/nix/etcnixos/secrets/secrets.nix b/nix/etcnixos/secrets/secrets.nix new file mode 100644 index 0000000..2aa18e7 --- /dev/null +++ b/nix/etcnixos/secrets/secrets.nix @@ -0,0 +1,16 @@ +let + laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH"; + desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi"; +in +(builtins.listToAttrs ( + map + (f: { + f.publicKeys = [ + laptop + desktop + ]; + }) + [ + "primary-password.age" + ] +)) diff --git a/nix/etcnixos/secrets/secureboot.tar b/nix/etcnixos/secrets/secureboot.tar new file mode 100644 index 0000000000000000000000000000000000000000..c76e36e0661181328748e7c8f10f6c72f03b7024 GIT binary patch literal 30720 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
  • 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 main + extraConfig = { + init = { + defaultBranch = "main"; + }; + push.autoSetupRemote = true; + }; + + #gpg signing keys + signing = { + key = "9AB28AC10ECE533D"; + signByDefault = true; + }; + }; + + age.secrets.serverpass = { + file = ./secrets/server-password.age; + path = "${homeDirectory}/.secrets/serverpass"; + }; + + age.secrets.gnupg = { + file = ./secrets/gnupg.age; + path = "${homeDirectory}/.secrets/gnupg.tar"; + }; + + home.activation.extractGnuPG = + let + gnupg_dir = "${homeDirectory}/.gnupg"; + in + '' + #!/bin/sh + rm -fr ${gnupg_dir} || true + mkdir -p ${gnupg_dir} + ${pkgs.gnutar}/bin/tar xf ${config.age.secrets.gnupg.path} -C ${gnupg_dir} + find ${gnupg_dir} -type f -exec chmod 600 {} \; + find ${gnupg_dir} -type d -exec chmod 700 {} \; + ''; + + #fish shell! + programs.fish = import ./progs/fish.nix { inherit pkgs; }; + + #text editor + programs.helix = import ./progs/helix.nix { inherit pkgs; }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/nix/home-manager/progs/alacritty.nix b/nix/home-manager/progs/alacritty.nix new file mode 100644 index 0000000..50cadaf --- /dev/null +++ b/nix/home-manager/progs/alacritty.nix @@ -0,0 +1,124 @@ +{ pkgs }: +{ + #use the fish shell + shell.program = "${pkgs.fish}/bin/fish"; + + #some programs can't handle alacritty + env.TERM = "xterm-256color"; + + window = { + #using a window manager, no decorations needed + decorations = "none"; + + #semi-transparent + opacity = 0.95; + + #padding between the content of the terminal and the edge + padding = { + x = 10; + y = 10; + }; + + dimensions = { + columns = 80; + lines = 40; + }; + }; + + scrolling = { + history = 1000; + multiplier = 3; + }; + + font = + let + baseFont = { + family = "JetBrains Mono Nerd Font"; + style = "Regular"; + }; + in + { + size = 12; + + normal = baseFont; + + bold = baseFont // { + style = "Bold"; + }; + + italic = baseFont // { + style = "Italic"; + }; + + offset.y = 0; + glyph_offset.y = 0; + }; + + #color scheme + colors = + let + normal = { + black = "0x1b1e28"; + red = "0xd0679d"; + green = "0x5de4c7"; + yellow = "0xfffac2"; + blue = "#435c89"; + magenta = "0xfcc5e9"; + cyan = "0xadd7ff"; + white = "0xffffff"; + }; + + bright = { + black = "0xa6accd"; + red = normal.red; + green = normal.green; + yellow = normal.yellow; + blue = normal.cyan; + magenta = "0xfae4fc"; + cyan = "0x89ddff"; + white = normal.white; + }; + in + { + inherit normal bright; + primary = { + background = "0x131621"; + foreground = bright.black; + }; + + cursor = { + text = "CellBackground"; + cursor = "CellForeground"; + }; + + search = + let + foreground = normal.black; + background = normal.cyan; + in + { + matches = { + inherit foreground background; + }; + + focused_match = { + inherit foreground background; + }; + }; + + selection = { + text = "CellForeground"; + background = "0x303340"; + }; + + vi_mode_cursor = { + text = "CellBackground"; + cursor = "CellForeground"; + }; + }; + + cursor = { + style = "Underline"; + vi_mode_style = "Underline"; + }; +} diff --git a/nix/home-manager/progs/borg.nix b/nix/home-manager/progs/borg.nix new file mode 100644 index 0000000..b928cd3 --- /dev/null +++ b/nix/home-manager/progs/borg.nix @@ -0,0 +1,46 @@ +{ homeDirectory, borgPasswordFile }: +{ + + home = { + location = { + sourceDirectories = + # stuff in my home directory: + ( + map (f: "${homeDirectory}/${f}") [ + ".zen" + ".local/share/fish" + ".gnupg" + ".config/Signal" + ".wallpaper.png" + ".ssh" + + "dotfiles" + "Documents" + "projects" + "Pictures" + "school" + "justfile" + ] + ); + + excludeHomeManagerSymlinks = true; + repositories = [ "ssh://server-public/tank/bak/laptop" ]; + + extraConfig = { + compression = "zstd"; + }; + }; + + retention = { + keepHourly = 48; + keepDaily = 30; + keepWeekly = 26; + keepMonthly = 24; + keepYearly = 10; + }; + + storage = { + encryptionPasscommand = "cat ${borgPasswordFile}"; + }; + }; +} diff --git a/nix/home-manager/progs/fish.nix b/nix/home-manager/progs/fish.nix new file mode 100644 index 0000000..25e6ac0 --- /dev/null +++ b/nix/home-manager/progs/fish.nix @@ -0,0 +1,65 @@ +{ pkgs }: +let + eza = "${pkgs.eza}/bin/eza --color=always --group-directories-first"; + cargo = "${pkgs.cargo}/bin/cargo"; + coreutil = "${pkgs.coreutils}/bin"; +in +{ + enable = true; + + interactiveShellInit = '' + #disable greeting + set fish_greeting + + #fixes gnupg password entry + export GPG_TTY=(${coreutil}/tty) + + #pfetch on shell start (disable pkgs because of execution time) + PF_INFO="ascii title os host kernel uptime memory editor wm" ${pkgs.pfetch-rs}/bin/pfetch + ''; + + shellAliases = { + c = cargo; + cr = "${cargo} run"; + cb = "${cargo} build"; + + # I hate the red background + run0 = "run0 --background=\"\""; + + # from DistroTube's dot files: Changing "ls" to "eza" + ls = "${eza} -al"; + la = "${eza} -a"; + ll = "${eza} -l"; + lt = "${eza} -aT"; + + # gets the largest files in a git repo's history + "git-size" = '' + ${pkgs.git}/bin/git rev-list --objects --all | + ${pkgs.git}/bin/git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | + ${pkgs.gnused}/bin/sed -n 's/^blob //p' | + ${coreutil}/sort --numeric-sort --key=2 | + ${coreutil}/cut -c 1-12,41- | + ${coreutil}/numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest''; + + #aliases for (I think) macos commands + pbcopy = "${pkgs.wl-clipboard}/bin/wl-copy"; + pbpaste = "${pkgs.wl-clipboard}/bin/wl-paste"; + }; + + shellInit = '' + fish_add_path ~/.local/bin + fish_add_path ~/.cargo/bin + set hydro_color_pwd 62A + set hydro_color_error red + set hydro_color_duration yellow + set hydro_color_prompt green + set hydro_color_git blue + ''; + + plugins = [ + { + name = "hydro"; + src = pkgs.fishPlugins.hydro.src; + } + ]; +} diff --git a/nix/home-manager/progs/gpt4all-HEAD-disable-settings-err.patch b/nix/home-manager/progs/gpt4all-HEAD-disable-settings-err.patch new file mode 100644 index 0000000..a6911ab --- /dev/null +++ b/nix/home-manager/progs/gpt4all-HEAD-disable-settings-err.patch @@ -0,0 +1,19 @@ +diff --git a/main.qml b/main.qml +index 1e685385..7c747eba 100644 +--- a/main.qml ++++ b/main.qml +@@ -72,12 +72,14 @@ Window { + return; + } + ++ /* + // check if we have access to settings and if not show an error + if (!hasShownSettingsAccess && !LLM.hasSettingsAccess()) { + errorSettingsAccess.open(); + hasShownSettingsAccess = true; + return; + } ++ */ + + // check for first time start of this version + if (!hasCheckedFirstStart) { diff --git a/nix/home-manager/progs/gpt4all/gpt4all-HEAD-disable-settings-err.patch b/nix/home-manager/progs/gpt4all/gpt4all-HEAD-disable-settings-err.patch new file mode 100644 index 0000000..a6911ab --- /dev/null +++ b/nix/home-manager/progs/gpt4all/gpt4all-HEAD-disable-settings-err.patch @@ -0,0 +1,19 @@ +diff --git a/main.qml b/main.qml +index 1e685385..7c747eba 100644 +--- a/main.qml ++++ b/main.qml +@@ -72,12 +72,14 @@ Window { + return; + } + ++ /* + // check if we have access to settings and if not show an error + if (!hasShownSettingsAccess && !LLM.hasSettingsAccess()) { + errorSettingsAccess.open(); + hasShownSettingsAccess = true; + return; + } ++ */ + + // check for first time start of this version + if (!hasCheckedFirstStart) { diff --git a/nix/home-manager/progs/gpt4all/gpt4all-HEAD-embeddings-model.patch b/nix/home-manager/progs/gpt4all/gpt4all-HEAD-embeddings-model.patch new file mode 100644 index 0000000..fb15635 --- /dev/null +++ b/nix/home-manager/progs/gpt4all/gpt4all-HEAD-embeddings-model.patch @@ -0,0 +1,53 @@ +commit 425b33877c819dd88f3692aae37452c767371f6b +Author: Simon Gardling +Date: Thu Sep 19 10:00:39 2024 -0400 + + use locally downloaded embeddings + +diff --git a/gpt4all-chat/CMakeLists.txt b/gpt4all-chat/CMakeLists.txt +index 900307ae..802fc31a 100644 +--- a//CMakeLists.txt ++++ b/CMakeLists.txt +@@ -120,6 +120,7 @@ elseif (APPLE) + endif() + + # Embedding model ++#[[ + set(LOCAL_EMBEDDING_MODEL "nomic-embed-text-v1.5.f16.gguf") + set(LOCAL_EMBEDDING_MODEL_MD5 "a5401e7f7e46ed9fcaed5b60a281d547") + set(LOCAL_EMBEDDING_MODEL_PATH "${CMAKE_BINARY_DIR}/resources/${LOCAL_EMBEDDING_MODEL}") +@@ -134,6 +135,7 @@ message(STATUS "Embedding model downloaded to ${LOCAL_EMBEDDING_MODEL_PATH}") + if (APPLE) + list(APPEND CHAT_EXE_RESOURCES "${LOCAL_EMBEDDING_MODEL_PATH}") + endif() ++]] + + set(QAPPLICATION_CLASS QGuiApplication) + add_subdirectory(deps/SingleApplication) +@@ -348,11 +350,13 @@ if (LLMODEL_CUDA) + endif() + endif() + ++#[[ + if (NOT APPLE) + install(FILES "${LOCAL_EMBEDDING_MODEL_PATH}" + DESTINATION resources + COMPONENT ${COMPONENT_NAME_MAIN}) + endif() ++]] + + set(CPACK_GENERATOR "IFW") + set(CPACK_VERBATIM_VARIABLES YES) +diff --git a/gpt4all-chat/src/embllm.cpp b/gpt4all-chat/src/embllm.cpp +index 81b1e9e1..e3266cc7 100644 +--- a/src/embllm.cpp ++++ b/src/embllm.cpp +@@ -84,7 +84,7 @@ bool EmbeddingLLMWorker::loadModel() + + QString filePath = embPathFmt.arg(QCoreApplication::applicationDirPath(), LOCAL_EMBEDDING_MODEL); + if (!QFileInfo::exists(filePath)) { +- qWarning() << "embllm WARNING: Local embedding model not found"; ++ qWarning() << "embllm WARNING: Local embedding model not found: " << filePath; + return false; + } + diff --git a/nix/home-manager/progs/gpt4all/gpt4all.nix b/nix/home-manager/progs/gpt4all/gpt4all.nix new file mode 100644 index 0000000..ef222f8 --- /dev/null +++ b/nix/home-manager/progs/gpt4all/gpt4all.nix @@ -0,0 +1,124 @@ +{ pkgs, lib, ... }: +let + models = [ + { + name = "Qwen2.5-14B-Instruct-Q4_K_S.gguf"; + context_length = "32768"; + gen_length = "8192"; + source = pkgs.fetchurl { + url = "https://huggingface.co/bartowski/Qwen2.5-14B-Instruct-GGUF/resolve/main/Qwen2.5-14B-Instruct-Q4_K_S.gguf?download=true"; + sha256 = "E1CmWUhMMbTXEjIRczzA3rSrVuR8qOL8BLagw7LiyZk="; + }; + } + { + name = "Qwen2.5-7B-Instruct-Q6_K_L.gguf"; + context_length = "32768"; + gen_length = "8192"; + source = pkgs.fetchurl { + url = "https://huggingface.co/bartowski/Qwen2.5-7B-Instruct-GGUF/resolve/main/Qwen2.5-7B-Instruct-Q6_K_L.gguf?download=true"; + sha256 = "thEXN06T/UVGfzdB83jlgpG7kuTzZtz1ZUAdupAnErM="; + }; + } + ]; + + # stolen from: https://stackoverflow.com/a/42398526 + optimizeWithFlags = + pkg: flags: + pkgs.lib.overrideDerivation pkg ( + old: + let + newflags = pkgs.lib.foldl' (acc: x: "${acc} ${x}") "" flags; + oldflags = if (pkgs.lib.hasAttr "NIX_CFLAGS_COMPILE" old) then "${old.NIX_CFLAGS_COMPILE}" else ""; + in + { + NIX_CFLAGS_COMPILE = "${oldflags} ${newflags}"; + stdenv = pkgs.clangStdenv; + } + ); + + model_files = builtins.listToAttrs ( + map (f: { + name = ".local/share/nomic.ai/GPT4All/${f.name}"; + value = { + source = f.source; + }; + }) models + ); + + gpt4all_package = ( + optimizeWithFlags + (pkgs.gpt4all.overrideAttrs (old: { + # https://github.com/NixOS/nixpkgs/pull/344001 3.2.1 -> 3.3.0 + version = "3.3.0"; + src = pkgs.fetchFromGitHub { + fetchSubmodules = true; + owner = "nomic-ai"; + repo = "gpt4all"; + rev = "HEAD"; + sha256 = "RDYf+VaI5pl46Cd04ADvvi4ygNfYa4fY9rTv9Ui3qUk="; + }; + + patches = [ + ./gpt4all-HEAD-embeddings-model.patch + ./gpt4all-HEAD-disable-settings-err.patch + ]; + })) + # compile flags + [ + "-Ofast" + "-march=native" + "-mtune=native" + "-fno-protect-parens" + "-fno-finite-math-only" # https://github.com/ggerganov/llama.cpp/pull/7154#issuecomment-2143844461 + ] + ); + +in +{ + home.packages = [ + gpt4all_package + ]; + + home.file = lib.recursiveUpdate { + ".config/nomic.ai/GPT4All.ini".text = + let + system_prompt = "You are an expert AI assistant who is thoughtful and works step-by-step from first principles derive an answer to the user's prompt. For each step, provide a title that describes what you're doing in that step, along with the content. Decide if you need another step or if you're ready to provide your answer to the user, make sure to exhaust ALL POSSIBILITIES before providing a response to the user. While your reasoning is not shown to the user, it is under high levels of scrutiny to ensure high-quality reasoning. WHEN YOU DETERMINE THAT YOU ARE READY TO GIVE A FINAL ANSWER TO THE USER GIVEN YOUR REASONING AND STEP-BY-STEP WORK. ONLY TEXT WRITTEN AFTER A SECTION NAMED \"Final Answer\" WILL BE SHOWN TO THE USER. ASSUME THAT NO REASONING STEPS ARE SHOWN TO THE USER. DO NOT THINK THAT THE USER CAN SEE YOUR INTERNAL REASONING STEPS. + USE AS MANY REASONING STEPS AS POSSIBLE. AT LEAST 3. BE AWARE OF YOUR LIMITATIONS AS AN LLM AND WHAT YOU CAN AND CANNOT DO. EXPLORE ALTERNATE ANSWERS AND CONSIDER THAT YOUR ANSWER MAY BE WRONG. IDENTIFY POSSIBLE ERRORS IN YOUR REASONING AND WHERE SUCH ERRORS MAY BE. FULLY TEST ALL OTHER POSSIBILITIES. YOU CAN BE WRONG. WHEN YOU SAY YOU ARE RE-EXAMINING, ACTUALLY RE-EXAMINE, AND USE ANOTHER APPROACH TO DO SO. DO NOT JUST SAY YOU ARE RE-EXAMINING. SHOW ALL YOUR WORK. USE AT LEAST 3 METHODS TO DERIVE THE ANSWER. USE BEST PRACTICES. WORK FROM FIRST PRINCIPLES TO CREATE YOUR ANSWER."; + in + '' + [General] + chatTheme=Dark + height=940 + suggestionMode=Off + threadCount=8 + uniqueId=7096f2d2-448d-4272-a132-d37e77f8a781 + userDefaultModel=${(builtins.elemAt models 0).name} + width=1472 + x=0 + y=0 + + [download] + lastVersionStarted=${gpt4all_package.version} + '' + + (lib.concatStrings ( + map (model: '' + [model-${model.name}] + contextLength=${model.context_length} + filename=${model.name} + maxLength=${model.gen_length} + promptBatchSize=256 + promptTemplate=<|im_start|>user\n%1<|im_end|>\n<|im_start|>assistant\n + systemPrompt="<|im_start|>system\n${ + # replace newlines with the string "\n" for gpt4all to properly parse + builtins.replaceStrings [ "\n" ] [ "\\n" ] system_prompt + }<|im_end|> + \n" + '') models + )) + + '' + [network] + isActive=true + usageStatsActive=true + ''; + } model_files; +} diff --git a/nix/home-manager/progs/helix.nix b/nix/home-manager/progs/helix.nix new file mode 100644 index 0000000..76f4a5e --- /dev/null +++ b/nix/home-manager/progs/helix.nix @@ -0,0 +1,288 @@ +{ pkgs }: +{ + enable = true; + package = pkgs.helix; + settings = { + theme = "my_theme"; + editor = { + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + + file-picker = { + hidden = false; + }; + + #wrapping!! + soft-wrap.enable = true; + }; + }; + + languages = { + language = [ + { + name = "rust"; + auto-format = true; + } + ]; + }; + + themes = { + #modified fleet_dark theme + my_theme = + let + white = "#ffffff"; + gray-120 = "#d1d1d1"; + gray-110 = "#c2c2c2"; + gray-100 = "#a0a0a0"; + gray-90 = "#898989"; + gray-80 = "#767676"; + gray-70 = "#5d5d5d"; + gray-60 = "#484848"; + gray-50 = "#383838"; + gray-40 = "#333333"; + gray-30 = "#2d2d2d"; + gray-20 = "#292929"; + gray-15 = "#1F1F1F"; + gray-10 = "#181818"; + black = "#000000"; + blue-110 = "#6daaf7"; + blue-100 = "#4d9bf8"; + blue-90 = "#3691f9"; + blue-80 = "#1a85f6"; + blue-70 = "#0273eb"; + blue-60 = "#0c6ddd"; + blue-50 = "#195eb5"; + blue-40 = "#194176"; + blue-30 = "#163764"; + blue-20 = "#132c4f"; + blue-10 = "#0b1b32"; + red-80 = "#ec7388"; + red-70 = "#ea4b67"; + red-60 = "#d93953"; + red-50 = "#ce364d"; + red-40 = "#c03248"; + red-30 = "#a72a3f"; + red-20 = "#761b2d"; + red-10 = "#390813"; + green-50 = "#4ca988"; + green-40 = "#3ea17f"; + green-30 = "#028764"; + green-20 = "#134939"; + green-10 = "#081f19"; + yellow-60 = "#f8ab17"; + yellow-50 = "#e1971b"; + yellow-40 = "#b5791f"; + yellow-30 = "#7c511a"; + yellow-20 = "#5a3a14"; + yellow-10 = "#281806"; + purple-20 = "#c07bf3"; + purple-10 = "#b35def"; + + blue = "#87C3FF"; + blue-light = "#ADD1DE"; + coral = "#CC7C8A"; + cyan = "#82D2CE"; + cyan-dark = "#779E9E"; + lime = "#A8CC7C"; + orange = "#E09B70"; + pink = "#E394DC"; + violet = "#AF9CFF"; + yellow = "#EBC88D"; + in + { + "attribute" = lime; + "type" = blue; + "type.return" = blue-light; + "type.parameter" = blue-light; + "constructor" = yellow; + "constant" = violet; + "constant.builtin.boolean" = cyan; + "constant.character" = yellow; + "constant.character.escape" = cyan; + "constant.numeric" = yellow; + "string" = pink; + "string.regexp" = cyan; + "string.special" = { + fg = yellow; + modifiers = [ "underlined" ]; + }; # .path / .url / .symbol + + "comment" = gray-90; # .line + # "comment.block" = {} # .documentation + "variable" = gray-120; # .builtin + "variable.builtin" = { + fg = coral; + }; + # "variable.other" = {} # .member + "variable.other.member" = violet; + "label" = yellow; + "keyword" = cyan; # .operator / .directive / .function + "function" = yellow; + "function.declaration" = "#EFEFEF"; + "function.macro" = lime; + "function.builtin" = lime; + "function.special" = lime; + #"function.declaration.method" = { fg = "lightest", modifiers = ["bold"] } #depends on #4892 + "tag" = blue; + "special" = lime; + "namespace" = blue; + + # used in theming + # "markup" = {} # .normal / .quote / .raw + # "markup.normal" = {} # .completion / .hover + "markup.bold" = { + modifiers = [ "bold" ]; + }; + "markup.italic" = { + modifiers = [ "italic" ]; + }; + "markup.strikethrough" = { + modifiers = [ "crossed_out" ]; + }; + "markup.heading" = { + fg = cyan; + modifiers = [ "bold" ]; + }; # .marker / .1 / .2 / .3 / .4 / .5 / .6 + "markup.list" = pink; # .unnumbered / .numbered + "markup.list.numbered" = cyan; + "markup.list.unnumbered" = cyan; + # "markup.link" = "green" + "markup.link.url" = { + fg = pink; + modifiers = [ + "italic" + "underlined" + ]; + }; + "markup.link.text" = cyan; + "markup.link.label" = purple-20; + "markup.quote" = pink; + "markup.raw" = pink; + "markup.raw.inline" = cyan; # .completion / .hover + "markup.raw.block" = "#EB83E2"; + + "diff.plus" = green-50; + "diff.minus" = red-50; + "diff.delta" = blue-80; + + # ui specific + # "ui.background" = { bg = gray-10; }; # .separator + "ui.background" = { }; + "ui.statusline" = { + fg = gray-120; + bg = gray-20; + }; # .inactive / .normal / .insert / .select + "ui.statusline.normal" = { + fg = gray-120; + bg = gray-20; + }; + "ui.statusline.inactive" = { + fg = gray-90; + }; + "ui.statusline.insert" = { + fg = gray-20; + bg = blue-90; + }; + "ui.statusline.select" = { + fg = gray-20; + bg = yellow-60; + }; + + "ui.cursor" = { + modifiers = [ "reversed" ]; + }; # .insert / .select / .match / .primary + "ui.cursor.match" = { + bg = blue-30; + }; # .insert / .select / .match / .primary + "ui.selection" = { + bg = gray-50; + }; # .primary + "ui.selection.primary" = { + bg = blue-40; + }; + + "ui.cursorline" = { + bg = gray-15; + }; + "ui.linenr" = gray-70; + "ui.linenr.selected" = gray-110; + + "ui.popup" = { + fg = gray-120; + bg = gray-20; + }; # .info + "ui.window" = { + fg = gray-50; + }; + "ui.help" = { + fg = gray-120; + bg = gray-20; + }; + "ui.menu" = { + fg = gray-120; + bg = gray-20; + }; # .selected + "ui.menu.selected" = { + fg = white; + bg = blue-40; + }; # .selected + # Calculated as #ffffff with 30% opacity + "ui.menu.scroll" = { + fg = "#dfdfdf"; + }; + + "ui.text" = gray-120; # .focus / .info + "ui.text.focus" = { + fg = white; + bg = blue-40; + }; + + "ui.virtual" = gray-90; # .whitespace + "ui.virtual.inlay-hint" = { + fg = gray-70; + }; + "ui.virtual.ruler" = { + bg = gray-20; + }; + + "hint" = gray-80; + "info" = "#A366C4"; + "warning" = "#FACb66"; + "error" = "#FF5269"; + + "diagnostic.hint" = { + underline = { + color = gray-80; + style = "line"; + }; + }; + "diagnostic.info" = { + underline = { + color = "#A366C4"; + style = "line"; + }; + }; + "diagnostic.warning" = { + underline = { + color = "#FACB66"; + style = "line"; + }; + }; + "diagnostic.error" = { + underline = { + color = "#FF5269"; + style = "line"; + }; + }; + "diagnostic.unnecessary" = { + modifiers = [ "dim" ]; + }; + "diagnostic.deprecated" = { + modifiers = [ "crossed_out" ]; + }; + }; + }; +} diff --git a/nix/home-manager/progs/librewolf.nix b/nix/home-manager/progs/librewolf.nix new file mode 100644 index 0000000..c26fd13 --- /dev/null +++ b/nix/home-manager/progs/librewolf.nix @@ -0,0 +1,77 @@ +{ pkgs, inputs, ... }: +{ + home.packages = with pkgs; [ librewolf ]; + + programs.librewolf = { + enable = true; + settings = { + "webgl.disabled" = false; + "privacy.resistFingerprinting" = false; + "privacy.clearOnShutdown.history" = false; + "privacy.clearOnShutdown.cookies" = false; + "network.cookie.lifetimePolicy" = 0; + "general.useragent.compatMode.firefox" = true; + "identity.fxaccounts.enabled" = true; + "services.sync.prefs.sync.privacy.clearOnShutdown.cookies" = false; + "services.sync.prefs.sync.privacy.clearOnShutdown_v2.cookiesAndStorage" = false; + + "general.useragent.override" = "Mozilla/5.0 (X11; Linux x86_64; rv:${pkgs.firefox.version}) Gecko/20100101 Firefox/${pkgs.firefox.version}"; + + "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; + + # For themeing + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.tabs.drawInTitlebar" = true; + "svg.context-properties.content.enabled" = true; + + #fake location, FIT (just about) + "geo.provider.network.url" = + "data:application/json," + + builtins.toJSON { + location = { + lat = 28.0749; + lng = -80.6302; + }; + accuracy = 1.0; + }; + }; + }; + + home.file = + let + chromeTheme = ".librewolf/tckj7njq.default-release/chrome"; + + firefoxThemeFile = file: src: { + target = "${chromeTheme}/${file}"; + source = "${inputs.firefox-mod-theme}/${src}/${file}"; + recursive = true; + }; + + baseThemeFile = { + file = ""; + src = ""; + }; + + modThemeFiles = [ + { + file = "userChrome.css"; + } + { + file = "userContent.css"; + } + { + file = "ASSETS"; + } + ]; + in + builtins.listToAttrs ( + map (f: { + name = "firefox-theme-${f.file}"; + value = firefoxThemeFile f.file f.src; + }) (map (f: baseThemeFile // f) modThemeFiles) + ); + + home.sessionVariables = { + BROWSER = "librewolf"; + }; +} diff --git a/nix/home-manager/progs/niri.nix b/nix/home-manager/progs/niri.nix new file mode 100644 index 0000000..a6aa705 --- /dev/null +++ b/nix/home-manager/progs/niri.nix @@ -0,0 +1,167 @@ +{ + config, + pkgs, + homeDirectory, +}: +{ + prefer-no-csd = true; + + spawn-at-startup = [ + #waybar + { command = [ "${pkgs.waybar}/bin/waybar" ]; } + + #swaybg works on more than just sway (sets a wallpaper) + { + command = [ + "${pkgs.swaybg}/bin/swaybg" + "-m" + "center" + "-i" + "${homeDirectory}/.wallpaper.png" + ]; + } + ]; + + window-rules = [ + { draw-border-with-background = false; } + { + geometry-corner-radius = { + top-left = 10.0; + top-right = 10.0; + bottom-right = 10.0; + bottom-left = 10.0; + }; + } + { clip-to-geometry = true; } + ]; + + binds = with config.lib.niri.actions; { + #application launcher + "Mod+Space".action = spawn [ + "${pkgs.rofi-wayland}/bin/rofi" + "-show" + "combi" + ]; + + #open a terminal + "Mod+T".action = spawn "${pkgs.alacritty}/bin/alacritty"; + + #lock the screen + "Mod+X".action = spawn "${pkgs.swaylock}/bin/swaylock"; + + #screenshotting + "Print".action = screenshot; + "Ctrl+Print".action = screenshot-screen; + "Alt+Print".action = screenshot-window; + + #Volume control + "XF86AudioRaiseVolume".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "-u" + "up" + ]; + "XF86AudioLowerVolume".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "-u" + "down" + ]; + "XF86AudioMute".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "toggle-mute" + ]; + "XF86AudioMicMute".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "-m" + "toggle-mute" + ]; + + #Display Brightness control + "XF86MonBrightnessUp".action = spawn [ + "${pkgs.avizo}/bin/lightctl" + "up" + ]; + "XF86MonBrightnessDown".action = spawn [ + "${pkgs.avizo}/bin/lightctl" + "down" + ]; + + #Force close a window + "Mod+Q".action = close-window; + + "Mod+Shift+Q".action = quit; + + #bindings for like window management ig + + "Mod+Left".action = focus-column-left; + "Mod+Down".action = focus-window-down; + "Mod+Up".action = focus-window-up; + "Mod+Right".action = focus-column-right; + + "Mod+H".action = focus-column-left; + "Mod+J".action = focus-window-down; + "Mod+K".action = focus-window-up; + "Mod+L".action = focus-column-right; + + "Mod+Ctrl+Left".action = move-column-left; + "Mod+Ctrl+Down".action = move-window-down; + "Mod+Ctrl+Up".action = move-window-up; + "Mod+Ctrl+Right".action = move-column-right; + + "Mod+Ctrl+H".action = move-column-left; + "Mod+Ctrl+J".action = move-window-down; + "Mod+Ctrl+K".action = move-window-up; + "Mod+Ctrl+L".action = move-column-right; + + #fine adjustments to height and width of window + "Mod+Minus".action = set-column-width "-10%"; + "Mod+Equal".action = set-column-width "+10%"; + "Mod+Shift+Minus".action = set-window-height "-10%"; + "Mod+Shift+Equal".action = set-window-height "+10%"; + + "Mod+Home".action = focus-column-first; + "Mod+End".action = focus-column-last; + "Mod+Ctrl+Home".action = move-column-to-first; + "Mod+Ctrl+End".action = move-column-to-last; + + "Mod+Shift+Left".action = focus-monitor-left; + "Mod+Shift+Down".action = focus-monitor-down; + "Mod+Shift+Up".action = focus-monitor-up; + "Mod+Shift+Right".action = focus-monitor-right; + + "Mod+Shift+H".action = focus-monitor-left; + "Mod+Shift+J".action = focus-monitor-down; + "Mod+Shift+K".action = focus-monitor-up; + "Mod+Shift+L".action = focus-monitor-right; + + "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; + + "Mod+Shift+Ctrl+H".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+J".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+K".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+L".action = move-column-to-monitor-right; + + "Mod+Page_Down".action = focus-workspace-down; + "Mod+Page_Up".action = focus-workspace-up; + "Mod+U".action = focus-workspace-down; + "Mod+I".action = focus-workspace-up; + + #move a window up and down workspaces + "Mod+Ctrl+Page_Down".action = move-column-to-workspace-down; + "Mod+Ctrl+Page_Up".action = move-column-to-workspace-up; + + "Mod+Ctrl+U".action = move-column-to-workspace-down; + "Mod+Ctrl+I".action = move-column-to-workspace-up; + + #does little squeeze thing into the left or right position with another window + "Mod+BracketLeft".action = consume-or-expel-window-left; + "Mod+BracketRight".action = consume-or-expel-window-right; + + "Mod+R".action = switch-preset-column-width; + "Mod+F".action = maximize-column; + "Mod+Shift+F".action = fullscreen-window; + "Mod+C".action = center-column; + }; +} diff --git a/nix/home-manager/progs/rss.nix b/nix/home-manager/progs/rss.nix new file mode 100644 index 0000000..97515ca --- /dev/null +++ b/nix/home-manager/progs/rss.nix @@ -0,0 +1,91 @@ +[ + { + title = "Stratechery"; + url = "https://stratechery.passport.online/feed/rss/2gi1tPZ8Ta36Tsx7rDLM5P"; + } + + { + title = "Factorio Blog"; + url = "https://www.factorio.com/blog/rss"; + } + + { + title = "Firefox Nightly News"; + url = "https://blog.nightly.mozilla.org/feed/"; + } + + { + title = "Servo Blog"; + url = "https://servo.org/blog/feed.xml"; + } + + { + title = "Alyssa Rosenzweig"; + url = "https://rosenzweig.io/feed.xml"; + } + + { + title = "Marc's Blog"; + url = "https://brooker.co.za/blog/rss.xml"; + } + + { + title = "Fabien Sanglard"; + url = "https://fabiensanglard.net/rss.xml"; + } + + { + title = "Xuanwo's Blog"; + url = "https://xuanwo.io/index.xml"; + } + + { + title = "Carlos Galdino"; + url = "https://blog.carlosgaldino.com/atom.xml"; + } + + { + title = "soatok"; + url = "https://soatok.blog/feed/"; + } + + { + title = "Jack Garbus"; + url = "https://jarbus.net/index.xml"; + } + + { + title = "Terence Eden"; + url = "https://shkspr.mobi/blog/feed/atom/"; + } + + { + title = "GioCities"; + url = "https://blog.giovanh.com/feeds/atom.xml"; + } + + { + title = "mcyoung"; + url = "https://mcyoung.xyz/atom.xml"; + } + + { + title = "Embrace the Red"; + url = "https://embracethered.com/blog/index.xml"; + } + + { + title = "Chips and Cheese"; + url = "https://chipsandcheese.com/feed/"; + } + + { + title = "System5"; + url = "https://blogsystem5.substack.com/feed"; + } + + { + title = "lwn"; + url = "https://lwn.net/headlines/Features"; + } +] diff --git a/nix/home-manager/progs/swaylock.nix b/nix/home-manager/progs/swaylock.nix new file mode 100644 index 0000000..bb528c3 --- /dev/null +++ b/nix/home-manager/progs/swaylock.nix @@ -0,0 +1,31 @@ +{ + color = "24273a"; + bs-hl-color = "f4dbd6"; + caps-lock-bs-hl-color = "f4dbd6"; + caps-lock-key-hl-color = "a6da95"; + inside-color = 0; + inside-clear-color = 0; + inside-caps-lock-color = 0; + inside-ver-color = 0; + inside-wrong-color = 0; + key-hl-color = "a6da95"; + layout-bg-color = 0; + layout-border-color = 0; + layout-text-color = "cad3f5"; + line-color = 0; + line-clear-color = 0; + line-caps-lock-color = 0; + line-ver-color = 0; + line-wrong-color = 0; + ring-color = "b7bdf8"; + ring-clear-color = "f4dbd6"; + ring-caps-lock-color = "f5a97f"; + ring-ver-color = "8aadf4"; + ring-wrong-color = "ee99a0"; + separator-color = 0; + text-color = "cad3f5"; + text-clear-color = "f4dbd6"; + text-caps-lock-color = "f5a97f"; + text-ver-color = "8aadf4"; + text-wrong-color = "ee99a0"; +} diff --git a/nix/home-manager/progs/waybar.nix b/nix/home-manager/progs/waybar.nix new file mode 100644 index 0000000..5448024 --- /dev/null +++ b/nix/home-manager/progs/waybar.nix @@ -0,0 +1,253 @@ +{ pkgs }: +{ + enable = true; + settings.mainBar = { + layer = "top"; + position = "top"; + # mod = "dock"; + # exclusive = true; + # gtk-layer-shell = true; + margin-bottom = -1; + # passthrough = false; + height = 32; + modules-left = + [ + ]; + modules-center = [ "clock" ]; + modules-right = [ + "cpu" + "memory" + "tray" + "pulseaudio" + "network" + "battery" + ]; + cpu = { + interval = 5; + format = " {usage}%"; + max-length = 10; + }; + memory = { + interval = 10; + format = " {percentage}%"; + max-length = 10; + tooltip = true; + tooltip-format = "RAM - {used:0.1f}GiB used"; + }; + tray = { + icon-size = 18; + spacing = 3; + }; + clock = { + format = " {:%R\n %d.%m.%Y}"; + tooltip-format = "{calendar}"; + calendar = { + mode = "year"; + mode-mon-col = 3; + weeks-pos = "right"; + on-scroll = 1; + on-click-right = "mode"; + format = { + months = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + }; + actions = { + on-click-right = "mode"; + on-click-forward = "tz_up"; + on-click-backward = "tz_down"; + on-scroll-up = "shift_up"; + on-scroll-down = "shift_down"; + }; + }; + network = { + format-wifi = " {icon}"; + format-ethernet = "  "; + format-disconnected = "󰌙 "; + format-icons = [ + "󰤯 " + "󰤟 " + "󰤢 " + "󰤢 " + "󰤨 " + ]; + }; + battery = { + states = { + good = 95; + warning = 30; + critical = 20; + }; + format = " {icon} {capacity}%"; + format-charging = "  {capacity}%"; + format-plugged = "  {capacity}%"; + format-alt = "{time} {icon}"; + format-icons = [ + "󰂎" + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + "󰁹" + ]; + }; + # not actually pulseaudio-specific + pulseaudio = { + max-volume = 100; + scroll-step = 10; + format = "{icon}"; + tooltip-format = "{volume}%"; + format-muted = "🔇"; + format-icons = { + default = [ + " " + " " + " " + ]; + }; + on-click = "${pkgs.pwvucontrol}/bin/pwvucontrol"; + }; + }; + + style = '' + /*base background color*/ + @define-color bg_main rgba(25, 25, 25, 1.0); + @define-color bg_main_tooltip rgba(0, 0, 0, 0.7); + + + /*base background color of selections */ + @define-color bg_hover rgba(200, 200, 200, 0.3); + /*base background color of active elements */ + @define-color bg_active rgba(100, 100, 100, 0.5); + + /*base border color*/ + @define-color border_main rgba(255, 255, 255, 0.2); + + /*text color for entries, views and content in general */ + @define-color content_main white; + /*text color for entries that are unselected */ + @define-color content_inactive rgba(255, 255, 255, 0.25); + + * { + text-shadow: none; + box-shadow: none; + border: none; + border-radius: 0; + font-family: "Segoe UI", "Ubuntu"; + font-weight: 600; + font-size: 12.7px; + } + + window#waybar { + background: @bg_main; + border-top: 0; + color: @content_main; + } + + tooltip { + background: @bg_main_tooltip; + border-radius: 5px; + border-width: 1px; + border-style: solid; + border-color: @border_main; + } + + tooltip label { + color: @content_main; + } + + #taskbar { + } + + #taskbar button { + min-width: 130px; + border-bottom: 3px solid rgba(255, 255, 255, 0.3); + margin-left: 2px; + margin-right: 2px; + padding-left: 8px; + padding-right: 8px; + color: white; + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #taskbar button.active { + border-bottom: 3px solid white; + background: @bg_active; + } + + #taskbar button:hover { + border-bottom: 3px solid white; + background: @bg_hover; + color: @content_main; + } + + #cpu, #memory { + padding:3px; + } + + #window { + border-radius: 10px; + margin-left: 20px; + margin-right: 20px; + } + + #tray { + margin-left: 5px; + margin-right: 5px; + } + + #tray > .passive { + border-bottom: none; + } + + #tray > .active { + border-bottom: 3px solid white; + } + + #tray > .needs-attention { + border-bottom: 3px solid @warning_color; + } + + #tray > widget { + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #tray > widget:hover { + background: @bg_hover; + } + + #pulseaudio { + font-family: "JetBrains Mono Nerd Font"; + padding-left: 3px; + padding-right: 3px; + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #pulseaudio:hover { + background: @bg_hover; + } + + #network { + padding-left: 3px; + padding-right: 3px; + } + + #clock { + padding-right: 5px; + padding-left: 5px; + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #clock:hover { + background: @bg_hover; + } + ''; +} diff --git a/nix/home-manager/secrets/borg-laptop-password.age b/nix/home-manager/secrets/borg-laptop-password.age new file mode 100644 index 0000000..abca559 --- /dev/null +++ b/nix/home-manager/secrets/borg-laptop-password.age @@ -0,0 +1,10 @@ +age-encryption.org/v1 +-> ssh-ed25519 JlUYaQ 0zR1i7aaaTiNatQ64adSfLAes3mxyErq3kZUziRInVc +A8sfonsw2iodHRFsmYbmMNAviEUFSy9mkXuq6jefki8 +-> ssh-ed25519 dHDJgQ CmnVM06YvF+mzPNF1LsHdyL1hk+d/yH3HTBcdRlX/2c +79u1EAd+g/Cmb9TzAifO4VHqJZk5T88nP4DWfsJEuIw +-> >=ei241-grease co`|!7_c lx{qy +A6d8YS1s8NZojKmRVWhmJDzOOFT/AEO/IRZN0LI30QP3jImoTJ4EFDQUm4p+0IWk +dam3RKxF7XzF6dNigGDKKeIVXcSX1SiEgHyIo0+hPm2nZbM/p1IJ6fsACbTB6Q +--- /Za+90oVP7/fGDLBRr6s56UopJjz8f851js/htBcYWA +6e0YT0|`H>`b. XGXs1n.$o \ No newline at end of file diff --git a/nix/home-manager/secrets/factorio.nix b/nix/home-manager/secrets/factorio.nix new file mode 100644 index 0000000..b9ac467 --- /dev/null +++ b/nix/home-manager/secrets/factorio.nix @@ -0,0 +1,4 @@ +{ + username = "titaniumtown"; + token = "7e949b0b0615bd637f0d81fdf8bc5d"; +} diff --git a/nix/home-manager/secrets/gnupg.age b/nix/home-manager/secrets/gnupg.age new file mode 100644 index 0000000000000000000000000000000000000000..2a50dc2f4853814e1618af285b907f11e8ee0ca2 GIT binary patch literal 113071 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%0DW)`DijLwUDo>nKEHbkeaUr|~A@?&58 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 z%0DZ^xl^>+uTQZynJd2I$85LB_c$v=G^V;gGW6AL(up_knz#O6A8X9igOfUR>Q+tm z`u6&W&iCKEOM=ulTRFPyzo9mz*=*tU*7hL($CD&8Dx-^^?0(6bm*`|^{A+@rdE7&p zIU9Zj%&#-%mI z=5-~ z*3mWXeQV*|#x{-IS1ny@=g;AnT-0AKnESRt<$6nLN|273T z+^%!Hd|q!Go8R2ctBsp3s_m2XH!oSlZ?tIHw_`I4N)8>Hn;SK2_53|c`gm{VUhmuz z#a(`T!I}HNzn?xLF-2Wp;4ue}&F-fB6SpFsc6Dr?VZAhJEyoA(vh>h~gW6NeP?g-aC z3~%Hf9PTR-<_OU^a(7+AWNBXhfMzF=OZS@|aYkrayc2)<->Biw_g_5CU$&oE$ej2g zxWIB5f5#f`piJGot2W0yBDeWRO}{34j4#D0bKRZe;sV9)l~=bduI35LGMD{&zdMZe z^b=jJP{aC(VlA7rCog)Lq5h9Q;`;QCh-(v%ZVj0#Z+h9SWSztA;|^EmWlS{RDRoez z@WPsXKVo#)`pVz5iLd_tp4B(ddP3@yFed%Ya_2*Dd$H)>;j7st9sBEE_H+BiJG>Ry zo+iz`9c|Gkdh2H3{I@FlRx;t~?b*+_haQeFDK!oKDGxNu_@NTsY+o!~746SJZAhx7V_*?EVyq?RD3dtZxx` zHsO_y(?x&hhMrKX==(Qk{jvV%D>@HJU%WW?>4JOJT2I^W zs(muBU|ck@ma9b0^ng=~%6HczcCY$_#AgMt{#tq@?We=j=&QDJ;=Jjzciii<_@DZF zUeugx%eL}pazRx;2cdU{;cb894xg?PhzCYJtVO_TMF=v&as#Cmo z7B!}eG^L(7Xr5ms{?Gk|MP_4ijEJ#axYaQakNx{3_s*Aa`~IifYSp~jm2!#KTQ(fH zbz{S4Ip-arFU-0-L&R2iBU zZU3KS>5{ocuURKI$0=k@_xot(=FAiNf2P7^R|W0H8`F>4*tRnsnN#M-)2n$)l}T)- z{gNd~x|wSYOYQeOJQBL{arRu*kBJYSMqi36`*ovpi&yGK7M1AS`uxgEYm}$`zw~(T zmV?TVdqlWHWAC&^PU0|P-*B;4R;u~z`>y>V=dS#CnYAqNwA9w8&%dmg)99h5xBO6@ zy6jH1hud;~?0izUKbvJrbAEw=$Z!91ee%yY8-3uAIJRc%nxv$lwt`I7jI*t$^|FFq zt?~Ym)8cm_?&G|N99-tVVou72>DgUbDlEWcw`9VsZ4+|tZQrpzblU-sp0(Fq_BO_r zTdcY9b??7U{=@GYnnh<-ZeD8>$5q{8`MS+jyPRfABZ+E=bcHHV)*>EdB zbHBx*&li6l(9U1DxT11G)YlW5{ub8OVscaVy;j;Y^Q4gCnV5Gj`q7Hb$A4LhS(M(t zrP%hjNhpTt!}lqbTQ}x13+ydY{r1p&9+TDHWm5ZotvU7M?u~m{67Tx9Ps^XT#O6%S zhQmRDHvju9cGk-5jJ;%Z(zA)D?5yW9Z@zhV+>5lgCJQ^{PRI{oy;XntZcTOa6ZM?; zzAL{8_%(K}nP0O}$;xGOX+!fInaT31Ujk-bmk~dBlc{n;Yk&TymJQE#oSmn9Bb={H z@7U_R<2G}Zj_r``So^_9%ZIP#&q+S<>JK*A(hDB>^W2H=E?T(j*oj3irFVRuqS*Rv z+o^4f_O0%yJ~6%H`;o)7q3;T94c091)Z|j0k#g;CdvyP-iT0P)@F%%+rMzr?Z&Go? zByQ@zrK?MzweP6czJoo{$__WC%T%;3{^y}=a&Y2J(}yy5pL{Gg+VpFwnBB76<=RRsyMsPI zKm4LSS1x1mB`woeZ>s{b?cl8^Bb**I=#7q#lF*DeG zU)$2_Pek{%v%Qz9kX4mES?RFqM3&aYuWB9J9&s&5`mcQ|Rm`pQD(69gDNCH4|8iL` z@czu}a`eH=@Tx^85<^@zYabBj$UPzdMzcizO3l8%*D54s^)sdGrte_9zw@x!rVT~U zwbTPhS#mPnm4s`WBtrjQfuJSgZ>TO}cyKKr&OnR3)Yr=cHurv#zw&dwo^4@7g2N zID;PBKiQiNZcUvYk}yT6w(b3o*71AK|5bKUhUuuQ#ll4nYya}B%$IU6@Z@Vc zb-wtFT=~({Yh>R)lxt=LbTDZ%?_8mr+qK1s~61R&HD1)FH(ZRw&Ni0 zsZX7=b6H;KnshJv-+du8g!6V|@7cFXy4M6(hGd3(-YWaC*K()fcfH%zj9mIr@3y`v z_BHqyIpJtqh5B0;PJgR4fuARGFAI!MeY}PBu7~FQuL=G)TOV?t6W%8*`s4l4ZISxI zA={4pu>UR^|EYAZ?W$c(bv5rIio+T0+gySbHnZL5Ic@gx_k-ztvIWbhF8}E7#%*)& z!6WJWTlRY{UszZ()m)v&&XRHK`_b%i+cEa5K%#(G}L8U8A zH~THE*mX`gc*DUB3R+1G@8W~C8+Xl%*qC&+Md@O*^|`hQn+mqwpU=3TdDRhlk?ps9 zD^K`l*7AA;#cbm!a5PmqT*94m_xjnxmWi*{)ugaGepQ_Gi0zD2#R~oTuV%WfOFsR2 z(X5v&#fBeUF+Ul|KfQ@ z>gI3rczuB+UIyjY44-j+RZz)BP(t?3jEq)85nrs-L|0li^RRw zzB1@xm-lKnjoRM2D_W)h@Q=wp4MxRT%*|^fE1T`~ukbz;UjID#G`rB}Wp>|8!Yx)j z@bTPqcIvF1A5YB6D=53c=F`8|qi1XPllUF(R?2tX^q$P^^Gq_9XZa(q+#Y+Nm)~Q{ zeGUzAy+WmP5$jx;=AN25E#-Me&>`Eiv00h>XG>jqwBk$`Q}KD3R|;}PTv0!kDz1%~ z;=0Yec0-3)-YJQ^^X`F%{LjuRTB?0$_9jc`*?DC@FDz4i>L-(U#Gpv8Pi=>Ltnb{a zWhMT0-{%UozMWY3WE#Kc56x$bc)o6U(4OrSdS=@BCp#X`iRGWoc56D{sq>vTPMH6D zcJjAkr+nTyr<14deE0bHI!IpmpuzEN4;-i7crB`3Tfwybf3D*EFYeDcPZlqIzOi7# z*OwQ+J@*s%dvcXTWA^ov%q$B^xL2-Dd2oDcLaCpTZl+Cj!l(SQQx3RAznrzN_m?iSZw;Pi z^RviKS-bYeB>v|T-$fgx51BvFw3{CB*UtZN;FI09Ym;X!&JCk6anF+N`-BGNFyL$iOyV5UR z{msk_?dv0N*19Op-?FM;(;sV%h(!vLSySCidKACL+dhd{;B)A=#@A&I5(cMs&Oh_# z^78UI$;<9WE<37jyKa@B>W3BX^Ji&X_jvL;`yJ1*IMtl5nmST9o-O|8X&{wezsKR- zhEl&z*+xkZD)tIVrp(;8R;O-X$h)99zONUy)NcK-%>4E}+b?#GuN*USz9wv6(fRIa z+RDY&e#M@i$LstqZ{~BfW7OVpQSDjJ@+ip-AO09zuI9V`wpY1bOFa!Dbsn2KcpU@|1LXqLCo9~GWmGyeRZjJR7q5fO(Q#bz#bySO;(ow%@@4OJrV&~$W#y9kK z{7RS@5>OTtpUiC$?sawTfo}x|-ZE}Y-4`YI^V0mLL+fXG?%n#HP5X>;_VLD}AM?et zmPkKU)_#(-x^lsh1kQ@a{R$`Nm0vvbOVC8^eA-(598=4;`$JsCJ^sHnZV2DL+_~e^ zpY$mqx1$<-*Kz-5>`wn;{K=X3gd9t{|5SmsI{Hx?Go|J|br3AR+IQOXYxRw7h6#`L zlP5j<{pxVFfBmhnr|wVkl39iQ+OsD1FF0{fmu>B;)I83s)51UfiGSd5Su>TV-#R^5m{EzwaI0n*}EDA2VEH_)KW3kIaTN7BQ8;KUeCP zU-X^7OC!_ZgIeY8&$AdOss+4T{eWvjqo7OBCWoX|43BO1Zq{X;IF)M=BXeHm(~C`y z*&Qz~ee+lL%!}I4ZLUvtu9#~x@AjvFX6q+kcp9HQD6k4<`!JuCIcL$myyS;}oS(in zx1ay7+SP@9HFtM7&!n19KXa$vY&_gOYj5cq@5@`cesKL+{3iHT`jOq=cRhY>pix!C z^7z4o{=zR)tM6wfgzkIOvgTogipH@G6AL@Od1f<-UgAuScDRzY(w~3DW1IZuSZAr4 zfT@`x^-|L=yR3E4Rnp8@a7^xuV7=E0v8x(qN_+30)%us3r0MI<5wY0z=65x@Be~^K z!KL?it~n$1G}M4Ed`fZD-oEIm&sXldyrS^@e0F26C}YXU`Lg|~YjTe`&s!j~@BWY8 z`11Tx@z$44=O5n=(%pFJN!jyBA4=X{xXL4B?9}O0{yQ#L#Mk^o#HURHA{|HdwlhEZ ztH<<;_qvr&V#AAI`}-luGd6TYtlpRHTPRmP`6@@kE5p_;`+kbt`nl-P+XFp%GwZ%_ ziLE~Ml38-6#JU5^d>hW}Nnd|zir9r)_hz*zfBqbDE5&Bg=|X?^q>hWf3sjG!eA2Sv zOsq+nsb?O&qV`PhZR=!htG72!Yc6qGBHpLWGC@uI*55bR55GC(X2oRTu4*f}=g#h$ zGoAwfhmbuUvhnEy0RYEASf-_?N&G-kBD zTv!^Nw%o%i|52GSX**^E=7BlbJbuhzJWJ`^96PL9@(VYuAbJo3g z6219%CmU1hv6 z)-W{jE9~JAY~K((Wt-Yt?nCd7I!FH4xamn7pN*jV47IH4D@oU5%(uy%h!A5iau9N| z*kB#eknT7CUgUO(eL>zHGqhbpOt$A;FZ{Pz*WKs-L}ym(GMm-qp9BK;TYXbItX^t- z^K#%z$M3R&)^(r4R=(Z5OO(;7__v@@Nc+Z#tcn4ys_QrWuRmwT&{ zzu1~H+TOkLAnZ(_&V;i(1uvwvV?Q3b+_~$f-Xi-``?yj)nEJUls+hj|vEintNa?k8 zJiH5*`bHU6?l3f)vF?tt#vQiLZ=cLuoyEbLxy-I-nTo%S$I9^QN1KeyYJa#idi?q) zyf^H-yOGPipi?Iq-x;Y$DP-B!EOzbE4ykF8{-L&EhLgT+pyIK@jgCueyK&W8NwF_>yp9^1nINWP$P^VE;H^Z0${OA^;B$_i4aNP0K2 zNV~ZFkop>1VsHQFjX>?z&RDUxum77$e{_Aifc=hr+M6?#Gw<2iFXcOQ;JdPL0sp-@ zq3nw7a?@t)lMPvX_mT3yg+~h{H+eXO@4BxmeDl@&r`MBDv-}Zsa+P>>p^2B*ca7hF z)4R8nUot(+nt#*s-M71Qyi-)~A53D~CDo|i&t-5Rrn!^nMsPdk0RTe^4p)OO73 zR!=|HU!-Qfe_iVlFFi>I16@nQW$Tc7Oe ztG#?c`#rO0bcF=lGQ+!J|8IT^aH~<~^;cx}HJ%v0v#VO`=wtI;-+sQhXteJ8QL%{C zidUCwSxNefrJf5A7Zv=~Uis4i~#=WuW-R4y_`{ei{ z)j9IHkJo;ju9i{ptJ7y<_>2g1mT#P9rGbS9*S`|>#@t* z$4QP~Ng;WHs?aG5Uio&t4<{!x&1Zioy2~qAA+>YU0avf%h5sVXnjd&ssI)z+Txiqo z_cPV}G+v$9x@YcERi@Rc`>TX+ie5c?eOh<=tCb$SKlAS~uZl9MjD9MU$L=(D3EPtE zH}fq6XLW0zc(`qU%N;#$-Og-_dapy#?~Yx`{`hjr&6}Tgn8&J|`4#Tg~foE|eoP7f4GSO2;zZsw%D%{%y}w(H-_y|e$7 zx1iy#GhU0^p5A=OYqe(ik5&8ZZk^xpHJ3}8FY3c~K2dX5ljYL$idByFJ7qK%8y&r~ zT;k{3WsELO92@sMkEX)%Q)A9b7v&UlMCU(RdPP=gn)hxFkHZUvzt1mSbff=# zMC(QocgJ;!j|$^C*_JKVpCdY9w^72Tt9@GEzFtn`_+ZVtX#LG8D>wYO+jikX#G3w; z`R}B8zn`%?)|;I?x9*L-_36!b9sl^5 zR)^Z_&-3l%bwA~OD(O$a%j11J8W*h(KOXi}uHj9k*SkQ;50Rfj|H!&*KCkM=y>Ed9 zcZj~dTmBP{x5@&C9<1Tj;iz$#kP{>P#!AJ#jrq0w!D(L%pMLOBS(`qOEzIEMm-aS8 zrHiHah2w+Mc@uY76?z>yzcSm4v+%L~nE>;b0>4ic&++*pQt14TL4~t#_KoGTQx2X< z5va_lvi;Pw_`@^jKA%&MDumuUgdS0LcvzqoY`l7@PF@+K>3+$im5njq!;S{BFY4)9 zdQRwH}^P20_;QV;A*}pRXlv!^CZQ>?omaXLQf9?58l&Q=s zctYaYtUVLrg2i@9KDot_>UiSzQ_s#M_te!FtsnfYDE@lYbHazoJV{&UWKZRg zTgPMmLzm`1EuF@joLIB<*NUlocoT72chvP~Jk z7-hePO~3g*Mk?jiy^~Kl_)R~sb=`VAN_kbMtW&#s_qg?aRs}9Y=j^oy?j~&u zee`tYy^5;qLKPD{MeW`dM--1~m}D)zsvCk}bF<|G{~R2y zyiN(;DEvV9yvU20;uYoR-R%~t?_ycK=w86mss1JVoqP7>$>{ig+$;O#c!2dJ+38(z zQ@abT3Ln4Ovys34%e$*{7Kk0QUZok(B$r*YLZZKLgW&H+A3|!r@V`5{K> z4qLH_ZY|{5^zG;RUsoI3c`ZY#ziL)IS~@XUDO~kkYo5%{+jI7qMHC4XH6LZODq;dV68zBX%zJ^RY)3 zP7bMY4D_?=5u4}u>e%fw*Vk4ZuH3b5fz`TlneQ_fB6^t6rDf~cmK2M)d1y|dUM z=H4WgA4)r_DlX=BO+T`C--AuY=~-*^O5`FR{uZ}iCH?4dTkiUA6aOWySzcvu_G7HR zufM|m1tv~@#lE6BbEeux#9g%0wEWt0CTmmiW9Qhk8UDxb?Pqc{PUwFwo6@`g`Sv3} z&rHe_IBI2ZfqD7*8%@(o7T)|P_voy4WzC}LKbsfqNxC>kd&jb@D6u7LSlL&ZesmCj z`l6SYiFLmGJ6+#$=F>hAxA*w}*zU0YxWLZmHZ48ZK4p3&tmnAUs5{4f=IfJ5nRV}< z-2M3F&5?d@RtY_iH~Ku=#H@}wvoEd4I2ytBi2Zi`vWYrJr^(gc*(LSy{+0Q`J|;(b zG>tF3`u9oWma12hO4e4h)W%>8$++htR{tn7}xeYQpLkpC_v z4c_SsHfiUbS^l`KYfIQ7Gm(TNH9nP@A5#w=TB$Zuvr)S=y5j|d(7b?E0pU6Zhvu4` zeBbTS)5v+}lc?E@BiU~9UN1Vg@+1jOzRvh2_)=5)6UlFPpL6f9Xq~OuboQgW#+Sqm zGt(S?Zn@}rY~?gX?>?2Eeoj)}Y4-~vUaHIH7ER0ku=?~d@zQ;FZ{B+~LF1!)(p0Uz1K}~MaRLdm^Qxp92S*OSvUvPX` zbM%gu(p%P-pVv;?^3V00>idf9JCWZVZF6ro6vjTUPu^WY60z&+g6dSyWTM&u>=kwDZ4=^)6`_oW6QV&}_oTmSs#^|DF%usaP(# zwZ`8~PJqTMTo)0JDh+1UbQ>&w$~wVRd3yEo}GH$I-*MyA85^;)AT?y_nGpya^`w`V?pq>ZbY*A9+s>!|x9WY5F-xebj4hq7E6}{rDD!^sHHEif z`&V~+Tr6?j`XYqkG`HG{z!3XZkzd=z$OJGg>z=r#*2O-zt`@nF0KE@rFX#QVd7f6( zW&QD)4|mAi7=^OM%N@ej{N((}^zWT)*@g?P*9t2Omu#0mw#a^U_a?(rbDy1amW}wv zp0Q-b5$A62wQC(8i0FP{ytwA%t<034tsj~bzaQ$$*JPB|D*QFS<@~A+ks=wp4cZel zzbpy;#gn>3O3HSo)$btI{HWfxMR&5Kv)4{C{hG|Y!754j{Lynp=ARWdXIwcjJ5Fy} z)Nw~2(=wT?DeX)5_SmW3|B@3sIoYl8@#?~3oW*BfPiC9HJ(RU$`2p7_A&L)ney=-O z^yTF%pQ)zzs%3hls}DY5-~3*;P+8b6+u)DLi5cGlW=J^v)0`xKu|u6tY+>ufH)U7X zspmcrh`;E(jh)eJpW>Zkt0w6ES@zA@-f9Y?c6$<6!1Lq(JLFtW25r?4(NJ*_PfK<9 zxl=X5_z4?N)8dL{e2?W<+&1i3r}TdR&7}p0^QSI2#*=tx-;00gcYftQan#a1^q1Le z@Abav0v$1r1e0|S@H#u1>o-hVwB?1_DQk{3%o~Lzf5p3=S>2Q0xqP+k-md}2nYZSg ziT>K-BoX9$Fx#8YW!AOJDeV@=KkuEID1O`W+^Km{=NxqwKKk*gZ^P5jHiIUfEer1j z^UB2Blv+7YBiPILfUc_EJL%rQNJmfkbuT-`xmw-1&&i}NZQXaOw8Q=9IUPQ(l1bBK zJl)P7+9|%^d;EO0ts+yN9&vBXehXubq2)g}FzrUS7<4&SrmQdu3 z6)RgkxK6cM`t8Z?&8nG3mWtng zWstM8f?H^fz#r`^-BaQj9IuPZNX)tJD;jp>N=B8o;@vOnHH1Hw9otlQ(Dn1Z?_Onc z2VC#k8B0~4vPu*C)5d#4ATeBYrAu7*{99S_bB_C(dcORgVf$U&sQUY{?pTA_I`f&X z3f<5xzrL!Xl<{9+qG!wbzXe>gS8eP5z&rKZM9a?yljlt|oF#FD*J;mP0U1-x6K&@C zXSRn_ar~crLvhKf>u2tt^h`H8aA@(YT_^l$#&&^ymm1bTDf+$hqSIOh0MO2|6gbM>+tve%Js)G_GcVCb7hHxMsDHqxc*zmmQ)m;IdSTj zaN(D!A5ME_ESSXdJXr3k|7Q8u?jau82@?*N?ahn0xk-OCw=k8-j@M4C$!et zc~}UGo~Zm*n4IVwIicRW%k=}dvrtHE`iT?#r{=Ew8eKLqd?D|QL+2*xhJL)~A)UK3 zt(xJ6q`~~Je_Po;y8YGS_1d)a2DACvtt{oo9K9KhiWeSdo>PBof{h#?N9{V4baZ8?k zn$I9Q>fQm-b>|Pvaef&4w@`zdb6=TYzu9Duw{NWvwKw}^ms!r^eJHXaXyu1Dg&!k3 z)-^s1livP1=GQ-swSSLzc38=<#($a?r%N3*>?tmp4#hxX-ehI zYPG(HVt=lkzGTtegYA2^NHW>Ki8^@Z=<=QY^XGTx9b*^yy#M9O&0OA5tljFNSz+-z z&hzNJ`F@~f>Rq-!udh8faZI~p5~=b3jM4(G*bRb?a^kU{we|-e46EyY{F;+hk~3_! z>tpqAKTpNnQM7)0Me(d{`K^p6I~pvvwN2Tc^TvCj_Y6a&KgxO!m(Pv9xb?t3#$5$j zJ`c>+u!uf#Ie-04NC1a`s)&za>D|*NJ8vko?fu~w(K>a0U(JF)?LMCWO$4mYdAuuq zZ8=x)r&aRTiDAN`N$FQttay2j@7S*2%iSl~x!>Nkt^M|i<@5IyX>Tm9XlQJ@$t~?2 z&vQ|&N`sf>_1Sf6PfaZO*4O`YZlbr))rhB4TUq_?XrJ)ekX9+e>XI(|^T1V=T>sin z_ZB()oV-$_r+V*RA@(Af4YSU~ZK~+ab~#+^+H~w1OXubTi|6x6YJYhB==8ls8&o)E z7(SSMW=dMxyq*N5MwN9B<>IzX`yOPmDTHyQdT0NFzR4$c1Uq_L%+LC~U3`t=0k-OM z8JqU`#i(6Uo|_xC@zVFyjx*<$9X-o1QCB%EYrFg5@}J5FChxntaiON&hYH3T_D2hr zYnPk9<(nBeJKe;J!}`xs@u%N{=IVz&zIgbQME~XJ^C_3Bqq@$pBpDvORM>kvO617b z$0u9&upSrxTKc&|H+8qu4PC*^zQj?juPocsZ;lfsgXByPPCqpH?WVb&E5m2? zM0Y42p7W6K)9UO`Q0;z;<`@nc$GM2iG2dYo~ht&kWbbk6!WDOt0AN z$ys*m&ccn_S%>X+RA{^Y>4YJuHBkBQ@323U@}wLVB%9g9pzIV8#N21rycy0lO*fYpC_3XsIr6cq<;Fh2inqG zO{Y1CbX?2ot`o2`v8?3$bL_#k!@+%B6CaMC7Sx_aM-Fq}RRoOgAXent9ux10k?wciY^gjOxCdDtfNM~q=bt|iA& zzqifoJ%wFdm)*XcHO#r0SDet8vE<%arH3MhcdK{{yeIN(+4a()DX8NeOO52KNx!9x z96!I^a?^INvf#wP<|fn3{jskOJJ%J}htJ({=|NaSw@gdvuMN>#jZP%EHC`2XJXt%Fyo_r~e*KdjC>==$m`N@v|!cp$wp_)%!t zgXf?BCUj3r|9HM;(e)@!{lpuR5{~CX+`=FBdHDpX@k)LFV{onN=!R9Z%SobMwx;d&oWcU#iYs-UV}aU1)!=ZFcvj$Eb zR7}w+>vno0s$a%k%JFzgPWr5*)#tRn?K$!-?B(^{57QUaJ#L#HYb9}al|i_%(=)%B zYaemkZoXUTI90GyM|IZ+gY2wmo2`j=xK63h`?68WNo47cO(%r3FFv_9yWqCUx1DS+ zS>jK)GfI?9&O5(cH+3uD*OQ-*DK(s^nDu&AQ23tu(f^y+(N8_!>L`EP^un|-@wr-}cv5x?Z{d+OYjUmI#OmcQY8 zw`(QNjge>=w5odxAK9xf@IX|e9yd;T0QIb zyp2mFrq2GHaI{@Z;9vUh$&>%=zN)tQsOp@M>;l0^8P&~79GX==+*>l9^?rK)@%iyv z62Vd#+ZtS7r@z~?GkHgqs?O5WYo7UqiB|iaJE(VHf=pYEUdd#SSHJei9y+_trL&q{ zVby_WmPbCkJ0?^y@rdUV$4-@rLi1M{F1zm6SNOul_;EsHh0oSvmkSU2El;t3+P;o4 zdBQZEr$CTdAfre^LpZkf?xX1#j)s(s>d`S%SCgrpA|c-}pGLxJN+OMXIg z=6|QDQtZ4+#Ug$|6+ep#-_4EE_bFeV*ysB~igBW$&z3F6^|%e^%n4&HTRy|z()ZIJ zzV@f5OYbb$yiK`s{mWdlgNh8vyQcQ9+#whJ#6)NHgIeBqwOqT;3Ys#%@%6uBJN5UL z>yND*_!ZL6ZgEUozIC3l_sd~y>@QDw@c~Bci)KJ5@~(KWm2+l|39uS-J&8V z`JXpxcGm3`GdQnn1-qKPezkW8>-sg9Cdt;W6I8L^Za(#z=*Qn2nOj_+U%S01Jnp{# z)XiG6{Zn2%PgqknXBT@@>EtJ!3xp1CN#J4czI?1h@K64s@-o~o;4uHU z)KZmX1NLp$Q?o&Ja);opXFDg)`+Ch| z@6{p`HYi|hcUyg`<4~4g%(@X(*kDUMS{1Js#e%v*ySAZud(f8Lv`&dhD-t%Qro;}{e_tZJ&Qf=GmFc= zO9}b4_r}iG_Qjk%<^@_u`-L5a<^?qDS@ikTzGZV618bT+=LcQbr0f;z{cqjA#>=mR zf5;okZkSW*8|QIDMz(s@d9FPzP2z>-QdW{TGETn!==MEJ?CZXopUW6NZ}PjjDc8C% zl|4~D^IyRc)A-kBX1-W8uCtM=b4-W0a4aCa-Cy?&~-UE?+# zr&nBWEPOY*I92)_+^1Ytc`-1;ji*UYqc7rXRJYf4|%yt<`Dukn_EJ-6`8>=~jfi~U|) z(D^kXmbv|t-owp1H-{d2`oiqY=I;_W-ZtN#JL^f})V1%QS|6YCb}H-FB~$HLU94FT zK47&w)BNY~v@O=*=bzj0{Y;nO+x3LyPiyr5nzDt)Ppl8!zNMy}J#qgdr>y1kd8WKO zbLZ3A9m>tTzb^ZjT|61lBA6x4w_M_@iCW0vg@1I}h$EPzv>&M$fACfU!=_LMT49J%VA zTQa3)*XoG}E?(ZS?_T4Ps;e`%ZaR4Xl%#acx*K4{9Dsp54!H1%~wpdrgN z1s9#|%5&$Y*hiY~OXc&pQ@VxUc-`yijghhsSI^qTbMAlc%HEvCGIEF0SEcaIp51Z5 z*X4$MP3mL?ZpLEX>BSFZ(gQEA-evbRL9*z^Chee3Cf=E!thN+eomx6~_4&D{m=1kq z`D8gWr*gYPv)ozs<|0ms$|KeNaR#r|7qPBiHNT}ov-G_Fvz&dAosaK${HfAE|8!E4 zZmoYg$G^v2vKIwfuIZ@g2)t&j>EdJPdwtK4X zv?}Wj{PSaC`pmPt5|>pmo^vi*oBew7k<*tFJ`3w?SeZ3thQd$I*Sx0-YM=P;`SVY= z^Gl7?`}2_rLD%wy#^?Bq(+rPO@`zDr7jpuEy60)39 zVYxRzdtQ-cj)31XAFKK~$(76>!c*9eNt_SOSI_u*u;$>JzK@c|(u&vjKHbvsd-;hM zsuxsW)vOF&y0J{0asCONKhYhrI|3TEur&Ab9M{|Z(8((?^q-vbBk$!oc|5I`)_mB! zwD`NUT|6hxkDxi(NfFxm)lCN5&UJheo7<`>v!Q*ma?VASSg!f^BcyoeMcu#2m2-7g z&khE6^ZoCSSDhA+x4-Wh@qgdn6YM+Oy+3_(E`Skg7 zQti%3t6Mzb}hYcs2 z0~v**zn#rDf83ZiVTJE(n_Hy?2VR#{S}C$vCa82wEc1Q4Mx$M{^!pi}zw4W&-+y1W zPhy?Ztwp~-*Dm0%n$DQJbX9g>`D3~Wf=W+ z`V9l?dGo&Pl5n=m@6}y&@6;1Pi37!)Ir>ZItX@!ee=e)tf=e1(&VH|&leTx4Pp;gJ zo1VI6N7SRImNA{NnBQ>vkWg!3sBQZ5QY(Q+k7t~mDb5wdlg#pvb$YO8&zJUvD0I_59jnRTDw5NN#c&qM#aJZvRkiCzc!$pQ=0Lx*Y3yv#8*a?Z`b2# zd9xvu`yAWvwf5cj-kWR}vs3>h=kj97`KqlKnF@`H%*x~~rzfvInRe(*!wgP!FU_;o z$r9)PH5pAdbl05JnLXnofA|CG#d9``CVfcJaZJs;)aTMOy*Fusm1^RgjvG2puK&9$ z?X`I(*S+^MyN-RHQIsy&8{M}ouA;uFUPI~5=i=-uN0+)qf6x|FPPo2i`QDJr22ID) zJv?^Hg|%-ldVG7=)ikNVJG0(|TfLa3aL{ggp>si~rC0dQc@lh)AxrLZTOHhdz27)| z+J(P!o-JpwOFEc6L;Z>Pj3wtb?vAVa68O;LsX=}8A?~vDiYo?h*;;27OqzC4F*Ckt z=|PVbn*@5A8N`(Hl9jg{IVoM&s{ci_di!)%?O6putUe)jZ$fIeJ}Z~bEB~yh#~XA0 zVNm_^Ro~rBr^Sk{X`681hgaGhH$m+$8>TD@wz!hPv|l#D_3$#^joxN~D;nx>#SfKcaYu(L^rFVW@ zii^^Cki>Ve`Da8^i_0D@6Ao_gz6-CWhwXFmxOHF4n^WfQlJ(X4CuXT{F;x97d2K_1 zu!(Jd>DG?#QC~}{Z~oe;t1L1h!~WzURhhuPsb(^)VYTYHojc7cH@ryYVdb*3*`4;C zo%6)oTEm2*cM@Wu0^C_Qz4TVrtYBF=oA>;UO>g#hE+|`ED!0ujw(--=__sgx^H1zv zyT`=g<)qy+a_)rku%Ba;GCACN>VQiKDdhU#{g6!hM-1EYBZxbqic9%mk zF#kU5;Z>hRzOaf)w=+%sxsX{xbcMm(INkS7KW~bx`xVO7uzt#C$H0pm{L?PHuh7rx z`8TyT@0TH)OK!hW2>+Lu5ZOPXpP6FsHJ$ugCXrFMVEN3$scAko)|&P|k6Q@|cJ4fQ z^GmR898b|r>z04qZc-KBwfPe)zmy5DQonLjFm<;^scGU9a~4g8m^dvZcBi_w$$MEI z-QRXjqqb<0&i+8hJ8E+e)IMs?V(0eg$l0}CJz}#n(_Ghydje+f-13hrWWRyNiKUw? z_weSoE|M2xmixn8u&hNsHg|6&XXEvGF2OrboqKlkrr5f)8D-}#$j@t#b^NqqNuZSe zkJQV#3v(7;*2;LUQBcHJUdsD@nUr^4)tzn5{gw;?3jg?i>n}T4F~{TEzQn-j4u7|2 zYsGzxjwEy(4X*Zh9Xfd?+aH%#OszrJ+v@axES~>cbmECO49zo2l;p3ue>GmmvRBx2 zrNL>2h0~kX{LaaHp?cPwOjd0TOnkPb_Vyt zs2jHh8niiKlXN2G%7@u*^P@HhJ!g_4%UBImUlu%wOqC z94&kL!Kmc!zBcEBK^dv9?6TAp%$vEEe6Z)XfAe5R=2J7BISwbBnz{F1y21G+rBjeq zr)Lh+MuwBBs`e7k7THaAu-WTk^8M?(t&A!y8h*F7a_;?L9W~vC&!Xf@{s+y&<$3o_ zj$Jx^=9+c)e24A|wdj`}I@2atSTi0JJsdyZ|7Iw^lGVN|YrOCiztJVmzE7Wc*;-=t z8$#brKRP9>`kYJb%7~hPmiC<|mdu#+#q_~Cl@C^RP4Zm%;(7W7ub!y<3-GfQF1(<% z!Fs;>D$X-KGmc%z7F+EmAawt4m8sd{CTp)lg3B3~u1Y*`V%*5eVOq5#-e&)9C+*6sh22wp`IogEU^w+YL$UPns>6U=5_0|Mo!-|yT@<-r=^isYcJYPzgrpEW0z>j{$+Z#!Q+h| z?!FQ{tjcxu#k`xj)!UR8f6M#!`HJ!cv)KX{ms%{C{k*nfS(VGD>-%=KYDQ$Q)hzM8 z%gOjE%GU1xueeU;*0@t$ioNkGQjQ$oR%&sjEGlsE%;e~%e@18c{%yCjx0d;^-%2$i zrZQ|>1jE7)RarVtO#^yPkEosr&_vY@-y7R~K#Il&vA!QFU3yXy= z=&R%vhrM_avQY5a#)WS$?`Idto_m4AY@*M>)>|I;_7vzaI9blCKQ}GELU*^l;kkDw zfA(c?PRV+5Vn6HVu3g8wqb3Dux3d~5^6p4Jsd9bloe3Lqx4oP5-m|PkQk`E?g?~o+ zuPK>f!TfAhd++AGb9#DBW6jHgZHEQSZ@F*z6jCOgc0T>A)P3G=hF40u;v8uOH7T15 zng4D0SjTxL{Q48dReC0idnP=d|GaxDGso#9{sV;%JUbY>Hr5{6vh~dSG=<6QrcF0m zKA}%eB{br~@sbH9zj^MxxS~6^;Myx|FYZe7zT9aW?}W*ghjC{uoP5pOTlv35oUUohb62#lTr1!=?~)I%(nM47`i-0Sgp_&s@Y!>4 zZ_D5Q;B$KJ!j(JtGYv`>ahKLlS-w(K?Np#i`kbk!-k4c`-OM)a-{DCq0`sCLoZ3I9 z>2`J9_6aRfM-JGQosxQM>5#y@H1pqvyk&DI-sgEKYsYW2$X+icv+z%G?`p1j|66~s za5f9ErOa!*vrc@zy6>7W#e`i7@-CAaRV1QZIPY{?WgX#3U$v0mRqhfybHJ2m|Mt#Q z%ai2(ve53f(&75--@W2zrd$n9iJ28N&GKcCM%tr>#VY&{N?K2|G;3d-wD~x@yUN^H z&bPwszw>1a#4o#t$on}vh`)YQ7frR!lTP{j z^;1q-P5WYZp|^s)Pqw!$PXECi-9MWD-ddO~Fq`#gb$IG=Lx#S?Djfz3tyGw0jFlJb z)X8a{SYBauT~X`ZpNkVIn1V0TDN@RVf9lTR?c#(j~Y#S zy=uGo`QrFD@_$;_8b!^%+xGS^f9Kn<)1Dii3C3j4w_5$-jdelc1?CfrIX~s6FSpxd zQEy`18g;2{M_<-2(<{?dyI5Za&Q1~XkaZ1x8O77ML1N*7z~E=enw&*d0$WO0zC2@a zYB0FHU2$4>V&RGDR~F2$$X~xRU2#(RnHRtRM7HqEaE{#B;mi7oBY4WYUau{iB4wL0 zMU?*^wySZ-l6gAw_OCqK@+ASM#TuMv98>zXt4u%r;8J@Y#iM*h3p6;^zcW-8ILfd+ zv}6~f&rDN=8$Y}9Qp}D&Uj5~?oVNL%rCa84De78Y@lu>St^E3-&Y9D8Mald)=9{~I z)jpj=&s#6$h`0Sv=r?hQP;Kbz{_{RWuqbFxfkS}g)LV<=TemMWz3<%IZ*i?|)vZ~R zIxJ7m(_Qq;O}I%*AX!!^46;Sb1Q}3lXctmp!s(<#zitRC+#az>b!cT6Qa!*sTr~~8yD(GbsX+oe);iT{yD*G z<@ziPLegJOUf>>_G5g|u&oyT>?#hG{>pEISY| zL%Z{*{{GCk<_kg|8MZ#nX3yMHboJtR&THhUE-^3X-TYtwd&B32$t*6K*8Saw=S@B3 z#&vSZL=UN~*oV7jay%{1m*!j~uRs0NS>}H--Ya7{UBzk^-;0~8C-yTmKJ88QC%r<0 z>#J0r+3r@2b53{^xluOtgm>u%nMuFBUo;J(f%;8<7xcCKc>Zsl$o#d|f*9tqP|HnqGWz4LeVZ2pd`%d2?i8GX4B zp89rz?u!QD5Z3&OmlVIA-re>&L)GBP&7dQiFHGMq*s;Qzd2^0T#%le@d6~MmP2C+U zO*Y;ATM_K*Y;2iTD1Tkb`j8p(`STw)pR2G@Fj@YZ%iBAC)7usI-9^<>|7$+ccq6Nv ze)i>@z$a%u1s!xy4_+=drJ_5}WnKm+`(pP_muoCr*)KMyH8#xEeHUQ4MCg!)(j#O9}2zV#7(mF{{^_p%(NH(s*x?ys}7#f{E!+H#oVH^ zTTVHhxyJfD{N&_!tArLcPvmZYQ1LKm<%crCR>y4ur#|+_PoI!bYL*mp+2Tywzu>U- zf)=%2;<>Lk^!~na_PUwD+b>36e2I%%Q&@JH@*zyH5`hN(@+X?yLuk=6191 zQBR-gyc54QiFdX|!P@N$f>tH@<~({cd&Y}+?F%#4m+-f&m|19UHTSyE4-4IU=a^pG ziDvHEx9V@kin3eGJ})~YA`ktT`*hunAfw5L+BR(3KkEleesf-9#7AzKzvo)+9bws7 z{@W#StAxLqo0*o8^5O7F%D=pCHCmiB+I~!7BFoYI$$cfeXXGw)-1#$B#yI`I-%N1_ zvCB4Za7EDWN5L(+XRYASamc>P{!~eGBWGjcWNAx_W{NS8Z74qu4&AZn&^RgOb z`nI2*-{zDpz%4e@CUf2W4_fAGcV+Wk18uI)n&`Xrsl|)w7X@M^+Ds;KOilTqb)k}{ zXWsXR?B#;V8ig)thVe|wX(xnqcJocyWV}Ho4{HP7 z;?%Oqg&Vir(7Sk1=tlN;<(F&s1Z*=~R0 z{t$0c&e_k)q7<@AnBDS0`OEC{F6XWo&hitu`EF*0g#&9c^XyNuziqpO{bRG7ehch5 zrnr#R?}2TK+syW!j-KGx=X=*MRooK}W!3xfJ>u%w#;pR2Y-DnB+_nF1J2%l}|8#ac zq1r>1lI@>;b5sPkT>kOV^*@`0W%9E`&V3AdZp;^Xrs*uqk-46B%h`lMWAmN(oS5@^ zTK0|MuG%xKSLZNRO;x=VAQ&)dX2tpsYZ4hE6EE=ypU!G37nfvz@Mn%!R?5oDlJ6F} zR=?OhNvT}U;#!lZuYF;Ysnqj-E4nNnizNx)SZj5>`QM?HRx-s6Vk@R^o!b5QR#MaJ z8=KUana*-mZan)ka#ot}PnH!v=Zr7K>|Uhx!nC5lR{pdB)9#8!_k+I|)#<)l%Up2N z!JpOQ$&(O$EjE_Pxw}$c{^kwu^H=?~{jTyn*0$b<=9Q9VS5M9U?W?)QK-0zYN=tNC z%jT|%tyRr!u~hcwD{G6bN^2(vc75gH;%3dT5#M~@rsU*`oi*=@Bn9_w z34FzxrXJdU!}69|dO?Za{MWBDOnH{?F%dg`dH%`j38jawF=u{}mHoti^wk2DZ=L^k z)_=`%;=TYDRR@QCCrLWFhx$*P=v_J-L{dxCJGklmi(Q)nDC^OM-b9?`; zd;5LIOV&pr*S{yl&gWjc`m5u5o#WS1md-18Xf28A_?7Y@GcNXF2cvh!u7|UZPMg_( zYJ26{sP3ylms|fv^5)!@|G%4mxr&DMv4C3BnPCyr&F3hnv=zLq{;2KDaZN11xcr~{ zix2P93N1?5Pu#F)E1T}LFZu5wd84VHlan26gPzU4w)!2P+VxZB`|ASoS17oDXVaL! z%lX5$nsxKud9fs{=+pK;`EQ=L>(r92>vjScPyD!4U74HlaxUW<@8?|xjN)f+Yn$EV z683%(TK<3kyw)S)l}GEsLhomHo&NErVR?~ah}raaiu$aTGYyIqO)bBEn#Vsq_KJHB zkE*RYkMg=-6KCD|r03~hcFR@o9=pW6O>Xz=ZwAOa+eJ)Oy5HE-A~*ATgi3E<#i{b? zj8jCXIEyd^KQ_v9nH9I>s7{r_q3;Jacl18dbU5g-E^W(3)7z&@7%y?1{y$};2LAury~mn134S)Fg}|1*Mpfpe(L#lW8)x*a|jGD8zX zf>$i{P<4{Z?3UTOc{k5u?ag5eUez64RWqCImwxtINw#k0 z2_2Jta$K`EEbutzZ5+(pwSE4f#U|e?6Tbb<>H4X9&oyo92R>!SBZvQ*dk6eHLhDA?##RWHhnc!bc$P>193j z`;{^`v?u)LWiItf&rsL>v-hm@X~8|3%glDA9-q^=TEgqz*WjR6K{Ir&?A^cVo|`HE znH`&I)=igjKHhiHJ^0#k-JM$$e%C%*{Wq8Ov)7c_mwuTvKHGI{2UCM#+m_FH^{>jT z#5C^xQG4*_LFrQ7uW1pj!9pQhr>tK5LbEr+Bwcvo6yB@*6~vCD=}6AJUgPmzb5hjH z=0C0OmWCTynUa}aobI=r)|@GAKEqXYZos0~(+=$_Sefwl{=!X@zsdgkwMQevO0j|Y zoX9iZ%c*6ox85(6Yx6!%Zyn^rBam|4q{j+Q4$gd{0`p z$X3Ox4v~wG-!$me?p+iVvms*_n{JKVb5@b#1>zqKpI!0W-g&XC|N5RLFie0MIMq5 zOzx{#ef-L2zAENte1r3xf7VauM5fP5y}UH0no-j6(%hK-RTsq`mE2R8Iw#6^x~5!n z=8w6dX{qu(!LuA+Zu#i8t?sjlp5*RhNHcx?XND-g$kS zMUC`FiG$I$ix@J!D)~dU_5A+j{P&aGe?22Lm8-tbtFJvc_%PX7>a*0&J@*84{-l}e zPpp}4@Lzq)gE<+`%!A+U><*jIXnnlFjYZL1PvPzhamm6tM|S%->j~@FZT#Bz-FQnt z)!8$9cb>O?^p%f|=e?LoRkXycHLB+~R-ZDTtRlOFw{H1$OP+*x-eyKVYr}jV%d(@+4W4|~);TR?MZOd1$n&MP@ zi8ZG5_Z_R7X-QK*>YYeP4|nXZ>TH<#l5v4!k?N9??FX0Fh4*W%o%r^BNUV-Dt8T!% zzkE+NMD~7}!Fsgdysy^Pxi!*7LK?4=9&(>~AD`J~utHWnE!M?RLMc;-Ut3{OkdKE` zPsW>l+EZC3*LuI*Aphj=G_#PWx9bnD-DfEfJyWtyWp2fe_vsDKZu|Y%b~5R1lk2}Q z+v2{BWx>}g{>-&3-+0@->zCq|wkX@pWqa!0eE6wkr`h_h{%l`~&BG3b;44v)d772l zh4*##_1TAfs^wm`FaFn*`H@24 zod4DQR~QNHTrU4+^||zae}5IQuH5d=|NTK_n9KL`KO7@t19zod6Wla?Q|^WZ4_n)O zs;05La*i)c4>a0QrdAuoTDocie`Aco^BodGrINCL45J^rMIGG1d`;oPjpC1S2LxWe zJaaMV(=of-MJz%^3NkZxCvh{ooZfIoe7SkjJ3X`b3wyRaU7d45{qRSt>UUZjzX^Rv zN!!a8({Qb1ZGP~R|E^E<~_hK`zb|>7oytDo3>1~WHY3{Eqep<>EcYk@T)4JdBTX^--2eYU1bju3m zd&E5J=$#Vwcfy%j0a~3~*9VG;oV;%{ZQ5*ZR`K|#*e-!@o%u5yH!TS_k-z`9|T`SJf1UtzCB8x_uXwZ(JgDQMb9G(ui00>|})lrC)3&2d{c{ zDQ@@9lBGMBe6TijJz{cWfzG`}{+lmsu2pzmDtCIaJdA*;+7k9tiNz|cQRYu zuQNr{eeW3zA{9P* zhkQ+JPOV9gcJ}+&8)tsF`?0B7#*=`JITOA-P3mEP!yV=>UaDU3>8_%y@axl3wk5x3 z&Q$!6?|AcRiT-i^eR8*#t$4EY+0`_Gcg5+)Za&C47Tf&&j<1}<-h)$n<7->Lbv$9_ z-UM@W>aC7Y{?YW*oE0?!E5MTA@fbku>f+uS{EAKF{B~*tx z+h>M+dwg8CUb)f#qcVB-@^gN>zwOrRE)3r_og zdv@`v>66UN4=?t1k>A>+b#3#;gw1uQCf+%8-|X3j^f%L0Pp*k$QQ28q?Q=TBgq`;d z-~MLD8}048?$y3;f5X%}HTBf}E zd9F>*b0ZGKAGlm@Z2E1-wrQqQ7aeFR^O$Nl-_Bm0E9$15+^knR;wgd3*LTf`UpM`W z*@pnD!$pdc6=MHbuPF4|`36n(m|34Bux;VuR_2SFCbc)%Z21;ZlYRTr)2vMe4#Mp0 zbHC4ueER9$wG)Youfn`fc3;1wY~W_6#dNG!%bg>K=TYPYTZbv)?ysxtoi6FA-08D< z{gX}A{?@viTfXvSE!=Q0#r~#Un<`tqO`XQen{rY2WIrt1%_@H{`F2eiv@1ug;J1_9x~XQLcEqkPp1CG! zA4?8vxvc9qXPrNiD!cDivi|$kmi(!fBk3R0oM(%-SMJ&Oe~ndsPT2OhmeEqnlAb)A zlKr~%)qyEOZ?+!3qoZ|8Clz1mAgor};|%t5TBXiCmNGZkTWO)bc+2DuD$;0bJ?{fo{<^H}3AbtX-LO z>Sn^)xTU9h6~s=|8Xtdj!@2bCCy#C(9%zqDdPMsI*XV~p8y?m$Zt8W&Y!&UBF-8V6@XS2xf z5{VVh%WO>4r|;68b^77rV4v^>6XIer{+~aga9ug?=sJG(*<3q}H=cfRTJ@9v)NQ*` zCW&jNU0V^rcjWn!BPk`Hrk=Q=eQu)4bl2lILPZ};b5mPizvf3q(b4|n=iWEex%KH4 zetz>XUr1>e@3D~Gt0V2*S#s{%ym|Jn?5d+1nKjGbwG-uv&X(P)Q{1T7a?as%~p3La%#}K3z z8-GE1*}+Sa3THZYyiEM$;9nK5WgB9-s3;W8O0#Fn1xT2Z|C)|pB|Na*L@I+o|UmR_NMh` zjj-ND|0*B8@Mu-|5~RmAQGoMhl()-F;r%;R?l1*KO})KuNzOZ2fr<}(viV;hT~E4Y zd5ll9$$5sq-noBY{C+=-YK^OQ@_D@BeE-9;sWx6Q{2S&5&SR`#y>!ar|IV3<4y1aY zQ;>*nHd-#as9@>>alVN`*O%z_e3#Te%9YUeeq!lD|H%v?X$%?hZgN{=5~O9P8&BFI zBE+n+}j&i8}^vHbg#YkuyAG~-`p9hVShj6&1A5ZYTj8AaMxyTLd7MgDO#Hr zTUZLu*`}noR&?F^t5csz7TjL3j#IhF@BERMwyx9v3VH|izmWShZx_3oLyVKt|1Dd( zjIP_BYS~(Iv%$u_jeYf@vTdioOGQ8Un6*rp>4#z2^tE@|zi0lRwe{n-7IS~*_H{jz zUe@V(PMmS~EKh@+Sn02&+B}6NlJVFzfOznfrI1R`oXaga1NGTC&xo*US-r%<%LS zZrJ+_pKiE@7{Ldp+C4$^TAvWrm+` zShVY!$;Ch0KeBh+*%~$N_{t~OIhV6v=a}(w&8PjfmR~0-oxf+?G5@HPZ1mGj23|Fl zd6Ta6)UzrHJyj_CY^&M5n1lbn=6tb=hs9z)?!+;gJ`4<-xhjIgc6pM`7Rlt_lbGH5 z6+)u(Kflk(=SzDrujb3ld0X$F$O<%F5X_PGbenptr||XJ5<7Yf?pQzD_wV0W^Ln-4V7yZ zc6nNEXX(CQXrsO0)7p|FoKMpnLUbj*cZ-X?HP}(S?=f%0l$B1BUp$hTSKDk}t->WQ zsQ$+}MxnWJPv5QicXqW4l&Q$3cx3h5s?}Y+`F5AA;U)ctH#K@^%N<=Ry+y#3rC%r#kJmKNyxus0I!{=|_cJ%O%cS}Faikh>Rwf0hW$$a z7w%niyV7^9p8Ng#*(T%4?+YX)oPzJ){3XEZd*yE6kuAZ6($Pzw&)mFq_OvH?dED+I z#k-W8ufIH=*nT&nXYZ8NKfg}kIFOswTYmeuTsm*S1nZ0lajzKP$Y*(dj#{Q=EB!o9 z2+0dx`Jp*yR{Q4*vGVuq5C7_2wsDKY=jchE0dwZc*VZfT&HnAFZF^^Kby}83_pyfU ztG2J}nwIlgZo&N@POqYsv{+geZ}oXA+5GRoiRBuv+Ql=}>od9A)=xit#C_S)N2h_<&3-uK@U3?t0g_`KhC7qy8kjWJ0o}U|Mcp8Z$AY5%UQ8Jx~Jp# zrd53`6=i&LiK)@L074!YVpxuC2Qt9a&SJqGBRQ5refLk&o;ezbYu5w;qOjTMqw_yFM93LDDYX& z!5}c#BQCagXZu<1c-}0onHyf+INd#ueaQ(E3y~*&Dob>k#O0W0KN7vgI=A!64ZAO0 zr&a$mFf<)GVs(B}3E#Fy4+J!M+}!nfC)#>*dn>kn)_5h`%+j!ihr{c!U#a@QU;eT;ti#Pr`|^W6NU&aPiiZ2O|0BwYBab?VuIJ!QWrB=Zp~J&8F9L zPn%3}?tinSAng6~DJSL}JTm*3XEkT;+`=r6<$0<5oFDDqe@C(P|C^QHzb!nmK6$RV z%jqv1a{^XQN;&Xbe`9mW^ykMWF5I7SsM=rlRLJTVA3n3%yg9fvB5l8&LBka5kDq7V zNOt&Jo2plJdli4w7RCEJPhaObtC+XkP3F?eOCJKuHnJ@gWj}PyS4dTq|5~Zt_s0qS z@Bau(UHaAgNp4r>0_W&Sx1M@COcb@h>3A_cZ`Ojpt_eJwmsKPT<~+qze-TX-MG>b(oo zy7Bv%vzGtlq*VosQ&Yc&ZJza{!`4<^bfW!SxwG!7jQS_HOumq}|8-7f)X@f>pL35M zDEjq^eIehb{243#4c3XS^4#m>7Bx}7HgBt6+Lcq*62_XVUUnqLYuZ>mz z>C+GHIh66u>8;U}d$(3*rA)4Uv(n7H#nN*5I#uzCtfEQxJ(JHoQpmbhk$gwq!u2xy zlyr`V?==}T*b2QuZzp)L#7>{lIm@!Oyv*?Ie&iZffE-tBJe@FAFM~z;^4|ByMf?;~v(#>#yq=x)wzu`pwRpGJkH4&ay!%N@ zs^K&R&t$VCjgv_MAM%|TCWdkqx9w_q-g<>?VQ%U==Uw`GN8WrRO&~K4x|lcbdOD){)sJ z|5wJjhnp4k{Coq`W*#{3eD|S>tM@i5*KOXXcjwl&tyPZf z6PwqazPWGxvRl$k+ZA@%U09~__@$rI@&|FDbHf&JIti61E?WDK+2Y#ABg>oDI?vmd z5VEdt{qN4gJ>Ifq7ju`ie6e|a^+7BD{Y%zTU(YPEESW9DTWprTWuv6tjgklZ^!$GX z?^t@zI_vK7%g42i>iL~^Gfr(4XOddmdEek{5|d)aGNHSF*i65PA9$4}S+hs)^5Xo% z7nEzf^I08FF(kEgmF-ac^5l2+mc+9M8;Y3fG?+6&;MTdy>9k`lP_Q0l)rZ+ zZt{h5td^hTt14#JoexsHVfM0|!B{|fn$!-broO#iPYkEdR{68kCv>W?tD$`U-NK~A zf|gtA_qNCIoi#D|?Rm1y?|a498GBA89X)qDubulDDt)Obq~hrxPrkn! zrU+;5^Ds7O_-~>2@>bS~zM>@x!r3pbvuNA8)`m%$oaGI2UdB&rV=q21H*uPlB@|OAe#s(iV#x2v;AQfQMZ=GOuk_Dzf4KMN+q?(+PjH$f zJkI=mFzHhBbEC?M?+#Dg5pqayw{5R|KimGo{V%Pbbktlgp4*W2N?X*5N8sOA>qSq_H?Pb2e&R^sAI`j;4zeP*-t@kB+4bOd((1x(+*RpG3)+3`Hf4q> zeANx;@eb#%i?sQ?%zVJH)4#=9AE#b+5Wz+?t|n-z7HmCK72=`D$wC$yw+mh_&tx#Nk0)azFCk{ zlxgZbG6Z5RDj`yQ3Qw!8Lt-6kQmnq!SB_fIYSwIKhe{r$9yr9~0b z^OtdN{dSyT@7-Sg)klvm_gQiytzF^Xq|!`>#n&wv?}qK>l?mR@`pta<1St6`c!^!Nt5pXk0*kYv?@QU9ZV?BkCna6`NOI1Q5om0dCf<6U2$D*GF9Tr zA>T8ly~R0?kNF+uXv^Kawlrx4uT0k7s;uy)Q<@)G*j}D<*miGA`?|Cz<}-adl{?dnqu=JK z|DW)7u|sL!(KX>ufBo9s7apM>wnuEf`%1q`QIlP()xFLvk9)oFg7;#Nodut!XK~E` zyfI+nt`G4#5B2TeHhr9*tNnDz=bA|ui}(+)zdOHPQ|w|ybi~K~%kIwK6WNiYj2zCuO2A*?dSW``G@wV+AV(gsXE#B?X?w7 zQqz`xu8^PdVe-0q){Hw2f0ZwC^wd`8emLqQX#4Kyv#_bPQy7ANy_%a{HJksB*#E`< z?yTkl))^yh*r4Hr)*@ujYDPP97jzuRu& zqAm6t*h0!<#27kFpZ6y}wz506!hPOi(d?=Bxu=WWwXv8JR?8pozoGn;b@)H2RjaZt zR{a+&T*vZU-R{-<#Aa<>&$8{+ZAHhI-TIUkqiwJ@IWo4a>6fzf$-e*7E^z#e+O(W4 zujN^*%|w$o`}H{t{NGG$+SJHeE91W`d@1wPS9`KD4K9`JkkY@-Ut?h3akTBgt`yCL zHNsok71j&y^?iKccfDTBt2wt$A8vcItRwoF|MUl)8xMbUep_nJrF?1AjAa{jYjai~ zUVp3kAK!N&(FON6=r#9Eayp{MyxQsQlI}MK^D}gfp8lF9y|&_Sc=PFRcOLBy%loHx z*|tmcNG6Bb@-;O*Eq->wFKe%CkkvkUug3D#CXR2D{%Pbq58Qb11b?R0tjy0RT?GR7 zR-cxrPP*H^YEhf?vah_~lb9{uf2wR{Smowyd(m#H2k$R+9m$qMOCOgN9^r9ZE25hE zJ1bGW;NxkX5|t+=+6jl0?`SS8vTH6$b30)q$0%=-_LRYapMRczEaOSvtKH2rYQcL=5{JiUng1lEb@z+JEKb$Q% zZIk7>nKs!Ut?Tj%yWcl4bVTopZ;=eyC}elH=6RjI*43)H)Bfb%c`wL&q-p=l6Db!T zzvgw2R!V31-X(e?|J3^HV*PO{?pyrz%-sDW)7L-p>6O$uXjOQlM)TA=&te0Y-|QO> zpU*mK@?h0Wxd*|U9=kL~JiTgEHb(L!Mi;}t zEZ5dU$7k=p`a$iz&GV|SwN}f22W;KTxHZp%DMdfx8n47Vg*La>55GGIR@*I^ED_<# z_w<=$Z|R!LmB9a@G*e{uype(_PELD=!aFS~>Jt!3=5 zbKk|Oc_u{t7M}ZFZ%cCR>8siBsE&2 z$LhSx37eLKYFdwybGx`}!#vfGeOfRzGWZNjnV__Ar+5z6&voUgw`QhzoPX5sC=y@2 zTd8-2sKvc@hLG!j4&I+|`Q>t#Y18JMY7Wq^)_oLZ^IKq;!3;oammf(*jG^i;BOmwP|E-S#9yJ zG;{qG3)>CuQ?|Z5%(}W`iPDGtRV}~dyvpaFC=KuX-<41vHl5Y9bKaUo20x##(Q6dQ zJ@)SZ`XtuGe7pBSO}Av3HC}~g9r+}D?oC&*?$fQCGC53Yr{!|bk>1XwCYNq+mAw4j z?V1RY>GGMYzf0)uD(d>CQ#R}U?SRvD-tF7zPL!0s zZ1T$GrH%u$fXo~9xvAdn@1+#@z6V!Kd+o%!;nolDMyKf$-gPdHGWzFYy6JO7 z--CaHk6(`dlN;BNq9VoAY`|crL?4@1blLHr-zFFS;Q@1LjU~6x)>Vm!Ih7aYV zIA88D*V-BRLqoxD?hhWzXGaSH!nycnWXLq^yksL*r|IM*_O#~aC<2l7q;MjI-|yZt0|9nn(p2G>VM^|-i%`}T69?iCuF47 z8BP~__qge1)Qp5Mw~Ik)@tN-ShqG5Ze2?^Hont#UCB-e?&Ev>V)v_d+<=;tcg?&xK@!dnnI15T+ur#EU6B`hR5NU#FEa|ApAZr7{lj zblTfzl+Bu+?D*dEhsrct(eQ%C>1Lcsi3hA=r?Rez`}+G$o~*5pY~23Pul$}#5!o!%a_6<8N1tO|MAZ65V2@-SmrxLxG?|s`@+yP zgJ{2Ke*|Aw>)n;!|&N~aSuI>CsE(_?hi=6 zt0pw-wT10N;UC}n`0VD#9pS%tWU^$Gy?GbwWqF5riG7ySmcD%1^QlSij#QTMX(67N zgj1f!QYM|wJooiRt%0}n6*Z=F6(w=f-|B1bntm0C?!L3Qu;QB1?j*%?|E}Kb-!18X z<>L9AXLF17)N3LQPVSyFk5TdJ`L2%)8}3i96HxxWxcIT|lz#a?LeX)@t|*&*@%ttj zmiJTozo;bprjQ95G2c9LoM+xSt9ecKZTA8Wrif7e28K&5hjOD^@+R%o%KO!)=%#o+ zS=+$M^&$U~eP4LaR{#I`;KUyJZ|i<9&-->~{ZECWL^BJ4J(uMaCLZoIxA?wVnZq^a zQuxyeyEM;7zKMJD>(|3`ul^(j`M=e!kmh!2-|D?Y{R6jvk@Pp-3*WwMX6d_n+*;=x z^RA!EMVG7mnje{Cygx5<8uRb0rFY+55^&w!Ss*;Ep-1x6>=W5@*02BE-)(X}DePnK z^vHtQaYwJ^*?nB68B;I!gY(hypzGF_CWgs3N*Ou)E=~-5^KrfWw7a`nZavt({I=}< zl$W0lUv@TJf2qeJN_xKPWpB+r6L0sJy@=mZI4AnK{8P;r(|6ym%Jbav;*s@LkByA7 zZC_V>yeXY1n()2pj9V@Li7&cNk~@q({4!P$-0=SLX6B#Q7EbavIpgzF{}%I;-(08N zuRQMaUD5Kys_u*P`Z|-pD{b|j%`7P1^{{8_p-gLK|A)p?{{4Du*83}scZtUPXwA=6 z*Q8dQ`~9VBb?+Iq<$0||`Uih*)baQG8t2A!l9PY8&$Bio6UHZTk5+8H+vi~F-?QLr z%tP0URi9q$d*1%3W@nYV;ZMuD_jh~JE`FV2d+F93ueY-zSaznZ6g9tgT6@vn9|<$Q zpFN>x6EHi0d5WZ8cdg6n3pYAazUvCq`M5|{2mXDsr1jPbTRx4S={lKPc;vY|B4V|V z{t9lFS@%}++o}8ES3LA3IrTn1kJ0zcc%6R4AAbah zZkOPjS1$Scf5^R?b1&!!2p{m96KAqLXUUw5rxO#-uRr_iQ*g7kWA3#N2W|Ejt=RlH zS|D%d5yp_x{npRCCpb5MOyc{+#_GnjLGga<;|P}%yuVbJ6)X_ReHH(8Uwec26{{1A z=kF9*?I^qDB)iC)ciR7>7w(q)T3j0bF|~5B_@%S%7a4D~ewlqBvhJU)*Z2K%SHGEU zbL_0J#WKChZyagAb*v9QbMoxa)7oNr`ofGd(f4tZX0utGUi^Dh_2!PC{FAKs+|yH! z2>b}VX({=}?~yyS4H{NLb5tK7wzVGpmlb1eHd8Pbm&BtfcmOW}`_-9dN*KwX%IZ#8~ zpoQhyKcQBZ&Y-{h_V~<5)SmNjmeBtvWvPGV3YI8^iFUm@DgW=1*G~?g^Q*IYS{H_O zNad8=)UDUzKXKZ9QUceLHoHTAxBC~|$!on7YP0FM;mThIpRSb0@cc^<+TND8d2_Q- z!J4mbe@{tT8aaw9t+Uk8J@Hc9)YWnAkKan}hO)(9&#*3g^}zRQo7s{2Q(qNNA8nmp z(P&_wze}pz_eb@dTl}n^g{7Y*cJbL1oYidnqR+4Neu;>p%Z2Haqxqj#^Kzefd`@!N z(I@XBejbaFn8zK{rZv|nW)^P?CtD$7Zj%2w&vo2cT={~RQhHsjD+=2;Bp!5K6|i>& z^U6P+5}N-RL^N7A^Bnv=L*ln$>vTTO*p;8%U2Qf0Jo~PaD#|}~@59XW4|*3Jo}@5# zUXc^t-6U}3V7`RSv_|9WlkW)V-sV~B+W2rwXp+Bej*I8f#0^IoVr?JQ-);T6u;EZ! zh*6%b_iwrN?o-7t|AhLdQ@Fm(JXn6uZMFCDvrjKsapa5a z_kRA3o55hVrS`;`N@pXc@8#2Sl}TZ`Brll!V6*bVn>TCTmQ}XjpWd?N@@MheYA(Tx zzE()|RXz`Sw|IHJ*^HYOjH_Z@#omeYtC*!5X)VlfdM`h{aS^|<=+V!v8`dm;JR|w$ zh6#O3&M=DBs2*Fqi}B36xn+NZMV2u?5!uVTW8xuOn+1AZ>GiuepSGVm-%UFGNCiui z{vNd#eho7^Y}*nn7AxyKlnR!p<KixctjRO9!$;@h?CLCmVuH79vmRotei{Z@Ll z%dcf0Q*fj38(EWRy*o;^OMve4^K(7TN*yi5Lkn8qQ-c;J4^ zp@=!!ud-j?`NQ4)Onjnss_Os0yVX9+?%*z;_U`rGv#x9YxIN;mwCvvcr}>W#KfBC! zkwp7sE8iWz4z{~hZ4KYaG2z;~n4Hv0nkiB{=gj5qKV%;M`Td;bE_&A&J&bl{ z&wk!^>Ao1V>9wjWA(#5xr!Si!mU%c&)cVV@DRUwe&Zoy|&PY7L87h3wvN|N>(~cL# zF*i0{bW?~8W;M;yJ739@t>)rC#q8yhS^sZzUaskkN%pL%QENJ7WNtRKxMlMC^Jz}& z?y#?IHkxB<)+bjh_cG!Xdw1+6PRpC0OGB2-e!9VxZ^P4+b?#2*ckJ9IQhdMS8^_O0 z7F|w11l!kGeAv;={D*--T_!Cm>G%Ko3lm+%8iPF~Qs=jB-nup_IL_eD#5f?rxEtPwMYw$ld;UX>Lcy(tCNHC)9T}+-RT2|M+suy=;;H z%lC;SY&auoI_21@>LorA=OikQIA2KK@IJ%-dD@wvY#Y{zlbVjLxViN3tPTn3i8Fr5 zx))}jo9@jUIa8%o^zDo{5!;#0x*PwP9IK@LXkT`w*~{lUI#R!}m%i24(3knTexcQB z`M9;Wud1c=^!@yHEoi~E%>P06b|1ZOCo;?8jf?$F?S@(FS^d`6uU^ubX?i};A*XSU zn9TFY%7ZtiP80uobQ&XHS%D4n|GZ2NOaFrZxj*jYxqF`#6rcV_z@z-UoaT{Z87XGF z8AJ_MOuO>7;?dg1iEI1{{FcApr^c`ML%!a=E9UUE(2vigtRF6ToVaIqW>NmkNvmuU zMI9W9ZKri*@*loDLr}`^9SiUJBc^6@EQZS-iA>!zd-JmYocSGGhmsYmrX{A|NbOjB z;H-YcrI~joR|d`6@i2}zCN@veCL@4vt8L#qnYUXW)_gMR@#8({+SisK(tM>)_H^;o zj{L~Pi5{yxRimHnxpn+jTa-`Zv~KPhvv;c>-FfoPan?I;N|o}q+vKz+XxRpwl@R9% z(mnlC{!jjisNDADy*y9w>CGuW=dYS}#Pds%@Rk#X9&6KUWKRTJ@z`o) z7tFF{thu53)9u=C=JwZHEK*O(@=EJyX;?2YsFPQk|8w<2c9*Pm5djx?Z|b^jnN)2R z>GbtYdw6M4Y?bAd$e@jLKZSE|TIG0f@uAjozL;azHg77Md{gduXvLD0m5qTCW%m}B zP301JlJwdpM836MlSG z+Y>PD(zdKHwUCa)rED?3PcQIUQ#p847yQf!9 zW70`n+8w--x#DZZ>YKZ^E!upoHsJJyj&}j2b7f=POzqrc}AUzU2&TId$0 z#njZkuf^Yt`Io7pE`zZ{_=i%yU=8g9#!5~57+K0sfBBx3%j0xlX-rYAup2YKsFJGX z?g|yQ&gu20p_|uUn^kDV##VS*)cNc!%PAlEKYw2(U$s7!ZRwreHrxG|%N#G8xrRGP z`mMvxCni_#&GWgGe&v$=QsZtlDf>UGBc87~GwVm~PJ^fW3yOKpEHJdoKI7BxbIvH+ ziK+Rzdi;~%2kZZvIKItPdK4S-I`7%5Cow|ulLSv66p(k!wmGcx=l)!$oIO`!I*mDZ zl_)=&(79=H&iSXiRqxq-;9gp7e>hWRk@p^hiHYiupC?*u>7Dtnb?JAR8?(OU_5GP@ zoPXyAd&BZKcP6eqp?Gk*hRo)5x(>;&Ecdi)zP(W{^mJ;{h7OsW`H$P4A2JVHw7>fZ zW8URJgGF6;${M)Rm$$@Adf#~C zT^+?-UFOeD_n9u=e^=zG<_DfDPQn*_`qcJ&%xv12$D%m6ZTBtzas9x< zx9|JrJUzELFL0~<-lw0uBi{bvS~ID8%9^kvhs+loc3$W|b=UQ-g<}7Y3r+rT$x}LW zx7M{we?A;J*c-jaj-ktx<(BAP7Q6GjU**q#UGmjkZ&k^ksBPa*1?GO^$vhbO!FWp3 zZM72Cf|vRGH)!!zn7quWcV!mrSuo4!)}L4*k%;D5|259*RV*v}dp1=!RFsuDe#3J0 zJMy;-cNqql#IdE?cdPsc+;OP5inFmY4I% zT`Oy!@ANM9YcP}9bfzq~Lz1PN87oSj?EB6%Q}$%2zE#dUsa?kRdZN#-)OL!U*QM9B zG#b>Y74Ky4!tIXW}&6HP+!Tn3`gG$GwsT&XHyxOMWeP_u+2h*UiU~zHBKB>tY zcL!NCK5h{(*SEc}=f#c4(o4E~i!L4u$eOaLBDBt?Sno}*c|05N*Qv348 zzj6~V8Lj#I@X%SUS&vL@9z;ZKaB>jdGC$LkYnRciI~rM!RL)IS5cIUFSlOak&R-X`TKqBDb5qH*xvK7$J}%UB zgXPBSe)ZdFE)2S~RNp3o?ZA8Xr1&&#cCqKnuD)F|`#?ej@)2`}yJ(>LM zz$LbeeThe7PWsDq#x9z>L3+`L+2ON(Yd^~9H9s;_;K)7G`>M)ps!A=tx8Bt0Uk z#<*{%KNc@@lke%cCMeo_((=^Yn!uTBnDZ14Yw?8l_c=<>cd&FiH#4ql;^&&S*>%@^ zYERDDInVL$k>Ka^-q__FNEGSdiJfro8vBY1l_u*nXQ-*Zzuf*xYTXX~i2ZvD{>R@d zld^xGHMRYEz{>oxhHdwxmzLQo)KzbfzrOx3_eKw!!^`=es9k*bptMIXqFU?ciUmvA zlq_fWdb~Zw6taugT}4XZ%PbqFl*RTT>n#lKOjhdI%J^{BYUWQ{gfAGc&2P3jBU#4( z#8M(r%+2FQ(kX+J8@iHi)UE7Ybl&JndZ3NbriZddItOdJ&Ym~PHWJhM;d3^FZx+Ln zWk06`Z4%X+ZkDdRBECU< zdh$%k`vKL7Tx!SPat`|9ZpzV^OWMY}%+FZ_}` z;nl|$dH%<%${wsfvB!E|zw_*iJEZOY#s`)?pXDv`%vH^jFX=7Qc8GEmqQ&VG0qOyxgceZOiTW$qug^Bu0HTiJ7-Uv{r{r&X=OLH z=j(i5{l@PcUB8g*_3h)9BQp(_&dgkX)9~^47uKJ3b=I^n)rVF! z1XUlKoSMuxoBzM|m2=$Td+&L+PYCY4wM@@@y3keWW4e;F5<7lh*nRYW&IRWXi_<&i zEeiI!cQyR4>H(`~7|+;`Qd8TWyy0q65EAr>`(! zSfuOx*Lr2t9=85(mlroK%U|sLa{i=0kLSfMR268HVb7m~709NTj7 z%&BaFgDp90^yOCvevdKvKQXn*!v3(j|2?~HS)w1)uS%5Oj{UT)jz_!UD1(GoIk%{F z^i9Q2OQIeoM0I^Ivf^ObbN%7cV5gQ_Qv!VsW*oS7e{yzxZCXuH+tb&MM@#%(pOVrj zdhAtr-Bz{mrP^*K26g4dtIlLi%6QWJa!*#y%7h17A8yL543c>G?dQ6HJu%lf1--mo zW;kDUSrU3CxQ)-OuHEY0V%d`q{+@G_ zpJU?5xM=D6-W#_zeErb9;rh=b@+!(N3_LdczIx5NeE)-mpSEgTcbUmtdTCw|=ZA@N z?|0PRcy%{_`nJTs3#(_wFMIL&TbA1`h08tktos&Z8uH;y14CD?*gsx4nNWeDB+p z+1|00)70jM+@EH&%4E+8y)P?ez0aImAN{gsdB}=RlZj=E4Z6CQX)nCiT=A4I@R_vZ zsl(>ta_7wZO6{7zUY_@&?b@u{HR1O%{~p}f{3b`l*vH_Vhi&wj~@dpFsOjMyG-VY#0#&n_=i z`)=vpO)JaeKPs=yN^$3{GdL){b%oa@TbJyV+~$Xyv@TA~(x3iK>}|eo;I{i8(igti zzxrQFLBsBkd1i-|H(ajYuFb|-ed6nr$gGoDDebuqzUi!u{uAZ9WTkE{4EpXV?A`cg z@pQAF>z9ag8L}mQa*24Az`TiH?)S$(Z{tpf&s|w~_7hXJPo`nMZsR)VlFvT)@WZ|K&9nAh!KPPA>H|$QElq1a zF7bTP*H=;TBIvur{FSz)xmw#BK9&WW%}_dHP*-+**6x&yubV2=c~0z9{$F3G$M~fC z&X-v?V$+MZe3AAm|8=%hcg>FKfYx*Dcl9P8%WPBccd9s>qt6`lX^F#*J)y^b-_Lj? zu!YSeXuZNVf&Siur%yJk?fw4u_xc{;Ch2WA3sYw1{cKE>|Fv|g+S9%@ckD~LUW-M| zS)>-Sw{PD0+qLTseDOMXE9+=yMzPfby`*ysFNM!+3oJEiQ;Ih4E# zD4zXlVYafK-i?4?QO@m??j5Kw zTJyq+_a6`yoPF#kOJ3rIk1xx8+SMd3{ubms(Zc0@sEVOnM&P9l%lXys%-%Hzwkp&g zHoElut(i)1NMb$5{7@g~)4SW0>R((udqv8vY;%or^v+bvESZFfs_X9yoj01r@#oE{ zxBgMl|35Z&Ma^EmLsj6ehgbdECq8d?^cqgksu0q>Ho?9}D@HQ!YVM*n{PtgKc_;Co zV~N<#lJ24171MrlQz1jU=!O0Khn)Syat)Oi{{Q{kxYqsQ)?JI9^vw7%sW+}s=HR>@ znN9w`T|T|cZ2NO~Z%)whv}u2DedsWh^}g+T^~}4?RenMo#-@ZSYx30xJ_kSstE5auCBJFr=t-@(H#+#=#x1LVW>n>H{;7^L ze~+lqjP|Xmo3F`LX!^S*UgJO(S-JMNedQF_`fma zUZ*Uxck5hPrS*UOPbpn*T_SgZ`BcS&S)1;zVHUo6OGc5&REeF}zoyjcf=%%^g&&8` zy;`-SZf5MMwWqajUA;cx`mu8_-mf>%UhT1az4ZRMeCC&!ejR@79Q%I$n)B=5<*m<7 zzI-KifA%$-8>hARpEep#H zruc7Lt*WbZ?P{iv$n@a1i#^NuwViiA$e*-u|5uO6LKA%7M{2ZRJyRi5J!S48t;f=f zjYE>Sr(e>4W*R^3l&6x1dy83>Cx3*zxEO}@M3@12zH6@G8hecM`aOa6)*+f#1Om|Q5Kcz)An z$<+_aj(%SGOZTOo=$+na`=T#buCQ(Bs;WKrZ1U>J+OH0W=NOi}*zi%rZ4H~&-|cFu zy@&UmVY_$y?&jA!dy@}2u`N$s%>Qnt=2e!uv}3;xpJ|%%C*hVMU+m7wRzJ-yhNLbo z&2sKHpHs5d`tz^l+ZcCP?wG9CnE$J5wvBDijD!9U);By=J;M6=(@(q2OX{EI)c$aI z9H-9m-$+hLZqJ!RoLX<37d^d{E1xxa!}Q(mzVG+TSm+h6QJ=+RJxg}cth7Tn%YIx= zDk!@q;&N_f?#yB@qc_i+xGt$oPBDIVKSTZBVI$cGr&%Xie(d;RFvWf2WPwEHwcjSb}9ORqJ!woA*udfpDnq`U41BsBcPJ-qwZytoiz zTo%K1>s$k8N9j$=-;ue#|BuSeh+5*ya$LZumwo9W!Nr&VUUPZ(xAN{KtEhSNvRW1k zzMgoG>zi_+xVL!RiOHXGH9`VaK5aht)9~2RAnEB2e(OFSQ2z6N-&~;<@#NW?J9gW0 zRGbsodCaq6{?o7jxs{jsnHXGi|Jk_4es0r(^kcuI{8LV4hA9*s_-pa)*&U;a`&<0< zX5N3bx$KL?(#ygn`4_BqDD|G&Q_FYX6uUboXJyP-a^1(tw(=!= z&THRAUMxGgMYi9w@tt|@mesERh9U>l=cPLoTh7~Z>|K<}kE0(%T*NJBA6w1x=Cxgl zSfvEhoTf`RwyvyxzTSIzVVZ+<_Hs$Xb$Q{TUPl{^7woJ^UZCRs`Q34MmW`^653hW< z_H z5^_8AKXo15GUd0-#M!%TB<{9p#IN}z7JOlYuE=5~nc{w}o9DmGX)b)kn&j2$n|SnL zTP}<8RIy7*k_`2$&Fw;k->BCM>M8qbv`mqT7dr0#viixF=#pJ#MK@C(ZOv8t^U%dz z&T6~B%wz7aqaH7tpj@X^lD$M^Rbs^jj>i4x0{k{~uX(#iIr>xS9qU_%mOC7OW*Odd z<5J69-B;T?7vxx$Y-0W9vw62#_TRilqoOZPe?@1=NWAe9T(nar<=4`v3zm*+I4AXJ z-_c`{IcBZrVO^FxVg7vctBap9ufA6jmEU^j`~#*q+2X`~7w$bdlT@?A_duG`sgu!0 zImh1WoA{+!sVt~}sJKP<@IUU1BXw?;>}!g(7CtHW{+=r~r$C^R`?rYignh|hUS)(Z zzv$8abdmSKO^3sq!~3fI6d&K(XA$^Btc*=??bBuP#k^-_^7r)~VExL}T=KT!D!1?F zGo0M#UL5vj`jRWGtP^|PWlDneIl-UHe^}3uzG&W~rLMBUdSz*9h0=;!Og2)C6F5G& zTQv8b5lrjUT_P<%!>QzQ5ZjeWY8~b^tX^7E(v?s6PCa3}X<}?ZSyyM^x!M^gj(SW@ zJzbu2gp*lJd>)hS{xzw0q)&-0+PA0Ks(qX6HMvUXwzm;Fxsz-K?S9F9Iw+VEXT7<*-Rh_5mqdZmzy0@{SQiM27v$u`s{1xyaxHvva@krdov*Ci#nmo_@^ZXktqp&Sdym+>F4{QBmgVKMh@!>{i*JWR1w*cvB!ImP)} z@5A&bZM!>Cea8bW?mqS4|b3@v%B_-?B7@^7mJ5-qfEnUGY-k zdeDw1ho!D*M=w6D-ShkNakE9|Y|e)opSC~AnQb-s-^+<1#i@7q-8ZP@nU$2nAx=z~lonYp97mdnI3$F-G ze-X%fJ8iCI#>pvP(m6Ok-Yn@(spfjSe~-@}C9fAUGe0ILbY(F=yPB}}?)G=DCW$&f z_ubG{QW^4P=7OY!rvJ_#Y^@54zvA-P?pT-Ki7*wmFSTmRysqyKi~DNeb#&%75y$Sy z-}RgqO-z|?w6to%^i}<{f@HO2GI(WIbjWO6_^4*tyAQrIz4PS`PPp`dan6L9t8M%C zUc2D?luyZS;n(TRsrzy-G5j?7aXHUguE6z#Qog;!!JoULPRG=Lyc_q((9M+bThdpT zHVc(IXP!jQEaECqKXtkF^p>g5qw?0hEy}Lp-}dy#^j}HE1ryKQ`7>4M-c5ts7taKOv+a9{PJej7x{1q*7jT_aeeUm`je^k8H0NMc3?_|BF7}i<_4g+`$)`o-lL1b5zHk9MuPyBP`E#y63TG|4`a~gL}j8+8NFzcEV@<4y~QAx8qFxgysLb&Kk&N zpLwMez9(y=M?p$}{3df}$uk=+d_2QadfGlCb{{*-)hGK50!uQCq@F(ba65!WUd~Kd z%R6g9AttpP%1&&`^x3xz{M)%gSFkRko z{ibL49QGYlR1y8(>8g2rZ@5ic_oV07d!k)u>}Om5+1tlPTp=&!Q@pZ(^jEft&CAz2 zojpF^wR-VQ#!q=G-WD+Js@WN#ktKO&@5Ap6GEU^N6A%N z%rZFpcdo~YE537#cCVHYV=8SgiSzi!ykt#M+ZvAOBW5z&+C$3@K7QiQ`^c>1=7t3y z_UwBgrS+li=$x8w^NuPn`J@^@!PZCQ@3!TqY%;ECv6jR=X>>l75vcy7ytyQ`fB%k( z9VSz`EkB0@GcYSH5E8q1C53lAyTmf4A2P8$&(7tl9R4mN^uDQp)9~+~+gEo~3Dqpv z+az6UbwqRXqpxOnU;9N}e4zg4*mfQk6%!r-Z>I&Pi{I~KSamRE;W~$%tomi%TX_AN zw$A5yt2!<9ncVv8f=l8)O)R{*p6^)d>&c4cvsSvk3Xic^eqxV;(5mte2ib+Z6NDx+ zZdfyqsqysR*jamu9NaWwC;vIh-@WS3zN>L}16}!pW-&b8@^QBilZ)6szT%bJcNtC( zc>KQOorRO(2LX&j=)%&IEUQ1CTPU#N%~|bp?z1;-j+}PuV&;wchCTj{ z7yO^CG0<3A7q?q|lcZqt+jcp<&qk4}Kc*E&xc)HqDR}TaGxWm#L#3ydXV#V1SgI%} zcB}U9TFR#@$l-;Uh zt92DiOD9U;Q&v1G@){+F}oEAGw;zVr8#Z1$fTmML1fg)OpMw3cPu zmt$bsvm#5vtEXs^!(v7T2Hr<6)9;rn=&s%pTKOitu=b8)sasb3qWF7C%X3&0!*m|~ zDmeT0%@X~C%OAWo`CoOs@UlZ*Z-aJ{MPl3MT9MDQDncVI`$I$$Pr5{OeQMJ9ynlmV zR)!Q?yn$N6GnH)niRBI@Cw850oxD)8t)lVCE`x`m&T*^H^fGn6o9vcraYp))fW*W^ zM~iZSpPqX;d5^e6GtEAn`Nn6{IS=uF`={>COsHr7Yi=3N8`5SS!+mecin3!~Z?*{q zIK53_N&0%fpm=>@x`n=b9Gl}A(~0^QtK{;X@1NB^S~6`H_Z|Bw&Cy4uR6Scgr6S~i zXqM9QXzvb{$>RDGCAT;Fg-@RSQu0GpuhG%q2)Vqvx+63Ht&jV?Uv}Cl=?h$$)6?zC zLNv_9c~+-=uQt_7h zT)}cTnPdCTOqjpO_}Qt;-HZOZ8?qb7T%Gi%al5?hu7)Gi7mEjPT*9Hc{N|PVEa#Gi z#ZxA5O~_owE57f!l9Wbvo`Bra-ag|8SHI0SpR;81)(iSta#3=L632RF4QJ*k#OB9q zta)n3w}<(})=iVjKJzd9<9p+>YF$zl>(+?vE5r>2RX67wZkx4m7jK@6k8eY1Q~kB) zQ+K%WH$=6}Zrd}TU#rjm^FdzY^QJyrt5zw7OD}2^*pYwr z!iK2bSJoWf!BA3G`;a9$@ut)kT{w_P)@LdN5F z!Y5fau3Mm)+jvd!+r0Z3rAwwA`oCpYmv(7Ng(}}BhvX+^3Lag>>t^55oiY7vaM=u7 z{Y|qg@0^ucA-Vpb$MjWYZ&$RLSMU|^6*1;s-IRW6&&;yG3+m1$y6xV}GODWQ`sxN8 z^f_9~6VjLD_3F)$Lm4+d_WHa2f5DR`tPrs)f6)#Nllrv2#o5=^J@lMi_GgPz-=}Uj z*(4*O!cVqZ$I2Uay!!WKCEu;gwL))hh2G`fwrWO4eQeLYyKjHrUtA`ZepJWTeh>HL zr*5T12hYxQ>dv;ibwqTtu6NAN`wxr%e0_d*+vHUj`ZvV5{_;0|v^MC!oXzDO-ok5K zU+?qMdb!#6e0uHkf5nDP$&1!DN>5oh`?-trl0}!5J?>oNSpDng!$T6A9#3DnGphQ- zVFfmQpBwqx&c#U!9)4zGwK!pMZ0nxSpQ2RKwmsIGrN(ZSA<5=_W#YOwiqYBc#kWlP zu`0Jk{bc6$zK+)uBg{(9%G}WQnQ5jJf7AO*>i<8VX57(MyHvdTGq)gvV$bnD#fOz9 z7G0AJwTt#e&&`UF5IfkGyV0AOe^vLU=We@we_xE7o3nRm;Ee+ccr_V8!(P zd3&d5*Yk`0+>l*vTh}1eKh-Gtnv=zmyr_+BjDJM^?a~o}cUMy+yql0-Ww? ztrlmq_NklYZ+mxsZbf)1&mV)v=koVo9{6-9W&q!P6U1>(}JrpJ>{zil_*`1|4f z**!AR&+U_sR|;tEe0{n9^ov>Bk83%|O$y#Qb@y*(5!MkDCuXeY{-n_Q(4h!%W&+zs>asW54|G{k6Bs ziyLL_R%*@Gwfp_|MzT}C^qeJcWu?+}&l<8{%k%cPmA1dbDK_QJr|w9<6Y9I`W?BiX zm6#jgCcQGcSkmnt)86YfNma_SZ22kvXD8`?d^q=JPmR@!<9h0SG2fIMJr>Rhe)L5u zM#$t{>W0WzljSSFL%rHJs{@`w%U9f~m@XyYzvZ=4G8nas^NYA>;edoM=7}EvW__deq zKc@%u%|6EZqR;94$A_x6qLnf3>GyA4c@xv8dGnE(*oo_bQv}a=3QpP>-<$eHY-vOy zm*hg3h}|n4-K-U?_c*=`{I*d3^W8m0*Jtc0JaBBuy)B#CwH$bPe}^%jNZwd$QGMWT z`0v&6NqY|GY$~7IU^v?=YHE|sz9WUio z>eyQT;tlqZOcg$=^4u$4ugY!h_YX7sBecpoinX_i;QDmu!&{8h@84~X0CXXJUinZORsQgIXl5c7e!?sEnL7L zJ=xm*71!2#_b!;f>5E`kv(h=Hb?T&lB{vObx!m&LyLe+&K>Et>_mbz8h3t8@_Beal zj_Uu91k^sX6=3{vMnDy6Yzme$?_y7HNS<{Qp zzt-$H!1UJg{r_3kaV#na7QYnF>{*aJS$}1Y@hzq^=EZlG=2T`R_iW#JwmVw&>V;2D z7x^509n2U*ImC9v-TbU4)lri2p_J*J(WO|n8|k*J8N7)izkj^S3uph^_dW4j;wqty zVxQky=-zm0?_ukr6Mt`+j@wnf3`TLwsZ&4xO@P>{LHq)oc+G~pEJ`%?wQ&(%s&yA-ywIxKY6l{F^j88 zp~8bRf5Ng$*5CPVc3mbqe7FCfe-GvsyBBtFxip?Qcs3$A^N3tzM(4L8uAIae=ZRDD z)%)1 zI>mnBL;dcSoTctEDTU|bHeb6^FkjX1V29K*2d5R!7Vw_U=y6zEazQaGYtFfsv+~z| zVc+GbpJKX-yXN{6eU?a*3G;qRJ#~s-qi5eX z#n~JFTW_5bUn_Iq>w^F5x?e9k*Iu=LlBlmw%U7*m*C(!B!QS)eWP_XZny|LqFqJP^ zcjsDPIqlOj@kNVvZCd_rj&Kn;DPF_rvIF}jE^Qz|V zhlFhmV)D~9Wd1eHwh}$frta@6%6Kts;ZdurpW6N~gr*b-XVmR|{3f0;=DWDXor$Mb zysfMkZTJ+pwd|UGaJO{(y7Kz(56*6hs(rk+mX*^cN2ID}(t`(lGp75lTPCk)kZWbI zU;O659dXKevIg|F^a{)$vwKbI+r6hyi>{h(d91);#l8HNN z{c-DcpP#ZMPI9TAxXwB)m%b!p{pWKHEJuxar?1S{lviWx=uGMZ{nBW1IHg zh>ekwDV@|FbL>&iPvIF;X1uu~xwVGJuE@k#=4AN-v)*qTYD?NOq(h{b#X?<~3U6F^ zW$@g8&Errrzs-@a*J{4WFxI(Tb}lx-heai8&Fg=w!xcrX)pbvOocd&X_hP3|)2?q0 z*Q#O~{c#*ex5tI&ns!#)B|{a<%;R&iOoi7Yek zG;0u>xU()p=Q#ItMh51nxnK^>yZ=l+suhU#rtw|B6OD$$2XO zSMksKAK#-H4~9Ir?WSY)X=7(YS@ODti>mr3G~W85A5=ZRDXO(pO;tp~>3(Ub)SSlE z^DO5+TKN8Wk6_unr5C!S7A;nKyyf^Rn}1vSro^rfnEAru*Uw22kA5HiGeP3ip@``& zJSTHaExgp;oD$u`c)Q9=XvX!Z*xmnccZq(edE{djzdP&ik}tp3pM5rAhJ}nzAH%!)MQv zuFJNuFS1m1?gE5cY<) z3jNG2Z`;4mPd3tT+#W5G!}51V`jnjY)3$OM)a1;ON zCNI<4HeKmRaP8KUuYU;K5fu>Kvd%s0j@vhXZIg!WG9qVlrr5h`th((t+3(oK6Gx-_ zrp6v$pSy9t>EZ4}uXs}LtpDbFWtN4Y#ldrC6IuAB&DDUyI`CaIQoCUpFYxeg+t&Uc2f1Z$IVL`~sr>h8U!$GF%e1vRvlqWu zwCM2JlGoE882tD!f6lFoNteUV2-!~l-dMRi&`(BFXZ5AOW-+GG|4&X#{2j?OXB(fB z!lj7BIi|rZHV^Y>T%5P?fyN6~VgK&$UMpEvY+1MBUBCKj1^I)`XCn%8oO+vOGR4kr zzIN=)^+U4*x1FCCtNbVOrC z@7Mn&^2PG!c3N=?K^xw+3aPUz#wry2%nN7rRP!=n(p$xH@PNjvX}da#mc4CU|26ZE z$>Lq-;~awOtMYa=1s)ep3BAaZ+_YIbKUgUK@ZutgFaJVTy;U+QeG$_&VfPuExTGXa z521gTB73@4+L;O7K;3t-Qn6l=YXR zqCNiPl@w1sG0$Y<>X&t&Z%SUY(MmUbSo_f7iRcRJiHno}t+w5k{64RLX`%POrV^WW z)xzNOGiQeV6=m!4<1G$I5Z`@Upy!%~x&PzId%yhMuEF@PE16&PiK$AgO3(qZsR4K6 z{4H|$-pz@OWs02p^W@Xk-g}1bzORxZzE8W$_w38oG83j6o(BsO+pmQ!f3~y!p1afj z*1UsoTnx`r1ceiVA;x>%_aE$|JnHK7fFRNMn_dgm%fH>Xdx`yp=Vx=We6IC>GD$mPq8VMV(#bt@zr6Ji ze(lLSghRJ4eGyio`|OiB+y2Sl7b!N}`E+i@o-^*+Z*^HL`RrO7PsGNBCN^>@=*K_* z)nmsqD{ixC!E4Rri674#@LFzlw|`l8__a%a?%z~7q2_SQ@YE!|?vIuc{}~+_wlS{0 z5+tQM`R>YqC2T*Kr!8d26})V9bP4x2UGHrly(Kai{bnkZ@_J^+dpuQ{;ZPUf|YfWUbe)?{3>Hc%m;M$eG(}s@jXzm9A%)txnIL;CDFTP}r1j zuP%44_ik{hmup!Z^+!?%Ko@qY;t~?#ry?Z4RrS$m}E8O`bszN)f3*D-L%R0xn82u=h_1QBj?YH z^Bq?@8fZ6h!jJW8Pr`F&e2-^crTsQA>_Aq&=ai}UPP|)Qlkrn{n~#TzQ_m(rse1O4 zcK;SLY|wOGlu@3#(q7R%R#E#|<+Ke&wmY3!8h)Mce0T5Rh9J}M1k0XoW1bVAD#bij z+*;#y9{zn``gZAyUH(e5e|oDVn1tM!EX8`0p>EgtMb1|afAy`L8L6`5t-#C) zyIcYqz1~RN+k4F7rqSG#e+iO56^wTucsTX?qIY~^UIxsukKJD`e*Ti1kN4k^x^F76 zoBrwsTE>3SGf`dXp6B@`2YTFhU%R{Rqi4*?Uu;Xcw{^IPKX2TdboAt` z59%Vz%>LhXHx*Z_I`HLJf#<3P(z2H34do>@M^;IsS&AJux#;PdZ`w9HAT)$Cl{-Cr z)e4^yzwPO-9G-t)enWJMeepzpi6vX?`Rc3RUcS5EglpA~cYgQm_f+L8{909&miR}` zE$U-R=3}9W`+jI|VR~Ad<@~NQqSU0=%jp#ii^VD0XFVES|q*DL#-zR>S{7r0?lE;e9s?I%mO2qe} zNB^C~kWa5`m1}mmZtOgtn-hES9olnBL_70( z+U3QquS5cyd!OY9FSJ^(-YYP1N?E+-ZpKpqY|d7xuKyE0%B^6#x}&RUN739nRd!;r zE8-MvlOoS6#&T%XE>8QiUgJW)NYw;QHLhNTbIT5znEFq7^ukS;_rNy3t$%$oMZ-^A znDSWkxmwE}sk=4CdpL7=o435m{C{$r)60pUSXDh9oZGa;dD>4)p`Bsc-zqk$EAt;H zSm)l-I>EW`P_R;S!{0YE6{IBZ*zxoIUtYwPYI((^Pu1GYX#Gl$y^aDYzR7o%C09EB z(Yv)^+WYUD|C(%ldO7Fl^WgfkQSq1C6TGzRet%Hm`7q&<{fl3>HwqUmb$zz6L_*~ialh@Arym6X+RN~W^=*LcX{(tC8I{Um~^05T_=mmQi*sL^} zp6+RwCUkt}uJ2-R7#FW{kGPk1so{V5%rN`w?@nw#bnx+}FAhFhnG$b;t0VO%PCFO9 zBB&!z$IbDlQ*+pdZ>J3(Z(RAol-cKz#~igqznTSa)EB^HR&4@hk zqmFkrYm1SF((#wQt_;1adf8hxUvNxbDU+10+$b!{-zy~>GtWV0!#ZYR#VH@JtLc2L zE%MU*va?HFGW^?(XFHw-sl8sQ_xstE!`Zt&)Os1b^!>3cXF<7!Pm1gsteDkNm5o})WPXyZRAEY+Khpf`ka=zB4HeEA)jb*=M z+M%6qt_$DQ*d@HlJa+H){~pQO`a+Gf7Vk~z=wVp7N&n#E9n6Yu#w(8rlpo)mH1W?e zIk(lEx0gT7{=(q?Uytt!W1_&;hYY2+mOeRWaZ#@B&*MWL8(t-uKj_o;(vB?Qj+M^+ zuC-Lg^6<_Z<|i0>&Xs@S)YZ&i)%ewO@rL}?DEv$o^ktSv!R zHy_=4{V@IT{y^{JN}9QrBGEsMHLrrnV2?Pi%PjXHR1Eoh_M1{_G35_Vr>& zW|lj1_sKhq&HXkFYmN#etyy!(ea#;8|EFi{NmGlR@a~1g-qWi-c21pf_x%nZw}Q>@ z(i$ojA6PzJ^~Hq4&Y`=j&*U43gunAz{>Afmcwq0Xy9qIe+nSF?6yCnyzGY|J;uGs{ z94o8MV=FAJGfgV&jNNLsB`Z8@6-=2A&7bjh#t*@5nYWf56`PavoLjm3 z+Y;NC71d1akrH2)d&Q^hk!9iSJ9bRNL|(A)+_L$r=JkfheL^Sw-mSO>uFol{iF1~kecgiGJ>H%oDx=VZ#{-8iMZeaiuJvHq!lR{fs7`0Uc; z{oDA=7IYt6tz*;Ave?7ZI3^@>x9%2Ut6)=OD}@^O1L;ryxFqJXEKFkfz^5NL#X?H> z?Nw`=($BTF7u#ABQv|BdXxTnD%2AjVvh>KZjqhK+ySq+wqEbs#?~zi!#&a^BU%tQl z65-^j*?oCN!-sRrRRc4o6_!q1-pj>)!|1QjxsRsC=89(;LRfF=#a|EVo3)2w-IqL@ zYi9rd2}SJhy5aNmMSIJs-avNs&s{O=ta?AbiGSPL&$)HQA={_x68@KSeBE_DTHm&G z_q>an872ua-3!)d@!9P&Nw{>6$5zi{@)gbJ?l!5-eVhO9V^Fe)8m)ZXWO9NuC#GNQ~K{6Q$OU*`jvZO z#lou4YX_w{ywv1R() zDUbg==w{husdv=jZ*3t=9gR;r`~?+=a3$_b#|Db#U=D zmyBa(=N0Qc90e<#RgT_KXGFH*3tExx;#m-R=yRx4ao|tQ<5ShL=iy@i@1R zi{a@B4W%5#8~JTTL*_g_oOdaC&i)O&d5o_=yLV=<%oN?-_58~NozP$AH?MA* z&-TeLwVTiE!m`RGWwBN1vz{6&#%}EiaBkC zzAUmtj>$gEFvZKnWV453-fE8z5%ydM^%}?_V zU-U@*AJ%NT@#P5yrReh&M|K#;EMK$Wpf~HgvX6G+7bfvvcyoBJRN#%om8+L~8vj0f zS^Iq3Oq180@180Y&eD0BAsUy$y>5Nai$|hz`{$QF;z-wD8*JV0{cwW#(>msucsAWd z<=2ng^LukFH_&?BV;{M5ISm)K?^?Rn*K(Qj#-}ri|4e=C&$?%JU;n|0y3z4V4(^$I zye!Y5+~r2j+_u>j`B^xJS%a--6 ztGdeg?Z9oOIj^p2?FssB{z|*|Xw51uHJhGT>hGS*xayYo z^F6K-UyQ4*#JH{ZpR8WSo1Z(|SzLAQPA~mS`kYH1*!G=?Dy(8jnELGVj<1EbN8Z(# zy~|QIK6HWEW4rCG-;2r|U-eAh=59D^{&jwb+)YJBHTg>hH1d`SAd=#pu- z#@((6emkk2$3FAVPG~Jz7JYfyy?uvwA6!1aO5?M4uTs|*$FC=rEV6VCIyh&gVuy#v z?fzX30#~0zajeXdv8fGG)mb!IS~+#rTKkAiAG%Je7EGu(=XUOt#LrvbjI$&P{NH=> zJ#F8j;~yFE{Ew9Dzc|0N?FVh;SXrKmiHoYeEZJ#4eZpi3?pw7>9ZM^ja!T~PI;#5E zLVgPHCrZfu57$(c(&hfL{3~0Yu6!WBhDq$#_Z}j1)!qljpPSkpyUceTzt^0f?tcZp zh_4oV`Q&E7=l3PgLl+-P-Y#;_cm4dsi*9U-s`kEc?ZGG6oG(W?CVg}DXa03qGt=m% z)IHOlGr6B?I4_)P2sW6o`_qmIGUg9FMT30`1=r1vUnPE0tvsgV6hqnz4}E(_X^Rs7 zt>VJ3I~2MM>Izs}3?@AnYUa?@ledh0!nJMj+I*=$rQS0+HBxhxZ8dJnlBz)n#@~u zD)~Yg^ZU>HU*E7`c4j;A!zOWY-V9?_j=*l;8pX^7kMBHTa=y6a#{2uv9P1b--M0&W z;_y&(^{pGmi{^<2Hu1)>EGm8B-5QUs+ps#bZIy zi&Wb3Wx{(YnSYx#VgrzPQ+Hivhx z238hWf1Y^t?5bA*m!_MZi*KsPySpqUxN?o??>4D_%cr$6KX+={U9|c`08c#wCwEb$ zMfJ8kv3w=H^Lu);3TCf6yZuewzNQ%GW7W%+>{apqcU&b&utqwhx9)-}+pBoS<%{cD zxaToGT!+9)Q{O6p!Ueo0ADq=6==g-eVoLzJ}|LS@DlX?7S;u|UP3;COu zrrYZ49on(A@b2mmh2+LXC*12D8#(iH<2s7-S1q`_JmNM_$CszqzTN25Y)NjG8&FTYJ~43;*9*@No$sgV{UfXC_+14iT z-s7E$qjI6gp4+r^KQ50t7!u92CX>*kl zx7o*V{W-TgU`TIt6lD*rjA&t@)TJ9OixZ z_PN#Xcs;)ERFH7Eux@th^xRk10#DA^dDtbM^Gxkj&G@c8pZd7sG7_1h+YtVg4QktLn$f({hF??s zT}v08pJsK)XgAy{nEGJeahtH496ik$30K~v#~qqvAzYDf zH=ASew($J6wT(ybE}O7`Ne8dzg`J&XoiOR@ru%tuPUVMp9a|W-*(5<`!Mgk? z-AVUVx)iSQPn#z+vswAE{cMvjCx7zDFJ-*??)K!j0{h;7RQ($`@2Gy8g6=8{OJ2Vz z?o-`XUv!nS^0l>`vY1=R!rpay=ez7Tj58F|9Ut9&{w{6PJh84M2Gc9IxHV*Mh_>*B z`5)Px^=kFZpb6?8n_Iq~YdzMramAlxigArQJCyr{A#P)1oz5t6f|6nCzY|!T89PP2{0>@w5#-46`-Y$vfN>{AV9- z@%!1#yPEkLYOi})KUDo(*l5wQT;}4#)f>KM>(7)FeB`oVQsJ_>8r4yg->=>B_)mh- zG}F0zQvy3Koxk~OS8i-0S8KTAwHfXQEDB}%TJP_B7IjL3d zv+j$DKC#r^RW~pHsl(gJ>(^RYe$-6dH7hOun)^%R;6pl}cu%Zdu4v48@YYj>&o8gP zS-D}6T$*IqU1go$tHgd!nIo^2xBA6HKF!+Iro9o29=qR(2i9qDic3d44T`oq7s8gO z{UtYcjrHE8TG}34MHlm1FTZ_hC5Jp$LjGa>sn1`iTCr-KS?gRF&5Svu;R}y76hDO0l^XhsTO8V~dZ%F&pk)sy;39vG|y{ z`Nf9oHEbD6|7%D2eYndmpSAj3gV&{d*Dkzid?XX$aysDQsn8dv)HyR9Vqc%B`S81Y zNjT%WP5rAL$J>{)wl9^)NJ$g?fI-W z@w@kQHC}&UyuDNU#D>Xgj9n9qv;uZ@3BI21`0eRBX8o1_#j8&oXR%M*c;0T&#I5P? zXF4!GHaH)q;#qz99G9~9*_Fo%PhQ?G^R`v3XG<+hlPcG)CA=GtANrPKALTT;^K(`< zr)#gYcDmE=Gme)x+HTcVeP6LDo$tswPYaF*|L<4Mvw7XVvGm;P55^O2pXYmjBS=zy zlE0e2+6p$$!f#8Kzumgg^m51&wNs0{u6^}$`5~JX$eS@ruacBN_#j>k`|Sbb(axU9%HZ>c29GwIi*a$75Oe%<|56@BcP+O6JY7v9~R z!sq%@eRfq|+}o9sOE&Ba%{I=Mk@RG@cTS#+T=~WN-G1FXX35baJvSwYejCTHPENmNkGK4=6^|&H zr+n~r+ct+h`{;J-z-pP>n}sIMS@2}*@)!QUoYfacPZn>V*0Q`+%%H~6NA#@A$?7bN z6Ze&Kmlhno&g%Mo?$ivmq#4t9%FKRe%C^UCf=o!J^KOw1dynaA`KM~s@3i)mFUwf8 zbylWlr*LxW39+1WP6k`v$j?`47ARcG{(tJVgDl@`Y5>f+V%OnR-C?U-r4yjexF@VeW2Bi{NnYe9qK#g9pO|~{P*n9 zlzwTy(pZPBv*n(vhT1Csx#hLT|GRPMn#$)Lr+iiC_00Ma^P+Xa?CUMQ=O6SfUUgoU z=i;&6<&?v-88zugZ>R|^o#fn{{)VAgm@n<^s>DAt*KWA^F(f-w{+Qu& z-_H|&E=jg-sM$Q#{hZ;uw>#FoEA&i`Rk2<2)NC_r^qi| z?AcnW7~Oa7dOxOCzn#16-?yp>Pydwv;SQd7)1)A0#>uURUhi9Y(Ls*ktacuNOZ5e)^}c)hc}{1I=qkcK@mG(gr>!vUyM9w(rb;fu z<>L#J&dYO{^Arm$T|4zC+v=H;{R*pZh$cx7$s%vRkkD*~#&p!(th+*xrmE0X|aczNzo~cHhxT_P-r<$a(9%h!!Qa z4R2DMxPQ;)NYdOG_-v9&vuj$Gw4=t|#M}8h{Cn4$vs(Ec&+SR=HT@js z{grh)?#!)A-&ZaD;g%%qVW^U9qT`+1#QV|e*;+leHE%Z1h~gzxR* zwCVTe1msD-;k%g|@_bF%*J{P@V&5fvS11PgP3(K(6MTMRu4Ra@rt7;{*N4BNCExx0 zdTG&*o$6v-p#rMKQQVKV&HutT!y!uIn(C_KE!Gx)+3kOANOF4ry)NT!ig@r$rJ|`$ zH^MGiKHi=5=EA9CNndmMbD27RT{N~iC;4jT+-(Y3Gad4_+I@NNt+BFxzQkU>|3+Qy zO^5G){dV-i(cK1y+q|y)chD$`n<>(o|Mzgm#1lHdxjs}`^i3)#UBZ6j{pzdTqGh+= zy<^$3c*@lEIbP44a?`?1Y7^8rzb2`P6&vwC`-b=H7q4`E}mU((q^3 zu6--p+q_TowPB)(%x*om<5LgMIGS#|L;sxW!gh;hkJ9#yj9fc&8SVY{Y}@Z|Ci?KD z){lUFET^hoL|ri0Td4MRY0vw;(JcJs+~__R3rm@*tvq@+;-XjTIJ}pAKP_Dr)y}m)$wm)ypdAwd%o&p0}#bh85K|Wi9uG`Hy7DDSX+x z@@+w~yG($HMV?wx#pOklK41GHdFM@Hd+E=zP29)rqc(gzcggHT!Rl82FEurpXc`vhu5F~t++-@#^CFEH^*yBS#w;a8fr|Zh)Zo%aAoDm4GjD>-@l1V zpubL=bKjL8r!!yg%1ZiOvngPEFK^*e)wWYzr*6&OaJkuWzsjMe!-kUaw^tsn`FM7| z&l#nP8<97Dy^~wJapvWJshj3Hc!zE(I}qh0HgQY1WOePnTB%ptGBqy#`*3RK?h>_} zZ;nT1Scy4UJa)_v(&2eKe?G_6^!{T@WI~wcc$WF3^qfqJ3lY~$Q?FrHDbHf7H#v7# z$a~s`bB>2z)QDeeOPcrUb0hPr=lRQBQX($gHJz1hH|29q1FOiD*wuHo{mDu4KJY{4 z61Q>M*%y`XPQI(X62bc9;o+GJx5Up<4kthGIB_UIWvcwag8FkSSMk{dpZ@wQ?9$7l zv6oKGR1Mf6?`b4E)eo!H*;<5Q=) zNxJ-Am1-a7lbwCUVZ!9eYpgzml?CqbK4i3Lxyk2P^DC`qm)4)st0+1=qsvn5dBX{= zrRxQyUoDo1x zK5v$3@?MYF&F)|JaJ*tj-=UqhfNO7EQ)b%4C3>%#)8_d5s+>t)^{n&QVwW{HT4l~v z-bfGVd!KoNZ`lR|cF8AGzlyYLzZWw8dqb`Kck_>T%7s77jAhtEdEQ6)=@uV-9G?89 zqxSbY7J=XG2_;5rrf+|E>&d~3rzP{_eRsWYJ%4P2di{aUdal?KC7zTYsYVXF8^1i|<*z;&^mYC1Fm_*lgI|xOCh;0?-FrZw>$>ust&IwX zMsr)@%(Xr$+D|+9IYSw})PKZk5wNGC%#Tn#*R>Wd0?8Rvb1tn6$u;)n;w; z>85qu2eK3x7E0gR$&i@zWzWZ*c%t)Q9N->dT_(Wd#gxQ93InR~W3 zpFLN0-ySLZU}m{xc6hl9dto%w@9;MMg#`hV=2x!Y@cp=*ULBm&@V5A9ZGytjDy_a#ogVx#|D6PGtQ9iW zYPgldEVP;NxZ}jyg4@oIy^y!)7KZ9j&-jqN^U#dy}V(Ut}k=2 zUxsx*$85%XD}tvtCBJ)fMyDx%QN^n(JnN#Xn>GTFr;;^ZtkYKe2b~ zvy~4P2|vA>!a294etGwyvJFL>FYS|`yl}E_LUmYDZ-49e>@QD`=HK38@Y&|Vi}Y#I zf3>_4@6NB+`pji^?#0UkwuzHEjDml3-k%@wt^bhZwpnuoKdia1cFDo%Dg}?USA2dK zId4_5`+BRz3q7~)YS?|C@3Hgj`Fq(JYr6Mb>GuAq8hln}pS0&DmTc#A-ZwdJK8eoK ziIW%HkLsA~damVb_xibVUq1@ezvuX>wmo~x>M+*Ig?oOT{il__UP=3z=cXg`XQqGE zc3s?V65|$ea`GaF-61KO8hdm0GEd#(6IZp?`YKoQ%7qG9e1Cs^;r&0!ZO<8-DJ!L& z752~f3saoM`AX@;>b38duDKRuaQ3#RfEmm4rmJr<+n2V?5>$UKryANbY4_B)+^dUM zrdr?r%X~t{biYfsfOJL48-A1B7I&4B`{wS_x2@LZa$echIrU4*!&AjNFC3JuIVYyx zTWrOzvwvyWwF5s{BV^>eHqSO(y3FE?$nGr`EPG_<<|%NwI4kg7)Y|oaX<}^5^`!}y z1UD@Bv;Lgf{D%vVKVdrd^0IEmF|$wl!C{8Ge|M-~{5H$JUtH%woZD`dC9ijc%sJhV z$@HH8%GF@gq_$TwP79qqS(~FCt(_mZB`#mqal@Z1L(8UOrzDYox2)QJIB$&K-7dy; zRrBkWt4>p{Jp7v2?kyTCFmKXLjgw+gx8&wc5t6;D-EeJklb%yUfair5a$UyepK{o^ zz8QaNS{Z$GYM04k-rGLz=AZW`|LdF0`{v?2ab_hCnTB--w;e33{INy$+p6EeW;`)d zCg!Y;Wi!p&rw;g>C0}c(Q#C{`UH!aXod((rS_25^pWq-@T64 zJE2;4|JU2YjAH-RsptPvlfTDix1L2wwWpSAftCG<$pLAmPgEPle)M`2@pCJ>y!jbZ zI@`bP1k0+OAfFd3ww0M??=MYf*y5mipx`TMFgld{fgm zxnFjcJyckI_NMYT>F$vGrZW~jUi0{~r2cO{=g6mQKXjxl97A-DyMNr}wqa-Jl9T?G zJS9I~cFP=EZL!1AsxLGlZ{6L5%=f)V_T8zhe0+bp{G+US_wG+CV|qMms&s<2V`o`a z&Z9f-4%4%^%A3h^L}r>s_r=v_95b$Wq-mdgFQIv)cky(uKBIq}BHpi<`QCaQ zv$c19KJ}@$@|)Jps|E9yi9|3@NjVb#{Zi2Jbvvr6l2*0x6*PQ`o^s2p@_^gMABw@B zCJ0*9W;C`w)7YT>`sH)yJHK9VoqE4d_m65eZ^DF*WUk}W@4xz3GU4YbGtqxO1$*b_ zn{F0)yl}?DR*Ce>2Z~>>$*2q59d=Rq>^}C3m+cJXC$^poFY$T(k9+Dx>xpjL4bI=N zzVt4=HO{G9^y#AAd_87oE5cW)Mts`Z^fqcf|AX`TF2CX(ton{6sxCfr)#;Do^tEx9 zx9H0>aouJ4m*#7+yybSD?%IojJV%uIzi)4zb6jmn^}E^_<-IOT+!0OoYuO6j8>~T67NozTo#$RZ+cWv-qO~CA3x10{I=p=X7P$hng0zdLVl-|-JG=Q zLGx}&4!@`Jr@p_MlPMZ$)w%OePgcu!(M?Qe&-a(y4Gy^TG2qV}HODng=kq@Dh6moN80}vYYwN0$q-5}5wd8ZYnaa|NOpC6svXk|0T*rIvMY<`MEayH8k;!j3 z%uE(->|eG2xPzCo{EkDDKmF*O#JTA6d9N4hNp5#Nx_W}RBcTT{JruibqPj*7pV-CL=(ZS(wO%cKW_Z=**n}l148=404?XK?G1dN{X8pfE z`$VWhnS*+J`JvJ;8ZT^BS=BU`{LxsF5&3uai>K``pM>}I{Ct%e7_rqwu#R6hUuS-C z^z(DmF763iaZ+~=!_JJ-&+9c#*)uRnvj5^Snt4L=KF_xF4em@FUq6d}*kU~;IYafq zPfh;0hEiwGRz?XW$zC~Ls?ZsuKjVrddyuI><&hoJE>7Y;R+cku^|2Y-XMWiKRUV#oBe57njyR=SK-?$4sEGVn|AwOI=W=fle4p2 z%sH=Y(D{6@eqC1;huYy@zi)QlhLI2E2u&Bbx8Fj_p~=c(_m!M`Vhc2%o%u0w9=|E; znji0UzTQ}xoHliV-+6mGt7o5MCUr1gUOdlRX}$$>LJ?z)MZft$jq+^Yc>PDm%iN9{!aXxC05=on&FpJ9e6mH|KN?_jT^dU*gQN8 zmfhXzl=Nu4|{d3N)%sTZTlnI*=PCv_u)f3zEA&jY(dBdO@CLLT{7YMVRlZR3^*?_ z9$x6}mFXy!rMX0GS^C-;SuK}X7Rk%aE!jGkBRf;1`6`F*g9Uy)=k6O83~t6>QhG*Z7R#^7<9Z8O#S{9EzuH-oU~ne|WuttVTg; z=eN5r=O%nVBj5X8YU1Ms%rz5!`OTKHPsvKj`Fr2x_HVt*x5`d&R!b#puKg{=nD@Fw zBW~Ktp4cxQGnE4qEGK6$cep37z-<45n!-hE5Em7lV`|Lcm^mGz6S)y9R)*dD{* zzv+X`&WYKA+ZW!7oVxEvHJ`5cQp2KDLuH9vIERR|wES2?l z@iWHgJ7SB@WpU}pADpBhW}+w_dTWP)(S}~hG`GnPPes;hE5Bg)`Oump=Wu&#=?&Kg z55)&_)~Oxdopns!!Z~vd(&C(W>&>WtXeBWPxVP>+BIML^WdXO zKIcv;XS1)OLU!rTmzFrxn>~}ryvH%K_*PK`<1FPc+q*uKcl@fm&6{?y_k^r^_pdHy z4)at&asL`+4ZX)2e5>~zj=r$OrSLNQqJa4|v43}^nDgGPQ0l(p%KG@S|762o7n&ny zoobAfws7QCRb#o-Sv$G(Ugo^am9DJw1(Vn1u2G1)8F>D4->$ghWt%HGxHX+p%{tW8 zSIJDeb!>CjQ`WDaYbMCpTs(HhzNW#+yP6^R$PSMyEoyl$8vmH7m#((mqVBXR^tr!P z!kZqIdBTiKT~2h1XNVh?C~df`uJQAp*V}Bl+0R2Fl%yoe9No+c!@G^FUcIi_9Ja0_ zchx0^Q-U^)+r=;0uD7zYP&|BrH8{dTn`2I|#i7D4%Yv7^xyl#A7I5dy?SBXFKKt|~ zz3kM=Pdwc17uhxT>jhqNH#LlmIscrG|3%@tO4CHS6=9O4298mw3*+4myIoXRnl!7! zWxWt5b0>S|c~gh8ch4u;>OXcosQGHgsnF9CXM8-leFm@Z|H(?+fy!Nl7jM@)&Gztj zN%}7I+wI*e#&65?>&qv*S^fQghpqKu$d|dhR&DHFsbzHJSj8$|!Hh@D6MT#^Ce57B zwp~_yx6w?)t4{B~DD9Zc63$lBv?#Jy&F1fmh0|JhJ@k909p}1#`nG#>drqyGJ8$vC z9=_ZAD-RzqS@UP-(-+&mU1+`X!F_c?m;Kh#&6Ty6JKb$!TorabV{ET5y&!qz?yh$C z`C!F|c)Kc(kpC>&Q8pXYot)|;QvO6}>hZ_^)MdaGCS`tO_{tsfa9 zA0Osibjwujh?63Nw(fC@7V7}*9^K@~LkvE>tJM@(Y-eWfpWQiES>As|;Nd34J&T2X z6;lfqsZL#D$hINIx9HXOv*JZd3tBV}JzgDf`T24Cb;Y%p%F17!{l4VHs!4O^EZTO0 zyZBh}*|UuIn&MZzRoSRKH|kMD)xX^v)734$uG#4L!6~ON~K_N;FTJrkSh@ostJSC4Iz#8UiS-^!`1 z6*1uW<^5X!vSX&t^q}~udAfXMG6H-PZbo>9c6S_F&u(9|%*A6)c1oDvncrtw1njOB z>MO^vt`0f>)hhPxyknjv#b=imU%7E}zoM6;km1{lx;J&%TR5`ai}Egt9h%$8uRe9w zuRXj6JeUt|+jFFFZFG{yweQl?WS&O3W$j}QjBegnu`z(VeR3l+_X`ECbeUTk(-gH; zmgoic9g(Riy&hJ0&Tdyqh~1a+hdZ9KPiU=rD)l1cz1ms*!ic+DqdPr#1HZ?dcS)?{ z$uJi9)^$l@Im7w5u(C(KeY}5?7WCYCdR0&L&$4Wz`M<=1XMv&?MullA9% z4d3rpU^w_tF(~)eLBj*{LY(9#pD^#(V8l}MbKBM_g~vaiS?7D%t#OjGPfdQw=X3v8 zdITSu8TTYnXWCTxmguGL(`-`jEi?;?5nkKR_AKgHzFoDz>OaC|?V;;r689cB?B`W{ zv~k0a0LBe3=3Q&8`FCiy*e6r7pzdv(43DZfKb|z(Rr*wl@-ao-{=aoxkKZZ?7hUw( z`93zXLg%x$YNhDIuj`v`Jibul&bEV7c!k~L57Ud-R6O41d|9sKIDhe-h*INR=YW?6 ziIOIlWA8at&s$)nY&)rHZfR#=kyFK778%**McF&bRM-4DA=L2Z#r|3ArbaeCay`xJ z?c->g-}LCx*O;?g=Q{3a<=c3D-SbZ|x78PHtUFhyoMhthU}|cj;IBDHgq;@O`EqD| zS%xRuqkxq&kLFe=Ub~XhbM!=HINy=OO1oy~E$lwhka77Ux5>I2jkfWu&pGe0b1eG* z`s?p}$!ptAWP4BE?O4a)THdx^p>DL@RcOJ%*vHY9fMHny1x1T+6l2P-a z%QGfjj8V$rS)BC4*tXn2xoHin{e_;x(q|5d`zlSGsFgAI&pnn`PW%6+o(kQ@#=q=k zgopo!&{EHe{<0JOYEAw+oCPmLW-**I{1Scj1-s)aPw!}sbLHluUS^l3UY0J9HZbK= z`}eg|$hW)dm%Nvn!;@g)T4$pxf8TL=bYyj9eX0LqYB*(*^OR$YH9t+WZ4t4$cy7J# z9*2j*4cXr~ zXP)`S&#)^?_{M!p-RK`%Ju||-&VOGR%G|a+W}R(+!RMs4ydg_um@a?cKEbY`c1g}; z*)5sdo!aZ|H|}ko$~wp9#oi6qFYat(d_3LozIwx)e zmIjwky1nM*+}P4dA-hD5A9hOo6}qBauj`8C?0*KFlT5DMH?*Fr#jED<;$Pg3(v>Uu z8-#OT*B|LS?DJi-WSvXX!&_e^&ds<#A&`SJ_<-amz1hp=m0TC&b1Mk`F@K`X30|K? z4u(?$c)c8ivyy*LinWv5m3zS}$LZFYifjLO-mKj7-Al3HY;j(XfuG0jv%hCwpFP1k zFZ8dQ0&5kcar7>aDVz6p2rTbDp&Dg(S8hvL)@;*d`gfFSjo(fR4v>ER*J{t{+cEoI zhx_iE_cqEl+vduzGeUMeUmp~$^qmwXQrECAb9LK=BdzCt@ue)jvY2UN%PzUIXBJ$) z%TV<^d&&ig6)n4~&ui7b`@MwK=Z=%yOylFKuHQ}neRHe+RVmqY{!V;^$fksN=G|d( z`gcBAGkp!)r2R9*SYWk>bo~9@wjqySH)ouQzxlp4yNW&L==t5^1`%5mg2LTOFF2_= z)#!C~KVNX0H{sesX0Us zOtVoNA6$0-_~yUXWVS+FV#kYm zdsFQGlgwU z@mAL-u8vY!^`qa)LxweUDVx9Z{N;KfHZq@Gr)Y3(Zh4>O zS^2Y5G*v*rET`e|rhPhFr~bWnX+s=q&}Q!=A5LV&KKNU=d7}FXQ`@~4vJ4{UX@{ss zX-9Y+Kc#DM|D>3p66?`vO>(#M-frM=ymHr2byBUjH^WzDo^89-pKn-V(AoZJvrQjI zl-Bd)fU9Q$n5r)JC#rJ4n8C7V|HjuQ%U-14vH90+bmAGSfqrL{Z@{nmcB-$Mw7ULwp_bu-J4^A3Ei8LwQKLf{;<-E>D=-hpRC{S zyx_j@Ov!6s;?{0A0-6Sric|NY^ z`kLZ;W1V-L0<-yMpH=e=lhpdV|NhCfi5`5XXRkWNys&<N)EF?ts_9P8U3^=p2V#0HP07LKN(>pvRK&%ebT@-OJl=P9XsGWeynCi=_B99h19 zKHHC&1~s0-HK`LLHaf=_*?Do!p}!@LVwLQ$vN@udHLCd>mHw{+Q{12WqxA2E;eD0Y|Bl> zGjV4nWy0^YmzsU6cK8+ZCFkMg3oq;Dt>(x{64)!*ds+7OoL`?(EDpK3u@zo-J((UrO7OjZR_voRj|7j1s(9)|9HzEff=#=ACBvZ zR{Dv5b$|cwUW+;>*X)X09mb{erIseIYuMYDYu$RIuHokFO-j|?s_Uu}maaY8ysX-r z-_-rTzi7l-$#Awr>5muq3+1)cvo5?}vE!M`qHEX~}OsF?~xr`*_!S*+ajlUCLp(y?;i|-sO>RB*#EiN*2$ znw`^?k5A|O-KF!Mr%Ka!qiIS|c$nk_ukVW$5Ay%7EzbDhB-6pa`ENwj6VK$f=C}Le zSLm?jc~t)vFZiv`cJRTj8zS5jsy3$;+io?UsMYn=G~o!eXM;jcO;UO!q?`-{@^XKgP_-|3TnfAFflkmlV_Ea3?7yoN>xy#Rgp;Uuw zT8y-N^q16EGrrypKm5at-|}8|?@#?{53kxseKvGk&vAT;*ttDtyf3LATKKL%KWS66 z+ZAi}YrF3*E66Kyyj68%Qo70<$0wov^*zspof7_tEZc1@FK{m}FOp-+OTNF$teAvCRWG@Hb>cDf6 zT=~CbZmbEoqTs^tI8f+dRg-ykSY+1AS=-NLZ@&M#Aui8cxvbl;bN|$T`K%5Xdo38W zHbxce+~BQ~^jMKvew_QH-h2M-;ZuW8eSMkp^xD%ehGE6q7x+YbF60*TXnL11?QeIb z6hrZ+`umcdY(`6*cRt9}+WTzXvQ0IW6CT`p_rSFLY3)_@KOr$S(x+Jcir+rpk#k6P z$Ib;D(BGH&iH2ibz_My?Y@-aaY)?{#jbr+S{-gQB?m?+(d7IPPTE zk}+?A;;AQ`iU)-krtT1qQ4C7FyJm~y87}FS_JWG5FIO7{-m)m2+m>PS&O2M*y1tQj zQ@o7n@*90m;%fX{MVWrH^GeQ{Tpbg}@8^57I5TnE&lRT`-8UxKt(cYWuDY@@<)!<} ziA;L$x82X(cDQ_d+wxgK1-f|={zr^2{_a`cx^$2Jg>x1*vdtAeZ(1U>M7PA+KM!rY z^^^77>a^C^{xRR4`(1HUQYzN6Qu+FNkF?thj-Tzf!&kML-^*x;3376;fB&pm?iH_U^jhOZRLR;SS$6p02O@6Ct4bRUhZU?6xSYz?gLd=+X;^}#FH8+>#8APOfH<`cjO4$03-?qqam|yigFvI`wB6 z{eK*uP~7=vq0N$*_d$nQj|pbR2A7;rI$(Un;{PRW4vyz%cZmDfoO{0_yQlE%?m4#p z9{TSltW#upIHPn)sI^7+$2)hHO)Hz{c#1Vn4 zaqFCXpVzGY8`4nFFSTz~Y<7!_MajdTf0Z^ecGu_x+lO8Gv!U)y7UScuYtF?59G}Sj zq*z;1!v3B~U*)>lc^iZ7SC<7(mE4xdD0y3EKJN@3J2vi%ReZB_%oh8;JF)we_#@qG z3pa^=dB=7kM?3x4WRG}@OPh87m*l%F&a-m)yzO>pm}%5%O`*T9XHFV-wjKja%|lC<6+TbmKV*zm7C9|>{#x&u6E|y zEx-DBHo0ZgD=)ik>br2G%DKN6B2(D-u6MST>vPY1aO6s#PM3##S;B#3fx3;0);x6% zRY|Ij_uo>i{Nl$y6CalDXD>~7jlX2BJn?bX&Wue`hi>zE3F=*W(&`@|&Z6F#kalx! zn*Pq`ENmL93#Y8rjM?k+T|b^Jsibg4XU++^^Y7%X@}l;&P0+Y}%JW3f+s7~VY}A~- zit}84Rs77ke>z1{7CZ~eY^$AH8vCL4e(D4kzCM9$<^>d)RrjJl z{ctk*6m{ZD+L_8!o{yQkUYzw2oiAej{@XR-AAB6i-wJ$~_qT8rzKCyl_k6SGA)nn$ zUu3V(`kmj>#^dnbW1)Qhne;GCbFRf&d1sTm;&*(rJI0~fw)T{Tae~2o#s=C`Qg;pB)sZ@M(M{{G1)Nl8)%x3{oYmU!$q=6=29 z9#di|cgjCzjvWg-($}UQ=h`P{6tSfH;_i@O)p=8Q_qn$odN@bD;ZfDS9C> zsk}Yi{d2K!aZJaCxCu+RJ5{{ySwAlRx|(6<<_BN;btPt&>N9w<*c2q+U2r_KcH!h> z*~J`>?r&6f4t&|%dR+49{rk|sj6VH-)$+%k!)ve9l%EW) zdrqHmNmw2C)?l^d6xCB+AMH=sHQshyCmMFFUao9mffI5cFpZvai04= zOcO)jXfaN`zf*F9%e)72oa$=J54(TqSDyOw{uS}fGuAwKvHI)(M~7U+9><>J-|7^# z@l#-GX7K{e{Fp@<`(vKIbea0hlJ(o<3)l93o5#feE-ACedhvonfwcy+gF-JqxOw4W zzoqA#Mc?)WxG(NtRG*d6e#_mTe_4O?wNIL*S9i~wwUXu8|Krb&{8{jOTgbg;p6bR2 zTX=k1XR9Rrem!%)_JjCJ$8X2%^{=q3bK2i_$)Y+@--UP4o;Pv&Wmk=(ta~3W{4y$Kl>P`LA!PR>*(Jtao-kP%T>Ey=$$NI z{;Q`yqT8jTeU8O6o`!9kbGEU~GVhyeweW~ogT+acBQlekW2P1No}L?X;$CYA zRz{@msCb*Z=vevkpvgBqKh3-J;mh^+*UOG;RBV`*_V{w9+|QfQP5U?H1y3nh5%6Qn zwLkAZT-fwLbyxd$zt7eCdG;{(AKCas_x^TYo9+uInDiCjN*P<)PhFyx{%&Ta%{ES3 zGv)NIMpuzzeRdL)I&{80ow6vR`T*+`z5h|KgYP(h31;5UG|E@2dv|EPcN0z@uVGo~?z`-X;mkH$K}wf4-?^ z)@t6Ox$4UcdZ#kad4EDlz{!7RM>$u3;G6u%erYeeIOcp}3zh5IBgB;09((IX>9?>I zGk%HfIDOB&uBlzF(ue2W_v4EG`ekX;|8Hd1n054hQSz7Bm(;H(n1r2InsYkp@TrE7 z^}7Vl{p^}tSeJ3jNBbJfY~3AIy~0F?v%RJ@p4`B5S#-~|r|em`Rr6#u>dy4NvKN=#>VMh( zL|$GhqoCTmCv*N^ta&)8>&l8|{ z<^>149p;&Yf62Zq+-h>d=xCRtO@{ZH%+AXl)@-_Kzg;=-Y-;P(j|`R*Ub!v4ur6zA z$3vE9Eb9xuOEEurpGC`fZafj*9(QGH-z?RAt`00G zPFrt}bYn7b^7Csruzu$34T-OAW@vsYc({SPRrl(8Q-g=;zZJ`c4&1$~kfS4@o2Ye! z&u-7z_?N=W+DVNZmtr?(Fis8%If}hxd8|_Db7|x4N2jy^qgYai~XTeJNk=l}FdI z%HozRy^v-E+EW_0+Jd`_%L&Ov#sT zY;P95VzK_p;uvk-Ox>0De3%<=t2&;HezlXy_0zM;r)v4n{@TrVO3STG=a+6v?TEd2 zSgpgc!sq2j+1|w#C)i{wkFM-Fx9R(~|NNYX!s?XtZ+G_gI4wI9$KO8h(~|0iLGRja z9YXdR7)#j7Y}fg2{?wk@nWt?^Enp4*4Bh&8%N~UCc zyZDP+J=vq&)a-cD%5_C_$uyqAH_zO1W?tI#p=OQD=ML$&I*NN;9`GznYV>{c-o=6a z`OdlJi>0ogSpL24isRAh#pyGavA^ueZDYw2v}9#`t(D~8e|X8|3(CO;pB%+B$}YXt zZM^2aX{}uBA$FTBampN@mTXG987JI*GB$1X&jX!rcW$1uWOnbp3B?k(4hRZOSC?)U zOj*5k&ePT}LNipaEU0^v{Aq7X7Guu!v%hjpg4no^eNWr!$a3u7ie;j^l%-9B9g`O@ zI(@M;=v>=e{4ew9hg84Jk1O=&$wYVS1l-gS4xT!LW%uWLyPvKR9~kl&8fUJVq4-VN zo%!yUVE+9-jtDQEevnIx<44J+Ugg3CDk*b1)m}WV_CCNTQ)VM1m7hHCLvPQ_+iGzR zY+Mn?H=Vh#N@jZ6L|yr3TX)JI+r3*i_|{w==9B9#buE2lz_;St#!m4ryB$f)Q^Xh! zJ^yxU$Iq4D_J>+BoeR8lLE+r_i@hcD95-1{&FRXX@m$NS&ic^(lD|vXe}3VrTKkAO zb$3E{?YYvc8>~yt-nX{8qf)Hlr_uX;9m~p9rhb>7@9Dkd=@`eRY<;r!^387{QTE$J z`Q}V^3U>K)VB1Ws={>nZymKcl?2FRi_6iA>%l6lp@UiIXsk0_IQGfOr|7&h}Wmorm zUBD71tJl?eY*{OKELa<5RGwA1bjBY)tq^CVxX*dF@7D{l1=_*P>`}`r%;&NTKDg6n z<#6`V)Sqe=T$zoBi}~mLyHxzTyR|LE%|Ew|o8yx-H|ILDG~tdvS8Toa^nAY=X7NjO zjlqu>T8C5{7XSJ4RQEie)t~cx$4={oaEZL!*YhLG{MS*Xjwv_!vSvPvo7n!Uee=&( zypuBYW*n}zo~3eWsrAX&pjY9icJ(f4KEz{Fc`T>*;F{LQN{&pCKdm-u2sWKn@B3}{ z=(xLwzVg>i_r4$aS#bBv+!bY?TYDTbBby%n^=)5tNTFmx_d>J0U5u75&wSls+W2v^ z+yma5W;(hLV+0;A>+^G&Sy=U|geUC8w(3?2 zH*;#vf85uvGRd-9s7+K#wz7OK!|nsGW(8UN+IKu9@odnHyc%|!t({ELwHK-;`SU2* zK4EcrCH9TyWRHach>ip7_Q%y&3$U6z0K&s)pc{lOiRyso@h(TU3vlafuYdMuOo)Jz7Vc4mo7M1^Dj_sno_g5Gg9B^(B zvpP_gq&G{GdopkNxsH$PRSxh>ji`(H&A_*OZIQ^w9C-^?&QG)J9t)&Nn>@DLzk+?u z(N!yZpSS1+e>01O$WMUh0obLB+YjEwOw#x z;}&5~akh*XdsLZ=8{SD@H9V{>*mvuv!HZ`%5@pq&7%w~Z;IWtdOaG0h%l6lv7HK*d zW5K9iWaQPD_2`Vyp;@jUa(}OV_oK*j**5!IB`@|}@!aw@qg1GQ>KhHO={GpOgrDfj z+3Dw;qW8Q;Oy{=ZV+oPK3Abjj+@w)0We#W%-%Y@7wR)*%dZrHd><8+=Hd+kex z3)S^s=l?D&U7K^=JhDk6tRhn+>Fipc!^=Xrt0P$@kEe26xj8e(bJoG1406_MZ&zKD z&UtH^a{S}Vu#*kpvccR|X6aV5C$!|I^tM*Hrh*Gris%?$;rdLnw zs6CQpxN@ccQX@US<?^lzO;({|*nWj<9;YAkMcvd+X@2|o`c|~Bplju# zKb%v=WlL|8AW2ALjYac>d)Bqh7Ne1B~1JFo9s?sNKQe$BFMn!z=R=Ro1|=3beG zlPWK6u&NZ@4PJM9%FfsA_nX?&PApht()-E0!^u)MNy#kT-6JVg`0az+mTPu)M>t=f zRPS-%x!a=VPlukZUUcp5jYNIl?4M8C#LivT{y)W$S@CI~!Pg3riThtavh;VJ6FW^r z|E0YdZ^dMeMpN!u_FFUe%fDF8XLC}jYuD%PvV1?YXY0ykUwXFkq8wafNH(U&H>$K?-StlU|}#PcEK=Dpp^{@l;& z5&5`us*>Er!pqJpJLm5cQJe5&n|)N;*}|V$u5UGpd@Wa4iB|8Ns3BaVyyx0uOV8u` zxK$2qn0aW8@Q2H1-jsN=PMz{NLuFTo>57%t?Th6dcK<%){k89xPl(>C{=)n_?Ptrj z=PhVIy6|AI>_Q0>J@fSq98(v35!tQL+AHF}`p2b?NrEOU8Vlqfoi~2x|A5zF7w*{go3>L`a8Z2*_BPn z0Z*Q`xv=e9Ik#7TX8794w_dD}W;*fgZoU7(M6aqPwY&GIISST2EmN4X!D``_nPGBo zzGq7sBp-P^amnrjQp;@TMLzMpu(81*{FbZ5!}oDqMjr(JH8u0e@kKR8Chb{mGwI1B z!I?ZOf9;94p0SW^;?dvhFJIW(n^LuI>h}YO?^YFs>t9%?-|OQVQf@S#CE?+%Y=+aP zAFKa)|2D78Y=xr3?+~3ktar8i)XgdnJQ8?3ufuY^{3@euHZPcB_A{w{Ryn&oQ-{0q zL|N*zzh8cM-0(axD=%zqS?{xw#~s(c9g+8D-<+%0yY;Pd#=Cv_(vIKuWd}WUx90mF z?3nwM;o3Fz*6HH=F65k++S1Cx*;*l1zA+=wZI+x*cTQ7>?l$gtcHb-0zZ42QGU7d4 zY1?KTY%1h0aiw?xY*^<4!r%xZbw5yUUX7@+KlCIbHHGeDn{1ZdgjtrhNps9^c>B`#)rM8a zFaIt7$93(>zx0(t3_igQOCMzi9)05*E4N>Ba_{#ohK~;=3FR=EmAMo>yJ}+X-!Ogp zDt#rU>S=E7+4I91j@(kJQfOE#)7hQ$bM+|;C(YYC8MUszl!%F~{>e1IF6&3`T_4FF z{WaIu7yng#cvZ_??djKz+pd4;t^OO?lWZP;^OozAh+hkMUN3oGP+0zdisRAO(OP$o zn{|ono2oySI3?S>Y~@ke=c0wuzRrrXoLii&_9~o8i0Zj|{9w6GUOZ>=#1hM0?as%h z8hqvXtMcQ|i{@{MTYO{YpJG$zUoBkuZrN4=?Hkh@IN$2rJ+9R4y}x4bwvCB-llrHm zF5hNrUZFCxQB&%}_PFm`gu`M3RQ~s!)LGbB!DqAg;P)2UGq)RmzIgB?j88vl+hj(` zO&iagQa-%oiLm8YR=3?&8@yw6C;XlxB!A^|oY=2Dk(o=|`OX>qTc28Zd*Q6Z`yzPH z3vI}H;%#dXl>-ekG>==6%Ke9sn|oOrkE^QDPfr)U{EO;D5CwO)F{ z7IyUt#(8IA(%VYyn*Luo%QE%xIls@PJD=`O_{V;%!`bJRNy*2|+@`}$YUODyH>}mR zrtb7knCz$%Jfrv3JT}MO=V#@H?PzVDyo5b|<xM`-gzQ5O~_(YoauH_bmkqq_W=ty!ly&%ueyyKQ$!3U=6q zO?52V@o3+%>fbr@3V(hRUZ4JacjC@TnX|0#9q@@wN;R1CGoM*}-DJLWW1g?-<==EX z48K}rxy{l_dU{yn<3m5|?*(zoR^`bkIo3^Sx$m)RS?A&YvZtZOXM-=^y8d>}Z@G8; zvv#zo$HX(QcX_?}t$5>}rg<)Z-1+JQ6>Q3`JxmSeU;6i@)ywh)RpL9iWS)z1m>LA^ z-YO_tEL|z1YEl37O}2kTSo-lN+8Xk;iMQVr1#GP|nYez+rr5U2-WLx`-zvF4#}(STTsHGJWH;_RvSI1GrwbK6FRgW)@R{Yu`7G7-7A;>Ue)g_kcXSTFdz!WD zv!>0Ag?|_{Y;roxFK{^Joay)cC*+{>(TUB#wM))^e)Nvs+lyH)G=#sNzs~vVeg)&5 z`?{Xih%8F_{yB1{epGZ<$A5>jze|-)@4S$g`WR%ci8eEQ^OXi>KH z_!;9~(ZcJ_b&Ee(L&37@b=!y7^%FUw?|*y|P`rEA&coSztlmg_a=4#yvzV;Ms!_?n z$69l{(`n=ME3cESoo6jjPzcKwnE$^Zt=bBkeAh{D$ewF&FY zp9%DM{Hga2X1h0U;wPI!Zt-r>?^0XcHZpU`TTd}Q{4Ztj#7?2Hng`&#B{Rfuhny;@gwIIsUp znFdL_Im^4)+baM5OTJ&)uhO&Vynxw}Et`)C^!9&vBkw-1R)+J*f*UNF9miYNS5IA9 z74pK5@pNe;bN4sqw|3qo?my1f+5Hj9%UsE_vAAo+)N0o~)=SRKlw78N^o7vgN1AN6 zTRl=H&)IDm_9CS;aRuKS^_|^`oUi}qoqAFHL3+!B^PNW1E_J@#batEAhh@UoVj{|X zXR*oN`2ML<*n+}&6qq<&Ig%V_1kLVL83zMdapYq{*)74Tz_w&snNUVFDJ`bw8x8vuD$Lauk>Y~ zrCiPJ%h%7RmE5$ER^A@+jBD*LJvMJIkLr$-doMmYHuZYWG+D=g?bDRSRhTA;8E$za zD*kf%HXdh|NbipOCnYmA1cS9tG*!w>v^(MJ(QxLPaL`H4D~!F)dapNZ=9Eg<h0$AAEtnwYq@nWdXnl8nK}_pk z5BtqZLY-BT46g)#e~~q6IoKty%XZQ{($}ooU%uaOrdE#1^cr^d&EM8@ThF`9P_H5xu9kDAe&zWaFomX0|KfB{)U_jW^^<^i{df)DxBorYbRle)l!OOk&FLJL> z`d(w!&C{wP7X0?X?YJL$%Wf-vxb#@y?X@*#w-YU|AMmN!IsfaVf<-agyX!CdEV%PO z+Q_iHih(6KSK)H-<{Y1-b`#m-X7oD`NWn|l;pspsrKPhfYt%btmdn@@D zy;WG+QncPN*yxrRlXS}>cfNk3(z_RLcec3MFS+_O;>!MzYQC&1Ngp=-UihQeqHe?P zD;p-SeVMCrNx9`qUS>Rh+l8uI>Vl<@Ep2~>I6d=S`0#1Wnp-PkgytS+eO|SuIXv*A zp_8hn|Nl+u=IyWd-d)ywQenySeeA!kw5cAdH!rBWQOxn=F4MY%LwA0A1|5I+wmo;v zPT{RLw9cEZO%j{NR2$^~+_|kiOH}A7}B$ z9@^pm-{oa)(2mnjdR4yt2wb?zc*^HmnY-aS3oU1tZT%ZprW=3!yZ8PhN7MGiTRCP$ zu^)`l`V?UGSzph){j-7ci<1^*-S@RC*Nb2K!*5!4=ulfzXw_HYS)U|czCZVSma9Ii z{FSWYZ5ftkOV-r<39awgU&{I^@anlI0v;_4l}mngNlNaX`02s9<#Hk4^9(#%rd(%v zC|FqC@y2_nmH5{fi+5=Op4{c%4hd;1?rXI8^}E<8zV7d>=xTkryD}3t3!GBj?z}|R zFh+mvf1x99HD~R6vN2Dh`06tgcctI&#GkS~=GQ1+Z1jFnOH-Wslcr`~$Mv^`Gj4y- zPF>VFW#*E@-#flUta!O$ZMwlhuUCS_3nsm@dCXM8^Gnj~(y7|W6{~kdJ=(Xhs>AZf z>;Dh_yj(qZ#wC8MAAP&qL|b1z(7Us4jo4bp#>HE|>}LO+?ooj_T z>L<@l@cY|T@^n z#yZc;o@tC`8+2nbzxbxU+v8gqaNxV)JyCgOt&E!w)<#X-f4OHtn8-(wb6@$_`L6rC z{?_H_;JKk{OY(MWE&P4HnZ4Nc1pm|Pg^&IfGS(c5R&O*9z36l?;?>7^7su_oyS`N2 zoYCO5qE+ttzWgYo^!N9VR<1svHTRZ9T+rDsIr--|#{E5-`tPB{uZFykhZB?ZXEsEt zJhr*IvGdzApQqc|dGd}v$+BFtn4fuF3uj&6@jo|?_w7_TqT<>)_F@m4 zq5sz@yGsJ9?X2EN)pH&Zkx_9KO_^YJ>4Di3ldGSt?bf^5b)REe`Dt19(6gWbY& zXB!8$Ts`pA^UtIO`)*2$lr|P^zvz`6|67DrrF#8R6X!E7!VftWtTrlabV(?D)Kj(E zWl{LfjiM8z*Kb&U|J8bn=T+K0I|CoOgfF_@`asYAPLHeV^t`;e$#bqv5;9a#K2+Kz zyX4}UlzrQD4CE)S_7##mo;3SmQ_RFke^pFYZkZ&{`6fhQ@pj!nsobT9w{Vxr#>tAF z{gGx@Z79@pclM0EPv5pH$ZjdTCOh@XmKjcWBlf>#+<5fhca0T{SA1_i%dT6!`CG=F z{AFL0b{s3J{CZ@=ZN8RHlQy-=+-$#X50ZC?7f#7Mv3~Mq6<#}kV>AtL>)NY2mCr0Q@A+T(W1Olg2DiRG?1(?S+H|d9yFTNV z!mz}vX63))N|wevSi}4K=bD+K53WRotZO*`<+SAndH4GTwW5-4%`4)*u^jS#X>ZZY zv25q^6S5wgJh#p`*KGSYrq_FIu#r;L=H+*p7G^w}Ii+xyMzFeZ?AD_0b6Y;q_;Z1%G+pv0TS#x`XTeZ=N!}h^bgv8S(Q)FGonN_1){4wblQl^Ef~IcZGcs z>~A|Q-+XEloBxtV+5Kx{F1R8>GY((2?aolU=-Yh|~1W*+nUk!hxe5eln#7Ve79;2f76HF$KIcQ2Kk<{;b8nb z;f1K#!rc3&k!j4H6ML)P9ANoywfFjy+wEU2e^%hX_DT82jWwm8!}Qj~WwuMzB^l`W#>Iy zq19P^I;bL&jcd34!CUi}eGq9e_!zNX{bR5~M7>ixu;wICeMuwidR|G4lOv`8Jlk9^Y#Ph zT!zcXlX!Mk`aC@}n|ZP`>z+J0{RI0xaPdsh0} zRK7efT{eNeWi?~f#2?qY?#t}n0<|T)MKMg zXuVQAur$5rWm52i-_0}3l=u=$0>V=NO>6Ph-zRZR`&jPdADhEPg?2irO!_rvcJiCN zS*xbcU&y@kOKluu@UF6=j|kE zp9x>2jcv53VjoPAB_l29a-%hpq&&v99nxyA<75=&3 zZ_LUHtYl19yIpzXe7sLdpoT!vu_W?Fc${>T-4KE?=(a3F?S=vpWAC!y^SAHp>0hY6urYJ?FZownubsDVl5=|g;Y;G_ z1rpDT7+>0R*a$w)4`+ThUvlcrkH6Gd+Sm3N)VIHx8x}s3lkw!2KSvWKdEd5t7PStI zUw187*5gB)ipYWu&-oh{)*md{`SYTO{r{zEez!Fh^B4SWxaT6%_-kKK$V|^nn->9F zzJ2l$>W%CYnGyYW`SZg^p0DLKH2X3CfMtxdYHPz9BmU1K0ym?Qem1->F}W3)LMA^%Jmt zGJD63OR+pZ6&gesA6ehLc1!=&tCiYs6UEl<3TB_25kIGwjlt&fy{{ac_K#1*9x19W z@7V`!C0~d$X>L{PpnTvP0*7mKtoz@LB51y(TE4D^ZBcaS>aL~}$K1CWT>l!Ra5Hf0*{L$IQ~TC^*e55y_G9QQG3(or z{Zf-JiOadp^AmlMka9)Ud)~{{OjU2M-``U4JmY%#VXMs{cdEZRR4kd)YZb+PX{o=)ok4ty;r)+l+jyR+eZoH>pZB&A9 z+}C!UD3O@S9ZKa6D}LJ~ZPnWRb7zryS~dYB^l>miM?%*RErg=*U5VFI`UB9 zrf|F1YxgUr?X8{rjd^-m@XxZWgBnv6)8@U{IKln*Jb~#?AKIR{-*xoy_EL@Xw{yQd z{TuX7h57fwjoaoaocuDsR=G_mhqWZ`&$}KM7ICh4!qh4#sR`?5M* zUW=tFt@?5HW3ajGR<LHozPGiSX#Qmj|0VV|pCXCl|L^S|iIwfmYbMWx(nTj^B5 zyZf;4tfDu@1=X3Cba|YZidl|LV-=a8X0n58U-+L3_51=gTjo!THwp-wY+X`pnzT1% zlFJ*P1P!juH%c{@d|%CSL}NMgs_EuW-x}|7F_ZBZ{@>*|&oOhk*TkHk%X_ypHoHup z_1;oPNH$aCZ}B^G_lYfEj{nYZYWthIt|VpeE8pev4GHUNTbdVM>tf#J*ji*zWZHCpXlcINKNqn6!b$FE9l;r%XH#BpP$W?QS!o#%lOi!L8*ax^UI@{xA- zN%_<5TVtlM^YkSBw?8CJKC-`$RlDIJU%ReMB6->*`96x{8IAW1}LjS_j!n8H2 z0mUw@zfP`O+44|-(VI=rb0Xi(JYx9bZOWw>UE98%``;eF;po2q;q|?*@1|sirKz3u zh}f*4m?~pC?Q44XhO)-}KEpS*lk%Mow8~{}n|kEI!n&$+x17R#ob-K1g zwmj>X{Zlm)ehKbAg`Vw;)84*r(hfbSHo;nP!b$gO?H+c@9R>aTA1c)rKie?9ZKK`n zm=}hxn$?p1x0D&yPo3?gEf%k8zH?`?8SfIGL(4f?wQ7IGJus7r^}fP$D6*j< zroXQ#_13$v`a>`7wG@PW6`M7k_w6_CjO|wwSzcT-R1NlDb1J;0eZw*9ui-y@H5YGa zH@n|Zvq8e`(slD&7iYRBE$66Imo^RC&Gk7V@K4y1V%|Kpz26r{1}<(c0NyXPK%%CapHru{-rCc zPwut;dgkw+E8nlBcNJfobf$K}$9eXP1f<^hC@NmE_$2=%<>1O?s_rp0)@$!Po$xv0 zhBotA9rwGJURh3>!aAw-;0|5AicZE|54N1|nz(!KP7Bt1ZagmzFJkgyN!Yd_`pc|; zOT-vl=4pRW6OL*9%+#>TQ-RlJ&00Z6zMuzNJLi6KD~?wbIytSoVwZ{cth$$FC6dLP zUvEf}TqS#VCCA!j`}ndNmV znHn?vD+OIQ<_g<)PTae@j%mr#&HV1&FEnFwyWSTD-qD!;zCTfCuGx=$*}P6x!YfS+ zR;*(DZ*>3j*MR(@`IQsdKJIj|DBQO2+Pb;xqb!+fH@n+Qi_DX}ZE|Z>(A|l(q2<}# zlOD2uX5YWvz)q&)(C&kg&g&|+xCx#*cB$#{ZWDJ~MU@*{j@|mSI!NVfqoK52(dw&r zo(P}QJh&#ta;w{UzTfY;KJzqAJX%}f8qbs5v2dH@MPIkli#@Mr8m4W1wkCcB(;d#^ zxm>r~@>s&o+}XM2RdD9aN%{w;Y=34|HNR_vUG9>J1`Gv9YMfGKGJnk5c-!Orl+%Bh zzU74Xwq#qE$(Mh+d-2+Q-t4!*`hM?s%b2GuUbJo9<3+mrRR3NVnKR|Y1M?$_ev@Z4 z-@7nz{?@HU$*S+#r5Cnm?VKTdeWlBOg@R_gz%*IOj_rw_DuxqZ+{roc=OEY3=qBrK zUX!_5N&o6^M0>OpPX79LZ`Zx84>nxtdjC87+_Jj2SI55+@|Mb7~<@5NG zuT(pmt$P?7jB#wYA6_*-V?vpBJuRv`TIGIS}a+=p3pNFRa4#0 zb8vcX+VZtO!uRs>^37G;|6;jsvPPfFhQ4Q4B4+LCSWzlmtsoHn=!y74hD9Q;TFR`; z=ZNhs{^x(&zhR#G+~3w3QZ`Ex6hD<8S8-6D!*xP$lAZ1w=5IpFi*urm#e9!pwEA7! z@cZMY{&P=jeVxO1u3D9MNVu2d+&*vr%Lzx79p>*#TXC$j?#$ti+yA65KG(12c{V%x zum;QO{$$@BcS3i}m|(ZW>~WG>^8{PHme+NL|4%8-SdcFCX)=qxmE)2dpZe(Fs{k`Z?Am)3mV11_ax8zM%R`SkmdG`FVU5tYF`MEDzSR^vIQq<;K zG>M%I-!hH&9FzEet!aBN?7en%lkV5j#DZy>qW@C2{N9$j*eE~oax|aXA@*Red-~bs zufun__qCreNtzV9k#(l@U)kwO9@l?7KCs7oH3OqU!bPuSR{L3Zj;@as{{Kk$`Qr=g zxwubOd=%*v=3h`6k*9G)_i5$S$D5Mhe{B2U^H1V*_??qGdgffrTC6yI-Bi~JGdtG3 zw#hy^O}i_@C7_~mx#S(g34+WodX2m}x%8uT*K!?cWAG}DGf6qprd*@C{WZh-&d!hn z&3oM$?4Ph^KNk5?xnQGVn2xyYjr}V(oI7$@X4%9_=_ARKe*$%kZYn4E>~No)E;G^h zUSFq$aM08OIq&;*9MTKzcC1$L{3LLCv%l9?TW=9oQ-2@1NgMx)|Jxz>=JltbDU0$B z8qd`^Wa|^MDD9V)ql4n+eeaY`=w_HlWK`@vEG8f2`mwjNHN!mTCAa&g-(QYRU^`gx zKJD1E#QRHQR$8p<6`JE4vslqhc}c?cH46`i3v=C%uYDGA@q750Tbt^7{^ZPI%zHbn zV@bw*{UqV4qf7g>udY4t#9CYCN9{VJDi5aNb+`AnUZtNbsBGAMTqM!t3|XDtyY}Cti?I zAskfy)+Olhq=|Z4BSW8UKh|}6-lya2zdBO%&RNVC?(FmLe80j%`@+Qa{eNy2SeW1X^vAiCSGl%;>%Mo~!A-d*e{3+@r#m~<(`@dJGO#dnh{F~cc5qd_&Z0Zcp!1GtyR+joG z^z{n5RCg{t+5RN+dG}9=m0(H>2ILvbpW2x5@p5>>6j)qO`?tX!KlX zIDKW0)*IdPrM=->HG^xv-J4aueoVnr)k3Js*^IW-_KgJ zWU|S^Q^{(Huls}U@K!hMtXyL!+oHA2YT4FE0bvDm>x+)Jzskh=eOz!~WoH?Rlzoa6fQ-{f;t{;?xz=8F%lYOlV=6ET1C z{Wq5X933>&JDuHG`6d4Ejoo_0u3@f@U+7*hr!!?MRGX_dJlgnd!!Nft?qzR&75+RN zd~WYg%l!8zZ=AQAxhB;~`1(DsjlUQqLyy~EUmCX2YDphs+n4W(tk--cw{jPUd1|)% z*&dLZoOA6D>wjK%*2{Y?%v|_ZbS0Bznh9IB)#`7lUv^JkvHxgfz^^qImreY#n~ha| zqgHUrgEJ?+LS@()7Beg`Imp($)b$i|=GCW8w=2Kz5h+-zTP>eo$G3E2Uz*31-xEad zU9I}7{%>(z{)E4`?E;OfR^8aQnq?o%`-`+yRBQ!pF=@k13qy<~Q7H zB;dEfmU;EJ<@x>RBGlPz9PFq6lPRrMyuh}AQNI64(!CpnQ=1?6|2%$|e{Vt=`>Cm3 z9}K=oiae3|e)*MI>+0ar9@b43yPP)%al5T+I;c4RuI#RL7atZ?N@WXK)%zJ*Jgm_C z|2?tcj8KS`luEGix-$}cIMU6|nH6xqRMl*EcUGztW=k+S($1?>7@UxGoEOY&n&t&ahzJrl(KO97+0;Q@(bs(9Tl6 zv-3Ds7h0=yUnt=!jn3}iUH9%+Z{lXI4pV2=+gA^~Xxs_RU_3Tze0hOWC9#?(4cv+52Z_=R^l=k23Onv3bUY zhP3QLu0LU~9ZQ(D>^<6>_JZ#f^R|Y)PlKa3T-}qEJxOVo$A_yN{?l(KSs#flwq9@Q zWu-f%$+lcjhk34~ly{$N(g)5IsbAXnMK9S#?9ft3y!|Xzf5M5m>I-g0pKl6eIs8#! zWu#DpQLeiCZs^=q9z7=NUQ6dCbKUAZ{<64wQ|#;g-G1{IU%f19 zxz+3-kKLXih1r*^Izz>laL@B^5bJRKnte&KI__0yk|CRooZxC^KHtN!eU{cRq@}xDRdpzb~xDoBq<~% z@_p*88CRq=rRIKjT*73&(Zpx|Y1_k%vn9{>_pPw2-!IUqcMz?g*t<)W?Z>!t_->|5ivP@TC&^Ae;;c56~6zqr|_e;6p5sXs~Tp!o^GMl z+q>r+gPzjjv&Fyj?e6Wo_Wai8nDY1%3sLg~Bd*k{$SZy=1z`+Q^E$h0Hvaee{MGbI z=A|qjFJ~dn$|aAFXu2M|=v=7gUH3racOof0fReu-1`c~Mw@_$m%(_v(*M9j9LXoAmWST)S5rn@?KcOQFF?Boy*QkeJ}rI+pXt(dn&T`&-ZnVUs%s+@;WYHTkJXa zWc&BD^78Fv@i*5*3GzO%skDB+R5PxB*9ZBUpk+7yKJt;hWaX&dIsaSegX!&SitKyu zGksHe+CR1U>_oQ*>6%_K?`(avb>ic-tPYs&xZ2O6vNK6ZzG=PBu+FtV|k znA2k>)H$Jjp5xTx1~30lyp6go}CYm^0wZeYosVPEqsF-C;!8D zh5zpE*}kDZS5bV2#_FFhzI?C^xKzD#-jnJF$4;-y^fO2XMcy#s4 zfg0bCIZL=Q^}grJdtIL2mL~p3)@8%w2{R8Ee*e*v_qS5rVCng?=jB0$B6SaB+O!=1 z@!A|%x+Q7qj7Q6Mz24s}|2WGoW9Ax$sIs>YUI|UGm?|58qSJ~|ka^;~6RZE;DXUp- z`6TLdxU%281?G}|XI=!pNY^Nvu6gd3oqV-&?34;wxwj5nm0JTm)YES*a*>fUNH~5l z(n0u`+^cUgH_y+umbmJ{J$)a4@D)LceJ%$U3tlihw6g1|&(*UBo%v<2JPBTuk-u!q z7R@LzwG|-(s6C3Tc56lc#zs7Or!kklU_sHn#8>mfF`MdT@ zPR!ngQorl-3nt#H-?VevRrh6^J)3lIPi9Rh@>2<5DR}ivLLj}$b#Zo;xX}jtwZ$vv zd#pHGRxt5*(8p(t5BEy_WIXn)yYY#6xQ*}MT@#s2WlZL%DV~aGIDK8naE9Jli~5Pi z%=~-*-g!08h*_;Id;b5rbt}5?y;J#W^{*ub4 z|5u$T@56z*I5i2K*A zkhJE@iDkz>lwSW6w0*~q+gthUW-o1hzWaRhsW-o#ImS9)%v+@>75H>>8@tDv9oOg1 z_c>;q9;tf1`p}6bLaDns`&!pCWZZm}yrBQ@{(}PY3DcZcX{4C{?T@fj^1HG5^BYUK za}OKOi$!Iq`@{t96y6dzt*`#w*6SZ7vQ(HqUe|UwJ^Ao2b^jA5T=qAAofOGfUAAy< z=BJZ~mVdss_xYs{A@@G1rpB{4{g7SB=G+vu?pvH&!S6e^+qP#)hX`%`n_Hv2?9Zx| zHQP(p_y|<-Zuq)(@3cZiT9s9)~&y3SL^qnfmLXZja%|!nx}|OaBoTk8inb z8&jUR^{dS?{}kO|*|SDV^zUSrzv#W`cTDrxPTLd8t9uO(ZZG@Mb?LaA#z{W&Pc@A9 zZ>7BvSnt#FOyN<{(JJrtZ;X!1rS;tFVl90Y{p)($hYdY%EvBC2VtH-$+tyo%A(!Fw z4YfILX}*U(L{?P#scS^;kL@U*{d6_c*)IRi=SBLui>Ldkl!hvqPSa19JhJq(Xh>(B z>WA$D{|-A&n|N6wD)d0{S?BP!M<;XKZ}aob>~lHwbk2|TBbK`t-wC-9Iq@88$Y+^J z%BqW4C*2gczPHkCXWZ9t+ego04miG!x>u54&2zZX^2datQHk!%*{wkV%rMA0&-GjQ}v&=9$8Uko3}N+@A2Gem$L3?Teuc&;uo4cqs_r{ zf`itFeUm2~46JDA`+SbyEx@Y(f9083X-0|bZeM)RT=q zS~FS9|7IZRiCBe=k@HSW z+Az8>_oR#L&%H{yxtY=RVeBi^f#q_}Z-e3B$>wR?FimvLUvbw|+%Ig)S zPnG&%m;1o(v(esIMHaW;8`G@cwGo8ve{Txf+$KW6PlYF@6*(Ik)T{1Jiz%J|g)Q#UO zuq)Gz{nKae&TpA>TSec<*(SLe~Qr5~onzI*o+iX4P|7gaSvr&sa>a8PJMfe z<-E+ohdV=<8ZO;tQ?YogT9o|b^DYPVkNn}&Gx!{%!+FnpWTqeVl3>;Ree$E?vHUGB z#BX)++8uj*l)FB&olj(;$5)fu;7{{j{X8$&$1QQxqn__b#k>z9%Y}d3d+g?};CCaM zrzzyj@BImhdIpy|`n%XBrhHzou;}m`#oyap+e=k9RMu%%+&untxqQXzMXa6|`rkA> zxM8UttuggxDYp^Zo)jUCsFG{Z2kuxt35nRlWWayY=k1Gcx9XW@e13UYJ<3E`h1=-3 zu2;!J=iv1n74F?Z(b@&QF8uK=C#2U%8R`%`p ztBotZb4|?m4VuK*F;Ohnu*%8g&L1_SirTE}fwBcsufmq~IXw1p{MdY6B>TtSzqj6* zXnnh*B7JB!dw#|GpvvO{@+>FCFHF;XkoBkZskCgS(1f*L9{*Wa{(SxXyQ$_(j$ZS6 zcS`XGY&#I2tl$_f(Po|}tDR$o3mm#QfpZ%2->)cN_UhG+VsFskesoc54pTat`TLNw zySN?7EwrWom_1)V(IH4H^^N+UYeiZXRqJ(ZoK~LCt~QeDR6W*ici`!PPQ|3fmzP;P zHpVu86>qglT;uSlaxyLR=vK`T?_##)saN50&tRLqeb3%sled33 zW##yA`sUT_P7jo>2<~&bu)K6(_-pm;m7=R$ts?>_|B7<`@+bL7XK$T$qqohGc)$CL zDyBO<`*~X-JL%fQ6ZD~Ae>&_ zJzw?Gy8Op4{vG*Wy82bo1l=n$t6uu9Pn#q$ecPN@$K z+B&mY>$pR6boR1mlN!F*y^sF$If7qo^7@{B`PXMBJy5YZD*v(OrTzBLQk}Y6e5aRQ z>^NUk`X@bGa2e;76s;8H1z#site+_)A!T%W;+FZAUJ-j1U)+*6<$t4cv~c{t6~%w* zH<#Pm2+a^?oBQd49HZ3Tl;Bo1q=*Bxh5pAe>3}Tt&NNZ?}EkL`r>ybS3mH- z5LdeT^4!nzNm)}lCTeR;PvSmp}xrel# z3S-###Hezou}-kp`sHtN zHnLu!diP;w!|os6Yp#n4yn7sSs?|Wr*TmdL|3=IqQER=Jn`hN$Oy?8dlrc$jzh!4I z^ZXZ1>#r}Kcx(^1p!$QDpTbOSHVbuYt@Q0ry>CD65iDiN_~}L6$9qp2Zg@MgopExm zKB|4}zQ@EppX6Eo?tflYp`P5-yV8C~ z6z?`ptL=E8oXBFqa8{@CO~dvBt3&STxJ^(m+v=Qa>GgK`y?f{Kw%@+Cs&+%QcV6a^ zuL?3sOkR?iy&(d-H*ApG|N6V|sd~mY)(6XW#|=5?L1sNUCTy|LEv=GPYk7u1;;c3ZTrQrUMs?l;j^Z6%=r7G;;La((AHFSuQro&GynY4mJi($H+{imSMGZW7PfWY?yWlBHrwKT zi|X09KY^R)R6P{ydggL3{(b3&sHZj>&%_U~_K7_^ugYb2<=?aL+49X#awea>*W4C= zLn~Nm#{=^i0hjbneQ^=B)pu5ZY`bX`nPjrn*N!1Q^ICfBgy4Ivk=Bc^ch?@R)W7ci z&uev7b@$aHx7V8MHb$J=_~7f07t*`FFLAA7%-F=D2rN+;WrN?!8-qE|;+sqs$H0();ea#V67#6qm>z3&c za~BFtE;!YbG?Vwr&D-<47?a;6)ux0SX~pmyzH&SC7q6=Cxf@GcO((R(C!Nq)moR(( zfvctY7yRE^7b}KHRQMe3|ANKVweTwRN%yq1%5SEawsq(mA?k<~3p0SFb!u<#xSH=r-SU{N7HB z5Vo2%6`fV0sV`C^zTT6wIxXH*ue?t}WXGMOGWU(NbT0_5y(GHjgU@aDFO4(i)f(*- zd*o^rqPgta4ynC6d-*;wZvNMp-07Ae|6=E|)QFrirLo#>VZ|iQj}v(&lAwTEbCzO(6cG1{fpoyE!T7vy^saZq&L4kc*CK6 z%apxyuPdM39B`n0)x!5-f~74%GZxxE{xErqd+3dVP{ZlXU%PfL+}f_U#fJaJ9IIW+ zG7Ft>^5u+{dV=X3-g+)pJtN+d)V_{h6q0D-5DI^Ke_8IZ?B90&$tbr zY;S1mUO3Ge`QV)BOhx5gsWl1G2Ldbm{?{D2zhnzT%4UhYrHo#87Awl%RMUPo?@~(1 z>44))?#M@px2;fG&zktlzr1nJRnNez=R6C%gDsb+c3XzV_>x z$y3%=-QLirx_E`Arj{Mu zt4yYBl3&FTsWjv9?It@78ACzW%l*@}<6mkTtmF>Z6jZQ1B>(%~h+RI*kG1r6%o8bJ zTv77(@X83E7`=%0oi?Hd`!-)+t>9#`a$?cz1AQ#O0r-ful7w5X(ch`R`4q%$le}48Hv-v6k>t7hx zWqPq0M{nl2T-wL;;0wETTKowlsL*{>)n@YG5NLXq`)6m zYquA@KQe(&;dqgcfsUw9%4zqxrVi7bbM>+|zqyt_HND`^*(bh=+xtC^U49z>*6wO9 zzq29xm+-E$lOJ(U5WU>{sA!tr!8fbi5BzS~G4-ls)zantRWt48?hxUvy+_bxwV!ld3w(>Y@9UDQF7`=rTRwZ-@g;D&NEbzJo)tXFRTCNa*^A@S(i5- zyw>R#dVa>n&+nJG94OhTTxFnTCNOKs@vlDX*S(&!>Gs#T{DQ5qpGv)2H_C`?SsvbL z*tYTFt&?ScO-^50yfWePZWhT=4r&{o0ey z%1b49mVWJ;D7UCBUW#wij@VgotEIjjVomDwo*-qkc+$;%31Z;~TSGp7bBl45iJ2stEPnpbNWUoAY=;?Z!}49>c}F!X z+l(tMc=Y0KH{K4)>Tc^lIL+PAv(PH8XhBBqqElWr({Fbjxq3n@rNZw0laltCirQ77 zqAvgDO?_LvX|GY@W0psZ?8;1k89eVbEW31U(e=1J@;n*6+rITn~H^HxhP>K6Mvw<;?6Oz_^-3=1X9fE zQ@UQdH{5J2S`Ta}Usq^~XiA(QGJTK?cb#}ZHTXA;7 zb8B4#N99u0m>S1j@6NHg zD2lc>pPpoQX2ZQ#=U%&d9Ne1}YV&N00Tj6?mVVHu}D5s_MQ2Z_A5z%sgN` z&xEa6WapdH^Oc;G)OjX_wtbJSa1@=QQt{MKEoBO8|KrV$@sC6KPruBZxRXI`K@rdG z8^XTcT9YLYTQytyMJdQE`(tvl!m&TO<~ZNs6=rFMOVr;tpNxBd^t;sY$$1_M%JXOP zN%(LiO|<6P_JYgNT7Tv#sbyz{3~lCnpR3Sv$|$rx_4WVm7jmw?>n@q!7d=oG)@j6k zS#tl05D&KV>@Ba~d0YKCn&-18r1QpYraAmIt8Z?8QvOEd&0q1`Ps(KymSrh^x3amP zoX@Ei);>YDe8*GgP0HN|o|}Ezf7kox+}Q8@*Ve4r^Mx!&}TTVV9(w5yI5U~RrgVgwhO0UVUfb$nlgWW3-*aU{SRNAmK17e z)tnvB_-G5?|H}`XHn2`fUpMnutz5@Z|CE&aH@*7RTW6Lx%?z!O`yb`T=JYQ>W!;pL zb6IvmE%TGB5?`K>E8#M@`k=!q;Ni}_ugtcG{hj9(>T=O=JEuhHq&XEgzA_)2afNN- z<$vCXI3&&2ufN{*_xZHL$Gh3p7w~S3HR*e$lP@J;cei*VuM|(D=tJ$rToX-}-{kC= zY@zx8g{8kLhigL5%0CVf3v!r~OvE>vZJYa#VM?vq@_Fj#em{D{Ft<3-MM-GJq&J0o z?_5|V`Fze3xBISYovHWsAFL|gx$TZ**-kEr+{GJQrCcvpCv&zZeaJZJS`{Si>YY`0 zZ;c+)DUAhMd*^2+S!}<3YN?6Pjr7N{hi`qpV&Jrhr>-JcXm!q7OQj_t>N*A$0`H>j zuWRg0oNbc!c#0qA8O~X+y)`E{Em)P>%yH9WQ=LiNTGiY6J8rRO@?GLvpelH#ch2Ff zYy4jAboG6EyiccW>(7$`pSJ#9GBKM!w(SKso7Fi3*}3)-ZL9bH`?7u0=H1l`a*rr5 zxmq;M7Pu!T5wt#YLikOGT-9SrM{8o!j7~mS=fT}D=}8T1{g&RST{Gj}ivEgi_;8f{ z^kg;<{x_GVUzZYmuzUI9&$sjY{_GJt(Im{!#TLMJyj=s2I^X(!frPyoh zrmep^QM+K%warpDk4V@^h3BR;aQkpP$P+G(Yly1Z$@bcD`qiZ9rpLQ96)kRyD$h*J zoR@yDtKreRRyBJyAGboL2KDLN(o~0O{_!zC{W%DU7 zbLsv(2Cw8#i$AsqFese;5G=AV|99IKmKBkcnoHN}Ej;{Z^#`8c2Meu!b@cRZU#EBU zj!o>%6wMzou4%PPujoB`;n^gncOi7Yw@j;3noU|{)6QpEZQh|^oBi;KT&k3RY2Hfdw_z6y3vNA@l+0PR zQEQb@-~OW3LKXwLN1L^uRsc#yg8>?=0U1y*VgMTw+*tlK8i2@ z9iOS#`I_~t9Gj}dM2Rz1=Tz48uPXbpBRF-FW0}Jvwawelu!}uYx*j&;uF#dbhfV(8 z{2R;^Gt}&&mN{+x7e0NCtoMrr>5GdEg0JuY(4sIm)BS13fn$3-w=62OiBc5(t+~<4 zt+!^Qv}r`=zv6rErOKYD89uvRbMc0sNQ^{B#m+{#89VzIsrzur7&Myo)XlhYKUC+e zm|VBMVx#vQdz(MbJ9@v(XlH)Yy3yBxYeA7ph0Tf?9=cICno^kgVpe&%++E2jx?y#G z=q0zPZ_^fT**n!)km=FxkBX)G>aHwh3U_^X9^ZNUjFU)?){(k3C37V9YJ|y6x4NqS zz)!pJ-HNU63=hv#_`AGH$G(5wYUb~AOkaq<$*@1Pi0#l4*2D3W-0hugGd_gNKeU{4 zH)#6tqt99|1c^r}yqkK5|JLg*mqmUFm@nn%o);$&e6xx-lOaIyoZtmbH^v}EvqdvP zS7)si^5tT+Q+0haL)6gj&z?n1r&jTIanx?Iu`&axc`nbv?_Faib@U<%0-`{`RRcC#VII-L;-_drfTC<7wi}UKo z!rz52GFMFq6*9k8uMc3=|Nri&RJ5)>qR@A=IN;q-q#m=AS7vFie?)$F$*5>o2Z`f{ie7-L+E$1K4 zhGUca?;JUIG|XLx`O+nqRj(PJXY~H~AHKpQjQPcfSJQWMo^Hs9`LuW5Ud@{Ior+7u zqMvuQf7!rpeDYX@ROj^5HLeetk32ibb4p9#!d;2={Yjn2-qso1T$b}LcEhK6k@Ga- zw_gdlu4ZTFdi~-~+2`RBUv`~3?d2Z+y{Fqv!m>!=Zg0NC&4VWkxvaa^9N+lz8Yj0q zN9@hAvQWoA8i%Cf9v(a@eDp{co0`Q=m!>|`+kxC3N&2(-)AqA1n(?D*YMVA=+V`D1 zpBQqNKDehG8?x!{?)C4w7S8&_b>{AbJNG_Es507JIl!&={`-WMFIn|6+dduRo37(_ zaDSF~2J_bgY$4%>>4AS5e_G|mYKtGc7M=8}%lp5ou7P6K^+vB_oEfiVR)kC_oTBKv zcukqCi$z-AN5#s0K{vHmO*ztT`E>OG;}cw_Wqx z8%@3kTwQv}zDI0sVO#aKmHA!5_rj%}4i;`W<)-ec<8Zcqas0j(>v!!pjd+}TwrZ}< ze>~f5fznsKiMNBF@ytK*>zA!~g3Gi?7t$wviq$z={^P*b?J}-`@1Cm7THy?9{Sksohme zHnaPkdU(*({*>S5+e?BPLKJuCTTe?;bosub{`&exg;&3YKF?=3Be_^R+u~bm+4X5Z zZcgkqoVPdSy0*=ZxCDhP#iJ_?lH5ABODZ#!{$R$A_DfrKM96MGrY3hvvHf3k6kNy)O9JUQh#T&w2jPWx#V z*2l?w?0Kt-^76xZzF8-gs*9OZzTe#K8T)(UGj5hvsfj8-1v5@KRMxd>JWyG$Q2Xe? zrVl%nMZYkdk-N9EB*N<4=i7aITMvJ8FABZBcF`top(dB$l}ytF-Uk%-?i5?u_cNwt z(J%kydzgIHnhozied6C7vH$e%E9<*ouej}VRzP(BipTSsauSaTT$1s;&hqhi)#WQyLZ98%*FDnzeN`2>`TfoXpP(Rp6CCbb#c!>8@HKB9%=qAu-d!r$QlNn zlP5_qAHRL@{u9y18tjL*?Vk9ZPyJTGBEifJ8z!W>9xzc^Z#_+^W3Pw)hX+oRzh}7| zH?sI~wto5_XWk3%k8gZF=kdo~3V#7(Z#M?Bx{- zyk=(VH*Q+|*>LCLy+$F^iGP`G)%+s!D=M=eRyZ*XpvmITeD6v~8WS zEQ|Rz9beYP-Ci^6`#LM>&_7@OF2}r{&B#`!thqb*h0;rg_=TOCrou4*QJY+*wC zuO4;W*AgClXxSmQOpz`7U%i{XcF!mCe~fck3p+IWi<}N>b=Bf8xA2ylY64h;Z z&HehzakCxfVPcs(73+9QH(1=Wa+_WAkqNx2#8GxaE!cmQH>nmb@mTI=)Typvfj**BUEH$1Tr1m%Kdn`ry9ILq0ki zI72O8HY-llU$x9ZuAYr)`T5E3dx{U18r!QIZEmQ!CnYG%rvN9@hS) zQJIJ1puC<%iitsj`pP*mH&64j6;+#_#2vq7jYCMnUyt>G7L-fLy z--k~AxukfO_1c`z^Wqe)ZjdkOF`uMR^tmx2>VWAQZ7&Z0H*5>k&Aakbk4u(JsnyU? z64$r?R&gLYKyLnoS&tue{*XF0%Y)$|Yu@Fl(@WeXyi8JN=*+AAE4%W6wN=0Si7AI# zGY@3N{aT(ohL46==w!WzS}$Fn{)B{@AWsQh;gr!+PtXY$N6O^Kg;bq zJ@?4-n48h>SW><&-15@l3G?cJSKm*}-FW_6T7jPJ6y=Cpn`4q1*lnU8G&vd0`SQYO z`|=I4e(x0-V~##+SUz#`r|auxa#&4lbV*_4411Vs@wCMK9=~`E!({CPjaPj4nSFmT zh5N^gMzMJgD(2nmCilI)u))IR(k->Uk6DfW`V}U5p4jqPI(6HH zQ>R7X8MmWdeFn$m>uINdbh@ehU!+r?zIH*EXY~3dIfhc%x83%{zh~WiJ&g6(l{M?E ziVx@s{Ox+ew2`&xswb;q8BgN^CRKf}vw~LyB2QdYzQ5b3N_GAXz8f`Deg~X-_VwsF zm(mxT5$l_xh}bKNx!edxu&zHs-1%oz)XP8ep#fkm=@-M;qSNoA;t*054{~OOVsd^_|Y;^9w zOf%C{kLj`8+k=G<9y$82@kT({cg{1(ThcV|vAY^)&kKoG+5EqT@d$6kCc)*Zfma;& zMcQeEK4SZ~Bi?(X;v#Fk5|(dl3feonW=$1)I90`9qEzEwkIuS~5|zE)Zqr_0=(@6+ zDe08?onLQL8y_?0t~Yx5B30$#4f*Q~u511={AE~H!^`dQeCN}4{zKJE_p?>*Oti1| zvw9gUt`S?d#K*^f~?Q`#g>H>n4E9GmZ@)?=bSQOXZrfx z^WUiTJgM4sb@6u_sWjGYS)J>zH7GrRX0ZiP+lmt4*(`X6cGd%gE&#hDW~ZKbwle%lzO-B2Y} zH9@+f;L|L=gFVLY>t9)%w*G$bajo;@$16U3+I)P~s>TNSwHIXs$|hMH{I?gouN2iD|&TD|E<)0ep_eTJhi;Qul(3tx_`ru_?CU&GHVoPTF+iSL&x8h z!$zv#Cq{RL_8R52%io-ndF#9J?V3x^l`Q21qApj&dZ{(kN{I!3vRhaC&hcf*o`-o` z`sH@K$O>+Yetv6l^;GSI@)VwFivL)h+9FTCx*hIOu3We7?1ar$itl5zlC{ozE=h^7 zyJ0_#bFI%8&s%@jXW6Gjsr1e2s&vlp6|<0do8+dwPB@2u=NkYn!b z>|Z}wRY_>mBCmg?Cv3jjwa=8V-C$g5nVa(C+c8-?eStYSK|$$5`RBs*JTzif7A3NFusaiUH5D}=;0-9>U|06CP znSR>FKgM#`nt2Y-uf2_5*mVEnJs_!}UaKptkMP2VM~~8M>3a6k?uE zTO)sKpWy%ayI<e~IUrCs7ap95&+nzqUcA{IOmnU-o&G?xjbSFWuQ7b^FCVVT-MLiu%X_Aica*G+FL zb+0VlyJds%uBKbMHN2*~)eByvDb(Fx^G=V|Cr)+Bwa-6}{qd@O6WdTf>3g+HiPUGQ zU!6Jcn1rPQbuH@8{mNInY~=B+`?gIa>l#7f?U`GOS3aKLHS4!5&$Z=qFXcL(OF#Z_ zZJRL1p-GZ*rTPDFKEGAJ+4x?tm1)Gx=(^W4s*Eq+$$6soQBx_PPhk7=$>kn_GsRED z*YD0(zhroGr)F@%HP5v7nd%q6@7dpEGHZ9-RS%Uns~EhdtqQgZe-a-n-@c@A`Mov& zk7xS^c~6@iJ7Kn7%*I64NKu1Jr`5l1_&V{yw)5wn+>Bkjf=T!F{JpwN21zAn`k2|n zR)0U;dx~*gVe5rcK0Hl^YY*)CWWVe7^soQBKJ|Fdsrl${7_dkB#)M~nA|5})x@LTH zTf`t15E-*rMqhv4mbfzcb-SByU-n$Xsj$L#%jrLVzp^^1O*z(AI>qBgCC9@99`j3& z@*HtAe_Pt^WI&&#J%oEM}d3J0&=O>hTk*PyH6$dgjPjY`;;p;*IJ0WVonu_Zb&Y!CL*WBvxTzuz@u=?zd!l%{Ff7Tz% z+s>Y_W*2MV^p3gz8O$SH6y6-W_tapfLB8CD7s*O{9a@zb?l5Nt^ZR~@pHO>oyY}Wk z>nr5~6_+@r{hgk(-qz&z^mvv0+LX#qYOh?>g4gVp|GxBCQGBJn`Lx`t0)oN<#a_D? zDKFo-Cp+-&f*rlHzj;YY=T^VeoqY8LcTHi~QRBax&$4`Wyp;S@`-&iTFIBC~) zo0cYcuWPMR)op4GYLY%QHD}ZM#(wpq6PFaN>|GEp>zMD7;{4xogI$IPzh{&V?;pv+ zkodpFx6l6Z6`j`keK}v!WB$f&0CV~9yG@Ptnhq3Te^3pznAgJrtTKJsKXq0b+YaC#}A9-v*#Era}M7! z-BZc`tW|i>LyaHtzqa+aet&%I=DK1@m3c{WY$uFOR$CmY;_E&3-uRcGN7%&B(-+Qu z^gI9Ov6H>UbA#hIR$51utEaf`DqHl;=RZJlM#(?-`_9xnP=-$ zuD7u8(kX^BTe$ya{n+sHf@YrK3JbSiw($yP3pu|neA)LiHj9DfPJcz|WWO0#<|e;r zU~vATeT-k&_*JXYEBhFR+rD!pMC@e#eYbrP_n=zuR)V_nYNI2%Y^C*r6&5Uy#GJq0F?=1gvxG&c`J;_-o^{38ByTCE~P}a4CZtLF78i!3JwBx_e{J?b} zs^zA$eAuit3tk?3{C!5xquD_n{0qOv2s!v!roT~|7Lv-pu^?vMv;VW+HwAhAlDm+1 zZsplDZr_ldiYwOYy;t8U|0>$n`M+29q8ho94Tt!pou8{uyeNOAQ>IQO+r`|2{L)cYONRz*~QF<&*)=xmMJ)ScV;Im0B1SAVe( zI%PRG;x6y;IUUOB<;tP&;AupE+~+z4Z_7#RM%`mw0LWm-Xi7FCDDX z-K(WOL+rep!%Ius<-BoRW|18;zTM5_zti;hRV8bWYG|`>(V^qd^{bU6pUdn&pJuf= z+N&*kLUqIorZ=7EouXs;ZGV3>tTdj{zQ=f;iBD7d_pf|UZn+-mS2yWq)aIGXS1s)@ z`~TnHc2`$zX=UMFTa?ssr^x;k8)MoMR;KBG+OPLLvQC#XnR;kK^#_-AKX~JV{+{vW z?N(No@t9Mw^s(2p-CKm_gjntlF@C(gh4r#e%cOfpGGBRDR!rvPUL}>KTeRct3%7t- zvzne=`4H&7roa1Rx6|i+@lW!M_NZ<%T(ph#%kjLgvTKt?Iyv%1Gk-cPI9?-S#8_l}+k`SSBY*3#vRuUT_HDCBiF62DlUb9$rNdAF*ITMkw2UiZ0H ztC#Qjsjc$z73XzCmv8k>TkI<_H!r%?cbX@g!)xJLO(#ys+MpcVYA7ekIzcb#8BubW>8O+nVJnF8@P6 z2}fq0eObl#W2&O^tOp-kY@&?zoqkgv_{v0cPRys1ski?cMlV<`5Y_xya;MU?=4iD# zpP*~$8t<=8Vn6&T{X%Es3dM7>5zPxH?oqnmmc!=C+w?bSr`koURSUd#J?J^RiMv;3 z>E|uXhLMYxDW~!L`grka)fD~^75;T6_XwQZb?17YjRnJnk0;Fbi>y$pzQtg3{-&mu zzn-_(l#}LHUgqq}x~Y51dio6B2^+t9Zr-83?OffRsm&S^jn!P5(*?PfFBfyUwRVq~ zt9I~`9j?>!R;@lYi@jxfs_Q4g1>$}mI+YGM*yv9GvGU)It!hf4XC3|G_TIUv={#G* z(YV`3F}UrK`mV`(*Zc3i>CazK8P8n8_+gE@)GzHh$2VL23x0IG)@S8j%SQ^iMcy0k zXFV-B)cNMd(ta(`YuRkODjA<`3g5@bvfIU*<2ma=UQ{4KR*`}q=!hxrmEbpy0I#mASqE1hOgq7l|3=>hesOSj?^{sxK5t}gM`I&vY z^fh0s>OB>nBo)h>aMtxrh`(!j`TOUEi{2i};XR@nFma{L+=2;mRn6Pq^y#qO^+}o= z&6;{3xQ44<>R+i!)#r!V6WHtD%{{&I;Gs3~H@)(JQ z$=UE9)D%3ZeNd++>s1KfvPO(q1e-PU*rI3Mp7EepAY`T2PaTt|3=I~xHAr( zin_YaFt-)BW|E;GF^yCzv^n}1rV{?Fti1?_RpM&TrD8pVwYp4&3?bw7J%l4gT2?)lV*d^knSKIkf*l zK*!ULWrhK-<8v5FIQg4iD<^m@=a*r)u6(BSW2J2Px4jc3ydQB*NU@sXuaX^ArJ48S zZvECN(x)_|Y~C-n@u`!u&{-Pt<(|WvM2Czu_Y&K6s+8HfD}Aoz)tQBhe-FI(VtZQ4 zV#%XP<-dPU{{8BUT$2Lx0Y@(DC;m^S*_HoVxc9=>?L~>qFWaBZy!+-LLzA;k@yu^2 z^4&aISraD&@u{2dW?ZIj?)UfgH~ps0`8NJ_a=%_y1Wqm!OHF&N^g^z~^2W5{pmyuC zQzI_u_wl zZdvK3rBDC61X?)tKk-^tuy)d10WSUz_pdtqC{MiUD0zQ+u<@J6&Q~|P-8oU6|M_I_ z=S{X9(Np5Lo}M7b#M*GpeDj8DKflhlO|%!gY%YI6=d-`VzpU)4xjZ?~f^&BkUth$( zTj0vqi5{9S&)a&-ym?#7m1%7Fc22zAspruSdw*V(tKPf4P`PTsZp&#}CVzZ5A}*RK zAKt*G>2c2gm85-{zQzeLmoq2c&)CjgTkN{1)9PP*zs$#3(-yl;?J&IXcgN%+9)7RJZpH>X%@Qr*uqa|pWK+g+j_~?mpb0bk&|{6%AH>O_)B(K z*s@=z4FcLa*6uTSUw6~LcH*NejaQG)?=T3}p8E17f7FJjH+G*;b$lBso|`;>f31*C z&$cyklVP5hR=$0U*P+|~KJFJKHvay0s4MpB z|9Rh?KAy2%>7qNe;+T4DjLg+9WpleL?myJK`gZBB^~YEm1fE#R&EMuKbo8%k+Lmy? zWl1fkLUvrM&-X3LKF-s3%e=fMp@}2;mEYQOk2e!nRq!d!X_0A_oXs5lV*O?_)tT8w z+roQ~?XA;U{C|z^x$nO{UpW=MvND;)U|;@$SE`sJm2dC0-|X23PJEj@eOfHjAuDE< z-h)EMR@V#<{a$(c;EIs*8b`7wa5^b8K3C4*{}Zu%-IRB6PY$N;x$l2&uG5_h6{nc1 zGrdLfCd^WL#b@qbCjW7r?$y%PFS;w^o>U|)WldOUTKSlJj;iYVzokMK`%Ui6x!jP` z*SbbB*XsLKslBt>mfb0xw&=&a#JSuFnRm{u{c*e`NO@A?hdEPEByUaA{>|s4;BDTs zmti;C;(e7bU$IU9>RT&6^W|}lla=3p@G>u6ndh^l#gFw(;0x7D9DzG@=I*E!P1%rk z;C|ZreAkpM6R$3HElF>>Ip^E)YepFtZp5zTXIK*MQWqv17ICm|gYMRh3+H$@2uC>o z{G53zJR-IEDH|aUwlP5?tr-4VeeF}`FC@hZ~aobP}k8B(|ht)Va`+ghDEJb z&5E2TilzXxUXyfIswC^-=1GqyuI|~F4MPlRuNaW zY8M$>)&FEWbWFN%YRQciZJTFES_iQllzML`bBF!l+8tNZPlx|rx%jU;51$_raw@?2cZ<~L8T3Skk_=XSmI}XkFU92H@MC??~+@7-A*RQR* zY*@DP{Uir#yGX}B2isL6cdfDB_57!Q=j@8~me0@9bG)DKH?KOQU%w`6eogY$sooN5 zbu+H)2}#th;C{dFYk$YF6n-wjgY%ACEje*X`KsyM&-Sm6mziIfIg9H=yK78zT2aaE z){n-|S2ZNIf7$URpL62cuX!4iWE-t#s97?euHc;UU##Ch3nOHTm9N~9x;!~GYRZ;J z6T%N!Y(HIT`g^7#$HLWpGJ>q<3Zj+>zkDRjI_YTo?lTOjhgYesI=Upr_VQNE*|+Y$ z)^i{OrwGK5O$8W8aXJS04`VYim5e zzN+Wb)44|N4dq?2i~+)$`nJ1zjx0X&{o(aV`74W0&xlTTzcw{v$~rHTUFqjPZ(nx% z++BwHMyHuiM2kOF_IH1OM&*f77LNuwR*-^yDh%DZjHyoll&f!jsj$4r?EVi8kbYeh7EjhUR#R{Syi#+#n!^LjUK?k`c3 zIlec$y>pJCgy~`Dy|3zl!}$&D{5?yp?w^F7Lj@5F_-nv0aX1R-0mn9{A$cd^FyRmYBv;yj!3_b2l3CK*rpq3IgHRpTnOCgegc!+BfP0D~DPvGubNR*ODf|28@0DbnW9>rX)EP1XL`Tl{NuUib|*JC&-9r)IZhSM zVl`7?d6T}Uxhi`9Tq(AQ3AWeFrEYAC4B=fe`Hx0n(j3F}7sPU=r}1{r*_Ytk+2EBj zzxC}N4Yxmr-s(rz*YRpD-tj=^=f%X^j)v|^@l`k3D>6R6i<@$SGiSBU9G1F2ks^X8 z<{WYqTdKypvBD_Qvu(EBt?=m+Su~sP$=w$@`o^>>*kHZgvoBn_<|U~U-pQ$#OgMdy zXUW#}AB)1XOByHa=qNuRI=%CzVb)R)6`QW|+i-hc30FLlxh5wxnI%r@w!`2 zWpdc>dPKMOiR`&+Z^?E1+TXWbReh`a_UEaxcRnipwaOy-#!tfttsU-HAFBik`rg|5 z!o)eMX2s2?o7DqBBPjuF4 zG#)Ht6SR=^7Ta2HtIc!o3hSY(0-6@vj;S4bIqL|o&4ov436~c0-Yiu!%WXa_WB7Ab zbasT< zak^YjFRBDlE*Su_m|DioB37ybmD|%CszCoXYg9nsxjF$h(9e)^VVyR!;@0$ z)|@xik9~OPp4^fUZ8_2Q348AFF0c#uUNG_Ex!O>!xh6l0IE6N7eQB}WHnHTjq)_`q z&5@W;;kJ9i&xJtWU{EcE`Wx*BJbNhfw|oj!Ng zSBSf!vTsA-t-!M`Crtl~1uxW!e?!dB#y)#re%_RhCDMcUMg5Z}hIw_n8&3Wyz0*nECIsr@Nny zSuJx=;#CJ@=N+l}|H}lU9=(13>!~ZNo^k#05E&OQCqdT7J#TXvt2N$En_hCI;7pL_ zMxL85uO3$V!ltG%!+CYGn5X>*{kLqK28Xn2+UA#Lmo!SUJwN+x+s0{?Oj`eUH7(w* z$6FB?mct-*usez zQ^dX0``n9N({H*fG(1}S_~XTo&t_iAsXnfszk1!P3y112DEanfPvo#Jm{9fBW5SzL z`IF8q6j`{~p8dVRuXyG4-4^%Mq+F)&XG#;(I+an+qT|b2r~c=GZqxaDGcv>S-o+KmbAqw4o-eL>Q>s13AVa8Id_ zM}A^__nb*?e?!fln0?6(-P)CrQjJ_2qO*dzpPAIJZHBjeTp}7q;p4moz8)ZsXxHIpu-esZvBKq__>yMLMmRA(=pOw+nej_s@QbDk^ zWHpoTk-D{g_p&#I=~;(umRx_Uf2pVQao<%rlixMU2hEk%T>MJ@;H|jQ1D6l1VRb*t ze{hbS+PO79uBj&*$$$8fxbM~>5IGrf5?s9)Sy8L4$7G>XTeb=l?hC$B8O@Ru>XxaFD1 z)GqZHKM(&ZweyUBLpuuIy{@?U{L}Sk`{uT09a8xBwemu$;4ZhKBnwN)vvv}tJ1gp& zOkIs9PTz6&R>rP`kgNN&H!lkQw^8lc8QX^GcZ&8My?*#0Q%+Utw5Jva7x@)z{Cnn9 z*gd~P{R|fmZ@#~w=3DXCl#nwSUz|l+_(gY5JXmehudNc*I(1)sez=B@@u$=BZf@^2 z!p|Gcy|kg-s?_Ys?j;2lSG~^Oe&BOxovmDU{?qq$C5FGlE*^;rYA@@VI)A3ae}nIW za`sD9YbX4R>xdLrUA%JVF5|Q8M=j^oH-|9K&f!uhWuAR!>lBy$I+nZ7+~3P2eOFdO z_D!T0%g2(FS2x~`Yx1f2yFcPvc2aJ^DOSPR7q=b$d!%aCkHAcag?g{#j0Nm#WmK=& z%Dm%kx^ToLMO^d6+F-4@L*HTr2bI$Wp)gL8mj< zU8)FZy|U@dD{YO5_Lk;6ZJuw|Hs~i^w6RI9mVbH2J?l$4H>u3GQ_?GALAeQS?g~XS8ldkRE)OBR%J^{Z2!q%Z@zW#E~Z_vNdU2*!< zUgbcu4?o|0W?09lP;REZ^MUW_70L?^lv4vI>jrl{_WNJHQ(OXGZ%=G>8BefI3p&zx_C=}Z9&d&Sng zo9i}@@zC)I!KM`dCr3C-zHMZh?zR2wi@%+krzJBcEHGasK6`rmmV=XAe_qZCbQhn$ zhWC^5&Gq>c;%*mvcpR4&lYjKH!uZ3p1z&@-kLqzeKmG9Oq>08C0+(Oh!4dLq;Q^M_ zGSREK|LwVb^3N61U*{!reW$m(_$vqHEZ66^FK#{4vTAPqZw{N9tnl;f4%u^dDOmS> zWh-zgJ(p>*|LyZtH$v7MZ=AGj(TQdE^L}gGU$LiaRg9@$*}1l(I`XTHw&*=~TNIM& zd+@Z}cQ4nTgWB7U%(FjzW^LC8?wO)5vL0y^n@RPr{WM9@%y#w@L9uB!w<%ovFV(Up zEK~H2lUi>^@4ADLmY1ajx!nG|x|9(fcS~%#y58#*+c|e81ZK^9dOWVZE%o1<(sYxF z1sCH!&h-nI61e(h|Lqf;d^PPYPa3_J-m@0c7D`fMVoUy9G=V$WWl~~{fAW=>ZEy9S zPW}ADZ;j2h?TWoB;!`FZbD!@cJtwokx+{U}Rb`r_{fk2(N%eQn{tgOR|MPs)tp_Q3 z7pELrw@1lD;n($fdv>m|>YW;XJ2mF@h06=(-+!T!ZM%=_&da%#j8_vlx4Ij4D_^@j zuc&Lzn!THDM6SK5dP>vgvn%T@xdgM%dt=`!p1Je#QckRK=;@>k0T_ zyu9J!LC*WOdD-1-7N1VJ`)KD+ah|Y+5i8c*zBb?SRsxHrV|^m`h6mhopXx-8d|C9o zqw+?_)atn$SMYgRx)}W=ZewK=Z^FHYys1kiK#@OR-TP^Z)GdK7&Y&phpb)$2$`r!uk+l!7c<+8k=v?JNa`HOZ?Dz69E xL7UkN+?M+MS+(Fog{O+^qZchDf$fi1*ef0SK3C+3;68zv1tu*nfB&TS0sxZe-(dg% literal 0 HcmV?d00001 diff --git a/nix/home-manager/secrets/secrets.nix b/nix/home-manager/secrets/secrets.nix new file mode 100644 index 0000000..9cd62a9 --- /dev/null +++ b/nix/home-manager/secrets/secrets.nix @@ -0,0 +1,18 @@ +let + laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH"; + desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi"; +in +(builtins.listToAttrs ( + map + (f: { + f.publicKeys = [ + laptop + desktop + ]; + }) + [ + "server-password.age" + "borg-laptop-password.age" + "gnupg.age" + ] +)) diff --git a/nix/home-manager/secrets/server-password.age b/nix/home-manager/secrets/server-password.age new file mode 100644 index 0000000..1df1be5 --- /dev/null +++ b/nix/home-manager/secrets/server-password.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 JlUYaQ u9duGBEW7wp7aG5cqd1gfB8w+MDAirki9ZVSsotqtRM +9gyL9k29ytNJZ6Kp90309bDim1fZNqcLhPTVqs1py5s +-> ssh-ed25519 dHDJgQ ytHA01CSY/0dD6F8XC9ilzNaivZS84PsCmr5GFWAE1o +4jLi+spahOIExkrUyfpX8cYJFEKvWfErWskYJ2btBkw +-> Q-grease +n1QvV95VRYZ7CiOl6KOedEKr2L7tjTdj8aahF/DHOifCyWnc +--- iV/7+IbpWvsgrZIs2yPwOL0Xa6AlvkIfwbDotCh7iiQ +'Fh2mYiuL/D* :@;f 9v{2aǫ& \ No newline at end of file diff --git a/nix/home-manager/system-mreow.nix b/nix/home-manager/system-mreow.nix new file mode 100644 index 0000000..c042439 --- /dev/null +++ b/nix/home-manager/system-mreow.nix @@ -0,0 +1,183 @@ +{ + config, + pkgs, + lib, + homeDirectory, + ... +}: +{ + imports = [ ./gui.nix ]; + + home.packages = with pkgs; [ + wdisplays + intel-gpu-tools + swaylock + + #manage bluetooth devices + blueman + + niri-unstable + ]; + + #bluetooth manager + services.blueman-applet.enable = true; + + #notification daemon + services.dunst = { + enable = true; + package = pkgs.dunst; + }; + + #window manager + programs.niri = { + package = pkgs.niri-unstable; + settings = import ./progs/niri.nix { inherit config pkgs homeDirectory; }; + }; + + programs.swaylock = { + enable = true; + settings = import ./progs/swaylock.nix; + }; + + #waybar for status bar + programs.waybar = import ./progs/waybar.nix { inherit pkgs; }; + + #rofi for application launcher + programs.rofi = { + enable = true; + package = pkgs.rofi-wayland; + extraConfig = { + modi = "window,drun,ssh,combi"; + combi-modi = "window,drun,ssh"; + }; + }; + + age.secrets.borg-laptop-password = { + file = ./secrets/borg-laptop-password.age; + path = "${homeDirectory}/.secrets/borg_bak_pass"; + }; + + #backup utility + programs.borgmatic = { + enable = true; + package = pkgs.borgmatic; + backups = + let + borgPasswordFile = config.age.secrets.borg-laptop-password.path; + in + import ./progs/borg.nix { inherit homeDirectory borgPasswordFile; }; + }; + + # https://community.frame.work/t/speakers-sound-quality/1078/83 + # Filter: ON HPQ Fc 100.0 Hz Gain 0.0 dB Q 1.0 + # Filter: ON PK Fc 150.0 Hz Gain 4.02 dB Q 3.0 + # Filter: ON PK Fc 600.0 Hz Gain -5.07 dB Q 4.000000000000008 + # Filter: ON PK Fc 1200.0 Hz Gain -3.49 dB Q 4.17 + # Filter: ON PK Fc 2000.0 Hz Gain 1.43 dB Q 4.0 + # Filter: ON PK Fc 5300.0 Hz Gain 3.84 dB Q 2.64 + # Filter: ON HSC Fc 6000.0 Hz Gain 4.02 dB Q 4.36 + # Filter: ON PK Fc 7500.0 Hz Gain -2.09 dB Q 3.0 + # Filter: ON PK Fc 8000.0 Hz Gain 2.01 dB Q 4.36 + # Filter: ON PK Fc 900.0 Hz Gain -4.12 dB Q 5.909999999999967 + home.file.".config/easyeffects/output/framework.json".text = + let + baseBand = { + mode = "RLC (BT)"; + mute = false; + solo = false; + slope = "1x"; + type = "Bell"; + }; + + bandList = [ + { + frequency = 100.0; + gain = 0.0; + q = 1.0; + slope = "x4"; + type = "Hi-pass"; + } + { + frequency = 150.0; + gain = 4.02; + q = 3.0; + } + { + frequency = 600.0; + gain = -5.07; + q = 4.000000000000008; + } + { + frequency = 1200.0; + gain = -3.49; + q = 4.17; + } + { + frequency = 2000.0; + gain = 1.43; + q = 4.0; + } + { + frequency = 5300.0; + gain = 3.84; + q = 2.64; + } + { + frequency = 6000.0; + gain = 4.02; + q = 4.36; + type = "Hi-shelf"; + } + { + frequency = 7500.0; + gain = -2.09; + q = 3.0; + } + { + frequency = 8000.0; + gain = 2.01; + q = 4.36; + } + { + frequency = 900.0; + gain = -4.12; + q = 5.909999999999967; + } + ]; + + bands = builtins.listToAttrs ( + map (f: { + name = "band${toString f.snd}"; + value = baseBand // f.fst; + }) (lib.lists.zipLists bandList (lib.range 0 (lib.length (bandList)))) + ); + + in + builtins.toJSON { + output = { + blocklist = [ ]; + equalizer = { + balance = 0.0; + bypass = false; + input-gain = 0.0; + left = bands; + right = bands; + mode = "IIR"; + num-bands = 10; + output-gain = -1.5; + pitch-left = 0.0; + pitch-right = 0.0; + split-channels = false; + }; + plugins_order = [ + "equalizer" + ]; + }; + }; + + services.easyeffects = { + enable = true; + package = pkgs.easyeffects; + preset = "framework"; + }; +} diff --git a/nix/home-manager/system-nixos.nix b/nix/home-manager/system-nixos.nix new file mode 100644 index 0000000..1435381 --- /dev/null +++ b/nix/home-manager/system-nixos.nix @@ -0,0 +1,45 @@ +{ + pkgs, + inputs, + lib, + ... +}: +{ + imports = [ ./gui.nix ]; + nixpkgs.config.allowUnfree = true; + + nixpkgs.overlays = [ + # Add a protontricks-beta package so we can use protontricks with latest steam beta + # https://github.com/Matoking/protontricks/issues/304#issuecomment-2280920826 + ( + final: prev: + let + ps = prev.python312Packages; + in + { + vdf-patch = ps.vdf.overrideAttrs (oldAttrs: { + src = inputs.vdf-patch; + }); + protontricks-beta = prev.protontricks.overrideAttrs (oldAttrs: { + src = inputs.protontricks; + propagatedBuildInputs = [ + ps.setuptools # implicit dependency, used to find data/icon_placeholder.png + final.vdf-patch + ps.pillow + ]; + }); + } + ) + ]; + + home.packages = with pkgs; [ + protontricks-beta + beatsabermodmanager + protonup-qt + ]; + + programs.alacritty.settings = { + window.decorations = lib.mkForce "full"; + window.opacity = lib.mkForce 1.0; + }; +}