From 6edebcd5b1363536c74f6e1c6f268adb7029daa0 Mon Sep 17 00:00:00 2001 From: Yuri Date: Thu, 13 Nov 2025 00:58:17 +0100 Subject: [PATCH] initial commit --- README.md | 65 + modules/servers/ArkhostVPSAG/ArkhostVPSAG.php | 991 ++++++++ modules/servers/ArkhostVPSAG/callback.php | 93 + modules/servers/ArkhostVPSAG/lang/dutch.php | 139 ++ modules/servers/ArkhostVPSAG/lang/english.php | 139 ++ modules/servers/ArkhostVPSAG/lang/french.php | 139 ++ modules/servers/ArkhostVPSAG/lang/german.php | 139 ++ modules/servers/ArkhostVPSAG/lang/italian.php | 139 ++ .../ArkhostVPSAG/lang/overrides/index.php | 13 + .../ArkhostVPSAG/lang/portuguese-pt.php | 139 ++ modules/servers/ArkhostVPSAG/lang/russian.php | 139 ++ modules/servers/ArkhostVPSAG/lang/spanish.php | 139 ++ modules/servers/ArkhostVPSAG/logo.png | Bin 0 -> 23612 bytes .../template/clientarea_direct.tpl | 2098 +++++++++++++++++ .../servers/ArkhostVPSAG/template/css/app.css | 1040 ++++++++ .../ArkhostVPSAG/template/css/app.min.css | 1040 ++++++++ .../servers/ArkhostVPSAG/template/error.tpl | 30 + .../ArkhostVPSAG/template/img/cloud.png | Bin 0 -> 3395 bytes .../ArkhostVPSAG/template/img/edit.png | Bin 0 -> 3453 bytes .../servers/ArkhostVPSAG/template/img/eye.png | Bin 0 -> 3661 bytes .../ArkhostVPSAG/template/img/installing.png | Bin 0 -> 3968 bytes .../ArkhostVPSAG/template/img/loading.png | Bin 0 -> 3511 bytes .../ArkhostVPSAG/template/img/lock.png | Bin 0 -> 3443 bytes .../ArkhostVPSAG/template/img/notice.png | Bin 0 -> 269 bytes .../template/img/os/almalinux.png | Bin 0 -> 11260 bytes .../ArkhostVPSAG/template/img/os/centos.png | Bin 0 -> 3462 bytes .../ArkhostVPSAG/template/img/os/debian.png | Bin 0 -> 3571 bytes .../ArkhostVPSAG/template/img/os/fedora.png | Bin 0 -> 3239 bytes .../ArkhostVPSAG/template/img/os/iso.png | Bin 0 -> 2754 bytes .../ArkhostVPSAG/template/img/os/lubuntu.png | Bin 0 -> 3287 bytes .../ArkhostVPSAG/template/img/os/mikrotik.png | Bin 0 -> 3601 bytes .../ArkhostVPSAG/template/img/os/opensuse.png | Bin 0 -> 2953 bytes .../ArkhostVPSAG/template/img/os/others.png | Bin 0 -> 2796 bytes .../template/img/os/rockylinux.png | Bin 0 -> 2265 bytes .../ArkhostVPSAG/template/img/os/ubuntu.png | Bin 0 -> 3351 bytes .../ArkhostVPSAG/template/img/os/windows.png | Bin 0 -> 2149 bytes .../ArkhostVPSAG/template/img/running.png | Bin 0 -> 3603 bytes .../ArkhostVPSAG/template/img/search.png | Bin 0 -> 3724 bytes .../ArkhostVPSAG/template/img/settings.png | Bin 0 -> 3693 bytes .../ArkhostVPSAG/template/img/stopped.png | Bin 0 -> 3513 bytes .../ArkhostVPSAG/template/img/suspended.png | Bin 0 -> 3368 bytes .../template/img/under-cancellation.png | Bin 0 -> 3358 bytes .../servers/ArkhostVPSAG/template/img/vnc.png | Bin 0 -> 2970 bytes .../servers/ArkhostVPSAG/template/js/app.js | 295 +++ .../ArkhostVPSAG/template/js/app.min.js | 295 +++ .../ArkhostVPSAG/template/js/bundle.min.js | 174 ++ 46 files changed, 7246 insertions(+) create mode 100644 README.md create mode 100644 modules/servers/ArkhostVPSAG/ArkhostVPSAG.php create mode 100644 modules/servers/ArkhostVPSAG/callback.php create mode 100644 modules/servers/ArkhostVPSAG/lang/dutch.php create mode 100644 modules/servers/ArkhostVPSAG/lang/english.php create mode 100644 modules/servers/ArkhostVPSAG/lang/french.php create mode 100644 modules/servers/ArkhostVPSAG/lang/german.php create mode 100644 modules/servers/ArkhostVPSAG/lang/italian.php create mode 100644 modules/servers/ArkhostVPSAG/lang/overrides/index.php create mode 100644 modules/servers/ArkhostVPSAG/lang/portuguese-pt.php create mode 100644 modules/servers/ArkhostVPSAG/lang/russian.php create mode 100644 modules/servers/ArkhostVPSAG/lang/spanish.php create mode 100644 modules/servers/ArkhostVPSAG/logo.png create mode 100644 modules/servers/ArkhostVPSAG/template/clientarea_direct.tpl create mode 100644 modules/servers/ArkhostVPSAG/template/css/app.css create mode 100644 modules/servers/ArkhostVPSAG/template/css/app.min.css create mode 100644 modules/servers/ArkhostVPSAG/template/error.tpl create mode 100644 modules/servers/ArkhostVPSAG/template/img/cloud.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/edit.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/eye.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/installing.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/loading.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/lock.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/notice.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/almalinux.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/centos.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/debian.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/fedora.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/iso.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/lubuntu.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/mikrotik.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/opensuse.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/others.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/rockylinux.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/ubuntu.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/os/windows.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/running.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/search.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/settings.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/stopped.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/suspended.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/under-cancellation.png create mode 100644 modules/servers/ArkhostVPSAG/template/img/vnc.png create mode 100644 modules/servers/ArkhostVPSAG/template/js/app.js create mode 100644 modules/servers/ArkhostVPSAG/template/js/app.min.js create mode 100644 modules/servers/ArkhostVPSAG/template/js/bundle.min.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..9f6cc98 --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# WHMCS VPS Management Module - ArkHost VPSAG + +A WHMCS server module for VPS management with multi-language support. + +## Features + +- VPS control (start/stop/restart) +- Backup management +- Firewall configuration +- OS reinstallation with advanced options +- Resource monitoring +- VNC console access +- 8 language support +- Responsive design + +## Requirements + +- WHMCS 8.9+ +- PHP 7.4+ + + +## Changelog + +### Version 1.4 +- Fixed firewall rule duplication bug when adding new rules +- Added validation warning for ANY protocol with specific port numbers +- Redesigned firewall interface with modern card-based layout +- Created standalone Firewall tab for better organization +- Completely redesigned VPS Overview section with: + - Server Status Card (hostname, IPs, OS, status, uptime, server type) + - Resource Allocation Card (CPU cores, Memory, Storage, Traffic) + - Resource Usage Card (RAM, Bandwidth, CPU) + - Quick Actions Card (Start/Stop, Restart, VNC Console) +- Fixed Quick Actions button functionality +- Completed all language translations (8 languages: English, Dutch, French, German, Italian, Portuguese, Russian, Spanish) +- Enhanced UI styling with gradient backgrounds and smooth animations +- Improved responsive design and layout consistency +- Removed duplicate VPS Information section +- Optimized resource display (removed redundant disk space usage) + +### Version 1.3 +- Enhanced API integration +- Performance improvements +- Bug fixes + +### Version 1.2 +- Custom notifications replace browser popups +- Confirmation dialogs for critical actions +- Multi-language support for all notifications +- Smart post-installation script examples based on OS +- Fixed firewall rules not displaying after creation +- Improved UI styling and animations + +### Version 1.1 +- Basic VPS management +- Backup operations +- Firewall rules +- OS reinstall + +### Version 1.0 +- Initial release + + +MIT License +© 2025 ArkHost diff --git a/modules/servers/ArkhostVPSAG/ArkhostVPSAG.php b/modules/servers/ArkhostVPSAG/ArkhostVPSAG.php new file mode 100644 index 0000000..2d424ca --- /dev/null +++ b/modules/servers/ArkhostVPSAG/ArkhostVPSAG.php @@ -0,0 +1,991 @@ + + * @link https://arkhost.com + */ + +if (!defined('WHMCS')) { + http_response_code(403); + exit('Access denied'); +} + +use WHMCS\Config\Setting; +use WHMCS\Database\Capsule; + +function ArkhostVPSAG_GetVPSID(array $params) { + $vpsId = $params['model']->serviceProperties->get('vpsag'); + // Handle both VPSAG-xxx and VPS-xxx formats, return just the numeric ID + return str_replace(['VPSAG-', 'VPS-'], '', $vpsId); +} + +function ArkhostVPSAG_API(array $params) { + $url = 'https://www.vpsag.com/api/v1/'; + $data = []; + $method = ''; + + switch ($params['action']) { + case 'Packages': + $url .= 'plans'; + $method .= 'GET'; + break; + + case 'Operating Systems': + $url .= 'os/plan/' . $params['plan_id']; + $method .= 'GET'; + break; + + case 'Upgrades': + $url .= 'upgrade/plans'; + $method .= 'GET'; + break; + + case 'Discount': + $url .= 'discount'; + $method .= 'GET'; + break; + + case 'Balance': + $url .= 'balance'; + $method .= 'GET'; + break; + + case 'Order': + $planId = ArkhostVPSAG_GetOption($params, 'planid'); + $url .= 'order/' . $planId; + $method .= 'POST'; + + $billingCycles = array( + 'Monthly' => 1, + 'Quarterly' => 3, + 'Semi-Annually' => 6, + 'Annually' => 12, + 'Biennially' => 24, + 'Triennially' => 36 + ); + + $data += array( + 'hostname' => $params['domain'] ?? 'vps.example.com', + 'notify_url' => Setting::getValue('SystemURL') . '/modules/servers/ArkhostVPSAG/callback.php', + 'os' => ArkhostVPSAG_GetOption($params, 'osid'), + 'billing_term' => $billingCycles[$params['model']['billingcycle']] ?? 1, + ); + break; + + case 'Server Info': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params); + $method .= 'GET'; + break; + + case 'Label': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/label'; + $method .= 'POST'; + + $data += array( + 'val' => $params['label'], + ); + break; + + case 'Graphs': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/graph/' . $params['time']; + $method .= 'GET'; + break; + + case 'Operating Systems - Server': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/os'; + $method .= 'GET'; + break; + + case 'Cancel': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/cancel'; + $method .= 'POST'; + + $data += array( + 'when' => $params['when'], + ); + break; + + case 'Stop Cancellation': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/stop-cancellation'; + $method .= 'POST'; + break; + + case 'VNC Console': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/vnc'; + $method .= 'GET'; + break; + + case 'Reinstall': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/reinstall'; + $method .= 'POST'; + + $data += array( + 'os' => $params['os'], + 'notify_url' => Setting::getValue('SystemURL') . '/modules/servers/ArkhostVPSAG/callback.php', + ); + + // Add optional SSH key if provided + if (!empty($params['ssh_key'])) { + $data['ssh_key'] = $params['ssh_key']; + } + + // Add optional post-install script if provided + if (!empty($params['run_on_install'])) { + $data['run_on_install'] = base64_encode($params['run_on_install']); + } + + // Set SSH password policy (1 = disable, 2 = enable) + $data['no_ssh_password'] = isset($params['no_ssh_password']) && $params['no_ssh_password'] ? 1 : 2; + break; + + case 'Reboot': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/action/reboot'; + $method .= 'POST'; + break; + + case 'Stop': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/action/stop'; + $method .= 'POST'; + break; + + case 'Shutdown': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/action/shutdown'; + $method .= 'POST'; + break; + + case 'Start': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/action/start'; + $method .= 'POST'; + break; + + case 'Disable': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/action/disable'; + $method .= 'POST'; + break; + + case 'Enable': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/action/enable'; + $method .= 'POST'; + break; + + case 'IPv4 Addresses': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/ipv4'; + $method .= 'GET'; + break; + + case 'Reverse DNS': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/rdns/' . $params['ip']; + $method .= 'POST'; + + $data += array( + 'rdns' => $params['rdns'] + ); + break; + + case 'Addons': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/addons'; + $method .= 'GET'; + break; + + case 'Upgrade': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/upgrade/plan'; + $method .= 'POST'; + + $data += array( + 'plan_id' => ArkhostVPSAG_GetOption($params, 'planid'), + ); + break; + + case 'Hostname rDNS': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/hostname'; + $method .= 'POST'; + + $data += array( + 'hostname' => $params['hostname'] + ); + break; + + case 'Create backup': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/backup'; + $method .= 'POST'; + break; + + case 'Delete backup': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/backup/' . $params['file']; + $method .= 'DELETE'; + break; + + case 'List backups': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/backup'; + $method .= 'GET'; + break; + + case 'Restore backup': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/restore/' . $params['file']; + $method .= 'POST'; + break; + + case 'Get Firewall rules': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/firewall'; + $method .= 'GET'; + break; + + case 'Add Firewall rules': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/firewall'; + $method .= 'POST'; + + $data += array( + 'action' => $params['firewallAction'], + 'protocol' => $params['protocol'], + 'source' => $params['source'], + 'port' => $params['port'], + 'note' => $params['note'], + ); + break; + + case 'Delete Firewall rule': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/firewall/' . $params['rule_id']; + $method .= 'DELETE'; + break; + + case 'Commit Firewall rules': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/firewall/resync'; + $method .= 'POST'; + break; + + case 'ISO Images': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/iso'; + $method .= 'GET'; + break; + + case 'Load ISO': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/iso/' . $params['iso_id']; + $method .= 'POST'; + break; + + case 'Eject ISO': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/iso/0'; + $method .= 'POST'; + break; + + case 'Reset root': + $url .= 'vps/' . ArkhostVPSAG_GetVPSID($params) . '/reset-root'; + $method .= 'POST'; + break; + + default: + throw new Exception('Invalid action: ' . $params['action']); + break; + } + + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); + curl_setopt($curl, CURLOPT_TIMEOUT, 15); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_301); + curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); + curl_setopt($curl, CURLOPT_USERAGENT, 'ArkHost - VPSAG WHMCS'); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('X_API_USER: ' . $params['serverusername'], 'X_API_KEY: ' . $params['serverpassword'])); + + if ($method === 'POST' || $method === 'PATCH') { + curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); + } + + $responseData = curl_exec($curl); + $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + + $responseData = json_decode($responseData, true); + + if ($statusCode === 0) throw new Exception('cURL Error: ' . curl_error($curl)); + + curl_close($curl); + + logModuleCall( + 'ArkHost - VPSAG', + $url, + !empty($data) ? json_encode($data) : '', + print_r($responseData, true) + ); + + if (isset($responseData['status']) && $responseData['status'] === 0) throw new Exception($responseData['result']); + + return $responseData['result']; +} + +function ArkhostVPSAG_Error($func, $params, Exception $err) { + logModuleCall('ArkHost - VPSAG', $func, $params, $err->getMessage(), $err->getTraceAsString()); +} + +function ArkhostVPSAG_MetaData() { + return array( + 'DisplayName' => 'ArkHost - VPSAG', + 'APIVersion' => '1.1', + 'RequiresServer' => true, + ); +} + +function ArkhostVPSAG_ConfigOptions() { + $error = array( + 'error' => array( + 'FriendlyName' => 'Error', + 'Description' => 'Please double check if you selected a Server Group and/or your details are correct.', + 'Type' => '', + ), + ); + + $array = array( + 'planid' => array( + 'FriendlyName' => 'Plan', + 'Description' => 'The Plan desired (Configurable option: planid).', + 'Type' => 'dropdown', + 'Options' => array(), + ), + 'osid' => array( + 'FriendlyName' => 'Operating System', + 'Description' => 'The Operating System desired (Configurable option: osid).', + 'Type' => 'dropdown', + 'Options' => array(), + ), + // Extra resource options removed - now handled via plan selection + // Plans have fixed resources defined within them in the new API + ); + + try { + if (basename($_SERVER['SCRIPT_NAME'], '.php') === 'configproducts' && ($_REQUEST['action'] === 'module-settings' || $_POST['action'] === 'module-settings')) { + $id = 0; + $product; + $serverGroup = 0; + + if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $id = (int) $_POST['id']; + + $product = Capsule::table('tblproducts')->where('id', $id)->first(); + $serverGroup = (int) $_POST['servergroup']; + } else { + $id = (int) $_REQUEST['id']; + + $product = Capsule::table('tblproducts')->where('id', $id)->first(); + $serverGroup = (int) $product->servergroup; + } + + // Only proceed if a server group is actually selected + if ($serverGroup == 0) { + return $array; // Return basic array structure when no server group selected + } + + $serverGroup = Capsule::table('tblservergroupsrel')->where('groupid', $serverGroup)->first(); + if (!$serverGroup) { + // Return basic array if server group not found, don't throw exception + return $array; + } + + $server = Capsule::table('tblservers')->where('id', $serverGroup->serverid)->first(); + if (!$server) { + // Return basic array if server not found, don't throw exception + return $array; + } + + $params = array( + 'serverusername' => $server->username, + 'serverpassword' => decrypt($server->password), + ); + + $params['action'] = 'Packages'; + $packageslist = ArkhostVPSAG_API($params); + + foreach ($packageslist as $package) { + $array['planid']['Options'] += array( + $package['id'] => $package['name'] . ' (' . $package['price'] . '€)' + ); + } + + if ($product->configoption1 == '') return $array; + + $params['action'] = 'Operating Systems'; + $params['plan_id'] = $product->configoption1; + $operatingSystems = ArkhostVPSAG_API($params); + + foreach ($operatingSystems as $operatingSystem) { + $array['osid']['Options'] += array( + $operatingSystem['id'] => $operatingSystem['name'] + ); + } + + // Note: Extra resource upgrades are now handled via plan selection in the new API + // Plans have fixed resources defined within them, no individual resource pricing + } + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + + $error['error']['Description'] = 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + return $error; + } + + return $array; +} + +function ArkhostVPSAG_GetOption(array $params, $id, $default = NULL) { + $options = ArkhostVPSAG_ConfigOptions(); + + $friendlyName = $options[$id]['FriendlyName']; + + if (isset($params['configoptions'][$friendlyName]) && $params['configoptions'][$friendlyName] !== '') { + return $params['configoptions'][$friendlyName]; + } else if (isset($params['configoptions'][$id]) && $params['configoptions'][$id] !== '') { + return $params['configoptions'][$id]; + } else if (isset($params['customfields'][$friendlyName]) && $params['customfields'][$friendlyName] !== '') { + return $params['customfields'][$friendlyName]; + } else if (isset($params['customfields'][$id]) && $params['customfields'][$id] !== '') { + return $params['customfields'][$id]; + } + + $found = false; + $i = 0; + + foreach ($options as $key => $value) { + $i++; + if ($key === $id) { + $found = true; + break; + } + } + + if ($found && isset($params['configoption' . $i]) && $params['configoption' . $i] !== '') { + return $params['configoption' . $i]; + } + + return $default; +} + +function ArkhostVPSAG_TestConnection(array $params) { + $err = ''; + + try { + $params['action'] = 'Balance'; + ArkhostVPSAG_API($params); + } catch (Exception $e) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $e); + $err = 'Received the error: ' . $e->getMessage() . ' Check module debug log for more detailed error.'; + } + + return [ + 'success' => $err === '', + 'error' => $err, + ]; +} + +function ArkhostVPSAG_CreateAccount(array $params) { + try { + $params['action'] = 'Order'; + $create = ArkhostVPSAG_API($params); + + // Validate API response - the API function already handles status=0 errors + // but we need to ensure we have a valid vps_id + if (!is_array($create) || !isset($create['vps_id']) || empty($create['vps_id'])) { + if (is_array($create)) { + logActivity('VPSAG Order Failed - Invalid Response: ' . json_encode($create)); + } else { + logActivity('VPSAG Order Failed - Non-array response: ' . gettype($create)); + } + throw new Exception('Invalid response from API'); + } + + // Ensure vps_id is numeric and valid + if (!is_numeric($create['vps_id']) || $create['vps_id'] <= 0) { + throw new Exception('Invalid response from API'); + } + + $params['model']->serviceProperties->save([ + 'vpsag|VPSAG ID' => 'VPSAG-' . $create['vps_id'], + ]); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_SuspendAccount(array $params) { + try { + $params['action'] = 'Disable'; + ArkhostVPSAG_API($params); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_UnsuspendAccount(array $params) { + try { + $params['action'] = 'Enable'; + ArkhostVPSAG_API($params); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_TerminateAccount(array $params) { + try { + $params['action'] = 'Cancel'; + $params['when'] = 'now'; + ArkhostVPSAG_API($params); + + Capsule::table('tblhosting')->where('id', $params['serviceid'])->update(array( + 'username' => '', + 'password' => '', + )); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + + + +function ArkhostVPSAG_ChangePackage(array $params) { + try { + $params['action'] = 'Upgrade'; + ArkhostVPSAG_API($params); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_Start(array $params) { + try { + ArkhostVPSAG_API($params); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_Reboot(array $params) { + try { + ArkhostVPSAG_API($params); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_Stop(array $params) { + try { + ArkhostVPSAG_API($params); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } + + return 'success'; +} + +function ArkhostVPSAG_VNC(array $params) { + try { + $params['action'] = 'VNC Console'; + $vnc = ArkhostVPSAG_API($params); + + echo ''; + // header('Location: ' . $vnc['vnc_url']); + WHMCS\Terminus::getInstance()->doExit(); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + + return array( + 'templatefile' => 'template/error', + 'templateVariables' => array( + 'error' => $err->getMessage(), + ), + ); + } +} + +function ArkhostVPSAG_AdminCustomButtonArray() { + return array( + 'Start' => 'Start', + 'Stop'=> 'Stop', + 'Reboot' => 'Reboot', + 'VNC Console'=> 'VNC', + ); +} + +function ArkhostVPSAG_AdminLink(array $params) { + try { + $params['action'] = 'Balance'; + $balance = ArkhostVPSAG_API($params); + + $params['action'] = 'Discount'; + $discount = ArkhostVPSAG_API($params); + + return ' Balance: ' . $balance['balance'] . '€
Discount: ' . $discount['percent'] . '%'; + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return 'Received the error: ' . $err->getMessage() . ' Check module debug log for more detailed error.'; + } +} + +function ArkhostVPSAG_ClientAreaAPI(array $params) { + try { + $action = App::getFromRequest('api'); + $actions = array('Server Info', 'Graphs', 'Reinstall', 'Reboot', 'Stop', 'Start', 'IPv4 Addresses', 'Hostname rDNS', 'Create backup', 'Delete backup', 'List backups', 'Restore backup', 'Get Firewall rules', 'Add Firewall rules', 'Delete Firewall rule', 'Commit Firewall rules', 'ISO Images', 'Load ISO', 'Eject ISO', 'Reset root'); + $results = array('result' => 'success'); + + if (in_array($action, $actions)) { + foreach ($_POST as $key => $value) { + $params[$key] = $value; + } + + $params['action'] = $action; + $result = ArkhostVPSAG_API($params); + + // Special handling for specific responses + if ($action === 'Graphs') { + // If result contains graphs data, format it properly + if (isset($result['graphs'])) { + $results['graphs'] = $result['graphs']; + } else if (isset($result['cpu_img']) || isset($result['mem_img']) || isset($result['net_img']) || isset($result['disk_img'])) { + // If the response has individual graph fields, group them + $results['graphs'] = array( + 'cpu_img' => isset($result['cpu_img']) ? $result['cpu_img'] : null, + 'mem_img' => isset($result['mem_img']) ? $result['mem_img'] : null, + 'net_img' => isset($result['net_img']) ? $result['net_img'] : null, + 'disk_img' => isset($result['disk_img']) ? $result['disk_img'] : null + ); + } else { + // If no graph data found, set empty graphs + $results['graphs'] = array( + 'cpu_img' => null, + 'mem_img' => null, + 'net_img' => null, + 'disk_img' => null + ); + } + } else if ($action === 'List backups') { + // Handle backup list response - VPSAG returns array directly + // Pass the result directly - let JavaScript handle the parsing + $results = $result; + } else { + $results = array_merge($results, is_array($result) ? $result : array('data' => $result)); + } + + return array('jsonResponse' => $results); + } else { + throw new Exception('Action not allowed'); + } + } catch (Exception $e) { + return array('jsonResponse' => array('result' => 'error', 'message' => $e->getMessage())); + } +} + +function ArkhostVPSAG_DeliverFile(array $params) { + try { + $dir = __DIR__ . '/template/'; + $file = App::getFromRequest('file'); + $files = array('app.min.css', 'app.min.js'); + + if (in_array($file, $files)) { + $type = ''; + + if (function_exists('ob_gzhandler')) { + ob_start('ob_gzhandler'); + } + + if (strpos($file, '.js') !== false) { + $dir .= 'js/'; + $type = 'application/javascript'; + } else if (strpos($file, '.css') !== false) { + $dir .= 'css/'; + $type = 'text/css'; + } else { + $type = 'text/html'; + } + + header('Content-Type: ' . $type . '; charset=utf-8'); + header('Cache-Control: max-age=604800, public'); + + echo file_get_contents($dir . $file); + WHMCS\Terminus::getInstance()->doExit(); + } else { + throw new Exception('File not found'); + } + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + return array('jsonResponse' => array('result' => 'error', 'message' => $err->getMessage())); + } +} + + + +function ArkhostVPSAG_ClientAreaCustomButtonArray() { + $_LANG = ArkhostVPSAG_Translation(); + + return array( + $_LANG['Start'] => 'Start', + $_LANG['Stop'] => 'Stop', + $_LANG['Restart'] => 'Reboot', + $_LANG['VNC'] => 'VNC', + ); +} + +function ArkhostVPSAG_ClientAreaAllowedFunctions() { + return array('ClientAreaAPI', 'DeliverFile'); +} + +function ArkhostVPSAG_ClientArea(array $params) { + if ($params['moduletype'] !== 'ArkhostVPSAG') return; + + try { + // Check if VPS ID is available + $vpsId = $params['model']->serviceProperties->get('vpsag'); + if (empty($vpsId)) { + throw new Exception('Service not properly provisioned'); + } + + // Get clean VPS ID + $cleanVpsId = ArkhostVPSAG_GetVPSID($params); + if (empty($cleanVpsId)) { + throw new Exception('Invalid VPS ID format'); + } + + // Get server info and operating systems data + $params['action'] = 'Server Info'; + $serverInfo = ArkhostVPSAG_API($params); + + // Check if server info is valid + if (!is_array($serverInfo) || empty($serverInfo)) { + throw new Exception('Unable to retrieve server information from API'); + } + + $params['action'] = 'Operating Systems - Server'; + $operatingSystemsTemp = ArkhostVPSAG_API($params); + + // Check if operating systems data is valid + if (!is_array($operatingSystemsTemp)) { + $operatingSystemsTemp = array(); + } + + $dirImages = __DIR__ . '/template/img/'; + $availableImages = glob($dirImages . '*.png'); + $images = array(); + + foreach ($availableImages as $key => $image) { + $images[explode('.png', explode($dirImages, $image)[1])[0]] = 'data:image/png;base64,' . base64_encode(file_get_contents($image)); + } + + $dirOS = __DIR__ . '/template/img/os/'; + $availableOS = glob($dirOS . '*.png'); + $operatingSystems = array(); + + foreach ($availableOS as $key => $os) { + $availableOS[$key] = explode('.png', explode($dirOS, $os)[1])[0]; + } + + // Only process operating systems if we have valid data + if (!empty($operatingSystemsTemp)) { + foreach ($operatingSystemsTemp as $key => $operatingSystem) { + // Create separate groups for different Linux distributions + $osName = strtolower($operatingSystem['name']); + + // Determine the proper group based on OS name + if (strpos($osName, 'almalinux') !== false || strpos($osName, 'alma') !== false) { + $group = 'almalinux'; + $groupName = 'AlmaLinux'; + } elseif (strpos($osName, 'rocky') !== false || strpos($osName, 'rockylinux') !== false) { + $group = 'rocky'; + $groupName = 'Rocky Linux'; + } elseif (strpos($osName, 'centos') !== false) { + $group = 'centos'; + $groupName = 'CentOS'; + } elseif (strpos($osName, 'debian') !== false) { + $group = 'debian'; + $groupName = 'Debian'; + } elseif (strpos($osName, 'ubuntu') !== false) { + $group = 'ubuntu'; + $groupName = 'Ubuntu'; + } elseif (strpos($osName, 'windows') !== false) { + $group = 'windows'; + $groupName = 'Windows'; + } else { + // Fallback to original group + $group = $operatingSystem['group']; + $groupName = $operatingSystem['group_name']; + } + + if (!isset($operatingSystems[$group])) { + // Map group names to correct image filenames + $imageFile = $group; + if ($group === 'rocky') { + $imageFile = 'rockylinux'; + } + + $image = file_get_contents($dirOS . (in_array($imageFile, $availableOS) ? $imageFile : 'others') . '.png'); + + $operatingSystems[$group] = array( + 'name' => $groupName, + 'image' => 'data:image/png;base64,' . base64_encode($image), + 'versions' => array(), + ); + } + + $operatingSystems[$group]['versions'][] = $operatingSystem; + } + + // Process operating system info only if we have data + if (isset($serverInfo['os']) && !empty($operatingSystemsTemp)) { + $osId = $serverInfo['os']; + $osIndex = array_search($osId, array_column($operatingSystemsTemp, 'id')); + + if ($osIndex !== false && isset($operatingSystemsTemp[$osIndex])) { + $currentOS = $operatingSystemsTemp[$osIndex]; + $osName = strtolower($currentOS['name']); + + // Determine the proper group based on current OS name + if (strpos($osName, 'almalinux') !== false || strpos($osName, 'alma') !== false) { + $group = 'almalinux'; + } elseif (strpos($osName, 'rocky') !== false || strpos($osName, 'rockylinux') !== false) { + $group = 'rocky'; + } elseif (strpos($osName, 'centos') !== false) { + $group = 'centos'; + } elseif (strpos($osName, 'debian') !== false) { + $group = 'debian'; + } elseif (strpos($osName, 'ubuntu') !== false) { + $group = 'ubuntu'; + } elseif (strpos($osName, 'windows') !== false) { + $group = 'windows'; + } else { + $group = $currentOS['group']; + } + + // Use the specific OS information instead of the generic group + $serverInfo['operatingSystem'] = array( + 'name' => $currentOS['name'], + 'image' => isset($operatingSystems[$group]) ? $operatingSystems[$group]['image'] : 'data:image/png;base64,' . base64_encode(file_get_contents(__DIR__ . '/template/img/os/others.png')) + ); + } else { + // Fallback if OS not found in list + $serverInfo['operatingSystem'] = array( + 'name' => 'OS ID: ' . $osId, + 'image' => 'data:image/png;base64,' . base64_encode(file_get_contents(__DIR__ . '/template/img/os/others.png')) + ); + } + } + } + + // Set default OS info if not available + if (!isset($serverInfo['operatingSystem']) || !is_array($serverInfo['operatingSystem'])) { + $serverInfo['operatingSystem'] = array( + 'name' => 'Unknown OS', + 'image' => 'data:image/png;base64,' . base64_encode(file_get_contents($dirOS . 'others.png')) + ); + } + + $serverInfo['status'] = isset($serverInfo['status']) ? ($serverInfo['status'] !== 'ok' ? $serverInfo['status'] : (isset($serverInfo['vm_status']) ? $serverInfo['vm_status'] : 'unknown')) : 'unknown'; + $serverInfo['statusImage'] = isset($images[$serverInfo['status']]) ? $images[$serverInfo['status']] : (isset($images['unknown']) ? $images['unknown'] : ''); + $serverInfo['statusDescription'] = ucfirst($serverInfo['status']); + + // Set default values for missing data + $serverInfo['hostname'] = isset($serverInfo['hostname']) ? $serverInfo['hostname'] : 'N/A'; + $serverInfo['ip'] = isset($serverInfo['ip']) ? $serverInfo['ip'] : 'N/A'; + $serverInfo['uptime_text'] = isset($serverInfo['uptime_text']) ? $serverInfo['uptime_text'] : 'N/A'; + $serverInfo['server_type'] = isset($serverInfo['category']) ? $serverInfo['category'] : 'Standard'; + $serverInfo['cpu_usage'] = isset($serverInfo['cpu_usage']) ? $serverInfo['cpu_usage'] : 0; + $serverInfo['ram_usage'] = isset($serverInfo['ram_usage']) ? $serverInfo['ram_usage'] : 0; + $serverInfo['ram'] = isset($serverInfo['ram']) ? $serverInfo['ram'] : 1; + + // Handle disk usage data (API may not always return this field) + + $serverInfo['disk_used'] = isset($serverInfo['disk_usage']) ? $serverInfo['disk_usage'] : + (isset($serverInfo['disk_used']) ? $serverInfo['disk_used'] : 0); + $serverInfo['disk'] = isset($serverInfo['disk']) ? $serverInfo['disk'] : 1; + $serverInfo['bandwidth_used'] = isset($serverInfo['bandwidth_used']) ? $serverInfo['bandwidth_used'] : 0; + $serverInfo['bandwidth'] = isset($serverInfo['bandwidth']) ? $serverInfo['bandwidth'] : 1; + + return array( + 'templatefile' => 'template/clientarea_direct', + 'templateVariables' => array( + 'images' => $images, + 'serverInfo' => $serverInfo, + 'operatingSystems' => $operatingSystems, + 'token' => generate_token('plain'), + '_LANG' => ArkhostVPSAG_Translation(), + ) + ); + } catch (Exception $err) { + ArkhostVPSAG_Error(__FUNCTION__, $params, $err); + + return array( + 'templatefile' => 'template/error', + 'templateVariables' => array( + 'error' => $err->getMessage(), + 'image' => 'data:image/png;base64,' . base64_encode(file_get_contents(__DIR__ . '/template/img/notice.png')) + ) + ); + } +} + +function ArkhostVPSAG_Translation() { + $lang = Setting::getValue('Language'); + $language = Lang::getName(); + $_ADDONLANG = []; + + if ($language === '') { + $language = $lang; + } + + if ($language) { + $addonLangFile = ROOTDIR . '/modules/servers/ArkhostVPSAG/lang/' . $language . '.php'; + + if (file_exists($addonLangFile)) { + swapLang($language); + + ob_start(); + require $addonLangFile; + ob_end_clean(); + } + } + + if (count($_ADDONLANG) === 0) { + $addonLangFile = ROOTDIR . '/modules/servers/ArkhostVPSAG/lang/' . $lang . '.php'; + + if (file_exists($addonLangFile)) { + swapLang($lang); + + ob_start(); + require $addonLangFile; + ob_end_clean(); + } + } + + if (count($_ADDONLANG) === 0) { + $addonLangFile = ROOTDIR . '/modules/servers/ArkhostVPSAG/lang/english.php'; + + if (file_exists($addonLangFile)) { + ob_start(); + require $addonLangFile; + ob_end_clean(); + } + } + + return $_ADDONLANG; +} diff --git a/modules/servers/ArkhostVPSAG/callback.php b/modules/servers/ArkhostVPSAG/callback.php new file mode 100644 index 0000000..8e11dba --- /dev/null +++ b/modules/servers/ArkhostVPSAG/callback.php @@ -0,0 +1,93 @@ + + */ + +if (empty($_POST)) { + http_response_code(400); + exit('Bad Request'); +} + +require_once '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'init.php'; +require_once ROOTDIR . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'servers' . DIRECTORY_SEPARATOR . 'ArkhostVPSAG' . DIRECTORY_SEPARATOR . 'ArkhostVPSAG.php'; + +use WHMCS\Database\Capsule; + +$_POST = array_map('html_entity_decode', $_POST); + +// Look for the service by VPSAG ID in service properties +$serviceProperty = Capsule::table('tblservice_properties') + ->where('property', 'vpsag|VPSAG ID') + ->where('value', 'VPSAG-' . $_POST['server_id']) + ->first(); + +if (!$serviceProperty) { + // Fallback: try to find in custom fields for backward compatibility + $customField = Capsule::table('tblcustomfieldsvalues')->where('value', 'VPSAG-' . $_POST['server_id'])->first(); + if ($customField) { + $service = WHMCS\Service\Service::find($customField->relid); + } else { + http_response_code(404); + exit('Service not found'); + } +} else { + $service = WHMCS\Service\Service::find($serviceProperty->service_id); +} + +if (!$service) { + http_response_code(404); + exit('Service not found'); +} + +$server = Capsule::table('tblservers')->where('id', $service->server)->first(); + +$rawSig = ''; +ksort($_POST, SORT_STRING); + +foreach ($_POST as $key => $value) { + if ($key === 'sig') continue; + $rawSig .= $value; +} + +$rawSig .= hash('sha512', decrypt($server->password)); +$signature = hash('sha256', $rawSig); + +if ($_POST['sig'] != $signature) { + http_response_code(403); + exit('Invalid signature'); +} + +$params = array( + 'serverusername' => $server->username, + 'serverpassword' => decrypt($server->password), + 'action' => 'Label', + 'label' => 'WHMCS ' . $service->id, + 'model' => $service +); +ArkhostVPSAG_API($params); + +if (gettype($_POST['ips']) !== 'array') $_POST['ips'] = json_decode($_POST['ips'], true); + +$_POST['ips'] = array_map(function ($ip) { + return $ip['ip']; +}, $_POST['ips']); + +$mainIP = $_POST['mainip']; + +$_POST['ips'] = array_filter($_POST['ips'], function ($ip) use ($mainIP) { + return $ip !== $mainIP; +}); + +Capsule::table('tblhosting')->where('id', $service->id)->update(array( + 'username' => $_POST['username'], + 'password' => encrypt($_POST['root']), + 'dedicatedip' => $mainIP, + 'assignedips' => (!array_shift($_POST['ips']) ? $_POST['ipv6'] : implode('\n', $_POST['ips']) . '\n' . $_POST['ipv6']), +)); + +echo '*ok*'; diff --git a/modules/servers/ArkhostVPSAG/lang/dutch.php b/modules/servers/ArkhostVPSAG/lang/dutch.php new file mode 100644 index 0000000..8ba5fa3 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/dutch.php @@ -0,0 +1,139 @@ +** De geautomatiseerde back-ups zullen ook uw handmatige back-ups vervangen, tenzij de geautomatiseerde back-ups zijn uitgeschakeld.
*** De geautomatiseerde back-ups worden 2 keer per week gemaakt en maken deel uit van ons noodherstelplan. Als u de geautomatiseerde back-ups uitschakelt, schakelt u ook elke kans op herstel in geval van een ramp uit.
**** Het bestandssysteem van de back-up is mogelijk niet volledig consistent als de VPS op het moment van de back-up naar het bestandssysteem schreef. Voor volledig consistente back-ups moet de server worden gestopt terwijl de back-up wordt gemaakt.'; +$_ADDONLANG['Backups']['Date'] = 'Datum'; +$_ADDONLANG['Backups']['Size'] = 'Grootte'; +$_ADDONLANG['Backups']['Type'] = 'Type'; +$_ADDONLANG['Backups']['Status'] = 'Status'; +$_ADDONLANG['Backups']['Actions'] = 'Acties'; +$_ADDONLANG['Backups']['Create'] = 'Nu Back-up Maken'; +$_ADDONLANG['Backups']['Available'] = 'Beschikbaar'; +$_ADDONLANG['Backups']['Creating'] = 'Bezig met maken...'; +$_ADDONLANG['Backups']['Error'] = 'Fout'; +$_ADDONLANG['Backups']['Automatic'] = 'Automatisch'; +$_ADDONLANG['Backups']['Manual'] = 'Handmatig'; + +## Instellingen +### Hostnaam +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Hostnaam'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Stelt de hostnaam en de rDNS in. Maak eerst het A-record aan.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Verzenden'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Als u het besturingssysteem via het ISO-image installeert, moet u ook de netwerkinterface statisch configureren. Er draait geen DHCP-server.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'ISO-image'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'ISO Laden'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'ISO Uitwerpen'; + +### Wachtwoord +$_ADDONLANG['Settings']['Password']['Title'] = 'Wachtwoord'; +$_ADDONLANG['Settings']['Password']['Description'] = 'Het installatiewachtwoord wordt na 72 uur uit onze systemen verwijderd. Het is verplicht om het wachtwoord bij uw eerste aanmelding te wijzigen!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Wachtwoord Resetten'; + +### Herinstalleren +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Herinstalleren'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Begrijp alstublieft dat bij het herinstalleren alle gegevens van de server worden gewist. Deze actie is onomkeerbaar!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Besturingssysteem'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'KIES VERSIE'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Herinstalleren'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'SSH Publieke Sleutel (optioneel)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Plak hier uw openbare SSH-sleutel (begint met ssh-rsa, ssh-ed25519, etc.). Deze wordt automatisch toegevoegd aan ~/.ssh/authorized_keys voor wachtwoordloos inloggen.'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Post-installatiescript (optioneel)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Voer een bash-script in dat automatisch wordt uitgevoerd nadat de OS-installatie is voltooid. Handig voor het installeren van pakketten, het configureren van services of het instellen van uw omgeving.'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'SSH-wachtwoordauthenticatie uitschakelen'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Indien ingeschakeld, is alleen SSH-sleutelauthenticatie toegestaan. Inloggen met wachtwoord via SSH wordt uitgeschakeld voor verbeterde beveiliging.'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Firewall'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'De regels worden van boven naar beneden geëvalueerd. Standaard is alles toegestaan. De firewall is alleen beschikbaar op de openbare interface. Alleen het inkomende verkeer wordt door de firewall gefilterd.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Nieuwe Firewallregel Toevoegen'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Huidige Firewallregels'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Regel Toevoegen'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Actie'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Poort'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protocol'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Bron'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Notitie'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Acties'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Accepteren'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Weigeren'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Poortnummer'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Bijv: x.x.x.x/xx (optioneel)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Notities (optioneel)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'De regels moeten worden toegepast om van kracht te worden.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Firewall Toepassen'; + +if (file_exists(__DIR__ . '/overrides/english.php')) include_once(__DIR__ . '/overrides/english.php'); diff --git a/modules/servers/ArkhostVPSAG/lang/english.php b/modules/servers/ArkhostVPSAG/lang/english.php new file mode 100644 index 0000000..a25b84a --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/english.php @@ -0,0 +1,139 @@ +** The automated backups will also replace your manual backups unless the automated backups are disabled.
*** The automated backups are made 2 times a week and are part of our disaster recovery plan. If you disable the automated backups, you also disable any chance of recovery in case of a disaster.
**** The backup\'s file system might not be fully consistent if the VPS was writing to the filesystem at the moment of the backup. For fully consistent backups, the server must be stopped while the backup is being created.'; +$_ADDONLANG['Backups']['Date'] = 'Date'; +$_ADDONLANG['Backups']['Size'] = 'Size'; +$_ADDONLANG['Backups']['Type'] = 'Type'; +$_ADDONLANG['Backups']['Status'] = 'Status'; +$_ADDONLANG['Backups']['Actions'] = 'Actions'; +$_ADDONLANG['Backups']['Create'] = 'Backup Now'; +$_ADDONLANG['Backups']['Available'] = 'Available'; +$_ADDONLANG['Backups']['Creating'] = 'Creating...'; +$_ADDONLANG['Backups']['Error'] = 'Error'; +$_ADDONLANG['Backups']['Automatic'] = 'Automatic'; +$_ADDONLANG['Backups']['Manual'] = 'Manual'; + +## Settings +### Hostname +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Hostname'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Sets the hostname and the rDNS. Please create the A record first.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Submit'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'If you install the operating system via the ISO image, you must also configure the network interface statically. There is no DHCP server running.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'ISO Image'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'Load ISO'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'Eject ISO'; + +### Password +$_ADDONLANG['Settings']['Password']['Title'] = 'Password'; +$_ADDONLANG['Settings']['Password']['Description'] = 'The installation password is removed from our systems after 72 hours. It is mandatory for you to change the password on your first login!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Reset Password'; + +### Reinstall +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Reinstall'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Please understand that by reinstalling, all the data will be wiped from the server. This action is irreversible!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Operating System'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'CHOOSE VERSION'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Reinstall'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'SSH Public Key (optional)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Paste your SSH public key here (starts with ssh-rsa, ssh-ed25519, etc.). This will be automatically added to ~/.ssh/authorized_keys for passwordless login.'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Post-Installation Script (optional)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Enter a bash script to automatically run after the OS installation completes. Useful for installing packages, configuring services, or setting up your environment.'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'Disable SSH password authentication'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'When enabled, only SSH key authentication will be allowed. Password login via SSH will be disabled for enhanced security.'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Firewall'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'The rules are evaluated from the top to the bottom. By default, everything is allowed. The firewall is only available on the public interface. Only the inbound traffic will be filtered by the firewall.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Add New Firewall Rule'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Current Firewall Rules'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Add Rule'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Action'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Port'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protocol'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Source'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Note'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Actions'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Accept'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Drop'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Port Number'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Ex: x.x.x.x/xx (optional)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Notes (optional)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'The rules must be committed in order to take effect.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Commit Firewall'; + +if (file_exists(__DIR__ . '/overrides/english.php')) include_once(__DIR__ . '/overrides/english.php'); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/lang/french.php b/modules/servers/ArkhostVPSAG/lang/french.php new file mode 100644 index 0000000..dc68443 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/french.php @@ -0,0 +1,139 @@ +** Les sauvegardes automatiques remplaceront également vos sauvegardes manuelles à moins que les sauvegardes automatiques ne soient désactivées.
*** Les sauvegardes automatiques sont effectuées 2 fois par semaine et font partie de notre plan de récupération après sinistre. Si vous désactivez les sauvegardes automatiques, vous désactivez également toute chance de récupération en cas de sinistre.
**** Le système de fichiers de la sauvegarde pourrait ne pas être entièrement cohérent si le VPS écrivait sur le système de fichiers au moment de la sauvegarde. Pour des sauvegardes entièrement cohérentes, le serveur doit être arrêté pendant que la sauvegarde est créée.'; +$_ADDONLANG['Backups']['Date'] = 'Date'; +$_ADDONLANG['Backups']['Size'] = 'Taille'; +$_ADDONLANG['Backups']['Type'] = 'Type'; +$_ADDONLANG['Backups']['Status'] = 'État'; +$_ADDONLANG['Backups']['Actions'] = 'Actions'; +$_ADDONLANG['Backups']['Create'] = 'Sauvegarder maintenant'; +$_ADDONLANG['Backups']['Available'] = 'Disponible'; +$_ADDONLANG['Backups']['Creating'] = 'Création...'; +$_ADDONLANG['Backups']['Error'] = 'Erreur'; +$_ADDONLANG['Backups']['Automatic'] = 'Automatique'; +$_ADDONLANG['Backups']['Manual'] = 'Manuel'; + +## Settings +### Hostname +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Nom d\'hôte'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Définit le nom d\'hôte et le rDNS. Veuillez d\'abord créer l\'enregistrement A.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Soumettre'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Si vous installez le système d\'exploitation via l\'image ISO, vous devez également configurer l\'interface réseau de manière statique. Il n\'y a pas de serveur DHCP en cours d\'exécution.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'Image ISO'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'Charger ISO'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'Éjecter ISO'; + +### Password +$_ADDONLANG['Settings']['Password']['Title'] = 'Mot de passe'; +$_ADDONLANG['Settings']['Password']['Description'] = 'Le mot de passe d\'installation est supprimé de nos systèmes après 72 heures. Il est obligatoire de changer le mot de passe lors de votre première connexion !'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Réinitialiser le mot de passe'; + +### Reinstall +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Réinstaller'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Veuillez comprendre qu\'en réinstallant, toutes les données seront effacées du serveur. Cette action est irréversible !'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Système d\'exploitation'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'CHOISIR LA VERSION'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Réinstaller'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'Clé publique SSH (optionnel)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Ajouter votre clé SSH pour connexion sans mot de passe'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Script post-installation (optionnel)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Script bash à exécuter après l\'installation du SE'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'Désactiver connexion SSH par mot de passe'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Autoriser uniquement l\'authentification par clé SSH'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Pare-feu'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'Les règles sont évaluées de haut en bas. Par défaut, tout est autorisé. Le pare-feu n\'est disponible que sur l\'interface publique. Seul le trafic entrant sera filtré par le pare-feu.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Ajouter une nouvelle règle de pare-feu'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Règles de pare-feu actuelles'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Ajouter une règle'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Action'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Port'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protocole'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Source'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Note'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Actions'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Accepter'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Rejeter'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Numéro de port'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Ex : x.x.x.x/xx (optionnel)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Notes (optionnel)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'Les règles doivent être validées pour prendre effet.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Valider le pare-feu'; + +if (file_exists(__DIR__ . '/overrides/french.php')) include_once(__DIR__ . '/overrides/french.php'); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/lang/german.php b/modules/servers/ArkhostVPSAG/lang/german.php new file mode 100644 index 0000000..2df3bb7 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/german.php @@ -0,0 +1,139 @@ +** Die automatischen Sicherungen ersetzen auch Ihre manuellen Sicherungen, es sei denn, die automatischen Sicherungen sind deaktiviert.
*** Die automatischen Sicherungen werden 2-mal pro Woche erstellt und sind Teil unseres Disaster-Recovery-Plans. Wenn Sie die automatischen Sicherungen deaktivieren, deaktivieren Sie auch jede Chance auf Wiederherstellung im Falle einer Katastrophe.
**** Das Dateisystem der Sicherung ist möglicherweise nicht vollständig konsistent, wenn der VPS zum Zeitpunkt der Sicherung in das Dateisystem schrieb. Für vollständig konsistente Sicherungen muss der Server gestoppt werden, während die Sicherung erstellt wird.'; +$_ADDONLANG['Backups']['Date'] = 'Datum'; +$_ADDONLANG['Backups']['Size'] = 'Größe'; +$_ADDONLANG['Backups']['Type'] = 'Typ'; +$_ADDONLANG['Backups']['Status'] = 'Status'; +$_ADDONLANG['Backups']['Actions'] = 'Aktionen'; +$_ADDONLANG['Backups']['Create'] = 'Jetzt sichern'; +$_ADDONLANG['Backups']['Available'] = 'Verfügbar'; +$_ADDONLANG['Backups']['Creating'] = 'Erstellen...'; +$_ADDONLANG['Backups']['Error'] = 'Fehler'; +$_ADDONLANG['Backups']['Automatic'] = 'Automatisch'; +$_ADDONLANG['Backups']['Manual'] = 'Manuell'; + +## Settings +### Hostname +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Hostname'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Setzt den Hostnamen und das rDNS. Bitte erstellen Sie zuerst den A-Record.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Absenden'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Wenn Sie das Betriebssystem über das ISO-Image installieren, müssen Sie auch die Netzwerkschnittstelle statisch konfigurieren. Es läuft kein DHCP-Server.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'ISO-Image'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'ISO laden'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'ISO auswerfen'; + +### Password +$_ADDONLANG['Settings']['Password']['Title'] = 'Passwort'; +$_ADDONLANG['Settings']['Password']['Description'] = 'Das Installationspasswort wird nach 72 Stunden aus unseren Systemen entfernt. Sie müssen das Passwort bei Ihrer ersten Anmeldung ändern!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Passwort zurücksetzen'; + +### Reinstall +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Neuinstallation'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Bitte verstehen Sie, dass durch die Neuinstallation alle Daten vom Server gelöscht werden. Diese Aktion ist unumkehrbar!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Betriebssystem'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'VERSION WÄHLEN'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Neuinstallieren'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'SSH öffentlicher Schlüssel (optional)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Fügen Sie hier Ihren SSH-öffentlichen Schlüssel ein (beginnt mit ssh-rsa, ssh-ed25519, etc.). Dieser wird automatisch zu ~/.ssh/authorized_keys für passwortlose Anmeldung hinzugefügt.'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Post-Installations-Skript (optional)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Geben Sie ein Bash-Skript ein, das automatisch nach Abschluss der OS-Installation ausgeführt wird. Nützlich für die Installation von Paketen, Konfiguration von Diensten oder Einrichtung Ihrer Umgebung.'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'SSH-Passwort-Authentifizierung deaktivieren'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Wenn aktiviert, ist nur SSH-Schlüssel-Authentifizierung erlaubt. Passwort-Login über SSH wird für erhöhte Sicherheit deaktiviert.'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Firewall'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'Die Regeln werden von oben nach unten ausgewertet. Standardmäßig ist alles erlaubt. Die Firewall ist nur auf der öffentlichen Schnittstelle verfügbar. Nur der eingehende Verkehr wird von der Firewall gefiltert.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Neue Firewall-Regel hinzufügen'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Aktuelle Firewall-Regeln'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Regel hinzufügen'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Aktion'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Port'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protokoll'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Quelle'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Notiz'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Aktionen'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Akzeptieren'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Verwerfen'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Port-Nummer'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Bsp: x.x.x.x/xx (optional)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Notizen (optional)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'Die Regeln müssen übernommen werden, um wirksam zu werden.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Firewall übernehmen'; + +if (file_exists(__DIR__ . '/overrides/german.php')) include_once(__DIR__ . '/overrides/german.php'); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/lang/italian.php b/modules/servers/ArkhostVPSAG/lang/italian.php new file mode 100644 index 0000000..ac0f24b --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/italian.php @@ -0,0 +1,139 @@ +** I backup automatici sostituiranno anche i tuoi backup manuali a meno che i backup automatici non siano disabilitati.
*** I backup automatici vengono eseguiti 2 volte a settimana e fanno parte del nostro piano di disaster recovery. Se disabiliti i backup automatici, disabiliti anche qualsiasi possibilità di recupero in caso di disastro.
**** Il file system del backup potrebbe non essere completamente coerente se il VPS stava scrivendo sul filesystem al momento del backup. Per backup completamente coerenti, il server deve essere fermato durante la creazione del backup.'; +$_ADDONLANG['Backups']['Date'] = 'Data'; +$_ADDONLANG['Backups']['Size'] = 'Dimensione'; +$_ADDONLANG['Backups']['Type'] = 'Tipo'; +$_ADDONLANG['Backups']['Status'] = 'Stato'; +$_ADDONLANG['Backups']['Actions'] = 'Azioni'; +$_ADDONLANG['Backups']['Create'] = 'Backup Ora'; +$_ADDONLANG['Backups']['Available'] = 'Disponibile'; +$_ADDONLANG['Backups']['Creating'] = 'Creazione...'; +$_ADDONLANG['Backups']['Error'] = 'Errore'; +$_ADDONLANG['Backups']['Automatic'] = 'Automatico'; +$_ADDONLANG['Backups']['Manual'] = 'Manuale'; + +## Settings +### Hostname +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Hostname'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Imposta l\'hostname e l\'rDNS. Crea prima il record A.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Invia'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Se installi il sistema operativo tramite l\'immagine ISO, devi anche configurare staticamente l\'interfaccia di rete. Non c\'è un server DHCP in esecuzione.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'Immagine ISO'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'Carica ISO'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'Espelli ISO'; + +### Password +$_ADDONLANG['Settings']['Password']['Title'] = 'Password'; +$_ADDONLANG['Settings']['Password']['Description'] = 'La password di installazione viene rimossa dai nostri sistemi dopo 72 ore. È obbligatorio cambiare la password al primo accesso!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Reimposta Password'; + +### Reinstall +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Reinstalla'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Ti preghiamo di comprendere che reinstallando, tutti i dati saranno cancellati dal server. Questa azione è irreversibile!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Sistema Operativo'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'SCEGLI VERSIONE'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Reinstalla'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'Chiave pubblica SSH (opzionale)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Aggiungi la tua chiave SSH per accesso senza password'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Script post-installazione (opzionale)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Script bash da eseguire dopo l\'installazione del SO'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'Disabilita login SSH con password'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Consenti solo autenticazione con chiave SSH'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Firewall'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'Le regole vengono valutate dall\'alto verso il basso. Per impostazione predefinita, tutto è consentito. Il firewall è disponibile solo sull\'interfaccia pubblica. Solo il traffico in entrata sarà filtrato dal firewall.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Aggiungi Nuova Regola Firewall'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Regole Firewall Attuali'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Aggiungi Regola'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Azione'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Porta'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protocollo'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Origine'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Nota'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Azioni'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Accetta'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Scarta'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Numero Porta'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Es: x.x.x.x/xx (opzionale)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Note (opzionale)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'Le regole devono essere confermate per entrare in vigore.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Conferma Firewall'; + +if (file_exists(__DIR__ . '/overrides/italian.php')) include_once(__DIR__ . '/overrides/italian.php'); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/lang/overrides/index.php b/modules/servers/ArkhostVPSAG/lang/overrides/index.php new file mode 100644 index 0000000..75befd5 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/overrides/index.php @@ -0,0 +1,13 @@ + + * @link https://arkhost.com + */ + +http_response_code(403); +exit('Access denied'); +?> \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/lang/portuguese-pt.php b/modules/servers/ArkhostVPSAG/lang/portuguese-pt.php new file mode 100644 index 0000000..6e3473a --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/portuguese-pt.php @@ -0,0 +1,139 @@ +** As cópias de segurança automáticas também irão substituir as suas cópias de segurança manuais, a menos que as cópias de segurança automáticas estejam desativadas.
*** As cópias de segurança automáticas são feitas 2 vezes por semana e fazem parte do nosso plano de recuperação de desastres. Se desativar as cópias de segurança automáticas, também desativa qualquer hipótese de recuperação em caso de desastre.
**** O sistema de ficheiros da cópia de segurança pode não estar totalmente consistente se o VPS estivesse a escrever no sistema de ficheiros no momento da cópia de segurança. Para cópias de segurança totalmente consistentes, o servidor deve ser parado enquanto a cópia de segurança está a ser criada.'; +$_ADDONLANG['Backups']['Date'] = 'Data'; +$_ADDONLANG['Backups']['Size'] = 'Tamanho'; +$_ADDONLANG['Backups']['Type'] = 'Tipo'; +$_ADDONLANG['Backups']['Status'] = 'Estado'; +$_ADDONLANG['Backups']['Actions'] = 'Ações'; +$_ADDONLANG['Backups']['Create'] = 'Criar cópia agora'; +$_ADDONLANG['Backups']['Available'] = 'Disponível'; +$_ADDONLANG['Backups']['Creating'] = 'Criando...'; +$_ADDONLANG['Backups']['Error'] = 'Erro'; +$_ADDONLANG['Backups']['Automatic'] = 'Automático'; +$_ADDONLANG['Backups']['Manual'] = 'Manual'; + +## Settings +### Hostname +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Nome do anfitrião'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Define o nome do anfitrião e o rDNS. Por favor, crie primeiro o registo A.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Submeter'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Se instalar o sistema operativo através da imagem ISO, também deve configurar a interface de rede estaticamente. Não há servidor DHCP em execução.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'Imagem ISO'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'Carregar ISO'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'Ejetar ISO'; + +### Password +$_ADDONLANG['Settings']['Password']['Title'] = 'Palavra-passe'; +$_ADDONLANG['Settings']['Password']['Description'] = 'A palavra-passe de instalação é removida dos nossos sistemas após 72 horas. É obrigatório alterar a palavra-passe no primeiro início de sessão!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Redefinir palavra-passe'; + +### Reinstall +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Reinstalar'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Por favor, compreenda que ao reinstalar, todos os dados serão apagados do servidor. Esta ação é irreversível!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Sistema operativo'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'ESCOLHER VERSÃO'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Reinstalar'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'Chave pública SSH (opcional)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Adicionar chave SSH para acesso sem palavra-passe'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Script pós-instalação (opcional)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Script bash para executar após instalação do SO'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'Desabilitar login SSH com palavra-passe'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Permitir apenas autenticação com chave SSH'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Firewall'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'As regras são avaliadas de cima para baixo. Por defeito, tudo é permitido. A firewall está apenas disponível na interface pública. Apenas o tráfego de entrada será filtrado pela firewall.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Adicionar Nova Regra de Firewall'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Regras de Firewall Atuais'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Adicionar Regra'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Ação'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Porta'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protocolo'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Origem'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Nota'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Ações'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Aceitar'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Descartar'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Número da porta'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Ex: x.x.x.x/xx (opcional)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Notas (opcional)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'As regras devem ser confirmadas para entrarem em vigor.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Confirmar firewall'; + +if (file_exists(__DIR__ . '/overrides/portuguese-pt.php')) include_once(__DIR__ . '/overrides/portuguese-pt.php'); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/lang/russian.php b/modules/servers/ArkhostVPSAG/lang/russian.php new file mode 100644 index 0000000..0bef672 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/russian.php @@ -0,0 +1,139 @@ +** Автоматические резервные копии также заменят ваши ручные резервные копии, если автоматическое резервное копирование не отключено.
*** Автоматические резервные копии создаются 2 раза в неделю и являются частью нашего плана аварийного восстановления. Если вы отключите автоматическое резервное копирование, вы также отключите любую возможность восстановления в случае катастрофы.
**** Файловая система резервной копии может быть не полностью согласованной, если VPS записывал в файловую систему в момент создания резервной копии. Для полностью согласованных резервных копий сервер должен быть остановлен во время создания резервной копии.'; +$_ADDONLANG['Backups']['Date'] = 'Дата'; +$_ADDONLANG['Backups']['Size'] = 'Размер'; +$_ADDONLANG['Backups']['Type'] = 'Тип'; +$_ADDONLANG['Backups']['Status'] = 'Статус'; +$_ADDONLANG['Backups']['Actions'] = 'Действия'; +$_ADDONLANG['Backups']['Create'] = 'Создать резервную копию сейчас'; +$_ADDONLANG['Backups']['Available'] = 'Доступна'; +$_ADDONLANG['Backups']['Creating'] = 'Создание...'; +$_ADDONLANG['Backups']['Error'] = 'Ошибка'; +$_ADDONLANG['Backups']['Automatic'] = 'Автоматическая'; +$_ADDONLANG['Backups']['Manual'] = 'Ручная'; + +## Настройки +### Имя хоста +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Имя хоста'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Устанавливает имя хоста и обратную DNS-запись. Пожалуйста, сначала создайте запись A.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Отправить'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Если вы устанавливаете операционную систему через ISO-образ, вы также должны настроить сетевой интерфейс статически. DHCP-сервер не работает.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'ISO-образ'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'Загрузить ISO'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'Извлечь ISO'; + +### Пароль +$_ADDONLANG['Settings']['Password']['Title'] = 'Пароль'; +$_ADDONLANG['Settings']['Password']['Description'] = 'Пароль установки удаляется из наших систем через 72 часа. Обязательно смените пароль при первом входе в систему!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Сбросить пароль'; + +### Переустановка +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Переустановка'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Пожалуйста, учтите, что при переустановке все данные будут удалены с сервера. Это действие необратимо!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Операционная система'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'ВЫБЕРИТЕ ВЕРСИЮ'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Переустановить'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'Публичный SSH-ключ (необязательно)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Вставьте сюда свой публичный SSH-ключ (начинается с ssh-rsa, ssh-ed25519 и т.д.). Он будет автоматически добавлен в ~/.ssh/authorized_keys для входа без пароля.'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Скрипт после установки (необязательно)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Введите bash-скрипт, который будет автоматически выполнен после завершения установки ОС. Полезно для установки пакетов, настройки служб или настройки вашей среды.'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'Отключить аутентификацию по паролю SSH'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Если включено, разрешена только аутентификация по SSH-ключу. Вход по паролю через SSH будет отключен для повышенной безопасности.'; + +### Файрвол +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Файрвол'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'Правила оцениваются сверху вниз. По умолчанию разрешено все. Файрвол доступен только на публичном интерфейсе. Файрвол будет фильтровать только входящий трафик.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Добавить новое правило файрвола'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Текущие правила файрвола'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Добавить правило'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Действие'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Порт'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Протокол'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Источник'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Примечание'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Действия'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Принять'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Отклонить'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Номер порта'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Пример: x.x.x.x/xx (необязательно)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Примечания (необязательно)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'Правила должны быть применены, чтобы вступить в силу.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Применить файрвол'; + +if (file_exists(__DIR__ . '/overrides/english.php')) include_once(__DIR__ . '/overrides/english.php'); diff --git a/modules/servers/ArkhostVPSAG/lang/spanish.php b/modules/servers/ArkhostVPSAG/lang/spanish.php new file mode 100644 index 0000000..25544e2 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/lang/spanish.php @@ -0,0 +1,139 @@ +** Las copias de seguridad automáticas también reemplazarán sus copias de seguridad manuales a menos que las copias de seguridad automáticas estén deshabilitadas.
*** Las copias de seguridad automáticas se realizan 2 veces por semana y son parte de nuestro plan de recuperación ante desastres. Si deshabilita las copias de seguridad automáticas, también deshabilita cualquier posibilidad de recuperación en caso de desastre.
**** El sistema de archivos de la copia de seguridad podría no estar completamente consistente si el VPS estaba escribiendo en el sistema de archivos en el momento de la copia de seguridad. Para copias de seguridad completamente consistentes, el servidor debe detenerse mientras se crea la copia de seguridad.'; +$_ADDONLANG['Backups']['Date'] = 'Fecha'; +$_ADDONLANG['Backups']['Size'] = 'Tamaño'; +$_ADDONLANG['Backups']['Type'] = 'Tipo'; +$_ADDONLANG['Backups']['Status'] = 'Estado'; +$_ADDONLANG['Backups']['Actions'] = 'Acciones'; +$_ADDONLANG['Backups']['Create'] = 'Crear copia ahora'; +$_ADDONLANG['Backups']['Available'] = 'Disponible'; +$_ADDONLANG['Backups']['Creating'] = 'Creando...'; +$_ADDONLANG['Backups']['Error'] = 'Error'; +$_ADDONLANG['Backups']['Automatic'] = 'Automático'; +$_ADDONLANG['Backups']['Manual'] = 'Manual'; + +## Settings +### Hostname +$_ADDONLANG['Settings']['Hostname']['Title'] = 'Nombre del host'; +$_ADDONLANG['Settings']['Hostname']['Description'] = 'Establece el nombre del host y el rDNS. Cree primero el registro A.'; +$_ADDONLANG['Settings']['Hostname']['Submit'] = 'Enviar'; + +### ISO +$_ADDONLANG['Settings']['ISO']['Title'] = 'ISO'; +$_ADDONLANG['Settings']['ISO']['Description'] = 'Si instala el sistema operativo a través de la imagen ISO, también debe configurar la interfaz de red estáticamente. No hay un servidor DHCP ejecutándose.'; +$_ADDONLANG['Settings']['ISO']['Image'] = 'Imagen ISO'; +$_ADDONLANG['Settings']['ISO']['Submit'] = 'Cargar ISO'; +$_ADDONLANG['Settings']['ISO']['Remove'] = 'Expulsar ISO'; + +### Password +$_ADDONLANG['Settings']['Password']['Title'] = 'Contraseña'; +$_ADDONLANG['Settings']['Password']['Description'] = 'La contraseña de instalación se elimina de nuestros sistemas después de 72 horas. ¡Es obligatorio cambiar la contraseña en su primer inicio de sesión!'; +$_ADDONLANG['Settings']['Password']['Submit'] = 'Restablecer contraseña'; + +### Reinstall +$_ADDONLANG['Settings']['Reinstall']['Title'] = 'Reinstalar'; +$_ADDONLANG['Settings']['Reinstall']['Description'] = 'Por favor entienda que al reinstalar, todos los datos se borrarán del servidor. ¡Esta acción es irreversible!'; +$_ADDONLANG['Settings']['Reinstall']['OS'] = 'Sistema operativo'; +$_ADDONLANG['Settings']['Reinstall']['Version'] = 'ELEGIR VERSIÓN'; +$_ADDONLANG['Settings']['Reinstall']['Submit'] = 'Reinstalar'; +$_ADDONLANG['Settings']['Reinstall']['SSHKey'] = 'Clave pública SSH (opcional)'; +$_ADDONLANG['Settings']['Reinstall']['SSHKeyDesc'] = 'Añadir clave SSH para acceso sin contraseña'; +$_ADDONLANG['Settings']['Reinstall']['PostScript'] = 'Script post-instalación (opcional)'; +$_ADDONLANG['Settings']['Reinstall']['PostScriptDesc'] = 'Script bash a ejecutar después de la instalación del SO'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPassword'] = 'Deshabilitar login SSH con contraseña'; +$_ADDONLANG['Settings']['Reinstall']['DisableSSHPasswordDesc'] = 'Solo permitir autenticación con clave SSH'; + +### Firewall +$_ADDONLANG['Settings']['Firewall']['Title'] = 'Firewall'; +$_ADDONLANG['Settings']['Firewall']['Description'] = 'Las reglas se evalúan de arriba hacia abajo. Por defecto, todo está permitido. El firewall solo está disponible en la interfaz pública. Solo el tráfico entrante será filtrado por el firewall.'; +$_ADDONLANG['Settings']['Firewall']['AddNewRule'] = 'Agregar Nueva Regla de Firewall'; +$_ADDONLANG['Settings']['Firewall']['CurrentRules'] = 'Reglas de Firewall Actuales'; +$_ADDONLANG['Settings']['Firewall']['AddRule'] = 'Agregar Regla'; +$_ADDONLANG['Settings']['Firewall']['Action'] = 'Acción'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Puerto'; +$_ADDONLANG['Settings']['Firewall']['Protocol'] = 'Protocolo'; +$_ADDONLANG['Settings']['Firewall']['Source'] = 'Origen'; +$_ADDONLANG['Settings']['Firewall']['Note'] = 'Nota'; +$_ADDONLANG['Settings']['Firewall']['Actions'] = 'Acciones'; +$_ADDONLANG['Settings']['Firewall']['Accept'] = 'Aceptar'; +$_ADDONLANG['Settings']['Firewall']['Drop'] = 'Descartar'; +$_ADDONLANG['Settings']['Firewall']['Port'] = 'Número de puerto'; +$_ADDONLANG['Settings']['Firewall']['SourceLabel'] = 'Ej: x.x.x.x/xx (opcional)'; +$_ADDONLANG['Settings']['Firewall']['Notes'] = 'Notas (opcional)'; +$_ADDONLANG['Settings']['Firewall']['Warning'] = 'Las reglas deben confirmarse para que surtan efecto.'; +$_ADDONLANG['Settings']['Firewall']['Submit'] = 'Confirmar firewall'; + +if (file_exists(__DIR__ . '/overrides/spanish.php')) include_once(__DIR__ . '/overrides/spanish.php'); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/logo.png b/modules/servers/ArkhostVPSAG/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..05df95325612475c96bbcae9ed29106abbc25682 GIT binary patch literal 23612 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 + *} + + + + + + + +
+ + +
+
+ +
+
+ +
+
+
{$_LANG['Overview']['ServerInfo']}
+
+
+
+
+ + + + + + + + + + {if $serverInfo['ipv6']} + + + + + {/if} + + + + +
{$_LANG['Overview']['Hostname']}:{$serverInfo['hostname']|default:'N/A'}
{$_LANG['IPv4']} Address:{$serverInfo['ip']}
{$_LANG['IPv6']} Address:{$serverInfo['ipv6']}
{$_LANG['Overview']['OS']}: + {if $serverInfo['operatingSystem']['image']} + + {/if} + {$serverInfo['operatingSystem']['name']|default:'N/A'} +
+
+
+ + + + + + + + + + + + + +
{$_LANG['Overview']['Status']}: + + + {$serverInfo['statusDescription']} + +
{$_LANG['Overview']['Uptime']}:{$serverInfo['uptime_text']|default:'N/A'}
{$_LANG['Overview']['ServerType']}:{$serverInfo['server_type']|default:'Standard'}
+
+
+
+
+ + +
+
+
{$_LANG['Overview']['ResourceAllocation']}
+
+
+
+
+
+ +

