2024-04-07 22:16:33 -04:00
|
|
|
|
{
|
|
|
|
|
config,
|
2024-07-18 21:05:35 -04:00
|
|
|
|
lib,
|
|
|
|
|
pkgs,
|
2024-04-07 22:16:33 -04:00
|
|
|
|
...
|
2024-08-07 23:09:31 -04:00
|
|
|
|
}: let
|
|
|
|
|
cfg = config.ar.home;
|
|
|
|
|
in {
|
|
|
|
|
config = lib.mkIf cfg.services.waybar.enable {
|
2024-04-24 17:39:19 -04:00
|
|
|
|
programs.waybar = {
|
|
|
|
|
enable = true;
|
2024-08-02 17:58:08 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
settings = {
|
|
|
|
|
mainBar = {
|
2024-04-26 21:36:29 -04:00
|
|
|
|
height = 32;
|
2024-04-24 17:39:19 -04:00
|
|
|
|
layer = "top";
|
|
|
|
|
output = ["*"];
|
|
|
|
|
position = "top";
|
2024-06-11 21:32:46 -04:00
|
|
|
|
modules-left =
|
2024-08-07 23:09:31 -04:00
|
|
|
|
lib.optionals (cfg.desktop.hyprland.enable)
|
2024-06-11 21:32:46 -04:00
|
|
|
|
["hyprland/workspaces" "hyprland/submap"]
|
2024-08-07 23:09:31 -04:00
|
|
|
|
++ lib.optionals (cfg.desktop.sway.enable)
|
2024-06-11 21:32:46 -04:00
|
|
|
|
["sway/workspaces" "sway/scratchpad" "sway/mode"]
|
2024-08-07 23:09:31 -04:00
|
|
|
|
++ lib.optionals (cfg.desktop.hyprland.tabletMode.enable)
|
2024-08-10 00:03:01 -04:00
|
|
|
|
["group/tablet"];
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
modules-center = ["clock"];
|
|
|
|
|
modules-right = [
|
|
|
|
|
"tray"
|
2024-04-25 22:42:26 -04:00
|
|
|
|
"group/hardware"
|
2024-07-30 19:36:16 -04:00
|
|
|
|
"group/session"
|
2024-04-24 17:39:19 -04:00
|
|
|
|
];
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
"hyprland/workspaces" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
all-outputs = true;
|
|
|
|
|
format = "{icon} {name}";
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format-icons = {
|
|
|
|
|
default = "";
|
|
|
|
|
active = "";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
sort-by = "id";
|
2024-04-09 20:30:09 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
"hyprland/submap" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
on-click = ''${lib.getExe'
|
2024-06-11 21:32:46 -04:00
|
|
|
|
config.wayland.windowManager.hyprland.package "hyprctl"} dispatch submap reset'';
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
"sway/workspaces" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
all-outputs = true;
|
|
|
|
|
format = "{icon} {name}";
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format-icons = {
|
|
|
|
|
default = "";
|
|
|
|
|
focused = "";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
sort-by = "id";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
"sway/mode" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
on-click = ''${lib.getExe' config.wayland.windowManager.sway.package "swaymsg"} mode default'';
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-05-09 13:59:53 -04:00
|
|
|
|
"sway/scratchpad" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format = "{icon} {count}";
|
|
|
|
|
format-icons = ["" ""];
|
|
|
|
|
show-empty = false;
|
|
|
|
|
tooltip = true;
|
|
|
|
|
tooltip-format = "{app}: {title}";
|
2024-05-09 13:59:53 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-05-26 21:24:00 -04:00
|
|
|
|
"custom/hyprland-close" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
on-click = ''${lib.getExe'
|
2024-06-11 21:32:46 -04:00
|
|
|
|
config.wayland.windowManager.hyprland.package "hyprctl"} dispatch killactive'';
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format = "";
|
|
|
|
|
tooltip-format = "Close the focused window.";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
clock = {
|
|
|
|
|
format = "{:%I:%M%p}";
|
|
|
|
|
interval = 60;
|
|
|
|
|
tooltip-format = "{:%Y-%m-%d | %H:%M}";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
battery = let
|
2024-08-03 17:13:47 -04:00
|
|
|
|
checkBattery = pkgs.writeShellScript "check-battery" ''
|
2024-08-07 23:34:26 -04:00
|
|
|
|
if [ -d /sys/class/power_supply/BAT0 ]; then
|
|
|
|
|
BAT=/sys/class/power_supply/BAT0
|
|
|
|
|
elif [ -d /sys/class/power_supply/BAT1 ]; then
|
|
|
|
|
BAT=/sys/class/power_supply/BAT1
|
|
|
|
|
else
|
|
|
|
|
echo "No battery found."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2024-08-03 17:13:47 -04:00
|
|
|
|
CRIT=''${1:-10}
|
|
|
|
|
NOTIFY=${lib.getExe' pkgs.libnotify "notify-send"}
|
|
|
|
|
|
2024-08-07 23:34:26 -04:00
|
|
|
|
stat=$(${lib.getExe' pkgs.coreutils "cat"} $BAT/status)
|
|
|
|
|
perc=$(${lib.getExe' pkgs.coreutils "cat"} $BAT/capacity)
|
2024-08-03 17:13:47 -04:00
|
|
|
|
|
|
|
|
|
if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then
|
2024-08-03 18:16:03 -04:00
|
|
|
|
$NOTIFY --urgency=critical --icon=dialog-error "Battery Critical" "Current charge: $perc%".
|
2024-08-03 17:13:47 -04:00
|
|
|
|
fi
|
|
|
|
|
'';
|
|
|
|
|
in {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format = "{icon}";
|
|
|
|
|
format-icons = ["" "" "" "" "" "" "" "" "" ""];
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
on-update = "${checkBattery}";
|
|
|
|
|
tooltip-format = ''
|
2024-04-24 17:39:19 -04:00
|
|
|
|
{capacity}%: {timeTo}.
|
2024-04-26 08:17:09 -04:00
|
|
|
|
Draw: {power} watts.'';
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
states = {critical = 20;};
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
idle_inhibitor = {
|
|
|
|
|
format = "{icon}";
|
2024-07-29 21:59:53 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format-icons = {
|
|
|
|
|
activated = "";
|
|
|
|
|
deactivated = "";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-29 21:59:53 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
timeout = 45;
|
2024-07-29 21:59:53 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tooltip-format-activated = ''
|
2024-07-30 19:36:16 -04:00
|
|
|
|
Presentation mode enabled.
|
2024-07-29 21:59:53 -04:00
|
|
|
|
System will not sleep.'';
|
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tooltip-format-deactivated = ''
|
2024-07-30 19:36:16 -04:00
|
|
|
|
Presentation mode disabled.
|
2024-07-29 21:59:53 -04:00
|
|
|
|
System will sleep normally.'';
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
bluetooth = {
|
|
|
|
|
format = "";
|
|
|
|
|
format-connected = " {num_connections}";
|
|
|
|
|
format-disabled = ""; # an empty format will hide the module
|
|
|
|
|
on-clic = lib.getExe' pkgs.blueberry "blueberry";
|
|
|
|
|
tooltip-format = "{controller_alias} {controller_address}";
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tooltip-format-connected = ''
|
2024-04-24 17:39:19 -04:00
|
|
|
|
{controller_alias} {controller_address}
|
2024-03-28 19:52:15 -04:00
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
{device_enumerate}'';
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tooltip-format-enumerate-connected = "{device_alias} {device_address}";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
pulseaudio = {
|
|
|
|
|
format = "{icon}";
|
|
|
|
|
format-bluetooth = "{volume}% {icon}";
|
|
|
|
|
format-muted = "";
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format-icons = {
|
|
|
|
|
headphones = "";
|
|
|
|
|
handsfree = "";
|
|
|
|
|
headset = "";
|
|
|
|
|
default = ["" "" ""];
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
ignored-sinks = ["Easy Effects Sink"];
|
|
|
|
|
on-click = "${lib.getExe pkgs.pavucontrol} -t 3";
|
|
|
|
|
scroll-step = 5;
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
network = {
|
|
|
|
|
format-disabled = "";
|
|
|
|
|
format-disconnected = "";
|
|
|
|
|
format-ethernet = "";
|
|
|
|
|
format-icons = ["" "" "" ""];
|
|
|
|
|
format-wifi = "{icon}";
|
|
|
|
|
on-click = "${lib.getExe pkgs.networkmanager_dmenu} -i";
|
|
|
|
|
tooltip-format = "{ifname} via {gwaddr} ";
|
|
|
|
|
tooltip-format-disconnected = "Disconnected";
|
|
|
|
|
tooltip-format-ethernet = "{ifname} ";
|
|
|
|
|
tooltip-format-wifi = "{essid} ({signalStrength}%) {icon}";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tray = {spacing = 15;};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-07-30 19:36:16 -04:00
|
|
|
|
"custom/dnd" = let
|
|
|
|
|
mako-dnd = pkgs.writeShellScript "mako-dnd" ''
|
|
|
|
|
show() {
|
|
|
|
|
MAKO_MODE=$(${lib.getExe' pkgs.mako "makoctl"} mode)
|
2024-08-07 18:20:37 -04:00
|
|
|
|
if ${lib.getExe' pkgs.coreutils "echo"} "$MAKO_MODE" | ${lib.getExe' pkgs.gnugrep "grep"} -q "do-not-disturb"; then
|
|
|
|
|
${lib.getExe' pkgs.coreutils "printf"} '{"text": "", "class": "on", "tooltip": "Notifications snoozed."}\n'
|
2024-07-30 19:36:16 -04:00
|
|
|
|
else
|
2024-08-07 18:20:37 -04:00
|
|
|
|
${lib.getExe' pkgs.coreutils "printf"} '{"text": "", "class": "off","tooltip": "Notifications enabled."}\n'
|
2024-07-30 19:36:16 -04:00
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
toggle() {
|
|
|
|
|
${lib.getExe' pkgs.mako "makoctl"} mode -t do-not-disturb
|
|
|
|
|
${lib.getExe' pkgs.procps "pkill"} -SIGRTMIN+2 .waybar-wrapped
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[ $# -gt 0 ] && toggle || show
|
|
|
|
|
'';
|
|
|
|
|
in {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
exec = "${mako-dnd}";
|
|
|
|
|
interval = "once";
|
|
|
|
|
on-click = "${mako-dnd} toggle";
|
|
|
|
|
return-type = "json";
|
|
|
|
|
signal = 2;
|
2024-07-30 19:36:16 -04:00
|
|
|
|
};
|
|
|
|
|
|
2024-04-24 17:39:19 -04:00
|
|
|
|
"custom/logout" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format = "";
|
|
|
|
|
on-click = ''${lib.getExe config.programs.rofi.package} -i -show power-menu -modi "power-menu:${lib.getExe pkgs.rofi-power-menu} --choices=logout/lockscreen/suspend/shutdown/reboot"'';
|
|
|
|
|
tooltip-format = "Manage your session.";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-05-17 23:16:43 -04:00
|
|
|
|
"custom/menu" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format = "";
|
|
|
|
|
on-click = "${lib.getExe pkgs.nwg-drawer} -mt 5";
|
|
|
|
|
tooltip-format = "Touch-friendly application menu.";
|
2024-05-17 23:16:43 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
power-profiles-daemon = {
|
|
|
|
|
format = "{icon}";
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
format-icons = {
|
|
|
|
|
balanced = "";
|
|
|
|
|
default = "";
|
|
|
|
|
performance = "";
|
|
|
|
|
power-saver = "";
|
2024-04-24 17:39:19 -04:00
|
|
|
|
};
|
2024-07-30 19:36:16 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tooltip-format = ''
|
2024-07-30 19:36:16 -04:00
|
|
|
|
Profile: {profile}
|
|
|
|
|
Driver: {driver}'';
|
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
tooltip = true;
|
2024-03-28 19:52:15 -04:00
|
|
|
|
};
|
2024-07-10 23:43:51 -04:00
|
|
|
|
|
2024-08-10 00:03:01 -04:00
|
|
|
|
"group/tablet" = {
|
|
|
|
|
orientation = "horizontal";
|
|
|
|
|
modules = ["custom/menu" "custom/hyprland-close"];
|
|
|
|
|
};
|
|
|
|
|
|
2024-04-25 22:42:26 -04:00
|
|
|
|
"group/hardware" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
orientation = "horizontal";
|
2024-07-30 19:36:16 -04:00
|
|
|
|
modules = ["pulseaudio" "bluetooth" "network" "power-profiles-daemon" "battery"];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
"group/session" = {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
orientation = "horizontal";
|
2024-07-30 19:36:16 -04:00
|
|
|
|
modules = ["custom/dnd" "idle_inhibitor" "custom/logout"];
|
2024-04-25 22:42:26 -04:00
|
|
|
|
};
|
2024-03-28 19:52:15 -04:00
|
|
|
|
};
|
|
|
|
|
};
|
2024-08-02 17:58:08 -04:00
|
|
|
|
|
2024-08-08 16:37:46 -04:00
|
|
|
|
style = ''
|
|
|
|
|
* {
|
|
|
|
|
border-radius: 0px;
|
2024-08-10 00:03:01 -04:00
|
|
|
|
border: none;
|
2024-08-08 16:37:46 -04:00
|
|
|
|
font-family: "${cfg.theme.monospaceFont.name}";
|
|
|
|
|
font-size: ${toString (cfg.theme.monospaceFont.size + 3)}px;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
window#waybar {
|
2024-08-10 00:03:01 -04:00
|
|
|
|
background: rgba (0, 0, 0, 0.0);
|
2024-08-08 16:37:46 -04:00
|
|
|
|
color: ${cfg.theme.colors.text};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#workspaces button {
|
|
|
|
|
color: ${cfg.theme.colors.text};
|
2024-08-10 00:03:01 -04:00
|
|
|
|
margin: 0px 0px;
|
|
|
|
|
padding: 0px 5px;
|
2024-08-08 16:37:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#workspaces button.active,
|
|
|
|
|
#workspaces button.focused {
|
2024-08-10 00:03:01 -04:00
|
|
|
|
color: ${cfg.theme.colors.secondary};
|
2024-08-08 16:37:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#clock,
|
|
|
|
|
#battery,
|
|
|
|
|
#bluetooth,
|
|
|
|
|
#network,
|
|
|
|
|
#power-profiles-daemon,
|
|
|
|
|
#pulseaudio,
|
|
|
|
|
#wireplumber,
|
|
|
|
|
#idle_inhibitor,
|
|
|
|
|
#custom-dnd,
|
|
|
|
|
#custom-logout,
|
|
|
|
|
#custom-menu,
|
2024-08-10 00:03:01 -04:00
|
|
|
|
#custom-hyprland-close,
|
2024-08-08 16:37:46 -04:00
|
|
|
|
#tray {
|
|
|
|
|
margin: 0px 5px;
|
2024-08-10 00:03:01 -04:00
|
|
|
|
padding: 0px 7.5px;
|
2024-08-08 16:37:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#battery {
|
|
|
|
|
color: ${cfg.theme.colors.text};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#battery.charging {
|
|
|
|
|
color: ${cfg.theme.colors.primary};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#battery.critical:not(.charging),
|
|
|
|
|
#custom-dnd.on {
|
|
|
|
|
color: #e78284;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#clock,
|
2024-08-10 00:03:01 -04:00
|
|
|
|
#tablet,
|
2024-08-08 16:37:46 -04:00
|
|
|
|
#hardware,
|
|
|
|
|
#mode,
|
|
|
|
|
#scratchpad,
|
|
|
|
|
#session,
|
|
|
|
|
#submap,
|
|
|
|
|
#tray,
|
|
|
|
|
#workspaces {
|
2024-08-10 00:03:01 -04:00
|
|
|
|
background-color: alpha(${cfg.theme.colors.background}, 1.0);
|
2024-08-09 18:16:46 -04:00
|
|
|
|
border-radius: ${toString cfg.theme.borderRadius}px;
|
2024-08-10 00:03:01 -04:00
|
|
|
|
border: 4px solid alpha(${cfg.theme.colors.background}, 0.8);
|
|
|
|
|
margin: 5px 6px 0px 6px;
|
2024-08-08 16:37:46 -04:00
|
|
|
|
padding: 0px 10px 0px 10px;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-10 00:03:01 -04:00
|
|
|
|
#clock {
|
2024-08-08 16:37:46 -04:00
|
|
|
|
padding: 0px 20px 0px 20px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#submap,
|
|
|
|
|
#mode {
|
2024-08-09 18:16:46 -04:00
|
|
|
|
background: rgba(255, 123, 99, 0.8);
|
2024-08-10 00:03:01 -04:00
|
|
|
|
color: ${cfg.theme.colors.text};
|
2024-08-08 16:37:46 -04:00
|
|
|
|
}
|
|
|
|
|
'';
|
|
|
|
|
|
2024-08-02 17:58:08 -04:00
|
|
|
|
systemd.enable = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
systemd.user.services.waybar = {
|
|
|
|
|
Install.WantedBy = lib.mkForce ["hyprland-session.target" "sway-session.target"];
|
|
|
|
|
Service = {
|
|
|
|
|
Restart = lib.mkForce "on-failure";
|
|
|
|
|
RestartSec = 5;
|
|
|
|
|
};
|
2024-03-28 19:52:15 -04:00
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|