From a3bc0af41930bec9e6f66675209fdf688a269431 Mon Sep 17 00:00:00 2001 From: Clay Gomera Date: Sat, 21 Oct 2023 09:44:39 -0400 Subject: [PATCH] update: moved to dwl compositor --- README.md | 8 +- system/boot/loader/entries/arch.conf | 5 - system/etc/X11/xorg.conf.d/40-libinput.conf | 42 - system/etc/mkinitcpio.conf | 73 - system/etc/sv/runsvdir-drk/run | 14 + user/.bash_profile | 27 +- user/.bashrc | 4 +- user/.config/dunst/critical.png | Bin 0 -> 35927 bytes user/.config/dunst/dunstrc | 359 + user/.config/dunst/normal.png | Bin 0 -> 3895 bytes user/.config/picom/picom.conf | 70 - user/.config/ranger/commands.py | 1 + user/.config/ranger/ranger_udisk_menu/menu.py | 243 + .../ranger/ranger_udisk_menu/mounter.py | 29 + user/.config/ranger/rc.conf | 3 + user/.config/ranger/rifle.conf | 284 + user/.config/ranger/scope.sh | 350 + user/.config/suckless/dependencies.md | 14 + user/.config/suckless/dmenu/Makefile | 64 - user/.config/suckless/dmenu/arg.h | 49 - user/.config/suckless/dmenu/config.h | 25 - user/.config/suckless/dmenu/config.mk | 32 - user/.config/suckless/dmenu/dmenu.1 | 197 - user/.config/suckless/dmenu/dmenu.c | 1073 --- user/.config/suckless/dmenu/dmenu_path | 13 - user/.config/suckless/dmenu/dmenu_run | 2 - user/.config/suckless/dmenu/drw.c | 450 -- user/.config/suckless/dmenu/drw.h | 58 - .../dmenu/patches/dmenu-fuzzymatch-4.9.diff | 163 - .../dmenu-highlight-20201211-fcdc159.diff | 97 - .../dmenu/patches/dmenu-mousesupport-5.2.diff | 144 - .../dmenu-mousesupport-motion-5.2.diff | 53 - .../dmenu/patches/dmenu-password-5.0.diff | 103 - .../.config/suckless/dmenu/scripts/dmenu_drun | 8 - .../.config/suckless/dmenu/scripts/dmenu_edit | 27 - .../suckless/dmenu/scripts/dmenu_mount | 43 - .../suckless/dmenu/scripts/dmenu_scrot | 315 - .../.config/suckless/dmenu/scripts/dmenu_wall | 49 - user/.config/suckless/dmenu/stest.1 | 90 - user/.config/suckless/dmenu/stest.c | 109 - user/.config/suckless/dmenu/util.c | 36 - user/.config/suckless/dmenu/util.h | 8 - user/.config/suckless/dwl-bar/LICENSE | 674 ++ user/.config/suckless/dwl-bar/Makefile | 87 + user/.config/suckless/dwl-bar/README.md | 28 + user/.config/suckless/dwl-bar/dwl-bar.1 | 33 + .../suckless/dwl-bar/patches/ipcv2.patch | 754 ++ .../dwl-bar/protocols/dwl-ipc-unstable-v2.xml | 181 + .../protocols/wlr-layer-shell-unstable-v1.xml | 390 + user/.config/suckless/dwl-bar/src/bar.c | 378 + user/.config/suckless/dwl-bar/src/bar.h | 39 + .../.config/suckless/dwl-bar/src/config.def.h | 67 + user/.config/suckless/dwl-bar/src/event.c | 75 + user/.config/suckless/dwl-bar/src/event.h | 22 + user/.config/suckless/dwl-bar/src/input.c | 408 + user/.config/suckless/dwl-bar/src/input.h | 68 + user/.config/suckless/dwl-bar/src/log.c | 44 + user/.config/suckless/dwl-bar/src/log.h | 10 + user/.config/suckless/dwl-bar/src/main.c | 532 ++ user/.config/suckless/dwl-bar/src/main.h | 33 + user/.config/suckless/dwl-bar/src/render.c | 272 + user/.config/suckless/dwl-bar/src/render.h | 71 + user/.config/suckless/dwl-bar/src/shm.c | 117 + user/.config/suckless/dwl-bar/src/shm.h | 35 + user/.config/suckless/dwl-bar/src/user.c | 41 + user/.config/suckless/dwl-bar/src/user.h | 55 + user/.config/suckless/dwl-bar/src/util.c | 141 + user/.config/suckless/dwl-bar/src/util.h | 29 + user/.config/suckless/dwl/LICENSE | 692 ++ user/.config/suckless/dwl/LICENSE.dwm | 39 + user/.config/suckless/dwl/LICENSE.sway | 19 + user/.config/suckless/dwl/LICENSE.tinywl | 127 + user/.config/suckless/dwl/Makefile | 70 + user/.config/suckless/dwl/README.md | 173 + user/.config/suckless/dwl/bootstrap | 48 + user/.config/suckless/dwl/client.h | 402 + user/.config/suckless/dwl/config.def.h | 309 + user/.config/suckless/dwl/config.mk | 13 + .../dwl/dwl-ipc-unstable-v2-protocol.c | 70 + user/.config/suckless/dwl/dwl.1 | 158 + user/.config/suckless/dwl/dwl.c | 3583 +++++++++ user/.config/suckless/dwl/dwl.c.orig | 3579 +++++++++ user/.config/suckless/dwl/dwl.desktop | 5 + user/.config/suckless/dwl/generate-keys.c | 82 + user/.config/suckless/dwl/keys.h | 242 + .../suckless/dwl/patches/alwayscenter.patch | 33 + .../suckless/dwl/patches/attachbottom.patch | 26 + .../suckless/dwl/patches/autostart.patch | 145 + .../suckless/dwl/patches/bottomstack.patch | 138 + .../suckless/dwl/patches/centeredmaster.patch | 132 + .../dwl/patches/float-border-color.patch | 66 + .../suckless/dwl/patches/ipc-v2-fixed.patch | 574 ++ .../suckless/dwl/patches/keycodes.patch | 578 ++ .../dwl/patches/mouse-follows-focus.patch | 159 + .../suckless/dwl/patches/movecenter.patch | 71 + .../suckless/dwl/patches/movestack.patch | 85 + .../dwl/patches/namedscratchpads.patch | 176 + .../.config/suckless/dwl/patches/pertag.patch | 167 + .../suckless/dwl/patches/regexrules.patch | 99 + .../suckless/dwl/patches/toggleKbLayout.patch | 199 + .../suckless/dwl/patches/touchscreen.patch | 174 + .../suckless/dwl/patches/unclutter.patch | 127 + .../suckless/dwl/patches/uselessgaps.patch | 137 + .../suckless/dwl/patches/zoomswap.patch | 52 + .../dwl/protocols/dwl-ipc-unstable-v2.xml | 181 + .../protocols/wlr-layer-shell-unstable-v1.xml | 390 + user/.config/suckless/{dwm => dwl}/util.c | 5 +- user/.config/suckless/dwl/util.h | 4 + user/.config/suckless/dwm/Makefile | 51 - user/.config/suckless/dwm/autostart | 12 - user/.config/suckless/dwm/config.h | 344 - user/.config/suckless/dwm/config.mk | 39 - user/.config/suckless/dwm/dependencies.txt | 27 - user/.config/suckless/dwm/drw.c | 451 -- user/.config/suckless/dwm/drw.h | 61 - user/.config/suckless/dwm/dwm.1 | 209 - user/.config/suckless/dwm/dwm.c | 2377 ------ user/.config/suckless/dwm/dwm.png | Bin 373 -> 0 bytes user/.config/suckless/dwm/movestack.c | 48 - .../patches/dwm-alpha-20230401-348f655.diff | 288 - .../dwm-alwayscenter-20200625-f04cac6.diff | 12 - .../dwm/patches/dwm-attachbottom-6.3.diff | 54 - .../dwm-autostart-20161205-bb3bd6f.diff | 39 - .../dwm/patches/dwm-barpadding-6.2.diff | 110 - .../dwm-movestack-20211115-a786211.diff | 95 - .../patches/dwm-pertag-20200914-61bb8b2.diff | 177 - .../patches/dwm-restartsig-20180523-6.2.diff | 139 - .../dwm-scratchpads-20200414-728d397b.diff | 199 - .../dwm/patches/dwm-statuspadding-6.3.diff | 62 - .../suckless/dwm/patches/dwm-warp-6.2.diff | 58 - user/.config/suckless/dwm/tcl.c | 74 - user/.config/suckless/dwm/transient.c | 42 - user/.config/suckless/dwm/util.h | 8 - user/.config/suckless/dwmblocks/Makefile | 13 - user/.config/suckless/dwmblocks/blocks.h | 18 - user/.config/suckless/dwmblocks/dwmblocks.c | 175 - .../suckless/dwmblocks/scripts/block_layout | 11 - user/.config/suckless/herbe/Makefile | 22 - user/.config/suckless/herbe/config.h | 19 - user/.config/suckless/herbe/herbe.c | 255 - user/.config/suckless/herbe/notify-send | 97 - user/.config/suckless/herbe/patches/19.diff | 100 - user/.config/suckless/slock/Makefile | 61 - user/.config/suckless/slock/arg.h | 65 - user/.config/suckless/slock/config.h | 28 - user/.config/suckless/slock/config.mk | 32 - user/.config/suckless/slock/explicit_bzero.c | 19 - user/.config/suckless/slock/lockscreen.jpg | Bin 275735 -> 0 bytes ...ock-background-image-20220318-1c5a538.diff | 149 - .../slock-colormessage-20200210-35633d4.diff | 284 - .../slock-pam_auth-20190207-35633d4.diff | 154 - user/.config/suckless/slock/slock.1 | 46 - user/.config/suckless/slock/slock.c | 635 -- user/.config/suckless/slock/util.h | 2 - user/.config/suckless/someblocks/CHANGELOG.md | 6 + user/.config/suckless/someblocks/LICENSE | 8 + user/.config/suckless/someblocks/Makefile | 20 + user/.config/suckless/someblocks/README.md | 19 + user/.config/suckless/someblocks/blocks.def.h | 17 + .../scripts/block_battery | 32 +- .../scripts/block_brightness | 2 +- .../scripts/block_clock | 2 +- .../scripts/block_volume | 6 +- .../scripts/block_wifi | 10 +- user/.config/suckless/someblocks/someblocks.1 | 25 + user/.config/suckless/someblocks/someblocks.c | 215 + user/.config/suckless/st/Makefile | 61 - user/.config/suckless/st/arg.h | 50 - user/.config/suckless/st/config.h | 508 -- user/.config/suckless/st/config.mk | 39 - user/.config/suckless/st/hb.c | 124 - user/.config/suckless/st/hb.h | 14 - .../st/patches/st-alpha-20220206-0.8.5.diff | 146 - .../patches/st-anysize-20220718-baa9357.diff | 164 - .../st-blinking_cursor-20211116-2f6e597.diff | 153 - ...t-bold-is-not-bright-20190127-3be4cf1.diff | 27 - .../st/patches/st-desktopentry-0.8.5.diff | 68 - .../suckless/st/patches/st-font2-0.8.5.diff | 163 - .../st/patches/st-gruvbox-dark-0.8.5.diff | 66 - ...gatures-alpha-scrollback-20230105-0.9.diff | 610 -- .../st/patches/st-scrollback-0.8.5.diff | 350 - .../st-scrollback-mouse-20220127-2c5edf2.diff | 25 - ...back-mouse-altscreen-20220127-2c5edf2.diff | 78 - .../patches/st-undercurl-0.8.4-20210822.diff | 605 -- .../st-vertcenter-20180320-6ac8c8a.diff | 51 - .../suckless/st/patches/st-w3m-0.8.3.diff | 42 - .../st-workingdir-20200317-51e19ea.diff | 97 - user/.config/suckless/st/st.1 | 185 - user/.config/suckless/st/st.c | 2783 ------- user/.config/suckless/st/st.desktop | 12 - user/.config/suckless/st/st.h | 134 - user/.config/suckless/st/st.info | 240 - user/.config/suckless/st/win.h | 41 - user/.config/suckless/st/x.c | 2709 ------- user/.config/tut/config.toml | 1284 ---- user/.config/vifm/colors/gruvbox.vifm | 29 - user/.config/vifm/scripts/README | 6 - user/.config/vifm/scripts/vifmimg | 56 - user/.config/vifm/scripts/vifmrun | 21 - user/.config/vifm/vifm-help.txt | 6568 ----------------- user/.config/vifm/vifmrc | 518 -- user/.config/wezterm/wezterm.lua | 35 + user/.config/wofi/config | 9 + .../dmenu_blue => wofi/scripts/rs_blue} | 79 +- user/.config/wofi/scripts/rs_emoji | 1852 +++++ .../dmenu_power => wofi/scripts/rs_power} | 65 +- user/.config/wofi/scripts/rs_scrot | 39 + user/.config/wofi/scripts/rs_wall | 21 + .../dmenu_wifi => wofi/scripts/rs_wifi} | 14 +- user/.config/wofi/style.css | 56 + user/.winitrc | 57 + user/.xinitrc | 64 - 212 files changed, 21717 insertions(+), 28771 deletions(-) delete mode 100755 system/boot/loader/entries/arch.conf delete mode 100644 system/etc/X11/xorg.conf.d/40-libinput.conf delete mode 100644 system/etc/mkinitcpio.conf create mode 100755 system/etc/sv/runsvdir-drk/run create mode 100644 user/.config/dunst/critical.png create mode 100644 user/.config/dunst/dunstrc create mode 100644 user/.config/dunst/normal.png delete mode 100644 user/.config/picom/picom.conf create mode 100644 user/.config/ranger/commands.py create mode 100644 user/.config/ranger/ranger_udisk_menu/menu.py create mode 100644 user/.config/ranger/ranger_udisk_menu/mounter.py create mode 100644 user/.config/ranger/rc.conf create mode 100644 user/.config/ranger/rifle.conf create mode 100755 user/.config/ranger/scope.sh create mode 100644 user/.config/suckless/dependencies.md delete mode 100644 user/.config/suckless/dmenu/Makefile delete mode 100644 user/.config/suckless/dmenu/arg.h delete mode 100644 user/.config/suckless/dmenu/config.h delete mode 100644 user/.config/suckless/dmenu/config.mk delete mode 100644 user/.config/suckless/dmenu/dmenu.1 delete mode 100644 user/.config/suckless/dmenu/dmenu.c delete mode 100755 user/.config/suckless/dmenu/dmenu_path delete mode 100755 user/.config/suckless/dmenu/dmenu_run delete mode 100644 user/.config/suckless/dmenu/drw.c delete mode 100644 user/.config/suckless/dmenu/drw.h delete mode 100644 user/.config/suckless/dmenu/patches/dmenu-fuzzymatch-4.9.diff delete mode 100644 user/.config/suckless/dmenu/patches/dmenu-highlight-20201211-fcdc159.diff delete mode 100644 user/.config/suckless/dmenu/patches/dmenu-mousesupport-5.2.diff delete mode 100644 user/.config/suckless/dmenu/patches/dmenu-mousesupport-motion-5.2.diff delete mode 100644 user/.config/suckless/dmenu/patches/dmenu-password-5.0.diff delete mode 100755 user/.config/suckless/dmenu/scripts/dmenu_drun delete mode 100755 user/.config/suckless/dmenu/scripts/dmenu_edit delete mode 100755 user/.config/suckless/dmenu/scripts/dmenu_mount delete mode 100755 user/.config/suckless/dmenu/scripts/dmenu_scrot delete mode 100755 user/.config/suckless/dmenu/scripts/dmenu_wall delete mode 100644 user/.config/suckless/dmenu/stest.1 delete mode 100644 user/.config/suckless/dmenu/stest.c delete mode 100644 user/.config/suckless/dmenu/util.c delete mode 100644 user/.config/suckless/dmenu/util.h create mode 100644 user/.config/suckless/dwl-bar/LICENSE create mode 100644 user/.config/suckless/dwl-bar/Makefile create mode 100644 user/.config/suckless/dwl-bar/README.md create mode 100644 user/.config/suckless/dwl-bar/dwl-bar.1 create mode 100644 user/.config/suckless/dwl-bar/patches/ipcv2.patch create mode 100644 user/.config/suckless/dwl-bar/protocols/dwl-ipc-unstable-v2.xml create mode 100644 user/.config/suckless/dwl-bar/protocols/wlr-layer-shell-unstable-v1.xml create mode 100644 user/.config/suckless/dwl-bar/src/bar.c create mode 100644 user/.config/suckless/dwl-bar/src/bar.h create mode 100644 user/.config/suckless/dwl-bar/src/config.def.h create mode 100644 user/.config/suckless/dwl-bar/src/event.c create mode 100644 user/.config/suckless/dwl-bar/src/event.h create mode 100644 user/.config/suckless/dwl-bar/src/input.c create mode 100644 user/.config/suckless/dwl-bar/src/input.h create mode 100644 user/.config/suckless/dwl-bar/src/log.c create mode 100644 user/.config/suckless/dwl-bar/src/log.h create mode 100644 user/.config/suckless/dwl-bar/src/main.c create mode 100644 user/.config/suckless/dwl-bar/src/main.h create mode 100644 user/.config/suckless/dwl-bar/src/render.c create mode 100644 user/.config/suckless/dwl-bar/src/render.h create mode 100644 user/.config/suckless/dwl-bar/src/shm.c create mode 100644 user/.config/suckless/dwl-bar/src/shm.h create mode 100644 user/.config/suckless/dwl-bar/src/user.c create mode 100644 user/.config/suckless/dwl-bar/src/user.h create mode 100644 user/.config/suckless/dwl-bar/src/util.c create mode 100644 user/.config/suckless/dwl-bar/src/util.h create mode 100644 user/.config/suckless/dwl/LICENSE create mode 100644 user/.config/suckless/dwl/LICENSE.dwm create mode 100644 user/.config/suckless/dwl/LICENSE.sway create mode 100644 user/.config/suckless/dwl/LICENSE.tinywl create mode 100644 user/.config/suckless/dwl/Makefile create mode 100644 user/.config/suckless/dwl/README.md create mode 100755 user/.config/suckless/dwl/bootstrap create mode 100644 user/.config/suckless/dwl/client.h create mode 100644 user/.config/suckless/dwl/config.def.h create mode 100644 user/.config/suckless/dwl/config.mk create mode 100644 user/.config/suckless/dwl/dwl-ipc-unstable-v2-protocol.c create mode 100644 user/.config/suckless/dwl/dwl.1 create mode 100644 user/.config/suckless/dwl/dwl.c create mode 100644 user/.config/suckless/dwl/dwl.c.orig create mode 100644 user/.config/suckless/dwl/dwl.desktop create mode 100644 user/.config/suckless/dwl/generate-keys.c create mode 100644 user/.config/suckless/dwl/keys.h create mode 100644 user/.config/suckless/dwl/patches/alwayscenter.patch create mode 100644 user/.config/suckless/dwl/patches/attachbottom.patch create mode 100644 user/.config/suckless/dwl/patches/autostart.patch create mode 100644 user/.config/suckless/dwl/patches/bottomstack.patch create mode 100644 user/.config/suckless/dwl/patches/centeredmaster.patch create mode 100644 user/.config/suckless/dwl/patches/float-border-color.patch create mode 100644 user/.config/suckless/dwl/patches/ipc-v2-fixed.patch create mode 100644 user/.config/suckless/dwl/patches/keycodes.patch create mode 100644 user/.config/suckless/dwl/patches/mouse-follows-focus.patch create mode 100644 user/.config/suckless/dwl/patches/movecenter.patch create mode 100644 user/.config/suckless/dwl/patches/movestack.patch create mode 100644 user/.config/suckless/dwl/patches/namedscratchpads.patch create mode 100644 user/.config/suckless/dwl/patches/pertag.patch create mode 100644 user/.config/suckless/dwl/patches/regexrules.patch create mode 100644 user/.config/suckless/dwl/patches/toggleKbLayout.patch create mode 100644 user/.config/suckless/dwl/patches/touchscreen.patch create mode 100644 user/.config/suckless/dwl/patches/unclutter.patch create mode 100644 user/.config/suckless/dwl/patches/uselessgaps.patch create mode 100644 user/.config/suckless/dwl/patches/zoomswap.patch create mode 100644 user/.config/suckless/dwl/protocols/dwl-ipc-unstable-v2.xml create mode 100644 user/.config/suckless/dwl/protocols/wlr-layer-shell-unstable-v1.xml rename user/.config/suckless/{dwm => dwl}/util.c (82%) create mode 100644 user/.config/suckless/dwl/util.h delete mode 100644 user/.config/suckless/dwm/Makefile delete mode 100755 user/.config/suckless/dwm/autostart delete mode 100644 user/.config/suckless/dwm/config.h delete mode 100644 user/.config/suckless/dwm/config.mk delete mode 100644 user/.config/suckless/dwm/dependencies.txt delete mode 100644 user/.config/suckless/dwm/drw.c delete mode 100644 user/.config/suckless/dwm/drw.h delete mode 100644 user/.config/suckless/dwm/dwm.1 delete mode 100644 user/.config/suckless/dwm/dwm.c delete mode 100644 user/.config/suckless/dwm/dwm.png delete mode 100644 user/.config/suckless/dwm/movestack.c delete mode 100644 user/.config/suckless/dwm/patches/dwm-alpha-20230401-348f655.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-alwayscenter-20200625-f04cac6.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-attachbottom-6.3.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-autostart-20161205-bb3bd6f.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-barpadding-6.2.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-movestack-20211115-a786211.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-pertag-20200914-61bb8b2.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-restartsig-20180523-6.2.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-scratchpads-20200414-728d397b.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-statuspadding-6.3.diff delete mode 100644 user/.config/suckless/dwm/patches/dwm-warp-6.2.diff delete mode 100644 user/.config/suckless/dwm/tcl.c delete mode 100644 user/.config/suckless/dwm/transient.c delete mode 100644 user/.config/suckless/dwm/util.h delete mode 100644 user/.config/suckless/dwmblocks/Makefile delete mode 100644 user/.config/suckless/dwmblocks/blocks.h delete mode 100644 user/.config/suckless/dwmblocks/dwmblocks.c delete mode 100755 user/.config/suckless/dwmblocks/scripts/block_layout delete mode 100644 user/.config/suckless/herbe/Makefile delete mode 100644 user/.config/suckless/herbe/config.h delete mode 100644 user/.config/suckless/herbe/herbe.c delete mode 100755 user/.config/suckless/herbe/notify-send delete mode 100644 user/.config/suckless/herbe/patches/19.diff delete mode 100644 user/.config/suckless/slock/Makefile delete mode 100644 user/.config/suckless/slock/arg.h delete mode 100644 user/.config/suckless/slock/config.h delete mode 100644 user/.config/suckless/slock/config.mk delete mode 100644 user/.config/suckless/slock/explicit_bzero.c delete mode 100644 user/.config/suckless/slock/lockscreen.jpg delete mode 100644 user/.config/suckless/slock/patchs/slock-background-image-20220318-1c5a538.diff delete mode 100644 user/.config/suckless/slock/patchs/slock-colormessage-20200210-35633d4.diff delete mode 100644 user/.config/suckless/slock/patchs/slock-pam_auth-20190207-35633d4.diff delete mode 100644 user/.config/suckless/slock/slock.1 delete mode 100644 user/.config/suckless/slock/slock.c delete mode 100644 user/.config/suckless/slock/util.h create mode 100644 user/.config/suckless/someblocks/CHANGELOG.md create mode 100644 user/.config/suckless/someblocks/LICENSE create mode 100644 user/.config/suckless/someblocks/Makefile create mode 100644 user/.config/suckless/someblocks/README.md create mode 100644 user/.config/suckless/someblocks/blocks.def.h rename user/.config/suckless/{dwmblocks => someblocks}/scripts/block_battery (84%) rename user/.config/suckless/{dwmblocks => someblocks}/scripts/block_brightness (92%) rename user/.config/suckless/{dwmblocks => someblocks}/scripts/block_clock (89%) rename user/.config/suckless/{dwmblocks => someblocks}/scripts/block_volume (70%) rename user/.config/suckless/{dwmblocks => someblocks}/scripts/block_wifi (86%) create mode 100644 user/.config/suckless/someblocks/someblocks.1 create mode 100644 user/.config/suckless/someblocks/someblocks.c delete mode 100644 user/.config/suckless/st/Makefile delete mode 100644 user/.config/suckless/st/arg.h delete mode 100644 user/.config/suckless/st/config.h delete mode 100644 user/.config/suckless/st/config.mk delete mode 100644 user/.config/suckless/st/hb.c delete mode 100644 user/.config/suckless/st/hb.h delete mode 100644 user/.config/suckless/st/patches/st-alpha-20220206-0.8.5.diff delete mode 100644 user/.config/suckless/st/patches/st-anysize-20220718-baa9357.diff delete mode 100644 user/.config/suckless/st/patches/st-blinking_cursor-20211116-2f6e597.diff delete mode 100644 user/.config/suckless/st/patches/st-bold-is-not-bright-20190127-3be4cf1.diff delete mode 100644 user/.config/suckless/st/patches/st-desktopentry-0.8.5.diff delete mode 100644 user/.config/suckless/st/patches/st-font2-0.8.5.diff delete mode 100644 user/.config/suckless/st/patches/st-gruvbox-dark-0.8.5.diff delete mode 100644 user/.config/suckless/st/patches/st-ligatures-alpha-scrollback-20230105-0.9.diff delete mode 100644 user/.config/suckless/st/patches/st-scrollback-0.8.5.diff delete mode 100644 user/.config/suckless/st/patches/st-scrollback-mouse-20220127-2c5edf2.diff delete mode 100644 user/.config/suckless/st/patches/st-scrollback-mouse-altscreen-20220127-2c5edf2.diff delete mode 100644 user/.config/suckless/st/patches/st-undercurl-0.8.4-20210822.diff delete mode 100644 user/.config/suckless/st/patches/st-vertcenter-20180320-6ac8c8a.diff delete mode 100644 user/.config/suckless/st/patches/st-w3m-0.8.3.diff delete mode 100644 user/.config/suckless/st/patches/st-workingdir-20200317-51e19ea.diff delete mode 100644 user/.config/suckless/st/st.1 delete mode 100644 user/.config/suckless/st/st.c delete mode 100644 user/.config/suckless/st/st.desktop delete mode 100644 user/.config/suckless/st/st.h delete mode 100644 user/.config/suckless/st/st.info delete mode 100644 user/.config/suckless/st/win.h delete mode 100644 user/.config/suckless/st/x.c delete mode 100644 user/.config/tut/config.toml delete mode 100644 user/.config/vifm/colors/gruvbox.vifm delete mode 100644 user/.config/vifm/scripts/README delete mode 100755 user/.config/vifm/scripts/vifmimg delete mode 100755 user/.config/vifm/scripts/vifmrun delete mode 100644 user/.config/vifm/vifm-help.txt delete mode 100644 user/.config/vifm/vifmrc create mode 100644 user/.config/wezterm/wezterm.lua create mode 100644 user/.config/wofi/config rename user/.config/{suckless/dmenu/scripts/dmenu_blue => wofi/scripts/rs_blue} (71%) create mode 100755 user/.config/wofi/scripts/rs_emoji rename user/.config/{suckless/dmenu/scripts/dmenu_power => wofi/scripts/rs_power} (57%) create mode 100755 user/.config/wofi/scripts/rs_scrot create mode 100755 user/.config/wofi/scripts/rs_wall rename user/.config/{suckless/dmenu/scripts/dmenu_wifi => wofi/scripts/rs_wifi} (88%) create mode 100644 user/.config/wofi/style.css create mode 100755 user/.winitrc delete mode 100755 user/.xinitrc diff --git a/README.md b/README.md index 6d671b9fe..bc897eccf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ -# Drake's Dotfiles (Suckless version) +# Drake's Dotfiles (Void Linux - DWL Compositor) This is just a personal repository where i store all my dotfiles, you're free clone them and edit them as you wish. Part of this work was based on other people's dotfiles (Distrotube for example), and it may contain scripts or binaries that they made or modify. -# Dependencies -``` sh -paru -S --needed bat eza feh fzf jq ripgrep maim slop cmus vifm ueberzugpp unclutter-xfixes-git lxsession picom xorg-setxkbmap xorg-xdpyinfo xdotool xorg-xinit xorg-xprop xorg-xev xorg-xrandr arandr yt-dlp ani-cli-git ytfzf-git pulsemixer pamixer alsa-utils ttf-nerd-fonts-symbols ttf-nerd-fonts-symbols-mono ttf-mononoki-nerd zathura zathura-pdf-poppler zathura-cb kvantum gruvbox-dark-gtk gruvbox-dark-icons-gtk xcursor-simp1e-gruvbox-dark j4-dmenu-desktop ffmpegthumbnailer ffmpeg btop mpv gtk-engine-murrine -``` +This is a rice made specifically for Void Linux and it uses the dwl wayland +compositor. diff --git a/system/boot/loader/entries/arch.conf b/system/boot/loader/entries/arch.conf deleted file mode 100755 index ccf944d6b..000000000 --- a/system/boot/loader/entries/arch.conf +++ /dev/null @@ -1,5 +0,0 @@ -title Arch Linux -linux /vmlinuz-linux -initrd /intel-ucode.img -initrd /initramfs-linux.img -options rd.luks.name=[uuid]=[lvm-name] root=/dev/[vg-name]/root rw quiet diff --git a/system/etc/X11/xorg.conf.d/40-libinput.conf b/system/etc/X11/xorg.conf.d/40-libinput.conf deleted file mode 100644 index f2116449b..000000000 --- a/system/etc/X11/xorg.conf.d/40-libinput.conf +++ /dev/null @@ -1,42 +0,0 @@ -# Match on all types of devices but joysticks -# -# If you want to configure your devices, do not copy this file. -# Instead, use a config snippet that contains something like this: -# -# Section "InputClass" -# Identifier "something or other" -# MatchDriver "libinput" -# -# MatchIsTouchpad "on" -# ... other Match directives ... -# Option "someoption" "value" -# EndSection -# -# This applies the option any libinput device also matched by the other -# directives. See the xorg.conf(5) man page for more info on -# matching devices. - -Section "InputClass" - Identifier "libinput pointer catchall" - MatchIsPointer "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection - -Section "InputClass" - Identifier "libinput keyboard catchall" - MatchIsKeyboard "on" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection - -Section "InputClass" - Identifier "libinput touchpad catchall" - MatchIsTouchpad "on" - MatchDevicePath "/dev/input/event*" - Option "Tapping" "on" - Option "ClickMethod" "clickfinger" - Option "NaturalScrolling" "true" - Driver "libinput" -EndSection - diff --git a/system/etc/mkinitcpio.conf b/system/etc/mkinitcpio.conf deleted file mode 100644 index f5832b51b..000000000 --- a/system/etc/mkinitcpio.conf +++ /dev/null @@ -1,73 +0,0 @@ -# vim:set ft=sh -# MODULES -# The following modules are loaded before any boot hooks are -# run. Advanced users may wish to specify all system modules -# in this array. For instance: -# MODULES=(usbhid xhci_hcd) -MODULES=(i915) - -# BINARIES -# This setting includes any additional binaries a given user may -# wish into the CPIO image. This is run last, so it may be used to -# override the actual binaries included by a given hook -# BINARIES are dependency parsed, so you may safely ignore libraries -BINARIES=() - -# FILES -# This setting is similar to BINARIES above, however, files are added -# as-is and are not parsed in any way. This is useful for config files. -FILES=() - -# HOOKS -# This is the most important setting in this file. The HOOKS control the -# modules and scripts added to the image, and what happens at boot time. -# Order is important, and it is recommended that you do not change the -# order in which HOOKS are added. Run 'mkinitcpio -H ' for -# help on a given hook. -# 'base' is _required_ unless you know precisely what you are doing. -# 'udev' is _required_ in order to automatically load modules -# 'filesystems' is _required_ unless you specify your fs modules in MODULES -# Examples: -## This setup specifies all modules in the MODULES setting above. -## No RAID, lvm2, or encrypted root is needed. -# HOOKS=(base) -# -## This setup will autodetect all modules for your system and should -## work as a sane default -# HOOKS=(base udev autodetect modconf block filesystems fsck) -# -## This setup will generate a 'full' image which supports most systems. -## No autodetection is done. -# HOOKS=(base udev modconf block filesystems fsck) -# -## This setup assembles a mdadm array with an encrypted root file system. -## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices. -# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck) -# -## This setup loads an lvm2 volume group. -# HOOKS=(base udev modconf block lvm2 filesystems fsck) -# -## NOTE: If you have /usr on a separate partition, you MUST include the -# usr and fsck hooks. -HOOKS=(base systemd autodetect keyboard modconf block sd-encrypt kms keymap consolefont lvm2 filesystems fsck) - -# COMPRESSION -# Use this to compress the initramfs image. By default, zstd compression -# is used. Use 'cat' to create an uncompressed image. -#COMPRESSION="zstd" -#COMPRESSION="gzip" -#COMPRESSION="bzip2" -#COMPRESSION="lzma" -#COMPRESSION="xz" -#COMPRESSION="lzop" -#COMPRESSION="lz4" - -# COMPRESSION_OPTIONS -# Additional options for the compressor -#COMPRESSION_OPTIONS=() - -# MODULES_DECOMPRESS -# Decompress kernel modules during initramfs creation. -# Enable to speedup boot process, disable to save RAM -# during early userspace. Switch (yes/no). -#MODULES_DECOMPRESS="yes" diff --git a/system/etc/sv/runsvdir-drk/run b/system/etc/sv/runsvdir-drk/run new file mode 100755 index 000000000..ffd45de53 --- /dev/null +++ b/system/etc/sv/runsvdir-drk/run @@ -0,0 +1,14 @@ +#!/bin/sh + +export USER="drk" +export HOME="/home/$USER" +export XDG_RUNTIME_DIR="/run/user/$(id -u $USER)" +mkdir $XDG_RUNTIME_DIR +chown $USER:$USER $XDG_RUNTIME_DIR + +groups="$(id -Gn "$USER" | tr ' ' ':')" +svdir="$HOME/.config/services" +mkdir -p "$svdir" +chown $USER:$USER "$svdir" + +exec chpst -u "$USER:$groups" runsvdir "$svdir" diff --git a/user/.bash_profile b/user/.bash_profile index 4f175f140..573d9cd9f 100644 --- a/user/.bash_profile +++ b/user/.bash_profile @@ -9,28 +9,31 @@ # starting xsession if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ] then - startx -- vt1 -keeptty &>/dev/null + sh "$HOME/.winitrc" logout fi # environment variables -export EDITOR="~/.local/bin/lvim" -export VISUAL="~/.local/bin/neovide.AppImage --neovim-bin $EDITOR" -export BROWSER="qutebrowser" +export EDITOR="$HOME/.local/bin/lvim" +export VISUAL="$HOME/.local/bin/lvim" +export BROWSER="firefox" export VIEWER="zathura" +export WM=dwl + +# home folders +export XDG_DESKTOP_DIR="$HOME/Desktop" +export XDG_DOWNLOAD_DIR="$HOME/Downloads" +export XDG_TEMPLATES_DIR="$HOME/Templates" +export XDG_PUBLICSHARE_DIR="$HOME/Public" +export XDG_DOCUMENTS_DIR="$HOME/Documents" +export XDG_MUSIC_DIR="$HOME/Music" +export XDG_PICTURES_DIR="$HOME/Pictures" +export XDG_VIDEOS_DIR="$HOME/Videos" # clean home export XDG_DATA_HOME="$HOME/.local/share" export XDG_CACHE_HOME="$HOME/.cache" export XDG_CONFIG_HOME="$HOME/.config" -export XDG_DESKTOP_DIR="$HOME/var/desktop" -export XDG_DOWNLOAD_DIR="$HOME/var/downloads" -export XDG_TEMPLATES_DIR="$HOME/media/documents/templates" -export XDG_PUBLICSHARE_DIR="$HOME/var/public" -export XDG_DOCUMENTS_DIR="$HOME/media/documents" -export XDG_MUSIC_DIR="$HOME/media/music" -export XDG_PICTURES_DIR="$HOME/media/pictures" -export XDG_VIDEOS_DIR="$HOME/media/videos" export W3M_DIR="$XDG_DATA_HOME/w3m" export GTK2_RC_FILES="$HOME/.config/gtk-2.0/gtkrc-2.0" export WGETRC="$HOME/.config/wget/wgetrc" diff --git a/user/.bashrc b/user/.bashrc index 26ee7d03a..d5b076954 100644 --- a/user/.bashrc +++ b/user/.bashrc @@ -10,7 +10,8 @@ export TERM="xterm-256color" # getting proper colors export HISTCONTROL=ignoredups:erasedups # no duplicate entries ### "bat" as manpager -export MANPAGER="sh -c 'col -bx | bat -l man -p'" +#export MANPAGER="sh -c 'col -bx | bat -p -l man'" +export PAGER="bat -p" # use bash-completion, if available [[ $PS1 && -f /usr/share/bash-completion/bash_completion ]] && \ @@ -289,3 +290,4 @@ function parse_git_dirty { } export PS1="[\[\e[31m\]\u\[\e[m\]\[\e[35m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]] [\[\e[33m\]\W\[\e[m\]\[\e[34m\]\`parse_git_branch\`\[\e[m\]] ๓ฑžช " +if [ -n "$RANGER_LEVEL" ]; then export PS1="[ranger]$PS1"; fi diff --git a/user/.config/dunst/critical.png b/user/.config/dunst/critical.png new file mode 100644 index 0000000000000000000000000000000000000000..b36d5b22a20e64ebccc255f41e6a4fc5114c7482 GIT binary patch literal 35927 zcmV*aKvlnqP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>vmK-;-rT=3Uy#&m|asUHxPVe9?zrTw}QWQy* zr0Pc&GgFZf?tsDU4uE;N^FROhy8pwU5o2_@v|dN8o5)kiRZ8&gX|Zdi!yx>+3@H^~N`puYdXbus+}P-|kN@G@`T%H%c*{6q0{m^JfI< z^KbGm@HM6$^;3O6C-=U^uZt0oKTYr3ckh1;(4T_*?I-th^w0brqdx^d&aZc*pJG|R zty=y4FGBh0_4NJz@y8pd?<0zT{>An&{xY4ffA{Ww@A=Gb=1N5CS4O>Hhi{kRjf;?{ z_p!>~#=pYP?fo76?S6V=$+tJZ_-kQ=$f{fya@b*p8_xS~!5CtWCpNyvXfeIldTMb* zdn=apH{96LNIP{F%i?h<@pAk=mhkR7-u*0e?z{tUje&~=t?ys`b^qy?|K_i|*A$|l zV4lwsGp-kKhM|?ySKh^fg!{E_>EOKO`2Z$_kbj=FSACU!O~?68^}o^wv4? zzQXrU2?f{o*98a>_bv=3Bv!!JkV>e*w-{Rp#IdtLlaa@i<6;FuDRDE%m{Y3JwMfZu zZ$8t)dv7eUM!gI+u@Hr7YOKvjlf}xpkUuSVa%h%Raw(;jR=O*r%$jPhrPkW2KyJ3w zax1O2)_NOl_SADPz4q37AAOEE5*S!U9c}b6#+=bjZZx^p8t+(BN$DQ9-?Q2zk z`TH+cEqtw7d@H5*wePFOtFE-d1*7(VelvUX##_xX41Py4t=YEo!KbgRHPTY)oJK5%Sm8N6xA3#7EOUEJOl- z-6-uO+gZc$T;TXPhQGG@VRjIHwY!1u0~v6Eyi%^D3RE6_3nK>jdRtpAkoGrQpSQPW zDNVbq1b4Y7#uXuOt2dJ9v6c;T&r!?iq-1Hkj1v^toOW>ybb>`!+j+*pBAhUYBFPtS zjm&aVbRl%}b|3?i-rBh>SSd;;{d^0FOE-@mISiLo3zNP__X@QbuDhLItJB1b-QOYqy7Bttm zimQ#}v)V3+w$9iT@}=NMXql+hy{lQP1d3!-h_XLv?7c!u`^IhIjuy&I&Pc>$H{})> z2uh1oCbh#hX}NiNvNld6jG^96mabAElGf)wr3Ui1-kl#po<=?7Qa{UX*P{X`{mJq& z+negDOm!@z;f>^NKimAte7v-D(qgjLZwG#q1qD&%x=M|tx@fu`bdItEUh~a z$k#%H8{4VDCf5}|+tqXB|p<;iO$r_}@H0h-3VgjirK07?m%Yc|0`hF>o^ z)aKp>QG&>cvLiWr@vZybN$SbUBRJ14h;{CE6YujIhC%VVvq>JMO5PwqoJDg3FWc~Y znxBO{E*4=k=wMzr1ZWQj-MliBAc{bBwCa|I2m1C4=@6=m=%%)geuDp?ntEzVr?BE{ zEj(TGw!smKd+0M8ifCuKLlSl>lI58bf-mshzKl*hwg_`h1GHcekP)hxM9viHv{_+6 z6-r5DQgt4gKq;NN;Ji98a-Be-4F+Rd?VMr9YD`BE(%S`EXFW^VAJ^^m9$1k@aw}DX z3n$64B&ROH8E0K$eDfPPFhT8*;vpQH;LxTTS&eI*B|&#FnQ?KDg!*KFf@m5L#!9iS zSp%IyH;7E-X?Ikh7P&Y4IaFFYwJM8Sd`##zr4G9v6naPQK;C(TgIdGA z2a->rrX)KcP7SXNL&rm{?tIAX5>}!F8i~E}RRmtt7X8h_(bMZ9=tQG1_IcJOSwYNR zbF9R)1j-=#?(SIiJc@usx!!-les_FsQ5#N!ld0T<)Q z9aI67GAH>_5E?meO4U!m{y?T^ClifTd6s>TqyUoyeBr@_HKVvl2uI+mlorwwdNAA3 zNY{}u2BhbTh^r}O%w-XcNVU2VZK;zJK*IoJQ=B*@2loK#{YK)+Ey#DmhZv#)D6yUq zo~4Ze%Vx9GYRQA8Lx#k~+8(e6F?O1{sYFi#+EsvWi8e1BI`WOElnKN5rLqEZsoF?T z0H~4CaJC_; zxGDu^TQak;P6ZO!8P|24fh`Clk^sgXvGxHOX6fHfuKAKXY5~wfMR%=30u8xzNdjg} zw#+4B>blXPCVy)}rMAh)57Nh<3UE)5YzLOAqH@5j0Ng06XA4QYdEFO)1p$SH&kol~ zS=V{ERiM(D!+aDK0r(uL60S-Tl0(EEZfOzeesa}q5%c6;<%Se3s#2Q*k@v5S=Jd}2 zP5&>yyTABFMD@U|;h|qAjB$%RttD+X;BfGJm9QXFaWA_k2hN~%sYS%G#36bE(VI@g z@-3(n(%89CQ(*HTi;$%q9{?|HzF{>3EXD1dc50B%=obhR4oiY|Y6a?Namj`xddin@ zG+Z585P$7EnS|jX+fy$%&w$VZA%v@*agE&(ejs*~#DmMD;dIhk0n9vyprX#?o5*FD zFP~Za!*0x^E5>9udazUf0jeT5$;OG|j~^Ce9pgsaM?O%uHr-ap%rBJOsz=PJ=o3t9 zs2Dsq5QfCz*ZAs%=A+JcK!uU$fXGvn-#&*SC$ST0^+87$WvG>1`&msnE%Hzj`4 z@wdP(2tv8aLn4I`=R=o$^*8r0GK`!xB>rZZs*43#)F@(4cmOWMB~k*LhHY;G(h3@| z3Ka99=80m5%KgDG2&Q)7J5bl1whc?c^3BnuRw*g?dgEk57))4}Xi)DRs{^^qm;?w> z@k4A^+|=db6Bfama%l!15R8;vMB$H8K%M| zt#y*pCrsF2=7X!bm>#fkWibO8WfZ(=G~By{GI8z5C$a-J;reizgA#xUboG(Rxj+QB z&Y&o&GE%d^0mX=i1&%;5c!H4-4Rja60GvQD96sdGr^r-oIxI{?>pk8A+VC>Q4jRX= zV0Sx447dGKZITX$)XZ{-NxKQ4(86W`RLD7`98MA|czU1^?|fDb3nmgmIAH4wzg<+N zC(+^Ug-SLgO2-gw@9=Mlw?Pl+#!AjEftTF6$J6juZTf;SD8GejF}@FdziCL?AYn=4 z>y3nLssh*t^^7hpSScx;+RMe30Z2I#R)4T6ETg*R-DN z>B=Fgj-i?oHVGmk4M`~_iMB)V)e}7JU+7i8NfY<)wG6(2V3DTa0-|@;C^&bGBnp`K zlBCqJ7bJi3!beatz@&X?cSdT?EKkr&R9p5EHhQ>Cd+#i)1Kl96(E1+mHQ@ul&@o^S zl9?3&L@E|U;_xC;C>1b+vO#z=lq0*0sYu;va}sjU)&vN=$+FZ)B&;qmYl)%crLY0z zsH?24F!BzCgQ~)XFy@wU6xb}U6ixEKZK2axCeI2FY`x>>WypEThL z@)f)S8j(CLF2vG=CF*1{$x6) zYLb$e_ZS{QPFXBNA^_M>fG8o7F5|$nyuH0>c|Z!(Lo?wTVQe@MFoX)>A_NM{-wX2m zEEW_e2cm*({U|38GQd3YJkHOC5DBdPp+-J1tq-9va>P@wr#KNdwlh-t5$0cT;~R;% z5f|SBqPh|^0+z@`2A{JH7@vz5s&-HftWa_Y$j{Crh769t%f3w~ZYo6_+d|NSIoR@? z#Bf`i#r#s?Lf zgRnQ3+IS!49gSybcEFcZ#QU#&78+9|_x3t}LMrzUA+6^FYH~MJ95R{EK`2|BDGVKz zfL%uw#~kI>^lborxR+3f^R=RVlB{*qU`F@k5#DSp8B8K>AQnto4<||u-%}gaA-9T#C zZY}9hIFVx484-!pT7KJxOWy7vpq2&gO*#ny*!pM~Cw9a9z!tLL#{!j2CSdU(_H$dY zXT@~^SO*Zv8*7R`01cdC@6$cVKe3MR6x3x@n<;a7CT)>{pn-MplETQ^AplG(C`S4& zrA2JAqEKV!W%zoNUA;z1lC|&=I&X3y-HY zPsUn0M8@WjLYUnC&P%|8OiC7L9nG_%*a0^|1;F;0+dk`M`KcKu2gb0Tw#j}#AE61= zA=?)ayuk%TVTV8XAyn*oz7XGXNYq=O5;E-r z|A*tUzc^nbxQlQjW3cFzB?SFIBJx!y4v>!E56)PS!H2xw&-?3{nQL zH+Jz##A7q@Yeyaolt$QtNt^w=)=dFvtOeYPuZi` zfjLtdf;J#>;jal0Al@cf(QC&aA~^0AK~`WIDSKrnx`3})dNs&oX-P!~{TjQi=Qb`jbsoo*Vi~0^GFBSxxfkJd>X*!1z|518O zVMcIhYW=mP0@^ZZs&ak=VjIqyJpNlxARCu9;?DTk%`^$Hr#J#di_0RrQQs8%*;4Yn zO-D>!d!4>#sXJ*ae+RuP{j_l|L@r6g)Dn;v}c=2(o zV2Qg?Nw}tTwYxEN;-}p}RtSYp%1npG8~>m?q+x|IgjvTcM=B^J~~DYLvScs0WkKCV+R4^>_sm4j;!+93k5$Amht?Oj`An`L`simMyi5+{of zLRFlNh*p~(@`F`;8<6U(G+(q`r-Q_z!;0B_b6ZCzC9sfXcgz^lT=RYWw+gDN_L97q?G3@~!+`Y5RSsOo_a0aLIPL>iPW31H9fDHj8rqgxgD}qqFt3BlTPi-}yz#{ZN@ z_&8;9MOtXH8c|gi-aKgY92pf4{KM$>I%Ev0Ab0KFq5yHb;8j6Oo$a(~h|jJlZ}Url zaJ)ABV-^NBo#g|K`{3?&k)~F6kBs21+#7`dZ1|cG*aJF<)(f-EU z<&dF7_+Y8)7rg^sKY2X&eo!kUfN&;8r)LUA?Nn%~@dR14pUN?0chK%fCzPmj z5)Z+len=>YRH}w!!KQffAmdn8jRSo+u*Xqn**h$>Z&jzCzZVG(Z*9`0NgzS3Xvke& z=@?da0bh_R!cqO>Uc1b%EfnTtHQzP@1(3NXZhZk-k!cR8AG`<#vLZumX&(kpqk-a` zKvXzH2Rj6{srh4z+2pxbW3pS^1T>-Yt~P=}$P(u$gaG=ZSV(H#qz=B=`Hyi1?^U)V zD#2WE3vMHj@IWW#r!R^5KxW@8ZlNHUBH0tQRkASEcC=ey#2E91v;ceL3T-LOGTsY~ zyU_Wc4^J~?9 zOw;2mI&OejKk?~wSz}(be-@Y;D|~` zy{oCe`=pbY)1qVmR2;Bw#6*4Slu6(3z&Gm*`cgM3jscr%*AUN%hYxGb0Mft1oM7q( z*O}#dY805zE;9Ou0(A9^$g=Bz1{rDUDDNK|2;E6W?q>sGXtgQf30NedPE$W1f*uE? zos{G(27p36vKO3PLSbU!Q4;4U*L~ALp0=!&eTkA$OGJrLN9-8j{@Q{8e}Ed9oUFaW zlQ7W-Y!DdCbVRO@c@)-IP}W2uta~j zdi8|p)N!H7sRl?W5Bv;{(ttZ1@$wlWByzv+$da$>lSD(lMkAmY-mDQJ^O_*Lj$@le zt}t{ynAX?6y1b43t{cZaS*Av-rM6g|FQL1rEdX$7(Kf;oQ;OzNha_uoL9&f=(~->- zYJe5RSBI@qCtYhnP0d*y(rT&v$Wo%cH4Kpj5&A&oEZTilTlLh@KbbwFsb}<(p+|dQ z(9q79p9+KSTN1kEzJ`4PKi5%1#Q>iutgmu{sprn zb5L*nwu{`CZoepw;3 z!$F9HQqU4;01L%N@eZB!z^?E&{!pj#=#+Y@=D9!{N2s6miS z{_2%ye)%`2C6z)!t)R4$9&-5{*{i}Qyav<)HRzQ6OcX?3Yn0MAWCu2cG)37WWy$-B z&7QB@EO#{@UdWOx2oQ>^t#_{jR~A`&PxJMl!P9EP!e|(F7j}ldO3-s-Q`uAT_{cuc z0>lk6?ajfQS|y5Am&-6(*D;u%+#1%QE4*20F(@I@H5z(M=#6R4x-8k{;g!7w7;C9!-)?@Uu7MeNr0V)~0>R*9Ue z(`O1fswHNrCG{QOBj=|(Vo&(9*QurpwNX<7dh|q(zLGAWjJBvG`A?5}jHZ{t{6GLi zi#n(q0{%G6mvr|axwLyN1C8ej+Ne{PK9CDHabYl! z`9K94Sx;a_sPMq5l<`z}@qt#=?1J9HeL2#?qrL=VIO1Wqoo3UY{0+smSP+mar8Dh?&1XEL?dqjpQg z3WNpIgoX9N8~m`(%!IqX>cHQZH=_y>6Nb-fReOpWxq8W}b`SOJ8C9ke zX&7$l`6L1rdXmj56#e`Xx^kS;{x)in$-kp$HC5c zgUs%la7@}z@0o&1v&YvsDnxm>Mj4v6>X#0O0~{kKMJ>IDEiSrxnOY3G4y5Y)-P1nB7>S{A& z1S%A#U1=%t@!Eff8ih(jdYOoToYxj{)_y;t3xw#;8mb4&gSJT>pHSZo!^wYb#-axC zp(h;XR^y`7p{YX>ouuadgL%WQS0qy~)Z@@*fCsQM!mLwxPBT_ZaHfu)jKuh>#ZFCr zTMv{92Tn6FVM~=fU|C=k@FP&6C?9caK8_a(SI7VA30wdLKLatSJ2S$T45(S^O~+YH z4z+)6*kG%@ir-*8~mZbv=})yuDe^NE4-rn3_=jt~>Z8U;l@{MIr>nD0(l3$BudTdkYu%)bH_|MrH%G&K z?Qlvh(2_!-D*drwcGuv}+|&JT0z~ZV`hu5thp+3)h)}6SpF}_~+1JFnn&JQb#L`yl z8JwT=4C-g>?l*%EUpLV`bcfIN0|`Rz{1lw;BX@ru`foz>mx0m$55XU!c0UaJkI?)a z`o9j%_ffmAVW)73Ymo>kR-u-u3^Xu3h zFQ&qvo3}6<<_^D!>xdYY;dKg(XViFu%-32K?TCN?^gF&#y{LLFYMFNhTHRU5I#Eoq zAl94CUi2`IPPLJMsmL+v;a8v@k+`{}Hox^Sxab8*dKMSrW<*kt(T6_O2dzeITopV~ ziOv(S=r$}75&{cc)H8x$l;CMzkGP^0m)jsM!V5F7hx>m_uzfDqBoQtE00D(*LqkwW zLqi~Na&Km7Y-Iodc$|HaJxIe)6opS)OGPRUb`a^1p*mR*E25iLp$HX1tfkB}f)O&;^Mfxh}i>#<}FMpJzslY-XM~LM)WJSngt0HdNwC;+Udp zl<&{EtZ?4qtXAu+eNXkM+H?_h|{i-Vj@H5Ne}<9;}^*# zldA$ojs?`9LUR1zfAD*@W-&40CWVtg@Wr-2Mu5;R&}!KB_pxoaPJqBOaHVzpwI(qA zNqVEB#g2f1ZQ$a%qse=~ba+AOJ~3K~#9!?7exIZdYCB z`}wW4r+2F9%qJ)FKqd%7AOr#=i~$4%%n=C?KthBNW<(SW5gSC?*|u9Q-9FgEwUfSA zz1@%3r?nfk6)t^aKi5ZFyTwKYfrR7?HNC^$d#&I7W3OH3&5`6BtU9SWRqLDQGWXY0Ui?tREBHFcbcJ26!j10-%rri8R)ZSM=Gy6GMzB z?yrbQKoRTXAOKaZ5G2FioFJE{h)ibYMyhk$S!mYh`%#=k7C?eui z@TyubGJY*^5Lgy)0%hZNkpi`Xk>+(*iNEzQdwU|1hGNE($;SZE3W^p`Jb)rj%Mv=@ zAion%t=Ulf(^@?ykWoUDmd^l}V}5X1>wh~{Ka|nb2l+ruv1KD#KoJqA<%YclC}>je zj)s7000E~B>3D6brJX{z#J{;EsSwOARn<4F70D+e5>Ujc$;SXs1YQS>fmC3m(4BIj z48aYfi47Tnk%uRW$gQgCg4JWgdlum}x?qujA|f6g!D4wuuztG0V)&MCEudfpO#=D2 zsqcBH8}Np`(k{#$~2-elk@pMI_0P|5M=!3Uh76a|k*+1uLg+xA1^G zh5pmN$kNfqtU_a@bVRg(BA^Knx31CZ)YmL zF9FtKLJ^UGB6hYF+$tRwfru)apz;S4=4c8IE1IBlqMUj>#+nNj zETY4}A)p)FEjwlT*wA`mIX%4}Pm?7}fMQJj)bAUeGf-~%%iUb{#$HBjffUdB%HQ7x!ntgX$l70fU}+2Ctjcq zaiO;G@KkW2CTJO$34h)WB(V}YA`;LJhoT-qKE{pasWRA;ARkTf@YKpymhhAHx* zIg;y@CJQ!Ql-LqsEL4mH6tP2aDZ2)D^EvnD4BsCroIAAL?m8~DB%4fFa#XISN{16h zb&YW>XFq-$^$*^%^7}>lce|*^E3RgujJ$GeCQZgAC;G%(h#iSSI>g`p3tXCoPWg7~ zh7CPqNf5P@)`C4JmaJA7hmE5=LTc!a?1{kG=Ic_3snJ z%0wg&0}vlE{wLm~XaPlRQ#^~$1HHCf|BAAI+`*8(O%BrgWt_V z?fd-KkHd_mo6@(=B^^nqjcY2WY0~vJ5KlksyL^ayKT~4&ZB{IhPZG%|5>Ui8$LIO# zxJ!DyM_(4=YARRdYlu z$@a~%|2ICw@Z|UT;xBP=Y9Hu=U9Mc$S58c@s#>=z7g!9bd?RoSc>AWeHKlcJPRG~X&@j`*RwYD6O-0`q2n^2`SW(Mc;P-~zt#I4elgZEno-h` z$yKG98`idNBs3OQ8eA~}E&y&0u3Fn4=BBNph)6&Y+Y}Z4t$}a`!TM=M<`qz(Gf4{; z(k^2moi`ZwnRl#-lKnmW>|5xI85tnSI`j$i!e|1~sF+*Rjt;bZ;IfA<5}d1|||vM_XoW)zAfnivF&^#)0;)!DpIO_3@=F705x zS5cHl%#@EQ+DJeVXFFPpVnQtdhxsSn|G*JD#(&^cKl|`9i)zL_sVB>YjJjX^XKN~m zkBS#RjXm?TtC`dz^`-b~jMTM=N9)GG@(JKwMX3$pX^q}-fWhu?y;VrTM*@lj6mgc5 zkBW#Dk?iw)b$pns(|h^m>QD03*8u08>gR{di^SjK7 z8HKUrP0NS%n3TkOoOh`YR?dpT+!2P~6Rfs8rr>vog&q%?o#BS5sv^iW?C)AuyMM;& z7lT;XV?O9rZ%@JM!w+9F@2~jMr}?(pBc6CCOMm^%?jl%MIJ49tgALHc}u%A#_LsBX>Q4nKLQ6wR=G!@b=?8W{fleb3li55`A_97t*B#M^v zbk194^1C#?PjMN&o^~JJ&(Q=_)EZ@q}Uh{Eue_A5J_9uw?g?=h1rk}KV_Vy=SY9*ZEGWWzHNN! zHXfKA&@<3x5%~Q$#L}f#^s;5od>sl{~6` zjv)8RVT&LY^_y&v#IT4O#2UoU^|cse+B5WR)#(;?uXeMZ<~{Zf9=Ml->%G3;{2<2+ zlG0n5LEWmU=oA@7$sCPd(3nOqXk=hEMV2zm$C1VYnwI5=Izf?uBDNO!Sc1fI`+$bD zyKM^)Z{c3wCA-d}FA2R_O7l7aU$~mGu5n5=q!t}7F-(QDlRmh(5!ZPBKKAUJug9{Q zEG9;0Yvtk5sL+z7ajQ8U_M#8dRIQ>H&62#dbs?vU6D782L;{M~QXbZtvS2%}%d4tW z)%qqb%mGT=yA<|J-SZmARH(*dsht<6OblMsj0f5`WeBDPz9qW;ypgNWfzRmHw3bAQyDQ6U9#ff4CRZi;o^J%YN zS`AZH&D6D}iarIneyTTYji5Loa262>C}NXcu$GKkizRJcu$#CrFY)gNMhd;~;F=RI z7}jGf*cxytH64!G`#!w!eOO=o8S)O~7C-6Fy1x3N&2+V+dqhu+`x(*%rN3W9x+0Rb zgd4^Ox#)^T0*crI9CQ*PJ;DY1JYW4TMXw8lzy1Oj&-Lk! z9%iXSola>5Sx#sN*>KJ62ndCWQ^e>`+LsgH>A>6SBFUfgkN{jx??8>-E~g=B>Qhr$ z=FPr2?SJ^YIrs6p=6Ai6%dXtV0TnS`L@KPS5LNMFtQSBsiZ&KhDeQ9Sd(UBJSI`S8 z4Hs;eq4#S)ym>= zKKXpc1+`=(22G__yjrNKl;$&dnl$|a&HS?O6Ol`aQ!^p~MQkoYV`ibM;}ZW)U=Uod z6+Mmnd+YQ0(q?~#_kJgn96w31T~X@=N)?Q!Cd?>niFT1@mRJwCJ*p)}0*W~EE|yHc zhQFIB`$rU=%uD)QgFe+j9V9I>fwIbanPoni9jIB@t9z<+&Q)eMS(wrM++1fq^u22Z zew&8tFK5@>MI2Z%U8hjaq%0&88H%V0g_9|u7E%jUg4h&!%^@i+Yu&I`u0upjbj>0G zMQogfqwQ;WxDrmvZr#B-ogx11dZInSYZE&uq;yNl#4aymhZ9z?$8zgash3Fp=oi^C zy;Q&QHXg|R*ApcJWLG?Crhf<*;jJ>k&|qkzBZsSs5)Y;}91{NryCieZm8SVBswT*NMn8fog61 zP$25KZ6X0hY=HIiEgq(}4Pjw||8bgl&)ih}r|pwcPiZ_VVyTUDuFtshsW)+8tA5_! z{{-ehF_|%Ale)|kES~l=n?S5?N=sUSy9gRcamPdgia1kdP)IvZ=_9{RVMgGaKoQ(8 z2@_9^LONk}LZ*JWoQ=Eq{;O|VTHVT@aiLG|J!4|1)oMi4=|)k;IOIgMrX z9N^{QEnEoJON;}Z1qW=jRL{CtP%FxQ5cvHRNfmN|)$l-?HcKQh%5&|F1>?v2+$_h+ zqxY2;Z1vCS6?f?H?uQ-Ezp;MSE=gCRCTzGR#CKo zBGySd?TN0a-ojM|L2}G{QzQ)*Pf63X*^aeILhv?o2K-pYT^4));)CVPS+OYvd&AQo z?)a77s*n{arp_TNL^TW2vJO&j)TW3@5lN7%bCMfgCYR=ceDX*>(E^HCKLNF;d8#y0 zt9!|we4P5T3iGFu+>k_#)B}5He%b%kr#a_r`P`F=@%eW$dFWX7aDwj%z6S4%rQ>4cq)Ybnn)T4W}s!cHiKL`SQQmx|y%X!mc-QWTj-Kl#anWTWC2> zl{x2SaZH+6s!6B^^1iVKS3G)?s(wB0oM-_>Yz)>&ro_EJJaDJgM$w_}|Mrh@)>;Br zoXdl|X4!*ODJF61jD$>>grhSTn1ndkDorNvHG#N`xOE}{MXb~MY41~q^m&RtJ3MTO zoW^v}gL8|M%MNb*jIYNFfB12(+&iF~_*$s5I-%$#UdCcH)6{tytEUQ6H99m|vbTxI zp0-6JA`(!?Zv8lso-Pfd|Yxm~bE$`Fww#yp*`bS~H!+x0ulQJ2XG8t&LoH?30s0t7R z-hw7bks_lU^Y*EAO;1{L6Dy@70Y&l&v)oT6p%Zh@@76vae;sfr6d87DtRJh8IqI@< ztWmhny0R|sW+n%TNz)H z`c2q7XIz~sVw!}gnU?{lRt7`RSMy~}f5m*WCh6d{=2QY@TR3kn$fM^FX?|8}9Q99g6 zTz4t^ch9K98j}{JjmOojNBHAH_k1U;)dYBrh&+W>#-p(=T`)f5{*MF{AtGrjyCEV; zkQkka$U=?2CDi>GJ>h;yXvS=aM$#dejCygkZyrkC^K!b|b*=9E5Dyh*b(b}aDx8}# zX9`Y~Ca6LdWJ&tKyMhZgT@NKu)IJhWBp(q8@)~x^C2Q+f-l4D%gtrLfqag*4!oVpN zkWuPr@4z4W@!Q$ffz@YR#??>QgP4k}Wa4OC(y^Sdel)mXlMtL90WT1d=cwugFk#K> zxcedjMFiJiO5>*v#B>dCTX={(Q`w#nj8>p@6}2e2)zs~qN8kKH_HXwE`-4wHIw6zJ z+Q^uJqr_j72>DNa7M~dJM>mNT#agROfpacp1>u6M|em zxM6LUrz0I zX;NLWd+E^s^G`R39*0?`0-kU7ZARw#vi*x}4pw{4@RLN+^FwA_+woEOJmdjqm1j?l4!U zN2q@=%=oI6QfUIts3Ub1bv0qtR}AZt5w)5mTbloOALsZ+UC<}~4|v7LxvZYZx`Wv^ zSvv61UuDlNpW67kr1!p>hm{)e!@8DH?V!d^8q;1q>e{*T6Pg&&1z+Om3qyucffxsh z7SN7oAH&+n8Kpz|T!;IYH1VE9L{ng_DgePiKEDE3A(@)EEK(*#_OuI+_wN4${qk8xpmonZa0t(9z@mcYb*NMRmtkSbo|Ek^lZcGCs!4sKSgCpRN1Dxt^U+t{!8! z_~n(Ne$qQx{ZD_w-)_|6oxh)BgC6rhg6(LHQH3NiB$-h&CEbw$D+*5oZfr{*;`WOK zw4*UC8~S;^db2hYPFF+CPfbGU1uw_LHSQVj#ee1D zVyWsB$F+aFlXREol<~UVCZ(+M!DNswOlDj!O^#0X>FfUy#qrfsONpEg{@+h=;W-PC z=)@qVst`QRi6BPTh}qK+Q3f0Z-VN-EbwH7TB0>;IL}ncR4o+$-P{4T{*jliu!5c&6 zvZU-6-FooHKfQi;=6OGad+2!gn5Vab8SWp$%@pY<@)S{Iaoc9g!1m(yfO?ut~R|2n%J1-JYBp;D91VnFC zcw%^92I0gO@7F}vo#Irft0bw4UXT8+Io2&ZdesMc;IAI!nM8mp5V!Uw9333k9XP(zJV86{osZlW93I zEq0csu=9-~azWgIk$`qOoQNy{?+d51mlKmujVjK0G}J44i#nT86a|yJUe2Gc_m}_q z-{#{Z!%S*cmlDRE9{t>}&OS657PfY>?ktg;9IV9kO@WsV)qIA@g_+|=hW*J`7V{0O zL)+Eip%li5udt*FBG{zOf~~or>>A z0kJ10evTC~N?|sKlq9c^y6jei@r22no{PEj#T;JGHSKvVf0b%!5-JDej>&4ts@5ze z%A^Wb!@5xO4PUeBDsUA{924(ZHkMVFYDsY`f3*?o`}v>dimUfb&g+0(IzEl@zflGD(pi*(1FJ$UO!@+RA8o*0~)4k^2tYxN{=`Z3~2o=Okpj%20sl zucWuXMsHUbNFz4Z6<7)*mshM+JDC*JOiITvEr;3a!VH~{9A1Cyr*y_{{<^SX?GV5E zVHOi5r%H3jSVm4x=|Uc7{9d?QuVH_8ttjy&mo%@p+#7?`k$|=p(nlIaB7ej9dud`m zb#TEd8Ve`^jQ9AO0?n&5DbRv!@ZHbm*m^JI3;&a&j&8Qu3sP5N|NR#?rik*Yb6MCo zi!I0jUyeETEHsb4WY$`xti^cN2P!LQkiX zI~`MhU$`%i9OHA};rM(+0y^tsKhr{3KDb`(3H!Za!o@&fC}F%z5S%X*a!cRz=lqO- z%N_k+c`u`lxUO$JYJW>_Q-NE8)=%5*K0WP11y&u-iIQ4ReP}nkU-IOQneSea*N$q_ zd!Z6US7G?ohxz74z31=#1QaX|e05sIjs;*#+yQwds86SKkWWHvCg5QKjaBP{7 zjxYLUKjUDX8S*Dz!2CvB%s>Af)Tb3Bx&;KeoRy5ugU2?mK^5RPeh6|FPRD{7(+o0H z;H?1Mac$JeiUhQ+te~-o2;rX$`Dlu)q)2AEnoFjYh$bnfmqS$`y&RhsSU<8?C%bq5 z&7Qye73MbTdVc$UGR?_~;pUGn&PYWZesOtY=hyF>VQ}LUzj~m@?rt&ALB3nlO0q0x zfdb9)TuntGDIzIS8?Y(ztOZGL&`;lAt293FG-L{KS4RRmYY;@{^*#=poaD6%mjt~Z z?`jZ_F$QtC(qoLnN=@Qx5*U7Mad&@%l`Ex@FWo}---~QabLupH^G85m1WE=VB)9!rA3cu9>zDvx@X>1MhB03ZNKL_t(#Vt(?CSbie9Qc=&zVOsudW=Acc{ zp;{W*joQ`XjTX{{bk7X)&wRp}u?oUmG2KE0Wb_P%1AhG@oWEy&aVDeo)oNObCRlN4 zf+{Cwt)-!Bz5^^d{Clope|PFW>U2CPx?hoi&L%hP5b$=I^mK5tDE=uE(# zD!dtXDP;d42?EW5{g0Rf^y<6;6aD}aQMDG$*PS+6bWcc z5ey=dOnt4_{{0;Ci&NxX2}01L(Wz744wy-M1%`rISIi|ts`0{px9`rEZ){=SG>VGS z8nUt7d{Oq5)VZ>xO3G~ZO#iMAzYbF-Uv|e0b~Kus%q8R=RgYFQ4Zss1w=lNQvEVzH zHz`^nHzf#iSgy`uJSY;-R*Lbofl4=Js;{=9V@IfN3xn|<5zh(#olKbMs6xt#9HAPU zgd@qnc=!6HRv!!94wd(7BcC@J4qsCxQl9ZKIq!QVd*=(R@%6Z3Xpbz(kyHIljox_? zo%3Li0^G|jb-2&5ATbiq*0F+uN$#hJsT7fG9ePVx=PJCahPo34S!Os{nNU&|g>@_S z#fR8^-6b46lh?a2&&ZXO;@qaEf{ z;9h^2tJBaUCMUJlL_`AGH1cUh7Bs z?>@-zOkeZ6UPG=GPH>xkf+q%>klI&1@A27-?|uarU9eZ@@X1&^`6-7v3M@PH)^jK> zyO&$)`#5X>FCwOuaE*urw3#kgo64o#kg7Tok?Voy3M|WsjFW_a)ot2YGt&W+YY>S$euU~y zxLa@GULULjV60*{?A9%cUEM@n=Zs->q+VAz4uw>qBfm$FdSWD)Ll*iSb`M>U_ zoNZFE5 z90SFAq5 z@O27T35*051xkZ6300k0m)lHn#wI0MRgw6Fq-)+2_zZXf&QXH2q$MQkuj#GD{9P(jukEEL1L&k-z7A=x)YEpSOomO10?(WO14$ zn^%#2aGqV)U(V4S-vcI+kvZxFP_5eTnMOR0Mz4EO(HG@>{8fQy^aSTLF`?jw#VYAY zK#z|Tp{f($HkzVCktX|<3XE!T&LrfCq4qT?#wg-+_l)kp@&X>%tc!l}HH?JPZ2{QiPFOKMFK~%Z{YVeY)BVGr;K`eH%}>7+Nhmix4WCfU zOP;p=QPb;;fbZbu{i>~up{%9U3Av*w7?qICOyq=I$3_2xhhH2{po&M9G}KdW zTSO$FGi&|;ucr~22WXorCkm;z)~ZsA+9aoNl&UiYyV2`BpaBvh|YfW0)*t#^vZt~TZ~W%0)u7pmnre1Wc^m4nH{N9glh0lbH{l<^N`F7!bU-vI? z?pCaevjjCxtqV9Ou6Ng7=Vrhv|-jy$Y`|nAmgb< z#5)w`X!^P;nixS6nopayi;CK1RWibiVKVrScW<4*WS*?Wtu~JY8E>ik{quKl>0D>I zXP7G|r{_Ys8om8Wdi$sLjD*7~K3|c5*6$^>`>HjoLnGp=fMeGSenw;@1dB zWs>A%UMk%)@b#fxXI^gObTR1A+3ag5avf~78~(PJG0M@*i8-D1QHA|~&GTY3y$qZRBhvb=2>!1+wq{FOv5|h1O z{Wm;uD}J_a&Ok)HCzqO{t|T>*Ym#)dn_}vM*<}42ED=NEMHCS=-l$Y)T_IIXYOlMT ztG4RB|JQf((nF~hy-cahOi|?`dk*S38R;bD+{DglPntt$PGD$21^wOyNuRBJY=R(< zW(fuDAR7rN;xTbIpL5r+zx#Q{P{cB%p{#w}C#wbH{UZE^z1@ zrq)dXmAb~F&ZAjHqBW@}N%~1r+B_eb7d>U`#eSyI$w({}1~sBcAPMhq;;D55*vC8S z(4rttypV|6M4V*ew|ti9@@pr;a_FGs!Sy<>uK#_n>jsL+zD+BT?Jo;S%$ERGB zW(>2V5+(QOiVLDuoz%H=c9DJI6FhUPf4+W!Pg63%tAKNL<1&dQsj1fOB6y?XLBXiO zS};B_XqJ+7QqBs=(td~jdAraa#R6v8B{{v}C^5ot6!w7?7)#TRlK>Ns-Z;x2zA%J) z?9>p$X%)pR5>Uh`F`|Aajc#$56C;-E=EO4{gyS{Z^XM2~n}vcs|NC8x&xX&|?QlFd z7>lNgCrZ?p;70Vm)oZd9AoHO14GSa51l6~7VtBLuU>2vz`Zgd{O&H{_|C z9zZw_Bq`2(>J3{z_S53F=i!aTE6y0C4X%4mOmSV`1{1_L29N=RZQe354FNrPHtmH^ zznk+CUzA$m2lLE2Qqd-+!R3&|SxqOk)aprkTC6(=olQC>%Tb?=#b!&LNw%s>y00FuF#6-4m3J~v`mJ%@=wl^G*`WlZ=HV>%xd3tv4 zy^nkk{XyZoLcThzPive~I>P^xd$=(FI?HmHtJBb5SVwm(5)f0Tko#rsudn5t4#1x? ze7?e!r~2Wlm?=o83Qf9~?B?iPZ}Zz5zFp)QnK@B>2x_EpKkJQXC2*l#MSY{dXhoe% z?AfcAeDNWUfXgOzb~=fMA&`BFue|k_d4;=|KdXYmLN})3BLNY_##-@l?&oWx!|d&q z_%{ltA)k@c(K0_imyBn=@Y7pETJ+mRQIHsF60=4MsvC4Rdz^a3dyk4k4T#_*-GpI` z8-+jkB$v+3t;~rIPT8y)VnK^F`u@xL#oj&KWW&B2#u!i}Ag0V=*KUsgz>&9v492NX zC_8o?&1b&j`mNd3eLCnBObnGZimHkapIbd{-4;;8IaFX!FGf6GaJE-)RzG|{_Bw_g zPMztLMm0eI`7%duyPMCssotilo- z;=tMZ!EbpUtAev)QPb$Fsh72i==CnEafm|_LvY1XoayBpKbtqpTW(^{?&QcRr;3Eq z4GVaO{_rlk=d@OLbipD4O_#){_i@-f#PF30^I-(bDTSqq)r6mX+vZP~SPyQvlG;#- zC=P6^XDt|A_x{i|LqHS^MiEf|h8Jw^Fv5+%fB597^}Rz~P)p{z#N^Gb)g4{1NI+{@ zFjXzTkKer1;qPhYe}}nVr*dDI)z>|jeP{C;oVSN=F!mHwNKC?svV--maN8@@))$Gv z`=?%f_D>Cc;sxwJoduY(B$qvU7jUkK*mjnDB%mEYGLNQCr>JY|e@g1_x6Rny%pwzm zSc4?9eeL&C6~nAnonFE&ok=>H_Sm04aNm&wXZ!l>o#Q|km5GD?-g=>^`o@k2zE0L3 zqww^Tw8UpjteJ7i*zNLNO7o1%c+z&*TmSQybkIi^stlhU)V(#?q{}W_pf){eGOC4+ zh2Q(FSk39qu#tRk}m$j1_fSxntz8~!A4kNh(C*FCZ)d-Nr3oPwspwFc_C zWaJzjWeg6jR?K25*xY<$xLwvMNicv@M+rEPw#{JOPHyvWK@6QI=KeyreXa%!$#ps&Z|52`35zk3M%d*)!mCZ3)OY9FVQ*CR5F;k$}$rFwa`` zX&c}0s_Ldq;0f;S3bQn&^mQPg%%ha0bXE zm9m}ovCbG!?V62dO=AVrl4ski0Ppuc$zWFKGaih|G#fLn9l4bzkZ))zqbCYofw98A zW!zou0U3rKv?>cN+)mJxHamcQ{FEgme?RkZw{}RMqv*|3F&`TUC~=@dr%=+7u~lZg zt9s=9gEN$`d^#6wmvx%$V+5>Lcx|MuK{sN5)V_HD6EWa~N_sil%FUSR(mQvKx^RiH zsYmm=cG$!RNme~Eq`&~H6688|kzEI9E6qA({g|DSA=@b~SW8Cj36r)i*gf22EBrfX zw0--WsN5|Gqn160U=zS5l#+8)e*L3tE5Y%7yE$%wx@H32A+>X|{yAoj(lzP@&qtQlGIEpk5eJj znF01UKeGKc$1^TvUKA|W0+J+T8?ir3(n#0}i5Ml#Qh3$%TWdn>M&a{6MUhWfHD#)K zr_3O2-7leu{S*Qtns`tzSlD-o$ieUy{^Za>B%rfD2BeP?6Y2v`SGX)}kZ;lqn5(9S z3tC{9W?F!zLelB?Sv+Uq>}xnZ6$S;fRw=>O;GJpoN7mihZ=}htg;+?M7`Xa;7PjTX zWH5zKRx@l}6buw25(Mmm3$`3w{Cxr|Vc%T~JUKL{u1R(5l#x9s6$3Iy=H_tx#ZPXZ!1Kw--ELdYma>}o#5)qH)*t8U zWTZlpt{Cg9KFX-jJ+mCzu50)=_tjVLqUw!~ox5DkPf{UML#766gd_)2BRUpQMYNkD z;}rR!`*~V*Sgy{(EHM}2LM9T>*>3^0Gu=mUkKD&$^EB?S|0NIHK{Mg>F;R(*myR<| z7-#1n94~L@weqY~;z@A6tp{4StLYtH0P(6?<3+~X-nBUQV7+8GmT1}a;KLuhHW|S- zHLoESgu(?k^8bD3z5H2q2iGQ{S1ejU+lhyom%A0<8U}l6^v$7B@DxXQlB%2WduM$1 z#h>Hi?Yu~Hvtw|GDC!-R+ki+{S-0BR4jj6$z_y|sZr`ySwI2j z8?BQL%`CA@U^2nK`)c;~ewq7g5lMH-(88VIf(b!D{$*U6-NL>8OAOzja3BN(9~+4? z1zG1EFXPB|U#stY9%>X75La)EvZFQ%iz-yO3Dwgs-x-JAJHLaKzBh%4rXrde(L_Wu zX{JApRi#oDFHnYq@SMNo$nC*uuS6u@34!RH5`<0x-po_#8H&ql^sQ3@^N$@D(b{x5 z;(qWo+uQm9c<0NR&pcIzwUAgz*1tbm3n)d!OsMYq4t7L~!4JHWJ-d=4)~2XU@y1XE zm$tP4y^yqB@)oEaddD7m2iQT_DK3~35pxUo`VrOJ6z0~#9;d*p(Ea4?I@$?~bZCKD zDk_UeLbf4wKtg6LUJQ=J7yjv&tgZdF$GsmTGlt9<3bA-&nt_&0A)-w|Q*AP@M-+Ag z-Q$d38xGD%Y{l3nE?DrVO`q%oM+~Kv!XbrWov$v&j$Nz*lydNo*y!2f6_SH2og7A+;Ta#PZ*4%2D`x3X^S6T0(*1 z5SRxJ0`E}O@lNQ7KkEtTl=>-xC|b@-dZR&~Z<`ZnrByqu3N@Dbq_FB|cj=xg>-#E6 z(}fxB>?i4e^bK6UlOC8uJ&I+9e#JVv<@)P@`Z6*@Gq9^9ZXsQo-Dw2$(5LyX`4M?N zPRHXivsU|VenxjGHKjFeI(`MnEQ~Cyq{yuYB)?KwtJp85#z&>o)_o+P&9`vs>6;-U z=39}{5PuuZ_*_dEE+|l%lFBo5mFw8ygcX}D4@{j;+!EFA{X(^}(;k>>uHZ;!6Vv8L33vUn>{=AVaW?}QB8D1g2qPiwG;(~$j%)_{K9KE zG;5BpWcVt{#(iJSt@e84Q`Wc-WTZ3-iYp#{sfgUDs>7*gwcX>g9SRkBykAe z=YEdfe5cx%Lz&RENh8^+L8^5Uh{y$NC<(83wM*IV@n8jQi;UuSO2g|EDYb=zw<E8Pr z&e{Frcdm4;fF&$FJw5sNSxf6ZT@CNv-|w9L+k2nAzneiAjF5!T?B<~8;KHd`84g>T z5bOlV0gdV-QUtkz(_;i_VYbJJq1N9WhMPH(Tb1Ai#gm(v8q9Zx9hmqJZ>8OA5%|g- zoV$^3H;8urq>J(FbU%#`_?iRE(eWEe&ku4Nhn0R<*vB#y(d@*a zeBqN%PNlv_wlMMn=Z^ZA*C-Ny$+r|z*He22`2I$1_f?5ClMx%2|hjS6ME2F?!`s> z*IwP^C?1jr>gEPLdPN|u&`#H-%@utpPkjP;%e%}J9kD*sh{#&JS6r!7Uco6wg17#l zhx7I^czRgx=42V`e6l2=3xGShchDm}-=WtC+{Y1Ail%gA^E&ipPd$01Rv!uL=SUMd zdhxJGk#*}Hoi$Yt$Bwr$+cOJdNU%f_LM|_&^)Li93Eoda-Ln`u{7t7ZH8qy+T=QP# zNl^zBl5-irfa(pQ*|a>8X48zt-p5|YaaWU*v0k|E~3Ng0YFGRZHS43*5(T{p83( z!uer0(c{+Z?AJd+r`Zk<#VdaOb=Bh?MI2!v-RIu> z=@U`rtqu!R_PNlF@;rpvK8Vw-`hRkb=9 ziV;tS5X`7*2|Pv7r`8W|qL6?-Y@NjBlW@k@FwkLMG&GH7>kCZb($ z#wZqSED=!@lW46@>h9_Q03ZNKL_t)bm`J^rEwCH-Wf7S?tQ1XSfR2rU8T&pt^z{#O zR=iU#NMhty3`DlB`H914lUAx}hK<|In5d;$vQgWP^~nrTR_xSMn=SC;`Te&rV~8qg zYsYsrDv=^3i!(He618P2_|Pt9h=?&Z2I5GKi8a$i?c1*_oBE%J;k?aU^6^)(uUhW9 zWiy~K`-f?|oOKgg{e|wb)a^rs)@!>m(25bsFt;joVdB`HXpMcJHU{X}8lre4KQKNq z;Pu>7yozuAEO07yabX(zYEbGU28YQDax*MgUfxd?G2cJqlybgV{twU7EAoMdWd#?Gg6NNFme$t}#HzCj7FY-X|xV zZUrxBqC#(0=u#UV6P^@tNZQ3!Nuk03Tqf0UvBN(9f$Oo&l0P!GZc&#|8AFT;UM*HJ zR)`GhoP}E1*diXpktm3Z7?|maqB&vw3HUE>M>Dr(i8UO*hZ|EUn6eZ_%9d4MOr^#8 z_rBT}%~C&dK5-k}RyIs5)&Ncg5mIA`Bu$7Er(!_`Eh|wWQHwWIQ%t_%SxtfGPr?OT zS$Eo8Rkf{aSpiGShV`Dx!4Qm*c96g#@FL*JKWghVIiO=?gTmMH5Et_z;I#t#Lbv;< zac`t{C<2wC9YDTGZOwb)H!~-ZtqnjgwP+9QyH5|`RQ4ch{PDCb0avcY9 zMNJOqnB;(};05_Ht)CWf6|fOV!)$FIinhGeE^E7fdcg-;I)fC&xkR$~cVP(-iUG)nxi ztII>gw^*b@Z%`8ZvNcGQeBI<=^B=sW3B8V%Kfj$*A2YQySAv#M#Tl*w(IR8yvOux#7?B^GVjDLW+Xby+_5q1UkI!qe$CSM2DB zEy;&oi72`8sCP)|B{mogmPo)SWD=^QmqLR2G2h_+=LX~B*Mem0nvmldUC>OTYfAh_ zY^Zn^$fK6VuEbJBYKWa+#o$$`Dua*DSYP$N{*k8P^jLB49v-;zt@P&m?3I+vMnDPE zZStMJf<1R@6M7v>Hr~kM;v$QKs#U0XW8>UrF$n{5<2wxLyE+wt^-u_W*P+j@Upnz? zf!2xv5+Je24uwl?o%6AP+LoF!2kTQ`dp_P9%ECrvCrU`Z^HI`n*60zh1b5%ZgOx+h zJB8WiYOD+|{5S0WySwQ=xVN=;K;pewpp|N5a=i6zGhnc+&=pv4^~rDS(Ko5;AFYMY zw^njM3S6V`Bo6947YfGv1M`%e;#8^1C@Ql~hwkhYKWvQ8%5lyn)-}dwW%=}5nA<#w zWcVl}vEmcFqf&$MI6@EPQm6?s)GbMOh{)`?dPHM@j?M#W12z~IrnkC$@*17)a6fqSRYYefdj(WVD3yrCrP!qHq9>yKur6cu-#sEFM zafuH3eKI!pC_<19c6*GRY9O_>=aYtBFViiuIBnw!(Qb+Rt@)V&)KA~Eu|%VlbMtavvb`#x$6(82Jk z8XvT#szs>%v8q~K!o*C0zfECUU_oJ>z?dNhTI!Rx^Srw_n=$*P_b}Zo z-G-BecV5G8Q|z)z;T8%h`VN(Pd`}$OHR9m?NN7zmf5YMp2a0&>X{zqfhkX-*J@kE; zks%6}oxAA2D8#pUa4}25gi{6MTi6y!5{YwVYNeu;Jm&)TG)uPOWa8&8XYR4<-5e}e zKAX&zhU7>Yg~1DhV0gkvA4DOk(AS8_ndAFv^k5GU{jxDY5A}vd7sROQKtxV2@$U+~ zFlp#~uM~QOzOTNIJS-Qn&_c2zVvqj8o0=J44JRM}`EB&O?ZrtX$$iu|CZQHW33J27 z42lW;kaNImgBO&9JvQ=!(i7o`{zS+D*>Hi(SbRFF;QaX@EEWkY2n+>EsV#o(KKi!w zrnMtVB*US3?qzIR7zDL~&JlfM5MEYJLB4+~!LNF2O zsp{}V=oLE=JRm*fy||DAx)8WF95J@W=Dgd7yzi2-GFTC+Qz!EDQ*Y+nW~nxutbFP= zme)o3sp6_K4~8c^l!w6+GSqS%qwm|m>kjdD24j1vF+jmJtio3f?&6E7Wj0#jh;ig@ zjx>KNKod962j{b;q=otH9VgAG>4t_M$r&4%JZqBq78RAXi5?8UjMll)DuiN=`lNUX z_?IGbsfd_EazO4;Z-BRkn>m*CH|?a1VH3n8=bqA>d^Mc> zeD2rL7}p|8T`)Kr_C*zp%IHLFM#8+bxsdS^wbgH5IuHj}9ig%$~Z5Y4*=l-l!VH#KcKL zOC!3*5nFGxvMp`JNEIU{MxNM~_$fPOyFKt=52LLf)dpx(6eS|*4(=*5qUR|*5$G!< zRDjnCyi@U|LpAryD&P|Xv%d+9o#HZiEu9p5FavoPAX@!&}-Z}~kE*CJ) zu^b|Wp+dXBzkVA#MqW^SB7BY$r4TVy)%*h1cPjjwsP%7W1uElXV-SsEH5x+>z97L7 zyNa08CicyK_U$x6^9_$G&fLhU7oE+VK@u-47eZd*O+}@VI4fQfSI8(Vi|T0_dU=cZ zsxeAZt;B0qIuu&w6iAdBC5htQH_9{4~&=0(vc;j>velEwM|TkgiJHn?$7hqbj2xts&T`4k&Z@*HX_tYExHr zss*tIF&66-i;q3dyUY}=xf!OfyS$n4)$r)$^bI^PJ;6rAr9ff9+Bzw%4pHhM4a0C+ z=0kepc_+&IKM_K(krlpH;issl0L&{)0!Hu}rYm@L*5jl_QyFZ_cq;HQiNqngaAR#61@Ou+S*9^Sp*CSN@K)-|O%p<}Tp{)p&L*VZ zQQ;z&k(vyRHcn7};a!c=VMD_&zL14pN`f2Q7HE*nT!uza5jTo#+ftO#wFt+rX<#+t})K_@$J^zW$-XZ-yk>NB?kr6@$HM;M zMtthivo=4l{+~bWDq1f@-XBu4|{B1gnYcO?l;Fo?9He) zXlx|<+77`+A8O3_j7q`Vs#^Y#{6>ZL*t}~OV%8ym;Nn3=f4(493TMj)irb#U-e$?I zEc=(~U-kxumE$5;G80_*@u!uHz2-Pr`tPXQ0;arj%9DP9{tx!B*j&+-C96C}htVW?$ z==GBNYgH}f;F5_7mZNhwvHr%Zm}!>W%JI9OV|d}s?78Q@4S89Rd1c@|{qQ`r^?lI@ zT%;-{7$W0+Slpfx#iC4n_x>&Om%M@K?VmuKE4#8h^(^*9bX(CBX=OFBWD#{&yoQH@ z5WFC2Dc5P>y09Phkjm)ea=(se2&SWs+)?47h`c{SUM+QIz8VX|vfv46V$>{0Jx7$L z)AqscU%wAMYg3c^St%}lJ$t{iYhu{P#zX1vZ^d~FP<7yaXa-g(YHu|%N+k#Hvl2qF zk#{6RIvTr7+ql-L>-TrQ{t?>ERbDw}w%L34Wv(#LO@^()G4xvZiH*F}QQ1lXNQo{3 z*Q)Bb#`bHXszp#zTu}pYyiUPJT0as#R4yV{Qp;`hgN8{IE{+6)1W;BHiX&#QSe~(g ztT8?-$7Q$S?%CC`^R)ZJWZ2Kvk4)`hVOaP(aUmeCG8>Y7>T_>zCY-JmPrikFzxmzH z{36x;ba%B{oxwU=vR73~RVlqnr7DH0ppc1ZETRU~3eo7Ps$NAyI40f$IeXJ|aaOv! z%0+zt@4wsgPq>-;n=8ID+;9btnI$)|$4jDd*l%SpLNQ~K9pOR01iT11Yt$h>Qm8no zlF%W}biomNHgE|rA1;Usv1%FO)R>_AqiND@dQpK^CS=RFZcm$Y^7SOz;1} zo=N%L&#t~6@yW^`zh_X{zAapAk|5-lj2R&t@^~XHAqQ*d ze@tC;*ru*YAQ+ob?T-(Zx)R7qvns~T{>l5Bj`x+~{eMI(w#got?k^#A@>UOyx z`LBHIYQ_I%2(uDPCLX22mr!P@)q#b!QA!6an>cyL^UL^s*Ec6$D?zeN{%JLTez8+e zZSKOcXK_IPg16Cr;D@ar49NlSQ*d3<7T^{rT-ml++;_{NK4{?K8x{T~C>p#VS!vCn zEX_U7c|WF;?~P;4dW zwP!N);PKD0LW$6o(2Og>zfPKOIiNl;fZoeY}#;R#p99@J}}= zJT@f13W1@al-QImjkRrKszR+TNPI<7MnvsfpG_-`oB8f5!HzGlz9#S;pKL-!uiO^(h!%f;BOCDh%R6 z{>KM{lTx=p{SuHKkJGT@;Q@(=oC>^wI`oREj|F3ZLMfahCTGF;w1u~o6wBr2Sth^w zAuei`(8};vce86qZ`Jjbmc962-Pt^7R*G{^;hcB8kl{qk6fV-LlDu>%Ml(}K;97e= zjB17|;8NgO$76Ep@yG!g;N{eE04ep6pAFTR##?J#MPW3xDIF-hpKOu+``0nwET5I* zGyj)~A$HZnpEA<;Pydps=8mi!ue^$>sR$>Pf+o%@DnjHa4$T1#spVS>;MF2BcQP2D zQ-L=E_l6JJ<)A{F$4Kf`29~&EiI=T6rWF%E>8wUjogjydg&RM97qd!i1`4 zLT^fDDlfEpCB=ecAxrF@^o#F1A%xOSYQFk^*z411)vt3EO;cK0%^g`;?))uIJ7;pa z*Jh?Y)M-;Hz8hhKK9Hf-UpE$fgt!=4ijntREL++;WxKsv&Q8O=&ICkuZnts_1{)r= z0SbL1osekuhZv!!d-OR9>*QdcR}_A3-5BSvCFOEK)D;+>Hb?8Mxu)TCrD?Shs(kfl zLsdv*R{u2a(ZHKt#*$@!F5dd0ND3E`PN z*}1*88+Tl3SKR;wM#;5dW}L)YOUvy;8;N|yILzFmQ*e&%>XlmeDbsJYzotk z2b*SDHZEUU?e`%=EqVz{%^g{JUiAz%ZkS!3%1A_LCsl-uyr1yPggvTS=V{vx{e`Ve zPG8O0iK^C3;@ft3w(anoH>ay^fP!@6$Y_k-P$?om4Loh6bO^LUBiu-nWTY+QqLjo- zS*`2&^7Qph%f<2FT|Y~!BgLwRU@dHP{gw2aJ92z@&&w%V4B8P1WnBz>!1yS{VUPOI zE9QaO`&qjFGu%^z{eDcl5{`ujG|B-*!TT8{wBAAefkqv<8jMjC8c%CWg%De0s*}%t z<~_|qJYGEGUobn7tbXpLO~EbCVXnC&$A_0ajoG>OK8fl3Jf|GkzEPL+2AgW^GbYefa}yY?j9HWinlTk8}Oh>i45P z+PLU3%x>L`$+UZD2tM+JMkx}gb)$EC^pzrV9ssvr;o)|zzpj1`Xe759hs5*Mz`5bW zM8V*=;PvFAFpN~5CD@#hWO`TnYh1kd0fn>%s*`M@jK7tULAG(eTrIN`G4iis#HSdOVr`v$|0(j#k|O-OlITm7J08;I8ru?0;=YFjoh>A9ahp^)fUTQcPZ$bS zFPfh>`-&kV430X5)FJPx&Vy)QYKxh6_-t_$(GG z^{53ADP(uPpNVD(oH(3*6T=_uZSPf*VZ?w|ocH>r9MzL9F`DMSv*2hW z6zewj=JWse+q9-SO|$Wd!js;};G6f#{Y9*83rg8tEGW}#Dv$hr;{fkb(Yi`{$w4o{ zUO%AxB6@U!a>wKten|CdV3PW{J*959NC4wi@PeyEoeF|;(M+4(e|%k|gmNKw08$Jt0D{jQANIeJ-##8m$xlUk_MAQhGNkXi~xDtZT7&?kUY8Jke;U zwC?^mt@F+pZtk`Qi-pUM`jjJgiR-odoO@b-{XHLN!%Vl){yEX;wPM#Fwb6rnl{`eP>m?(=$<1B+DW+J5%aZoy^1R{aO z5bcx>f75X_Kv&DzDT2INwzd#tM&ip2dbx$6t+izx_1Ds))}vJhZKu6umql48Ez)y( zY<%AQP61 zu%tk2p|lVgcuY^Cmm$bbxgbH1o8;o3C^3CRN$3N;UV_}j#nDH(v$~S$$-iKJCveWg zTe!C7GVFleJrfsO?)i84nO@_DuQmSmJ1oEP_ek&CO}>AT`NEm9LL|a?i_c=?bgD;Z zdWMN#dlkc{pWBR5T8nIW1q-`}=`Jz(Ozc_m$l;unZ$FjEmwcXQE&^pnWhG$yv@A;;>C@mZt1;8GU;=u7$Rz)C~m!~K)T{56X&h8@5E zY_2SW!(u~I`Z4o>3=nVQeBHra%7qXS+suUn=J2wI|RM`i0j9WGzTQAn(yGQ65xNa z@1?+&AgOVfpU{_wI%E@={IK3hICPr%9>W*buhb2yBGNjN zxnhU)fX20c5M({w4g2YTUPFiMn10BQwm&^hW(%@=KhflU8XDFLTdrs6hn4J&597;( zt_Lr$)FXT58@OcGyZOQqk99s056A^WlwQdh={&=$6efds(P5j>;>8xX-$2pa(uRh$ z!-sEWvEvWlE)yhn3WZIJ+yM0t0K zAVZ3qOx^31Tf`WIxT~o*>Vz~FQUq&Dq$yw>lySRq$oCPzXqcdmELE80Zo{t#;3<4Oog_QU zp)U^Z)(o}xlT<_0S|VqLWkr=&m@2_WEjwsUWcy6k%)D%9ShK9_E!vLFJ2A4XSnu#1 z$FLMpbwkSF#CU~{)J?0`Opu-3A{u!nP7a}Sj;AXS5-GkKEH{}iazD5 z71qH4oS7O3000C0NklIIf1ceN zrkII|Cxp0kCLbgnjjW*^Yjy)jXlOg$)gBmzO=2$Io_I zieRFG%p}B7N*6E@nGXi0Lme5#0t+5}Nr&W#+c?jusvp^u;ONNs^yG)kb02v^Ks+9T z)dEDMVZK+b^HUG7Uj%XCwSsyA>Of#ogi^JU+-PW6%c!EU<$ghSf#hQz%`kMv55oR8 zQhPvcKy%z%wz0#9NjY{Dh8;3NN1{XGvQeVQkBm`E;-@M4)Zk`~I%A_SZrM}}hN85J z0ZvOWxS0}P?OtN?(sv^N@NK^Dq&8gMQ;o*H0v6BE6Pe~VH#DpcmWX-`b5+&lJc!^c z04qeNpT_3JB~B^PeuOW}0$w>-a3dBZ0 zPJ|*p6;Z`tbg0cN_=bknBGCx1Lx?P1z-5Yr^(--8;D13x{!Uf2l?hty)Ss^>LUa9|>btH6n)q@pOqXwniI52&GGm2e5h zI|f>kh#C*Jut*9HgXj`%6>={W#6%)>*`KKx61Oz=1G5BlJUS1w6~qTUcp&xYb->@M zYF|W*s`~N6E&&c0o}1+2_@mreJ(HPkv z((w??D5_U-Mw+v?eJ6`wP*`_3xs8T~hK3(Ukn6bng{-?~2eF+IMdJ3 z*;Ju73oJl0Jg%Xk;ix>IO@JHX-?xtT<~z7@R0-`w#EPnp8pE8T#MnDPZwghhACdsbZ z$Kd;fwl5P(q9au;hg7ei?(2vJmYQqV(9m#{Ay_o39R#*4Q9NT@Bk2DF9mGy0KV~5r P00000NkvXXu0mjf^B0Xh literal 0 HcmV?d00001 diff --git a/user/.config/dunst/dunstrc b/user/.config/dunst/dunstrc new file mode 100644 index 000000000..2a06f18c2 --- /dev/null +++ b/user/.config/dunst/dunstrc @@ -0,0 +1,359 @@ +[global] + ### Display ### + + # Which monitor should the notifications be displayed on. + monitor = 0 + + # Display notification on focused monitor. Possible modes are: + # mouse: follow mouse pointer + # keyboard: follow window with keyboard focus + # none: don't follow anything + # + # "keyboard" needs a window manager that exports the + # _NET_ACTIVE_WINDOW property. + # This should be the case for almost all modern window managers. + # + # If this option is set to mouse or keyboard, the monitor option + # will be ignored. + follow = mouse + + # Show how many messages are currently hidden (because of geometry). + indicate_hidden = yes + + # Shrink window if it's smaller than the width. Will be ignored if + # width is 0. + shrink = no + + # The transparency of the window. Range: [0; 100]. + # This option will only work if a compositing window manager is + # present (e.g. xcompmgr, compiz, etc.). + transparency = 30 + + # Draw a line of "separator_height" pixel height between two + # notifications. + # Set to 0 to disable. + separator_height = 2 + + # Padding between text and separator. + padding = 8 + + # Horizontal padding. + horizontal_padding = 8 + + # Defines width in pixels of frame around the notification window. + # Set to 0 to disable. + frame_width = 3 + + # Defines color of the frame around the notification window. + frame_color = "#fb4934" + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = auto + + # Sort messages by urgency. + sort = yes + + # Don't remove messages, if the user is idle (no mouse or keyboard input) + # for longer than idle_threshold seconds. + # Set to 0 to disable. + # A client can set the 'transient' hint to bypass this. See the rules + # section for how to disable this if necessary + idle_threshold = 120 + + ### Text ### + font = mononoki Nerd Font 10 + + # The spacing between lines. If the height is smaller than the + # font height, it will get raised to the font height. + line_height = 0 + + # Possible values are: + # full: Allow a small subset of html markup in notifications: + # bold + # italic + # strikethrough + # underline + # + # For a complete reference see + # . + # + # strip: This setting is provided for compatibility with some broken + # clients that send markup even though it's not enabled on the + # server. Dunst will try to strip the markup but the parsing is + # simplistic so using this option outside of matching rules for + # specific applications *IS GREATLY DISCOURAGED*. + # + # no: Disable markup parsing, incoming notifications will be treated as + # plain text. Dunst will not advertise that it has the body-markup + # capability if this is set as a global setting. + # + # It's important to note that markup inside the format option will be parsed + # regardless of what this is set to. + markup = full + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # %n progress value if set without any extra characters + # %% Literal % + # Markup is allowed + format = "%s\n%b" + + # Alignment of message text. + # Possible values are "left", "center" and "right". + alignment = center + + # Show age of message if message is older than show_age_threshold + # seconds. + # Set to -1 to disable. + show_age_threshold = 60 + + # Split notifications into multiple lines if they don't fit into + # geometry. + word_wrap = yes + + # When word_wrap is set to no, specify where to make an ellipsis in long lines. + # Possible values are "start", "middle" and "end". + ellipsize = middle + + # Ignore newlines '\n' in notifications. + ignore_newline = no + + # Stack together notifications with the same content + stack_duplicates = true + + # Hide the count of stacked notifications with the same content + hide_duplicate_count = false + + # Display indicators for URLs (U) and actions (A). + show_indicators = yes + + ### Icons ### + + # Align icons left/right/off + icon_position = left + + # Scale larger icons down to this size, set to 0 to disable + max_icon_size = 32 + + # Paths to default icons. + icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ + + ### History ### + + # Should a notification popped up from history be sticky or timeout + # as if it would normally do. + sticky_history = yes + + # Maximum amount of notifications kept in history + history_length = 20 + + ### Misc/Advanced ### + + # dmenu path. + dmenu = /usr/bin/dmenu -p dunst: + + # Browser for opening urls in context menu. + browser = /usr/bin/firefox + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + # Define the title of the windows spawned by dunst + title = Dunst + + # Define the class of the windows spawned by dunst + class = Dunst + + # Define the corner radius of the notification window + # in pixel size. If the radius is 0, you have no rounded + # corners. + # The radius will be automatically lowered if it exceeds half of the + # notification height to avoid clipping text and/or icons. + corner_radius = 0 + + ### Legacy + + # Use the Xinerama extension instead of RandR for multi-monitor support. + # This setting is provided for compatibility with older nVidia drivers that + # do not support RandR and using it on systems that support RandR is highly + # discouraged. + # + # By enabling this setting dunst will not be able to detect when a monitor + # is connected or disconnected which might break follow mode if the screen + # layout changes. + force_xinerama = false + + ### mouse + + # Defines action of mouse event + # Possible values are: + # * none: Don't do anything. + # * do_action: If the notification has exactly one action, or one is marked as default, + # invoke it. If there are multiple and no default, open the context menu. + # * close_current: Close current notification. + # * close_all: Close all notifications. + mouse_left_click = do_action + mouse_middle_click = close_all + mouse_right_click = close_current + +# Experimental features that may or may not work correctly. Do not expect them +# to have a consistent behaviour across releases. +[experimental] + # Calculate the dpi to use on a per-monitor basis. + # If this setting is enabled the Xft.dpi value will be ignored and instead + # dunst will attempt to calculate an appropriate dpi value for each monitor + # using the resolution and physical size. This might be useful in setups + # where there are multiple screens with very different dpi values. + per_monitor_dpi = false + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#282828" + foreground = "#ebdbd2" + timeout = 5 + # Icon for notifications with low urgency, uncomment to enable + icon = /home/drk/.config/dunst/normal.png + +[urgency_normal] + background = "#282828" + foreground = "#ebdbd2" + timeout = 5 + # Icon for notifications with normal urgency, uncomment to enable + icon = /home/drk/.config/dunst/normal.png + +[urgency_critical] + background = "#900000" + foreground = "#ebdbd2" + frame_color = "#ff0000" + timeout = 5 + # Icon for notifications with critical urgency, uncomment to enable + icon = /home/drk/.config/dunst/critical.png + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# +# Messages can be matched by +# appname (discouraged, see desktop_entry) +# body +# category +# desktop_entry +# icon +# match_transient +# msg_urgency +# stack_tag +# summary +# +# and you can override the +# background +# foreground +# format +# frame_color +# fullscreen +# new_icon +# set_stack_tag +# set_transient +# timeout +# urgency +# +# Shell-like globbing will get expanded. +# +# Instead of the appname filter, it's recommended to use the desktop_entry filter. +# GLib based applications export their desktop-entry name. In comparison to the appname, +# the desktop-entry won't get localized. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +# Disable the transient hint so that idle_threshold cannot be bypassed from the +# client +#[transient_disable] +# match_transient = yes +# set_transient = no +# +# Make the handling of transient notifications more strict by making them not +# be placed in history. +#[transient_history_ignore] +# match_transient = yes +# history_ignore = yes + +# fullscreen values +# show: show the notifications, regardless if there is a fullscreen window opened +# delay: displays the new notification, if there is no fullscreen window active +# If the notification is already drawn, it won't get undrawn. +# pushback: same as delay, but when switching into fullscreen, the notification will get +# withdrawn from screen again and will get delayed like a new notification +#[fullscreen_delay_everything] +# fullscreen = delay +#[fullscreen_show_critical] +# msg_urgency = critical +# fullscreen = show + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[skip-display] +# # This notification will not be displayed, but will be included in the history +# summary = "foobar" +# skip_display = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +#[stack-volumes] +# appname = "some_volume_notifiers" +# set_stack_tag = "volume" +# +# vim: ft=cfg + diff --git a/user/.config/dunst/normal.png b/user/.config/dunst/normal.png new file mode 100644 index 0000000000000000000000000000000000000000..505e12c93392262f693add945b7fdf9e671f7dd7 GIT binary patch literal 3895 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 literal 0 HcmV?d00001 diff --git a/user/.config/picom/picom.conf b/user/.config/picom/picom.conf deleted file mode 100644 index 37579b543..000000000 --- a/user/.config/picom/picom.conf +++ /dev/null @@ -1,70 +0,0 @@ -## ____ __ -## / __ \_________ _/ /_____ -## / / / / ___/ __ `/ //_/ _ \ -## / /_/ / / / /_/ / ,< / __/ Clay Gomera (Drake) -## /_____/_/ \__,_/_/|_|\___/ My custom picom config - -## Shadows -shadow = false; -#shadow-radius = 8; -#shadow-opacity = .90 -#shadow-offset-x = -10; -#shadow-offset-y = -10; -# shadow-red = 0 -# shadow-green = 0 -# shadow-blue = 0 -# shadow-color = "#000000" -#shadow-exclude = [ -# "name = 'Notification'", -# "class_g = 'Conky'", -# "class_g ?= 'Notify-osd'", -# "class_g = 'Cairo-clock'", -# "_GTK_FRAME_EXTENTS@:c" -#]; - -## Fading -fading = false; -#fade-in-step = 0.05; -#fade-out-step = 0.05; -#fade-delta = 8 -#fade-exclude = [] -#no-fading-openclose = false -#no-fading-destroyed-argb = false - -## Transparency and opacity -inactive-opacity = 1.00; -frame-opacity = 1.0; -inactive-opacity-override = false; -focus-exclude = [ "class_g = 'Cairo-clock'" ]; -# opaity-rule = [] - -## General Settings -backend = "xrender"; -vsync = true; -dbe = false; -detect-client-opacity = true; -refresh-rate = 60; -detect-transient = true; -glx-no-stencil = true; -use-damage = true; -unredir-if-possible = false; -#unredir-if-possible-exclude = [ -# "class_g = 'looking-glass-client' && !focused" -#]; -glx-use-copysubbuffer-mesa = true; - -wintypes: -{ - normal = { fade = true; full-shadow = true; }; - tooltip = { fade = true; }; - menu = { fade = true; }; - popup_menu = { fade = true; }; - dropdown_menu = { fade = true; }; - utility = { fade = true; }; - dialog = { fade = true; }; - notify = { fade = true; }; - unknown = { fade = true; }; - # notification = { shadow = true; }; - # dock = { shadow = false; }; -}; - diff --git a/user/.config/ranger/commands.py b/user/.config/ranger/commands.py new file mode 100644 index 000000000..6d96e5d56 --- /dev/null +++ b/user/.config/ranger/commands.py @@ -0,0 +1 @@ +from ranger_udisk_menu.mounter import mount diff --git a/user/.config/ranger/ranger_udisk_menu/menu.py b/user/.config/ranger/ranger_udisk_menu/menu.py new file mode 100644 index 000000000..d3d390e52 --- /dev/null +++ b/user/.config/ranger/ranger_udisk_menu/menu.py @@ -0,0 +1,243 @@ +#!/usr/bin/python3 +# coding: utf-8 +# License: The MIT License +# Author: Alexander Lutsai +# Year: 2021 +# Description: This script draws menu to choose, mount and unmount drives + +import curses +import curses.ascii +import subprocess +import json +import sys + + +class ChoosePartition: + blkinfo = None + screen = None + selected_partn = 1 + selected_mountpoint = None + partn = 1 + help_message = ["Press 'm' to mount, 'u' to unmount, 'g' to refresh", + " and 'e' to unmount, 'p' to poweroff drive, 'enter' to cd"] + message = "" + + def __init__(self): + self.screen = curses.initscr() + curses.start_color() + curses.curs_set(0) + curses.noecho() + curses.cbreak() + self.screen.keypad(True) + curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE) + self.selected_partn = 1 + self._read_partitions() + + def _read_partitions(self): + r = subprocess.check_output(['lsblk', '--all', '--json', '-O']) + r = r.decode().replace('0B,', '\"0B\",') + self.blkinfo = json.loads(r.encode()) + partn = 0 + # filter for devices with children, none other are used by this script + # (this is not entirely correct, but goes beyond these lines) + self.blkinfo['blockdevices'] = [ + bd + for bd in self.blkinfo['blockdevices'] + if 'children' in bd] + for bd in self.blkinfo['blockdevices']: + if 'children' not in bd: + continue + for part in bd['children']: + partn += 1 + + self.partn = partn + if self.selected_partn > self.partn: + self.selected_partn = self.partn + if self.selected_partn <= 0: + self.selected_partn = 1 + + def _get_part_by_partn(self): + partn = 0 + for bd in self.blkinfo['blockdevices']: + if 'children' not in bd: + continue + for part in bd['children']: + partn += 1 + if self.selected_partn == partn: + return part + return None + + def _get_drive_by_partn(self): + partn = 0 + for bd in self.blkinfo['blockdevices']: + if 'children' not in bd: + continue + for part in bd['children']: + partn += 1 + if self.selected_partn == partn: + return bd + return None + + def _select_print_part(self, part, is_selected, i): + if not ('mountpoint' in part and + 'name' in part and + 'size' in part): + raise Exception('Wrong lsblk json format.' + + 'No mountpoint, name or size in the partition') + label = "" + label_fields = ['label', 'partlabel', 'parttypename', 'fstype'] + for f in label_fields: + if f not in part: + continue + if part[f] is not None: + label = part[f] + break + + mp = None + if part['mountpoint'] is not None: + mp = part['mountpoint'] + if is_selected: + self.selected_mountpoint = mp + if mp is None: + mp = "Not mounted" + + s = "{name:<12} {size:<8} {label:<16} {mp}".format( + name=part['name'] if part['name'] is not None else "None", + label=label if label is not None else "None", + size=part['size'] if part['size'] is not None else "None", + mp=mp + ) + self.screen.addstr(2 + i, 4, s, curses.color_pair(is_selected)) + + def _select_print_block_device(self, bd, i): + if not ('model' in bd and + 'size' in bd or + 'name' in bd): + raise Exception('Wrong lsblk json format. ' + + 'No model, size or name in blockdevice') + + model = bd['model'] if bd['model'] is not None else "" + size = bd['size'] if bd['size'] is not None else "" + self.screen.addstr(2 + i, 2, bd['name'] + " " + model + " " + size) + + def _select_print(self, x): + self.screen.clear() + self.screen.border(0) + self.screen.addstr(1, 2, self.help_message[0]) + self.screen.addstr(2, 2, self.help_message[1]) + + partn = 0 + i = 0 + if 'blockdevices' not in self.blkinfo: + raise Exception('Wrong lsblk json format. No field "blockdevices"') + for bd in self.blkinfo['blockdevices']: + i += 1 + bd_selected = False + bd_i = i + self._select_print_block_device(bd, bd_i) + if 'children' not in bd: + continue + for part in bd['children']: + i += 1 + partn += 1 + is_selected = 0 if self.selected_partn != partn else 1 + if is_selected: + bd_selected = True + self._select_print_part(part, is_selected, i) + if bd_selected: + self.screen.addstr(2 + bd_i, 1, ">") + self.screen.addstr(2 + i + 2, 4, self.message) + + def _eject_all(self): + blk = None + partn = 0 + for bd in self.blkinfo['blockdevices']: + if 'children' not in bd: + continue + for part in bd['children']: + partn += 1 + if self.selected_partn == partn: + blk = bd + if blk is None: + return + for part in blk['children']: + self.unmount(part) + + def select(self): + sel = None + x = 0 + # quit when pressed `q` or `Esc` or `Ctrl+g` + while x not in (ord('q'), curses.ascii.ESC, + curses.ascii.BEL, curses.ascii.NL): + self._select_print(x) + x = self.screen.getch() + if x in (ord('j'), curses.ascii.SO, curses.KEY_DOWN): + # down + self.selected_partn += 1 + if self.selected_partn > self.partn: + self.selected_partn = self.partn + elif x in (ord('k'), curses.ascii.DLE, curses.KEY_UP): + # up + self.selected_partn -= 1 + if self.selected_partn <= 0: + self.selected_partn = 1 + elif x == ord('e'): + sel = self._eject_all() + elif x == ord('m'): + sel = self._get_part_by_partn() + if sel is not None: + self.mount(sel) + elif x == ord('u'): + sel = self._get_part_by_partn() + if sel is not None: + self.unmount(sel) + elif x == ord('p'): + sel_drive = self._get_drive_by_partn() + if sel_drive is not None: + self.poweroff(sel_drive) + elif x == ord('g') or x == ord('r'): + self._read_partitions() + curses.endwin() + if self.selected_mountpoint is not None and x == curses.ascii.NL: + return self.selected_mountpoint + return "" + + def _udisk_mount_unmount(self, cmd, dev): + r = "" + try: + r = subprocess.run( + ['udisksctl', cmd, '-b', dev], capture_output=True) + r = (r.stdout.decode(encoding="utf-8") + + r.stderr.decode(encoding="utf-8")) + self.message = r + except Exception as e: + self.message = cmd + " error: " + r + str(e) + self._read_partitions() + + def get_drive_path(self, drive): + if 'path' not in drive: + drive['path'] = '/dev/' + drive['kname'] + return drive['path'] + + def unmount(self, dev): + p = self.get_drive_path(dev) + self._udisk_mount_unmount("unmount", p) + + def poweroff(self, dev): + p = self.get_drive_path(dev) + self._udisk_mount_unmount("power-off", p) + + def mount(self, dev): + p = self.get_drive_path(dev) + self._udisk_mount_unmount("mount", p) + + +if __name__ == "__main__": + cp = ChoosePartition() + sel = cp.select() + # print(sel) + # print(len(sys.argv)) + if len(sys.argv) >= 2: + # print(sys.argv[1]) + with open(sys.argv[1], 'w') as f: + f.write(sel) diff --git a/user/.config/ranger/ranger_udisk_menu/mounter.py b/user/.config/ranger/ranger_udisk_menu/mounter.py new file mode 100644 index 000000000..d7573df8d --- /dev/null +++ b/user/.config/ranger/ranger_udisk_menu/mounter.py @@ -0,0 +1,29 @@ +#!/usr/bin/python3 +# coding: utf-8 +# License: The MIT License +# Author: Alexander Lutsai +# Year: 2021 +# Description: This launches script that draws menu to choose, mount and unmount drives from ranger file manager + +from ranger.api.commands import Command +import tempfile +import os + + +class mount(Command): + """:mount + + Show menu to mount and unmount + """ + def execute(self): + """ Show menu to mount and unmount """ + (f, p) = tempfile.mkstemp() + os.close(f) + self.fm.execute_console( + f"shell python3 {os.path.dirname(os.path.realpath(__file__))}/menu.py {p}" + ) + with open(p, 'r') as f: + d = f.readline() + if os.path.exists(d): + self.fm.cd(d) + os.remove(p) diff --git a/user/.config/ranger/rc.conf b/user/.config/ranger/rc.conf new file mode 100644 index 000000000..ae65ab03f --- /dev/null +++ b/user/.config/ranger/rc.conf @@ -0,0 +1,3 @@ +set preview_images true +set preview_images_method iterm2 +set viewmode multipane diff --git a/user/.config/ranger/rifle.conf b/user/.config/ranger/rifle.conf new file mode 100644 index 000000000..86f53fd10 --- /dev/null +++ b/user/.config/ranger/rifle.conf @@ -0,0 +1,284 @@ +# vim: ft=cfg +# +# This is the configuration file of "rifle", ranger's file executor/opener. +# Each line consists of conditions and a command. For each line the conditions +# are checked and if they are met, the respective command is run. +# +# Syntax: +# , , ... = command +# +# The command can contain these environment variables: +# $1-$9 | The n-th selected file +# $@ | All selected files +# +# If you use the special command "ask", rifle will ask you what program to run. +# +# Prefixing a condition with "!" will negate its result. +# These conditions are currently supported: +# match | The regexp matches $1 +# ext | The regexp matches the extension of $1 +# mime | The regexp matches the mime type of $1 +# name | The regexp matches the basename of $1 +# path | The regexp matches the absolute path of $1 +# has | The program is installed (i.e. located in $PATH) +# env | The environment variable "variable" is non-empty +# file | $1 is a file +# directory | $1 is a directory +# number | change the number of this command to n +# terminal | stdin, stderr and stdout are connected to a terminal +# X | A graphical environment is available (darwin, Xorg, or Wayland) +# +# There are also pseudo-conditions which have a "side effect": +# flag | Change how the program is run. See below. +# label