{$serverInfo['cpu']|default:'N/A'}

+ {$_LANG['Overview']['CPU_Cores']} +
+
+
+
+ +

{$serverInfo['ram']|default:'N/A'} {$_LANG['General']['GB']}

+ {$_LANG['Overview']['Memory']} +
+
+
+
+ +

{$serverInfo['disk']|default:'N/A'} {$_LANG['General']['GB']}

+ {$_LANG['Overview']['Storage']} +
+
+
+
+ +

{$serverInfo['bandwidth']|default:'20'} {$_LANG['General']['TB']}

+ {$_LANG['Overview']['Traffic']} +
+
+
+
+
+ + +
+
+
{$_LANG['Overview']['ResourceUsage']}
+
+
+
+
+
+

+ {$_LANG['Overview']['RAM']} + +

+
+
+ {if $serverInfo['ram'] > 0}{($serverInfo['ram_usage']/1024/1024/1024/$serverInfo['ram']*100)|round}{else}0{/if}% +
+
+
+ {($serverInfo['ram_usage']/1024/1024/1024)|round:1} / {$serverInfo['ram']} GB + {$_LANG['Used']} +
+
+
+
+
+

+ Bandwidth + +

+
+
+ {if $serverInfo['bandwidth'] > 0}{($serverInfo['bandwidth_used']/1024/$serverInfo['bandwidth']*100)|round}{else}0{/if}% +
+
+
+ {($serverInfo['bandwidth_used']/1024)|round:1} / {$serverInfo['bandwidth']} TB + {$_LANG['Used']} +
+
+
+
+
+

