From 749e18793d5198dff90efc23bbc3c648bd208a90 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 21 Jun 2024 08:56:09 +0200 Subject: [PATCH 01/77] [nvidia] Add comments --- nixos/modules/hardware/nvidia/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/modules/hardware/nvidia/default.nix b/nixos/modules/hardware/nvidia/default.nix index 036cf4c..f4a0248 100644 --- a/nixos/modules/hardware/nvidia/default.nix +++ b/nixos/modules/hardware/nvidia/default.nix @@ -42,9 +42,12 @@ in { driSupport = true; driSupport32Bit = true; }; + nvidia = { + # Use the NVidia open source kernel module open = false; package = config.boot.kernelPackages.nvidiaPackages.stable; + # Modesetting is required. modesetting.enable = true; nvidiaSettings = cfg.gui-settings; powerManagement = { -- 2.47.2 From f9b9424b2974d9af382f2fc7ad8783f8d0d9ada1 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 21 Jun 2024 16:11:01 +0200 Subject: [PATCH 02/77] colors --- colors.sh | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 colors.sh diff --git a/colors.sh b/colors.sh new file mode 100644 index 0000000..d7ccfdc --- /dev/null +++ b/colors.sh @@ -0,0 +1,81 @@ +# tdpeuter color schemes +# The goal is to offer light and dark theme that is easy on the eyes, +# whilst also being unique and defining. + +############################### +# tdpeuter-light color scheme # +############################### + +# 171717 # Foreground +# FAFAFA # Daisy (Background) + +# Regular colors (0-7) + +# 000000 # Black (0) +# 1 +# 2 +# 3 +# 4 +# 5 +# 6 +# 7 + +# Bright colors (8-15) + +# 000000 # Black (8) +# 9 +# 10 +# 11 +# 12 +# 13 +# 14 +# 15 + +############################## +# tdpeuter-dark color scheme # +############################## + +# FAFAFA # Daisy (Foreground) +printf "\033]10;#FAFAFA\007" +# 171717 # Background +printf "\033]11;#171717\007" + +# Regular colors (0-7) + +# 242124 # Black 0 +printf "\033]4;0;#242124\007" +# B90E0A # Crimson (Red) 1 +printf "\033]4;1;#B90E0A\007" +# B2BC68 # Leafy (Green) 2 +printf "\033]4;2;#B2BC68\007" +# FFE135 # Banana (Yellow) 3 +printf "\033]4;3;#FFE135\007" +# 80A2BE # Icicle (Blue) 4 +printf "\033]4;4;#80A2BE\007" +# A45EE5 # Amethyst (Magenta) 5 +printf "\033]4;5;#A45EE5\007" +# # (Cyan) 6 +printf "\033]4;6;#80A2BE\007" +# FBFCF8 # Pearl (White) 7 +printf "\033]4;7;#FBFCF8\007" + +# Bright colors (8-15) + +# 363636 # Grey-isch (Black) 8 +printf "\033]4;8;#363636\007" +# BC544B # Blush (Red) 9 +printf "\033]4;9;#BC544B\007" +# A6E3A1 # Lime (Green) 10 +printf "\033]4;10;#A6E3A1\007" +# FCF4A3 # Banana (Yellow) 11 +printf "\033]4;11;#FCF4A3\007" +# 74C7EC # Sapphire (Blue) 12 +printf "\033]4;12;#74C7EC\007" +# B4BEFE # Lavender (Magenta) 13 +# #CBA6F7 +printf "\033]4;13;#B4BEFE\007" +# # (Cyan) 14 +printf "\033]4;14;#74C7EC\007" +# FFFFFF # White 15 +printf "\033]4;15;#FFFFFF\007" + -- 2.47.2 From 40f4ac6e12ca839a33c7a0e0d9e53fa91c5010c3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 5 Sep 2024 17:11:52 +0200 Subject: [PATCH 03/77] [sway] Add ignore mode --- stow/sway/.config/sway/keybinds | 13 +++----- stow/sway/.config/sway/modes | 55 +++++++++++++++++++++------------ 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/stow/sway/.config/sway/keybinds b/stow/sway/.config/sway/keybinds index 7a75d3f..7fe3ffc 100644 --- a/stow/sway/.config/sway/keybinds +++ b/stow/sway/.config/sway/keybinds @@ -1,7 +1,8 @@ set $notify ~/projects/sisyphus/scripts/notify.sh -# Focus bindsym { + + # Focus $flag+$up focus up $flag+$right focus right $flag+$down focus down @@ -14,10 +15,8 @@ bindsym { $flag+p focus parent $flag+space focus mode_toggle -} -# Move windows -bindsym { + # Move windows $flag+Shift+$up move up $flag+Shift+$right move right $flag+Shift+$down move down @@ -32,10 +31,8 @@ bindsym { $flag+KP_Next move scratchpad $flag+Prior scratchpad show $flag+KP_Prior scratchpad show -} -# Layouts -bindsym { + # Layouts $flag+z layout toggle split $flag+x layout tabbed $flag+c split h @@ -224,8 +221,6 @@ bindsym { # File explorer $flag+e exec $term -e vifm - # Internet browser - $flag+i exec firefox } bindgesture { diff --git a/stow/sway/.config/sway/modes b/stow/sway/.config/sway/modes index 6a80baa..074dab5 100644 --- a/stow/sway/.config/sway/modes +++ b/stow/sway/.config/sway/modes @@ -5,9 +5,9 @@ set $default "default" # Resizing -set $resize "Resize" -bindsym $flag+r mode $resize -mode $resize bindsym { +set $mode_resize "Resize" +bindsym $flag+r mode $mode_resize +mode $mode_resize bindsym { $right resize grow width 10 px or 10 ppt $up resize grow height 10 px or 10 ppt $left resize shrink width 10 px or 10 ppt @@ -38,9 +38,9 @@ mode $resize bindsym { $flag+Left move left $flag+Down move down - Return mode $default - Escape mode $default $flag+r mode $default + Escape mode $default + Return mode $default } # System actions @@ -53,9 +53,23 @@ mode $mode_system bindsym { r mode $default, exec systemctl reboot Shift+s mode $default, exec systemctl poweroff -i - Return mode $default - Escape mode $default Control+$alt+Delete mode $default + Escape mode $default + Return mode $default +} + +set $mode_preferences "Toggle (d)ark mode, (s)unset, (n)otification" +bindsym $alt+end mode $mode_preferences +bindsym $alt+KP_End mode $mode_preferences +mode $mode_preferences bindsym { + d exec "${SCRIPT_DIR}/toggle-light-dark.sh", mode $default + s exec "${SCRIPT_DIR}/sunset.sh", mode $default + n exec "${SCRIPT_DIR}/do-not-disturb.sh", mode $default + + $alt+end mode $default + $alt+KP_End mode $default + Escape mode $default + Return mode $default } # Screenshots @@ -72,20 +86,23 @@ mode $mode_screenshot bindsym { Shift+s exec grimshot --notify save screen $save_format, mode $default Print exec grimshot --notify save screen $save_format, mode $default - Return mode $default Escape mode $default + Return mode $default } -set $mode_preferences "Toggle (d)ark mode, (s)unset, (n)otification" -bindsym $alt+end mode $mode_preferences -bindsym $alt+KP_End mode $mode_preferences -mode $mode_preferences bindsym { - d exec "${SCRIPT_DIR}/toggle-light-dark.sh", mode $default - s exec "${SCRIPT_DIR}/sunset.sh", mode $default - n exec "${SCRIPT_DIR}/do-not-disturb.sh", mode $default +# Launcher +set $mode_launcher "Launch (f)irefox, (s)potify or (t)hunderbird." +bindsym $flag+o mode $mode_launcher +mode $mode_launcher bindsym { + f exec firefox + t exec thunderbird - Return mode $default - Escape mode $default - $alt+end mode $default - $alt+KP_End mode $default + $flag+o mode $default + Escape mode $default + Return mode $default } + +# Ignore (all) keybinds. Useful when working with Virtual Machines. +set $mode_ignore "Ignore keybinds - Press Control+Alt+Insert to escape." +bindsym Control+$alt+Insert mode $mode_ignore +mode $mode_ignore bindsym Control+$alt+Insert mode $default -- 2.47.2 From 8f5c38f525806871d354675f26c2536c08e01f78 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 5 Sep 2024 17:12:54 +0200 Subject: [PATCH 04/77] [firefox] Add NixOS Options search --- nixos/users/tdpeuter/firefox.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index 4c4a88c..1ff9e4c 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -47,6 +47,17 @@ in { icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@np" ]; }; + "NixOS Options" = { + urls = [{ + template = "https://search.nixos.org/options"; + params = [ + { name = "query"; value = "{searchTerms}"; } + ]; + }]; + + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@no" ]; + }; "GitHub" = { urls = [{ template = "https://github.com/search"; -- 2.47.2 From 4c8d6dfc2722af357966281413c9044d404485a3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 5 Sep 2024 17:26:10 +0200 Subject: [PATCH 05/77] [sway] Add package for mirroring --- nixos/modules/desktop/sway/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/modules/desktop/sway/default.nix b/nixos/modules/desktop/sway/default.nix index 267fe03..bab109b 100644 --- a/nixos/modules/desktop/sway/default.nix +++ b/nixos/modules/desktop/sway/default.nix @@ -65,14 +65,17 @@ in { config = lib.mkIf cfg.enable { environment.systemPackages = (with pkgs; [ + # Window manager related dbus-sway-environment configure-gtk wayland xdg-utils # Open with default program glib # gsettings wl-clipboard + wl-mirror # Mirror an output wdisplays # Tool to configure displays + # Desktop Environment related brightnessctl dunst libnotify -- 2.47.2 From a113c47eac28f9115bc06bd33d44c0d8d5d99d13 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 19 Sep 2024 15:29:55 +0200 Subject: [PATCH 06/77] [remEYEnder] Add module --- nixos/modules/services/default.nix | 1 + nixos/modules/services/remEYEnder/default.nix | 33 +++++++++++++++++++ nixos/users/tdpeuter/default.nix | 1 + 3 files changed, 35 insertions(+) create mode 100644 nixos/modules/services/remEYEnder/default.nix diff --git a/nixos/modules/services/default.nix b/nixos/modules/services/default.nix index 8abb180..663fc70 100644 --- a/nixos/modules/services/default.nix +++ b/nixos/modules/services/default.nix @@ -5,6 +5,7 @@ ./openssh ./pipewire ./printing + ./remEYEnder ./tailscale ]; } diff --git a/nixos/modules/services/remEYEnder/default.nix b/nixos/modules/services/remEYEnder/default.nix new file mode 100644 index 0000000..d256bda --- /dev/null +++ b/nixos/modules/services/remEYEnder/default.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.sisyphus.services.remEYEnder; +in { + option.sisyphus.services.remEYEnder.enable = lib.mkEnableOption "Eye reminder"; + + config = lib.mkIf cfg.enable { + systemd.user = { + services.remEYEnder = { + enable = true; + description = "Send an eye reminder"; + serviceConfig.Type = "oneshot"; + script = '' + # Display reminder for 20 seconds. + ${pkgs.libnotify}/bin/notify-send -t 20000 "RemEYEnder" "Look away from your screen :)" + ''; + }; + timers.remEYEnder = { + enable = true; + description = "Timer for remEYEnders, runs every 20 minutes."; + wantedBy = [ + "timers.target" + ]; + timerConfig = { + OnActiveSec = "20min"; + OnUnitActiveSec = "20min"; + Unit = "remEYEnder.service"; + }; + }; + }; + }; +} diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index 1e11671..f97415b 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -46,6 +46,7 @@ in { sisyphus = { programs.spotify-adblock.enable = true; + services.remEYEnder.enable = true; }; home-manager.users.tdpeuter = lib.mkIf config.sisyphus.programs.home-manager.enable { -- 2.47.2 From b27b60a01ba04f7d43984938827d72102a58ada3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 19 Sep 2024 15:30:17 +0200 Subject: [PATCH 07/77] [zsh] Add common aliases --- stow/zsh/.zshrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stow/zsh/.zshrc b/stow/zsh/.zshrc index 318afca..b21803c 100644 --- a/stow/zsh/.zshrc +++ b/stow/zsh/.zshrc @@ -54,8 +54,12 @@ alias free='free -m' alias gs='git status' alias hgrep='history | grep' alias ll='ls -la' +alias mkdir='mkdir -pv' alias more='less' +alias mv='mv -i' alias np='nano -w PKGBUILD' +alias rm='rm -I --preserve-root' +alias zip='zip -r' alias update='pushd ~/projects/sisyphus/nixos nix flake update sudo nixos-rebuild switch --flake .# --show-trace -- 2.47.2 From dc8fa782207079c090a3cb39a3802cff33147b6d Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 19 Sep 2024 15:31:50 +0200 Subject: [PATCH 08/77] Clean up NixFat hardware config --- .../Tibo-NixFat/hardware-configuration.nix | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/nixos/hosts/Tibo-NixFat/hardware-configuration.nix b/nixos/hosts/Tibo-NixFat/hardware-configuration.nix index 11384cf..30ba69a 100644 --- a/nixos/hosts/Tibo-NixFat/hardware-configuration.nix +++ b/nixos/hosts/Tibo-NixFat/hardware-configuration.nix @@ -8,21 +8,32 @@ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = { - device = "/dev/disk/by-label/NIX-ROOT"; - fsType = "ext4"; + boot = { + initrd = { + availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_pci_sdmmc" + ]; + kernelModules = [ ]; + luks.devices."luks-c21cb4a4-f618-43af-bc0c-e8be74fe3b81".device = "/dev/disk/by-uuid/c21cb4a4-f618-43af-bc0c-e8be74fe3b81"; + }; + kernelModules = [ "kvm-intel" ]; + extraModulePackages = [ ]; }; - boot.initrd.luks.devices."luks-c21cb4a4-f618-43af-bc0c-e8be74fe3b81".device = "/dev/disk/by-uuid/c21cb4a4-f618-43af-bc0c-e8be74fe3b81"; + fileSystems = { + "/" = { + device = "/dev/disk/by-label/NIX-ROOT"; + fsType = "ext4"; + }; - fileSystems."/boot/efi" = { - device = "/dev/disk/by-label/NIX-BOOT"; - fsType = "vfat"; + "/boot/efi" = { + device = "/dev/disk/by-label/NIX-BOOT"; + fsType = "vfat"; + }; }; swapDevices = [ -- 2.47.2 From 5fdf52e0dc00d18c18dcf466286184452e1a2f6d Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 19 Sep 2024 15:56:13 +0200 Subject: [PATCH 09/77] [remEYEnder] Add icon --- .../Vecteezy-License-Information.pdf | Bin 0 -> 83983 bytes nixos/modules/services/remEYEnder/default.nix | 6 +- ...yes-line-icon-vector-isolated_13932670.eps | 9936 +++++++++++++++++ ...yes-line-icon-vector-isolated_13932670.jpg | Bin 0 -> 99416 bytes 4 files changed, 9940 insertions(+), 2 deletions(-) create mode 100644 nixos/modules/services/remEYEnder/Vecteezy-License-Information.pdf create mode 100644 nixos/modules/services/remEYEnder/vecteezy_eyes-line-icon-vector-isolated_13932670.eps create mode 100644 nixos/modules/services/remEYEnder/vecteezy_eyes-line-icon-vector-isolated_13932670.jpg diff --git a/nixos/modules/services/remEYEnder/Vecteezy-License-Information.pdf b/nixos/modules/services/remEYEnder/Vecteezy-License-Information.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bf8503e9be417366f9bb1789c3cdd8d5b9ce03b3 GIT binary patch literal 83983 zcmdSt(rBfYSyf&)lDfYEc%L>ksXzCWp#KQ6^WUdgOrKX>b)r{ zH#bPq#L__5*2L97pOhISNy@>>$-xSeA!TM^28ocevNJ=#AZbz#kRmAuGlYp9Bu=VM z%E8G-%EG~}$;*psV5twChxA`RsLr+qhQC*0WkN+_`s2gQM*8qZYWXJ&poR5sFjm%o z17m0ZS3DM0CeFXZ*#EW$3xt{ZZ+L9rzvHp91B`)w{z)GT=ikS&GJzrgipR?Qclua4 zSpG&cn2qUg>w?+9f7>sZgY$2+K$w_W{&igl8{6M#fp9_(_`mLh?ceYeKx6tBJQfxf z=D)$f9FTwIGbW4TKH! ztn>{)5~M6_tRP7POCx(@Qf5w0K>b+2>>veFW_DIyUORhR16>PLB;$qmIyy^6IyyG* zb#!$wuwg5fy-8@kB6UAc!imSx>anS`c02?$Et^E;dwLzwll1;p!qOA0IPNPtPQ#GY zqc!>-N7L@?qO!eLNYge$d@4JAot>N~u?ea6uI47YQ9K1_DwyIjVsH^lTco|hRk(dN z^0I^N>HY0JzXFeZgoUv5P>KBfg}66yS{@?=sE1OSq8f(2n<;bfcdc<^y<2ilcT0~6 z4!nh#@FzzQ?Q-Hz#0+xqu8;N^&Bg3rM8nW|G$hB%2sIghZ0Qf<@%ya)G)KCYMl=SN zuih!pf}{-Wb@g@ab%6r}&Kx*E8EXSe0X=&YD@(vW0b&XTIoO*67R(O70b~yV$m$wB zv;eIDT8b{#1|T6|4s$CbkdldklYuR8c!mbH29|mTc7WIjo7fsW%m|WXk>>?If10%4 z3;aQqusUE5A0`wvvDXACfW)j6t^SG&?fe5*z|zvn9-xN>&{co}0b6@PD`#~kMu1+R zurad$-|U>gw612? z6O;%j-~QY)z{iKZL3t0r|G@_+4nQrGKTy~MPk}ZR2Ic(&9?%CJ^C!>#34834nD6qo=}eNYnsO~lz=Ou-&7azKyRLl0ozNdXlDi2`yB02LJhbe7*{T2YZ1 z82X^m(DiMt^b`#2)j>eq0#Y<^wg(~&z^p?jBV__9>b|!FDT5SkO)UPSxId^p^tAq} zqfmW>>L{Sg52OIAKbQ=le$Wb_elRmY{h)6^4ULoJHUDW6pyU2jbHLgBHVJ|Xz-|

g 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/PUT + }ifelse + pdfmark_5 + }forall +}bdf +/lmt{ + dup 2 index le{exch}if pop dup 2 index ge{exch}if pop +}bdf +/int{ + dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop +}bdf +/ds{ + Adobe_AGM_Utils begin +}bdf +/dt{ + currentdict Adobe_AGM_Utils eq{ + end + }if +}bdf +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_AGM_Core 2.0 0 +%%Version: 2.0 0 +%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Core 209 dict dup begin put +/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def +/AGMCORE_str256 256 string def +/AGMCORE_save nd +/AGMCORE_graphicsave nd +/AGMCORE_c 0 def +/AGMCORE_m 0 def +/AGMCORE_y 0 def +/AGMCORE_k 0 def +/AGMCORE_cmykbuf 4 array def +/AGMCORE_screen[currentscreen]cvx def +/AGMCORE_tmp 0 def +/AGMCORE_&setgray nd +/AGMCORE_&setcolor nd +/AGMCORE_&setcolorspace nd +/AGMCORE_&setcmykcolor nd +/AGMCORE_cyan_plate nd +/AGMCORE_magenta_plate nd +/AGMCORE_yellow_plate nd +/AGMCORE_black_plate nd +/AGMCORE_plate_ndx nd +/AGMCORE_get_ink_data nd +/AGMCORE_is_cmyk_sep nd +/AGMCORE_host_sep nd +/AGMCORE_avoid_L2_sep_space nd +/AGMCORE_distilling nd +/AGMCORE_composite_job nd +/AGMCORE_producing_seps nd +/AGMCORE_ps_level -1 def +/AGMCORE_ps_version -1 def +/AGMCORE_environ_ok nd +/AGMCORE_CSD_cache 0 dict def +/AGMCORE_currentoverprint false def +/AGMCORE_deltaX nd +/AGMCORE_deltaY nd +/AGMCORE_name nd +/AGMCORE_sep_special nd +/AGMCORE_err_strings 4 dict def +/AGMCORE_cur_err nd +/AGMCORE_current_spot_alias false def +/AGMCORE_inverting false def +/AGMCORE_feature_dictCount nd +/AGMCORE_feature_opCount nd +/AGMCORE_feature_ctm nd +/AGMCORE_ConvertToProcess false def +/AGMCORE_Default_CTM matrix def +/AGMCORE_Default_PageSize nd +/AGMCORE_Default_flatness nd +/AGMCORE_currentbg nd +/AGMCORE_currentucr nd +/AGMCORE_pattern_paint_type 0 def +/knockout_unitsq nd +currentglobal true setglobal +[/CSA/Gradient/Procedure] +{ + /Generic/Category findresource dup length dict copy/Category defineresource pop +}forall +setglobal +/AGMCORE_key_known +{ + where{ + /Adobe_AGM_Core_Id known + }{ + false + }ifelse +}ndf +/flushinput +{ + save + 2 dict begin + /CompareBuffer 3 -1 roll def + /readbuffer 256 string def + mark + { + currentfile readbuffer{readline}stopped + {cleartomark mark} + { + not + {pop exit} + if + CompareBuffer eq + {exit} + if + }ifelse + }loop + cleartomark + end + restore +}bdf +/getspotfunction +{ + AGMCORE_screen exch pop exch pop + dup type/dicttype eq{ + dup/HalftoneType get 1 eq{ + /SpotFunction get + }{ + dup/HalftoneType get 2 eq{ + /GraySpotFunction get + }{ + pop + { + abs exch abs 2 copy add 1 gt{ + 1 sub dup mul exch 1 sub dup mul add 1 sub + }{ + dup mul exch dup mul add 1 exch sub + }ifelse + }bind + }ifelse + }ifelse + }if +}def +/np +{newpath}bdf +/clp_npth +{clip np}def +/eoclp_npth +{eoclip np}def +/npth_clp +{np clip}def +/graphic_setup +{ + /AGMCORE_graphicsave save store + concat + 0 setgray + 0 setlinecap + 0 setlinejoin + 1 setlinewidth + []0 setdash + 10 setmiterlimit + np + false setoverprint + false setstrokeadjust + //Adobe_AGM_Core/spot_alias gx + /Adobe_AGM_Image where{ + pop + Adobe_AGM_Image/spot_alias 2 copy known{ + gx + }{ + pop pop + }ifelse + }if + /sep_colorspace_dict null AGMCORE_gput + 100 dict begin + /dictstackcount countdictstack def + /showpage{}def + mark +}def +/graphic_cleanup +{ + cleartomark + dictstackcount 1 countdictstack 1 sub{end}for + end + AGMCORE_graphicsave restore +}def +/compose_error_msg +{ + grestoreall initgraphics + /Helvetica findfont 10 scalefont setfont + /AGMCORE_deltaY 100 def + /AGMCORE_deltaX 310 def + clippath pathbbox np pop pop 36 add exch 36 add exch moveto + 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto + 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath + 0 AGMCORE_&setgray + gsave 1 AGMCORE_&setgray fill grestore + 1 setlinewidth gsave stroke grestore + currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto + /AGMCORE_deltaY 12 def + /AGMCORE_tmp 0 def + AGMCORE_err_strings exch get + { + dup 32 eq + { + pop + AGMCORE_str256 0 AGMCORE_tmp getinterval + stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt + { + currentpoint AGMCORE_deltaY sub exch pop + clippath pathbbox pop pop pop 44 add exch moveto + }if + AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show + 0 1 AGMCORE_str256 length 1 sub + { + AGMCORE_str256 exch 0 put + }for + /AGMCORE_tmp 0 def + }{ + AGMCORE_str256 exch AGMCORE_tmp xpt + /AGMCORE_tmp AGMCORE_tmp 1 add def + }ifelse + }forall +}bdf +/AGMCORE_CMYKDeviceNColorspaces[ + [/Separation/None/DeviceCMYK{0 0 0}] + [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind] + [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind] + [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind] + [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind] + [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind] + [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind] + [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind] + [/Separation(Cyan)/DeviceCMYK{0 0 0}] + [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind] + [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind] + [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind] + [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}] + [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind] + [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}] + [/DeviceCMYK] +]def +/ds{ + Adobe_AGM_Core begin + /currentdistillerparams where + { + pop currentdistillerparams/CoreDistVersion get 5000 lt + {<>setdistillerparams}if + }if + /AGMCORE_ps_version xdf + /AGMCORE_ps_level xdf + errordict/AGM_handleerror known not{ + errordict/AGM_handleerror errordict/handleerror get put + errordict/handleerror{ + Adobe_AGM_Core begin + $error/newerror get AGMCORE_cur_err null ne and{ + $error/newerror false put + AGMCORE_cur_err compose_error_msg + }if + $error/newerror true put + end + errordict/AGM_handleerror get exec + }bind put + }if + /AGMCORE_environ_ok + ps_level AGMCORE_ps_level ge + ps_version AGMCORE_ps_version ge and + AGMCORE_ps_level -1 eq or + def + AGMCORE_environ_ok not + {/AGMCORE_cur_err/AGMCORE_bad_environ def}if + /AGMCORE_&setgray systemdict/setgray get def + level2{ + /AGMCORE_&setcolor systemdict/setcolor get def + /AGMCORE_&setcolorspace systemdict/setcolorspace get def + }if + /AGMCORE_currentbg currentblackgeneration def + /AGMCORE_currentucr currentundercolorremoval def + /AGMCORE_Default_flatness currentflat def + /AGMCORE_distilling + /product where{ + pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and + }{ + false + }ifelse + def + /AGMCORE_GSTATE AGMCORE_key_known not{ + /AGMCORE_GSTATE 21 dict def + /AGMCORE_tmpmatrix matrix def + /AGMCORE_gstack 64 array def + /AGMCORE_gstackptr 0 def + /AGMCORE_gstacksaveptr 0 def + /AGMCORE_gstackframekeys 14 def + /AGMCORE_&gsave/gsave ldf + /AGMCORE_&grestore/grestore ldf + /AGMCORE_&grestoreall/grestoreall ldf + /AGMCORE_&save/save ldf + /AGMCORE_&setoverprint/setoverprint ldf + /AGMCORE_gdictcopy{ + begin + {def}forall + end + }def + /AGMCORE_gput{ + AGMCORE_gstack AGMCORE_gstackptr get + 3 1 roll + put + }def + /AGMCORE_gget{ + AGMCORE_gstack AGMCORE_gstackptr get + exch + get + }def + /gsave{ + AGMCORE_&gsave + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 64 ge{limitcheck}if + /AGMCORE_gstackptr exch store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /grestore{ + AGMCORE_&grestore + AGMCORE_gstackptr 1 sub + dup AGMCORE_gstacksaveptr lt{1 add}if + dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known + {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse + /AGMCORE_gstackptr exch store + }def + /grestoreall{ + AGMCORE_&grestoreall + /AGMCORE_gstackptr AGMCORE_gstacksaveptr store + }def + /save{ + AGMCORE_&save + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 64 ge{limitcheck}if + /AGMCORE_gstackptr exch store + /AGMCORE_gstacksaveptr AGMCORE_gstackptr store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /setoverprint{ + dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint + }def + 0 1 AGMCORE_gstack length 1 sub{ + AGMCORE_gstack exch AGMCORE_gstackframekeys dict put + }for + }if + level3/AGMCORE_&sysshfill AGMCORE_key_known not and + { + /AGMCORE_&sysshfill systemdict/shfill get def + /AGMCORE_&sysmakepattern systemdict/makepattern get def + /AGMCORE_&usrmakepattern/makepattern load def + }if + /currentcmykcolor[0 0 0 0]AGMCORE_gput + /currentstrokeadjust false AGMCORE_gput + /currentcolorspace[/DeviceGray]AGMCORE_gput + /sep_tint 0 AGMCORE_gput + /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput + /sep_colorspace_dict null AGMCORE_gput + /devicen_colorspace_dict null AGMCORE_gput + /indexed_colorspace_dict null AGMCORE_gput + /currentcolor_intent()AGMCORE_gput + /customcolor_tint 1 AGMCORE_gput + /absolute_colorimetric_crd null AGMCORE_gput + /relative_colorimetric_crd null AGMCORE_gput + /saturation_crd null AGMCORE_gput + /perceptual_crd null AGMCORE_gput + currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf + cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf + << + /MaxPatternItem currentsystemparams/MaxPatternCache get + >> + setuserparams + end +}def +/ps +{ + /setcmykcolor where{ + pop + Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put + }if + Adobe_AGM_Core begin + /setcmykcolor + { + 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput + 1 sub 4 1 roll + 3{ + 3 index add neg dup 0 lt{ + pop 0 + }if + 3 1 roll + }repeat + setrgbcolor pop + }ndf + /currentcmykcolor + { + /currentcmykcolor AGMCORE_gget aload pop + }ndf + /setoverprint + {pop}ndf + /currentoverprint + {false}ndf + /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def + /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def + /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def + /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def + /AGMCORE_plate_ndx + AGMCORE_cyan_plate{ + 0 + }{ + AGMCORE_magenta_plate{ + 1 + }{ + AGMCORE_yellow_plate{ + 2 + }{ + AGMCORE_black_plate{ + 3 + }{ + 4 + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_have_reported_unsupported_color_space false def + /AGMCORE_report_unsupported_color_space + { + AGMCORE_have_reported_unsupported_color_space false eq + { + (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)== + Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf + }if + }def + /AGMCORE_composite_job + AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def + /AGMCORE_in_rip_sep + /AGMCORE_in_rip_sep where{ + pop AGMCORE_in_rip_sep + }{ + AGMCORE_distilling + { + false + }{ + userdict/Adobe_AGM_OnHost_Seps known{ + false + }{ + level2{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def + /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def + /AGM_preserve_spots + /AGM_preserve_spots where{ + pop AGM_preserve_spots + }{ + AGMCORE_distilling AGMCORE_producing_seps or + }ifelse + def + /AGM_is_distiller_preserving_spotimages + { + currentdistillerparams/PreserveOverprintSettings known + { + currentdistillerparams/PreserveOverprintSettings get + { + currentdistillerparams/ColorConversionStrategy known + { + currentdistillerparams/ColorConversionStrategy get + /sRGB ne + }{ + true + }ifelse + }{ + false + }ifelse + }{ + false + }ifelse + }def + /convert_spot_to_process where{pop}{ + /convert_spot_to_process + { + //Adobe_AGM_Core begin + dup map_alias{ + /Name get exch pop + }if + dup dup(None)eq exch(All)eq or + { + pop false + }{ + AGMCORE_host_sep + { + gsave + 1 0 0 0 setcmykcolor currentgray 1 exch sub + 0 1 0 0 setcmykcolor currentgray 1 exch sub + 0 0 1 0 setcmykcolor currentgray 1 exch sub + 0 0 0 1 setcmykcolor currentgray 1 exch sub + add add add 0 eq + { + pop false + }{ + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + }ifelse + grestore + }{ + AGMCORE_distilling + { + pop AGM_is_distiller_preserving_spotimages not + }{ + //Adobe_AGM_Core/AGMCORE_name xddf + false + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq + AGMUTIL_cpd/OverrideSeparations known and + { + AGMUTIL_cpd/OverrideSeparations get + { + /HqnSpots/ProcSet resourcestatus + { + pop pop pop true + }if + }if + }if + { + AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not + }{ + gsave + [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace + false + AGMUTIL_cpd/SeparationColorNames 2 copy known + { + get + {AGMCORE_name eq or}forall + not + }{ + pop pop pop true + }ifelse + grestore + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + }ifelse + /convert_to_process where{pop}{ + /convert_to_process + { + dup length 0 eq + { + pop false + }{ + AGMCORE_host_sep + { + dup true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process and}ifelse + } + forall + { + true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + (Black)eq or and + }forall + not + }{pop false}ifelse + }{ + false exch + { + /PhotoshopDuotoneList where{pop false}{true}ifelse + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process or}ifelse + } + { + convert_spot_to_process or + } + ifelse + } + forall + }ifelse + }ifelse + }def + }ifelse + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and + AGMCORE_producing_seps not and + def + /AGMCORE_is_cmyk_sep + AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or + def + /AGM_avoid_0_cmyk where{ + pop AGM_avoid_0_cmyk + }{ + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known + userdict/Adobe_AGM_InRip_Seps known or + not and + }ifelse + { + /setcmykcolor[ + { + 4 copy add add add 0 eq currentoverprint and{ + pop 0.0005 + }if + }/exec cvx + /AGMCORE_&setcmykcolor load dup type/operatortype ne{ + /exec cvx + }if + ]cvx def + }if + /AGMCORE_IsSeparationAProcessColor + { + dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or + }def + AGMCORE_host_sep{ + /setcolortransfer + { + AGMCORE_cyan_plate{ + pop pop pop + }{ + AGMCORE_magenta_plate{ + 4 3 roll pop pop pop + }{ + AGMCORE_yellow_plate{ + 4 2 roll pop pop pop + }{ + 4 1 roll pop pop pop + }ifelse + }ifelse + }ifelse + settransfer + } + def + /AGMCORE_get_ink_data + AGMCORE_cyan_plate{ + {pop pop pop} + }{ + AGMCORE_magenta_plate{ + {4 3 roll pop pop pop} + }{ + AGMCORE_yellow_plate{ + {4 2 roll pop pop pop} + }{ + {4 1 roll pop pop pop} + }ifelse + }ifelse + }ifelse + def + /AGMCORE_RemoveProcessColorNames + { + 1 dict begin + /filtername + { + dup/Cyan eq 1 index(Cyan)eq or + {pop(_cyan_)}if + dup/Magenta eq 1 index(Magenta)eq or + {pop(_magenta_)}if + dup/Yellow eq 1 index(Yellow)eq or + {pop(_yellow_)}if + dup/Black eq 1 index(Black)eq or + {pop(_black_)}if + }def + dup type/arraytype eq + {[exch{filtername}forall]} + {filtername}ifelse + end + }def + level3{ + /AGMCORE_IsCurrentColor + { + dup AGMCORE_IsSeparationAProcessColor + { + AGMCORE_plate_ndx 0 eq + {dup(Cyan)eq exch/Cyan eq or}if + AGMCORE_plate_ndx 1 eq + {dup(Magenta)eq exch/Magenta eq or}if + AGMCORE_plate_ndx 2 eq + {dup(Yellow)eq exch/Yellow eq or}if + AGMCORE_plate_ndx 3 eq + {dup(Black)eq exch/Black eq or}if + AGMCORE_plate_ndx 4 eq + {pop false}if + }{ + gsave + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + grestore + }ifelse + }def + /AGMCORE_filter_functiondatasource + { + 5 dict begin + /data_in xdf + data_in type/stringtype eq + { + /ncomp xdf + /comp xdf + /string_out data_in length ncomp idiv string def + 0 ncomp data_in length 1 sub + { + string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put + }for + string_out + }{ + string/string_in xdf + /string_out 1 string def + /component xdf + [ + data_in string_in/readstring cvx + [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx + [/pop cvx()]cvx/ifelse cvx + ]cvx/ReusableStreamDecode filter + }ifelse + end + }def + /AGMCORE_separateShadingFunction + { + 2 dict begin + /paint? xdf + /channel xdf + dup type/dicttype eq + { + begin + FunctionType 0 eq + { + /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def + currentdict/Decode known + {/Decode Decode channel 2 mul 2 getinterval def}if + paint? not + {/Decode[1 1]def}if + }if + FunctionType 2 eq + { + paint? + { + /C0[C0 channel get 1 exch sub]def + /C1[C1 channel get 1 exch sub]def + }{ + /C0[1]def + /C1[1]def + }ifelse + }if + FunctionType 3 eq + { + /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def + }if + currentdict/Range known + {/Range[0 1]def}if + currentdict + end}{ + channel get 0 paint? AGMCORE_separateShadingFunction + }ifelse + end + }def + /AGMCORE_separateShading + { + 3 -1 roll begin + currentdict/Function known + { + currentdict/Background known + {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if + Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf + /ColorSpace[/DeviceGray]def + }{ + ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }{ + ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put + }ifelse + ColorSpace 0 get/Separation eq + { + { + [1/exch cvx/sub cvx]cvx + }{ + [/pop cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll put + pop + }{ + { + [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx + }{ + pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll bind put + }ifelse + ColorSpace 2/DeviceGray put + }ifelse + end + }def + /AGMCORE_separateShadingDict + { + dup/ColorSpace get + dup type/arraytype ne + {[exch]}if + dup 0 get/DeviceCMYK eq + { + exch begin + currentdict + AGMCORE_cyan_plate + {0 true}if + AGMCORE_magenta_plate + {1 true}if + AGMCORE_yellow_plate + {2 true}if + AGMCORE_black_plate + {3 true}if + AGMCORE_plate_ndx 4 eq + {0 false}if + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + currentdict + end exch + }if + dup 0 get/Separation eq + { + exch begin + ColorSpace 1 get dup/None ne exch/All ne and + { + ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /Separation + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + }if + }ifelse + }{ + currentdict ColorSpace 1 get AGMCORE_IsCurrentColor + 0 exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + }if + currentdict + end exch + }if + dup 0 get/DeviceN eq + { + exch begin + ColorSpace 1 get convert_to_process + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /DeviceN + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + /ColorSpace[/DeviceGray]def + }if + }ifelse + }{ + currentdict + false -1 ColorSpace 1 get + { + AGMCORE_IsCurrentColor + { + 1 add + exch pop true exch exit + }if + 1 add + }forall + exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + currentdict + end exch + }if + dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not + { + exch begin + ColorSpace dup type/arraytype eq + {0 get}if + /DeviceGray ne + { + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + ColorSpace 0 get/CIEBasedA eq + { + /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def + }if + ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or + { + /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def + }if + ColorSpace 0 get/CIEBasedDEFG eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }if + currentdict 0 false AGMCORE_separateShading + }if + }if + currentdict + end exch + }if + pop + dup/AGMCORE_ignoreshade known + { + begin + /ColorSpace[/Separation(None)/DeviceGray{}]def + currentdict end + }if + }def + /shfill + { + AGMCORE_separateShadingDict + dup/AGMCORE_ignoreshade known + {pop} + {AGMCORE_&sysshfill}ifelse + }def + /makepattern + { + exch + dup/PatternType get 2 eq + { + clonedict + begin + /Shading Shading AGMCORE_separateShadingDict def + Shading/AGMCORE_ignoreshade known + currentdict end exch + {pop<>}if + exch AGMCORE_&sysmakepattern + }{ + exch AGMCORE_&usrmakepattern + }ifelse + }def + }if + }if + AGMCORE_in_rip_sep{ + /setcustomcolor + { + exch aload pop + dup 7 1 roll inRip_spot_has_ink not { + 4{4 index mul 4 1 roll} + repeat + /DeviceCMYK setcolorspace + 6 -2 roll pop pop + }{ + //Adobe_AGM_Core begin + /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf + end + [/Separation 4 -1 roll/DeviceCMYK + {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} + ] + setcolorspace + }ifelse + setcolor + }ndf + /setseparationgray + { + [/Separation(All)/DeviceGray{}]setcolorspace_opt + 1 exch sub setcolor + }ndf + }{ + /setseparationgray + { + AGMCORE_&setgray + }ndf + }ifelse + /findcmykcustomcolor + { + 5 makereadonlyarray + }ndf + /setcustomcolor + { + exch aload pop pop + 4{4 index mul 4 1 roll}repeat + setcmykcolor pop + }ndf + /has_color + /colorimage where{ + AGMCORE_producing_seps{ + pop true + }{ + systemdict eq + }ifelse + }{ + false + }ifelse + def + /map_index + { + 1 index mul exch getinterval{255 div}forall + }bdf + /map_indexed_devn + { + Lookup Names length 3 -1 roll cvi map_index + }bdf + /n_color_components + { + base_colorspace_type + dup/DeviceGray eq{ + pop 1 + }{ + /DeviceCMYK eq{ + 4 + }{ + 3 + }ifelse + }ifelse + }bdf + level2{ + /mo/moveto ldf + /li/lineto ldf + /cv/curveto ldf + /knockout_unitsq + { + 1 setgray + 0 0 1 1 rectfill + }def + level2/setcolorspace AGMCORE_key_known not and{ + /AGMCORE_&&&setcolorspace/setcolorspace ldf + /AGMCORE_ReplaceMappedColor + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + /AGMCORE_SpotAliasAry2 where{ + begin + dup 0 get dup/Separation eq + { + pop + dup length array copy + dup dup 1 get + current_spot_alias + { + dup map_alias + { + false set_spot_alias + dup 1 exch setsepcolorspace + true set_spot_alias + begin + /sep_colorspace_dict currentdict AGMCORE_gput + pop pop pop + [ + /Separation Name + CSA map_csa + MappedCSA + /sep_colorspace_proc load + ] + dup Name + end + }if + }if + map_reserved_ink_name 1 xpt + }{ + /DeviceN eq + { + dup length array copy + dup dup 1 get[ + exch{ + current_spot_alias{ + dup map_alias{ + /Name get exch pop + }if + }if + map_reserved_ink_name + }forall + ]1 xpt + }if + }ifelse + end + }if + }if + }def + /setcolorspace + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/Indexed eq + { + AGMCORE_distilling + { + /PhotoshopDuotoneList where + { + pop false + }{ + true + }ifelse + }{ + true + }ifelse + { + aload pop 3 -1 roll + AGMCORE_ReplaceMappedColor + 3 1 roll 4 array astore + }if + }{ + AGMCORE_ReplaceMappedColor + }ifelse + }if + DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if + }def + }if + }{ + /adj + { + currentstrokeadjust{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + }if + }def + /mo{ + adj moveto + }def + /li{ + adj lineto + }def + /cv{ + 6 2 roll adj + 6 2 roll adj + 6 2 roll adj curveto + }def + /knockout_unitsq + { + 1 setgray + 8 8 1[8 0 0 8 0 0]{}image + }def + /currentstrokeadjust{ + /currentstrokeadjust AGMCORE_gget + }def + /setstrokeadjust{ + /currentstrokeadjust exch AGMCORE_gput + }def + /setcolorspace + { + /currentcolorspace exch AGMCORE_gput + }def + /currentcolorspace + { + /currentcolorspace AGMCORE_gget + }def + /setcolor_devicecolor + { + base_colorspace_type + dup/DeviceGray eq{ + pop setgray + }{ + /DeviceCMYK eq{ + setcmykcolor + }{ + setrgbcolor + }ifelse + }ifelse + }def + /setcolor + { + currentcolorspace 0 get + dup/DeviceGray ne{ + dup/DeviceCMYK ne{ + dup/DeviceRGB ne{ + dup/Separation eq{ + pop + currentcolorspace 3 gx + currentcolorspace 2 get + }{ + dup/Indexed eq{ + pop + currentcolorspace 3 get dup type/stringtype eq{ + currentcolorspace 1 get n_color_components + 3 -1 roll map_index + }{ + exec + }ifelse + currentcolorspace 1 get + }{ + /AGMCORE_cur_err/AGMCORE_invalid_color_space def + AGMCORE_invalid_color_space + }ifelse + }ifelse + }if + }if + }if + setcolor_devicecolor + }def + }ifelse + /sop/setoverprint ldf + /lw/setlinewidth ldf + /lc/setlinecap ldf + /lj/setlinejoin ldf + /ml/setmiterlimit ldf + /dsh/setdash ldf + /sadj/setstrokeadjust ldf + /gry/setgray ldf + /rgb/setrgbcolor ldf + /cmyk[ + /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx + /setcmykcolor load dup type/operatortype ne{/exec cvx}if + ]cvx bdf + level3 AGMCORE_host_sep not and{ + /nzopmsc{ + 6 dict begin + /kk exch def + /yy exch def + /mm exch def + /cc exch def + /sum 0 def + cc 0 ne{/sum sum 2#1000 or def cc}if + mm 0 ne{/sum sum 2#0100 or def mm}if + yy 0 ne{/sum sum 2#0010 or def yy}if + kk 0 ne{/sum sum 2#0001 or def kk}if + AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace + sum 0 eq{0}if + end + setcolor + }bdf + }{ + /nzopmsc/cmyk ldf + }ifelse + /sep/setsepcolor ldf + /devn/setdevicencolor ldf + /idx/setindexedcolor ldf + /colr/setcolor ldf + /csacrd/set_csa_crd ldf + /sepcs/setsepcolorspace ldf + /devncs/setdevicencolorspace ldf + /idxcs/setindexedcolorspace ldf + /cp/closepath ldf + /clp/clp_npth ldf + /eclp/eoclp_npth ldf + /f/fill ldf + /ef/eofill ldf + /@/stroke ldf + /nclp/npth_clp ldf + /gset/graphic_setup ldf + /gcln/graphic_cleanup ldf + /ct/concat ldf + /cf/currentfile ldf + /fl/filter ldf + /rs/readstring ldf + /AGMCORE_def_ht currenthalftone def + /clonedict Adobe_AGM_Utils begin/clonedict load end def + /clonearray Adobe_AGM_Utils begin/clonearray load end def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall + /getrampcolor + { + /indx exch def + 0 1 NumComp 1 sub + { + dup + Samples exch get + dup type/stringtype eq{indx get}if + exch + Scaling exch get aload pop + 3 1 roll + mul add + }for + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /sssetbackground{ + aload pop + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /RadialShade + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /r2 xdf + /c2y xdf + /c2x xdf + /r1 xdf + /c1y xdf + /c1x xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + c1x c2x eq + { + c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope c2y c1y sub c2x c1x sub div def + /theta slope 1 atan def + c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if + c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if + }ifelse + gsave + clippath + c1x c1y translate + theta rotate + -90 rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax xdf + /xMax xdf + /yMin xdf + /xMin xdf + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + /max{2 copy gt{pop}{exch pop}ifelse}bdf + /min{2 copy lt{pop}{exch pop}ifelse}bdf + rampdict begin + 40 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + c1x c1y translate + theta rotate + -90 rotate + /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def + /c1y 0 def + /c1x 0 def + /c2x 0 def + ext0 + { + 0 getrampcolor + c2y r2 add r1 sub 0.0001 lt + { + c1x c1y r1 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2y r1 add r2 le + { + c1x c1y r1 0 360 arc + fill + } + { + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r1 neg def + /p1y c1y def + /p2x r1 def + /p2y c1y def + p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y p1x SS1 div neg def + /SS2 90 theta sub dup sin exch cos div def + /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y p2x SS2 div neg def + r1 r2 gt + { + /L1maxX p1x yMin p1y sub SS1 div add def + /L2maxX p2x yMin p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + c1x c2x sub dup mul + c1y c2y sub dup mul + add 0.5 exp + 0 dtransform + dup mul exch dup mul add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + /hires xdf + hires mul + /numpix xdf + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + /xInc c2x c1x sub numsteps div def + /yInc c2y c1y sub numsteps div def + /rInc r2 r1 sub numsteps div def + /cx c1x def + /cy c1y def + /radius r1 def + np + xInc 0 eq yInc 0 eq rInc 0 eq and and + { + 0 getrampcolor + cx cy radius 0 360 arc + stroke + NumSamples 1 sub getrampcolor + cx cy radius 72 hires div add 0 360 arc + 0 setlinewidth + stroke + }{ + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + cx cy radius 0 360 arc + /cx cx xInc add def + /cy cy yInc add def + /radius radius rInc add def + cx cy radius 360 0 arcn + eofill + rampIndxInc add + }repeat + pop + }ifelse + ext1 + { + c2y r2 add r1 lt + { + c2x c2y r2 0 360 arc + fill + }{ + c2y r1 add r2 sub 0.0001 le + { + c2x c2y r2 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r2 neg def + /p1y c2y def + /p2x r2 def + /p2y c2y def + p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y c2y p1x SS1 div sub def + /SS2 90 theta sub dup sin exch cos div def + /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y c2y p2x SS2 div sub def + r1 r2 lt + { + /L1maxX p1x yMax p1y sub SS1 div add def + /L2maxX p2x yMax p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + grestore + grestore + end + end + end + }ifelse + }bdf + /GenStrips + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /y2 xdf + /x2 xdf + /y1 xdf + /x1 xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + x1 x2 eq + { + y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope y2 y1 sub x2 x1 sub div def + /theta slope 1 atan def + x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if + x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if + } + ifelse + gsave + clippath + x1 y1 translate + theta rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax exch def + /xMax exch def + /yMin exch def + /xMin exch def + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + rampdict begin + 20 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + x1 y1 translate + theta rotate + /xStart 0 def + /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def + /ySpan yMax yMin sub def + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + xStart 0 transform + xEnd 0 transform + 3 -1 roll + sub dup mul + 3 1 roll + sub dup mul + add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + mul + /numpix xdf + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + ext0 + { + 0 getrampcolor + xMin xStart lt + { + xMin yMin xMin neg ySpan rectfill + }if + }if + /xInc xEnd xStart sub numsteps div def + /x xStart def + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + x yMin xInc ySpan rectfill + /x x xInc add def + rampIndxInc add + }repeat + pop + ext1{ + xMax xEnd gt + { + xEnd yMin xMax xEnd sub ySpan rectfill + }if + }if + grestore + grestore + end + end + end + }ifelse + }bdf +}def +/pt +{ + end +}def +/dt{ +}def +/pgsv{ + //Adobe_AGM_Core/AGMCORE_save save put +}def +/pgrs{ + //Adobe_AGM_Core/AGMCORE_save get restore +}def +systemdict/findcolorrendering known{ + /findcolorrendering systemdict/findcolorrendering get def +}if +systemdict/setcolorrendering known{ + /setcolorrendering systemdict/setcolorrendering get def +}if +/test_cmyk_color_plate +{ + gsave + setcmykcolor currentgray 1 ne + grestore +}def +/inRip_spot_has_ink +{ + dup//Adobe_AGM_Core/AGMCORE_name xddf + convert_spot_to_process not +}def +/map255_to_range +{ + 1 index sub + 3 -1 roll 255 div mul add +}def +/set_csa_crd +{ + /sep_colorspace_dict null AGMCORE_gput + begin + CSA get_csa_by_name setcolorspace_opt + set_crd + end +} +def +/map_csa +{ + currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse + {pop}{get_csa_by_name/MappedCSA xdf}ifelse +}def +/setsepcolor +{ + /sep_colorspace_dict AGMCORE_gget begin + dup/sep_tint exch AGMCORE_gput + TintProc + end +}def +/setdevicencolor +{ + /devicen_colorspace_dict AGMCORE_gget begin + Names length copy + Names length 1 sub -1 0 + { + /devicen_tints AGMCORE_gget 3 1 roll xpt + }for + TintProc + end +}def +/sep_colorspace_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + currentdict/Components known{ + Components aload pop + TintMethod/Lab eq{ + 2{AGMCORE_tmp mul NComponents 1 roll}repeat + LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll + }{ + TintMethod/Subtractive eq{ + NComponents{ + AGMCORE_tmp mul NComponents 1 roll + }repeat + }{ + NComponents{ + 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll + }repeat + }ifelse + }ifelse + }{ + ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get + aload pop + }ifelse + end +}def +/sep_colorspace_gray_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get + end +}def +/sep_proc_name +{ + dup 0 get + dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{ + pop[/DeviceGray] + /sep_colorspace_gray_proc + }{ + /sep_colorspace_proc + }ifelse +}def +/setsepcolorspace +{ + current_spot_alias{ + dup begin + Name map_alias{ + exch pop + }if + end + }if + dup/sep_colorspace_dict exch AGMCORE_gput + begin + CSA map_csa + /AGMCORE_sep_special Name dup()eq exch(All)eq or store + AGMCORE_avoid_L2_sep_space{ + [/Indexed MappedCSA sep_proc_name 255 exch + {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx + ]setcolorspace_opt + /TintProc{ + 255 mul round cvi setcolor + }bdf + }{ + MappedCSA 0 get/DeviceCMYK eq + currentdict/Components known and + AGMCORE_sep_special not and{ + /TintProc[ + Components aload pop Name findcmykcustomcolor + /exch cvx/setcustomcolor cvx + ]cvx bdf + }{ + AGMCORE_host_sep Name(All)eq and{ + /TintProc{ + 1 exch sub setseparationgray + }bdf + }{ + AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and + AGMCORE_host_sep or + Name()eq and{ + /TintProc[ + MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{ + cvx/setcmykcolor cvx + }{ + cvx/setgray cvx + }ifelse + ]cvx bdf + }{ + AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{ + /TintProc[ + /dup cvx + MappedCSA sep_proc_name cvx exch + 0 get/DeviceGray eq{ + 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx + }if + /Name cvx/findcmykcustomcolor cvx/exch cvx + AGMCORE_host_sep{ + AGMCORE_is_cmyk_sep + /Name cvx + /AGMCORE_IsSeparationAProcessColor load/exec cvx + /not cvx/and cvx + }{ + Name inRip_spot_has_ink not + }ifelse + [ + /pop cvx 1 + ]cvx/if cvx + /setcustomcolor cvx + ]cvx bdf + }{ + /TintProc{setcolor}bdf + [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + set_crd + setsepcolor + end +}def +/additive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 + 0 1 numarrays 1 sub + { + 1 exch add/index cvx + c1/get cvx/mul cvx + }for + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/subtractive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 1 + 0 1 numarrays 1 sub + { + 1 3 3 -1 roll add/index cvx + c1/get cvx/sub cvx/mul cvx + }for + /sub cvx + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/exec_tint_transform +{ + /TintProc[ + /TintTransform cvx/setcolor cvx + ]cvx bdf + MappedCSA setcolorspace_opt +}bdf +/devn_makecustomcolor +{ + 2 dict begin + /names_index xdf + /Names xdf + 1 1 1 1 Names names_index get findcmykcustomcolor + /devicen_tints AGMCORE_gget names_index get setcustomcolor + Names length{pop}repeat + end +}bdf +/setdevicencolorspace +{ + dup/AliasedColorants known{false}{true}ifelse + current_spot_alias and{ + 7 dict begin + /names_index 0 def + dup/names_len exch/Names get length def + /new_names names_len array def + /new_LookupTables names_len array def + /alias_cnt 0 def + dup/Names get + { + dup map_alias{ + exch pop + dup/ColorLookup known{ + dup begin + new_LookupTables names_index ColorLookup put + end + }{ + dup/Components known{ + dup begin + new_LookupTables names_index Components put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + new_names names_index 3 -1 roll/Name get put + /alias_cnt alias_cnt 1 add def + }{ + /name xdf + new_names names_index name put + dup/LookupTables known{ + dup begin + new_LookupTables names_index LookupTables names_index get put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + /names_index names_index 1 add def + }forall + alias_cnt 0 gt{ + /AliasedColorants true def + /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def + 0 1 names_len 1 sub{ + /names_index xdf + new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{ + /AliasedColorants false def + exit + }{ + new_LookupTables names_index get 0 get null eq{ + dup/Names get names_index get/name xdf + name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq + or or or not{ + /AliasedColorants false def + exit + }if + }if + }ifelse + }for + lut_entry_len 1 eq{ + /AliasedColorants false def + }if + AliasedColorants{ + dup begin + /Names new_names def + /LookupTables new_LookupTables def + /AliasedColorants true def + /NComponents lut_entry_len def + /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def + /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def + currentdict/TTTablesIdx known not{ + /TTTablesIdx -1 def + }if + end + }if + }if + end + }if + dup/devicen_colorspace_dict exch AGMCORE_gput + begin + currentdict/AliasedColorants known{ + AliasedColorants + }{ + false + }ifelse + dup not{ + CSA map_csa + }if + /TintTransform load type/nulltype eq or{ + /TintTransform[ + 0 1 Names length 1 sub + { + /TTTablesIdx TTTablesIdx 1 add def + dup LookupTables exch get dup 0 get null eq + { + 1 index + Names exch get + dup(Cyan)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0 0 0 + } + { + dup(Magenta)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0/exch cvx 0 0 + }{ + (Yellow)eq + { + exch + LookupTables length exch sub + /index cvx + 0 0 3 -1/roll cvx 0 + }{ + exch + LookupTables length exch sub + /index cvx + 0 0 0 4 -1/roll cvx + }ifelse + }ifelse + }ifelse + 5 -1/roll cvx/astore cvx + }{ + dup length 1 sub + LookupTables length 4 -1 roll sub 1 add + /index cvx/mul cvx/round cvx/cvi cvx/get cvx + }ifelse + Names length TTTablesIdx add 1 add 1/roll cvx + }for + Names length[/pop cvx]cvx/repeat cvx + NComponents Names length + TintMethod/Subtractive eq + { + subtractive_blend + }{ + additive_blend + }ifelse + ]cvx bdf + }if + AGMCORE_host_sep{ + Names convert_to_process{ + exec_tint_transform + } + { + currentdict/AliasedColorants known{ + AliasedColorants not + }{ + false + }ifelse + 5 dict begin + /AvoidAliasedColorants xdf + /painted? false def + /names_index 0 def + /names_len Names length def + AvoidAliasedColorants{ + /currentspotalias current_spot_alias def + false set_spot_alias + }if + Names{ + AGMCORE_is_cmyk_sep{ + dup(Cyan)eq AGMCORE_cyan_plate and exch + dup(Magenta)eq AGMCORE_magenta_plate and exch + dup(Yellow)eq AGMCORE_yellow_plate and exch + (Black)eq AGMCORE_black_plate and or or or{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + }if + painted?{exit}if + }{ + 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + exit + }if + }ifelse + /names_index names_index 1 add def + }forall + AvoidAliasedColorants{ + currentspotalias set_spot_alias + }if + painted?{ + /devicen_colorspace_dict AGMCORE_gget/names_index names_index put + }{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx + 0 0 0 0/setcmykcolor cvx + ]cvx ddf + }ifelse + end + }ifelse + } + { + AGMCORE_in_rip_sep{ + Names convert_to_process not + }{ + level3 + }ifelse + { + [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt + /TintProc level3 not AGMCORE_in_rip_sep and{ + [ + Names/length cvx[/pop cvx]cvx/repeat cvx + ]cvx bdf + }{ + {setcolor}bdf + }ifelse + }{ + exec_tint_transform + }ifelse + }ifelse + set_crd + /AliasedColorants false def + end +}def +/setindexedcolorspace +{ + dup/indexed_colorspace_dict exch AGMCORE_gput + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + currentdict devncs + }{ + 1 currentdict sepcs + }ifelse + AGMCORE_host_sep{ + 4 dict begin + /compCnt/Names where{pop Names length}{1}ifelse def + /NewLookup HiVal 1 add string def + 0 1 HiVal{ + /tableIndex xdf + Lookup dup type/stringtype eq{ + compCnt tableIndex map_index + }{ + exec + }ifelse + /Names where{ + pop setdevicencolor + }{ + setsepcolor + }ifelse + currentgray + tableIndex exch + 255 mul cvi + NewLookup 3 1 roll put + }for + [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt + end + }{ + level3 + { + currentdict/Names known{ + [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt + }{ + [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt + }ifelse + }{ + [/Indexed MappedCSA HiVal + [ + currentdict/Names known{ + Lookup dup type/stringtype eq + {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx} + {/exec cvx}ifelse + /TintTransform load/exec cvx + }{ + Lookup dup type/stringtype eq + {/exch cvx/get cvx 255/div cvx} + {/exec cvx}ifelse + CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx + }ifelse + ]cvx + ]setcolorspace_opt + }ifelse + }ifelse + end + set_crd + } + { + CSA map_csa + AGMCORE_host_sep level2 not and{ + 0 0 0 0 setcmykcolor + }{ + [/Indexed MappedCSA + level2 not has_color not and{ + dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{ + pop[/DeviceGray] + }if + HiVal GrayLookup + }{ + HiVal + currentdict/RangeArray known{ + { + /indexed_colorspace_dict AGMCORE_gget begin + Lookup exch + dup HiVal gt{ + pop HiVal + }if + NComponents mul NComponents getinterval{}forall + NComponents 1 sub -1 0{ + RangeArray exch 2 mul 2 getinterval aload pop map255_to_range + NComponents 1 roll + }for + end + }bind + }{ + Lookup + }ifelse + }ifelse + ]setcolorspace_opt + set_crd + }ifelse + }ifelse + end +}def +/setindexedcolor +{ + AGMCORE_host_sep{ + /indexed_colorspace_dict AGMCORE_gget + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + map_indexed_devn + devn + } + { + Lookup 1 3 -1 roll map_index + sep + }ifelse + end + }{ + Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll + map_index + MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse + }ifelse + end + }{ + level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{ + /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin + map_indexed_devn + devn + end + } + { + setcolor + }ifelse + }ifelse +}def +/ignoreimagedata +{ + currentoverprint not{ + gsave + dup clonedict begin + 1 setgray + /Decode[0 1]def + /DataSourcedef + /MultipleDataSources false def + /BitsPerComponent 8 def + currentdict end + systemdict/image gx + grestore + }if + consumeimagedata +}def +/add_res +{ + dup/CSD eq{ + pop + //Adobe_AGM_Core begin + /AGMCORE_CSD_cache load 3 1 roll put + end + }{ + defineresource pop + }ifelse +}def +/del_res +{ + { + aload pop exch + dup/CSD eq{ + pop + {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall + }{ + exch + {1 index undefineresource}forall + pop + }ifelse + }forall +}def +/get_res +{ + dup/CSD eq{ + pop + dup type dup/nametype eq exch/stringtype eq or{ + AGMCORE_CSD_cache exch get + }if + }{ + findresource + }ifelse +}def +/get_csa_by_name +{ + dup type dup/nametype eq exch/stringtype eq or{ + /CSA get_res + }if +}def +/paintproc_buf_init +{ + /count get 0 0 put +}def +/paintproc_buf_next +{ + dup/count get dup 0 get + dup 3 1 roll + 1 add 0 xpt + get +}def +/cachepaintproc_compress +{ + 5 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + /string_size 16000 def + /readbuffer string_size string def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + /LZWFilter + { + exch + dup length 0 eq{ + pop + }{ + ppdict dup length 1 sub 3 -1 roll put + }ifelse + {string_size}{0}ifelse string + }/LZWEncode filter def + { + ReadFilter readbuffer readstring + exch LZWFilter exch writestring + not{exit}if + }loop + LZWFilter closefile + ppdict + end +}def +/cachepaintproc +{ + 2 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + { + ReadFilter 16000 string readstring exch + ppdict dup length 1 sub 3 -1 roll put + not{exit}if + }loop + ppdict dup dup length 1 sub()put + end +}def +/make_pattern +{ + exch clonedict exch + dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform + exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub + exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub + matrix translate exch matrix concatmatrix + 1 index begin + BBox 0 get XStep div cvi XStep mul/xshift exch neg def + BBox 1 get YStep div cvi YStep mul/yshift exch neg def + BBox 0 get xshift add + BBox 1 get yshift add + BBox 2 get xshift add + BBox 3 get yshift add + 4 array astore + /BBox exch def + [xshift yshift/translate load null/exec load]dup + 3/PaintProc load put cvx/PaintProc exch def + end + gsave 0 setgray + makepattern + grestore +}def +/set_pattern +{ + dup/PatternType get 1 eq{ + dup/PaintType get 1 eq{ + currentoverprint sop[/DeviceGray]setcolorspace 0 setgray + }if + }if + setpattern +}def +/setcolorspace_opt +{ + dup currentcolorspace eq{pop}{setcolorspace}ifelse +}def +/updatecolorrendering +{ + currentcolorrendering/RenderingIntent known{ + currentcolorrendering/RenderingIntent get + } + { + Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/Saturation eq + { + /saturation_crd AGMCORE_gget dup null eq + } + { + /perceptual_crd AGMCORE_gget dup null eq + }ifelse + }ifelse + }ifelse + { + pop null + } + { + /RenderingIntent known{null}{Intent}ifelse + }ifelse + }ifelse + Intent ne{ + Intent/ColorRendering{findresource}stopped + { + pop pop systemdict/findcolorrendering known + { + Intent findcolorrendering + { + /ColorRendering findresource true exch + } + { + /ColorRendering findresource + product(Xerox Phaser 5400)ne + exch + }ifelse + dup Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd exch AGMCORE_gput + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd exch AGMCORE_gput + } + { + Intent/Saturation eq + { + /saturation_crd exch AGMCORE_gput + } + { + Intent/Perceptual eq + { + /perceptual_crd exch AGMCORE_gput + } + { + pop + }ifelse + }ifelse + }ifelse + }ifelse + 1 index{exch}{pop}ifelse + } + {false}ifelse + } + {true}ifelse + { + dup begin + currentdict/TransformPQR known{ + currentdict/TransformPQR get aload pop + 3{{}eq 3 1 roll}repeat or or + } + {true}ifelse + currentdict/MatrixPQR known{ + currentdict/MatrixPQR get aload pop + 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq + and and and and and and and and + } + {true}ifelse + end + or + { + clonedict begin + /TransformPQR[ + {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div + 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind + {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div + 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind + {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div + 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind + ]def + /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def + /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def + currentdict end + }if + setcolorrendering_opt + }if + }if +}def +/set_crd +{ + AGMCORE_host_sep not level2 and{ + currentdict/ColorRendering known{ + ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if + }{ + currentdict/Intent known{ + updatecolorrendering + }if + }ifelse + currentcolorspace dup type/arraytype eq + {0 get}if + /DeviceRGB eq + { + currentdict/UCR known + {/UCR}{/AGMCORE_currentucr}ifelse + load setundercolorremoval + currentdict/BG known + {/BG}{/AGMCORE_currentbg}ifelse + load setblackgeneration + }if + }if +}def +/set_ucrbg +{ + dup null eq {pop /AGMCORE_currentbg load}{/Procedure get_res}ifelse + dup currentblackgeneration eq {pop}{setblackgeneration}ifelse + dup null eq {pop /AGMCORE_currentucr load}{/Procedure get_res}ifelse + dup currentundercolorremoval eq {pop}{setundercolorremoval}ifelse +}def +/setcolorrendering_opt +{ + dup currentcolorrendering eq{ + pop + }{ + product(HP Color LaserJet 2605)anchorsearch{ + pop pop pop + }{ + pop + clonedict + begin + /Intent Intent def + currentdict + end + setcolorrendering + }ifelse + }ifelse +}def +/cpaint_gcomp +{ + convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not + { + (%end_cpaint_gcomp)flushinput + }if +}def +/cpaint_gsep +{ + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get + { + (%end_cpaint_gsep)flushinput + }if +}def +/cpaint_gend +{np}def +/T1_path +{ + currentfile token pop currentfile token pop mo + { + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 exch rlineto + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 rlineto + }loop +}def +/T1_gsave + level3 + {/clipsave} + {/gsave}ifelse + load def +/T1_grestore + level3 + {/cliprestore} + {/grestore}ifelse + load def +/set_spot_alias_ary +{ + dup inherit_aliases + //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf +}def +/set_spot_normalization_ary +{ + dup inherit_aliases + dup length + /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if + array + //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf + /AGMCORE_SpotAliasAry where{ + pop + AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval + AGMCORE_SpotAliasAry length + }{0}ifelse + AGMCORE_SpotAliasAry2 3 1 roll exch putinterval + true set_spot_alias +}def +/inherit_aliases +{ + {dup/Name get map_alias{/CSD put}{pop}ifelse}forall +}def +/set_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias 3 -1 roll put + }{ + pop + }ifelse +}def +/current_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias get + }{ + false + }ifelse +}def +/map_alias +{ + /AGMCORE_SpotAliasAry2 where{ + begin + /AGMCORE_name xdf + false + AGMCORE_SpotAliasAry2{ + dup/Name get AGMCORE_name eq{ + /CSD get/CSD get_res + exch pop true + exit + }{ + pop + }ifelse + }forall + end + }{ + pop false + }ifelse +}bdf +/spot_alias +{ + true set_spot_alias + /AGMCORE_&setcustomcolor AGMCORE_key_known not{ + //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put + }if + /customcolor_tint 1 AGMCORE_gput + //Adobe_AGM_Core begin + /setcustomcolor + { + //Adobe_AGM_Core begin + dup/customcolor_tint exch AGMCORE_gput + 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not + current_spot_alias and{1 index 4 get map_alias}{false}ifelse + { + false set_spot_alias + /sep_colorspace_dict AGMCORE_gget null ne + {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse + 3 1 roll 2 index{ + exch pop/sep_tint AGMCORE_gget exch + }if + mark 3 1 roll + setsepcolorspace + counttomark 0 ne{ + setsepcolor + }if + pop + not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if + pop + true set_spot_alias + }{ + AGMCORE_&setcustomcolor + }ifelse + end + }bdf + end +}def +/begin_feature +{ + Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put + count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put + {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if +}def +/end_feature +{ + 2 dict begin + /spd/setpagedevice load def + /setpagedevice{get_gstate spd set_gstate}def + stopped{$error/newerror false put}if + end + count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse + countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse + {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if +}def +/set_negative +{ + //Adobe_AGM_Core begin + /AGMCORE_inverting exch def + level2{ + currentpagedevice/NegativePrint known AGMCORE_distilling not and{ + currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{ + true begin_feature true{ + <>setpagedevice + }end_feature + }if + /AGMCORE_inverting false def + }if + }if + AGMCORE_inverting{ + [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer + AGMCORE_distilling{ + erasepage + }{ + gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse + /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore + }ifelse + }if + end +}def +/lw_save_restore_override{ + /md where{ + pop + md begin + initializepage + /initializepage{}def + /pmSVsetup{}def + /endp{}def + /pse{}def + /psb{}def + /orig_showpage where + {pop} + {/orig_showpage/showpage load def} + ifelse + /showpage{orig_showpage gR}def + end + }if +}def +/pscript_showpage_override{ + /NTPSOct95 where + { + begin + showpage + save + /showpage/restore load def + /restore{exch pop}def + end + }if +}def +/driver_media_override +{ + /md where{ + pop + md/initializepage known{ + md/initializepage{}put + }if + md/rC known{ + md/rC{4{pop}repeat}put + }if + }if + /mysetup where{ + /mysetup[1 0 0 1 0 0]put + }if + Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put + level2 + {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if +}def +/capture_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put + }if + }if +}def +/restore_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup known{ + Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put + Adobe_AGM_Core/save_mysetup undef + }if + }if + }if +}def +/driver_check_media_override +{ + /PrepsDict where + {pop} + { + Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne + Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and + Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and + }if + { + Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix + }if + }ifelse +}def +AGMCORE_err_strings begin + /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def + /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def + /AGMCORE_invalid_color_space(This job contains an invalid color space. )def +end +/set_def_ht +{AGMCORE_def_ht sethalftone}def +/set_def_flat +{AGMCORE_Default_flatness setflat}def +end +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_CoolType_Core 2.31 0 +%%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. +%%Version: 2.31 0 +10 dict begin +/Adobe_CoolType_Passthru currentdict def +/Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def +Adobe_CoolType_Core_Defined + {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} +if +userdict/Adobe_CoolType_Core 70 dict dup begin put +/Adobe_CoolType_Version 2.31 def +/Level2? + systemdict/languagelevel known dup + {pop systemdict/languagelevel get 2 ge} + if def +Level2? not + { + /currentglobal false def + /setglobal/pop load def + /gcheck{pop false}bind def + /currentpacking false def + /setpacking/pop load def + /SharedFontDirectory 0 dict def + } +if +currentpacking +true setpacking +currentglobal false setglobal +userdict/Adobe_CoolType_Data 2 copy known not + {2 copy 10 dict put} +if +get + begin + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + end +setglobal +currentglobal true setglobal +userdict/Adobe_CoolType_GVMFonts known not + {userdict/Adobe_CoolType_GVMFonts 10 dict put} +if +setglobal +currentglobal false setglobal +userdict/Adobe_CoolType_LVMFonts known not + {userdict/Adobe_CoolType_LVMFonts 10 dict put} +if +setglobal +/ct_VMDictPut + { + dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse + 3 1 roll put + }bind def +/ct_VMDictUndef + { + dup Adobe_CoolType_GVMFonts exch known + {Adobe_CoolType_GVMFonts exch undef} + { + dup Adobe_CoolType_LVMFonts exch known + {Adobe_CoolType_LVMFonts exch undef} + {pop} + ifelse + }ifelse + }bind def +/ct_str1 1 string def +/ct_xshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + _ct_x _ct_y moveto + 0 + rmoveto + } + ifelse + /_ct_i _ct_i 1 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/ct_yshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + _ct_x _ct_y moveto + 0 exch + rmoveto + } + ifelse + /_ct_i _ct_i 1 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/ct_xyshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + {_ct_na _ct_i 1 add get}stopped + {pop pop pop} + { + _ct_x _ct_y moveto + rmoveto + } + ifelse + } + ifelse + /_ct_i _ct_i 2 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def +/ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def +/xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def +currentglobal true setglobal +/ct_T3Defs +{ +/BuildChar +{ + 1 index/Encoding get exch get + 1 index/BuildGlyph get exec +}bind def +/BuildGlyph +{ + exch begin + GlyphProcs exch get exec + end +}bind def +}bind def +setglobal +/@_SaveStackLevels + { + Adobe_CoolType_Data + begin + /@vmState currentglobal def false setglobal + @opStackCountByLevel + @opStackLevel + 2 copy known not + { + 2 copy + 3 dict dup/args + 7 index + 5 add array put + put get + } + { + get dup/args get dup length 3 index lt + { + dup length 5 add array exch + 1 index exch 0 exch putinterval + 1 index exch/args exch put + } + {pop} + ifelse + } + ifelse + begin + count 1 sub + 1 index lt + {pop count} + if + dup/argCount exch def + dup 0 gt + { + args exch 0 exch getinterval + astore pop + } + {pop} + ifelse + count + /restCount exch def + end + /@opStackLevel @opStackLevel 1 add def + countdictstack 1 sub + @dictStackCountByLevel exch @dictStackLevel exch put + /@dictStackLevel @dictStackLevel 1 add def + @vmState setglobal + end + }bind def +/@_RestoreStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + @opStackCountByLevel @opStackLevel get + begin + count restCount sub dup 0 gt + {{pop}repeat} + {pop} + ifelse + args 0 argCount getinterval{}forall + end + /@dictStackLevel @dictStackLevel 1 sub def + @dictStackCountByLevel @dictStackLevel get + end + countdictstack exch sub dup 0 gt + {{end}repeat} + {pop} + ifelse + }bind def +/@_PopStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + /@dictStackLevel @dictStackLevel 1 sub def + end + }bind def +/@Raise + { + exch cvx exch errordict exch get exec + stop + }bind def +/@ReRaise + { + cvx $error/errorname get errordict exch get exec + stop + }bind def +/@Stopped + { + 0 @#Stopped + }bind def +/@#Stopped + { + @_SaveStackLevels + stopped + {@_RestoreStackLevels true} + {@_PopStackLevels false} + ifelse + }bind def +/@Arg + { + Adobe_CoolType_Data + begin + @opStackCountByLevel @opStackLevel 1 sub get + begin + args exch + argCount 1 sub exch sub get + end + end + }bind def +currentglobal true setglobal +/CTHasResourceForAllBug + Level2? + { + 1 dict dup + /@shouldNotDisappearDictValue true def + Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put + begin + count @_SaveStackLevels + {(*){pop stop}128 string/Category resourceforall} + stopped pop + @_RestoreStackLevels + currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll + { + /@shouldNotDisappearDictValue known + { + { + end + currentdict 1 index eq + {pop exit} + if + } + loop + } + if + } + { + pop + end + } + ifelse + } + {false} + ifelse + def +true setglobal +/CTHasResourceStatusBug + Level2? + { + mark + {/steveamerige/Category resourcestatus} + stopped + {cleartomark true} + {cleartomark currentglobal not} + ifelse + } + {false} + ifelse + def +setglobal +/CTResourceStatus + { + mark 3 1 roll + /Category findresource + begin + ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec + {cleartomark false} + {{3 2 roll pop true}{cleartomark false}ifelse} + ifelse + end + }bind def +/CTWorkAroundBugs + { + Level2? + { + /cid_PreLoad/ProcSet resourcestatus + { + pop pop + currentglobal + mark + { + (*) + { + dup/CMap CTHasResourceStatusBug + {CTResourceStatus} + {resourcestatus} + ifelse + { + pop dup 0 eq exch 1 eq or + { + dup/CMap findresource gcheck setglobal + /CMap undefineresource + } + { + pop CTHasResourceForAllBug + {exit} + {stop} + ifelse + } + ifelse + } + {pop} + ifelse + } + 128 string/CMap resourceforall + } + stopped + {cleartomark} + stopped pop + setglobal + } + if + } + if + }bind def +/ds + { + Adobe_CoolType_Core + begin + CTWorkAroundBugs + /mo/moveto load def + /nf/newencodedfont load def + /msf{makefont setfont}bind def + /uf{dup undefinefont ct_VMDictUndef}bind def + /ur/undefineresource load def + /chp/charpath load def + /awsh/awidthshow load def + /wsh/widthshow load def + /ash/ashow load def + /@xshow/xshow load def + /@yshow/yshow load def + /@xyshow/xyshow load def + /@cshow/cshow load def + /sh/show load def + /rp/repeat load def + /.n/.notdef def + end + currentglobal false setglobal + userdict/Adobe_CoolType_Data 2 copy known not + {2 copy 10 dict put} + if + get + begin + /AddWidths? false def + /CC 0 def + /charcode 2 string def + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + /InVMFontsByCMap 10 dict def + /InVMDeepCopiedFonts 10 dict def + end + setglobal + }bind def +/dt + { + currentdict Adobe_CoolType_Core eq + {end} + if + }bind def +/ps + { + Adobe_CoolType_Core begin + Adobe_CoolType_GVMFonts begin + Adobe_CoolType_LVMFonts begin + SharedFontDirectory begin + }bind def +/pt + { + end + end + end + end + }bind def +/unload + { + systemdict/languagelevel known + { + systemdict/languagelevel get 2 ge + { + userdict/Adobe_CoolType_Core 2 copy known + {undef} + {pop pop} + ifelse + } + if + } + if + }bind def +/ndf + { + 1 index where + {pop pop pop} + {dup xcheck{bind}if def} + ifelse + }def +/findfont systemdict + begin + userdict + begin + /globaldict where{/globaldict get begin}if + dup where pop exch get + /globaldict where{pop end}if + end + end +Adobe_CoolType_Core_Defined + {/systemfindfont exch def} + { + /findfont 1 index def + /systemfindfont exch def + } +ifelse +/undefinefont + {pop}ndf +/copyfont + { + currentglobal 3 1 roll + 1 index gcheck setglobal + dup null eq{0}{dup length}ifelse + 2 index length add 1 add dict + begin + exch + { + 1 index/FID eq + {pop pop} + {def} + ifelse + } + forall + dup null eq + {pop} + {{def}forall} + ifelse + currentdict + end + exch setglobal + }bind def +/copyarray + { + currentglobal exch + dup gcheck setglobal + dup length array copy + exch setglobal + }bind def +/newencodedfont + { + currentglobal + { + SharedFontDirectory 3 index known + {SharedFontDirectory 3 index get/FontReferenced known} + {false} + ifelse + } + { + FontDirectory 3 index known + {FontDirectory 3 index get/FontReferenced known} + { + SharedFontDirectory 3 index known + {SharedFontDirectory 3 index get/FontReferenced known} + {false} + ifelse + } + ifelse + } + ifelse + dup + { + 3 index findfont/FontReferenced get + 2 index dup type/nametype eq + {findfont} + if ne + {pop false} + if + } + if + dup + { + 1 index dup type/nametype eq + {findfont} + if + dup/CharStrings known + { + /CharStrings get length + 4 index findfont/CharStrings get length + ne + { + pop false + } + if + } + {pop} + ifelse + } + if + { + pop + 1 index findfont + /Encoding get exch + 0 1 255 + {2 copy get 3 index 3 1 roll put} + for + pop pop pop + } + { + currentglobal + 4 1 roll + dup type/nametype eq + {findfont} + if + dup gcheck setglobal + dup dup maxlength 2 add dict + begin + exch + { + 1 index/FID ne + 2 index/Encoding ne and + {def} + {pop pop} + ifelse + } + forall + /FontReferenced exch def + /Encoding exch dup length array copy def + /FontName 1 index dup type/stringtype eq{cvn}if def dup + currentdict + end + definefont ct_VMDictPut + setglobal + } + ifelse + }bind def +/SetSubstituteStrategy + { + $SubstituteFont + begin + dup type/dicttype ne + {0 dict} + if + currentdict/$Strategies known + { + exch $Strategies exch + 2 copy known + { + get + 2 copy maxlength exch maxlength add dict + begin + {def}forall + {def}forall + currentdict + dup/$Init known + {dup/$Init get exec} + if + end + /$Strategy exch def + } + {pop pop pop} + ifelse + } + {pop pop} + ifelse + end + }bind def +/scff + { + $SubstituteFont + begin + dup type/stringtype eq + {dup length exch} + {null} + ifelse + /$sname exch def + /$slen exch def + /$inVMIndex + $sname null eq + { + 1 index $str cvs + dup length $slen sub $slen getinterval cvn + } + {$sname} + ifelse def + end + {findfont} + @Stopped + { + dup length 8 add string exch + 1 index 0(BadFont:)putinterval + 1 index exch 8 exch dup length string cvs putinterval cvn + {findfont} + @Stopped + {pop/Courier findfont} + if + } + if + $SubstituteFont + begin + /$sname null def + /$slen 0 def + /$inVMIndex null def + end + }bind def +/isWidthsOnlyFont + { + dup/WidthsOnly known + {pop pop true} + { + dup/FDepVector known + {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} + { + dup/FDArray known + {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} + {pop} + ifelse + } + ifelse + } + ifelse + }bind def +/ct_StyleDicts 4 dict dup begin + /Adobe-Japan1 4 dict dup begin + Level2? + { + /Serif + /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiMin-W3} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiMin-W3/CIDFont resourcestatus + {pop pop/HeiseiMin-W3} + {/Ryumin-Light} + ifelse + } + {/Ryumin-Light} + ifelse + } + ifelse + def + /SansSerif + /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiKakuGo-W5} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiKakuGo-W5/CIDFont resourcestatus + {pop pop/HeiseiKakuGo-W5} + {/GothicBBB-Medium} + ifelse + } + {/GothicBBB-Medium} + ifelse + } + ifelse + def + /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiMaruGo-W4} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiMaruGo-W4/CIDFont resourcestatus + {pop pop/HeiseiMaruGo-W4} + { + /Jun101-Light-RKSJ-H/Font resourcestatus + {pop pop/Jun101-Light} + {SansSerif} + ifelse + } + ifelse + } + { + /Jun101-Light-RKSJ-H/Font resourcestatus + {pop pop/Jun101-Light} + {SansSerif} + ifelse + } + ifelse + } + ifelse + /RoundSansSerif exch def + /Default Serif def + } + { + /Serif/Ryumin-Light def + /SansSerif/GothicBBB-Medium def + { + (fonts/Jun101-Light-83pv-RKSJ-H)status + }stopped + {pop}{ + {pop pop pop pop/Jun101-Light} + {SansSerif} + ifelse + /RoundSansSerif exch def + }ifelse + /Default Serif def + } + ifelse + end + def + /Adobe-Korea1 4 dict dup begin + /Serif/HYSMyeongJo-Medium def + /SansSerif/HYGoThic-Medium def + /RoundSansSerif SansSerif def + /Default Serif def + end + def + /Adobe-GB1 4 dict dup begin + /Serif/STSong-Light def + /SansSerif/STHeiti-Regular def + /RoundSansSerif SansSerif def + /Default Serif def + end + def + /Adobe-CNS1 4 dict dup begin + /Serif/MKai-Medium def + /SansSerif/MHei-Medium def + /RoundSansSerif SansSerif def + /Default Serif def + end + def +end +def +Level2?{currentglobal true setglobal}if +/ct_BoldRomanWidthProc + { + stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth + 0 0 + }bind def +/ct_Type0WidthProc + { + dup stringwidth 0 0 moveto + 2 index true charpath pathbbox + 0 -1 + 7 index 2 div .88 + setcachedevice2 + pop + 0 0 + }bind def +/ct_Type0WMode1WidthProc + { + dup stringwidth + pop 2 div neg -0.88 + 2 copy + moveto + 0 -1 + 5 -1 roll true charpath pathbbox + setcachedevice + }bind def +/cHexEncoding +[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 +/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 +/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 +/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B +/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E +/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 +/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 +/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 +/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA +/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD +/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 +/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 +/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 +/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def +/ct_BoldBaseFont + 11 dict begin + /FontType 3 def + /FontMatrix[1 0 0 1 0 0]def + /FontBBox[0 0 1 1]def + /Encoding cHexEncoding def + /_setwidthProc/ct_BoldRomanWidthProc load def + /_bcstr1 1 string def + /BuildChar + { + exch begin + _basefont setfont + _bcstr1 dup 0 4 -1 roll put + dup + _setwidthProc + 3 copy + moveto + show + _basefonto setfont + moveto + show + end + }bind def + currentdict + end +def +systemdict/composefont known +{ +/ct_DefineIdentity-H +{ + /Identity-H/CMap resourcestatus + { + pop pop + } + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry(Adobe)def + /Ordering(Identity)def + /Supplement 0 def + end def + /CMapName/Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse +} +def +/ct_BoldBaseCIDFont + 11 dict begin + /CIDFontType 1 def + /CIDFontName/ct_BoldBaseCIDFont def + /FontMatrix[1 0 0 1 0 0]def + /FontBBox[0 0 1 1]def + /_setwidthProc/ct_Type0WidthProc load def + /_bcstr2 2 string def + /BuildGlyph + { + exch begin + _basefont setfont + _bcstr2 1 2 index 256 mod put + _bcstr2 0 3 -1 roll 256 idiv put + _bcstr2 dup _setwidthProc + 3 copy + moveto + show + _basefonto setfont + moveto + show + end + }bind def + currentdict + end +def +}if +Level2?{setglobal}if +/ct_CopyFont{ + { + 1 index/FID ne 2 index/UniqueID ne and + {def}{pop pop}ifelse + }forall +}bind def +/ct_Type0CopyFont +{ + exch + dup length dict + begin + ct_CopyFont + [ + exch + FDepVector + { + dup/FontType get 0 eq + { + 1 index ct_Type0CopyFont + /_ctType0 exch definefont + } + { + /_ctBaseFont exch + 2 index exec + } + ifelse + exch + } + forall + pop + ] + /FDepVector exch def + currentdict + end +}bind def +/ct_MakeBoldFont +{ + dup/ct_SyntheticBold known + { + dup length 3 add dict begin + ct_CopyFont + /ct_StrokeWidth .03 0 FontMatrix idtransform pop def + /ct_SyntheticBold true def + currentdict + end + definefont + } + { + dup dup length 3 add dict + begin + ct_CopyFont + /PaintType 2 def + /StrokeWidth .03 0 FontMatrix idtransform pop def + /dummybold currentdict + end + definefont + dup/FontType get dup 9 ge exch 11 le and + { + ct_BoldBaseCIDFont + dup length 3 add dict copy begin + dup/CIDSystemInfo get/CIDSystemInfo exch def + ct_DefineIdentity-H + /_Type0Identity/Identity-H 3 -1 roll[exch]composefont + /_basefont exch def + /_Type0Identity/Identity-H 3 -1 roll[exch]composefont + /_basefonto exch def + currentdict + end + /CIDFont defineresource + } + { + ct_BoldBaseFont + dup length 3 add dict copy begin + /_basefont exch def + /_basefonto exch def + currentdict + end + definefont + } + ifelse + } + ifelse +}bind def +/ct_MakeBold{ + 1 index + 1 index + findfont + currentglobal 5 1 roll + dup gcheck setglobal + dup + /FontType get 0 eq + { + dup/WMode known{dup/WMode get 1 eq}{false}ifelse + version length 4 ge + and + {version 0 4 getinterval cvi 2015 ge} + {true} + ifelse + {/ct_Type0WidthProc} + {/ct_Type0WMode1WidthProc} + ifelse + ct_BoldBaseFont/_setwidthProc 3 -1 roll load put + {ct_MakeBoldFont}ct_Type0CopyFont definefont + } + { + dup/_fauxfont known not 1 index/SubstMaster known not and + { + ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put + ct_MakeBoldFont + } + { + 2 index 2 index eq + {exch pop } + { + dup length dict begin + ct_CopyFont + currentdict + end + definefont + } + ifelse + } + ifelse + } + ifelse + pop pop pop + setglobal +}bind def +/?str1 256 string def +/?set + { + $SubstituteFont + begin + /$substituteFound false def + /$fontname 1 index def + /$doSmartSub false def + end + dup + findfont + $SubstituteFont + begin + $substituteFound + {false} + { + dup/FontName known + { + dup/FontName get $fontname eq + 1 index/DistillerFauxFont known not and + /currentdistillerparams where + {pop false 2 index isWidthsOnlyFont not and} + if + } + {false} + ifelse + } + ifelse + exch pop + /$doSmartSub true def + end + { + 5 1 roll pop pop pop pop + findfont + } + { + 1 index + findfont + dup/FontType get 3 eq + { + 6 1 roll pop pop pop pop pop false + } + {pop true} + ifelse + { + $SubstituteFont + begin + pop pop + /$styleArray 1 index def + /$regOrdering 2 index def + pop pop + 0 1 $styleArray length 1 sub + { + $styleArray exch get + ct_StyleDicts $regOrdering + 2 copy known + { + get + exch 2 copy known not + {pop/Default} + if + get + dup type/nametype eq + { + ?str1 cvs length dup 1 add exch + ?str1 exch(-)putinterval + exch dup length exch ?str1 exch 3 index exch putinterval + add ?str1 exch 0 exch getinterval cvn + } + { + pop pop/Unknown + } + ifelse + } + { + pop pop pop pop/Unknown + } + ifelse + } + for + end + findfont + }if + } + ifelse + currentglobal false setglobal 3 1 roll + null copyfont definefont pop + setglobal + }bind def +setpacking +userdict/$SubstituteFont 25 dict put +1 dict + begin + /SubstituteFont + dup $error exch 2 copy known + {get} + {pop pop{pop/Courier}bind} + ifelse def + /currentdistillerparams where dup + { + pop pop + currentdistillerparams/CannotEmbedFontPolicy 2 copy known + {get/Error eq} + {pop pop false} + ifelse + } + if not + { + countdictstack array dictstack 0 get + begin + userdict + begin + $SubstituteFont + begin + /$str 128 string def + /$fontpat 128 string def + /$slen 0 def + /$sname null def + /$match false def + /$fontname null def + /$substituteFound false def + /$inVMIndex null def + /$doSmartSub true def + /$depth 0 def + /$fontname null def + /$italicangle 26.5 def + /$dstack null def + /$Strategies 10 dict dup + begin + /$Type3Underprint + { + currentglobal exch false setglobal + 11 dict + begin + /UseFont exch + $WMode 0 ne + { + dup length dict copy + dup/WMode $WMode put + /UseFont exch definefont + } + if def + /FontName $fontname dup type/stringtype eq{cvn}if def + /FontType 3 def + /FontMatrix[.001 0 0 .001 0 0]def + /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def + /FontBBox[0 0 0 0]def + /CCInfo 7 dict dup + begin + /cc null def + /x 0 def + /y 0 def + end def + /BuildChar + { + exch + begin + CCInfo + begin + 1 string dup 0 3 index put exch pop + /cc exch def + UseFont 1000 scalefont setfont + cc stringwidth/y exch def/x exch def + x y setcharwidth + $SubstituteFont/$Strategy get/$Underprint get exec + 0 0 moveto cc show + x y moveto + end + end + }bind def + currentdict + end + exch setglobal + }bind def + /$GetaTint + 2 dict dup + begin + /$BuildFont + { + dup/WMode known + {dup/WMode get} + {0} + ifelse + /$WMode exch def + $fontname exch + dup/FontName known + { + dup/FontName get + dup type/stringtype eq{cvn}if + } + {/unnamedfont} + ifelse + exch + Adobe_CoolType_Data/InVMDeepCopiedFonts get + 1 index/FontName get known + { + pop + Adobe_CoolType_Data/InVMDeepCopiedFonts get + 1 index get + null copyfont + } + {$deepcopyfont} + ifelse + exch 1 index exch/FontBasedOn exch put + dup/FontName $fontname dup type/stringtype eq{cvn}if put + definefont + Adobe_CoolType_Data/InVMDeepCopiedFonts get + begin + dup/FontBasedOn get 1 index def + end + }bind def + /$Underprint + { + gsave + x abs y abs gt + {/y 1000 def} + {/x -1000 def 500 120 translate} + ifelse + Level2? + { + [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] + setcolorspace + } + {0 setgray} + ifelse + 10 setlinewidth + x .8 mul + [7 3] + { + y mul 8 div 120 sub x 10 div exch moveto + 0 y 4 div neg rlineto + dup 0 rlineto + 0 y 4 div rlineto + closepath + gsave + Level2? + {.2 setcolor} + {.8 setgray} + ifelse + fill grestore + stroke + } + forall + pop + grestore + }bind def + end def + /$Oblique + 1 dict dup + begin + /$BuildFont + { + currentglobal exch dup gcheck setglobal + null copyfont + begin + /FontBasedOn + currentdict/FontName known + { + FontName + dup type/stringtype eq{cvn}if + } + {/unnamedfont} + ifelse + def + /FontName $fontname dup type/stringtype eq{cvn}if def + /currentdistillerparams where + {pop} + { + /FontInfo currentdict/FontInfo known + {FontInfo null copyfont} + {2 dict} + ifelse + dup + begin + /ItalicAngle $italicangle def + /FontMatrix FontMatrix + [1 0 ItalicAngle dup sin exch cos div 1 0 0] + matrix concatmatrix readonly + end + 4 2 roll def + def + } + ifelse + FontName currentdict + end + definefont + exch setglobal + }bind def + end def + /$None + 1 dict dup + begin + /$BuildFont{}bind def + end def + end def + /$Oblique SetSubstituteStrategy + /$findfontByEnum + { + dup type/stringtype eq{cvn}if + dup/$fontname exch def + $sname null eq + {$str cvs dup length $slen sub $slen getinterval} + {pop $sname} + ifelse + $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval + /$match false def + $SubstituteFont/$dstack countdictstack array dictstack put + mark + { + $fontpat 0 $slen 7 add getinterval + {/$match exch def exit} + $str filenameforall + } + stopped + { + cleardictstack + currentdict + true + $SubstituteFont/$dstack get + { + exch + { + 1 index eq + {pop false} + {true} + ifelse + } + {begin false} + ifelse + } + forall + pop + } + if + cleartomark + /$slen 0 def + $match false ne + {$match(fonts/)anchorsearch pop pop cvn} + {/Courier} + ifelse + }bind def + /$ROS 1 dict dup + begin + /Adobe 4 dict dup + begin + /Japan1 [/Ryumin-Light/HeiseiMin-W3 + /GothicBBB-Medium/HeiseiKakuGo-W5 + /HeiseiMaruGo-W4/Jun101-Light]def + /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def + /GB1 [/STSong-Light/STHeiti-Regular]def + /CNS1 [/MKai-Medium/MHei-Medium]def + end def + end def + /$cmapname null def + /$deepcopyfont + { + dup/FontType get 0 eq + { + 1 dict dup/FontName/copied put copyfont + begin + /FDepVector FDepVector copyarray + 0 1 2 index length 1 sub + { + 2 copy get $deepcopyfont + dup/FontName/copied put + /copied exch definefont + 3 copy put pop pop + } + for + def + currentdict + end + } + {$Strategies/$Type3Underprint get exec} + ifelse + }bind def + /$buildfontname + { + dup/CIDFont findresource/CIDSystemInfo get + begin + Registry length Ordering length Supplement 8 string cvs + 3 copy length 2 add add add string + dup 5 1 roll dup 0 Registry putinterval + dup 4 index(-)putinterval + dup 4 index 1 add Ordering putinterval + 4 2 roll add 1 add 2 copy(-)putinterval + end + 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch + anchorsearch + {pop pop 3 2 roll putinterval cvn/$cmapname exch def} + {pop pop pop pop pop} + ifelse + length + $str 1 index(-)putinterval 1 add + $str 1 index $cmapname $fontpat cvs putinterval + $cmapname length add + $str exch 0 exch getinterval cvn + }bind def + /$findfontByROS + { + /$fontname exch def + $ROS Registry 2 copy known + { + get Ordering 2 copy known + {get} + {pop pop[]} + ifelse + } + {pop pop[]} + ifelse + false exch + { + dup/CIDFont resourcestatus + { + pop pop + save + 1 index/CIDFont findresource + dup/WidthsOnly known + {dup/WidthsOnly get} + {false} + ifelse + exch pop + exch restore + {pop} + {exch pop true exit} + ifelse + } + {pop} + ifelse + } + forall + {$str cvs $buildfontname} + { + false(*) + { + save exch + dup/CIDFont findresource + dup/WidthsOnly known + {dup/WidthsOnly get not} + {true} + ifelse + exch/CIDSystemInfo get + dup/Registry get Registry eq + exch/Ordering get Ordering eq and and + {exch restore exch pop true exit} + {pop restore} + ifelse + } + $str/CIDFont resourceforall + {$buildfontname} + {$fontname $findfontByEnum} + ifelse + } + ifelse + }bind def + end + end + currentdict/$error known currentdict/languagelevel known and dup + {pop $error/SubstituteFont known} + if + dup + {$error} + {Adobe_CoolType_Core} + ifelse + begin + { + /SubstituteFont + /CMap/Category resourcestatus + { + pop pop + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + { + $sname null eq + {dup $str cvs dup length $slen sub $slen getinterval cvn} + {$sname} + ifelse + Adobe_CoolType_Data/InVMFontsByCMap get + 1 index 2 copy known + { + get + false exch + { + pop + currentglobal + { + GlobalFontDirectory 1 index known + {exch pop true exit} + {pop} + ifelse + } + { + FontDirectory 1 index known + {exch pop true exit} + { + GlobalFontDirectory 1 index known + {exch pop true exit} + {pop} + ifelse + } + ifelse + } + ifelse + } + forall + } + {pop pop false} + ifelse + { + exch pop exch pop + } + { + dup/CMap resourcestatus + { + pop pop + dup/$cmapname exch def + /CMap findresource/CIDSystemInfo get{def}forall + $findfontByROS + } + { + 128 string cvs + dup(-)search + { + 3 1 roll search + { + 3 1 roll pop + {dup cvi} + stopped + {pop pop pop pop pop $findfontByEnum} + { + 4 2 roll pop pop + exch length + exch + 2 index length + 2 index + sub + exch 1 sub -1 0 + { + $str cvs dup length + 4 index + 0 + 4 index + 4 3 roll add + getinterval + exch 1 index exch 3 index exch + putinterval + dup/CMap resourcestatus + { + pop pop + 4 1 roll pop pop pop + dup/$cmapname exch def + /CMap findresource/CIDSystemInfo get{def}forall + $findfontByROS + true exit + } + {pop} + ifelse + } + for + dup type/booleantype eq + {pop} + {pop pop pop $findfontByEnum} + ifelse + } + ifelse + } + {pop pop pop $findfontByEnum} + ifelse + } + {pop pop $findfontByEnum} + ifelse + } + ifelse + } + ifelse + } + {//SubstituteFont exec} + ifelse + /$slen 0 def + end + } + } + { + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + {$findfontByEnum} + {//SubstituteFont exec} + ifelse + end + } + } + ifelse + bind readonly def + Adobe_CoolType_Core/scfindfont/systemfindfont load put + } + { + /scfindfont + { + $SubstituteFont + begin + dup systemfindfont + dup/FontName known + {dup/FontName get dup 3 index ne} + {/noname true} + ifelse + dup + { + /$origfontnamefound 2 index def + /$origfontname 4 index def/$substituteFound true def + } + if + exch pop + { + $slen 0 gt + $sname null ne + 3 index length $slen gt or and + { + pop dup $findfontByEnum findfont + dup maxlength 1 add dict + begin + {1 index/FID eq{pop pop}{def}ifelse} + forall + currentdict + end + definefont + dup/FontName known{dup/FontName get}{null}ifelse + $origfontnamefound ne + { + $origfontname $str cvs print + ( substitution revised, using )print + dup/FontName known + {dup/FontName get}{(unspecified font)} + ifelse + $str cvs print(.\n)print + } + if + } + {exch pop} + ifelse + } + {exch pop} + ifelse + end + }bind def + } + ifelse + end + end + Adobe_CoolType_Core_Defined not + { + Adobe_CoolType_Core/findfont + { + $SubstituteFont + begin + $depth 0 eq + { + /$fontname 1 index dup type/stringtype ne{$str cvs}if def + /$substituteFound false def + } + if + /$depth $depth 1 add def + end + scfindfont + $SubstituteFont + begin + /$depth $depth 1 sub def + $substituteFound $depth 0 eq and + { + $inVMIndex null ne + {dup $inVMIndex $AddInVMFont} + if + $doSmartSub + { + currentdict/$Strategy known + {$Strategy/$BuildFont get exec} + if + } + if + } + if + end + }bind put + } + if + } + if + end +/$AddInVMFont + { + exch/FontName 2 copy known + { + get + 1 dict dup begin exch 1 index gcheck def end exch + Adobe_CoolType_Data/InVMFontsByCMap get exch + $DictAdd + } + {pop pop pop} + ifelse + }bind def +/$DictAdd + { + 2 copy known not + {2 copy 4 index length dict put} + if + Level2? not + { + 2 copy get dup maxlength exch length 4 index length add lt + 2 copy get dup length 4 index length add exch maxlength 1 index lt + { + 2 mul dict + begin + 2 copy get{forall}def + 2 copy currentdict put + end + } + {pop} + ifelse + } + if + get + begin + {def} + forall + end + }bind def +end +end +%%EndResource +currentglobal true setglobal +%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 +%%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. +%%Version: 1.23 0 +systemdict/languagelevel known dup + {currentglobal false setglobal} + {false} +ifelse +exch +userdict/Adobe_CoolType_Utility 2 copy known + {2 copy get dup maxlength 27 add dict copy} + {27 dict} +ifelse put +Adobe_CoolType_Utility + begin + /@eexecStartData + def + /@recognizeCIDFont null def + /ct_Level2? exch def + /ct_Clone? 1183615869 internaldict dup + /CCRun known not + exch/eCCRun known not + ct_Level2? and or def +ct_Level2? + {globaldict begin currentglobal true setglobal} +if + /ct_AddStdCIDMap + ct_Level2? + {{ + mark + Adobe_CoolType_Utility/@recognizeCIDFont currentdict put + { + ((Hex)57 StartData + 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 + 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 + d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 + cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec + } + stopped + { + cleartomark + Adobe_CoolType_Utility/@recognizeCIDFont get + countdictstack dup array dictstack + exch 1 sub -1 0 + { + 2 copy get 3 index eq + {1 index length exch sub 1 sub{end}repeat exit} + {pop} + ifelse + } + for + pop pop + Adobe_CoolType_Utility/@eexecStartData get eexec + } + {cleartomark} + ifelse + }} + {{ + Adobe_CoolType_Utility/@eexecStartData get eexec + }} + ifelse bind def +userdict/cid_extensions known +dup{cid_extensions/cid_UpdateDB known and}if + { + cid_extensions + begin + /cid_GetCIDSystemInfo + { + 1 index type/stringtype eq + {exch cvn exch} + if + cid_extensions + begin + dup load 2 index known + { + 2 copy + cid_GetStatusInfo + dup null ne + { + 1 index load + 3 index get + dup null eq + {pop pop cid_UpdateDB} + { + exch + 1 index/Created get eq + {exch pop exch pop} + {pop cid_UpdateDB} + ifelse + } + ifelse + } + {pop cid_UpdateDB} + ifelse + } + {cid_UpdateDB} + ifelse + end + }bind def + end + } +if +ct_Level2? + {end setglobal} +if + /ct_UseNativeCapability? systemdict/composefont known def + /ct_MakeOCF 35 dict def + /ct_Vars 25 dict def + /ct_GlyphDirProcs 6 dict def + /ct_BuildCharDict 15 dict dup + begin + /charcode 2 string def + /dst_string 1500 string def + /nullstring()def + /usewidths? true def + end def + ct_Level2?{setglobal}{pop}ifelse + ct_GlyphDirProcs + begin + /GetGlyphDirectory + { + systemdict/languagelevel known + {pop/CIDFont findresource/GlyphDirectory get} + { + 1 index/CIDFont findresource/GlyphDirectory + get dup type/dicttype eq + { + dup dup maxlength exch length sub 2 index lt + { + dup length 2 index add dict copy 2 index + /CIDFont findresource/GlyphDirectory 2 index put + } + if + } + if + exch pop exch pop + } + ifelse + + + }def + /+ + { + systemdict/languagelevel known + { + currentglobal false setglobal + 3 dict begin + /vm exch def + } + {1 dict begin} + ifelse + /$ exch def + systemdict/languagelevel known + { + vm setglobal + /gvm currentglobal def + $ gcheck setglobal + } + if + ?{$ begin}if + }def + /?{$ type/dicttype eq}def + /|{ + userdict/Adobe_CoolType_Data known + { + Adobe_CoolType_Data/AddWidths? known + { + currentdict Adobe_CoolType_Data + begin + begin + AddWidths? + { + Adobe_CoolType_Data/CC 3 index put + ?{def}{$ 3 1 roll put}ifelse + CC charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore + currentfont/Widths get exch CC exch put + } + {?{def}{$ 3 1 roll put}ifelse} + ifelse + end + end + } + {?{def}{$ 3 1 roll put}ifelse} ifelse + } + {?{def}{$ 3 1 roll put}ifelse} + ifelse + }def + /! + { + ?{end}if + systemdict/languagelevel known + {gvm setglobal} + if + end + }def + /:{string currentfile exch readstring pop}executeonly def + end + ct_MakeOCF + begin + /ct_cHexEncoding + [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 + /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 + /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 + /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B + /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E + /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 + /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 + /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 + /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA + /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD + /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 + /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 + /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 + /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def + /ct_CID_STR_SIZE 8000 def + /ct_mkocfStr100 100 string def + /ct_defaultFontMtx[.001 0 0 .001 0 0]def + /ct_1000Mtx[1000 0 0 1000 0 0]def + /ct_raise{exch cvx exch errordict exch get exec stop}bind def + /ct_reraise + {cvx $error/errorname get(Error: )print dup( )cvs print + errordict exch get exec stop + }bind def + /ct_cvnsi + { + 1 index add 1 sub 1 exch 0 4 1 roll + { + 2 index exch get + exch 8 bitshift + add + } + for + exch pop + }bind def + /ct_GetInterval + { + Adobe_CoolType_Utility/ct_BuildCharDict get + begin + /dst_index 0 def + dup dst_string length gt + {dup string/dst_string exch def} + if + 1 index ct_CID_STR_SIZE idiv + /arrayIndex exch def + 2 index arrayIndex get + 2 index + arrayIndex ct_CID_STR_SIZE mul + sub + { + dup 3 index add 2 index length le + { + 2 index getinterval + dst_string dst_index 2 index putinterval + length dst_index add/dst_index exch def + exit + } + { + 1 index length 1 index sub + dup 4 1 roll + getinterval + dst_string dst_index 2 index putinterval + pop dup dst_index add/dst_index exch def + sub + /arrayIndex arrayIndex 1 add def + 2 index dup length arrayIndex gt + {arrayIndex get} + { + pop + exit + } + ifelse + 0 + } + ifelse + } + loop + pop pop pop + dst_string 0 dst_index getinterval + end + }bind def + ct_Level2? + { + /ct_resourcestatus + currentglobal mark true setglobal + {/unknowninstancename/Category resourcestatus} + stopped + {cleartomark setglobal true} + {cleartomark currentglobal not exch setglobal} + ifelse + { + { + mark 3 1 roll/Category findresource + begin + ct_Vars/vm currentglobal put + ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec + {cleartomark false} + {{3 2 roll pop true}{cleartomark false}ifelse} + ifelse + ct_Vars/vm get setglobal + end + } + } + {{resourcestatus}} + ifelse bind def + /CIDFont/Category ct_resourcestatus + {pop pop} + { + currentglobal true setglobal + /Generic/Category findresource + dup length dict copy + dup/InstanceType/dicttype put + /CIDFont exch/Category defineresource pop + setglobal + } + ifelse + ct_UseNativeCapability? + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry(Adobe)def + /Ordering(Identity)def + /Supplement 0 def + end def + /CMapName/Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + if + } + { + /ct_Category 2 dict begin + /CIDFont 10 dict def + /ProcSet 2 dict def + currentdict + end + def + /defineresource + { + ct_Category 1 index 2 copy known + { + get + dup dup maxlength exch length eq + { + dup length 10 add dict copy + ct_Category 2 index 2 index put + } + if + 3 index 3 index put + pop exch pop + } + {pop pop/defineresource/undefined ct_raise} + ifelse + }bind def + /findresource + { + ct_Category 1 index 2 copy known + { + get + 2 index 2 copy known + {get 3 1 roll pop pop} + {pop pop/findresource/undefinedresource ct_raise} + ifelse + } + {pop pop/findresource/undefined ct_raise} + ifelse + }bind def + /resourcestatus + { + ct_Category 1 index 2 copy known + { + get + 2 index known + exch pop exch pop + { + 0 -1 true + } + { + false + } + ifelse + } + {pop pop/findresource/undefined ct_raise} + ifelse + }bind def + /ct_resourcestatus/resourcestatus load def + } + ifelse + /ct_CIDInit 2 dict + begin + /ct_cidfont_stream_init + { + { + dup(Binary)eq + { + pop + null + currentfile + ct_Level2? + { + {cid_BYTE_COUNT()/SubFileDecode filter} + stopped + {pop pop pop} + if + } + if + /readstring load + exit + } + if + dup(Hex)eq + { + pop + currentfile + ct_Level2? + { + {null exch/ASCIIHexDecode filter/readstring} + stopped + {pop exch pop(>)exch/readhexstring} + if + } + {(>)exch/readhexstring} + ifelse + load + exit + } + if + /StartData/typecheck ct_raise + } + loop + cid_BYTE_COUNT ct_CID_STR_SIZE le + { + 2 copy cid_BYTE_COUNT string exch exec + pop + 1 array dup + 3 -1 roll + 0 exch put + } + { + cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi + dup array exch 2 sub 0 exch 1 exch + { + 2 copy + 5 index + ct_CID_STR_SIZE + string + 6 index exec + pop + put + pop + } + for + 2 index + cid_BYTE_COUNT ct_CID_STR_SIZE mod string + 3 index exec + pop + 1 index exch + 1 index length 1 sub + exch put + } + ifelse + cid_CIDFONT exch/GlyphData exch put + 2 index null eq + { + pop pop pop + } + { + pop/readstring load + 1 string exch + { + 3 copy exec + pop + dup length 0 eq + { + pop pop pop pop pop + true exit + } + if + 4 index + eq + { + pop pop pop pop + false exit + } + if + } + loop + pop + } + ifelse + }bind def + /StartData + { + mark + { + currentdict + dup/FDArray get 0 get/FontMatrix get + 0 get 0.001 eq + { + dup/CDevProc known not + { + /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known + {get} + { + pop pop + {pop pop pop pop pop 0 -1000 7 index 2 div 880} + } + ifelse + def + } + if + } + { + /CDevProc + { + pop pop pop pop pop + 0 + 1 cid_temp/cid_CIDFONT get + /FDArray get 0 get + /FontMatrix get 0 get div + 7 index 2 div + 1 index 0.88 mul + }def + } + ifelse + /cid_temp 15 dict def + cid_temp + begin + /cid_CIDFONT exch def + 3 copy pop + dup/cid_BYTE_COUNT exch def 0 gt + { + ct_cidfont_stream_init + FDArray + { + /Private get + dup/SubrMapOffset known + { + begin + /Subrs SubrCount array def + Subrs + SubrMapOffset + SubrCount + SDBytes + ct_Level2? + { + currentdict dup/SubrMapOffset undef + dup/SubrCount undef + /SDBytes undef + } + if + end + /cid_SD_BYTES exch def + /cid_SUBR_COUNT exch def + /cid_SUBR_MAP_OFFSET exch def + /cid_SUBRS exch def + cid_SUBR_COUNT 0 gt + { + GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + 0 1 cid_SUBR_COUNT 1 sub + { + exch 1 index + 1 add + cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add + GlyphData exch cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + cid_SUBRS 4 2 roll + GlyphData exch + 4 index + 1 index + sub + ct_GetInterval + dup length string copy put + } + for + pop + } + if + } + {pop} + ifelse + } + forall + } + if + cleartomark pop pop + end + CIDFontName currentdict/CIDFont defineresource pop + end end + } + stopped + {cleartomark/StartData ct_reraise} + if + }bind def + currentdict + end def + /ct_saveCIDInit + { + /CIDInit/ProcSet ct_resourcestatus + {true} + {/CIDInitC/ProcSet ct_resourcestatus} + ifelse + { + pop pop + /CIDInit/ProcSet findresource + ct_UseNativeCapability? + {pop null} + {/CIDInit ct_CIDInit/ProcSet defineresource pop} + ifelse + } + {/CIDInit ct_CIDInit/ProcSet defineresource pop null} + ifelse + ct_Vars exch/ct_oldCIDInit exch put + }bind def + /ct_restoreCIDInit + { + ct_Vars/ct_oldCIDInit get dup null ne + {/CIDInit exch/ProcSet defineresource pop} + {pop} + ifelse + }bind def + /ct_BuildCharSetUp + { + 1 index + begin + CIDFont + begin + Adobe_CoolType_Utility/ct_BuildCharDict get + begin + /ct_dfCharCode exch def + /ct_dfDict exch def + CIDFirstByte ct_dfCharCode add + dup CIDCount ge + {pop 0} + if + /cid exch def + { + GlyphDirectory cid 2 copy known + {get} + {pop pop nullstring} + ifelse + dup length FDBytes sub 0 gt + { + dup + FDBytes 0 ne + {0 FDBytes ct_cvnsi} + {pop 0} + ifelse + /fdIndex exch def + dup length FDBytes sub FDBytes exch getinterval + /charstring exch def + exit + } + { + pop + cid 0 eq + {/charstring nullstring def exit} + if + /cid 0 def + } + ifelse + } + loop + }def + /ct_SetCacheDevice + { + 0 0 moveto + dup stringwidth + 3 -1 roll + true charpath + pathbbox + 0 -1000 + 7 index 2 div 880 + setcachedevice2 + 0 0 moveto + }def + /ct_CloneSetCacheProc + { + 1 eq + { + stringwidth + pop -2 div -880 + 0 -1000 setcharwidth + moveto + } + { + usewidths? + { + currentfont/Widths get cid + 2 copy known + {get exch pop aload pop} + {pop pop stringwidth} + ifelse + } + {stringwidth} + ifelse + setcharwidth + 0 0 moveto + } + ifelse + }def + /ct_Type3ShowCharString + { + ct_FDDict fdIndex 2 copy known + {get} + { + currentglobal 3 1 roll + 1 index gcheck setglobal + ct_Type1FontTemplate dup maxlength dict copy + begin + FDArray fdIndex get + dup/FontMatrix 2 copy known + {get} + {pop pop ct_defaultFontMtx} + ifelse + /FontMatrix exch dup length array copy def + /Private get + /Private exch def + /Widths rootfont/Widths get def + /CharStrings 1 dict dup/.notdef + dup length string copy put def + currentdict + end + /ct_Type1Font exch definefont + dup 5 1 roll put + setglobal + } + ifelse + dup/CharStrings get 1 index/Encoding get + ct_dfCharCode get charstring put + rootfont/WMode 2 copy known + {get} + {pop pop 0} + ifelse + exch + 1000 scalefont setfont + ct_str1 0 ct_dfCharCode put + ct_str1 exch ct_dfSetCacheProc + ct_SyntheticBold + { + currentpoint + ct_str1 show + newpath + moveto + ct_str1 true charpath + ct_StrokeWidth setlinewidth + stroke + } + {ct_str1 show} + ifelse + }def + /ct_Type4ShowCharString + { + ct_dfDict ct_dfCharCode charstring + FDArray fdIndex get + dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not + {ct_1000Mtx matrix concatmatrix concat} + {pop} + ifelse + /Private get + Adobe_CoolType_Utility/ct_Level2? get not + { + ct_dfDict/Private + 3 -1 roll + {put} + 1183615869 internaldict/superexec get exec + } + if + 1183615869 internaldict + Adobe_CoolType_Utility/ct_Level2? get + {1 index} + {3 index/Private get mark 6 1 roll} + ifelse + dup/RunInt known + {/RunInt get} + {pop/CCRun} + ifelse + get exec + Adobe_CoolType_Utility/ct_Level2? get not + {cleartomark} + if + }bind def + /ct_BuildCharIncremental + { + { + Adobe_CoolType_Utility/ct_MakeOCF get begin + ct_BuildCharSetUp + ct_ShowCharString + } + stopped + {stop} + if + end + end + end + end + }bind def + /BaseFontNameStr(BF00)def + /ct_Type1FontTemplate 14 dict + begin + /FontType 1 def + /FontMatrix [0.001 0 0 0.001 0 0]def + /FontBBox [-250 -250 1250 1250]def + /Encoding ct_cHexEncoding def + /PaintType 0 def + currentdict + end def + /BaseFontTemplate 11 dict + begin + /FontMatrix [0.001 0 0 0.001 0 0]def + /FontBBox [-250 -250 1250 1250]def + /Encoding ct_cHexEncoding def + /BuildChar/ct_BuildCharIncremental load def + ct_Clone? + { + /FontType 3 def + /ct_ShowCharString/ct_Type3ShowCharString load def + /ct_dfSetCacheProc/ct_CloneSetCacheProc load def + /ct_SyntheticBold false def + /ct_StrokeWidth 1 def + } + { + /FontType 4 def + /Private 1 dict dup/lenIV 4 put def + /CharStrings 1 dict dup/.notdefput def + /PaintType 0 def + /ct_ShowCharString/ct_Type4ShowCharString load def + } + ifelse + /ct_str1 1 string def + currentdict + end def + /BaseFontDictSize BaseFontTemplate length 5 add def + /ct_matrixeq + { + true 0 1 5 + { + dup 4 index exch get exch 3 index exch get eq and + dup not + {exit} + if + } + for + exch pop exch pop + }bind def + /ct_makeocf + { + 15 dict + begin + exch/WMode exch def + exch/FontName exch def + /FontType 0 def + /FMapType 2 def + dup/FontMatrix known + {dup/FontMatrix get/FontMatrix exch def} + {/FontMatrix matrix def} + ifelse + /bfCount 1 index/CIDCount get 256 idiv 1 add + dup 256 gt{pop 256}if def + /Encoding + 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for + bfCount 1 255{2 copy bfCount put pop}for + def + /FDepVector bfCount dup 256 lt{1 add}if array def + BaseFontTemplate BaseFontDictSize dict copy + begin + /CIDFont exch def + CIDFont/FontBBox known + {CIDFont/FontBBox get/FontBBox exch def} + if + CIDFont/CDevProc known + {CIDFont/CDevProc get/CDevProc exch def} + if + currentdict + end + BaseFontNameStr 3(0)putinterval + 0 1 bfCount dup 256 eq{1 sub}if + { + FDepVector exch + 2 index BaseFontDictSize dict copy + begin + dup/CIDFirstByte exch 256 mul def + FontType 3 eq + {/ct_FDDict 2 dict def} + if + currentdict + end + 1 index 16 + BaseFontNameStr 2 2 getinterval cvrs pop + BaseFontNameStr exch definefont + put + } + for + ct_Clone? + {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} + if + FontName + currentdict + end + definefont + ct_Clone? + { + gsave + dup 1000 scalefont setfont + ct_BuildCharDict + begin + /usewidths? false def + currentfont/Widths get + begin + exch/CIDFont get/GlyphDirectory get + { + pop + dup charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore def + } + forall + end + /usewidths? true def + end + grestore + } + {exch pop} + ifelse + }bind def + currentglobal true setglobal + /ct_ComposeFont + { + ct_UseNativeCapability? + { + 2 index/CMap ct_resourcestatus + {pop pop exch pop} + { + /CIDInit/ProcSet findresource + begin + 12 dict + begin + begincmap + /CMapName 3 index def + /CMapVersion 1.000 def + /CMapType 1 def + exch/WMode exch def + /CIDSystemInfo 3 dict dup + begin + /Registry(Adobe)def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-)search + { + pop pop + (-)search + { + dup length string copy + exch pop exch pop + } + {pop(Identity)} + ifelse + } + {pop (Identity)} + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse + composefont + } + { + 3 2 roll pop + 0 get/CIDFont findresource + ct_makeocf + } + ifelse + }bind def + setglobal + /ct_MakeIdentity + { + ct_UseNativeCapability? + { + 1 index/CMap ct_resourcestatus + {pop pop} + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CMapName 2 index def + /CMapVersion 1.000 def + /CMapType 1 def + /CIDSystemInfo 3 dict dup + begin + /Registry(Adobe)def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-)search + { + pop pop + (-)search + {dup length string copy exch pop exch pop} + {pop(Identity)} + ifelse + } + {pop(Identity)} + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse + composefont + } + { + exch pop + 0 get/CIDFont findresource + ct_makeocf + } + ifelse + }bind def + currentdict readonly pop + end + end +%%EndResource +setglobal +%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 +%%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. +%%Version: 1.0 0 +userdict/ct_T42Dict 15 dict put +ct_T42Dict begin +/Is2015? +{ + version + cvi + 2015 + ge +}bind def +/AllocGlyphStorage +{ + Is2015? + { + pop + } + { + {string}forall + }ifelse +}bind def +/Type42DictBegin +{ +25 dict begin + /FontName exch def + /CharStrings 256 dict +begin + /.notdef 0 def + currentdict +end def + /Encoding exch def + /PaintType 0 def + /FontType 42 def + /FontMatrix[1 0 0 1 0 0]def + 4 array astore cvx/FontBBox exch def + /sfnts +}bind def +/Type42DictEnd +{ + currentdict dup/FontName get exch definefont end +ct_T42Dict exch +dup/FontName get exch put +}bind def +/RD{string currentfile exch readstring pop}executeonly def +/PrepFor2015 +{ +Is2015? +{ + /GlyphDirectory + 16 + dict def + sfnts 0 get + dup + 2 index + (glyx) + putinterval + 2 index + (locx) + putinterval + pop + pop +} +{ + pop + pop +}ifelse +}bind def +/AddT42Char +{ +Is2015? +{ + /GlyphDirectory get + begin + def + end + pop + pop +} +{ + /sfnts get + 4 index + get + 3 index + 2 index + putinterval + pop + pop + pop + pop +}ifelse +}bind def +/T0AddT42Mtx2 +{ +/CIDFont findresource/Metrics2 get begin def end +}bind def +end +%%EndResource +currentglobal true setglobal +%%BeginFile: MMFauxFont.prc +%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. +%%All Rights Reserved. +userdict /ct_EuroDict 10 dict put +ct_EuroDict begin +/ct_CopyFont +{ + { 1 index /FID ne {def} {pop pop} ifelse} forall +} def +/ct_GetGlyphOutline +{ + gsave + initmatrix newpath + exch findfont dup + length 1 add dict + begin + ct_CopyFont + /Encoding Encoding dup length array copy + dup + 4 -1 roll + 0 exch put + def + currentdict + end + /ct_EuroFont exch definefont + 1000 scalefont setfont + 0 0 moveto + [ + <00> stringwidth + <00> false charpath + pathbbox + [ + {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall + grestore + counttomark 8 add +} +def +/ct_MakeGlyphProc +{ + ] cvx + /ct_PSBuildGlyph cvx + ] cvx +} def +/ct_PSBuildGlyph +{ + gsave + 8 -1 roll pop + 7 1 roll + 6 -2 roll ct_FontMatrix transform 6 2 roll + 4 -2 roll ct_FontMatrix transform 4 2 roll + ct_FontMatrix transform + currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse + dup 9 1 roll + { + currentdict /StrokeWidth 2 copy known + { + get 2 div + 0 ct_FontMatrix dtransform pop + 5 1 roll + 4 -1 roll 4 index sub + 4 1 roll + 3 -1 roll 4 index sub + 3 1 roll + exch 4 index add exch + 4 index add + 5 -1 roll pop + } + { + pop pop + } + ifelse + } + if + setcachedevice + ct_FontMatrix concat + ct_PSPathOps begin + exec + end + { + currentdict /StrokeWidth 2 copy known + { get } + { pop pop 0 } + ifelse + setlinewidth stroke + } + { + fill + } + ifelse + grestore +} def +/ct_PSPathOps 4 dict dup begin + /m {moveto} def + /l {lineto} def + /c {curveto} def + /cp {closepath} def +end +def +/ct_matrix1000 [1000 0 0 1000 0 0] def +/ct_AddGlyphProc +{ + 2 index findfont dup length 4 add dict + begin + ct_CopyFont + /CharStrings CharStrings dup length 1 add dict copy + begin + 3 1 roll def + currentdict + end + def + /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def + /ct_PSBuildGlyph /ct_PSBuildGlyph load def + /ct_PSPathOps /ct_PSPathOps load def + currentdict + end + definefont pop +} +def +systemdict /languagelevel known +{ + /ct_AddGlyphToPrinterFont { + 2 copy + ct_GetGlyphOutline 3 add -1 roll restore + ct_MakeGlyphProc + ct_AddGlyphProc + } def +} +{ + /ct_AddGlyphToPrinterFont { + pop pop restore + Adobe_CTFauxDict /$$$FONTNAME get + /Euro + Adobe_CTFauxDict /$$$SUBSTITUTEBASE get + ct_EuroDict exch get + ct_AddGlyphProc + } def +} ifelse +/AdobeSansMM +{ +556 0 24 -19 541 703 + { + 541 628 m + 510 669 442 703 354 703 c + 201 703 117 607 101 444 c + 50 444 l + 25 372 l + 97 372 l + 97 301 l + 49 301 l + 24 229 l + 103 229 l + 124 67 209 -19 350 -19 c + 435 -19 501 25 509 32 c + 509 131 l + 492 105 417 60 343 60 c + 267 60 204 127 197 229 c + 406 229 l + 430 301 l + 191 301 l + 191 372 l + 455 372 l + 479 444 l + 194 444 l + 201 531 245 624 348 624 c + 433 624 484 583 509 534 c + cp + 556 0 m + } +ct_PSBuildGlyph +} def +/AdobeSerifMM +{ +500 0 10 -12 484 692 + { + 347 298 m + 171 298 l + 170 310 170 322 170 335 c + 170 362 l + 362 362 l + 374 403 l + 172 403 l + 184 580 244 642 308 642 c + 380 642 434 574 457 457 c + 481 462 l + 474 691 l + 449 691 l + 433 670 429 657 410 657 c + 394 657 360 692 299 692 c + 204 692 94 604 73 403 c + 22 403 l + 10 362 l + 70 362 l + 69 352 69 341 69 330 c + 69 319 69 308 70 298 c + 22 298 l + 10 257 l + 73 257 l + 97 57 216 -12 295 -12 c + 364 -12 427 25 484 123 c + 458 142 l + 425 101 384 37 316 37 c + 256 37 189 84 173 257 c + 335 257 l + cp + 500 0 m + } +ct_PSBuildGlyph +} def +end +%%EndFile +setglobal +Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end +%%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Image 71 dict dup begin put +/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def +/nd{ + null def +}bind def +/AGMIMG_&image nd +/AGMIMG_&colorimage nd +/AGMIMG_&imagemask nd +/AGMIMG_mbuf()def +/AGMIMG_ybuf()def +/AGMIMG_kbuf()def +/AGMIMG_c 0 def +/AGMIMG_m 0 def +/AGMIMG_y 0 def +/AGMIMG_k 0 def +/AGMIMG_tmp nd +/AGMIMG_imagestring0 nd +/AGMIMG_imagestring1 nd +/AGMIMG_imagestring2 nd +/AGMIMG_imagestring3 nd +/AGMIMG_imagestring4 nd +/AGMIMG_imagestring5 nd +/AGMIMG_cnt nd +/AGMIMG_fsave nd +/AGMIMG_colorAry nd +/AGMIMG_override nd +/AGMIMG_name nd +/AGMIMG_maskSource nd +/AGMIMG_flushfilters nd +/invert_image_samples nd +/knockout_image_samples nd +/img nd +/sepimg nd +/devnimg nd +/idximg nd +/ds +{ + Adobe_AGM_Core begin + Adobe_AGM_Image begin + /AGMIMG_&image systemdict/image get def + /AGMIMG_&imagemask systemdict/imagemask get def + /colorimage where{ + pop + /AGMIMG_&colorimage/colorimage ldf + }if + end + end +}def +/ps +{ + Adobe_AGM_Image begin + /AGMIMG_ccimage_exists{/customcolorimage where + { + pop + /Adobe_AGM_OnHost_Seps where + { + pop false + }{ + /Adobe_AGM_InRip_Seps where + { + pop false + }{ + true + }ifelse + }ifelse + }{ + false + }ifelse + }bdf + level2{ + /invert_image_samples + { + Adobe_AGM_Image/AGMIMG_tmp Decode length ddf + /Decode[Decode 1 get Decode 0 get]def + }def + /knockout_image_samples + { + Operator/imagemask ne{ + /Decode[1 1]def + }if + }def + }{ + /invert_image_samples + { + {1 exch sub}currenttransfer addprocs settransfer + }def + /knockout_image_samples + { + {pop 1}currenttransfer addprocs settransfer + }def + }ifelse + /img/imageormask ldf + /sepimg/sep_imageormask ldf + /devnimg/devn_imageormask ldf + /idximg/indexed_imageormask ldf + /_ctype 7 def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall +}def +/pt +{ + end +}def +/dt +{ +}def +/AGMIMG_flushfilters +{ + dup type/arraytype ne + {1 array astore}if + dup 0 get currentfile ne + {dup 0 get flushfile}if + { + dup type/filetype eq + { + dup status 1 index currentfile ne and + {closefile} + {pop} + ifelse + }{pop}ifelse + }forall +}def +/AGMIMG_init_common +{ + currentdict/T known{/ImageType/T ldf currentdict/T undef}if + currentdict/W known{/Width/W ldf currentdict/W undef}if + currentdict/H known{/Height/H ldf currentdict/H undef}if + currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if + currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if + currentdict/D known{/Decode/D ldf currentdict/D undef}if + currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if + currentdict/O known{ + /Operator/O load 1 eq{ + /imagemask + }{ + /O load 2 eq{ + /image + }{ + /colorimage + }ifelse + }ifelse + def + currentdict/O undef + }if + currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if + currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if + currentdict/I known{/Interpolate/I ldf currentdict/I undef}if + currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if + /DataSource load xcheck not{ + DataSource type/arraytype eq{ + DataSource 0 get type/filetype eq{ + /_Filters DataSource def + currentdict/MultipleDataSources known not{ + /DataSource DataSource dup length 1 sub get def + }if + }if + }if + currentdict/MultipleDataSources known not{ + /MultipleDataSources DataSource type/arraytype eq{ + DataSource length 1 gt + } + {false}ifelse def + }if + }if + /NComponents Decode length 2 div def + currentdict/SkipImageProc known not{/SkipImageProc{false}def}if +}bdf +/imageormask_sys +{ + begin + AGMIMG_init_common + save mark + level2{ + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + AGMIMG_&imagemask + }{ + BitsPerComponent ImageMatrix/DataSource load + AGMIMG_&image + }ifelse + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + cleartomark restore + end +}def +/overprint_plate +{ + currentoverprint{ + 0 get dup type/nametype eq{ + dup/DeviceGray eq{ + pop AGMCORE_black_plate not + }{ + /DeviceCMYK eq{ + AGMCORE_is_cmyk_sep not + }if + }ifelse + }{ + false exch + { + AGMOHS_sepink eq or + }forall + not + }ifelse + }{ + pop false + }ifelse +}def +/process_mask +{ + level3{ + dup begin + /ImageType 1 def + end + 4 dict begin + /DataDict exch def + /ImageType 3 def + /InterleaveType 3 def + /MaskDict 9 dict begin + /ImageType 1 def + /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def + /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def + /ImageMatrix[Width 0 0 Height neg 0 Height]def + /NComponents 1 def + /BitsPerComponent 1 def + /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def + /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def + currentdict end def + currentdict end + }if +}def +/use_mask +{ + dup/Mask known {dup/Mask get}{false}ifelse +}def +/imageormask +{ + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + } + { + save mark + level2 AGMCORE_host_sep not and{ + currentdict + Operator/imagemask eq DeviceN_PS2 not and{ + imagemask + }{ + AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{ + [/Separation/Black/DeviceGray{}]setcolorspace + /Decode[Decode 1 get Decode 0 get]def + }if + use_mask{ + process_mask image + }{ + DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and + { + Names convert_to_process not{ + 2 dict begin + /imageDict xdf + /names_index 0 def + gsave + imageDict write_image_file{ + Names{ + dup(None)ne{ + [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace + Operator imageDict read_image_file + names_index 0 eq{true setoverprint}if + /names_index names_index 1 add def + }{ + pop + }ifelse + }forall + close_image_file + }if + grestore + end + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + /Adobe_AGM_OnHost_Seps where{ + pop imagemask + }{ + currentgray 1 ne{ + currentdict imageormask_sys + }{ + currentoverprint not{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }ifelse + }{ + BitsPerComponent ImageMatrix + MultipleDataSources{ + 0 1 NComponents 1 sub{ + DataSource exch get + }for + }{ + /DataSource load + }ifelse + Operator/colorimage eq{ + AGMCORE_host_sep{ + MultipleDataSources level2 or NComponents 4 eq and{ + AGMCORE_is_cmyk_sep{ + MultipleDataSources{ + /DataSource DataSource 0 get xcheck + { + [ + DataSource 0 get/exec cvx + DataSource 1 get/exec cvx + DataSource 2 get/exec cvx + DataSource 3 get/exec cvx + /AGMCORE_get_ink_data cvx + ]cvx + }{ + DataSource aload pop AGMCORE_get_ink_data + }ifelse def + }{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + /DataSource load + filter_cmyk 0()/SubFileDecode filter def + }ifelse + /Decode[Decode 0 get Decode 1 get]def + /MultipleDataSources false def + /NComponents 1 def + /Operator/image def + invert_image_samples + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }{ + MultipleDataSources NComponents AGMIMG_&colorimage + }ifelse + }{ + true NComponents colorimage + }ifelse + }{ + Operator/image eq{ + AGMCORE_host_sep{ + /DoImage true def + currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse + { + AGMCORE_black_plate not Operator/imagemask ne and{ + /DoImage false def + currentdict ignoreimagedata + }if + }if + 1 AGMCORE_&setgray + DoImage + {currentdict imageormask_sys}if + }{ + use_mask{ + process_mask image + }{ + image + }ifelse + }ifelse + }{ + Operator/knockout eq{ + pop pop pop pop pop + currentcolorspace overprint_plate not{ + knockout_unitsq + }if + }if + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/sep_imageormask +{ + /sep_colorspace_dict AGMCORE_gget begin + CSA map_csa + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_avoid_L2_sep_space{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + }if + AGMIMG_ccimage_exists + MappedCSA 0 get/DeviceCMYK eq and + currentdict/Components known and + Name()ne and + Name(All)ne and + Operator/image eq and + AGMCORE_producing_seps not and + level2 not and + { + Width Height BitsPerComponent ImageMatrix + [ + /DataSource load/exec cvx + { + 0 1 2 index length 1 sub{ + 1 index exch + 2 copy get 255 xor put + }for + }/exec cvx + ]cvx bind + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Name findcmykcustomcolor + customcolorimage + }{ + AGMCORE_producing_seps not{ + level2{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{ + [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentdict imageormask + }{ + currentdict + Operator/imagemask eq{ + imageormask + }{ + sep_imageormask_lev1 + }ifelse + }ifelse + }{ + AGMCORE_host_sep{ + Operator/knockout eq{ + currentdict/ImageMatrix get concat + knockout_unitsq + }{ + currentgray 1 ne{ + AGMCORE_is_cmyk_sep Name(All)ne and{ + level2{ + Name AGMCORE_IsSeparationAProcessColor + { + Operator/imagemask eq{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor + }if + }{ + invert_image_samples + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + [/Separation Name[/DeviceGray] + { + sep_colorspace_proc AGMCORE_get_ink_data + 1 exch sub + }bind + ]AGMCORE_&setcolorspace + /sep_tint AGMCORE_gget AGMCORE_&setcolor + }if + }ifelse + currentdict imageormask_sys + }{ + currentdict + Operator/imagemask eq{ + imageormask_sys + }{ + sep_image_lev1_sep + }ifelse + }ifelse + }{ + Operator/imagemask ne{ + invert_image_samples + }if + currentdict imageormask_sys + }ifelse + }{ + currentoverprint not Name(All)eq or Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + currentcolorspace 0 get/Separation ne{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + }if + currentoverprint + MappedCSA 0 get/DeviceCMYK eq and + Name AGMCORE_IsSeparationAProcessColor not and + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse + Name(All)ne and{ + imageormask_l2_overprint + }{ + currentdict imageormask + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end +}def +/colorSpaceElemCnt +{ + mark currentcolor counttomark dup 2 add 1 roll cleartomark +}bdf +/devn_sep_datasource +{ + 1 dict begin + /dataSource xdf + [ + 0 1 dataSource length 1 sub{ + dup currentdict/dataSource get/exch cvx/get cvx/exec cvx + /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx + }for + ]cvx bind + end +}bdf +/devn_alt_datasource +{ + 11 dict begin + /convProc xdf + /origcolorSpaceElemCnt xdf + /origMultipleDataSources xdf + /origBitsPerComponent xdf + /origDecode xdf + /origDataSource xdf + /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def + /DataSource origMultipleDataSources + { + [ + BitsPerComponent 8 idiv origDecode length 2 idiv mul string + 0 1 origDecode length 2 idiv 1 sub + { + dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch + origDataSource exch get 0()/SubFileDecode filter + BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx + }for + ]bind cvx + }{origDataSource}ifelse 0()/SubFileDecode filter def + [ + origcolorSpaceElemCnt string + 0 2 origDecode length 2 sub + { + dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div + 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx + }for + /convProc load/exec cvx + origcolorSpaceElemCnt 1 sub -1 0 + { + /dup cvx 2/add cvx/index cvx + 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx + }for + ]bind cvx 0()/SubFileDecode filter + end +}bdf +/devn_imageormask +{ + /devicen_colorspace_dict AGMCORE_gget begin + CSA map_csa + 2 dict begin + dup + /srcDataStrs[3 -1 roll begin + AGMIMG_init_common + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi + { + dup 65535 gt{1 add 2 div cvi}{exit}ifelse + }loop + string + }repeat + end]def + /dstDataStr srcDataStrs 0 get length string def + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_producing_seps not{ + level3 not{ + Operator/imagemask ne{ + /DataSource[[ + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def + /MultipleDataSources true def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + }if + }if + currentdict imageormask + }{ + AGMCORE_host_sep{ + Names convert_to_process{ + CSA get_csa_by_name 0 get/DeviceCMYK eq{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + filter_cmyk 0()/SubFileDecode filter def + /MultipleDataSources false def + /Decode[1 0]def + /DeviceGray setcolorspace + currentdict imageormask_sys + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate{ + /DataSource + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + /MultipleDataSources false def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + currentdict imageormask_sys + }{ + gsave + knockout_unitsq + grestore + currentdict consumeimagedata + }ifelse + }ifelse + } + { + /devicen_colorspace_dict AGMCORE_gget/names_index known{ + Operator/imagemask ne{ + MultipleDataSources{ + /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def + /MultipleDataSources false def + }{ + /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def + }ifelse + invert_image_samples + }if + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + currentdict imageormask + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end + end +}def +/imageormask_l2_overprint +{ + currentdict + currentcmykcolor add add add 0 eq{ + currentdict consumeimagedata + }{ + level3{ + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf + /AGMIMG_c xdf + Operator/imagemask eq{ + [/DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ]/DeviceCMYK{}]setcolorspace + AGMIMG_c 0 ne{AGMIMG_c}if + AGMIMG_m 0 ne{AGMIMG_m}if + AGMIMG_y 0 ne{AGMIMG_y}if + AGMIMG_k 0 ne{AGMIMG_k}if + setcolor + }{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + [/Indexed + [ + /DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ] + /DeviceCMYK{ + AGMIMG_k 0 eq{0}if + AGMIMG_y 0 eq{0 exch}if + AGMIMG_m 0 eq{0 3 1 roll}if + AGMIMG_c 0 eq{0 4 1 roll}if + } + ] + 255 + { + 255 div + mark exch + dup dup dup + AGMIMG_k 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_y 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_m 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_c 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + counttomark 1 add -1 roll pop + } + ]setcolorspace + }ifelse + imageormask_sys + }{ + write_image_file{ + currentcmykcolor + 0 ne{ + [/Separation/Black/DeviceGray{}]setcolorspace + gsave + /Black + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Yellow/DeviceGray{}]setcolorspace + gsave + /Yellow + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Magenta/DeviceGray{}]setcolorspace + gsave + /Magenta + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Cyan/DeviceGray{}]setcolorspace + gsave + /Cyan + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + close_image_file + }{ + imageormask + }ifelse + }ifelse + }ifelse +}def +/indexed_imageormask +{ + begin + AGMIMG_init_common + save mark + currentdict + AGMCORE_host_sep{ + Operator/knockout eq{ + /indexed_colorspace_dict AGMCORE_gget dup/CSA known{ + /CSA get get_csa_by_name + }{ + /Names get + }ifelse + overprint_plate not{ + knockout_unitsq + }if + }{ + Indexed_DeviceN{ + /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{ + indexed_image_lev2_sep + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }{ + AGMCORE_is_cmyk_sep{ + Operator/imagemask eq{ + imageormask_sys + }{ + level2{ + indexed_image_lev2_sep + }{ + indexed_image_lev1_sep + }ifelse + }ifelse + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + level2{ + Indexed_DeviceN{ + /indexed_colorspace_dict AGMCORE_gget begin + }{ + /indexed_colorspace_dict AGMCORE_gget dup null ne + { + begin + currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse + get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and + AGMCORE_in_rip_sep and{ + [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup] + setcolorspace + }if + end + } + {pop}ifelse + }ifelse + imageormask + Indexed_DeviceN{ + end + }if + }{ + Operator/imagemask eq{ + imageormask + }{ + indexed_imageormask_lev1 + }ifelse + }ifelse + }ifelse + cleartomark restore + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/indexed_image_lev2_sep +{ + /indexed_colorspace_dict AGMCORE_gget begin + begin + Indexed_DeviceN not{ + currentcolorspace + dup 1/DeviceGray put + dup 3 + currentcolorspace 2 get 1 add string + 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub + { + dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put + }for + put setcolorspace + }if + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + end end +}def + /OPIimage + { + dup type/dicttype ne{ + 10 dict begin + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /ImageType 1 def + /Decode[0 1 def] + currentdict + end + }if + dup begin + /NComponents 1 cdndf + /MultipleDataSources false cdndf + /SkipImageProc{false}cdndf + /Decode[ + 0 + currentcolorspace 0 get/Indexed eq{ + 2 BitsPerComponent exp 1 sub + }{ + 1 + }ifelse + ]cdndf + /Operator/image cdndf + end + /sep_colorspace_dict AGMCORE_gget null eq{ + imageormask + }{ + gsave + dup begin invert_image_samples end + sep_imageormask + grestore + }ifelse + }def +/cachemask_level2 +{ + 3 dict begin + /LZWEncode filter/WriteFilter xdf + /readBuffer 256 string def + /ReadFilter + currentfile + 0(%EndMask)/SubFileDecode filter + /ASCII85Decode filter + /RunLengthDecode filter + def + { + ReadFilter readBuffer readstring exch + WriteFilter exch writestring + not{exit}if + }loop + WriteFilter closefile + end +}def +/spot_alias +{ + /mapto_sep_imageormask + { + dup type/dicttype ne{ + 12 dict begin + /ImageType 1 def + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /MultipleDataSources false def + }{ + begin + }ifelse + /Decode[/customcolor_tint AGMCORE_gget 0]def + /Operator/image def + /SkipImageProc{false}def + currentdict + end + sep_imageormask + }bdf + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_colorAry xddf + /customcolor_tint AGMCORE_gget + << + /Name AGMIMG_colorAry 4 get + /CSA[/DeviceCMYK] + /TintMethod/Subtractive + /TintProc null + /MappedCSA null + /NComponents 4 + /Components[AGMIMG_colorAry aload pop pop] + >> + setsepcolorspace + mapto_sep_imageormask + }ndf + Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_override false put + current_spot_alias{dup 4 get map_alias}{false}ifelse + { + false set_spot_alias + /customcolor_tint AGMCORE_gget exch setsepcolorspace + pop + mapto_sep_imageormask + true set_spot_alias + }{ + //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec + }ifelse + }bdf +}def +/snap_to_device +{ + 6 dict begin + matrix currentmatrix + dup 0 get 0 eq 1 index 3 get 0 eq and + 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop + { + 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def + 0 0 transform + AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + itransform/AGMIMG_llY exch def/AGMIMG_llX exch def + 1 1 transform + AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + itransform/AGMIMG_urY exch def/AGMIMG_urX exch def + [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat + }{ + }ifelse + end +}def +level2 not{ + /colorbuf + { + 0 1 2 index length 1 sub{ + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll + put + }for + }def + /tint_image_to_color + { + begin + Width Height BitsPerComponent ImageMatrix + /DataSource load + end + Adobe_AGM_Image begin + /AGMIMG_mbuf 0 string def + /AGMIMG_ybuf 0 string def + /AGMIMG_kbuf 0 string def + { + colorbuf dup length AGMIMG_mbuf length ne + { + dup length dup dup + /AGMIMG_mbuf exch string def + /AGMIMG_ybuf exch string def + /AGMIMG_kbuf exch string def + }if + dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop + } + addprocs + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage + end + }def + /sep_imageormask_lev1 + { + begin + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + { + 255 mul round cvi GrayLookup exch get + }currenttransfer addprocs settransfer + currentdict imageormask + }{ + /sep_colorspace_dict AGMCORE_gget/Components known{ + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ + {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer + currentdict imageormask + }{ + currentcolortransfer + {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }{ + MappedCSA 0 get/DeviceGray eq{ + {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer + currentdict imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + /sep_image_lev1_sep + { + begin + /sep_colorspace_dict AGMCORE_gget/Components known{ + Components aload pop + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + {AGMIMG_c mul 1 exch sub} + {AGMIMG_m mul 1 exch sub} + {AGMIMG_y mul 1 exch sub} + {AGMIMG_k mul 1 exch sub} + }{ + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} + }ifelse + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end + }def + /indexed_imageormask_lev1 + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + currentdict + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceGray eq{ + {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }ifelse + }ifelse + }ifelse + end end + }def + /indexed_image_lev1_sep + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end end + }def +}if +end +systemdict/setpacking known +{setpacking}if +%%EndResource +currentdict Adobe_AGM_Utils eq {end} if +%%EndProlog +%%BeginSetup +Adobe_AGM_Utils begin +2 2010 Adobe_AGM_Core/ds gx +Adobe_CoolType_Core/ds get exec +Adobe_AGM_Image/ds gx +currentdict Adobe_AGM_Utils eq {end} if +%%EndSetup +%%Page: 1 1 +%%EndPageComments +%%BeginPageSetup +%ADOBeginClientInjection: PageSetup Start "AI11EPS" +%AI12_RMC_Transparency: Balance=75 RasterRes=300 GradRes=150 Text=0 Stroke=1 Clip=1 OP=0 +%ADOEndClientInjection: PageSetup Start "AI11EPS" +Adobe_AGM_Utils begin +Adobe_AGM_Core/ps gx +Adobe_AGM_Utils/capture_cpd gx +Adobe_CoolType_Core/ps get exec +Adobe_AGM_Image/ps gx +%ADOBeginClientInjection: PageSetup End "AI11EPS" +/currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse { userdict /AI11_PDFMark5 /cleartomark load put userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put} { userdict /AI11_PDFMark5 /pdfmark load put userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse [/NamespacePush AI11_PDFMark5 [/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5 [{ai_metadata_stream_123} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter AI11_ReadMetadata_PDFMark5 + + + + application/postscript + + + Web + + + Adobe Illustrator CC 2017 (Windows) + 2022-11-06T13:04:23+07:00 + 2022-11-06T13:04:24+07:00 + 2022-11-06T13:04:24+07:00 + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 uS1tO6JJ6b0oHVZAy8l/ZJGx3G4BxVGxxecvOutfCL3XtXm6n95cSUr3J5cVFfYDFXtHkP8A5xN1 e7MV55yvBp9uaMdNtGWS4P8AkyS0MSf7Hn9GKvovyv5O8s+VdPGn6Bp8Vhbbc/TBLuR+1JI1Xc+7 E4qnOKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVA6zoOi63ZtZaxYQahat1hu Y1lUGlKgMDQ+43xV5J5o/wCcVPy+1Rnl0ea50OdqkJG31i3qe/pynn9AkAxV5frn/OJn5gWZZtKv bHVIh9lebW8x/wBjIDGP+RmKsI1H8kPzY0+v1jyzePx6/Vgt149Pq7S16YqksnkHz3E5jl8uapG4 6o1lcAiu/Qpiro/IPnuVxHF5c1SRz0RbK4JNN+gTFU6078kPzY1Cn1fyzeJy6fWQtr4dfrDRU64q zfQ/+cTPzAvCrare2OlxH7S82uJh/sYwIz/yMxV6h5X/AOcVPy+0tkl1ia51ydaEpI31e3qO/pxH n9BkIxV63o2g6Lolmtlo9hBp9qvSG2jWJSaUqQoFT7nfFUdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir//2Q== + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:37d8353c-8884-7144-be77-c5d54880a4c8 + xmp.iid:37d8353c-8884-7144-be77-c5d54880a4c8 + + xmp.iid:9add332c-ca0d-c84f-9434-b38dec6d3b17 + xmp.did:9add332c-ca0d-c84f-9434-b38dec6d3b17 + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:a8b69cd4-c13d-1d4c-9131-4e439ea2f3c7 + 2022-09-01T19:44:47+07:00 + Adobe Illustrator CC 2017 (Windows) + / + + + saved + xmp.iid:2ae90662-edb0-2a44-952c-678c5a8dd6d5 + 2022-09-01T19:47:05+07:00 + Adobe Illustrator CC 2017 (Windows) + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:b0179cf0-11b4-1e4c-bedf-4f2884d65a85 + 2022-11-06T11:36:40+07:00 + Adobe Illustrator CC 2017 (Windows) + / + + + saved + xmp.iid:37d8353c-8884-7144-be77-c5d54880a4c8 + 2022-11-06T13:04:24+07:00 + Adobe Illustrator CC 2017 (Windows) + / + + + + Web + 1 + False + False + + 2000.000000 + 2000.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + Adobe PDF library 15.00 + + + + + + + + + + + + + + + + + + + + + + + + + % &&end XMP packet marker&& [{ai_metadata_stream_123} <> /PUT AI11_PDFMark5 [/Document 1 dict begin /Metadata {ai_metadata_stream_123} def currentdict end /BDC AI11_PDFMark5 +%ADOEndClientInjection: PageSetup End "AI11EPS" +%%EndPageSetup +1 -1 scale 0 -2000 translate +pgsv +[1 0 0 1 0 0 ]ct +gsave +np +gsave +0 0 mo +0 2000 li +2000 2000 li +2000 0 li +cp +clp +2000 2000 mo +0 2000 li +0 0 li +2000 0 li +2000 2000 li +cp +false sop +/0 +[/DeviceRGB] /CSA add_res +1 1 1 rgb +f +1000 1121.84 mo +1067.26 1121.84 1121.84 1067.26 1121.84 1000 cv +1121.84 932.741 1067.26 878.155 1000 878.155 cv +991.644 878.155 983.291 878.992 975.492 880.661 cv +983.569 891.802 988.302 905.448 988.302 920.209 cv +988.302 957.807 957.807 988.302 920.209 988.302 cv +905.448 988.302 891.802 983.569 880.661 975.492 cv +878.992 983.291 878.155 991.644 878.155 1000 cv +878.155 1067.26 932.741 1121.84 1000 1121.84 cv +cp +.129412 .129412 .129412 rgb +f +1221.96 1210.82 mo +1274.19 1155.86 1306.35 1081.64 1306.35 1000 cv +1306.35 918.433 1274.25 844.269 1222.09 789.314 cv +1390.49 848.169 1521.43 955.961 1570.33 1000.02 cv +1521.46 1044.13 1390.58 1152.02 1221.96 1210.82 cv +cp +778.044 789.176 mo +725.808 844.144 693.647 918.364 693.647 1000 cv +693.647 1081.57 725.754 1155.73 777.912 1210.69 cv +609.508 1151.83 478.566 1044.04 429.675 999.979 cv +478.537 955.87 609.42 847.985 778.044 789.176 cv +cp +1250.65 1000 mo +1250.65 1138.21 1138.21 1250.65 1000 1250.65 cv +861.789 1250.65 749.348 1138.21 749.348 1000 cv +749.348 861.789 861.789 749.348 1000 749.348 cv +1138.21 749.348 1250.65 861.789 1250.65 1000 cv +cp +1630.83 980.486 mo +1619.33 968.771 1345.14 693.647 1000 693.647 cv +654.857 693.647 380.672 968.771 369.167 980.486 cv +350 1000 li +369.167 1019.51 li +380.672 1031.23 654.857 1306.35 1000 1306.35 cv +1345.14 1306.35 1619.33 1031.23 1630.83 1019.51 cv +1650 1000 li +1630.83 980.486 li +cp +f +%ADOBeginClientInjection: EndPageContent "AI11EPS" +userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse +%ADOEndClientInjection: EndPageContent "AI11EPS" +grestore +grestore +pgrs +%%PageTrailer +%ADOBeginClientInjection: PageTrailer Start "AI11EPS" +[/EMC AI11_PDFMark5 [/NamespacePop AI11_PDFMark5 +%ADOEndClientInjection: PageTrailer Start "AI11EPS" +[ +[/CSA [/0 ]] +] del_res +Adobe_AGM_Image/pt gx +Adobe_CoolType_Core/pt get exec +Adobe_AGM_Core/pt gx +currentdict Adobe_AGM_Utils eq {end} if +%%Trailer +Adobe_AGM_Image/dt get exec +Adobe_CoolType_Core/dt get exec +Adobe_AGM_Core/dt get exec +%%EOF +%AI9_PrintingDataEnd + +userdict /AI9_read_buffer 256 string put +userdict begin +/ai9_skip_data +{ + mark + { + currentfile AI9_read_buffer { readline } stopped + { + } + { + not + { + exit + } if + (%AI9_PrivateDataEnd) eq + { + exit + } if + } ifelse + } loop + cleartomark +} def +end +userdict /ai9_skip_data get exec +%AI9_PrivateDataBegin +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Adobe Illustrator(R) 10.0 +%%AI8_CreatorVersion: 21.0.0 +%%For: (Maman Suryaman) () +%%Title: (Eye vector.eps) +%%CreationDate: 11/6/2022 1:04 PM +%%Canvassize: 16383 +%AI9_DataStream +%Gb"-6CQB`4EZP")JGp)TKtsje/V^lmH[+ll/l7s=7BJgq(HY9H(PFJUp,$ttm)PcsLXbV@?TZ_uBC;dF)Ti=Z&E +%\&U5p^\E`IRibsdqr7;;O)P$L0+ZOj(NGn@"+O$@^A]YAcm"\Zg?bcK_gGdHMJ,fK3c-&%a^]3ESoZ*l5%tF3C +%p[ZSX_uKK/ji]U_H8rWdqWsj9T%dW6DsguFI")+XmAm/R%cq:H0n$s/s6b6E9.Ia7UbCX'lBRIFIfAc+]S=q\kPk1YNoMASC+)=D +%LYk;qrJU.%]m]bF`LGKZj6*rEp/a\`rqcG7:\>*pm$EJMj_+/GiV`VGT)S6MSNcYlYED--rVV0qro;thhgt>]mjdn$^bT'?:SBhC +%Q!X[lf.Xc6$\-2a3m@Gjhu)VqB10G+9SYXOf?nIA(CpN-B7*;Ci:!8PqX3IoGL&9O5mHR#bObDamDjC&Mut^clRZD>[2_N%b2F.J +%RdH8%_U&8D`UeTXjl*s:J,8R([l0>WDr6!Aid].%q7NpbIf%%+kAUCgoo"%BB8*]m8)\CCI/Ei<]Nq`!roI(=ld/'![OZh$o^2+> +%^QYYlk2d*jKO5e#5NQg5GkKZas7dR40%`O?rS@(s^O,S0po;(793_s@abT+-8f*^G+6kE5>P'@"P[Tu8+`-hG&ld7.?SFOUO_OUV +%[kE41iq4tJKX"8F*m6Klp%HA6I>0BE;"YXZEDqYmfCltmXu-.6]B?BPqhOskl#2ZM1a/*6cE)lNmo,D(nII6>]C6c+Tj=e.qAgK.hm`lM_Jclr +%Fbeh4G2YADTi(TEWjK+>C,?:4flm8o1>7G[C7jc1i%d+u^N%Ns4_S\sq"!.fg6^MnpoV#?la6ciqYGC3I(jtIWcj6ui%hYO^JU7+ +%UpaOCZ[p"9\.!4j,HY7H2kuB-NDF5\c3+!QQNmi3E>dJdh`@,c?*n\G%IhS"(\mQ<-FKPr=4Ft)A_MF3Dm]2k!5?+[RQam?DSr?< +%Zl`P*#.?OL#4cqS\UKMri\rL=\W/R_^Z`r;NGHm+\\68Y[Z\#poGK^=gN7=sVTh3:]M9?8'Q&u>Z.7^_pX?k.-Yqo8jkISXp?Co' +%ZM&[J?7XCkouCBF(TPbs*II/rXl>p:3gKU-f6cTP[X.g3CRs#-J^3nr#5V$Sm*DolV>c]Mn,khVPl?]l&2Yp11:-D[k>* +%jTkf(Wsn\8UOLbneXq-5=mdG)[D-bH13QLjnrHXiuoDQ5TiEK.Rnkk&@q't:RiSOtlDS*#k6e33$AaTNXl+Ct. +%hLXj)`9(j&3FT5HRHJHTqE!(:74N&B0(M*;S=[f]l);ApS]2b$-s%o +%0"TW$p+NS;n$oO0:W78>haYL^6U\Q@p\.[ki6rXeCVA7k[t?'caH'"9qeSD;0V&")pQoB_Qd%rhI/Bksb*O2c[9&Wng)/!lpTRloj*Pdb9kW%'Ska.4pr^6k4"C)5WEhacSEK!,)]W(7-iJuMA!?4ZT<1JY0>D>$ +%Lcs^qeGDsEVqU#=9u64pr_.7hg2H,#ea90[X3tahY!8C7o+d$nT)30(E!=M?:;ST/H98:/N8sY)c2h1Y^7U4T4c$aN:2pfR_(+`WG1<8d,n(D4j%:$5FEP$,KPKkD2Y[5([rPdOG.pie>G-,\=1,rWAVPZYta/r$P>gr=6Am4E1AV01RC7W-u;;?tK,lh3nSSi\j8F2+F9i9V[Y!L6G2RqZYd!iaJV:*geMp4f1lq`TsF[or;\mVVQ2 +%01>nQi2UY7gMWjr7F&Nuk0LLg]$KtE`s*HkRCL.Q2h)/`o:D(als6+u"qL;9K6G!E<-jbjj\!jg89!IqITDlGliZ/2>Ae&D8J@Rb +%g0W>70=/6sk=466+ +%^9Ua\Vd&/(%X`fYoiFO=e=TDT)Z.K!lH>YsRU`tUjj]P,]JOq&qrGdp"$cVTFY]rT0CE.r$QH,EH$]&h2Xg+j^A=>.DdL0R]m\X" +%n@Plr^\ctO1E;VJc/66t)d^13&bjCKJ#hJWDgq#dNeiU!nd_Ej^:M!LPQ+6>Z]>&hpS^62Bs.+6>CY93?#;6q.HIS^]^AGh,q""7H +%Dnl&#oj`JmZpnbjRS83YooF#t^A.\mf/HTV,LbnrZ^9"QroMT@*r>mb8Pp&0G$Ln%IlLIsiddqlaB)is->L +%](qt)]`(sgqs,>1]R/Med[O=q_2!O8q@?B:Hd:a,Y5Gk4RD4l4D;;ULnVd/1BV?E+YK'<8lL!&=?c\i7bJV[*lHRLjT>*Sf(7Tlf +%gA(1L%a3i+m?=aQiQ50Mn6]l/c%j(/k4nYl=8uFEf7(S5i_U92]IS7Y;Ic<@:mRfVRrUTT,KkrDT<6o=Ih`:t-r7S*IoZ3LZ4>u>-q>jb^A<=$)H6%/BfE%/ +%c0`#INc0Z?EBhT(``^<'*9D=C;Qc#N3fLHDQ5[du8*OND_U38]/h`7BqD2CtF&uju]$UtIJ='9XP.`P'"<6#>UG-Z.#\[-=;P&*B;20NIJ3*NZ]J$j_gBocDhb\S_3L\@86f"p4Kn;VZJ\KZ4*RG8fl,;PVa)BNDa8nZK5n$0B:75NBcT#3GFU._nX6cg^[m99&5_C-tOg4 +%l,^ZI12fc'8fUG?b1')Mp*X5#?Xj2XT@6Vs>1um1N9>?u[q"#ZD*(YMd?,$')Wu*.L6:-^s0gO][s(!ZI[0odpSmiHV@U07[coB9 +%T_:)(YAM$fTA3UQ=fRa@V-(i?AsQsrjrG7JYej\^Q\%,t4fnT%=`1@C/CfV/G$4adWE:=q&iQC/=](dGFo^L%_jK;#*02)Kb&PQD +%(Q?APhES?UD`M_Pp?'TU$gb&YpaMbWQ/j159_U;InD9K0iPFI9Z7:CK4VD>"9UpEk6 +%$u^hO&\&-(a0_;S\ +%@I$LPHOs?G$Rn*ZAs-]f$mKKBbJZKcO;qiL=_6Vrjs"$V/6bu9%;CtO +%E$s,p,b*;cCf^+eZ>C?0O(R(`U?qc@/<;l\3%&UMfQaY=6aX^2*T@ctr=1$U?&<@OQ0hc2qB>:_;C&?LZ)U&4@Rch+Er!,@Z6i_M +%]nUu#7?n=s\0#kqSS,"IYut\jFEM3;]Ge3jmS^utaC[5JYDR?,p+%\0h6F3^\S#?kOtB6.L@tu,)gu'Eg_\S#SM>+sD#<3DT%WOU +%)'bOP]/2O#'$_NZN*qf=61B8UG*^o+`WdMJ^$nBP8]W>"8u)bJ"mWpAYMHuCokN26tHETT1:L([*^Lec=U,W\*hDE0;cp)f6$RYkFGm')G@_@lpke1J#:E; +%27#SA]/0EQcLlD9ZR=]EVWfsD:Wr,-AUUem,sc9NG,;j\m'YH'6G%r;]m\p.-!_3[%B2'GZ0NEZX'52gVR8@09OA/([G>BNe#q?'jf33!KP":fYH6DdV6ANhQg,?e#gqYLlP05l02f-?W24$,Rr*;> +%\MZ5`b@t(N8%6B@?_.(Zl8B[:E;$??mac1HZG'tbij5f(O'&YgClfHKPEr6[Xk8E\Z*38,09[(6g@IZ(?=h8f#o-#2l,Z5'lGm\t].nHc+eMQ3Mq(=]Ibl4t,;ZRK-L.U8uo'iDNWb%0q-g3$3!$]::N?FQYV62er*^LjKQ+lCJKJlUd" +%:&bqS$u4E=O2[riBo._5X9@70m\l5&%#S1dc(LRQMAc/oM!c\AWEdIf*.4T1#75=BPZMf+6\n(hm`*r+cIKNHf6OmK +%C,7mFaL_\[9n'3&K4`H[In-)8#&[+[8bh\#S^1X3dZ%eTE`I^R("5-O/#/s=+[5WA5'9;cpe7j\Kib[_U0:"og%_m2$4`rYd1/[[ +%LP73J0U9)5Zmf4K?f%'R.3\b./;_Qqb#gSm6";WG&5ot=r8 +%5S9,fB@jjuNfPaPpep/:OlcMN+uN\)Y79TgMq%OKGG"YOZ+YVWcX7la>jdU67+'G!W4J`\qs%Xefj@f2At>2*eQU^V)QW'pW!uD[ +%\'5Q@V#FsT$Y:,AL4\c,Y%0MUn*!MILN7t\\n&C;eZjKp;&RYj/1,Kn_o3&[PA]M1?d[D/+dLO4Hkc9rG,OpW;BdA] +%31e[n>h4TQr$p_(/Y169@39^UMOn]s`JDk_.K%(4S`0=?CDtL_m[dGaoc5FB6oQu6gdGd4gsqMB(HS\!W#dHpf=/dFg#SPRloRtr +%`ebWFDS3Guh8X;sdi+8^IbVAJkGjN2G!=WjBBP_S>E1gD\`:I?2r(Y/^o^9gEk\fkk +%O!Vhhk1;?KZ<@_--;AdR&,E;1oKB'?oYq"4SO=^@c-f:"0Bu^'4KV:%,0Y"<8e_-Wg66D$@3ibFI"#Ap:3iti;>;@ApZ,%ab#'Z% +%X\idi$3s!g1-g-XMXiU+j%FfLAY1qkEOi%tXf/,ZAc8--gK4'`/6pdGiR[IeKQ[Oe5FsqHZU$#^J62aHmB]$ip_LqCqb&Du,H111 +%P`XfTO`!oCdags.V5ta3/?cm7mh_hVH"]-O.NZ4f?oR>^M`O'\m3D),/plqjF1Fjk,AYUQ4L3lBOWFDn5Q;>/N.9pN\TRFl[f'e0 +%JL5ST[iK"%J*>#J$$0q;?8+GhX#-57R!g[8fh=s;Yd5Q#J:!aIFQY=4o5D1ohf0S8kU[\:XNI[U"5rt^jAOs%bp^9P#d.b_Cq8$7 +%0AQKKk7(*<^B_i*m:U>=\dmB;K9:n]%>AX1\Dbeoo3apb!/Em#'Z=E6%U'J5%*3G2mMgU>5fM\2Ns)BI]t5orN1s*8.s/G@#pPCd +%2\!+?7%1OB(=#*_"4g=<=,d\mVOC@q.BZ]PWZ8$\TZH>Z)r+BjkR*.*q.!r3T6s(mUf&LQ9$(3N',kW'?8WnGFX>2tV:rVad;f1,s1e5L +%Nh>jN@htec8RoYq'A:a-"Bqlls#4foSHg-[qfft^./K[J2kaa)g[BkMD^b5-OldnF>Z'40&g?PQ,L5`^[!B]\pP=Ce=EBH4W")Di +%\,[_d:D`fs8Pui@`l+5p)Tblm^c'?!="'6DB;Ro3e[L$k:En@h_%',n:`HDdb]g[+q`0iZ4i,/c1>k&h' +%A2!@#h%t:tlRC^jcImH?F&1tkNIqiH8M2K?oZ:1S8Om)JEmkU/\V3Cg!KdkKI.EQjVUS6l6'2\o,2WK]jDNQ<<1eiB$GMt4JYMn3 +%htMYq]1LP3XKob!]'4>F"F_0r4MZNM$t*JBnbn!rLZ`;-j7Efg/2OnjJO_-XjE(%Olk=%'';$]A[+VMOG9sHR/=)^+1V&U2pA(3e +%WhrHT5o+HX +%@/KU>Jpebm#8:?n^0_'YN)99["Vi:,;Qg<@>R`:[^`#69D'*I(rRPip@4Bn[r.W_O=nnl-GqO,A +%)!kP#*d]]5,ic +%+]*M2B9Ti)^1srQO4McS@4Nl$#YV0%LA=d'Di`',Z'/Z3hYT/EPEZo/cukT'Fd1XXUTiN24[h1B#`t7$%^i(+78^g#cr/I)Q%tcGf3X`/K<1?Hoa"9,eD^Om'HT[q@WFWn-$4 +%MYGWQ-Y_r6qRX6N=*Gp]c+F=J(b*-UID&J&K@G+@`_I>EC$aZ8W&f9L,BcT:W3&Ef*?Brg$W3_VXV7sU>`%:)fDup$ckrDnd:-`' +%MQm=nN:+VFa=Z!d(aJ+Y_%ro/1^Qh.C6Ql1`3tG@?,@llLr;cg]S&m>jI_?iU"P7se-Y["n'%*`pjekT3X5%43)@@?Z2QbhJuL;-WCUii"*5L,`q&k5O4PL=bf.(L#cm,;bt<+Al@FE2sdm +%28cP6W&B[T[6r=P74N'k@b26^SesUYBH"7sqa"l-o>Tc&YehpE_u%dFV0_C\>2Q-^Qamp30b't7=bTQfTs.a>qP]Kq:k_8[L2bk2 +%j$gN7Q"rUYiK;/ubLMTC2P>h`$VF<,I\=n,?+@9sZb[G+T+mmprW$M!ouRQr`qKn4qND.?Y<.DclF&g]k1q3B+;qtW949\"M;mol^J$5+h.*ndR5M19#!S@t1WT"Zl9"=gZfXJ.%iR$L\"$?] +%p:k2?bU1L\=ooq=afl#u,'\%[5XX]VbrU*mM,jkGI\Ekt>9a#6Rpi,K:l<=k'CCSLN6#i1rNk`C8(nVpc)0-Tr$.NBR,VOH%F,9Q +%[a`/B$VRc(lcn=D.74lCE`U-V#THjI_*ldeFQq.90pk=I"K;U!2"duIfK +%a=pDCDQ(&P2#,-r5LQFuGHY@seToPe(CIrJ#bmM^kJ0;:;o_#kT^-7sWh.!U&('*Vs%07N&]aIcr@NCZ3+ds0Z +%F=]n34q-Q)Z95]bO&KLsBo+GV"0I4H/-]q<"gU`4'Wt*eu]2oXqgoP@L#+js#E6bV.Q\"^FQf +%-DF4O,do.EIZ.5H?S#'pX`0/hW8gBC0_3[sn)&G$'2O.mJYC&Z:'!k>`B&pkISf)=$s?[2\E'$L>7pWXQu&>uhX6'Ck-!0TS\GLP +%ce*49KqIR,a-p>%;!^ULR@$STlW.&'R`o_L\OImKh)Dn`H4bSgpg$S>IIAK7Rb;R8?")dG3")o&MYT^Tr +%!F-)H28k`8P1G.f/Z,Om+1*Vp)c90+,7be6!bC=$.lAP\uee#'Td/Ea^3H(9-g+=+"h0FH)@\OW)"(ci5"CIYaa-qudKX\t;+><\Z2$Bm@uW +%9Y1suEhZk@XWgud;b/M7%Kc(?:-De*i1S3IT't\fNMh_?AK.PUO&Sctk2uDZV2*70WMIO,me-SM0MhR"fDDB7;iQ:,)F$"&imC!ZXmn.MpXZXUCb.)K$Xt;J[B+2M +%$$o@`Q;:>Z5>?$10(i[s/-8^KEcUJ;:[WVF8a`[2&%C[b^Gjbi1<2DB8-<\`.hLa_=*0f[bQ=jL`cM[>!H'%-I.-Gn_b?Nag$7>9"-iI3s$#CM@RsNG2m1c10=A05=_8P'T?+6Ts@XHLfV3"ndrZC?'bhTBh>1WN32"CMp%?31A."]g&slP8mm\Fu[?obO*9AQ.ne4OhM5,I/)L%U)hL"8;Vgh9fr?=n!&Po^J28H3P:mbd+OgRkTQk9:?jc:p0q_(lToA57EaPg_DhR;t5&*.nF#rdZ7 +%5G\+PKH\%V[I;g4Mq!l!3Q1//`HBkhZiBI6`Y68qn,s>JJi)BlG4=]*OkuDQ_kla$)__'P;i91K$&ZHFYNP&bbN(t;%F!7n/0.'h +%#Hhhkq_D7ra.qIV!S)AZl.O+am6e>&jEV&c2mDgQOk6'jnCF5+bPUB9Mcu +%5cnZ[2ZqBL]Jr`DTZYA3KJ7[NK7Z8gb.0Kro4Up7dCAp4+RSZ''*rjNl$K&,D,#(d1pH2PmS1=[S=FZ1qc$td#GHkXO`01f5=-1j +%T-@(8+Gp[li?KJ/gLp.DNCuH6D8Y7OMimkrM@&P4r(m4cmobF?S_L+]LT6p%H#&h&md(A.IK$Eu#-]?De!rQbYpGBI#u6DL@+I8l +%+WD7=?kX9k7&=k"K")6RC/5U"X\mO@N9CNL(a(m_5ZH,Y?PSQDL2Z!dOj"`O*":bDpmoI'5Hg5oP>Ydk22CGYsFn+WWE.I!O=d&c;pPcsB\n6p"lreo1 +%-KanDhK-baeWc[112b7X2CD=Zg@UBL'qDkIEk$9+di!nM43njV/EdjZA`qcHB1*OjGlI%b4DC:aBRF"QB[OHJ1N0a=c_E4=XNr*j +%)#NL:(;NT]Kl'*BUleRO3ZWkF-d7dT][\RZT6OPc8s4/1p0L@*pNA*Mu1>B+Y3on&k8NTFV1="HB3)bSeI()4(#ID=/S(pSJ +%O$=TTiGb,)GdQm*O"Bn=^[#MCCMcVnh>qC$ikN`r\E/7-4O=eg.leE7e.O^Uq[l.ZK&6f(oDn>a2R'no#7Fo#[F_o?o6L#QO"Dfo +%KBu(;gcgg.KZlKiE_MeVi.npg][#'V"^g`Fjl6=c]XrF;C[\hD]Ps.lB?CJ]D_NMiQlamEo#2(?JNt%''Za^/6Y;JcF9cP +%>*opYl;DdRZ98@`1rml::V2g_`k5Mu"(/f:3Fq<)i"UF,]?ZsM-XFYB&lXsL0]2e6r>CtJ$qkD2p"9r/_7o\^T]+K%tS9b>qIe6ODOlgWe?.d[nY4d:uo9$(/X9P_k[;EhMX +%KVL2(5/'LY,FU"X-!2_To-+-T%"UOr0ci-$AbnO#$p*f%j)0U%una.mnVmk>`A3=X#>NYq]7@J)kLkGK4?HUg;]@Zohu.QFiE +%n?gn@j?H1b31C\(?_knijr(NVV7i:0cGJ#(3Nkq%:E_P*8U5rYkE=]T?m)qEZb;n?gWjP)%)?O:j]`MsT"Y+[S=dJX`P.oBH?&BG +%E8pfpjOa-u6N,gKYRdi6pD/!Um_n/AW[nUkb1`cRjN"]GA^5A +%>@,[O):i^h]2USk=#74mT-8J0:MLcjHr8;o-!i5eQ/YsRT3?IDobT2%?_[]Y]'EdH4uE#O,tt(b1of^R*-2HRaGcU9Jj%HX@kn@. +%EsXTpRYTlJ04Quf(7DT=%D$kCjW..:H)OsMgO,ri%&i\"bF_.]HQ1qY]cd9KeG*@86u'C6c,2cDM[?]25YhW,?U<;iF4d)H&7(,3 +%=&iI'7ii+eC[St&-]-(8"RLD`hLF8/fhP>i1D?u',hi+`%>*pHA:kuabbQFF4]^H]rp9mRc`6NH@PL*?MKf?h$e=?*ak:7-*f%J1 +%9s.(p5B"/=gY$];d[`nI,#.'D.P2J38fruR;4K'K7LEZk98FMKR1iYc&QMG^,-GWd7+_\YZjk3Ob)1D-'lQfE<,8.!M7:\_W"L:c +%6^%d!#t"WD]E]nSQ3mu[2>=6OgIk*;mVCUXFr"D$!6,dh*A5j[1anJjV6V>4ZH;HphcE`hX/i=+7CH'ZY4N2Rc=cjs`Qt0T`qLtt +%&"PdqL"^k.FEd3I?:HfneK\._W`o[.%`)leeo?I2D23nSm"o.16t5!m,#P?#kn+OUM`\H?]TCBHq*(/,ATl.d)c@2e=PY"J17p.1 +%\%:TcK!82tofS9IoWp"Hbm!@XWpp+Tj+1Zs$F9qQbGCB.i@-)(TdUOnTDN&EacGD]b]]c4niO1DX0'%_Z$5arafs,hjh%;!?'T0hgNO"VW/>^$X^t#dC0WKC +%`R9f=O;ca,\a)aa&t9DAlc!NbY;b?-o30Z+V%D&.i/-_nYg_-tSZ8jUi/VI.T!'9sQM"AlsI=k>,rGs!&q5V=bmnpGnYr8)R +%lXNiYcL[E.f2#6acVPWX:doE+l\U65,/!l7p:L>^8n<:l-Z,PTj1H$Ag@)/rOIN&S4fu"U9g9\4CAR$e]9M7o:GY2kIdfI0#LAF. +%BA=$\gg-MCYmr/2D9pOqrVR(LP6]F\3,QNoRZ0u%d="hsRcCF6.FpO=B^-in.Pb7\Vo)k'OSkmBZpW06k^U6,5`_'#H(fMreEIu;JjPqqt7Ka*Wir\1nR^m(QIDNmsfTPmeM>n*+(mXp)piQ0o^PYRm4%+#dcW53HQm`tOS*GE-6qEYPl/@.o".llAocZQHiB8.OR[G?4&*utWGs*9oErJJ(Y=gd +%>Y3N9O`TOP#74+3l6meXT'g70rT6N$rJW]H1Im=KM>A7kp];mG+`:WDrMSL*rC2SZ;[&giZg +%[+3LMKah8='&B+*W]TH`2/+c#SL;$25:YLF2VFWi:5R3d=g:mD]53j<`_Q'"qbN0B,+]PeMIJPK+DA$gmWU+$QKsBMI[Up7c&&(T +%`(tI6]lRYP>jKcTW%R[TII+(#MXa:ehu)l2f=uV.iq9o"YCHS1?];#]ps##+rq8F&Qh7oI4FQtlq:jMq`S\E-j7hFqL&Pt>*S0mq +%/STrlh[`UaRh]cjlZ +%qWkDDX2JiYYOUp3Dr88j^NfJ?`LGIThu<089/V7tjmgTbQdQ\bZ@;W3mb8QHhRrgLq"36(9CI<#],*,mJ+MFXceeWun=O[?s+=\8 +%mf2d/eoK>2s&s&+'X<'Ao4H7+1S"o[MD;or%`b^=PfJ'O;d']]s&A=EkP&=(g':"4/7UGLV1Lb^)hqJgdl;XO;I/3 +%+<=;?qARg+kF3U;mdQ20eU/Sl],l"*.2hm1F>M*l43[#MW!l*#jX/(&4O!%ZQ=4V(XZ)I5N'ibH(KS<7o4#CAi,PjI9h'5C>],3N +%"M8T?Da]MGb6m6hj`s:d1X5$CU:qBK.G+6SUa73%gO2BtTe6Qfq&3d-PiW+4.fApSK%%FZ).-N^6AVVLk*>08MToQ^2`RGo&>al. +%YdM@gDN^qh#JVJES([6;2^7;uJ+Zo!ZHd1T3@&o$j^uM1%p?nQ`klUD2ettGJ4G:(nsuROWN=B)of+<:MQ1*s_=*O&Z/^9FDM3k? +%a&B[>EXde,H;Z_u&EGu.21j$fd1Ye8l$@kW%q2`?bee="]XA53\l_/BL]GH1YAN21(5-e1[$S[fC:IO0WOYQ(e#_Rfk8S^"2Jsu! +%a9S,.7CkEKgZ8>`$H]!c14E@I3_+IS<*\L(1;n@.9YV_+G?>1rdOVq-Gkd6pAEsk[/D$,=<)dDFKr**K=Z$AjjY4g2:"#t?-:",5 +%^h(#d)/qX[oTX4/7S_h,VG,G21)jkJ7>c>[['%R==f,8`M9#G*7%JjST8^.U8!0M-MtB>&+3N'nor">>iF:@-[XZ_*Ib)oM8.h5. +%$Q%*h%998CiY+=ps`D'mBJakkl-P-lPBi_YOFg;A&]n[,;YD*o;=H4T=B-DIT^HE=0uaJDgi&W&K.8g +%#q(gKp1d6kFdaVEV6YfY+NT9gN'eG&7YlI;fDs'q$aNn2A[=S2=4@NL4M.doj,N9<14W\.\='T>pZEF1mVB#fQaIY(MK\CQ:&b`R +%LYmUU&UVX'^6bt^]B;uI4ob3p\\kk;lPKQF;q\WUDnc,/2fJ\PS'YNUIIk@#qd!htr9WU%^]3a5Cd9a[6o&5/b-bc1TOdW95/W@M +%Gh#.4XD^4Z*m\^CcWkCS29UH+[5?WkmSr7\J.#F*9rbK8$aV?`33dS:?@ddJ+u3ng"lVNT<1-$uT.Eu1;B2"(eN73I/+gPF%F]&N +%7dTTLV2%m+,5e^aFeIs#ZgI_i6CH/GiDfL+S?c01&+n.:'e[H#n#`a#MX05qD_B[.R*dM&B53\1'uoi[9,.I3Cb5qE'F?KQ[MH)# +%aY^GeedgB-6jWO&d$72r0X&D$p8m-2U]q^hMJ'>C-=+RhY\@4hrJg`Tpfs"KhR7(nScb_/`a?[&qXD;W6Qr',SFls@fFGQ$;AFZ@'732RtY-0%L#\TRRh!Pj@/?LtS7L@g"+'5I5 +%*O>@h)$8@&;_Ieg//i?Io'AK\41s9Fd;81.dbHr4:+XVa.*OBD55,Er6Y3:X^@u<))<(EH2j@aS1HFMFTFiA?6]esFb4Tf&[Q%<%$sP(,-O\DW"JBAG$h!s2c02Y +%]crTRZV6,Q4TE+Y'iYjRKf\'pa)5GOL^Pu5[t91qp`?5l@Btfa>f%O)MIR;0[*T,9>i"i::,hY-*)@2K!>V+o+!lc +%G]^sl(KpS]@\LoL.$H3L:uUdod0\MQclaGl[B!guOiOBL2?tI_.Pu#H7MQ6.'O_FOE[k5lD"ic[o798:R!q_UDk&DLo@f7L0 +%/_m2.9$!P9AP19tX-5ulL@p84e;?Nnl\2D%JEg2J;EI.f,&>9eej_!5&_.@SQIl>AjW'q-'VGr_ +%KV2hO\&q<:SCOpI([hQeg/^cOtB*l[r&fe)7h7l1028=3?P6gaToAO#%"fI\PLcqdlQj'S-BhV0EFlPi:I.PA)TBuo.$pq +%HTFIu_5QZ6g6.UpU3t"6.*)^!KPYANBGE%Ub/m4L5-\dDY:L1$bZRIftO;r1IV8nDScgSE\tl["'m]B9I#J0/[G9WMG/a^D^^NYEAfXK`aZ"E0N9AL"9?4G1!6b+,bcWg!DS]J=EB^9'aeaMM@-M8Dpipsk[f5_=r+QaFBfWqq/UPp9^@2M/7ajRDE#Q)Z(q'fj+%pT.(Q +%V'_T`OI*YTBW^jg)8VVeHS*"6]m-SkhnBVWH_4m9JgNMbI:M%6qh$BMCg57?Eg"PsCg1<`!D_.SX_eI*X_a9'gU:&d&J!3)>EF!* +%BqDfB/_%3qi+obQ0N10=fsUs!-Gi,.[Oq&K0Z@YY$;n5[=Z(*O![5RSBe.,)`BZ4rJcCTq&DXW]egQF"f!Ilk.e9L,[]ll)f?J3e +%ngapn(7=ALfDanUMA3JHlD1kj&7ml'>K[dq9,0)9/6a_i1tre3>toItg:"edEtVgI[OkWbCP3SO9NtV5ZH$c5>I#CCK`3dFQEUO\ +%aKaF+jC=WmR2kQs?k`pFhj@P>l:@nUc)N)&>m>,u)RVt>?RG#iB%'p4BJ48OP5QV_fWd/EOYs:7E.\oe&5m2JB?AV@i2,)[Z[t<, +%bH0C'K$7M46#9/aE+;Z%NBJdW3F99W$TkHr[Bl@/6B+%&2s)Z-BbZPr3D5qp41MqGZY*Pp[*)1(JOj5+g9[='/5_cQ22`SoVQ(2q +%kV7#B=kM:LjMH(;JGg0?^K*uPD!XfcC1\ltV\uN4BcDDb^JhnK[A?m1DqpYLM\nmb>K*^j1Y^p>.@Ocj2d_1hurWa5i,lE/@9UB)4Jr1bT%MBZZrHX9[];8S,OgW_6j#XAR\Mh5kMT`S?>W)0@Wo +%UHc.`m+1lVIUR.tX6cR_5GFt7%LEEcV6':6%g_9PSDG9;\1g?:^mc\_Ec01A?$bW?PV!r]ZEa9.KA7'g4(tYs)j.'-bn\dAJWpl_ +%Ttc:t\d+G1UUL.fb--)NmN@0YDO+qILG2P@BjK4NKN-p(gUN"M!j$3FEGuN8k`dDYF<@4CI+kU_,Ri=PA^K4, +%8Adn,mThY6+^2'5T]RYU'k!#gnBFsh?CYWjNQkNqX_C3cS$OeD#r:f"]nO=47;cl;Qb*VMrAc`WIj&`!S)%KY,B'2Ec!cD8lOlkb +%(rBTO`Q*C]Z5&7mf.9P^1lN%#VX1;M22kq4Jc7j+oOb4]\ci_#0XB3BP!k=^KQLJuU6Ftq(8]S,_.CP8fGZ!V,?e52?-m#bLr +%,)/0Hi9k_Rdg:#=U_1'7`.",h][sN/jhDTL/>Sr9du[t.D"AVc.!8%-0.JAnisE^lB_p0!d$SMQ-Uh,_.B^srGH`4>M,K:OrYa9. +%@3ms)j^DnLC_Y@>OualcL%#mV3rmUK/%DJH[?/4urDldalrMfPpf+eH9!B/KA;e.eU8aIdTkei2N"IsZF&%ZL'r\u<@F'EY"kAhDUceV&DcojZiK,l+9MqG@W +%@E/X474d8Mm2Kn`/3@;+a6qP:(Nlp^;s^2^?T'iR=q&&!#hu`S[>-ZWet"s/k7-plp+?754PJ_,_D^[S%s;pA6esTPoMEaFg2o6! +%.+l]gRZQj/:tGd>h)%8/V@FLt2gVFW'Up0/L;B`q_FVD*\8:h7BU@2@Xhn$rb62`uB`#Hi66"=;:fu*QglnmGdUAQpZI;-K9Nu,A +%SmU^[fSsJE+F@Zpg$"%jfbDJ5=]6sM;`@lnJ%^<)\'-AW\+O20ph-#[ +%kA2gl=N079I^LCRVGPNYo5YUH9sEJ$#X2"'HTgc!_hF0Si)o?23Q7TTXMr8]R4Z',fsZR]Q/S^%imrSM[eb^7"KuY!efW@F*jLC_ +%C6i.XWe7;RU6M_e!EN'oNgOKs?g*O^!Hf^/?P[r9J5KGi_'7?^DD[aZ@o2m!!fQ]Yk[BTmN&=(A2/S&-j+qZK@M;g)&)F.87+qVF$03-lYjQ5@:,('88tp +%Q\ncYkoWY$aDo%]QN5;=PI`1;C]q2G9##)Vg8^$i/Ltr)APu7X'Qg>,<94+f11i'ZHKo1?LJ:Qtf0giR9!2Z:3[n[T=k++T(&L8< +%;H;9GA@PS\@o905DOQ\Xj401F$l,-qZpIF;/.l@u79C-+7^;cP'SA5I.,/F6H*#4=p/JZSaiTX]]s=TKlgWC`m'jmuq1[Z.YAE+I +%+&A,[\Y1%@AIp/Y]M>>Mcb[t[D-^Vp8B<_gCebjAYZbH2Kb\7OO9?:LVfj<7;E?X'2=(AbACcGq%HL)k0bOs@ +%9\k0VZ8VL=WmBT[6\73>@m-!Q@U^ZIA%$^;canWTLs,[Jaj$iLS#.&. +%[?j@h)'T2geMR;]VNQP_dJs;Z=sq8NI:ko:;F@9Ld&2/rl$>A[06n$S.+!?T'('nHG%B9UlE$;;105L():hUM+$'Uc@`q,bHi\0Q +%(G=te*\)5')QeabS8XLnpFoPNP8(kBqGWA_\,,FdL#)s9Cu:@sfIQ8qZmV&eIjAh2>JE>.Q#>7L_^SLoQ8na8_%*0"pXYa92 +%CH1HNAPTM.qQ34nbfJq3_=7oNCO^)ofWFQ6qM!c/YAE+ITc[g$er9!!'MH;"?Z!p;`tu<"VIlI:TQ8Yc7!CW,)8S^C6bdM.ikRD# +%jcoI8]@G#bR-=3ZPlW;=K`4[BC^d,Q>.^dnW`=/gbh`LW!EWaeJ:p_CF$,Os8C.]G%!,G(+NoC7:7-mD"tAR5+e>JfFNUp:a:Q!<>R6Q!gmVQ9 +%;qaTEUbK)W8:"ja=og8C%lJt70^RWLgKYG +%3>t)=m#]g;qJZET"^/79g#;Ga1A/[G4?Tc?fc<\>LSrg:/oq99;_eEk`Y%`K\S9kEimBg(ZlB\hPFOdNha:JR/AmJ-&#sbV<'4-S +%UmdB2d(-UfG3_tIV`aSMa2Tft4^6IlkEl)rR"K><8uMfTG-lKPa!L8->/;=i@L+"b^BCLpj7e0pi>jRT_gJ +%BKIq"aNIi2E+,1D_!4o[V*3:qQBG\4"3dlKL?US!j&6o9`'Sl4^W^'BX1E!-O(e]9$oXCeZ0.UD!D7Di>IL1*XIl$HT'7h8Gc<;jhR#Jao_SF5nLnG]I\d_Z&>&em\pV8/2O[lRXp +%+_4^CnH/bI&UE=)"&:Sual3R%Ke4hu/dA!4P\/ckWQWBAL>_;34qQt=!q)b9%fh8^qYR_j!I.2c6J''Zi;?,=aZY"O]#gVi[."(r +%#D`fYn,Y!n.Ae.OJEja)irK8_;p`&'iWh.KA@rsKJGf\?OIBus&HpJP9-#2^YbU_?/uS079tEXV0q87V.Bdo*;=.g6U'TEDFU01) +%"J7BdrV+Jd1gm9(.J?](KtLf:mk7j:N`tXSlb&KfXH"eLPE(S<*ElmVK]=b2ZeFH>[PEW=kf&()m%pGcEmlWmh`D"%UG?J:fF?Y!j3(5Zj#lsAK8fEK"%U@Vlp5j6\*/Gr19Q@cMS2EY1O!,.0I%hmRqj#id'?Y8g46Ua`f;/-3di,$(Z6bN(^NkdW(0u(kU@Sm.X +%PLh>kKJ@7<%:#\u0bZq/#Ps.k_9s=Cb+)p:mFDRib;oa3+"B&a@=Weh('/]Z@WDY;]E]Ig0UsifUC/;gUD=`[U,=0od'm9>h#edE7tg:N[V?P;O_Vf/5@EBR$BeS/^+m[EF;*Bgqo2NrAc69#.%KWCFte=,RiB[3Gc_QSd?"Es0Pq +%00gdZpSSGW.&R#=MCA#\C'+Tc?(GF8Fg&3878F;UO'5gCoU=!3cSWeNVEt>1__Y7W=-f^6W-W?G':FDr6V`-FkQmc@PCMVq.mh):DruTVDcW("Ag( +%Wr/PnnJ]B7>Y-B((SVSo4BCSYH`Ak^,;4q"+"F<uTu%CE1eV +%YN(;BZ&_;Zh"oTeeElWT1QG +%@JW&b[leQfkVl +%lA4kd@DB$mVP +%-19^GTJY^f'EgpCf=](<09!;1%bDIsNl4Bsen/*Y\:\P64VKC(,*CRj`&m`4P9"d^0\Wh8='4LRRZJV1^g/1:CCe]c,AHG!ltH^D +%SiR&pnE>`Mc61aO>0S+=%5khOYG8d&6W>9T<[g,gount@SVZA)d?(e)?-cQp#'4WX%2,siX^eJaI:-71dFXHT\E(1&XfK-/K3;\f +%9e#F*ekp+Y4X@%GPtR*F2qe)p%OY"#CG&`R_9DS:1oJ]pXcpM]N:@2EtIP<-P?.TUA"O5cBF##/@kP +%;e)uUFeC@C(C6_ddg77r\Pit7gab.)Zp/Fr;>6D4C4C*$kG!+4rNP2@S9G8(:2QA2g<'Y"1kHL/4a:/Keg7CBG$=Up103Fg/TSF" +%)qMQ"jD\dZg_Mban'm0lV6-2E[e45[7U-JVj]_V!mhUPY&,A_nRSSA/f'ChJ:,Q!,3])e?kfami!=>l+!MUg;Njd-h;Phsu.WWC^;smW&1\Zb8o%]ir6DOEn[EJKe>=JG_oqoX>PaN)+ +%KLIu1+dlo\XGIgO%."D'f0\Zt#`9C02ofL&_D=:8!FG/H%6h=$%EIfM):I1[2o;9eV:nApQ<)2CE=_m5i4P,p"gEPNG&kJ[,+:I7 +%/NOh18D1+bf%^`g$1E.A@]*8&l!=VQV%Yc&7Ai%oUK>r!OT)m%;R4&=,PQD#ffW;rp2RCQhd6mo>U=8-Q%+4B?s<_.V'ME'h>,p&-AR+i([7;&Jj`4.`'Ln1Ek*f`_*SqA@5M"Yu4d5cM#+QJrkE/4VJ`HjLG9=XY]oj$!Ei8 +%A6ONG.3$)),RXa\faTN(GQI:KW2grr5Qm8^N!BUhlr=i"nZ@<3g7B +%_-ljM(9WX\%:IGCTUqES!&u2+qNXWSP7j62%LU&=+Ms7'Q_8Q"Gu[K!YiK2[ZmH]ML0J^Fl\d^OGX,+d&f5-fP1&FBW.$@9"Hg#1 +%5^sbtPr6@DVAc7o.%9L\.Om3CPV2VO#_>l&E]t5_6H\W2PXJj#$i;]+=".a2W1j!l[cqZ95-p0:34-G8LD?_gTULoKu=sCC]k($`[MdSpMSCeEAp.\H7@NZWp#iD9;8t;? +%_Ca,PKA?SU%h*kDI%]UXSD\gI8%4qe[DG$Wf:Moc=gY#j=mQmVQ6mk'=lEXeX;(b[#hbi.#F[sT6q.jB@L,f"1nk-jhAXoXa':!F +%j>@H0WQ`s%3*t+g0guBndqH/5.<@Q+ECX-`KXK +%"iF;M<)-:n!/:U<0+O)1V-?56@0e?W9-.'.kEF4"*6>(6TKNkKUoB$.-<;LU'#s9=kE^T@(iI]I[:V'pW8*(Gki9-AG:p?3Y1sb9u>:mIb)M(p3#(G"%Etl>d@$@fVFh7SpFS@ +%QW8/=CL,cqq+qnpK1[X.tkS.5.u3lVL_>3(=Zm//R;H@"L!N]+EC53l-a`+rD7`:HIRB)AOR:KG?gEMo2'u18JNc$;#s[S[hPhX]J@`cjJ/TAo!lX +%XNhNW,[P/ERZVP$N[JWYOS:629pa;Wd`]''f-1WlP8`YQ126j1.%6*+,>;FrVC3hm',4iXp#@Z:NL,QVCJk.g.j2>&=n4H.R6+#O +%2X8qK%LqD42@?$N!^PqiRmb@*"NISKE,:S-JEf]>&iRt6B(q-pBH^lsaoZ"GJuF?89clo.F+,!e"(9F"%";G=V',,Y8_P9?VT)Vh +%OJu5]4@.F)>K'oZnbE<>7DMe@1g_el&2LAUJ21+o+8P*8Ge.%[-na.c/16+L75*-b;4]P<1/aV[:Eo]r4&W7q*[jG?L9.s'Kh]-i +%ip[gU(PLS?>6ngs"Oa72.@ebCK*arueaTf2k9-5!CN#VS6A8Df7l..f_^YrAV'/cG89!>E.J"-eL/YULgr>:-4Mu.C;q9Y/A;b0Q +%XjYp(eXMG!:TI,XFB)eqH=Jp3SV:2#FVuI)=S4?K#FFknJ0-fPoD4?mX>sZ]r\=fO[m+DF"Zb4cUb8D_UN/j7;!E7rfZ)F +%]L:hs)$2ZE]?ufUX.!'b:"0^;\P+#9nXgJ*/Z>K+DR3d2B3@?k"Le1S%@j1gOUQo!`JjSn3,.M_AI1XsGK'`bk19]XTlHlCKImHI +%M]fhHLE.-$2hc_<"E5a^-JEZ/!*WTHi#74[+Q>#;[a4_QYYHjOJ'>7]FGAPS(-VDPrIi/"->.:PL$&XYl.&o&/OaH_A9JiG0cE?M +%-;/\S1oOc9cqj"9A4b\s1eY[60FEt*;+R(U$k_(u3!=F'3SVj#PYdJiF!MQ25[E;4"Z7G.)oC4;`Xo3gPeb(["G8;TddL\k]Qpq/ +%"p*oTY]GCC_.+lA#h?cf5t/0)1sMF(5O'KS)0G(34hh5,)Hr[)V21Us?-YDeC!t-?+JWRac"``2H)UUhB:#moBcqG5,!?!.$OF.O +%YRDiHG'Qn=i5!c9.GJEb"HbT!@2hOWn[WsQ,!u@_*2YI_;@G5m]hPTBCo[,Fa[B_":L/?DD-@4cOE3Lu`,+p\7D1h)G;_TQd6'g+*;'^&0%/!$F`OlLU[A/-c +%o\S#7UMCj7jeNe:!ps' +%;k!@nhHUU?[SE.)')/Lb]AtGj3IugKBA*jGd5bB"Q2c'\CC15"4eU3brUnA;oEqUGOIKb19^HoL6*ogX%Z7Otsa&b<1GOE]tWpYZRc'c0r.Z#6dE>`)="en"ZVMM(gK_/E?=< +%gQSm&19&_(+j6SVPiH0KONksX$$fDrr,k`"08RG3#U7bghcr%5!r8FnJk]3EJiRjO1b@,)2hGg7[#Xk'M+3Gfh/]3U".XE`l@V?KGYF'K.Op/bT4NL4=;9+\I>_Q7RW>2 +%%_=A/F;lWr_9rpS%"UXaT?.KATM0g!is`D$RCBX\n\.2^lE*q0V*]91>;1F/O"7!O`==e6S/1h=Jh77q?"-.:Lp0Ha92i5(>%G'H +%p&"nQb^c-@RXl/>=';\3Ha?O"rY:S@O,IOksCS:?a2dK1P*ARH>mCr7qX%g/$6\0bNhVu`4>,p);#U77[U=s:'(b+ +%@UQ7eb0=bkAV_j6ZRs7>YlGJACse?W.Xmk[)GmC'qlQ(q6-^tnP+j]Qr5:uh;E*=N]S#$^g<<&cltWr@/NS^H?9i2mj!J@^m6<Mo6"IcXDtaif&XTQWUVH,QG=a_UZI3*kaHWs\7&"M +%R5&[E>TTcQ.fUWk$fQ*\R'81M`!%rj/[d]bYTahd&rA>$!:e!mn[lV>!,A([7fYV#j&4McN#mU,PB?EI>oT\\17Dre'`F,T;$;*V +%0N'f8:$1HL^LX*Y3^^DaI%t3]gKI]FS!Ba.t_*j^S]I]gPRW)',eWaU"@iU[asppEmh=@$R,dJj55b +%9JFGIn&hjVJJ$7[_47/9I[g4f8at:=b&b*ZX<;S0/l-0PpDO +%q;^sejPl"(drMR*`hNb^;=7kqT/Gj:-6H6q[NdHl`"^O[)uWr7>U#PYV9^[(h$);c%*tSYG\+2B3*o\Z<=u>u^[0r`0o<[j^miN, +%"I1e=ou+YMQ'>25pg`9DhR[*G>f^doBg7:*q'07p%1"X.A/Kcju,JoUq:FZYP+Xo6bAaT\j1[cV:J`/3@UPDC3>+X'.MXr6%.[d84RBHN$p'VCu"F +%'P40T^f]ph)GYH=3unp6=A5qi:6:BY4:TjT%B!?MXTQ#^Jdp?$-6S-R0JPcNKRb]/sUuR +%;#j+YS)2p58&U-f!^[ErI1Q\4cR.T/9PAZF$:6/3T*H+n@+A2a+,BpXR<`rl[jr"f8c:OK?pP71bJ=+8b+[bb1]:iqcuYR"!3U`P +%IWA?DUkT<%.YuI[.$l;&nD*(>RX&UD$5Vp9Jh7a?-VO_A^R5[5C-W[NoAStG8@O*Z.?KKG[YFnY8F8UOI2#ZQDOqOK$==M0AY.Bk +%%*)$thR.V3,'Qi$j3q>E6oE6BVXT1!s[kYC^")/P3aR_fXE73/0&h^%7MFI=KYs,iU,QEu9^Z@[4bBp1%">7&JYP4\QW:_GgouCE-F#&1Dt5Vb<9fhO4bDbY#tTr2L1i0bmTgR%F)#c:`jA"pTg!/K;\gdOF^m-LEZbRS%^9\#s]Ko*.e_/EF4&P,N+[=Y$@YbW.CVaYru_[U2/*In.c+Suh#;oQ&b +%J;qs%2='kpAT?U"=-LBFAKZ5#;c/&=7$G3(]7QM'1(gk+T2lFO=9m8&&kif;UfS!SRE(1?oh0Y'q,?6bbcBmgU;q!5*+:Pkc*]EIR/'OK/L+t%e0-c7*`J"SuBRiZ6dAQ'O6UY$gC]jKV1maPbGdL7Qa?Csf +%Mlp^V(=@50R*Qo!Bi^0J:a6ag=X)WO4S]>`%9eFpCtcL##)`]"_:^fUPLE+"$a^bVMPe8+b6f(B/V)A9]!b.#&HJA5[Z&>04>@C; +%P8gTF>%7Fh(Iic_pJY&'C=\kD'l8LVF]+sU;AjFJ\\o@a+DV'Huc#l9AsMcqfuT'@^unlHM"4qb\o#I+[ra36tU\]=gk@t2+R]XJZ3]? +%0"nEBbQtdJ#hstlPBeAg9rLKL9GV,WoE+Ar1dKJMat/(L?A@8!CUKZE9W'pT?3*3ak9lZ_&$;t4_arD!UhQ9RZC(qj'(_!"V9YOH +%X6SZ>aq/e$3)ntO0>i4VqFlY5$td4B-dK%]%r]J^1pB<I#dd<8Z#e6$eq2+J1Q"Bp54!QFMbU5; +%&6tW^o70)m-jf;^>8@r!iC#"tTu'hYK.-(]2AJlW$lI![lV8D>6ablEc"^XH +%c?^R,*Ol06[GOKe!iXXIH;jenah2[;5YW@*e4&&LoRE;,Qln>^hVbVI12H%MRiOf2Kl?@Zl4S]+6Z#-jJhuHE$-E;n$*G?Mg'<". +%Us`+l@BK'Fj_"b\'FT@A6,d-A/#g8f.Eo]281c$da8:O:7BO(P2[b9&7HMa^/MQat6PoP&TZ0Np_8@>0A]P!RPC +%;bJcDfCQ=,jBQgm3]$QFfVShJ1Qd!Fjbn`&"ueMJZ7<_tkXBT43oUg+7?Q5Jl6f;#VX[I?!%[^db&k#O;<+XE?QlUfmP%42os/$r +%9KhJI[aLm8;.>KX?\2pdm^pRJ`W^.O*tLk'iVDCsQoH58'`rtkR3qu&jde]5[;%JG53f+j6r[l]/,^0pRN5p24^2@ +%\o@YDrPgQH8HZ'q.oGWt7H'?W'ZQ[J'.g>>mi2t7:7l-5T/6Y<6_C,BW%_73]6G">%9a/\#E`BqP,?_U11IY&:5\%%6r4cA"=gm[ +%Qoli?O]"f=[:V@5oZD-W"%2QH^7c+Y.`Zh6dg$ +%TDa@%nmhh"r:$%[^O,k;p$WDU4!&=44o=3gDr83SMMq56BC5I-#St?j^^(>>aK%e5N'@VI'=nrPS.d4Q-W67+(ioFR%W-q.5hB3P-,<5no(]j/gLW(p0aR-;r')#"D>>li0sTupGXLuI:"`&X"#eA%A:cLmjMdVq[CR5q*4),]V5_,rMSOc-Qn@#6'N4 +%XlE-3(RqpF$/aiUA3EelLEn!sV-'=O/pcOE6.L5j1f.RKKn;Er6X`$n'tsiLpZ:h*Q*UMA#ApkNg($:9;E\c:&YE;G/s_]T7q#W) +%M\][%52*g%IL.]U^Q$oXR(*/qR6&bgQ8R.>!([o.:ROZkHSPkLR>c&N<.oN#QZ4kH%S?G#-Vn%W,&C]?"K,tB"%Y3O"dnUX%4(-M +%ZuL9DA6kd$Q\cKp\H(Roq&XQ9'5%;/?(7/eTF-LVgo=H;LM@o<2=r"(SI4E<3lE6#F:UdZpf5so&Lo;OKfYMC^#0kA`&,!R'0-)H +%$c0?FGt(>1(="nqJrt@#nhGda]Q"2^J7`'@nq:\sA[[tmS4DP>%"jW>81gXH_5`)uS3&#&!&g&e60KGqRAPbi(:H]b7gOa^=BikclmWdPH]?%!%!_JWiI#*]cN;9/,Tike`'EYc&[7)]mg]9BQ$Bp_hA***/-SG`=6\%XNuC +%15L@sfQA6i7DI8r4h"Fg2WLd)#9^ch+g*YuTA#*Za;&q7$mZ](/*^EOJ=**.?1V>J!gSNC_I:c6+K'NtTVY9%N2_\V\b@NE8A2%/ +%1*X_05ctq`nB'<#A]5&>^3n;`Mk2nh8I05X!GV.6%,j9lV2t<"U)-:Q-rs?B8RXE=`UJsE?iXn#@90[6:K1**"m1C]'DH3 +%,W0t6JOp-1!T9QQb!A]0Y>uL:A(Q!(&nb6AcOC0f&$Xt5hFMT`R"mADOuZ4?OjB4<_d@[c"=W!-P;5I&"rlBm`rA;l@b#k'A0+F* +%U3]4,kF`!,jM'MdE'C@JC_o?^`!uk/BNa_j3k5j6_2Tf;G1gE9MEk"s4AqhOXEB?n1ifjW?HbZbBnDqjT[N=1=T@rp6n!':0?<(IF23'G@D&[2-?D +%g0KU`phQ-F@A5!G$]fZRr@bE%<=B4>",`;f3JLLR$E8kW>6ePajY8^Zf7tS=.]leS"K`SO/Xa(>T>lDuQ#Got&UF"[ic:*GTEB(S +%!nofq,b&Et9FU2r69%$FU3bic#j@I/`0B7q$%Bo_P9_b)7'"(5[7"Ph>+"q?Ci__$)[a0R4O^qK/Yir?5rg^k8k_>aQt!O0gd51 +%4AArf[=7!7Ka?sQF)]Sf*_K(^;([QYV%W1X2NI+O;LLt+@3S[$$!+?K@gc-NB"+9jo4,-YQI+2jD$-k::$e&a-lY\2?3Q"HVn\\h +%*oI>fo2WW_,XCs]RhuI)%LN^n6A1Vq5fU_ni9-#h1rf>0RG_R7"+$faE,G-OQH59%\"35G4=uOsTA%pPIYZlu6)-pVKLod/V%XpD +%jV.sUR8/53;F+lm'sRdrc5h3l'td@VXf"ab)^279`tUDrdY$RYZN;eG3Wl9)%!*_nD)`9Rf&\X18bFZp+,/3V2LKB!]II`ZLGghm +%(r;#b\=R5Na(43i'QKRr]ISqZ9.aZr2JI"!aj`CY!B;P?TM%M5d'?iQ$cS(e3Mj;RoDKVX7#nO]%/+KMQ'T4--gMcqt(2V:HO +%?"Kb*2)nY,+>(^]CtUBOU^J@&`XXL.%M4W?iDnOAB[OfMQ"F=:Go9?VE:Yd*k+^!S#W+Yo_!iugi9gW^m;/Fn-p_^/RmsnG9WTAD +%k:-1C;)mXC[T-5kS<8W'C.<98@[61]Ln4_c9:!(SD[T6FY1.!5$*aC`Vpei:F'puddX>c$,!)J&)3R8'g![`KJOY/kCsaPGpFVhA +%!U&iM9@-DN+1&4-cF)l8/e"\M)Z,.tXAOM9q(1Q:)gH,&^I9m>!'n)?L8#`jkj\8J-Mo+fXM-Km,R'nY\T=F88tY[U +%T*V2a(+*]M:/DcAe<7m$VJO&EBW7Gp"eIT*/)fo_DFIIsp20&+7+Kg$JTo[RY"f!6*OR8?Z3L[092F+B6igG&EnRF3O#Wp/JGi:Jd0l6m-4R$gM;U1VHS_47o`9I/$"r@3J! +%Vkc`q<7BaEbdSkjiSW]g9mqeD\&uXrC'OGlS'hIQle?:V)lsH%9&nC@9"a6@1\:4HiOr^TcE>A@VrH*U*qi]>gB;il,k/mm6a2Xu +%h$>pU`U6_@jCD_-N[''i]Js=NCP10u%*"QPoG.WXqV#_EKVMJ&J8G#P\8;;q'ElKU!1CdM6<1mgbV0(OKr*fuZR6rO;ZpiU1JCl< +%5Q:%li3Tc:g1h)S'p[RS]aT?R.13SkLiUe)k8\;m[i/+//1XR0J>+qY7m?nRap(Q:'Vui'8-]%*)%@EsE1F&B5['67Qf05=^8#,X27HN:n]Td'`3eQIN(bB2iZe-@h +%-Bl[Oc5b0)O^jRA@6Cg'WhZWD!GgKRmE??2(X?j*_6f:1P"LaZppm*s:=pP!703Un&GNFN%Y`MN+Pj/CKN`db#GY?65cDsfTR]2+ +%Lr*?p?L'sZCJ>!iO%+n*I#WAMoWVahIN?[;3M$=jLti]Dq"oDD`soo$J&Eib,fl'>lK6k +%PhBe=]UQ5V6l!+NXM;WA4NQ_YMKMXkgAHRp!M/JCTDLp'K"*rZ^bF,NS?=s2q_@OK.l,#DZ$U`=)iHV\8n^cICTiD&7N`-O2:Z#6 +%O\me='266sb8,MOBMIj:1VXB2XcQSbcX9%(;rrTrg`ZBs-/^hj\Ju9Nb2SW'5g/56A4_.d-s7oJQSiub/C&S#!`WaCo6m.&"L]D# +%A98uo1g?N]/^BUs:anD@KC7M9#Wfh,F41K'j +%?,'q2o95hXP]:e.cZN08X/1%*>Gu`@+[jXU1^dPXI)7@=8[?ipVP&:i, +%r12u=5"8MlHqBN,,@A^L^qr]G9e6X;W)iJ#(j4Z:WnS*5+JjC5_g"sED7C%%h*LqccI14b&&aJs.I0W,i@'`J`(^CP5pjoX9TW64 +%J,o\/6(VubG(T?6OX>A*:A;(?Kbl8ik`pcA;sg#nTguPD_NRo]54;,ADLXeReFsBJiq6G5bFhc02KV+d:)ImPBsHka772,DaI4SOrY]9ZB+6YBTK! +%Z-rUKo#;tc/-8Jd*c#o,h'FpAu77;$rPhA=_V&p+$ +%l_qgS+SQa/X>^5!.u.T]'kc8UUoOq+18\mhs5*fe:@Gk;r\<`m!]Z080$<'hqJk#*)1RSh\p;rKr6mOJ-U@_;=a=/6O3q]3F0<@" +%UG_+h'a9!+G5rZf?ZuWF2+V.s77VH:Z$',QhGq[*cPjQ3#`XA&]/T%XFhkM)h@n`e&6b\u.+Nh9D&0o)0aZBm) +%EBC\C1G1PC)1uQ1%Kq5=E5kU%`X?D6'P%T90l!KR4$bXAhu'$(iXhLj.&2E)gnU'rF!>QQb.&S6h/.[o@GIEY%"p>:mWa(2JhaoGnqAVaD$ZkD-5M6QdDRCZYdh7(iPd;oHK1D4=57'#'sqH:Pc5sX'cgfCU+Va@(#tWA +%]@Mm+gp.\5Dbr0^'/,kq2;U;H`Q4r%`q?2CULq9"\fo%kHtNH6N8eMcFs2`o>f@(_,&q[rg%-T1Ii"^o39kPJ`%=']C,dsIAek*1 +%9jF4n%l?"*>#`P#9YCCQK8JnnH8*.QT=(##L<[_P/u#k[`5ofJ`u8(>juSBm'#Sq4c+fpiE-cid87IN3bbQ(IN.5^H)':%WcA%iR +%",W/U6NM?!Lg+H[n=gN4`fJ>'@f24T+#IGc.ZgW70Of9?"M1$j%#H-Z3PcmD_kr9ZIqB4e6obC.6k%`p@NPUp-EFN'RmTm>`TL8* +%L:B:s&/8S]K/%IT&7U_S?O5ZVe9;I[5n2r-r<4W3k=l9\0`FhJh"9R<"P!nTE)sV+d)28:p_u>#g]H0aiPM["hUpdR +%m;'G8_oUqNeUt+R)b=h:RWM1C+S^((LQMqc#=AnC#oA?t*/4ZL&Cqd[r-mBgisG2N3@-1Ce3qOm;p8 +%%0M)=`ZYfO(;2]F%u7oX15s<_`N)9BL7klO4eetM.b>"D@MknK9H5!+N;SJK^`j1?+e$$DRY;4eZ@!/fj4H$Lbae7,]g(:`*2/3:>o8qj"d4_Mb8b +%Fjl#[,Ci,p0]@f1C%4`S+ENI9JgLn3$?74T'7M?W.pk,AI';&/"ASZPb]@2m)`Zf3Q,Z-OT4&!?Zb="b_JmE^G6%9H^ANm8%/_A! +%:.>P>hAZrb)^S/eBDE_X@kN8Z"poo*1_DYUO>'-5#$*@<0`/c6GsK4WB\l8j"A'G'ClF_t86A-`F?%-u_1$qI7e!;!Rj*fIF[ZSX +%&7MMbSlUFdN7$i,q*kX"`p"nk2*i(X#$+Vjq%1D>V;2",gb^aQ+3`/P'n9-uJA8!C/=bc;%TM07n6dNV"`^gt[4,e]7L-hPl`+;= +%4,Y]$B&2BQLaNei\[]Ia$u@Us/T[d`%H^q>hrH)ELJ/&Y9e_3n?,5A8aC+p-gOd(p_(\WmA!.t4\/7DS_9`;FG12&:$6U#7Yi)h2 +%UbsY>&7S^iT5qte8P>.s1#d0^@KLL!;ANN-@!MR)$&0$H6K/#?$')bR8FSO+&WD1U&(AaKV7uo`is6kPD+<4u&Zg^8UMiP>W\-*^ +%Lg]EoKI2$XJl?ZdGnYe7R4,\bHuV&uWVDXI,7-UhWOF+s00h596H'iSN;m;.FT[6k+3\t8KOB@^b<1Gc?6S;lRh3en9'.TFRTQ.60FU9%1Lb`%Je6-R6uq*P +%#Y**3q(WP7EO25tb97#S'js)j9aG@BNWI6E";=Cco)(`UZekamU_b3l5Ck;W9aJ`f.;]lS?lkN*hMVq=KbgGO5mV)_KC"'1&s6et +%f5u^Oh9aG@J:>_bq8C/L",4tno7LCT:'/8&N)*#QL752flO1[Lsl'!m./.25b;CuD`!>m)'j,nUqP)&QM5<55rYLdnDlS?]l9#lh?4^bB0LH:*6r +%NZNOZ!lH."UQN@7S#AoDQ+>Bu\5Q(S5q$?dr"qVX,;M77f*q43tVK'D-KJD_!)DM/nrF,fF6p6K+ +%^c93+p`2rA`1qcFY6tK'-kJp`PCOC;GC"o'':9kq]6ofm3OFpN*@,%Lql5uPr!V:3N;"+qQr3dT^6h:hdsu[LTR^`16MR4(PlkcH +%UO\W*R:E"BQ2XqX7KMPVWHJX`0^Fd%PoS%8;4icMj^J7sW@VbZm'1%(,0h)#^HX_(^=S*/f$.BJIj.9 +%Qj*\/Jd"gM44q5L^m&n<&7cV3>Jac5#T,7M'FH*<)R(KYH#=NS2oF\l1uOUh0"GZ2YVNHq1uPJ='b*-bQo*Mk",<()8'ld#5bp)I +%^bi8id$k5u!M-#r_gp:O@ATUtZSsn!Z&8hq.r1%F#b8t^/TV#FBj_hV)[IuFng"D@o0=kN1_:K.deYU>0UlE7)%]&@Q&F]<5[\c# +%jU;"k!io'%>[7G_dCY2JHOtb%o;6d,+p(^AD)+)-^o0VWMOk4JH@cE]l@C=2"+alTX;_Tm0J&g3SnMbD:X8PSJ^\=7@3dN;`a0g>"@b*GjeFaI(tU4//:>gYj-;AnuIPEb*2K'Ed`]<3BC$a6F<@Hdc@HX%;#oL\&aPNn5Lk?9E(_YnT;h3Q7n8n1&!o.'Gl##o;L5?9=gtaJ?#f$Fa +%4UOG!p4Od2Qos7'?]oM4%3(cB\%_+Anb4"%]5;0[:/B(7o`aKD2+qlYmq<&*mu<21/-5a0^Ydi(D):n[F8ckmRef)fJ]$?kh`r4f +%o63A:o)e_L+86Fq'7[9N_7bg&9M8ZCpH'J1`u"/f\0k2$I[Qs0oS^(`^_o["I)CETIP#WIIY.eCW*b4i5GQ+"qLoC9UfigXiLKiC6j-MLjgi(,L[jr&H?[R?eFnYD$7WaE1'7PSh'nBY55XKWOpqAma>4BQ/dT5q9qdLX&,7XANCl'Uo(Yfg7 +%Z8+>l(Wf[Q_F=/%PDlX0lCDEpq,;6\OY!B<``V-WFlc'bAWL(sj9k2,[6t@tD`1S4,jRW +%GV;JaXQ_LP(H>lg1;:lDMdb\P_7`sXZF,HCf5Uf11XHC3OJqD]8Z58]EL\*k*_?hf`f/nm3rIsRV64;_)T_7l/*c7`GBm:?@JDF-\!NuQk)n937'LEh@ +%SQg+NiX=@RYG,i<0+8i^!nU'I9>BAo?M\4qH/j4mUqhKp]\]9NP@(cUo!d]Q1.VXnd`(OK("(7`odXu`ncn_A*_27jS(Pnt$^ft72S,CB5Q>0A&.!52bg#i:UZGMatmS +%dY7$VSI1[X60q%B'f"@@!ab;rEq+H!V_Tlp*]KTlN"1F)ARqg@:#s.`15aN14'P72a/r\Nf1SJ0$0/'#Lt:9=Y*TA[/2_C[r4P42 +%=t]u/CrC0o03=I)FXX>=A,qN]a;:oo&K\CbB?:jd=]fPGWg=GG\_a,g<)O>*CJaJeK'Mu%D`=MS93??Wo_AHR3\Xe,.HnUf?rcg\gA_HY;H/Z.p^B!UVu#ii$>QFp>4=G@;#>1,.- +%Et`qhCV\ish_,Noj=_q5%Lt.=.-7`h]KjM(BQI$q;(G7gh%8GoZr&N%+iM3#qa0ehLm:4JGTl$[,3NuT$AjfUHD_1dE*Kf,610D[:L*r)R^n$]cr*cjY5<=f2QDtYfBplkingH>?9Go(*k%.;jfAE_h]cSKe^q9b#)a13+CNbjI5u0dsZWn`("_MfaVYP)*PYn3'a\,&64Z6[!/i,MLSL7-nWj)m[X(3df]jZHK]A#VcNo +%(Xp.`NF_CQBM7l-m%.^TYmUYr5Jbu`\H5)<(Ln6k:V7UgQGIo\cZV*fSM"5-A!_W_4+EX&bCh9UV-rZhjPQMIfO(&O]A1Kj7dM>I +%b6!GAllsjsFW4R%@J3JDmN)\[,!=0#>mqu4W.*<>?0oT_c3;g2&Z=E)U30PqE

0k'41+aN?K.&(E:QY?YV$rA +%8dYX$b=**9h>u2=YgE''LQ9Q6+j3I%e`Ed(i-]Tgknt.gp=#VHWjk7Fe5mLiX*,/e"g4%]V,i'\?\k?*7$b4,Bn0$-#k>9#$Ea@k'9WW4H6?inai>(G@d@'nWHdHtTE;gcqnna\s-DA'GXSQ)N#rSLlubeWjpC`%ff0;Dn2jYj9?rb%>W;W8U'Enl9^qjW+ +%RJWJ/W=.et_]]gp(Mkm>chD&@1.\])<#;MM^*sjt(KS!E'iYtp-@-.&eO>d[+fGdK9,\dNY6!1-JPKN:F_Q@Kr.=3sNC6*bTt5h% +%II:f7Fh&S%IbmoWeEkil<#6js>a>Ll=2!Y1K76+/R6tK+NM3pGmjbet:gHojaBj*IF^`e'RAl[s#HDo&F_O*7k$mVm8e>5]Fh&B. +%Jsj24E`,hd_ph+I;A]s$Fn(:0&IYK(2I&r3@l71$LM)\n@(D*ql9'!^/i'tZe+RBV9;"Q8m_@XIh(T%02\DG^ab55Vqo-3u\kL2> +%^-."XXL1Oc4Fk#eWO_-,;%1majO*4]7Rdj1RK2V.0rD]]I0X-VWb9[X`VkV#621W_'arEIVb>B=PNSppFpS@[!-K/!RMSbdeA`k/ +%#;l(L#VlrR?%-#'Cqj25<&kNPl/M/lP[a-(@A%+PnT82NOs#"\1q;!dH+Ggp3`(6Q3a(]O'6T`:V*HPe]$T6;<:D7"id#acoLUb` +%'4Iii/:kBsT+T9;#3o+2ON"c^2icFu'$UXGiWWkNYa_R!1Ki%nW(RMibXUmG6;cTneE%;.1guZQ)0C?Zh[QA6/<#J"Oh,X-R?]X- +%QRK+)h,NlHP,Y$kVX??[VCq$]8kjr;b8W@_2cLT*]j6BX_SGBOL?`dml?k4_0$ScA!S%pED&BT0_J7XeGXHVQ"al9@lC(qh7ZS#/ +%-2BiiK/Zbr&Rq&J#?7$YU=@qcQHN'SfD^NiEn-A6ECCDOJ2D/]7FXJ$duD_m6u3Y1FFS>Trru,HcRl*tH+\+-Wle,,V@,nd/%'ol +%,';W+(J>Q1.+TU^V;!:@h^%#,#/C\rr>5cb[jL*$jaj@@J98%)8,&m=UPfjqJ+#1d\(hO#b?/\;/rCrP)e"CP)Qehk,(_FVUFk"8 +%TF5a"0EpV%,.rXKj$;&p%1L4uL!PHmP,TsX/n0CXh!A8[&tie!6K^[kNp;cmkMkra'SFN=1]O2:i[2Z&q$[:hEc%TbcjDYR;ASM&QA8^XJao:Ga_V<.6C`&M^Y'j+!Zs6uDlSH:`\YVj,YZ\LJ^,Nnb>R^`: +%C8l)K0!#W%"t6sbUHq)6gk)b9.:8ItZDSs;\W!ksYmIss!H:M-Y4. +%(b(Y(*#C[g,to&?I8"[+UN)b\>!^/FmTp`f&;-+b@ +%ghr.h"i+]QMm>8@Fr/1;Ip6%&SSn:@21I18\%o)CDDXk=rX,7=>=ll>:Z< +%5sTAIG-Tkp'6tu1@q3S=ns9-.;)[q[$l"([#2\>t5Tb=BDIIonhmcn;18eYMUtlgK?IB:p%9Q?/D@9+hF.dF@B?$4M8[l2WO(;#h +%h%mYX!l[uk:rkRD2s(nK:TT7K;+\lu>lo&)qC84bhi(c?530-a\"\td9t3XW[#^\pS%C.I")j+46"C;5/cL4a]&C(8R@'lm[Ooj$ +%C2Z;gI(8b%^W_p2FjfkYfaCg1'o3.iD;jKUs7$E"CHAZ0"4jVJTmIl9X-537Ai>,2+r+Kf7=:H!3)P +%(,&*N2pN1W'-*4/fg61+oL[DG0lccIh_87g-QptGQ7\hqb*lc`JeT>gDiu\_5OEu;&HgD+&?j!3XsJR+Cd0Qj#TfIECGG11fL!/S +%b88&3+cTA1_A4q#3<38o>uUd_f-9@jk/#[/]k+qadq_2I5ul=r$XR&ukQJLUHi=Ls/aK)"6G:LKd":np\[>OiOAm(L>1>r'l'kia +%eplN&=sWJV3FE\'\bMj:ps#moUk8#S0P_9"FH:?s>oo:8b6L2W>/]rb!B7D%#'Br#$0`i+poj.:@o+1PmVZ\ij9neE"g^+SeVpH\f(3h*^*<^fj]q6f/Nh>1+AT\oG+pT\rq>JAV!o_UifmJ.S66Q`YYt#.bT[*[(4#&u;HZISB(mJ*LtNY;9bV-:dlbI1 +%NN`G7(CJ4^L?[cR\R;8r;r(*qK_&_:R7eu[FL2`eBVYoY;sgi"$/9l=uf[5d[X +%a.d:BcJ5D6a>a>]p=kT&jfe)#r?l@H5E6Z*Y$D`2@*&9T`YJiHk,ucn&,,(%?:u7.ou5(,JU8\1)ja[JN$jWj;CRBp?lWO_X8(*WpL%jo1&QBGRdP4D+alXEGtRgE-- +%\7etm<^d:AmbSAs*R<>?(e\UK!oo+'JG_+Vs(HLc(ZVV6kZ(bm[MgENJVZpX"5KP*!5'o0UH3A4^h(eut]$ke,W?c?U +%YX&WG^R6\.47p"I(.n\u2UiUh0=7;ncBaM!_/hH*&E=7a'u:I1Q$'TtI-aUN=S'\iX6sT;0j;MIq<^q,=L=lP_JgF,,LS:@S!?&4 +%"[Wr3_,LD-g,K:aa=L$*U\?E`(#\'D.!Q;rktfF1a'7]CV%c>Xm!t)!9r6.'QFb_ug\o([&WI\"43WqXcj]Cf/VCgc8IqQsNd55b +%a_>D`W2:PHP-D7=#W`_GNVRQ=*[io<\!27747-8E=BM(!9_OKUb/B;E($n-.miq&,e`S+fYA=<29"qA8rs_1a@P;le_P=$l!A%cMb4<3g:Lra8g#TnQb$2PWWDHp +%G'9?$31rj2<"EU/b_#R`8OV,U%Lmmk!C4j/C.$bPHQ7^,@a7Fq49!f6@'1Z4VH`7X9A,LgW]dm\U)B,EmLFe1'SDR=A)]GjL19eV +%'OINgc0rSV$JDWg9,p?p&/)mM9BT"qBqbOe!(g7]+bpfgiHF+JVrN?d15CT3mRf'VnHT%MKemEVX81sG#F^r"N/+@55% +%_*V56#e(V^2K^%eMEIkbQUjiC2>cZ-mY8@5fOFR_i0p'@)^91Cf==k%`hH*Q_$t6t=0oI#1$[4/G<9NWca.=jG&K0mVkB+jI2>7; +%ilTdd_Dsf\*e^2qKo@qW\gMfu27k\hT)h_h>_k5)>P-M&Ym,(((]1Dp5Ob1O+_.Xdb80j-*u/RQfN5C-[mWlO@I`1>Y)u\5i8%Y?"Tsb/<@Cb)h,K1\2cff+CF4HAK#4L@cY?tbl6$]P#kdi$NIJO6D(>76Yh=h[>>$Q/\ohnt,Z&tFD9:Do-gX8ThL[f)R4"ilA8B%kfe.IiJ)%2VnFd.+!'!',FHr>1Ql-@#%jD\1d +%Bd8@]5+.l!8T_.n#c?^MJs\2,Yr2EuF[W\sF/M!D`7_`opp)c%1+W,^jY%"8 +%.f(*KNY:&6?)qp(qtikNM\.rLCIV_*Wp)H98s8q5EY$Ag3P.m]85'Kqf@'kB]Mb"W*&.8U/6jQI=$)>%d,`59ZReuKe0N+soQ.O$H_t-KjpG%1T[\b5ttr7IfeLk=3^Wm"VV*SL7]kL!B=FEDf,Ur +%Fm=F^),cM7,OhSS+;_A,qQ@U`?;]+6#> +%p4Vg!(T.d\Wh3#ERY*IA*7qtO4s:kmTCc)"8nBCe13Y.J#>.4Klg=h5<=K3(9#7JtD*Q$`N?Tn"@HQnIJ.,O$Jku\!HBbkXj`%S4T"cpqRrSsT,g8ujH43KY^4VUXlUYFJcB/&%OZ66*-72VaXIlP]^X[L0Cm%=ft7=='%I^4cI +%@Ydn\RIo"9hIo$06X;`>Dp"fM%mlTtJSpG,Q\b/:?2-(f*FS*VVp=_2b[&-d9#J@^C;:GK9WcYP6#'[Y4 +%QG'6OD>Lp(:>ZJ7[pKn!'3F)Jk;FOj9b1qTTS%P^^6d_-KZ2)Rg*:[2_TDN4B%3He(]t\.*(j"TYPW +%Hb!7iP4?LcE^cGRg!;#h7j44E_PaV]nOG9*TcF?EF+ljrZj\2HKh^s@(26ojih7>lJ^P6D.M+8p(o)5Q\-#..!4u4:G*OcYZ0T?B]h_ZuM:'EYMk!.C=[k@#;:qkG +%%OYS2O7AOQ%6P^lb_$dbWPW*c9VHTf+jgmIB[==u,Bird%$/gOiN9)AmD@Mn2he%U4K9bS.QJG)a)i+aA[i>jg,oqUnX2P3$p^su +%HNZb66O)3c@t\oD'.`c90%uLk38UYL'JGosaiDp`VJ@75miFje1>=4;@7u&tC$a'h>F!ZX;Fb@SPqX`N#sAi@7/JXMB**^\P`?gk +%12.F/biR4opP>qdai`JBTCLkdG7r5h,lMT&6>\-cho_`/[",b)"9<("W +%C+JhW_Dds1p0;uU`1A`f'A?j_L[I`MfH$M_6!(&=K42Y:$VPiR:#@5t1/H^cG.->67[JfR++CI0rT8G)AsJ)c3O+k=%O6eJ@1/?d +%nfbT5F5li&NI@h+6j%KIE-j>HO\S*faWc"ABoGVF1^*D$?"4H3a'`&rFE3LH4`%Hn-_C8H&\J3!"j8bu6YrIYZt.4'&!l(C.]43> +%]36ip1Rn-s\d26p0NO$pbMjBfB,IUDG`SS85r?k9$rIg%;&EQ"5fng.[@ql?kL4,TqFXuBn<\_/c,K%*!^gJ3G[4;Sk[-95+(q+5 +%LME?t*j#J=S!a`o+V4+4bo@1'/Qok\s&$W82pBD1=4TP$,#i=_de"L&(L0qeZf)J@Sk!n,aYC\O*fP:QKec,uK#e:*\FmY>JiFh) +%pWUu;hJ:U`79'l"D;oQO[mdhtB':&m:#+$[_1;X7V%Vdr9QkLf[" +%P#*oeT9L+(D*0S/P_Hsbft#$;=WVlsjh>6B;<%kSWtN9"__aBR;X+bZ_TZ5Eg:6JY"dC@=kE2T0R.76n@-2:,-Lc:K$LY;F'5>Yj +%p.%p.]/IQ1TX&4/4BT@Sdj`oRIOJj(Yh8+gEg+e'X-k.6BaUKo[K$u*2AknM+86FPFokd:cSGfPJnshZp^S*O"jV;ED(KGOIVoO' +%oUE^:ba!Ud'-YUa\H,\]-;B2-gO,iuQ#1@;?/r7[,,SPnNWP=4CqRG@lN5]/O9d:0?0EM/n35_m0C +%Kp(Y-KgZ2lL59t.3Mb"+Z7h/*[0ZNB14?kf9r#XWfc^WZ2H=NDICsfTBH5)E.YI09(1Ee,])a`<"Lk:qfI2(0fdlq-=pf>DKW>iY +%Y$-\?@!/6FL3ss&`n7\M\Qm(T8sa%F/*Aie,\:4lP6;k6Y,kuXKMl6]KDtt1@]t#no)<#<1RCBbLL,QO;O"?[90m8aG$uff4dC#B +%);upJVORAUPEI.mfImNtW*VL8mY9K(34-\#hTU_LC<:]Gc;EhChbJ.'j>]nNc`i@%FY4N)+15_b".>Xn5)N9o(Zq[6-<%?:HWhqbd@AR:\)ZL?!WN[5Ld +%:Es>e:QHtgb]b7T+LX4tf=2ee8n`Cr`]nPK7e_5Qm?S_VKZ,VO[fqLT.;*Hq?h,f>l?GSj=Km$?:-(4NXN83!`I>EBeVI=#&^ubk +%HH>3D>f0iXSSg7t_f_s[(_d4bk?LdQFu.bZrs'RKP&p]37&P95H1e9/YOWF-dA$k<7;C[-.T8%9S6]-e?M&9c^ekoAHYVTHjf_W4 +%e@'l!EJLRj6oRAD"VD#gUd;X6Z%SR,/VZG&fG' +%VC,KCe@Zm\??%bQ\U2n"4;65kjgr,,c:%n49Nj'#0I$2GFs+6I&ScM4[OT?e@2,2'i[6/05fkdEI^oTZ!1*Vs_PpEYZD'G&=_;@R +%5QHf0=Z&UF#%X84%A0);R2LZKN[+Vr^p,)qolsq7I%'4eZ?^39U4m:kLhp1_T-#Qa.D%%hm&K'+iYWJs`b_tJIe8lQ=NF6UN#9P=6 +%Man@s_m,3Ro_FBY\M)cK@;g2aR^qb;r1b8#@2XFZak5q+\M2ISJ/r*eZuj=+L05JNFcZ8F3`nF)q1Ge@JiQFm@6X?nIfsfRG`gOH>2[qsOm&ig:3eERc(YW,bXbL$@:\&aWf"#[m$%<@pq8jhu78 +%ea+sG#fKI]YF=m8<0O0JO;,$,!#!88b7BA,nI8@A]@Tdg"+b9H_=a]N[]jF#*SDoIbU.U^F>.bkXjn5Fhr'u-CH+M?;242./]Y)N +%Mu7.pg6O=2ODq<)J>"N9=M+4l-OQgoF/AY//h!rYin)f+:>gWCrQQ6ooV4*!b:Jp>7E1N75:V"31f1MF=N^%V#DiaW&ZRLjeZ8=6 +%WW';m5mnX3J%+,OM\TW4YmdO6Oo!&p=MqqcMbujO@doD]Fh1Es(2-qRp#6EBbJc"[,7A:_pYr0A[0h!s-2B5G)'k`hl#9P.b0pr_:Nk)$=jX(]*TfT,:q/UhscRpf"g7qFITs1smAL?t%ASQR7ANjg!f]?gS1J\/tu&T5\&#A4nR-qR'YaCaS$lYInP,"[t8Ei^_j>I-n0`1,_:\%BEkP#bUF4OH$o-\Vdc +%Jaj39oB6hFW9WL04'.!3c3S^&K73$)3i;h+5=L;sQ++X\8,+3&Z`;Hf/*Q@pcRa"".Ej90)q3=I#Zn+Op!iHbc +%hp>i%Q_kt^pHRElhTdE9+k%_"@ZRV8sYK,VM[h]&"obmHE^&9l,+NT/N4 +%>60b"p?2mh/lfP=/h&NC-k,Il@ifcroTJ'VQmpbPkmdL5,Jq1:]d^[=I@OY=gc[Su*NCU8- +%D.+T!BRd:b+I5REEV5Ns`+%/cDMiW?)&g:tI3#_K6\5@AoT`DG^AV +%?G(KIkpGQ\ZF`mU#W#=FUZAog%1BQ^HV^mMckq]*Zg;;@M>[q:S>:CG6>5k!-q]6IN[6XMRl?$;t#a*ehS4/1NeigEEQGPL:IDn&%$*0"jGT +%<@5C!1I(FWLm$b"Et#aHRaIU=*Jlp'p8+L.KM2.VT/.m;qC%,A$g@+KL%jj>r9di*5mNj/;_BUhPb98_auYpH?W`o1Ihf+6X37_r +%`_S-3g>JpYdm?)t\k-rSpI"--DP!GR6G7P8VPgf$_>9)*9g0\r8&gA'u:>bU/<:%>+?`*QigF;]ncGWPD8FbMRA#D"3_:@)/p1Fr;Ch3(D@A4[iNO6KZXI@6>Kp$Ml`D0DOtqSe6kBeH36VI";QFOhF0^.E_l?&LieD0*#^LE`Wo +%I1e064irCW2* +%G]*amAo=k1_i[gEAa.:?j]du`7^b'LH8/r?]aAH +%,Jk+Kk&2_:Q*add+IK/sp+TZ&nQdWY@+\?.M=_41!%_E#<*?8Ni^4;j"Bqco<)`9la]DcBc"kBMZ69WJ9b^5TSH`fnBJAj[S+DKi +%amme'Q+4@YNU=Q-Q"-k*nXD((__6!S.IGE[:+KrGGsA4A_ddm%P+XWHOsC26V7S3iXkb05oEI;:@[3%Eas3q+#/0"'U&@]):j225 +%kS%@*nLDj]_Cd.P(/RZQSK"FZc^69t%tS0ZXs)\R\IO=6'gYWV@[#T%Y<8%bkuHsrIhoRhL32r!N:4PK%S][[\mZ1kEl^KK($DQ] +%IR^SDMPj;,+5ThsnT*KN2tC#RoW1ED7#X!iLn]TifOXAL@DJU@3r(c[LOHab!%_*>^qpc19i:/gX*PIf>na4>jT]`5/BegGLAc&= +%QDPdJW/!M;G*AI)7V*Wt6VT?Z5@.kK*1*f(3q.ESW7#>B&BQZ')'4;-W$OFn8lWGQQ^T1lJ>@l!,Bdn1`eF)Zjf4f$!//K7_JcdG +%>mVuQ_)(5VI%Lf,:HM72*(a5"\]_UC\nNOdOrm\@Z_:3Q_>]dGVCMM\2^Mp$1s2g.2cBgpW-Z^lKt[Vt9\ZaAgTgm(ck#sBT +%a=.]5CmT26S+#C.#!o8Sb:K#npSZ9O#u6geL&BRt6YSW8#W'.9RT]2gW^FnlEM_R"e8\"lqkog9[43MVjRH3G2fMrQKKpK3_.n^_ +%G"%3[jeBY=W2*<0hE5r:$e7pnTPa.s4uH3n.S3X(`O4Lb/]hP_cnOB`LVY0rJ`GjG.[OW]hNQ":d1bt3Fi\a-b25_JBj0k&p=Ms8 +%,tc\!$P\[Uhn^Z5>%&0IAmutrQF0"-a5g:NSFrIpTj;LG30!M*E3-$B9;\#R3D%>Y?!EMVok^SI)Q@taWTF?qJ!Qk21%LaeJJ?Fe +%"`R,Rm=g!'bLeWrX*+KdY;<@jU'>aAA[6/tl@+K2A8@1HgglZC/kf<4$a+6A-?FS==G2e'on8Q(bE?qCEq7S',j"#'DM_r!C`:+u +%70E";64EBVE)2=[pK7t9iXfLSn_-r'`cV6KL07rM`ElD.(FlfSG$i`&YbIYQeaR(098?pGoR'C+4kB[>_uP*@1f/<#bL*GGn:X5^ +%O%S)jU%_j.r#QeO:@VXF[UFH"XP$,:Uo[V`c->&FQnW#SrX>`0/Lm&ce#Vj'kb1Q!b86KXpim'\E,=V&R\X[G9XZ>sS<>"/YmH^/(^r;NJ#K(HddlEG^YN,>0[G[fUL/q$n9rj9219WZ)jK8ij4%IS!6i/ +%GCLuE4JE5tDYJmQI[F&ao1CC%71NVgK2_3XC'_h%+_H0+LO>?Y)[+`28'qCXNJ71Q^TZlSCU=_B"UJg;?k<,Z#Ha)[MXn/**M^olq/N.c1)_s +%nn'\L\;bfg't'soZaWg:WL*eo'GGHjn@L[M;k;N>I!,inOtjA?U1.5=D?H!R067CE,;q*)79c"pV'g0]mNu!8TSodehCD>&8d\Q+ +%6NTsMqP_0mGnB?tnRD8,DcZX24L'Z-/f*Ik1b17]3F&N*_M<&jm$GJue+]Iokl3UPH5'H9(j#oAdSQO+&P[r-)=T?`*H?0j<%\B$ +%=\]>0"!,J_eQ(#:=q^VRllC$Wcr%a(1,&gWUG(<_T47oCG"`_O4>/"%2uT7?*dS2k_nS;D?0lY#QW10++?JTJ#Z#$!2>DW:Js)L,TEJT^S0!K&.jj2.>h,?9ZSk+',#d2HuAcDr6$2sZu:d&`+B%OO%I +%@6lqm0gi]Ak>:u3`9dPOcl>",S95ED8ENW'BZ!j:!BEZ,3JZI!S5XT.aqs'M\XI7HcI%D#]+tG7iJIt(0>9Gnobi?V]f(n6kCK*] +%b7S[$3?`dP*4.`c>\_2jZ8i\a_rl8p^'CmL6uK$_1%ih0OJQR)$KPr[,ek# +%jqIl2-b\1[4)#]$EmQ^*$0t'IO!WB19eKdO]sBZ-SCMj1X)rrEATeUsRdqZ?Za!&d;Hh"cA910]2n0hCV-#?h +%H(l7L68?[O-IF4i^u_po/3>Mt?ME/7^u\[`59YtT.Lk\kk!^q>3N=3ijpPucg9>8&^m;;5$3P\m[p8'pg0eKPT&^66@2.Y[Ra?ss +%%eENEJ@XcX&CXq[koCM2]t!1IE;khKO,d+(/P!'$cp*+>ebL[1$h&BH+.oWdj.n@rsjSWNJb&KU>;T;Z6NGda5 +%$^k#/L<6VBa'Q[ZO,Htt"Z2E:!@j^9"iZ$A8!UE;WXh7@AXb1i)k[h7`h"e@aX>-m#6J9!nMpuB1pas_":R1R1:0+^-EM:7nRY!.s*<7R3fjRDLA1;>O(\XubL;TLXA3dHAk"FW@l-\-!_ +%3ZJ56ZJQ(2PR2=q)@1@+BUX5,,`onU@,0`COHVWp.$@@Y98b"0^lPtem,USWa.eFghggdJpR(7UUc:G#VD%L"E@YroGn";0E6"_8 +%nVnPZqF;E9;oe3]\@eNq8.[PfH83Hk2EmS>B"Y[$i^F_teVe5P_dc-7*0M3"fKdR;2e!aS`HrDSEM,?pjWB$Ca3(5H\1:Ab)W"+]$XE]T4pnEX5/+@/.f+8Ms;S3-E +%rZ[5dd),u_*;s\RgM*6=)r+UAEH'nT`AgHdM3+M#Ngh>dQU4Ue8\?b/.Q'EgNl$IE.[Co-0#b'V2b"e*!QFM%&^S&h2;$h0#,V"Q +%Ar(Z/ikkJ0SXK_uTFC9tZIMZ$?3G8NnCf%ApS`'G5Q#L>n]$?rMYGK8+(rYQ4<1,Gc/7mW7u5-:%Y+KW#)C)(94-=jb`c^4]s6O] +%NIFkfTXrLMeFLQeT8\9/+,:a5#Y9-#iQKoFRi&l0S.&jd=$Hp+N^(QX?djG3i-iM[\QR$-<]HP/)CPMnKf^iq;;kg"pP0Hs%2UF? +%>D!U'*9mh+2a`aB*.q"m3U448ZTl,@iQ(FSKPt?3_XfC?%7#0NQ5:V_,nQ%MC#Qn5e7*p,TS#IfI\us1#KJQ>)`.!A!^>+]nDO)[ +%frFqhK0P$%Q?)KQIq0>!p2p)fi'!$5D#5*ji2:Z(%K[/Y'$$l%krHSTT'\D5En8,2DVLk/9Wf7Gka'^5Se=-aSO\9mO%1VOJ +%#oZj=3j`LAd00Y#,dpoc.^?Ucq_es)"tE_-*&rsZRTqJp$:%;3XYZ(&\2cm!Z,#.9k#on7ADX*r7+e&WR'-bIR?8pKOu@AWJ"lRqa,a1-HAr#+MZSJKje42^M2UfIj)QQYj7)>9`rsoS+mF#CFX8` +%2_I`smQc4gOff7B+MTA';I9-Xr+=:;poISncEN],PX^*Hd*[dehUMW4b;!*=_!fgLin_7c1h'FBckl.t[A`s\n=*XAKDWYsaBZDl +%heU462XHpl4N<`jp5LSrG3t$4UFn%5qIG#XA--M=^<&oH8^[fk,OVR\RHAlaT;1sqA%jDEaU2`(au=X`X';MGh_5>2C;r4+X2]Z3 +%`&AllWp2M$Ro)[*0nSo>L@S#N?A*6'G(,ZL;,6ItZ`m1!7X8sVj2VW(?7l98HuCo_GJ8e'8TpI;Hi(Ul@4\P^-efT\;=I_%D`42: +%"=2f6mmJ0b1>5(NLB:NrBQ)-Om[\XMh?*6_GHtcr4JF?l%OPQkp_+Y?0=Eg`Xr01QRhiC+$+;c%5m9JhDjjh-'l7gf7%HX7L(DU` +%g6t6D[Prfme.ur12bQ22"s;AK-j/YqF2>Om84'G%^qEU4+a@2+]m5rDL\caP-\2BNNt(hqB6QiC"7FF&NlUd_"8?DIc/sT[mS+(A +%9*+da785c!E,Vam-*]5]Rn]`JX%oK8!I^`T`q&'$V7\)Zhfs'W8/,%]]eNTfPPg./VZ3EgR)XIpM/M7b@As:l5'V"5jd[1V9`kKj +%JbQ$1D91RYDoVTT4);F:g:18#,XN,q!/2J +%XT`hbLPUEch^Tme&dV7_2&5ujJb\A2B:>6-&Dn1tX$qONhpean,;J2I(4?X1`])/lL]laBV#f7#L$J?#Tb).^[gE.X5V:.;[OcV= +%+Q@_Ur,9M4I7Q7!&&^EpS(*ROpf;4lS++Z&M9:p>ph"Ju1LMoN'e\ajTkq_m3pg_,pia#U*l^,`1c')!k>slL.\A=1hfKa$DN@dN +%-K(L-hcN9;q\"i`()s5NQABIRnWI*t+2g+ubA-*H`&HO4Z93a.SQbYjIM9Fu8k*r"&AHg];Xu.J^?PX[<5/^rBe('Qn1DiBHiL`r +%Gc`DK/jE4nYkd.s75B'(Gje%^aYN1C[a>Hh""DQ7oAEnobOm_hM)F!IB;FQO)A*; +%@(\eh+C+B0G]0a15eI]iAi;+UhCtn;i>^a8r;sm]OOO](;#n8lj*1O_GE:su(AMbIEn"CCphmlT`!q.D]1Hg^oT'TQNGoANpIN/+ +%^<,38/IV?0>(WGo.qT-C&_\&0HT[Er2RRnA/(TGu_na^RMqQqRY\[o1@]ZY-$"WddYP.AE=G7OiAL$7Z%eH>$TI:a4Un_EoO +%fHG.9SHMju3-PlCEj3)]LH/o5*\#eCF,rk!"bh:6%2Y@FjEc!d^(;O`S+?rE*9lXaPL]6]+;8= +%6-DG,2"38Gjh]h$%q-AfXq$[F3kA\rD*Co7LmYs%Q_PGg/V/)N*qSN4Z`RnGKu3-E$ou*@_#:U[oZQs*rg!P%7NP,;])^VC;h>S] +%D?V:Y5/;">)V#VaNSnCsN.RolE8r,=2iQZ!.[.'Z7Gu0K:^L_F\Bh`G#i,:)Vl&-K"IOUim;j_iQ_R6^mD*DEj3mA2W'E;2^^Yo1 +%%7/oaRB9Y>]F!B';G$2+^l?rBS?+tp_\n[SmUC,Wa#=jjHs]68,$G0_+%&W,_r-!3c/<1eB]^7c_$uK,Z[p`2Nol)msHJi4C[k\]`G2i.`p<3X9W3!<8NU9(9=[_JjpEn[BAqib0D2D$H"g +%GOR"I967B)X*BS8GD`7CPm:f9H18<=UKJe9KAU8tPiZ"uho:jmS8mSuf*kXTMnY1N,13Y)hk!1CkKVjqPn?gkNS[,P+JHGBhM)/t +%XFgLkO!omu\D*d*kR?hOLl1YoDNFRWhUHDDN0Y(1N3j#2L]b0sMBO!nMmtoRn2Lj3*lHOh`bbh)`n8Uq[Z-kE*4^^1:#-&Z$&3;@ +%#<6YQ2@sR2b6;Xm(O'4ABU_]'TdoWNfk/^67m(Zq)NM_e0dtei7.['1A@k@ZFO[*bY%XC1$V,1[oau$"+L[u;TUIS@gIN.OdgElK +%aEM`10>9?-Lr-&:8L(kQc,dIRTXN_N"\K%b1aNkPf?!(rC.r0]EWci17/>1^! +%=Kqkt@VWg'oh.!HTs\XT?ul>Y24!`sDko;R&G@%KU3dc#54Jp?R6`B#>fl<^%"b)j:_hW\Q2#2HSCs=NUGMSaX6Sa`tZ>=lZ.r5"V>H0\oU0CM)&R@dGD)bf+S95)llcJ7MdA?!Gu:*K9?\a<'ElMZ4W-oT^AIa +%M^11#Tk%*:W)(j+Cg'ppE)Ep;$17=\Z@s)>V8\[8m]'Hs2^Or5q4OTM?Y2[2nIpf8"T+Xm.#A>gODHI-jU^bgZPR8j +%a?G>;,(!OHONfYVF9Eq$ms"LQA2>H*;F;#$aUFi@+UHcFA4Ebe,Q+?_fmV@0J5dk^>9[T6*uTRrU*5B`rD62CCsM_X+Ih,)l$NN; +%V6liY&@*<7R>6mK(te`jA#C1i_@MV;d^q8 +%&D>:D;f!8+CkNO&iHcZQ8JQ:S%\eb&OR)0aBgO^I5de><#h`1LjQMZ@E<.\T')s:h1CR2[r^(/59YUBnACJD.'oZs4.'gK&ffUH9 +%7)?rV1e)WO.k]?u9fF;dDK'dF&-q'N2qj@0-8=/0rYp2Dg?*orEroU[*_82-*&P5c,o^I0F$[p&7ImUSA9/^4[Ot01c$X%faVOAb +%oL$`t&lP9)hUR*TGd?g$.+urbEMV9PD!$K9!+1t,L<0`N#YI!*S>i4kpbdF/[_KF'fj&j"QZ\!m,d=9&E$;NJebCe>7hV*.JF&no +%!e5hk#OhT>%a^6ZNPbR_IV_,)*d=#uhP+M(pS,:Yf\MA=c,T/]:N&)`2!a-J@o%k%2rE>crJ-=pit]5BfTX.cpMM/mD^tI&@q@9I;(^'fMK(314Bh?"&HR\f[-1/YRATqG(oG)_hN.LP-+-j?*'fO@5FC\aqkFI]4u#cY[Lq7[6S0,GecW?6_kr:*,?[j +%YgEJ_XRnQo'as7b#TJI97/7#l4-3D\K3b46pdN#RjGOW7J7)=N>j#O'"'N$L!-W)8GFF"eU=F>CYF4Nn9(pW8OW[_kbj]D45;Ya5 +%)*0;QT3USq(l:`knoY8L@XtYE)FKbOk$Fei.%2l3&k7mK),S(A.(0`Pr!g?BJ_COp2'[ll*98uA.El+*`,"FpkcP0[)L@h>,liWq +%h=A<"GMSma<17uir>:J(fJS]5i8;MbDV!T[e9-\8X[0O9T#bft27ar#7Y@LP-uPDs2!5d6nY(FsF"Z'YO1m%oUPJYH_71Oh[J1Qs +%)GA*jRPT=Q_[*Qm\&N<%KQH+S&]mm>dr]B8&EN*]g_q(seagB+f!sZ+g(,rUWMXA:i\LuIFTgaX(YDp!F7mT9>#Wu01_Z(X?20I" +%C>GWs9JES-1E_e1h/JLGB[,Bo4IUiPVl8?4lf&!))eWH/h&/%bYa(XL%%)/f#L0k`en!BO_'>+/MmdjrZ>Li$]g1/Q(=K/+YpRbN +%b9(5qnS@JXEac&MlVBFX)K)*LME33/[//51m4bW(5[hAf&D#bCn[f0\Fg5!2#$@5Jld>WF'W$V.C4%n$E^ikIHM,9@"h_F*QlDS? +%KRm[i$XM"Yd)%]d3oKp5T,uqU%<'"keYoWL%AjMr9(o>4C3.#^$)Fd#L2-P,qY)ebPEU_kJLH?q:_E9[_RJ"`hf>!$9[&`"iDVU!RDq;tS!'p]gj +%[2#!s9$Q.DC,]KrC*m2[<"mGg_dPKd)Xg0O.,t<,;&Zpf`?:3[0=TOfqIhi6C/&e`eAWJ0^o2=!$GiHK;87nGNM8o0?WS*pSLQ1J +%pj-ff2(J&'_gZ*oX]c5BF^rW=*=+OSALuiS+OlA+NDU1=)KFKW>-B"T2:\[%=LMImin)hE'bdh$lEWE6^n8=6^])@UA+PM!Gu1I* +%FN;g[:^87`1T4LfOmj;UNM&Zo)3k+[\02P0"b<$uPA8"<$NN:WmAK9IM26a&o]_[4K@nFSjj3W)V-$,,AAX0q\qZRRL)QG +%f0]U4J&jlh['kuGj2Oj?'PVJ'an;dr5c7[]:uZ(^_ocGN5YeNHg(M>4'9rNX;h@W +%+?o"Q?DQiUf`)7.AC/O.#%r6$0$JE>2e@;[Wo*;Z#aDle^*(nO'e;gclV'di$8Hu.HkWBp\cL:@A$:4RdN^Ft(LA"hCXJJBQQFDn +%oUnjp0MOl_q6JCL51n:.1fXR>*mIjW)Z_XM6g`%Q!MQLEZCD7G^(N,>1@E=J]+-8=]R&kla%=T)C0#gGc@\<1b8?[4r9t3+b +%G)p_fd]>dZ?O1@"d254YJi)Nl.T%ocReQND?i9+*jP.I?0<`SX4drdB`(@`%d>!BoF>V9Wo`L4\7<7IY)iaSKHdQRItOJX*/d.) +%Ypgck4#SE(H+)kLL.?^B*F.K`kT4ki_2-s&$P@fg-:E%kUc+SWMrS=VnGu%QjT3KD?I5@L.o;UTCT7aWD`BR%>p9<:%?2Zt0VV$( +%@kj7t(Dn%uZ;g\Z6=\ger+LP%eU!"?$Jhd)fhc@DS6A!FkRjKY(D.QP/7LdF#gN%5C].?::9\Q&?T;`qDlF`q[+<1o^nA5Q*r1]t +%N>;.B>afjV#,)TeK!*[mhBZdM]&MN@\O8>nF.g9RU0mob:=oND)!HH+h>)-iJ+i^0ol'm&s89A+fDiFCoq23WJ,]'>o\7.VLEGP@s24HgTD[[:Sfe"'hu2O&r[n0=L-e*hri=@p +%rGNe4^\^lXr7=14L]?o?nIM7_roJY(LVN`HkP:lVS0:5s(\1hG_9S(7G_qIZf5LP!#"*;!fC.bt-2T^JT7*=2c0'QngSI!h5AsUN +%U$FKTP>=#!+$]!\T,#L]R=P>4$jD(L57hCX')k'D3!a<5/u$W;HU^_bNMCj\#7>eqgU!?-#r/)[iX#L^hRLEoq<9g4(I.Wn=oU;m +%l-"g5PO[SC)DBG +%<8Y/p+Z\n9Q]!g$SCR*HA=NFCI,dG?c>.pPZug4iMj&S/2SpL/Abj>5?Sopk*e603/#`=d+R?$PS9sbu*.E`7KK1%U?N*mCg\4q) +%1\/_pG<]kF7m&c*7!sgC^Mh;Dd.;VB1rnX$b"D2NF2+>Q"=b@Q604H?ei^r"g"9rm%bShS)gg%kWDs0,2>27?i1(c:@J-^!>PYh) +%^MS=";/C(_7#!UK^)%_1h6a&RTO7El&c?%RqBpZID3'N% +%oc3s5)qG3OmZE,a1)Qqc@*;[4Q=*pE$o2>'&4`:r/S8*(B70"5+TV3QGHcB">E!T5qY]b=m)u0]S)TuQ\bbl)Ip*A0>/$ngqG0>s +%Q1W27fV]7sH93'CV(6&=0CZTg\49229M<#]lf0_>a[";d0Dq>d;..VIqa"\AZOtDs4ik$L($tg_:Co2SkJ1tt0l$b>KK@-MJVa(b +%69Nu)-Qa;JLU$>ZIeP>K0@T)PV[`bmI_SOq?a;':W%kP./]D8h/)CKM$>#0)qtn1l!Dc+%HoBJ:r3l!SUs!(%>SQpioeS+,CY@$L +%X;%GSAY4dT`rU4gZ(7ZHV\!JG6gAug^oT#WXC\U7%_*hqA%_7^d^PI1GH4Nl(p0A=@La#ld); +%c.[J*3-dDHRoW2Z&]Vl;L:'N9),!ZG^[mB\lTiAuTKo+=B0@=];'W/ML4/PWcoBJB(ip)FMK^#IfVNrTN-Zun8,O>kV;FFkrLtIL +%1Ln?GFQU':Im,G+I"5i^A,$OYql4MX*tpiY&hht3@O\1TU_thHq=^0/\Jn,2JmJ)*jZUV7\sap=N//Q\?9oRhRS8 +%kIN$l-ROCtR"DeQER_2LJ)@c>li-;Gll'WRN#t:Z?gYH99qCW`]S:j"(usnfn+78,j6)0B^NfYSjrqPSF##,9hmWJ>R/27J4^&Q% +%XQl.R%G_[7`tS(EdplX[4dXgRY:0OJ/Il"H7K.ZEkO]m_lS4XK&fqd'r+etFW1WlCm'A&]C6$6+]G7DSCt-Q!o9&d.+u'B?rG;L< +%fYbI;;L@*Lp'?Hb:W?H/_:tP(@F)"Ae(Yi)4ke1k9K@iC&$5ajN0ukM.<,hT5)opsi-2Ba>[S<[qY]>kg]!`-Xmkb$aDt`Ji>TVR +%&[u4X^%=r;JOqWOF,u=PG$adq7tBgA`feUZ^tHgL(F(\oZLkt,4#d)35q'S#H/TasVfLR')koe61J3P6b`/XN_gnj"7b +%$b>.TLYJAY?_k0Fa!%TB\!(K0*cJg^0+B28QWVA836k"*4ZL;"MZ0>33T@W,T*o/<5=q^-mpPBK +%)"?)E=1(7)DroqZmp!,7Hh-f)V*=K2^uu[i4\s2P!4C=['tJ/]XnJSd8qADgXgbL:tnm?V[=Z7.5SWo4gK/>Kc3FYpp[_eR^;FphK&4anWCd?W_2Ys3Fu.#8:%^OMjFp +%B_Nl2?EY0_,d0"+HNE%$\[8r_*BI*4@C,%\Mk;gc0_$o5]VBQDJrqgH0](Ls&+$KDo^UH4)`(u5:&>3ua082k +%X,kX$gjg#)Iqbu4nVNOqqZAK1`Q(p*3_/tHReAl#\i7o*dck0Kcdrn36cZgbk6N/",GkSPe\8q7$PGDI@kiq;`Q"bLjT2X%a'E7@ +%HcYaO-rOjRVEMskd#miO[Cp/?oc,,&h+G>O^;!\0FS`O/_t`jO]o;goca07jkMkLTT`(oTaGe;]#K-FMc*+0]H0cd=f143Z*8[(A +%/.\7&`=^C"ig:tWO>)Y+DnKEkA=):tT5ISTRd_!MrQU7HjmCXD),pHi:6*)5.".Z-M3HKHE.;&,bh%F3fUnJt_d>OkZgY`_+\s)N +%Nj(Hr4AdN5;[$EhGg"WIW[aj;,Ff$JXDuipF'4Y7,Nc[&1T'q"@-9Z:oDRJ;?c-2J%+QlMfk*90mR2pW,<_045Ve&"Le>I3-D;'_ +%OO\QRDM[*T,:`?FoSOG@l$* +%(lrVngh@Sg3V_)UmZR\*[f\ptj%irWd]Akh$QHf<9)0tbVDlElNm$;HmXsqqsVkG31L-uce'IPN\Q7bn!)L'?>5iRH[U.fW&bG1HR/gN +%:I)-^g%P0rTGhqG6u.Qa=_W?d=o+.CT*DIq.10lg&^I3QPo^`n`9!n;Wc +%AG.!'[lEqV0F`G&4XNi3+>Ustrq;Ri03Zs>Za7u[D9!Y4E`5_:Uk@oAhi?;T&#nMU<*''eA(%%IN,4D@\#,$hD_/OAJg&WEq +%\Dt\*59u$s_aiQ:$3Ys-R54*B2Y,O2?B^]WA)6!dLHd1sH/ee'Haprop?KV^J_&=oF.fo5(9!#bS`:^KR0D +%)NhuHeb>_$+(YiY%;:,Z>I-J'1Giq.?D*Xm_brJ`N)t[J1`:(tq^^AjW+EWtSpc8Qp)RqR!m/eGp2HS/;FaQBH(pgURKHTh`C8"b +%Dm.m6[b':2CY2:/@c`O@q6iL:Dm.;\?XJ# +%oCR!!4NI.E=8R$"q@KIBc`?O00]J16K[97GFE\gi?Md#J`WW;ZaYDi>:$>;<@ia6**8@s"`8Ln;9eJcG:R%rF#c>W +%L#RH)$?Q6\ht#t.4@[2m#&F#_e^V'"%R.G73I[dAFrV(&Jb9B@%?kL+=" +%Ibrfl^\6jL`nfl!96Wr?ugh# +%MgD'9SlXW:f[nofm)a6t*?/_+DI_KI=P53ep@bItdg$#G@#HJ:8J^bO_FuiY@O48!sPGG7_^fnr/ +%:u=UfliBuk[Y?sf4"ae4W!W@VX26;UWtF@$UECIWOE'$k`R,p$Y9TRfL/5=X5kVXm2XWP)cg>k*m6%Y=lV7X*_-36QP(CrN'q_qC +%do\ +%UQRA!X=??JB-/;1,AV_pNH^28+UT7`\>JKt9MV#d#mL[4XEIpB&7AQZ-r\rnSk[YL=Vk+Se$\RKt[;Co]fH5@,4cJcQ^/"k;\T*HP+_,`2 +%LAc?dA5-n;$!?<_g3RW#B[a*$:Zg$dECo4C9;o4(c4rt74B#1X.L@?>U*mq"Em"beNFDbG+ClR4qp3:.JFP:%j7$qPD[bS..,6DCodeL[!('.rh48YkP0U<`-Gf;^On"KJsb(Rbt*I1bgXDn_ShGALY!7nd?^I8*Ub:9m!G['ad7b4q$p:\c"8Bo5FJ.Of+:3=D998qXSCJYNE3-2,/!M/ +%WK!9#fGB"^(loAuWE#X4h1BCpCDGgKA)DH^d(4Tp#9tEj6&pdnP-5CTTX4EdcQ3[6hP(_%j*qO8YTTrM^4X;a4hjuENR?0fYKc:8 +%n)L]6U7\2cbkdn4WhWlSDUAPd_`gE@Jr^R0"9>19i[BSf[d@159'BbU>O-G^b@PV+N"8#-EJ[V(7U`@eC:dM"< +%FcWL>omnm,mEdVpiZlZK^+WrL,T4PQe=/X%F;`mjfbR&_7iBj6_Z=-G2O4pn%KV"Q%1+l&,$TF +%BF%5R48$0L"*_Mfo@_;I6E7Wt^^F:]4RsQ1q_mk)8K%2DKTj41S,sq&)`oJME;Lel`n= +%D0iegaH@ODdGdc=g>n=0+7Dja"N["Y161BsEn)J`?oTD4Jfk&FT_"\ih$eB,_.8pS2+3"6T*]:H5q7^*,>jFNBZ#LiV/G*H0aB,A +%9K7Dl-[T;2:s27]ljaEN03";Q/p+XCG9GeF7NB>4\.go:F0WEH+N5bk<0kIh8ps6:)D3YF#*[E!<[*QX;<'IqVel-Wl34dDm/[i7 +%F$+A18%dd0.G?!0^mK;``:$$D8))%XRZn\c<[BKOWokZ,RubF'$p_5][?A?DXjl5%j-Jp8%s7VYb:0B/'0CI] +%bUI%'!VhOKc=Ohk46&DEgji7B4S7:1R#]O)'W#Z0peo_265PB=7]sMeE+.>2"0gE.hm=86Ee(!2Z4?dd4+q[l?.VJ&H&Nd(E9'm& +%>Qg"<$^Z^'V"5^\P8%(\3%#mp4QVjVTcnLt\Ut$FI8^iDAg`CZ>m[lk"BFB4`+'Sn^eKtZf)lnGdAOK7(>I"Z*K[%2JL81.P:CGg +%912&L#cB:[,$/XDU7;+44"*[U)%DTOFa/i^RkrV2L_84BSu)dP1HO4P2hM.6kXZ;Q[;KtnjF`K[2NfYN@9*s+KMiFGRBbS\gr9]F +%k,EnN!C@O]5!C6A(G^O<,9uWlQj0"hAOdoQ2OH;aG]"ohH3Go>'VGeolnF=_Ed@Of[0[ln0XpfPAKXGP`"P^Sh*N7YTRBkt-n +%cK,IHK%llK?J+X80F)tA<"t]+duGNE@MrZ0S?Y[3EXrfl9s]XH)=/jlis:\jRFoM"[+]ID1cX-$G#a[CDEeGj@(8?1Isfh`'1NtF +%d)>P80#8,oEtUbA2)%)0A$09\^^NZ7\P3gn6@6aT[S.ZdV\;r9Dc<]J0rg.j]8khllOX2phA$OXr*JRj<\Se'2Q-0:PqI7sB,aDnb]66osYlaUV*a2"r.,((DE6KM6r#Ok7o*G_J +%,01)S`P:GEaS[5RM\7iaUq%Eq+h4WTp69PO2r/F\cgl(%Sgr"6B])8_I\-H2)HaK;VB +%,VF_cr[&>>r;to%7Z^=L7uelV??q9iN+0('9ZCM0-&eOi(B^3BV3-:$hWX$(l7Gs(s!Dj'e>G5+YHHlpDRqh3ra.EU,Bpr[gj>0: +%F,+L*;`nb2#9,1N,2ng;.6!3,grjSV_6jHd/rC1f+aDU^C]cV4Mp<7Ime%FCpS*9N[M*=>K0TSHT"TZG\4mRSFS+#KlC*W(nJnAt +%_p&rc-Ts2;8XetS:n$)_$*^ZJ0g&i[\=%*Q<2rQ=aN0gd?l7N7P,Kp)#cjUM,E,QQa?Sjp:;aDkkaYC8knHQP%2eE3.-LhbN#:IPW-QtiSdp4Ze%`*UM%B=e!Nu7#!q>@28Jp[>>(6pqUP_q +%31m!^uST$*:I-#)<8(o`>@E()kLYg^`kI$pbV[\TQq$Ka;^eY$Bd]#D1_Mk2"D--XmrFF>kZVNi\^( +%'+73T:YFjYe\J]\XjM$6%2k1Hic\VOQ8O\V4%fW?-'3D(1_rp?"k+s59^X#CNI?m9<3oJmKT&!`%6&3G.`m=3'd]t95n$^K>/(Ej +%V(0"I=A"5mJq/)2fbb0I;a3RRiGj0B.g^I@f8<^Zgar]:aU6u.MImK!Lsu?O9R_#O/.8TE&7hBg*]cscIsWPg,r3)5f"%^GL-+,7Z_6/dL>C=3m= +%Be#SsBb]lb7oGT-]5fb_>R)Z@86/?noJB'ECm)d3N]Sm*.P.nT+i!JH9Db!*?G$`=FM- +%r*JCWDO#p_!Z\=HUFspV\1?Jg-OW'EiNp>+$?O\6sQ:Xb$\\a:'dUAPbgYL<^B_iuWg(Vb@i4]XT'm#\9,IMG,cnO0_5=8E@F/jpigsEDUk3C/Ne%A=#Un +%1<`IXiXdP"&ffZ=#obej/jX'$7m8ma%^[R(Sot@t9$g7TZ+_\7T-b,rnWZ6?@`F+@95NI5f/GH,<#DG5mNi5sLW#97fh7i[34#+*DMHm$IL$V[ +%q(GQdJUL17!g@%%.F&EEV5pYJ1s">:S,cA>dY'$#2Bj63c]/e<"75I@J;osg4NsoaQ>CG[c"':/+#$>&epr<,Yn]Q(!t%kdLabd_ +%-8G0ZGPDt(S?HJ@_uW@8h8%ethN5l'6W7'4WlL(8\eUff2]2s9)a_ON`[st]$mGbFBG==>[\R<9aGh-,?W2bJE#]SMjGC\^GZ0uM +%QDFXu^n:4)9g!XN".Or$-7I*usBNU`FRTN]LlANWj+-tk7f8pCoe/mTm%Z5tY,7.,[.@MkW]'s?"4WO/]l +%;2hbWYUJ=^U,,`*]^N*LB+F&5N+'4fQ:NbmA)KD$@kaK'9M*"76MLip9A6=!Nm/#[8qE[sdqmN9TO__MRsSIIF,?IRNe=J,!^I+A +%0`&Bb@XO]OIXJ03q\LK(ptsRd?@<\[fS>h6T/*)_E,uNsGpn@SVKZYb7-G)6K^L,a9TTG.J0ub1h#O/O)_(%2b#uKapY[NJ(t\n8 +%lB_N),J_Xi`KW\p#]?kB1:"D0O]..pO6Q/-\KRJR"<>a/28`04OuU>_c.l!Mil@j/G@N2*]K3Pc5)d(*OHV:(U +%S"J6E+Bp]j\!:q',`->*P6IhjSRSa?`@][i[8Om(X[^El=pRmdlf$m3in[["E>C;+RCWDXL=kK/%O-6XlQF."-a,NCd;(b)_e*!B5#!1-r_Z +%1LHU"1VNo[l5^arc2p>,r(r[<;**k+d\=rAQ3.EA@Uu?rR?k'$2),FJLR"bM$\KKI:M3OUm$HY)3$5/LB\oQ +%/@$qHK7**-(T6eb=o`Mq/Rfh(>X#u6EZmuT(=,8p/!aHMT_m]0U.ZDB_8,`cXcOHsq)D=nmItSXPGFno@BbB'DnmdaO+BB6)*)Ed +%L)o&JP/O'mj(`0?q4ml(CM)&Yg#eet)h>;79#%$rN:\>`BtI8^`ZV0*Gj(Ahk_6>96[aVDfi3+7jQN_JXs0 +%@`C6F!%2]]9:Q+"KNrN6=\E^=R8XI8a<(f`a-`-W+?Kj)SX7VX:hkS3M,>HZjNY?"&00)Y"#kgfls*0AQne;/\R]0Khb7!mrj`qp +%^1CmM6!W@_m:u8gUuh_#A;SCV#8YgJ3p`JhhUNW#FS^e#*,-qDlH@3a/O.`*K:JYVTlaO[*fGBh%T0d+_0\B715r!C[3 +%_e%2*at^B-!_Gk/Wbgi)bRbDO/=LCG3sbRu]%"\h)'Bg)R!&UL,p,A\WGa3$DPX?p +%#=,SN.C2Q;)m@CjTh%&6(CEMuZRgp.i"9P];7&W)>,(I3Z)Pj()'ful]ZDe'&qCS]s#FFAgmO`ZTtt>U2Q;WJnjD*4?N<\?UQ`7\ +%Dr;P,D4r(d;FK2IPYI\-OsY0*7p2-e[=0dRCIn_*`h_):!LW^H&slrCJ0[]KI3ESD7U2/Wa(BBZQ(>rJ%3>npN&!5k%%M^4=VO`l +%<"aI&k+ml*1`3oWC@LIRc-gN]>.I'*ej_<\hF:hP9nPWS\5Q-r[0$"4APYO[P,-TIk#7JgO[#oGJ:>k!E\#KIA#1paH#JJ\LW[Pj"#pm`N4T$Ua8XYKBEg!b'D`![ns13BOHPNJ6).U:V92^![_R?rmKNd;p]J/#AUSZdVTbII7n#(K^f#klM)i.O]ulh%HD, +%$^0^"7%>+c&VdG>[kA3+KJ)Z];1Bq3+cZk\M0_+0rME7Ot`0=Z:8=5p')9Q3nVO?e- +%0h(WZpIPp^)'q2OHkZgRV+HK36`N!(;;uqaqB]Bm8R[e,TOFiu9]o#fMo[#D(u$4H,gY\m.f$I]:naB("MQpi^O:`.%?hbi;8g+j +%U+g2m/&HVnCfX%A)C7S3"Q3U%8tEcj+0!BTWW3pV'89n[m[(6S15^DF5]Rq:6Ns6&[rY[ +%9Bam&Z>T5MX!)fn1;0!&D8SVcj\%@P&"j3*rd[n!4 +%EeR)R]_Ps]a\]E/0OY9Z:r46:/3Y13-BGKIi_1@Vs.%=dC[&JRh@nB=DUF/=KEJ*&+.XhUZ;Iq[PfN@jHI3S2,X4c_1G=$B.s&=KS7& +%AUa[9.c,F.bJb.Jjatq#UM*R?=R'eq-AeDZ1qbp+l!t-lBNE?:r/>tu.*37)^J*>jHAch)Z=1p!/"&E5Z&NcUF-7`dF8#YCEfkB$ +%RMtBfZ)'A#KU8Jhj],i/h?nVTgWak2*)Kg$YPRpB_i4p]('25qfI6Y4NDe"9\QPK6HE8j$.\[+C@I!H;bf1Ub1r1_1DkY4ZF*,C +%rmegK^n[(Bi?0G6`/O(4-*`RUUE_pTRMeu)G%n7r;TfK[96[1pF\g;F-0FAppCbli?Fsqd\^aP95(poKoVD'@?iLEcQ +%Ym:,1jc%K#-MHAalPLWa(,E]E$of;C(s1r9 +%%iV*/,MY;_/J*'TQkBt?)L/eQ$s?pdsVXd*5a\'_>n."b/bNNr_AtW@@-J47>bH@ANFj0leKLE +%25&&@:<9#sAcVGT_\5eiOkh'=&)iT*a"#2a_V"6>HkW/BOIZ9KDoC*'s +%VKm+qT[?GWVGsl8g]gm%g-N1K_X4B6mU?`K=Z]XiG_IlBhE1\]k;hkC8 +%;?-trr\,d^KkhBM89@Cmee/(_ltQT#Ta7rL8^,H#/E(Y'$5Z$I.\QDA+cnHMYZqY5Y3gmD@cc)&d?RgY,TGYK6Zp(?:1:')cUXCq +%'75#6L&9(/R*Sq2o0II'`8jmHDEa@AEqL!8&>j\9:F:25-*^=h%S1:FaQX5m-^\h/],2$G:]s6s_dt1g?ou$DK&8W[c,?VE2J`UHL^_C*&RPY9\3NP735;F7s:X8kpbd;m9!-?b+^oa/r=VX_3V-=iFkD-dP1 +%#bu_Q9D*0-2iYf))p0_ABe1Ukb[`U&Q]3K=aCXE]q\SNST,m"K"]P>Kq61#:2,+T4O\FdpgMMCFt$R-5VA-\R)1Znm$qF*6F^ +%)'Z_1^g/BHTl7["geJN&JW0U/.0o1-t)OnWZ1Ia<@1Db8^gG8Fj)W/BFS/r4tY2O-YoH/G:NY8pq)6VV&r58\13"dN2qX +%2Ham1[OLSAf*ZR7q)C3pCPGlUKYg>9]EWm#>*d:;2R*Wr`X=:#"?AVl"D>*D"00]X_M+%jFJ5\20Q!o$?C,I$N@Gl;CR<2rhd6h< +%s"^%3+unSM;DK6[YE(-aj!AO^"@fqP6#$2Ti=O9Sn`ST]b^.C'53btKtA`/=Mn +%QVeB:[l_u)\54$lLcai4nk#=cYnKnf9[TZ/J%NRH(E;hLb\W:Ka.j9J/bHmF^/;+AA.E#?&FM2U2TOu/d)B@7CI4tDVUT+TY3i3i +%G5Xntp!9Jl=#M.uHOotTXl8g6n9JM+D@cUKWW9X)FO5M$m.A>hrgSlV#N':2l1DkP?[hP;aLl#FIC]7(UPGDCY3O1`DU\(.*W>X, +%aj/@$X)3=Cmki(U6,,.%5NgSQg@]rAh7e?KTfY7#llV;CUDpUF]&;^ifI3&"*d5,s@CpGMnCm9MrNUhYIuN8,[EZn\KDe$hc10BC +%\DP_ZC^pBS;7jNB>NiiDJ+9\h4a*G;(h?tG46+_Q_YlsMQIUE+Q+hB9=Dg=Zg[#t%2YPdNoK')]=@&YP6709!+,O^L(uk&2@\`G, +%!XeDB%g?en<']HIh0F'$Y(-fo>\nN]m^0uh'sM]>DH6#mU<,g:k,A*_fPc`&%u9PeNnaME'j`JV5HfY#o.fPQpRX7_NHab>ni\OO +%?9!q*L\o+t:"T)djQorhdA"e0%AETr%,7Q;DAD,^"j[RIra9s*))nHbNW>o<.JL-sXi,RsdM7J\1^r"f%-HkDm?dEh0^/;uEB':. +%lLa6McJYWaClAV:$7"Sh0(p"EoV]gKS@/[!c3ocj_==b_IPbj\*HmlO0WKfQ\^-W0618J@lAVcaW_;hktQh)Z5",[]MI_ +%"gE0M+gL8)NkAKf:*k#]*VRd-pNW,8>Xi;2Jr)9%\*g`_FW/W!8nqs?r-\/;j2\_j>/6oQnS$EdoXC^hi*u#s'tCAGAUSK+@A07I49ecdW6U(j)LmU1;&n&+D`=Dmq^?O]M0m_"W# +%*OVB_Ni+Ve8fjLpnm-gco[k1.)oM&/Il)'8Wshc!PB4VpWfH"iIuXa3p5'@QT.HtXTabK0c[6XZW'HRXk@iJJ8m!XUGCig6N9^D! +%o@,Ld%m'[Z:,OE;Xg@?5Y+)FQDLGe_V<>^4$!]THi.O:FL#;3p4@75#o:0W`A'lPe"\%g\W%\cZke(#t1$ji0HgPg<]sFPuB&1c- +%H)!/qF'M1SG(Stnn=m#,go5nDgN1<,Jm.qmRe&4gK08TKnk?L<(NrKLnQp*,fYpu5QdH(&M8OXB[%/T3iL;`%E[eDel3lmr*02oC +%`@B#CF^jBAYtWo)6$I+sDL\Uh,I.#p9^9dkHO;:BbcKfk4tA[1'uu!7BQ^nG.bg:_A`["_lRe*A?c>OGk^r`VU9Mp5I+0[BFr3,@ +%S`;2g!u=";X`lH]3ZN5HD^m;,$YY9"825:M:,>m1rA`\enbZ=Pr1t"M'p)RGd9L72=`dYaQ(VOD(S>D]7cE!!4aV1_LG&9NTQ7;Jf]#Ee<#Lmb./kbZIhfDZ[LX>UI_35Hm^AV8 +%4CI8Hc3qB'(%qZ(NaMUGF'`_OG=G*Y7^LodpW$&J7n^DR6oFnO*Eocmb+C8r^tR\^E6tX0cqL]c[4E6p:9W)tEpKfQDugTXD57sj&uBl9,#P?_ZhTj1`Go69 +%FX5*5^2:&GqP[CFb5",cRhmLhV$\sc0:XPp0T3XG\r&pZpuSE*C:PUp.*[YaMc*-$/Uf6CPqcEui`.PPl1%usU+FQP1FE06'oTBm +%k/'QE7B(m_iic4[=HnN%Dp;95b2UI9<#MLNTCq@YMme_n%Y+LW^U<`3c@UtSFB +%>=l4p;D$Z9gAAgXoZJZ<.ZiSq>Hpi/!P"Rf-_ElMC)U(p_.jmjVGW@d<)cd2U(K!*0.I,N#%c+R'DpD:^\,82:V6M:gN^L-M9g#k +%U\pV%UoV]kX3/o+>/;W&aS\24]2sIF.4S^Q1>jML\/44X[Kcl=liDW&1kIZX"oO3+S#.FEN%ggIlhLW2MZoiN;7Jp!_B=" +%aY_Sl%10X+MrZX27%@)408nhr3pCj([K!kms'dG9Zf`R=,KY&5OgmJ3pYHrk[/X$,>d +%nKG(/Hrk[/X$,@(C2an7c119glO:C*F.qcST,4uMDg/gG^ZQinmCYG!lN/#"8A/.,^#B:[VAN9/$T\Lta.rA%TW_G>IMEH$qI5#\ +%Zcc'CY0<.p0qKaDG<>b(kKVrQ]?[)(*oA!H>B^=i7Xs^3e]NBM +%nt3&^B-3s@?B?+a=8oPF;jQDMgE#[aI]DUL$HespF@e"@eG.DT*KR+(D3koQ=Rr!<2"s)OT%sG7p0;*+mTY$Pa/R`banG(qqM_d" +%G(CZ'USE!2/+pf<&Ua)oOZ$rMKV8?Uj`m3+'!E9./'#iJcLKoL/Cs@N]J.A*Z?!UZ*%rh_ +%bKB@\EkEru"aU1i0ARMKM.PC1>re"leq(3o%%a,":d(Dt/EGdhZpj&VjeIT-J,-?1(g>\$s +%.W]6fA)_P]P8EDJOt+"8rbY4R(3Ug$MrQfNNYa,Pdg6cMKjQ!)=dTt7KrhFJ0)X_=b/!Xhe6]Mio`X9$=Zc_clq=h%]P,ubr\\tY +%Fq5Oo_;D:dC+e;@r!I/9QL\#Sl8\YbR`lL!MJQ"NTt-8;J'O+]Wo-_4[T-8i]Pn]-*/rT]@&%/BZ7KT/_hs\R;b[e[j(sA[f/\N5N]`>Ae#q/Yan!9dHgA\Wo&Hn$2")BPAu4DD=si=`]LVcG.>eX,r*E8WC7fQn=j`G6+JVcE5=$PrY0i +%kC+H\>&T.T.KXDED7L+!!N`hH81_>8V_48u6cCk7M_B$GJu3N(d#@Z<+X3Wl1;cl +%njU,_Zee`t)L0XGV=QEG(Mu$c/*)4qGP+m's):g.]EZpmm#-s:LkuISFlPieG?eipL.\&DqK0J^es`.EgLI_S*-g-4kKgd)1qr"*A6,.gl"T9\uV.cQeU6SK\dY[+.ACo)bV,iI+S.#@+C'th0m.s,FZuU>> +%QLe8N#NG-XZp!A55b[dYX2_A"54#[-V.3j^WRgHqT/Sf0Q2.ai+;\al/H"4(AN9[+CZ@0rOB7bX/um?@2SrpK`oBa>Z'65JOV>%'Y'=02,X-9*_CVIrIqG%EY7_M> +%OUtmj`'g[B\UQ"*,09Zo1dA#L*YpjkVX-0^FVW?6/;4X_Uq[tqLf.GH)0ce1^+9Vh3L9;J(?[9XR(/eZi@\lNO#']Zc>sIII?'8G +%Mi]2oUOqU:n6%N\kGUWI`6!?E?9#+!VMd@*e3C2Sua*KB3Re#cCIP6[)0ZIoqsTBpV_i5+02jQ1U[p.bJ[srk8G=L9H6#) +%r,UHRNt/2FUp,A3Ij&)>f"6CIPg0paR94^Ka2tE8AMMo)g\"uAhDW"%Z^EerB]5I\TI^JC/mF.n)>2p@QQTSeI*A=u#Q5EDL1F[! +%5^Q93rTCa-PDa(k_7/-:3rSQmQX;j<_KsGLh=nV]6!*elZdl'=CqL\q6$RbpeMb2?,-&?Uqo^XQc$rUXRJrs&B8JOXlV&X>CnlLF +%/<5lml5t!YWAN-idPU*CWkE;cB,E8nqE6rhYCHMM@=Qm2<-qO?p%PE9dZ(qhn`:Q+$-QFVb#m.+(2(2fV.r/Do-gTE/Ph3?<%09_`j"sAC3u5!aM99odS?[AS8QuM%F/:Vlb'K;l&qEh_(GQ^A.,p39Rb0Qa+Pa=)^pp!, +%Qoe]UU]WA$<<.+uY^2UU=XY9?\VqC+7@gb':e+TeHNQ6@l7aYZ`!Qmo*^QI5edRZiP3TTmMG!08l>/=;:* +%LfAs`6`6/"_t=/ZI0Va9P3.6'<*;B8_[XC\=/TD0T^T5F*/?1t$dArDqO.T6*;p?%;Fr/=aO<;.dS8\T/4BR6OfV"C0RdT#P#:ifX\">Qh&F&Sr8fT])f]2?=8ZQn'*QsYtLdm@J;O>tN8"<6FJtAua4c`L70LL8:8FiuDoD9GQ#tcdF.7iA7DTk&legil7EZMucUUTa*iM +%-<_=&TW2Y0Y2<5En,u.#9J]q[PaTi$GS]Q7&[QE\e&_[afJ>%"j1*`O-\unt#@DrM$=pX^f<$^@LhkU\e6`.p/.PkSCM)O/688f\ +%Kf*8UeXSlpFdH%#n`pqJRSP\1]V"Cg1S2jA@m,L4Lh&7C%Kaf!>$oT4\=l*a\Oc[h#1(nrd^i>>c[b3U=f0Nj<-i?4Ps)7CNUo3p +%Ps+5N&\Y]4k?=Wr&,S$P&jI9Fc2Q?g<(jC\l.&TdDcW($DDk4(;N!0!f(;YpOsal"DSKjD\i(fG^<"inm<1QLT:sga*Xt35+560h +%c+Mg:87"1o#Hd=7[g%J&^/,oa7$!?i/Z42,f`QY8n&m@>`7le,:1]ih`G?QUa+OBJi13oL$;/NDa.TTk-Z5KPR)jkc'%Pjk1#eY8 +%1UG4JpY%J@Xan7B=kh2N[$LAsi[G/+:5"f(:Cqk/W +%a`Z=?UTQ));iVo"3^c5=;p\S!$_F_UPKYS>:+W'=J'p)7f(t]O_GPu-CdA@,9[]C88@^*2h3>3VYs.TT$U;+Q +%&S;43"q\_lIVj'^[G*Rr5,5VW]'+(Ap44*b^ZpH;hl=@-2HlZ[SiG_aiQ7&fplbmOp02Hc^)OZ\)d6=IA!pHY^[BcVWpiX,jK7Ro +%YI5d-"agAYRGlrTdaR=nbX&@SX'iXULs_\[XRM(f3pEV'"Jm:$\_4i@Z_]YR'A.qkb`uh=4KB3h!ljThLDsC*aP'KNRrIk@Ju=,V +%MQ@K]8Q`2Y@cU8=5jl>ZnZWq7>@fb,nZ0:Y^7rL*Y`Aa47Y3BgHhk +%/7qq@6Q'O.ZiqkCS]1#p#'-dIIVohdiQ4YSX_fL9YcO]rXtKIMOS2N`5LXcn@VLqSd%`Rd:b35&#-r)8ItXkQN[Wi]^c(EUWNWc_qZ[@&J2!/(uIE&C5B6"S%k_Du;J8ZK!.Bt2=%ee"+ +%d)o/+/F?0V=e,.Oc]h^-O]lX>Q?AIB#@9]MbO^DU[\eEWrQQq?!?So\38,aF_bl]hs&a]WeFRnh`mG3Riu&]74N>DB@VDcQb!,1q +%:O+kD5OhlIa-jtO:;U0f02?$"KWWuP%?`MlULu2'>lJ8Li[6E.`UU@B1(-rRZQ,trLKs8hQCNZo#&rQl@4M];-M+JW'sWa>fZ#)C +%Bpupms"oq/%CY9VE/jJ!Z=lG)nU+SQNer%AM0Y+uAbkSS0l`FF29ENcVEtU<.#2O9MlDMY(?RUmjuK<(V5I,3_U6j>)blg+dF8Ia +%'AGL%D&d$NR9#WG4rk#$;l=CfD7W28Vs?0E=ieHo(:(/m,,Sr5Vbb:KBp(h`(1*eJ9_"%CM-iqDPZZS27P&?fANA7\:S3f($b.Oo +%(DE]^!S=+kY&Os'35j@R/1Wr51'T@=)U(=%l@d8_5dg+',[AgJIaJOpLk4UW'/D7jpPB_h:)d.mD,B?$6'X5;oaDi'(cW".etSIW +%qP4Oia&Nm]9U`&.>\-?/iuG3^7A!]5QHVRA3X.e.;10/rTn*k,Wb7jD,f,I$f[9iiYMHBl'TSkZ.eKff>u7^bg4%>0Jr=rY\8[cN +%F^BC"-(WA4eM`I>)JDWmSI!e^&5(r@`5#oR@O)0?jKp()jr/Dh*Ft!G#e.?3MP2b,JsW]5lj]Kl?Z&U8'"[n3#'p+YT"2Y8T +%%4l!5RLj:Fe?H%$KTQG*bjeUgE=RZkZl[t@(MZVC.!#h!Md1mRigS@hI:%baQ.cRQ8ZlA`AM3QecFtl+Ruj-8`#25;Wnt-$r!;B4/1@H[HH]&r,o2.;AmT%Q'.XHD5Zeo+YL]Rh[Ejl9l3>$a9?"[^FsNQc9c\S,X59GGW=(5Oa_hLVsE$Q@\XVm4P@d&)gpgn/L +%eg?!JQ5N;mF>HfiRZT_76^Z:+QeI&@F)?QMogAdJY^3=/4gT%i[Q-947[[l\bXS6sY#guYb:B:O6L]i(Ej"RF1WKZ0=r0bp)(?Gm +%!seZ93)#E!a[sbB73d^')t$[d6u!_kR^TJ-h.dmK>qnLb,e'2]5GgCFHP:`@7L\D%G\AeZ\mI.hM2uhK*8s1n%4JN_e&NgoNo]f"/5clTLJK5cYopO)(6*j$CpbgU]!e3X]uQSD9g+0\frZ\XtI5&jgkO=4.l4lT?%6H,nHL[^*Mk$4l7`sIkXBfBfaP6o52i&4a@&Q2').dBOoik!:dbr#L)=CZ_mPlP6h#UX# +%APtc!HtR/(:WDK-dTj_r4?d`N2Cmc#!^h>tguD=ddg/i]1t#gI6?W[_#h^Ll3N0k0LK_k'4i9sd0Ntd?,2j`;5l;0g`7G&DMN^0m +%Q0qpU-@T3\UEVL^>R=*b^Q0P_6<7bJ"FAdWn4q5L86KMf979,VJH=u6T@qrf6&/BUuul7 +%]Yap$K,d]6dL2%[SGupFP=--W*s+gXH[).S+e5JsN/M* +%JP`Z@TYHk*H%?J[&b?(sF23>&!B`mN*1Z6O>72kBH^6%o7jLlZO*"3T-Vr)o#Rng^U9Q(1G?H>Oj:C3;'4+aS6#:4:P!uB=ILlXf +%9Rb(9+Ud?9Q!G-H*s+h#H[).[+e7cT>72kBH^6%o7jLlZO*"3T-Vr)o#Rng^U+qcpJLSY"')?TfUko;57&V*q1eaa?9R`',8X]L= +%`]_H099<4GVT"Z-JKahP4AYqf:A"%X"dJUAbE5"S,Y.h6BjXFs*oC34(m)L+A+-ruD:I^L8n:fR2dmFN5s"6` +%">=Hc\OrBpSnj; +%f;abiG8b^dqP^FWaR=\*q@gLq!$Rk'Jus=P"[1$<5_)FD!!9OF8r,aH[62eH^]Z-Rp&3kMG^(nBW;bo`!-RD_!'&Li:Ogg0F&emE +%SnlOP6i%&W*<#JJU'S1COq'QS+@"g^+?q"iej8@')[h3?q+EOslhj3BH[%df<.T+t6[cL9I]$KgamV(V>SX3Ck8Ns-4S]:i+FaYE +%MI:3Cl*+Y$ne3&Jne9G[*CQL'Yn.b8^I7+fhHqCT!;@0N,rh\@C!9$:3sE5eIT4=.oLH;P7t2&ne">P%qM0#6#rNM3&%e,L!09^# +%!'Jt$*M,M^CH5cV!+dXHFoUG$G^(nBW!;Dh!-RG@!0E4H(]dOUF-WE`SnlURF!KW%q%:]aM'g_W83Q6B@0d.*_@R:<@3n=9Ydk;^ +%%RGrsAc9A'"*!4WtMaN#PH#o/u0Q]/O'@ZQi%D>`.LZEM1Xl1^gIGjFP`FXiFFqM5)aIpf7'o;%7ilc +%!^.c\%2G!V#/EF2ru&mKV)`")651S3g\`oGi.1`5&'0tBl]ZUk:%+;4%>DlV9;4=k9?%-kCh.p64K`,\6EJbcQ>K*C$m.-X0mp[O0jaCrmF./Zd.5[YU8e\\DbAU.ea_cA\@@J3CS7864X!hn/Qf"<\ +%ZQ!m;Dg162dqj8)U%t3UR_0;?I.K(>iH[L6F@>9YUlX1>c^@.o-aNC(jEom39.=sPk"V\5gD?JKo=$rVF1O<#VZ5mb(C0H=`SF4AMg/cHf]hV1C\hQ@@[O.LjlV\+T?9;gG06 +%\$\GSmZm1:njom.qW\lZ>28gAK$i./K5<$&$f"UO1kV".'I/k@+'5F"_'P^rm7kWX'` +%B&j'k/E\A/3E[jr.V[(MK3mf&iUBP'kIN*6`H<4($Y[4O5SANiacBc$@d@@Pi`/gH((]R:P"oHjfd)sjB3^oB1$-H`=-K$[6rP8m +%mNaBh"d?)Nq)b&Y.h=Fq4bca"H4&ic&t;^$p1`f[LNGY"X&:ct&PN50t^pC>a]fR#ZJH\C=2tn4j"cjeW2t,KsH' +%2A$j.!LEpN/>n"aB9-SB&ZEBKNPSUO)mB&N:B=e6<][DTT6ib@!W>rD%&*MT(n&p]ogXs3d)jn[WtZd2!R +%qm@)";6PCR(98EL[WC-20n"-sGS9[+ZaVl_T?9pM)WQ!jf-2p'E5,\C9m2atf]%QA(R!\a''*bIVNC +%<0r$1,?KIdn>#G)9$PVKQEZJt.UJsm$ElFcC7k.Kf&X$%bEl&:CGRF#[<+rppGZZ[d;TdN;E,&`Jn),CodL`ui]&=7GlmeQi_tuK +%9"^MNG7jNTa#&/N8%cVLMR_hZYKqk`GtdX1ZV&p90Tg^JIg+H[j-WX;C2&mTOM'V;Qn +%HhTAiLnirHoPkhp1<":iVItBi[5->],ZnnSI9%1-Q=HiPZc<4%NthmV!+DqrnnZi1HXDF3+aA4B$CU6;\#6.ll:=L1+LjYLn1oKG +%HMPadBjXWK7D5AIj[dji8A-3iMpsD?:2U%>eAa3qErdf8+'+anjmad[@#2oR'JLSRI7\%,\f2i%0)mK8("EUt1S,I0\Sg4c&dN[o8N9S,QE*%E,(MO=G?@4>LT%<#,\#+X\U@mac?)X5sg8"77`VAe%2l$21\SU+$ +%PFWg^=QJaYk$PbOR29%bF1a5OG'_AV$K%'5bR^hV1+Q=l9k&f*XE!`dmY&^q):r>(e)EZb[17AGl+s!-'n'=YnN(GeZS>Hj4]2Wj +%SlX.#)DcU;4O\^D%o3fEHO#*/T!si;KFe0/-O2QG8N\SW_9uccQMO"Y'H:Fb:Vl]@n6JrT,!e",JQd\!@QK@flWIb9NT^.>N4'FF +%\^`MZW\lg*+Idn]s/^h'"=j+4KM$Cr' +%6geqU+:#bM&qQj9"<"L_g.qj+?X"#^6\pl'-^NG5Dr%bj4`fs\)!C5-RAWF?XOStj3s-f'i?CGLTLQqV3T^b/;1Q?jA0`U7V`c!t1ngTt2N19HWg +%)h'$u[V)cL#;7"9UK*.IdTZ5n8b'#&b?,$d3Yup%Q7U;r2PJ?@H,ru)!aQnL=:a>9Ohp'-^=p(L--HXDE'W"[hr1647kL[J7#0p+ +%lNgi^fm38cIdKntHF#DDG2%@QmmbQlEn03N5L;'A#@1VAgJi6sF1O.Zi(:c+oM`o\!5=))a_a#4W$e"W>[3hYPeDhn1-\tWUh15q +%mrTMJdPP^u:o9Y?gX0IXb@7350`0IaNG,R"O&b7kYpPH+G(jnK`$@)19kY#IDCO"l(rh_-N&rDh@(*saXLG*(__3L.CJkRZ%1&56 +%Td#^L&PBqS_//"sYb!(6]N!S]C@ta48s."\RXdC-'O"H>=@tW%"=f&)37G/;iqKY.>/`/pM5BQa`lco#\7g-6U=3-CM:D +%11pM\'B>8+G#Z&sEcJSE(cDo&?5N5oUa,(*Z*Xn::!epCK3%VRN;D^B)E.Zs3?B9`U^Mk-)F\JN/0Gu_N_)!WP%$B(oR'5E[FK42 +%$%$$croFX;l,I.T)5)q.qc25qY_ItPY(.o;,;6F@#+%2k&["P(aq5BK8PGu9Q?FN!MNN]dBgm+P^RR.3PMI:2J=SeS"1f6V'#>:6 +%E1+4oC@ti]la$aEB&p,"'UWu-D6p*AEJ_bBS/mg=r+ES3s-)nKE+r>=oa*#.&UPF)da6`-V]1"G8l-RXHufW!^tA*2$fILQ0EIcB +%.C"GPEB6RV6?H/<=bgA;0sq+4AM4nk;\$1cFsDqZN5mB?[X7uBYo[]4cZD+FVo@,Nd5)t83",e+]GmI_uNpan/>sD-e=78QUDg;$ac1l5?$."+GC9+8`9I/aMg[=`57%;m="Z/%YV_, +%5^,kk2Pd]Oks@icGEE;VY$&8h8FR2S(?ejRQSL-,:-g+G.\TP!5Nlh^)/a)B3EMS.I^M$M$(KA:g_d26Z%=9efEVN)4Ifk<5rb?I +%<=Ma[V5Fr$>8;n+bTkk@G\:['nIDfJ6>6;&Wdtqkp>jCgC\t*=@6KI_R3mLURY4T'1"7G@i;uEn198 +%//tMQrFqBU1E&]UX3O%!Y84XmZq]j5S7Db_XFJoR[Cf27CJu0J-3bQf^5E9D0IE>8f^-kV>L^KK5*cE-8liqt`%gb6ot*8P<_O-A +%^VqmTbi\uu3P6@F#i-pph:8hQbd`K_O6VkYeVrrk;bD$G74qLX`aMS.8^,q\]4:n2H1eY!;0N*cMm.,11@@=-5a6Y +%@5#m9a9eqp)r"]p3q`ED3aM=_+s4Nd3?]pCD082L?so7j&[\iC198"s6NteP$!BmG8'l_&!i6dDI8$'/(k:6ss-%Zs(_e +%B-_UL#IBb-mnBn?Ha37F@`kh;=r3mu#WT5bB5j#qn"*>A&61Li9XSBJE"lV/_kM[c#?uJibMkrDWdn(oXKn^^b+l@< +%fRos"HX4N!]O?!"lrA38m";fY@0hd$,L;lk92IcaZP[bu\JjjIG:dXcJ]Mbr`$Xn..&e#31QoJl!#Ds/TtZjZNJ("4mj@RTP8H<3 +%5]'AgjToY\esr^%=1.Cl3Hr5FJQICPH)0Z4Mut-BV>,\;JKO7\V*@bf\&N +%`r9"K\1qmf:CNgW@C2gj(M-T\]Y0dpK8D$\46_Dh?.fqs+)!IchXYQ8'Rl0U=V7T6!\&c5J-GFsG\Su:-GC2rK"^EPSWD;`\>c8, +%bYZ4)'dkWrOh"6_^9^C51;9Ti2/9Yj`to.(C.$:!?/r!:n0.X@>IS:3LuAo,0,.["<.i,#`1*R(ueX**0A9Rp&!NH=/gMH;UpuO)@q0? +%;Hm0K##6Ko)VFm9`L+ +%me3sbcZjN`DX8APR`D2oRV?73?5S#Q25f$@MGKJ$cD1[Y5M#\$eg\D'kHHK5H?7e4$T8HHD1P7d/n6f274MJ]?0J#6li[kP@Tp>/ +%=(MYc26omm#Q4\.SAql.pQn_3L:9_&c,7tF>K>q=5M+]`XKMll0_au.@:Rq01qL)Sg@KL&g$.A-;6)dYlB00:oF/`P;QjI: +%9)Sgak-Gu/jN6d-rX0q2G0P_BPGHF6N7u_*h?a"atsTECtmMVV.hM;s.*`EP@qkud.S]a +%ELA$Q5:`nYloWJU]ArYA[[-WrJ*7FBm[GSco%,h4mmj.mhP8mG[G+J7F+^j4]r;g"GASgOH[F+$Jg#Nol,**!GO-=6oP:mk"^@hs +%[OZE7nn5Sp7e?#;caFae:,DXhE:C;!q]fu"]$H,60[pc=B,\=spdMeTcuQR+hV*Pka4^jtqR@PeqgSF8G.72,(U`Qp?"UXX>;M8j +%oV,9rrOaj):W.$qcu0qK`m[bQr@q\ALQ41\-RZs8;>\2AG5k^g?9r#@kc+-3=QDp\O-03Oq^\^7W0hj=IOQF+oh&e46`(8Y`tS8q +%mH?t8-;_'7?g?)HW;HAr"FGG,CitA[/km#N"0sTub*\-aAf"%nR'=[8.0>l;P>8WYoPnE09r"h.]AGXYO`$X,5%5-.=SO@XU7o>I +%n5$ZA%%XXV9beF3'/noa_hOdUSpqrMpl&+R<^'(L\RkVX1"e3>0Apad_AApA1Jh0&i'j'W1T]L89lae +%@NlL">M\=_m:dL`nc.Ec_JH.YcJSh/"G`0`H%t-OVp4j%n]\X8Ve0XES`sQnAlh,r'6_mYViid,OX;PM(ds;3H,:_aLl'D8@0\Yl +%G7>_>&SVo&;,9Ub&L,[q__)F5i]'di+>&i#K\P+1KPW1?f=/W''hJVEB$^[t'J9S]P#P"4?s]1i_tcDf&n]!WJ0]*T"E`3?L1;Pd +%80T2=raO5"9a%!Pdb*lB'O`P[-B[%58Hd8=)75KtOq::JT"!0B`,H(olo[j!VIQ@sR*!4I@@!$4EKaKO7QLkuN`V4RH9p0=CjieG%IE'95h(2!c'Z4<(t%$<([6[TYu=P:58 +%k;A'GiBWlhhf[cqG4kmq`O-Z2@u#ARXB`ln&Jd4bT\+@Ia+P#9_"htZ+dtj`$eam]EVpDW&2HLW[(?bad?at,:1<\i*Shr-&,V'% +%VuZemmEqk;dJ`d$k/,NPIf9`Hm\e(/j)Y7VIe7IVcPN&CmaT+0`nEPth@:b9+m#.;c`MS*UeaBt^G@q92W!3/)`%nkW^f-_7+b"7 +%ZHQ"lP:nCV8"smXQKC%7aV7@rf6M+$`=^A05.:^?V'u5r/)"Xd?"KH)2b?QsQ^Jp.dZ["DL+"d%ZmGQJMEb_CRS&e9j#HF"bsa^B +%T,eo1g>a)>TpLJ,I0oA>9>Fd9hqdII(k?o5UVL=4;:5PsIc"-?W\fBr3*0EWr7eE?iuWUFGbMuK/"gYhY[GU;%D8Tntk +%`lho)IO6RVjtZY1483^PQ;9P\)b%)ogqq1``JRCNKeq1.`]+pWE&Y6W'jmmq[!L'U61JYZ=JVR6JH(<5NpjC@ZT98N'SCo*)[kGJq6=dRH5m-9c^BbM&%7@nNtC%?T#K9g`?D99!I,Hn#5Ouf[M]0 +%T?-+O&SHhCpfra"E=N4pGkXM='cc&#Ig5[nUY?iNgD5q7q^:Y(oj>Vl%_pmT<-\?BW0`#(jVQ74P:1SPkJPTTNNZ-Bs$[I.QMJ7, +%8CXi&aI5=iDb@]fZrMJ#DG_'E%+buYo!+>hknd\5N.ipC1Il9gpO1)oJAZ +%Q[hAILao1j>RS9u9RUOD=CZ9$nkU0B[//4D:KX-!bYTt7+RQK6_3c$bEZ8@`a,A202?,^(/nE:ohFi>O7`\E$4.V=&@o+_HYe2%O*&Cf0VKc9[KT%;T3$K6&D:kt!! +%Mcp-a`eif;o%SA#\)h\5p7aoR]k!FJO!WO"6 +%1A%Bb3)EBfnd.P?BppH,h;QM^HA\VW'Bio9/nRS)bC!Ta@)Bq-la=g>;'mK$];f,_I"I%#Ul&,@>U(K/21t>9,+.;./0'80k'L^\ +%2_poED1FnTRF<_)E(``'V_V`_2^dHTUn:,]N"TRP('nKO'Uj9T)3o/P]YN;Lk&kg7hFSQ@fT/E)pnfr7-8L"uUS,j$CE?!=JO#2- +%UALM@kfDn&n/L$RiH@VZ@IV<:>bu+](<1+g?'38l4\JN5!:-tZH +%F)d=!it@U*9_oX)"dQHqU:H4Q>0JiAbol?*'j9KAFR9\1$e)%;\d,`XJS`_%LD41:rQ%uT=\m3TW&(iU/u5B3-cm3cjNKqVRR(,+ +%?s#QPE+,Vt_ocGpVk[@Ch%41+3:k=gT"<\_NC7GT1;fM/-`n$BRlH%-nADGJR:5@09TFXB=fRDlQ[2U?6:u='M3H?i&t)2i6G!Hb8&OMEo#ta][il!)Q7gkU_9aDK'H/rP=?qOVMQSFmG@43#9\(%@(Qif]Z$"Uoq(a_=#X&dAk`NcsD +%&L\iWBd)#c?o/j_$ogJ[?+/MhR/bAEQ2N*]b:_?gCkFTACI;]c +%l@7"b)Co\^U-oA?UO=iCgXq0$.)UV<3:L^V7%F/ZCetI)+]0AiP[=f-,r4L9;/*rXHRmiJ&]`$^4q$^YnV=/'1%Q+/rZmT1=d#.d +%WO2.N$Cm!:`$cs;gF.f.P5`cZq=#a;5VK%Bq7u>5Jk&^n59d5H>NGlI=8[VlF!FqL%Aj*s1LCMNUS[12DjME:"LGsFb>b5r`UnY/ +%a\nkC&4UYOegISX=^>,;Q6`p).e]q<"7&YIibGi``/>teG-MYD9I"'n-fi]MXPo>js2ZdS1qEc[HMsbNS5Paml):FijAtE1VcFJV +%YXcYSUddblJ-+4E-QVRs,U"Nq5EmL/em_Bs#`a/n`nl1Ub"u +%QJh``COitjA]%_4b8cIY@PEQ04l>hu1NJYL/9frGB/Ip0&p$PH-\[*U4""BiM>#*;4^7YNk4m,tbCutq#J,(@*Y8*"ao$h)oB!'b +%?X/(E3-o^Hq!e9%E7>g(m/bNPrHa="(Y?FNKX@.F>IB6G +%GCuU^/E4A;`T4-2k8Eo5@sMEkg2$H'\uXsk]A!U1QdnjB^%U]`eXl@.DXI9b]l%0nfP$5a_p88OR.AMYhAd"ET=(+`e4NP4X'FK3 +%Y`2^^@;m'tL-N[A&b#CnrR'K6`c-#YLb9%X^2&60e.m]SUF?@T$Q%:cf!+5;MaXTET\ln=V=(#P[b[rO-7jIY+V*-u:e=Wfa"XWN.PoN%-'#mYl+*TlB1#Fg1pX(PCZI:VD^I#JC9PIqQouG=E%o3JB=icbo%&i7/$Y6,`F#O.uG0]s!+F2r6`B[&4SSG%ZZ=hp(g&G/qsk0QaVV38$>'n['XlH#s+9@\hf[Vc9kKdkCV.Uo3\,s>Fje\m6u@YkT7@W19,$Z +%0k3(]_.[-=prJt#)RoV2@Ic>>eL;%*/6t`irHY%_@:$NRcmQkV?@EEQQ\oKm@N+Apeh:-*&2/CN'+(efSQfh@'Y=#9Hi)*]EkiUP,Pqekr>Or3U,-j4Vh>EH$sWXd8.fc,[6:j7.Z>H.'s/!BiMjr#=\)7_ETN +%(?NtImAP$#H#hF!*I#D:g?/t.M+0\%4I]NW\83!eb[_U*CY-A&>C4`^N#VYbDJ+pN$1)jDWY0T']?u,[)"$GkAEgYTD7<`RGl/7H +%KDaJjK;7Za?\%PU^8@+bO1KuB7e]@KkdW_FFI]`)P.+K,\o$p7!h3qGUrC3l?P5h]f^1VXIb"S)rFGCmO5aK@h`MkeT+=!]nRu7^ +%;>UeZ28.fD@H2:P)H5r^C5`\$=5khmRkTFcD>3hh8.X^YAiA:Wi)MusmdC!(!IeuC&nL3e`simIg.qNN]/u_CW-1E-.jFX#X6f8dZG/@dM"#LtqEMo\5 +%dO5Em.J+JC.8uQ1HuE*0W,7oA:\6u/Cn)-15M$o:C7B8uE,48Nba&M6N;`%.T+P9s+3RB8l#iEYPH/NRTH<(1+!AHDg.?75?hhUe +%#fVdI\iD?aoN]o;AC>%8iA]#!k=A5fnGE-YAcIt")fV5"d6k5(K`'m-jfumArIH'K>,Q;Y@PECNZ1>[JibZMgD7^C,OW1S'`.>[07I4 +%F#36\T5cELEDYW#+rdkf[I!&:=NKp=S6c)3s(!!q/'$jR1fL>_VE.nVq;dR\Rh*Rt\%OqJqp3*-ID7T+2.1`sR*9S_=T7MYmqmIp +%`6@/tTPdIg<8j^?mkoi<8#>cm6?i"N+-5-E\W'E)h3a4Tq5A.JibZjfef;-`j%_P2G"o-?3?0$`WG'dDl8IPG^r."'p.*2RIa$"& +%)0c'GVd!&=MD`9#lo'mhL\"=r1nTdWHHsJe]iaJM\phDBT]^R#[f='bJ(T$ZZ>EAW8Gus]-Ocp%Hk7u7P4=Ab<`do;kli=s>:1$bar1q4 +%5%Xn\4f5G':$goSo@2"&VUZ`1hXhb.LXQf!fCi/b5LMN8q?I*:B5A''L3&,,R'?%Z$d#PPn)d4jckc?p_jQ2($e+WNR5Pn6[aLP9 +%B9[-O"t0(U8f8JHJ2o-QTBkZ&U]O^oDLXM2>-;TNqmcm2*``l2-XbuFdj%)?L#QYJmFBSc);(tpk0;=NQql-gF;[Tp=mW:ag%BXY38.hjChb$eS#E7?q?=(4"%[5TD#K@qQdH-s];@Zq!jQUJO4fG\ggFusc,F-Qp#&7Yc;.QT+`,f[os<:nE\ +%j/"l'8+h?.NQJ@^9.Z%/5m0([o"kZ-8O%[.%0teM%:3\rUcq>J:r*d.C[VHKZt],LFM'i,.@'OQe"R%kC+df#jC8i,33,lB6%+aJ +%TM,n=U\a2Yd:s3H1[Qo&W]c*I(X0OKPOupkd@aSs8U8o4>k/r\=s09IpMX]/["9lk7?_>cXq$Zrmh`Z1%WLorCgtLii*$OP"3+*. +%jVWfN)>02A(=".%FB[a2/5Tl?O/;3sR,PH@lW0Khe9/C5M(h_Z#;)o0Si*-Q7mH`MdH[(3gIpi3>%CL1bD`$e^.Z9!Hh$KoBA\`UcGM$EI7U"/Ed[ZOlD'oF%j+!:Xkid@rO'&:Y-"n0 +%?2o@Z=.?4\#L>U/IrmJ^r7g1kO.#ueGmKHa2j<.VFS1\F5O(JadmmX"[NF0D>s3iBlJ%q[s6GF=EUB3?I.6%Uj6tssY'Je8l.p:9 +%nX2!,nitA\nCTRYS*?!n8H636%[I(_B);GO"9%Q*4a;@RRsB+X^3N@9Hj-@t?Tbpjp8QERDEW^"+)H-j05nb'l)M=%J$C`V5;nmS +%qf'/1r!OQQ_;iOfs*jpuFnjA2Iq3;P+79ZaUW"S/I>_+O(O3Hs/p=u)8o3>?GeX"EYL/Vj&%943 +%RblYGJ$=FucEHsQY'kNUrX['/%mr3A:SFgJ,B._qdb5kZs&_DBpFlPm-i3:-m)=_j=-"sE^Q%:B4)a,F)o)<+5?Q[m\p`6.qBh5Z +%rZ(nm!t@WmlG*kf=)\+KJ\g*a6VX+ElTjd*HNjbJC\[WBeS@DIU#BoO=EscS%+2CErT7ec&SUDn,LGdRQG^34X9rT`iqeh5dis)dW`^U_+&-.0'olFgg;B#1l:dA+,8hfO?R]CB9Q +%YkHTXGO'$'IpCl7]CjVp5HSf#p>F9)qYnKo[G,U\pXZ(qo,lT:-u#lA9B432iqQNdVQTpepM9<$97O#hCi?hLIeuO7AImmHCNj*e +%rNUOTfn:5ONH5eoi-"O__.pf<qlX+"7 +%r9sKk_dECHh`cFm]Dh;\+6<:Yh]I'oGCKGWg%r&+'=n+:qdY-SebH&/lb>j!U>Il@lg&o0CO>CE4l,bHh8aoVo1E*2]6*]BqU+p, +%0f1]#p+!e`^,ruTl)O[DnC!@7.m9TRPs6uq(k#25up>Mjqe]g%>f:RJ4E;A4im5LAMrpf4AEch&25;0(F=1uf1DgQt>rq_DF[EI>! +%fsT#\M9V%':N$050#+nR\p*u5qOL-CJ%P[.o?3+TQ[ZVqnDoABbA[DB3kftuIT4(fG5(d'DW]*lf2$UngcW=EgD0FhdD$uIrsTIFf"bD-bf07hLD/)3BCjIY-,/No'3WlXWOatYP+!Zb%1J=eN;+1Y?/L+ +%CgP`<>^[=doY]3,YM]&W^:\dXhUVZ(ph9\B,O3@NDqaL.X8Vo[f<666h"^^!e^;\^f/D?l?XK!]rEd6^pW'n\?/,3a+KmqW[bJCe +%r3rlE\b:+-qU)]8NXqae4,ABsH*+RIGjjA]mC1u'1q`PT]s[2!KC&:(3/d61^\;A%^Ad'Lh:L8NBGl*oAUjI>p"t461p=C&5ME[) +%h2:4Xj/jESDd;%32fIL.^A7[rZEs/qNGne5eSdSHli-+foD74mNS!(fs7W%"8Te=lpKb3+!JW9rj(qD2-Kbe)c8hM&qrN;(Q#*Z6 +%_p"Qlc@*9H?77&-\m(`T/]kHRE"DZnN-cGC68Iuh-:iD%da@AHS/n)SmRfuF4@u\=8]![aPaqWEVmW/j4qu4Np!_:GJ%hf +%]^*Ohqn>"ZHlI@-!BTi7IF?-ia>HcMiS3&E?0-Zop[V?s!#_E0D\IN.P03YGrdDg7T9Z7V0L"6=X_s9jNbfi+SBQhNXR_O,dL#12M&=o&IJ6Uj\[-[Yu(PlRd:1b +%TaMHGf@%>40LmU3/G;Q3bJctJU1RW)EGDGFktBEYf&op5*L-m;h#YB[,N[&L1)Q=$#I%m\]tdN51l'WT%$$<$EKBLM`B*EH/pSFt +%^3fD&?JaTXZ.Hj^*[H;4VA0;"Ao7!i>H7#qRWK&GOW)`*+sWn?/o0X+/PpCbA,dOFN]mt@HTXWb%Ut&9XU'Ib>qK.SoP!:=cptP+A3:qZc*6Vm!b]#20@OIs0mq5>:4!LmT"rGp=(h^] +%alFV4&HsrBNeR)@AVOEo[K;5jpbYo["_[eLQK1Jf*DGk9o7IW^aKo]J66YI8$Gok,&Sb#VLX<=FPlR5V4gWgs8MQol-0b@JY"IMd +%Gg]-tLG)$%&OB\\.`.%CAYcgQV]s%:LHBOH[0KQY]Hp$WSr#Ot+"kR\IbgTP*mt`7o-H/i=B$2]A,2'2($i>Mcidg5jhVi/qo*\? +%Q9TNPKgW9c+"BH'IQ@m?/l5(A31_;M\VeR=jX/aTJ[b?aCRuAdQFo=oc2#Al1#l@(_hIS$=g%t:FPR:l"*tT+6Gb&h:1Gq",9hCD +%+nBk9-<;acZoB!NlB8i+SOcEtJ!SLd"Hg9T"YUl#\V_AG`g3nAoXO#:LR"3mSo%,GDlh5V33ZeUr,c4C7YT#G@1BcB$-F@V,uX.n +%,a7FQ`js%8lTQUl2BsQFib=s"0'$,Tle0K\^1o!\ina$&Wn&&GW>1m^V;538T8lW_hK5U*kb]0hBe89oFO$:f]3!=CVaD4&cfHJ= +%$D(GSBHN"*9P5mE]I1=iG?-^_B!(6*90pd%CJ-e!'#N54Q^KMt4=tdJ%Eb!_D^-?%!QceLK%*0X6Kdb$.id[DHP'TnD8fKPj'(eV +%HC'f&41gf1b5SMB?sO7-VDRnmm]n?>7*BRZ`K]])5eObSf@#r"e6/gt!p*:U=)]7]f!c0.2->i.Wl:(#:n:s*URGh#\(-.,-<+b^ +%\5M]n%Bo(s08e;$Mcd,GF3:P<>H!X69S8t`C5mD`n^]\E@WIZ-G#uq?f+i2Kf=>nE40ULmWEU=L\fEoc[LSY1G%d"t\#[6i^:fff +%fa]o%HTE$RhWmj]UY(>`3jsKnNb/+J@s!NLX^/jOaE5>qd&:/!/f$tM8\I)EGt-n80Rp&(1?6Lpl\tS+e8RbOk,V'fN1MBNHH//pdjR(*7bbe%,DOAt,'b0S +%$B=1j[[qKWSA:!2]MNVAkNh`r\faVWn=gcPeeahKl*M^#gu2hD(@!Gpq(,35=*/GP>#dc!gXT`(MQU+FB!SR44L75T%`;"//d429 +%.lQ4t27KhB(TD5[4^:SIhHfLF:4C5IG2iQ@h>8&MZ;2j)`dTY"71M:\YT8Udrnt$T>18#G0fXtda$sh=G-Vb%oY_p/qPipl&ne[` +%`r8cXW8(`Z[ZYr?qF@S3Y"i`<\Z1!eqif"k?I0d4(qj)bJSZ&IV-gbAG8'aJq`"BRE:EtGl6e-ta%JbOqf.O4Q9+Fb<):ELiHLA5 +%"7"8l_:YjeJcQV[q)%)TYhHmY]Cc\Z:kn.+@lgVCVgmUUFfUGbH"n4gVO#D7C:W^7=jGJ(I%:4Qq0OjP=jBCE4CT2r/5VgRD*@Zk +%;q3(HB6[APE_Io,jN9,X2FICYlB +%Im^4C(C_GrH[co&J=EJFUt+@nbgJXWgXE3lSile)!8u89iFQ1u>dpKaE4NMPq0,1Jr!E=RAiIS*aje`5^ +%;;Fs!]G:1Vc2TNP`;'9rT02,^8:R@9po):%E_F`.(h7I1WSJDe +%s%F6Gmg`TP1"AE*lkcQ#If>ktGE`Q3rAm"=e;!sYnD3(ul*[U(io9I#4k-q8^5t4`l+f:g?8?8mY[f&C= +%]?d)E<9:FT`b=+,O[sgd=Dcn6J;c;J)L +%()Lu,['9jm%%P`_b9"2br4SdI!_f6*hRp<&=3`&G]<_kDi6'>Hr3i096ut>u!]',bjW2NSWoOd/A3V'm*JDlljF%-?Bie6Ol.$HJ +%Veq@]GW]6KX//mhAJZ8!$k3W5e'^Dc/UQ`=Y]7V=r?q'SQ-WL$7lUK-(JZXAAhP1-G<(+2Ic#IH\T!)PIRKM5)i,Y27lcm`k;n\E +%o0-_("?Hi@`P<$5)9YHSIc",W0ZC.PL/umAM5c<5+o>@Kme]ST%W.+YikFT8e0gdu5-f<2]Wn"0$n4YmCeu](\j;[+:fK/XmABh@ +%"0GA).+YffUqe\D<34sM$'M"@NLl"r"T`/\d9DK-s*/$GjE;8Pa;GFnoZ71E)rAG1^k/&S2\qU*\.kQ*Dho=Z89hG_pJc"p*!:Ql +%J\%$G:dS>uTkgl_\YG?J]6!);Bl5YBmXIWL^YJb"Dl$:o*TiQpT1PgiL6$Y=,(g@t+>gVT?m*-`3@B[HW>'i-Z<9+?B<"=0)ed2OnF,TXDHtL7U>+'$WGiMp;`T3oqJG^uBqgB^_ +%Q!2i51a<&WHo3kQJm]7%,pD#H^Z&;u28LSBbR?IlN2(WLb^DCA92T[F2do.Lg:0)-(r5lM)FFVe)UB+#U)8IT([>c%6*OnUVc&c] +%K7cZr>p`caZ`EQjlCqtt3&4e\_*Re^o=3fP1EF1l>J,T+?)Kr7Z\r&OFMhT91uNSmcpFI3D^Oob*Djh!X+\@7UJ2To#L\E52#*ML +%I"$`io&XV!'3oDP&N.-;o)^1I!:80J6s.&29-ob:>c(?T/pi=bZ%0C('Y6#@FHp.ZA&F[ZT'eptG$UIq?uTfVhm3$)c<+6dlgUKUClZ<=DSL +%YUDOQL#SKG--#VdR*c"t0gO9$pfDuc;,hnBJ*BQ@0>Y7tXo"Z@#hoIk)^"T#%-SNU#P2br4KJnh+Jp&r@O%L;8LEEd_t2?&$ard%3_,MC%nN,Q>cEW0>e+qh_<[Cj7$YBL?>AWf7n9X2754n1S#nXKu$Y_h_p)lA^-);"=Oq +%\A's@V+g#" +%R"lsZVgNb;'t?m)2#=&?=578GA@uYk&^$lfoe/[dYg=/e( +%C5-M[b!>Y"Y4,9RmL%HdoNk=9>nNYcZ;An>oB +%Ct1M"7%*^j<(+%tAN==ne +%EKrj-NJ@bC!#3fu/#H"]$O7h(OB2J%I'p;g_HU/pfoTL=k&-(,T9_O$IOT^9$uVC)fl!m39EWg.q#T6rg_cr7V`H-(CGrs!AAVHHr8*E-S3T";e`)$)0$d0o?%29eb%OsB +%MGGXMYSpod>I&k&r9hQ-889n!'dSG9Xfs!Ggo]Rica9p5VTWX"5ER9seos&=f,H.$j/=4MD;+(3hcjTH[U>c1[PadYBKC*-Dk]i> +%"2Y6k@fU4SVrf1RN(,U1$[1W\cd;d[c`Pu"kdg=7CnY&TLr$IS!JJ:di#FS?7tLC)0saa;G=O7TDc:n(%ML7fOZQM`kAq)sM%K5W +%mM/3>OKjIIm$YEGYo!As8JbS4Ts,-Ynq.m0_T#%(25c\m/is,7D^'SN;k3I@WYZEl#tL`5#]"6s1++d0";;58WD;"H1Q\mL!b-;J +%nr!BReS238I@IPhc%*lg:!itINDh<^3pq&@?SM&$DhhX +%gPb58_QEHo:#]S9%9h1IY1*US@P`[*G'\Tfq +%V-.B6(RK&`$J7:?i-2HUrfnY+\q.:kfT-PZDAL%_6:fC@@GtThbAY$^>hmHI?=ANLGc!RE9/C`&OPA6Bo1>bElL\Bd\Nm@;mhZ-< +%'\]>(kZO/HpVUA\YSBs%9I1INM-!`pY'IS#1Mg4=-i;>nFG?!d(,^"-->eX]GNXk)c-&\*'MIt4@*QFjiB8]o?;1loLibAV"6-WR +%N=.V@F"V\sp!on_(M#eUk>CmUCoOr>kub@kmh&2_-::tH"k^Im>eIks9K)+n%"n.qr@bMdV`B>Nl&kNkA;R1L19>6N48)/8X%9R0,-u98GlEem&hS=6ADQ=(C(it8$7limFHP0gI-_8jUP1dE!%@YM%sC5"9MQ_nMM,>*Gf>c]OsamC(`3,&j?-GFK@sS4QXnR@*$,iOAV]Nu=*Hcaa-@8kXT9o4 +%>:3&&P)&'hqq8Yg'rKeSAIDu)r0dGq=6^rOaMlCjISW=Y<(DKo8QA^.?EBM/uWln-UeN2PKt,f0j2f%j`GaUFZMg2^S6]%ks\X7"7]Sb +%N&PotZUUU@TbEG9l70>KY_'t%QF9WN +%QL!D$Pl50N"!p+];\&u-PO't +%ldg\^>YL$5cK#G#?uK;G7.d9K-M"&&4$RqAH($L1b$;G\!uWOdntNY_3!M[`]`usTm(erH<9#,I&"DA-h0bDAB`_DO9fTeCY4k9` +%`AUZ^?[$JBY$r'>d[[&h,/3B`P)^PG1+8>K7jXmgDap_H.QpJ]_p^37SSpAUdHQX2baYCL7KAs#7A_in7pr?GYkS(8MJ-ZY)-93# +%cr1W:I]SuO[[T@ORu:[Us(NVOhWUsJ]%;Z4oX.jbq00P&W@GfeE)cd0i9_-BJA2,l?ZYbLdJU)d\He?^I&kPMVK3[eGj?KUm9P8O +%>7M5(8lt'@c-dMX[Dl/TnZckIPm)ft2BJ/ETqho&0P;EQ1QP#r#Lc#>.PKaD;O'Af^c:=hAHY3\90msN,ohp0[6/s'#gJQ:IZZG.-E$Y4nZRnR5Co?I*2FS=)%bV1(A'sn?J?P2XeTT6tnpM[pDcoNY!QS"]KgiPr!q%)V\m8l9'P.9EsIOVZ: +%)c(/JMO-MCMCTnSTl,a)hqfW1LD=o7NtG#eUJgZ].T8g(Hm%7"a[C0DY&rP;;qe=ar1[6?"?Lg5T*`WW_90geimshZE-60a'H^6, +%3^X>\n&YC>E2o!Ne"LAj"@b1IDRguG\6I`ZUMtc$k'q86iPW=R:PWcB+.ZT0fY1G4H!0'R?6A[5l<,1KOoSM,H*FV4\RT:8%9Q1( +%hNDhP+6i=G`V9MFI!f6O]cUAalE`-Vo:odk$WWd*^("GRE^*pP4MEr!N668=dq(XUU`JNKDfFNJE6g132PYM:1_u\>I!Tr-!If%] +%LX3HC5+T=@XZ,DNEZUibVrK]`@rH>HrUnY:Pu>6%"b(+WM`9`sLB!_)Y+*W*YaP&XD]1CGk(rle$['0KaDWu%.6Jb62*Ua'=U)*( +%]R=2^l%?/LprQVddpJu5lDeKsJ,P((Y_R/11TUb/N>m>=(q!2E2*:[-QV3%@?uAV\Vs4BRp?H-n[?LgdUI"VTZmJ8L&&;uW)nmJj +%IJCop*r\"rrq4kXo"cF+hh(BY!0e[,55$i3gEQ!@\n)s>e@n6PnC-V0"VM>&3"L3H?[m-X.+3FIq^aJ'iD@,4\=Lo"$43Ba@[qF4[gV&(i +%os[Eq0c'YDM^a#rXnbo2f'eU*nbBiGQS?)7cM%Y(ad\4+dr9[5iq?l\@kB=BV:j3udc2":XbS%okB:9%WJ;P[s/uOoF2S#T>l&@] +%qJRMQD]nn+&Vr-&O6uX&$dN.=(6Pb7+pLt!"LO:BBgE?"U03Y1(F0`+=`D1g(lQ9>$ti.nc%!G]dPUT^VI=5p_CursJg;4ei=84h +%#/MaC0t/*'IcLDp,JZ)>SW+t^^_);hBo<:+O9m*J7H##AY5T70A6BR+bgHIN( +%6kI0h'U3P4Q/B*$j'M`r[7t-:")Q-8$j$DqOA+#[cd[-E';J":@3F$;C*`JeWX%j[),S=U]Nb9k'us4$I^Y&-L4r=T\7jM5!XW1J[#2+We(6r-kTu@ +%,gHJ/U+keP/Aa0DlC9=H_8'):--2a4"l^c#!(]@,#Y+T7W1kaC$jSBi\req+JiK`t!<^?e@a'gS@(JV`\j^@$U^;p,CqPI%UC#)$ +%,_-7hHoO]-RT+8f#k`l2#RW1`Q3`FK-%QXZH4QGi#TbhP*X.oV#uV]b94IrF`Lt!o86-snTK#QDh,R8iB5_5]EsZe.Lm(_2O9-[^ +%0\TUgeg07SWHGhE?tY2J)MbtpW2gJYogp>%ifiYA\D4kGO84(rYGjs=YQ+)IKs+j@8hlK>SiKP[Aq=0>'&n2Z~> +%AI9_PrivateDataEnd diff --git a/nixos/modules/services/remEYEnder/vecteezy_eyes-line-icon-vector-isolated_13932670.jpg b/nixos/modules/services/remEYEnder/vecteezy_eyes-line-icon-vector-isolated_13932670.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9673ea39d5abd63cd477ce989e2a936da909ba62 GIT binary patch literal 99416 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 a0)JHCj|%+1jfTKz2#kgR*&$H>|0V!6Z*Tno literal 0 HcmV?d00001 -- 2.47.2 From 043585210613d1f435d6cb9f04100a5a3b087f93 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 25 Sep 2024 18:40:54 +0200 Subject: [PATCH 10/77] [waybar] feat: Add keyboard-layout toggle --- stow/waybar/.config/waybar/config | 4 ++-- stow/waybar/.config/waybar/modules.json | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/stow/waybar/.config/waybar/config b/stow/waybar/.config/waybar/config index 0040220..3b1a053 100644 --- a/stow/waybar/.config/waybar/config +++ b/stow/waybar/.config/waybar/config @@ -30,9 +30,9 @@ "name": "keep", "position": "top", "height": 25, - "modules-left": ["sway/mode", "keyboard-state"], + "modules-left": ["sway/mode"], "modules-center": ["clock"], - "modules-right": ["privacy"], + "modules-right": ["privacy", "keyboard-state"], "include": [ // Import modules (!) diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index 4edc818..5241c7e 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -48,18 +48,31 @@ }, "custom/light-dark-toggle": { + "exec": "bash ${SCRIPT_DIR}/toggle-light-dark.sh -g", + "exec-on-event": true, "on-click": "bash ${SCRIPT_DIR}/toggle-light-dark.sh", - "tooltip-format": "Toggle between light and dark mode", - "format": "\uf042 ", + // "format": "\uf042 ", + "format": "{icon}", + "format-icons": [ + "\uf185", + "\uf111" + ], + "tooltip": true, + "tooltip-format": "Toggle between light and dark mode" + }, + + "custom/keyboard-switch": { + "format": "\uf11c", + "on-click": "swaymsg input type:keyboard xkb_switch_layout next", + "tooltip-format": "Toggle keyboard layouts", "tooltip": true }, "custom/night-light-toggle": { "on-click": "bash ${SCRIPT_DIR}/sunset.sh", - "tooltip-format": "Toggle night-light on or off", "format": "\uf0eb ", "tooltip": true, - "tooltip-format": "Toggle night-light on or off", + "tooltip-format": "Toggle night-light on or off" }, "custom/scratchpad-indicator": { -- 2.47.2 From 8ad66eab07cbfefb9628520adee6dc41e6a45e47 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 25 Sep 2024 18:41:51 +0200 Subject: [PATCH 11/77] [waybar] chore: Fix commas --- stow/waybar/.config/waybar/modules.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index 5241c7e..f12f603 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -158,13 +158,14 @@ "idle_inhibitor", "custom/light-dark-toggle", "custom/night-light-toggle", - "custom/toggle-notifications", + "custom/keyboard-switch", + "custom/toggle-notifications" ], "drawer": { "transition-duration": 500, "tansition-left-to-right": true, - "children-class": "drawer-child", - }, + "children-class": "drawer-child" + } }, "idle_inhibitor": { @@ -178,7 +179,7 @@ "keyboard-state": { "format": { - "capslock": "{icon}", + "capslock": "{icon}" }, "format-icons": { "locked": "\uf023", @@ -186,7 +187,7 @@ }, "numlock": false, "capslock": true, - "scrollock": false, + "scrollock": false }, "memory": { -- 2.47.2 From 0ef21309f4e5a5d9d4087325bf5933e76f098684 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 25 Sep 2024 18:42:31 +0200 Subject: [PATCH 12/77] [waybar] fix: Reverse volume scroll --- stow/waybar/.config/waybar/modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index f12f603..bb1b26c 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -291,7 +291,7 @@ }, "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", "on-click-right": "pavucontrol", - "scroll-step": 2 + "scroll-step": -2 }, "temperature": { -- 2.47.2 From b14b9392fea8f103e90a7c5cce280b1d1a217288 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 25 Sep 2024 18:43:21 +0200 Subject: [PATCH 13/77] [waybar] chore: Hide power management under battery --- stow/waybar/.config/waybar/left.json | 5 ++--- stow/waybar/.config/waybar/modules.json | 29 +++++++++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/stow/waybar/.config/waybar/left.json b/stow/waybar/.config/waybar/left.json index b267c82..8ab0639 100644 --- a/stow/waybar/.config/waybar/left.json +++ b/stow/waybar/.config/waybar/left.json @@ -3,15 +3,14 @@ "sway/workspaces", "custom/scratchpad-indicator", "mpris", - "group/system", + "group/system" ], "modules-right": [ "group/hardware", - "custom/sep", "bluetooth", "network", "pulseaudio", - "battery", + "group/battery", "custom/sep", "tray" ] diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index bb1b26c..026ad07 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -132,24 +132,39 @@ "tooltip": true }, - "group/hardware": { + "group/battery": { "orientation": "inherit", "modules": [ - "power-profiles-daemon", - "memory", - "cpu", - "temperature", + "battery", "custom/system-shutdown", "custom/system-reboot", "custom/system-hibernate", "custom/system-sleep", "custom/system-lock", + "custom/sep", + "power-profiles-daemon", + "custom/sep" ], "drawer": { "transition-duration": 500, "transition-left-to-right": false, - "children-class": "drawer-child", - }, + "children-class": "drawer-child" + } + }, + + "group/hardware": { + "orientation": "inherit", + "modules": [ + "custom/sep", + "memory", + "cpu", + "temperature" + ], + "drawer": { + "transition-duration": 500, + "transition-left-to-right": false, + "children-class": "drawer-child" + } }, "group/system": { -- 2.47.2 From c9c36843ae3a147f4a2dbff59a9e83dff88ce1ee Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 29 Sep 2024 13:08:37 +0200 Subject: [PATCH 14/77] [swaylock] Configure keyboard layout --- stow/swaylock/.config/swaylock/config | 34 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/stow/swaylock/.config/swaylock/config b/stow/swaylock/.config/swaylock/config index b8de2e9..0b3e942 100644 --- a/stow/swaylock/.config/swaylock/config +++ b/stow/swaylock/.config/swaylock/config @@ -8,8 +8,10 @@ indicator-radius=200 clock datestr=%A, %B %d %Y +show-failed-attempts + screenshots -effect-blur=5x5 +effect-pixelate=10 effect-vignette=0.75:0 # Darken the whole screen. fade-in=0.25 @@ -21,22 +23,30 @@ grace-no-mouse font=letter extended text-color=ffffff text-clear-color=ffffff -text-wrong-color=eb4d4b +text-caps-lock-color=ffffff +text-wrong-color=bd2024 + +layout-text-color=ffffff # Make all the other stuff invisible -key-hl-color=00000000 -separator-color=00000000 -ring-color=00000000 -ring-clear-color=00000000 -ring-ver-color=00000000 -ring-wrong-color=00000000 -line-color=00000000 -line-clear-color=00000000 -line-ver-color=00000000 -line-wrong-color=00000000 inside-color=00000000 inside-clear-color=00000000 +inside-caps-lock-color=00000000 inside-ver-color=00000000 inside-wrong-color=00000000 +key-hl-color=00000000 +layout-bg-color=00000000 +layout-border-color=00000000 +line-color=00000000 +line-clear-color=00000000 +line-caps-lock-color=00000000 +line-ver-color=00000000 +line-wrong-color=00000000 +ring-color=00000000 +ring-clear-color=00000000 +ring-caps-lock-color=00000000 +ring-ver-color=00000000 +ring-wrong-color=00000000 +separator-color=00000000 text-ver-color=00000000 -- 2.47.2 From 412932d20d7ab6ad2e3ce1cbd52265d1d4c6fac9 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 29 Sep 2024 20:15:09 +0200 Subject: [PATCH 15/77] [sway] Switch fr to be keyboard layout --- stow/sway/.config/sway/input-output | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stow/sway/.config/sway/input-output b/stow/sway/.config/sway/input-output index 9c23892..97bf8cc 100644 --- a/stow/sway/.config/sway/input-output +++ b/stow/sway/.config/sway/input-output @@ -1,6 +1,6 @@ input type:keyboard { - xkb_layout "us" - xkb_variant "altgr-intl" + xkb_layout "us","be" + xkb_variant "altgr-intl","iso-alternate" } input type:touchpad { -- 2.47.2 From 58f2686097deab75f026cbbfa04afeb4d4a43efd Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 7 Oct 2024 09:48:40 +0200 Subject: [PATCH 16/77] [swaylock] Set default black background. Avoid flashbangs --- stow/swaylock/.config/swaylock/config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stow/swaylock/.config/swaylock/config b/stow/swaylock/.config/swaylock/config index 0b3e942..96b053f 100644 --- a/stow/swaylock/.config/swaylock/config +++ b/stow/swaylock/.config/swaylock/config @@ -20,6 +20,8 @@ grace-no-mouse # Styling +color=000000 # The default background color when no image could be loaded + font=letter extended text-color=ffffff text-clear-color=ffffff -- 2.47.2 From 0fa8782abbc70d103a91d16edba5dafa44eb942e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 13 Oct 2024 17:54:49 +0200 Subject: [PATCH 17/77] [virtualbox] Remove custom pkg --- nixos/modules/virtualisation/virtualbox/default.nix | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/nixos/modules/virtualisation/virtualbox/default.nix b/nixos/modules/virtualisation/virtualbox/default.nix index 1116887..ccd8fca 100644 --- a/nixos/modules/virtualisation/virtualbox/default.nix +++ b/nixos/modules/virtualisation/virtualbox/default.nix @@ -2,17 +2,6 @@ let cfg = config.sisyphus.virtualisation.virtualbox; - - # I like to override the virtualbox package because it is frequently - # and rebuilds take quite long. - inherit (pkgs) fetchurl; - version = "7.0.10"; - virtualbox-override = pkgs.virtualbox.overrideAttrs (oldAttrs: { - src = fetchurl { - url = "https://download.virtualbox.org/virtualbox/${version}/VirtualBox-${version}.tar.bz2"; - sha256 = "0b1e6d8b7f87d017c7fae37f80586acff04f799ffc1d51e995954d6415dee371"; - }; - }); in { options.sisyphus.virtualisation.virtualbox.enable = lib.mkEnableOption "VirtualBox"; @@ -21,7 +10,6 @@ in { host = { enable = true; enableExtensionPack = true; - package = virtualbox-override; }; guest = { enable = true; -- 2.47.2 From d1379cdf990a106c4941f389210d530b0fd9bffd Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 19 Oct 2024 14:46:21 +0200 Subject: [PATCH 18/77] feat(ssh): Add Nextcloud secrets --- nixos/secrets/HomeLab.yaml | 25 ++++++++++++++++++++ nixos/secrets/Hugo.yaml | 24 ------------------- nixos/secrets/{GitHub.yaml => personal.yaml} | 8 ++++--- nixos/users/tdpeuter/secrets.nix | 23 +++++++++++------- stow/ssh/.ssh/config | 20 ++++++++++------ 5 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 nixos/secrets/HomeLab.yaml delete mode 100644 nixos/secrets/Hugo.yaml rename nixos/secrets/{GitHub.yaml => personal.yaml} (57%) diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml new file mode 100644 index 0000000..9678afb --- /dev/null +++ b/nixos/secrets/HomeLab.yaml @@ -0,0 +1,25 @@ +HomeLab: + Hugo: + ssh: ENC[AES256_GCM,data:Tfuba25e4hJ8Ovl1IdVtDvg0L0sCc9sYTXstRg89IAUzwv/1u8mxdj9ka6ZKaSQr2QUaNWs0BoPV36O4bI2hTwoqhUarhXXZNnJKHtd8xBu/+kfMSOMGa5qD9V9m3L5OFdt+gdwhJxemeQNkvN0Vhsu4DJFPZRPmGflJ2HVRYaRW4AsI+JPqiWSEeKz40f3PQPJ2h26gF+pADmPwtEfcUGZdGnJXUsiYMC0aBEWWxyAgBgj5W+Nbe+OCopEX1qyRcR8qO+LONjuC0b5hcGeOXjWj/d1FnBfxDHeoxRGhNCo8TUk0ap1mpSAttdr55/C51duQfeV09Iow4nzUR2H0jmzojUAjKXXCkBsK6yjIKxW+4+4OKCC9ERz5mDmu5Z+4aFM7CpSquCAnDVFw1Uq9MJqAnSz6AGh29J4LUwMnVNtf+gQwzGyl/C9wE/Svm0UAwP19h6hLcM1rp6bV4xjfSXNDspUkz4Xr3RdPpTI1PemtMZIq8fP64q0FlFZeV62ctl9hCtDVRDo3fG3FUM08fa0OfJpVYjSEAOfC,iv:T8z+P5++cES9Co9d/2tcU0PbxZZM/5x63tcxIjBeQ0I=,tag:AjsulFme64/xEPjgZQFtow==,type:str] + Nextcloud: + ssh: ENC[AES256_GCM,data:aVqa57u9hIOquP367EDj2rlyQWRe3EZv8l5cC+yQQKCri2bN5IFSq8qNemOIcU9ycBnxIyK6gLerJYQQcgzIIARmnfDpbJ9w+EeUL5yvPVJN6FM7oBeaL9mzYRl8aDKr22LhL9YiKAT1nKHESmTb3TZRvuvWJTGzCMRV85ROGxZYVUgG6BjuHEzuTsc4fy3NVPIl7/4ZjPgNNYx+UNsV5xwTejveB/sGblVrHOO74LZXzUWRlQNun5nM3MY3GALzfrPrVIAyGNu37CGachtwxaPOj7vUKZmD/e+XajYVKRJ3v33jrUeI0dDmhuwJj3taoFik6suAyiK3RlDdeWoERR8vqduiyxJnVMs6mNkigzkVtifpwZyQ8vNyG7w1JNPygMYgQzjN43lGVml8cx1lZvcoBzQabjWxcNzhV8gXxoGKvAwUV7ELB6l00rUH+EeI0uU8/IFm9kwmZq42ciM/bRGSGXzo2PYG2OHOiDe5b0nrIlajaRKd+vuuzTtFFU9EwH0GPzERRaoxVK+h9tzcco/REITCE+CVlHSx,iv:bb1X95HK5tT7EJpqqgMOUxw5VO5MuzoYxkPIzR5sEqU=,tag:y2LKHm7czwyuHp7Ea8KiYw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k + SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz + ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6 + aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A + dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-10-19T12:24:34Z" + mac: ENC[AES256_GCM,data:Bh/vHdsFCzk+YaRcZe/Eiq4xfLSDX1tSV4Jg8lFgzPqXCBwCgohDREZ8LSZPuQtStIugzyRNyPcnWrZcDwDiaS9klM5sIxjeGIF7ZDS81sQnQVNRyX/m9vl6AgVtP9KHgOpJwGObzuvNBE7XnOZ3q03/ah1LXRowJUn63wB4Qxk=,iv:GVLQUjm0bMHusD0F8gJ5DlZvqdDHPsT0VwxLhHh9ozE=,tag:cffv8wKTQ9UYrCPx+3zTMw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.8.1 diff --git a/nixos/secrets/Hugo.yaml b/nixos/secrets/Hugo.yaml deleted file mode 100644 index 6a8d422..0000000 --- a/nixos/secrets/Hugo.yaml +++ /dev/null @@ -1,24 +0,0 @@ -Hugo: - ssh: ENC[AES256_GCM,data:Qi4YEvG64lJqhISMNtuC0mM02TU5KPpzdgs8x2UJwxAxus4+Aa3nIttkbcbKxtobL7ohKcMFGq7bBdj+s4zbctctknHdjiwj1caDoD7+Fm5H0RWLe7yjt5e4IxRywN8cNF59FfINl2tMutuENOzSucjHIXTKSV/ARZzwhcyZkQy//YvlReUSrUNaNkVM1VtjVILOToAXGzQx5w74eX+9JYV9FtZRTbr/spule+UDDtPZaaiFZmFfE5YjULFPaZJo2iUiirKalPodxfIar9eXzoN+bOQbz2Xys1QHNEt2cwWjERruCsojiyA+XeYFreWEWGggSEXizxv7cS5ab1e9XqtWR+u3Gdy/t1/cjoMBVXuLxQ+BwTlAO8NDgRbW0aq8q5yOsPCjShI/N4EVN5qtMUT1+mYZLCiZPPXbLBIiyqIWea/Ru8iIo7+WoF2iDBgshwnw8+uGDFfwlNh3SAwMSQOcGg06+U17PeU56Q/wqID2lEMDgGfHdqObvMlae1q+Qa9cwrp4xDw5S42NlgVaNcovUav5US5kO43r,iv:xvuRv4sqLRGv9npIVjnGV7zDPzIyS58ZKN2T23BmMZs=,tag:iGnBzgRhREEfKjE/ea5Drw==,type:str] - Gitea: - ssh: ENC[AES256_GCM,data:digqDmnEPg/Zn9Xt7+Z/R9lTBs6CeOgHgIhstWxHnvucwshUO7Zu+l80YPyzAck0pO5YIKML8hjAqj30lYqSPRzG1uRpT7likCy15MqyyQ64U+5PGQRNhybo1eYoqVFYd2sYc5xzkve1b8zCDfxj2mbmRYETYSidHZLaDilq6iKtWWSX+mnTXqJ2gIj+J7pfFBOHskWglnrVdj93AOdpG6cmnvzE7ey8SrMt9t0GzmRFAvjP3slio8NTsI97fu3isF0phGoh8q9tGGRnRMDq3E33zzntT3jawtWiib9ZCxuJ8Zhwc1fIF07YfBJ+sZJ7Kau1205NFJtISGbVhVmpD9kQdoFwYQxYJuvPcDYyIYH/K86bYnBmJWRCwbTh7Es7DCCC90VY/yMjRNoYvjupjhuHKGXE8O/Y8weERZ+GuZ8BSxFwU81YK9mcQyw+Z+MdAFsZEhR7cpxRkty2INKxOdX8wJGVw3A1cInwuiBjLiED0ndh39RqJbE8DUQAJgngSbYK52rCadjhs2xf+tPiDatsDMAHU2DpyDcz,iv:Dh9hhr1mp+gXA1eUvsJVb5opbaEtdRMKAd4HQSQlOpc=,tag:k4M96tstNATvyFe6xF2IzQ==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k - SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz - ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6 - aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A - dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-10-05T19:05:15Z" - mac: ENC[AES256_GCM,data:8xMV6RkmXpt2uY07E+59ZXwTwTL6oqo9j5sFOxejwnFU06MGW9t1h/5HFg+GKpp3Jj1LT6a7uuyip6bDGCMEhI054sTv2uDlOIFd4nbHwOh+keEH/FLa8csTq4yyisROsaXUUCtWxraGXz0MQXT8xlQMT7Pn0x43JssmPhOwrRo=,iv:JKNsroIAxvV5V23at/DsDdud5idVn5IEQHrgeFHR3fQ=,tag:XY0hikk4yvqfynPI8q+GBg==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.7.3 diff --git a/nixos/secrets/GitHub.yaml b/nixos/secrets/personal.yaml similarity index 57% rename from nixos/secrets/GitHub.yaml rename to nixos/secrets/personal.yaml index cfc0a97..1e520ab 100644 --- a/nixos/secrets/GitHub.yaml +++ b/nixos/secrets/personal.yaml @@ -1,5 +1,7 @@ GitHub: ssh: ENC[AES256_GCM,data:jzRpTgefhZg7Vhm8QvWNsPBko1yw56sM/XehY72lAc7aRz+dx6BGgyYbZiifd7GrGJGUbH6gWfUg8YjgVla6VRsiHCEvSK3bY0ADDwTeSUs+wuybYXQZqhivSCInVtVSNAcp99uI1QwKor289zmxcFtSZEXgU1OCSel/8br+qipAbOkzAKX1v15eigjY4OSQxXL59EuuuHEQ+vjVVv95tDv03jaNAoU9UKr0Atrny/Fn2sQn4Tmec5Q1XdvDErKhSxrAFiACkxXUwPZMHez+BUZrmkksqpzNJjYNIlmsITuOVr7Fyen9wotAwsDf96Fmz5JYLtRX9CAboUgQLdUOKprwX/xgBnFtDTSH1Qr785T1QSAZL6xdE6hNibxZO3vGeeaPC3oGB5g9x5CwTQelMdOUPKdKorCDj226o56cTc/IQxUpsULbeOyi2pMGHiTHbiQBzHpxWyQ/gBktPkF25GOFeaCu3gW+xsspX91jSKudcYdBqWUNmJcdsfHfPxPM4cZtA/sVMyoA+YcehgU7GTu9DAlxDTug/JWo,iv:5shfzmrFFVEuaYmyTkBMAw9BIFFkKz0yl1dyJWxq6Y4=,tag:CX7TBJJXCKuIPSmg9/RpGg==,type:str] +Gitea: + ssh: ENC[AES256_GCM,data:8eyuycMkBVMHfzaGeGs+0RA4vCpaAUTjCwiplUamypEk9BDYqxe+69O6OjJAGaPnmH4kpsb/WVd5sU6HNUogBuzDQhCrv2B6NadcmnV+fH3MHfAWvDy7R68PUkwcywWVOo65SONckjKVa0Y+8IeeJh9zpr36qCbbs+zPC4XTk+Y5R4vK/ocmSJSmwqVK1SfGGwOjFoJvHVI6jdXh//vgKaITqmyZV7N3OU9EiQp1FmNKwFf/x70w2LGATrNBcexwNy20ZYd6ewiAfJxFHR6Svfc2P5X2nlv99W5t1eU5QEGUcalcslsW/VkmFC3agN3Yry2EMIlfTlm0hm4+ryDGWEvgyUC0dLA8Ao0TLaaqig9HzBRP1h6aORe0lDwzTUg6WltrIu0s7hFwD4YLi1qP5lY99hvrDIRbTEg6AY6X4b32YFlyOXy0YDetv90+QyEcwANWO9MXz2S9hxuQmjOXMCVYMaiMLVUkG+mShbQuxTiFQt/7D83yOBSRLugx/aU318NKvUDlCt7wpZbMI3gBia4nUYLoLcXRKcAZ,iv:uc1ZtGdcolLrpQgS5n5LEAwBt0vMmkj2OuTXcn8sQ7A=,tag:F2ofcj0zEBgxwukMUd7+uw==,type:str] sops: kms: [] gcp_kms: [] @@ -15,8 +17,8 @@ sops: aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-09-11T10:23:48Z" - mac: ENC[AES256_GCM,data:3XEbhFY1TlXo6bTctV2u4i6QPzXnJC6iU3F/MUARSQl1z4peOB5x8hZfdiV/hVMR8I+83TxDcEAmKDrcaMf89Tqa+OiD//wBekMUfS7AmBRhpv7X5qfarflfnygacFsAMhf/bdiqowYbGSNvlPjueqHJaFZ+3x/wPrt/jAYNlr8=,iv:ciQmY7bE+Je6kMlmxxtQvp+r3e/ZK942tT4TtXhDX2M=,tag:4+7uZlEm5bcRfZC7pp5Y7Q==,type:str] + lastmodified: "2024-10-19T12:24:38Z" + mac: ENC[AES256_GCM,data:g15gV0H0rlzoeN5Z/Zkgh/8ya9GSrWDVP9oqdVz3m4obmquCLDIygsPaYpRXmfOtPSgvX2KzZ08sNLfcBZSh7eH2Ws7xcezWOntOcmAQNz5LvemqP7YuwtivMK/P4qrkME+LQPkSrSUR+rT99Zj+RQXisy91Cq9NbVBj6uQH7+I=,iv:W+oDp5Dun0g35BFprOmgfI0LoPME3HpPuuniCKA32Kc=,tag:CUU74HZuRNedyI3txn9D+g==,type:str] pgp: [] unencrypted_suffix: _unencrypted - version: 3.7.3 + version: 3.8.1 diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index f97cdb0..75939f3 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -7,9 +7,14 @@ in { config = lib.mkIf cfg.enable { sops.secrets = lib.mkIf config.sisyphus.programs.sops.enable ( let - Hugo = { + HomeLab = { format = "yaml"; - sopsFile = ../../secrets/Hugo.yaml; + sopsFile = ../../secrets/HomeLab.yaml; + owner = user; + }; + personal = { + format = "yaml"; + sopsFile = ../../secrets/personal.yaml; owner = user; }; UGent = { @@ -18,17 +23,17 @@ in { owner = user; }; in { - "Hugo/ssh" = Hugo; "UGent/HPC/ssh" = UGent; - "GitHub/ssh" = { - format = "yaml"; - sopsFile = ../../secrets/GitHub.yaml; - owner = user; - }; - "Hugo/Gitea/ssh" = Hugo; + # Git authentication + "Gitea/ssh" = personal; + "GitHub/ssh" = personal; "UGent/GitHub/ssh" = UGent; "UGent/SubGit/ssh" = UGent; + + # HomeLab + "HomeLab/Hugo/ssh" = HomeLab; + "HomeLab/Nextcloud/ssh" = HomeLab; }); }; } diff --git a/stow/ssh/.ssh/config b/stow/ssh/.ssh/config index 74bb449..d3f6834 100644 --- a/stow/ssh/.ssh/config +++ b/stow/ssh/.ssh/config @@ -1,9 +1,3 @@ -Host Hugo - User admin - HostName 192.168.0.11 - IdentitiesOnly yes - IdentityFile /run/secrets/Hugo/ssh - Host HPC User vsc44995 HostName login.hpc.ugent.be @@ -15,7 +9,7 @@ Host git.depeuter.dev User git HostName git.depeuter.dev IdentitiesOnly yes - IdentityFile /run/secrets/Hugo/Gitea/ssh + IdentityFile /run/secrets/Gitea/ssh Host github.com User git @@ -36,3 +30,15 @@ Host subgit.ugent.be IdentityFile /run/secrets/UGent/SubGit/ssh CanonicalizeHostname yes # Ignore capitalization +# HomeLab +Host Hugo + User admin + HostName 192.168.0.11 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Hugo/ssh + +Host Nextcloud + User administrator + Hostname 192.168.0.14 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Nextcloud/ssh -- 2.47.2 From 531fae0bb00db79a26ea247db6fa0d884296e429 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 19 Oct 2024 14:46:38 +0200 Subject: [PATCH 19/77] chore(sway): Add secondary terminal keybind --- stow/sway/.config/sway/keybinds | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/stow/sway/.config/sway/keybinds b/stow/sway/.config/sway/keybinds index 7fe3ffc..0c4bf47 100644 --- a/stow/sway/.config/sway/keybinds +++ b/stow/sway/.config/sway/keybinds @@ -206,21 +206,23 @@ bindsym { -B 'Yes, exit sway' 'swaymsg exit' # Kill focused window - $flag+q kill + $flag+q kill # Start a terminal - $flag+Return exec $term - $alt+space exec $menu - $alt+Tab focus prev - $flag+Tab exec $window_switcher + $flag+Return exec $term + Control+$alt+t exec $term + + $alt+space exec $menu + $alt+Tab focus prev + $flag+Tab exec $window_switcher --whole-window $alt+$scrollUp focus prev --whole-window $alt+$scrollDown focus next # Lock the screen - $flag+Delete exec $lock + $flag+Delete exec $lock # File explorer - $flag+e exec $term -e vifm + $flag+e exec $term -e vifm } bindgesture { -- 2.47.2 From bdef46f0b25125a6ae74d6b74d3b531ba9c8e9f9 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 24 Oct 2024 15:28:36 +0200 Subject: [PATCH 20/77] chore: Upstream option renames --- nixos/hosts/Tibo-NixDesk/default.nix | 4 ++-- nixos/modules/services/printing/default.nix | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/hosts/Tibo-NixDesk/default.nix b/nixos/hosts/Tibo-NixDesk/default.nix index 7858bea..11b7a40 100644 --- a/nixos/hosts/Tibo-NixDesk/default.nix +++ b/nixos/hosts/Tibo-NixDesk/default.nix @@ -75,9 +75,9 @@ networking.hostName = "Tibo-NixDesk"; - services.xserver = { + services.xserver.xkb = { layout = "us"; - xkbVariant = "altgr-intl"; + variant = "altgr-intl"; }; system.stateVersion = "24.05"; diff --git a/nixos/modules/services/printing/default.nix b/nixos/modules/services/printing/default.nix index b7352b3..9b8738a 100644 --- a/nixos/modules/services/printing/default.nix +++ b/nixos/modules/services/printing/default.nix @@ -10,7 +10,7 @@ in { printing.enable = true; avahi = { enable = true; - nssmdns = true; + nssmdns4 = true; openFirewall = true; }; }; -- 2.47.2 From b25f1f9f4bc1c73564ddb08670e568567ac04d7e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 24 Oct 2024 15:29:38 +0200 Subject: [PATCH 21/77] feat(vim): Add Coq support --- stow/vim/.vimrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/stow/vim/.vimrc b/stow/vim/.vimrc index 5995924..379ddb4 100644 --- a/stow/vim/.vimrc +++ b/stow/vim/.vimrc @@ -82,6 +82,9 @@ Plug 'prabirshrestha/vim-lsp' Plug 'sheerun/vim-polyglot' Plug 'vifm/vifm.vim' +" Coq +Plug 'whonore/Coqtail' + call plug#end() " }}} -- 2.47.2 From ade31510a8214d649f0286f050ea33ba9db6cce0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 24 Oct 2024 16:02:38 +0200 Subject: [PATCH 22/77] chore: Refresh pkgs --- nixos/users/tdpeuter/default.nix | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index f97415b..035bccf 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -36,12 +36,13 @@ in { }; fonts.packages = with pkgs; [ - corefonts # Calibri for Uni - font-awesome # Dependency of Vifm & zsh config - letter # Personal font - noto-fonts-cjk # Dependency of Zellij config - noto-fonts # Dependency of Zellij config - vistafonts # Microsoft fonts + corefonts # Calibri for Uni + font-awesome # Dependency of Vifm & zsh config + letter # Personal font + noto-fonts-cjk # Dependency of Zellij config + noto-fonts # Dependency of Zellij config + noto-fonts-color-emoji # Emoji's! + vistafonts # Microsoft fonts ]; sisyphus = { @@ -60,20 +61,21 @@ in { packages = (with pkgs; [ cmdtime # Zsh plugin icosystem # Personal icon theme + nextcloud-client spotify-adblock ]) ++ (with pkgs-unstable; [ brave chafa # Terminal image viewer duf # Df alternative + feishin # Jellyfin music client foot fzf glow # Terminal Markdown renderer jellyfin-media-player - kitty - libreoffice-fresh - logseq - mpv - nextcloud-client + libreoffice-fresh # Office tools + # FIXME Waiting for electron version to update, now insecure. + # logseq # Note taking + mpv # Media player nsxiv # Lightweight image viewer qalculate-gtk # Calculator spotify @@ -86,11 +88,13 @@ in { zsh-syntax-highlighting # SMB - cifs-utils psmisc + cifs-utils + psmisc # Linters and LSPs statix # Nix - ruff pylint # Python + # TODO Move to devshells + # ruff pylint # Python ]); pointerCursor = { -- 2.47.2 From 31a4c4060a7d26e2f03c9fafad2d39e5de0919db Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 25 Oct 2024 16:17:58 +0200 Subject: [PATCH 23/77] chore(docker): Add users to group --- nixos/modules/virtualisation/docker/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nixos/modules/virtualisation/docker/default.nix b/nixos/modules/virtualisation/docker/default.nix index 2218ff3..51b9319 100644 --- a/nixos/modules/virtualisation/docker/default.nix +++ b/nixos/modules/virtualisation/docker/default.nix @@ -12,6 +12,11 @@ in { enableOnBoot = false; }; + # Updated version of deprecated enableNvidia. hardware.nvidia-container-toolkit.enable = true; + + sisyphus.users.wantedGroups = [ + "docker" + ]; }; } -- 2.47.2 From 2316cb2d9c44a929961198d0fb2b92e4a69f4585 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 3 Dec 2024 10:58:47 +0100 Subject: [PATCH 24/77] fix(notify): Switch to Pipewire --- scripts/notify.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/notify.sh b/scripts/notify.sh index a9453d5..698993e 100755 --- a/scripts/notify.sh +++ b/scripts/notify.sh @@ -22,15 +22,15 @@ while getopts ":bvt:p:" options; do ;; v) # Get volume (don't use pamixer because that is way slower) - value=$( amixer sget 'Master' \ - | grep -o '\[[0-9]*%\]' \ - | tr -d '][%' \ - | head -n1 ) + value=$( pactl get-sink-volume @DEFAULT_SINK@ \ + | grep -o '[0-9]*%' \ + | tr -d '%' \ + | head -n1 ) title="Volume: ${value}%" category='sysinfo' # If audio disabled, set value to zero. - if [ "$( amixer sget 'Master' | grep -o '\[\(on\|off\)\]' | head -n1 )" == "[off]" ] ; then + if [ "$( pactl get-sink-mute @DEFAULT_SINK@ | grep -o '\(yes\|no\)' | head -n1 )" == 'yes' ] ; then title="Volume: ${value}% (Disabled)" value=0 fi -- 2.47.2 From fb9cd8b9e957328b6332f6a4ba4201f9bebe36db Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 10 Dec 2024 15:52:37 +0100 Subject: [PATCH 25/77] fix(audio): Fix popping after audio suspend --- nixos/modules/services/pipewire/default.nix | 22 +++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/nixos/modules/services/pipewire/default.nix b/nixos/modules/services/pipewire/default.nix index 09393f0..b83eedc 100644 --- a/nixos/modules/services/pipewire/default.nix +++ b/nixos/modules/services/pipewire/default.nix @@ -6,8 +6,6 @@ in { options.sisyphus.services.pipewire.enable = lib.mkEnableOption "Pipewire"; config = lib.mkIf cfg.enable { - sound.enable = true; - hardware.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; @@ -20,6 +18,26 @@ in { # use the example session manager (no others are packaged yet so this is enabled by default, # no need to redefine it in your config for now) #media-session.enable = true; + + wireplumber = { + enable = true; + # Fix pops after silence + extraConfig."99-disable-suspend" = { + "monitor.alsa.rules" = [ + { + matches = [ + # Headphone jack on laptop + { "node.name" = "alsa_output.pci-0000_00_1f.3.analog-stereo"; } + ]; + actions = { + update-props = { + "session.suspend-timeout-seconds" = 0; + }; + }; + } + ]; + }; + }; }; }; } -- 2.47.2 From c416cbaab9441dbd0d0e2ae35f0c95adbddaa476 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 26 Jan 2025 22:12:27 +0100 Subject: [PATCH 26/77] chore(script): Improve toggle-light-dark --- scripts/toggle-light-dark.sh | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/scripts/toggle-light-dark.sh b/scripts/toggle-light-dark.sh index ec38506..80e4d0d 100755 --- a/scripts/toggle-light-dark.sh +++ b/scripts/toggle-light-dark.sh @@ -30,6 +30,10 @@ declare -A wallpaper wallpaper[${THEME_LIGHT}]="bg-light" wallpaper[${THEME_DARK}]="bg-dark" +declare -A icon +icon[${THEME_LIGHT}]="\uf185" +icon[${THEME_DARK}]="\uf186" + ############# ### Logic ### ############# @@ -48,14 +52,14 @@ while getopts ":m:g" option; do fi ;; g) - previous_theme="$(cat ${STATE_FILE})" - if [ "${previous_theme}" == "${THEME_LIGHT}" ]; then - class="activated" - percentage=1 - else - percentage=0 + current_state="$(cat "${STATE_FILE}")" + next_state="${theme_next[${current_state}]}" + if [ "${current_state}" == "${THEME_DARK}" ]; then + class='activated' + percentage=100 fi - printf '{ "class": "%s", "percentage": %d }' "${class}" "${percentage}" + printf '{"text": "%s", "alt": "%s", "tooltip": "Set theme to %s", "percentage": %d, "class": "%s"}' \ + "${icon[${current_state}]}" "${gsettings_alt[${next_state}]}" "${next_state}" "${percentage:=0}" "${class:="none"}" exit 0 ;; *) @@ -119,7 +123,12 @@ fi # Sway if [ "$(command -v swaybg)" ]; then bg_path="${BG_DIR}/${wallpaper[${theme}]}" - /run/current-system/sw/bin/cp "${bg_path}" "${STATE_DIR}/bg" && swaymsg reload & + /run/current-system/sw/bin/cp "${bg_path}" "${STATE_DIR}/bg" + if [ "$(command -v swaymsg)" ]; then + pkill swaybg && swaymsg exec "swaybg -m fill -i ${STATE_DIR}/bg" & + elif [ "$(command -v hyprctl)" ]; then + pkill swaybg && hyprctl keyword exec "swaybg -m fill -i ${STATE_DIR}/bg" & + fi fi # Vifm -- 2.47.2 From 01ce208be986d99fe26ff0bcf22998485cfe2c2f Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 21 Feb 2025 20:25:06 +0100 Subject: [PATCH 27/77] chore: Upgrade to 24.11 --- nixos/flake.nix | 8 ++++---- nixos/modules/desktop/sway/default.nix | 6 ++---- nixos/modules/hardware/nvidia/default.nix | 3 +-- nixos/modules/nix/flakes/default.nix | 2 +- nixos/modules/virtualisation/docker/default.nix | 2 ++ nixos/users/tdpeuter/default.nix | 4 +++- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/nixos/flake.nix b/nixos/flake.nix index cda9173..95ac77c 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -2,7 +2,7 @@ description = "System configuration of my machines using flakes"; inputs = { - nixpkgs.url = "nixpkgs/nixos-24.05"; + nixpkgs.url = "nixpkgs/nixos-24.11"; nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; devshell = { @@ -11,7 +11,7 @@ }; flake-utils.url = "github:numtide/flake-utils"; home-manager = { - url = "github:nix-community/home-manager/release-24.05"; + url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "nixpkgs"; }; openconnect-sso = { @@ -41,9 +41,9 @@ unfreePackages = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ "corefonts" "nvidia-settings" "nvidia-x11" "nvidia-persistenced" - "Oracle_VM_VirtualBox_Extension_Pack" + "Oracle_VirtualBox_Extension_Pack" "spotify" - "steam" "steam-original" "steam-run" + "steam" "steam-unwrapped" "steam-run" "vista-fonts" "nvidia-persistenced" # Docker ]; diff --git a/nixos/modules/desktop/sway/default.nix b/nixos/modules/desktop/sway/default.nix index bab109b..055bfb0 100644 --- a/nixos/modules/desktop/sway/default.nix +++ b/nixos/modules/desktop/sway/default.nix @@ -101,11 +101,9 @@ in { dejavu_fonts font-awesome noto-fonts - noto-fonts-cjk + noto-fonts-cjk-sans + noto-fonts-cjk-serif noto-fonts-emoji - source-han-sans - source-han-sans-japanese - source-han-serif-japanese ]; security.polkit.enable = true; diff --git a/nixos/modules/hardware/nvidia/default.nix b/nixos/modules/hardware/nvidia/default.nix index f4a0248..2b811fc 100644 --- a/nixos/modules/hardware/nvidia/default.nix +++ b/nixos/modules/hardware/nvidia/default.nix @@ -37,9 +37,8 @@ in { # }; hardware = { - opengl = { + graphics = { enable = true; - driSupport = true; driSupport32Bit = true; }; diff --git a/nixos/modules/nix/flakes/default.nix b/nixos/modules/nix/flakes/default.nix index 3c5d892..aeaf3c1 100644 --- a/nixos/modules/nix/flakes/default.nix +++ b/nixos/modules/nix/flakes/default.nix @@ -9,6 +9,6 @@ in { extraOptions = '' experimental-features = nix-command flakes ''; - package = pkgs.nixFlakes; + package = pkgs.nixVersions.stable; }; } diff --git a/nixos/modules/virtualisation/docker/default.nix b/nixos/modules/virtualisation/docker/default.nix index 51b9319..b48ae5e 100644 --- a/nixos/modules/virtualisation/docker/default.nix +++ b/nixos/modules/virtualisation/docker/default.nix @@ -10,6 +10,8 @@ in { enable = true; # Because these are made for development purposes and not for servers enableOnBoot = false; + + daemon.settings.features.cdi = true; }; # Updated version of deprecated enableNvidia. diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index 035bccf..6c1fcf3 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -39,8 +39,10 @@ in { corefonts # Calibri for Uni font-awesome # Dependency of Vifm & zsh config letter # Personal font - noto-fonts-cjk # Dependency of Zellij config + noto-fonts-cjk-sans # Dependency of Zellij config + noto-fonts-cjk-serif # Dependency of Zellij config noto-fonts # Dependency of Zellij config + noto-fonts-emoji # Dependency of Zellij config noto-fonts-color-emoji # Emoji's! vistafonts # Microsoft fonts ]; -- 2.47.2 From 34263d84ccfb5a662481c1d07b082906e87551c8 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 21 Feb 2025 20:40:34 +0100 Subject: [PATCH 28/77] feat(ssh): Add Dwengo keys --- nixos/secrets/UGent.yaml | 7 ++++--- nixos/users/tdpeuter/secrets.nix | 1 + stow/ssh/.ssh/config | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/nixos/secrets/UGent.yaml b/nixos/secrets/UGent.yaml index ee6240b..5eb38a0 100644 --- a/nixos/secrets/UGent.yaml +++ b/nixos/secrets/UGent.yaml @@ -5,6 +5,7 @@ UGent: ssh: ENC[AES256_GCM,data:A4ir0yvCgIVJCl4C5fB4+WhJVj6Go9XWfjw1/lOaWr2rP+tVNnjGuv/d47z55Gxose5keYX2wRMet/M2Re18+5ckFTyfT4YkcHtQCyBGbmwYmIzxcaxinNsCuOelEdNnFnYW2ha0aJ8Q5Xjfpec1YqDrCT/Add3qGRzBizQJ1FajbyhxJOKLYvUrYvLZ8+XE8SUndvjQnVig3ArUm2hDFsEMm4ClZ4T+EwcIuWrS8ia7ZoqlQhglEtlSEczE65a6hQAFeXE64YC3s8kWlRGhRqJQXjB5g/UTkOht3Vrw2cNzrz90tR9vhooOEBEI6d8F8RJGkdyUe5zod1eKnE/lwOFhhTbzrGrYzX4oUrDIL+Dx9+R9mQchv9qSau1JtKDvzkYmqVVgTC6wE98gTRSBw78f0MKO27FA3diC/k3t+mwsKVRjcvlTUcbRcFAxjq/U5TbOq5jOgA41dI9KE/+bnJoLRh81m/sq9EqMTp90wDKn+jjCn7lGcGDwtaaTlbLIGIw5u9pcfD4UyvJZamnS96JAhsDUqk+fxb05,iv:jPCdaC7CahKrj3tvzZTs1ZI/3+zuCCqIdXp3vo9l/iY=,tag:DeUdWEZHpsB1AMD2AQuiTg==,type:str] SubGit: ssh: ENC[AES256_GCM,data:hJAle4DHJNvX569reclBG5rEdWsjAyV2TtHYMiPfky/dMKJkYgT4+T0doLfUn1O6at77kJGPmwUEvmK819DUuvHtNY7c6angV7iLygJ/ThI1FIFOKH+NxEsI3scoT0VDDybHpgice/fcJL1tMcvE74+dWOnZ2r4pxcMJEFHUPVVWcl9/stJLn78OonsyWpj8PglcnYFOfZ6THIe3lyNBxRp7XEweuwjacthGzOzNu3Z95zcCAnAokFVZ570glJNhjJVNEmPHZkHOcGiGNNM4JNbR11v+dOYtac942t/mmmWwAzbznuu8ZLupYWjdg/f07ftkPAwFwCoXblZ3708Lvf6uOt/CPeWvEII2Haf1Cr5w+U6TAt14zzL73xCSQqwz1TfkcmD+bJplmtcpSP/KX8/BRK7qr6Ec5T9ecbraRB7zDBg0X2x51DSHLrA7UIhpI9JNaOArU5UOVYTWwuzFiGG61elJMcPZ5vWEVrTCocfa4INPo4B2MkFbbsYf6xnY1L3Wc9LQjkff6aCqYnQaXZ/WfPWepf9YvYG1,iv:0Bm1r0FuJJKKmcbTiPL36rb5FaMZfOO7Mx8pXU2FSfg=,tag:0ShoJPJUx37mEAus+mhPmw==,type:str] + Dwengo: ENC[AES256_GCM,data:3lsZJ5ztkGOfHFQNr54xs9evSTEAs9XHJhg6Krvz3fkT8CaGSiRW5HTCfANGhQ3wJ8kHVziwopQCJ8s93gaipAuEu5k/hYj5wYhOn6x8oDJxftMJC94JDL4eYGIXbx9GSPIy+loftfYIZcfmi6o1lQdiqRdC207Cs+p0ZTB7JSvales16IpgYKoTCRLUytd9cBrezD9gVEngW1b4wHGzai4OOTSunlOVVAgapAKsN+swN7QtMt00607Ns6gCoQDV76qAbM+6EN8PlIKwbyy9UneeTXOf0wtQpb2TM1zrVR7LOqNyXT+DUlrBLpOpYK8tPCP8y5m9DMLixrhbAXMT6pIp2XSbmcfcsuMGLJE2ev/c6PxmbjqiCGEYPC3HdAgUpNDtOMixnHEoXnMUPDJeE0MXbSFMRmzNGo7pc5gOoCFmCkV9NVQXERR6m04Bn3czRQVHfoVIc4ciPdiXpOqF8ocTnqZj7HRW8dvZz9V50ViHwOVqWLJ2a/QUMdagXlaK7zPrxPETKz47iMoMfVaUE8ePg2L5sEZHja62,iv:s/+JYSkZudTr4MnTclpNV7i5VGUlqFhdvovcFt+inSQ=,tag:4Ge0ZOc6qNObQrzS0K0WDA==,type:str] sops: kms: [] gcp_kms: [] @@ -20,8 +21,8 @@ sops: aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-10-10T06:57:11Z" - mac: ENC[AES256_GCM,data:Tvwv2mqceAxi7ic3+95Y6hBMHjqVoCkYnTkEsXOrhumgXpuuB/QQ0ASEf6gbgkCLXGwnUAXsK41bIIJfFgYSk89fHw6AaXfs6a+zL2Mh5zkhMIE2bm68mFK8+/TX/e8SibbEwNZCKOcPqvaO6nK816KCmh3KKCbT9ObaB6CA/KI=,iv:YPKgYAnQ135JXou7q9jVN7b3SKIDwceKcbqiIjkqnTU=,tag:udPrEVu2F+hWkhNoEyjTYg==,type:str] + lastmodified: "2025-02-21T19:36:01Z" + mac: ENC[AES256_GCM,data:NMxbxf7/UwR9akbbLgKeSLIkk+dS/an2pGzZUSbe1AJenCVFO/fiRCC5BF6xJVpFSpag/dLwo/tS64JmJ36Vqn2sQGmqn26HPXsjAgyUdpp3+anXIVOGvNHF3oCM8gEUk9+W2FsOqKuejpD7HK/IsVJEZZLbThkUS1BiptOWk84=,iv:xNBBjWADFF5itg45KnmNbZG5RN0KRpaph7iMGhf1KZg=,tag:FrDSAbvo/7QHH0g5Ik8ATw==,type:str] pgp: [] unencrypted_suffix: _unencrypted - version: 3.7.3 + version: 3.9.2 diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index 75939f3..b6ad403 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -24,6 +24,7 @@ in { }; in { "UGent/HPC/ssh" = UGent; + "UGent/Dwengo" = UGent; # Git authentication "Gitea/ssh" = personal; diff --git a/stow/ssh/.ssh/config b/stow/ssh/.ssh/config index d3f6834..aec70b1 100644 --- a/stow/ssh/.ssh/config +++ b/stow/ssh/.ssh/config @@ -4,6 +4,12 @@ Host HPC IdentitiesOnly yes IdentityFile /run/secrets/UGent/HPC/ssh +Host Dwengo + User tibo + HostName sel2-1.ugent.be + IdentitiesOnly yes + IdentityFile /run/secrets/UGent/Dwengo + # Git authentication Host git.depeuter.dev User git -- 2.47.2 From 8b9b00f33b5118ad1e63ffd000f2109727bf05d1 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 21 Feb 2025 20:55:42 +0100 Subject: [PATCH 29/77] fixup! chore: Upgrade to 24.11 --- nixos/modules/hardware/nvidia/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/hardware/nvidia/default.nix b/nixos/modules/hardware/nvidia/default.nix index 2b811fc..4418f36 100644 --- a/nixos/modules/hardware/nvidia/default.nix +++ b/nixos/modules/hardware/nvidia/default.nix @@ -39,11 +39,11 @@ in { hardware = { graphics = { enable = true; - driSupport32Bit = true; + enable32Bit = true; }; nvidia = { - # Use the NVidia open source kernel module + # Use the NVidia open source kernel module (or not) open = false; package = config.boot.kernelPackages.nvidiaPackages.stable; # Modesetting is required. -- 2.47.2 From ffd6f6e9c607010e83ea2a7872a8ef107a3f6a89 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 26 Mar 2025 20:45:36 +0100 Subject: [PATCH 30/77] chore: suspend powerKey --- nixos/hosts/Tibo-NixFat/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/hosts/Tibo-NixFat/default.nix b/nixos/hosts/Tibo-NixFat/default.nix index 6f0e53c..44554f0 100644 --- a/nixos/hosts/Tibo-NixFat/default.nix +++ b/nixos/hosts/Tibo-NixFat/default.nix @@ -90,11 +90,14 @@ networking.hostName = "Tibo-NixFat"; services = { - # Handle the laptop lid switch as follows: logind = { + # Handle the laptop lid switch as follows: lidSwitch = "hybrid-sleep"; lidSwitchExternalPower = "lock"; lidSwitchDocked = "ignore"; + + # Handle the power key + powerKey = "suspend"; }; xserver.xkb = { -- 2.47.2 From 37598855456dd7d5714550e0e025b8bcc2aa76eb Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 18 Jun 2025 09:57:18 +0200 Subject: [PATCH 31/77] feat(firefox): Disable Homepage sponsors --- nixos/users/tdpeuter/firefox.nix | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index 1ff9e4c..b24a25b 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -18,7 +18,16 @@ in { DisableFirefoxStudies = true; DisablePocket = true; DisableTelemetry = true; + FirefoxHome = { + SponsoredTopSites = false; + SponsoredPocket = false; + }; OfferToSaveLogins = false; + + # https://discourse.nixos.org/t/declare-firefox-extensions-and-settings/36265 + ExtensionSettings = { + "amazom@search.mozilla.org".installation_mode = "blocked"; + }; }; # Support smart cards @@ -27,13 +36,17 @@ in { ]; }; + languagePacks = [ + "en-GB" + "nl" + ]; + profiles.tdpeuter.search= { default = "DuckDuckGo"; force = true; engines = { "Bing".metaData.hidden = true; "eBay".metaData.hidden = true; - "Qwant".metaData.hidden = true; "Nix Packages" = { urls = [{ -- 2.47.2 From 3fce7adaaab375dd10fb33829670be433e48a6e1 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 20:49:01 +0200 Subject: [PATCH 32/77] chore: Add .idea to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b2be92b..10ea189 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ result + +.idea -- 2.47.2 From 378ef78b402e5698577707ab7d46b02bfcea6ee6 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 20:52:22 +0200 Subject: [PATCH 33/77] feat(zen-browser): Add input/pkg --- nixos/flake.nix | 16 +++--- nixos/users/tdpeuter/default.nix | 85 +++++++++++++++++--------------- 2 files changed, 54 insertions(+), 47 deletions(-) diff --git a/nixos/flake.nix b/nixos/flake.nix index 95ac77c..2e337c4 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -5,17 +5,13 @@ nixpkgs.url = "nixpkgs/nixos-24.11"; nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; - devshell = { - url = "github:numtide/devshell"; - inputs.nixpkgs.follows = "nixpkgs"; - }; flake-utils.url = "github:numtide/flake-utils"; home-manager = { url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "nixpkgs"; }; openconnect-sso = { - url = github:ThinkChaos/openconnect-sso/fix/nix-flake; + url = "github:ThinkChaos/openconnect-sso/fix/nix-flake"; inputs = { flake-utils.follows = "utils"; nixpkgs.follows = "nixpkgs"; @@ -23,20 +19,24 @@ }; sops-nix = { url = "github:Mic92/sops-nix"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgs"; }; utils = { url = "github:gytis-ivaskevicius/flake-utils-plus"; inputs.flake-utils.follows = "flake-utils"; }; + zen-browser = { + url = "github:youwen5/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ self, nixpkgs, nixpkgs-unstable, - devshell, flake-utils, home-manager, openconnect-sso, sops-nix, utils, + flake-utils, home-manager, openconnect-sso, sops-nix, utils, zen-browser, ... }: let - system = "x86_64-linux"; + system = utils.lib.system.x86_64-linux; unfreePackages = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ "corefonts" diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index 6c1fcf3..3a92666 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, pkgs-unstable, ... }: +{ config, inputs, lib, pkgs, pkgs-unstable, ... }: let cfg = config.sisyphus.users.tdpeuter; @@ -33,6 +33,48 @@ in { ]; initialPassword = "ChangeMe"; shell = pkgs.zsh; + + packages = (with pkgs; [ + cmdtime # Zsh plugin + icosystem # Personal icon theme + nextcloud-client + spotify-adblock + brave # Internet browser + chafa # Terminal image viewer + duf # Df alternative + feishin # Jellyfin music client + foot + fzf + gh # GitHub CLI tool + glow # Terminal Markdown renderer + jellyfin-media-player + libreoffice-fresh # Office tools + librewolf # Internet browser + mpv # Media player + nsxiv # Lightweight image viewer + qalculate-gtk # Calculator + spotify + unzip + vifm # File manager + zathura # PDF viewer + zellij # Tmux + screen alternative + zsh + zsh-autosuggestions + zsh-syntax-highlighting + + # SMB + cifs-utils + psmisc + + # Linters and LSPs + statix # Nix + # TODO Move to devshells + # ruff pylint # Python + ]) ++ (with pkgs-unstable; [ + logseq # Note taking + ]) ++ [ + inputs.zen-browser.packages.${pkgs.system}.default + ]; }; fonts.packages = with pkgs; [ @@ -60,44 +102,9 @@ in { homeDirectory = "/home/${user}"; inherit (config.system) stateVersion; - packages = (with pkgs; [ - cmdtime # Zsh plugin - icosystem # Personal icon theme - nextcloud-client - spotify-adblock - ]) ++ (with pkgs-unstable; [ - brave - chafa # Terminal image viewer - duf # Df alternative - feishin # Jellyfin music client - foot - fzf - glow # Terminal Markdown renderer - jellyfin-media-player - libreoffice-fresh # Office tools - # FIXME Waiting for electron version to update, now insecure. - # logseq # Note taking - mpv # Media player - nsxiv # Lightweight image viewer - qalculate-gtk # Calculator - spotify - unzip - vifm # File manager - zathura # PDF viewer - zellij # Tmux + screen alternative - zsh - zsh-autosuggestions - zsh-syntax-highlighting - - # SMB - cifs-utils - psmisc - - # Linters and LSPs - statix # Nix - # TODO Move to devshells - # ruff pylint # Python - ]); + # packages = (with pkgs; [ + # ]) ++ (with pkgs-unstable; [ + # ]); pointerCursor = { inherit (cursor) package name size; -- 2.47.2 From 2f1346651bd70495f887432b1cbd4b4064eaa69c Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 20:53:16 +0200 Subject: [PATCH 34/77] chore(tdpeuter): Tweak mail signatures --- nixos/users/tdpeuter/mail.nix | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/nixos/users/tdpeuter/mail.nix b/nixos/users/tdpeuter/mail.nix index d6b4928..2e05b4b 100644 --- a/nixos/users/tdpeuter/mail.nix +++ b/nixos/users/tdpeuter/mail.nix @@ -8,13 +8,17 @@ let Met vriendelijke groeten Tibo De Peuter ''; - UGent = '' + english = '' + Kind regards + Tibo De Peuter + ''; + academic = '' Met vriendelijke groeten Tibo De Peuter - Student 2Ba/3Ba Informatica + Student Ma Informatica ''; - MrFortem = '' + alias = '' Kind regards MrFortem Fiducia ''; @@ -61,7 +65,7 @@ in { realName = config.users.users.tdpeuter.description; signature = { showSignature = "append"; - text = signatures.UGent; + text = signatures.academic; }; thunderbird = { @@ -69,7 +73,7 @@ in { settings = id: { "mail.server.server_${id}.authMethod" = 10; "mail.smtpserver.smtp_${id}.authMethod" = 10; - "mail.identity.id_${id}.htmlSigText" = signatures.UGent; + "mail.identity.id_${id}.htmlSigText" = signatures.academic; # Allow PGP "mail.identity.id_${id}.openpgp_key_id" = "9B11F5243089DB5B"; # Your 'master' key @@ -109,7 +113,7 @@ in { settings = id: { "mail.server.server_${id}.directory" = ".thunderbird/tdpeuter/ImapMail/imap.gmail.com-mrfortem"; "mail.server.server_${id}.directory-rel" = "[ProfD]ImapMail/imap.gmail.com-mrfortem"; - "mail.identity.id_${id}.htmlSigText" = signatures.MrFortem; + "mail.identity.id_${id}.htmlSigText" = signatures.alias; }; }; }; -- 2.47.2 From 04b72ededed78190c12126599f2069ad52d348b9 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 20:58:34 +0200 Subject: [PATCH 35/77] chore(plamsa): Update --- nixos/modules/desktop/plasma/default.nix | 35 ++++++++++++++---------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/nixos/modules/desktop/plasma/default.nix b/nixos/modules/desktop/plasma/default.nix index 39e1ab7..8bdb62c 100644 --- a/nixos/modules/desktop/plasma/default.nix +++ b/nixos/modules/desktop/plasma/default.nix @@ -8,36 +8,41 @@ in { options.sisyphus.desktop.plasma.enable = lib.mkEnableOption "KDE Plasma"; config = lib.mkIf cfg.enable { - services.xserver = { - enable = true; - + services = { displayManager = { - defaultSession = "plasmawayland"; + defaultSession = "plasma"; sddm = { enable = true; + wayland.enable = true; # https://discourse.nixos.org/t/plasma-wayland-session-not-available-from-sddm/13447/2 - settings.Wayland.SessionDir = "${pkgs.plasma5Packages.plasma-workspace}/share/wayland-sessions"; + # settings.Wayland.SessionDir = "${pkgs.plasma5Packages.plasma-workspace}/share/wayland-sessions"; }; }; - desktopManager.plasma5 = { + desktopManager.plasma6.enable = true; + + # Use gnome keyring instead of KDE Wallet. + gnome.gnome-keyring.enable = true; + + xserver = { enable = true; - useQtScaling = true; + excludePackages = with pkgs; [ + xterm + ]; + videoDrivers = [ "nvidia" ]; }; - - excludePackages = with pkgs; [ - xterm - ]; }; - environment.plasma5.excludePackages = with pkgs.libsForQt5; [ + environment.plasma6.excludePackages = with pkgs.kdePackages; [ elisa - okular + gwenview + kate khelpcenter konsole - print-manager + kwalletmanager + okular plasma-systemmonitor - gwenview + print-manager ]; }; } -- 2.47.2 From b7b0fa8ad39eef2235c7de59adabd5563897856d Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 20:59:18 +0200 Subject: [PATCH 36/77] chore(hyprland): Update --- nixos/modules/desktop/hyprland/default.nix | 48 ++++++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index 5209653..f4ee140 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, pkgs, ... }: let cfg = config.sisyphus.desktop.hyprland; @@ -6,9 +6,49 @@ in { options.sisyphus.desktop.hyprland.enable = lib.mkEnableOption "Hyprland"; config = lib.mkIf cfg.enable { - programs.hyprland = { - enable = true; - xwayland.enable = true; + environment = { + sessionVariables = { + # Hint Electron apps to use wayland + NIXOS_OZONE_WL = "1"; + + SCRIPT_DIR = ../../../../scripts; + }; + + systemPackages = with pkgs; [ + brightnessctl + dunst + libnotify + swaybg + waybar + waycorner + wlsunset + wl-clipboard # Copying to system clipboard in vim + + glib + + libva + + dmenu + jq + j4-dmenu-desktop + rofi + ]; + }; + + programs = { + hyprland = { + enable = true; + xwayland.enable = true; + }; + + waybar.enable = true; + }; + + services = { + displayManager.ly.enable = true; + gnome.gnome-keyring.enable = true; + power-profiles-daemon.enable = true; + xserver.videoDrivers = [ "nvidia" ]; }; }; } -- 2.47.2 From f35a2c5e85af9f07395018889924266c87d7d3d5 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:02:35 +0200 Subject: [PATCH 37/77] chore: Update to 25.05 --- nixos/flake.nix | 3 ++- nixos/modules/hardware/nvidia/default.nix | 26 ++++++++++++++--------- nixos/modules/programs/direnv/default.nix | 2 +- nixos/users/tdpeuter/default.nix | 15 +++++++------ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/nixos/flake.nix b/nixos/flake.nix index 2e337c4..80814dc 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -45,7 +45,7 @@ "spotify" "steam" "steam-unwrapped" "steam-run" "vista-fonts" - "nvidia-persistenced" # Docker + "intel-ocl" ]; in utils.lib.mkFlake { @@ -73,6 +73,7 @@ modules = [ home-manager.nixosModule sops-nix.nixosModules.sops + ./modules ./users ]; diff --git a/nixos/modules/hardware/nvidia/default.nix b/nixos/modules/hardware/nvidia/default.nix index 4418f36..e98ed6d 100644 --- a/nixos/modules/hardware/nvidia/default.nix +++ b/nixos/modules/hardware/nvidia/default.nix @@ -25,21 +25,27 @@ in { }; config = lib.mkIf cfg.enable { -# boot = { -# extraModprobeConfig = "options nvidia-drm modeset=1"; -# -# initrd.kernelModules = [ -# "nvidia" -# "nvidia_modeset" -# "nvidia_uvm" -# "nvidia_drm" -# ]; -# }; + boot = { + extraModprobeConfig = '' + options nvidia-drm modeset=1 + ''; + kernelParams = [ + "nvidia_drm.modeset=1" + ]; + }; hardware = { graphics = { enable = true; enable32Bit = true; + extraPackages = with pkgs; [ + intel-ocl + intel-compute-runtime + opencl-clhpp + opencl-clang + opencl-headers + ocl-icd + ]; }; nvidia = { diff --git a/nixos/modules/programs/direnv/default.nix b/nixos/modules/programs/direnv/default.nix index ad16c7c..f974886 100644 --- a/nixos/modules/programs/direnv/default.nix +++ b/nixos/modules/programs/direnv/default.nix @@ -8,7 +8,7 @@ in { config = lib.mkIf cfg.enable { programs.direnv = { enable = true; - nix-direnv.enable = true; # Use nix-specific direnv. + nix-direnv.enable = true; # Use nix-specific direnv, https://github.com/nix-community/nix-direnv }; # This is also done by setting programs.direnv.persistDerivations. diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index 3a92666..6435828 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -8,7 +8,7 @@ let cursor = { package = pkgs.phinger-cursors; - name = "phinger-cursors"; + name = "phinger-cursors-light"; size = 24; }; in { @@ -79,12 +79,13 @@ in { fonts.packages = with pkgs; [ corefonts # Calibri for Uni + dejavu_fonts font-awesome # Dependency of Vifm & zsh config letter # Personal font + noto-fonts # Dependency of Zellij config noto-fonts-cjk-sans # Dependency of Zellij config noto-fonts-cjk-serif # Dependency of Zellij config - noto-fonts # Dependency of Zellij config - noto-fonts-emoji # Dependency of Zellij config + noto-fonts-emoji noto-fonts-color-emoji # Emoji's! vistafonts # Microsoft fonts ]; @@ -109,7 +110,6 @@ in { pointerCursor = { inherit (cursor) package name size; gtk.enable = true; - x11.enable = true; }; }; @@ -140,9 +140,12 @@ in { }; }; - gtk = { + services.syncthing = { enable = true; - cursorTheme = cursor; + extraOptions = [ + "--no-default-folder" + ]; + tray.enable = true; }; xdg = { -- 2.47.2 From caa24fb255d3c787b63fc48c43458a31e262cccc Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:04:48 +0200 Subject: [PATCH 38/77] chore(sway): Update --- nixos/modules/desktop/sway/default.nix | 47 ++++++++++++-------------- nixos/users/tdpeuter/dotfiles.nix | 2 +- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/nixos/modules/desktop/sway/default.nix b/nixos/modules/desktop/sway/default.nix index 055bfb0..3dc3547 100644 --- a/nixos/modules/desktop/sway/default.nix +++ b/nixos/modules/desktop/sway/default.nix @@ -71,7 +71,7 @@ in { wayland xdg-utils # Open with default program glib # gsettings - wl-clipboard + wl-clipboard # Copying to system clipboard in vim wl-mirror # Mirror an output wdisplays # Tool to configure displays @@ -84,8 +84,10 @@ in { swaylock-effects waybar wlsunset + waycorner # TODO Turn into own module/package? + dmenu jq j4-dmenu-desktop rofi @@ -106,43 +108,36 @@ in { noto-fonts-emoji ]; - security.polkit.enable = true; - + hardware.graphics.enable = true; + services = { atd.enable = true; # Required by sunset.sh dbus.enable = true; + displayManager.ly.enable = true; gnome.gnome-keyring.enable = true; - - pipewire = { - enable = true; - alsa.enable = true; - pulse.enable = true; - }; - power-profiles-daemon.enable = true; - - xserver = { - displayManager.session = [{ - manage = "window"; - name = "Sway"; - start = '' - ${pkgs.sway}/bin/sway --unsupported-gpu & - waitPID=$! - ''; - }]; - videoDrivers = [ "nouveau" ]; - }; + xserver.videoDrivers = [ "nouveau" ]; + # xserver.videoDrivers = [ "nvidia" ]; }; xdg.portal = { enable = true; wlr.enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + extraPortals = with pkgs; [ + xdg-desktop-portal-gtk + gtk-session-lock + ]; + xdgOpenUsePortal = true; }; - programs.sway = { - enable = true; - wrapperFeatures.gtk = true; + programs = { + sway = { + enable = true; + package = pkgs.swayfx; + wrapperFeatures.gtk = true; + }; + + waybar.enable = true; }; sisyphus.users.wantedGroups = [ diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index 9766b08..8507bf0 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -17,7 +17,7 @@ in { source = ../../../stow/alacritty/.config/alacritty; }; ".config/dunst" = { - inherit (config.sisyphus.desktop.sway) enable; + enable = config.sisyphus.desktop.hyprland.enable || config.sisyphus.desktop.sway.enable; source = ../../../stow/dunst/.config/dunst; }; ".config/foot" = { -- 2.47.2 From f4464866782e2b6d656d6b0197c7dc7119cb2377 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:05:04 +0200 Subject: [PATCH 39/77] chore: Update scripts --- scripts/do-not-disturb.sh | 19 ------------- scripts/toggle-light-dark.sh | 8 ++---- scripts/toggle-notifications.sh | 48 +++++++++++++++++++++++++++++++++ scripts/toggle-tailscale.sh | 41 ++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 25 deletions(-) delete mode 100755 scripts/do-not-disturb.sh create mode 100755 scripts/toggle-notifications.sh create mode 100755 scripts/toggle-tailscale.sh diff --git a/scripts/do-not-disturb.sh b/scripts/do-not-disturb.sh deleted file mode 100755 index c9c5f21..0000000 --- a/scripts/do-not-disturb.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# Script to toggle Do not disturb mode for dunst - -# Get current state -if [ "$( command -v dunstctl )" ]; then - current_state="$( dunstctl is-paused )" -fi - -# Toggle -if [ "${current_state}" == "false" ] ; then - notify-send 'Hiding notifications' - sleep 5 - # makoctl set-mode do-not-disturb - dunstctl set-paused true -else - # makoctl set-mode default - dunstctl set-paused false - notify-send 'Showing notifications' -fi diff --git a/scripts/toggle-light-dark.sh b/scripts/toggle-light-dark.sh index 80e4d0d..c4667bf 100755 --- a/scripts/toggle-light-dark.sh +++ b/scripts/toggle-light-dark.sh @@ -30,10 +30,6 @@ declare -A wallpaper wallpaper[${THEME_LIGHT}]="bg-light" wallpaper[${THEME_DARK}]="bg-dark" -declare -A icon -icon[${THEME_LIGHT}]="\uf185" -icon[${THEME_DARK}]="\uf186" - ############# ### Logic ### ############# @@ -58,8 +54,8 @@ while getopts ":m:g" option; do class='activated' percentage=100 fi - printf '{"text": "%s", "alt": "%s", "tooltip": "Set theme to %s", "percentage": %d, "class": "%s"}' \ - "${icon[${current_state}]}" "${gsettings_alt[${next_state}]}" "${next_state}" "${percentage:=0}" "${class:="none"}" + printf '{"alt": "%s", "tooltip": "Set theme to %s", "percentage": %d, "class": "%s"}' \ + "${gsettings_alt[${current_state}]}" "${next_state}" "${percentage:=0}" "${class:="none"}" exit 0 ;; *) diff --git a/scripts/toggle-notifications.sh b/scripts/toggle-notifications.sh new file mode 100755 index 0000000..fe5624a --- /dev/null +++ b/scripts/toggle-notifications.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Script to toggle Do not disturb mode for dunst + +# Get current state +if [ "$( command -v dunstctl )" ]; then + current_state="$( dunstctl is-paused )" +fi + +while getopts ":g" option; do + case "${option}" in + g) + if [ "${current_state}" == "false" ]; then + state='normal' + tooltip='Hide notifications' + class='none' + else + state='paused' + tooltip='Show notifications' + class='activated' + fi + printf '{"alt": "%s", "tooltip": "%s", "class": "%s" }' \ + "${state}" "${tooltip}" "${class}" + exit 0 + ;; + esac +done + +# Toggle +if [ "${current_state}" == "false" ] ; then + notify-send 'Hiding notifications' + sleep 5 + + if [ "$(command -v makoctl)" ]; then + makoctl set-mode do-not-disturb + fi + if [ "$(command -v dunstctl)" ]; then + dunstctl set-paused true + fi +else + if [ "$(command -v makoctl)" ]; then + makoctl set-mode default + fi + if [ "$(command -v dunstctl)" ]; then + dunstctl set-paused false + fi + + notify-send 'Showing notifications' +fi diff --git a/scripts/toggle-tailscale.sh b/scripts/toggle-tailscale.sh new file mode 100755 index 0000000..0263c29 --- /dev/null +++ b/scripts/toggle-tailscale.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Script to toggle Do not disturb mode for dunst + +STOPPED_MSG='Tailscale is stopped' + +# Check if tailscale is installed +if [ ! "$( command -v tailscale )" ]; then + echo 'Tailscale is not installed!' + exit 1 +fi + +# Get current state +status="$( tailscale status )" +current_state="$( grep -o "${STOPPED_MSG}" <<< "${status}" )" + +while getopts ":g" option; do + case "${option}" in + g) + if [ "${current_state}" == "${STOPPED_MSG}" ]; then + state='disconnected' + tooltip='Connect tailnet' + else + state='connected' + tooltip="${status:='Disconnect tailnet'}" + fi + + printf '{"alt": "%s", "tooltip": "%q", "class": "%s" }' \ + "${state}" "${tooltip}" "${state}" + exit 0 + ;; + esac +done + +# Toggle +if [ "${current_state}" == "${STOPPED_MSG}" ] ; then + notify-send 'Connecting tailnet' + notify-send 'Connected tailnet' "$( tailscale up )" +else + notify-send 'Disconnecting tailnet' + notify-send 'Disconnected tailnet' "$( tailscale down )" +fi -- 2.47.2 From 913562b98b3278c7b6087827c375f5acfb6bcb66 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:06:29 +0200 Subject: [PATCH 40/77] feat(yubikey-touch-detector): fix? --- nixos/modules/hardware/yubikey/default.nix | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/nixos/modules/hardware/yubikey/default.nix b/nixos/modules/hardware/yubikey/default.nix index 708b9c1..2134c87 100644 --- a/nixos/modules/hardware/yubikey/default.nix +++ b/nixos/modules/hardware/yubikey/default.nix @@ -25,11 +25,17 @@ in { ]; # Send a notification if the YubiKey is waiting for touch. - systemd.user.services.yubikey-touch-detector = { + systemd.services.yubikey-touch-detector = { enable = true; description = "Detects when your YubiKey is waiting for a touch"; - path = with pkgs; [ yubikey-touch-detector ]; - script = ''exec yubikey-touch-detector --notify''; + path = with pkgs; [ + gnupg + yubikey-touch-detector + ]; + wantedBy = [ + "graphical-session.target" + ]; + script = ''exec yubikey-touch-detector --libnotify''; environment.YUBIKEY_TOUCH_DETECTOR_LIBNOTIFY = "true"; }; }; -- 2.47.2 From 0e966c620128f3e577c984f16cb24356b9ec0ee7 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:09:26 +0200 Subject: [PATCH 41/77] chore: Updates --- colors.sh | 144 ++++++++++++++++++ nixos/hosts/Tibo-NixFat/default.nix | 13 +- .../Tibo-NixFat/hardware-configuration.nix | 6 +- nixos/modules/services/pipewire/default.nix | 6 +- .../virtualisation/virtualbox/default.nix | 2 + 5 files changed, 163 insertions(+), 8 deletions(-) diff --git a/colors.sh b/colors.sh index d7ccfdc..e51c155 100644 --- a/colors.sh +++ b/colors.sh @@ -79,3 +79,147 @@ printf "\033]4;14;#74C7EC\007" # FFFFFF # White 15 printf "\033]4;15;#FFFFFF\007" + +# NEW COLORS 20241101 +# +# Nr # R G B H S B # Name +# FG # 250 250 250 0 0 98 # Daisy (White) +printf "\033]10;#FAFAFA\007" +# BG # 19 19 19 0 0 7 # - +printf "\033]11;#131313\007" + +# Regular colors (0-7) + +# Nr # R G B H S B # Name +# 0 # 61 61 61 0 0 24 # - (Black) +printf "\033]4;0;#3D3D3D\007" +# 1 # 186 19 61 345 90 73 # - (Red) +printf "\033]4;1;#BA133D\007" +# 2 # 61 186 19 105 90 73 # - (Green) +printf "\033]4;2;#3DBA13\007" +# 3 # 186 144 19 45 90 73 # - (Yellow) +printf "\033]4;3;#BA9013\007" +# 4 # 19 61 186 225 90 73 # - (Blue) +printf "\033]4;4;#133DBA\007" +# 5 # 144 19 186 285 90 73 # - (Magenta) +printf "\033]4;5;#9013BA\007" +# 6 # 19 186 144 165 90 73 # - (Cyan) +printf "\033]4;6;#13BA90\007" +# 7 # 186 186 186 0 0 73 # - (White) +printf "\033]4;7;#BABABA\007" + +# Bright colors (8-15) + +# Nr # R G B H S B # Name +# 8 # 122 122 122 0 0 48 # - (Black) +printf "\033]4;8;#363636\007" +# 9 # 250 25 81 345 90 98 # - (Red) +printf "\033]4;9;#FA1951\007" +# 10 # 81 250 25 105 90 98 # - (Green) +printf "\033]4;10;#51FA19\007" +# 11 # 250 194 25 45 90 98 # - (Yellow) +printf "\033]4;11;#FAC219\007" +# 12 # 25 81 250 225 90 98 # - (Blue) +printf "\033]4;12;#1951FA\007" +# 13 # 194 25 250 285 90 98 # - (Magenta) +printf "\033]4;13;#C219FA\007" +# 14 # 25 259 194 165 90 98 # - (Cyan) +printf "\033]4;14;#19FAC2\007" +# 15 # 250 250 250 0 0 98 # - (White) +printf "\033]4;15;#FAFAFA\007" + +# BRIGHTER +# +# Nr # R G B H S B # Name +# FG # 250 250 250 0 0 98 # Daisy (White) +printf "\033]11;#FAFAFA\007" +# BG # 19 19 19 0 0 7 # - +printf "\033]10;#131313\007" + +# Regular colors (0-7) + +# Nr # R G B H S B # Name +# 0 # 61 61 61 0 0 24 # - (Black) +printf "\033]4;0;#3D3D3D\007" +# 1 # 186 19 61 345 90 73 # - (Red) +printf "\033]4;1;#E62E4D\007" +# 2 # 61 186 19 105 90 73 # - (Green) +printf "\033]4;2;#4DE62E\007" +# 3 # 186 144 19 45 90 73 # - (Yellow) +printf "\033]4;3;#E6C72E\007" +# 4 # 19 61 186 225 90 73 # - (Blue) +printf "\033]4;4;#2E4CE6\007" +# 5 # 144 19 186 285 90 73 # - (Magenta) +printf "\033]4;5;#C52DE3\007" +# 6 # 19 186 144 165 90 73 # - (Cyan) +printf "\033]4;6;#2EE6C7\007" +# 7 # 186 186 186 0 0 73 # - (White) +printf "\033]4;7;#BABABA\007" + +# Bright colors (8-15) + +# Nr # R G B H S B # Name +# 8 # 122 122 122 0 0 48 # - (Black) +printf "\033]4;8;#7A7A7A\007" +# 9 # 250 25 81 345 90 98 # - (Red) +printf "\033]4;9;#FF002B\007" +# 10 # 81 250 25 105 90 98 # - (Green) +printf "\033]4;10;#2BFF00\007" +# 11 # 250 194 25 45 90 98 # - (Yellow) +printf "\033]4;11;#FFd500\007" +# 12 # 25 81 250 225 90 98 # - (Blue) +printf "\033]4;12;#002AFF\007" +# 13 # 194 25 250 285 90 98 # - (Magenta) +printf "\033]4;13;#D400FF\007" +# 14 # 25 259 194 165 90 98 # - (Cyan) +printf "\033]4;14;#00FFC0\007" +# 15 # 250 250 250 0 0 98 # - (White) +printf "\033]4;15;#FAFAFA\007" + +# TEsting again + +# Nr # R G B H S B # Name +# FG # 250 250 250 0 0 98 # Daisy (White) +# FAFAFA # Daisy (Foreground) +printf "\033]10;#FAFAFA\007" +# 171717 # Background +printf "\033]11;#171717\007" + +# Nr # R G B H S B # Name +# 0 # 61 61 61 0 0 24 # - (Black) +printf "\033]4;0;#202124\007" +# 1 # 186 19 61 345 90 73 # - (Red) +printf "\033]4;1;#EA4335\007" +# 2 # 61 186 19 105 90 73 # - (Green) +printf "\033]4;2;#34A853\007" +# 3 # 186 144 19 45 90 73 # - (Yellow) +printf "\033]4;3;#FBBC04\007" +# 4 # 19 61 186 225 90 73 # - (Blue) +printf "\033]4;4;#4285F4\007" +# 5 # 144 19 186 285 90 73 # - (Magenta) +printf "\033]4;5;#A142F4\007" +# 6 # 19 186 144 165 90 73 # - (Cyan) +printf "\033]4;6;#24C1E0\007" +# 7 # 186 186 186 0 0 73 # - (White) +printf "\033]4;7;#FBFCF8\007" + +# Bright colors (8-15) + +# Nr # R G B H S B # Name +# 8 # 122 122 122 0 0 48 # - (Black) +printf "\033]4;8;#5F6368\007" +# 9 # 250 25 81 345 90 98 # - (Red) +printf "\033]4;9;#EA4335\007" +# 10 # 81 250 25 105 90 98 # - (Green) +printf "\033]4;10;#34A853\007" +# 11 # 250 194 25 45 90 98 # - (Yellow) +printf "\033]4;11;#FBBC05\007" +# 12 # 25 81 250 225 90 98 # - (Blue) +printf "\033]4;12;#4285F4\007" +# 13 # 194 25 250 285 90 98 # - (Magenta) +printf "\033]4;13;#A142F4\007" +# 14 # 25 259 194 165 90 98 # - (Cyan) +printf "\033]4;14;#24C1E0\007" +# 15 # 250 250 250 0 0 98 # - (White) +printf "\033]4;15;#FFFFFF\007" + diff --git a/nixos/hosts/Tibo-NixFat/default.nix b/nixos/hosts/Tibo-NixFat/default.nix index 44554f0..0d2fcd6 100644 --- a/nixos/hosts/Tibo-NixFat/default.nix +++ b/nixos/hosts/Tibo-NixFat/default.nix @@ -19,7 +19,7 @@ networking = { networkmanager.enable = true; - # openconnect-sso.enable = true; + openconnect-sso.enable = true; }; nix = { @@ -87,7 +87,10 @@ powerOnBoot = false; }; - networking.hostName = "Tibo-NixFat"; + networking = { + hostName = "Tibo-NixFat"; + networkmanager.wifi.powersave = true; + }; services = { logind = { @@ -108,9 +111,13 @@ # Touchpad libinput.enable = true; + + thermald.enable = true; }; - system.stateVersion = "24.05"; + system.stateVersion = "24.11"; + + systemd.coredump.enable = false; time.timeZone = "Europe/Brussels"; diff --git a/nixos/hosts/Tibo-NixFat/hardware-configuration.nix b/nixos/hosts/Tibo-NixFat/hardware-configuration.nix index 30ba69a..b0dfd70 100644 --- a/nixos/hosts/Tibo-NixFat/hardware-configuration.nix +++ b/nixos/hosts/Tibo-NixFat/hardware-configuration.nix @@ -49,5 +49,9 @@ # networking.interfaces.wlp111s0.useDHCP = lib.mkDefault true; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + nixpkgs.config.allowUnfree = true; + hardware = { + enableAllFirmware = true; + cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; } diff --git a/nixos/modules/services/pipewire/default.nix b/nixos/modules/services/pipewire/default.nix index b83eedc..68985d3 100644 --- a/nixos/modules/services/pipewire/default.nix +++ b/nixos/modules/services/pipewire/default.nix @@ -29,10 +29,8 @@ in { # Headphone jack on laptop { "node.name" = "alsa_output.pci-0000_00_1f.3.analog-stereo"; } ]; - actions = { - update-props = { - "session.suspend-timeout-seconds" = 0; - }; + actions.update-props = { + "session.suspend-timeout-seconds" = 0; }; } ]; diff --git a/nixos/modules/virtualisation/virtualbox/default.nix b/nixos/modules/virtualisation/virtualbox/default.nix index ccd8fca..a86ada5 100644 --- a/nixos/modules/virtualisation/virtualbox/default.nix +++ b/nixos/modules/virtualisation/virtualbox/default.nix @@ -10,11 +10,13 @@ in { host = { enable = true; enableExtensionPack = true; + enableHardening = true; }; guest = { enable = true; clipboard = true; seamless = true; + vboxsf = false; # Module not found?... }; }; -- 2.47.2 From 008ecba1a3c608ea32d684af13f050e4a2a81762 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:10:30 +0200 Subject: [PATCH 42/77] fix(foot): Remove padding --- stow/foot/.config/foot/foot.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stow/foot/.config/foot/foot.ini b/stow/foot/.config/foot/foot.ini index 51fdc7e..efcd8d9 100644 --- a/stow/foot/.config/foot/foot.ini +++ b/stow/foot/.config/foot/foot.ini @@ -29,7 +29,7 @@ dpi-aware=yes # initial-window-size-pixels=700x500 # Or, # initial-window-size-chars= # initial-window-mode=windowed -pad=10x10 # optionally append 'center' +#pad=10x10 # optionally append 'center' # resize-delay-ms=100 # notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} -- 2.47.2 From 19a8cbf400893c6c84ba8d9d3262343673dcdc55 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:13:13 +0200 Subject: [PATCH 43/77] chore(sway): Update --- stow/sway/.config/sway/config | 4 ++ stow/sway/.config/sway/modes | 69 ++++++++++++++++++++--------------- stow/sway/.config/sway/style | 4 ++ 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/stow/sway/.config/sway/config b/stow/sway/.config/sway/config index 922a75b..e10c9dc 100644 --- a/stow/sway/.config/sway/config +++ b/stow/sway/.config/sway/config @@ -61,5 +61,9 @@ exec wlsunset -l 50.50 -L 4.00 -t 3000 -T 6500 exec gnome-keyring-daemon --start --components=secrets # Secrets exec dunst --verbosity crit # Notification manager exec swayidle -w +exec waycorner exec nextcloud --background + +# SwayFX +blur enable diff --git a/stow/sway/.config/sway/modes b/stow/sway/.config/sway/modes index 074dab5..d62608f 100644 --- a/stow/sway/.config/sway/modes +++ b/stow/sway/.config/sway/modes @@ -7,40 +7,49 @@ set $default "default" # Resizing set $mode_resize "Resize" bindsym $flag+r mode $mode_resize -mode $mode_resize bindsym { - $right resize grow width 10 px or 10 ppt - $up resize grow height 10 px or 10 ppt - $left resize shrink width 10 px or 10 ppt - $down resize shrink height 10 px or 10 ppt +mode $mode_resize { + bindsym { + $right resize grow width 10 px or 10 ppt + $up resize grow height 10 px or 10 ppt + $left resize shrink width 10 px or 10 ppt + $down resize shrink height 10 px or 10 ppt - Right resize grow width 10 px or 10 ppt - Up resize grow height 10 px or 10 ppt - Left resize shrink width 10 px or 10 ppt - Down resize shrink height 10 px or 10 ppt + Right resize grow width 10 px or 10 ppt + Up resize grow height 10 px or 10 ppt + Left resize shrink width 10 px or 10 ppt + Down resize shrink height 10 px or 10 ppt - Shift+$right resize grow width 50 px or 50 ppt - Shift+$up resize grow height 50 px or 50 ppt - Shift+$left resize shrink width 50 px or 50 ppt - Shift+$down resize shrink height 50 px or 50 ppt + Shift+$right resize grow width 50 px or 50 ppt + Shift+$up resize grow height 50 px or 50 ppt + Shift+$left resize shrink width 50 px or 50 ppt + Shift+$down resize shrink height 50 px or 50 ppt - Shift+Right resize grow width 50 px or 50 ppt - Shift+Up resize grow height 50 px or 50 ppt - Shift+Left resize shrink width 50 px or 50 ppt - Shift+Down resize shrink height 50 px or 50 ppt + Shift+Right resize grow width 50 px or 50 ppt + Shift+Up resize grow height 50 px or 50 ppt + Shift+Left resize shrink width 50 px or 50 ppt + Shift+Down resize shrink height 50 px or 50 ppt - $flag+$right move right - $flag+$up move up - $flag+$left move left - $flag+$down move down + $flag+$right move right + $flag+$up move up + $flag+$left move left + $flag+$down move down - $flag+Right move right - $flag+Up move up - $flag+Left move left - $flag+Down move down + $flag+Right move right + $flag+Up move up + $flag+Left move left + $flag+Down move down - $flag+r mode $default - Escape mode $default - Return mode $default + $flag+r mode $default + Escape mode $default + Return mode $default + } + + bindgesture { + swipe:2:right resize grow width 10 px or 10 ppt + swipe:2:down resize grow height 10 px or 10 ppt + swipe:2:left resize shrink width 10 px or 10 ppt + swipe:2:up resize shrink height 10 px or 10 ppt + } } # System actions @@ -94,8 +103,8 @@ mode $mode_screenshot bindsym { set $mode_launcher "Launch (f)irefox, (s)potify or (t)hunderbird." bindsym $flag+o mode $mode_launcher mode $mode_launcher bindsym { - f exec firefox - t exec thunderbird + f exec firefox, mode $default + t exec thunderbird, mode $default $flag+o mode $default Escape mode $default diff --git a/stow/sway/.config/sway/style b/stow/sway/.config/sway/style index 7377b3b..8aea2fc 100644 --- a/stow/sway/.config/sway/style +++ b/stow/sway/.config/sway/style @@ -15,6 +15,10 @@ default_border pixel 1 default_floating_border normal 1 hide_edge_borders smart smart_borders on +gaps { + inner 5 + outer 3 +} # Mimic no titles by setting the text color to background color # border backgr. text indic. child_border -- 2.47.2 From a41cdeaf39730faed7e34b9d81c77ea7cc141361 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:17:34 +0200 Subject: [PATCH 44/77] chore(waybar): Update --- stow/waybar/.config/waybar/config | 42 -- stow/waybar/.config/waybar/config.jsonc | 60 +++ stow/waybar/.config/waybar/left.json | 7 +- stow/waybar/.config/waybar/modern.css | 80 ++++ stow/waybar/.config/waybar/modules.json | 438 ++++++++++++--------- stow/waybar/.config/waybar/style-dark.css | 14 + stow/waybar/.config/waybar/style-light.css | 14 + stow/waybar/.config/waybar/style.css | 196 ++++----- 8 files changed, 504 insertions(+), 347 deletions(-) delete mode 100644 stow/waybar/.config/waybar/config create mode 100644 stow/waybar/.config/waybar/config.jsonc create mode 100644 stow/waybar/.config/waybar/modern.css create mode 100644 stow/waybar/.config/waybar/style-dark.css create mode 100644 stow/waybar/.config/waybar/style-light.css diff --git a/stow/waybar/.config/waybar/config b/stow/waybar/.config/waybar/config deleted file mode 100644 index 3b1a053..0000000 --- a/stow/waybar/.config/waybar/config +++ /dev/null @@ -1,42 +0,0 @@ -// -// ~/.config/waybar/config -// - -[{ - "name": "toggle", - - "mode": "hide", - "ipc": true, - - "position": "top", - "height": 25, - "spacing": 4, - "margin": "-25px 0 0 0", // Show this bar on top of the other one, seemingly the "same" one. - - "custom/sep": { - "format": "\uf142" - }, - - "include": [ - // Import modules (!) - "~/.config/waybar/modules.json", -// "~/.config/waybar/default.json" - "~/.config/waybar/left.json" - ], - -}, - -{ - "name": "keep", - "position": "top", - "height": 25, - "modules-left": ["sway/mode"], - "modules-center": ["clock"], - "modules-right": ["privacy", "keyboard-state"], - - "include": [ - // Import modules (!) - "~/.config/waybar/modules.json" - ], -}] - diff --git a/stow/waybar/.config/waybar/config.jsonc b/stow/waybar/.config/waybar/config.jsonc new file mode 100644 index 0000000..2a4f8a4 --- /dev/null +++ b/stow/waybar/.config/waybar/config.jsonc @@ -0,0 +1,60 @@ +/* * * * * * * * * * * * * * * * * + * * + * ~/.config/waybar/config.jsonc * + * * + * * * * * * * * * * * * * * * * */ + +[ + /* Always visible, contains less information */ + { + "name": "keep", + "position": "top", + "height": 26, + "modules-left": [ + "group/mode" + ], + "modules-center": [ + "clock#center" + ], + "modules-right": [ + "keyboard-state#numlock", + "keyboard-state#capslock", + "privacy" + ], + "include": [ + "~/.config/waybar/modules.json" + ] + }, + + /* Toggle this bar, contains all information */ + { + "name": "toggle", + "mode": "hide", + "ipc": true, + "position": "top", + "height": 26, + /* Show this bar on top of the other one, seemingly replacing it. */ + "margin": "-26px 0 0 0", + "modules-left": [ + "custom/meta", + "sway/window", + "group/workspaces", + "custom/scratchpad-indicator", + ], + "modules-center": [ + "mpris" + ], + "modules-right": [ + "privacy", + "tray", + "group/control-center", + "group/network", + "pulseaudio", + "group/power", + "clock#bar" + ], + "include": [ + "~/.config/waybar/modules.json" + ] + } +] diff --git a/stow/waybar/.config/waybar/left.json b/stow/waybar/.config/waybar/left.json index 8ab0639..86b9a00 100644 --- a/stow/waybar/.config/waybar/left.json +++ b/stow/waybar/.config/waybar/left.json @@ -2,16 +2,15 @@ "modules-left": [ "sway/workspaces", "custom/scratchpad-indicator", - "mpris", "group/system" ], "modules-right": [ - "group/hardware", + "tray", + "sway/language", "bluetooth", "network", "pulseaudio", "group/battery", - "custom/sep", - "tray" + "mpris" ] } diff --git a/stow/waybar/.config/waybar/modern.css b/stow/waybar/.config/waybar/modern.css new file mode 100644 index 0000000..35ce570 --- /dev/null +++ b/stow/waybar/.config/waybar/modern.css @@ -0,0 +1,80 @@ +@define-color foreground rgb(202, 202, 202); +@define-color background rgb( 3, 3, 3); + +@define-color highlight-background alpha(@foreground, 0.4); + +@define-color accent #00897b; +@define-color white #ecf0f1; +@define-color warning-red #eb4d4b; + +* { + font-family: letter, "Font Awesome 6 Free", font-awesome, monospace; + font-size: 13px; + font-weight: 600; +} + +window#waybar { + border: none; + color: @white; + + transition-property: background-color; + transition-duration: .5s; +} + +window#waybar.keep { + background-color: @transparent; +} + +window#waybar.toggle { + background-color: alpha(@foreground, 0.4); +} + +tooltip { + background: alpha(@background, 0.8); +} +tooltip label { + color: @white; +} + +#workspaces button { + border: none; + padding: 0 8px; + border-radius: 5px; + animation: ws_normal 20s ease-in-out 1; +} + +#mode, +#workspaces button.focused { + background-color: alpha(@background, 0.2); +} + +#workspaces button:hover { + background-color: alpha(@background, 0.2); +} + +#battery, +#disk, +#bluetooth, +#clock, +#custom-browser, +#custom-scratchpad-indicator, +#custom-system-hibernate, #custom-system-lock, #custom-system-reboot, #custom-system-shutdown, #custom-system-sleep, +#custom-toggle-light-dark, +#custom-toggle-night-light, +#custom-toggle-notifications, +#cpu, +#idle_inhibitor, +#keyboard-state, +#memory, +#mpris, +#network, +#sway-language, +#sway-window, +#power-profiles-daemon, +#privacy, +#pulseaudio, +#temperature, +#tray { + color: @white; +} + diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index 026ad07..21b3534 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -2,148 +2,224 @@ "battery": { "format": "{capacity}% {icon}", "format-alt": "{time} {icon}", - "format-charging": "{capacity}% \uf0e7 {icon}", - "format-icons": ["\uf244", "\uf243", "\uf242", "\uf241", "\uf240"], + "format-charging": "{capacity}% \ue55b", /*  */ "format-plugged": "{capacity}% \ue55c", - "states": { - "warning": 30, - "critical": 15 + "format-icons": [ + "\uf244", /*  */ + "\uf243", /*  */ + "\uf242", /*  */ + "\uf241", /*  */ + "\uf240" /*  */ + ], + "states": { + "warning": 25, + "critical": 12 } }, - "disk": { - "interval": 30, - "format": "{percentage_used}% \uf0a0", - "on-click": "kitty -e duf /", - "path": "/", - "tooltip-format": "{used} used out of {total} on {path} ({percentage_free}% or {free} free)" - }, - "bluetooth": { - "format-disabled": "\uf294", - "format-off": "\uf294", - "format-on": "\uf294", - "format-connected": "\uf294c", + "format-disabled": "\uf294", /*  */ + "format-off": "\uf294", /*  */ + "format-on": "\uf294", /*  */ + "format-connected": "\uf294c", /* c */ "max-length": 10.3, "on-click": "bluetoothctl power $( bluetoothctl show | sed -n 's/\\s*Powered: \\(yes\\|no\\)/\\1/p' | sed 's/yes/off/;s/no/on/' )", - "on-click-right": "kitty -e bluetoothctl", "tooltip-format": "{status}", "tooltip-format-on": "{status}, no devices connected", "tooltip-format-connected": "{status} ({num_connections}):\n{device_enumerate}", "tooltip-format-enumerate-connected": "{device_alias} ({device_address})", "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}" }, - - "clock": { + + "clock#center": { "format": "{:%H:%M}", - "format-alt": "{:%d/%m/%Y %H:%M}", + "format-alt": "{:%a %b %d, %Y, %R}", "timezone": "Europe/Brussels", - "tooltip-format": "{:%Y %B}\n{calendar}" + "tooltip-format": "{:%Y %B}\n{calendar}", + "calendar": { + "mode": "month", + "week-pos": "left", + "format": { + /* Highlight todays date. */ + "today": "{}" + } + }, + "actions": { + "on-click": "mode" + } }, - "custom/browser": { - "format": "\uf120", - "on-click": "dmenu_run", - "tooltip-format": "Launch an application" + "clock#bar": { + "format": "{:%a %b %d, %R}", + "timezone": "Europe/Brussels", + "tooltip-format": "{:%Y %B}\n{calendar}", + "calendar": { + "mode-mon-col": 3, + "on-scroll": 1, + "format": { + /* Highlight today's date. */ + "today": "{}" + } + }, + "actions": { + "on-click": "mode" + } }, - "custom/light-dark-toggle": { - "exec": "bash ${SCRIPT_DIR}/toggle-light-dark.sh -g", - "exec-on-event": true, - "on-click": "bash ${SCRIPT_DIR}/toggle-light-dark.sh", - // "format": "\uf042 ", - "format": "{icon}", - "format-icons": [ - "\uf185", - "\uf111" - ], - "tooltip": true, - "tooltip-format": "Toggle between light and dark mode" + "custom/control-center": { + "format": "\uf085", /*  */ + "tooltip": false }, - "custom/keyboard-switch": { - "format": "\uf11c", - "on-click": "swaymsg input type:keyboard xkb_switch_layout next", - "tooltip-format": "Toggle keyboard layouts", - "tooltip": true - }, - - "custom/night-light-toggle": { - "on-click": "bash ${SCRIPT_DIR}/sunset.sh", - "format": "\uf0eb ", - "tooltip": true, - "tooltip-format": "Toggle night-light on or off" + "custom/meta": { + "format": "\uf17c", /*  */ + "tooltip": false, + "on-click": "dmenu_run" }, "custom/scratchpad-indicator": { "interval": 3, "return-type": "json", "exec": "swaymsg -t get_tree | jq --unbuffered --compact-output '(recurse(.nodes[]) | select(.name == \"__i3_scratch\") | .focus) as $scratch_ids | [.. | (.nodes? + .floating_nodes?) // empty | .[] | select(.id |IN($scratch_ids[]))] as $scratch_nodes | if ($scratch_nodes|length) > 0 then { text: \"\\($scratch_nodes | length)\", tooltip: $scratch_nodes | map(\"\\(.app_id // .window_properties.class) (\\(.id)): \\(.name)\") | join(\"\\n\") } else empty end'", - "format": "{} \uf2d2", + "format": "\uf2d2 {}", "on-click": "exec swaymsg 'scratchpad show'", "on-click-right": "exec swaymsg 'move scratchpad'" }, "custom/system-lock": { - "format": "\uf09c", + "format": "\uf09c", /*  */ "tooltip": true, "tooltip-format": "Lock device", "on-click": "swaylock -f" }, "custom/system-sleep": { - "format": "\uf186", + "format": "\uf186", /*  */ "tooltip": true, "tooltip-format": "Put device to sleep", "on-click": "swaylock -f; systemctl suspend" }, "custom/system-hibernate": { - "format": "\uf2dc", + "format": "\uf2dc", /*  */ "tooltip": true, "tooltip-format": "Hibernate device", "on-click": "swaylock -f; systemctl hibernate" }, "custom/system-reboot": { - "format": "\uf0e2", + "format": "\uf0e2", /*  */ "tooltip": true, "tooltip-format": "Reboot device", "on-click": "systemctl reboot" }, "custom/system-shutdown": { - "format": "\uf011", + "format": "\uf011", /*  */ "tooltip": true, "tooltip-format": "Shutdown device", "on-click": "systemctl poweroff -i" }, - "custom/toggle-notifications": { - "on-click": "bash ${SCRIPT_DIR}/do-not-disturb.sh", - "tooltip-format": "Toggle notifications", - "format": "\uf1f6 ", - "tooltip": true - }, - - "cpu": { - "format": "{usage}% \uf2db", - "on-click": "foot -e htop", + "custom/toggle-light-dark": { + "exec": "sleep 1 && bash ~/projects/sisyphus/scripts/toggle-light-dark.sh -g", + "return-type": "json", + "on-click": "bash ~/projects/sisyphus/scripts/toggle-light-dark.sh", + "format": "{icon}", + "format-icons": { + "default": "\uf185", + "prefer-dark": "\uf005" + }, "tooltip": true }, - "group/battery": { + "custom/toggle-notifications": { + "exec": "sleep 6 && bash ~/projects/sisyphus/scripts/toggle-notifications.sh -g", + "return-type": "json", + "on-click": "bash ~/projects/sisyphus/scripts/toggle-notifications.sh", + "format": "NOTIS {icon}", + "format-icons": { + "normal": "NRML", + "paused": "PAISED" + }, + "tooltip": true + }, + + "custom/toggle-tailscale": { + "exec": "sleep 2 && bash ~/projects/sisyphus/scripts/toggle-tailscale.sh -g", + "return-type": "json", + "on-click": "bash ~/projects/sisyphus/scripts/toggle-tailscale.sh", + "format": "{icon}", + "format-icons": { + "disconnected": "\ue50b", + "connected": "\ue509", + }, + "tooltip": true + }, + + "group/control-center": { "orientation": "inherit", "modules": [ + "custom/control-center", + "group/language", + /* "hyprland/language", "sway/language", */ + "custom/toggle-notifications", + "custom/toggle-light-dark", + "bluetooth" + ], + "drawer": { + "transition-duration": 500, + "transition-left-to-right": false, + "children-class": "drawer-child" + } + }, + + "group/language": { + "orientation": "inherit", + "modules": [ + "hyprland/language", + "sway/language" + ] + }, + + "group/mode": { + "orientation": "inherit", + "modules": [ + "hyprland/submap", + "sway/mode" + ] + }, + + "group/network": { + "orientation": "inherit", + "modules": [ + /* Preview */ + "network", + /* Most-left */ + "custom/toggle-tailscale" + /* Most-right */ + ], + "drawer": { + "transition-duration": 500, + "transition-left-to-right": false, + "children-class": "drawer-child" + } + }, + + "group/power": { + "orientation": "inherit", + "modules": [ + /* Preview */ "battery", + /* Most-left */ "custom/system-shutdown", "custom/system-reboot", "custom/system-hibernate", "custom/system-sleep", "custom/system-lock", - "custom/sep", "power-profiles-daemon", - "custom/sep" + "idle_inhibitor" + /* Most-right */ ], "drawer": { "transition-duration": 500, @@ -152,170 +228,172 @@ } }, - "group/hardware": { + "group/workspaces": { "orientation": "inherit", "modules": [ - "custom/sep", - "memory", - "cpu", - "temperature" - ], - "drawer": { - "transition-duration": 500, - "transition-left-to-right": false, - "children-class": "drawer-child" - } + "hyprland/workspaces", + "sway/workspaces" + ] }, - "group/system": { - "orientation": "inherit", - "modules": [ - "idle_inhibitor", - "custom/light-dark-toggle", - "custom/night-light-toggle", - "custom/keyboard-switch", - "custom/toggle-notifications" - ], - "drawer": { - "transition-duration": 500, - "tansition-left-to-right": true, - "children-class": "drawer-child" + "hyprland/language": { + "format": "\uf11c", + "on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next && notify-send \"$(hyprctl devices -j | jq -r '.keyboards[] | select(.name == \"at-translated-set-2-keyboard\") | .active_keymap')\" --app-name 'waybar'", + "tooltip": true, + "tooltip-format": "Switch keyboard layouts", + "keyboard-name": "at-translated-set-2-keyboard" + }, + + "hyprland/workspaces": { + "all-outputs": false, + "disable-scroll": true, + "format": "{icon}{name}", + "format-icons": { + "default": "", + "urgent": "\uf071 " /*  */ } }, "idle_inhibitor": { "format": "{icon}", "format-icons": { - "activated": "\uf06e", - "deactivated": "\uf070" - }, + "activated": "\uf06e", /*  */ + "deactivated": "\uf070" /*  */ + }, "tooltip": false }, - "keyboard-state": { + "keyboard-state#capslock": { + "capslock": true, "format": { "capslock": "{icon}" }, "format-icons": { - "locked": "\uf023", + "locked": "\uf11c", /*  */ "unlocked": "" - }, - "numlock": false, - "capslock": true, - "scrollock": false + } }, - "memory": { - "format": "{}% \uf1c0", - "on-click": "kitty -e zenith" + "keyboard-state#numlock": { + "numlock": true, + "format": { + "numlock": "{icon}" + }, + "format-icons": { + "locked": "\uf1ec", /*  */ + "unlocked": "" + } }, "mpris": { - // "ignored-players": ["firefox"] "format": "{player_icon} {dynamic}", "format-paused": "{status_icon} {dynamic}", "tooltip-format": "{player} ({status}) {title} - {artist} - {album}", "player-icons": { - "default": "\uf51f", - "spotify": "\uf1bc", - "mpv": "🎵" + "default": "\uf8d9", /*  */ + "mpv": "\uf144", /*  */ + "spotify": "\uf1bc" /*  */ }, "status-icons": { - "paused": "⏸" + "paused": "\uf04c" /*  */ }, "dynamic-order": [ "title", "artist" ], - "dynamic-len": 40, + "dynamic-len": 40 }, "network": { - "format-disconnected": "\uf127", - "format-ethernet": "\uf6ff {ifname}: {ipadds}/{cidr}", - "format-wifi": "\uf1eb", + "format-disconnected": "\uf127", /*  */ + "format-ethernet": "\uf6ff", /*  */ + "format-linked": "\uf0c1", /*  */ + "format-wifi": "{icon}", "interval": 5, - "on-click-right": "kitty -e nmtui", + "tooltip": true, "tooltip-format": "{ifname}: {ipaddr}", "tooltip-format-disconnected": "Disconnected", - "tooltip-format-wifi": "{essid} ({signalStrength}%)\n{ifname}: {ipaddr}" + "tooltip-format-wifi": "{essid} ({signalStrength}%)\n{ifname}: {ipaddr}", + "format-icons": [ + "\uf05e", /*  */ + "\uf1eb", /*  */ + "\uf1eb" /*  */ + ] + }, + + "power-profiles-daemon": { + "format": "{icon}", + "format-icons": { + "default": "\uf110", /*  */ + "performance": "\uf135", /*  */ + "balanced": "\uf24e", /*  */ + "power-saver": "\uf06c" /*  */ + }, + "tooltip": true, + "tooltip-format": "Profile: {profile}\nDriver: {driver}" + }, + + "privacy": { + "transition-duration": 250, + "icon-size": 16, + "modules": [ + { + "type": "screenshare", + "tooltip": true + }, + { + "type": "audio-in", + "tooltip": true + } + ] + }, + + "pulseaudio": { + "format": "{volume}% {icon}", + "format-headset": "{volume}% \uf58f", /*  */ + "format-muted": "\uf6a9", /*  */ + "format-icons": [ + "\uf026", /*  */ + "\uf027", /*  */ + "\uf028" /*  */ + ], + "scroll-step": 2.0, + "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + }, + + "sway/language": { + "format": "{short}", + "on-click": "swaymsg input type:keyboard xkb_switch_layout next", + "tooltip": true, + "tooltip-format": "Switch keyboard layouts" }, "sway/window": { - "max-length": 85 + "format": "{title}", + "max-length": 20, + "tooltip": true, + "all-outputs": true, + "icon": false, + "icon-size": 18, + "rewrite": { + ".* - (.*)": "$1", + ".* — (.*)": "$1" + } }, "sway/workspaces": { "all-outputs": false, "disable-scroll": true, - "format": "{icon}{name}", + "format": "{icon}{name}", "format-icons": { - "default": "", // Prevent showing workspace name literal. - "urgent": "\uf071 " - }, - // "persistent_workspaces": { - // "0:¯\\_(ツ)_/¯": [] - // } - }, - - "power-profiles-daemon": { - "format": "{icon}", - "tooltip-format": "Power profile: {profile}\nDriver: {driver}", - "tooltip": true, - "format-icons": { - "default": "", - "performance": "", - "balanced": "", - "power-saver": "" + "default": "", + "urgent": "\uf071 " /*  */ } }, - "privacy": { - "icon-spacing": 4, - "icon-size": 18, - "transition-duration": 250, - "modules": [ - { - "type": "screenshare", - "tooltip": true, - "tooltip-icon-size": 18, - }, - { - "type": "audio-in", - "tooltip": true, - "tooltip-icon-size": 18, - }, - ], - }, - - "pulseaudio": { - "format": "{volume}% {icon}{format_source}", - "format-muted": "\uf6a9{format_source}", - "format-bluetooth": "{volume}% {icon}\uf294{format_source}", - "format-bluetooth-muted": "\uf6a9 {icon}\uf294{format_source}", - "format-source": " {volume}% \uf130", - "format-source-muted": "", - "format-icons": { - "headphone": "\uf58f", - "hands-free": "\uf590", - "headset": "\uf590", - "phone": "\uf3ce", - "portable": "\uf3ce", - "car": "\uf1b9", - "default": ["\uf026", "\uf027", "\uf028 "] - }, - "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", - "on-click-right": "pavucontrol", - "scroll-step": -2 - }, - - "temperature": { - "critical-threshold": 70, - "format": "{temperatureC}°C {icon}", - "format-icons": ["\uf2cb", "\uf2c9", "\uf2c7"] - }, - "tray": { + "icon-size": 16, + "show-passive-items": true, "spacing": 10 } } diff --git a/stow/waybar/.config/waybar/style-dark.css b/stow/waybar/.config/waybar/style-dark.css new file mode 100644 index 0000000..d99a2e8 --- /dev/null +++ b/stow/waybar/.config/waybar/style-dark.css @@ -0,0 +1,14 @@ +@import 'style.css'; + +* { + color: #C2C2C2; +} + +window#waybar { + background-color: #171717; +} + +window#waybar button.focused { + background-color: #C2C2C2; +} + diff --git a/stow/waybar/.config/waybar/style-light.css b/stow/waybar/.config/waybar/style-light.css new file mode 100644 index 0000000..a0bf37e --- /dev/null +++ b/stow/waybar/.config/waybar/style-light.css @@ -0,0 +1,14 @@ +@import 'style.css'; + +* { + color: #171717; +} + +window#waybar { + background-color: #C2C2C2; +} + +window#waybar button.focused { + background-color: #171717; +} + diff --git a/stow/waybar/.config/waybar/style.css b/stow/waybar/.config/waybar/style.css index f9fe080..11d3b20 100644 --- a/stow/waybar/.config/waybar/style.css +++ b/stow/waybar/.config/waybar/style.css @@ -1,165 +1,119 @@ -/* - * ~/.config/waybar/style.css - * - * `otf-font-awesome` is required to be installed for icons. - * - * Pick your stylesheet: - * - sharp.css - * - transparent.css - * - round.css - */ +/* * * * * * * * * * * * * * * * + * * + * ~/.config/waybar/style.css * + * * + * * * * * * * * * * * * * * * */ -@define-color transparent-black rgba(23, 23, 23, 0.9); -@define-color white #ecf0f1; -@define-color warning-red #eb4d4b; -@define-color accent #00897b; +@define-color background #C2C2C2; +@define-color foreground #171717; + +/* Pantone / PMS 18-1559 TCX / Red Alert */ +@define-color warning rgb(208, 52, 44); +/* Safety orange */ +@define-color safety rgb(255, 103, 0); + +* { + padding: 0 4px; +} window#waybar { + /* background: linear-gradient(90deg, #CECECE 0%, #D1D1D1 10%, #C9C9C9 50%, #BBBBBB 90%, #BABABA 100%); */ + font-family: letter, "Font Awesome 6 Free", font-awesome, monospace; font-size: 13px; - -webkit-font-smoothing: antialiased; - transition-property: background-color; - transition-duration: .5s; + font-weight: 600; } -#window, #workspaces { - margin: 0 5px; -} - -#workspaces button { - border: none; - border-radius: 0; - min-width: 30px; - padding: 0 5px; -} - -#workspaces button.focused { - background-color: transparent; - color: @white; -} - -#workspaces button:hover { - background-color: transparent; - color: @transparent-black; -} - -#workspaces button.urgent { - color: @white; - background-color: @warning-red; -} - -/* All modules individually. */ -#backlight, -#battery, -#bluetooth, -#clock, -#cpu, -#custom-browser, -#custom-light-dark-toggle, -#custom-night-light-toggle, -#custom-system-lock, #custom-system-sleep, #custom-system-hibernate, #custom-system-reboot, #custom-system-shutdown, -#custom-toggle-notifications, -#disk, -#group-hardware, -#group-system, -#idle_inhibitor, -#keyboard-state, -#memory, -#mode, -#mpd, -#mpris, -#network, -#power-profiles-daemon, -#privacy-item.audio-in, #privacy-item.audio-out, #privacy-item.screenshare, -#pulseaudio, -#temperature, -#tray { - padding: 0 5px; -} - -/* If workspaces is the leftmost module, omit left margin */ -.modules-left > widget:first-child > #workspaces { - margin-left: 0; -} - -/* If workspaces is the rightmost module, omit right margin */ -.modules-right > widget:last-child > #workspaces { +.modules-right, +.modules-right > widget:last-child { + padding-right: 0; margin-right: 0; } -@keyframes blink { - to { - background-color: #ffffff; - color: #000000; - } -} - -label:focus { - background-color: #000000; -} - -/* Module specific colours */ - -#battery.charging, #battery.plugged { - color: #ffffff; +#battery.charging { background-color: #26A65B; + color: #FFFFFF; } #battery.critical:not(.charging) { - background-color: #f53c3c; - color: #ffffff; + background-color: @warning; + color: #FFFFFF; animation-name: blink; animation-duration: 0.5s; - animation-timing-function: linear; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#battery.plugged { + animation-name: blink; + animation-duration: 1.0s; + animation-timing-function: steps(12); animation-iteration-count: infinite; animation-direction: alternate; } #bluetooth.disabled, -#bluetooth.off, -#network.disconnected, -#pulseaudio.muted { +#bluetooth.off { opacity: 0.6; } -#mpris { - color: #2a5c45; - min-width: 100px; +#custom-toggle-tailscale.disconnected { + opacity: 0.6; +} + + +#mpris.Feishin { + background: linear-gradient(45deg, rgba(170,92,195,1) 100%, rgba(0,164,220,1) 0%); } #mpris.spotify { background-color: #66cc99; + color: #2a5c45; } #mpris.vlc { background-color: #ffa000; } -#temperature.critical { - background-color: #eb4d4b; +#network.disconnected { + opacity: 0.6; } -#custom_light-dark-toggle.activated, -#idle_inhibitor.activated { - background-color: #ecf0f1; - color: #2d3436; +#privacy, +#privacy-item, +#privacy-item.screenshare, +#privacy-item.audio-in { + background-color: @safety; +} + +#privacy-item.screenshare { + background-color: #000000; +} + +#pulseaudio.muted { + opacity: 0.6; +} + +#systemd-failed-units.degraded { + background-color: @warning; +} + +#temperature.critical { + background-color: @warning; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: @warning; } #tray > .passive { -gtk-icon-effect: dim; } -#tray > .needs-attention { - -gtk-icon-effect: highlight; - background-color: #eb4d4b; +#workspaces button.urgent { + background-color: @warning; + color: white; } -#privacy-item.audio-in, -#privacy-item.audio-out, -#privacy-item.screenshare { - background-color: #ffaa01; - color: #2d3436; -} - -@import "sharp.css"; - -- 2.47.2 From a8ddc05ddd4fc98c7b32a5cabeab3b34ae4b5f4e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:21:38 +0200 Subject: [PATCH 45/77] feat(gpg): Add config --- nixos/users/tdpeuter/dotfiles.nix | 24 ++++++++++++++------ stow/gnupg/.gnupg/gpg-agent.conf | 5 +++++ stow/gnupg/.gnupg/gpg.conf | 37 +++++++++++++++++++++++++++++++ stow/gnupg/.gnupg/scdaemon.conf | 7 ++++++ 4 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 stow/gnupg/.gnupg/gpg-agent.conf create mode 100644 stow/gnupg/.gnupg/gpg.conf create mode 100644 stow/gnupg/.gnupg/scdaemon.conf diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index 8507bf0..8977c45 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -72,14 +72,15 @@ in { ".config/zellij" = { source = ../../../stow/zellij/.config/zellij; }; - ".oh-my-zsh" = { - enable = config.users.users.tdpeuter.shell == pkgs.zsh; - source = "${pkgs.oh-my-zsh}/share/oh-my-zsh"; + ".gnupg" = { + enable = false; + # inherit (config.programs.gnupg.agent) enable; # TODO Enable Me + source = ../../../stow/gnupg/.gnupg; recursive = true; - }; - ".oh-my-zsh/themes/tdpeuter.zsh-theme" = { - enable = config.users.users.tdpeuter.shell == pkgs.zsh; - source = ../../../stow/zsh/.oh-my-zsh/themes/tdpeuter.zsh-theme; +# onChange = '' +# chmod 700 /home/tdpeuter/.gnupg +# chmod 600 /home/tdpeuter/.gnupg/* +# ''; }; ".ssh/config" = lib.mkIf config.sisyphus.programs.ssh.enable { inherit (config.sisyphus.programs.ssh) enable; @@ -97,6 +98,15 @@ in { }; } (lib.mkIf (config.users.users.tdpeuter.shell == pkgs.zsh) { + ".oh-my-zsh" = { + enable = config.users.users.tdpeuter.shell == pkgs.zsh; + source = "${pkgs.oh-my-zsh}/share/oh-my-zsh"; + recursive = true; + }; + ".oh-my-zsh/themes/tdpeuter.zsh-theme" = { + enable = config.users.users.tdpeuter.shell == pkgs.zsh; + source = ../../../stow/zsh/.oh-my-zsh/themes/tdpeuter.zsh-theme; + }; ".zshrc" = { source = ../../../stow/zsh/.zshrc; }; diff --git a/stow/gnupg/.gnupg/gpg-agent.conf b/stow/gnupg/.gnupg/gpg-agent.conf new file mode 100644 index 0000000..a11a3bd --- /dev/null +++ b/stow/gnupg/.gnupg/gpg-agent.conf @@ -0,0 +1,5 @@ +enable-ssh-support +default-cache-ttl 60 +default-cache-ttl-ssh 60 +max-cache-ttl 120 +max-cache-ttl-ssh 120 diff --git a/stow/gnupg/.gnupg/gpg.conf b/stow/gnupg/.gnupg/gpg.conf new file mode 100644 index 0000000..bb37abf --- /dev/null +++ b/stow/gnupg/.gnupg/gpg.conf @@ -0,0 +1,37 @@ +# Use UTF-8 character encoding everywhere. +display-charset utf-8 +utf8-strings + +# When verifying a signature made from a subkey, require that the +# cross-certification "back signature" on the subkey is present and valid. +require-cross-certification + +# Method references +personal-cipher-preferences AES256 AES192 AES +personal-digest-preferences SHA512 SHA384 SHA256 +personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed + +# New keys config +default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed +cert-digest-algo SHA512 + +# Symmatric ops +s2k-digest-algo SHA512 +s2k-cipher-algo AES256 +# Disable cahcing of passphrase for symmatrical ops +no-symkey-cache + +# Don't leak comments or software version information +no-comments +no-emit-version + +# Display full fingerprints +keyid-format 0xlong +with-fingerprint + +# Other display preferences +list-options show-uid-validity +verify-options show-uid-validity + +# Enable smart card +use-agent diff --git a/stow/gnupg/.gnupg/scdaemon.conf b/stow/gnupg/.gnupg/scdaemon.conf new file mode 100644 index 0000000..9f0e146 --- /dev/null +++ b/stow/gnupg/.gnupg/scdaemon.conf @@ -0,0 +1,7 @@ +# Power down and ask PIN again after timout. +card-timeout 180 # 3 minutes + +# Fix repeatedly prompting for an already-inserted YubiKey. +# It works by disabling CCID-support, so it does not clash with pcsc. +disable-ccid + -- 2.47.2 From 0fa44bc36786a25cbbde4fba9eb4e8579de354d2 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:22:11 +0200 Subject: [PATCH 46/77] chore(ssh): Add keys --- nixos/secrets/HomeLab.yaml | 6 ++++-- nixos/users/tdpeuter/secrets.nix | 1 + stow/ssh/.ssh/config | 6 ++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index 9678afb..f749611 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -1,4 +1,6 @@ HomeLab: + Gitea: + ssh: ENC[AES256_GCM,data:+H9qhfOg5WlTB7pihvbJ9omY/zLTAADe8KzI4fbdZ7NuaM0auC95AIQqhwNNCZNglg9UGOVL662pY7dNhbQ/2iCLPHSPgFFXf3fx1moRRcYYQzoJxsgxp19FZQeGNJ0qfRf72xYbZQZKslyHQmcqDieoVTyhaLqTfgC8MQ/UZofw/ortmgME7z51rGV5sXXMjxpJpHz9JxiPwQEL0ABWDAeCqBVBzlqqwdmfKEdkcR4l3USHfH1iNF5XQ5V26I+UGDOyoixt1c/BXzD9xzKI7MUDoRz+qfC6C62LIlEgqZY5tWg+tVZnqobakxwH6d8pXtQ7vaIREEP0LqQMkrNcK8X+cDRteToQ1fcxtN1V+JfZSa9pVC+iGgvmSZ00q4bnOgTmgO9IZ80TvOR4bHpRhjM5l4JMbLBv2jqY1zeUx/5L3WNuYIm9sL5mWXkV/RAD8WCemNSWdKbGsvByEUeiFcxczL/vQ6y3fi+ntmXUgeXVy5zVNkNlYbqd+DemBmwZQb9D1T5T97i2ChciYb3/ON1NObja/bt0PTQa,iv:hIbwsPcDSfgDItlvFFy0vCjuQWvgoQHBH60v8nTVTNg=,tag:1T/TdTEy98TfgMzYAxfHKA==,type:str] Hugo: ssh: ENC[AES256_GCM,data:Tfuba25e4hJ8Ovl1IdVtDvg0L0sCc9sYTXstRg89IAUzwv/1u8mxdj9ka6ZKaSQr2QUaNWs0BoPV36O4bI2hTwoqhUarhXXZNnJKHtd8xBu/+kfMSOMGa5qD9V9m3L5OFdt+gdwhJxemeQNkvN0Vhsu4DJFPZRPmGflJ2HVRYaRW4AsI+JPqiWSEeKz40f3PQPJ2h26gF+pADmPwtEfcUGZdGnJXUsiYMC0aBEWWxyAgBgj5W+Nbe+OCopEX1qyRcR8qO+LONjuC0b5hcGeOXjWj/d1FnBfxDHeoxRGhNCo8TUk0ap1mpSAttdr55/C51duQfeV09Iow4nzUR2H0jmzojUAjKXXCkBsK6yjIKxW+4+4OKCC9ERz5mDmu5Z+4aFM7CpSquCAnDVFw1Uq9MJqAnSz6AGh29J4LUwMnVNtf+gQwzGyl/C9wE/Svm0UAwP19h6hLcM1rp6bV4xjfSXNDspUkz4Xr3RdPpTI1PemtMZIq8fP64q0FlFZeV62ctl9hCtDVRDo3fG3FUM08fa0OfJpVYjSEAOfC,iv:T8z+P5++cES9Co9d/2tcU0PbxZZM/5x63tcxIjBeQ0I=,tag:AjsulFme64/xEPjgZQFtow==,type:str] Nextcloud: @@ -18,8 +20,8 @@ sops: aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-19T12:24:34Z" - mac: ENC[AES256_GCM,data:Bh/vHdsFCzk+YaRcZe/Eiq4xfLSDX1tSV4Jg8lFgzPqXCBwCgohDREZ8LSZPuQtStIugzyRNyPcnWrZcDwDiaS9klM5sIxjeGIF7ZDS81sQnQVNRyX/m9vl6AgVtP9KHgOpJwGObzuvNBE7XnOZ3q03/ah1LXRowJUn63wB4Qxk=,iv:GVLQUjm0bMHusD0F8gJ5DlZvqdDHPsT0VwxLhHh9ozE=,tag:cffv8wKTQ9UYrCPx+3zTMw==,type:str] + lastmodified: "2024-10-20T07:58:57Z" + mac: ENC[AES256_GCM,data:mmFgjE7rp7fXmPOnETGamHR3kUAguFCNNTQcEnD+uM4xeSp3QcB2g8tkKYaJAjkWWqKRSm9/Iu1NWOr9GWyu4O1h7ppWSvpKawWki6cHpqBl8JOwbx/SZi5bzU1lBtoJyT6hD1aCu9ENOMUkpPY3rKcYwbsRMJpKYsbXymPikcQ=,iv:kPB6ds8c4yc/w7Ny1d3DTyztQF4yTr0NyKgIHEzIKAg=,tag:VTpXRb5HaWDjVB52K7mByw==,type:str] pgp: [] unencrypted_suffix: _unencrypted version: 3.8.1 diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index b6ad403..e164183 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -33,6 +33,7 @@ in { "UGent/SubGit/ssh" = UGent; # HomeLab + "HomeLab/Gitea/ssh" = HomeLab; "HomeLab/Hugo/ssh" = HomeLab; "HomeLab/Nextcloud/ssh" = HomeLab; }); diff --git a/stow/ssh/.ssh/config b/stow/ssh/.ssh/config index aec70b1..aacb461 100644 --- a/stow/ssh/.ssh/config +++ b/stow/ssh/.ssh/config @@ -37,6 +37,12 @@ Host subgit.ugent.be CanonicalizeHostname yes # Ignore capitalization # HomeLab +Host Gitea + User admin + HostName 192.168.0.24 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Gitea/ssh + Host Hugo User admin HostName 192.168.0.11 -- 2.47.2 From b819c45b4cdbc8dd5f26bf70df32fdf7f3a67c0c Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 16 Sep 2025 21:25:01 +0200 Subject: [PATCH 47/77] chore: Update --- nixos/flake.lock | 165 ++++++++++------------------ nixos/hosts/Tibo-NixFat/default.nix | 7 +- nixos/users/tdpeuter/dotfiles.nix | 2 +- 3 files changed, 63 insertions(+), 111 deletions(-) diff --git a/nixos/flake.lock b/nixos/flake.lock index 91147eb..38320cc 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -1,54 +1,15 @@ { "nodes": { - "devshell": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1713532798, - "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", - "owner": "numtide", - "repo": "devshell", - "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "devshell", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems" }, "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -64,16 +25,16 @@ ] }, "locked": { - "lastModified": 1716736833, - "narHash": "sha256-rNObca6dm7Qs524O4st8VJH6pZ/Xe1gxl+Rx6mcWYo0=", + "lastModified": 1747688870, + "narHash": "sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz+AFQF7n9NmNc=", "owner": "nix-community", "repo": "home-manager", - "rev": "a631666f5ec18271e86a5cde998cba68c33d9ac6", + "rev": "d5f1f641b289553927b3801580598d200a501863", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.05", + "ref": "release-24.11", "repo": "home-manager", "type": "github" } @@ -86,11 +47,11 @@ ] }, "locked": { - "lastModified": 1701208414, - "narHash": "sha256-xrQ0FyhwTZK6BwKhahIkUVZhMNk21IEI1nUcWSONtpo=", + "lastModified": 1720066371, + "narHash": "sha256-uPlLYH2S0ACj0IcgaK9Lsf4spmJoGejR9DotXiXSBZQ=", "owner": "nix-community", "repo": "nix-github-actions", - "rev": "93e39cc1a087d65bcf7a132e75a650c44dd2b734", + "rev": "622f829f5fe69310a866c8a6cd07e747c44ef820", "type": "github" }, "original": { @@ -101,42 +62,26 @@ }, "nixpkgs": { "locked": { - "lastModified": 1717144377, - "narHash": "sha256-F/TKWETwB5RaR8owkPPi+SPJh83AQsm6KrQAlJ8v/uA=", + "lastModified": 1751274312, + "narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "805a384895c696f802a9bf5bf4720f37385df547", + "rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-24.05", + "ref": "nixos-24.11", "type": "indirect" } }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1717265169, - "narHash": "sha256-IITcGd6xpNoyq9SZBigCkv4+qMHSqot0RDPR4xsZ2CA=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3b1b4895b2c5f9f5544d02132896aeb9ceea77bc", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "release-23.11", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-unstable": { "locked": { - "lastModified": 1716948383, - "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=", + "lastModified": 1757745802, + "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ad57eef4ef0659193044870c731987a6df5cf56b", + "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", "type": "github" }, "original": { @@ -155,15 +100,15 @@ "nixpkgs" ], "poetry2nix": "poetry2nix", - "systems": "systems_3", + "systems": "systems_2", "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1701455376, - "narHash": "sha256-FMLrMdi6JY7ZfqV5XnNj64jnDcGKznKZLn7O6OMO3u0=", + "lastModified": 1724283233, + "narHash": "sha256-XMPn6YHwFOJCGLE9M5F3AEFKA0u+maf8CpIEWmvaQTQ=", "owner": "ThinkChaos", "repo": "openconnect-sso", - "rev": "20c0015c4264c72cc19ac272de0dc534309bd21b", + "rev": "94f1ddfef1662d56ede0a093bcfc3d23156bc1a1", "type": "github" }, "original": { @@ -197,11 +142,11 @@ ] }, "locked": { - "lastModified": 1701105783, - "narHash": "sha256-5IOI0xXGbhAkUZNNcPId48V78Q+/JlW0hzlif0zxRmM=", + "lastModified": 1721039874, + "narHash": "sha256-XANsG9GYHip8pxZpbqKf/YGv8tIa0xTh289Y+WNBNfw=", "owner": "nix-community", "repo": "poetry2nix", - "rev": "0b2bff39e9bd4e6db3208e09c276ca83a063b370", + "rev": "d11c01e58587e5f21037ed6477465a7f26a32e27", "type": "github" }, "original": { @@ -212,29 +157,28 @@ }, "root": { "inputs": { - "devshell": "devshell", - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils", "home-manager": "home-manager", "nixpkgs": "nixpkgs", "nixpkgs-unstable": "nixpkgs-unstable", "openconnect-sso": "openconnect-sso", "sops-nix": "sops-nix", - "utils": "utils" + "utils": "utils", + "zen-browser": "zen-browser" } }, "sops-nix": { "inputs": { "nixpkgs": [ "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" + ] }, "locked": { - "lastModified": 1717297459, - "narHash": "sha256-cZC2f68w5UrJ1f+2NWGV9Gx0dEYmxwomWN2B0lx0QRA=", + "lastModified": 1758007585, + "narHash": "sha256-HYnwlbY6RE5xVd5rh0bYw77pnD8lOgbT4mlrfjgNZ0c=", "owner": "Mic92", "repo": "sops-nix", - "rev": "ab2a43b0d21d1d37d4d5726a892f714eaeb4b075", + "rev": "f77d4cfa075c3de66fc9976b80e0c4fc69e2c139", "type": "github" }, "original": { @@ -273,21 +217,6 @@ "type": "github" } }, - "systems_3": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "treefmt-nix": { "inputs": { "nixpkgs": [ @@ -296,11 +225,11 @@ ] }, "locked": { - "lastModified": 1699786194, - "narHash": "sha256-3h3EH1FXQkIeAuzaWB+nK0XK54uSD46pp+dMD3gAcB4=", + "lastModified": 1721769617, + "narHash": "sha256-6Pqa0bi5nV74IZcENKYRToRNM5obo1EQ+3ihtunJ014=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "e82f32aa7f06bbbd56d7b12186d555223dc399d1", + "rev": "8db8970be1fb8be9c845af7ebec53b699fe7e009", "type": "github" }, "original": { @@ -316,11 +245,11 @@ ] }, "locked": { - "lastModified": 1715533576, - "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", + "lastModified": 1738591040, + "narHash": "sha256-4WNeriUToshQ/L5J+dTSWC5OJIwT39SEP7V7oylndi8=", "owner": "gytis-ivaskevicius", "repo": "flake-utils-plus", - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", + "rev": "afcb15b845e74ac5e998358709b2b5fe42a948d1", "type": "github" }, "original": { @@ -328,6 +257,26 @@ "repo": "flake-utils-plus", "type": "github" } + }, + "zen-browser": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1757304371, + "narHash": "sha256-EZ3Vwgh5xgXuiPUmr9e1a9dEu3hvEWhRurAKpsAwB2A=", + "owner": "youwen5", + "repo": "zen-browser-flake", + "rev": "3968348af022fe88468ef8de4f9683076e2e5e4b", + "type": "github" + }, + "original": { + "owner": "youwen5", + "repo": "zen-browser-flake", + "type": "github" + } } }, "root": "root", diff --git a/nixos/hosts/Tibo-NixFat/default.nix b/nixos/hosts/Tibo-NixFat/default.nix index 0d2fcd6..2e790c3 100644 --- a/nixos/hosts/Tibo-NixFat/default.nix +++ b/nixos/hosts/Tibo-NixFat/default.nix @@ -6,7 +6,10 @@ ]; sisyphus = { - desktop.sway.enable = true; + desktop = { + sway.enable = true; + hyprland.enable = true; + }; hardware = { eid.enable = true; @@ -115,7 +118,7 @@ thermald.enable = true; }; - system.stateVersion = "24.11"; + system.stateVersion = "24.05"; systemd.coredump.enable = false; diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index 8977c45..7c0f06e 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -66,7 +66,7 @@ in { source = ../../../stow/vifm/.config/vifm; }; ".config/waybar" = { - inherit (config.sisyphus.desktop.sway) enable; + enable = config.sisyphus.desktop.sway.enable || config.sisyphus.desktop.hyprland.enable; source = ../../../stow/waybar/.config/waybar; }; ".config/zellij" = { -- 2.47.2 From 92b172b0a3aa3c5e49be3bac18ffd5b8ecf9edba Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Mon, 22 Sep 2025 18:26:47 +0200 Subject: [PATCH 48/77] feat(hypr): Add dotfiles --- nixos/users/tdpeuter/dotfiles.nix | 5 + stow/hyprland/.config/hypr/docked.conf | 6 + stow/hyprland/.config/hypr/hyprland.conf | 291 +++++++++++++++++++ stow/hyprland/.config/hypr/input-output.conf | 62 ++++ stow/hyprland/.config/hypr/keybinds.conf | 161 ++++++++++ stow/hyprland/.config/hypr/monitors.conf | 10 + stow/hyprland/.config/hypr/undocked.conf | 9 + stow/hyprland/.config/hypr/workspaces.conf | 0 8 files changed, 544 insertions(+) create mode 100644 stow/hyprland/.config/hypr/docked.conf create mode 100644 stow/hyprland/.config/hypr/hyprland.conf create mode 100644 stow/hyprland/.config/hypr/input-output.conf create mode 100644 stow/hyprland/.config/hypr/keybinds.conf create mode 100644 stow/hyprland/.config/hypr/monitors.conf create mode 100644 stow/hyprland/.config/hypr/undocked.conf create mode 100644 stow/hyprland/.config/hypr/workspaces.conf diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index 7c0f06e..d56b93e 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -32,6 +32,11 @@ in { recursive = true; source = ../../../stow/git/.config/git; }; + ".config/hypr" = { + inherit (config.sisyphus.desktop.hyprland) enable; + recursive = true; + source = ../../../stow/hyprland/.config/hypr; + }; ".config/kitty" = { enable = false; recursive = true; diff --git a/stow/hyprland/.config/hypr/docked.conf b/stow/hyprland/.config/hypr/docked.conf new file mode 100644 index 0000000..ea4034f --- /dev/null +++ b/stow/hyprland/.config/hypr/docked.conf @@ -0,0 +1,6 @@ +monitor=desc:BOE 0x08CF,1920x1080@60.0,640x3240,1.0 +monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,2560x1440@59.95,0x1800,1.0 +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,1920x1080@60.0,2560x1800,1.0 +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,transform,1 +monitor=desc:Samsung Electric Company SAMSUNG,1920x1080@60.0,640x0,0.6000000000000001 +monitor=desc:Samsung Electric Company SAMSUNG,disable diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf new file mode 100644 index 0000000..e692826 --- /dev/null +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -0,0 +1,291 @@ +# ~/.config/hypr/hyperland.conf + +general { + border_size = 1 + no_border_on_floating = false + + gaps_in = 3 + gaps_out = 5 + gaps_workspaces = 0 + + col.inactive_border = 0xff444444 + col.active_border = 0xffffffff + col.nogroup_border = 0xffff00ff + + layout = dwindle + + no_focus_fallback = true + + resize_on_border = true + extend_border_grab_area = 5 + hover_icon_on_border = true + + allow_tearing = false + + resize_corner = 0 + + snap { + enabled = false + window_gap = 10 + monitor_gap = 10 + border_overlap = false + } +} + +decoration { + rounding = 0 + # rounding_power = 4.0 + + active_opacity = 1.0 + inactive_opacity = 1.0 + fullscreen_opacity = 1.0 + dim_inactive = false + dim_strength = 0.5 + dim_special = 0.2 + dim_around = 0.4 + + blur { + enabled = true + + size = 8 + passes = 1 + noise = 0.01 + contrast = 0.8 + brightness = 0.8 + vibrancy = 0.0 + vibrancy_darkness = 0.0 + + ignore_opacity = true + new_optimizations = true + xray = true + special = false + popups = false + # input_methods = false + } + + shadow { + enabled = false + + range = 4 + render_power = 3 + sharp = false + + ignore_window = true + + color = 0xee1a1a1a + color_inactive = 0xee1a1a1a + # offset = [0,0] + scale = 1.0 + } +} + +animations { + enabled = false + first_launch_animation = true +} + +gestures { + workspace_swipe = true + workspace_swipe_fingers = 3 + workspace_swipe_min_fingers = false + workspace_swipe_distance = 300 + workspace_swipe_invert = true + workspace_swipe_min_speed_to_force = 30 + workspace_swipe_cancel_ratio = 0.2 + workspace_swipe_direction_lock = true + workspace_swipe_direction_lock_threshold = 10 + + workspace_swipe_touch = false + workspace_swipe_touch_invert = false + + workspace_swipe_create_new = false + + workspace_swipe_forever = true + + workspace_swipe_use_r = false +} + +group { + auto_group = true + insert_after_current = true + focus_removed_window = true + drag_into_group = 1 + merge_groups_on_drag = true + merge_groups_on_groupbar = true + merge_floated_into_tiled_on_groupbar = false + group_on_movetoworkspace = false + + col.border_active = 0x66ffff00 + col.border_inactive = 0x66777700 + col.border_locked_active = 0x66ff5500 + col.border_locked_inactive = 0x66775500 + + groupbar { + enabled = true + font_family = misc:font_family + font_size = 8 + gradients = true + height = 14 + stacked = false + priority = 3 + render_titles = false + scrolling = true + + text_color = 0xffffffff + + col.active = 0x66ffff00 + col.inactive = 0x66777700 + col.locked_active = 0x66ff5500 + col.locked_inactive = 0x66775500 + } +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = true + + col.splash = 0xffffffff + + font_family = Letter + # splash_font_family = + force_default_wallpaper = -1 + vfr = true + vrr = 1 + mouse_move_enables_dpms = false + key_press_enables_dpms = true + always_follow_on_dnd = true + layers_hog_keyboard_focus = true + animate_manual_resizes = false + animate_mouse_windowdragging = false + disable_autoreload = true + enable_swallow = false + # swallow_regex = + # swallow_exception_regex = + focus_on_activate = true + mouse_move_focuses_monitor = true + render_ahead_of_time = false + render_ahead_safezone = 1 + allow_session_lock_restore = false + background_color = 0x018281 + close_special_on_empty = true + new_window_takes_over_fullscreen = 2 + exit_window_retains_fullscreen = false + initial_workspace_tracking = 1 + middle_click_paste = false + render_unfocused_fps = 12 + disable_xdg_env_checks = false + # disable_hyprland_qtutils_check = false + # lockdead_screen_delay = 1000 +} + +binds { + pass_mouse_when_bound = false + scroll_event_delay = 300 + workspace_back_and_forth = false + allow_workspace_cycles = false + workspace_center_on = 1 + focus_preferred_method = 0 + ignore_group_lock = false + # movefocus_cycles_fullscreen = true + # movefocus_cycles_groupfirst = false + disable_keybind_grabbing = false + window_direction_monitor_fallback = true + # allow_pin_fullscreen = true +} + +xwayland { + enabled = true + use_nearest_neighbor = true + force_zero_scaling = false +} + +opengl { + nvidia_anti_flicker = false + force_introspection = 2 +} + +render { + explicit_sync = 2 + explicit_sync_kms = 2 + direct_scanout = false + expand_undersized_textures = true + # xp_mode = false + # ctm_animation = 2 + # allow_early_buffer_release = true +} + +cursor { + sync_gsettings_theme = true + no_hardware_cursors = false + no_break_fs_vrr = false + min_refresh_rate = 24 + hotspot_padding = 1 + inactive_timeout = 10 + no_warps = false + persistent_warps = false + warp_on_change_workspace = 0 + # default_monitor = + zoom_factor = 1.0 + zoom_rigid = false + # enable_hypercursor = false + hide_on_key_press = true + hide_on_touch = true + # use_cpu_buffer = 2 + # warp_back_after_non_mouse_input = false +} + +ecosystem { + # no_update_news = false + # no_donation_nag = true +} + +exec-once = gnome-keyring-daemon --start --components=secrets +exec-once = dunst --verbosity crit +exec-once = waycorner +exec-once = waybar + +# TODO Replace with something else? +exec-once = wlsunset -t 2500 -l 50.51 -L 4.21 + +exec-once = nextcloud --background + +# STYLING +exec-once = swaybg -i "${HOME}/.local/state/sisyphus/bg" --mode=fill +env = XCURSOR_SIZE,24 + +# SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5 +$flag = MOD4 + +$left = h +$down = j +$up = k +$right = l + +$term = foot +$menu = j4-dmenu-desktop --dmenu="rofi -dmenu -i" --no-generic --usage-log="/home/tdpeuter/.local/state/dmenu.log" --term=$term +$lock = swaylock + +source = /home/tdpeuter/.config/hypr/input-output.conf +source = /home/tdpeuter/.config/hypr/keybinds.conf + +$mode_launcher = Launch (f)irefox, (t)hunderbird. +bind = $flag, O, submap, $mode_launcher +submap = $mode_launcher + +bind = , F, exec, firefox +bind = , F, submap, reset +bind = , T, exec, thunderbird +bind = , T, submap, reset +bind = , Z, exec, zen +bind = , Z, submap, reset + +bind = $flag, O, submap, reset +bind = , Escape, submap, reset +bind = , Return, submap, reset + +submap = reset + +# https://wiki.hyprland.org/Nvidia/#environment-variables +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = LIBVA_DRIVER_NAME,nvidia +env = NVD_BACKEND,direct diff --git a/stow/hyprland/.config/hypr/input-output.conf b/stow/hyprland/.config/hypr/input-output.conf new file mode 100644 index 0000000..3c04c15 --- /dev/null +++ b/stow/hyprland/.config/hypr/input-output.conf @@ -0,0 +1,62 @@ +# ~/.config/hypr/input-output.conf + +input { + kb_layout = us,be,us + kb_variant = altgr-intl,iso-alternate,dvorak + + numlock_by_default = true + resolve_binds_by_sym = false + + repeat_rate = 25 + repeat_delay = 600 + + sensitivity = 0.0 + accel_profile = flat + force_no_accel = false + + left_handed = false + scroll_method = 2fg + scroll_button_lock = true + scroll_factor = 1.0 + natural_scroll = false + + follow_mouse = 2 + focus_on_close = 0 + mouse_refocus = true + float_switch_override_focus = 1 + special_fallthrough = false + off_window_axis_events = 1 + emulate_discrete_scroll = 1 + + touchpad { + disable_while_typing = true + natural_scroll = true + scroll_factor = 0.8 + middle_button_emulation = false + tap_button_map = lrm + clickfinger_behavior = false + tap-to-click = true + drag_lock = false + tap-and-drag = true + } +} + +device { + name = at-translated-set-2-keyboard + numlock_by_default = false +} + +monitor = , preferred, auto, 1 + +monitor = desc:BOE 0x08CF, preferred, 640x1440, 1 +monitor = desc:Hewlett Packard HP ZR2740w CNT319Y008, preferred, auto-up, 1 +# Vertical monitors +monitor = desc:Dell Inc. DELL P2214H 29C2937M4YTL, preferred, auto-right, 1, transform, 1 +monitor = desc:Samsung Electric Company S22C650, preferred, auto-right, 1, transform, 1 + +# TV +monitor = desc:Samsung Electric Company SAMSUNG, disable + +bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" +bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, enable" + diff --git a/stow/hyprland/.config/hypr/keybinds.conf b/stow/hyprland/.config/hypr/keybinds.conf new file mode 100644 index 0000000..514e5f0 --- /dev/null +++ b/stow/hyprland/.config/hypr/keybinds.conf @@ -0,0 +1,161 @@ +$notify = "${SCRIPT_DIR}/notify.sh" + +# Navigation + +# Focus +bind = $flag, $up, movefocus, u +bind = $flag, $right, movefocus, r +bind = $flag, $down, movefocus, d +bind = $flag, $left, movefocus, l + +bind = $flag, up, movefocus, u +bind = $flag, right, movefocus, r +bind = $flag, down, movefocus, d +bind = $flag, left, movefocus, l + +# Move windows +bind = $flag+Shift, $up, movewindow, u +bind = $flag+Shift, $right, movewindow, r +bind = $flag+Shift, $down, movewindow, d +bind = $flag+Shift, $left, movewindow, l + +bind = $flag+Shift, up, movewindow, u +bind = $flag+Shift, right, movewindow, r +bind = $flag+Shift, down, movewindow, d +bind = $flag+Shift, left, movewindow, l + +# $flag+Next move scratchpad +# $flag+KP_Next move scratchpad +# $flag+Prior scratchpad show +# $flag+KP_Prior scratchpad show +bind = $flag, Next, movetoworkspace, special:scratchpad +bind = $flag, KP_Next, movetoworkspace, special:scratchpad + +bind = $flag, Prior, togglespecialworkspace, special:scratchpad +bind = $flag, Prior, movetoworkspace, special:scratchpad +bind = $flag, Prior, togglespecialworkspace, special:scratchpad + +# bind = $flag, Next, movetoworkspace, special:magic +# bind = $flag, Next, togglespecialworkspace, magic + +# bind = $flag, KP_Next, togglespecialworkspace, magic +# bind = $flag, KP_Next, movetoworkspace, +0 +# bind = $flag, KP_Next, togglespecialworkspace, magic +# bind = $flag, KP_Next, movetoworkspace, special:magic +# bind = $flag, KP_Next, togglespecialworkspace, magic + +# Layouts +# bind = $flag, z, layout toggle split +# bind = $flag, x, layout tabbed +# bind = $flag, c, split horizontal +# bind = $flag, v, split vertical + +bind = $flag, f, togglefloating +bind = $flag+Shift, f, settiled + +bind = $flag, s, pin +bind = $flag, s, setfloating +bind = $flag+Shift, s, pin +bind = $flag+Shift, s, settiled + +bind = $flag, F11, fullscreen, 1 +# bind = $flag, Prior, fullscreen, 1 +# bind = $flag, KP_Prior, fullscreen, 1 + +# Workspaces + +$ws1 = 1 +$ws2 = 2 +$ws3 = 3 +$ws4 = 4 +$ws5 = 5 +$ws6 = 6 +$ws7 = 7 +$ws8 = 8 +$ws9 = 9 +$ws10 = 10 +$ws11 = 11 +$ws12 = 12 + +# Focus a specific workspace +bind = $flag, 1, workspace, $ws1 +bind = $flag, 2, workspace, $ws2 +bind = $flag, 3, workspace, $ws3 +bind = $flag, 4, workspace, $ws4 +bind = $flag, 5, workspace, $ws5 +bind = $flag, 6, workspace, $ws6 +bind = $flag, 7, workspace, $ws7 +bind = $flag, 8, workspace, $ws8 +bind = $flag, 9, workspace, $ws9 +bind = $flag, 0, workspace, $ws10 +bind = $flag, minus, workspace, $ws11 +bind = $flag, equal, workspace, $ws12 + +# Move window to a specific workspace +bind = $flag+Shift, 1, movetoworkspace, $ws1 +bind = $flag+Shift, 2, movetoworkspace, $ws2 +bind = $flag+Shift, 3, movetoworkspace, $ws3 +bind = $flag+Shift, 4, movetoworkspace, $ws4 +bind = $flag+Shift, 5, movetoworkspace, $ws5 +bind = $flag+Shift, 6, movetoworkspace, $ws6 +bind = $flag+Shift, 7, movetoworkspace, $ws7 +bind = $flag+Shift, 8, movetoworkspace, $ws8 +bind = $flag+Shift, 9, movetoworkspace, $ws9 +bind = $flag+Shift, 0, movetoworkspace, $ws10 +bind = $flag+Shift, Minus, movetoworkspace, $ws11 +bind = $flag+Shift, Equal, movetoworkspace, $ws12 + +# Go through workspaces in order +bind = $flag+Ctrl, $left, workspace, e-1 +bind = $flag+Ctrl, $right, workspace, e+1 + +bind = $flag+Ctrl, left, workspace, e-1 +bind = $flag+Ctrl, right, workspace, e+1 + +bind = $flag+Ctrl+Shift, $left, movetoworkspace, e-1 +bind = $flag+Ctrl+Shift, $right, movetoworkspace, e+1 + +bind = $flag+Ctrl+Shift, left, movetoworkspace, e-1 +bind = $flag+Ctrl+Shift, right, movetoworkspace, e+1 + +# GNOME-like keybinds +bind = $flag+Alt, $left, workspace, e-1 +bind = $flag+Alt, $right, workspace, e+1 + +bind = $flag+Alt, left, workspace, e-1 +bind = $flag+Alt, right, workspace, e+1 + +bind = $flag+Alt+Shift, $left, movetoworkspace, e-1 +bind = $flag+Alt+Shift, $right, movetoworkspace, e+1 + +bind = $flag+Alt+Shift, left, movetoworkspace, e-1 +bind = $flag+Alt+Shift, right, movetoworkspace, e+1 + +# Shortcuts + +# Reload +bind = Alt+Shift, r, exec, "hyperctl reload" +bind = Ctrl+Alt+Shift, r, forcerendererreload +bind = Alt+Shift, e, exit + +# Kill a window +bind = $flag, q, closewindow, activewindow + +# Start a terminal +bind = $flag, Return, exec, $term +bind = CTRL&ALT, T, exec, $term +# Application menu +bind = Alt, Space, exec, $menu +bind = Alt, Tab, focuscurrentorlast + +bind = $flag, e, exec, $term -e vifm + +bind = Ctrl+Shift, a, exec, notify-send "hole!" && hyprctl setcursor _ 87 && sleep 5 && hyprctl setcursor _ 24 + +# bind = $flag, mouse_up, movefocus, l +bind = SUPER, mouse_down, workspace, e-1 +bind = SUPER, mouse_up, workspace, e+1 +# bind = $flag, mouse_down, movefocus, r + +bind = $flag, Delete, exec, $lock + diff --git a/stow/hyprland/.config/hypr/monitors.conf b/stow/hyprland/.config/hypr/monitors.conf new file mode 100644 index 0000000..4b551d3 --- /dev/null +++ b/stow/hyprland/.config/hypr/monitors.conf @@ -0,0 +1,10 @@ +# Generated by nwg-displays on 2025-01-27 at 13:58:39. Do not edit manually. + +monitor=desc:BOE 0x08CF,1920x1080@60.0,0x0,1.0 +monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,2560x1440@59.95,0x1800,1.0 +monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,disable +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,1920x1080@60.0,2560x1800,1.0 +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,transform,1 +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,disable +monitor=desc:Samsung Electric Company SAMSUNG,0x0@60.0,-1x-1,1.0 +monitor=desc:Samsung Electric Company SAMSUNG,disable diff --git a/stow/hyprland/.config/hypr/undocked.conf b/stow/hyprland/.config/hypr/undocked.conf new file mode 100644 index 0000000..6f27cc4 --- /dev/null +++ b/stow/hyprland/.config/hypr/undocked.conf @@ -0,0 +1,9 @@ +monitor=desc:BOE 0x08CF,1920x1080@60.0,0x0,1.0 +monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,2560x1440@59.95,0x1800,1.0 +monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,disable +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,1920x1080@60.0,2560x1800,1.0 +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,transform,1 +monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,disable +monitor=desc:Samsung Electric Company SAMSUNG,0x0@60.0,-1x-1,1.0 +monitor=desc:Samsung Electric Company SAMSUNG,disable + diff --git a/stow/hyprland/.config/hypr/workspaces.conf b/stow/hyprland/.config/hypr/workspaces.conf new file mode 100644 index 0000000..e69de29 -- 2.47.2 From dbbd14bbbe9603024c28d0cc76a03109da9e993e Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 25 Sep 2025 19:44:06 +0200 Subject: [PATCH 49/77] fix(virtualbox): Update to 7.2 --- nixos/modules/virtualisation/virtualbox/default.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nixos/modules/virtualisation/virtualbox/default.nix b/nixos/modules/virtualisation/virtualbox/default.nix index a86ada5..4d5ee2c 100644 --- a/nixos/modules/virtualisation/virtualbox/default.nix +++ b/nixos/modules/virtualisation/virtualbox/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgs-unstable, ... }: let cfg = config.sisyphus.virtualisation.virtualbox; @@ -11,6 +11,7 @@ in { enable = true; enableExtensionPack = true; enableHardening = true; + package = pkgs-unstable.virtualbox; }; guest = { enable = true; @@ -20,6 +21,12 @@ in { }; }; + + # https://www.virtualbox.org/ticket/22248#comment:1 + # and + # https://github.com/NixOS/nixpkgs/pull/444438 + boot.kernelParams = [ "kvm.enable_virt_at_load=0" ]; + # Define the group users.groups.vboxusers = {}; -- 2.47.2 From 7cfd76eb23ebeab99e5c503e540ddfd90eb05613 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 25 Sep 2025 20:00:27 +0200 Subject: [PATCH 50/77] chore: Update to 25.05 --- nixos/flake.lock | 40 ++++++++--------- nixos/flake.nix | 10 ++--- nixos/modules/desktop/gnome/default.nix | 58 ++++++++----------------- nixos/overlays/spotify/default.nix | 2 +- nixos/users/tdpeuter/firefox.nix | 34 ++++++++------- 5 files changed, 61 insertions(+), 83 deletions(-) diff --git a/nixos/flake.lock b/nixos/flake.lock index 38320cc..b82d463 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -25,16 +25,16 @@ ] }, "locked": { - "lastModified": 1747688870, - "narHash": "sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz+AFQF7n9NmNc=", + "lastModified": 1758463745, + "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", "owner": "nix-community", "repo": "home-manager", - "rev": "d5f1f641b289553927b3801580598d200a501863", + "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.11", + "ref": "release-25.05", "repo": "home-manager", "type": "github" } @@ -62,26 +62,26 @@ }, "nixpkgs": { "locked": { - "lastModified": 1751274312, - "narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=", + "lastModified": 1758589230, + "narHash": "sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674", + "rev": "d1d883129b193f0b495d75c148c2c3a7d95789a0", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "type": "indirect" } }, "nixpkgs-unstable": { "locked": { - "lastModified": 1757745802, - "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", + "lastModified": 1758427187, + "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", + "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", "type": "github" }, "original": { @@ -104,11 +104,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1724283233, - "narHash": "sha256-XMPn6YHwFOJCGLE9M5F3AEFKA0u+maf8CpIEWmvaQTQ=", + "lastModified": 1758594056, + "narHash": "sha256-6XyKDRWqBngw1g73e789iyIaw/0VF04ELk/ATtlkTVU=", "owner": "ThinkChaos", "repo": "openconnect-sso", - "rev": "94f1ddfef1662d56ede0a093bcfc3d23156bc1a1", + "rev": "2041471efd331d0591d34e122aefb02690fb233a", "type": "github" }, "original": { @@ -174,11 +174,11 @@ ] }, "locked": { - "lastModified": 1758007585, - "narHash": "sha256-HYnwlbY6RE5xVd5rh0bYw77pnD8lOgbT4mlrfjgNZ0c=", + "lastModified": 1758425756, + "narHash": "sha256-L3N8zV6wsViXiD8i3WFyrvjDdz76g3tXKEdZ4FkgQ+Y=", "owner": "Mic92", "repo": "sops-nix", - "rev": "f77d4cfa075c3de66fc9976b80e0c4fc69e2c139", + "rev": "e0fdaea3c31646e252a60b42d0ed8eafdb289762", "type": "github" }, "original": { @@ -265,11 +265,11 @@ ] }, "locked": { - "lastModified": 1757304371, - "narHash": "sha256-EZ3Vwgh5xgXuiPUmr9e1a9dEu3hvEWhRurAKpsAwB2A=", + "lastModified": 1758600385, + "narHash": "sha256-lRK96/otQ9JAkrjYFkK8sKloujhZ+eS3RFFerMdEKAg=", "owner": "youwen5", "repo": "zen-browser-flake", - "rev": "3968348af022fe88468ef8de4f9683076e2e5e4b", + "rev": "8fdac24a43e541c644ea26b48ff886533d367155", "type": "github" }, "original": { diff --git a/nixos/flake.nix b/nixos/flake.nix index 80814dc..d9158aa 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -2,12 +2,12 @@ description = "System configuration of my machines using flakes"; inputs = { - nixpkgs.url = "nixpkgs/nixos-24.11"; + nixpkgs.url = "nixpkgs/nixos-25.05"; nixpkgs-unstable.url = "nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; home-manager = { - url = "github:nix-community/home-manager/release-24.11"; + url = "github:nix-community/home-manager/release-25.05"; inputs.nixpkgs.follows = "nixpkgs"; }; openconnect-sso = { @@ -71,11 +71,11 @@ }; modules = [ - home-manager.nixosModule - sops-nix.nixosModules.sops - ./modules ./users + + home-manager.nixosModules.home-manager + sops-nix.nixosModules.sops ]; }; diff --git a/nixos/modules/desktop/gnome/default.nix b/nixos/modules/desktop/gnome/default.nix index e522780..2ce218c 100644 --- a/nixos/modules/desktop/gnome/default.nix +++ b/nixos/modules/desktop/gnome/default.nix @@ -6,54 +6,30 @@ in { options.sisyphus.desktop.gnome.enable = lib.mkEnableOption "GNOME"; config = lib.mkIf cfg.enable { - services.xserver = { - enable = true; + services = { + gnome = { + core-apps.enable = false; + core-developer-tools.enable = false; + core-shell.enable = true; + }; - excludePackages = with pkgs; [ - xterm - ]; + xserver = { + enable = true; - displayManager.gdm.enable = true; - desktopManager.gnome.enable = true; + excludePackages = with pkgs; [ + xterm + ]; + + displayManager.gdm.enable = true; + desktopManager.gnome.enable = true; + + videoDrivers = [ "nvidia" ]; + }; }; # Start a new instance of application instead of going to that window. environment.systemPackages = with pkgs.gnomeExtensions; [ launch-new-instance ]; - - # Do not use these packages - environment.gnome.excludePackages = (with pkgs; [ - baobab - epiphany # Web browser - evince # Document viewer - gnome-connections # Remote desktop client - gnome-console - gnome-photos - gnome-text-editor - gnome-tour - loupe # Image viewer - snapshot # Camera - ]) ++ (with pkgs.gnome; [ - eog # Image viewer - file-roller # Archive manager - geary # Mail client - gedit - gnome-calculator - gnome-calendar - gnome-characters - gnome-clocks - gnome-contacts - gnome-disk-utility - gnome-font-viewer - gnome-logs - gnome-maps - gnome-music - gnome-system-monitor - gnome-weather - simple-scan - totem # Movie player - yelp # Help viewer - ]); }; } diff --git a/nixos/overlays/spotify/default.nix b/nixos/overlays/spotify/default.nix index fc77396..84be4da 100644 --- a/nixos/overlays/spotify/default.nix +++ b/nixos/overlays/spotify/default.nix @@ -9,7 +9,7 @@ final: prev: { sha256 = "sha256-UzpHAHpQx2MlmBNKm2turjeVmgp5zXKWm3nZbEo0mYE="; }; - cargoHash = "sha256-oHfk68mAIcmOenW7jn71Xpt8hWVDtxyInWhVN2rH+kk="; + cargoHash = "sha256-oGpe+kBf6kBboyx/YfbQBt1vvjtXd1n2pOH6FNcbF8M="; buildInputs = with final; [ cargo diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index b24a25b..7f9a47f 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -14,6 +14,7 @@ in { nativeMessagingHosts = with pkgs; [ tridactyl-native ]; + # https://mozilla.github.io/policy-templates/ extraPolicies = { DisableFirefoxStudies = true; DisablePocket = true; @@ -26,7 +27,8 @@ in { # https://discourse.nixos.org/t/declare-firefox-extensions-and-settings/36265 ExtensionSettings = { - "amazom@search.mozilla.org".installation_mode = "blocked"; + "amazon@search.mozilla.org".installation_mode = "blocked"; + "google@search.mozilla.org".installation_mode = "blocked"; }; }; @@ -42,12 +44,24 @@ in { ]; profiles.tdpeuter.search= { - default = "DuckDuckGo"; + default = "ddg"; # Reference by id instead of by name force = true; engines = { - "Bing".metaData.hidden = true; - "eBay".metaData.hidden = true; + "bing".metaData.hidden = true; + "ebay".metaData.hidden = true; + "GitHub" = { + urls = [{ + template = "https://github.com/search"; + params = [ + { name = "q"; value = "{searchTerms}"; } + { name = "type"; value = "repositories"; } + ]; + }]; + + icon = "${pkgs.icosystem}/share/icons/icosystem/scalable/apps/github-mark.svg"; + definedAliases = [ "@gh" ]; + }; "Nix Packages" = { urls = [{ template = "https://search.nixos.org/packages"; @@ -71,18 +85,6 @@ in { icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@no" ]; }; - "GitHub" = { - urls = [{ - template = "https://github.com/search"; - params = [ - { name = "q"; value = "{searchTerms}"; } - { name = "type"; value = "repositories"; } - ]; - }]; - - icon = "${pkgs.icosystem}/share/icons/icosystem/scalable/apps/github-mark.svg"; - definedAliases = [ "@gh" ]; - }; }; }; }; -- 2.47.2 From c81444f92484c4c338db4820b0f80beac6c2beb7 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 25 Sep 2025 21:35:37 +0200 Subject: [PATCH 51/77] [hypr] Add deps --- nixos/modules/desktop/hyprland/default.nix | 4 +++- nixos/users/tdpeuter/dotfiles.nix | 13 +++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index f4ee140..73ace5d 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -23,6 +23,8 @@ in { waycorner wlsunset wl-clipboard # Copying to system clipboard in vim + wl-mirror # Mirror an output + wdisplays # Tool to configure displays glib @@ -45,9 +47,9 @@ in { }; services = { + dbus.enable = true; displayManager.ly.enable = true; gnome.gnome-keyring.enable = true; - power-profiles-daemon.enable = true; xserver.videoDrivers = [ "nvidia" ]; }; }; diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index d56b93e..53d0e4d 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -78,14 +78,13 @@ in { source = ../../../stow/zellij/.config/zellij; }; ".gnupg" = { - enable = false; - # inherit (config.programs.gnupg.agent) enable; # TODO Enable Me + inherit (config.programs.gnupg.agent) enable; source = ../../../stow/gnupg/.gnupg; recursive = true; -# onChange = '' -# chmod 700 /home/tdpeuter/.gnupg -# chmod 600 /home/tdpeuter/.gnupg/* -# ''; + onChange = '' + chmod 700 /home/tdpeuter/.gnupg + # chmod 600 /home/tdpeuter/.gnupg/* # Already read-only? + ''; }; ".ssh/config" = lib.mkIf config.sisyphus.programs.ssh.enable { inherit (config.sisyphus.programs.ssh) enable; @@ -104,12 +103,10 @@ in { } (lib.mkIf (config.users.users.tdpeuter.shell == pkgs.zsh) { ".oh-my-zsh" = { - enable = config.users.users.tdpeuter.shell == pkgs.zsh; source = "${pkgs.oh-my-zsh}/share/oh-my-zsh"; recursive = true; }; ".oh-my-zsh/themes/tdpeuter.zsh-theme" = { - enable = config.users.users.tdpeuter.shell == pkgs.zsh; source = ../../../stow/zsh/.oh-my-zsh/themes/tdpeuter.zsh-theme; }; ".zshrc" = { -- 2.47.2 From 7d520d8cec943309a19e7c08471d1377b3e8faa0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 25 Sep 2025 21:38:19 +0200 Subject: [PATCH 52/77] [firefox] Remove sponsors --- nixos/users/tdpeuter/firefox.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index 7f9a47f..09cd1d6 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -30,6 +30,18 @@ in { "amazon@search.mozilla.org".installation_mode = "blocked"; "google@search.mozilla.org".installation_mode = "blocked"; }; + + # Anything in about:config + Preferences = { + "browser.newtabpage.activity-stream.showSponsoredCheckboxes" = { + Value = false; + Status = "locked"; + }; + "browser.newtabpage.pinned" = { + Value = "[]"; + Status = "default"; + }; + }; }; # Support smart cards -- 2.47.2 From 5a6036dd628bd9b1bc88fbe0f4b5287b9f644775 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 25 Sep 2025 21:38:36 +0200 Subject: [PATCH 53/77] [Tibo-NixTop] Add host --- nixos/flake.nix | 1 + nixos/hosts/Tibo-NixTop/default.nix | 193 ++++++++++++++++++ .../Tibo-NixTop/hardware-configuration.nix | 41 ++++ 3 files changed, 235 insertions(+) create mode 100644 nixos/hosts/Tibo-NixTop/default.nix create mode 100644 nixos/hosts/Tibo-NixTop/hardware-configuration.nix diff --git a/nixos/flake.nix b/nixos/flake.nix index d9158aa..60e1025 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -83,6 +83,7 @@ Tibo-NixDesk.modules = [ ./hosts/Tibo-NixDesk ]; Tibo-NixFat.modules = [ ./hosts/Tibo-NixFat ]; Tibo-NixTest.modules = [ ./hosts/Tibo-NixTest ]; + Tibo-NixTop.modules = [ ./hosts/Tibo-NixTop ]; }; }; } diff --git a/nixos/hosts/Tibo-NixTop/default.nix b/nixos/hosts/Tibo-NixTop/default.nix new file mode 100644 index 0000000..5de8df4 --- /dev/null +++ b/nixos/hosts/Tibo-NixTop/default.nix @@ -0,0 +1,193 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, ... }: + +{ + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + sisyphus = { + desktop.hyprland.enable = true; + + hardware = { + eid.enable = true; + nvidia = { + enable = true; + model = "Quadro T2000"; + }; + yubikey.enable = true; + }; + + networking = { + networkmanager.enable = true; + openconnect-sso.enable = true; + }; + + nix = { + flakes.enable = true; + gc.onFull.enable = true; + }; + + programs = { + direnv.enable = true; + home-manager.enable = true; + sops.enable = true; + ssh.enable = true; + }; + + services = { + pipewire.enable = true; + tailscale.enable = true; + }; + + users.tdpeuter.enable = true; + + virtualisation = { + docker.enable = true; + virtualbox.enable = true; + }; + }; + + boot = { + initrd = { + # Use EFI and YubiKey + kernelModules = [ "vfat" "nls_cp437" "nls_iso8859-1" "usbhid" ]; + + luks = { + # Enable YubiKey PBA + yubikeySupport = true; + devices."encrypted".yubikey = { + slot = 2; + twoFactor = false; + gracePeriod = 10; + keyLength = 64; + saltLength = 16; + storage.device = "/dev/nvme0n1p1"; + }; + }; + }; + + loader = { + # Use the systemd-boot EFI boot loader. + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + # Use latest kernel. + kernelPackages = pkgs.linuxPackages_latest; + }; + + hardware.bluetooth = { + enable = true; + powerOnBoot = false; + }; + + programs.zsh.enable = true; + + services = { + auto-cpufreq = { + enable = true; + settings = { + battery = { + governor = "powersave"; + turbo = "never"; + }; + charger = { + governor = "performance"; + turbo = "auto"; + }; + }; + }; + + logind = { + # Handle the laptop lid switch as follows: + lidSwitch = "hybrid-sleep"; + lidSwitchExternalPower = "lock"; + lidSwitchDocked = "ignore"; + + # Handle the power key + powerKey = "suspend"; + }; + + + power-profiles-daemon.enable = false; + + thermald.enable = true; + + xserver = { + # Keyboard layout + xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + }; + + # Touchpad + libinput.enable = true; + }; + + networking = { + hostName = "Tibo-NixTop"; # Define your hostname. + }; + + # Set your time zone. + time.timeZone = "Europe/Brussels"; + + # Select internationalisation properties. + i18n = { + defaultLocale = "en_GB.UTF-8"; # LANG + extraLocaleSettings.LC_TIME = "nl_BE.UTF-8"; + }; + + console = { + # font = "Lat2-Terminus16"; + # keyMap = "us"; + useXkbConfig = true; # use xkb.options in tty. + }; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # List packages installed in system profile. + # You can use https://search.nixos.org/ to find more packages (and options). + environment = { + # Enabled to allow installed binaries in ~/.local/bin + localBinInPath = true; + + systemPackages = with pkgs; [ + git + vim-full # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + w3m + wget + zenith-nvidia + ]; + }; + + # This option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how + # to actually do that. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "25.05"; # Did you read the comment? + +} + diff --git a/nixos/hosts/Tibo-NixTop/hardware-configuration.nix b/nixos/hosts/Tibo-NixTop/hardware-configuration.nix new file mode 100644 index 0000000..ac27dba --- /dev/null +++ b/nixos/hosts/Tibo-NixTop/hardware-configuration.nix @@ -0,0 +1,41 @@ +# 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 = [ "xhci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/e759b10f-7949-4094-9272-d91340dcc5b6"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."encrypted".device = "/dev/disk/by-uuid/2b6586fa-8823-4add-94f3-132aab17b7b8"; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/12CE-A600"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + 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.eno2.useDHCP = lib.mkDefault true; + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} -- 2.47.2 From f80c936737b6eac403f9cefc3c8ef1e98c0645d0 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 26 Sep 2025 12:39:27 +0200 Subject: [PATCH 54/77] [hypr] Fix "special" keybinds --- nixos/modules/desktop/hyprland/default.nix | 3 +++ nixos/users/tdpeuter/dotfiles.nix | 2 +- stow/hyprland/.config/hypr/hyprland.conf | 3 +++ stow/hyprland/.config/hypr/keybinds.conf | 24 ++++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index 73ace5d..d4ed030 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -21,11 +21,14 @@ in { swaybg waybar waycorner + playerctl wlsunset wl-clipboard # Copying to system clipboard in vim wl-mirror # Mirror an output wdisplays # Tool to configure displays + swaylock-effects + glib libva diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index 53d0e4d..aca5ba8 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -63,7 +63,7 @@ in { source = ../../../stow/swayidle/.config/swayidle; }; ".config/swaylock" = { - inherit (config.sisyphus.desktop.sway) enable; + enable = config.sisyphus.desktop.sway.enable || config.sisyphus.desktop.hyprland.enable; source = ../../../stow/swaylock/.config/swaylock; }; ".config/vifm" = { diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf index e692826..73bfa92 100644 --- a/stow/hyprland/.config/hypr/hyprland.conf +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -249,6 +249,9 @@ exec-once = wlsunset -t 2500 -l 50.51 -L 4.21 exec-once = nextcloud --background +# Turn volume off at boot +exec-once = pactl set-sink-mute @DEFAULT_SINK@ 1 + # STYLING exec-once = swaybg -i "${HOME}/.local/state/sisyphus/bg" --mode=fill env = XCURSOR_SIZE,24 diff --git a/stow/hyprland/.config/hypr/keybinds.conf b/stow/hyprland/.config/hypr/keybinds.conf index 514e5f0..880a1f8 100644 --- a/stow/hyprland/.config/hypr/keybinds.conf +++ b/stow/hyprland/.config/hypr/keybinds.conf @@ -131,6 +131,30 @@ bind = $flag+Alt+Shift, $right, movetoworkspace, e+1 bind = $flag+Alt+Shift, left, movetoworkspace, e-1 bind = $flag+Alt+Shift, right, movetoworkspace, e+1 +# System + +# Brightness +bind = , XF86MonBrightnessDown, exec, brightnessctl -e s 5%- && $notify -b +bind = , XF86MonBrightnessUp, exec, brightnessctl -e s +5% && $notify -b + +# Audio +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+ && $notify -v +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%- && $notify -v +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && $notify -v +bind = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + +# Media +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioPrev, exec, playerctl previous +bind = , XF86AudioNext, exec, playerctl next + +bind = Shift, XF86AudioMute, exec, playerctl play-pause +bind = Shift, XF86AudioLowerVolume, exec, playerctl previous +bind = Shift, XF86AudioRaiseVolume, exec, playerctl next + +# Other special keys +bind = , XF86Calculator, exec, qalculate-gtk + # Shortcuts # Reload -- 2.47.2 From bc2f9752ceab62fa17b7a9d391e2f4888c1d7fae Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 26 Sep 2025 12:40:41 +0200 Subject: [PATCH 55/77] nix flake update --- nixos/flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nixos/flake.lock b/nixos/flake.lock index b82d463..63e1d07 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -77,11 +77,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1758427187, - "narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=", + "lastModified": 1758690382, + "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "554be6495561ff07b6c724047bdd7e0716aa7b46", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", "type": "github" }, "original": { @@ -265,11 +265,11 @@ ] }, "locked": { - "lastModified": 1758600385, - "narHash": "sha256-lRK96/otQ9JAkrjYFkK8sKloujhZ+eS3RFFerMdEKAg=", + "lastModified": 1758859571, + "narHash": "sha256-/DPe2RNgIzTBHm1tLUF31YswssT7Uz+HJI6VIkmHN6w=", "owner": "youwen5", "repo": "zen-browser-flake", - "rev": "8fdac24a43e541c644ea26b48ff886533d367155", + "rev": "58e5a7b019aa1584ca46e909b011c1f6a91081f0", "type": "github" }, "original": { -- 2.47.2 From 65e6b9cab99791e64f9c218509a6f39cfa64dcdf Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 28 Sep 2025 16:32:40 +0200 Subject: [PATCH 56/77] [hypr] Fix modes --- stow/hyprland/.config/hypr/hyprland.conf | 18 +---------- stow/hyprland/.config/hypr/keybinds.conf | 9 +++--- stow/hyprland/.config/hypr/modes.conf | 38 ++++++++++++++++++++++++ stow/waybar/.config/waybar/config.jsonc | 3 ++ 4 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 stow/hyprland/.config/hypr/modes.conf diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf index 73bfa92..b9629db 100644 --- a/stow/hyprland/.config/hypr/hyprland.conf +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -270,23 +270,7 @@ $lock = swaylock source = /home/tdpeuter/.config/hypr/input-output.conf source = /home/tdpeuter/.config/hypr/keybinds.conf - -$mode_launcher = Launch (f)irefox, (t)hunderbird. -bind = $flag, O, submap, $mode_launcher -submap = $mode_launcher - -bind = , F, exec, firefox -bind = , F, submap, reset -bind = , T, exec, thunderbird -bind = , T, submap, reset -bind = , Z, exec, zen -bind = , Z, submap, reset - -bind = $flag, O, submap, reset -bind = , Escape, submap, reset -bind = , Return, submap, reset - -submap = reset +source = /home/tdpeuter/.config/hypr/modes.conf # https://wiki.hyprland.org/Nvidia/#environment-variables env = __GLX_VENDOR_LIBRARY_NAME,nvidia diff --git a/stow/hyprland/.config/hypr/keybinds.conf b/stow/hyprland/.config/hypr/keybinds.conf index 880a1f8..26385f3 100644 --- a/stow/hyprland/.config/hypr/keybinds.conf +++ b/stow/hyprland/.config/hypr/keybinds.conf @@ -58,9 +58,8 @@ bind = $flag, s, setfloating bind = $flag+Shift, s, pin bind = $flag+Shift, s, settiled -bind = $flag, F11, fullscreen, 1 -# bind = $flag, Prior, fullscreen, 1 -# bind = $flag, KP_Prior, fullscreen, 1 +bind = $flag, F11, fullscreen, 1 +bind = $flag+Shift, F11, fullscreen, 0 # Workspaces @@ -158,9 +157,9 @@ bind = , XF86Calculator, exec, qalculate-gtk # Shortcuts # Reload -bind = Alt+Shift, r, exec, "hyperctl reload" +bind = Alt+Shift, r, exec, "hyperctl reload" bind = Ctrl+Alt+Shift, r, forcerendererreload -bind = Alt+Shift, e, exit +bind = Alt+Shift, e, exit # Kill a window bind = $flag, q, closewindow, activewindow diff --git a/stow/hyprland/.config/hypr/modes.conf b/stow/hyprland/.config/hypr/modes.conf new file mode 100644 index 0000000..72e9a3d --- /dev/null +++ b/stow/hyprland/.config/hypr/modes.conf @@ -0,0 +1,38 @@ +# System actions +$mode_system = System (l)ock, (s)leep, (h)ibernate, (r)eboot, (Shift+s)hutdown +bind = Ctrl+Alt, Delete, submap, $mode_system +submap = $mode_system + +bind = , l, exec, $lock +bind = , l, submap, reset +bind = , s, exec, $lock, exec, systemctl suspend +bind = , s, submap, reset +bind = , h, exec, $lock, exec, systemctl hibernate +bind = , h, submap, reset +bind = , r, exec, systemctl reboot +bind = Shift, s, exec, systemctl poweroff -i + +bind = Ctrl+Alt, Delete, submap, reset +bind = , Escape, submap, reset +bind = , Return, submap, reset + +submap = reset + +# Launcher +$mode_launcher = Launch (f)irefox, (t)hunderbird. +bind = $flag, O, submap, $mode_launcher +submap = $mode_launcher + +bind = , F, exec, firefox +bind = , F, submap, reset +bind = , T, exec, thunderbird +bind = , T, submap, reset +bind = , Z, exec, zen +bind = , Z, submap, reset + +bind = $flag, O, submap, reset +bind = , Escape, submap, reset +bind = , Return, submap, reset + +submap = reset + diff --git a/stow/waybar/.config/waybar/config.jsonc b/stow/waybar/.config/waybar/config.jsonc index 2a4f8a4..ff861e3 100644 --- a/stow/waybar/.config/waybar/config.jsonc +++ b/stow/waybar/.config/waybar/config.jsonc @@ -40,11 +40,14 @@ "sway/window", "group/workspaces", "custom/scratchpad-indicator", + "group/mode" ], "modules-center": [ "mpris" ], "modules-right": [ + "keyboard-state#numlock", + "keyboard-state#capslock", "privacy", "tray", "group/control-center", -- 2.47.2 From e6b51a7fea50147a6148e31a7b237464ceeca943 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 30 Sep 2025 09:30:27 +0200 Subject: [PATCH 57/77] [fprintd] Add fingerprint-scanner module --- nixos/flake.nix | 1 + nixos/hosts/Tibo-NixTop/default.nix | 1 + nixos/modules/hardware/default.nix | 1 + .../hardware/fingerprint-scanner/default.nix | 30 +++++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 nixos/modules/hardware/fingerprint-scanner/default.nix diff --git a/nixos/flake.nix b/nixos/flake.nix index 60e1025..fa8b125 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -46,6 +46,7 @@ "steam" "steam-unwrapped" "steam-run" "vista-fonts" "intel-ocl" + "libfprint-2-tod1-broadcom" ]; in utils.lib.mkFlake { diff --git a/nixos/hosts/Tibo-NixTop/default.nix b/nixos/hosts/Tibo-NixTop/default.nix index 5de8df4..9993e07 100644 --- a/nixos/hosts/Tibo-NixTop/default.nix +++ b/nixos/hosts/Tibo-NixTop/default.nix @@ -15,6 +15,7 @@ hardware = { eid.enable = true; + fingerprint-scanner.enable = true; nvidia = { enable = true; model = "Quadro T2000"; diff --git a/nixos/modules/hardware/default.nix b/nixos/modules/hardware/default.nix index 2d38b1e..238bcea 100644 --- a/nixos/modules/hardware/default.nix +++ b/nixos/modules/hardware/default.nix @@ -1,6 +1,7 @@ { imports = [ ./eid + ./fingerprint-scanner ./nvidia ./yubikey ]; diff --git a/nixos/modules/hardware/fingerprint-scanner/default.nix b/nixos/modules/hardware/fingerprint-scanner/default.nix new file mode 100644 index 0000000..b7580c6 --- /dev/null +++ b/nixos/modules/hardware/fingerprint-scanner/default.nix @@ -0,0 +1,30 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.sisyphus.hardware.fingerprint-scanner; +in { + options.sisyphus.hardware.fingerprint-scanner.enable = lib.mkEnableOption "Fingerprint scanner support"; + + config = lib.mkIf cfg.enable { + # Enable driver + services.fprintd = { + enable = true; + + # Enable Touch OEM Drivers library support + tod = { + enable = true; + # Dell drivers + driver = pkgs.libfprint-2-tod1-broadcom; + }; + }; + + # Start driver at boot + systemd.services.fprintd = { + wantedBy = [ + "multi-user.target" + ]; + serviceConfig.Type = "simple"; + }; + }; +} + -- 2.47.2 From 07ad0279bb5838c9e655a0b567c95cf1527ff71c Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 30 Sep 2025 09:31:16 +0200 Subject: [PATCH 58/77] [Tibo-NixTop] Tweak boot --- nixos/hosts/Tibo-NixTop/default.nix | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/nixos/hosts/Tibo-NixTop/default.nix b/nixos/hosts/Tibo-NixTop/default.nix index 9993e07..7431ae5 100644 --- a/nixos/hosts/Tibo-NixTop/default.nix +++ b/nixos/hosts/Tibo-NixTop/default.nix @@ -74,12 +74,19 @@ loader = { # Use the systemd-boot EFI boot loader. - systemd-boot.enable = true; + systemd-boot = { + enable = true; + + editor = false; + memtest86.enable = true; + }; efi.canTouchEfiVariables = true; }; # Use latest kernel. kernelPackages = pkgs.linuxPackages_latest; + + plymouth.enable = true; }; hardware.bluetooth = { @@ -117,6 +124,8 @@ power-profiles-daemon.enable = false; + smartd.enable = true; + thermald.enable = true; xserver = { -- 2.47.2 From d6801e0679e31a2f7eabb867b26effec34ee6843 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Tue, 30 Sep 2025 09:31:53 +0200 Subject: [PATCH 59/77] [firefox] Fix rules --- nixos/users/tdpeuter/firefox.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index 09cd1d6..626eecc 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -32,15 +32,19 @@ in { }; # Anything in about:config - Preferences = { - "browser.newtabpage.activity-stream.showSponsoredCheckboxes" = { + Preferences = let + falseLocked = { Value = false; - Status = "locked"; + Status = "falseLocked"; }; + in { + "browser.newtabpage.activity-stream.showSponsoredCheckboxes" = falseLocked; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = falseLocked; "browser.newtabpage.pinned" = { Value = "[]"; Status = "default"; }; + "services.sync.prefs.sync-seen.browser.newtabpage.activity-stream.showSponsoredTopSites" = falseLocked; }; }; -- 2.47.2 From 9e215b6df90471ccaca8518d9932115166f294bd Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 1 Oct 2025 07:37:06 +0200 Subject: [PATCH 60/77] [swaylock] Bluescreen --- assets/bluescreen.png | Bin 0 -> 115171 bytes nixos/modules/desktop/hyprland/default.nix | 3 ++- nixos/modules/desktop/sway/default.nix | 1 + stow/hyprland/.config/hypr/hyprland.conf | 2 +- stow/swaylock/.config/swaylock/config | 30 +++++++++++---------- stow/waybar/.config/waybar/modules.json | 6 ++--- 6 files changed, 23 insertions(+), 19 deletions(-) create mode 100644 assets/bluescreen.png diff --git a/assets/bluescreen.png b/assets/bluescreen.png new file mode 100644 index 0000000000000000000000000000000000000000..ef36cd9c5c52a13373a7cabde6d35d49c343d3f9 GIT binary patch literal 115171 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

%xFS-HcW+*)tZnDL$^3D0i5TFiB zJZbgfuzfE#W{}CAua7IU%9Cen-yy=>oi6JXOn7Z0PMo7mRS%h59Xb7Wrmp1jrTbFq z&%9ko^U(sHFQrhmnBpRj4g@+BjeAP=jRT`i6H-T!#CGdyV;vx=IQogP?B4$zvVA7(SnaSSaU4Cmm9(n)> zbvNp;)nB=m9Q@SGx8kWQz@XD5K)jmU&pad!s&MT{(g-IMPCfMD-<>8onlLzoV%y)G zFn<~(pTAtAX>h)1u9rudzAVd_lE|2B9ojj`*=nY6lpuOY4-_}RLp;^V4^z;r*M8{^ zDa|i@E1p60_pbTeL)Sc*Ac`7+5*Z-E)c=O*@WgFY57Th4ixSt(@hOO;HXGA!Ad

rXK0tXVP?=b7J}HY5A-g3m4H6jGS*O{7JZR_oi) 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 literal 0 HcmV?d00001 diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index d4ed030..b77946b 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -11,6 +11,7 @@ in { # Hint Electron apps to use wayland NIXOS_OZONE_WL = "1"; + ASSETS_DIR = ../../../../assets; SCRIPT_DIR = ../../../../scripts; }; @@ -27,7 +28,7 @@ in { wl-mirror # Mirror an output wdisplays # Tool to configure displays - swaylock-effects + swaylock glib diff --git a/nixos/modules/desktop/sway/default.nix b/nixos/modules/desktop/sway/default.nix index 3dc3547..ebc0202 100644 --- a/nixos/modules/desktop/sway/default.nix +++ b/nixos/modules/desktop/sway/default.nix @@ -96,6 +96,7 @@ in { ]); environment.sessionVariables = { + ASSETS_DIR = ../../../../assets; SCRIPT_DIR = ../../../../scripts; }; diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf index b9629db..cdcf89e 100644 --- a/stow/hyprland/.config/hypr/hyprland.conf +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -266,7 +266,7 @@ $right = l $term = foot $menu = j4-dmenu-desktop --dmenu="rofi -dmenu -i" --no-generic --usage-log="/home/tdpeuter/.local/state/dmenu.log" --term=$term -$lock = swaylock +$lock = swaylock --daemonize source = /home/tdpeuter/.config/hypr/input-output.conf source = /home/tdpeuter/.config/hypr/keybinds.conf diff --git a/stow/swaylock/.config/swaylock/config b/stow/swaylock/.config/swaylock/config index 96b053f..a5ecd8a 100644 --- a/stow/swaylock/.config/swaylock/config +++ b/stow/swaylock/.config/swaylock/config @@ -2,21 +2,23 @@ # .config/swaylock/config # -indicator -indicator-radius=200 +#indicator +#indicator-radius=200 +# +#clock +#datestr=%A, %B %d %Y +# +#show-failed-attempts +# +#screenshots +#effect-pixelate=10 +#effect-vignette=0.75:0 # Darken the whole screen. +#fade-in=0.25 +# +#grace=7 # Allow to unlock without password for duration +#grace-no-mouse -clock -datestr=%A, %B %d %Y - -show-failed-attempts - -screenshots -effect-pixelate=10 -effect-vignette=0.75:0 # Darken the whole screen. -fade-in=0.25 - -grace=7 # Allow to unlock without password for duration -grace-no-mouse +image=${ASSETS_DIR}/bluescreen.png # Styling diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index 21b3534..ab8551b 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -90,21 +90,21 @@ "format": "\uf09c", /*  */ "tooltip": true, "tooltip-format": "Lock device", - "on-click": "swaylock -f" + "on-click": "swaylock --daemonize" }, "custom/system-sleep": { "format": "\uf186", /*  */ "tooltip": true, "tooltip-format": "Put device to sleep", - "on-click": "swaylock -f; systemctl suspend" + "on-click": "swaylock --daemonize; systemctl suspend" }, "custom/system-hibernate": { "format": "\uf2dc", /*  */ "tooltip": true, "tooltip-format": "Hibernate device", - "on-click": "swaylock -f; systemctl hibernate" + "on-click": "swaylock --daemonize; systemctl hibernate" }, "custom/system-reboot": { -- 2.47.2 From 072b89c473d47236d03009a7d59e1c5841919c77 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 1 Oct 2025 07:38:25 +0200 Subject: [PATCH 61/77] nix flake update --- nixos/flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/nixos/flake.lock b/nixos/flake.lock index 63e1d07..71f27bb 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -62,11 +62,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1758589230, - "narHash": "sha256-zMTCFGe8aVGTEr2RqUi/QzC1nOIQ0N1HRsbqB4f646k=", + "lastModified": 1759143472, + "narHash": "sha256-TvODmeR2W7yX/JmOCmP+lAFNkTT7hAxYcF3Kz8SZV3w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d1d883129b193f0b495d75c148c2c3a7d95789a0", + "rev": "5ed4e25ab58fd4c028b59d5611e14ea64de51d23", "type": "github" }, "original": { @@ -77,11 +77,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1758690382, - "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "type": "github" }, "original": { @@ -174,11 +174,11 @@ ] }, "locked": { - "lastModified": 1758425756, - "narHash": "sha256-L3N8zV6wsViXiD8i3WFyrvjDdz76g3tXKEdZ4FkgQ+Y=", + "lastModified": 1759188042, + "narHash": "sha256-f9QC2KKiNReZDG2yyKAtDZh0rSK2Xp1wkPzKbHeQVRU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "e0fdaea3c31646e252a60b42d0ed8eafdb289762", + "rev": "9fcfabe085281dd793589bdc770a2e577a3caa5d", "type": "github" }, "original": { @@ -265,11 +265,11 @@ ] }, "locked": { - "lastModified": 1758859571, - "narHash": "sha256-/DPe2RNgIzTBHm1tLUF31YswssT7Uz+HJI6VIkmHN6w=", + "lastModified": 1759205174, + "narHash": "sha256-LMfGQsy3OibEqr3WtLCOqUVdOy5/6DJKWHV8h+1Vapk=", "owner": "youwen5", "repo": "zen-browser-flake", - "rev": "58e5a7b019aa1584ca46e909b011c1f6a91081f0", + "rev": "afd770119e0f9fbb085665738f3fa4c28ff42f78", "type": "github" }, "original": { -- 2.47.2 From b3993ffcba2af3f1a5aecd0d65278d7344840aed Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 3 Oct 2025 14:30:17 +0200 Subject: [PATCH 62/77] [bitwarden] Add pkg --- nixos/modules/desktop/hyprland/default.nix | 2 ++ nixos/users/tdpeuter/default.nix | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index b77946b..8476c54 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -50,6 +50,8 @@ in { waybar.enable = true; }; + security.polkit.enable = true; + services = { dbus.enable = true; displayManager.ly.enable = true; diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index 6435828..e3d6514 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -35,25 +35,26 @@ in { shell = pkgs.zsh; packages = (with pkgs; [ - cmdtime # Zsh plugin - icosystem # Personal icon theme - nextcloud-client - spotify-adblock + bitwarden-desktop brave # Internet browser chafa # Terminal image viewer + cmdtime # Zsh plugin duf # Df alternative feishin # Jellyfin music client foot fzf gh # GitHub CLI tool glow # Terminal Markdown renderer + icosystem # Personal icon theme jellyfin-media-player libreoffice-fresh # Office tools librewolf # Internet browser mpv # Media player + nextcloud-client nsxiv # Lightweight image viewer qalculate-gtk # Calculator spotify + spotify-adblock unzip vifm # File manager zathura # PDF viewer -- 2.47.2 From 92be81fb8f3f948913eff111033cf867e41a30b8 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 4 Oct 2025 16:34:37 +0200 Subject: [PATCH 63/77] [sops] Add GPG decryption --- nixos/.sops.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/.sops.yaml b/nixos/.sops.yaml index 62f72a2..5380b68 100644 --- a/nixos/.sops.yaml +++ b/nixos/.sops.yaml @@ -1,12 +1,15 @@ keys: - &tdpeuter age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y + - &tdpeuter_gpg 08a9c1c8cf9159c9172aba129b11f5243089db5b - &server_H4G0 age1d4gvqz3anf082ja6xt03hnkzazfum80um9t45m4rerl4n3va2yuqgnsg03 creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ key_groups: - - age: + - pgp: + - *tdpeuter_gpg + age: - *tdpeuter - *server_H4G0 -- 2.47.2 From b6c88b47d958ac41f7a7d708d3f4d96f2a4a37c3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 4 Oct 2025 17:38:21 +0200 Subject: [PATCH 64/77] [sops] Add Tibo-NixTop key --- nixos/.sops.yaml | 11 +++-------- nixos/modules/programs/sops/default.nix | 4 ++-- nixos/secrets/HomeLab.yaml | 24 ++++++++++++++---------- nixos/secrets/UGent.yaml | 24 ++++++++++++++---------- nixos/secrets/personal.yaml | 24 ++++++++++++++---------- nixos/secrets/secrets.yaml | 24 ++++++++++++++---------- 6 files changed, 61 insertions(+), 50 deletions(-) diff --git a/nixos/.sops.yaml b/nixos/.sops.yaml index 5380b68..1e89a07 100644 --- a/nixos/.sops.yaml +++ b/nixos/.sops.yaml @@ -1,16 +1,11 @@ keys: - &tdpeuter age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y - - &tdpeuter_gpg 08a9c1c8cf9159c9172aba129b11f5243089db5b - - - &server_H4G0 age1d4gvqz3anf082ja6xt03hnkzazfum80um9t45m4rerl4n3va2yuqgnsg03 + - &Tibo-NixTop age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37 creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ key_groups: - - pgp: - - *tdpeuter_gpg - age: + - age: - *tdpeuter - - - *server_H4G0 + - *Tibo-NixTop diff --git a/nixos/modules/programs/sops/default.nix b/nixos/modules/programs/sops/default.nix index 443eac9..c18f0fc 100644 --- a/nixos/modules/programs/sops/default.nix +++ b/nixos/modules/programs/sops/default.nix @@ -14,8 +14,8 @@ in { # Add secrets.yml to the Nix Store. defaultSopsFile = ../../../secrets/secrets.yaml; age = { - # Automatically import SSH keys as age keys. - sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; + # Don't derive age keys from SSH keys. + sshKeyPaths = [ ]; # Use an age key that is expected to already be in the filesystem. # You will need to place this file manually. keyFile = "/var/lib/sops-nix/key.txt"; diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index f749611..dbd385b 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -6,22 +6,26 @@ HomeLab: Nextcloud: ssh: ENC[AES256_GCM,data:aVqa57u9hIOquP367EDj2rlyQWRe3EZv8l5cC+yQQKCri2bN5IFSq8qNemOIcU9ycBnxIyK6gLerJYQQcgzIIARmnfDpbJ9w+EeUL5yvPVJN6FM7oBeaL9mzYRl8aDKr22LhL9YiKAT1nKHESmTb3TZRvuvWJTGzCMRV85ROGxZYVUgG6BjuHEzuTsc4fy3NVPIl7/4ZjPgNNYx+UNsV5xwTejveB/sGblVrHOO74LZXzUWRlQNun5nM3MY3GALzfrPrVIAyGNu37CGachtwxaPOj7vUKZmD/e+XajYVKRJ3v33jrUeI0dDmhuwJj3taoFik6suAyiK3RlDdeWoERR8vqduiyxJnVMs6mNkigzkVtifpwZyQ8vNyG7w1JNPygMYgQzjN43lGVml8cx1lZvcoBzQabjWxcNzhV8gXxoGKvAwUV7ELB6l00rUH+EeI0uU8/IFm9kwmZq42ciM/bRGSGXzo2PYG2OHOiDe5b0nrIlajaRKd+vuuzTtFFU9EwH0GPzERRaoxVK+h9tzcco/REITCE+CVlHSx,iv:bb1X95HK5tT7EJpqqgMOUxw5VO5MuzoYxkPIzR5sEqU=,tag:y2LKHm7czwyuHp7Ea8KiYw==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k - SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz - ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6 - aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A - dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlL05vZHk2T1B6OHArUXlj + bEZWV0dUeVN0M3ZpeHdKcGlKV1RWYmRLM0FjCm9PLzBZTFo3RjhZTEhYMDBSN2Nj + aithQ2hpZXVCSngxcVBvQ2hKRzFXUEEKLS0tIE5rL0NHb1llRmlSQXVUeU8rVmNY + aEZHdDFEWUdxMzRVVjFhQWZmS04wRkkKrD2CiwdNcbK9s64omQ7xSA29J48HwIHa + ickyL/uorYhXmBKhqdvNq/j1Nb88LR9ti55Z7eecJNbyJb4OTtgzXQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBOWNXQ1BsekdoS3BCdHA4 + YTJJRHJBTEJ1bmhkWktSamYyRk1TUmovZ2trCnBXbUZQZFBndmU3VzJHVjczZGtY + ZkJDY3RzSEhXQVlLL0g1QTYxSC9CZGMKLS0tIGFBZnNlWmZjZFdkdGZvaHA5ZjMw + NFRtOFIybnFPWm1idFY0WEVqVGxOK1UKiJDByqKv/i/l9dvOplDyzDORU3ulhSwi + 6xyEqmyNQpIkiS6TLZZYrBlQMDYqZ2gj1HhdIUssWJCf5Ho8KVDjJQ== -----END AGE ENCRYPTED FILE----- lastmodified: "2024-10-20T07:58:57Z" mac: ENC[AES256_GCM,data:mmFgjE7rp7fXmPOnETGamHR3kUAguFCNNTQcEnD+uM4xeSp3QcB2g8tkKYaJAjkWWqKRSm9/Iu1NWOr9GWyu4O1h7ppWSvpKawWki6cHpqBl8JOwbx/SZi5bzU1lBtoJyT6hD1aCu9ENOMUkpPY3rKcYwbsRMJpKYsbXymPikcQ=,iv:kPB6ds8c4yc/w7Ny1d3DTyztQF4yTr0NyKgIHEzIKAg=,tag:VTpXRb5HaWDjVB52K7mByw==,type:str] - pgp: [] unencrypted_suffix: _unencrypted version: 3.8.1 diff --git a/nixos/secrets/UGent.yaml b/nixos/secrets/UGent.yaml index 5eb38a0..5e55b6d 100644 --- a/nixos/secrets/UGent.yaml +++ b/nixos/secrets/UGent.yaml @@ -7,22 +7,26 @@ UGent: ssh: ENC[AES256_GCM,data:hJAle4DHJNvX569reclBG5rEdWsjAyV2TtHYMiPfky/dMKJkYgT4+T0doLfUn1O6at77kJGPmwUEvmK819DUuvHtNY7c6angV7iLygJ/ThI1FIFOKH+NxEsI3scoT0VDDybHpgice/fcJL1tMcvE74+dWOnZ2r4pxcMJEFHUPVVWcl9/stJLn78OonsyWpj8PglcnYFOfZ6THIe3lyNBxRp7XEweuwjacthGzOzNu3Z95zcCAnAokFVZ570glJNhjJVNEmPHZkHOcGiGNNM4JNbR11v+dOYtac942t/mmmWwAzbznuu8ZLupYWjdg/f07ftkPAwFwCoXblZ3708Lvf6uOt/CPeWvEII2Haf1Cr5w+U6TAt14zzL73xCSQqwz1TfkcmD+bJplmtcpSP/KX8/BRK7qr6Ec5T9ecbraRB7zDBg0X2x51DSHLrA7UIhpI9JNaOArU5UOVYTWwuzFiGG61elJMcPZ5vWEVrTCocfa4INPo4B2MkFbbsYf6xnY1L3Wc9LQjkff6aCqYnQaXZ/WfPWepf9YvYG1,iv:0Bm1r0FuJJKKmcbTiPL36rb5FaMZfOO7Mx8pXU2FSfg=,tag:0ShoJPJUx37mEAus+mhPmw==,type:str] Dwengo: ENC[AES256_GCM,data:3lsZJ5ztkGOfHFQNr54xs9evSTEAs9XHJhg6Krvz3fkT8CaGSiRW5HTCfANGhQ3wJ8kHVziwopQCJ8s93gaipAuEu5k/hYj5wYhOn6x8oDJxftMJC94JDL4eYGIXbx9GSPIy+loftfYIZcfmi6o1lQdiqRdC207Cs+p0ZTB7JSvales16IpgYKoTCRLUytd9cBrezD9gVEngW1b4wHGzai4OOTSunlOVVAgapAKsN+swN7QtMt00607Ns6gCoQDV76qAbM+6EN8PlIKwbyy9UneeTXOf0wtQpb2TM1zrVR7LOqNyXT+DUlrBLpOpYK8tPCP8y5m9DMLixrhbAXMT6pIp2XSbmcfcsuMGLJE2ev/c6PxmbjqiCGEYPC3HdAgUpNDtOMixnHEoXnMUPDJeE0MXbSFMRmzNGo7pc5gOoCFmCkV9NVQXERR6m04Bn3czRQVHfoVIc4ciPdiXpOqF8ocTnqZj7HRW8dvZz9V50ViHwOVqWLJ2a/QUMdagXlaK7zPrxPETKz47iMoMfVaUE8ePg2L5sEZHja62,iv:s/+JYSkZudTr4MnTclpNV7i5VGUlqFhdvovcFt+inSQ=,tag:4Ge0ZOc6qNObQrzS0K0WDA==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k - SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz - ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6 - aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A - dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpb0dlWE5PNllnME1jQWE4 + cHFzWkR4ZzNaWlR0WDJ4c1hEdlJGN0FISWlZCmNNdVRtL080QzgwQTZtTGpVRkxW + dkdvYXdQNUlhYWQrYlNDR2JISXdpdkkKLS0tIEpIU20rK3F3WGpBS1g3NmJqYWRX + SWlNbFZ0NTJJZ09Wd3JzK1hscjJoS2MK4GU8ndim80CaOjgvMwVlgIq/1VQIylSZ + EJl15zUFaDiDZUCcZE8TkJQ/rbGDSiq7KlWyFe48Q3UC86jfF88qCg== + -----END AGE ENCRYPTED FILE----- + - recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYNjkzeHloK3hKUTJaMTdr + NUdiZ2JGZitqN1k0WCtEODU4R2MrTmUzR1hrCmNJL0Y4ZEpLN0l6ZmhGWEM5UktG + ck1PUnFSSVNCRUd5Sm9kSXNmVW5jZDQKLS0tIHpHWVBVNFNBSlUvZldJVGowUEtZ + S05HZ0FiSVlkUjRRV01TbjlpVFlkQWcK7jAqOYd9EDT93xpVgtpKl03EO6oHmGRR + iK9j2y7j1YSghPKDBrC5eKy9+IP/EFEBGygcokqT7C6Nscu80YhVbg== -----END AGE ENCRYPTED FILE----- lastmodified: "2025-02-21T19:36:01Z" mac: ENC[AES256_GCM,data:NMxbxf7/UwR9akbbLgKeSLIkk+dS/an2pGzZUSbe1AJenCVFO/fiRCC5BF6xJVpFSpag/dLwo/tS64JmJ36Vqn2sQGmqn26HPXsjAgyUdpp3+anXIVOGvNHF3oCM8gEUk9+W2FsOqKuejpD7HK/IsVJEZZLbThkUS1BiptOWk84=,iv:xNBBjWADFF5itg45KnmNbZG5RN0KRpaph7iMGhf1KZg=,tag:FrDSAbvo/7QHH0g5Ik8ATw==,type:str] - pgp: [] unencrypted_suffix: _unencrypted version: 3.9.2 diff --git a/nixos/secrets/personal.yaml b/nixos/secrets/personal.yaml index 1e520ab..8a60040 100644 --- a/nixos/secrets/personal.yaml +++ b/nixos/secrets/personal.yaml @@ -3,22 +3,26 @@ GitHub: Gitea: ssh: ENC[AES256_GCM,data:8eyuycMkBVMHfzaGeGs+0RA4vCpaAUTjCwiplUamypEk9BDYqxe+69O6OjJAGaPnmH4kpsb/WVd5sU6HNUogBuzDQhCrv2B6NadcmnV+fH3MHfAWvDy7R68PUkwcywWVOo65SONckjKVa0Y+8IeeJh9zpr36qCbbs+zPC4XTk+Y5R4vK/ocmSJSmwqVK1SfGGwOjFoJvHVI6jdXh//vgKaITqmyZV7N3OU9EiQp1FmNKwFf/x70w2LGATrNBcexwNy20ZYd6ewiAfJxFHR6Svfc2P5X2nlv99W5t1eU5QEGUcalcslsW/VkmFC3agN3Yry2EMIlfTlm0hm4+ryDGWEvgyUC0dLA8Ao0TLaaqig9HzBRP1h6aORe0lDwzTUg6WltrIu0s7hFwD4YLi1qP5lY99hvrDIRbTEg6AY6X4b32YFlyOXy0YDetv90+QyEcwANWO9MXz2S9hxuQmjOXMCVYMaiMLVUkG+mShbQuxTiFQt/7D83yOBSRLugx/aU318NKvUDlCt7wpZbMI3gBia4nUYLoLcXRKcAZ,iv:uc1ZtGdcolLrpQgS5n5LEAwBt0vMmkj2OuTXcn8sQ7A=,tag:F2ofcj0zEBgxwukMUd7+uw==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k - SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz - ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6 - aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A - dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwSDRZQ0pVNWhmdFo1UDVv + MFlrZEFtNjlpZ3pBU0VrdkFpR2x4WGxUZ0RRClJad1JPYWhFTWd1N2ZKQWsrSjFj + YXREaGRrbE15MEdpblJtcTk2cFk1eGsKLS0tIHE2ZTd3R1gwQ3E1VzkvZTZoZjBW + aTRLcFJ6NkpJRjkyenVxeFRLVmgwMjQK47HRKyg1SxWABZHCdVdIaPEKoSiWIOO/ + OYu/1owbUwTh1KouUb4tgNmVBOkERJ9i3lEjWLHUWrlCAUImc9dG4g== + -----END AGE ENCRYPTED FILE----- + - recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBVDZtU2g4dmFXTlNIMFBs + OFBpS2RXRzFwTVdJazQrSldwWUFtdCs0U1ZFCmxRdy9yY3VIWU4zenc4eVNEVUZv + VUlyT29JekNTS3RIMktmS2RGNU5GMTgKLS0tIEhvM2RkcUs0SE5uSXFxc3dvSXhP + WmViM05IMHFPckNic1hHY2ZlTEMrYkkK+66rYqbGQucqQch4Tx9jONR9OIXdjMUd + q/fGLCoSluHuCOkUWr/wUgvF5dWAHftYj9JjDB/9vpp4Q0WClLDszw== -----END AGE ENCRYPTED FILE----- lastmodified: "2024-10-19T12:24:38Z" mac: ENC[AES256_GCM,data:g15gV0H0rlzoeN5Z/Zkgh/8ya9GSrWDVP9oqdVz3m4obmquCLDIygsPaYpRXmfOtPSgvX2KzZ08sNLfcBZSh7eH2Ws7xcezWOntOcmAQNz5LvemqP7YuwtivMK/P4qrkME+LQPkSrSUR+rT99Zj+RQXisy91Cq9NbVBj6uQH7+I=,iv:W+oDp5Dun0g35BFprOmgfI0LoPME3HpPuuniCKA32Kc=,tag:CUU74HZuRNedyI3txn9D+g==,type:str] - pgp: [] unencrypted_suffix: _unencrypted version: 3.8.1 diff --git a/nixos/secrets/secrets.yaml b/nixos/secrets/secrets.yaml index 6c8e2ac..b5bf68e 100644 --- a/nixos/secrets/secrets.yaml +++ b/nixos/secrets/secrets.yaml @@ -9,22 +9,26 @@ example_booleans: - ENC[AES256_GCM,data:Ul7fKA==,iv:U51FhTsWwkbhUWGsO8D+bl2mLdTIfapIB+OGJEOAiRA=,tag:9NJLKp8s2TSKLyXwM8OncA==,type:bool] - ENC[AES256_GCM,data:LVU1a90=,iv:1X1qV+8iIe1i5hIrqyB3tJew9hsHjJHlATmkEmwRA0Y=,tag:ko/5OwmJH/6HKPsvbkoRpw==,type:bool] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3ekx1bzluY0ZhYmhnRmhW - b3pzM2RlKzFrREpMK3RNU1MweldNRXJ5NjE4CmNRbnFvbk1EN0V0ZWJiVzFmL3Jt - N1Vpb3NEdXFzdzU4MjN1elp1RWZ5THcKLS0tIDR4cTFJNVFveEdxaEYvZndKbURa - UHpaNENhL3c1K3RXc05hUmdNZVBpT2MKwBj4+Gb7giVJIoPWiwY3tvugEAexXy6Q - YTWgZQZk96r5aF2mBjRCFCc7prj85PsUN/UXOPjPLVAFG3lwS0Eaog== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4KzMrV2dpWFQyQUQyV050 + elVhN0dUeTRodG1kNHZ0VEVmTUI1QjhidFJnClhJU0tVY0tmMkFaMDZkMDJOKzV1 + NVJiSERtR0VZR3VBOGVJbGk3cUxTMzAKLS0tIGhvMmIyOWQwVlhXRzYwampTeG5V + UDVWQnE4NDY5cFF3RnpxcjhMY2N0VUUK+B24C0CT5b82DJSdKotX4iPhzWxnYsn6 + kS7Ut9uy5OwcB+p6erlbLMEUVmmSNw89KBrowT0Ui1d3AfyGAN4rqQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwTjh4NDRYZGM1VHRZWGor + MmhFWDNvMjI4UUVPbnorNnpabGNZY1BuMVdrCisvZ0U5SXRPM3IzNlZvZEpWZktz + b2FJemtNVHU0WUI4M0U1L2tWR3g1MEUKLS0tIGczTmVubzcwVjg5NDdQdEllWEFw + TWRIRE5WSGRCbncvWlpEMmdWOW5kb00Kq79O2C4aYmZmrq+rbyMtwmEqkqL9epn/ + pw2dxXmYt95qu3x/BxjoN8RFZhabFp9xHkZ1kqJe9FGmBtAmoWXjWA== -----END AGE ENCRYPTED FILE----- lastmodified: "2023-09-10T20:20:18Z" mac: ENC[AES256_GCM,data:yfmYEo8pdlG3tu4Fabwde57igIvpt4UuhQqStVlV36rvPnv9dc42+6iduu+heuQ2OAVw0jk6/o6SWJpcms2DReOAMGDOgt+zV3TgJym52YdMcjTNJTo+4loULhvaWyN9ZdPJjSYKEoSgOZi+oMx4BpwreQEaPaYUxcbTqrWCUa8=,iv:Mb81sBxibRxSaC2kgakhy2pyEmW0MDobF+lHF7cny5E=,tag:DCqTWSnf5Gv5YfAGSEC2yw==,type:str] - pgp: [] unencrypted_suffix: _unencrypted version: 3.7.3 -- 2.47.2 From efe13670842415094c08083f144d7431add6b960 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 4 Oct 2025 17:42:24 +0200 Subject: [PATCH 65/77] [sops] Add NixOS/admin/ssh --- nixos/secrets/HomeLab.yaml | 9 ++++++--- nixos/users/tdpeuter/secrets.nix | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index dbd385b..e1d4e7e 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -5,6 +5,9 @@ HomeLab: ssh: ENC[AES256_GCM,data:Tfuba25e4hJ8Ovl1IdVtDvg0L0sCc9sYTXstRg89IAUzwv/1u8mxdj9ka6ZKaSQr2QUaNWs0BoPV36O4bI2hTwoqhUarhXXZNnJKHtd8xBu/+kfMSOMGa5qD9V9m3L5OFdt+gdwhJxemeQNkvN0Vhsu4DJFPZRPmGflJ2HVRYaRW4AsI+JPqiWSEeKz40f3PQPJ2h26gF+pADmPwtEfcUGZdGnJXUsiYMC0aBEWWxyAgBgj5W+Nbe+OCopEX1qyRcR8qO+LONjuC0b5hcGeOXjWj/d1FnBfxDHeoxRGhNCo8TUk0ap1mpSAttdr55/C51duQfeV09Iow4nzUR2H0jmzojUAjKXXCkBsK6yjIKxW+4+4OKCC9ERz5mDmu5Z+4aFM7CpSquCAnDVFw1Uq9MJqAnSz6AGh29J4LUwMnVNtf+gQwzGyl/C9wE/Svm0UAwP19h6hLcM1rp6bV4xjfSXNDspUkz4Xr3RdPpTI1PemtMZIq8fP64q0FlFZeV62ctl9hCtDVRDo3fG3FUM08fa0OfJpVYjSEAOfC,iv:T8z+P5++cES9Co9d/2tcU0PbxZZM/5x63tcxIjBeQ0I=,tag:AjsulFme64/xEPjgZQFtow==,type:str] Nextcloud: ssh: ENC[AES256_GCM,data:aVqa57u9hIOquP367EDj2rlyQWRe3EZv8l5cC+yQQKCri2bN5IFSq8qNemOIcU9ycBnxIyK6gLerJYQQcgzIIARmnfDpbJ9w+EeUL5yvPVJN6FM7oBeaL9mzYRl8aDKr22LhL9YiKAT1nKHESmTb3TZRvuvWJTGzCMRV85ROGxZYVUgG6BjuHEzuTsc4fy3NVPIl7/4ZjPgNNYx+UNsV5xwTejveB/sGblVrHOO74LZXzUWRlQNun5nM3MY3GALzfrPrVIAyGNu37CGachtwxaPOj7vUKZmD/e+XajYVKRJ3v33jrUeI0dDmhuwJj3taoFik6suAyiK3RlDdeWoERR8vqduiyxJnVMs6mNkigzkVtifpwZyQ8vNyG7w1JNPygMYgQzjN43lGVml8cx1lZvcoBzQabjWxcNzhV8gXxoGKvAwUV7ELB6l00rUH+EeI0uU8/IFm9kwmZq42ciM/bRGSGXzo2PYG2OHOiDe5b0nrIlajaRKd+vuuzTtFFU9EwH0GPzERRaoxVK+h9tzcco/REITCE+CVlHSx,iv:bb1X95HK5tT7EJpqqgMOUxw5VO5MuzoYxkPIzR5sEqU=,tag:y2LKHm7czwyuHp7Ea8KiYw==,type:str] + NixOS: + admin: + ssh: ENC[AES256_GCM,data:rAn/H2CtK2dkES2UIJrZbEP/3rqLgJsy5rortmdqoCthQ41IxztiaH1VtdaVDtw5j0qu49RJ59KkmYpOQXC2okAgLeqcb+J9iwrwspfKd+/I186a4gHZ2l+hGpmr3Vbs6K/UoCY67uygZhznBuwKeW4EjYJgGS7zInJFmMvcMV1rP/t4VoW+5oxptQNCrzoRukIG6NiAOcqU1GtvBfL5PxLaTWUEcZMYuo6sY/9VuEWgkZP1bmhBPUIv9D5yJo94KQr0YOaX4lz2pwd+K0cdD8d0Lh8B5YplA1NDCUnBbuDXfH0aSUAm7DCm6Y/E2UECEMRLuwfyEoe/yaHh8iCGveI//FkmiIKNY1SmTkjM2Fdfk6QaVDF8sG2CWdX21H3senfeM6jSow7JLY1LDvC2WxO4YIJEi14Y7zEpIZinWimyAhihPvMLnwd3taOhE59NrTOQKQS3tyFX+5tO3LtBrpn+Tm/B7WO49EkRn1LXN8CWkFnEEGXgxfNRg91C967nHaNpDMssGjfVG20WwYAtMKXzrNyzSEJbZglQ,iv:vY/8yyO0eLzpdho9aPUH9WGQ8Cp5LA+5RckjzDgYMMY=,tag:Jar1qVS/c1rQ8f3qpYqJdA==,type:str] sops: age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y @@ -25,7 +28,7 @@ sops: NFRtOFIybnFPWm1idFY0WEVqVGxOK1UKiJDByqKv/i/l9dvOplDyzDORU3ulhSwi 6xyEqmyNQpIkiS6TLZZYrBlQMDYqZ2gj1HhdIUssWJCf5Ho8KVDjJQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-20T07:58:57Z" - mac: ENC[AES256_GCM,data:mmFgjE7rp7fXmPOnETGamHR3kUAguFCNNTQcEnD+uM4xeSp3QcB2g8tkKYaJAjkWWqKRSm9/Iu1NWOr9GWyu4O1h7ppWSvpKawWki6cHpqBl8JOwbx/SZi5bzU1lBtoJyT6hD1aCu9ENOMUkpPY3rKcYwbsRMJpKYsbXymPikcQ=,iv:kPB6ds8c4yc/w7Ny1d3DTyztQF4yTr0NyKgIHEzIKAg=,tag:VTpXRb5HaWDjVB52K7mByw==,type:str] + lastmodified: "2025-10-04T15:41:13Z" + mac: ENC[AES256_GCM,data:gXRPTHCjlCFtddrr+xBofkYT5LHiai0SGFhBv1J7sMUvy7e95Rmk6Jrrzl92tscJUHEnM74iEYKPQN/hyPA/rRVaGBJYGwJwdRKyvGIDbvmcqShiQEeitylkwETpxIvaJjFli1Z9SF/EJ0ERWZKB0UfXZBAzAbjz945QohvObM0=,iv:BHb7ZfFfIgur2XmZSSptfz9IvwhLQNcVuUOs28fIYTo=,tag:m9xADey6BcJIYuDIFs26LQ==,type:str] unencrypted_suffix: _unencrypted - version: 3.8.1 + version: 3.10.2 diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index e164183..576c67d 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -36,6 +36,7 @@ in { "HomeLab/Gitea/ssh" = HomeLab; "HomeLab/Hugo/ssh" = HomeLab; "HomeLab/Nextcloud/ssh" = HomeLab; + "HomeLab/NixOS/admin/ssh" = HomeLab; }); }; } -- 2.47.2 From c017c5db32ec7b87a43d7856e1d61aab86051495 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 4 Oct 2025 17:56:19 +0200 Subject: [PATCH 66/77] [sops] Rotate Hugo/ssh --- nixos/secrets/HomeLab.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index e1d4e7e..1ae070a 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -2,7 +2,7 @@ HomeLab: Gitea: ssh: ENC[AES256_GCM,data:+H9qhfOg5WlTB7pihvbJ9omY/zLTAADe8KzI4fbdZ7NuaM0auC95AIQqhwNNCZNglg9UGOVL662pY7dNhbQ/2iCLPHSPgFFXf3fx1moRRcYYQzoJxsgxp19FZQeGNJ0qfRf72xYbZQZKslyHQmcqDieoVTyhaLqTfgC8MQ/UZofw/ortmgME7z51rGV5sXXMjxpJpHz9JxiPwQEL0ABWDAeCqBVBzlqqwdmfKEdkcR4l3USHfH1iNF5XQ5V26I+UGDOyoixt1c/BXzD9xzKI7MUDoRz+qfC6C62LIlEgqZY5tWg+tVZnqobakxwH6d8pXtQ7vaIREEP0LqQMkrNcK8X+cDRteToQ1fcxtN1V+JfZSa9pVC+iGgvmSZ00q4bnOgTmgO9IZ80TvOR4bHpRhjM5l4JMbLBv2jqY1zeUx/5L3WNuYIm9sL5mWXkV/RAD8WCemNSWdKbGsvByEUeiFcxczL/vQ6y3fi+ntmXUgeXVy5zVNkNlYbqd+DemBmwZQb9D1T5T97i2ChciYb3/ON1NObja/bt0PTQa,iv:hIbwsPcDSfgDItlvFFy0vCjuQWvgoQHBH60v8nTVTNg=,tag:1T/TdTEy98TfgMzYAxfHKA==,type:str] Hugo: - ssh: ENC[AES256_GCM,data:Tfuba25e4hJ8Ovl1IdVtDvg0L0sCc9sYTXstRg89IAUzwv/1u8mxdj9ka6ZKaSQr2QUaNWs0BoPV36O4bI2hTwoqhUarhXXZNnJKHtd8xBu/+kfMSOMGa5qD9V9m3L5OFdt+gdwhJxemeQNkvN0Vhsu4DJFPZRPmGflJ2HVRYaRW4AsI+JPqiWSEeKz40f3PQPJ2h26gF+pADmPwtEfcUGZdGnJXUsiYMC0aBEWWxyAgBgj5W+Nbe+OCopEX1qyRcR8qO+LONjuC0b5hcGeOXjWj/d1FnBfxDHeoxRGhNCo8TUk0ap1mpSAttdr55/C51duQfeV09Iow4nzUR2H0jmzojUAjKXXCkBsK6yjIKxW+4+4OKCC9ERz5mDmu5Z+4aFM7CpSquCAnDVFw1Uq9MJqAnSz6AGh29J4LUwMnVNtf+gQwzGyl/C9wE/Svm0UAwP19h6hLcM1rp6bV4xjfSXNDspUkz4Xr3RdPpTI1PemtMZIq8fP64q0FlFZeV62ctl9hCtDVRDo3fG3FUM08fa0OfJpVYjSEAOfC,iv:T8z+P5++cES9Co9d/2tcU0PbxZZM/5x63tcxIjBeQ0I=,tag:AjsulFme64/xEPjgZQFtow==,type:str] + ssh: ENC[AES256_GCM,data:y233CFIH7/n4EGEd2D7MuoprcMV9A8DaiV9JYZ6sr5j+hZnGr8sIAm9/55Bi2cD74sBZcE+tjOz+V2aJ2llKgcdS84ZmXMPh6KQ2QYRYuGdBLeztl8foKdimToblBapebTVO7Rc2mdhg7sZtC/TKSIJnG3R3lRfRdKaxNjaRS51epl7VZKGhLBjZoZqMXOezY7lvNBvF3hFfMh5el5I5Te/yQbbp0a7DkAvA+c1nG9bo9FN0h3VJJTzcuHqvGHI736VosLe8UGirMkX9mBwB8ZV4+2Vp7ZsSHnX5or/MzuYexT0zeLbTNHfj64d2W2/LKDkxNc35Sw7NvxwsVj3k2UHC2jEgus2z0AdMFszEFXh+Eu9wK8yX4ebzUut+OHNPuxvIk+ORxYr3OdVkOhhWHLinu/skNg0u5OdUXo/0p1876+gpcnOVC5UrUflwrtKGQgNk+ovWWjSfcQMh+gI6GYXzksX3YdMEriYZt4Z8lev2od/i7q48cV4W3Lo6TDDttipynxQus6K+J3oBKRirLHylRA5gusqUOVzC,iv:thw9OUnA02qe6aMuLTwy+q/a6isB375/k7JixPEy960=,tag:s95FtFRmPG0Up2oVuQyXsg==,type:str] Nextcloud: ssh: ENC[AES256_GCM,data:aVqa57u9hIOquP367EDj2rlyQWRe3EZv8l5cC+yQQKCri2bN5IFSq8qNemOIcU9ycBnxIyK6gLerJYQQcgzIIARmnfDpbJ9w+EeUL5yvPVJN6FM7oBeaL9mzYRl8aDKr22LhL9YiKAT1nKHESmTb3TZRvuvWJTGzCMRV85ROGxZYVUgG6BjuHEzuTsc4fy3NVPIl7/4ZjPgNNYx+UNsV5xwTejveB/sGblVrHOO74LZXzUWRlQNun5nM3MY3GALzfrPrVIAyGNu37CGachtwxaPOj7vUKZmD/e+XajYVKRJ3v33jrUeI0dDmhuwJj3taoFik6suAyiK3RlDdeWoERR8vqduiyxJnVMs6mNkigzkVtifpwZyQ8vNyG7w1JNPygMYgQzjN43lGVml8cx1lZvcoBzQabjWxcNzhV8gXxoGKvAwUV7ELB6l00rUH+EeI0uU8/IFm9kwmZq42ciM/bRGSGXzo2PYG2OHOiDe5b0nrIlajaRKd+vuuzTtFFU9EwH0GPzERRaoxVK+h9tzcco/REITCE+CVlHSx,iv:bb1X95HK5tT7EJpqqgMOUxw5VO5MuzoYxkPIzR5sEqU=,tag:y2LKHm7czwyuHp7Ea8KiYw==,type:str] NixOS: @@ -28,7 +28,7 @@ sops: NFRtOFIybnFPWm1idFY0WEVqVGxOK1UKiJDByqKv/i/l9dvOplDyzDORU3ulhSwi 6xyEqmyNQpIkiS6TLZZYrBlQMDYqZ2gj1HhdIUssWJCf5Ho8KVDjJQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-04T15:41:13Z" - mac: ENC[AES256_GCM,data:gXRPTHCjlCFtddrr+xBofkYT5LHiai0SGFhBv1J7sMUvy7e95Rmk6Jrrzl92tscJUHEnM74iEYKPQN/hyPA/rRVaGBJYGwJwdRKyvGIDbvmcqShiQEeitylkwETpxIvaJjFli1Z9SF/EJ0ERWZKB0UfXZBAzAbjz945QohvObM0=,iv:BHb7ZfFfIgur2XmZSSptfz9IvwhLQNcVuUOs28fIYTo=,tag:m9xADey6BcJIYuDIFs26LQ==,type:str] + lastmodified: "2025-10-04T15:55:51Z" + mac: ENC[AES256_GCM,data:HxZzzUqUSS9dS8XZEitD911fx750571M07IYknc94S4uCVCw8QOkhR4NYkDIIDShCBJn3UzNkvBT+uSpvlNy63JKELZOuSuw4WwhT7agx166W/g464bkHmmkRZ2jR60fH1fHi6rxViXrQ9JRthIBX9JWbbd5NxKQUa/+k+Z+Euo=,iv:6v5qvoqM+9M+htkOtJxxIsc5BuXAImijhHCvFI/gwiA=,tag:8F7KCunNM0mKr0UlQLpyLA==,type:str] unencrypted_suffix: _unencrypted version: 3.10.2 -- 2.47.2 From 3d4cd5ba5c48f0b96fc28c218383aa375118a3f3 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 4 Oct 2025 21:46:18 +0200 Subject: [PATCH 67/77] [sops/ssh] Add more SSH config/keys --- nixos/.sops.yaml | 5 ++--- nixos/secrets/HomeLab.yaml | 7 ++++-- nixos/secrets/UGent.yaml | 7 +++--- nixos/users/tdpeuter/secrets.nix | 8 +++++-- stow/ssh/.ssh/config | 37 ++++++++++++++++++++++---------- 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/nixos/.sops.yaml b/nixos/.sops.yaml index 1e89a07..385e7af 100644 --- a/nixos/.sops.yaml +++ b/nixos/.sops.yaml @@ -1,11 +1,10 @@ keys: - - &tdpeuter age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y + - &Tibo-NixFatDesk age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y - &Tibo-NixTop age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37 creation_rules: - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ key_groups: - age: - - *tdpeuter + - *Tibo-NixFatDesk - *Tibo-NixTop - diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index 1ae070a..2cbb8fc 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -8,6 +8,9 @@ HomeLab: NixOS: admin: ssh: ENC[AES256_GCM,data:rAn/H2CtK2dkES2UIJrZbEP/3rqLgJsy5rortmdqoCthQ41IxztiaH1VtdaVDtw5j0qu49RJ59KkmYpOQXC2okAgLeqcb+J9iwrwspfKd+/I186a4gHZ2l+hGpmr3Vbs6K/UoCY67uygZhznBuwKeW4EjYJgGS7zInJFmMvcMV1rP/t4VoW+5oxptQNCrzoRukIG6NiAOcqU1GtvBfL5PxLaTWUEcZMYuo6sY/9VuEWgkZP1bmhBPUIv9D5yJo94KQr0YOaX4lz2pwd+K0cdD8d0Lh8B5YplA1NDCUnBbuDXfH0aSUAm7DCm6Y/E2UECEMRLuwfyEoe/yaHh8iCGveI//FkmiIKNY1SmTkjM2Fdfk6QaVDF8sG2CWdX21H3senfeM6jSow7JLY1LDvC2WxO4YIJEi14Y7zEpIZinWimyAhihPvMLnwd3taOhE59NrTOQKQS3tyFX+5tO3LtBrpn+Tm/B7WO49EkRn1LXN8CWkFnEEGXgxfNRg91C967nHaNpDMssGjfVG20WwYAtMKXzrNyzSEJbZglQ,iv:vY/8yyO0eLzpdho9aPUH9WGQ8Cp5LA+5RckjzDgYMMY=,tag:Jar1qVS/c1rQ8f3qpYqJdA==,type:str] + Roxanne: + ghost: + ssh: ENC[AES256_GCM,data:hkgVUVyCLANeYB4bcCTLB/F6eAbg7J4eN8y+VVzBfkcgnpDmXmghBihreQVT7OIwRrHIH1ok2vuH8vgXb38tuplUD5I8e0Gqy3EqpOGagsO8lss4aIg2lRwZ9WazJknvo4OaGc34jrwcZicesnaxK6g+GX2r2N4caGKMuOZ2i1mLKBwOcEtL6l3REKrGkExd3mYJX1Yqs7sMbGLNpfemDghv646zvxDRwPby49qIPA8OtGR+DBMZTTEviNqamJaFbs7YX+K77J1NHK59u6UfzU6hEjTBEYIjkFDzGATAZAopCsjOHcAA0alejHK4QZZt3e8unVsLICNK08ZCyEzwSXQ/wpUh3ccGcLit2t1LYZT4PqqG8+6ooaQYso67Wral0pdsTsrF0mGNfsZm76MDV9puP5B+IInanHz+2mCHbdmTi6rg9t8Q6mpFqrUbrwxMn2Ns1proBXBCqK/sFjC/bVIyMHUVOh6GYcKaVTv8ecB9ZEjp5dZ4VeStqTMT+xqS7dXBAJzGytLwXT/JaQelIE0w47aBaGy63Pqy,iv:WuAGU+ru8xLp2LXK12x/ueCH0XDxA0zGUt7+HWUdVMo=,tag:UqUMD/jSdTXOkf0kyMqwHA==,type:str] sops: age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y @@ -28,7 +31,7 @@ sops: NFRtOFIybnFPWm1idFY0WEVqVGxOK1UKiJDByqKv/i/l9dvOplDyzDORU3ulhSwi 6xyEqmyNQpIkiS6TLZZYrBlQMDYqZ2gj1HhdIUssWJCf5Ho8KVDjJQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-04T15:55:51Z" - mac: ENC[AES256_GCM,data:HxZzzUqUSS9dS8XZEitD911fx750571M07IYknc94S4uCVCw8QOkhR4NYkDIIDShCBJn3UzNkvBT+uSpvlNy63JKELZOuSuw4WwhT7agx166W/g464bkHmmkRZ2jR60fH1fHi6rxViXrQ9JRthIBX9JWbbd5NxKQUa/+k+Z+Euo=,iv:6v5qvoqM+9M+htkOtJxxIsc5BuXAImijhHCvFI/gwiA=,tag:8F7KCunNM0mKr0UlQLpyLA==,type:str] + lastmodified: "2025-10-04T19:40:06Z" + mac: ENC[AES256_GCM,data:V/0QsMR9nuoK7Tgj9UVxcsWM5llHlpMj+K0IgN3ZdqFQptOpasq+xVBBnSpNOarNFXB7t2ZCkzLMWptl/6fNH9Cye2qf8GjplHLGTB9x8t2u2XMwJf4BwCjOgxhiKo5jqFmjnFE2mX2EeZmHXv3G8gPwW+1cVttQQ4s7REo3Hww=,iv:AY0RSvevoSscdjl44iGEvWzcb664285csg1h0Hpixn4=,tag:yebUKx6Ssa6sB9HbNlLmUw==,type:str] unencrypted_suffix: _unencrypted version: 3.10.2 diff --git a/nixos/secrets/UGent.yaml b/nixos/secrets/UGent.yaml index 5e55b6d..634ba65 100644 --- a/nixos/secrets/UGent.yaml +++ b/nixos/secrets/UGent.yaml @@ -5,7 +5,6 @@ UGent: ssh: ENC[AES256_GCM,data:A4ir0yvCgIVJCl4C5fB4+WhJVj6Go9XWfjw1/lOaWr2rP+tVNnjGuv/d47z55Gxose5keYX2wRMet/M2Re18+5ckFTyfT4YkcHtQCyBGbmwYmIzxcaxinNsCuOelEdNnFnYW2ha0aJ8Q5Xjfpec1YqDrCT/Add3qGRzBizQJ1FajbyhxJOKLYvUrYvLZ8+XE8SUndvjQnVig3ArUm2hDFsEMm4ClZ4T+EwcIuWrS8ia7ZoqlQhglEtlSEczE65a6hQAFeXE64YC3s8kWlRGhRqJQXjB5g/UTkOht3Vrw2cNzrz90tR9vhooOEBEI6d8F8RJGkdyUe5zod1eKnE/lwOFhhTbzrGrYzX4oUrDIL+Dx9+R9mQchv9qSau1JtKDvzkYmqVVgTC6wE98gTRSBw78f0MKO27FA3diC/k3t+mwsKVRjcvlTUcbRcFAxjq/U5TbOq5jOgA41dI9KE/+bnJoLRh81m/sq9EqMTp90wDKn+jjCn7lGcGDwtaaTlbLIGIw5u9pcfD4UyvJZamnS96JAhsDUqk+fxb05,iv:jPCdaC7CahKrj3tvzZTs1ZI/3+zuCCqIdXp3vo9l/iY=,tag:DeUdWEZHpsB1AMD2AQuiTg==,type:str] SubGit: ssh: ENC[AES256_GCM,data:hJAle4DHJNvX569reclBG5rEdWsjAyV2TtHYMiPfky/dMKJkYgT4+T0doLfUn1O6at77kJGPmwUEvmK819DUuvHtNY7c6angV7iLygJ/ThI1FIFOKH+NxEsI3scoT0VDDybHpgice/fcJL1tMcvE74+dWOnZ2r4pxcMJEFHUPVVWcl9/stJLn78OonsyWpj8PglcnYFOfZ6THIe3lyNBxRp7XEweuwjacthGzOzNu3Z95zcCAnAokFVZ570glJNhjJVNEmPHZkHOcGiGNNM4JNbR11v+dOYtac942t/mmmWwAzbznuu8ZLupYWjdg/f07ftkPAwFwCoXblZ3708Lvf6uOt/CPeWvEII2Haf1Cr5w+U6TAt14zzL73xCSQqwz1TfkcmD+bJplmtcpSP/KX8/BRK7qr6Ec5T9ecbraRB7zDBg0X2x51DSHLrA7UIhpI9JNaOArU5UOVYTWwuzFiGG61elJMcPZ5vWEVrTCocfa4INPo4B2MkFbbsYf6xnY1L3Wc9LQjkff6aCqYnQaXZ/WfPWepf9YvYG1,iv:0Bm1r0FuJJKKmcbTiPL36rb5FaMZfOO7Mx8pXU2FSfg=,tag:0ShoJPJUx37mEAus+mhPmw==,type:str] - Dwengo: ENC[AES256_GCM,data:3lsZJ5ztkGOfHFQNr54xs9evSTEAs9XHJhg6Krvz3fkT8CaGSiRW5HTCfANGhQ3wJ8kHVziwopQCJ8s93gaipAuEu5k/hYj5wYhOn6x8oDJxftMJC94JDL4eYGIXbx9GSPIy+loftfYIZcfmi6o1lQdiqRdC207Cs+p0ZTB7JSvales16IpgYKoTCRLUytd9cBrezD9gVEngW1b4wHGzai4OOTSunlOVVAgapAKsN+swN7QtMt00607Ns6gCoQDV76qAbM+6EN8PlIKwbyy9UneeTXOf0wtQpb2TM1zrVR7LOqNyXT+DUlrBLpOpYK8tPCP8y5m9DMLixrhbAXMT6pIp2XSbmcfcsuMGLJE2ev/c6PxmbjqiCGEYPC3HdAgUpNDtOMixnHEoXnMUPDJeE0MXbSFMRmzNGo7pc5gOoCFmCkV9NVQXERR6m04Bn3czRQVHfoVIc4ciPdiXpOqF8ocTnqZj7HRW8dvZz9V50ViHwOVqWLJ2a/QUMdagXlaK7zPrxPETKz47iMoMfVaUE8ePg2L5sEZHja62,iv:s/+JYSkZudTr4MnTclpNV7i5VGUlqFhdvovcFt+inSQ=,tag:4Ge0ZOc6qNObQrzS0K0WDA==,type:str] sops: age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y @@ -26,7 +25,7 @@ sops: S05HZ0FiSVlkUjRRV01TbjlpVFlkQWcK7jAqOYd9EDT93xpVgtpKl03EO6oHmGRR iK9j2y7j1YSghPKDBrC5eKy9+IP/EFEBGygcokqT7C6Nscu80YhVbg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-02-21T19:36:01Z" - mac: ENC[AES256_GCM,data:NMxbxf7/UwR9akbbLgKeSLIkk+dS/an2pGzZUSbe1AJenCVFO/fiRCC5BF6xJVpFSpag/dLwo/tS64JmJ36Vqn2sQGmqn26HPXsjAgyUdpp3+anXIVOGvNHF3oCM8gEUk9+W2FsOqKuejpD7HK/IsVJEZZLbThkUS1BiptOWk84=,iv:xNBBjWADFF5itg45KnmNbZG5RN0KRpaph7iMGhf1KZg=,tag:FrDSAbvo/7QHH0g5Ik8ATw==,type:str] + lastmodified: "2025-10-06T14:01:15Z" + mac: ENC[AES256_GCM,data:bWo5DGCt5cK02Lf61yKFDZLLaMmcWyba+03CZ35EnGz7Hoc1sl3qTmgJfNz8EKDeXTIkk33DdnI/kZ2nX7vsZ/QgOhFQWzWRYe1cxqiWyd0wnUlwdoeeFrBP3uOTHXAOVe6q77S3qChzBP3J+5OijztvdOVEOKFmFPSCgyA029Q=,iv:6DSp63IrtYyaFxkaify/JZDXpB76AaGGW/OcPTKBbvk=,tag:sPKddpcx60JFZ4VEGD1tnQ==,type:str] unencrypted_suffix: _unencrypted - version: 3.9.2 + version: 3.10.2 diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index 576c67d..a7afac6 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -24,7 +24,6 @@ in { }; in { "UGent/HPC/ssh" = UGent; - "UGent/Dwengo" = UGent; # Git authentication "Gitea/ssh" = personal; @@ -33,8 +32,13 @@ in { "UGent/SubGit/ssh" = UGent; # HomeLab - "HomeLab/Gitea/ssh" = HomeLab; + + # Physical hosts "HomeLab/Hugo/ssh" = HomeLab; + "HomeLab/Roxanne/ghost/ssh" = HomeLab; + + # Virtual hosts + "HomeLab/Gitea/ssh" = HomeLab; "HomeLab/Nextcloud/ssh" = HomeLab; "HomeLab/NixOS/admin/ssh" = HomeLab; }); diff --git a/stow/ssh/.ssh/config b/stow/ssh/.ssh/config index aacb461..2e45b5d 100644 --- a/stow/ssh/.ssh/config +++ b/stow/ssh/.ssh/config @@ -4,12 +4,6 @@ Host HPC IdentitiesOnly yes IdentityFile /run/secrets/UGent/HPC/ssh -Host Dwengo - User tibo - HostName sel2-1.ugent.be - IdentitiesOnly yes - IdentityFile /run/secrets/UGent/Dwengo - # Git authentication Host git.depeuter.dev User git @@ -37,20 +31,41 @@ Host subgit.ugent.be CanonicalizeHostname yes # Ignore capitalization # HomeLab -Host Gitea - User admin - HostName 192.168.0.24 - IdentitiesOnly yes - IdentityFile /run/secrets/HomeLab/Gitea/ssh +# Physical hosts Host Hugo User admin HostName 192.168.0.11 IdentitiesOnly yes IdentityFile /run/secrets/HomeLab/Hugo/ssh +Host Roxanne + User ghost + Hostname 192.168.0.13 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Roxanne/ghost/ssh + +# Virtual hosts +Host Gitea + User admin + HostName 192.168.0.24 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Gitea/ssh + Host Nextcloud User administrator Hostname 192.168.0.14 IdentitiesOnly yes IdentityFile /run/secrets/HomeLab/Nextcloud/ssh + +Host Development + User admin + Hostname 192.168.0.91 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/NixOS/admin/ssh + +Host Testing + User admin + Hostname 192.168.0.92 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Nixos/admin/ssh -- 2.47.2 From 6005ee646cbc4b4f1857962a788d7858cb45a5c2 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 8 Oct 2025 09:57:57 +0200 Subject: [PATCH 68/77] feat(waybar): Add individual module --- nixos/modules/desktop/default.nix | 2 ++ nixos/modules/desktop/hyprland/default.nix | 13 +++++------ nixos/modules/desktop/sway/default.nix | 25 +++++++++++----------- nixos/modules/desktop/waybar/default.nix | 18 ++++++++++++++++ 4 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 nixos/modules/desktop/waybar/default.nix diff --git a/nixos/modules/desktop/default.nix b/nixos/modules/desktop/default.nix index 465f8ca..2defa4d 100644 --- a/nixos/modules/desktop/default.nix +++ b/nixos/modules/desktop/default.nix @@ -4,5 +4,7 @@ ./hyprland ./plasma ./sway + + ./waybar ]; } diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index 8476c54..3049fbe 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -20,7 +20,6 @@ in { dunst libnotify swaybg - waybar waycorner playerctl wlsunset @@ -41,13 +40,9 @@ in { ]; }; - programs = { - hyprland = { - enable = true; - xwayland.enable = true; - }; - - waybar.enable = true; + programs.hyprland = { + enable = true; + xwayland.enable = true; }; security.polkit.enable = true; @@ -58,6 +53,8 @@ in { gnome.gnome-keyring.enable = true; xserver.videoDrivers = [ "nvidia" ]; }; + + sisyphus.desktop.waybar.enable = true; }; } diff --git a/nixos/modules/desktop/sway/default.nix b/nixos/modules/desktop/sway/default.nix index ebc0202..b9a8003 100644 --- a/nixos/modules/desktop/sway/default.nix +++ b/nixos/modules/desktop/sway/default.nix @@ -82,7 +82,6 @@ in { playerctl swaybg swaylock-effects - waybar wlsunset waycorner @@ -120,7 +119,7 @@ in { xserver.videoDrivers = [ "nouveau" ]; # xserver.videoDrivers = [ "nvidia" ]; }; - + xdg.portal = { enable = true; wlr.enable = true; @@ -131,18 +130,18 @@ in { xdgOpenUsePortal = true; }; - programs = { - sway = { - enable = true; - package = pkgs.swayfx; - wrapperFeatures.gtk = true; - }; - - waybar.enable = true; + programs.sway = { + enable = true; + package = pkgs.swayfx; + wrapperFeatures.gtk = true; }; - sisyphus.users.wantedGroups = [ - config.users.groups.video.name # Brightnessctl - ]; + sisyphus = { + desktop.waybar.enable = true; + + users.wantedGroups = [ + config.users.groups.video.name # Brightnessctl + ]; + }; }; } diff --git a/nixos/modules/desktop/waybar/default.nix b/nixos/modules/desktop/waybar/default.nix new file mode 100644 index 0000000..273e4ce --- /dev/null +++ b/nixos/modules/desktop/waybar/default.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.sisyphus.desktop.waybar; +in { + options.sisyphus.desktop.waybar.enable = lib.mkEnableOption "Waybar"; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + libnotify + playerctl + jq + j4-dmenu-desktop + ]; + + programs.waybar.enable = true; + }; +} -- 2.47.2 From 411590d12cf4857f8d26a56fa2b2da7ac574d6d8 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 8 Oct 2025 09:58:41 +0200 Subject: [PATCH 69/77] fix(waybar): Custom scripts --- scripts/toggle-tailscale.sh | 13 +++++++++++-- stow/waybar/.config/waybar/modules.json | 15 +++++++++------ stow/waybar/.config/waybar/style.css | 1 - 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/scripts/toggle-tailscale.sh b/scripts/toggle-tailscale.sh index 0263c29..6f79489 100755 --- a/scripts/toggle-tailscale.sh +++ b/scripts/toggle-tailscale.sh @@ -19,15 +19,24 @@ while getopts ":g" option; do if [ "${current_state}" == "${STOPPED_MSG}" ]; then state='disconnected' tooltip='Connect tailnet' + + printf '{"alt": "%s", "tooltip": "%s", "class": "%s" }' \ + "${state}" "${tooltip}" "${state}" else state='connected' tooltip="${status:='Disconnect tailnet'}" + + printf '{"alt": "%s", "tooltip": "%q", "class": "%s" }' \ + "${state}" "${tooltip}" "${state}" fi - printf '{"alt": "%s", "tooltip": "%q", "class": "%s" }' \ - "${state}" "${tooltip}" "${state}" exit 0 ;; + + *) + echo 'Invalid option' + exit 1 + ;; esac done diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index ab8551b..447f9ba 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -122,7 +122,8 @@ }, "custom/toggle-light-dark": { - "exec": "sleep 1 && bash ~/projects/sisyphus/scripts/toggle-light-dark.sh -g", + "exec": "bash ~/projects/sisyphus/scripts/toggle-light-dark.sh -g", + "interval": 60, "return-type": "json", "on-click": "bash ~/projects/sisyphus/scripts/toggle-light-dark.sh", "format": "{icon}", @@ -134,19 +135,21 @@ }, "custom/toggle-notifications": { - "exec": "sleep 6 && bash ~/projects/sisyphus/scripts/toggle-notifications.sh -g", + "exec": "bash ~/projects/sisyphus/scripts/toggle-notifications.sh -g", + "interval": 60, "return-type": "json", "on-click": "bash ~/projects/sisyphus/scripts/toggle-notifications.sh", - "format": "NOTIS {icon}", + "format": "{icon}", "format-icons": { - "normal": "NRML", - "paused": "PAISED" + "normal": "\uf0f3", /*  */ + "paused": "\uf1f6" /*  */ }, "tooltip": true }, "custom/toggle-tailscale": { - "exec": "sleep 2 && bash ~/projects/sisyphus/scripts/toggle-tailscale.sh -g", + "exec": "bash ~/projects/sisyphus/scripts/toggle-tailscale.sh -g", + "interval": 60, "return-type": "json", "on-click": "bash ~/projects/sisyphus/scripts/toggle-tailscale.sh", "format": "{icon}", diff --git a/stow/waybar/.config/waybar/style.css b/stow/waybar/.config/waybar/style.css index 11d3b20..ecc08fc 100644 --- a/stow/waybar/.config/waybar/style.css +++ b/stow/waybar/.config/waybar/style.css @@ -62,7 +62,6 @@ window#waybar { opacity: 0.6; } - #mpris.Feishin { background: linear-gradient(45deg, rgba(170,92,195,1) 100%, rgba(0,164,220,1) 0%); } -- 2.47.2 From d94e6ebf1d4a459ee43533a948f4f6913bf5c956 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 8 Oct 2025 10:09:05 +0200 Subject: [PATCH 70/77] fix(waybar): Use SCRIPT_DIR envvar --- stow/waybar/.config/waybar/modules.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index 447f9ba..6cec15d 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -122,10 +122,10 @@ }, "custom/toggle-light-dark": { - "exec": "bash ~/projects/sisyphus/scripts/toggle-light-dark.sh -g", + "exec": "bash ${SCRIPT_DIR}/toggle-light-dark.sh -g", "interval": 60, "return-type": "json", - "on-click": "bash ~/projects/sisyphus/scripts/toggle-light-dark.sh", + "on-click": "bash ${SCRIPT_DIR}/toggle-light-dark.sh", "format": "{icon}", "format-icons": { "default": "\uf185", @@ -135,10 +135,10 @@ }, "custom/toggle-notifications": { - "exec": "bash ~/projects/sisyphus/scripts/toggle-notifications.sh -g", + "exec": "bash ${SCRIPT_DIR}/toggle-notifications.sh -g", "interval": 60, "return-type": "json", - "on-click": "bash ~/projects/sisyphus/scripts/toggle-notifications.sh", + "on-click": "bash ${SCRIPT_DIR}/toggle-notifications.sh", "format": "{icon}", "format-icons": { "normal": "\uf0f3", /*  */ @@ -148,10 +148,10 @@ }, "custom/toggle-tailscale": { - "exec": "bash ~/projects/sisyphus/scripts/toggle-tailscale.sh -g", + "exec": "bash ${SCRIPT_DIR}/toggle-tailscale.sh -g", "interval": 60, "return-type": "json", - "on-click": "bash ~/projects/sisyphus/scripts/toggle-tailscale.sh", + "on-click": "bash ${SCRIPT_DIR}/toggle-tailscale.sh", "format": "{icon}", "format-icons": { "disconnected": "\ue50b", -- 2.47.2 From f722b8681297268ceed3e1aa5a4373f51d1beae5 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 8 Oct 2025 10:09:39 +0200 Subject: [PATCH 71/77] chore: More aliases --- stow/hyprland/.config/hypr/modes.conf | 6 +++--- stow/zsh/.zshrc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/stow/hyprland/.config/hypr/modes.conf b/stow/hyprland/.config/hypr/modes.conf index 72e9a3d..61bbbf0 100644 --- a/stow/hyprland/.config/hypr/modes.conf +++ b/stow/hyprland/.config/hypr/modes.conf @@ -19,16 +19,16 @@ bind = , Return, submap, reset submap = reset # Launcher -$mode_launcher = Launch (f)irefox, (t)hunderbird. +$mode_launcher = Launch (f)irefox, (t)hunderbird, (l)ogseq. bind = $flag, O, submap, $mode_launcher submap = $mode_launcher bind = , F, exec, firefox bind = , F, submap, reset +bind = , L, exec, logseq +bind = , L, submap, reset bind = , T, exec, thunderbird bind = , T, submap, reset -bind = , Z, exec, zen -bind = , Z, submap, reset bind = $flag, O, submap, reset bind = , Escape, submap, reset diff --git a/stow/zsh/.zshrc b/stow/zsh/.zshrc index b21803c..155caec 100644 --- a/stow/zsh/.zshrc +++ b/stow/zsh/.zshrc @@ -51,7 +51,7 @@ fi alias cp='cp -i' alias df='df -h' alias free='free -m' -alias gs='git status' +alias gs='git status --short' alias hgrep='history | grep' alias ll='ls -la' alias mkdir='mkdir -pv' -- 2.47.2 From 23b021b9b2904c3de934a33b7b2cf8b5c883bffc Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 22 Oct 2025 09:48:06 +0200 Subject: [PATCH 72/77] nixos/flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/5ed4e25ab58fd4c028b59d5611e14ea64de51d23?narHash=sha256-TvODmeR2W7yX/JmOCmP%2BlAFNkTT7hAxYcF3Kz8SZV3w%3D' (2025-09-29) → 'github:NixOS/nixpkgs/33c6dca0c0cb31d6addcd34e90a63ad61826b28c?narHash=sha256-PXwG0TM7Ek87DNx4LbGWuD93PbFeKAJs4FfALtp7Wo0%3D' (2025-10-19) • Updated input 'nixpkgs-unstable': 'github:NixOS/nixpkgs/e9f00bd893984bc8ce46c895c3bf7cac95331127?narHash=sha256-0m27AKv6ka%2Bq270dw48KflE0LwQYrO7Fm4/2//KCVWg%3D' (2025-09-28) → 'github:NixOS/nixpkgs/5e2a59a5b1a82f89f2c7e598302a9cacebb72a67?narHash=sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs%3D' (2025-10-19) • Updated input 'sops-nix': 'github:Mic92/sops-nix/9fcfabe085281dd793589bdc770a2e577a3caa5d?narHash=sha256-f9QC2KKiNReZDG2yyKAtDZh0rSK2Xp1wkPzKbHeQVRU%3D' (2025-09-29) → 'github:Mic92/sops-nix/5a7d18b5c55642df5c432aadb757140edfeb70b3?narHash=sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY%3D' (2025-10-20) • Updated input 'zen-browser': 'github:youwen5/zen-browser-flake/afd770119e0f9fbb085665738f3fa4c28ff42f78?narHash=sha256-LMfGQsy3OibEqr3WtLCOqUVdOy5/6DJKWHV8h%2B1Vapk%3D' (2025-09-30) → 'github:youwen5/zen-browser-flake/e7d9fefd8665be5d4c77466140f21a15f6d29e93?narHash=sha256-d01CGcdNlsqIn4ncGCWHM0Velnii/Ggef1iybQvEOfc%3D' (2025-10-22) --- nixos/flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/nixos/flake.lock b/nixos/flake.lock index 71f27bb..de6ae4c 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -62,11 +62,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1759143472, - "narHash": "sha256-TvODmeR2W7yX/JmOCmP+lAFNkTT7hAxYcF3Kz8SZV3w=", + "lastModified": 1760862643, + "narHash": "sha256-PXwG0TM7Ek87DNx4LbGWuD93PbFeKAJs4FfALtp7Wo0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5ed4e25ab58fd4c028b59d5611e14ea64de51d23", + "rev": "33c6dca0c0cb31d6addcd34e90a63ad61826b28c", "type": "github" }, "original": { @@ -77,11 +77,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1759036355, - "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "lastModified": 1760878510, + "narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67", "type": "github" }, "original": { @@ -174,11 +174,11 @@ ] }, "locked": { - "lastModified": 1759188042, - "narHash": "sha256-f9QC2KKiNReZDG2yyKAtDZh0rSK2Xp1wkPzKbHeQVRU=", + "lastModified": 1760998189, + "narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "9fcfabe085281dd793589bdc770a2e577a3caa5d", + "rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", "type": "github" }, "original": { @@ -265,11 +265,11 @@ ] }, "locked": { - "lastModified": 1759205174, - "narHash": "sha256-LMfGQsy3OibEqr3WtLCOqUVdOy5/6DJKWHV8h+1Vapk=", + "lastModified": 1761105987, + "narHash": "sha256-d01CGcdNlsqIn4ncGCWHM0Velnii/Ggef1iybQvEOfc=", "owner": "youwen5", "repo": "zen-browser-flake", - "rev": "afd770119e0f9fbb085665738f3fa4c28ff42f78", + "rev": "e7d9fefd8665be5d4c77466140f21a15f6d29e93", "type": "github" }, "original": { -- 2.47.2 From f94e0647a9719d25c14d9f3feaa93c5385bcbd96 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 26 Oct 2025 16:19:59 +0100 Subject: [PATCH 73/77] [sops/ssh] Add more SSH config/keys --- nixos/secrets/HomeLab.yaml | 8 ++++++-- nixos/users/tdpeuter/secrets.nix | 2 ++ stow/ssh/.ssh/config | 20 +++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index 2cbb8fc..d39ba71 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -1,6 +1,8 @@ HomeLab: Gitea: ssh: ENC[AES256_GCM,data:+H9qhfOg5WlTB7pihvbJ9omY/zLTAADe8KzI4fbdZ7NuaM0auC95AIQqhwNNCZNglg9UGOVL662pY7dNhbQ/2iCLPHSPgFFXf3fx1moRRcYYQzoJxsgxp19FZQeGNJ0qfRf72xYbZQZKslyHQmcqDieoVTyhaLqTfgC8MQ/UZofw/ortmgME7z51rGV5sXXMjxpJpHz9JxiPwQEL0ABWDAeCqBVBzlqqwdmfKEdkcR4l3USHfH1iNF5XQ5V26I+UGDOyoixt1c/BXzD9xzKI7MUDoRz+qfC6C62LIlEgqZY5tWg+tVZnqobakxwH6d8pXtQ7vaIREEP0LqQMkrNcK8X+cDRteToQ1fcxtN1V+JfZSa9pVC+iGgvmSZ00q4bnOgTmgO9IZ80TvOR4bHpRhjM5l4JMbLBv2jqY1zeUx/5L3WNuYIm9sL5mWXkV/RAD8WCemNSWdKbGsvByEUeiFcxczL/vQ6y3fi+ntmXUgeXVy5zVNkNlYbqd+DemBmwZQb9D1T5T97i2ChciYb3/ON1NObja/bt0PTQa,iv:hIbwsPcDSfgDItlvFFy0vCjuQWvgoQHBH60v8nTVTNg=,tag:1T/TdTEy98TfgMzYAxfHKA==,type:str] + HTPC: + ssh: ENC[AES256_GCM,data:svt6jhMXVCydmlcoa052TtFoIwQiAzNJRn9GPZDBuOGSnB83kUpuy/oqPOIa2ipco0L/5F/mQWn7OHUFtyhWWMerzY8niPldUDKH4jgsvRhRIatGOFiDyL8oA+f1O9lmhyFx35uxGa+Q6tn6rtXVKRVWQFe8kYBvGYjugKixsOMugoqLIxY8wUlMTzm6uDd7a72s/0hgQZGKp0eHWBHEdSJGPdv8svVDZ1PBMrlZa5ZpuiUmmvZvyCEnRtImUZALG4nKMvJjunxKr/4MJhWuffQ60jLYzInoGggiJlwBm+E+m43FwIFndY+LJ+ykO5RAbHhSwgXsCS5WXBrvDGuOTNAlIp6yTgSK1DCzSjzOJOc93rVSPhPdkaOoKgxhz1k95qCEhYUf9vyBgyIaOntWEArV+OZmHje6awbk4fpyIzRe7ggHlhKILYoGYzeejxbMGB9nH15RlUiTF7QnAWxWNSwcET6dSn2MtpC3yegnYl4u3eJ7YkHHYYQtwCQ9vCnt0i/sfuJmbrSFBXnVKMWB2w1Att145gDdlDok,iv:4bkSYvgmG6j/AwVnfGsLjdqtyP/gpWRvOKZCQxP0sMs=,tag:LyjE7dTt0+IDuSlbVLgCMg==,type:str] Hugo: ssh: ENC[AES256_GCM,data:y233CFIH7/n4EGEd2D7MuoprcMV9A8DaiV9JYZ6sr5j+hZnGr8sIAm9/55Bi2cD74sBZcE+tjOz+V2aJ2llKgcdS84ZmXMPh6KQ2QYRYuGdBLeztl8foKdimToblBapebTVO7Rc2mdhg7sZtC/TKSIJnG3R3lRfRdKaxNjaRS51epl7VZKGhLBjZoZqMXOezY7lvNBvF3hFfMh5el5I5Te/yQbbp0a7DkAvA+c1nG9bo9FN0h3VJJTzcuHqvGHI736VosLe8UGirMkX9mBwB8ZV4+2Vp7ZsSHnX5or/MzuYexT0zeLbTNHfj64d2W2/LKDkxNc35Sw7NvxwsVj3k2UHC2jEgus2z0AdMFszEFXh+Eu9wK8yX4ebzUut+OHNPuxvIk+ORxYr3OdVkOhhWHLinu/skNg0u5OdUXo/0p1876+gpcnOVC5UrUflwrtKGQgNk+ovWWjSfcQMh+gI6GYXzksX3YdMEriYZt4Z8lev2od/i7q48cV4W3Lo6TDDttipynxQus6K+J3oBKRirLHylRA5gusqUOVzC,iv:thw9OUnA02qe6aMuLTwy+q/a6isB375/k7JixPEy960=,tag:s95FtFRmPG0Up2oVuQyXsg==,type:str] Nextcloud: @@ -11,6 +13,8 @@ HomeLab: Roxanne: ghost: ssh: ENC[AES256_GCM,data:hkgVUVyCLANeYB4bcCTLB/F6eAbg7J4eN8y+VVzBfkcgnpDmXmghBihreQVT7OIwRrHIH1ok2vuH8vgXb38tuplUD5I8e0Gqy3EqpOGagsO8lss4aIg2lRwZ9WazJknvo4OaGc34jrwcZicesnaxK6g+GX2r2N4caGKMuOZ2i1mLKBwOcEtL6l3REKrGkExd3mYJX1Yqs7sMbGLNpfemDghv646zvxDRwPby49qIPA8OtGR+DBMZTTEviNqamJaFbs7YX+K77J1NHK59u6UfzU6hEjTBEYIjkFDzGATAZAopCsjOHcAA0alejHK4QZZt3e8unVsLICNK08ZCyEzwSXQ/wpUh3ccGcLit2t1LYZT4PqqG8+6ooaQYso67Wral0pdsTsrF0mGNfsZm76MDV9puP5B+IInanHz+2mCHbdmTi6rg9t8Q6mpFqrUbrwxMn2Ns1proBXBCqK/sFjC/bVIyMHUVOh6GYcKaVTv8ecB9ZEjp5dZ4VeStqTMT+xqS7dXBAJzGytLwXT/JaQelIE0w47aBaGy63Pqy,iv:WuAGU+ru8xLp2LXK12x/ueCH0XDxA0zGUt7+HWUdVMo=,tag:UqUMD/jSdTXOkf0kyMqwHA==,type:str] + Vaultwarden: + ssh: ENC[AES256_GCM,data:LJ7nbIdl1GqcsBtOwqsDtjKMfks13X5hsGkEFxDj0eX1EegEBkoWnzstu34RTgt1O1O+3Y/Amg7cDce2ZyZrTwDmLqinpuJD3CI7pRtQygAH8X9wPQYE6U3D1t4dXuMcDftjS+uY0CJFmq01dLv0GytSZSiNBcqNepTY+fO20yylyUbDGjI3Foyi86ipEtLVeFJqESiHDMHn/Cr+ggpLNMXijpnyoCRstPlm3GY3n6EhPwKhwovLB3AXolUeScnInIpwiikVTkYLNLCbrG8KAAr+DmWK3GTZYToH0wV8HpacPQI+4cHf96+EvAVlYMwGyQztPmXO7/9xUgWCNYow+z8BD6ijMuyZHT9aNkoAPt/y72N/PSf5HqW0QVWr3LmyIG+i9Bxbhqc7mRUIy4wZsODbtoO8/RtAly6mXIg0DZLlbo8kDe3TE3m+P5E/KQJOAvM2QdL+NXPcf2J2JYHW4kzITx447Bc3+F/DRs616MhekIoDybLhY3MT0XvYX1d1wAv/Ip98EGzfptXjnJvKPcJgTBlqNyeKuPOe,iv:oEGJUpoj+N30TgLpSWQqGdqYBdWLUWnSuQ+7TdSgmFc=,tag:AUZ2QnPUxLHaxsHbrmSYZQ==,type:str] sops: age: - recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y @@ -31,7 +35,7 @@ sops: NFRtOFIybnFPWm1idFY0WEVqVGxOK1UKiJDByqKv/i/l9dvOplDyzDORU3ulhSwi 6xyEqmyNQpIkiS6TLZZYrBlQMDYqZ2gj1HhdIUssWJCf5Ho8KVDjJQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-10-04T19:40:06Z" - mac: ENC[AES256_GCM,data:V/0QsMR9nuoK7Tgj9UVxcsWM5llHlpMj+K0IgN3ZdqFQptOpasq+xVBBnSpNOarNFXB7t2ZCkzLMWptl/6fNH9Cye2qf8GjplHLGTB9x8t2u2XMwJf4BwCjOgxhiKo5jqFmjnFE2mX2EeZmHXv3G8gPwW+1cVttQQ4s7REo3Hww=,iv:AY0RSvevoSscdjl44iGEvWzcb664285csg1h0Hpixn4=,tag:yebUKx6Ssa6sB9HbNlLmUw==,type:str] + lastmodified: "2025-10-18T15:55:58Z" + mac: ENC[AES256_GCM,data:vdVOTFlDD9jlGJksI5TDxk3stPkLY8lB6LMhV6QGqh9R2vaGuGGh6RZuR6AInq1Rm89innA6M1S2UUM6Jef1EKiPgq41neWMx/i3n7Ixx8FcraO/lgUYKG5yszYdjAlLQvKWqIbvX0bMYNwpF10FO5OyiXWiJrP9Om0Pjvk7dO8=,iv:W9I1nv0fKckNlNjJF0U4HlkyI5VDpvOGiSo0GeOODaY=,tag:RjkSTQYejyf1WO0LilbXYg==,type:str] unencrypted_suffix: _unencrypted version: 3.10.2 diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index a7afac6..fd1a363 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -36,10 +36,12 @@ in { # Physical hosts "HomeLab/Hugo/ssh" = HomeLab; "HomeLab/Roxanne/ghost/ssh" = HomeLab; + "HomeLab/HTPC/ssh" = HomeLab; # Virtual hosts "HomeLab/Gitea/ssh" = HomeLab; "HomeLab/Nextcloud/ssh" = HomeLab; + "HomeLab/Vaultwarden/ssh" = HomeLab; "HomeLab/NixOS/admin/ssh" = HomeLab; }); }; diff --git a/stow/ssh/.ssh/config b/stow/ssh/.ssh/config index 2e45b5d..ea3df8e 100644 --- a/stow/ssh/.ssh/config +++ b/stow/ssh/.ssh/config @@ -45,9 +45,15 @@ Host Roxanne IdentitiesOnly yes IdentityFile /run/secrets/HomeLab/Roxanne/ghost/ssh +Host HTPC + User root + Hostname 192.168.0.88 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/HTPC/ssh + # Virtual hosts Host Gitea - User admin + User gh0st HostName 192.168.0.24 IdentitiesOnly yes IdentityFile /run/secrets/HomeLab/Gitea/ssh @@ -58,6 +64,18 @@ Host Nextcloud IdentitiesOnly yes IdentityFile /run/secrets/HomeLab/Nextcloud/ssh +Host Vaultwarden + User gh0st + Hostname 192.168.0.22 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Vaultwarden/ssh + +Host Binnenpost + User admin + Hostname 192.168.0.89 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/NixOS/admin/ssh + Host Development User admin Hostname 192.168.0.91 -- 2.47.2 From e1b5cb2ea413249c7fe5f1d4d004c84a7b795815 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 26 Oct 2025 16:23:26 +0100 Subject: [PATCH 74/77] [virtualbox] Remove guest --- .../virtualisation/virtualbox/default.nix | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/nixos/modules/virtualisation/virtualbox/default.nix b/nixos/modules/virtualisation/virtualbox/default.nix index 4d5ee2c..3124493 100644 --- a/nixos/modules/virtualisation/virtualbox/default.nix +++ b/nixos/modules/virtualisation/virtualbox/default.nix @@ -6,19 +6,11 @@ in { options.sisyphus.virtualisation.virtualbox.enable = lib.mkEnableOption "VirtualBox"; config = lib.mkIf cfg.enable { - virtualisation.virtualbox = { - host = { - enable = true; - enableExtensionPack = true; - enableHardening = true; - package = pkgs-unstable.virtualbox; - }; - guest = { - enable = true; - clipboard = true; - seamless = true; - vboxsf = false; # Module not found?... - }; + virtualisation.virtualbox.host = { + enable = true; + enableExtensionPack = true; + enableHardening = true; + package = pkgs-unstable.virtualbox; }; -- 2.47.2 From 1f5facd3461abd605f0e58dc8dee36262861028b Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 26 Oct 2025 16:24:21 +0100 Subject: [PATCH 75/77] [firefox] Add Google Scholar alias --- nixos/users/tdpeuter/default.nix | 1 + nixos/users/tdpeuter/firefox.nix | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index e3d6514..353a1d4 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -59,6 +59,7 @@ in { vifm # File manager zathura # PDF viewer zellij # Tmux + screen alternative + zotero zsh zsh-autosuggestions zsh-syntax-highlighting diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index 626eecc..5bb0b46 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -101,6 +101,16 @@ in { icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@no" ]; }; + "Google Scholar" = { + urls = [{ + template = "https://scholar.google.ch/scholar"; + params = [ + { name = "q"; value = "{searchTerms}"; } + ]; + }]; + + definedAliases = [ "@gs" ]; + }; }; }; }; -- 2.47.2 From f655e5223d95f1e29f7ce2e3a4f9fc8af53216c2 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sun, 26 Oct 2025 21:19:00 +0100 Subject: [PATCH 76/77] [hypr] Add hy3 addon --- nixos/modules/desktop/hyprland/default.nix | 2 + stow/hyprland/.config/hypr/hy3.conf | 164 +++++++++++++++++++++ stow/hyprland/.config/hypr/hyprland.conf | 13 +- stow/hyprland/.config/hypr/keybinds.conf | 8 +- 4 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 stow/hyprland/.config/hypr/hy3.conf diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index 3049fbe..6d7d25b 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -27,6 +27,8 @@ in { wl-mirror # Mirror an output wdisplays # Tool to configure displays + hyprlandPlugins.hy3 # i3/sway layout plugin + swaylock glib diff --git a/stow/hyprland/.config/hypr/hy3.conf b/stow/hyprland/.config/hypr/hy3.conf new file mode 100644 index 0000000..7d3e999 --- /dev/null +++ b/stow/hyprland/.config/hypr/hy3.conf @@ -0,0 +1,164 @@ + +# TODO Do not hardcode this path +plugin = /nix/store/afivj8v5kfdsadxs4pa45vh0y65s3ajm-hy3-hl0.49.0/lib/libhy3.so + +general:layout = hy3 + +plugin { + hy3 { + # disable gaps when only one window is onscreen + # 0 - always show gaps + # 1 - hide gaps with a single window onscreen + # 2 - 1 but also show the window border + no_gaps_when_only = 1 # default: 0 + + # policy controlling what happens when a node is removed from a group, + # leaving only a group + # 0 = remove the nested group + # 1 = keep the nested group + # 2 = keep the nested group only if its parent is a tab group + node_collapse_policy = 2 # default: 2 + + # offset from group split direction when only one window is in a group + group_inset = 10 # default: 10 + + # if a tab group will automatically be created for the first window spawned in a workspace + tab_first_window = false + + # tab group settings + tabs { + # height of the tab bar + height = 10 # default: 22 + + # padding between the tab bar and its focused node + padding = 0 # default: 6 + + # the tab bar should animate in/out from the top instead of below the window + from_top = false # default: false + + # radius of tab bar corners + radius = 0 # default: 6 + + # tab bar border width + border_width = 2 # default: 2 + + # render the window title on the bar + render_text = false # default: true + + # center the window title + text_center = true # default: true + + # font to render the window title with + text_font = Sans # default: Sans + + # height of the window title + text_height = 8 # default: 8 + + # left padding of the window title + text_padding = 3 # default: 3 + + # active tab bar segment colors + #col.active = # default: rgba(33ccff40) + #col.active.border = # default: rgba(33ccffee) + #col.active.text = # default: rgba(ffffffff) + + # active tab bar segment colors for bars on an unfocused monitor + #col.active_alt_monitor = # default: rgba(60606040) + #col.active_alt_monitor.border = # default: rgba(808080ee) + #col.active_alt_monitor.text = # default: rgba(ffffffff) + + # focused tab bar segment colors (focused node in unfocused container) + #col.focused = # default: rgba(60606040) + #col.focused.border = # default: rgba(808080ee) + #col.focused.text = # default: rgba(ffffffff) + + # inactive tab bar segment colors + col.inactive = rgba(a6a6a620) # default: rgba(30303020) + col.inactive.border = rgba(a6a6a6aa) # default: rgba(606060aa) + #col.inactive.text = # default: rgba(ffffffff) + + # urgent tab bar segment colors + #col.urgent = # default: rgba(ff223340) + #col.urgent.border = # default: rgba(ff2233ee) + #col.urgent.text = # default: rgba(ffffffff) + + # urgent tab bar segment colors + #col.locked = # default: rgba(90903340) + #col.locked.border = # default: rgba(909033ee) + #col.locked.text = # default: rgba(ffffffff) + + # if tab backgrounds should be blurred + # Blur is only visible when the above colors are not opaque. + blur = true # default: true + + # opacity multiplier for tabs + # Applies to blur as well as the given colors. + opacity = 1.0 # default: 1.0 + } + + # autotiling settings + autotile { + # enable autotile + enable = true # default: false + + # make autotile-created groups ephemeral + ephemeral_groups = true # default: true + + # if a window would be squished smaller than this width, a vertical split will be created + # -1 = never automatically split vertically + # 0 = always automatically split vertically + # = pixel width to split at + trigger_width = -1 # default: 0 + + # if a window would be squished smaller than this height, a horizontal split will be created + # -1 = never automatically split horizontally + # 0 = always automatically split horizontally + # = pixel height to split at + trigger_height = 0 # default: 0 + + # a space or comma separated list of workspace ids where autotile should be enabled + # it's possible to create an exception rule by prefixing the definition with "not:" + # workspaces = 1,2 # autotiling will only be enabled on workspaces 1 and 2 + # workspaces = not:1,2 # autotiling will be enabled on all workspaces except 1 and 2 + workspaces = all # default: all + } + } +} + +# Keybinds + +# Navigation + +# Focus + +# First, unbind default +unbind = $flag, $up +unbind = $flag, $right +unbind = $flag, $down +unbind = $flag, $left + +unbind = $flag, up +unbind = $flag, right +unbind = $flag, down +unbind = $flag, left + +bind = $flag, $up, hy3:movefocus, u +bind = $flag, $right, hy3:movefocus, r +bind = $flag, $down, hy3:movefocus, d +bind = $flag, $left, hy3:movefocus, l + +bind = $flag, up, hy3:movefocus, u +bind = $flag, right, hy3:movefocus, r +bind = $flag, down, hy3:movefocus, d +bind = $flag, left, hy3:movefocus, l + +# Layout +bind = $flag, z, hy3:changegroup, opposite +bind = $flag, x, hy3:changegroup, toggletab +bind = $flag, c, hy3:changegroup, h +bind = $flag, v, hy3:changegroup, v + +bind = $flag, p, hy3:changefocus, raise +bind = $flag+Shift, p, hy3:changefocus, lower +bind = $flag, space, hy3:togglefocuslayer + diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf index cdcf89e..84fb8cb 100644 --- a/stow/hyprland/.config/hypr/hyprland.conf +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -201,7 +201,6 @@ xwayland { opengl { nvidia_anti_flicker = false - force_introspection = 2 } render { @@ -250,7 +249,7 @@ exec-once = wlsunset -t 2500 -l 50.51 -L 4.21 exec-once = nextcloud --background # Turn volume off at boot -exec-once = pactl set-sink-mute @DEFAULT_SINK@ 1 +exec-once = wpctl set-mute @DEFAULT_SINK@ 1 # STYLING exec-once = swaybg -i "${HOME}/.local/state/sisyphus/bg" --mode=fill @@ -268,11 +267,13 @@ $term = foot $menu = j4-dmenu-desktop --dmenu="rofi -dmenu -i" --no-generic --usage-log="/home/tdpeuter/.local/state/dmenu.log" --term=$term $lock = swaylock --daemonize -source = /home/tdpeuter/.config/hypr/input-output.conf -source = /home/tdpeuter/.config/hypr/keybinds.conf -source = /home/tdpeuter/.config/hypr/modes.conf - # https://wiki.hyprland.org/Nvidia/#environment-variables env = __GLX_VENDOR_LIBRARY_NAME,nvidia env = LIBVA_DRIVER_NAME,nvidia env = NVD_BACKEND,direct + +source = /home/tdpeuter/.config/hypr/input-output.conf +source = /home/tdpeuter/.config/hypr/keybinds.conf +source = /home/tdpeuter/.config/hypr/modes.conf +source = /home/tdpeuter/.config/hypr/hy3.conf # Sway tiling plugin + diff --git a/stow/hyprland/.config/hypr/keybinds.conf b/stow/hyprland/.config/hypr/keybinds.conf index 26385f3..1a4f1e1 100644 --- a/stow/hyprland/.config/hypr/keybinds.conf +++ b/stow/hyprland/.config/hypr/keybinds.conf @@ -45,11 +45,6 @@ bind = $flag, Prior, togglespecialworkspace, special:scratchpad # bind = $flag, KP_Next, togglespecialworkspace, magic # Layouts -# bind = $flag, z, layout toggle split -# bind = $flag, x, layout tabbed -# bind = $flag, c, split horizontal -# bind = $flag, v, split vertical - bind = $flag, f, togglefloating bind = $flag+Shift, f, settiled @@ -171,7 +166,8 @@ bind = CTRL&ALT, T, exec, $term bind = Alt, Space, exec, $menu bind = Alt, Tab, focuscurrentorlast -bind = $flag, e, exec, $term -e vifm +bind = $flag, e, exec, $term -e vifm +bind = Ctrl+Shift, Escape, exec, $term -e zenith bind = Ctrl+Shift, a, exec, notify-send "hole!" && hyprctl setcursor _ 87 && sleep 5 && hyprctl setcursor _ 24 -- 2.47.2 From 01efdcf8e7e4c95b5df6c3bf16840d70f2e00f5d Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Wed, 29 Oct 2025 19:32:21 +0100 Subject: [PATCH 77/77] [hypr] fix: Turn volume off at boot --- stow/hyprland/.config/hypr/hyprland.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf index 84fb8cb..6dc3b6b 100644 --- a/stow/hyprland/.config/hypr/hyprland.conf +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -249,7 +249,7 @@ exec-once = wlsunset -t 2500 -l 50.51 -L 4.21 exec-once = nextcloud --background # Turn volume off at boot -exec-once = wpctl set-mute @DEFAULT_SINK@ 1 +exec-once = bash -c 'for i in $(seq 1 10); do pactl set-sink-mute @DEFAULT_SINK@ 1 && break; sleep 1; done' # STYLING exec-once = swaybg -i "${HOME}/.local/state/sisyphus/bg" --mode=fill -- 2.47.2