From 3dbc7f80d2fd62ef8878842ac4a271c9b99fecc8 Mon Sep 17 00:00:00 2001
From: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Date: Wed, 9 Apr 2025 09:57:56 +0200
Subject: [PATCH] Move Scripts to Tools / Add-Ons
---
frontend/public/json/add-lxc-iptag.json | 86 +++++-----
frontend/public/json/add-netbird-lxc.json | 86 +++++-----
frontend/public/json/add-tailscale-lxc.json | 86 +++++-----
frontend/public/json/all-templates.json | 74 +++++----
frontend/public/json/clean-lxcs.json | 74 +++++----
frontend/public/json/clean-orphaned-lvm.json | 72 +++++----
frontend/public/json/code-server.json | 74 +++++----
frontend/public/json/cron-update-lxcs.json | 79 +++++-----
frontend/public/json/crowdsec.json | 74 +++++----
frontend/public/json/filebrowser.json | 92 ++++++-----
frontend/public/json/fstrim.json | 78 +++++----
frontend/public/json/glances.json | 80 +++++-----
frontend/public/json/host-backup.json | 80 +++++-----
frontend/public/json/kernel-clean.json | 72 +++++----
frontend/public/json/kernel-pin.json | 72 +++++----
frontend/public/json/lxc-delete.json | 72 +++++----
frontend/public/json/microcode.json | 78 +++++----
frontend/public/json/monitor-all.json | 126 ++++++++-------
frontend/public/json/netdata.json | 74 +++++----
frontend/public/json/olivetin.json | 74 +++++----
frontend/public/json/pbs-microcode.json | 78 +++++----
frontend/public/json/post-pbs-install.json | 88 +++++------
frontend/public/json/post-pmg-install.json | 88 +++++------
frontend/public/json/post-pve-install.json | 80 +++++-----
frontend/public/json/scaling-governor.json | 72 +++++----
frontend/public/json/update-lxcs.json | 74 +++++----
frontend/public/json/update-repo.json | 74 +++++----
frontend/public/json/webmin.json | 74 +++++----
frontend/src/app/category-view/page.tsx | 45 ++++--
.../src/app/json-editor/_schemas/schemas.ts | 4 +-
frontend/src/app/json-editor/page.tsx | 148 +++++-------------
.../scripts/_components/ScriptInfoBlocks.tsx | 57 ++-----
.../app/scripts/_components/ScriptItem.tsx | 8 +-
.../_components/ScriptItems/Buttons.tsx | 12 +-
.../ScriptItems/InstallCommand.tsx | 138 ++++++++--------
frontend/src/components/CommandMenu.tsx | 26 ++-
frontend/src/lib/types.ts | 4 +-
install/daemonsync-install.sh | 2 +-
misc/daemonsync_2.2.0.0059_amd64.deb | Bin 3008644 -> 0 bytes
{misc => tools/addon}/add-netbird-lxc.sh | 0
{misc => tools/addon}/add-tailscale-lxc.sh | 0
{misc => tools/addon}/all-templates.sh | 0
{misc => tools/addon}/code-server.sh | 0
{misc => tools/addon}/crowdsec.sh | 0
{misc => tools/addon}/filebrowser.sh | 0
{misc => tools/addon}/glances.sh | 0
{misc => tools/addon}/netdata.sh | 0
{misc => tools/addon}/olivetin.sh | 0
{misc => tools/addon}/pyenv.sh | 0
{misc => tools/addon}/webmin.sh | 0
{misc => tools/pve}/add-lxc-iptag.sh | 0
{misc => tools/pve}/clean-lxcs.sh | 0
{misc => tools/pve}/clean-orphaned-lvm.sh | 0
{misc => tools/pve}/clean.sh | 0
.../pve}/container-restore-from-backup.sh | 0
.../pve}/core-restore-from-backup.sh | 0
{misc => tools/pve}/cron-update-lxcs.sh | 0
{misc => tools/pve}/frigate-support.sh | 0
{misc => tools/pve}/fstrim.sh | 0
{misc => tools/pve}/host-backup.sh | 0
{misc => tools/pve}/hw-acceleration.sh | 0
{misc => tools/pve}/kernel-clean.sh | 0
{misc => tools/pve}/kernel-pin.sh | 0
{misc => tools/pve}/lxc-delete.sh | 0
{misc => tools/pve}/microcode.sh | 0
{misc => tools/pve}/monitor-all.sh | 0
{misc => tools/pve}/pbs3-upgrade.sh | 0
{misc => tools/pve}/pbs_microcode.sh | 0
{misc => tools/pve}/post-pbs-install.sh | 0
{misc => tools/pve}/post-pmg-install.sh | 0
{misc => tools/pve}/post-pve-install.sh | 0
{misc => tools/pve}/pve8-upgrade.sh | 0
{misc => tools/pve}/scaling-governor.sh | 0
{misc => tools/pve}/update-lxcs-cron.sh | 0
{misc => tools/pve}/update-lxcs.sh | 0
{misc => tools/pve}/update-repo.sh | 0
{misc => tools/pve}/usb-passthrough.sh | 0
77 files changed, 1262 insertions(+), 1413 deletions(-)
delete mode 100644 misc/daemonsync_2.2.0.0059_amd64.deb
rename {misc => tools/addon}/add-netbird-lxc.sh (100%)
rename {misc => tools/addon}/add-tailscale-lxc.sh (100%)
rename {misc => tools/addon}/all-templates.sh (100%)
rename {misc => tools/addon}/code-server.sh (100%)
rename {misc => tools/addon}/crowdsec.sh (100%)
rename {misc => tools/addon}/filebrowser.sh (100%)
rename {misc => tools/addon}/glances.sh (100%)
rename {misc => tools/addon}/netdata.sh (100%)
rename {misc => tools/addon}/olivetin.sh (100%)
rename {misc => tools/addon}/pyenv.sh (100%)
rename {misc => tools/addon}/webmin.sh (100%)
rename {misc => tools/pve}/add-lxc-iptag.sh (100%)
rename {misc => tools/pve}/clean-lxcs.sh (100%)
rename {misc => tools/pve}/clean-orphaned-lvm.sh (100%)
rename {misc => tools/pve}/clean.sh (100%)
rename {misc => tools/pve}/container-restore-from-backup.sh (100%)
rename {misc => tools/pve}/core-restore-from-backup.sh (100%)
rename {misc => tools/pve}/cron-update-lxcs.sh (100%)
rename {misc => tools/pve}/frigate-support.sh (100%)
rename {misc => tools/pve}/fstrim.sh (100%)
rename {misc => tools/pve}/host-backup.sh (100%)
rename {misc => tools/pve}/hw-acceleration.sh (100%)
rename {misc => tools/pve}/kernel-clean.sh (100%)
rename {misc => tools/pve}/kernel-pin.sh (100%)
rename {misc => tools/pve}/lxc-delete.sh (100%)
rename {misc => tools/pve}/microcode.sh (100%)
rename {misc => tools/pve}/monitor-all.sh (100%)
rename {misc => tools/pve}/pbs3-upgrade.sh (100%)
rename {misc => tools/pve}/pbs_microcode.sh (100%)
rename {misc => tools/pve}/post-pbs-install.sh (100%)
rename {misc => tools/pve}/post-pmg-install.sh (100%)
rename {misc => tools/pve}/post-pve-install.sh (100%)
rename {misc => tools/pve}/pve8-upgrade.sh (100%)
rename {misc => tools/pve}/scaling-governor.sh (100%)
rename {misc => tools/pve}/update-lxcs-cron.sh (100%)
rename {misc => tools/pve}/update-lxcs.sh (100%)
rename {misc => tools/pve}/update-repo.sh (100%)
rename {misc => tools/pve}/usb-passthrough.sh (100%)
diff --git a/frontend/public/json/add-lxc-iptag.json b/frontend/public/json/add-lxc-iptag.json
index ff19bcbfb..379b6e046 100644
--- a/frontend/public/json/add-lxc-iptag.json
+++ b/frontend/public/json/add-lxc-iptag.json
@@ -1,47 +1,45 @@
{
- "name": "Proxmox VE LXC IP-Tag",
- "slug": "add-lxc-iptag",
- "categories": [
- 1
- ],
- "date_created": "2024-12-16",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/add-lxc-iptag.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE LXC IP-Tag",
+ "slug": "add-lxc-iptag",
+ "categories": [1],
+ "date_created": "2024-12-16",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/add-lxc-iptag.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "Configuration: `nano /opt/lxc-iptag/iptag.conf`. iptag.service must be restarted after change.",
- "type": "info"
- },
- {
- "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
- "type": "warning"
- }
- ]
+ {
+ "text": "Configuration: `nano /opt/lxc-iptag/iptag.conf`. iptag.service must be restarted after change.",
+ "type": "info"
+ },
+ {
+ "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
+ "type": "warning"
+ }
+ ]
}
diff --git a/frontend/public/json/add-netbird-lxc.json b/frontend/public/json/add-netbird-lxc.json
index b924bc66e..6ae68f4bc 100644
--- a/frontend/public/json/add-netbird-lxc.json
+++ b/frontend/public/json/add-netbird-lxc.json
@@ -1,47 +1,45 @@
{
- "name": "NetBird",
- "slug": "add-netbird-lxc",
- "categories": [
- 1
- ],
- "date_created": "2024-05-19",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": "https://docs.netbird.io/",
- "website": "https://netbird.io/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/netbird.svg",
- "description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/add-netbird-lxc.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "NetBird",
+ "slug": "add-netbird-lxc",
+ "categories": [1],
+ "date_created": "2024-05-19",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": "https://docs.netbird.io/",
+ "website": "https://netbird.io/",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/netbird.svg",
+ "description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/add-netbird-lxc.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "After the script finishes, reboot the LXC then run `netbird up` in the LXC console",
+ "type": "info"
},
- "notes": [
- {
- "text": "After the script finishes, reboot the LXC then run `netbird up` in the LXC console",
- "type": "info"
- },
- {
- "text": "Execute within the Proxmox main shell",
- "type": "info"
- },
- {
- "text": "The script only works in Debian/Ubuntu, not in Alpine!",
- "type": "warning"
- }
- ]
+ {
+ "text": "Execute within the Proxmox main shell",
+ "type": "info"
+ },
+ {
+ "text": "The script only works in Debian/Ubuntu, not in Alpine!",
+ "type": "warning"
+ }
+ ]
}
diff --git a/frontend/public/json/add-tailscale-lxc.json b/frontend/public/json/add-tailscale-lxc.json
index 82d9b5579..1b089e29f 100644
--- a/frontend/public/json/add-tailscale-lxc.json
+++ b/frontend/public/json/add-tailscale-lxc.json
@@ -1,47 +1,45 @@
{
- "name": "Tailscale",
- "slug": "add-tailscale-lxc",
- "categories": [
- 1
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": "https://tailscale.com/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tailscale.svg",
- "description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/add-tailscale-lxc.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Tailscale",
+ "slug": "add-tailscale-lxc",
+ "categories": [1],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": "https://tailscale.com/",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tailscale.svg",
+ "description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/add-tailscale-lxc.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Only supported on Debian 12 LXCs",
+ "type": "warning"
},
- "notes": [
- {
- "text": "Only supported on Debian 12 LXCs",
- "type": "warning"
- },
- {
- "text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
- "type": "info"
- },
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
+ {
+ "text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
+ "type": "info"
+ },
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/all-templates.json b/frontend/public/json/all-templates.json
index da695ce89..6d6a7a1d5 100644
--- a/frontend/public/json/all-templates.json
+++ b/frontend/public/json/all-templates.json
@@ -1,39 +1,37 @@
{
- "name": "All Templates",
- "slug": "all-templates",
- "categories": [
- 1
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/proxmox.svg",
- "description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/all-templates.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Resource and network settings are adjustable post LXC creation.",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "All Templates",
+ "slug": "all-templates",
+ "categories": [1],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/proxmox.svg",
+ "description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/all-templates.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Resource and network settings are adjustable post LXC creation.",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/clean-lxcs.json b/frontend/public/json/clean-lxcs.json
index 8c5c09c23..018fbd134 100644
--- a/frontend/public/json/clean-lxcs.json
+++ b/frontend/public/json/clean-lxcs.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox VE LXC Cleaner",
- "slug": "clean-lxcs",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
- "description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/clean-lxcs.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "Proxmox VE LXC Cleaner",
+ "slug": "clean-lxcs",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
+ "description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/clean-lxcs.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/clean-orphaned-lvm.json b/frontend/public/json/clean-orphaned-lvm.json
index 668fff33e..e009987dc 100644
--- a/frontend/public/json/clean-orphaned-lvm.json
+++ b/frontend/public/json/clean-orphaned-lvm.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox Clean Orphaned LVM",
- "slug": "clean-orphaned-lvm",
- "categories": [
- 1
- ],
- "date_created": "2025-01-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/clean-orphaned-lvm.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
+ "name": "Proxmox Clean Orphaned LVM",
+ "slug": "clean-orphaned-lvm",
+ "categories": [1],
+ "date_created": "2025-01-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/clean-orphaned-lvm.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/code-server.json b/frontend/public/json/code-server.json
index fefdb2529..35931243f 100644
--- a/frontend/public/json/code-server.json
+++ b/frontend/public/json/code-server.json
@@ -1,41 +1,37 @@
{
- "name": "VS Code Server",
- "slug": "code-server",
- "categories": [
- 1,
- 20,
- 11
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": 8680,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/visual-studio-code.svg",
- "description": "VS Code Server is a service you can run on a remote development machine, like your desktop PC or a virtual machine (VM). It allows you to securely connect to that remote machine from anywhere through a vscode.dev URL, without the requirement of SSH.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/code-server.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within an existing LXC Console",
- "type": "warning"
- }
- ]
+ "name": "VS Code Server",
+ "slug": "code-server",
+ "categories": [1, 20, 11],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": 8680,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/visual-studio-code.svg",
+ "description": "VS Code Server is a service you can run on a remote development machine, like your desktop PC or a virtual machine (VM). It allows you to securely connect to that remote machine from anywhere through a vscode.dev URL, without the requirement of SSH.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/code-server.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within an existing LXC Console",
+ "type": "warning"
+ }
+ ]
}
diff --git a/frontend/public/json/cron-update-lxcs.json b/frontend/public/json/cron-update-lxcs.json
index e02f37ea6..3cfc0bfc2 100644
--- a/frontend/public/json/cron-update-lxcs.json
+++ b/frontend/public/json/cron-update-lxcs.json
@@ -1,44 +1,41 @@
{
- "name": "Proxmox VE Cron LXC Updater",
- "slug": "cron-update-lxcs",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/lxc.svg",
- "description": "This script will add/remove a crontab schedule that updates all LXCs every Sunday at midnight.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/cron-update-lxcs.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE Cron LXC Updater",
+ "slug": "cron-update-lxcs",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/lxc.svg",
+ "description": "This script will add/remove a crontab schedule that updates all LXCs every Sunday at midnight.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/cron-update-lxcs.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
- "type": "info"
- }
-
- ]
+ {
+ "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/crowdsec.json b/frontend/public/json/crowdsec.json
index 120014667..3f9d80972 100644
--- a/frontend/public/json/crowdsec.json
+++ b/frontend/public/json/crowdsec.json
@@ -1,39 +1,37 @@
{
- "name": "CrowdSec",
- "slug": "crowdsec",
- "categories": [
- 6
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": "https://crowdsec.net/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/crowdsec.svg",
- "description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/crowdsec.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within an existing LXC Console. Debian only!",
- "type": "warning"
- }
- ]
-}
\ No newline at end of file
+ "name": "CrowdSec",
+ "slug": "crowdsec",
+ "categories": [6],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": "https://crowdsec.net/",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/crowdsec.svg",
+ "description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/crowdsec.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within an existing LXC Console. Debian only!",
+ "type": "warning"
+ }
+ ]
+}
diff --git a/frontend/public/json/filebrowser.json b/frontend/public/json/filebrowser.json
index 5d16785b4..9fa172eac 100644
--- a/frontend/public/json/filebrowser.json
+++ b/frontend/public/json/filebrowser.json
@@ -1,50 +1,48 @@
{
- "name": "File Browser",
- "slug": "filebrowser",
- "categories": [
- 1
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": 8080,
- "documentation": null,
- "website": "https://filebrowser.org/features",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/file-browser.svg",
- "description": "File Browser offers a user-friendly web interface for managing files within a designated directory. It allows you to perform various actions such as uploading, deleting, previewing, renaming, and editing files.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/filebrowser.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- },
- {
- "type": "alpine",
- "script": "misc/filebrowser.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": "admin",
- "password": "helper-scripts.com"
+ "name": "File Browser",
+ "slug": "filebrowser",
+ "categories": [1],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": 8080,
+ "documentation": null,
+ "website": "https://filebrowser.org/features",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/file-browser.svg",
+ "description": "File Browser offers a user-friendly web interface for managing files within a designated directory. It allows you to perform various actions such as uploading, deleting, previewing, renaming, and editing files.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/filebrowser.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
},
- "notes": [
- {
- "text": "Execute within an existing LXC Console",
- "type": "warning"
- }
- ]
+ {
+ "type": "alpine",
+ "script": "tools/addon/filebrowser.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": "admin",
+ "password": "helper-scripts.com"
+ },
+ "notes": [
+ {
+ "text": "Execute within an existing LXC Console",
+ "type": "warning"
+ }
+ ]
}
diff --git a/frontend/public/json/fstrim.json b/frontend/public/json/fstrim.json
index 6a88ff83d..401f31976 100644
--- a/frontend/public/json/fstrim.json
+++ b/frontend/public/json/fstrim.json
@@ -1,43 +1,41 @@
{
- "name": "Proxmox VE LXC Filesystem Trim",
- "slug": "fstrim",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/805",
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
- "description": "This maintains SSD performance by managing unused blocks. Thin-provisioned storage systems also require management to prevent unnecessary storage use. VMs automate fstrim, while LXC containers need manual or automated fstrim processes for optimal performance.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/fstrim.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE LXC Filesystem Trim",
+ "slug": "fstrim",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/805",
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
+ "description": "This maintains SSD performance by managing unused blocks. Thin-provisioned storage systems also require management to prevent unnecessary storage use. VMs automate fstrim, while LXC containers need manual or automated fstrim processes for optimal performance.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/fstrim.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "This is designed to work with SSDs on ext4 filesystems only.",
- "type": "warning"
- }
- ]
+ {
+ "text": "This is designed to work with SSDs on ext4 filesystems only.",
+ "type": "warning"
+ }
+ ]
}
diff --git a/frontend/public/json/glances.json b/frontend/public/json/glances.json
index ad87ffbcd..dc4b532ae 100644
--- a/frontend/public/json/glances.json
+++ b/frontend/public/json/glances.json
@@ -1,43 +1,41 @@
{
- "name": "Glances",
- "slug": "glances",
- "categories": [
- 9
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": 61208,
- "documentation": null,
- "website": "https://nicolargo.github.io/glances/",
- "logo": "https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/Glances%20Logo.svg",
- "description": "Glances is an open-source system cross-platform monitoring tool. It allows real-time monitoring of various aspects of your system such as CPU, memory, disk, network usage etc.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/glances.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Glances",
+ "slug": "glances",
+ "categories": [9],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": 61208,
+ "documentation": null,
+ "website": "https://nicolargo.github.io/glances/",
+ "logo": "https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/Glances%20Logo.svg",
+ "description": "Glances is an open-source system cross-platform monitoring tool. It allows real-time monitoring of various aspects of your system such as CPU, memory, disk, network usage etc.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/glances.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within an existing LXC Console",
+ "type": "warning"
},
- "notes": [
- {
- "text": "Execute within an existing LXC Console",
- "type": "warning"
- },
- {
- "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
- "type": "warning"
- }
- ]
-}
\ No newline at end of file
+ {
+ "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
+ "type": "warning"
+ }
+ ]
+}
diff --git a/frontend/public/json/host-backup.json b/frontend/public/json/host-backup.json
index 280425593..f78c98bee 100644
--- a/frontend/public/json/host-backup.json
+++ b/frontend/public/json/host-backup.json
@@ -1,43 +1,41 @@
{
- "name": "Proxmox VE Host Backup",
- "slug": "host-backup",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/bash-dark.svg",
- "description": "This script serves as a versatile backup utility, enabling users to specify both the backup path and the directory they want to work in. This flexibility empowers users to select the specific files and directories they wish to back up, making it compatible with a wide range of hosts, not limited to Proxmox.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/host-backup.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE Host Backup",
+ "slug": "host-backup",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/bash-dark.svg",
+ "description": "This script serves as a versatile backup utility, enabling users to specify both the backup path and the directory they want to work in. This flexibility empowers users to select the specific files and directories they wish to back up, making it compatible with a wide range of hosts, not limited to Proxmox.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/host-backup.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "A backup is rendered ineffective when it remains stored on the host",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ {
+ "text": "A backup is rendered ineffective when it remains stored on the host",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/kernel-clean.json b/frontend/public/json/kernel-clean.json
index 251173904..4bb04af78 100644
--- a/frontend/public/json/kernel-clean.json
+++ b/frontend/public/json/kernel-clean.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox VE Kernel Clean",
- "slug": "kernel-clean",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "Cleaning unused kernel images is beneficial for reducing the length of the GRUB menu and freeing up disk space. By removing old, unused kernels, the system is able to conserve disk space and streamline the boot process.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/kernel-clean.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
+ "name": "Proxmox VE Kernel Clean",
+ "slug": "kernel-clean",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "Cleaning unused kernel images is beneficial for reducing the length of the GRUB menu and freeing up disk space. By removing old, unused kernels, the system is able to conserve disk space and streamline the boot process.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/kernel-clean.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/kernel-pin.json b/frontend/public/json/kernel-pin.json
index a38129501..a2cca1212 100644
--- a/frontend/public/json/kernel-pin.json
+++ b/frontend/public/json/kernel-pin.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox VE Kernel Pin",
- "slug": "kernel-pin",
- "categories": [
- 1
- ],
- "date_created": "2024-05-08",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "Kernel Pin is an essential tool for effortlessly managing kernel pinning and unpinning.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/kernel-pin.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
+ "name": "Proxmox VE Kernel Pin",
+ "slug": "kernel-pin",
+ "categories": [1],
+ "date_created": "2024-05-08",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "Kernel Pin is an essential tool for effortlessly managing kernel pinning and unpinning.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/kernel-pin.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/lxc-delete.json b/frontend/public/json/lxc-delete.json
index 4f61d7fdc..32eacb142 100644
--- a/frontend/public/json/lxc-delete.json
+++ b/frontend/public/json/lxc-delete.json
@@ -1,39 +1,37 @@
{
- "name": "Container LXC Deletion",
- "slug": "lxc-delete",
- "categories": [
- 1
- ],
- "date_created": "2025-01-21",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
- "description": "This script helps manage and delete LXC containers on a Proxmox VE server. It lists all available containers, allowing the user to select one or more for deletion through an interactive menu. Running containers are automatically stopped before deletion, and the user is asked to confirm each action. The script ensures a controlled and efficient container management process.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/lxc-delete.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
+ "name": "Container LXC Deletion",
+ "slug": "lxc-delete",
+ "categories": [1],
+ "date_created": "2025-01-21",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
+ "description": "This script helps manage and delete LXC containers on a Proxmox VE server. It lists all available containers, allowing the user to select one or more for deletion through an interactive menu. Running containers are automatically stopped before deletion, and the user is asked to confirm each action. The script ensures a controlled and efficient container management process.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/lxc-delete.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/microcode.json b/frontend/public/json/microcode.json
index 10d3c6ff6..8c7965bd1 100644
--- a/frontend/public/json/microcode.json
+++ b/frontend/public/json/microcode.json
@@ -1,43 +1,41 @@
{
- "name": "Proxmox VE Processor Microcode",
- "slug": "microcode",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
- "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor.\r\n\r\nIt's important to note that the availability of firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on the processor and its specific implementation. Therefore, it's recommended to consult the documentation for your processor to confirm whether firmware updates can be applied through the operating system.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/microcode.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE Processor Microcode",
+ "slug": "microcode",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
+ "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor.\r\n\r\nIt's important to note that the availability of firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on the processor and its specific implementation. Therefore, it's recommended to consult the documentation for your processor to confirm whether firmware updates can be applied through the operating system.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/microcode.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command. `journalctl -k | grep -E \"microcode\" | head -n 1`",
- "type": "info"
- }
- ]
+ {
+ "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command. `journalctl -k | grep -E \"microcode\" | head -n 1`",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/monitor-all.json b/frontend/public/json/monitor-all.json
index 52a14fd10..a7a0b97e3 100644
--- a/frontend/public/json/monitor-all.json
+++ b/frontend/public/json/monitor-all.json
@@ -1,67 +1,65 @@
{
- "name": "Proxmox VE Monitor-All",
- "slug": "monitor-all",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/monitor.png?raw=true",
- "description": "This script will add Monitor-All to Proxmox VE, which will monitor the status of all your instances, both containers and virtual machines, excluding templates and user-defined ones, and automatically restart or reset them if they become unresponsive. This is particularly useful if you're experiencing problems with Home Assistant becoming non-responsive every few days/weeks. Monitor-All also maintains a log of the entire process, which can be helpful for troubleshooting and monitoring purposes.\r\n\r\n\ud83d\udec8 Virtual machines without the QEMU guest agent installed must be excluded.\r\n\ud83d\udec8 Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running systemctl stop ping-instances.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/monitor-all.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE Monitor-All",
+ "slug": "monitor-all",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/monitor.png?raw=true",
+ "description": "This script will add Monitor-All to Proxmox VE, which will monitor the status of all your instances, both containers and virtual machines, excluding templates and user-defined ones, and automatically restart or reset them if they become unresponsive. This is particularly useful if you're experiencing problems with Home Assistant becoming non-responsive every few days/weeks. Monitor-All also maintains a log of the entire process, which can be helpful for troubleshooting and monitoring purposes.\r\n\r\n\ud83d\udec8 Virtual machines without the QEMU guest agent installed must be excluded.\r\n\ud83d\udec8 Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running systemctl stop ping-instances.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/monitor-all.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "Virtual machines without the QEMU guest agent installed must be excluded.",
- "type": "warning"
- },
- {
- "text": "Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running `systemctl stop ping-instances`.",
- "type": "warning"
- },
- {
- "text": "To make setup changes, first stop the service: `systemctl stop ping-instances`",
- "type": "info"
- },
- {
- "text": "To edit pause time: `nano /usr/local/bin/ping-instances.sh`",
- "type": "info"
- },
- {
- "text": "To add excluded instances: `nano /etc/systemd/system/ping-instances.service`",
- "type": "info"
- },
- {
- "text": "After changes have been saved, `systemctl daemon-reload` and start the service: `systemctl start ping-instances`",
- "type": "info"
- },
- {
- "text": "Monitor-All logs: `cat /var/log/ping-instances.log`",
- "type": "info"
- }
- ]
+ {
+ "text": "Virtual machines without the QEMU guest agent installed must be excluded.",
+ "type": "warning"
+ },
+ {
+ "text": "Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running `systemctl stop ping-instances`.",
+ "type": "warning"
+ },
+ {
+ "text": "To make setup changes, first stop the service: `systemctl stop ping-instances`",
+ "type": "info"
+ },
+ {
+ "text": "To edit pause time: `nano /usr/local/bin/ping-instances.sh`",
+ "type": "info"
+ },
+ {
+ "text": "To add excluded instances: `nano /etc/systemd/system/ping-instances.service`",
+ "type": "info"
+ },
+ {
+ "text": "After changes have been saved, `systemctl daemon-reload` and start the service: `systemctl start ping-instances`",
+ "type": "info"
+ },
+ {
+ "text": "Monitor-All logs: `cat /var/log/ping-instances.log`",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/netdata.json b/frontend/public/json/netdata.json
index d1abf45a7..9d83debb5 100644
--- a/frontend/public/json/netdata.json
+++ b/frontend/public/json/netdata.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox VE Netdata",
- "slug": "netdata",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": "https://www.netdata.cloud/",
- "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/netdata.svg",
- "description": "Netdata is an open-source, real-time performance monitoring tool designed to provide insights into the performance and health of systems and applications. It is often used by system administrators, DevOps professionals, and developers to monitor and troubleshoot issues on servers and other devices.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/netdata.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "Proxmox VE Netdata",
+ "slug": "netdata",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": "https://www.netdata.cloud/",
+ "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/netdata.svg",
+ "description": "Netdata is an open-source, real-time performance monitoring tool designed to provide insights into the performance and health of systems and applications. It is often used by system administrators, DevOps professionals, and developers to monitor and troubleshoot issues on servers and other devices.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/netdata.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/olivetin.json b/frontend/public/json/olivetin.json
index 45d9cc669..9d46542b9 100644
--- a/frontend/public/json/olivetin.json
+++ b/frontend/public/json/olivetin.json
@@ -1,39 +1,37 @@
{
- "name": "OliveTin",
- "slug": "olivetin",
- "categories": [
- 10
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": 1337,
- "documentation": null,
- "website": "https://www.olivetin.app/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/olivetin.svg",
- "description": "OliveTin provides a secure and straightforward way to execute pre-determined shell commands through a web-based interface.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/olivetin.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Configuration Path: `/etc/OliveTin/config.yaml`",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "OliveTin",
+ "slug": "olivetin",
+ "categories": [10],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": 1337,
+ "documentation": null,
+ "website": "https://www.olivetin.app/",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/olivetin.svg",
+ "description": "OliveTin provides a secure and straightforward way to execute pre-determined shell commands through a web-based interface.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/olivetin.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Configuration Path: `/etc/OliveTin/config.yaml`",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/pbs-microcode.json b/frontend/public/json/pbs-microcode.json
index 1541a82a8..f81819b28 100644
--- a/frontend/public/json/pbs-microcode.json
+++ b/frontend/public/json/pbs-microcode.json
@@ -1,43 +1,41 @@
{
- "name": "Proxmox Backup Server Processor Microcode",
- "slug": "pbs-microcode",
- "categories": [
- 1
- ],
- "date_created": "2025-02-07",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
- "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor. This script is adapted for the Proxmox Backup Server environment and will only run on bare metal systems. If running in a virtualized environment, the script will exit. Note that firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on your processor and its implementation. Please consult your processor's documentation to verify if firmware updates can be applied through the operating system.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/pbs_microcode.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox Backup Server Processor Microcode",
+ "slug": "pbs-microcode",
+ "categories": [1],
+ "date_created": "2025-02-07",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
+ "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor. This script is adapted for the Proxmox Backup Server environment and will only run on bare metal systems. If running in a virtualized environment, the script will exit. Note that firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on your processor and its implementation. Please consult your processor's documentation to verify if firmware updates can be applied through the operating system.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/pbs_microcode.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox Backup Server shell on a bare metal system. The script will exit if it detects that it is running in a virtualized environment.",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox Backup Server shell on a bare metal system. The script will exit if it detects that it is running in a virtualized environment.",
- "type": "info"
- },
- {
- "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command: `journalctl -k | grep -E \"microcode\" | head -n 1`",
- "type": "info"
- }
- ]
+ {
+ "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command: `journalctl -k | grep -E \"microcode\" | head -n 1`",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/post-pbs-install.json b/frontend/public/json/post-pbs-install.json
index 3fb6e93e0..c8df62220 100644
--- a/frontend/public/json/post-pbs-install.json
+++ b/frontend/public/json/post-pbs-install.json
@@ -1,47 +1,45 @@
{
- "name": "Proxmox Backup Server Post Install",
- "slug": "post-pbs-install",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/post-pbs-install.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox Backup Server Post Install",
+ "slug": "post-pbs-install",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/post-pbs-install.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Proxmox Backup Server ONLY",
+ "type": "info"
},
- "notes": [
- {
- "text": "Proxmox Backup Server ONLY",
- "type": "info"
- },
- {
- "text": "Execute within the Proxmox Backup Server Shell",
- "type": "info"
- },
- {
- "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ {
+ "text": "Execute within the Proxmox Backup Server Shell",
+ "type": "info"
+ },
+ {
+ "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/post-pmg-install.json b/frontend/public/json/post-pmg-install.json
index 70f906d42..05ba59cdd 100644
--- a/frontend/public/json/post-pmg-install.json
+++ b/frontend/public/json/post-pmg-install.json
@@ -1,47 +1,45 @@
{
- "name": "Proxmox Mail Gateway Post Install",
- "slug": "post-pmg-install",
- "categories": [
- 1
- ],
- "date_created": "2025-01-20",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/post-pmg-install.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox Mail Gateway Post Install",
+ "slug": "post-pmg-install",
+ "categories": [1],
+ "date_created": "2025-01-20",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/post-pmg-install.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Proxmox Mail Gateway ONLY",
+ "type": "warning"
},
- "notes": [
- {
- "text": "Proxmox Mail Gateway ONLY",
- "type": "warning"
- },
- {
- "text": "Execute within the Proxmox Mail Gateway Shell",
- "type": "info"
- },
- {
- "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ {
+ "text": "Execute within the Proxmox Mail Gateway Shell",
+ "type": "info"
+ },
+ {
+ "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/post-pve-install.json b/frontend/public/json/post-pve-install.json
index f849aaa8c..4a1031e8b 100644
--- a/frontend/public/json/post-pve-install.json
+++ b/frontend/public/json/post-pve-install.json
@@ -1,43 +1,41 @@
{
- "name": "Proxmox VE Post Install",
- "slug": "post-pve-install",
- "categories": [
- 1
- ],
- "date_created": "2024-04-28",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
- "description": "This script provides options for managing Proxmox VE repositories, including disabling the Enterprise Repo, adding or correcting PVE sources, enabling the No-Subscription Repo, adding the test Repo, disabling the subscription nag, updating Proxmox VE, and rebooting the system.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/post-pve-install.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
+ "name": "Proxmox VE Post Install",
+ "slug": "post-pve-install",
+ "categories": [1],
+ "date_created": "2024-04-28",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
+ "description": "This script provides options for managing Proxmox VE repositories, including disabling the Enterprise Repo, adding or correcting PVE sources, enabling the No-Subscription Repo, adding the test Repo, disabling the subscription nag, updating Proxmox VE, and rebooting the system.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/post-pve-install.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
},
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- },
- {
- "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ {
+ "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/scaling-governor.json b/frontend/public/json/scaling-governor.json
index 3c4be95b8..3c1332545 100644
--- a/frontend/public/json/scaling-governor.json
+++ b/frontend/public/json/scaling-governor.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox VE CPU Scaling Governor",
- "slug": "scaling-governor",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": "https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html?#generic-scaling-governors",
- "website": null,
- "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/cpu.png?raw=true",
- "description": "The CPU scaling governor determines how the CPU frequency is adjusted based on the workload, with the goal of either conserving power or improving performance. By scaling the frequency up or down, the operating system can optimize the CPU usage and conserve energy when possible. Generic Scaling Governors",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/scaling-governor.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
+ "name": "Proxmox VE CPU Scaling Governor",
+ "slug": "scaling-governor",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": "https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html?#generic-scaling-governors",
+ "website": null,
+ "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/cpu.png?raw=true",
+ "description": "The CPU scaling governor determines how the CPU frequency is adjusted based on the workload, with the goal of either conserving power or improving performance. By scaling the frequency up or down, the operating system can optimize the CPU usage and conserve energy when possible. Generic Scaling Governors",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/scaling-governor.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
}
diff --git a/frontend/public/json/update-lxcs.json b/frontend/public/json/update-lxcs.json
index 4b2ee3d1f..0c11fcdd1 100644
--- a/frontend/public/json/update-lxcs.json
+++ b/frontend/public/json/update-lxcs.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox VE LXC Updater",
- "slug": "update-lxcs",
- "categories": [
- 1
- ],
- "date_created": "2024-04-29",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
- "description": "This script has been created to simplify and speed up the process of updating all LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/update-lxcs.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "Proxmox VE LXC Updater",
+ "slug": "update-lxcs",
+ "categories": [1],
+ "date_created": "2024-04-29",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
+ "description": "This script has been created to simplify and speed up the process of updating all LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/update-lxcs.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/update-repo.json b/frontend/public/json/update-repo.json
index 5366c9280..a155c52a9 100644
--- a/frontend/public/json/update-repo.json
+++ b/frontend/public/json/update-repo.json
@@ -1,39 +1,37 @@
{
- "name": "Proxmox Update Repositories",
- "slug": "update-repo",
- "categories": [
- 1
- ],
- "date_created": "2024-11-04",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": null,
- "documentation": null,
- "website": null,
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
- "description": "This script updates repository links in LXC containers, replacing old links from the tteck repository with links to the new community-scripts repository to fix issues related to updating scripts.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/update-repo.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": null,
- "password": null
- },
- "notes": [
- {
- "text": "Execute within the Proxmox shell",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "Proxmox Update Repositories",
+ "slug": "update-repo",
+ "categories": [1],
+ "date_created": "2024-11-04",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": null,
+ "documentation": null,
+ "website": null,
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
+ "description": "This script updates repository links in LXC containers, replacing old links from the tteck repository with links to the new community-scripts repository to fix issues related to updating scripts.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/pve/update-repo.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": null,
+ "password": null
+ },
+ "notes": [
+ {
+ "text": "Execute within the Proxmox shell",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/public/json/webmin.json b/frontend/public/json/webmin.json
index 1f90782be..5f6df559d 100644
--- a/frontend/public/json/webmin.json
+++ b/frontend/public/json/webmin.json
@@ -1,39 +1,37 @@
{
- "name": "Webmin System Administration",
- "slug": "webmin",
- "categories": [
- 1
- ],
- "date_created": "2024-05-02",
- "type": "misc",
- "updateable": false,
- "privileged": false,
- "interface_port": 10000,
- "documentation": null,
- "website": "https://webmin.com/",
- "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/webmin.svg",
- "description": "Webmin provides a graphical user interface (GUI) for tasks such as user account management, package management, file system configuration, network configuration, and more.",
- "install_methods": [
- {
- "type": "default",
- "script": "misc/webmin.sh",
- "resources": {
- "cpu": null,
- "ram": null,
- "hdd": null,
- "os": null,
- "version": null
- }
- }
- ],
- "default_credentials": {
- "username": "root",
- "password": "root"
- },
- "notes": [
- {
- "text": "Execute within an existing LXC Console",
- "type": "info"
- }
- ]
-}
\ No newline at end of file
+ "name": "Webmin System Administration",
+ "slug": "webmin",
+ "categories": [1],
+ "date_created": "2024-05-02",
+ "type": "misc",
+ "updateable": false,
+ "privileged": false,
+ "interface_port": 10000,
+ "documentation": null,
+ "website": "https://webmin.com/",
+ "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/webmin.svg",
+ "description": "Webmin provides a graphical user interface (GUI) for tasks such as user account management, package management, file system configuration, network configuration, and more.",
+ "install_methods": [
+ {
+ "type": "default",
+ "script": "tools/addon/webmin.sh",
+ "resources": {
+ "cpu": null,
+ "ram": null,
+ "hdd": null,
+ "os": null,
+ "version": null
+ }
+ }
+ ],
+ "default_credentials": {
+ "username": "root",
+ "password": "root"
+ },
+ "notes": [
+ {
+ "text": "Execute within an existing LXC Console",
+ "type": "info"
+ }
+ ]
+}
diff --git a/frontend/src/app/category-view/page.tsx b/frontend/src/app/category-view/page.tsx
index 1d5a9e91c..e44508f6b 100644
--- a/frontend/src/app/category-view/page.tsx
+++ b/frontend/src/app/category-view/page.tsx
@@ -1,12 +1,12 @@
"use client";
-import React, { useEffect, useState } from "react";
-import { useRouter } from "next/navigation";
-import { Card, CardContent } from "@/components/ui/card";
-import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
-import { ChevronLeft, ChevronRight } from "lucide-react";
+import { Button } from "@/components/ui/button";
+import { Card, CardContent } from "@/components/ui/card";
import { Category } from "@/lib/types";
+import { ChevronLeft, ChevronRight } from "lucide-react";
+import { useRouter } from "next/navigation";
+import React, { useEffect, useState } from "react";
const defaultLogo = "/default-logo.png"; // Fallback logo path
const MAX_DESCRIPTION_LENGTH = 100; // Set max length for description
@@ -17,11 +17,11 @@ const formattedBadge = (type: string) => {
case "vm":
return
{JSON.stringify(script, null, 2)}diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx index 3713a165b..7ee300aac 100644 --- a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -1,12 +1,5 @@ import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; +import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { basePath, mostPopularScripts } from "@/config/siteConfig"; import { extractDate } from "@/lib/time"; import { Category, Script } from "@/lib/types"; @@ -23,7 +16,8 @@ export const getDisplayValueFromType = (type: string) => { return "LXC"; case "vm": return "VM"; - case "misc": + case "pve": + case "addon": return ""; default: return ""; @@ -35,7 +29,7 @@ export function LatestScripts({ items }: { items: Category[] }) { const latestScripts = useMemo(() => { if (!items) return []; - + const scripts = items.flatMap((category) => category.scripts || []); // Filter out duplicates by slug @@ -47,8 +41,7 @@ export function LatestScripts({ items }: { items: Category[] }) { }); return Array.from(uniqueScriptsMap.values()).sort( - (a, b) => - new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), + (a, b) => new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), ); }, [items]); @@ -59,7 +52,7 @@ export function LatestScripts({ items }: { items: Category[] }) { const goToPreviousPage = () => { setPage((prevPage) => prevPage - 1); }; - + const startIndex = (page - 1) * ITEMS_PER_PAGE; const endIndex = page * ITEMS_PER_PAGE; @@ -74,18 +67,12 @@ export function LatestScripts({ items }: { items: Category[] }) {
+ {isAlpine ? ( + <> + As an alternative option, you can use Alpine Linux and the {item.name} package to create a {item.name}{" "} + {getDisplayValueFromType(item.type)} container with faster creation time and minimal system resource usage. + You are also obliged to adhere to updates provided by the package maintainer. + > + ) : item.type === "pve" ? ( + <> + To use the {item.name} script, run the command below **only** in the Proxmox VE Shell. This script is + intended for managing or enhancing the host system directly. + > + ) : item.type === "addon" ? ( + <> + This script enhances an existing setup. You can use it inside a running LXC container or directly on the + Proxmox VE host to extend functionality with {item.name}. + > + ) : ( + <> + To create a new Proxmox VE {item.name} {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell. + > + )} +
+ {isAlpine && ( ++ To create a new Proxmox VE Alpine-{item.name} {getDisplayValueFromType(item.type)}, run the command below in + the Proxmox VE Shell. +
+ )} + > + ); + + return ( +- {isAlpine ? ( - <> - As an alternative option, you can use Alpine Linux and the{" "} - {item.name} package to create a {item.name}{" "} - {getDisplayValueFromType(item.type)} container with faster creation - time and minimal system resource usage. You are also obliged to - adhere to updates provided by the package maintainer. - > - ) : item.type == "misc" ? ( - <> - To use the {item.name} script, run the command below in the shell. - > - ) : ( - <> - {" "} - To create a new Proxmox VE {item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell. - > - )} -
- {isAlpine && ( -- To create a new Proxmox VE Alpine-{item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell -
- )} + {renderInstructions()} +|-DVtQTQYC<`;K*w@Pj=FbpG>oP z68}Ce@>AUF$2k^NxjSG{o6n0No!}Pj0S~CA?GtWX`sMLM8HR`=I!KJ}v%K${>MSXV z+8xRnHEAX(7H9jn%$57HYAA4kIq;$_oQ06Y&_RqdX_{hoULXd4xi+G!jaJEaOP(A( zU58w!>V?ZFSJW_;I&gQ>JrvC34g}VsX{*}UA5@mv% z%rt3nS5QtrSVbT~GIruzV;}MXe>mwL-#KxWG~u;83!=rI9xkLDGTtydN@L&QsXxz^ zHf{upeEodf19nVQSz(qKE>~uDX30yHd%etyF0Ihe|Cx?ks((^5DMCD}!v3N;4>Z>i zev$`rPQ!@9 9)7Wg+eSV&7Gy5 zJY3+4xiyP-cqqQneCjk^OEqc!S$<06yhSa($k=ZBJXN_oWs$ng6k7QHjr8??Uh4J! z9%ZHJ_5I%B`DLup$x$}sR@o$ qYQgsS^d-RyDiRhLR!_HOA~ z|FMnIDEamN6}6B4VZYu;Nc#S|D~ kAoW-a|plSu={~WTEIC$Ev!C5?r BAUv%;GE-d>{l&!cyjM2c#Ty*I; zp?|h=!Ohf0xg%dIw>4mAez|TdbDH=5R6=?s2Pg$4x!2m=^|K3Ql^vN9LU Z>#YOUaIuhx*iiH*S9*8h`8nK9M1@vq6 zbB|%eeZj?F6BC}Dkz3O`h~9xcNb_CsMz_7-xir$5UT@x8jo6#ZM1fmbyQ{OkJbLrH z+|~})`d1dU B3PC!^-udkW}h|F>s^TyYTn S>3Zx51$aOd2Z-TW@b5$g{|-R#WBo#%XZ5>rAw`AbEVd`rAp_<^8Xm3`vH|U zA8P`*0{}o78#o*MKPKP(Ka>BT{x>IJ{SOlS|8W8)dU|GN=KopIhx%djRM!Lm0JI?7 zWd#Bt07U!G^E=a>6rD**-TmqSphI_K`v9i&<4E#)pbk!x7AZS0h8wx%{M`l@UE2c# ze`|^G;bv=mS)GySd2$5`9!vmlO~|u76Zp85202w8Upc|nZR1VJ&j?jcxQWHSdn9J| zC{&ME%PVqH 8~5Zfxf3*E^tmCa*EzoDCOr7wX1{dhas zzhm2Z_#`=O@65g;#QNLJf8c@igb@W0dzDqLQ_tXw&1BiUoU9P)*z2FXWREhid?uyl ze+lo%P6?|Fs@01*pxp$v6&qIbZ5h0=esSF@SuQ?Y&hLZf4{A)tRQ4p{4Ma3eE8=r( z6l-bVf70KIjwq<}1SlZeP53HGnE ecZ(r7qv4AC^1 zcxc#b;0YSCPpGXz56bf{n@j;p=pRjpyn{m1ib D3)TRE> z{;X2yoX_UAC6W{QFnj05{AyuV2!cP)D=q^?PT|eC|0``!#o7Eam%O>A?^i3wkl;0NUVyOJ-V(qfH`9Mm!gbt!VG!YOSThtF- zO@MwNzr>Xybg9(%O?Jnn>QHY1m+R7j$UZ$f>2QpOQ0+z_1Ublnm;dKzlSxM8H$hrl zho1&6d~RvZfDTU8SY>XT@-rs~+flw@3m_%1n8l8O7L}=1GNAsNkUir2(1aJmiiPnQ zaj9WjvkSdHj@k2_RAEpQGgb~ZgGoa;uArc9K%=?!XbCwd6{qs1SWp17FlILtM!jJf z0c}s6SF-4L+r^JnOh&X6Gwwtll<{D=aKBN!$T{<1hJAYs_17M;vb#h780Ivn4l;23 zW+FW2>59OSY$$mkX=%U0*4}G(C>aMJ7+3W@iSSt5yhN9oo!bCv1Gy^^S|7XQYB@R& zXTKTdzij$Z+URAbCHpU9j`0a@=W)I5hm6?ndg?s)_AdTq`F#$|;iq%8eKKfIXq8V; z3-$ri&Us7WLY#R-w&hyHzv7F>lGDHyW}}xK#?duTQ~?(b1b`xiEte;9ltNMur{6f) z9ZXD6g 1Xgx)<7>c8O1u2Muj5eART*>QxU`pEJrmBa4 zZohm{R5NXgs*iK vIQ-T_THv%up@JHd4)mihE(C9Py;;$` z8JIld!;lCnSY{SXd%av!Vj=XGn*BdkmboB~62!0U#IBCno$A#jK~>*nDGiP=Xwy4p zPs&6KaqNfkLgAnn@*Q8m)|@T>TxohdD}bSbVO~X!TZB;>it!xjA($%E!5d$PL7PSj zvQDzNeWwH926XYr@Xg2Gy#q? Y^?e}%CG4Sx#_aQO^mP3 zC-?p9H11LBrp} 9l?>5$>F5G@^?ys2_O>$&X{-`*C@+>jXueKCF@?th z9-UUT_zVO_S;H)SNdZ&brMusV(YwP-AT(=fNrdL%jNe*DYVc|oMhZboL0O)vr`-$p zXVs2(K_W} F)SbTvp}XGGWetlA%{zJiG)184N+G+RXj*6xWFYlFtDJDF!+T{`bt zIprwuYBj1mh0AiB(T3=Ux#XPZG4EZs7(g~Qcgiz6N`KfbPw)~rLhEJIvPhL7-S~ZJ zRq%bY?~QZd9 6rlZI%mEjK$bFz-K9_eD4DSN!ufO60q+uaJ`BG+u^2+en2ZJm-2oY7C_{UoLvHv zDGh8H KnSDZtFz3$nTwP=HnLwEM^a$C<8gJ$YD}aXUY1BTs@nFgjcicp 7<=G1M(PLbVc*6K5}PrxDhyS@gtKuY%@0l~nlRydAC z2cSl(?z8Sx*;e6NSzY^>YTUyw-9}EK&H@`ne1wxsBDcR}BV$0-*q$gx{riVTfl$LB ziHRDsr<(_BVSY9;MkE#aB {Yiq^km4>rilH<-%{gt%T0Nq9I;i+kfs28jA1n;=!|-?3HR=?SPQ0x z3+rqa9oj>iOlO0n{9FHZwCaGl$ a(09dM;Jp_v; z ziGx(zkL!#B3$Ci(G%})gi((2t0H0IO_+o2MNykSmA~VA*&P+Ro2D6 zcK@TLI4#Nh-eTlQhMR#bEL&}T&?<4qq-0O*2)%Iq!a9;~mr^z(=!!qGdCKN6gcxR9 zhNHUm0fdQey84+J%e@H4H0!oG4Z#%s&6$Qc=bYpA9krR>5`@{z9Vrnp_e{5ipJCS7 z#%cfgy?Q!28bjAJnQwNZVz|xTE0kBimE+Z+PhCx8ODq){j)bvE)nnCT(C^>3vNq1l zk@&0s+Eb5B&*HS NQM4HWTPvJKmll$Zq|_(W9S#VU)H|af89g%|VsEJbd*GUrWTrh(fw`nun>AptAOG zje{^R{$kOI^x+#w=z?@mIExx66(UDG9iHA|4a~~e(t^4oy)xzs0{gr`Kt-GAW`6Rv zy|*WEwr^#lbM~`?1oE9zwv`7aq|Y7nu=+|r3fOH754n4Is^a$Yomh;6xXywnTz7qX zfw&!IE8OXp*U<1qgBS0X5$1^UE4NeoCkTS8%x46H5WKwfAz3Cf2cRd1knS-Afr8JJ zJ^mwJ+ZF$bw<^5ni&zJUzkwwZoDyF+wSluywjjlg4anyLA7XX1{d^FuWu)59BpZfj ztiF*d@2;W038D)(sEvG1XSN6B24fv`!POW6E*-+l$4vtv&iZ9N#pMiPkR`ypKzUyB zjiEd`lqM6E`*%oHjMR{}!MoWzfNu6Z?&d<7LYMUoUvm7D2*^e+yxQIF$Q<73yr1bl z|AnJUl4a|Eyffi r&E% ^!L(Tx*tn#JG$EN0_xDjQ;^^)S3h$9I*wkMhdUy#z 4UVf$o1mP%R+ePf~5x(}7B28;LT>Cvh?Kq>c%{Q1gtA z=anoP?6G+hz>t7Y{gs4kBAlAMtq41kDF9D1TI`M-Q{BtU2bJy3XcYO^jl~vsjOXrb z{rb;!M96Z?PG1crdequ2hhu`;6k+KM{GK-b66#iotjcEGj-6h_I9^W3X*d|<%icjr zJ`6e0vL2KK6D60P5YlR|T^{25tnBrG6M4Zom!s3;R=J4T)EAF#r_5z4KMz1@_~ g?-APlicbLJs`f+j6pClDz*NjZJsHP z5dfm9@w6P?ON^Px`LD994qZ2HL^S3Wbu2#!CjjGT&+WYY$<&YZASFQ39MvNm>3~uM zZ4bPx#35y{w({(uQ+J!s59vY8gkjt~IBEsX{ktJ#|GcNB{sjs&Rix@)MIuCVlP;`} z>Z2=YsG2VpVH3uhor^7Jr;aR6&AakoQ8-)+K>l##9dmuiv-RmR&cC2Rw3(baxZ+M$ z1~?S7x5s51k<)mlopTI`5HtpB*Sq@9gk}*0?gV`LbuSryhp-*i*_yED^#i{sNLrM! zJn)9jD+SioJ~j`mm_y{tV)Kd_OtSM3M+X=4s9mg)p@^-EvBezR=sY{kPKpG^)I#~B z@P{s<(*6`7EF1AOid*DHXNhN6$jk(rLFa1MOR>d?e53sY$pbqx)~nQWb}$ef-?iW# zdBO28=5C@w_h^AU3?>D%s!M(pv|XJnIlV`o-Ol6@N3OE^t1N`HL3#Yo@O^QN+9DvG zY_1sm=5O>0;n=NaiqHTWr!ByXm|~k(mj))9%{(=YoUqQBFwXT*qj7SCFL1n;H>sCq zC8gf>VmSjjxhHhfX|5&klrw<^a1l2Z;eFSttg!oWDC3YZd(3`QO*g>r7Gncu)yM7@ zLEU(Z)&zGb^o0jw?L`(U)a0IC4`RR1tWqvqc9oTWD1ji;M_1*bz&EA@wwya2=KWh- zcIKUKt)eH@*(NL$*dT$FI(5gGsk#yNPE_UQJMK7t(5jviz+SEiaAlCMh@_Q zj<5Q&Ph0~uqyVdR>zM|9Ct*SKj3_}RH{FjteBoOz7apFEM^|>*oR8PDYWO;8(R6?g zO5ecMQ}=ByAo`7GKa)buk7P9|WCqAVwqO!0Z?&yzk%OIx^w_OD4e!|}jIBl2HbPQE z!(U)X@AenM{jm5(e4?a;nC1+s(#N@~<68*pu-iLaA_!!FRng7pjUQidN@Fq`LFan9 zPp9Z-#FLa*W$*#~*wnXB=Y89B{xTHT5$>ZO>4oy-z?Mqa%=tMUnc_OLR&|5Z2gu5b z#hF>i;+edzUje6%FJI&g(?j~dg5j1uhO1&B1fhUY#U&~m8LwwIyl_J0L})kJl1cvL z*)gPIXSgoDXZR84oT9;M6NQJnsrg`AV9M3zs|k8&IJmm?GbQGXu>74 3lYe-9ZA(KE3b8)rQ2Iuxv3a_ zz7?Hrkes=Y0`Bz-q4IXtx7vi%Q@0o|XI_#&_?t-&mWDdtm+im5nL^bEp@DXsNNz68 z@Z}l%!zaXL$54yiU#xCYhEjFksNFy9r3-QnKl>|h yO^8FR4K29?UeWy9(^M z@o+$YwOwNPNOgDOv_Ox0-(cnhcuObN)P5aVADl!*mT${!rbt{$z9)G)EPLHrh*rHt z^Bu3`YY@Kq_G+WzJDrr&H&;E=X6th;6Lx9tzE=@VJ<$rvaTRAaUf}&helTF$LzI9C z6{&Q{6B^bRNf|!TOhVQ+%1p)}arcN|h`fO(@<<_MKSd!q^|soqjiVY+%d2#&+3BUW z>e#(+>9))f==0Sx>}3UiNI=K8i+Ds!4ziQT$@iv}hxxr3llLG+er#yM&f~;$wfe^k zujM^^4bFOKLf}O)lv)z_gtoyTW>lvvX*3InrJMF$kRZ2%o>q-ofVtW(=G{6xYyNx) z&bF36bzilv<0Han+o8x(Vu8ztbT@?=+gbfM9tq1x?18p43S@{a&Lue%;w;$Bl-kT+ z`&MyeetVydv3u4@^KG13-QA|Nrm5Al#)eQkwFdYYU7pfY_)r4(=MiGWrf?vDRu?4u zSnUH%mJ4kL_Jm<$DZaxd-~1cBRO36YFA)^i6gsD#IdN>A6(`AGnR)3S73jBk7mL1I z&_vF*!1DSE3$D>j&y2R^_-A^XopDooiiRx3du*SSN_gl#(7!|;r;$Knk%)W4juKIk z{UVLgm-3ifBC>m^f!A8E9~q;`>E%xDj28ir1 (W=Z@{t>Fh? sl$;nCs1!?vVY_co8m4>?X(Q$ee65cG!VQpcNWgP_st*;Ce9+il zpy4G*Xh@jiad`wvVy_rCiZBn^ZI%B%pQQuUv3%57o4^|@mBatr4Gg;S2mv-rJeTy9 z{hota UBPq34Wy~?+|)W8ee=%P3D zh<|vdO4UP4wDMQ1mG)FN@TsHJ`jQS}EEUSS+I&Ti*!$DHi+thm#COf-aLto^DQwyZ zZ+_4om$}^oP|xPsBK+G>ync>Lt#-!w(7U |WJA zc_*I7a9(S{#~MS0^S1VR!7k4vJ}Ig$ydxaoqYP97gL!eQB{e@3Jb(bq1Q(%bMx(Ao zfa0BVkgq=lkhk|Cm`;=N#V~6yPn}04#|@%4&1twD^)j#ExC`S+_XN<_EV-biTf1LL zY5x{=@8~{4!;!d4Sxk4j8+>_qFVnilo0_9ab0m?FUKIfv)L@|+`55)S*9*SEXD%^P z-=rW$0Erh(#KsSSBkB+{;$R>AwBk~(XVV*0x=r9#v%rw62klT5!2dPITU||=^Z;CM z*j2ff4UUyUbX)USrc`@s6{F1V)ge3rNzu@!lcz@$M(n`z1gdS;vH%y|b}1OC`w>Fa z9PSC@PEPs=< qNOn `>``h#H2Z#Hs(J^CLK)JQbPBb|GeMpnv zzsz}2DoZr#h#iYLQQG5R1VRpOto2wW%^?82M~v{d$^FD9>g{>rX55-x0xeDH)xD^N zrCIf8u?~rE72*Xnjbe71qCHeNWrmm?R5BcHku+jKAL(;%e`8OVmWBP*RLHrEaVXBv zI(mAlQj`$>e5Svg7@MJwlSJ7_Ufj91P16xcy_~Y9pNB!0f^F(~i3{QH8*K_eM3#Cx z$CJLuriO3*QjnKXQoi4 +h|;XTicS+95pHNl0R>c0wO%`ulv ze5d?v-C<26gEnUo*SB2v09LR>THnQQV3@ 5zh;M_ee3u3RenB1 zkODL43!L_kpll$O{M1CsoGMX~WM*kzBh==?QQ|(Q&$ZMdSI2|9e^8PCvDXzR1Y5eR z{`Z%EE0MV?8m*y7u#^zJgA3IRIV`IKDy|@>ROqKYN;M9>@`usw>^Z=0FDan;?27m$ zhjko=u9U*}&kx(q&W?pAn~fx?g-HEH=+nyt&G t880(HoO) zi%?>_LTIv%gh}2tQc>lC!EhxT2Ta1>v}>~{!~Phb?yq_xAMu3fIwjXmGJB0r;ZAMR z90NVfglY|@MVpD%^s-s<@lMSI^#PgdIRtR1Q-5;eEOW}|ZMJeXGezx;irA=Lm1Lgs z@m~ekiDRjs>d~#N2UtDBq8TWEf+hK)fO693-e PN}5Nix7;gO@u>oTjdmk9(LkyhD}GI?b}f&HO*W&khigAV^g{cxRk`0@hH3f>I^a zVFqaa9mBFoWU#?*Z-`V{5!%1}aqAy`z?jY=U!Fa*Q@(w#Jr}0gryVC|_yNB~-j_46 zJy9M6II4Y j%bZJp4g`*~=FL}rDtDGKT7-rn%8 z460|o;&wx6c{|D8%kRdZFMPg-^H|36aLTL#GtIEpeh;9iP4>~0FK~8xMXpd&tz&|E zPD+)zD9bj`ro6@#QKc btPKEa182(?zz&`wqT_idhVQ%syn4b zJ6lfWSZR}{@@?``W-F}N?6zm@uz FxqcV2E?Z!463YnE9Z>n04Bv`z zma(}kV~X)n1E0Au>O9GXx{u-E1BodIC8bWtsinhBykrTvq!%LH@^uu-dsg#Rc(8F3 z>D&tC$L`UOM+NixVpsp`1WC(&CbgU-phG;$$i`Viv6XS<)c#Gm93sGE9AIzJt~ZGW z9~~MB3Rx+=@*U12?nF3j0Q44^N7Lb^k-{QY-?AJfXx{p9{E=MV)xNOu0X?sWb*UTL zhB? Cm9E-BRa>H`HJJ3oFz2 r6uO#wUO@+FLjwah?QO G^S h=+h*3sf^m@F7@fn{Lb15TP zYUw)NM>!m8a)bJ_r* nqWD>9}HGLWwP)`k-YG!F%;};sX*yP@X0OA;@SC)a) z(SMVzU+=Wa$bX$+8pms6!DVHJHS4Vr7e;~<3xZySWc8#mOt3S}LWE2T(%NOIO#QC6 zR$|C$)nRJp-pKKU%sq^g-&x&2?=abdPJ6*1>9>okp$-rXQaC{lcJymJC-x(J#DQYE zln@zCuF1bA nm4Bg}X%@c&wkzK1@J}cy(yx+oRKe}~v5vEdBGXY Cy}8_jywcR?13pV9LleV~K)uUG2W@IQsg&-aa@ ;Ac>gRZZQa3iPl_sDcZ^h>ePRUHZ$o$ z;9m?)0CA?@qPg=Z)&}AAZz9q2hLs{Gt1?Pq69jNB#75(qj8Fm@V$J@-4}jQ88(`73 zVR|smi&1zrVS;0&alHLbU~tD2JDJ4~$A#omQYw8*5EesD&Nc;sJa1B95`A?i-3b*z zy+uopm5III&EiSFfHSgC8~R@j`T6e8WIXf}Q;9HgeZ-0YcmJ)GYTgbhxi=E8{)=T$ z97Y;MJk>Bk3*Fe1)@jC6ME-XCcEwl8iq?-5fXBAhpT*7^C%=VS#*$K~6_P>pG_{E) zq#iSxvDTkanaTI+t+z2_coShh0{$u_irp@xHY5Z;U1o#R58pEznmjA*U$CmV#Lyly zD275w#mZIrJhR?LZAq2*?AFliyO KV_|bZ$L( z_YiY({0l34MLZyr#HCNZyNjZ0HQdnd&sQM-mJPC~)#y8y>+J9$iwl*r`&Xs+7YApE zQ;GnBpO)cotJ<+{kMzES0a0o-K&2)b2lLfyTdBP!Wfdplh{Wqq0;JcNc&iy?;2npt zTGp^*6Pj5`bC*P{F<;1}Ut=AIDy?}uhHrJKf9}c|VscZGEn_VNCO|eQra0zOJ(9;@ z$n9Txu?2n%ZBaf)Fa)qvmz>3Rvkk2J5>`^fzDl!r5dS!}TBnt*UtO4G{X))$KnW^* zVPmJFNoDn%`6zKo#6aiQU-r-ba1?!g5b^$Z;6X9$@$GNrU6o5bxZY-eLuUUqSFB%S zX9y@0yfeYd B;m3zwZbK^TYi<)a$l@0ox~Cm+$^QI-nt8d}SsSb4OMRyLhW Hp=0-g(6oV!3HJ%~{Ct>J=8$&A)S5gJTsZqcWJp%yd9Z^k*_ z+<~g2%#%V)`j|6d@~#%YhrE;59JuXp2y%k?oiN`1`M{_=K*JUS{Qars tl@?kD&FOc6 i z &*95p3t|hxZGM&|>G6kh$GO*<0&;TbsSc zda@-^_{J94@W=p0`;NSn!ZI0e3O`^MO4c1MDf5*s @kpKGI{0aya87^}+qO&WHGtA5Om06k7U0OhkxlNs(wl4p zL~Xkz$sm_+z<~KiPB(kZc3hx+C^f}n3Pq8aCk=cjP`fh4Cw2!Z0RfDU%{7w}v&Cd| z *E2hTG0 >+Ggy_T>= z7k|RTf~(w8HWA4wopOX0eO&w6?g_1Y_xPj#Q?&6I%)vHio_`1iK Bcn4?ce=r3LDK(FEMUxiYW)F3~lasFeWI @_B1d^uNkz5O#qn~r&&-|# zVNTOAiaS_?7l+jaj3p!{h_$jvW_sl;5k88ir%1S=p%98>GeH|mL$M#}Z~r^hEP44| zn(I5Qf6ZXd@Db(WXv5-2zJXlX2t~4&+QX)4isa2#Bi?O `4y}Tn9 z)Uvpo4i=T*T>AaWv_2kjzxjY;!B~T34vE4YYQtKKX@jt+apYVco4h$asa#KBd*=6I zJ%kLd6fTZ=^Ppil84v-Q-#y(zl57;c0U1e|cW^Ey!&U+h=g`&RsV&MBLGwO?tgk{< zEhwc@b9WMFe;GWN34QXQ%TSIy5oJQI?#3_MF0jnZrK|Gj!kIj9LYy77T(c#HAYrCE z=kxXA+84-vb!nB^UvUVAANrLJELYgH)N<$8ar^ngLWIISn1!W AFmBR%sc#U=UB$$P7oekTt+QUnHNQpNJ z7V~ZaHDt4kB#qTl#Im;%veBH|j&oN^UDLl}C^}f0xy2pNb=ozfa4^KB)^Hd6*=n*V zGJ-@35d_(A8fY(#h6?jg@Jp0VQwdL27wwZve$OHaU7M^^!+KcOb3GjA2+y d@h2?$Et!G(~WwGjQ)}%R*cMU zL>;Jf_8_SwdF=t8*<)>8#{xrq2Zb&4-YDxDA-|7nf7d}QkQVvSYs-hntSC#0X3Kq4 zfjOyFPSfA6nCG>5iIIZFUeIPli}vs9186+h;k`9X2ZoeXJ&chOrgi?p6%u5N4H1x3 zEk@?kH~n}q8dcyC?>u}b;@=H)Kuq)MFMTYcVl$H{SOpL2v06cBf-mXD@%3%HRKatr zY(mAy$cyqhpQr$(Qb0K?&FrN!u{~BT13I+=8%^!GHU+pw!e>AuFlv6y$ju3#8h~Vs zDQwN^v1u*uP^WN-aAE0{*}eDlDa3zy=o~eqswg8A8w`-;Vh6*+F>(8hR1Hp)%w5$G z?d*poBNau%RR^lkX;% m&b1pyC zU9s99Q*TE^AL%(w!dpEnm421HCIq|7uqjt<+-!29lw59jQR78ovwHN1Ih2-kFrWW% z>`I2BDsm^FEp4*0w>l#EWLJ-n9KUJuEnSK%{J|ogS(8rBxG7s2c{Uzr*+q&z3Y(cq z+}I^)k`BFb17h^jQ#V9ky4Gi@rAfIM7GLu5dy@37`ppr5X4|$t=IDxln1#*;uW#Y_vf%{ze z7NOHut69wXG|W}9zdPQaw;MmPLHVsbJI={{QM4ebzF>s2jFb4qfS`bGD`$1nBhgjy zZZ(~szz#Ad?r=trrk7u!=$&~jo`rCe=;$&KHTa@051pYT2!UCKNqI>M5*mf* zEB*qnRjmyFErUD5E+dYyo@+W1FYoVr2Z~%yq*p`N!MdPqOoW2NdtKf!K(m{w!?LX6 z#&?x@iavP3Gub~f(jKswc&n|e=A|I&tjMf-I?dkL!z5g(lhd9f@4mXmqL6Ed?vFqa z^AK7Qx`wgpgUyM2WBzV#gtcAIw#YT&{40}ADI>@W%Adts-z<>D#vA>NS>Wuv|E~@s zbsiO3I(KUF #a3OMp-GD59OO-{(fAf}>Udl@aKmAAz zFj>A2k~elY!sk&+Jge|-Vox9P^n3R)3LXEARI!D|_gf{`EPz;IPf~;M+gvM7e;zeA z6Of=of#3oLhWoD=58x}sJpvRa8h<|qhkm=8d-Too>eg)w6O7sleXM|b)QVo8t_kT~ z4HKm77 0l{U-R q-KUe%SY zGRmOqAga3K1b_jlUH{5Y$Cvd)FChj&Dm~fvFL9PHj{wYm5&_4M5J9AZoP% znrR=T>_gMTCB;tFU~TneF9dR^$2~GyPGDULSjt+_=bgcH+1wiUiSoW{F Hn;q+X^9^V_Cg7bz``cK6Kp*vR10H?{jVU}G(5K!*&V zHD(17fgE=%+HCy;dhSt7xl a*k#J^yX>I7>di^UN zRx@wpe*r&0z`vV6zlQ)#mJldD#$X~9^HF%MH##5ruIx5Ycm@_`x%b0-WNzDBy3#^u zuic){ mhQzBq?^eUs=%&EUV{d8Qe+4vYP!RR`> *%v+Lt4Ltf=bKw1Ym>;8v$TPYTKy=0%Vi!nT)(Q1m8l z1eU|kv>ubLjkor+2isCc+@8;tBPF-Y<)S+2Uq&nqJN{Z!=?_;f|I kXNz>zv8c53mluYpqCa z{*t$P>TvkYI@BxzKkr3Op7j&|{eWq@fDt%XB5W0`PqggvuLD{@BYhCdfe`i$M2E!G zV~`KuoL&Nmimel}Ch^Q7gcaM-=f+$L!3FmT03iLN4r69hN0Ud@653-+iVnVUY`4d) z;7Dc(3aZM|y*v@%wr_BfV o|8nP{@`hzy;m5H^?Pi$19zDsP zS!(WC*RTJPciDn;?>&xx6|ullCYq)F_X zWNDxh%1}`$7 z<~HQn5L>iz0o1$aq{!+A^& Pbx|x-J~)wH!XMutf67lvsm-MS2OBXsfV!fbuHSjjk7)FHQGDJdfa!&P6m<4y z^0E}AR06gh+>?M-4n4ZFmKD-I1Fj=BHiM&5diUgzX_^u8CS%CSEL3Ip&Timz1r>)a z(0;Iw?38RHmrj5JZ7AU~5y0eUIhn66qlghxEG(U7Z81jTJZm&6^@$?25-eXY84Nc2 zQ{0B01ZrX84)mDK52)tsic4RH{;iZ@grJX1s N44&9<}w8-#jGt#3;F->d!T01_s?`E~jrP6#V0%j=Rh)Dj^?yNCamO z+fjbu=(YOh*-bh I?AXp~`nZ3o zDKF$37ISmEznX6;gF7x^)K;cTnH(UwQGvZ^ZB%d)@Arvre3De~cNEVWI1PE*hSphs zsSzM-8&rRzQZN2%ji6Gqessf?x^?L6rUqMK2f$%IVZabQGxZQCnGmi;$Vmh+F%Fss zXNLcGssp+&T%W5fMhA-%?2EkmPSA{oQFXY9aQ+tY;?55*kHl$4z1rmQJ}*x2p%Asv zdNep6YZIeJ^E$O^KPiWn*Cffyg){L>#eI9O8F853?HX^|dZs@2sg9IVJSkFnr;t?{ zMotV4^uA4==JqX{%@!j4>KcaI>Q)F5NI$z<9albOyFB^dATQ%vN>+)OXVL9&!@^XS zReuDPt_CVnL}B8g1ss;8HvTTLG8`0&w<*%R=E*m??lqTDCCQ5Xjf{c7F7pRyWw+?g zC;`QlpS|l6q1Ta=JQ~Ju$Sfq!Ay?6CnYa&kYEzKB;3^}s>6N(64#cKoY^6E1t{v_V ziMo-(EtEN`V!~ZhCiXBR@ua!iw+C_oS6tR*Y4RJp47aj7-|xcqCMrai92kp*P` u}o4?anGT-w?0r -7 z8o~{u*reWfYH5Xbmf_zeTQYeBkWKxsrk5>7UJurhyC-E}KS!Ewztx{WF0_{GW3Wq6 z*>kPgWCfP*6|0CIrSLLyHNVi7OCZ~XZWqJ$|DN~nrNuv+=M8|ek&twa?Uc4~9@!0= z>-#5r!Ts?LkF{}SxcU }Qadm-IzP<%RU-0eRG`Q>Gk*rQ7wgKUHGQ@? zYql-~mk9&;Z123rMMSQyfeB((p2Eyr)D?9)ydbip!Gt3BJt d{LJW6zz$A8czD$VK;w+vcfJK5kHyf>LtgGhtBAZqVAr;LtKRN{rm+ zSib{^nEnpAy;ZwWX9BjNb+w`+RC?I-<2F!7tr``H?8T0jWV|{5@mWU;+ouZtCQWJ2 zqd?c(Ampn#BkFzAuM}}TW<{1hX2$3FM&+mnNCqCWr$@Bk%ly&4oxb@81->T;cirof z*Ye(v7bYWV9k01Dx$^*kCa40f kNC!Ze zxd2iEMnS$k0lGNN>dvnyq4%^+Nh}4goz>h*#xt?Dt(6co1s|a;N 4t?-k=iFSb%|Kh=sekHZNO(4bjN%c$M;IlV9G)r|kNS2mn& 6xD$}&1s75xBDFA4@^=s`tPWad~i_@{8~Z~qd_TL(FhcK;P}b_C{FlPaN3+5 zM0(pvI16LfqXe2Wjbkef wBU5y-ws(LmOYP3+LsB&2N@E(O)h!-?_>DYE!mFR#Fi4t;Mm`wxx~&WdaIy2F->} zT?aKzxZ`XAgZ1*7`7`oo5dx4xON~!&)kB@*VR5*gM!{OPM*!ae;T -wLb4;#vaw3)d$|ooP`nYd_y3?_a#V$8Ay^)a zLi`y{k*S0zMp)cv_Jyij#b(c-GI%lgkec$2lF^zVuidrU1l!N}bNM$j`B@GsbM)@! z0diPID?+E00*>k_09iT(`4xunkf$g{)8G2@^bm5m*2=x>)(jmu{QCT-Y2O&@hcEB` z5gp84_d`gxp#cHdo4h~O#49o1@FkeJyQJ`gI#(#^019@w$2LuaehfZj4h5MVI5Op_ zL*cWK^vGbW5y`FQ@?@e;JT(wMIj-WyfxfmZQElGsMSOo*Ck#9*bhCydgzG+_zTCfo zf0Rz6>%YIK!mV2Wsh+JRUp_Y57Rx33Qx!3jK6|!Tt8sL$nZl2LyUKzd0%_U3GcBfL zz7n9_TGkCWKua4@%K7iusbfO6d-a@4MQqCen9^DLp~%nX%{|+op~7bUQ9u&G3 {inKD6KsfUYV%E1v;t0TWYPOK6u{tXe8qNc6>JH4meht+cz5-tE1}pSW=Yp+U zQ|j1s!IH?E;h$2L!q;4&Igo+KAw7V_pKj|TqV&U%){fiIKjX$lgYC9~TA N4z?Xlidky)wG>Z{Q;L{AI|3b`*76Z%W&SFH`bYGcB?4XjZ~_S2bhz>nTX z!S4ZG*>zVS`8gn_b=0~yyg>eKZekkFki{c%Rfe*S>p5DeZkH`3Ue@s^4GW1KR+Ld@ zB{huL+0^9!-N+8*$#y*F155|8!;4ssQILN*=?+ewRmnr3>8CQu{j*HY?hk6oOT|)0 zA&_8^qvI27J#}~Lw4bj~5{se7yMMnS?qG7H#f@O ;$kb%PfZ5fq~&y}1DbhbnJp zaV*-6D SlL*;mj>jqFnRMMWyK$Db9-Tp0x#Ka%rz8*H^ZwN>z zRwO;hYuk50|A=bP4Rv3C-=l4H?d9&;TAgm2FE_w`ddgM|#Z_201QzVy&^~E5L&l$T z%oi%;DXGScMCSmX1NG^zCD5`>{}%L~+N#&MNf`y@ga2%YY4PH6)iZEso-Gctf_`1K zmDwasH}YU>XHV$(t+O-;V1$3TG>><1D+RuSd|Nx9>Yjhe@GWz$*8vJmQb)Xh2GHXV zOp)eYr)MDkFgSw%xNwu#;hy|Gg2=<; ^j2 z`1afto |{}C857WNzu695$U^-Y^s?| z80`){II9e2UYI% y2-}fe`PO;pY+-vrtJ{Sb)*au;bo7rRRR1o)CLe5gEXh z1bpzqfU{9X3K-`H9(Zm`b9ZEmg63KJVwN4;F@&C`8ka4d^x|whr=pXv6eEG>?5=fG z8M)jVY-ZA#G(RoSXv>y=L_7bj(EUwgn ctPqz+kGYZOtQ+Vd|G8>a)TZL;v1g;3Rs;M0j&lF5Zvon$~wvv|~?PFZt_qYHwP zj^$R3-UTF>k_*cii&y__h8D!!FC+ikRWT!r_vgK73Lig&2(EiZqj}srNExU4f?TjR zT!U4=@7TD!l&esJ22mWTQ)BtMXktSN<$Cf(ftp2%abJBT9hD^C3hx mY=D~d_GAtJ}B^0D)5 %hl0`Hqj{D2ceg6!{E `3dTB@M2piQZN1%C#=PZ>i3 zAPs^LU}zWE;5ydA=^h;?a}3w_o8L@h?Z`L1BQ*P37r7d+ksS0AB%EvaQrQAKG;8SM zH_2c4W{)P1!Ph&?RuNlAf=wW?je&gH=TnBV1yzoYb~pd?OXf%0Hm~l*QR(?}WJg!P z#BpIJeYz>D!4vM0$H2u!BM0l=wNqlVbYG1I+KM=&&HEGd0VCg>Z;zY_HQUSO~S( z8Au{r^TJvkTxFvV*$ieJj4i{I(Il@3uB(HE7Gid;M@#2(UKMY$#S@|X$?>6CnOBoC zcl2$16$UPLCIoA?J6{xA>)OnVE+W>>R4k5{^ZVQ`N6h&b@nznqS4%B}4QvNcm)e}V z?3;I+vCi?f<`+@CoW%-zgK*(&Q$lQ$ULzvpJUWOljX({GYotE=y=-}mM|zM8w#8X4 zy* v<<_SD z>@n8>Gd`oL8;8(?GkcSnoq?*?Jz+*)ZctN?fSLT+FuwNd`Y<^mID`CnfdlAPvyCj0 z9;|B%N~wSkFT?jT8XG<#s#-6y!)rqvy&zW@ZI1e~+%|@)CEIdLR!FTqP251& k+oB&U`xa7A& z;p|v%tq42PJBz|z=5gzk^0IeE_B3DX!O*5+894A?nCK*BO<*T|V&tT8cHlZFJ7^^L zYko&ykjMkOy)EY!kb!lmvli~#fTtDpQ~wmVX>=+BEXC*tUW3ytXjm*uK3NT&bx~52fiyhGTVK!|MSVD zayZo>KjYz?KsM+gdftPyh2A>%0P9kGEXg4nnhfXw0+3oyd(uy#u Rq56mLJ5nY`s)y#lnoN^x;li 5stAXX)s3^$iFJg zY|xT%qFLz6>qEmp`)K}KDy`m`bVLj=*H*1!x!O3Xd)lSU&kY?+toP)OPHJ58Z|J$3 zXUQ8Tz5xs!fwyE3;nb(5@btJ-mQQ)*TD+x=3rEE0cv)M1ojXSqGwg|v>JvBS)o=*P z!Kj9N4S9kFZ6sCO`Ch4v2&uE1#H^Xp2PZU{%mhmHBSqW-7sgJ=GQ#Y5_ie*Wf}JCG zg}rj} k#z+bkOQkiaq@PEwV;(E`=yeKjn{CbQ>9VG;PLjDg#W=+p}cUGL(t&$%4 z75A3o%Ygh~_@E(hkp7GFbNo-Ut*dKqrPl9yJcg-_;12awjTJtg%qNfq_mnPRbAm9_MrrZvrC7vx%-Sy-E1Ywj8Uo!1PmxqJ~dBL zb8{l<3KJQr^i=Ha0)wPc@6qwGE|2Zz!#Avq!+G?MU1xG?ZRs}(@1Q4qRh2KUfrXEH zKcMzSti(TBf0D$2|B 9q5J27Jlk40o&nw*tl_P{3`h;UVOOiXbpJQtB+ zQI8FSay!3S96ASiqxi`okS`B;zJKAAHlODFmWqt`0pw6Rzei4c`DBvsp|@7wu(Z zl7g5e;Uap68lVhck}DesTlIpi>#Xb1r@#v&kU_QBK<$p&S{4GFxmcs25-|EeZ3x}Q zEpm(2fzMVtl)3m)uUXyBD@&PC29pak?9s&SsbX}YgXxm}T)_jlu8J+SzKq)#^HO^B z;60Y{M~yOnvoD->DQB$&f@59|#Y1EZ;iB)aFZ!L^`WqrLbJkoQsB}j22yzO8$01`fPbr-Gajoc9r^I$}P3X=5Di1F}4E&qOghvcGPn|oQaI+ zFP5f+i$p(^=Q;?ET#{cLT80*-NriQk-R|hsHE^PTO^l9Wn!7xBTrWL6e@AIHhYaF? zjdjf3%Ao^g*F%d|Ya$)eJFplOut`qan4a~pd@d21+pg%rM!2nJv9UXM7o`KHN_o8B zdOxa4hFzqJ!Gj3o*UY_t6EDQL#>M_xC84x-kH6ZqOFY2A3{Y1`&+N&CUtrdQ_F{Bi zy#rceLH!Y?U$PI1&X~Eb7UKhd{mp|(X5T^22VoMtQ^$CMEd6&9`NQ@-b4G=-G1qy4 zvKq-Q7k$p7?S}} St>JgkDSt>$2~8 VCdyzao)Jl zfm3HDC5Qu58!5M_VZdI#ZEY(@(+`ROokkX&-eGlE6o;O^U>emoK5{%DASZ7``?kVF z1Zvh&OGvSSnp~|xkaUA}{XU;hLrn_1M1=Y9NV}XwmQx~+X?=s9#MT2q%<{uYX>j1& zk7&c@Ibak1NsO|x&Qy|DYrcc_#E+?Uy^{m$W{gD_`F@-}>0*E%kKMaaLEjl+-0cv= zQG-0?Z6IF?b!j>|5AxG7LY~@p0tBqHw_X`3C=^Bd7fARH;FcRgh!Etp9kX8gR5i=M zlSp;>3N@)pwJ$(O{``t!n6$;P2VV`*VNdR&X!9e%{`!yf#Bvq4)~zirF;(j0T3i=9 z>x0k*#&*Wi=2Qt#Qfuc8eneG2JIlb&=ui_i@Txce5O&_H&6~L|#!E8JoZ1?UEI4;* zUpdt^ufe@24ewSI&|R~@7JP`&kp=H_wnb_YU@szVC9)iG5li44G~vcyLmXu{l?FKkC3eBLR4$ z%J3>|nKSk*f~0c*h$H{5@e)IG`HU6kD{^f4A%(vPEYt5oHreF-K^Yg0y&f*dSjdBc z1^!Y+NmBu#uI5(ygM$jZH4DVj1o2GtsEn}oV^Z9#{0EXB5STmK#L+~jjt^&zM=~V2 zD=jT69G(g$wy`-vaB)z+xGBM7I{{J|slW>GKhyHuz#*4yoc@)QutX1E k?pONPfll0 z1p!fR6I=pl=|hn^CVd6%CCeuX^ZNWYud5eC^lN4;^O9QJM#DzQKX9(3N%pA@a>3*J z@`>P++~SN{wMkn_OV#LB6rP~&lvY&bpRO1bBA;oUeorJABNJ3|QxVsqx4-(Hl%Utg zeUFJy4{xT5GuR)V31s_86(Q_>xtG&O3_o`;If^#P0FvCqu8Y}2L<_p+!E>g^*hWdn zJL=TFv@>$2m8L|tir{EHCen`jB6OiVhAz4U&do$}!a`<#;p^d*#Pbzuu3{{z-_@Ex z#!u{ADN2Q+vyvb0T&X-!#sD$jvuGbR(?Z&pbx~zgiTiU*^_4hB1N z56@*aweK>yw@oTlOF0@9;!=i6P<7{zFG8kQ-qI};GVO}u7-YfB977;eUFKuV7xA@Q z0$vov %J_k~$!FK5Kj)5tHvYL%CHLlS3CcIg5RtvQU~*+8tg0 zk+pCwx+4Dxd7EquoM@(4F}2B}Z+;ZnDQ#H8!I=P2m8KXa^{?g4!KukXJrBI4p(ly> z_}tNXKYh`Ct^t_tx(CW5tQk
2%hUq${B9BVk;i8B|$ZshyS`Q zOEAm9*|0FeJa=Oi Q`vy~3rIk|uR;)n(A1OIyi@+35h >latup?@yZ^3|2-u_J-9BLl@U{8Z^No| z$?AT?P=9nT(yT&5xJF1ek~p-1sLVI3QwOc ohmK zoYJ|yr((IwBZ}o*Po)D{qOlIi8X+Ne=5r(}Gq3*g0Zj7)UIfu5{1X2JDiLXfqOZ#q z*$DJ3vh+OdMc_+h>iwk%j`bumj^pl~Dqk}8sx|oNoYAFJg*&4NyeI5Di*Wnf{h!kS z{b}m*73E2{cyov{@$acXq1yFa?e0O!=^Zp@nglis0Q`_%si1hf^H~c<`QZ5U(q~a~ zn)TsH6L2!Ci2FeBh>ph$L~2$tdwTrb_gU>^n;1A@^SdVK(t|Iiq#1`hR2+I1zOP=- zGJ6V|z@{yqF<8Kb+yR^> HUiZ!<@D5NQXa3Vv^6JJ@p2z+x9BB$>X zT3er-8>e)q&k8C0d8U-ev;ErLhK%i8Ur4w9vfO`@9d4m#SIN`2!tX}?g4-~T2!-}W zfw->3Y8;IE_G$*@JnfzRzv@#66A8Ym>%gdnsAIHT4pr96 zp5U=S;9i#;+$%wxUXDvILUz*2;g4Aje)ri0=5J5DM)X{#Cw2b1)An~UXS}yfrh+4U zIc{tcF+2Juk=PoGi10bx;_;4DsKY4MP0t6%sISD&2j?! R>cLP*fdRI_@pp;F#D z0M%SGc~w9U#1!m zSqk)X?2 z`YIghs)fYTeQ47?w!qGX-XaqK)&HJ1mYH?f*wp$L5}{`L%N}KKiJ4*oXke#la-6$* zT8YW+c^_ZY1j(B^Pn~CP(f@|<1HdMvePim>M}UJ93{(`&6dx&c_)zoV=Gms~c+hbc zOHP17mcKRgZNK8Q!c9mziP0S&4=5K* 1E&1Dxcj@`tW}kE5T*wzL(Cw9^m_RZYOf09PCcCb64w&_7O6aU}hGyWI?qe zBn9jL#_8dd@g3O*ct3)^!ZgW_x>6Oa2E!WIABX##A0dbc8EDj Aw?aB|7OGmzX7ebl9W~Z~r91){Ta)w?0 z_6|LES_bf>D|_V0-U;{)N?<2qgqzpE0{YbqeArmElyKbMtd6Papn@Jj!B83+cS+LA zzbSkgUTNSR(p|~6=}_qK)G`n2Cw(^OzJzq|j8(W3A#|$IgWqudRsh!vCeLi*>26A# zFsZyklQ3blD+^0C-r`U2{zE9P5NfjQ)ZU1RkNO#WuL+V?%m0f-c`W+~WvjLVrl?)h zW(RG=t#|*R8|P4ww!}CI*&pTsS2Gg(_8{Yv%$^=++QxV|{Cjc@2N83d0DWUr`9{;U zI F&7w zLG$t+8{z@j(85XBxXct2j{k08qrpHeCpLEYUcjPduvBvYf; 8 &Iuuobj2b$fG0?| zpSV*BMm i pIIv1-oNAlJdRw^a+xT^2?^L2s1t6rxIdd(xq* zCRcQ4wS*U#Mg#$bPSd&x$(qq`b{7);RqN*ZFLV;?paGX}&Tz4^cgit I#@bN(?k7v6 zV;R*5B_FM=`Z&5ExqQ~=c0q3`{jhl8=cbZkBULbg#FjSZTJ)@^@ofHMN%lro1Tk zf*Ze0({8umMT^%cjysB6`z7cp1rir!kjnqWm0MYp9x;ocDs@A_5q0XE6rX;aY2yTq zl+Noi5{QX+v4-H3k_uL_huR)StRrkbj&zls5*_sesMPW!^u3!^s%qB4m_dGLES;TU zif$)sE4| IaYPSeeMPBnWwdKjq_EzWnib($;CHsb~?5|ikX;E9RZ@lshE|e8JiGa z?|@`b-S3F9J`5Q&*6vNP3_dr~3_ulza#s8Z@e`g;)TwJmj(##g>c+5~*u0IAMiRT4 z%PwM*|Iu}}A>HM?L O%ps`qRB_VV0oPHvn2h6>0j!b& zq3+p=x#NN&rj#%k?&_A~kjp=IXS5Vh-B0}}{$8hdO!rGDc!-zZbPIXee+iSVL&y)@ zcV;ov9Wxd0`WQg#lQQ;QJBe>p2TkKNdff#ZVJZ)bq|ew!@e07>gB~w2?0>-wy{P7; zG6J v{L0w!sYXBZCv$f`+|QF4zE8 z{rUQQx )|6;l|aj04{5Q&c^qdL!m#LkcXE0>wY72)pP+GiENJk zEu+H|(7#jOla(Szc7ngK+>1G<2AuRvSt>N*h z`&gFVr}t!^e0J_A|D&l?U 0ZFH1nLIk>C4$ekSJPrZ zyz`(1E5)`#UW8L(P |G&ClHB!mn z*O_$$fNRSwU_uK2doVDx-q^;LwExU|@4M+Q5rkE|kUW=gCM;7IFna~)YA|i4kJWLX z-9-&;@gD;xhggk4dpeMp ?us?vxRLO>VNs2|27SsRjts@@EiyzO)wbeQt<_4a6oNw;gJv3woX;f&7{C| ziJ(Q}(n^)5{d{eDL^@E83kYe6Kt+xTqU1NGZBtuMj}&0ym(7 DZGvgvhSiIdMudX|UT z{^*y0dz#xnhd=8Kx)YtoUEt`4!@mJs$)5hDuapPM0V zVpb7&{7H)93WPEg*V1daW4??JoNFlKe!mOU#Sv{qe38^t zO{hw7 <0Jgy0buEk~t% IO3m4Go6nh)no@>b4<^@+MKWKaNk9 zoQ|gQq^JpafO0AAE5nz2I@2?IpDxPXm|-3=*`g&*qU 8cNdvC~wh^tQ{NbhCW{Z{as)LIgt;* zskGZGxhOJ-3Z2b~)46Y_32Rf7&t=)$m@2e;SBsb!s ;>z%QJp1iype`cF%w2z|9T8pvS9CQ!v5DrrH0@@&&^Db5y zzzYFS_xWFfx5?J KQk^R&`Z!*}^8 o{^4Hi9C$ur51O`r(#gs9w*0!G9_j!1Zr(cbvF1htW1ZZWb5Q(J z)j^<#iVEE`S&wCIkb^t;m0-&dDPbC{ViQKES5}E%W<(ir_!PHi< jIpgsa)wIYeIWpRE0ET$lyR_hM%_UsyR z;-=OUsXib9XWRl~I^{$Y0krX^A`H&TAIdyiRoH^4u{*GV4K~S5odJ2! K7Q4lSDG5`Hk&DtvT#?LrOu@Fm~X6y z8(X;&Q)es4hfF!8ZfLHP_na13%W(Hbs3P9M&WfozU%d$Vg8I}$hI`0QT~*Vf;l@P5 zkT0!qaMgInu&q2?`g9`Na-a_=eKvWzN0a`}M6m{a&!rn#G1`Jl1sojwAMflZd+@ev zy6~03EV0XSr7^R73a*|!h4cKwWC@V2ObUON@wR|!boX^N2&g}FlAlmA+2t`fR^#ls z!+3Q;`k*o+9m~UhG|n^ZHX&p!;@*C>jR1)0+2u#CNQ}PMKEgDqQ`+2P|62Vt4c3!h zZ;%hp c%@!U)|*1?=(+MVTW;&7`&FxtKzu`0SE(XQdrRnc z;^Q~rYfc_Kcfvvx52h%y0doRQ22g+nHkqhKz$$fuSP@y=Z&P?H`@ z@{j8=4wqZK_4X!eBSdcFq%TAU=8^D89Ar!_20dhpcj|*IO(?H}L^x(%ZrwOkG2i~u zz^ygflGE){DEOpGWW|s=Dv%(StW@TPD8aIsn T~s#?^2XMuMMIrh##PS z)er&+;;c|RU 72Gu+U&54cYn*B;hxN^Q-AL|vv%3y%E>4@kOBSZa z+x#uOEx1`5R{%)p1(t5u2`PL5ywcD-usl6}N*Qv9qjdSc^=M|%A;4S;q2q#AfGx%V z)pW$1Y1;zKBvbQ(S9KWxH!2W)!IiVdbb=7SQRY~0+Pg;s)e$~Lshe5_bukf3D)sIG zKyz!6)H;`NEcCx~AX!&scq55~zlmop(!rh9Ajg9z+)R3k(va 8z*wiP!v9X)i(a6pL%#4{BqK5O^(C3jogl$1_hr&`ZlqRAWMf?mttxd3Mefu710 zvlZaSG|x0FF6YL?_?i-0Vq;eIjgx_3SOB12t4TFgs#OfEz$SNYKTwJxY@^zne7tsi z>1cg)_*{u1<=)}1;>~H-`&GDta%}PvZ?#8w9MsgVnG$11BVQ2z6#= zJ}@`qe3ffG>4Vd-pT+?HPAZ*j`)xSp7T(WWr8hc2cT+VByNftZ=Tb0FAa8zQ@O$&& z0cadQ$`|~6RwL#dNBaR~@08lf|MJZz9#*@%W2wB#!G?+WEuILmW`2tT7?b5vm9eRDjMX> z__!H@`>is<-}n`d3IexRcL1$ZtAIim0l!hsy8daBMGZq naGWurRziraANjc$t|oM@re_kE^KPD}QypGS zlr*Es&Pj9|7Mc7Ut68-Qi2Ipo8$*dMu^Q^XrVAaz%Q1!P)k-vg*60s~!~qI(nXpPJ zP1>>MNid%cdX`Eu-}R;MBxx!f$uxX0iFvH>fY}K3%j1EP^pY{L=h(I5nQ={l*6w7p zer&Fe<9)Td@=^5K9NN `c~$O7rcF=R68gj9m!qVh}EAyyP&MA zviBmU=p<$5Yb&}#*~&(CRIE=?uH37w_SOGiwEDSCs SJi0=Ity3D6dpa_X$+LT#<~nM4bgRjD|ielUM`06@U0a1D-T!QLjs`sBi|a@ zFY0OZ0G}c@sGTceyd!Ly%vJ|kIHp7BY) sf(Dk|8jO~wrtHtoCQ?Itz03DP;F)$!+=Z`&PlJkWgX=| zXJh1ZO{;Py7(M>UW$OBo&a)iRrU@F=)HGCU343i+v0HP0d1~3gZ&P93QNcvn7;KB8 zMiz0q!4f{Vx3IUFQ8EUFP0M0q2ZeDEskfn0q1jCp%R~U)D^Gk4x`L3 S-8e z%A$!kg5m~*RlMj(Zp%RgeALg;F7~jf0aK6`-UoV+PqhlzD21sod|RO6)Ei$xS~|8E z@@^9`thd+%+ip^in4cn@1X&8viV(J~DxJDq?g=q`zaWG=k1c+Ckw>C^O(d~TnfBx% z-2-L#)NC7os@~k@rPs3TT@#B7I3eMg`Xtaoz7VJ&%tABz!-k?`PTNMs!eis~&Ov#` z2Uv=wyUJWi8-W6>B*j4i$WULX3lIN6XrnMqAk5gVb-i~A(3sN#HVggrX@D2VbQ(cM z*~Tb#fYRvLVKQ>PT;+kxevOh?8oehc?Yt$j6aY0spNKV^wWB{QsYg2r 7vcwE?KW zkvb}^qYgNGwa)>Jz*k+FrQNw_ddZTiz6!9;bTd1Wg+BG17XrT1q&4m^<8=_q?As3Z z$Ce {a3Yb)Faxo~Z>fVekoe6!itw*69qh+ Ex+Q65q=|S_>jp151i)*v)l5L1m z=aI;R6^&iKtzFG-kM^?^zznN}ySw0a^;h#Ed6m87N73X*7K)|dtsLqW32LqDrZ#rZ z4Bhb-im8sQh7OL (chUp{;;sm^t#1@XJ4A(&_EgWE7# zvg?p3)DU$O+?M<*6#{QbIzbdCmTdD`v~-iZ?z1OeMEd8A@azq?E6NUXk)#k}(>kTY zdjAI J%Qebpu}i0M>w=Lry63j^Q+ckX7E*y_d3&Ho~3we;I1 za_SS=Eun+5hK!OfK*$M%W?JzXuP8%9D}5M-J(9yB#DGcUW+MxK3Fu`ad^GOHd79H8 zUb)@orc;4|=|Hm{xS{hgN_g~f*K+5m<_PoYsX6sp{}`4c*8Pje1x4{mmlni_Q}!5_ zwiu`l0fL4Wxa&dl6eKW~=BEMnxCh3^y#gM(gev2m-2dC%CtQ~Z`)s$piZ5x8fn}EM z%}Kgl_@#^vRq(C%C?Qp@xMUN{k8H8n%sEP(0Y2Nf0pj|BP~!fCy|&wN&Up3dzfZ|- zw$3RXnGm>uSHvWSp~e6Wn)1W4zL@FEI`D=AnI>yoPlZw3<_3nKk+`T?d1Xp9p1i8f zaS*CG;dn;A?f_d4gZfB*+cUi* w9=t0B7vSxQLW+i z<~b<|v?HA~`255+=v5ShV*r8&)1*&KM24+`IgVT`1kdqbzxI^P9nJC+G*CYf_wu0> z|7k4-$yvEhMR^c+vKr=*>+e!t?1BLmMtb$x_n>~#)`ZP)@TM@b6iUDG;(sgpsoGsY zBFNDqz+20DVnyTYBX!VMQmU8g^-?_z=i{2Csn9~fWL9dmU{-0b+XQZ1E{_u&*=t{t zp+Zpk+kP9mk+s&(rRaf>r?7!6m!k59QXNLQfdkv~#p-zo13epdtB&W NBvmqHB4`x8wPl7o%6pss1d!L}_TltaxWUNT7MTr*F31Ho`Dwq;d}_ zpigs-#obY0zm|%50|QQf?D4rSpUy&}VU7j@4OezF#3JClpz-LKm70LDsZXj8BEURM zzlH{cLXwXblk?6_X2NRUw)&7QRMfnwU_9%F#U$5+b*I^yWNu_a9gMKi06cG5!7s$j zX*jo4Z-fX{4_b}xzjxz6_Rgd}pwuO}Z0vOYFoX}>vGb8bIL^gD3 ) zt{`>2{sF=nS~8#&Z`9M_5&IJfow9$1R470Mh9xp#Xh+G&BS#QKI;KE#JoPn8!~3Ua zhuU)R?liSX{QCy-YL1)Ic@(UPEv(2+*gAV~`>nZ=3z_m=iZSoPi0~rIGU|nht_jT- z*jEK`uqQzqX?gPo!GX0ZVidUXct Cm-Pwg8O*}vnea2^Xt@h$KMwU9B($!h>U z4zhC3(VHDY@+Gh)&f2ggxZMu0A*FHr3xap~nDX_+WPLOe)gpF3;sv9ujf+vO;j2{U zDBIs2yD8opksos=JakS3$wPu@w?yIW#dmbW+cr@cbk)0d^`R4{e-5j2^@%yCFM)l* zzRG8F^GlQ!#-4d9C1x3S0zst;w>;Di%n5rbul_O~W=Lt_j<8p;*qu&a*F9}>#^GM# zu~2Ih7edXt`WabsiAtI|<8_l=W)tzwiZT~_ns*!TGLl`{F8`-5KM$nL;addNz$>Kj zm3%aOLL6e=nBgD82s=VNi8?ZZ`#AC1J(-{!=@6N~591KP<5BEG$h`l>T8dL9-Gtfh zk~<0u*Z7t}W6AQb*T6>^S4%i*zd6mA>MjI}MB!@n+&A$_S9dD(U`>#jBkbH@q^$Wf z|98hjF*-9bL$eg~$rUCBQ1X}ieXux|b~BS0+aroeC`mr8ei#F`u&*P!Hj4o>mS^7f zkQS}96fBf?Zna(t#zK{E;O2a~+nk1~2-DYpoo7@9!=Y{D6sxMfsR+V4(xW^2&i67b z06y#N2{rGMO9m}Y$=B1x1wA8Q#ND&ue<64RYh -lI z<3XZH^+&7HU;m76h-U%?X%uQlbFi*kj@L%2SA!qW`oL4f(xIPUeilapd@t)G^W1qK z<#u$Zx6ULs@>-*Tdde?o>zV AcH=hxn;}=%E&Ms8`$d^6f8As`n*qz={Y7 zO^~%hfn{Y3re>}5e^v`vAp}$R2-s9?8KRrC^kmrx>UhV(-B8v8QH>NHFga$41W%@; zuBRb_{!?r>xDYgV(@8{%cvpNQQL|Lq1o8ZYouGDuyA}yP1Bt-vE5&yD=cvpiJ!;Qe zs{#-) ?XY^H0?J~AI?ct |kz}&;RaTx_lS09){G8G%vmPsg-Z 2PnT1wie~BJ+3e+%<-6DD!a)iu zLG*UgKE@;=@3OB!Hbd3ILfz!!+lL7y_V!_jPIys*mDU3i=BGrTD|Uxkl1%O$H1WX9 z{7V7D0t3MlW`_M#Pi}*pWu#|6_dqUEbc54{SI`kCt2#vEl ZMByAA~xsV?QP15 zocxdCp2z+3T+h0SNHG %2+GKCp@XQ7ytf!7a!Dk5Rf2leE(X(v913wlnAR7%BRy;h0P?XY> z(%(*724pyfB>e+5Xi!FYQ _4?$1Y1bjrjEJaVfw!pUQeo~z1IU>Vz_g!z=N%veeHT9(fFTfW7A0H90S8}-L zM^!yLu(l#tIcf@oaLe1<^ dqf{hD#-B>Wd!6T2q;Bxv(a=RXyAAP59AmL{;JU>?Ua)4ll%T z3)I`ZZE6P(Zy%$7a-v6&C>IG=>)PRP>ZH?7Oj;KeZg2A>ltztZXy`NnqdALn71S*) z^lc66_)09?5^n`Be$7mNXu?VQoDV|#Pt#}i`Q1gn%MVBeP2Q=_LJGPsft&s?1HKU~ zH||ODzTOb{V}Y@c=T*52XIkK|Mo~kBi`FbV!x9vc&Cq;r2y=yn9l0BL+;^(-nJC2} zqvJj4p!;LGgk;5YN$hlI{nKbk8TvVqzwE_|#dq8qO0QubXCk?eLb1TQxP#ly(Q)`e z)z X&s|`yorLmREoM;+K|_P>}mb?|z`t zd*BMvdyu4Befv@c!{9NkW6GMio->1XsvJaA-`vM4WIp02 h*23XIeN{CrU>)dWvgqTY5&Z}AqO*! 8A zJKAT}ZF~&TM$SFIsms yx*k~>GxW^tAs+lV!9Vo03K@mV)4Y-f5ppL|2&2)%L_mjIU8L<#AS?Iu>MZOn-P zkjsq}+Ds~q8$iN8FZJlE?B93DINJgw2kA4im6%bi(N(4voiXpNBFxI-<2_4?(3)+a z3Q-o@u{sn6Dwl!W@@{NK=`CyZr5#{P*=QZDn?9XHU hq08Jk z& f@i8n+&i_-F8((I|Oxr`9WxoMzOhc6x z*V)XuT~2 vkvA$3=}(SE6{>Ag9KnOgkDIVYlVOSK~I&fe(krRMOWRQux+`*t`N zk&g>I;&nkUA`!Bee3&59;10hLq}*TbiL|&2Qdbpb7pr3?+D?cbvYrNsUrQ^14N9)A zPY0t2)@+CzYV|w>A(ZI8ce=DiT^Bt+Uat-W37v|=0Wq}5dB%j1K;{z~6N?KuJUjz+ zdcT7#uIWq+bOfu8YM7c)EbrB!%;O2M*;bhU{ zmB%@iS-%{xuM3VwzqTcw9^wibpmA?zJ;q+-EE2iTgha8Eh|cPctyfj7m5I~ngI2Ux zMdjt6_!tW7YMo`L8f1!?548<#7Mx;FSCD!Ewsg4C3xzR1eT~ n7&OjcFf@oCU#@0C?eCY!aTK~t={mbc> zA7;)8NZHf+hV)hS92`7h_tfl$ySuUdf+*km^;z48@woSdM%95l8SS#XbP&M`GG?XN zOdD0^It-xGa0O*Wk>&h{IJL&)O5r2j4T^~gmc^-aC@WR3RTVgkDH36YViWzNm5f7F zf0-~e%z+@q<74oopEawtxwuLZg-;F$&nER!#o^#9Ncl*7VJqivb-<}56=qJ;%|BC$ z q4RM)CM{_FCYQt_WUn3(k^g3v4B7ICNg{ zmr?<8>p{Fs&T qWm*afv=CCXOaMI=`>w_?meu=gm#5XLm;66d7+XEoi fti$62eDPC9kk9xW@2raV}3s zxl@2Dw_kf`9n&XC1@6xDJ0?&rufLzK7y&)OuX&09`Zk(N9!{a_s%XLQcKTEjAF|7< zKE$bD*>`Te^4?>uyQ*)EAFB05kx{Zwm|fEiL4IpF!V` *iXzAbJVLG9H*Ya6W#PF!}y%GLT^@$b{K)jM}YL2mJ6EqX10voF-$8s_Xc$m5MS z$bA}%h35T$owo|A6sP|~%Thn1AChCG@9qvetI?M!% xSO}4VLz^Ox zD?1G#U)Aks>RPpTbVb1M_~NI>3>lakla|M2ski#sWM !v+n%#<=6-`N5tUF-Ih^@yKu8@D5BNW!a=DK5@JA``egYMq82kkgei zvEr&|MBGt#t)54!*fVf5>ZoIeh-VU2AgevdNTdKa-Y$%*DtjJzg-~w-h<3b|cAH7M z2W{uBrE6=?_eFdnur8a#LCr19$Qgr0K}$Ulh1$6&8s!4(&^$C@u+8qrb~OsJ=%yDk zow`?Xd0mw)Tv+7}!J@H_wst>RL!gB~5d!6YE^hDT5Y|(K`6>jFb+=LjM=X7gY7X>& zYchnSl`!vc3I~QkA^qB*MRxr(V u40fw-S5 z1Rb Ir%on2Eqw5JGGXhWTs3(n>W~joc64lte9W4Q>QqG7cG>!U1IK7fx&I zt&do)=$7LeBwlXOcm7FiXRr48nrWAUzSa8&2kXpJb$=}twg#qkhyGA8v=_I~1QBBU z5-5?7^hp%xBA4O(h@LJxLnw9#{YHWaxh|{nNJwmwl&VoMr!=(ioRp^~MkENjW~(~i z?0VYTLc-*@Kc!kT9k7W_ZmqIASn+wdnB~y!wgUc+Sgqb!0-Rws7{y6<@7V4(XKc4> zoJAnVWsTI|2l9S%GUdf*ANr}b)em*Lp}jCsUL$}TX5`|}PS~kaI^^(gJy)!yh7*w0 zaUzj>qeq*JqvR>bLQEVfk{U4kqJoG)PUc9`sYkJS#_ZYUk33d_`eSzRreGP0`vqKP zfd>BWV(VGjetqyst>Iz1$><_gk_wuzM1b6{kfw-cRcJX4ijp)-Jy_w`E+w?A(*&=l zZ(&hwbdfSw%a|sV9}OZ&kXxttWjkqY&hNU*SQ$L?=rhEezJ~~tV|p;qcF;*nsRB?c zt(M<=b4hgpPnFRNb@|u<2ple5aQz$`JjcSiS(4=ZSr2dwA^fvjsS60@7LD?FHY4s0 zzh);EkNH9Wqdd>c{>DybBW9TpXBK;tOl=C<|JWc<8f0j)J|AJl;ptWh-${rQgaVru z!s$l-m(_V_Y>dgP!KRVpMcX7Hr-dL 8<=Rf8AlHB0IN#L#VFr@eJCty2 (P*#8n`b|32KXz*r zNd&er{I<`2981G7@5TBK(S{*raOOgw&7xTnlC%L9FF0?AURg)=@L6C?-UADC%k@~a zCQr}|YBd{1yrajZKJY0LpV(cEq=ayg;m<6-$J$uhDA9;`!zu*ZGD0&1n N~bCk}@?&5vRot$tNc5}ZU)x|C>d8CaxUoz~4AX$4*qj RyJJgBx3C Tk=8P(4i3;2dBhCYnn12uqTUVqab*X1wbq_Dnz6G;m zmVxL6IU-=y21@sHz<{}eI#7?Dh_om_2Qq}cG;UmzJ7>LUH>>#$Sig<>8WRkG8|5Ey z@0Dt*TMye9WYurd9%>nXnKaR~U_;{uC^n<6t&A_LK~a^*e1{v?-U&P0;E9-i7Y;s0 z51bPHvjZ1bd^aYHM7?*T0Yq4N|J1i{S&v9DOy%t>q`iPBWz{H2Ah%Hmdj!hu33lo* z7oAC7r36WgZ-N_5j`c>BB}I~fi1=1 N^7TimsUN!A<1Z!yfPaeIf46War4@GfBv(zK{AMIbe+^+a*5f^CXkVGjC-z%CVBv z> f}Pj kp%J^pWn4s; z>C-`Sh59a?4($7lx=>e@c-R_YL%}TM2wg016OcAsbWcP0BlZT*#VYl<(vpek7*6g< zuz2 Yj%;P4=d6c=w9dihNiLhPYGJa&JPkDP_Rp6=TQF~xbTL{X zAt_UxJ%HU-4XE=N94d;QmfBtz<-h~62!yYok|A6lgq^o0U>l-yP!eIzm*+po_y;Nx zVo;ziy6aBS6desqiAy%|wgg%UtP@;&f48Xk&!$r+`4)0{l()|4RYfjW?SjG-!gjVI zdg@QzbYt7a$!84{2SOyzw=^Kztp$-k%u~4Q!%h&RTDKU)dYY5iydoJ#McCss*pHmk zY;QoZpgi$87x!2%4RVnMC_2gZt^Kd!ZBG}GoV01<5r| z0cI~4;hqloFn8|Tn|MFP1!&=?@2%O4s0;&0jX%hU- zFyYATndqeYMmgr3f3~<@%w*pHDD|uoKmuWRwL>#2C@c-26P}w0KMLMz`BD5xYNdfG zs3az$86lC6K`nCd#q&15HCax)lD!DXi|d}4P_z_7fyN~AJx%*rWk%uno=DF)eJor^ zHdpxLBJS_TuYA!zjO9rGjrA;1H+y(X#6M?`L6vt$1$;({^>jW8I@H^^!$f(OPd@(< zdylpBA$Ut*fEK%B*uqp5J*2BesAj2EF|Y8w`n1Fj6jDrMHXq_0fG$ DSA57c{WgL*Ho*@MgPCyLM)wHn} zT$H?062#(oDS&=uoiS!q(oXP{q>B-^>1q4K_*R7~aQW&n>>Mk3IXg `i!!-LWs`E2ve*Bd$sM3WZtzQD}n|Y{rCVaiu|{5Imv8 znEQ(P!vrqfsfXH45fBs=ErhB<<7lchMKZLXD$(?=#0|8;MQ@Y+Y9pYbJhmze)kZrE z3{5Gb_`w_+LZ#~y{O_rTrQ{`Q$VJ^mv=of&lJ59x*bB>EdBv!1eGx#r^m@hoUpx`& z)%gh*gfy7uaSQ@SnpmlClWWXm6%z*2b5%^oR{!Ef13~coio`{b<|gXbx;SfG*`>{G zloJVF)so&Q0a>upKPTVWkSIev3;p3L_9FfB8xk(qcT=bYr&^7!sCJ_yntUg4C@}fS z9m`gO;UKs)pT=$eI|2%nFO?9y+>4g;X(wXS!B*Jv7iY88A1aPWI$>dhrVZGc!3q~* zDs$}yW(ZxE3s$!h|Mk*vVic0zGX8!3qQPTZS3OSad3^ Ao6NgflZk-}W=};LL|SsrZnEMonf1g;GVnO`$rCuvAnOF0t*9(wwZzv z@r&wIe(xr_wY1t1j`~REhUrYcN}p2urPnK(ZN;j^LJKTcglS0}Baq}|^y`5C(nIzK z>O9q>GsdRVOJF)Hod9~BqdkCjzg$fxdZo81#FW@}GY^i%kNQZiN$orkU=R8XPGV~D z4jp2W=bMNrUx5^VUS8iu;Us)$#%L99Jp2+RWIoR~JaRR@qJ>`5*Gc2<$IQScSC^d; zSc@tJ%H~d%5E1hH40h`3!C^yRux$dtBh%W`3sk}4_Zaf=<(@7C*Y_9-9wdbYC5qpj z%=e={>o%!ab&*HBng=v?d39r7@w)@CnE?lvpy-D2)|J0_(==b2t4iJNNnfS }lllf}KBit`EQ|Kt5MQwbq$TN@?S@fl-nTZ5;TJ@+_qQVM%=sk%mSX#e} z+o)$JU))u-49%|qWOQ&6H*8*J@)Lsq-JI3#l8?Y2T67{UPIsgM@l_Mv0;lk%V@)v9 z1o7JyO&YpYl8J?{i+$m4>#|-8TS4MBnUPhiS==Hz2#1g^38 CT$eh^$QUUs zX08>b@k71T12;VOI~jvfM)D`=1P?}3N(_r>m@*BcKwErQ>=^yl5{o!4*;7z#7QfC} zA1sBr#GB+G@49* x5Zh^Rg%-6>Nan&;}Y131c3v`-e3wtwN#Nn)_ zkDU3UVr*3l7~kuHY&pb6^|W8R&TAZ0nrHCWH+q80VcL{rpfS{BR1=4j{^do3wi)MR zK|?0zZg>NQ!irJ7mSm+oH+zgxX`eO-Ifuf^P&wUKZig)xCZs<~rq}|_ErmOS!0A^| zD$xz)N3w7|9ysL(?$h}J)CR5zZ?`ZcSWR!={$tT7yn79bmNpXO6f6T$33Epv3QxRn z3J0_M4W-#~DLlG#rcx5jpAi{;PKOvC!cF=CroJ4*`7P2?fjJ7_Pt&vcO1{{}0xOjO zDQa}19voF}Bbh)Orl=re*ptuop{?Ru(pa{tY5}vUz7R&Q Q0<{eloWYQ`aJ<2#A x3}FokwOb@9W~_) bmixf@bGDq5% z43L3T5$Rqc0V;BXScFjK5%@7JH63cM#eaE|bi0EzsRM4mdTP%kxLEC+W^%05N0@}o zucTs>SI#g!?gxh)6F2eIv$xg0Ghw&(-&O%dtb;U6Fpn6e^T`Z?qE8QmB5Oxze*8GP zaB_tBv?g>fq&cftoq!nAHBJG(^jOIa?O2yme0hl;MZY2*E`4Kfi#&S%tJp2k1x8%} znepu44#H* Dwu0T?@ffe?BJ z>}&OE`E764p