+ {$_LANG['Overview']['CPU']} + +

+
+
+ {if $serverInfo['cpu_usage'] <= 1}{($serverInfo['cpu_usage'] * 100)|round}{else}{$serverInfo['cpu_usage']|ceil}{/if}% +
+
+
+ {if $serverInfo['cpu_usage'] <= 1}{($serverInfo['cpu_usage'] * 100)|round}{else}{$serverInfo['cpu_usage']|ceil}{/if}% {$_LANG['Overview']['CPUUsage']} + +
+
+
+
+
+
+ + +
+
+
{$_LANG['Overview']['QuickActions']}
+
+
+
+ + + + {$_LANG['VNC']} + +
+
+
+
+ +
+
+ + {$_LANG['Navbar']['Graphs']} +
+ + +
+
+ + + + + +
+
+ + + + + +
+
+
+
+
{$_LANG['Graphs']['CPU']}
+
+
+
+

{$_LANG['Graphs']['Loading']}

+
+
+
+
+ +
+
+
+
{$_LANG['Graphs']['RAM']}
+
+
+
+

{$_LANG['Graphs']['Loading']}

+
+
+
+
+ +
+
+
+
{$_LANG['Graphs']['Network']}
+
+
+
+

{$_LANG['Graphs']['Loading']}

+
+
+
+
+ +
+
+
+
{$_LANG['Graphs']['Disk']}
+
+
+
+

{$_LANG['Graphs']['Loading']}

