aboutsummaryrefslogtreecommitdiff
path: root/admin
diff options
context:
space:
mode:
authorUMTS at Teleco <umts@teleco.ch>2025-02-14 03:12:25 +0100
committerUMTS at Teleco <umts@teleco.ch>2025-02-14 03:12:25 +0100
commitf402e0c96a52c73ab390b76f637af3ccde6ac8b2 (patch)
tree01cfbe1cf5d2a7864f38d3cf0a42c43dd3899c96 /admin
initial upload ... somewhat cleaned up and "less" swearing included
Diffstat (limited to 'admin')
-rw-r--r--admin/.DS_Storebin0 -> 6148 bytes
-rw-r--r--admin/assets/.DS_Storebin0 -> 6148 bytes
-rw-r--r--admin/assets/svg/.DS_Storebin0 -> 6148 bytes
-rw-r--r--admin/assets/svg/teleco.svg242
-rw-r--r--admin/backup_database.php37
-rw-r--r--admin/index.php110
-rw-r--r--admin/tools/edit_database.php361
-rw-r--r--admin/tools/edit_row.php80
-rw-r--r--admin/tools/manage_files.php222
9 files changed, 1052 insertions, 0 deletions
diff --git a/admin/.DS_Store b/admin/.DS_Store
new file mode 100644
index 0000000..e7b14c9
--- /dev/null
+++ b/admin/.DS_Store
Binary files differ
diff --git a/admin/assets/.DS_Store b/admin/assets/.DS_Store
new file mode 100644
index 0000000..5c248b5
--- /dev/null
+++ b/admin/assets/.DS_Store
Binary files differ
diff --git a/admin/assets/svg/.DS_Store b/admin/assets/svg/.DS_Store
new file mode 100644
index 0000000..5008ddf
--- /dev/null
+++ b/admin/assets/svg/.DS_Store
Binary files differ
diff --git a/admin/assets/svg/teleco.svg b/admin/assets/svg/teleco.svg
new file mode 100644
index 0000000..1cbb190
--- /dev/null
+++ b/admin/assets/svg/teleco.svg
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 437.8 368.6">
+ <!-- Generator: Adobe Illustrator 29.1.0, SVG Export Plug-In . SVG Version: 2.1.0 Build 142) Yea i know this logo is partially made from a png will fix someday -->
+ <defs>
+ <style>
+ .st0 {
+ fill: #d22627;
+ }
+
+ .st1 {
+ fill: #010101;
+ }
+ </style>
+ </defs>
+ <g id="Layer_2">
+ <g id="Layer_2-2">
+ <path d="M85.3,28c-.6,0-1.7.3-1.8-.3.8-.4,1-1.7,1.4-2,1.2-1,3-.1,3.2-2.3,0-1,2.4-1.3,3.2-2.1,1.8-.2.5.8,0,1.1-.8.4-2.2.4-2.1,1.3,1.2,0,3-.5,3.9-1.2.1,0,1.9-1.7,2-1.8.2-.4-.3-1.1-.2-1.2.2-.2,4.9-2.3,5.3-2.4,1-.3,2.1.8,3.3.6l-.6-1.9c14.7-5.6,29.5-10.8,45-13.6,125.2-22.8,242.2,67.7,250.8,194.5,2.3,34.5-4.7,69.2-18.6,100.8-1.5,3.5-4,6.7-5.2,9.6-.9,2.3-2.3,5.6-3.6,7.6-.5.7-1.2,1.1-.8-.2v-3.5c0,0-1.9,1.2-1.9,1.2l1.9-5.5-3.1,3.1,1.3-5.5-3.4,3.7-.3-2.5-4.3,1.2,1-5.5-4.4,4.9c-2.3-2,.1-4.6.4-6.8-1.3.8-4.3,6.6-5.9,6.1-2.2-.7.6-5.9.4-7.4l-3.1,4.6c-4,4.3-4.6,1.9-4-2.8,0-.6,1-1.9-.3-1.9-.4,2.2-4.7,9-6.8,5.7-1.2-1.9-.2-2.5,0-4.2,0-.6.3-1.7-.6-1.6-.2,2.3-5.5,9.5-7.4,5.7-1.1-2.2-.1-4,0-6.4-1.6,1.3-2.3,5-3.9,6.6s-4.3,2.3-5.1-.5c-1.3-4.1,1.4-11.2,5.1-13.6,4.8-3.1,4,4.9,4,7.5,1.1-.9,1.8-5.2,4-7.2,4.6-4.4,5.4,2.4,4.7,6l2.2-4.3c1.5-1.5,2.7-3.7,5.2-3,1.2,2.3.4,3.7,0,5.9-.1.6-.4,1.7.6,1.5.7-2.2,1.9-5.1,3.8-6.4,4.5-3.1,3,3.7,2.4,6.5l2.2-3.6,3.1-3.1c2.6,1.8,1.1,3.7.9,6.2l3.7-4,1.5-.3v5.6c2.6-2.3,2.1-5.4,2.8-8.6-3.9,3.1-3.9-.4-3-3.7-1.6,1.3-5.8,7.6-6.2,2.1,0-.9.6-3.4-.6-3.4-.8,2.2-2.5,5.3-5.3,4.9-.4,0-.7-1.3-.8-1.7-.2-1.3.1-2.8-.4-3.9-1.9,2.2-5.1,8.5-7.5,3.7l-.9-4.4c-.4,3.9-6.9,9.7-8,3.3-.2-1.3.8-3.2-1.2-2.8-.4,3.5-6.1,8.7-8.2,4.1-.7-1.5-.2-2.8-.7-4.2-1.8,2-2.1,5-4.9,6.3-4.3,1.9-4.7-1.4-5.7-4.5-.2-.6-.1-1.4-.9-1.2-.1,4.4-6.2,10.5-9.6,5.4-2.2-3.4-.8-11.6,2.6-14.2.5-.4,2.7-.9,1.6-1.8-.2-.2-1.3-.3-2.2-1.2-1.1-1.2-1.3-2.7-2.4-3.8-.8,1.3-1.2,2.8-2.2,4-3.7,4.8-8.3,3.5-10.5-1.9-.9-2.2-1.5,1.3-1.8,1.9-1.4,2.9-5.4,6.1-8.6,4.6-5.5-2.6-5.5-12.4-1.5-16.2.9-.8,1.9-.2,1.5-1.8-2.9-.3-4.3-2.9-5.8-5l-1.9,4.3-3.4,3.7c10.2,1,7,20.1-2.8,17.8-5.2-1.2-5.7-10.1-3.6-14.1l4-3.7c-2.5-.1-5-1.8-6.4-3.8-.6-.9-.6-2.4-1.5-2.5-.2,7.9-8.6,13-13.9,5.4-2.9-4.2-2.1-11.4,2.3-14.5-2.8-1.5-5.6-2.7-7-5.9-1.4,1.8-1,3.6-2.5,5.6-2.4,3.1-6,4.3-9.6,2.6-3.1-1.4-3.9-4.4-5.5-7.1.3-4.7,0-7.6,3.8-11.1-3.5-.4-5.5-2.6-7.7-5-.6,1.3-.8,2.8-1.5,4.1-1.5,3.2-3.2,3.3-5.7,5.1-2.6-.2-4.7-.4-7-2-1.8-1.2-2.8-3.4-4.1-4.9.2,4.9-1.2,10-6.7,10.9-7.8,1.3-12.9-9.5-8.6-15.6,3.5-4.9,10.8-3.9,13.6,1.1.8,1.4.8,2.5,1.7,3.5,0-1.9-.7-3.2-.4-5.1.4-2.9,2-4.9,3.6-7.2-3.9-.5-6.1-3-8.6-5.6.9,10.1-11.8,13.8-16.6,5-3-5.5-1.9-10.1,2.5-14.4-4,.4-7-2.2-9.5-5l-1.1,5.1c-2.9,5.9-10.4,6.8-14.7,1.9-2.9-3.4-3.5-9.7-.8-13.2l2.8-2.5c-3.2.2-7.7-1.6-9.5-4.4-.9-1.4-.5-2.2-1.5-3.1-.2,4.7.8,7.9-3.5,11.1-8.7,6.5-17.8-6.6-11.6-14.3,3.7-4.6,9.8-4.2,13.3.4.9,1.2.8,1.9,1.8,2.8.2-4.4-.8-8.3,3.2-11.4-1.2-1.4-3.3-1-4.9-1.9s-2.6-3.2-4.3-4c1.8,10.5-12.1,15.4-16.6,5.6-2.2-4.8-1.4-9.6,3.1-12.8,5-3.5,9.2-.9,12.9,2.9-.4-3.6.7-6.6,3.2-9.2-3.2-.5-5.7-2.3-8-4.4,0,6.9-7.7,12.5-13.9,8.4-5.2-3.4-5.3-11-1.5-15.5.6-.7,1.7-.7,1.9-1.6-3.4.3-8.1-1.1-8.6-5l-1.4,4.5c-1.9,5.8-9.4,9.4-13.8,4-6.2-7.5,4-19.9,11.6-13.8,1.1.9,1.2,2.3,2.4,2.8-.6-4.1,1.8-6.7,3.8-9.8-3.4.3-5-1.8-7.4-3.8-.6,5.6-5.4,11-11.4,9.6s-5.9-10-2.2-13.8c.9-1,2.6-1.3,3.1-2.7-3.1.8-6.1.7-7.9-2.3-3.2-5.4.9-8.8,4.4-12.5-5.3.5-8.1-.7-7.3-6.5.5-3.5,2.8-4.8,5-7.1-7.4,1-8-4.6-4.2-9.6l3.1-2.7c-9.2.8-6.2-7.1-1.1-10.8-1.6-.8-4,.6-4.3-1.9-.5-3.8,2.2-6.1,5-8-.4-.9-1.5.2-2.2.3-2.9,0-2.6-2.5-1.4-4.5.9-1.6,2.9-2.6,4.3-3.8-1.1-.7-2.8.3-3.7-1.3.9-2.7,2.9-4.4,5.6-5.2,0-1.6-3.5.5-3.1-1.6.4-1.9,2.5-2.5,3.7-3.7-.7-.9-.8-1.1-1.9-.7-.5.2-4.6,3-5.4,3.5-.2.1,0,.4-.1.5.6,0,3.2-.4,2.5.9-1.1,2.2-5.1,4-7.2,5.2-2-1.3.4-3,1.6-3.9,1-.8,2.2-1.5,3.1-2.2h0ZM97.6,23.2c.2-1.2.9-.4,2.1-.7,1.4-.4.8-3,.1-3-1,1.6-2.1,2.7-4,3-.2,1.1,1.1.6,1.8.6-.2,1.1,0,2-1,3.1l-3.4,2.5h2.7l.7,1.3c1.6-1.1,1.8-3.6,4.1-3.7v-.6c-2.2.2-1.5-1.9-1.9-2.5-.1-.2-.8,0-1.2,0h0s0,0,0,0ZM123,23.4c-2-.3-4.2,0-4.3,2.4,2.8.5,3.1-.1,4.3-2.4ZM109.2,30.7l1.9-2.7-3-1.6c-.1,1.7-1.9,2.3-2.6,3.7l3.6.6h0ZM123.4,33.3c0,0,.4-1,.7-1.5.4-.7.9-1.2-.3-1.5-1.9-.5-2.9,1-4,2.1.7.4,3.2,1.2,3.6.9h0ZM100,31.9l-3.7-1.3-.6,1.5-3.8,3.3c2-.2,3.4-.1,4.9,1.3,0-2.2,2.1-3.2,3.1-4.9h0ZM112.3,35.1l-3.7-1.3c-.1,2-2.4,2.6-3.1,4.3l4.3.6,2.6-3.7h0ZM137,36.5c.9.4,4.4.7,4.3-.9s-4.1-1.1-4.3.9ZM100.6,39.3c-1.6,0-3,.2-4-1.3l-4.7,5.5c2.2-.5,3.2.9,4.9,1.3.1-2.5,2.6-3.6,3.8-5.5h0ZM124.3,38.4l-2.2,2.7,2.8,1.5,2.2-2.7s-2.8-1.5-2.8-1.5ZM113.5,43.7l-3.3-.6-2.9,3.3c0,.7,3.9,2,4.3,1.6l1.9-4.3h0ZM142.3,44.7c-.9.3-2.3,1.9-.7,2.4,1.1.3,3.4-.7,3.4-1.5s-1.8-1.1-2.7-.9h0ZM100.5,49.1l-4.3-1.9c-.2,3-3.3,4.1-5,6.1,2.5-.7,4.1-.4,6.2,1.3.3-2.2,1.9-3.8,3.1-5.5h0ZM130.1,49.4l-3.3-.6-2.3,3c1.4.3,2.8,1,4.2.6l1.3-3h0ZM115.9,54.2c-1.7.2-2.9-.5-4.3-1.3l-3.1,4.9c1.9-.2,3.3.3,4.9,1.3-.5-1.3,3.2-4.3,2.5-4.9ZM149.2,56.4c-4.5-2.4-5.8,3.6-1.6,2.4.8-.2,1.3-1.7,1.6-2.4ZM101.6,59.6c-2.5.7-3-1.8-4.9-1.9.9,1.6-4.1,5.9-3.8,6.1,2.1-.1,3.9.7,5.5,1.9l.5-1.7,2.6-4.5h0ZM133.7,61.2c-1.3,0-2.4-.4-3.4-1.2l-2.8,3.6,4.3,1.3s1.9-3.7,1.9-3.7ZM170.1,64.6l-2.5-.6-.6,2.5c2.1.8,3.3.9,3.1-1.8h0ZM115.7,71.5c.2-1.8,1.6-3.1,2.5-4.6l-4-2.2-3.4,4.9,4.9,1.9h0ZM153.4,69.4l-3.1-1.3-1.3,2.8,2.8,1.5c.6,0,1.9-2.7,1.6-3ZM104,72c-2.3,0-3.9-1.1-5.5-2.5.2,3.2-2.9,4.4-4.4,6.8,2.6-.2,4.3.9,6.2,2.5.3-2.7,2.2-4.7,3.8-6.8h0ZM137.3,74.2c-1.1.5-3-1.2-3.4-1.2s-3.2,3.9-2.8,4.2l4,1.2c.6,0,2.5-3.9,2.2-4.2h0ZM121.8,79.6c-1.9,0-3.5-.8-4.9-1.9-.1,2.5-2.6,3.6-3.8,5.5l6.2,1.9c-.4-2.5,2.2-3.4,2.5-5.5h0ZM174.9,81.9l1.3-2.2-2.8-1.5-1.5,2.4,3.1,1.3h0ZM158.8,83.6c-2.8-.6-4.2-1.4-4.9,2.1l2.8,1.5,2.2-3.6s0,0,0,0ZM106.9,85.6c-2.2,0-4.1-1.2-5.8-2.5l-1.9,3.7-4,3.7c3.4-.3,5.6,0,8,2.6-.3-3.1,2-5.2,3.8-7.4h0ZM142.1,89c-1.5-.2-3-.7-4-1.9l-2.8,4.9,4.9,1.3,1.9-4.3h0ZM126,94.4c-2,0-3.5-1.1-5.2-1.9-1.5,1.8-2.1,3.8-4.1,5.2.8,1.2,2.3.9,3.5,1.4,1,.4,1.4,1.6,2.6,1.4l3.2-6.1h0ZM181.5,95c-2.6-1-3.3-.9-4.3,1.8l2.8,1.2,1.6-3h0ZM110.5,100.5c-2.8.1-4.8-1-6.4-3.1-1.3,1.3-1,3.4-2.6,4.9l-4,3.7c3.9-1.2,6.8.1,9.2,3.2-.4-3.6,1.7-6,3.8-8.6h0ZM164.2,99.7l-4.3-1.3-1.3,3.7,4.3,1.3,1.3-3.7ZM146.9,105.1l-4.9-1.9c.3,1.1-2.8,4.7-2.5,4.9l5.5,1.9s1.9-4.9,1.9-4.9ZM204.8,110.6c.9-1.9.6-3.5-1.8-3.7-1,2.4-.5,2.8,1.8,3.7ZM130.1,110.5c-2,0-3.9-1.1-5.2-2.5-1.1.8-1,2.2-1.7,3.3-.8,1.3-2.4,2-3,3.4,3.1-.4,5.2,1.4,7.4,3.2-.7-1.7,3.3-6.8,2.5-7.4h0ZM184.8,111.1l-2.2,2.7,3.4,2.2,1.5-3.3c-.1-.6-2.1-1.7-2.7-1.6h0ZM170.2,117.1l-4-1.9-2.8,3.9,4.9,2.8,1.9-4.9h0ZM152.9,122.5c-2.2.2-3.6-1.7-5.5-2.5-.1,2.4-2.7,3.8-2.5,6.2,2.2,0,3.8,1.4,5.5,2.5,0-2.3,1.7-4.1,2.5-6.2h0ZM230,125.1c1.1-2.7-1.3-4.2-3.1-1.6l3.1,1.6ZM135.5,127.9c-2.6,0-4.3-1.2-5.8-3.1-1.3,1-1.1,2.9-1.9,4.3s-2.8,2.1-3.4,3.7h3.3c0,.1,5.3,3.2,5.3,3.2-.6-3.3,1.9-5.3,2.6-8h0ZM209.1,125.5l-1.3,2.1,2.8,2.2c2.4-2,1.7-4.4-1.5-4.3h0ZM194.1,130.9c-1.4,0-2.5-.9-3.4-1.9l-2.2,4.3,4.3,1.9,1.3-4.3h0ZM176.2,135.7l-4.9-2.5c.2,2.2-1.7,3.6-2.5,5.5,2.1.2,3.7,1.6,5.5,2.5l1.9-5.5ZM251.5,140.1l2.1,1.3c1.8-1.3.8-2.6-.6-3.7l-1.6,2.4h0ZM158.9,141c-2.4-.2-4.2-1.9-6.1-3.1-.3,2.6-2,4.6-3.2,6.8,1.1.2,2.5.6,3.5,1.1,1.2.7,1.8,2.1,3.2,2-.4-2.8,2-4.5,2.5-6.8h0ZM236.6,141.8l-3.1-.6c-1.2,2.5-.1,3.3,2.4,3.7l.6-3.1h0ZM218.7,146l-3.7-1.9c0,1.5-1.2,2.5-1.9,3.7l4.3,1.9,1.3-3.7h0ZM200.7,150.1l-4.9-1.9c.1,1.6-1.1,2.8-1.9,4l4.9,2.8,1.9-4.9h0ZM174.1,158.5c2.3,0,4.4,1.4,5.8,3.1l2.8-5.8-5.5-3.4c-.2,2.4-1.9,4.2-3.1,6.1h0ZM277.2,158.2c-.2-.8.7-1.5.6-2.1-.2-.9-2.1-1.3-2.4-1,0,0-.5,1.6-.4,1.9.3.5,1.8,1.7,2.2,1.2h0ZM259.3,161.8l1.2-2.8-3-1.6c-1,2.2-.2,3.1,1.8,4.3h0ZM165.5,160.2c-2.5,0-4.7-1.5-6.4-3.1l-4.1,7.4c2.9.2,5.3,1.5,7.1,3.8,1.3-.9.8-2.4,1.2-3.7.4-1.1,2.7-3.8,2.2-4.3h0ZM242.6,161.6c-1.4-.2-2.1-1.7-3.7-1.3l-1.2,2.8,3.6,2.2,1.3-3.7h0ZM223.4,170.1c-.4-1.3,1.4-3.2,1.3-3.9-.1-.6-3.7-2.9-4.2-2.2l-1.9,3.3c.6.6,4.4,3.4,4.9,2.8h0ZM206.7,169.9c-2.1,0-2.9-2.4-4.9-2.5l-2.5,5.5,5.5,2.5c.2-2,2.2-3.4,1.9-5.5h0ZM189.4,174.7c-1.6.8-6.1-3.8-6.8-3.2.4,2.8-1.9,4.6-3.2,6.8,3,0,5.2,2.1,7.4,3.8,0-1.8.6-3.6,1.4-5.1.4-.8,1.4-1.1,1.2-2.2h0ZM298,176.3c.7-1.9.8-2.4-.9-3.7-1.9,1.6-1.8,3.4.9,3.7ZM280.4,174.3c-1.9,1.6-2.1,3.6.6,4.3,2.2-2,1.4-2.6-.6-4.3ZM172.1,180.1c-1.3-.3-2.8-.7-3.9-1.4-.8-.5-3.4-3.8-4.1-3,.2,2.3-.9,5.4-2.5,7.1-.8.8-1.9.6-1.9,1.5,4,.3,6.8,2,9.2,5,0-1.7.3-4,1-5.6s2.2-2.1,2.2-3.7h0ZM264,182.2l1.2-3.3-3-2.2-1.9,3.7,3.7,1.9h0ZM241.8,183.8c1.5.2,2.9,1.5,4,2.5l2.1-3.9-3.3-2.9-2.8,4.3h0ZM230.6,185.6c-1.6.4-3.7-2.8-4.6-2.5l-2.8,4.6,4.6,3.4c1-.8,1.1-2.1,1.7-3.3.4-.8,1.5-1.1,1.2-2.2h0ZM210.8,196.5c-.2-2.2,1-4.3,2.5-5.8-.8-1-2.1-1.2-3-1.9-1-.8-1.6-2.3-3.1-2.2-.2,2.4-1.9,4.2-3.1,6.1,1.1.1,2.4.7,3.3,1.4,1.2.8,1.9,2.5,3.5,2.4h0ZM196,194.5c-3.1-.3-5.1-2.6-7.4-4.4,0,3.3-1.6,6-4.4,7.7,1.2,1.4,3.3,1,4.9,1.9,1.4.8,2.2,2.7,3.7,3.4,0-3.3,1.5-6,3.2-8.6h0ZM300.9,197.3l1.1-2.8-2-2.2c-2.7,1.9-1.5,3.5.9,4.9h0ZM283,194.1c-1.5,2.8-1.9,4.1,1.5,5.6,2.6-2.2,1.6-4.9-1.5-5.6ZM268.1,203.2c-.1-1.6,1.1-2.8,1.9-4-.7-.4-3.8-3.4-4.3-2.8,0,1.8-1.9,2.7-1.9,4.3,1.9,0,2.4,2.6,4.3,2.5h0ZM248.4,198.7l-2.5,5.2,4,3.4,2.8-5.2-4.3-3.5h0ZM236,205.4c-2.1-.4-3.9-1.6-5.2-3.1-1.1.8-1,2.2-1.6,3.3s-2,1.5-1.8,2.8c2.2.5,3.9,1.3,4.9,3.4,1,2.2,1.5-1.6,1.9-2.4.6-1.4,1.9-2.4,1.9-4h0ZM219.3,209.5c-2.6-.4-4.7-1.9-6.4-3.8-1.6,2.7-2.4,5.2-4.7,7.4,3.7.1,5.8,2.5,8,5-.4-3.3,1.6-5.9,3.2-8.6h0ZM329.2,210l-1.1,2.1,2,2.8c2-1.3,1.9-4.7-.9-4.9ZM317.4,216c1-2.6,1.6-3.5-.9-5.6-1.6,2.1-3.3,2.9-.7,4.9.5.4.6.9,1.5.6h0ZM302.6,218.3l1.9-3.9-3-2.9c0,1.4-.9,2.4-1.8,3.4l3,3.4h0ZM283.4,218.1c1.5,0,2.3,1.6,3.4,2.5l2.8-4-3.3-3.4c-.3,0-3.1,4.6-2.8,4.9h0ZM271,224.2l2.5-5.2-4-3.4c-1.4,1.4-1.7,3.4-3.4,4.6l4.9,4.1h0ZM257.5,221.6c-2.5,0-3.3-2.9-5.5-3.1.4,1.4-3.9,5.6-3.1,6.1,2.4-.2,3.5,2.4,5.2,3.8l3.4-5.9v-.9h0,0ZM241.4,225.2c-2.9-.4-4.6-2.8-6.8-4.4.2,2.9-1.9,5.1-3.8,7.1,1.1,1.3,3.1,1.5,4.3,2.5,1.1.9,1.2,2.3,2.4,2.8.5-3.2,2.1-5.4,3.8-8h0ZM341.3,234.1c2.8-1.6,1.3-3.3.7-5.5-3.1,1.7-.9,3.1-.7,5.5ZM351.2,234.9c2.8-2,2.5-3.3,1.3-6.2l-2.4,2.8,1.1,3.3h0ZM330.2,235.9c-.6-1.7,2.1-2.9,1.9-3.9l-2.1-2.9-2.8,3.4c.4.6,1.1.9,1.5,1.6.6,1-.3,2.2,1.5,1.8h0ZM317,229.6c-.5.9-2.9,3.2-2.8,3.9l2.7,3.5,2.7-4-2.6-3.4ZM303.6,239.3l2.5-5.2-3.6-3.5c.4,1.7-2.7,3.6-2.5,4.6l3.6,4.1h0ZM288.7,242.3c0-2.4,1.8-4.1,3.1-5.8l-3.9-4-3.5,5.2,2.1,1.6,2.2,3.1h0ZM273.3,245.2c.2-2.6,1.9-4.3,3.1-6.4l-4.9-4.7c.4,3.2-3.4,4.2-3.8,6.7,2.8.1,3.7,2.9,5.5,4.4h0ZM386.9,242.6c1.2-2.2,1.4-3,.7-5.5-.9-.1-1.1,1.6-1.2,2.2,0,.7-.6,3.4.5,3.4h0ZM261.6,241.4c-2.6-.3-4-2.8-5.8-4.4-1.1,1-1.1,2.4-1.9,3.7-.9,1.3-2.7,2.2-3.4,3.7,1.9-.3,3.1.9,4.6,1.9l2.7,3.8c-.3-3.6,1.5-6.1,3.8-8.6h0ZM339.2,255.7c-.2-1.5,2.4-3.7,2.4-4.6,0-.2-1.7-3.9-2-4-.7,1.6-1.5,2.9-2.8,4.1l2.4,4.6h0ZM328.1,256.2c1.4-3.9,4.5-4.6.4-8.6l-3.4,4,3,4.7ZM350.4,247.8c-.6-.8-2.9,2.3-3,2.9-.4,1.2,1.1,3.1,1.1,4.5l3-4.1-1.1-3.3h0ZM357.7,255.9c0-1.5,2.2-3.1,2.4-4.1.2-.9-1.2-2.8-1.1-3.9l-2.2,2.4-.3.9,1.2,4.6h0ZM316.4,257.4c-.4-1.9,2.9-3.8,3.1-4.7.2-.9-2.8-2.9-2.4-4.6l-4.4,4.6c1.7,1.3,2,2.4,2.4,4.3.2.7.7.4,1.2.4h0ZM365.8,256c1.6-2.9,2.1-4,1.3-7.4l-2.2,2.4c-.6,1-.4,2.2-.2,3.3,0,.5.3,1.9,1.1,1.7h0ZM303.4,259.7l3.1-6.4-3.3-4.1c-1,.8-1.2,2.1-1.9,3-.8,1.1-2.4,1.7-2.2,3.1,2.7,0,2.4,3.4,4.3,4.4h0ZM373.2,249.9c-.7,2.2-3.5,4.5-1,6.8l2.1-2.8-1.1-3.9h0ZM288.5,262.6c.9,0,1-.9,1.3-1.5,1-2.2,1.6-4,3.7-5.5,0-.4-4.8-2.9-4.3-4.7-2.1,1.2-2.3,5.2-5,5.5v1.2c2.7.2,3.8,2.6,4.3,5h0ZM383.7,255.5c-2.9,0-1.7,3.6-1.9,5.5l2.4-2.9-.5-2.7h0ZM389.3,263.5c-.6-.8.6-3-.7-3l-1.3,6.2,1.6-1.8,1.5.6c.6-2.2-.8-1.6-1.1-2h0ZM335.3,276.1c.4-2.5,2.1-4.2,3.7-5.9l-1.8-5.2-2.8,4.3-1.5.6,1.1,1.7,1.3,4.5h0ZM344.6,275.5c-.4-1.6,3.6-5.4,3.6-5.8s-1.9-3.2-1.1-4.6c-.8.5-4.2,4.3-4.3,4.7-.2.7.9,1.7,1,2.5.2,1-.5,3.2.7,3.3h0ZM329.2,271v-.9l-3-4.7c.2,1.8-3.5,4.5-3.7,5.3-.2.7,1.4,2,1.7,3.1.2.8,0,2.5,0,2.7.9,1.1,1.1-.2,1.3-.9.5-1.7,1.9-4.5,3.7-4.7h0,0ZM356.4,270.7l-1.2-5-3.5,3.7c-.3.4.2,4.9,1.2,5.6.9-.6.7-.4,1.7-.9,1.1-1,1.2-1,1.8-3.4h0ZM313.7,278.9c.8-3.1,2.6-5.6,5-7.7-1.5-1.5-3.2-2.9-3-5.3-1.7,1.3-2,3.1-3.7,4.6-.8.7-1.7.8-1.9.9-1.1.9,1,1.4,1.5,1.8.5.4.8.9,1,1.5l1,4.2h0ZM366.8,276.4c-.1-1.6,2.1-2.4,2.4-3.5.5-1.6,0-4,.1-5.8l-2.2,3.1-1.6,1,1.2,5.2h0ZM362.7,266.9c-.9.7-3,2.5-3.9,3.2-.2.2,1.2,4.3.5,5.5.9-1.2,3.5-3.2,4.1-4.3M371.7,278.3l3-4.7-.5-3.9c-2.7,2.2-3.2,3.7-3.1,7.1,0,.7-.4,1.7.6,1.5h0ZM380.4,275.3l-1.2.3-.3-.3-.9-3.4c-2.5,2.7-2.9,4.6-2.5,8.3l2.5-3.4c1,.4,3.5-.4,2.5-1.5h0,0ZM382.2,280.8l-.6-3.1-.7,6.8,1.9-1.8.6,2.5,1.9-6.1-3.1,1.8h0ZM372.2,291.8v-3.7s-4,3-4,3c-.5.6.4,2.1.3,3.4-.1,1.4-1.3,2.6-1.3,4l3.4-4.3.9,3.7c4-1.4,3.4-5.7,4.4-9.2-1.6.6-1.6,3.3-3.7,3h0s0,0,0,0ZM377.2,295.6l-.6-1.2c-.4,2.6-2.4,4.3-3.8,6.5.1,2.5,1.8-2,2.5-1.5l-.6,3.7.7-1.1c2.6,1.6,3.4-6.6,3.1-6.9l-1.2.6h0Z"/>
+ <path class="st1" d="M222.9,241.7c-.2,3.4.6,5.6-1.6,8.6-6.1,8.3-17.5-.7-13.8-10.9.9-2.4,2.4-3.2,4.4-4.6,2.9.3,4.3-.4,7,1.4,1.9,1.3,2.9,3.5,4.1,5.5h0Z"/>
+ <path class="st1" d="M167.5,206.1c8.4-1.2,13.7,12,6.5,17.2-2.3,1.7-6.6,1.8-8.9.2-6.8-4.7-6.4-16.1,2.4-17.4h0Z"/>
+ <path class="st1" d="M142.3,192.9c7.5-1.6,13.1,6.6,10.4,13.1-4,9.8-18.2,3.9-15.7-7.3.4-2,3.3-5.4,5.3-5.8Z"/>
+ <path class="st1" d="M108.9,141.4c8.9-1.3,12.4,13.8,3.2,17.7-11.6,4.9-15.2-15.9-3.2-17.7Z"/>
+ <path class="st1" d="M114.3,160.5c8.3-1.2,12.2,12.1,4.9,16.9-2.5,1.6-7,1.4-9.2-.7-5.1-5-3.1-15.1,4.3-16.2h0Z"/>
+ <path class="st1" d="M119,180.3c6.9-1.5,10.7,4.5,10,10.8-.2,2.1-1.8,3.9-3.5,5.2-6,4.3-12.8-2.6-11.9-9,.3-2.6,2.7-6.4,5.4-7h0Z"/>
+ <path class="st1" d="M233.8,249.9c5.9-1.3,10.1,5.3,9.3,10.8-.9,6.9-8.9,10-13.2,3.9-1.7-2.5-2.1-7.1-1.2-9.9.5-1.4,3.6-4.4,5.1-4.7h0Z"/>
+ <path class="st1" d="M172.9,226.5c9.8-2.1,14.1,12.1,6.7,16.1-7.4,4-14.6-6-10.7-12.8.6-1.1,2.8-3,4.1-3.3h0Z"/>
+ <path class="st1" d="M150.2,212.7c8-1.2,12.7,10.6,6.8,15.7-6.8,5.9-16.3-4.9-11.9-12.1.9-1.5,3.3-3.3,5.1-3.6h0Z"/>
+ <path class="st1" d="M196.2,240.3c10.2-2.1,13.7,15.4,3.9,17.1-9.7,1.6-13.3-15.1-3.9-17.1h0Z"/>
+ <path class="st1" d="M217.7,254.7c7.8-1.7,12.8,10.4,6.5,15.4-7.4,5.8-16.7-7.5-8.8-14,.7-.6,1.4-1.2,2.3-1.4h0Z"/>
+ <path class="st1" d="M122.8,202c4.7-4.6,11.7-.5,12.6,5.3,1,6.1-4.9,11.5-10.7,8-4.2-2.6-5.5-9.8-1.9-13.3h0Z"/>
+ <path class="st1" d="M92.1,149.2c5.1-1.1,8.8,4.8,8,9.4-.5,2.7-2.9,6.7-5.8,7.2-10.3,1.7-11-14.7-2.2-16.6Z"/>
+ <path class="st1" d="M252.7,265.6c8.2-1.8,11,11.3,4.9,15.6s-11.2-2.5-10.4-8.7c.4-2.6,2.7-6.4,5.4-7h0Z"/>
+ <path class="st1" d="M88,131.3c6.3-1,8.8,5.9,6.6,11-1.8,4.1-6.3,7.1-10.4,4.1-5.4-3.8-2.5-14.1,3.9-15.2h0Z"/>
+ <path class="st1" d="M97.5,168.4c2.9-.6,5.8,1.4,7.1,3.8,3.3,6.5-2.3,15.5-9.3,11.6-5.5-3.1-4.3-14.1,2.3-15.4h0Z"/>
+ <path class="st1" d="M157.4,232.5c8.9-1.2,12.2,15.2,2.7,16-8.4.7-12-14.7-2.7-16Z"/>
+ <path class="st1" d="M179.5,246.3c7.6-1.6,12.2,7.8,8.1,13.2-1.7,2.2-3.2,2.4-5.9,2.1-7.3-.8-9-13.9-2.2-15.4h0Z"/>
+ <path class="st1" d="M88.7,127.9c-.9.8-4.4,2.6-5.6,2.5-8.1-.8-6.3-14.1,1.4-15.8,7.6-1.6,9,8.9,4.2,13.3Z"/>
+ <path class="st1" d="M132.8,220c7.9-1.7,12.9,9.6,6.5,14.1-2.6,1.9-5.1,1.5-7.7-.4-4.2-3.2-4.2-12.6,1.1-13.7h0Z"/>
+ <path class="st1" d="M237.9,269.7c7.5-1.6,11.1,10.5,4.4,15-1.6,1-2.5,1.2-4.3.6-6.6-2-7.3-14.1,0-15.6h0Z"/>
+ <path class="st1" d="M201.6,260.1c9.9-2.1,12.3,13.6,4.6,15.2-9,2-11.9-13.7-4.6-15.2Z"/>
+ <path class="st1" d="M102.9,188.2c9.5-2.1,11.8,13.5,3.9,15.2-9.5,2.1-11.3-13.6-3.9-15.2Z"/>
+ <path class="st1" d="M296.5,275.9c4.6-1,6.7,3.7,6.3,7.7s-3.9,10.9-8.8,9.2c-5.4-1.9-3.5-15.5,2.5-16.9h0Z"/>
+ <path class="st1" d="M283.5,278.2c5-1,6.8,4.9,6.2,8.9-1.2,8.3-11.2,11.4-12.3,1.7-.4-3.7,2.1-9.8,6.1-10.6h0Z"/>
+ <path class="st1" d="M81.5,99.1c9.9-2.1,8.5,11.9.7,14.4-6.7,2.2-9.2-5.2-5.8-10.3.8-1.2,3.7-3.9,5.1-4.2Z"/>
+ <path class="st1" d="M274.2,282.5c.8.8,1.9,3.9,2,5.1.4,8-8.5,14-11.7,5.3-1.5-4.2.5-10.7,5.3-11.7,1.1-.2,3.5.6,4.3,1.3h0Z"/>
+ <path class="st1" d="M222.4,274.5c8.1-1.8,11,10.3,5,13.8-8.1,4.7-13.3-12-5-13.8Z"/>
+ <path class="st1" d="M109.5,208c8-1.7,12,9,5.6,13.2-8.2,5.4-13.4-11.5-5.6-13.2h0Z"/>
+ <path class="st1" d="M76,157.7c1.6-.3,3.9-.2,5.1.9,4.3,3.9,1.9,13.9-4.1,13.8-7.3,0-7.2-13.3-1-14.7h0Z"/>
+ <path class="st1" d="M164,252.3c1.4-.3,3.3.1,4.5.9,7.4,4.5,3.4,17.7-5.2,11.9-4.6-3.1-4.9-11.6.8-12.8Z"/>
+ <path class="st1" d="M186.7,265.5c8.1-1.6,11.6,12.9,3.3,14-7.5,1-10.7-12.5-3.3-14Z"/>
+ <path class="st1" d="M260,286c3.2,3,2.5,11.7-1.8,13.1-6.4,2.1-8.1-4.2-7.3-9.3.6-4,5.9-6.8,9.1-3.8Z"/>
+ <path class="st1" d="M81.1,84.9c6-.9,6.2,5.9,3.4,9.8-1.4,2-4.8,4.5-7.3,4.2-7.5-.9-3-12.9,3.8-13.9h0Z"/>
+ <path class="st1" d="M71.8,139.8c10.3-2.2,8.1,14.6-.3,14.1-6.5-.4-5.5-12.9.3-14.1Z"/>
+ <path class="st1" d="M140.6,239.8c9-1.9,11.9,14.3,2.2,13.5-6.7-.5-8.6-12.1-2.2-13.5Z"/>
+ <path class="st1" d="M69.6,122.4c8.9-1.8,6.8,15.3-2.1,14.1-7-1-3.6-12.9,2.1-14.1Z"/>
+ <path class="st1" d="M81.4,176.9c9.6-2.1,9.1,15.9.5,14-6.1-1.4-6.2-12.7-.5-14Z"/>
+ <path class="st1" d="M207.5,279.3c6.8-1.5,10.4,8.8,5.3,12.3-7.4,5.2-13.1-10.6-5.3-12.3Z"/>
+ <path class="st1" d="M118.4,227.4c8.7,0,8.5,15,.6,13.2-7-1.6-7.1-13.2-.6-13.2Z"/>
+ <path class="st1" d="M85.7,208.1c-2.7-2.6-2.8-9.2.6-11.2,6.7-4,11.8,7.6,6,11.7-1.9,1.4-5,1-6.6-.5h0Z"/>
+ <path class="st1" d="M246.3,301c-.1.2-1.9,1.2-2.1,1.2-8.6,2.2-9.4-13.6-1.6-13.5,5.6,0,6.8,9,3.7,12.3h0Z"/>
+ <path class="st1" d="M71.6,107.7c.4.5,1.4,3.1,1.4,3.9,0,2.2-2.1,6.1-3.8,7.3-7.5,5.4-11-5.7-3.9-10.8,1.6-1.2,4.9-1.9,6.4-.4h0Z"/>
+ <path class="st1" d="M295,295c8.9-1.9,5.1,15.7-2.1,14.7-4.8-.7-3.2-13.5,2.1-14.7Z"/>
+ <path class="st1" d="M302.6,307.8c-.2-.2-1.2-3.2-1.3-3.9-.3-3.6,2.7-12.1,7.1-11.3,5.4,1,2.4,14.4-3.1,15.3-.6,0-2.4.2-2.7,0h0Z"/>
+ <path class="st1" d="M283.3,297.3c.6-.1,1-.1,1.6,0,6.3,1.5,2.7,15-3.7,14.1-5-.7-4.3-12.7,2.1-14.1Z"/>
+ <path class="st1" d="M73.3,84c-1.3-1.3-.6-4.6,0-6.2,2.5-5.7,12.7-8.7,11.6-.7-.6,4.1-8.3,10.3-11.7,6.9h0Z"/>
+ <path class="st1" d="M317.9,291.5c3-.6,4.1,2.6,3.8,5.1-.4,3.7-3.5,11.7-8.3,10.1-3.8-1.3-.4-14.1,4.5-15.2h0Z"/>
+ <path class="st1" d="M270.3,300.3c5.7-1.2,6.4,7.5,3.2,11.4-5.1,6.1-10.1-2.5-6.6-8.6.6-1,2.3-2.5,3.5-2.7h0Z"/>
+ <path class="st1" d="M148.5,259c7.2-1.5,10.6,10.8,3.9,12.2-6.6,1.4-10.2-10.9-3.9-12.2Z"/>
+ <path class="st1" d="M171.8,271.5c6.5-1.3,10,10.9,3.3,12.2s-10.8-10.7-3.3-12.2Z"/>
+ <path class="st1" d="M67.9,92.3c4.3.1,3.7,5.4,2.2,8.2s-6.5,6.6-9.1,3.2c-2.9-4,2.5-11.5,6.9-11.4Z"/>
+ <path class="st1" d="M225,294.3c.3-.3,2.8-1.3,3.3-1.3,6.3,0,7.7,11.7,1,12.9-1.9.4-5.2-2.9-5.6-4.7s0-5.6,1.3-6.8h0Z"/>
+ <path class="st1" d="M99.5,217.2c5.9,6.2-2.2,15.7-7.2,8-4.1-6.4,2.7-12.6,7.2-8Z"/>
+ <path class="st1" d="M192.7,284.7c5.4-1.5,9.9,6.3,6.3,10.2-4.2,4.6-10.7-2.1-8.9-7.2.3-.9,1.8-2.7,2.6-2.9Z"/>
+ <path class="st1" d="M257.3,303.2c5.5-1.2,7.2,8.8,2.5,11.9-7.2,4.8-9.2-10.5-2.5-11.9Z"/>
+ <path class="st1" d="M125.1,247c3.9-1.1,8,3.4,7.6,7-.8,6.8-9.6,5.3-10.5-1.3-.3-2.1.7-5.1,2.9-5.7h0Z"/>
+ <path class="st1" d="M57.6,148.3c8.9-1.9,5.8,14.3-1.2,11.9-4.7-1.6-3.3-11,1.2-11.9Z"/>
+ <path class="st1" d="M61.7,166.2c7.4-1.5,6.8,11.5,1.6,12.3-6.9,1-6.6-11.2-1.6-12.3Z"/>
+ <path class="st1" d="M73.4,71.6c-3.7-3.7,5.7-13.5,9.6-10.3,3,2.5-.4,7.8-3.1,9.4-1.6.9-5,2.4-6.5.9Z"/>
+ <path class="st1" d="M51.8,142.4c-.5-.5-1.3-3.1-1.4-3.9-.2-4.8,5.9-10.9,8.7-6,3.2,5.6-3.8,13.5-7.3,9.9Z"/>
+ <path class="st1" d="M66.5,185.4c6.8-2,8.4,10.3,2.8,11.5-7.3,1.6-7.1-10.3-2.8-11.5Z"/>
+ <path class="st1" d="M212.9,297.9c7.6-2.2,9.6,12.2,1.7,11-5-.7-6.1-9.7-1.7-11Z"/>
+ <path class="st1" d="M67.5,79.2c1.8-.1,3.4,2.1,3.2,3.8-.5,3.7-5.4,9.5-9.2,7.5s1.2-10.9,6.1-11.2h0Z"/>
+ <path class="st1" d="M102.4,235.1c6.5-1.3,8.8,9.8,3.3,10.9-6.6,1.3-8.7-9.8-3.3-10.9Z"/>
+ <path class="st1" d="M54.2,114.9c2.1-.4,3.5,1.6,3.8,3.5.5,3.9-4.7,11.2-8.3,7.5-2.9-2.9.8-10.4,4.6-11h0Z"/>
+ <path class="st1" d="M244.8,307c6.5-.2,5.9,10.8,1.1,11.5-6.8,1-6.5-11.4-1.1-11.5Z"/>
+ <path class="st1" d="M293.6,312.8c1.5-.3,2.9,1.5,3.1,2.9.6,3-2.5,10.6-6.2,9.7-4.6-1.1-1.4-11.8,3-12.6h0Z"/>
+ <path class="st1" d="M77.4,214.9c-.3.3-1.6.7-2.1.7-4.2.3-6.1-4.6-4.8-8.1,2-5.9,9.3-2,8.3,4.1,0,.6-1.1,3-1.4,3.3Z"/>
+ <path class="st1" d="M304.2,311.1c3.2-.6,2.8,4.2,2.5,6.3-.4,2.4-3.6,7.3-6.3,6.5-3.9-1.2-.5-12,3.9-12.8h0Z"/>
+ <path class="st1" d="M281.9,315.2c5.1-1.1,4.8,8.8.7,11.3s-5.3-1.9-4.8-5.5c.3-2,2-5.3,4.2-5.8h0Z"/>
+ <path class="st1" d="M308.7,322.6c-2.2-2.3,1.3-11.6,4.3-12.5,4.7-1.5,3.7,4.1,2.6,7-.8,2-4.5,7.9-6.9,5.5h0Z"/>
+ <path class="st1" d="M156.3,278.2c7.7-2.2,10.1,11.6,1.8,9.7-4.2-1-5.8-8.5-1.8-9.7Z"/>
+ <path class="st1" d="M139.1,275.3c-1.7,1.7-4.9.4-6.3-1.2-3.8-4.1-.8-10.9,4.6-7.6,2.6,1.6,4,6.5,1.7,8.8h0Z"/>
+ <path class="st1" d="M179.1,290.1c2.7-.5,5.7,2.1,6.2,4.7,1.1,5.5-4.9,7.5-8.2,2.5-1.7-2.5-1.2-6.6,2-7.3h0Z"/>
+ <path class="st1" d="M324.7,308.8c1.5,1.5.2,5.4-.5,7.2s-3.8,6.9-6,6.3c-3.4-1,.6-10.4,2.4-12.1.6-.6,3.5-2,4.1-1.3h0Z"/>
+ <path class="st1" d="M54.3,109.7c-1.1,1.1-3.8,2.6-5.1,1.4-4.2-3.5,2.6-12.9,6.6-10.2,2.5,1.7.1,7.2-1.5,8.8h0Z"/>
+ <path class="st1" d="M74.1,60.6c-2.9-4.5,7.9-13.1,10.2-8.5,1.8,3.6-6.5,10.5-10.2,8.5Z"/>
+ <path class="st1" d="M67.6,67.5c3.9-.9,3.4,3.8,1.9,6.3-1.9,3.2-9,7.2-8.6,1.2.2-3,3.9-6.9,6.7-7.6h0Z"/>
+ <path class="st1" d="M270.1,318.2c6.9-1.4,4.5,11.5-.8,11-4-.4-3.7-10.1.8-11Z"/>
+ <path class="st1" d="M80.3,223.7c3.5-1,6.6,4.1,5.4,7.4-1.9,5.5-7.5,2.7-8.2-2.4-.3-1.7,1.2-4.6,2.8-5Z"/>
+ <path class="st1" d="M325.2,321.7c-1.6-1.7,1.2-8.4,2.4-10.3s5.2-5.6,5.7-1.7c.4,3.3-3.9,12.5-8.2,12h0Z"/>
+ <path class="st1" d="M231.3,311c5.6-1.6,7.5,10.1,1.6,10.5-3.5.2-5.6-5.3-4.2-8.1.2-.4,2.2-2.2,2.6-2.4h0Z"/>
+ <path class="st1" d="M199.9,302.7c5.1-.9,8.2,8.6,2.7,9.7s-8-8.8-2.7-9.7Z"/>
+ <path class="st1" d="M115.2,255.6c4.7,4.8-1.6,12.2-5.7,5.9-3.3-5.1,1.5-10.2,5.7-5.9h0Z"/>
+ <path class="st1" d="M335.6,320.4c-4,3.9-3.8-1.2-2.7-4.3.7-2,4.1-8.4,6.4-8.4,1.3,0,1,4.2.8,5.1-.3,1.4-3.4,6.6-4.5,7.6h0Z"/>
+ <path class="st1" d="M46.4,184.3c-.2-.2-1.2-2.4-1.2-2.8-1.1-5.6,5.1-9.9,7.1-3.9,1.3,4.1-2.7,9.9-5.8,6.6h0Z"/>
+ <path class="st1" d="M261.5,321.8c.2.2,1.2,2.4,1.2,2.8.6,2.9-3,8.9-6.1,6-3.9-3.6,1.1-12.6,4.9-8.8h0Z"/>
+ <path class="st1" d="M43,157.4c3.7-3.3,7.1,2.9,4.4,7.3-1.4,2.2-3.5,3.2-5.2.9s-1.2-6.3.8-8.2h0Z"/>
+ <path class="st1" d="M53.2,87.1c5.4-1.6,3.5,6.6,0,8.8-4.5,3-6.2-.7-4.1-4.8.4-.8,3.3-3.8,4-4Z"/>
+ <path class="st1" d="M56.5,202.9c-.3.3-1.7.7-2.1.7-3.1.2-4.5-5.1-3.2-7.6,2.5-4.8,6.9-1,6.6,3,0,.5-1.1,3.6-1.4,3.9h0Z"/>
+ <path class="st1" d="M344.9,308.4c3.6-1,1.3,5.1.5,6.7-.6,1.2-4.8,6.7-5.6,6.7-.6,0-.9-1.5-1-2.2,0-2.5,3.8-10.6,6.1-11.3h0Z"/>
+ <path class="st1" d="M42.8,139.4c.7,0,2.1,1.3,2.3,1.8,1.9,3.9-2.8,10.8-6,7.7-2.1-2.1,0-9,3.6-9.5h0Z"/>
+ <path class="st1" d="M222.6,323.7c-3.5,3.4-9.3-4.2-5.4-7.6,4.2-3.6,8.2,4.8,5.4,7.6Z"/>
+ <path class="st1" d="M71.6,57.6c1.4,3.3-5.4,10.3-8.1,8.9-3.4-1.7,1.8-7.3,3.9-8.5,1.4-.7,2.7-1,4.1-.4h0Z"/>
+ <path class="st1" d="M88.1,242.9c3.4-.9,6.9,4.5,4.8,7.4-4.4,5.8-9.9-5.9-4.8-7.4Z"/>
+ <path class="st1" d="M82.7,42.3c.9-.1,2.3-.3,2.6.9.9,3.1-6.4,9.2-9.3,7.3-.7-.5-.7-1-.5-1.8.6-2.6,4.7-6,7.2-6.4h0Z"/>
+ <path class="st1" d="M41.2,123.4c5-.9,2.2,11.1-2.6,9.7-3.5-1-1.1-9.1,2.6-9.7Z"/>
+ <path class="st1" d="M147.6,292.1c-2.9,2.8-8.8-2.5-6.5-6.3,3-5,9.8,3.1,6.5,6.3Z"/>
+ <path class="st1" d="M246,324.7c6.4-1.9,6.2,8.6,1.6,9.1-4,.4-4.2-8.3-1.6-9.1Z"/>
+ <path class="st1" d="M299.6,328.3c2.6-.8,2.3,3.3,1.9,5.1-.5,2.3-3,4.9-5.2,5.8-3.7-1.9.7-10.1,3.3-10.9h0Z"/>
+ <path class="st1" d="M164.8,296.2c4.8-1.4,7.7,6.1,4.5,7.7-5.2,2.5-8.4-6.6-4.5-7.7Z"/>
+ <path class="st1" d="M314.4,336.2c-1.5,1.5-3.6,2.1-3.6-.8,0-2.3,3.9-10.1,6.6-9.5,3.1.6-1.7,8.9-3,10.3Z"/>
+ <path class="st1" d="M49.8,83.9c-1.2-3.1,3.7-10.6,6.9-8.9,2.5,1.3,0,5.3-1.3,6.8-1.6,1.8-3.1,2.4-5.6,2.1h0Z"/>
+ <path class="st1" d="M308.3,327.1c3.4-1,1.8,4.8.9,6.5-2.1,4.5-7.2,6.9-5.6,0,.3-1.5,3.2-6,4.6-6.5h0Z"/>
+ <path class="st1" d="M352.5,309c.5.5-.9,4.4-1.3,5.3-.5,1.1-5.4,9.2-6.9,7.6-.2-2.9,1.2-5.8,2.7-8.2.6-.9,4.1-6.1,5.5-4.7h0,0Z"/>
+ <path class="st1" d="M292.4,330.7c.2.3,0,3.2,0,3.9-.4,2.8-2.2,4.6-4.7,5.8-3.5-2-.7-10,2.7-10.3.3,0,2,.5,2,.6h0Z"/>
+ <path class="st1" d="M40.6,108.5c4.8-1.4,2.4,10.8-3.2,9.1-2.9-.9.6-8.4,3.2-9.1Z"/>
+ <path class="st1" d="M279.8,332.4c5.1-1.5,3,9.7-1.4,9.2-4.1-.4-1.7-8.3,1.4-9.2Z"/>
+ <path class="st1" d="M119.9,272.9c4.4-1.2,7.2,6.8,3.4,7.9-4.3,1.2-8.2-6.6-3.4-7.9Z"/>
+ <path class="st1" d="M185.6,308.1c5.2-1.5,7.7,6.1,4.5,7.7-4.5,2.2-7.9-6.8-4.5-7.7Z"/>
+ <path class="st1" d="M318.3,337c-.6-3.4,1.9-8.5,4.4-10.8,1.6-1.4,3.4-1.1,3,1.2-.5,3-3.9,9.3-7.4,9.6Z"/>
+ <path class="st1" d="M60,213.1c3.7-.6,5.3,7.6,2.2,8.5-5,1.5-7-7.7-2.2-8.5Z"/>
+ <path class="st1" d="M359.3,309c.5.5-.5,1.5-1,1.9-2.7,2.4-3.2,6.1-5.7,9.1-.8,1-2,2.6-3.4,2.5-1.1-1.3,3.5-9.6,4.8-11,1-1.2,2-2.1,3.6-1.2.4,0,.5-2.5,1.6-1.2h0Z"/>
+ <path class="st1" d="M234.8,328.3c6.2-1.8,5.1,10.2.1,7.6-2.5-1.3-2.9-6.9-.1-7.6Z"/>
+ <path class="st1" d="M332,325.5c.3,2.9-1.7,6.3-3.5,8.6-1,1.2-2.2,2.8-4,2.5-1-1,2-6.8,2.9-8,.6-.8,3.7-4.1,4.6-3.1h0,0Z"/>
+ <path class="st1" d="M270,334.8c3.4-.6,3.3,6.2.5,8-5,3.2-5-7.2-.5-8h0Z"/>
+ <path class="st1" d="M41.4,95c5.8-1.7.7,9.6-3.2,8.5-2.8-1.7,1.2-7.9,3.2-8.5Z"/>
+ <path class="st1" d="M205.6,326.5c-2.3-2-2-7.4,1.9-6.5,2.6.6,3.5,4,2.8,6.3-.5,1.6-3.7,1.1-4.7.2h0Z"/>
+ <path class="st1" d="M70.9,48.4c4.9-1.1,1.3,4.3-.8,6.1-3.5,2.8-7,2.5-3.9-2.1.8-1.3,3.2-3.6,4.7-4h0Z"/>
+ <path class="st1" d="M364.2,312.8l-1.9,5.5,5.6-5.5-3.8,7c.3.8,1.3-.7,1.5-1,.5-.6.7-1.7,1.6-1.8l-1.3,4.3,1.9.3c-1.2,2.8-2.8,6.1-5,8.3l.6-2.5-1.2.3.6-2.1-1.9,1.2,1.3-3.7-3.1,1.8,2.5-5.5-4.7,4.9c-.5,0-.4-.6-.3-.9.3-1.6,3.6-7.5,4.8-8.9.7-.8,1.5-2,2.8-1.9h0s0,0,0,0Z"/>
+ <path class="st1" d="M330,336.5c-.6-.6,1.5-4.9,2-5.7.6-1.1,4-5.7,5.2-5.3s.6,1.1.4,1.7c-.2,1-.6,2.3-1.1,3.2-.6,1.1-5,7.7-6.5,6.2h0Z"/>
+ <path class="st1" d="M66.6,232.2c3.7-1.1,6.2,6.3,2.9,7.3-4.7,1.4-5.7-6.5-2.9-7.3Z"/>
+ <path class="st1" d="M101,268.9c-.3.2-2.6.1-3.2,0-2.2-.7-4.4-7.6,1.2-6.7,2.8.5,3.5,5.8,2,6.8h0Z"/>
+ <path class="st1" d="M59.2,64.2c1.2,2.8-4,8.6-6.5,8-2.2-.6.8-4.9,1.6-5.8,1.4-1.5,2.8-2.4,5-2.1h0Z"/>
+ <path class="st1" d="M77.9,42.2c0-3.6,3.8-6.1,7-6.9.6-.1,1.4-.7,1.7.5.7,2.9-5.9,7.3-8.7,6.4h0Z"/>
+ <path class="st1" d="M353.6,323.8c-.1-5,3.4-9.5,6.6-12.9,1.1.9,1,1.3.6,2.5-1,3.3-4.6,8-7.2,10.4h0Z"/>
+ <path class="st1" d="M258.8,337.8c4.6-1.3,4,7,.5,7.4s-3.1-6.6-.5-7.4Z"/>
+ <path class="st1" d="M31.8,148.5c1.7,2.2-.5,8.8-3.4,7.9-2.7-.8-.9-9.6,3.4-7.9Z"/>
+ <path class="st1" d="M34.1,165.9c.2.1.7,2.2.7,2.7.4,7.2-7.1,6.2-4.7-1,.5-1.6,2.8-2.6,4-1.7Z"/>
+ <path class="st1" d="M335.6,336.6c-1-2.3,5.4-11,6.6-11,.6,0,.9,1.1.6,1.9-.6,2.2-2.3,5-3.8,6.7-.4.5-2.9,3.1-3.4,2.4h0Z"/>
+ <path class="st1" d="M26.4,139.8c-1.6-2.2.7-8.5,3.4-8,2.2.4.9,9.8-3.4,8Z"/>
+ <path class="st1" d="M45.4,82.6c.3,3.5-2.3,7.9-6.2,7.3-.2-3.4,2.6-7.7,6.2-7.3Z"/>
+ <path class="st1" d="M223.7,331.9c2.9-.8,5,5.9,2.3,6.7-4.6,1.3-5.1-5.9-2.3-6.7Z"/>
+ <path class="st1" d="M173.2,313.5c3.4-1,5.9,3,3.9,5.9-3.6,2.1-6.9-5-3.9-5.9Z"/>
+ <path class="st1" d="M151.7,302.1c4.7-1.3,6.9,7.8,1.2,6-2.4-.7-3.2-5.5-1.2-6Z"/>
+ <path class="st1" d="M34.5,191.1c-1.1-2-1-7.9,2.1-7.3s2.4,8.8-2.1,7.3Z"/>
+ <path class="st1" d="M247.3,346.7c-1.6-1.6-.7-6.9,2.6-5.9,3.6,1.1.9,9.5-2.6,5.9Z"/>
+ <path class="st1" d="M129.6,290.9c3.3-.6,5.4,5.4,2.9,6.1-4.4,1.2-6-5.5-2.9-6.1Z"/>
+ <path class="st1" d="M347.4,326.8c.3.3-2.4,5.4-2.9,6.1-.4.6-4.2,4.9-4.6,4.3-.2-2.5,1.5-4.8,2.9-6.7,1.2-1.6,2.4-3.7,4.6-3.7Z"/>
+ <path class="st1" d="M303.4,343.7c.1,3.8-2,6.3-4.7,8.6-3.3-2,2.8-10.5,4.7-8.6Z"/>
+ <path class="st1" d="M193.5,324.8c3.8-1.1,6.4,5.1,2.9,6.1-3.2.9-5.4-5.4-2.9-6.1Z"/>
+ <path class="st1" d="M293.9,344.9c4.7-1.3-.4,8.6-2.6,7.9-2.5-.8,1.1-7.5,2.6-7.9Z"/>
+ <path class="st1" d="M42.9,209.7c-4.2,1.6-4.7-6.2-2.6-6.8,3.8-1.1,3.9,4.3,2.6,6.8Z"/>
+ <path class="st1" d="M68,47c-.6-.6,2.5-4,3.2-4.5,5.4-4.5,6.4-.7,1.7,3-1.5,1.2-2.8,1.9-4.9,1.5h0Z"/>
+ <path class="st1" d="M283,354c-.8-1.9,1.3-8,3.5-7.9,3.2.2,0,8.9-3.5,7.9Z"/>
+ <path class="st1" d="M28.8,117.1c4.2-1.2,1.2,8-2,7.3-2.1-.4.1-6.8,2-7.3Z"/>
+ <path class="st1" d="M317,342c.6.6-1.7,4.8-2.2,5.5s-3.6,4.1-4.6,3.1c-.3-.3,2.3-5.4,2.9-6.1s3.1-3.4,4-2.5h0Z"/>
+ <path class="st1" d="M310.2,342.5c1.2,1.3-2.8,9.2-5.6,8.6-.3-3,1.3-5.5,3.5-7.4.7-.6,1-1.5,2.2-1.2h0Z"/>
+ <path class="st1" d="M60.9,54.4c1.8-.3,1.2,1.9.5,3-.7,1-4.4,4.5-5.6,4.3-1.3-.3-.3-2.5,0-3.1.6-1,4-4.1,5-4.2h0Z"/>
+ <path class="st1" d="M75,251.4c4.8-1.3,5.1,9,.2,5.2-1.6-1.2-1.9-4.7-.2-5.2h0Z"/>
+ <path class="st1" d="M106.9,280.1c2.6-.7,5.2,4,3.3,5.2-3.4,2.2-7-4.2-3.3-5.2Z"/>
+ <path class="st1" d="M322.6,341.4c1.2,1.5-3.9,8.7-6,9.2-1.1-.9-.8-.6-.4-1.6,1.4-3,3.1-6.4,6.3-7.6h0,0Z"/>
+ <path class="st1" d="M48,70.9c.1,3.2-2.2,6.9-5.6,7.3-.5-3.5,2.3-6.8,5.6-7.3Z"/>
+ <path class="st1" d="M274.9,355.1c-1.4-1.6.7-7.5,3.5-6.8,3,.8-1.8,8.7-3.5,6.8Z"/>
+ <path class="st1" d="M31.7,102.8c1.1,2.7-1,7.5-4.4,6.8-.3-2.7,1.3-6.6,4.4-6.8Z"/>
+ <path class="st1" d="M350.5,328.1c-.2,2.9-2.6,6.1-4.7,8-.7.6-1,1.5-2.2,1.2-.6-.7,3.9-7.1,4.8-7.9.6-.7,1-1.5,2.1-1.2h0Z"/>
+ <path class="st1" d="M237.4,349.1c-1.4-1.4-.4-5.7,1.4-5.4,4.5.8,1.7,8.4-1.4,5.4Z"/>
+ <path class="st1" d="M321.3,350c-1.2-1.3,4.6-8,6.2-8.6.2,3.1-1.9,5.5-4.1,7.4-.7.6-1,1.5-2.2,1.2Z"/>
+ <path class="st1" d="M212.5,336.1c2.4-.7,4.6,4.6,1.6,5.5-2.4.7-4.8-4.6-1.6-5.5Z"/>
+ <path class="st1" d="M268.5,350.1c2.9-.8,1.5,7.6-1.3,6.8-2-.6-.6-6.2,1.3-6.8Z"/>
+ <path class="st1" d="M46.9,222.1c3.3-.9,4.4,4.7,1.7,5.5-2.9.8-3.7-4.9-1.7-5.5Z"/>
+ <path class="st1" d="M332.4,342.1c.9,1-5.4,8.1-6.9,8.6.1-2.8,2.6-5.6,4.7-7.4.7-.6,1-1.5,2.2-1.2h0Z"/>
+ <path class="st1" d="M353.5,329.4c.8.9-5.2,8.7-6.9,9.2-.3-1.2.4-1.7.9-2.5.8-1.4,2.2-3.6,3.2-4.8.7-.8,1.5-2,2.8-1.9h0Z"/>
+ <path class="st1" d="M87.4,274.3c-2.8.7-5.8-3.1-3-4.7,2.1-1.3,3.9,2.7,3,4.7Z"/>
+ <path class="st1" d="M336.1,342.8c.7.8-3.8,6-4.7,6.8-.7.6-1,1.5-2.2,1.2l3.1-5.2c.6-.5,3-3.5,3.7-2.7h0Z"/>
+ <path class="st1" d="M65.5,46.4c1.1,1-5.2,7.2-6.2,6.1-1-1,2.9-4.6,3.7-5.2.6-.4,1.8-1.5,2.5-.9Z"/>
+ <path class="st1" d="M260.7,353.2c0,0,.6,1.8.6,2.1,0,2-1.8,3.2-3.7,2.7-.3-.3.2-4.6.7-4.9.2-.2,2.1-.1,2.4,0h0,0Z"/>
+ <path class="st1" d="M29.9,96c-1.2-1.2,2.2-5.4,3.4-6.1,2.7,1.3-2,7.7-3.4,6.1Z"/>
+ <path class="st1" d="M164.7,323.2c-1.6.9-4.1-.4-4.3-2.2-.4-4.2,5.4-1.2,4.3,2.2Z"/>
+ <path class="st1" d="M51.2,61.1c.3,2.9-2.3,5.6-5,6.1-.4-2.3,1.3-3.6,2.8-4.9.7-.6,1-1.5,2.2-1.2Z"/>
+ <path class="st1" d="M141.9,308.9c.5.5,1,3.3.7,3.6-2.1.7-4.9-1.1-4.3-3.4.4-1.4,2.8-.9,3.6-.2h0Z"/>
+ <path class="st1" d="M56.8,245.6c-1.6,1.8-4.9-4.2-2.1-4.9,2.4-.6,3.3,3.6,2.1,4.9Z"/>
+ <path class="st1" d="M79.2,34.2c.2,1.2-.6,1.5-1.2,2.2-1.4,1.6-3.3,3-5.6,3.3-.2-1.2.6-1.5,1.2-2.2,1.4-1.6,3.3-3,5.6-3.3Z"/>
+ <path class="st1" d="M295.9,358.4c.7.8-2.3,6.6-4.4,6.1-.3-2.2.7-3.5,2.2-4.9.7-.6,1.1-1.5,2.2-1.2Z"/>
+ <path class="st1" d="M185,333.9c-2.8.5-5.1-2.1-2.7-4.4,2.6.5,3.1,1.8,2.7,4.4Z"/>
+ <path class="st1" d="M301.4,357.9c.7.8-2.3,6.6-4.4,6.1-.7-.8,2.3-6.6,4.4-6.1Z"/>
+ <path class="st1" d="M20,157.7c.1,1.5,0,2.7-.5,4.1-.4,1-.5,1.1-1.7.8-2-.6-.5-5.9,2.2-4.9h0Z"/>
+ <path class="st1" d="M230.5,351.6c0,0-1.6.5-1.8.4-1.6-1-2.5-4.2-.2-4.6,1.7-.3,2.7,3.6,2,4.3h0Z"/>
+ <path class="st1" d="M307,357.3c.2,2.1-1.4,3.7-2.8,4.9-.7.6-1,1.5-2.2,1.2-.6-.7,4-7.2,5-6.1h0Z"/>
+ <path class="st1" d="M353.5,335.5c-1.5,1.2-2.8,2.5-4.4,3.7.7-3,3.7-5.3,5.3-8,1.2-.2,1.1.3.6,1.3-.5,1-1.6,1.8-1.6,3,.4-.3,3-2.6,3.1-2.4l-1.9,5.2c-1.6.5-2.5,1.2-3.8,2.2l2.5-4.9h0Z"/>
+ <path class="st1" d="M289.1,359.6c.1,2.6-1.2,5.4-3.8,6.1-.7-.9,1.6-6.6,3.8-6.1Z"/>
+ <path class="st1" d="M119.9,301.8c-1.7.3-3.5-.4-3.7-2.2-.4-4.2,4.7-.9,3.7,2.2Z"/>
+ <path class="st1" d="M249.9,355.5c2.8-.7,2.8,3.9.6,4.9-1.7-.7-2.3-4.5-.6-4.9Z"/>
+ <path class="st1" d="M333,350.8c-.4-.4,1.5-2.9,1.9-3.4,1.1-1.4,2.9-2.9,4.4-4-.2,1.7-2,4-3.1,5.2-.5.5-2.5,2.8-3.1,2.1h0Z"/>
+ <path class="st1" d="M282.2,361.4c.2,2.2-1,5.3-3.8,4.9.5-2,1-5.4,3.8-4.9Z"/>
+ <path class="st1" d="M21.6,179.9c-.8.9-2.2-.4-2.3-1.7-.2-2.9,2.7-4.6,3-1.7,0,.6-.4,3-.7,3.4h0Z"/>
+ <path class="st1" d="M18.9,141c.1,2,.2,5.4-2.5,5.5-.9-2-.2-5.3,2.5-5.5Z"/>
+ <path class="st1" d="M37.4,78.8c.6.6-2.8,6.4-4.4,4.9-.6-.6,2.8-6.4,4.4-4.9Z"/>
+ <path class="st1" d="M306.9,363.5c0-3,2.9-5.1,5-6.7,0,3-2.9,5.1-5,6.7Z"/>
+ <path class="st1" d="M310.6,363.5c-.4-.4,1.4-2.9,1.9-3.4,1-1.2,2.5-2.5,3.7-3.4.9,2-5.1,7.3-5.6,6.7h0Z"/>
+ <path class="st1" d="M203.3,341c1.1,1.1,1.2,3.9-1.2,3.3-3.2-.8-1.5-6,1.2-3.3Z"/>
+ <path class="st1" d="M16.6,131.1c-.3-2.6.1-4,2.2-5.5,2.5,1.2-1.2,6.7-2.2,5.5Z"/>
+ <path class="st1" d="M24.3,192.9c1.9-.6,2.2,4.4.6,4.9-1.9.6-2.2-4.4-.6-4.9Z"/>
+ <path class="st1" d="M274.8,363.2c.5,5.5-5.6,5.9-2.2.6.6-.9,1.3-.6,2.2-.6Z"/>
+ <path class="st1" d="M55.6,52.5c.7.8-3.1,5.8-5,4.9-.4-.4,4.2-5.8,5-4.9Z"/>
+ <path class="st1" d="M320.6,357.4c.1.1-1.8,2.7-2.2,3.1-.5.5-2.8,3-3.4,2.4l3.1-4.6,2.5-.9h0Z"/>
+ <path class="st1" d="M335.4,351.4c-.3-.3,5.1-6.5,6.2-6.7-.5,2.1-2.5,4.1-4.1,5.5-.7.6-1,1.5-2.2,1.2h0Z"/>
+ <path class="st1" d="M21.1,111.4c.2,2.1-.7,3.7-2.2,4.9-2.3-1.2,1.3-6,2.2-4.9Z"/>
+ <path class="st1" d="M69.9,39.6c-1.5,2-3.3,3.9-5.6,4.9-.9-1.1,3.9-5.5,5.6-4.9Z"/>
+ <path class="st1" d="M83,29.3c-.1,1.1-5.4,4.5-5.6,4.3,0-3,3.2-3.6,5.6-4.3Z"/>
+ <path class="st1" d="M37.5,72.7c-.7-.8,2.6-4.6,3.8-4.9,1.1,1.6-3,5.7-3.8,4.9Z"/>
+ <path class="st1" d="M318,363.6c-.2-1.1.6-1.5,1.2-2.1,1.2-1.4,2.8-2.9,4.4-4l-2.5,4-3.1,2.1Z"/>
+ <path class="st1" d="M28.8,212.1c2.6-.8,3.4,3,1.5,3.7-1.5.6-1.8-2.8-1.5-3.7Z"/>
+ <path class="st1" d="M267.4,365c.3,1.8-.5,3.7-2.5,3.7-.1-2.1-.2-4.1,2.5-3.7Z"/>
+ <path class="st1" d="M220,351.5c.1.1,0,2.2,0,2.8-.1,1-3.2.3-2.4-2.5.3-1.1,2.2-.5,2.4-.3h0Z"/>
+ <path class="st1" d="M94.1,287.4c2.8-.2,3.8,2.5,1.5,3.7l-1.5-3.7Z"/>
+ <path class="st1" d="M343.5,346.5c-.6.8-4.6,6.5-5.6,5.5.6-.8,4.6-6.5,5.6-5.5Z"/>
+ <path class="st1" d="M62.9,259.3c1.9-.3,3.5,2.9,1.5,3.7-1.5.6-1.8-2.8-1.5-3.7Z"/>
+ <path class="st1" d="M241.2,358.5c2.1-.2,1.8,3.7.6,3.7-.9,0-2.5-3-.6-3.7Z"/>
+ <path class="st1" d="M21.2,102.1c-.1-1.8.9-3.6,2.5-4.3.1,1.7-.3,4.3-2.5,4.3Z"/>
+ <path class="st1" d="M173.2,337.5c-1.6.2-3.1-.9-3.1-2.5,2.1-.2,3.4.2,3.1,2.5Z"/>
+ <path class="st1" d="M326.1,358.7c-1.1,1.9-2.2,3.6-4.4,4.3-.7-.7,3.7-5,4.4-4.3Z"/>
+ </g>
+ </g>
+ <g id="Layer_11" data-name="Layer_1">
+ <g id="Spasm">
+ <g id="Layer_1-2">
+ <path class="st0" d="M2.1,232.4c4.9,3.7,7.3,2,9.2-3.1.7-1.7,3.6-9.1,8.9-15.8,23.8-30.4,86.6-61.9,117.4-73.7,69.4-26.4,237.5-48.2,266.7,21.6,5.4,13.9.9,27.2-5.2,41.2,0,.1,0-.1,0,0,0,6.4,0,10.1,0,12,0,2.9,7.1-2.7,16-10.6,11-9.9,15.6-24.6,17.7-36.9,3.5-19-4.6-38.7-21.5-52.9-16.8-14.3-38.6-21.8-63.5-26.4-108.7-17.3-238.9,21.1-311,85.6-12.3,11.8-45.2,45.5-34.7,58.9h0c0,0,0,0,0,0Z"/>
+ <path class="st0" d="M57.2,137.7c-1.8,2.1-5.1,8.1-1,7.8,4-.7,6.5-2.6,10.5-5.1,14.7-9.9,30-19.3,46.7-27.2,70.8-34.1,153.1-47.7,229.5-37.3,31.5,4.3,65,13.4,82.5,34.5,2.2,2.2,10.9,15.6,12.4,8.9.7-5.2-3.3-13.1-7.6-18.2-10.3-12.8-27.6-21.8-46.5-26.3-21.7-5.2-43.5-9.2-66.3-11.2-87.7-6.4-179.9,17.3-248.1,63-4.6,3.3-8.8,6.9-11.9,11h0c0,.1,0,.1,0,.1Z"/>
+ <path class="st0" d="M359.5,59.3c-36.6-7.8-77.2-8.4-118.1-4.9-7.2.6-16.8,2.4-23.7,2.5-.8,0-2,.2-2.1-.5-.2-1.5,8.2-3.7,10.1-4.2,28.9-8,78.3-8.3,106.6-5.2,11.9,1.3,23,4.2,33.9,7.1,1.9.5,3.9,1,5.9,1.6,4,1.2,2.4,7.3-1.7,6.3-3.6-.9-7.2-1.8-10.9-2.6h0Z"/>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/admin/backup_database.php b/admin/backup_database.php
new file mode 100644
index 0000000..b945408
--- /dev/null
+++ b/admin/backup_database.php
@@ -0,0 +1,37 @@
+<?php
+session_start();
+
+// Config lade
+$config = include(__DIR__ . '/../config.php');
+
+// WebsiteID us der URL hole
+$websiteId = isset($_GET['websiteId']) ? (int)$_GET['websiteId'] : 1;
+
+// Website config ider config finde
+$websiteConfig = array_filter($config, function($site) use ($websiteId) {
+ return isset($site['id']) && $site['id'] === $websiteId;
+});
+$websiteConfig = reset($websiteConfig);
+
+// omg en request mache zum backup erstelle und so wie bin ich so tüüf gfalle 😭
+$source = $websiteConfig['database'];
+$backupDir = __DIR__ . '/../' . $websiteConfig['backup_folder'];
+$timestamp = date('Y-m-d-H-i-s');
+$destination = $backupDir . '/' . $timestamp . '.db';
+
+// stell der vor es git kei backup folder 😱 denn meun mer de mache
+if (!is_dir($backupDir)) {
+ mkdir($backupDir, 0755, true);
+}
+
+// und jetzt stell der vor mer kopieret die datei deht ineh 😱
+if (copy($source, $destination)) {
+ $backupMessage = "Database backup created successfully: " . htmlspecialchars($destination);
+} else {
+ $backupMessage = "Failed to create database backup.";
+}
+
+// zrug zum sexxi admin panel mit de message mir sind so guet und sexi , ich wird niemals eh frau ha im lebe ich bin single af
+header("Location: index.php?backupMessage=" . urlencode($backupMessage));
+exit();
+?>
diff --git a/admin/index.php b/admin/index.php
new file mode 100644
index 0000000..22fa311
--- /dev/null
+++ b/admin/index.php
@@ -0,0 +1,110 @@
+<?php
+// Start session und so
+session_start();
+
+// Config lade
+$config = include(__DIR__ . '/../config.php');
+
+// Sqlite
+$db = new SQLite3(__DIR__ . '/../content.db');
+?>
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Admin Panel</title>
+ <link rel="stylesheet" href="../assets/css/tc.css">
+ <style> /* nachher gihts denne keis styling meh im adminier panel will das blaot oder so isch*/
+ body {
+ font-family: Arial, sans-serif;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 20px;
+ }
+ .header-content {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ }
+ .header-content img {
+ margin-right: 10px;
+ width: 50px;
+ height: auto;
+ }
+ .container {
+ display: flex;
+ width: 100%;
+ max-width: 1200px;
+ }
+ .sidebar {
+ width: 200px;
+ background-color: #f4f4f4;
+ padding: 15px;
+ box-shadow: 2px 0 5px rgba(0,0,0,0.1);
+ }
+ .sidebar a {
+ display: block;
+ padding: 10px;
+ margin: 5px 0;
+ color: #333;
+ text-decoration: none;
+ }
+ .sidebar a:hover {
+ background-color: #ddd;
+ }
+ .content {
+ flex-grow: 1;
+ padding: 20px;
+ background-color: #fff;
+ box-shadow: 0 0 10px rgba(0,0,0,0.1);
+ }
+ .content h1 {
+ margin-top: 0;
+ }
+ .content p {
+ margin-bottom: 20px;
+ }
+ .content form {
+ margin-bottom: 20px;
+ }
+
+ </style>
+</head>
+<body>
+ <div class="header-content">
+ <img src="assets/svg/teleco.svg" alt="Teleco Logo" class="logo">
+ <h1>Adminier Panel</h1>
+ </div>
+ <div class="container">
+ <div class="sidebar">
+ <h2>Adminier Panel</h2>
+ <form method="GET" action="index.php">
+ <label for="websiteId">Select Website:</label>
+ <select name="websiteId" id="websiteId" onchange="this.form.submit()">
+ <?php foreach ($config as $site): ?>
+ <?php if (isset($site['id'])): ?>
+ <option value="<?php echo $site['id']; ?>" <?php echo (isset($_GET['websiteId']) && $_GET['websiteId'] == $site['id']) ? 'selected' : ''; ?>>
+ <?php echo htmlspecialchars($site['name']); ?>
+ </option>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ </select>
+ </form>
+ <a href="backup_database.php?websiteId=<?php echo isset($_GET['websiteId']) ? (int)$_GET['websiteId'] : 1; ?>">Backup Database</a>
+ <a href="tools/edit_database.php">Edit das Database</a>
+ <a href="tools/manage_files.php">Manger das Filet</a>
+ </div>
+ <div class="content">
+ <h1>Welcome to the TC-C-CMS admin Panel</h1>
+ <p>Feast your eyes! This is the last time you will see properish CSS in the admin panel.</p>
+ <p>Made with lots of love for PHP and pure hatred against JavaScript (has none) by T.B <br> TC-C-CMS means Teleco's Crappy Content Management System btw lol hahahaha ich chan das alles nümmeh! </p>
+ <?php if (isset($_GET['backupMessage'])): ?>
+ <p><?php echo htmlspecialchars($_GET['backupMessage']); ?></p>
+ <?php endif; ?>
+ </div>
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/admin/tools/edit_database.php b/admin/tools/edit_database.php
new file mode 100644
index 0000000..bc5489a
--- /dev/null
+++ b/admin/tools/edit_database.php
@@ -0,0 +1,361 @@
+<?php
+session_start();
+
+// Config lade
+$config = include(__DIR__ . '/../../config.php');
+
+// WebsiteID us der URL oder session hole
+$websiteId = isset($_GET['websiteId']) ? (int)$_GET['websiteId'] : (isset($_SESSION['websiteId']) ? (int)$_SESSION['websiteId'] : 1);
+$_SESSION['websiteId'] = $websiteId;
+
+// Website config ider config finde
+$websiteConfig = array_filter($config, function($site) use ($websiteId) {
+ return isset($site['id']) && $site['id'] === $websiteId;
+});
+$websiteConfig = reset($websiteConfig);
+
+// Sqlite datenbank ahfigge
+$db = new SQLite3($websiteConfig['database']);
+
+// Backup erstelle oder ganzi datehbank lôsche *evil laugh* 😈 jk mer propbieret sehr schlecht IDs wieder sekuentiel zmache
+if (isset($_POST['backup']) || isset($_POST['delete_row']) || isset($_POST['reassign_ids'])) {
+ $source = $websiteConfig['database'];
+ $backupDir = __DIR__ . '/../../' . $websiteConfig['backup_folder'];
+ $timestamp = date('Y-m-d-H-i-s');
+ $destination = $backupDir . '/' . $timestamp . '.db';
+
+ // machen das backup directory wenns nid git
+ if (!is_dir($backupDir)) {
+ mkdir($backupDir, 0755, true);
+ }
+
+ // omg file deht ineh kopiere 😱
+ if (copy($source, $destination)) {
+ $backupMessage = "Database backup created successfully: " . htmlspecialchars($destination);
+ } else {
+ $backupMessage = "Failed to create database backup.";
+ }
+}
+
+$selectedTable = $_POST['table'] ?? $_SESSION['selectedTable'] ?? '';
+$columns = [];
+$rows = [];
+$sortOrder = $_GET['sortOrder'] ?? 'ASC';
+
+$tablesResult = $db->query("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence'");
+$tables = [];
+while ($row = $tablesResult->fetchArray(SQLITE3_ASSOC)) {
+ $tables[] = $row['name'];
+}
+
+if ($selectedTable && in_array($selectedTable, $tables)) {
+ $_SESSION['selectedTable'] = $selectedTable;
+ $columnsResult = $db->query("PRAGMA table_info($selectedTable)");
+ while ($row = $columnsResult->fetchArray(SQLITE3_ASSOC)) {
+ $columns[] = $row['name'];
+ }
+ if ($selectedTable == 'content' && in_array('date', $columns)) {
+ $orderBy = "ORDER BY date DESC"; // das hier machen default sorting nach datum und ziiht de neuschti row zerscht will susch isch das unmanagebar
+ } else {
+ $orderBy = in_array('date', $columns) ? "ORDER BY date $sortOrder" : "ORDER BY id ASC";
+ }
+ $rowsResult = $db->query("SELECT * FROM $selectedTable $orderBy");
+ while ($row = $rowsResult->fetchArray(SQLITE3_ASSOC)) {
+ $rows[] = $row;
+ }
+} else {
+ $selectedTable = '';
+ $_SESSION['selectedTable'] = '';
+}
+
+if (isset($_POST['edit_row'])) {
+ header("Location: edit_row.php?table=$selectedTable&id=" . $_POST['id']);
+ exit();
+}
+
+if (isset($_POST['delete_row'])) {
+ $idsToDelete = $_POST['ids'] ?? [];
+ foreach ($idsToDelete as $id) {
+ $stmt = $db->prepare("DELETE FROM $selectedTable WHERE id = :id");
+ $stmt->bindValue(':id', $id, SQLITE3_INTEGER);
+ $stmt->execute();
+ }
+ $message = "Selected rows deleted successfully (most likely).";
+}
+
+if (isset($_POST['insert_row'])) {
+ $values = $_POST['values'];
+ $highestIdResult = $db->querySingle("SELECT MAX(id) as max_id FROM $selectedTable");
+ $highestId = $highestIdResult ? $highestIdResult : 0;
+ $values['id'] = $highestId + 1;
+ if ($selectedTable == 'content') {
+ if (empty($values['date'])) {
+ $values['date'] = date('Y-m-d H:i:s');
+ }
+ }
+ $columnsString = implode(", ", array_keys($values));
+ $placeholders = implode(", ", array_fill(0, count($values), "?"));
+ $stmt = $db->prepare("INSERT INTO $selectedTable ($columnsString) VALUES ($placeholders)");
+ $index = 1;
+ foreach ($values as $value) {
+ $stmt->bindValue($index, $value ?: null, SQLITE3_TEXT);
+ $index++;
+ }
+ $stmt->execute();
+ $message = "Row inserted successfully. (maybe)";
+}
+
+if (isset($_POST['swap_row'])) {
+ $id = $_POST['id'];
+ $targetId = $_POST['target_id'];
+ $db->exec("BEGIN TRANSACTION");
+ $db->exec("UPDATE $selectedTable SET id = -1 WHERE id = $id");
+ $db->exec("UPDATE $selectedTable SET id = $id WHERE id = $targetId");
+ $db->exec("UPDATE $selectedTable SET id = $targetId WHERE id = -1");
+ $db->exec("COMMIT");
+ $message = "Row swapped successfully for sure.";
+}
+
+if (isset($_POST['push_row'])) {
+ $id = $_POST['id'];
+ $targetId = $_POST['target_id'];
+ $tempTable = $selectedTable . '_temp';
+ $db->exec("BEGIN TRANSACTION");
+ $db->exec("CREATE TEMPORARY TABLE $tempTable AS SELECT * FROM $selectedTable");
+ $db->exec("UPDATE $tempTable SET id = -1 WHERE id = $id");
+ if ($id < $targetId) {
+ $db->exec("UPDATE $tempTable SET id = id - 1 WHERE id > $id AND id <= $targetId");
+ } else {
+ $db->exec("UPDATE $tempTable SET id = id + 1 WHERE id < $id AND id >= $targetId");
+ }
+ $db->exec("UPDATE $tempTable SET id = $targetId WHERE id = -1");
+ $db->exec("DELETE FROM $selectedTable");
+ $db->exec("INSERT INTO $selectedTable SELECT * FROM $tempTable");
+ $db->exec("DROP TABLE $tempTable");
+ $db->exec("COMMIT");
+ $message = "Row pushed successfully (perhaps).";
+}
+
+if (isset($_POST['reassign_ids'])) {
+ $tempBackup = $backupDir . '/' . $timestamp . '_temp.db';
+ copy($source, $tempBackup);
+
+ try {
+ $db->exec("BEGIN TRANSACTION");
+ $tempTable = $selectedTable . '_temp';
+ $db->exec("CREATE TEMPORARY TABLE $tempTable AS SELECT * FROM $selectedTable");
+ $db->exec("DELETE FROM $selectedTable");
+
+ if (in_array('date', $columns)) {
+ $orderBy = "ORDER BY date ASC";
+ } else {
+ $orderBy = "ORDER BY id ASC";
+ }
+
+ $rowsResult = $db->query("SELECT * FROM $tempTable $orderBy");
+ $newId = 1;
+ while ($row = $rowsResult->fetchArray(SQLITE3_ASSOC)) {
+ $row['id'] = $newId++;
+ $columnsString = implode(", ", array_keys($row));
+ $placeholders = implode(", ", array_fill(0, count($row), "?"));
+ $stmt = $db->prepare("INSERT INTO $selectedTable ($columnsString) VALUES ($placeholders)");
+ $index = 1;
+ foreach ($row as $value) {
+ $stmt->bindValue($index, $value ?: null, SQLITE3_TEXT);
+ $index++;
+ }
+ $stmt->execute();
+ }
+
+ $db->exec("DROP TABLE $tempTable");
+ $db->exec("COMMIT");
+ $message = "IDs reassigned successfully.";
+ } catch (Exception $e) {
+ copy($tempBackup, $source);
+ $message = "Failed to reassign IDs. Database restored from backup. (probably)";
+ } finally {
+ unlink($tempBackup);
+ }
+}
+?>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Edit Database</title>
+</head>
+<body>
+ <form method="post" action="../index.php">
+ <button type="submit">Back to Admin Panel</button>
+ </form>
+ <h1>Edit Database</h1>
+ <form method="get" action="edit_database.php">
+ <label for="websiteId">Select Website:</label>
+ <select name="websiteId" id="websiteId" onchange="this.form.submit()">
+ <?php foreach ($config as $site): ?>
+ <?php if (isset($site['id'])): ?>
+ <option value="<?php echo $site['id']; ?>" <?php echo ($websiteId == $site['id']) ? 'selected' : ''; ?>>
+ <?php echo htmlspecialchars($site['name']); ?>
+ </option>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ </select>
+ </form>
+ <form method="post">
+ <button type="submit" name="backup">Backup das Database</button>
+ </form>
+ <?php if (isset($backupMessage)): ?>
+ <p><?php echo $backupMessage; ?></p>
+ <?php endif; ?>
+ <form method="post">
+ <label for="table">Select das Table:</label>
+ <select id="table" name="table" onchange="this.form.submit()">
+ <option value="">-- Select a table --</option>
+ <?php foreach ($tables as $table): ?>
+ <option value="<?php echo htmlspecialchars($table); ?>" <?php echo ($selectedTable == $table) ? 'selected' : ''; ?>><?php echo htmlspecialchars($table); ?></option>
+ <?php endforeach; ?>
+ </select>
+ </form>
+ <form method="post">
+ <button type="submit" name="refresh">Refresh</button>
+ </form>
+ <?php if ($selectedTable): ?>
+ <h2>Editing Table: <?php echo htmlspecialchars($selectedTable); ?></h2>
+ <?php if ($selectedTable == 'content'): ?>
+ <form method="post">
+ <input type="hidden" name="table" value="<?php echo htmlspecialchars($selectedTable); ?>">
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Select</th>
+ <?php foreach ($columns as $column): ?>
+ <th>
+ <?php echo htmlspecialchars($column); ?>
+ <?php if ($column == 'date'): ?>
+ <a href="?table=<?php echo htmlspecialchars($selectedTable); ?>&sortOrder=<?php echo $sortOrder == 'ASC' ? 'DESC' : 'ASC'; ?>">Sort by Date</a>
+ <?php endif; ?>
+ </th>
+ <?php endforeach; ?>
+ <th>Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td></td>
+ <?php foreach ($columns as $column): ?>
+ <td>
+ <?php if ($column == 'id'): ?>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" disabled>
+ <?php elseif ($column == 'date'): ?>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" value="<?php echo date('Y-m-d H:i:s'); ?>" disabled>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]">
+ <?php endif; ?>
+ </td>
+ <?php endforeach; ?>
+ <td>
+ <button type="submit" name="insert_row">Add Row</button>
+ </td>
+ </tr>
+ <?php foreach ($rows as $row): ?>
+ <tr>
+ <td><input type="checkbox" name="ids[]" value="<?php echo $row['id']; ?>"></td>
+ <?php foreach ($columns as $column): ?>
+ <td><?php echo htmlspecialchars($row[$column] ?? ''); ?></td>
+ <?php endforeach; ?>
+ <td>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
+ <button type="submit" name="edit_row">Edit</button>
+ </form>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
+ <button type="submit" name="delete_row">Delete</button>
+ </form>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
+ <input type="text" name="target_id" placeholder="Target ID">
+ <button type="submit" name="swap_row">Swap</button>
+ <button type="submit" name="push_row">Push</button>
+ </form>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <button type="submit" name="delete_row">Maybe Delete Selected Rows</button>
+ <button type="submit" name="reassign_ids">Maybe Reassign IDs</button>
+ </form>
+ <?php else: ?>
+ <form method="post">
+ <input type="hidden" name="table" value="<?php echo htmlspecialchars($selectedTable); ?>">
+ <table border="1">
+ <thead>
+ <tr>
+ <th>Select</th>
+ <?php foreach ($columns as $column): ?>
+ <th>
+ <?php echo htmlspecialchars($column); ?>
+ <?php if ($column == 'date'): ?>
+ <a href="?table=<?php echo htmlspecialchars($selectedTable); ?>&sortOrder=<?php echo $sortOrder == 'ASC' ? 'DESC' : 'ASC'; ?>">Sort by Datum</a>
+ <?php endif; ?>
+ </th>
+ <?php endforeach; ?>
+ <th>Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach ($rows as $row): ?>
+ <tr>
+ <td><input type="checkbox" name="ids[]" value="<?php echo $row['id']; ?>"></td>
+ <?php foreach ($columns as $column): ?>
+ <td><?php echo htmlspecialchars($row[$column] ?? ''); ?></td>
+ <?php endforeach; ?>
+ <td>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
+ <button type="submit" name="edit_row">Edit</button>
+ </form>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
+ <button type="submit" name="delete_row">Bye</button>
+ </form>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
+ <input type="text" name="target_id" placeholder="Target ID">
+ <button type="submit" name="swap_row">Swap</button>
+ <button type="submit" name="push_row">Push</button>
+ </form>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ <tr>
+ <td></td>
+ <?php foreach ($columns as $column): ?>
+ <td>
+ <?php if ($column == 'id'): ?>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" disabled>
+ <?php elseif ($column == 'date'): ?>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" value="<?php echo date('Y-m-d H:i:s'); ?>" disabled>
+ <?php elseif ($selectedTable == 'content' && $column == 'custom_html'): ?>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]" value="0">
+ <?php else: ?>
+ <input type="text" name="values[<?php echo htmlspecialchars($column); ?>]">
+ <?php endif; ?>
+ </td>
+ <?php endforeach; ?>
+ <td>
+ <button type="submit" name="insert_row">Add Row</button>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <button type="submit" name="delete_row">Delete Selected Rows</button>
+ <button type="submit" name="reassign_ids">Reassign IDs</button>
+ </form>
+ <?php endif; ?>
+ <?php else: ?>
+ <p>No das table selected. Please select das table to editieren.</p>
+ <?php endif; ?>
+</body>
+</html> \ No newline at end of file
diff --git a/admin/tools/edit_row.php b/admin/tools/edit_row.php
new file mode 100644
index 0000000..ceb59f3
--- /dev/null
+++ b/admin/tools/edit_row.php
@@ -0,0 +1,80 @@
+<?php
+session_start();
+
+// Load configuration
+$config = include(__DIR__ . '/../../config.php');
+
+// Get the website ID from the session
+$websiteId = $_SESSION['websiteId'] ?? 1;
+
+// Find the website configuration
+$websiteConfig = array_filter($config, function($site) use ($websiteId) {
+ return isset($site['id']) && $site['id'] === $websiteId;
+});
+$websiteConfig = reset($websiteConfig);
+
+// Connect to SQLite database
+$db = new SQLite3($websiteConfig['database']);
+
+// Get the table and ID from the request
+$table = $_GET['table'] ?? '';
+$id = $_GET['id'] ?? 0;
+
+$columns = [];
+$columnsResult = $db->query("PRAGMA table_info($table)");
+while ($row = $columnsResult->fetchArray(SQLITE3_ASSOC)) {
+ $columns[] = $row['name'];
+}
+
+$stmt = $db->prepare("SELECT * FROM $table WHERE id = :id");
+$stmt->bindValue(':id', $id, SQLITE3_INTEGER);
+$result = $stmt->execute();
+
+if ($result) {
+ $row = $result->fetchArray(SQLITE3_ASSOC);
+} else {
+ $row = null;
+}
+
+if (isset($_POST['save_changes'])) {
+ foreach ($columns as $column) {
+ $value = $_POST[$column] ?: null;
+ if ($column == 'date' && empty($value)) {
+ $value = date('Y-m-d H:i:s');
+ }
+ if ($table == 'content' && $column == 'custom_html') {
+ $value = $value ? 1 : 0;
+ }
+ $stmt = $db->prepare("UPDATE $table SET $column = :value WHERE id = :id");
+ $stmt->bindValue(':value', $value, SQLITE3_TEXT);
+ $stmt->bindValue(':id', $id, SQLITE3_INTEGER);
+ $stmt->execute();
+ }
+ header("Location: edit_database.php?table=$table");
+ exit();
+}
+?>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Edit Row</title>
+</head>
+<body>
+ <h1>Edit Row in Table: <?php echo htmlspecialchars($table); ?></h1>
+ <form method="post">
+ <?php foreach ($columns as $column): ?>
+ <label for="<?php echo htmlspecialchars($column); ?>"><?php echo htmlspecialchars($column); ?>:</label>
+ <?php if ($table == 'content' && $column == 'content'): ?>
+ <textarea id="<?php echo htmlspecialchars($column); ?>" name="<?php echo htmlspecialchars($column); ?>" style="resize: both;"><?php echo htmlspecialchars($row[$column] ?? ''); ?></textarea>
+ <?php else: ?>
+ <input type="text" id="<?php echo htmlspecialchars($column); ?>" name="<?php echo htmlspecialchars($column); ?>" value="<?php echo htmlspecialchars($row[$column] ?? ''); ?>">
+ <?php endif; ?>
+ <br>
+ <?php endforeach; ?>
+ <button type="submit" name="save_changes">Save Changes</button>
+ </form>
+ <a href="edit_database.php?table=<?php echo htmlspecialchars($table); ?>">Back to Table</a>
+</body>
+</html>
diff --git a/admin/tools/manage_files.php b/admin/tools/manage_files.php
new file mode 100644
index 0000000..f7d9592
--- /dev/null
+++ b/admin/tools/manage_files.php
@@ -0,0 +1,222 @@
+<?php
+session_start();
+
+// Load configuration
+$config = include(__DIR__ . '/../../config.php');
+
+// Get the website ID from the request or session
+$websiteId = isset($_GET['websiteId']) ? (int)$_GET['websiteId'] : (isset($_SESSION['websiteId']) ? (int)$_SESSION['websiteId'] : 1);
+$_SESSION['websiteId'] = $websiteId;
+
+// Find the website configuration
+$websiteConfig = array_filter($config, function($site) use ($websiteId) {
+ return isset($site['id']) && $site['id'] === $websiteId;
+});
+$websiteConfig = reset($websiteConfig);
+
+// Enable error reporting
+error_reporting(E_ALL);
+ini_set('display_errors', 1);
+
+$rootDir = realpath(__DIR__ . '/../../' . $websiteConfig['folder']);
+$currentDir = isset($_GET['dir']) ? realpath($rootDir . '/' . $_GET['dir']) : $rootDir;
+
+// Ensure the current directory is within the root directory
+if (strpos($currentDir, $rootDir) !== 0) {
+ $currentDir = $rootDir;
+}
+
+// Handle file upload
+if (isset($_POST['upload'])) {
+ $targetFile = $currentDir . '/' . basename($_FILES['file']['name']);
+ if (move_uploaded_file($_FILES['file']['tmp_name'], $targetFile)) {
+ $message = "File uploaded successfully.";
+ } else {
+ $message = "Failed to upload file.";
+ }
+}
+
+// Handle file deletion
+if (isset($_POST['delete'])) {
+ $fileToDelete = $currentDir . '/' . $_POST['filename'];
+ if (unlink($fileToDelete)) {
+ $message = "File deleted successfully.";
+ } else {
+ $message = "Failed to delete file.";
+ }
+}
+
+// Handle file renaming
+if (isset($_POST['rename'])) {
+ $oldName = $currentDir . '/' . $_POST['oldname'];
+ $newName = $currentDir . '/' . $_POST['newname'];
+ if (rename($oldName, $newName)) {
+ $message = "File renamed successfully.";
+ } else {
+ $message = "Failed to rename file.";
+ }
+}
+
+// Handle folder creation
+if (isset($_POST['create_folder'])) {
+ $newFolder = $currentDir . '/' . $_POST['foldername'];
+ if (mkdir($newFolder, 0755, true)) {
+ $message = "Folder created successfully.";
+ } else {
+ $message = "Failed to create folder.";
+ }
+}
+
+// Handle folder deletion
+if (isset($_POST['delete_folder'])) {
+ $folderToDelete = $currentDir . '/' . $_POST['foldername'];
+ if (rmdir($folderToDelete)) {
+ $message = "Folder deleted successfully.";
+ } else {
+ $message = "Failed to delete folder.";
+ }
+}
+
+// Handle folder backup
+if (isset($_POST['backup_folder'])) {
+ $backupDir = realpath(__DIR__ . '/../../' . $websiteConfig['backup_folder']);
+ $backupFile = $backupDir . '/' . basename($currentDir) . '_' . date('Ymd_His') . '.tar';
+ $command = "tar -cf $backupFile -C " . escapeshellarg($currentDir) . " .";
+ exec($command, $output, $returnVar);
+ if ($returnVar === 0) {
+ $message = "Folder backed up successfully.";
+ } else {
+ $message = "Failed to back up folder.";
+ }
+}
+
+// Get list of files and directories
+$items = scandir($currentDir);
+
+// Get relative path for display
+$relativePath = str_replace($rootDir, '', $currentDir);
+if ($relativePath === '') {
+ $relativePath = '/';
+}
+?>
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Manage Files</title>
+</head>
+<body>
+ <div class="container">
+ <form method="post" action="../index.php">
+ <button type="submit">Back to Admin Panel</button>
+ </form>
+ <h1>File Manager</h1>
+ <form method="get" action="manage_files.php">
+ <label for="websiteId">Select Website:</label>
+ <select name="websiteId" id="websiteId" onchange="this.form.submit()">
+ <?php foreach ($config as $site): ?>
+ <?php if (isset($site['id'])): ?>
+ <option value="<?php echo $site['id']; ?>" <?php echo ($websiteId == $site['id']) ? 'selected' : ''; ?>>
+ <?php echo htmlspecialchars($site['name']); ?>
+ </option>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ </select>
+ </form>
+ <?php if (isset($message)): ?>
+ <p class="message"><?php echo $message; ?></p>
+ <?php endif; ?>
+ <h2>Current Directory: <?php echo htmlspecialchars($relativePath); ?></h2>
+ <form method="post">
+ <button type="submit" name="refresh">Refresh</button>
+ </form>
+ <table border="1">
+ <thead>
+ <tr>
+ <th colspan="2"></th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php if ($currentDir !== $rootDir): ?>
+ <tr>
+ <td colspan="2"><a href="?dir=<?php echo urlencode(dirname($relativePath)); ?>&websiteId=<?php echo $websiteId; ?>">.. (Parent Directory)</a></td>
+ </tr>
+ <?php endif; ?>
+ <tr>
+ <td colspan="2" style="text-align: center; background-color: yellow;"><strong>Folders</strong></td>
+ </tr>
+ <?php foreach ($items as $item): ?>
+ <?php if ($item === '.' || $item === '..') continue; ?>
+ <?php if (is_dir($currentDir . '/' . $item)): ?>
+ <tr>
+ <td><a href="?dir=<?php echo urlencode(ltrim($relativePath . '/' . $item, '/')); ?>&websiteId=<?php echo $websiteId; ?>"><?php echo htmlspecialchars($item); ?></a></td>
+ <td class="actions">
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="foldername" value="<?php echo htmlspecialchars($item); ?>">
+ <button type="submit" name="delete_folder">Delete</button>
+ </form>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="oldname" value="<?php echo htmlspecialchars($item); ?>">
+ <input type="text" name="newname" placeholder="New name">
+ <button type="submit" name="rename">Rename</button>
+ </form>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <tr>
+ <td colspan="2" style="text-align: center; background-color: orange;"><strong>Files</strong></td>
+ </tr>
+ <?php foreach ($items as $item): ?>
+ <?php if ($item === '.' || $item === '..') continue; ?>
+ <?php if (!is_dir($currentDir . '/' . $item)): ?>
+ <tr>
+ <td><?php echo htmlspecialchars($item); ?></td>
+ <td class="actions">
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="filename" value="<?php echo htmlspecialchars($item); ?>">
+ <button type="submit" name="delete">Delete</button>
+ </form>
+ <form method="post" style="display:inline;">
+ <input type="hidden" name="oldname" value="<?php echo htmlspecialchars($item); ?>">
+ <input type="text" name="newname" placeholder="New name">
+ <button type="submit" name="rename">Rename</button>
+ </form>
+ <a href="../../<?php echo htmlspecialchars($websiteConfig['folder'] . '/' . $relativePath . '/' . $item); ?>" download>Download</a>
+ </td>
+ </tr>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <tr>
+ <td colspan="2">
+ <h2>Upload File</h2>
+ <form method="post" enctype="multipart/form-data">
+ <input type="file" name="file">
+ <button type="submit" name="upload">Upload</button>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <h2>Create Folder</h2>
+ <form method="post">
+ <input type="text" name="foldername" placeholder="Folder name">
+ <button type="submit" name="create_folder">Create</button>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <h2>Backup Folder</h2>
+ <form method="post">
+ <button type="submit" name="backup_folder">Backup Folder</button>
+ </form>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</body>
+</html>