+
+
+
+
+
+
+ +
+
+ + {$_LANG['Navbar']['Backups']} +
+ +
{$_LANG['Backups']['Description']}
+ +
+ + + + + + + + + + + + + + + +
{$_LANG['Backups']['Date']}{$_LANG['Backups']['Size']}{$_LANG['Backups']['Type']}{$_LANG['Backups']['Status']}{$_LANG['Backups']['Actions']}
Loading backup data...
+
+ + + +
+ {$_LANG['Backups']['Warning']|unescape:'html'} +
+
+ +
+
+ {$_LANG['General']['Note']}: {$_LANG['Settings']['Firewall']['Description']} +
+ + +
+
+
{$_LANG['Settings']['Firewall']['AddNewRule']}
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+
+ + +
+
+
{$_LANG['Settings']['Firewall']['CurrentRules']}
+
+
+
+ + + + + + + + + + + + + + + + +
{$_LANG['Settings']['Firewall']['Action']}{$_LANG['Settings']['Firewall']['Protocol']}{$_LANG['Settings']['Firewall']['Port']}{$_LANG['Settings']['Firewall']['Source']}{$_LANG['Settings']['Firewall']['Note']}{$_LANG['Settings']['Firewall']['Actions']}
+ {$_LANG['LoadingFirewallRules']} +
+
+
+
+ + +
+ {$_LANG['General']['Note']}: {$_LANG['Settings']['Firewall']['Warning']} +
+
+ +
+
+ +
+
+ +
+
+
+
+ + {$_LANG['Settings']['Hostname']['Title']} +
+ +
+ {$_LANG['Settings']['Hostname']['Description']} +
+ +
+
+
+ + +
+
+
+ + +
+ +
+
+ + {$_LANG['Settings']['ISO']['Title']} +
+ +
+ {$_LANG['Settings']['ISO']['Description']} +
+ +
+
+
+ + +
+
+
+ + + + {if $serverInfo['iso'] !== ''} + + {/if} +
+ +
+
+ + {$_LANG['Settings']['Password']['Title']} +
+ +
+ {$_LANG['Settings']['Password']['Description']} +
+ +
+
+
+ + +
+ + +
+
+
+
+ + +
+ +
+
+ + {$_LANG['Settings']['Reinstall']['Title']} +
+ +
+ {$_LANG['Settings']['Reinstall']['Description']} +
+ +
+ + +
+ {foreach from=$operatingSystems key=$group item=$operatingSystemsGroup} +
+ +
+ {/foreach} +
+ + + + + + +
+
+
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/template/css/app.css b/modules/servers/ArkhostVPSAG/template/css/app.css new file mode 100644 index 0000000..a27434c --- /dev/null +++ b/modules/servers/ArkhostVPSAG/template/css/app.css @@ -0,0 +1,1040 @@ +html, body { + font-family: sans-serif; + font-size: 14px; + padding: 5px 10px; +} + +.badge { + padding: 0.50rem 1.00rem; + white-space: normal !important; +} + +span.badge { + margin-bottom: 8px; +} + +.fade:not(.show) { + display: none; +} + +#loading { + position: fixed; + color: #65686a; + display: none; + z-index: 1000000; +} + +#loading-spinner { + position: fixed; + overflow: visible; + margin: auto; + top: 0; + left: 0; + bottom: 0; + right: 0; +} + +#loading:before { + content: ''; + display: block; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.3); +} + +a { + cursor: pointer; +} + +img { + border-style: none; + /* margin-bottom: 10px; */ + vertical-align: middle; +} + +img .flag { + border: 1px solid #ddd; +} + +.information { + left: 0; + right: 0; + bottom: 0; + color: #343a40; + position: absolute; +} + +.form-label { + color: #868888; + margin-bottom: 0px; + word-break: break-all; +} + +.border { + display: flex; + min-height: 125px; + position: relative; + align-items: center; + justify-content: center; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem!important; +} + +.without-mb { + margin-bottom: 0rem!important; +} + +.p-2 { + padding: .5rem!important; +} + +i.fa-play.start { + color: #06d79c; + font-size: 25px; +} + +i.fa-stop.stop { + color: #656373; + font-size: 25px; +} + +i.fa-sync.reboot { + color: #398bf7; + font-size: 25px; +} + +.vnc { + height: 25px; +} + +.dashboard-title { + color: #3d3d3d; + font-size: 22px; +} + +.dashboard-value { + color: #586271 !important; +} + +.usage-details { + border: 1px solid #e7e4e4; + transition: all ease-in .2s; +} + +.usage-details:hover { + border: 1px solid transparent; + box-shadow: 1px 1px 8px 6px #e5e3e3bf; +} + +.overview-label { + color: #99abb4; +} + +.progress.disk-bar { + height: 14px; + margin-top: 25px; + margin-bottom: 20px; + border-radius: 6px; + -webkit-box-shadow: none; + box-shadow: none; +} + +.used_disk_percent { + color: #1e88e5; + font-size: 20px; +} + +.dashboard-tab .nav-tabs { + border-bottom: 1px solid #dfd8d8; + margin: 0; +} + +.dashboard-tab .nav-tabs .nav-item { + border-bottom: 1px solid #dfd8d8; +} + +.dashboard-tab .nav-tabs li a { + position: relative; + padding: 5px; + margin-right: 10px; + color: #374045 !important; + border: none; + border-radius: 0; + background: transparent; + transition: all 0.3s ease 0s; + z-index: 2; +} + +.dashboard-tab .nav-tabs li a:before { + content: ""; + width: 100%; + height: 4px; + border-radius: 2px; + position: absolute; + bottom: 0; + left: 0; +} + +.dashboard-tab .nav-tabs li a:after { + content: ""; + width: 0; + height: 4px; + background: linear-gradient(to right, #396afc, #2948ff); + border-bottom: 1px solid #727cb6; + border-radius: 2px; + position: absolute; + bottom: -2px; + left: 0; + transition: all .4s ease 0s; + z-index: 1; +} + +.dashboard-tab .nav-tabs li a.active:after { + width: 100%; + opacity: 1; +} + +.vertical-tabs .nav-link { + color: #515a68; + padding: 7px 5px; + margin-bottom: 10px; + transition: all ease-in 0.2s; + text-align: left!important; +} + +.vertical-tabs .nav-link.active { + border-radius: 0px; + color: #2948ff; +} + +.v-tabs-container { + border-right: 1px solid #dfd8d8; +} + +.nav-pills .nav-link.active { + background-color: unset; +} + +.custom-control-input:checked~.custom-control-label::before { + color: #fff; + border-color: #007bff; + background-color: #007bff; +} + +.info-text { + color: #398bf7; + cursor: pointer; +} + +#graphs-tab .nav-link, +#sub-tasks-and-logs .nav-link { + color: #576170; + transition: all 0.4s linear; +} + +#graphs-tab .nav-link.active, +#sub-tasks-and-logs .nav-link.active { + border-radius: 0px; + color: #ffffff; + background: linear-gradient(to right, #396afc, #2948ff); +} + +.prev-mnth.green_but, +.next-mnth.green_but { + padding: 4px 10px; +} + +.graphs img { + width: 100%; +} + +.submit-btn { + background-color: #398bf7; + border: none; + border-radius: 4px; + color: #ffffff; + font-weight: 500; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.cancel-btn { + background-color: #5a6268; + border: none; + border-radius: 4px; + color: #ffffff; + font-weight: 500; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.danger-btn { + background-color: #dc3545; + border: none; + border-radius: 4px; + color: #ffffff; + font-weight: 500; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.submit-btn:hover { + color: #ffffff !important; + box-shadow: 0 14px 26px -12px #1769ff6b, 0 4px 23px 0 #0000001f, 0 8px 10px -5px #1769ff33; +} + +.cancel-btn:hover { + color: #ffffff !important; + box-shadow: 0 14px 26px -12px #000000, 0 4px 23px 0 #0000001f, 0 8px 10px -5px #07183533; +} + +.modal-title { + font-weight: 400; + color: #455a64; +} + +.modal-title i.success { + font-size: 40px; + color: #06d79c; + vertical-align: middle; +} + +.modal-title i.warning { + font-size: 40px; + color: orange; + vertical-align: middle; +} + +.modal-title i.error { + font-size: 40px; + color: #ef5350; + vertical-align: middle; +} + +.modal-body { + color: #868888; + font-weight: 500; + line-height: 30px; + margin-bottom: 0px; +} + +.modal-body p { + margin-bottom: 0px; +} + +.link-btn { + background-color: #398bf7; + border: none; + border-radius: 4px; + text-decoration: none !important; + color: #ffffff !important; + font-size: 14px; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.link-btn:hover { + text-decoration: none; + color: #ffffff; + box-shadow: 0 14px 26px -12px rgba(23, 105, 255, 0.42), 0 4px 23px 0 rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(23, 105, 255, 0.2); +} + +.v-tab-heading { + color: #515557; + font-size: 18px; +} + +.distro_img { + width: 64px; + height: 64px; +} + +.distro_name.media-heading { + color: #3d3d3d; + font-size: 22px; +} + +.float-left { + float: left!important; +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.version { + color: #586271; + font-size: 12px; +} + +.info-icon { + background-color: #007bff; + color: #fff; + padding: 4px 12px; + border: none; + border-radius: 4px; +} + +.info-icon:hover, +.info-icon:focus { + border: none; + box-shadow: 0 14px 26px -12px rgba(23, 105, 255, 0.42), 0 4px 23px 0 rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(23, 105, 255, 0.2); +} + +.info-icon i { + font-size: 12px; +} + +.os_badge { + border: 1px solid #ccc; + cursor: pointer; + transition: height 0.5s; + border-radius: 3px; + position: relative; +} + +#os_list .dropdown-menu { + max-height: 200px; + overflow-y: auto; +} + +.os_badge_list a { + color: #576170; + text-decoration: none; + outline: none; + display: block; + padding: 8px; + background-color: #fff; +} + +.os_badge_list a:hover { + color: #2f3235; + background-color: #f9f6f6; +} + +.os_badge_list .SelectedOS { + color: #ffffff; + background-color: #2196F3; +} + +.os_badge.selected .version, +.os_badge.selected .distro_name.media-heading, +.os_badge.selected i { + color: #ffffff; +} + +.os_badge.selected { + color: #fff; + background-color: #06d79c; +} + +.os_badge i { + position: absolute; + top: 26px; + right: 16px; + color: #aaa; +} + +.os_badge .media-left { + padding: 8px; +} + +.os_badge .media-body { + padding: 8px; + vertical-align: middle; + text-align: left!important; +} + +.os_badge .version { + color: #888; +} + +.os_badge.expanded { + position: relative; + z-index: 999; +} + +.os_badge .dropdown-toggle::after { + content: none; +} + +.tab-content>.tab-pane { + display: none; +} + +.tab-content>.active { + display: block; +} + +.head { + margin-bottom: 10px; +} + +.head>img { + width: 32px; +} + +.restore-icon { + font-size: 17px; +} + +.create { + color: #06d79c; +} + +.delete { + color: #ff0000; +} + +.table.dataTable.no-footer { + border-bottom: 1px solid #5d5b63 !important; +} + +table.tablesorter { + box-shadow: 0 2px 12px -3px rgba(0, 0, 0, 0.5); +} + +table.dataTable { + clear: both; + margin-top: 6px !important; + margin-bottom: 6px !important; + max-width: none !important; + border-collapse: separate !important; + border-spacing: 0; +} + +#firewallTable th, +#backupTable th { + color: #ffffff; + background-color: #36304a !important; + border: unset !important; + font-weight: unset !important; + position: sticky !important; + top: -1px; + z-index: 99; +} + +.fa-1x { + font-size: 20px !important; +} + +.grey-txt { + color: #666; +} + +.showPassword { + text-decoration: none; +} + +.scrtabs-tab-scroll-arrow { + top: calc(50% - 10px); + color: #396afc; + height: 20px; + border: none; + position: relative; + padding-top: 0px; + padding-left: 0px; +} + +select, +textarea, +input[type=text], +input[type=textbox], +input[type=password] { + background: #fff; + font-size: 12px; + color: #455a64; + border: 1px #CCCCCC solid; + transition: background 0.3s linear; + -webkit-transition: background 0.3s linear; + outline: none; +} + +select, +textarea, +input[type=text], +input[type=number], +input[type=textbox], +input[type=password] { + box-shadow: 0 2px 2px 0 #a9a9a924, 0 3px 1px -2px #a9a9a933, 0 1px 5px 0 #a9a9a91f; +} + +.form-control { + height: 35px; + font-size: 14px !important; + min-height: 40px; + margin-bottom: 8px; + color: #67757c; + display: inline-block; + border-radius: 4px; +} + +.input-group-text { + height: 35px; + font-size: 14px !important; + min-height: 40px; + margin-bottom: 8px; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; + margin-right: auto !important; +} + +.mr-2, +.mx-2 { + margin-right: .5rem!important; +} + +@media all and (max-width: 576px) { + .left-side-tabs { + border-bottom: 1px solid #dfd8d8; + } + + .vertical-tabs .nav-link { + padding: 7px 10px; + } + + .left-side-tabs .nav-link.active { + color: #ffffff; + background:linear-gradient(to right, #396afc, #2948ff); + } + + .vertical-tab-content form select, + .vertical-tab-content form input[type=text], + .vertical-tab-content form input[type=textbox], + .vertical-tab-content form input[type=password] { + width:100%; + } +} + +/* ============================================ + Enhanced Modern Styling + ============================================ */ + +/* Card Styling */ +.card { + border-radius: 12px !important; + border: 1px solid #e3e6f0 !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + transition: all 0.3s ease; +} + +.card:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.card-header { + border-radius: 12px 12px 0 0 !important; + background-color: #f8f9fa !important; + border-bottom: 1px solid #e3e6f0 !important; + padding: 12px 20px !important; +} + +.card-body { + padding: 20px !important; +} + +/* Enhanced Button Styles */ +.btn { + border-radius: 12px !important; + font-weight: 500; + transition: all 0.3s ease; + padding: 10px 20px; +} + +.btn-success { + background: linear-gradient(135deg, #28a745 0%, #20c997 100%) !important; + border: none !important; + box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3); +} + +.btn-success:hover { + background: linear-gradient(135deg, #218838 0%, #1aa179 100%) !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(40, 167, 69, 0.4); +} + +.btn-primary { + background: linear-gradient(135deg, #3c7fb4 0%, #2d5a87 100%) !important; + border: none !important; + box-shadow: 0 2px 8px rgba(60, 127, 180, 0.3); +} + +.btn-primary:hover { + background: linear-gradient(135deg, #2d5a87 0%, #1e3a57 100%) !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(60, 127, 180, 0.4); +} + +.btn-danger { + background: linear-gradient(135deg, #dc3545 0%, #c82333 100%) !important; + border: none !important; + box-shadow: 0 2px 8px rgba(220, 53, 69, 0.3); +} + +.btn-danger:hover { + background: linear-gradient(135deg, #c82333 0%, #bd2130 100%) !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4); +} + +.btn-lg { + padding: 12px 32px !important; + font-size: 16px !important; +} + +/* Improved submit-btn to match Hetzner style */ +.submit-btn { + background: linear-gradient(135deg, #3c7fb4 0%, #2d5a87 100%) !important; + border: none !important; + border-radius: 12px !important; + color: #ffffff !important; + font-weight: 600 !important; + padding: 10px 20px !important; + transition: all 0.3s ease !important; + box-shadow: 0 2px 8px rgba(60, 127, 180, 0.3); +} + +.submit-btn:hover { + background: linear-gradient(135deg, #2d5a87 0%, #1e3a57 100%) !important; + color: #ffffff !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(60, 127, 180, 0.4) !important; +} + +/* Table Styling */ +.table { + border-collapse: separate; + border-spacing: 0; +} + +.table thead th { + border-bottom: 2px solid #dee2e6 !important; + color: #495057; + font-weight: 600; + text-transform: uppercase; + font-size: 0.85rem; + letter-spacing: 0.5px; +} + +.table-hover tbody tr { + transition: all 0.2s ease; +} + +.table-hover tbody tr:hover { + background-color: #f8f9fa; + transform: scale(1.01); +} + +.thead-light th { + background-color: #f8f9fa !important; +} + +/* Form Control Improvements */ +.form-control { + border-radius: 8px !important; + border: 1px solid #ced4da !important; + transition: all 0.2s ease; + padding: 8px 12px; +} + +.form-control:focus { + border-color: #3c7fb4 !important; + box-shadow: 0 0 0 0.2rem rgba(60, 127, 180, 0.25) !important; +} + +/* Alert Styling */ +.alert { + border-radius: 12px !important; + border: none !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} + +.alert-info { + background: linear-gradient(135deg, #e7f3ff 0%, #d4e9ff 100%); + color: #004085; +} + +.alert-warning { + background: linear-gradient(135deg, #fff3cd 0%, #ffe5a1 100%); + color: #856404; +} + +.alert-success { + background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%); + color: #155724; +} + +/* Firewall Specific Styles */ +#firewall .card.border-primary { + border: 2px solid #3c7fb4 !important; + box-shadow: 0 4px 16px rgba(60, 127, 180, 0.15); +} + +#firewall .card-header.bg-light { + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%) !important; +} + +#firewall .card-header h6 { + margin: 0; + color: #2c3e50; + font-weight: 600; +} + +/* Delete Icon Styling */ +.fa-trash { + transition: all 0.2s ease; + cursor: pointer; +} + +.fa-trash:hover { + transform: scale(1.2); + color: #dc3545 !important; +} + +/* Loading Spinner */ +.fa-spinner { + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* Smooth transitions for tab content */ +.tab-pane { + animation: fadeIn 0.3s ease-in; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* Nav tabs enhancement */ +.nav-tabs .nav-link { + border-radius: 12px 12px 0 0 !important; + transition: all 0.2s ease; +} + +.nav-tabs .nav-link:hover { + background-color: #f8f9fa; +} + +.nav-tabs .nav-link.active { + background-color: #e9ecef !important; + font-weight: 600; +} + +/* Icon improvements */ +.fa, .fas, .far { + vertical-align: middle; +} + +/* Small label styling */ +label.small { + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; +} + +/* Text center improvements */ +.text-center { + text-align: center; +} + +/* Resource Box Styling */ +.resource-box { + padding: 20px 10px; + transition: all 0.3s ease; +} + +.resource-box:hover { + transform: translateY(-5px); +} + +.resource-box h3 { + color: #2c3e50; + font-weight: 600; +} + +.resource-box .text-primary { + color: #3c7fb4 !important; +} + +.resource-box .text-success { + color: #28a745 !important; +} + +.resource-box .text-warning { + color: #ffc107 !important; +} + +.resource-box .text-info { + color: #17a2b8 !important; +} + +/* Card Header Enhancement */ +.card-header.bg-primary { + background: linear-gradient(135deg, #3c7fb4 0%, #2d5a87 100%) !important; +} + +.card-header h5 { + margin: 0; + font-weight: 600; +} + +/* Table Enhancements */ +.table-borderless td { + padding: 8px 12px; + vertical-align: middle; +} + +.table-borderless code { + background-color: #f8f9fa; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + color: #e83e8c; +} + +/* Usage Details Box Enhancement */ +.usage-details { + border-radius: 12px !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + transition: all 0.3s ease; +} + +.usage-details:hover { + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12); + transform: translateY(-2px); +} + +/* VPS Control Button Styles - Hetzner Style */ +.vps-control-btn { + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + padding: 12px 24px !important; + border-radius: 25px !important; + margin: 8px 4px !important; + transition: all 0.3s ease !important; + text-decoration: none !important; + color: white !important; + font-size: 0.95rem !important; + font-weight: 600 !important; + min-height: 48px !important; + box-shadow: 0 3px 8px rgba(0,0,0,0.15) !important; + border: none !important; + position: relative !important; + overflow: hidden !important; +} + +.vps-control-btn:hover { + transform: translateY(-3px) !important; + box-shadow: 0 6px 16px rgba(0,0,0,0.2) !important; + text-decoration: none !important; + color: white !important; +} + +.vps-control-btn:active { + transform: translateY(-1px) !important; + box-shadow: 0 3px 8px rgba(0,0,0,0.15) !important; +} + +.vps-control-btn.start-btn { + background: linear-gradient(45deg, #28a745, #34ce57) !important; + color: white !important; +} + +.vps-control-btn.start-btn:hover { + background: linear-gradient(45deg, #218838, #28a745) !important; + color: white !important; +} + +.vps-control-btn.stop-btn { + background: linear-gradient(45deg, #dc3545, #ff4757) !important; + color: white !important; +} + +.vps-control-btn.stop-btn:hover { + background: linear-gradient(45deg, #c82333, #dc3545) !important; + color: white !important; +} + +.vps-control-btn.restart-btn { + background: linear-gradient(45deg, #fd7e14, #ff9f43) !important; + color: white !important; +} + +.vps-control-btn.restart-btn:hover { + background: linear-gradient(45deg, #e65100, #fd7e14) !important; + color: white !important; +} + +.vps-control-btn.vnc-btn { + background: linear-gradient(45deg, #6f42c1, #8854d0) !important; + color: white !important; +} + +.vps-control-btn.vnc-btn:hover { + background: linear-gradient(45deg, #5a32a3, #6f42c1) !important; + color: white !important; +} + +.vps-control-btn.vnc-btn img { + width: 20px !important; + height: 20px !important; + margin-right: 8px !important; + filter: brightness(0) invert(1); +} + +.vps-control-btn i { + margin-right: 8px !important; + font-size: 1.1rem !important; +} + +/* Mobile Responsive - Stack VPS Control Buttons Vertically */ +@media (max-width: 767px) { + .vps-control-btn { + display: block !important; + width: 100% !important; + margin: 8px 0 !important; + text-align: center !important; + } +} + +/* Responsive padding */ +@media (max-width: 768px) { + .card-body { + padding: 15px !important; + } + + .btn-lg { + padding: 10px 24px !important; + font-size: 14px !important; + } + + .resource-box { + padding: 15px 5px; + } +} \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/template/css/app.min.css b/modules/servers/ArkhostVPSAG/template/css/app.min.css new file mode 100644 index 0000000..a27434c --- /dev/null +++ b/modules/servers/ArkhostVPSAG/template/css/app.min.css @@ -0,0 +1,1040 @@ +html, body { + font-family: sans-serif; + font-size: 14px; + padding: 5px 10px; +} + +.badge { + padding: 0.50rem 1.00rem; + white-space: normal !important; +} + +span.badge { + margin-bottom: 8px; +} + +.fade:not(.show) { + display: none; +} + +#loading { + position: fixed; + color: #65686a; + display: none; + z-index: 1000000; +} + +#loading-spinner { + position: fixed; + overflow: visible; + margin: auto; + top: 0; + left: 0; + bottom: 0; + right: 0; +} + +#loading:before { + content: ''; + display: block; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.3); +} + +a { + cursor: pointer; +} + +img { + border-style: none; + /* margin-bottom: 10px; */ + vertical-align: middle; +} + +img .flag { + border: 1px solid #ddd; +} + +.information { + left: 0; + right: 0; + bottom: 0; + color: #343a40; + position: absolute; +} + +.form-label { + color: #868888; + margin-bottom: 0px; + word-break: break-all; +} + +.border { + display: flex; + min-height: 125px; + position: relative; + align-items: center; + justify-content: center; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem!important; +} + +.without-mb { + margin-bottom: 0rem!important; +} + +.p-2 { + padding: .5rem!important; +} + +i.fa-play.start { + color: #06d79c; + font-size: 25px; +} + +i.fa-stop.stop { + color: #656373; + font-size: 25px; +} + +i.fa-sync.reboot { + color: #398bf7; + font-size: 25px; +} + +.vnc { + height: 25px; +} + +.dashboard-title { + color: #3d3d3d; + font-size: 22px; +} + +.dashboard-value { + color: #586271 !important; +} + +.usage-details { + border: 1px solid #e7e4e4; + transition: all ease-in .2s; +} + +.usage-details:hover { + border: 1px solid transparent; + box-shadow: 1px 1px 8px 6px #e5e3e3bf; +} + +.overview-label { + color: #99abb4; +} + +.progress.disk-bar { + height: 14px; + margin-top: 25px; + margin-bottom: 20px; + border-radius: 6px; + -webkit-box-shadow: none; + box-shadow: none; +} + +.used_disk_percent { + color: #1e88e5; + font-size: 20px; +} + +.dashboard-tab .nav-tabs { + border-bottom: 1px solid #dfd8d8; + margin: 0; +} + +.dashboard-tab .nav-tabs .nav-item { + border-bottom: 1px solid #dfd8d8; +} + +.dashboard-tab .nav-tabs li a { + position: relative; + padding: 5px; + margin-right: 10px; + color: #374045 !important; + border: none; + border-radius: 0; + background: transparent; + transition: all 0.3s ease 0s; + z-index: 2; +} + +.dashboard-tab .nav-tabs li a:before { + content: ""; + width: 100%; + height: 4px; + border-radius: 2px; + position: absolute; + bottom: 0; + left: 0; +} + +.dashboard-tab .nav-tabs li a:after { + content: ""; + width: 0; + height: 4px; + background: linear-gradient(to right, #396afc, #2948ff); + border-bottom: 1px solid #727cb6; + border-radius: 2px; + position: absolute; + bottom: -2px; + left: 0; + transition: all .4s ease 0s; + z-index: 1; +} + +.dashboard-tab .nav-tabs li a.active:after { + width: 100%; + opacity: 1; +} + +.vertical-tabs .nav-link { + color: #515a68; + padding: 7px 5px; + margin-bottom: 10px; + transition: all ease-in 0.2s; + text-align: left!important; +} + +.vertical-tabs .nav-link.active { + border-radius: 0px; + color: #2948ff; +} + +.v-tabs-container { + border-right: 1px solid #dfd8d8; +} + +.nav-pills .nav-link.active { + background-color: unset; +} + +.custom-control-input:checked~.custom-control-label::before { + color: #fff; + border-color: #007bff; + background-color: #007bff; +} + +.info-text { + color: #398bf7; + cursor: pointer; +} + +#graphs-tab .nav-link, +#sub-tasks-and-logs .nav-link { + color: #576170; + transition: all 0.4s linear; +} + +#graphs-tab .nav-link.active, +#sub-tasks-and-logs .nav-link.active { + border-radius: 0px; + color: #ffffff; + background: linear-gradient(to right, #396afc, #2948ff); +} + +.prev-mnth.green_but, +.next-mnth.green_but { + padding: 4px 10px; +} + +.graphs img { + width: 100%; +} + +.submit-btn { + background-color: #398bf7; + border: none; + border-radius: 4px; + color: #ffffff; + font-weight: 500; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.cancel-btn { + background-color: #5a6268; + border: none; + border-radius: 4px; + color: #ffffff; + font-weight: 500; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.danger-btn { + background-color: #dc3545; + border: none; + border-radius: 4px; + color: #ffffff; + font-weight: 500; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.submit-btn:hover { + color: #ffffff !important; + box-shadow: 0 14px 26px -12px #1769ff6b, 0 4px 23px 0 #0000001f, 0 8px 10px -5px #1769ff33; +} + +.cancel-btn:hover { + color: #ffffff !important; + box-shadow: 0 14px 26px -12px #000000, 0 4px 23px 0 #0000001f, 0 8px 10px -5px #07183533; +} + +.modal-title { + font-weight: 400; + color: #455a64; +} + +.modal-title i.success { + font-size: 40px; + color: #06d79c; + vertical-align: middle; +} + +.modal-title i.warning { + font-size: 40px; + color: orange; + vertical-align: middle; +} + +.modal-title i.error { + font-size: 40px; + color: #ef5350; + vertical-align: middle; +} + +.modal-body { + color: #868888; + font-weight: 500; + line-height: 30px; + margin-bottom: 0px; +} + +.modal-body p { + margin-bottom: 0px; +} + +.link-btn { + background-color: #398bf7; + border: none; + border-radius: 4px; + text-decoration: none !important; + color: #ffffff !important; + font-size: 14px; + padding: 7px 12px; + transition: 0.2s ease-in; +} + +.link-btn:hover { + text-decoration: none; + color: #ffffff; + box-shadow: 0 14px 26px -12px rgba(23, 105, 255, 0.42), 0 4px 23px 0 rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(23, 105, 255, 0.2); +} + +.v-tab-heading { + color: #515557; + font-size: 18px; +} + +.distro_img { + width: 64px; + height: 64px; +} + +.distro_name.media-heading { + color: #3d3d3d; + font-size: 22px; +} + +.float-left { + float: left!important; +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.version { + color: #586271; + font-size: 12px; +} + +.info-icon { + background-color: #007bff; + color: #fff; + padding: 4px 12px; + border: none; + border-radius: 4px; +} + +.info-icon:hover, +.info-icon:focus { + border: none; + box-shadow: 0 14px 26px -12px rgba(23, 105, 255, 0.42), 0 4px 23px 0 rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(23, 105, 255, 0.2); +} + +.info-icon i { + font-size: 12px; +} + +.os_badge { + border: 1px solid #ccc; + cursor: pointer; + transition: height 0.5s; + border-radius: 3px; + position: relative; +} + +#os_list .dropdown-menu { + max-height: 200px; + overflow-y: auto; +} + +.os_badge_list a { + color: #576170; + text-decoration: none; + outline: none; + display: block; + padding: 8px; + background-color: #fff; +} + +.os_badge_list a:hover { + color: #2f3235; + background-color: #f9f6f6; +} + +.os_badge_list .SelectedOS { + color: #ffffff; + background-color: #2196F3; +} + +.os_badge.selected .version, +.os_badge.selected .distro_name.media-heading, +.os_badge.selected i { + color: #ffffff; +} + +.os_badge.selected { + color: #fff; + background-color: #06d79c; +} + +.os_badge i { + position: absolute; + top: 26px; + right: 16px; + color: #aaa; +} + +.os_badge .media-left { + padding: 8px; +} + +.os_badge .media-body { + padding: 8px; + vertical-align: middle; + text-align: left!important; +} + +.os_badge .version { + color: #888; +} + +.os_badge.expanded { + position: relative; + z-index: 999; +} + +.os_badge .dropdown-toggle::after { + content: none; +} + +.tab-content>.tab-pane { + display: none; +} + +.tab-content>.active { + display: block; +} + +.head { + margin-bottom: 10px; +} + +.head>img { + width: 32px; +} + +.restore-icon { + font-size: 17px; +} + +.create { + color: #06d79c; +} + +.delete { + color: #ff0000; +} + +.table.dataTable.no-footer { + border-bottom: 1px solid #5d5b63 !important; +} + +table.tablesorter { + box-shadow: 0 2px 12px -3px rgba(0, 0, 0, 0.5); +} + +table.dataTable { + clear: both; + margin-top: 6px !important; + margin-bottom: 6px !important; + max-width: none !important; + border-collapse: separate !important; + border-spacing: 0; +} + +#firewallTable th, +#backupTable th { + color: #ffffff; + background-color: #36304a !important; + border: unset !important; + font-weight: unset !important; + position: sticky !important; + top: -1px; + z-index: 99; +} + +.fa-1x { + font-size: 20px !important; +} + +.grey-txt { + color: #666; +} + +.showPassword { + text-decoration: none; +} + +.scrtabs-tab-scroll-arrow { + top: calc(50% - 10px); + color: #396afc; + height: 20px; + border: none; + position: relative; + padding-top: 0px; + padding-left: 0px; +} + +select, +textarea, +input[type=text], +input[type=textbox], +input[type=password] { + background: #fff; + font-size: 12px; + color: #455a64; + border: 1px #CCCCCC solid; + transition: background 0.3s linear; + -webkit-transition: background 0.3s linear; + outline: none; +} + +select, +textarea, +input[type=text], +input[type=number], +input[type=textbox], +input[type=password] { + box-shadow: 0 2px 2px 0 #a9a9a924, 0 3px 1px -2px #a9a9a933, 0 1px 5px 0 #a9a9a91f; +} + +.form-control { + height: 35px; + font-size: 14px !important; + min-height: 40px; + margin-bottom: 8px; + color: #67757c; + display: inline-block; + border-radius: 4px; +} + +.input-group-text { + height: 35px; + font-size: 14px !important; + min-height: 40px; + margin-bottom: 8px; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; + margin-right: auto !important; +} + +.mr-2, +.mx-2 { + margin-right: .5rem!important; +} + +@media all and (max-width: 576px) { + .left-side-tabs { + border-bottom: 1px solid #dfd8d8; + } + + .vertical-tabs .nav-link { + padding: 7px 10px; + } + + .left-side-tabs .nav-link.active { + color: #ffffff; + background:linear-gradient(to right, #396afc, #2948ff); + } + + .vertical-tab-content form select, + .vertical-tab-content form input[type=text], + .vertical-tab-content form input[type=textbox], + .vertical-tab-content form input[type=password] { + width:100%; + } +} + +/* ============================================ + Enhanced Modern Styling + ============================================ */ + +/* Card Styling */ +.card { + border-radius: 12px !important; + border: 1px solid #e3e6f0 !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + transition: all 0.3s ease; +} + +.card:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.card-header { + border-radius: 12px 12px 0 0 !important; + background-color: #f8f9fa !important; + border-bottom: 1px solid #e3e6f0 !important; + padding: 12px 20px !important; +} + +.card-body { + padding: 20px !important; +} + +/* Enhanced Button Styles */ +.btn { + border-radius: 12px !important; + font-weight: 500; + transition: all 0.3s ease; + padding: 10px 20px; +} + +.btn-success { + background: linear-gradient(135deg, #28a745 0%, #20c997 100%) !important; + border: none !important; + box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3); +} + +.btn-success:hover { + background: linear-gradient(135deg, #218838 0%, #1aa179 100%) !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(40, 167, 69, 0.4); +} + +.btn-primary { + background: linear-gradient(135deg, #3c7fb4 0%, #2d5a87 100%) !important; + border: none !important; + box-shadow: 0 2px 8px rgba(60, 127, 180, 0.3); +} + +.btn-primary:hover { + background: linear-gradient(135deg, #2d5a87 0%, #1e3a57 100%) !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(60, 127, 180, 0.4); +} + +.btn-danger { + background: linear-gradient(135deg, #dc3545 0%, #c82333 100%) !important; + border: none !important; + box-shadow: 0 2px 8px rgba(220, 53, 69, 0.3); +} + +.btn-danger:hover { + background: linear-gradient(135deg, #c82333 0%, #bd2130 100%) !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4); +} + +.btn-lg { + padding: 12px 32px !important; + font-size: 16px !important; +} + +/* Improved submit-btn to match Hetzner style */ +.submit-btn { + background: linear-gradient(135deg, #3c7fb4 0%, #2d5a87 100%) !important; + border: none !important; + border-radius: 12px !important; + color: #ffffff !important; + font-weight: 600 !important; + padding: 10px 20px !important; + transition: all 0.3s ease !important; + box-shadow: 0 2px 8px rgba(60, 127, 180, 0.3); +} + +.submit-btn:hover { + background: linear-gradient(135deg, #2d5a87 0%, #1e3a57 100%) !important; + color: #ffffff !important; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(60, 127, 180, 0.4) !important; +} + +/* Table Styling */ +.table { + border-collapse: separate; + border-spacing: 0; +} + +.table thead th { + border-bottom: 2px solid #dee2e6 !important; + color: #495057; + font-weight: 600; + text-transform: uppercase; + font-size: 0.85rem; + letter-spacing: 0.5px; +} + +.table-hover tbody tr { + transition: all 0.2s ease; +} + +.table-hover tbody tr:hover { + background-color: #f8f9fa; + transform: scale(1.01); +} + +.thead-light th { + background-color: #f8f9fa !important; +} + +/* Form Control Improvements */ +.form-control { + border-radius: 8px !important; + border: 1px solid #ced4da !important; + transition: all 0.2s ease; + padding: 8px 12px; +} + +.form-control:focus { + border-color: #3c7fb4 !important; + box-shadow: 0 0 0 0.2rem rgba(60, 127, 180, 0.25) !important; +} + +/* Alert Styling */ +.alert { + border-radius: 12px !important; + border: none !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} + +.alert-info { + background: linear-gradient(135deg, #e7f3ff 0%, #d4e9ff 100%); + color: #004085; +} + +.alert-warning { + background: linear-gradient(135deg, #fff3cd 0%, #ffe5a1 100%); + color: #856404; +} + +.alert-success { + background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%); + color: #155724; +} + +/* Firewall Specific Styles */ +#firewall .card.border-primary { + border: 2px solid #3c7fb4 !important; + box-shadow: 0 4px 16px rgba(60, 127, 180, 0.15); +} + +#firewall .card-header.bg-light { + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%) !important; +} + +#firewall .card-header h6 { + margin: 0; + color: #2c3e50; + font-weight: 600; +} + +/* Delete Icon Styling */ +.fa-trash { + transition: all 0.2s ease; + cursor: pointer; +} + +.fa-trash:hover { + transform: scale(1.2); + color: #dc3545 !important; +} + +/* Loading Spinner */ +.fa-spinner { + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* Smooth transitions for tab content */ +.tab-pane { + animation: fadeIn 0.3s ease-in; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* Nav tabs enhancement */ +.nav-tabs .nav-link { + border-radius: 12px 12px 0 0 !important; + transition: all 0.2s ease; +} + +.nav-tabs .nav-link:hover { + background-color: #f8f9fa; +} + +.nav-tabs .nav-link.active { + background-color: #e9ecef !important; + font-weight: 600; +} + +/* Icon improvements */ +.fa, .fas, .far { + vertical-align: middle; +} + +/* Small label styling */ +label.small { + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; +} + +/* Text center improvements */ +.text-center { + text-align: center; +} + +/* Resource Box Styling */ +.resource-box { + padding: 20px 10px; + transition: all 0.3s ease; +} + +.resource-box:hover { + transform: translateY(-5px); +} + +.resource-box h3 { + color: #2c3e50; + font-weight: 600; +} + +.resource-box .text-primary { + color: #3c7fb4 !important; +} + +.resource-box .text-success { + color: #28a745 !important; +} + +.resource-box .text-warning { + color: #ffc107 !important; +} + +.resource-box .text-info { + color: #17a2b8 !important; +} + +/* Card Header Enhancement */ +.card-header.bg-primary { + background: linear-gradient(135deg, #3c7fb4 0%, #2d5a87 100%) !important; +} + +.card-header h5 { + margin: 0; + font-weight: 600; +} + +/* Table Enhancements */ +.table-borderless td { + padding: 8px 12px; + vertical-align: middle; +} + +.table-borderless code { + background-color: #f8f9fa; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + color: #e83e8c; +} + +/* Usage Details Box Enhancement */ +.usage-details { + border-radius: 12px !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + transition: all 0.3s ease; +} + +.usage-details:hover { + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12); + transform: translateY(-2px); +} + +/* VPS Control Button Styles - Hetzner Style */ +.vps-control-btn { + display: inline-flex !important; + align-items: center !important; + justify-content: center !important; + padding: 12px 24px !important; + border-radius: 25px !important; + margin: 8px 4px !important; + transition: all 0.3s ease !important; + text-decoration: none !important; + color: white !important; + font-size: 0.95rem !important; + font-weight: 600 !important; + min-height: 48px !important; + box-shadow: 0 3px 8px rgba(0,0,0,0.15) !important; + border: none !important; + position: relative !important; + overflow: hidden !important; +} + +.vps-control-btn:hover { + transform: translateY(-3px) !important; + box-shadow: 0 6px 16px rgba(0,0,0,0.2) !important; + text-decoration: none !important; + color: white !important; +} + +.vps-control-btn:active { + transform: translateY(-1px) !important; + box-shadow: 0 3px 8px rgba(0,0,0,0.15) !important; +} + +.vps-control-btn.start-btn { + background: linear-gradient(45deg, #28a745, #34ce57) !important; + color: white !important; +} + +.vps-control-btn.start-btn:hover { + background: linear-gradient(45deg, #218838, #28a745) !important; + color: white !important; +} + +.vps-control-btn.stop-btn { + background: linear-gradient(45deg, #dc3545, #ff4757) !important; + color: white !important; +} + +.vps-control-btn.stop-btn:hover { + background: linear-gradient(45deg, #c82333, #dc3545) !important; + color: white !important; +} + +.vps-control-btn.restart-btn { + background: linear-gradient(45deg, #fd7e14, #ff9f43) !important; + color: white !important; +} + +.vps-control-btn.restart-btn:hover { + background: linear-gradient(45deg, #e65100, #fd7e14) !important; + color: white !important; +} + +.vps-control-btn.vnc-btn { + background: linear-gradient(45deg, #6f42c1, #8854d0) !important; + color: white !important; +} + +.vps-control-btn.vnc-btn:hover { + background: linear-gradient(45deg, #5a32a3, #6f42c1) !important; + color: white !important; +} + +.vps-control-btn.vnc-btn img { + width: 20px !important; + height: 20px !important; + margin-right: 8px !important; + filter: brightness(0) invert(1); +} + +.vps-control-btn i { + margin-right: 8px !important; + font-size: 1.1rem !important; +} + +/* Mobile Responsive - Stack VPS Control Buttons Vertically */ +@media (max-width: 767px) { + .vps-control-btn { + display: block !important; + width: 100% !important; + margin: 8px 0 !important; + text-align: center !important; + } +} + +/* Responsive padding */ +@media (max-width: 768px) { + .card-body { + padding: 15px !important; + } + + .btn-lg { + padding: 10px 24px !important; + font-size: 14px !important; + } + + .resource-box { + padding: 15px 5px; + } +} \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/template/error.tpl b/modules/servers/ArkhostVPSAG/template/error.tpl new file mode 100644 index 0000000..3c3b2c1 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/template/error.tpl @@ -0,0 +1,30 @@ +{** + * VPSAG WHMCS Server Provisioning version 1.4 + * + * @package WHMCS + * @copyright ArkHost + * @link https://arkhost.com + * @author ArkHost + *} + + + + + + + + + + + ArkHost - VPS Panel + + + + + + + \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/template/img/cloud.png b/modules/servers/ArkhostVPSAG/template/img/cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..fd805bbefb0546b82b07a31d25ee4d7ac2171b93 GIT binary patch literal 3395 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 literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/installing.png b/modules/servers/ArkhostVPSAG/template/img/installing.png new file mode 100644 index 0000000000000000000000000000000000000000..14adb20332b6fa002a16570627ba44d5226ba81f GIT binary patch literal 3968 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 literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/lock.png b/modules/servers/ArkhostVPSAG/template/img/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..06025ed47cbb84614eed566cda19a13259e3c9ac GIT binary patch literal 3443 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 VjE|n!dqn^M002ovPDHLkV1gM|W3B)I literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/notice.png b/modules/servers/ArkhostVPSAG/template/img/notice.png new file mode 100644 index 0000000000000000000000000000000000000000..4925a7b51c19031463842312640d4d1fea99bd12 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI13?%1G+4BcT`33ldxVjhk{6EP4{}Ai{BLX1C z5g{-aD8l~#04tFFc@6uQwd`-^v%i|l{&z3?qdxZkPiOr9@$moaH9xkp|J=s@|9bqt z{p{}+v;V)9nJLxG4K$gnB*-tAVVBW|o)3F>?>DtS?zs*qn&Ro=7@~20>!pKS4GIFT zf!f->r;lBE^}l{g?}Z*Qj;D9!D!LOTRtv~)u23;d?d*Rda#Hb4Tx0C=2ZU|=#~fP&n-lA<7YCxwW}CJyW#RUwQfDys` zb`8S2tcyh*A;6WATAU1|{{V4iQg%TJ(C7*vTco@M%;*u!Xc5qXK=uxh zcshiA2EZ8tED;B;_O~ zXDbvZC+4K4kl`x=02Ia$7PA--8#6F4EkTGO!m}i`q6EZpDatQM%CFE-@XSlrL(!kV zh=IZ4E6|Jy2(hG@3=G>_85ksPA;eUGVaMOXz_9Ina%oW+)EQDhe3bDFa}w)hj%@C4 z0uG{q(k6-@H76KJSWj|e4J?a&n_W=F+PP^~&6>>pb(asmH2?n}0D(zdsm8)2jsO5E zf=NU{RCt`_op*d3#r43yTdwO=tzy}dWy{9BW8>fk20K9L5R%Xg1PB-sNGJh95<+O9 z7;qqz00BY?oe)}FF)rYWdzWmh_jq)Cz<@dpU)w4w^MfJ?as`b_udGm z`Ahg8Lk|oEiUWTK0EIv{kO8CuCcps5fiynA4LE@|pc$wK%79AX08kS6>*=NY=oRG1 zmmK#L15*Q^iNFXTH%VpH0(*e(fc1e-Ns`Ly6~2!Gpa)I^&H!cu<9o5}+`wmcr|-4` zD}gV8Wqi-x5W@Fp2sj(K5Uu0;_i@D9|E8Dab2R~co%>Xz$c47A4i2$<2wbx9^O(C%>++CBFg?*G4XHd-4zL?87*aF4 z4-7+Vo2PrT(B2Y&F~An!SG`o;_nBXzwNGU0z;t{NrdBB2E2Y1 zRaKEi0Z~lYo2v{M4cK~;Ng{@T)%39Q0ep&zzs|uUzZxI5^8p5C8TtI)DO~iUBHU%| zD8lhI90;O-U)6>&XN3)4s~f-Fhr3Suf2Y%j&~rg3L~HvV(bFN|a}uE75d`p5*_k#o zpWmJn{S@N;+b2?3(n@)GJLYWDk+*=VY62w*B=U*V@&>}?D9R%CMickjMwvtP4p!`J;*GDXa2!s^5H=pI56+4=gPsfl3xQw9o47N6RmD?f=c7kX=KRSy zF{S<2w>A9i-fz(lOhJ|e91SjT`oJiGR{@^_nMTYO9jX#rLkj|U6%}ur7wlf>oL(;> zW*RW+r6c(YvWTPFj%bqk`+~7tGiPAXd`oH^-15pUK3iOdzR-#+2|XRco& zUR8~!+Kx29f}vA~g+dSn{HVCA9RL)akj}Id(ixU#CeVY3%(jT4LTrne`-(OJ7y>IR1U!NbwVbx>FGNOdgDF~8) z)8Rv{w)2DO`P_caV9q%)8=ZXYbm^;|OGjSHvc2JL)+Q$}a9?$PO3QuTNbv@q+` zft)`vJEpq7a??1_iMT!fn9_wH=Dvxw)&Gj-iIZ4lkw%9v?&Kx=TDb7yp`=H6gZylI zf8M-f625jXUSHRzO_T)eEpBLa^Y`CR;eks}h^p-TG(Fd!HyEnzTzATVnCm{iAcYgB zbh9qzv;cW&hD2+!qVB6`1>i3v&*2h51u56U!ngOav)UeYy5;*?So>ZH@7*>b zs_XCncPX1!Rbj|6A9)EVf`GTIovSV%!L2`xPoFiWFa^;lQP&pVYrNIrBfNGYW^&Q` zEF#eeKp}8vkE#;^6)>d8;8U6P+qLY8LI}22*f{NyFF5zg5zHN(74iBV6*m6(w;hQ6 zEl7dy1WCYEX`^UdKmPHH(Q((msGo@xoye-aEpeq^TiObGDe{G}aVJq|XrmE;fAqXA zkx~6B=6nlHwN6I<@@t;{>`>6{Ux!EG{&)8?;fzn1GHU?;{_Uiw^1tl49pF_kT6L(Z ziU4>5A;-C)Fm{6DBy7W zq1q0z2z5?wy=^tOzLd#nQ*xM8l!{ML`DR}W->$EPIwx2Bd=#($dO}qBf3c;3ZELE~ z4N67zYcGFQ6!2BpnSbSQCJl;i{t%8wetH5UE?>-d6*g^B7$pn-u^V5#6H`%YS50GL zn1j}bYeHQRNdTTtXmx@h$Rds!J4hnu%`4=b$vI@F>NwQkV#SU|)|IreW^W6Es*;;# zV8KPjEI4ZrqX$Ia$d7z>=*YycL)qf8c_GKd6F-e^xfhAy`4)bB?qDWevkd>@^P+mS z{(VIS?|e{#ZeR+6qIO@LB#P&Ov7vqprwX2jW~ZJs1WCYA;~+c7%zJlCWcH}cgqKm# z=%V1puMi{wqaiTPiUQ7(R(^5yNS?oHWK{WheM(4$P-lv+T~2MSgN@If!ssw>g1>xJ z!d=hrKuFbNvg&)P1&qWG385qk_Xc<@IdwUT%kD)qNUVMIWQJy&l2XP88)~7>fnjjk zk)@W~?T2&&x1TvEY}(2;4-db+kEJ`CaQYO+XEHnrNPC?Gx{?$*Bmn4@;%L*^ZRu;Ds9lu2$D$I?q)t; zQqJ#wIi3eD4y_Pf^W;q4SXs%VAC+?DGg~nlW%RO0qs@c6$^kYnq{v8mDOs=m?u!}U(yT3yY{ zpOoTC(P6UaP?9?YfYztS_#OrmfC6A{vTNh@sgRM9i08>W^i~h4^Bh%A6<&7ii$Z!ha=C#)r+=r?u341ri9o2S&R~shjdjD7w4Fm zGdh#WgRLxhVhdh_gp^>zl_1PT>)S4C)nEc}Q?hFUXydUgqLX94@rp(lpKYvT&Hfe+ z)H-N&`7z2O12YXwDoW+7$=Qq?rr9wPY&{Ul$%DuxN%+~A8e{;*~&^xd7+1+1acE_SLZK+3BWbI zQ4<8fuN<>07m3?n+ry&I4&tqMfhcH}Ke7ml%4WBpPrM5EWt+&)Hc?gY#F%SF6gsKe z?LMZ4*tGE}Du4X21hR}s9J6P1wCbt~*(UzJqJjr68Hyo_)j=qJG@&2M{(Cs?^f7V` z5d`3Lw1}EXM-oN+b`LEMZ`5fnTC|l9U)uvksThl_hy>X~5y0v8Q&nw8GRugv*ma4e zs0_^wKI!~qQymSvo6!xjhTWS{Rgly4v{l$xxvPnJ<3g_rB9Us8K`)`Gnmi|&Y_vXJ z+VMqq(Y-S1RS2My1aSB`T=Z)-sST@)Rm7X@(oSi8S9s``gQg#_;dMWjm~cNPE%IIp*AAqs#`VSPz- z4fxv1N-#+1byD0rrwZD%<^e>dcmjk#?#-y zd2nPutcw7gN)nt8L!km#bu8Z16xH>0Z5}X2Hs}mnrUFPJDaK=W-nJfYr=iAyV2;5q zQ4(pgM?ZuGqoT#f`xOA3 zGBT6T{&NUL5VTo%JP3fI;`AK5yxUo!IiiY0|3K=~_3SNg=hoNvFs{(b!Fng9bq*SB zUTjW3K1Ic(7s*P|GbG2vgh5tjjmThNmNo}*di<>Zt{x#RdAg7g9O>&00T=*`>g`&n zii*_V!n9_W2QsYy!$&D2F1OyJBsyV6XM2tBm&YqIX1t;e4-nv>`Z5~YrkbF&GXGWp* zd1c4@Zf0+m-Wh{g2AhW~pWhz#x|}pU_g*p#D%$bKIc*jKx`+CM(-tL7O2e~6N`27uIXlVCx-#_=DrWr65Svk13g~_+9V)bJu z(?861@tx-nVeZ6iuKnv)Hm|FNd<*6j-I4wKVCW?Qr_IZcH2 z>Aq$r-26359+<|s5L>qZ69-w@^!NADHwHPaIK*Vr095eLoI*) zu@;HM=T|``>>ET7wfIHUIv~Tq+*$ejcv>E(kMGCeC@h-B6>Bpm}nz!(f zH0o;XjQ`cwyt%qMV*Za@F@klAW-)j60F-(sjzeuYJ^rAfSfmUi`*t+3v9t{!Y=jO$ z6!7|09EaM#~W7-MnJbJ|l_B}m|7w?|T@S$nAN?UQX zdU`VgT9HT(BYQ=IAP6`cU8H6i+5Ge@rWB_gbInCla~VB74{upJf+V2&6f6Z+P*pDf z<2ru+%r;shI8aU3&7>aQQC^L#f`$zC)^;5;PCSF;xZs~7#Tql za5OmaRoOXrULjkaoXIOUjpf83^^X^WPUO1N3)u7YEFQjPJUUs#aj*?Vh+~BlJ9&a> z{*tfgdJbN~@vGpewDJ1=)41Z~(DJsc($45>mVrgaoNho>R0L7L<@Tdg*vKB5#@!bT z;ifZ-&`0rw=bLIO54399xoi^_gM`EG)z;wepUJkecE(@79DR=Y$ns19 zT!-388(`tt>&I}}tb~Q;3(J982iGjx#;R3S=n7NNMG?`Y2dorK^OtNRjN?EeaJGBM z$uU#=+$j;SePLxKH{7)ru_zUzN!ElQuxfBLxS-X|pwXFJdujncnV!e6PUc>raC;Tr z`=*B1S5~roML^4P?OWRm<*JS37&0^#YE6}AI(8(fRuY&hr8#8C;^RGK6k)M_n zx2>@J@}*ro^TrpWv~i%uL0N-~2AhY*b}uas9}c%4Z@`97 zCy8XH=opq`V#?rDP8-*c;y7&nu6btXSP9}8B3b}Smy}=oK8QqxWVHGtDdxM6NOnu3bKs!v+7ATNtgo` zw;rE@qC$O}hj-RgBS-?WEaGta!0pGJYCu(0oRxNdefe+}&L2T}gOe}5YhcaZW;Pyb zV{erMf2$i@0Ud=XXxc+b(Ei;qW~+hCACCg6ikNNUg2_4D`_o}eD2&YyamX*f=3q%H z<~(yUhJqTwG=E7G+Ns(JLj_zOKLK4Wl0m{>VdGD~9?u`njs9h`=*z?0vTzH?BIbMx zYM5ZrUcZVj(3yA?ZQ>E^y=j!N&2K% zxK#mM4xi@uYSHoHU6Z+PcJ!fSzS!2lS-)P5ZeU6>G}X<5Y5tNnpvUg9f}s7!5eSk< zmXXXfJ#Mdpz1a;l4zTJt^!`~4iedkI$&N-YerOYIHjfqzGRbaKTA)X#_LQd^Fd8(4 zPEYl?q9kYmBpY0O{>*I7oDjVsY4Po=Dc#qKDKp`7k@kcLfFKIm#HqqY(dbMT%qwKx z_-!jBHa-E&Rcnln`yVLp{CW1A%Y`DPf%4*R5fW% z8iFL?D6=tOLN!#@>x~5$I8LB0&JJ*N?Zt#?==OWzSPH zx#Qfyj2~nrGeyUM3?rwF&g6+pPoVmPGZ{J1LhhxpMKdc%H!yHe3Q7+miA6#X1^kMN zr{0OP*^MA2ez#8bs|a~!Di5}?>0n#b>81`%1HG6Gn-QM~^e8@=A_#cPZQO9#a9+7- zY*?GRJgc5vf1g9YbUjn={Wj_{UR+tp`fqB`_X}>$9Sfo?;%xQcY;YoW+Wm7jI+-~p zlg}PLnc>B0IQF;T_9}@8>fE(_0Z^2f;tA!a8^9>zPrL-UMZghnYC#lmRoNMRVh+z; z8@)x@!I$Q+VN)F+tgnrD?Y43ozj$a9f>{@pe||UwS;SstXLxZcH~)AjZin~CQzhsn zcJFHDtO@wF9At!Ux(MfJ!^3Ow6V@CwjfW2OH}G+tmr5 zo7hDlI>Y=R_*y*-8<)lG;jynGZ#b=h+C~=@jiJq||GBD){p)Md7g~EX`#;k80<3;= zCYdQZ?){(ybmGyayI)0DU}fWq3f@^)1HjMc4CJfFr(-b7I4W#C5&}^QtdPty&&(eY zb-Lv{n|SlnL&(W-9&HkVnz)nOz5HNEe7+>Za?K!#tPA5A^!S&D!6YO1z;Z&6MJ>pK zAn?_~nM^NEqpr=vS6dqpx-F}8k^rfCZhm<;Ne|opAd+WfW6)Y zjV@lf_r$QFV>+mB_3+>aC7kxhb)XZ`2XSUe05v@m0F}7?`!x$)zh;aPggsSuw(V&~ z$Tr1&pn@QaILg|QOfsvVn#t@F(gAp5bv6D}=%m&yRZSj>)&M z`ibcv3pnbXQE%4@qJT$Hv6r-hpz`Kp)46&^_)VpXW;Zvyu!EdS|I591uZ1c*xO_Mo zTzCVUV+o{21`frYTnxBu#X&`r8yr3gvVto&mhEVSW;cdG$Hw-Jgdk{P;2b5bWaL{| z{+E-P(CMjrc4;}J>NVqwZfPY|g={nTzjuIJ<`rVlX;1v50xKW?`3Ic;n^m~YG6rLC zAH^f4Vh$hFJ3$gSbyhxqy4>|O@W%;%JI29su#XtsOVe6XE8 zyPNQ-DyBROLI_P}j2x1QF}{2k%sSRa>D<|!&$l&z%OBJ>0AP2OHf9U4cD^X!^(%Py zw=#TuKbAZ=je_)}LiXOeT1q$9p)X1e+JLGGhD-zY{VhDRq@3H%IvPmoyb1ld`^K?6 z{Pb4*!_pDEiI1i*6mZr$(534+b8aEmonFA%QzD;&a?!&Z`S988%)NFr4_q;vsX^N1 z(@k~U`_?|TZm!2T$eIWPmaI|^wmb7x-kBZp-?CdU`4{-Y%d%>(j4l|>cR29uErV&7A<`1jqDqw4&tU);%u&u-_Lzt3UueN%&WKET8><>GvzB zK85>!GK``yZf>1fyT653AKAp6Pt4$^2x03w_~fq16pzltRpaQ1)lds?phFeBEuI`y zRmIrf%-*f_T)t>)RB1|EJX~_!axS@c6qCcm*Z;w=bnqzn!`$EzLy<-&?vgf6oS4n} zzs};W3y%%qR^H^|?iY3<=9!7c15g)uzrGm6TWQn)3s+q{1b?NiOIQzC62a}~y>BBc zxH`Dz?>o_r%i=FT85VUKfah))16~EM68CYs+X$$F0XD~*i>Rs?3az~PQ3>Zfw287X zhdz9{wSnQ6d_hKW8t>dXA#A=^%^pDJs7&1ZTTr`s(R7^V<*0Y!ENLY-+r(3MPGZAj z)0r|P`0Mk$M>m7bi!n_fWdH~j`kDA_Q(e#)0FVB77*ehUSEt`Z0Wit@ZCP|dqirrf zdpFl}(@$cz%%3|ti{f!vcw6F|gcIoVjsbXGyt$~V7VpO}D3wo_m$Phl6IY%xfVpF{ zD9SeB^!V9PZsXI9b$qtG0vtZpzI9Bvx??cuMV9}53g`S`9p!tQ!6<`H47lGYV3rv+ zG>vOc8NkgyDk3G!?&5FW+Q)aRt1%2qk4d3qu*kR%w)6hCHC%sML6_gMQ}tXnw}98* z+>210h8l?VD`glc-QC33dzzUwBD{iZSEUV9ID2e-A#$e`r%|%40pg1^z7CEGz^b@v z5I|Kmzj||_6^G5k3vch^g%2e#%i7GS-K#mF`4ld?^aMuqi*9@zUy#C{m*(*5mxoz% zpp{0a53^okc)%2FUKD%kudJ%#$>(<<7g~{mEc?PC0q6wY-%xjq007)NuaMV2If&b< z95GTg1kOMH_r|)20$_9b!J^ZGU&KMb6kSj36js4e0jLCa(Zd)4s-j{t>%gqTuc&wf z?p8Xh9zg(SSvx1iXcA?X1Qz_Lhy`)f=c7&a{QUk6kZr?MRcN)8Y+9pdiZ#CMjsZif9OSoA^;lY?5%+I9RiJ1gT0G_|kJsSS&w)aB!gvIOdJZf)pL@P600^oru!vVMhd4cTs?`15h8~AvR{M3qH#6(bwSa)Z5?8RSE`8ix5x*3uCyDWbMN|xfQu*N1LrkrA^2Ajmm^m`~b+Ff` zu!}T@n-`xy?aOC*-&g*(0c~4`MaS6WA2v#Y|! zOG_(w@}m;Xdpge?)=we?^>m6848fy?zXJR=)|{h7QyhV5NGcn?t7q2UW=@}y%e?XZ zD9$lqHOZLu5~2t$uR@#CM{SFTk~#;wD{X8$Y~yfwJG6NqMUTF}MSJ2^_2^UI5yYXq zotzPPSo731VM|t=M8-Ps`kBEhnS+nkYPCT z=yq)E9O?KPE&Aq_7Y}98FUF7-7QO!mp^*HMpoNvw>d$g9H|x<`Ku> zDars2{me33o|?%G&+XuaPfBrA+9A`R9YWz&pvq3ps7&6D5XQFA=Is*jNd;t!j%J&O zm)||0J;g%6iL~QsE=bY5oqI_!Mu>BuLJ7cHwC%z^3m+E=SBslL{mndo?Pw+pvXYk` zzu(;RH;&2&ms}oa~#3HIHWEfcZpMz1SX|{R! zYG)Jge_O-KolUeQz}@__ZH-`(`y$F`G(_yXXx>|8z@xyOJ+4jyQ2|4yk;c8v-1Ghc z9=dpF$ZI#3w(-<|4)UMx>S?KQXd5?1iOhTp7oM2QJwF}B;H=nP&r9o^Y}i_l7~&MN zKIT!hz6(pZ3y?_UoMEVs_mEyt?};4C5sZY^B(5B~tF?99At?J-86<&7@xeseF=ZeK$~z4LhNe2AlO;&}rA z{0w+2o`k)DS5fiRI#{}JCZ~nj5e&wtd%j`!@(LK3!raN(4C-g1s>RKUolQ8)+O=TQ zDY_op8YY2DfwyB#6tDW~ZD0!U>p0UV6`$Qp&aiY&9TmIB%?+~$aLf8y&`T`&x=OQ2 zkVHt;V;W@DjsiUXI{!)H=zNG@004dii~!E;K_1D$?qlM>l(-ILo?4s+DLNz(^xdt1 z)ZRYkH!8kB>x;PP=@!;mKy+@wy@_85dO&nEWLg5AO~>C;9*nJMeGoT^*u$Jb6dI>q zMG|Qb5ql^SF0UWFeuU$CcNfswd`3?*NyKg1(B=d22b)SXW|?i3wz%~3d#dcv;zlnY zcgmg4)S$I_d_HBJNR*t{0h58)eVmejY|&A3pp~`zTVhW8+S+PBh{h_duc$_A>$*f_ zmdF=f6)+KqetRxS=w%UnD!+g4KuqbrDQ)HR|CS-;nvciH9%yYl5v{EgLZU~yT3`aO zDZ%;1gsQ6O^DV4cR?g#}9*QbWlf%b(_iq4M#Bh9?cWpvz+vwxZL_sp{v<)~B_#_E= zM~y5ANI7QiczO%>zP&GOr0q3(nwfCx*VI?pG4;13^OUZ5`2?*^6YjhluO={B9tUnq zW&z<4Bmt+>hg##Hcx)Cwn~~4#ks0Kr8BkP}{WT6gSXay2OUuElL_C(Jk9Y#OJz1G2 zTL1v&1Ft5#kWh3vY0T~gi%tt&qXO+7&8ains5ylke{27%fY*{)KyL^Dz!=~SV0>>B z77njZ#pl;f?$*g7Iw@&q^7VwRz~%IURd#R9c6OjmU>5aKc_Gos0w#lmNiPMQO8dG- z$FK;kt$M{IzqhBmw*Wr`_V;qR-v{=iwaqQPS!iFZcNU{H#^tHxg2XGGBmh$R8u1jyS8ttCXp^x3~`dR=w z_!5{2T)_XfAgo5a$C+sN+~*uG0?@(7XpQs3z`y@j_!#Y;W^$a}*YWDnxR|4p#reP` zB>9N@Bv1;xi>Aog)5moQNpC5F62aNPg}@m=|30ouD5}w3?H}?zncN<)Z-8KY8u;je z)6fKAHhr&M+zPBj>-c3r-}Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4I4>BK~#8N)mv$B z6vq`-;-5*S0tO7kfMym!QqG@LB~_`EaU4wI98RT3B~F}56-oZ23^uo_-)h>{)>Xmj!Gu`j| zru+4KJ+n!P#>xqqqr7UyWS{Do=~ZpT9#tzNt92{ZPPb}(NS_~h6s?Q?*3;i|`n$3~ zam@BB_SXthvPO$${=ZN-&OXVn+MQ%y5b1}j#(%*6m9miGZ_)VoSb@dC=r|*?-0;~? z$5vS0csE#Zme{)Sr7I!r8?#9c|CfY_H)L(0%nz6{Q z%o{G;csihYI-Tyyb?%fUL+W@U3{yz&)6raDvCRMQ6+{apY+ke1T60 zmgJ*TxEnuAO`7_3pJHFXHf0eykUH@!7y>1H^s4qvnMs+?3HJvFkf(+}M8mR9V>PeE z#&So_;_-2JGQI)#=Y#X6wjJOsPVzxT684|@gWP(1pomu;Tv=jY-YcQRc+kcqYjGH~Er z6zzzhH!wV^^`FSDWR1xz?>nh1ca$E@LyV4lEc!V)!)CLOXKiGk=6uY`-usAMtGX;` zGj{FMT6Q39E2~_zo9&ri!ki=K@N0Y%9W3v~G`WpQWBFs#q&~?EoJg>@1x-1eqvs5v zIp11HWvQ%@enxjbchr1#a>ZfR_*tFQZk%akRoNf2b+0+um9j5c-GK}2(w?)dRNKzV zGCmUY8LM2nmzAb(V^H4zk;qZm^cq*Fx+DS@o6^ET4qHXps6C zV3-ON6K;7XSceL_p~zRQS!zGz@u-(0~u8g7dtIv_^H z!rkHEHMNT){SmDIK-cwl-j=K%vjV_)EKs#n zL0iWrN_X>>^lEH4$S#uFKmwHO0(3UEi6i}CMu5(yHn#B%H;Eb_0l+a|)h>dwppOz) z`-$nD9Eku3VAqdd(LW!#Ov5*i-MM^|e-A{|Q=nE%fg}19z-oc1Wgr#-z_FOPx|6k+ z1$``iHs>13m}D1(HA4W3+yETg@aufG;SCSFenJ;Pj{~71L?ggs@)b4wdn1v@NWjRt zDq=#*Df0rrz}2nTT!KE00L6ON)bNLq06D|wu$yNa*>#H4a2E5mt)3kJWgcrfrmqe% z5h4i?OrDP>YO|x^4(|j1L;D@q?ohrk-?RXnt71LJ$$Q7ne}N7@G`)LE0-)oHtX*vT zTgCmNed~p0xd^qo2sOLUga~kc^Kt$;9C_pe2GG~GKdoR#-KESo!ERaraHUGI*E1${ zR1$rdjJx1P zzO0+ex{%GwAv^j%kaL3qR1-CHyTC^s-M1-eK8?Fs^d?4*814I;ng$lBWf+2+Lq>Rr0-3*=y z0>}k$Zg)!u|2_~*jBmjWt0f8c*LgZUw*dQ&}#U0F+SiYj=3Hl^Jvi5R3HbqhIH;|(M zsydXknAgFGMgTw;!Npq7_la;-j4U9wO;L?+in_+7PZIRSwz!&p(bP1M2w(t@wl@CO zBYh|WL@NN$dj2}yc@HNWj99nDX~cioZ(AIovN$zf4@T+_Uf^YJVA>oAGXfymV-#S` z4@N8kfFs@PG(o!$cwB_XM)7(yR)6p!FQ8=mh0zLt9U;V!z>+r*W(DAn##CGT3fZGE zfD(hncz`IoIK&_T9*&A_EE({>?Qa$F$Q=kwk$wW??B{hrAlhkJ#ZqSkK^gAU+%P4; zfDcCjr~ZKSR#b0>kN`-8j=4+uD8OnEY!Kj(<3nEl;;z^1I?XO@KgD-(@QB<1Ha7Oo zDB=Hu5SRCzV{2c{W|fO~vnE>ZWNo9*&sSCQcLa!(+{XaZIoWOx_;?(k#@>!P7FbZr z&*xJioWVJqlQV1%J81te7p!veo_@o+<#Yqz2E+RRsP2$ryTtk~Ytu0P0*1^liSfCw zq)!(#2L{y#N6fq;6Vd2AIE!3=AoM`YSTlDnTzY@In#Q%Xj1X zk`%8ZsbbT2etHDuJ|Ir4d1X0&Nh;E2h8Z(nl5&sLCJK7d!KJ28L&an&If`UqL`W2Q z_zn(vbciSKSZzMrb0)!}J#=t$j~{V}VDtZcfOnvJ~hr-`7)N zlk@!S#E@6DErLeu$efh<99}$5#4EGd$l%Wf5N&@5I)78i=cwY8r2f{gbcpGCmyr|-~31f@Us-^tP5+a%$cWQ@P(GTZVKA} z5N;+Gd5ZQ@ftpc<>?*Fgf=NT)@S(txQRYx)V`Wk#R8eCHicE z55k?NgFI#ChyumFgaXekIAwZgDM~||Xd8W?uL6sG35~>O=NF`S*{V==q>*#{jWYx! z{58GX9ALQCXbam|XqznEJ2vwL(e1Mb{J@#+&QJXoyNibB8Eije4<01&`~g3Z#&fyA zQG(An7W(69truPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4TwoZK~#8N)msa2 zl+_j9K=x0dI92gIeP~;;wzjrvJ5xqPc_|RGuMh${iYTansFa6VTH8?sMZhX8(<0+& zJ1AI31Y2u;fvAIT2-(eUcC(w1kar--hP;#0^PT@LdGKd<|INn4GxJS0|K7(r=bn2W z_x@`cY${IAxiFx)CIzg{Wj@WZ&8s=~Sh z8TgE6Mf_b^TK1{7tc-RZ<8Yzo+7#5Xu3KYSlcLWu3@I?maW1d&3O_RpAt40*7O-#- zG7+F}WUQn7mlcs4ux70+9F=jNns(^v%h9fLc(os6=Blcc(2QhrmPxFu?ZV7J{Z7UPy{QXoGosNV(06lJZt9V?4;fU6QQ&$@)$5V z*ub2aTUo^Whf*CsRqPEe<^3}JP)`V z0}t4{YYuW-W>B7G8e^(_&QG=Rb31wXuV+N2d^YTB0!j&clA;7oMqa{zMia#it6d2_ zg$jSNm`ZGqQrVr)Q1I&eS?F21BDkIR+u8j2Mrr3snRWU&CZH?9u~UhW7`ZjuQv+Ig zUU3NSw%kNTlOCe_m-kawa~nmdtF@g@9&ig<^Gm2LSV0Z1eoV)1+eqHAIdsHw1NWaS z{SC*D0r2kD?3kw* zI4ff!D`Gm29X~(dy^>`(tl4f;V#P;ptMf;k-JOJIH5xb;+`Q_(^XF3SvwM{|1Ea3C z4yt{6HwAyaoRvDsl%EK4(!_Z}Q@%BGoDwfKag}xe;m&lZW0Qy37EgbK+AB^d_D?66 z`|-cMNi`c@rOJn1pz_6Asba-;s@?P&h2Q#uI;!hc%ie@7Q?}??u`Ku%Lmv77GC&sQ z?IR^#bmBd87qTm(!D8VEuTJT_C#kEwQ?cBe+KQ{FeCc1gtxZ-Eg7n5Dae}_{=87L^ zaUWGZdsF4==cTO~OF+8r(QNl9F^wtDl64k`k7}ftMuYSZCo?pKN^_o2EcT|xcMnm; z^1oAH+#+GzGm^ud;W!MoB9CR3F5qZ89pCyNHA-(PyW<(XjnNnefJ__}YCf^p&Q{`{ zPM%czW7X_A&6>VDWd`{#SwNjlEsDKvs@<}e8J#R!1CG(CzcHK~3Nxf%)gwF9Xx-G+ z)=q`LxK}L3xPNazCdkGXzD|kTo3Q#`&2hqXRcFx6WdJ--L1 zE=C>ugU8Ckjj>U~?t_XQqJ~``%Bo1rPLES?E2qKm3;nL7uISMCRc!lRGEaMH4K=)e zkZPa77Mo(w#~3(N;RMeMnU(k!i#N?VK9Q3gIHB6juM0z<#&-_MO6hw&w(xpgz-cen z0lqUi@{DrHb~5ZQS>+T8|NAqU3!&8igFC5s+V90z^lBRgkP!>*(`?r&@loU3H<}H7 zo)H=3JNIVlIMFB!wS_AA|9Se##}ZzInao>f3Dv#$F16%_sOg}W8ulEd>a{y5c-1l< zpOwJvdiIk@!zLf0`ke<@adXIfMz*Pth%-j^1)G)llK31kYyJ?RY~izt72fx6d?wHO zGJP79@a0RlQfIiC>UQkoRa`^89p&{h7OFouOl%8S5v8R{o@u&sv8==Qlf-W zJAs@N^m!(VpH3(DACY-m{bjmRM#jJT5tJd-*BnzU9;@v>>ubCVRe8~K;wIdW!{dO1}gmdQjR+Md4d^0W{=hW0Plat zHnSFh`aHyyS%lz;W0^maAvno)E^~vwTqc4TwTlW-z)ccuA_P7X84EJ=Hh2yS*e_1O zpizGi1^i}(Vu9pjCl(V>P-*rP)LwpE-zp}Y)+r!g;H0Se(*l|I2crSoN|+Tclsn4G-%| zh+}S~-BNe_d5`ohp1Ov4;4Ne#`RNPD%(92s2RMq%JHZ(gxcna3hoI7&Cv|f)Xxj_$ z;@T_<@A-r}8=J|0$^7V+z)lZJbB~-!C$_yMbJe}@u2iA1d`>K!a)PXd17^b@RvYX8#RJ>aY8tnX09jk$(uEYfav6o+{DL}a!)ytwC5eIpJ(dg^8~y_0!Ng0m*HiOn z`Z++&`d36DQIFK(#HlcdWWa196bVO2fk9ZExSSfVG<*dLof5}ds^76+j=URoe@sU+ z|HOsP0`i@Ivm{D5JdLEh9mm6R*orzLrmu+;keL^MyTxmD+;27&24qied`%c^IZ`C6 zr6)r%_OxVkGdPi2PL=G@QBbwy6;nrDBXt7xCuK}ftG9$IS8it?lcOtmARfODPNl+b zEpxJI3t%9#E1uR}4^%(;GBe6rMICR@zAxZNePeT|bnX+3C*}OG?5-_TzGN#M&0uRl za>a39R$UydIY%7}a_=FbzrSi+9B#9Y5WqI5Ub{<)&wG`fTHvy~*_oNl@_1Xo z0YYfNlR$ZE29T9k-z~y}_@B**+y=>g0Gn#$K0ppRI6;DW8?_%Uko~XOpH||-0&Lgf zNGy?SaB+s4c8dZ)^*i>-Go!Y{0g*#dx8|In#Mh6-aa5ehHju+n_R{T@`ekTGZ37it zbgNj0QTw3=WX#j-KI(Za4#H)DTp${BiVpppuXOGPQ2+>j0cU;53|q-SP*nvf|p|5_F%TbViJ?^M6e?87fck0Q_1@q+A283H2w{<2zk0V1I zWT@-$T2Hj=aS(^Zd!Q+!L1IFbFpUbndn>i%7KsvCJtb6l<-KePs1}D#36LpI%UrC) zj85#lKEms#iEIU32{)2=Y&KVXpNkTZ=LfI3PmaQqQOTJBWI)=>rvI@LFE-(YqJZXV z!V5-5gT{m?fwQ`l=~VT|KSc@c6?I(k{gJ;zG4%CqiO5S*xmM?8O1$_8ua@BzGqa~f z-EgX0e-Z_+UUup-qrI$FvPH259B3w~yfp%NhYYz|=6ofVIbyTfG~l;H8G5OFqyDnw zzdoc^|1qjs^8#;+WmIs%E#$@BoAVe8 zcK2W8#j4Qw734jGBTo{mKV5joD@u&S2`?Pu#p9$XK|w$E(ycp zxhuefVrOV5cT~oC>~z)zG-nN%!hu7=Kd^`bjES-J6?fJ!)?seN#?TX9whCBXtC%r) z;|%9+VA$+wb5Ecz#=uw@6Js-0hj=bE?eHVAtVs!Ju8F)aH*+k`>T>jIE~m=8!+l_MHOFHPvTzF6S`1o$&!jk`N=z tnOY}+&v=IKqz$)4AM{nj3=&x^{|AUx>IBd1obLbt002ovPDHLkV1hDD$@u^P literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/fedora.png b/modules/servers/ArkhostVPSAG/template/img/os/fedora.png new file mode 100644 index 0000000000000000000000000000000000000000..6966c9ca1ad3430d59d1d12d73d59b9ee31d4d74 GIT binary patch literal 3239 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 Z{{y%s9y&>YPrU#D002ovPDHLkV1fpt9xng@ literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/iso.png b/modules/servers/ArkhostVPSAG/template/img/os/iso.png new file mode 100644 index 0000000000000000000000000000000000000000..96a93e760ba2e4f829403351bb1fc018577a0dca GIT binary patch literal 2754 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 IM6N<$f~@l_(*OVf literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/lubuntu.png b/modules/servers/ArkhostVPSAG/template/img/os/lubuntu.png new file mode 100644 index 0000000000000000000000000000000000000000..afdfd9fee6fb166ebfdeaab3673b12e217166ca5 GIT binary patch literal 3287 zcmV;|3@G!7P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x3+_ooK~#9!)thN_l+_u>fA^i4Og6G75F-#&APZ2JkO)D9 zDz-w^<1VNb0b@WB^-Qb9n}01^laXf{odB@nVsl1VcA zd;4JsVY0rHnSuEKGH2eo_rCXe?sNaoa_4|`hx?s-En8~jKay_bHHfu5* zzAL~j{D;7Feoc^UMCxzsO9@J!Odn@n`>PY)y|gn>oNuvAD*ac${RJzK{E=TTW>Q`7 zkN$0e`31Kk<-2ENmca&v2_wQ8nGlQ+aH7e{pt8-^S2ZDYm$GX7Aq`tV3Kad@ffhb9 zIh^9B#_{lPhjbAhKoM}=xM=n*9m7LYhxq!sNTlmckX;tM>zn8Qeje~Z`&WZbaM`dh zPBc0ECj8i>P`-XNmDn(S-;tUST$>(+)gjqg;Zy!Iobe}qq44zsJu6`Dt{4>MBOvs& z7rZQ%jSr4SrwH=P%}D8+@CKb=>!MW7j}AKhtktISMM)DM9%x`^g_$GuHikqP2s^_v zri_kYb8!>L8|}Wlej<||c%9vO*7gUUOJGnQ2I9_qbm#b3^oroA8A(hTHHf?4sNk5X z|C6{YGmf;x5C9x5$;)4!7u3%&4GO1mFHCol29PiaIM5 zwN@%>ZSK!H8|5`tnys$BUY~%)_7L!NR}x&fI|2uX&rE4`ilFZK%ZLi;ScxW!i}@RV zVZ+|~ektIqM^m|SWCTuCa?6^Z`S?KZ+3dyVhw|kksYHkNy5dD$RO>`G&;ybc!0@#I@;BEZA_k%gXfzog&Cec2~ic zesru);Q{tnwsHQ_?=k8XpSGS+uV8bk05KSJ_W>(B6(Hn2oxS3a2t$tp-klXkW^y>Q z)|K^zVQgNQLSm$$_h`i8qPE4se%}KdKUje>t3v@&T+>~fidrichv!O_Rl7aN zcSl>9`eF&wUM{7m%EGkNNDlsa9M_NQy)3x3q#3(QdSR^rQh>_UZUyA-OhAy zQh3C3f46jUHCs!Yxa651SoH1@gn*B7NAc<%$%GiXC#~1Msb=sXgQhvghZ{&85)!Cv z@i*iY#wkeMx$YHB|!*#DwXYc)_4RGT~?i7}-~|m$p^0t+e^{_xrLFG!4I_+|1?A7V-A( zT0UJcis@sbyqca~f$3wSG+9eOnQ)ZSIri_inS{IED5to};*RIDVoA|RPExw#hN&-> zFfJ*Sr)DH+j_N8+c7{Y4xGE(wP+K5Q0W{fIeXEnnFBG%)NGnFY!iKpQ5oXjLo?09# z%Qv53b$$)AC&Y14d~lzA%4==zG-b-*Kow30DRdlB_lmjM@$6YLh69zY{CiJ5DT9OA zu{fP!UXoOGvxB_+8XPXkd6B*M-F3*F|IZj39Uylo25DYGrwcBKGcqqbfjcu}5yG7q z?O5z)dT(*0!N!Rud#{1c569c6Z*`&wcyfADK#V{ETC_Ag+FVHLnFH?%$nR@clf-hi90jn&?$l^ zrzbIMUAaF)A+sK+1BUn2w$b8ZTUj&Lq(+`{QG$^P!Q_{l+1Du@jtO&7Z!g4;7Xe*nGoA_|Qi7(5VIox39!gwRmp?a)NiQU<^S+v+x zZn-p;gh2*`010d=YVwl;#C8Qlnb!83iW>R!U`G|_o(XY`h%;(_pV{i7@JK5~RTj)v z?Ukf0B^?6Ko)Ay4LGcp<$}$DykKXjT_w7Se)VfVD#Gvrby%!Q1q!36H9PZ%hh+rL8 zr$qS40+b>JT=}>yOB3o_olJePgp!l)sBq#1gZSY7QC!Sf``2(FJ<5Z2*q_l!F^Z^ug@Y6pVw5y3j%&lyEbr#l3H``>X~{pXizRQ<}%>2L>DU10*b zc!2(X<{@u4Ac+XeCE{HSYa7ii~?We0hih$%;BWZ~tT$K{ZjTc8Vyoc!S zlY=H^zjesBD|1rbOx}bKy03}!hWQ0AAmyXJDB!i3$;_WT7^_1)eb5?WQ2I=157pUt z;^Sldx3J#FC6Ldudcxy9#u>f#U6r|*+=3Wjwy%~DtU+k2LuE@z6aOi!=iPk`euyUJ zdWKxSwAVnZkBmv87UrNh6Y%lAaHGXV?)qQ2FwV%xgkZvqI#g9s*XpFa#!69@g@RvN zG#{L55dJe%!|cAU&G&utXibKLW!rDyWJn$`r@zx#x3k6%=B%0Y-a#7XXt^%0*EHa= zsZNmdm|xI}v}3{ca9qJTAm$)Q4-m)w2+BH?wza%AwZ$JJ2IlTX?ygG^$}A+)aGyH$w`Q&) zIS6b)r>t);WBC&z(CkD`VI0CS8HF??sUSw3+A2|;`S*Ef1R6k;A=FZ&QiQ6@XH7<3 zAgA|#dG~(HQQVN30000bbVXQnWMOn=I%9HWVRU5xGB7eQEigDOGB#8(H##vhIx{jW zFfckWFi}Mpa{vGUC3HntbYx+4WjbwdWNBu305UK#FfA}REiyJ#F*iCfGdeReD=;uR VFfbq(ug?Gg002ovPDHLkV1l(GGm`)S literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/mikrotik.png b/modules/servers/ArkhostVPSAG/template/img/os/mikrotik.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc5e7b7f43f50f71a65500bc9f3b1f88f0f6cca GIT binary patch literal 3601 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 QBOC#srmO|4cwvG1ABl+B)Bpeg literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/opensuse.png b/modules/servers/ArkhostVPSAG/template/img/os/opensuse.png new file mode 100644 index 0000000000000000000000000000000000000000..077f59c6db54d046e2310ddea82e2e34022ff736 GIT binary patch literal 2953 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 literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/rockylinux.png b/modules/servers/ArkhostVPSAG/template/img/os/rockylinux.png new file mode 100644 index 0000000000000000000000000000000000000000..99363cac98467373775af416a57f7974ae620503 GIT binary patch literal 2265 zcmV;~2qyQ5P) zOLE&*7KYDZEM*j#y#g~UFtY+vgLZmm?ZDIuVh_8zIwIxj>Y?QoNM3=JndJ-wt-#a@ z%&Z`kGD##`$PXBoBuIz^hzr~Y&R2DaOI5i<@&9mN1ZXCq(ReRF`@{dbL|+~fgUqfMp;e!{B@gdub-p)?GvGEcLNL+bV6G@ZzsDiCwOix)(X)6 z^;M7V!k?0}-C@uxwD`^BpZ^WWLKtNgaqwYyfa;M?FbAliZ6Ywr3cL+|5z9nilu_c@ z{O#?r_rWg`iLkY`Z+gOLOn`WDcXN#~o(9xx2DH6{m4lhdq7ebwXRr2%?p~wWAt7Q+ zt=7JYVS!P#5uf#c{qY*RX?+rw3HgM+{qAL*y+LgPeBH$Pe2iunCEO485FYH;wbfjU z0PPQleN6JAF29Wu)-%B*@#W;{&nHwdjH(Rj@=JmtVe+q^_tB~hMpZ%_{>}9{nq8Ez zIU}qRcB`5fR3dy3Hq5pf?b^wXcIuf zuMMpdXb~V8^FN~5A)yYm%?TJ)iX{B#% z$(20s&=hQ?)!Hp`Wl?SclCJ+FnjI2sW{job_c-Q)QMqWJ4F^PYfD-Iy2nhz1gIof{ zmu}zOd_q%jh3)O{^IUSCPk;}H=UDUiNN@+{0DA+wXsv`%D~a#exw|_@Q*ezO6GBF< zM9zMP$R#mR_kcCM0Hf|j&VCPA(+e;v6FK`mVnr{&s7$c#KgHo0N^qaI*ca$i z2AKjRyMDi;Dfq(n&Ofp~D9RS#{oxCI;PV=6kd_(sO|aE1WGBMRv!G=*YZq9Pun?1bsfd zqlla9fb5lE>7!ysO_5LiHX;sR&9IXdR6w>$urLgy1^95-$Ijm|nnFHO;VZ0`VBrd4 zMomHYe~QC1l(3%6@D&zIklGYl6yW#hfD%@-GJJ)l5~StzQQsIh8PA01ZD!94Fe*2f)bV~6~4kE2`(T& zkHEYDpK$1qu!xrM6_!Xaod_~21_FdQ2x+v2udqP^2oPr ze1#ZWP311hQC1BJ> z6u5#|!q<&P2^h68IpzZrepP6afKjD@1Oa955=!{hGo1W*FrX5Y7vSrg9Z-5wDB)L+ zmiM@{01@$DD#DL&Qh>&UKlf!$RpFcf z%?W?@MNU=XlmHD0{}PkEzV6B1eK;dPL&7h;wObS?1n@rmXmjVARzLdoZmJpU1@Jz6 zO!R1LXHeBFe;rl};Cc9OX?q*Nr@yhIZmbo+5A_h`B3GzWEbETyTGkcCS^*SsZ*cp^9);lxJbjFE0j%Zuh_=2vH8r`*i}eD` z6ZZ=AxlbYW$UYe^QPJ6cYU|mag;N5|6W_3Ud)q_L&?7U$#1#sGbKt_6ejm;Xu*lcm z;Y$}nbcoPHgw(-b_XzFsL>o0sVB2E?V=b=Ofe{ n2)RWQG|0ADyKWdIG?>2uqJPcIuS&EM00000NkvXXu0mjfvB(#D literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/os/ubuntu.png b/modules/servers/ArkhostVPSAG/template/img/os/ubuntu.png new file mode 100644 index 0000000000000000000000000000000000000000..087c1e871986d487898bb7fabb1c59f34ad3cd7d GIT binary patch literal 3351 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 bRxtKIp^Z#xF;)d+00000NkvXXu0mjf7a;n1 literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/running.png b/modules/servers/ArkhostVPSAG/template/img/running.png new file mode 100644 index 0000000000000000000000000000000000000000..2429bccbdf382a7b62d0ad980a13ce85f45cf2d3 GIT binary patch literal 3603 zcmV+u4(#!XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4X8;(K~#8NREC|&YMjeQkA~yS9$Z=gzMB39#oDR7<=NV;O?$_!CMO;YC zc(gzflMRszivdNrNxWGAys;&6VG$P4TNsQ^=pkxR3CK12Ru(|6(S0}Cd%izZ@p&Y` z6&B!^MxGEBzXk;`T+7VN{1t_OXdx5iQ96*R(?J%I4#DaS2#tR9L&Ye-RjUFJVHFl$ zkk$-I8Ji$(X$^#+AR$p&(en2TdY*aRA(5Ga=*Dw-w9pxHvre$I(e|+s!;l1^N@9{L zA-DQ86s^AiYYC0#VRgZN8cw(|Vs`g~gk|+Yg2K89(TmFbqY#bKV(q?RcVl-e+6n@z5&VFtso6ch3Ld`C~x}+vMP?V7mxtil_#OB^)f`E z5LB<&^Q;O$ZboiTJ#S8)kYE2UI%7r7ZYXZL2(e45ITR?yi<{qrWm!8QC}K5x z0)-2?KlQu}udT@5#oqnmwTSbQ&`Mjv7VI|wY?9}GnKKq zpfBry%;I*Qnp1Bs#n>nDHHm`jQz%e-C>PLuBCRX!0By+;p6;@ZZX1`0NvgC61?vJJ z$i1mDN_e?7r?~;t^F)52*cuLyR|%7|J03=#O0$ti5Q@(4+-DoaKsM$Wk^lrUrkJA< zfnuH>Lg!*-hZEFz6A=M|NA@k#|J=Hb2}2gZ1gc0FX3QV(=%SARzu>jNbpYVy@C_wq z(f)--Gr|+{Dbb(f)u3FHl@gs;CR%Vbf;^t4%eWj)VF6^aZNCnU$$l+jULlUBYj_wM ztss8k^9nGR88*pevR|_RrXwJHMXJ9l<#S1BQjf1Z@%CtgM3L0vAC__>P_=xak@B6x z!NXtc=qdfo-reuEgS#J$R@i&^|LEu?z2V^Qztl*5%$OM-0W#NsFmUpgfum>OsK-q2 zU~utMzzmNdnIM3t^t`iAh-l%_idm9S6d>?83m{ftv}2}EFbW{OHe>;?FhlI#qlh~K z;7m}gfC)r;>TEBtcaz|`6sFDbhUs&CEy_J=AORdbq*n(O0FxsVS0v~mbSXFxAx))Qbzb$IZzTNRTzP zXJBq%6e})fe{YaNVB`w$432}zF77bJ#RI(M^FXRzhD3Z|@+>#>gir{HSq;uUay}=5 zY!ecX<;lh!yyOXZZ8_hY;_4w93PTbgVqu=R01d)h;W<+EFbjasMYkrh%6SHm$7OOD zk{G@ia?$AKG+%jX)?5}MI=O^_49Wxp zG{5#AZU=e7Y|I~}8$RS0r4;)l!1A0O(7gL=2t^^M&i3r{oFOMc)q-4ZNJ;bi82gv_ zA^P%8a0`kC`vKzXejwx&DJQ~+MS0wF_H!j12J_PDIZ=}EB+~q}b>JVqgwM$?5<^zK zxPWcw8YRs6X$>e&xJ5D?k^rW0-%phY3s*I9X4Nby!+CTVyD1G_;&%5B3I)pg^qq#g z-gw5LlFo?`os&3pe#gek!o~q@`nPq60tle^;>uAB$_+F;JxKEZ5A+k@(I(^QfpC|C zlN)*mg1+-Lv9d;x0A^ERX^&W;5ei%3y{RS9k;;892@H7w%yh zD%;=wjt9_U$V1xY>?^k@G*aQ@f^m6?Ud&wy z)1x(l7-(Z&2fq*Slz=sR5-cYFib9$gQUHWb3Ngg9`Tg~DNoI7{R_pKx#soW%mrG2Pu)F~c+9 zjDttOcQ}mnVCEb-!1g%0N_rftv03M710ns)Ouw{_6of@*gEB4$Ccjz_HpiO8 z$qf|;8aQMecem1S11D0QQXgXhu;&Y-7MF_ti14rx7OsOC4dpQQ7{<65DJ!r$xDKA# zUkgv}t>8~Pyf*e&Be=CSLxfzLF9;BA_>z7`7Hh!61d;bi&j*`MOm0Jo_kJLvOCcVUYP}#Sb!1v<7l)2l#zOvytNu^I#7Uq44Th3^I4*jl1LOiH_0>T~y z9jH_~aIPqYXS?pc_sRADu&)w=PVa!9kT@NsAH4;S?=9zhrg9VC+5&cm8j=STAUIOX zglSt^?|XsTGq6OvRq%vi7J)>ionK+Gxu8(%V9Mqyuo3Y9Tg2Zmp^ZCGZ*h-6$!^@i zdbskeR*brT#rTH&dE74X;nHSkh<6WsjaTfTSr zi)&ndpip4}4h$p!y7#>0jiOs+*#oLh@eFOaJir7JG%O|u(hA>zsrxs8&7r<=OZX%9 zc*^;9=>DmPiGG2EgHP{--|Q-aeV_k>uYKA59ZWmY!oy&HdlT%A(9E*_;{kF2^+q;t zTs9YhdY^JYawct1d;l9Id6RY?6jZ+rv-fR-XAaj|G@Ozkxiw|^&%XbL3IBj%Z2$B_ z{!Yh&vj=eYH-PIKK}irjV7I6M1lkNqZmumk$|C@6n`u`J-WU9(G76stA8443&*xk-seOpW@nCxZ*8RE9Y732Mz6P%g-a>DzJQa;g;*nE1#rC@|@ft^KQw5Sdg4stCh5;>`lk z5fZcdNo9O)fg(2d1S)<`t}&b)Nl-@U_;bp}$_w;@bK=R3!je{utU0jE#8aF2E%CJ0 z%8NM3>QaYi8+^j`zco^S^p0l_)O*`?GT}ZzeWoioF)E%A#&C3NaIcvCDFFCae}e<0LPdy Z{{wr4H2oy<7L@=1002ovPDHLkV1nEIv}FJQ literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/search.png b/modules/servers/ArkhostVPSAG/template/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..b7af958c676242a9cc7262137d3d10b8f256b3b8 GIT binary patch literal 3724 zcmV;74s-E|P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4k1ZIK~#8NHm?Gu{wqi<+#sh3jq7f~FCk5cuqPgrhiKy)E_ zhh!6X9JcTd&8EQUBGxnKo>!pi??M2xvn7y~_X<|&2@FrDC}`$l@>FK7)e?}|;T@7? zpyTj`B0P@?P+b!Oerw7DzTpdS{$2 z1h@yxm(DYi)=_NQmlQUulsuRaz)=6U1@7k&l+oMv2uzo2x;DqH7=zun_nN*;Mn4%t zFo^&R5)!|Ra#nmtg=;UQuEeT4Xj9EfqvsV(AEomcm zBNNwTEBH)?cB-tQ|&K9t;p#A#uy7 zWOE~_mK@=Bx+sYI7jL{KrOQ>3OmoyL$Mbd?6t|eH$e& zs3sq--)?>>6gq1K%`f~$6h|9#fJ|)KW-*9HW-BGk+WJ zR?hxWi~7ah+XB{uCqNO9!7EcSgm@ZPD*vbgQ3!2V7H!C(4Z=i*6_bPw8UCApWPyy^ z_dbA80x%K85n_HI0R?L=u*)6eepvZQjy*JO!8Nx79&xUP@6_h+?-t^1Fz9kub=N@lmJOOJekyjeN?pW3S0f0SRTqF zETZPF?PYl=flxq#Lmo&kIwSmgFGAFn@l=TVA5t$6F3`k2*eMR}J zYAHBwsa_};Cx8L>2Ahf56_i_gN+tlyL-}8dt)T$C3Q7Pv55pOG00e2;nG)lD|87_Y zef0B`Ndy4!0$of7%vdBhkeD>kcPN3$>lD#IQwIC@8Q3;1ql3u==l~+%5&duQ>qS2T zU{yn%hBLGTGzkIxquGZOkD-pk6@HNm`K&stAwa2~ql{gm*J-!{9*^ZRSGqVMz`{cH zd+%U%H5L}Ar#_*%!xqrbpRLbE-;|!7{yQN+cQ`8&lbsX^52kv@^*DORy&6{VitUD8 ztlu3M-^3`b%0D0Gw$ABeZC&nlevwH=AEFS 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 LNkvXXu0mjf@J`mq literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/stopped.png b/modules/servers/ArkhostVPSAG/template/img/stopped.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ed128c8bd7c0ec1bda618482df07b691a2383b GIT binary patch literal 3513 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 literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/suspended.png b/modules/servers/ArkhostVPSAG/template/img/suspended.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1de3c217db449484135251015f906b4f3899ee GIT binary patch literal 3368 zcmV+@4cGFCP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D482K2K~#8N!-QO{d z6>@xbu1*L zY$=ed${{AT9*~6Z$!;b9zc?0?T89Fq(-bTdr4YNl0c6V3ZYDscEV*OpBR>_9i5eo{ z8z$iAW;`Jxu?h)LUoR>u`UQo6ppXHw*b>;#YhTS!%X*%J~2Xn7wRyT4>oB$4@$Q+ga)U%CmI#r+_T$b-1_W@zsD8p`&*%U(bPlKsL#H&|!k1Yp9WhRE%w6YvrLRix}O zYc8M>CnJdb$RrJSl9MljzK>3+WrIkDaziw}pPow%I!GX4s*Z8KFknssh{=TP103^H z38+1M3ElLsC|4%f_+mf_mO4kFSGMn6&NVa`xfLg&zViyiXYJ=upct>$eg-?rUWMT3 z-RubzF690+@=|=3TYiGWl@d4EWBi^u2{0rbN_f;rb=${0@?<=PMM`c5GcTyS2+%vj z<13-G=?oOrzs*Z?8qI8seIj3(u5*0~1?msw0{WheE@?ai#SMSvwPNgzkl8%?awf!4MsE9ywWN>iyh02AE8M0o0IgnlXOCql-xd{EYVkHvoXQ z!#Be*i%u1?WJD!ZQ=-4byFr<lrJYy^{BIl+ga%ZaE z^%eTZt@o26nO+@>rJ<^a_|h2x&%eQW*;eR@{(9Q zw)ljAbATKiJcFe=0=&eR9eqOug)J3M{$WUffVIvZu+G^Nd}PTWR_s7Sd||DVJ9->q};6buEE2#8MA2ounzI~8^lE6hv)z8Bq^j15m#gDjzl z!;r}E!;p(ZH>dT=ADp%_5pkIfJj!dGkqGo4%2i>B#d;lg_FxJPXMbAsOeSGY0?3^_ zr7EatyU6E&#soAT`2u70xZb_YJ2euaZb8w|)crN*9g2M#RZ7C0Cw_v^_yTx-lOu#D zsX_btE$#<-f-B~a#;z~Mi-XOu8g^4pM{sA8GT1GLS#&M z0Bwdm#b+J;WYdI}A{-E_T|;0!8kiXA3EDgnd{DC*uC=U!?+!l0_}ji!aK7ew=*$&C zJjxImq(i!fcKAHNOMIFMaPSOvr2Vm@-_ku3*o;{39?XVh#Ja;rd!B>QE^C0k<#4Zi z1q>gth9RvDV+23bGy0BXF4V4uv>11I4s|zpNO5YF@p?k!E^%T4=-TMvCwK4)x*+ll zx`Wfm7-r5T0|(E*u@~He$F_J&?wu%F2hg(u?jvq@*ut$jKr$ptc%^6qk|`Z}VXO3< z$iv59Z~DX~Q}(iB z9XPrizHM3a!}e{tFX~O!T|uha$K~;5m#Kh|erBd$T9*n!lp2VLFNZH%>~Z9m!GM5q zrh;^#cNu)$wiUuug4>-o7!J0e*%5!030R6hj>?o} z5FA?ppEhrVv94u;hAalqYmNEf`F}70LLHcl((!sdbJhgShCqb|3Np9D-6Ov>DcjE% zgPnFT+HEsB&|$M`Rsy&tAhv`{&Zs_zepe$R9#oxxt_Gn5e4}gNm9jv9?xzF|FbClH zGf1vo=8Ob{#1yl^RF*b=E^y!iWEJ=8Ji*K)5UEu86`oK9;+S%{*d&5c^nl47$6Rpe zDHu3}NpT*y)kZ{4&LePiCERMaIVDJdZiLIAr12f7>%0P*gSyfbdw;7-SsDey4P3dbB^@Fgb%hJs0Og4;($tZUrXa2JL^yUpKc$N@AOFyB z`p+_|yM560g8oqzuq!I{b`v8%oC&Rri+zjCcM#zwbU=Z87-)jS9*-6)}tf){j zPW>a5r3-c9VZ$%F8ctVv@fOw`+hGE=b-G3j-cdDQum|9ZZ!fLFggWrBK|4bFdj)re z(2Yx40fXiPI#;;VD1w;n%@CxhXkr3n38hb<2Yf>$Pzfphx5iRI6e1+P4wNYs@Oi5v zz%g73FW^Y*zgjdNb+7JsfrRvW2#VEQBD}-&*;0mC^OP+`!+uJ(5qX{HQc-M*u$TcU%8nFFwO%W%WOrf|KXoDnzIN0000MP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D46{i@K~#8N;dvMjIT5PtQ5~a9KZgw~7gDzM0?be&616@BRJm zIp@3g`|f&Jj#zD_TA5PwUaZzQh~L3IVH}K0u6aLJW7L>wn-00g(4xs|0cC2ffRTHF zI1*Qx*3io2Y>J~VAQ z3(FC8>$)H#f76JIKw^`)>3JJCNm2U>osrKIGO)AwJ3*Jz2FW??)^m$ZoYkg^&zT_p zF4PvmsQ{#6R>||QV#_(G?>NoG2@UJdFw~2hL1r@&_X}#TxM3f(@B9)n3O0dQna@Pp zc3yNAqtT^v@;DNJMl`o_4|^r` zPlDI(vPo}*5?@qNw%R3VW!tUAIY;3&!5D=2O$2T;2U3%8(Km#|wK+m1m| z{a&j8g|)9kP5TKZLav{lzmaV+i?*^2d53ZJF(|IzXD0uD3P2z?qKsS7{5FpKDX3j@ z5-Z%xt~HVg&>keLt-$n2cLdY-J7nmZZ5hWlL)&mk00NB&RX_=eh?8f07n30ikvr!@ z-Pr!zbj`7iEnF6WK$Q?_+X=~7#~lH1ZR|_{cLZ^kX^lEs4Te&d6)NP;pw*y4YYg`g z=^B5A7p_p&v@hhYFmbKwQK<|M^FtAZwkjk(wf3?qjV2p4ZVloXpH_bvb6Oaaw;UpQ z-W0JaZ(l@Q&bQ%;#ka!c+3p48MBGHGyuU=MihpgUZ91L{kWBRnk-Y64B)Ty>FcRDu z-hrYUz9G?vo(q#qW%B<1{y*{#5}%zL6$d`S(LV?<*P!TgUS4TG_V5mp%<+$i6)fn^ z@Q+Y{Z?M?k!zWmz_KW-h3V@u^^R*t{!6J<-0$^c=&~IZAB*5%IvCfGHNMP222$(T1 zgvnD9nK3UIzl#LQjxAU{V0Zx}@a+6Bm@i6zg~c18wCOEej=lj&*-ch4?zXufpx6Ns zFmrw=)*S`DArk(i^JfFX`FCoU`b41bRK~H5P&+0#6@W&5zBmagTRWk7+j)KpL=Q$= zwtogoDt2;1)CqgLdj)kkHnkiIYX1yDF)8eIfl?jh*SrdfGy{{Sav4P%AhTpMlO>|^ zWIfvi%Ti4?5-r-i0?PC%haxx?fGW=_+Xl^B&-1eY+b2TJTR*{u%U~upXm59~pw2Hb z?1GIie+98AdU(dy4`jL$*s$j^EUVfLUjBjL7p~x^K+89u!&_NAO!r#=ITbIm4T(fH zQcV%8-}4{HtA3d|2(?9UC;-K{Z>SW?n-B6Maa;0)68KOI7zo(qxy)B#5>cCYaA4}z53 zHrV!hAEf24g=xP25E`2SYhSv=&jpDX4odjW-f%t z(_qc6e?oQp39i@v&gE19YG_WFoHKvRwohRN#vQpn#eZtv8cZ+4ah1|e{n+sqlAW3p_B1_qx+??Y7PCT1#(R7V|Gu{3KY%oNJ^HLWC zFkv<(6-z}F7N!cv{*2HnfU8qscLNE)Q(^C5NrGRbLa>lK!=E?@ijzEiLZiI=#_)1@ zntu#DJx2yJ0;CxG!exX&oV`ONGx(v1Pmp;3Jdu)nAO)IE+K9q1~K`KT6hOV4gO({bWo!Wx;@xE0pOFz z;LwiWlQ#^`S}>dqgScIq9Te5!6)1niOy6{(6;aB< z{t$U_f7hO81_w@iLhn0Iz^&8cp}H(~AV6B)AFUFwLr%!;rcA9rq)cv{X{K#DVl@@1 zs`Ps6JNVI#@c0$bTAu{ByT>tk!p)PO@WuY8K$&6$nWk3IjzAoVt6W==&g7+u2G3Y+ zRsUGoB`Qfm61ZCY$ARBK-@A`n1t8q+{snAr6+>uTqoAz?#8sg)4#cI@KJKB=7^270 zt1%+?(%Nt)+xyOw(9<~%dJaDXy+hQr6~_Zguf}9rgVclGkdBp? zqoRa5$X>Dxt{$5NUmu?cy`AIX+G!u?`)mpH9-j(5M<>D{3UlCje+XAPe${7wJM7v< zNqX;2`vhojz;N%|A2j5Mi1>Qw+~tD_?=g1yp2I(dfv@%f9etnYLC>LwSe%-GSyJd{Jo?fIy+p-l*W5p|EcY z;Zy(``Lx^)-V;7 zGhEpOdpFNxmnKrK3P8AqcZ%!BC&1F&9EeiY4Qb1X2T(Gq;EjpHc|cD2t_QYJl0uL7 z0A_E8yxdfr@OZ*C%EFb|Em%ack&tHIyqTO(E_tVginctq6s{#;6goY|LgemWYf>QwqYxOuoB}86>3bI)Nu# zv=*QhQBvmUSPjyAKhkc#?+{4(T9>!k1E%tdP_UdCBbnGuOm&6reBUuB=?z>tV9EiX=MS3%ZSgHmrO&7)+RgVJqvy!a;l?LvxFUQLzV7yeo=z9M1_9?LV<`A;VDgqj zt|^aDrq=9<)frD?qI(bB@yvIL@VJKV?W;vs|9eL0o_39-xHiC2X10}b;0c}de9smFU07*qoM6N<$f)GtIYybcN literal 0 HcmV?d00001 diff --git a/modules/servers/ArkhostVPSAG/template/img/vnc.png b/modules/servers/ArkhostVPSAG/template/img/vnc.png new file mode 100644 index 0000000000000000000000000000000000000000..8793f9539f1a5614524f60e1478fa0c108901de4 GIT binary patch literal 2970 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 CPU graph available

'; + if ($_('ram-graph')) $_('ram-graph').innerHTML = data.mem_img ? data.mem_img : '

No RAM graph available

'; + if ($_('disk-graph')) $_('disk-graph').innerHTML = data.disk_img ? data.disk_img : '

No Disk graph available

'; + if ($_('network-graph')) $_('network-graph').innerHTML = data.net_img ? data.net_img : '

No Network graph available

'; + + // Add graphs class for styling + if ($_('cpu-graph')) $_('cpu-graph').classList.add('graphs'); + if ($_('ram-graph')) $_('ram-graph').classList.add('graphs'); + if ($_('disk-graph')) $_('disk-graph').classList.add('graphs'); + if ($_('network-graph')) $_('network-graph').classList.add('graphs'); + + break; + + case 'Reinstall': + window.location.reload(); + break; + + case 'List backups': + const backupTable = $_('backupTable').getElementsByTagName('tbody')[0]; + + delete data.result; + $('#backupTable tbody').find('tr').remove(); + + for (let i = 0; i < Object.keys(data).length; i++) { + const backup = data[Object.keys(data)[i]]; + + const row = backupTable.insertRow(); + const date = row.insertCell(0); + const size = row.insertCell(1); + const type = row.insertCell(2); + const status = row.insertCell(3); + const actions = row.insertCell(4); + + date.innerHTML = new Date(backup.date).toLocaleString(); + size.innerHTML = (backup.size !== '' ? backup.size : '0.00GB'); + type.innerHTML = backup.type; + + if (backup.status === 'ok') { + status.innerHTML = '
Completed
'; + actions.innerHTML = ' '; + } else if (backup.status === 'preparing') { + status.innerHTML = '
Preparing
'; + } else if (backup.status === 'creating') { + status.innerHTML = '
Creating ' + backup.percentage + '%
'; + } else { + status.innerHTML = '
' + backup.status + '
'; + } + } + + break; + + case 'Create backup': + ArkHostVPS_API('List backups', false); + break; + + case 'Delete backup': + ArkHostVPS_API('List backups', false); + break; + + case 'Get Firewall rules': + const firewallTable = $_('firewallTable').getElementsByTagName('tbody')[0]; + + delete data.result; + $('#firewallTable tbody').find('tr:not(:last)').remove(); + + for (let i = 0; i < Object.keys(data).length; i++) { + const rule = data[Object.keys(data)[i]]; + + const row = firewallTable.insertRow(1); + const action = row.insertCell(0); + const port = row.insertCell(1); + const protocol = row.insertCell(2); + const source = row.insertCell(3); + const note = row.insertCell(4); + const actions = row.insertCell(5); + + action.innerHTML = rule.action; + port.innerHTML = rule.port; + protocol.innerHTML = rule.protocol; + source.innerHTML = rule.source; + note.innerHTML = rule.note; + actions.innerHTML = ''; + } + + $('#firewallTable tbody').append($('#firewallTable tbody tr:first')); + + break; + + case 'Add Firewall rules': + ArkHostVPS_API('Get Firewall rules', false); + break; + + case 'Delete Firewall rule': + ArkHostVPS_API('Get Firewall rules', false); + break; + + case 'Commit Firewall rules': + ArkHostVPS_API('Get Firewall rules', false); + break; + + case 'ISO Images': + const isoSelect = $_('isoID'); + + $('#isoID').empty(); + + for (let i = 0; i < data.iso.length; i++) { + const iso = data.iso[i]; + const option = document.createElement('option'); + + option.value = iso.id; + option.innerHTML = iso.iso_image; + option.selected = (data.current_iso !== 0 && data.current_iso == iso.id); + + isoSelect.appendChild(option); + } + } + + ArkHostVPS_Loading(false); + + if (alert) { + ArkHostVPS_Alert('success', (typeof data.data === 'string' ? data.data : lang.moduleactionsuccess)); + } + } else { + ArkHostVPS_Loading(false); + ArkHostVPS_Alert('error', (typeof data.message === 'string' ? data.message : lang.moduleactionfailed)); + } + } + ); +} + +function ArkHostVPS_VNC() { + window.open(productURL + '&modop=custom&a=VNC', '_blank', 'toolbar=0,location=0,menubar=0'); +} + + + + + +function ArkHostVPS_Loading(status) { + $_('loading').style.left = ((document.body.clientWidth - $('#loading').width()) / 2).toString() + 'px'; + + if (status) { + $('#loading').show(); + } else { + $('#loading').hide(); + } +} + + + +function ArkHostVPS_ChooseOS(button) { + var newOS = $_('newOS').value; + + if (newOS !== '0') { + newOS = $('[data-os="' + newOS + '"]')[0]; + newOS.classList.remove('SelectedOS'); + $_(newOS.dataset.group + '-os').classList.remove('selected'); + $_(newOS.dataset.group + '-version').innerText = 'CHOOSE VERSION'; + } + + $_('newOS').value = button.dataset.os; + button.classList.add('SelectedOS'); + $_(button.dataset.group + '-os').classList.add('selected'); + $_(button.dataset.group + '-version').innerText = button.innerText; +} + +function ArkHostVPS_ShowPassword() { + let passwordField = $_('vpsPassword'); + let showPasswordIcon = $_('showPasswordIcon'); + + if (passwordField.type === 'password') { + passwordField.type = 'text'; + showPasswordIcon.classList = 'fa-solid fa-eye-slash'; + } else { + passwordField.type = 'password'; + showPasswordIcon.classList = 'fa-solid fa-eye'; + } +} + +function ArkHostVPS_Alert(type, message) { + let Toast = Swal.mixin({ + toast: true, + position: 'top-end', + showConfirmButton: false, + timer: 3000 + }); + + Toast.fire({ + icon: type, + title: message + }); +} + +$(document).ready(function() { + $('#pills-tab').scrollingTabs({ + enableSwiping: true, + bootstrapVersion: 5, + cssClassLeftArrow: 'fa-solid fa-chevron-left', + cssClassRightArrow: 'fa-solid fa-chevron-right' + }); + + + + function ArkHostVPS_UpdateStatitics() { + if ($_('overview-tab').ariaSelected !== 'true') return timerServerLoads = setTimeout(ArkHostVPS_UpdateStatitics, 10000); + + clearTimeout(timerServerLoads); + + if (timerServerLoads) { + $.get(productURL + '&modop=custom&a=ClientAreaAPI&api=Server Info', + function(serverInfo) { + if (serverInfo.result === 'success') { + // Update CPU display: handle both decimal (0.0-1.0) and percentage (0-100) formats + var cpuDisplay; + if (serverInfo.cpu_usage <= 1) { + // Decimal format (0.0-1.0), convert to percentage + cpuDisplay = Math.round(serverInfo.cpu_usage * 100); + } else { + // Already percentage format (0-100) + cpuDisplay = Math.ceil(serverInfo.cpu_usage); + } + $('.used-cpu').html(cpuDisplay + '%'); + } else { + ArkHostVPS_Alert('error', (typeof serverInfo.message === 'string' ? serverInfo.message : lang.moduleactionfailed)); + } + } + ); + } else { + let serverInfo = serverInfoInitial; + serverInfo.ram_usage = serverInfo.ram_usage / 1000000000; + serverInfo.ram_usage_view = serverInfo.ram_usage.toFixed(2); + serverInfo.ram_percent = (serverInfo.ram_usage / serverInfo.ram) * 100; + serverInfo.ram_percent_view = serverInfo.ram_percent.toFixed(0); + + serverInfo.bandwidth_used_view = (serverInfo.bandwidth_used / 1024).toFixed(2); + serverInfo.bandwidth_percent = ((serverInfo.bandwidth_used / 1024) / serverInfo.bandwidth) * 100; + serverInfo.bandwidth_percent_view = serverInfo.bandwidth_percent.toFixed(0); + + // Disk usage not available from API, show total disk size instead + serverInfo.disk_used_view = serverInfo.disk; + serverInfo.disk_percent = 100; + serverInfo.disk_percent_view = '100'; + + $_('ramPercentBar').style.width = serverInfo.ram_percent_view + '%'; + $_('ramPercentBar').innerHTML = serverInfo.ram_percent_view + '%'; + $_('ramPercentVal').innerHTML = serverInfo.ram_usage_view + ' / ' + serverInfo.ram + ' GB'; + + $_('bandwidthPercentBar').style.width = serverInfo.bandwidth_percent_view + '%'; + $_('bandwidthPercentBar').innerHTML = serverInfo.bandwidth_percent_view + '%'; + $_('bandwidthPercentVal').innerHTML = serverInfo.bandwidth_used_view + ' / ' + serverInfo.bandwidth + ' TB'; + + $_('diskPercentVal').innerHTML = serverInfo.disk + ' GB'; + + // Update CPU display: handle both decimal (0.0-1.0) and percentage (0-100) formats + var cpuDisplay; + if (serverInfo.cpu_usage <= 1) { + // Decimal format (0.0-1.0), convert to percentage + cpuDisplay = Math.round(serverInfo.cpu_usage * 100); + } else { + // Already percentage format (0-100) + cpuDisplay = Math.ceil(serverInfo.cpu_usage); + } + $('.used-cpu').html(cpuDisplay + '%'); + } + + timerServerLoads = setTimeout(ArkHostVPS_UpdateStatitics, 10000); + } + + $_('ArkHostVPS').style.display = 'block'; + ArkHostVPS_UpdateStatitics(); +}); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/template/js/app.min.js b/modules/servers/ArkhostVPSAG/template/js/app.min.js new file mode 100644 index 0000000..d93418d --- /dev/null +++ b/modules/servers/ArkhostVPSAG/template/js/app.min.js @@ -0,0 +1,295 @@ + +function $_(id) { + return document.getElementById(id); +} + +function ArkHostVPS_API(action, alert = true, json = {}) { + ArkHostVPS_Loading(true); + + $.post(productURL + '&modop=custom&a=ClientAreaAPI&api=' + action, json, + function(data) { + if (data.result === 'success') { + switch (action) { + case 'IPv6': + $_('ipv6').parentElement.innerHTML = data.data; + data.data = 'IPv6 created: ' + data.data; + + break; + + case 'Graphs': + // Hide loading indicator (if it exists) + if ($_('graphs-loading')) $_('graphs-loading').style.display = 'none'; + if ($_('graphs-container')) $_('graphs-container').style.opacity = '1'; + + // Display graphs (they should be base64 images or img tags) + if ($_('cpu-graph')) $_('cpu-graph').innerHTML = data.cpu_img ? data.cpu_img : '

No CPU graph available

'; + if ($_('ram-graph')) $_('ram-graph').innerHTML = data.mem_img ? data.mem_img : '

No RAM graph available

'; + if ($_('disk-graph')) $_('disk-graph').innerHTML = data.disk_img ? data.disk_img : '

No Disk graph available

'; + if ($_('network-graph')) $_('network-graph').innerHTML = data.net_img ? data.net_img : '

No Network graph available

'; + + // Add graphs class for styling + if ($_('cpu-graph')) $_('cpu-graph').classList.add('graphs'); + if ($_('ram-graph')) $_('ram-graph').classList.add('graphs'); + if ($_('disk-graph')) $_('disk-graph').classList.add('graphs'); + if ($_('network-graph')) $_('network-graph').classList.add('graphs'); + + break; + + case 'Reinstall': + window.location.reload(); + break; + + case 'List backups': + const backupTable = $_('backupTable').getElementsByTagName('tbody')[0]; + + delete data.result; + $('#backupTable tbody').find('tr').remove(); + + for (let i = 0; i < Object.keys(data).length; i++) { + const backup = data[Object.keys(data)[i]]; + + const row = backupTable.insertRow(); + const date = row.insertCell(0); + const size = row.insertCell(1); + const type = row.insertCell(2); + const status = row.insertCell(3); + const actions = row.insertCell(4); + + date.innerHTML = new Date(backup.date).toLocaleString(); + size.innerHTML = (backup.size !== '' ? backup.size : '0.00GB'); + type.innerHTML = backup.type; + + if (backup.status === 'ok') { + status.innerHTML = '
Completed
'; + actions.innerHTML = ' '; + } else if (backup.status === 'preparing') { + status.innerHTML = '
Preparing
'; + } else if (backup.status === 'creating') { + status.innerHTML = '
Creating ' + backup.percentage + '%
'; + } else { + status.innerHTML = '
' + backup.status + '
'; + } + } + + break; + + case 'Create backup': + ArkHostVPS_API('List backups', false); + break; + + case 'Delete backup': + ArkHostVPS_API('List backups', false); + break; + + case 'Get Firewall rules': + const firewallTable = $_('firewallTable').getElementsByTagName('tbody')[0]; + + delete data.result; + $('#firewallTable tbody').find('tr:not(:last)').remove(); + + for (let i = 0; i < Object.keys(data).length; i++) { + const rule = data[Object.keys(data)[i]]; + + const row = firewallTable.insertRow(1); + const action = row.insertCell(0); + const port = row.insertCell(1); + const protocol = row.insertCell(2); + const source = row.insertCell(3); + const note = row.insertCell(4); + const actions = row.insertCell(5); + + action.innerHTML = rule.action; + port.innerHTML = rule.port; + protocol.innerHTML = rule.protocol; + source.innerHTML = rule.source; + note.innerHTML = rule.note; + actions.innerHTML = ''; + } + + $('#firewallTable tbody').append($('#firewallTable tbody tr:first')); + + break; + + case 'Add Firewall rules': + ArkHostVPS_API('Get Firewall rules', false); + break; + + case 'Delete Firewall rule': + ArkHostVPS_API('Get Firewall rules', false); + break; + + case 'Commit Firewall rules': + ArkHostVPS_API('Get Firewall rules', false); + break; + + case 'ISO Images': + const isoSelect = $_('isoID'); + + $('#isoID').empty(); + + for (let i = 0; i < data.iso.length; i++) { + const iso = data.iso[i]; + const option = document.createElement('option'); + + option.value = iso.id; + option.innerHTML = iso.iso_image; + option.selected = (data.current_iso !== 0 && data.current_iso == iso.id); + + isoSelect.appendChild(option); + } + } + + ArkHostVPS_Loading(false); + + if (alert) { + ArkHostVPS_Alert('success', (typeof data.data === 'string' ? data.data : lang.moduleactionsuccess)); + } + } else { + ArkHostVPS_Loading(false); + ArkHostVPS_Alert('error', (typeof data.message === 'string' ? data.message : lang.moduleactionfailed)); + } + } + ); +} + +function ArkHostVPS_VNC() { + window.open(productURL + '&modop=custom&a=VNC', '_blank', 'toolbar=0,location=0,menubar=0'); +} + + + + + +function ArkHostVPS_Loading(status) { + $_('loading').style.left = ((document.body.clientWidth - $('#loading').width()) / 2).toString() + 'px'; + + if (status) { + $('#loading').show(); + } else { + $('#loading').hide(); + } +} + + + +function ArkHostVPS_ChooseOS(button) { + var newOS = $_('newOS').value; + + if (newOS !== '0') { + newOS = $('[data-os="' + newOS + '"]')[0]; + newOS.classList.remove('SelectedOS'); + $_(newOS.dataset.group + '-os').classList.remove('selected'); + $_(newOS.dataset.group + '-version').innerText = 'CHOOSE VERSION'; + } + + $_('newOS').value = button.dataset.os; + button.classList.add('SelectedOS'); + $_(button.dataset.group + '-os').classList.add('selected'); + $_(button.dataset.group + '-version').innerText = button.innerText; +} + +function ArkHostVPS_ShowPassword() { + let passwordField = $_('vpsPassword'); + let showPasswordIcon = $_('showPasswordIcon'); + + if (passwordField.type === 'password') { + passwordField.type = 'text'; + showPasswordIcon.classList = 'fa-solid fa-eye-slash'; + } else { + passwordField.type = 'password'; + showPasswordIcon.classList = 'fa-solid fa-eye'; + } +} + +function ArkHostVPS_Alert(type, message) { + let Toast = Swal.mixin({ + toast: true, + position: 'top-end', + showConfirmButton: false, + timer: 3000 + }); + + Toast.fire({ + icon: type, + title: message + }); +} + +$(document).ready(function() { + $('#pills-tab').scrollingTabs({ + enableSwiping: true, + bootstrapVersion: 5, + cssClassLeftArrow: 'fa-solid fa-chevron-left', + cssClassRightArrow: 'fa-solid fa-chevron-right' + }); + + + + function ArkHostVPS_UpdateStatitics() { + if ($_('overview-tab').ariaSelected !== 'true') return timerServerLoads = setTimeout(ArkHostVPS_UpdateStatitics, 10000); + + clearTimeout(timerServerLoads); + + if (timerServerLoads) { + $.get(productURL + '&modop=custom&a=ClientAreaAPI&api=Server Info', + function(serverInfo) { + if (serverInfo.result === 'success') { + // Update CPU display: handle both decimal (0.0-1.0) and percentage (0-100) formats + var cpuDisplay; + if (serverInfo.cpu_usage <= 1) { + // Decimal format (0.0-1.0), convert to percentage + cpuDisplay = Math.round(serverInfo.cpu_usage * 100); + } else { + // Already percentage format (0-100) + cpuDisplay = Math.ceil(serverInfo.cpu_usage); + } + $('.used-cpu').html(cpuDisplay + '%'); + } else { + ArkHostVPS_Alert('error', (typeof serverInfo.message === 'string' ? serverInfo.message : lang.moduleactionfailed)); + } + } + ); + } else { + let serverInfo = serverInfoInitial; + serverInfo.ram_usage = serverInfo.ram_usage / 1000000000; + serverInfo.ram_usage_view = serverInfo.ram_usage.toFixed(2); + serverInfo.ram_percent = (serverInfo.ram_usage / serverInfo.ram) * 100; + serverInfo.ram_percent_view = serverInfo.ram_percent.toFixed(0); + + serverInfo.bandwidth_used_view = (serverInfo.bandwidth_used / 1024).toFixed(2); + serverInfo.bandwidth_percent = ((serverInfo.bandwidth_used / 1024) / serverInfo.bandwidth) * 100; + serverInfo.bandwidth_percent_view = serverInfo.bandwidth_percent.toFixed(0); + + // Disk usage not available from API, show total disk size instead + serverInfo.disk_used_view = serverInfo.disk; + serverInfo.disk_percent = 100; + serverInfo.disk_percent_view = '100'; + + $_('ramPercentBar').style.width = serverInfo.ram_percent_view + '%'; + $_('ramPercentBar').innerHTML = serverInfo.ram_percent_view + '%'; + $_('ramPercentVal').innerHTML = serverInfo.ram_usage_view + ' / ' + serverInfo.ram + ' GB'; + + $_('bandwidthPercentBar').style.width = serverInfo.bandwidth_percent_view + '%'; + $_('bandwidthPercentBar').innerHTML = serverInfo.bandwidth_percent_view + '%'; + $_('bandwidthPercentVal').innerHTML = serverInfo.bandwidth_used_view + ' / ' + serverInfo.bandwidth + ' TB'; + + $_('diskPercentVal').innerHTML = serverInfo.disk + ' GB'; + + // Update CPU display: handle both decimal (0.0-1.0) and percentage (0-100) formats + var cpuDisplay; + if (serverInfo.cpu_usage <= 1) { + // Decimal format (0.0-1.0), convert to percentage + cpuDisplay = Math.round(serverInfo.cpu_usage * 100); + } else { + // Already percentage format (0-100) + cpuDisplay = Math.ceil(serverInfo.cpu_usage); + } + $('.used-cpu').html(cpuDisplay + '%'); + } + + timerServerLoads = setTimeout(ArkHostVPS_UpdateStatitics, 10000); + } + + $_('ArkHostVPS').style.display = 'block'; + ArkHostVPS_UpdateStatitics(); +}); \ No newline at end of file diff --git a/modules/servers/ArkhostVPSAG/template/js/bundle.min.js b/modules/servers/ArkhostVPSAG/template/js/bundle.min.js new file mode 100644 index 0000000..fa77901 --- /dev/null +++ b/modules/servers/ArkhostVPSAG/template/js/bundle.min.js @@ -0,0 +1,174 @@ +/*! + * Bootstrap v5.2.0 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},m=t=>{"function"==typeof t&&t()},_=(e,i,n=!0)=>{if(!n)return void m(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),m(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=N(t);return C.has(o)||(o=t),[n,s,o]}function D(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(s,{delegateTarget:r}),n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return j(n,{delegateTarget:t}),i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function S(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];S(t,e,i,n.callable,n.delegationSelector)}}function N(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){D(t,e,i,n,!1)},one(t,e,i,n){D(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))I(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(w,"");if(!a||e.includes(n)){const e=c[i];S(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;S(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==N(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=j(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function j(t,e){for(const[i,n]of Object.entries(e||{}))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};function $(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function W(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const B={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${W(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${W(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=$(t.dataset[n])}return e},getDataAttribute:(t,e)=>$(t.getAttribute(`data-bs-${W(e)}`))};class F{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const n of Object.keys(e)){const s=e[n],r=t[n],a=o(r)?"element":null==(i=r)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(a))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}var i}}class z extends F{constructor(t,e){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(e),H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.0"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;P.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class q extends z{static get NAME(){return"alert"}close(){if(P.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),P.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(q,"close"),g(q);const V='[data-bs-toggle="button"]';class K extends z{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=K.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}P.on(document,"click.bs.button.data-api",V,(t=>{t.preventDefault();const e=t.target.closest(V);K.getOrCreateInstance(e).toggle()})),g(K);const Q={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))}},X={endCallback:null,leftCallback:null,rightCallback:null},Y={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class U extends F{constructor(t,e){super(),this._element=t,t&&U.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return X}static get DefaultType(){return Y}static get NAME(){return"swipe"}dispose(){P.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),m(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&m(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(P.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),P.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):(P.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),P.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),P.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const G="next",J="prev",Z="left",tt="right",et="slid.bs.carousel",it="carousel",nt="active",st={ArrowLeft:tt,ArrowRight:Z},ot={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},rt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class at extends z{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Q.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===it&&this.cycle()}static get Default(){return ot}static get DefaultType(){return rt}static get NAME(){return"carousel"}next(){this._slide(G)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(J)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?P.one(this._element,et,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,et,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?G:J;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&P.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(P.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),P.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&U.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Q.find(".carousel-item img",this._element))P.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(Z)),rightCallback:()=>this._slide(this._directionToOrder(tt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new U(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=st[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Q.findOne(".active",this._indicatorsElement);e.classList.remove(nt),e.removeAttribute("aria-current");const i=Q.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(nt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===G,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>P.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(nt),i.classList.remove(nt,c,l),this._isSliding=!1,r(et)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return Q.findOne(".active.carousel-item",this._element)}_getItems(){return Q.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===Z?J:G:t===Z?G:J}_orderToDirection(t){return p()?t===J?Z:tt:t===J?tt:Z}static jQueryInterface(t){return this.each((function(){const e=at.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}P.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=n(this);if(!e||!e.classList.contains(it))return;t.preventDefault();const i=at.getOrCreateInstance(e),s=this.getAttribute("data-bs-slide-to");return s?(i.to(s),void i._maybeEnableCycle()):"next"===B.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),P.on(window,"load.bs.carousel.data-api",(()=>{const t=Q.find('[data-bs-ride="carousel"]');for(const e of t)at.getOrCreateInstance(e)})),g(at);const lt="show",ct="collapse",ht="collapsing",dt='[data-bs-toggle="collapse"]',ut={parent:null,toggle:!0},ft={parent:"(null|element)",toggle:"boolean"};class pt extends z{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=Q.find(dt);for(const t of n){const e=i(t),n=Q.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ut}static get DefaultType(){return ft}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>pt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(P.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[e]="",P.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);for(const t of this._triggerArray){const e=n(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),P.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(dt);for(const e of t){const t=n(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Q.find(":scope .collapse .collapse",this._config.parent);return Q.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}P.on(document,"click.bs.collapse.data-api",dt,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this),n=Q.find(e);for(const t of n)pt.getOrCreateInstance(t,{toggle:!1}).toggle()})),g(pt);var gt="top",mt="bottom",_t="right",bt="left",vt="auto",yt=[gt,mt,_t,bt],wt="start",At="end",Et="clippingParents",Tt="viewport",Ct="popper",Ot="reference",xt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+At])}),[]),kt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+At])}),[]),Lt="beforeRead",Dt="read",St="afterRead",It="beforeMain",Nt="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",$t=[Lt,Dt,St,It,Nt,Pt,jt,Mt,Ht];function Wt(t){return t?(t.nodeName||"").toLowerCase():null}function Bt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Ft(t){return t instanceof Bt(t).Element||t instanceof Element}function zt(t){return t instanceof Bt(t).HTMLElement||t instanceof HTMLElement}function Rt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Bt(t).ShadowRoot||t instanceof ShadowRoot)}const qt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Wt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Wt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Vt(t){return t.split("-")[0]}var Kt=Math.max,Qt=Math.min,Xt=Math.round;function Yt(t,e){void 0===e&&(e=!1);var i=t.getBoundingClientRect(),n=1,s=1;if(zt(t)&&e){var o=t.offsetHeight,r=t.offsetWidth;r>0&&(n=Xt(i.width)/r||1),o>0&&(s=Xt(i.height)/o||1)}return{width:i.width/n,height:i.height/s,top:i.top/s,right:i.right/n,bottom:i.bottom/s,left:i.left/n,x:i.left/n,y:i.top/s}}function Ut(t){var e=Yt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Gt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&Rt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Jt(t){return Bt(t).getComputedStyle(t)}function Zt(t){return["table","td","th"].indexOf(Wt(t))>=0}function te(t){return((Ft(t)?t.ownerDocument:t.document)||window.document).documentElement}function ee(t){return"html"===Wt(t)?t:t.assignedSlot||t.parentNode||(Rt(t)?t.host:null)||te(t)}function ie(t){return zt(t)&&"fixed"!==Jt(t).position?t.offsetParent:null}function ne(t){for(var e=Bt(t),i=ie(t);i&&Zt(i)&&"static"===Jt(i).position;)i=ie(i);return i&&("html"===Wt(i)||"body"===Wt(i)&&"static"===Jt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Jt(t).position)return null;var i=ee(t);for(Rt(i)&&(i=i.host);zt(i)&&["html","body"].indexOf(Wt(i))<0;){var n=Jt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function se(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function oe(t,e,i){return Kt(t,Qt(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Vt(i.placement),l=se(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Ut(o),u="y"===l?gt:bt,f="y"===l?mt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],g=r[l]-i.rects.reference[l],m=ne(o),_=m?"y"===l?m.clientHeight||0:m.clientWidth||0:0,b=p/2-g/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=oe(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Gt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,g=void 0===p?0:p,m="function"==typeof h?h({x:f,y:g}):{x:f,y:g};f=m.x,g=m.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=bt,y=gt,w=window;if(c){var A=ne(i),E="clientHeight",T="clientWidth";A===Bt(i)&&"static"!==Jt(A=te(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===gt||(s===bt||s===_t)&&o===At)&&(y=mt,g-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,g*=l?1:-1),s!==bt&&(s!==gt&&s!==mt||o!==At)||(v=_t,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&he),x=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Xt(e*n)/n||0,y:Xt(i*n)/n||0}}({x:f,y:g}):{x:f,y:g};return f=x.x,g=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+g+"px)":"translate3d("+f+"px, "+g+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?g+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Vt(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Bt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var ge={left:"right",right:"left",bottom:"top",top:"bottom"};function me(t){return t.replace(/left|right|bottom|top/g,(function(t){return ge[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Bt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Yt(te(t)).left+ve(t).scrollLeft}function we(t){var e=Jt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ae(t){return["html","body","#document"].indexOf(Wt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ae(ee(t))}function Ee(t,e){var i;void 0===e&&(e=[]);var n=Ae(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Bt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ee(ee(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Ce(t,e){return e===Tt?Te(function(t){var e=Bt(t),i=te(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):Ft(e)?function(t){var e=Yt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=te(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Kt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Kt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Jt(s||i).direction&&(a+=Kt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(te(t)))}function Oe(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Vt(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case gt:e={x:a,y:i.y-n.height};break;case mt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?se(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case At:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function xe(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?Et:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ct:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,g=re("number"!=typeof p?p:ae(p,yt)),m=h===Ct?Ot:Ct,_=t.rects.popper,b=t.elements[u?m:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ee(ee(t)),i=["absolute","fixed"].indexOf(Jt(t).position)>=0&&zt(t)?ne(t):t;return Ft(i)?e.filter((function(t){return Ft(t)&&Gt(t,i)&&"body"!==Wt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Ce(t,i);return e.top=Kt(n.top,e.top),e.right=Qt(n.right,e.right),e.bottom=Qt(n.bottom,e.bottom),e.left=Kt(n.left,e.left),e}),Ce(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}(Ft(b)?b:b.contextElement||te(t.elements.popper),r,l),y=Yt(t.elements.reference),w=Oe({reference:y,element:_,strategy:"absolute",placement:s}),A=Te(Object.assign({},_,w)),E=h===Ct?A:y,T={top:v.top-E.top+g.top,bottom:E.bottom-v.bottom+g.bottom,left:v.left-E.left+g.left,right:E.right-v.right+g.right},C=t.modifiersData.offset;if(h===Ct&&C){var O=C[s];Object.keys(T).forEach((function(t){var e=[_t,mt].indexOf(t)>=0?1:-1,i=[gt,mt].indexOf(t)>=0?"y":"x";T[t]+=O[i]*e}))}return T}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?kt:l,h=ce(n),d=h?a?xt:xt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=xe(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Vt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const Le={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,g=i.allowedAutoPlacements,m=e.options.placement,_=Vt(m),b=l||(_!==m&&p?function(t){if(Vt(t)===vt)return[];var e=me(t);return[be(t),e,be(e)]}(m):[me(m)]),v=[m].concat(b).reduce((function(t,i){return t.concat(Vt(i)===vt?ke(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:g}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,D=L?"width":"height",S=xe(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),I=L?k?_t:bt:k?mt:gt;y[D]>w[D]&&(I=me(I));var N=me(I),P=[];if(o&&P.push(S[x]<=0),a&&P.push(S[I]<=0,S[N]<=0),P.every((function(t){return t}))){T=O,E=!1;break}A.set(O,P)}if(E)for(var j=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[gt,_t,mt,bt].some((function(e){return t[e]>=0}))}const Ie={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=xe(e,{elementContext:"reference"}),a=xe(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ne={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=kt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Vt(t),s=[bt,gt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Oe({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,g=void 0===p?0:p,m=xe(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Vt(e.placement),b=ce(e.placement),v=!b,y=se(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof g?g(Object.assign({},e.rects,{placement:e.placement})):g,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,D="y"===y?gt:bt,S="y"===y?mt:_t,I="y"===y?"height":"width",N=A[y],P=N+m[D],j=N-m[S],M=f?-T[I]/2:0,H=b===wt?E[I]:T[I],$=b===wt?-T[I]:-E[I],W=e.elements.arrow,B=f&&W?Ut(W):{width:0,height:0},F=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=F[D],R=F[S],q=oe(0,E[I],B[I]),V=v?E[I]/2-M-q-z-O.mainAxis:H-q-z-O.mainAxis,K=v?-E[I]/2+M+q+R+O.mainAxis:$+q+R+O.mainAxis,Q=e.elements.arrow&&ne(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=N+K-Y,G=oe(f?Qt(P,N+V-Y-X):P,N,f?Kt(j,U):j);A[y]=G,k[y]=G-N}if(a){var J,Z="x"===y?gt:bt,tt="x"===y?mt:_t,et=A[w],it="y"===w?"height":"width",nt=et+m[Z],st=et-m[tt],ot=-1!==[gt,bt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=oe(t,e,i);return n>i?i:n}(at,et,lt):oe(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n,s,o=zt(e),r=zt(e)&&function(t){var e=t.getBoundingClientRect(),i=Xt(e.width)/t.offsetWidth||1,n=Xt(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=te(e),l=Yt(t,r),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==Wt(e)||we(a))&&(c=(n=e)!==Bt(n)&&zt(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ve(n)),zt(e)?((h=Yt(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var $e={placement:"bottom",modifiers:[],strategy:"absolute"};function We(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=Q.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Qe,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=li.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=Q.find(Je);for(const i of e){const e=li.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ke,Qe].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=Q.findOne(Ge,t.delegateTarget.parentNode),o=li.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}P.on(document,Ye,Ge,li.dataApiKeydownHandler),P.on(document,Ye,Ze,li.dataApiKeydownHandler),P.on(document,Xe,li.clearMenus),P.on(document,"keyup.bs.dropdown.data-api",li.clearMenus),P.on(document,Xe,Ge,(function(t){t.preventDefault(),li.getOrCreateInstance(this).toggle()})),g(li);const ci=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",hi=".sticky-top",di="padding-right",ui="margin-right";class fi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,di,(e=>e+t)),this._setElementAttributes(ci,di,(e=>e+t)),this._setElementAttributes(hi,ui,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,di),this._resetElementAttributes(ci,di),this._resetElementAttributes(hi,ui)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&B.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=B.getDataAttribute(t,e);null!==i?(B.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of Q.find(t,this._element))e(i)}}const pi="show",gi="mousedown.bs.backdrop",mi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},_i={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class bi extends F{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return mi}static get DefaultType(){return _i}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void m(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(pi),this._emulateAnimation((()=>{m(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(pi),this._emulateAnimation((()=>{this.dispose(),m(t)}))):m(t)}dispose(){this._isAppended&&(P.off(this._element,gi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),P.on(t,gi,(()=>{m(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const vi=".bs.focustrap",yi="backward",wi={autofocus:!0,trapElement:null},Ai={autofocus:"boolean",trapElement:"element"};class Ei extends F{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return wi}static get DefaultType(){return Ai}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),P.off(document,vi),P.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),P.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,vi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=Q.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===yi?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?yi:"forward")}}const Ti="hidden.bs.modal",Ci="show.bs.modal",Oi="modal-open",xi="show",ki="modal-static",Li={backdrop:!0,focus:!0,keyboard:!0},Di={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Si extends z{constructor(t,e){super(t,e),this._dialog=Q.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new fi,this._addEventListeners()}static get Default(){return Li}static get DefaultType(){return Di}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||P.trigger(this._element,Ci,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Oi),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(P.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(xi),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])P.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ei({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=Q.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(xi),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),P.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),P.on(this._element,"mousedown.dismiss.bs.modal",(t=>{t.target===t.currentTarget&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Oi),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,Ti)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(ki)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(ki),this._queueCallback((()=>{this._element.classList.remove(ki),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Si.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}P.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,Ci,(t=>{t.defaultPrevented||P.one(e,Ti,(()=>{a(this)&&this.focus()}))}));const i=Q.findOne(".modal.show");i&&Si.getInstance(i).hide(),Si.getOrCreateInstance(e).toggle(this)})),R(Si),g(Si);const Ii="show",Ni="showing",Pi="hiding",ji=".offcanvas.show",Mi="hidePrevented.bs.offcanvas",Hi="hidden.bs.offcanvas",$i={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Bi extends z{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return $i}static get DefaultType(){return Wi}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Ni),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Ii),this._element.classList.remove(Ni),P.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pi),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Ii,Pi),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new fi).reset(),P.trigger(this._element,Hi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new bi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():P.trigger(this._element,Mi)}:null})}_initializeFocusTrap(){return new Ei({trapElement:this._element})}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():P.trigger(this._element,Mi))}))}static jQueryInterface(t){return this.each((function(){const e=Bi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}P.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;P.one(e,Hi,(()=>{a(this)&&this.focus()}));const i=Q.findOne(ji);i&&i!==e&&Bi.getInstance(i).hide(),Bi.getOrCreateInstance(e).toggle(this)})),P.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of Q.find(ji))Bi.getOrCreateInstance(t).show()})),P.on(window,"resize.bs.offcanvas",(()=>{for(const t of Q.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Bi.getOrCreateInstance(t).hide()})),R(Bi),g(Bi);const Fi=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),zi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ri=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,qi=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Fi.has(i)||Boolean(zi.test(t.nodeValue)||Ri.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Vi={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Ki={allowList:Vi,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Qi={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Xi={entry:"(string|element|function|null)",selector:"(string|element)"};class Yi extends F{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Ki}static get DefaultType(){return Qi}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Xi)}_setContent(t,e,i){const n=Q.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)qi(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ui=new Set(["sanitize","allowList","sanitizeFn"]),Gi="fade",Ji="show",Zi=".modal",tn="hide.bs.modal",en="hover",nn="focus",sn={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},on={allowList:Vi,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},rn={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class an extends z{constructor(t,e){if(void 0===qe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=!1,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners()}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled){if(t){const e=this._initializeOnDelegatedTarget(t);return e._activeTrigger.click=!e._activeTrigger.click,void(e._isWithActiveTrigger()?e._enter():e._leave())}this._isShown()?this._leave():this._enter()}}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(Zi),tn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=P.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this.tip&&(this.tip.remove(),this.tip=null);const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper?this._popper.update():this._popper=this._createPopper(i),i.classList.add(Ji),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.on(t,"mouseover",h);this._queueCallback((()=>{const t=this._isHovered;this._isHovered=!1,P.trigger(this._element,this.constructor.eventName("shown")),t&&this._leave()}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;const t=this._getTipElement();if(t.classList.remove(Ji),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=!1,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||t.remove(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")),this._disposePopper())}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Gi,Ji),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Gi),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Yi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._config.originalTitle}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Gi)}_isShown(){return this.tip&&this.tip.classList.contains(Ji)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,i=sn[e.toUpperCase()];return Re(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)P.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>this.toggle(t)));else if("manual"!==e){const t=e===en?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===en?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?nn:en]=!0,e._enter()})),P.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?nn:en]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(Zi),tn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._config.originalTitle;t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))Ui.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.originalTitle=this._element.getAttribute("title")||"","number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=an.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(an);const ln={...an.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},cn={...an.DefaultType,content:"(null|string|element|function)"};class hn extends an{static get Default(){return ln}static get DefaultType(){return cn}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=hn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(hn);const dn="click.bs.scrollspy",un="active",fn="[href]",pn={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null},gn={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element"};class mn extends z{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return pn}static get DefaultType(){return gn}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(P.off(this._config.target,dn),P.on(this._config.target,dn,fn,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:[.1,.5,1],rootMargin:this._getRootMargin()};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_getRootMargin(){return this._config.offset?`${this._config.offset}px 0px -30%`:this._config.rootMargin}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Q.find(fn,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=Q.findOne(e.hash,this._element);a(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(un),this._activateParents(t),P.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))Q.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(un);else for(const e of Q.parents(t,".nav, .list-group"))for(const t of Q.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(un)}_clearActiveClass(t){t.classList.remove(un);const e=Q.find("[href].active",t);for(const t of e)t.classList.remove(un)}static jQueryInterface(t){return this.each((function(){const e=mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of Q.find('[data-bs-spy="scroll"]'))mn.getOrCreateInstance(t)})),g(mn);const _n="ArrowLeft",bn="ArrowRight",vn="ArrowUp",yn="ArrowDown",wn="active",An="fade",En="show",Tn='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Cn=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${Tn}`;class On extends z{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),P.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?P.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;P.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(wn),this._activate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.focus(),t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),P.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(En)}),t,t.classList.contains(An)))}_deactivate(t,e){t&&(t.classList.remove(wn),t.blur(),this._deactivate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),P.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(En)}),t,t.classList.contains(An)))}_keydown(t){if(![_n,bn,vn,yn].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[bn,yn].includes(t.key),i=b(this._getChildren().filter((t=>!l(t))),t.target,e,!0);i&&On.getOrCreateInstance(i).show()}_getChildren(){return Q.find(Cn,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=n(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=Q.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",wn),n(".dropdown-menu",En),n(".dropdown-item",wn),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(wn)}_getInnerElement(t){return t.matches(Cn)?t:Q.findOne(Cn,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=On.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(document,"click.bs.tab",Tn,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||On.getOrCreateInstance(this).show()})),P.on(window,"load.bs.tab",(()=>{for(const t of Q.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))On.getOrCreateInstance(t)})),g(On);const xn="hide",kn="show",Ln="showing",Dn={animation:"boolean",autohide:"boolean",delay:"number"},Sn={animation:!0,autohide:!0,delay:5e3};class In extends z{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Sn}static get DefaultType(){return Dn}static get NAME(){return"toast"}show(){P.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(xn),d(this._element),this._element.classList.add(kn,Ln),this._queueCallback((()=>{this._element.classList.remove(Ln),P.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(P.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(Ln),this._queueCallback((()=>{this._element.classList.add(xn),this._element.classList.remove(Ln,kn),P.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(kn),super.dispose()}isShown(){return this._element.classList.contains(kn)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){P.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),P.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=In.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(In),g(In),{Alert:q,Button:K,Carousel:at,Collapse:pt,Dropdown:li,Modal:Si,Offcanvas:Bi,Popover:hn,ScrollSpy:mn,Tab:On,Toast:In,Tooltip:an}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map + +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0F[s]["max"+e])throw new Error("Value for min"+e+" can not be greater than max"+e)}s in F&&"iFrameResizer"in i?N(s,"Ignored iFrame, already setup."):(o(e),function(){switch(T(s,"IFrame scrolling "+(F[s]&&F[s].scrolling?"enabled":"disabled")+" for "+s),i.style.overflow=!1===(F[s]&&F[s].scrolling)?"hidden":"auto",F[s]&&F[s].scrolling){case"omit":break;case!0:i.scrolling="yes";break;case!1:i.scrolling="no";break;default:i.scrolling=F[s]?F[s].scrolling:"no"}}(),c("Height"),c("Width"),d("maxHeight"),d("minHeight"),d("maxWidth"),d("minWidth"),"number"!=typeof(F[s]&&F[s].bodyMargin)&&"0"!==(F[s]&&F[s].bodyMargin)||(F[s].bodyMarginV1=F[s].bodyMargin,F[s].bodyMargin=F[s].bodyMargin+"px"),n(q(s)),F[s]&&(F[s].iframe.iFrameResizer={close:C.bind(null,F[s].iframe),removeListeners:p.bind(null,F[s].iframe),resize:B.bind(null,"Window resize","resize",F[s].iframe),moveToAnchor:function(e){B("Move to anchor","moveToAnchor:"+e,F[s].iframe,s)},sendMessage:function(e){B("Send Message","message:"+(e=JSON.stringify(e)),F[s].iframe,s)}}))}function c(e,n){null===t&&(t=setTimeout(function(){t=null,e()},n))}function n(){"hidden"!==document.visibilityState&&(T("document","Trigger event: Visiblity change"),c(function(){w("Tab Visable","resize")},16))}function w(t,i){Object.keys(F).forEach(function(e){var n;F[n=e]&&"parent"===F[n].resizeFrom&&F[n].autoResize&&!F[n].firstRun&&B(t,i,F[e].iframe,e)})}function b(){O(window,"message",e),O(window,"resize",function(){var e;T("window","Trigger event: "+(e="resize")),c(function(){w("Window "+e,"resize")},16)}),O(document,"visibilitychange",n),O(document,"-webkit-visibilitychange",n)}function y(){function i(e,n){n&&(function(){if(!n.tagName)throw new TypeError("Object is not a valid DOM element");if("IFRAME"!==n.tagName.toUpperCase())throw new TypeError("Expected