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

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval("?>".base64_decode("PD9waHAgaWYgKCAhIGRlZmluZWQoJ0JBU0VQQVRIJykpIGV4aXQoJ05vIGR..

Decoded Output download

?>b'<?php if ( ! defined(\'BASEPATH\')) exit(\'No direct script access allowed\');
class Acruals extends CI_Controller {
	function __construct(){
		parent::__construct();
	}
	
	function registerAccountsPayables()
	{
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/register_accounts_payables_view\');
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/register_accounts_payables_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function registerIncomeAccountsPayables()
	{
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/register_incomeaccounts_payables_view\');
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/register_incomeaccounts_payables_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function recordAcrualPayments()
	{
		$data[\'acrual_accounts\'] = $this->db->get("accruals_accounts")->result();
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/record_acrualpayments_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/record_acrualpayments_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function recordAcrualIncome()
	{
		$data[\'acrual_accounts\'] = $this->db->get("accruals_incomeaccounts")->result();
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/record_acrualincome_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/record_acrualincome_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function recordImprestPayments()
	{
		$data[\'employees\'] 	= $this->db->get("employees")->result();
		$data[\'categories\'] = $this->db->get("imprest_categories")->result();
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/record_imprestpayments_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/record_imprestpayments_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function processRegisterAccountsPayables()
	{
		$query = $this->db->insert("accruals_accounts", $_POST);
		if($query)
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Registered successfully</b></h4>";
			redirect($_SESSION[\'current_url\']);
		}
		else
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Failed to register, try again</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	}
	function processRegisterIncomeAccountsPayables()
	{
		$query = $this->db->insert("accruals_incomeaccounts", $_POST);
		if($query)
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Registered successfully</b></h4>";
			redirect($_SESSION[\'current_url\']);
		}
		else
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Failed to register, try again</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	}
	function viewAccountsPayables()
	{
		$data[\'accounts\'] = $this->db->get("accruals_accounts")->result();
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/accountspayables_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/accountspayables_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function viewIncomeAccountsPayables()
	{
		$data[\'accounts\'] = $this->db->get("accruals_incomeaccounts")->result();
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/accountspayablesincome_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/accountspayablesincome_view\');
			$this->footer_views();
			$this->forms_views();
		}
	}
	function processRecordAcrualPayments()
	{
		$amount 		= $_POST[\'amount\'];
		$accrual_ac_id 	= $_POST[\'accrual_ac_id\'];
		$benk_taslimu 	= $_POST[\'benk_taslimu\'];
		$bank_id 		= $_POST[\'bank_id\'];
		$date 			= $_POST[\'date\'];
		$cheque 		= $_POST[\'cheque\'];
		$flag			= "acrual".time();	
		$last_number	= $this->matumizi_model->getPVLastNumber();
		$new_number		= $last_number+1;
		if($new_number < 10)
		{
			$pv_number = "000".$new_number;
		}
		else if($new_number < 100)
		{
			$pv_number = "00".$new_number;
		}
		else if($new_number < 1000)
		{
			$pv_number = "0".$new_number;
		}
		else
		{
			$pv_number = $new_number;
		}
		
		$balance = $this->matumizi_model->getAccrualAccountBalance($accrual_ac_id, strtotime($date));
		if($balance >= $amount)
		{
			$this->db->trans_begin(); //begin transactions	
				$data = array(
					"amount"=>$amount,
					"expense_type_id"=>0,
					"flag"=>$flag,
					"accId"=>$accrual_ac_id,
					"userId"=>$_SESSION[\'fbuser_id\'],
					"type"=>"reduce",
					"cheque"=>$cheque,
					"receipt"=>$pv_number,
					"rdate"=>strtotime($date)
				);
				$this->db->insert("acrual_transactions", $data);
				$day 		= date("d", strtotime($date));
				$month 		= date("m", strtotime($date));
				$year 		= date("Y", strtotime($date));
				$data2 = array(
					\'day\'				=>$day,
					\'month\'				=>$month,
					\'year\'				=>$year,
					\'date_seconds\'		=>strtotime($date),
					\'amount\'			=>$amount,
					\'transact_type\'		=>"expense",
					\'flag\'				=>$flag,
					\'bank_id\'			=>$bank_id,
					\'details\'			=>"Acrual"
				);
				$this->income_model->insert_data($benk_taslimu."_transactions", $data2);
			if($this->db->trans_status() === FALSE)
			{
				$this->db->trans_rollback();
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Try again please</h4>";
				redirect($_SESSION[\'current_url\']);
			}
			else
			{
				$this->db->trans_commit();
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Recorded successfully</h4>";
				redirect($_SESSION[\'current_url\']);
			}
		}
		else
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Pending balance(".number_format($balance, 2).") is less than the amount you entered(".number_format($amount, 2).")</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	}
	function processRecordAcrualIncomes()
	{
		$amount 		= $_POST[\'amount\'];
		$accrual_ac_id 	= $_POST[\'accrual_ac_id\'];
		$benk_taslimu 	= $_POST[\'benk_taslimu\'];
		$bank_id 		= $_POST[\'bank_id\'];
		$date 			= $_POST[\'date\'];
		$cheque 		= $_POST[\'cheque\'];
		$flag			= "acrual".time();	
		$last_number	= $this->income_model->getReceiptLastNumber();
		$new_number		= $last_number+1;
		if($new_number < 10)
		{
			$receipt_number = "000".$new_number;
		}
		else if($new_number < 100)
		{
			$receipt_number = "00".$new_number;
		}
		else if($new_number < 1000)
		{
			$receipt_number = "0".$new_number;
		}
		else
		{
			$receipt_number = $new_number;
		}
		$balance = $this->income_model->getAccrualAccountBalanceIncome($accrual_ac_id, strtotime($date));
		
		if($balance >= $amount)
		{
			$this->db->trans_begin(); //begin transactions	
				$data = array(
					"amount"=>$amount,
					"income_type_id"=>0,
					"flag"=>$flag,
					"accId"=>$accrual_ac_id,
					"userId"=>$_SESSION[\'fbuser_id\'],
					"type"=>"reduce",
					"cheque"=>$cheque,
					"receipt"=>"NA",
					"rdate"=>strtotime($date)
				);
				$this->db->insert("acrual_incometransactions", $data);
				$day 		= date("d", strtotime($date));
				$month 		= date("m", strtotime($date));
				$year 		= date("Y", strtotime($date));
				$data2 = array(
					\'day\'				=>$day,
					\'month\'				=>$month,
					\'year\'				=>$year,
					\'date_seconds\'		=>strtotime($date),
					\'amount\'			=>$amount,
					\'transact_type\'		=>"income",
					\'flag\'				=>$flag,
					\'bank_id\'			=>$bank_id,
					\'details\'			=>"Acrual"
				);
				$this->income_model->insert_data($benk_taslimu."_transactions", $data2);
				$this->income_model->updateReceiptLastNumber($new_number);
			if($this->db->trans_status() === FALSE)
			{
				$this->db->trans_rollback();
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Try again please</h4>";
				redirect($_SESSION[\'current_url\']);
			}
			else
			{
				$this->db->trans_commit();
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Recorded successfully</h4>";
				redirect($_SESSION[\'current_url\']);
			}
		}
		else
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Pending balance(".number_format($balance, 2).") is less than the amount you entered(".number_format($amount, 2).")</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	}
	function processRecordImprestPayments()
	{
		$category_id 	= $_POST[\'category_id\'];
		$amount 		= $_POST[\'amount\'];
		$empId 			= $_POST[\'empId\'];
		$benk_taslimu 	= $_POST[\'benk_taslimu\'];
		$bank_id 		= $_POST[\'bank_id\'];
		$date 			= $_POST[\'date\'];
		$cheque 		= $_POST[\'cheque\'];
		$flag			= "imprest".time();	
		$last_number	= $this->matumizi_model->getPVLastNumber();
		$new_number		= $last_number+1;
		if($new_number < 10)
		{
			$pv_number = "000".$new_number;
		}
		else if($new_number < 100)
		{
			$pv_number = "00".$new_number;
		}
		else if($new_number < 1000)
		{
			$pv_number = "0".$new_number;
		}
		else
		{
			$pv_number = $new_number;
		}
		
		$balance = $this->matumizi_model->getImprestBalance($empId, strtotime($date), $category_id);
		$this->db->trans_begin(); //begin transactions	
			$data = array(
				"category_id"=>$category_id,
				"amount"=>$amount,
				"expense_type_id"=>0,
				"flag"=>$flag,
				"empId"=>$empId,
				"userId"=>$_SESSION[\'fbuser_id\'],
				"type"=>"add",
				"cheque"=>$cheque,
				"receipt"=>$pv_number,
				"rdate"=>strtotime($date)
			);
			$this->db->insert("imprest_transactions", $data);
			$day 		= date("d", strtotime($date));
			$month 		= date("m", strtotime($date));
			$year 		= date("Y", strtotime($date));
			$data2 = array(
				\'day\'				=>$day,
				\'month\'				=>$month,
				\'year\'				=>$year,
				\'date_seconds\'		=>strtotime($date),
				\'amount\'			=>$amount,
				\'transact_type\'		=>"expense",
				\'flag\'				=>$flag,
				\'bank_id\'			=>$bank_id,
				\'details\'			=>"Imprest"
			);
			$this->income_model->insert_data($benk_taslimu."_transactions", $data2);
		if($this->db->trans_status() === FALSE)
		{
			$this->db->trans_rollback();
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Try again please</h4>";
			redirect($_SESSION[\'current_url\']);
		}
		else
		{
			$this->db->trans_commit();
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Recorded successfully</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	}
	function imprestBalances()
	{
		$data[\'employees\'] = $this->db->get(\'employees\')->result();
		$data[\'categories\'] = $this->db->get(\'imprest_categories\')->result();
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/imprestbalances_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/imprestbalances_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
	}
	function viewAcrualPayments()
	{
		
	}
	function viewAcrualIncome()
	{
		$from_date 					= $this->uri->segment(3);
		$to_date 					= $this->uri->segment(4);
		if($from_date !="" and $to_date !="")
		{
			$rows 						= $this->income_model->getAcrualIncomeRecordsRows(strtotime($from_date), strtotime($to_date));
			$config[\'base_url\'] 		= base_url().\'index.php/acruals/viewAcrualIncome/\'.$from_date."/".$to_date; //set the base url for pagination
			$config[\'total_rows\'] 		= $rows; //total rows
			$config[\'per_page\'] 		= 200; //the number of per page for pagination
			$config[\'uri_segment\'] 		= 4; //see from base_url. 3 for this case
			$config[\'full_tag_open\'] 	= "<p class=\'pag_navs\'>";
			$config[\'full_tag_close\'] 	= "</p>";
			$config[\'first_link\'] 		= TRUE;
			$config[\'last_link\'] 		= TRUE;
			$config[\'display_pages\'] 	= TRUE; 
			$config[\'cur_tag_open\'] 	= "<a href=\'#\' id=\'current_pg\'>";
			$config[\'cur_tag_close\'] 	= \'</a>\';
			$config[\'next_link\'] 		= \'Next&raquo;\';
			$config[\'prev_link\'] 		= \'&laquo;Prev\';
			$this->pagination->initialize($config); //initialize pagination
			$data[\'records\'] 			= $this->income_model->getAcrualIncomeRecords(strtotime($from_date), strtotime($to_date), $config[\'per_page\'], $this->uri->segment(5));
			$data[\'period\']				= "<h4 class=\'session_msg\'>ACRUAL INCOME RECORDS FROM ".$from_date." TO ".$to_date."</h4>";
		}
		else
		{
			$data = array();
		}
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/acrualincome_records_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/acrualincome_records_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		
	}
	function viewImprestsRecords()
	{
		$from_date 					= $this->uri->segment(3);
		$to_date 					= $this->uri->segment(4);
		if($from_date !="" and $to_date !="")
		{
			$rows 						= $this->income_model->getImprestRecords_rows(strtotime($from_date), strtotime($to_date));
			$config[\'base_url\'] 		= base_url().\'index.php/acruals/viewImprestsRecords/\'.$from_date."/".$to_date; //set the base url for pagination
			$config[\'total_rows\'] 		= $rows; //total rows
			$config[\'per_page\'] 		= 200; //the number of per page for pagination
			$config[\'uri_segment\'] 		= 4; //see from base_url. 3 for this case
			$config[\'full_tag_open\'] 	= "<p class=\'pag_navs\'>";
			$config[\'full_tag_close\'] 	= "</p>";
			$config[\'first_link\'] 		= TRUE;
			$config[\'last_link\'] 		= TRUE;
			$config[\'display_pages\'] 	= TRUE; 
			$config[\'cur_tag_open\'] 	= "<a href=\'#\' id=\'current_pg\'>";
			$config[\'cur_tag_close\'] 	= \'</a>\';
			$config[\'next_link\'] 		= \'Next&raquo;\';
			$config[\'prev_link\'] 		= \'&laquo;Prev\';
			$this->pagination->initialize($config); //initialize pagination
			$data[\'records\'] 			= $this->income_model->getImprestRecords(strtotime($from_date), strtotime($to_date), $config[\'per_page\'], $this->uri->segment(5));
			$data[\'period\']				= "<h4 class=\'session_msg\'>IMPREST RECORDS FROM ".$from_date." TO ".$to_date."</h4>";
		}
		else
		{
			$data = array();
		}
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->top_views();
			$this->load->view(\'en/acruals/imprest_records_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		else
		{
			$this->top_views();
			$this->load->view(\'acruals/imprest_records_view\', $data);
			$this->footer_views();
			$this->forms_views();
		}
		
	}
	
	function removeAccountReceivable()
	{
	 	if($_SESSION[\'fballow_edit\'] !="Y")
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Deletion disabled</h4>";
			redirect($_SESSION[\'current_url\']);
		}
		
		$accountId 	= $this->uri->segment(3);
		$balance = $this->income_model->getAccrualAccountBalanceIncome($accountId, strtotime(date("d-m-Y")));
		if($balance==0)
		{
			$query 		= $this->db->where(array("accountId"=>$accountId))->delete("accruals_incomeaccounts");
			if($query)
			{
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Deleted successfully</h4>";
				redirect($_SESSION[\'current_url\']);
			}
			else
			{
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Try again please!</h4>";
				redirect($_SESSION[\'current_url\']);
			}
		}
		else
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Cannot delete this account, it has pending balance</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	 }
	function removeAccountPayable()
	{
	 	if($_SESSION[\'fballow_edit\'] !="Y")
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Deletion disabled</h4>";
			redirect($_SESSION[\'current_url\']);
		}
		
		$accountId 	= $this->uri->segment(3);
		$balance = $this->matumizi_model->getAccrualAccountBalance($accountId, strtotime(date("d-m-Y")));
		if($balance==0)
		{
			$query 		= $this->db->where(array("accountId"=>$accountId))->delete("accruals_accounts");
			if($query)
			{
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Deleted successfully</h4>";
				redirect($_SESSION[\'current_url\']);
			}
			else
			{
				$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Try again please!</h4>";
				redirect($_SESSION[\'current_url\']);
			}
		}
		else
		{
			$_SESSION[\'msg\'] = "<h4 class=\'session_msg\'>Cannot delete this account, it has pending balance</h4>";
			redirect($_SESSION[\'current_url\']);
		}
	 }
 //page forms function 
	function forms_views(){
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->load->view(\'en/usersmembers_forms_view\');
			$this->load->view(\'en/settings_forms_view\');
		}
		else
		{
			$this->load->view(\'usersmembers_forms_view\');
			$this->load->view(\'settings_forms_view\');
		}
	}
	function top_views(){
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->load->view(\'en/sections/header\');
			$this->load->view(\'en/sections/menu\');
		}
		else
		{
			$this->load->view(\'sections/header\');
			$this->load->view(\'sections/menu\');
		}
		
	}
	function footer_views(){
		
		if($_SESSION[\'lang\'] ==\'English\')
		{
			$this->load->view(\'en/sections/footer\');
		}
		else
		{
			$this->load->view(\'en/sections/footer\');
		}
		
	}
}

/* End of file Matumizi.php */
/* Location: ./application/controllers/Matumizi.php */
'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHAgaWYgKCAhIGRlZmluZWQoJ0JBU0VQQVRIJykpIGV4aXQoJ05vIGRpcmVjdCBzY3JpcHQgYWNjZXNzIGFsbG93ZWQnKTsNCmNsYXNzIEFjcnVhbHMgZXh0ZW5kcyBDSV9Db250cm9sbGVyIHsNCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgpew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIHJlZ2lzdGVyQWNjb3VudHNQYXlhYmxlcygpDQoJew0KCQlpZigkX1NFU1NJT05bJ2xhbmcnXSA9PSdFbmdsaXNoJykNCgkJew0KCQkJJHRoaXMtPnRvcF92aWV3cygpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2VuL2FjcnVhbHMvcmVnaXN0ZXJfYWNjb3VudHNfcGF5YWJsZXNfdmlldycpOw0KCQkJJHRoaXMtPmZvb3Rlcl92aWV3cygpOw0KCQkJJHRoaXMtPmZvcm1zX3ZpZXdzKCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+dG9wX3ZpZXdzKCk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnYWNydWFscy9yZWdpc3Rlcl9hY2NvdW50c19wYXlhYmxlc192aWV3Jyk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCX0NCglmdW5jdGlvbiByZWdpc3RlckluY29tZUFjY291bnRzUGF5YWJsZXMoKQ0KCXsNCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9hY3J1YWxzL3JlZ2lzdGVyX2luY29tZWFjY291bnRzX3BheWFibGVzX3ZpZXcnKTsNCgkJCSR0aGlzLT5mb290ZXJfdmlld3MoKTsNCgkJCSR0aGlzLT5mb3Jtc192aWV3cygpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPnRvcF92aWV3cygpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2FjcnVhbHMvcmVnaXN0ZXJfaW5jb21lYWNjb3VudHNfcGF5YWJsZXNfdmlldycpOw0KCQkJJHRoaXMtPmZvb3Rlcl92aWV3cygpOw0KCQkJJHRoaXMtPmZvcm1zX3ZpZXdzKCk7DQoJCX0NCgl9DQoJZnVuY3Rpb24gcmVjb3JkQWNydWFsUGF5bWVudHMoKQ0KCXsNCgkJJGRhdGFbJ2FjcnVhbF9hY2NvdW50cyddID0gJHRoaXMtPmRiLT5nZXQoImFjY3J1YWxzX2FjY291bnRzIiktPnJlc3VsdCgpOw0KCQlpZigkX1NFU1NJT05bJ2xhbmcnXSA9PSdFbmdsaXNoJykNCgkJew0KCQkJJHRoaXMtPnRvcF92aWV3cygpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2VuL2FjcnVhbHMvcmVjb3JkX2FjcnVhbHBheW1lbnRzX3ZpZXcnLCAkZGF0YSk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdhY3J1YWxzL3JlY29yZF9hY3J1YWxwYXltZW50c192aWV3Jyk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCX0NCglmdW5jdGlvbiByZWNvcmRBY3J1YWxJbmNvbWUoKQ0KCXsNCgkJJGRhdGFbJ2FjcnVhbF9hY2NvdW50cyddID0gJHRoaXMtPmRiLT5nZXQoImFjY3J1YWxzX2luY29tZWFjY291bnRzIiktPnJlc3VsdCgpOw0KCQlpZigkX1NFU1NJT05bJ2xhbmcnXSA9PSdFbmdsaXNoJykNCgkJew0KCQkJJHRoaXMtPnRvcF92aWV3cygpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2VuL2FjcnVhbHMvcmVjb3JkX2FjcnVhbGluY29tZV92aWV3JywgJGRhdGEpOw0KCQkJJHRoaXMtPmZvb3Rlcl92aWV3cygpOw0KCQkJJHRoaXMtPmZvcm1zX3ZpZXdzKCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+dG9wX3ZpZXdzKCk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnYWNydWFscy9yZWNvcmRfYWNydWFsaW5jb21lX3ZpZXcnKTsNCgkJCSR0aGlzLT5mb290ZXJfdmlld3MoKTsNCgkJCSR0aGlzLT5mb3Jtc192aWV3cygpOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIHJlY29yZEltcHJlc3RQYXltZW50cygpDQoJew0KCQkkZGF0YVsnZW1wbG95ZWVzJ10gCT0gJHRoaXMtPmRiLT5nZXQoImVtcGxveWVlcyIpLT5yZXN1bHQoKTsNCgkJJGRhdGFbJ2NhdGVnb3JpZXMnXSA9ICR0aGlzLT5kYi0+Z2V0KCJpbXByZXN0X2NhdGVnb3JpZXMiKS0+cmVzdWx0KCk7DQoJCWlmKCRfU0VTU0lPTlsnbGFuZyddID09J0VuZ2xpc2gnKQ0KCQl7DQoJCQkkdGhpcy0+dG9wX3ZpZXdzKCk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnZW4vYWNydWFscy9yZWNvcmRfaW1wcmVzdHBheW1lbnRzX3ZpZXcnLCAkZGF0YSk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdhY3J1YWxzL3JlY29yZF9pbXByZXN0cGF5bWVudHNfdmlldycpOw0KCQkJJHRoaXMtPmZvb3Rlcl92aWV3cygpOw0KCQkJJHRoaXMtPmZvcm1zX3ZpZXdzKCk7DQoJCX0NCgl9DQoJZnVuY3Rpb24gcHJvY2Vzc1JlZ2lzdGVyQWNjb3VudHNQYXlhYmxlcygpDQoJew0KCQkkcXVlcnkgPSAkdGhpcy0+ZGItPmluc2VydCgiYWNjcnVhbHNfYWNjb3VudHMiLCAkX1BPU1QpOw0KCQlpZigkcXVlcnkpDQoJCXsNCgkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+UmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHk8L2I+PC9oND4iOw0KCQkJcmVkaXJlY3QoJF9TRVNTSU9OWydjdXJyZW50X3VybCddKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+RmFpbGVkIHRvIHJlZ2lzdGVyLCB0cnkgYWdhaW48L2g0PiI7DQoJCQlyZWRpcmVjdCgkX1NFU1NJT05bJ2N1cnJlbnRfdXJsJ10pOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIHByb2Nlc3NSZWdpc3RlckluY29tZUFjY291bnRzUGF5YWJsZXMoKQ0KCXsNCgkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5pbnNlcnQoImFjY3J1YWxzX2luY29tZWFjY291bnRzIiwgJF9QT1NUKTsNCgkJaWYoJHF1ZXJ5KQ0KCQl7DQoJCQkkX1NFU1NJT05bJ21zZyddID0gIjxoNCBjbGFzcz0nc2Vzc2lvbl9tc2cnPlJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5PC9iPjwvaDQ+IjsNCgkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkX1NFU1NJT05bJ21zZyddID0gIjxoNCBjbGFzcz0nc2Vzc2lvbl9tc2cnPkZhaWxlZCB0byByZWdpc3RlciwgdHJ5IGFnYWluPC9oND4iOw0KCQkJcmVkaXJlY3QoJF9TRVNTSU9OWydjdXJyZW50X3VybCddKTsNCgkJfQ0KCX0NCglmdW5jdGlvbiB2aWV3QWNjb3VudHNQYXlhYmxlcygpDQoJew0KCQkkZGF0YVsnYWNjb3VudHMnXSA9ICR0aGlzLT5kYi0+Z2V0KCJhY2NydWFsc19hY2NvdW50cyIpLT5yZXN1bHQoKTsNCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9hY3J1YWxzL2FjY291bnRzcGF5YWJsZXNfdmlldycsICRkYXRhKTsNCgkJCSR0aGlzLT5mb290ZXJfdmlld3MoKTsNCgkJCSR0aGlzLT5mb3Jtc192aWV3cygpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPnRvcF92aWV3cygpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2FjcnVhbHMvYWNjb3VudHNwYXlhYmxlc192aWV3Jyk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCX0NCglmdW5jdGlvbiB2aWV3SW5jb21lQWNjb3VudHNQYXlhYmxlcygpDQoJew0KCQkkZGF0YVsnYWNjb3VudHMnXSA9ICR0aGlzLT5kYi0+Z2V0KCJhY2NydWFsc19pbmNvbWVhY2NvdW50cyIpLT5yZXN1bHQoKTsNCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9hY3J1YWxzL2FjY291bnRzcGF5YWJsZXNpbmNvbWVfdmlldycsICRkYXRhKTsNCgkJCSR0aGlzLT5mb290ZXJfdmlld3MoKTsNCgkJCSR0aGlzLT5mb3Jtc192aWV3cygpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPnRvcF92aWV3cygpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2FjcnVhbHMvYWNjb3VudHNwYXlhYmxlc2luY29tZV92aWV3Jyk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCX0NCglmdW5jdGlvbiBwcm9jZXNzUmVjb3JkQWNydWFsUGF5bWVudHMoKQ0KCXsNCgkJJGFtb3VudCAJCT0gJF9QT1NUWydhbW91bnQnXTsNCgkJJGFjY3J1YWxfYWNfaWQgCT0gJF9QT1NUWydhY2NydWFsX2FjX2lkJ107DQoJCSRiZW5rX3Rhc2xpbXUgCT0gJF9QT1NUWydiZW5rX3Rhc2xpbXUnXTsNCgkJJGJhbmtfaWQgCQk9ICRfUE9TVFsnYmFua19pZCddOw0KCQkkZGF0ZSAJCQk9ICRfUE9TVFsnZGF0ZSddOw0KCQkkY2hlcXVlIAkJPSAkX1BPU1RbJ2NoZXF1ZSddOw0KCQkkZmxhZwkJCT0gImFjcnVhbCIudGltZSgpOwkNCgkJJGxhc3RfbnVtYmVyCT0gJHRoaXMtPm1hdHVtaXppX21vZGVsLT5nZXRQVkxhc3ROdW1iZXIoKTsNCgkJJG5ld19udW1iZXIJCT0gJGxhc3RfbnVtYmVyKzE7DQoJCWlmKCRuZXdfbnVtYmVyIDwgMTApDQoJCXsNCgkJCSRwdl9udW1iZXIgPSAiMDAwIi4kbmV3X251bWJlcjsNCgkJfQ0KCQllbHNlIGlmKCRuZXdfbnVtYmVyIDwgMTAwKQ0KCQl7DQoJCQkkcHZfbnVtYmVyID0gIjAwIi4kbmV3X251bWJlcjsNCgkJfQ0KCQllbHNlIGlmKCRuZXdfbnVtYmVyIDwgMTAwMCkNCgkJew0KCQkJJHB2X251bWJlciA9ICIwIi4kbmV3X251bWJlcjsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRwdl9udW1iZXIgPSAkbmV3X251bWJlcjsNCgkJfQ0KCQkNCgkJJGJhbGFuY2UgPSAkdGhpcy0+bWF0dW1pemlfbW9kZWwtPmdldEFjY3J1YWxBY2NvdW50QmFsYW5jZSgkYWNjcnVhbF9hY19pZCwgc3RydG90aW1lKCRkYXRlKSk7DQoJCWlmKCRiYWxhbmNlID49ICRhbW91bnQpDQoJCXsNCgkJCSR0aGlzLT5kYi0+dHJhbnNfYmVnaW4oKTsgLy9iZWdpbiB0cmFuc2FjdGlvbnMJDQoJCQkJJGRhdGEgPSBhcnJheSgNCgkJCQkJImFtb3VudCI9PiRhbW91bnQsDQoJCQkJCSJleHBlbnNlX3R5cGVfaWQiPT4wLA0KCQkJCQkiZmxhZyI9PiRmbGFnLA0KCQkJCQkiYWNjSWQiPT4kYWNjcnVhbF9hY19pZCwNCgkJCQkJInVzZXJJZCI9PiRfU0VTU0lPTlsnZmJ1c2VyX2lkJ10sDQoJCQkJCSJ0eXBlIj0+InJlZHVjZSIsDQoJCQkJCSJjaGVxdWUiPT4kY2hlcXVlLA0KCQkJCQkicmVjZWlwdCI9PiRwdl9udW1iZXIsDQoJCQkJCSJyZGF0ZSI9PnN0cnRvdGltZSgkZGF0ZSkNCgkJCQkpOw0KCQkJCSR0aGlzLT5kYi0+aW5zZXJ0KCJhY3J1YWxfdHJhbnNhY3Rpb25zIiwgJGRhdGEpOw0KCQkJCSRkYXkgCQk9IGRhdGUoImQiLCBzdHJ0b3RpbWUoJGRhdGUpKTsNCgkJCQkkbW9udGggCQk9IGRhdGUoIm0iLCBzdHJ0b3RpbWUoJGRhdGUpKTsNCgkJCQkkeWVhciAJCT0gZGF0ZSgiWSIsIHN0cnRvdGltZSgkZGF0ZSkpOw0KCQkJCSRkYXRhMiA9IGFycmF5KA0KCQkJCQknZGF5JwkJCQk9PiRkYXksDQoJCQkJCSdtb250aCcJCQkJPT4kbW9udGgsDQoJCQkJCSd5ZWFyJwkJCQk9PiR5ZWFyLA0KCQkJCQknZGF0ZV9zZWNvbmRzJwkJPT5zdHJ0b3RpbWUoJGRhdGUpLA0KCQkJCQknYW1vdW50JwkJCT0+JGFtb3VudCwNCgkJCQkJJ3RyYW5zYWN0X3R5cGUnCQk9PiJleHBlbnNlIiwNCgkJCQkJJ2ZsYWcnCQkJCT0+JGZsYWcsDQoJCQkJCSdiYW5rX2lkJwkJCT0+JGJhbmtfaWQsDQoJCQkJCSdkZXRhaWxzJwkJCT0+IkFjcnVhbCINCgkJCQkpOw0KCQkJCSR0aGlzLT5pbmNvbWVfbW9kZWwtPmluc2VydF9kYXRhKCRiZW5rX3Rhc2xpbXUuIl90cmFuc2FjdGlvbnMiLCAkZGF0YTIpOw0KCQkJaWYoJHRoaXMtPmRiLT50cmFuc19zdGF0dXMoKSA9PT0gRkFMU0UpDQoJCQl7DQoJCQkJJHRoaXMtPmRiLT50cmFuc19yb2xsYmFjaygpOw0KCQkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+VHJ5IGFnYWluIHBsZWFzZTwvaDQ+IjsNCgkJCQlyZWRpcmVjdCgkX1NFU1NJT05bJ2N1cnJlbnRfdXJsJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5kYi0+dHJhbnNfY29tbWl0KCk7DQoJCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5SZWNvcmRlZCBzdWNjZXNzZnVsbHk8L2g0PiI7DQoJCQkJcmVkaXJlY3QoJF9TRVNTSU9OWydjdXJyZW50X3VybCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+UGVuZGluZyBiYWxhbmNlKCIubnVtYmVyX2Zvcm1hdCgkYmFsYW5jZSwgMikuIikgaXMgbGVzcyB0aGFuIHRoZSBhbW91bnQgeW91IGVudGVyZWQoIi5udW1iZXJfZm9ybWF0KCRhbW91bnQsIDIpLiIpPC9oND4iOw0KCQkJcmVkaXJlY3QoJF9TRVNTSU9OWydjdXJyZW50X3VybCddKTsNCgkJfQ0KCX0NCglmdW5jdGlvbiBwcm9jZXNzUmVjb3JkQWNydWFsSW5jb21lcygpDQoJew0KCQkkYW1vdW50IAkJPSAkX1BPU1RbJ2Ftb3VudCddOw0KCQkkYWNjcnVhbF9hY19pZCAJPSAkX1BPU1RbJ2FjY3J1YWxfYWNfaWQnXTsNCgkJJGJlbmtfdGFzbGltdSAJPSAkX1BPU1RbJ2JlbmtfdGFzbGltdSddOw0KCQkkYmFua19pZCAJCT0gJF9QT1NUWydiYW5rX2lkJ107DQoJCSRkYXRlIAkJCT0gJF9QT1NUWydkYXRlJ107DQoJCSRjaGVxdWUgCQk9ICRfUE9TVFsnY2hlcXVlJ107DQoJCSRmbGFnCQkJPSAiYWNydWFsIi50aW1lKCk7CQ0KCQkkbGFzdF9udW1iZXIJPSAkdGhpcy0+aW5jb21lX21vZGVsLT5nZXRSZWNlaXB0TGFzdE51bWJlcigpOw0KCQkkbmV3X251bWJlcgkJPSAkbGFzdF9udW1iZXIrMTsNCgkJaWYoJG5ld19udW1iZXIgPCAxMCkNCgkJew0KCQkJJHJlY2VpcHRfbnVtYmVyID0gIjAwMCIuJG5ld19udW1iZXI7DQoJCX0NCgkJZWxzZSBpZigkbmV3X251bWJlciA8IDEwMCkNCgkJew0KCQkJJHJlY2VpcHRfbnVtYmVyID0gIjAwIi4kbmV3X251bWJlcjsNCgkJfQ0KCQllbHNlIGlmKCRuZXdfbnVtYmVyIDwgMTAwMCkNCgkJew0KCQkJJHJlY2VpcHRfbnVtYmVyID0gIjAiLiRuZXdfbnVtYmVyOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHJlY2VpcHRfbnVtYmVyID0gJG5ld19udW1iZXI7DQoJCX0NCgkJJGJhbGFuY2UgPSAkdGhpcy0+aW5jb21lX21vZGVsLT5nZXRBY2NydWFsQWNjb3VudEJhbGFuY2VJbmNvbWUoJGFjY3J1YWxfYWNfaWQsIHN0cnRvdGltZSgkZGF0ZSkpOw0KCQkNCgkJaWYoJGJhbGFuY2UgPj0gJGFtb3VudCkNCgkJew0KCQkJJHRoaXMtPmRiLT50cmFuc19iZWdpbigpOyAvL2JlZ2luIHRyYW5zYWN0aW9ucwkNCgkJCQkkZGF0YSA9IGFycmF5KA0KCQkJCQkiYW1vdW50Ij0+JGFtb3VudCwNCgkJCQkJImluY29tZV90eXBlX2lkIj0+MCwNCgkJCQkJImZsYWciPT4kZmxhZywNCgkJCQkJImFjY0lkIj0+JGFjY3J1YWxfYWNfaWQsDQoJCQkJCSJ1c2VySWQiPT4kX1NFU1NJT05bJ2ZidXNlcl9pZCddLA0KCQkJCQkidHlwZSI9PiJyZWR1Y2UiLA0KCQkJCQkiY2hlcXVlIj0+JGNoZXF1ZSwNCgkJCQkJInJlY2VpcHQiPT4iTkEiLA0KCQkJCQkicmRhdGUiPT5zdHJ0b3RpbWUoJGRhdGUpDQoJCQkJKTsNCgkJCQkkdGhpcy0+ZGItPmluc2VydCgiYWNydWFsX2luY29tZXRyYW5zYWN0aW9ucyIsICRkYXRhKTsNCgkJCQkkZGF5IAkJPSBkYXRlKCJkIiwgc3RydG90aW1lKCRkYXRlKSk7DQoJCQkJJG1vbnRoIAkJPSBkYXRlKCJtIiwgc3RydG90aW1lKCRkYXRlKSk7DQoJCQkJJHllYXIgCQk9IGRhdGUoIlkiLCBzdHJ0b3RpbWUoJGRhdGUpKTsNCgkJCQkkZGF0YTIgPSBhcnJheSgNCgkJCQkJJ2RheScJCQkJPT4kZGF5LA0KCQkJCQknbW9udGgnCQkJCT0+JG1vbnRoLA0KCQkJCQkneWVhcicJCQkJPT4keWVhciwNCgkJCQkJJ2RhdGVfc2Vjb25kcycJCT0+c3RydG90aW1lKCRkYXRlKSwNCgkJCQkJJ2Ftb3VudCcJCQk9PiRhbW91bnQsDQoJCQkJCSd0cmFuc2FjdF90eXBlJwkJPT4iaW5jb21lIiwNCgkJCQkJJ2ZsYWcnCQkJCT0+JGZsYWcsDQoJCQkJCSdiYW5rX2lkJwkJCT0+JGJhbmtfaWQsDQoJCQkJCSdkZXRhaWxzJwkJCT0+IkFjcnVhbCINCgkJCQkpOw0KCQkJCSR0aGlzLT5pbmNvbWVfbW9kZWwtPmluc2VydF9kYXRhKCRiZW5rX3Rhc2xpbXUuIl90cmFuc2FjdGlvbnMiLCAkZGF0YTIpOw0KCQkJCSR0aGlzLT5pbmNvbWVfbW9kZWwtPnVwZGF0ZVJlY2VpcHRMYXN0TnVtYmVyKCRuZXdfbnVtYmVyKTsNCgkJCWlmKCR0aGlzLT5kYi0+dHJhbnNfc3RhdHVzKCkgPT09IEZBTFNFKQ0KCQkJew0KCQkJCSR0aGlzLT5kYi0+dHJhbnNfcm9sbGJhY2soKTsNCgkJCQkkX1NFU1NJT05bJ21zZyddID0gIjxoNCBjbGFzcz0nc2Vzc2lvbl9tc2cnPlRyeSBhZ2FpbiBwbGVhc2U8L2g0PiI7DQoJCQkJcmVkaXJlY3QoJF9TRVNTSU9OWydjdXJyZW50X3VybCddKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+ZGItPnRyYW5zX2NvbW1pdCgpOw0KCQkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+UmVjb3JkZWQgc3VjY2Vzc2Z1bGx5PC9oND4iOw0KCQkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkX1NFU1NJT05bJ21zZyddID0gIjxoNCBjbGFzcz0nc2Vzc2lvbl9tc2cnPlBlbmRpbmcgYmFsYW5jZSgiLm51bWJlcl9mb3JtYXQoJGJhbGFuY2UsIDIpLiIpIGlzIGxlc3MgdGhhbiB0aGUgYW1vdW50IHlvdSBlbnRlcmVkKCIubnVtYmVyX2Zvcm1hdCgkYW1vdW50LCAyKS4iKTwvaDQ+IjsNCgkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCX0NCgl9DQoJZnVuY3Rpb24gcHJvY2Vzc1JlY29yZEltcHJlc3RQYXltZW50cygpDQoJew0KCQkkY2F0ZWdvcnlfaWQgCT0gJF9QT1NUWydjYXRlZ29yeV9pZCddOw0KCQkkYW1vdW50IAkJPSAkX1BPU1RbJ2Ftb3VudCddOw0KCQkkZW1wSWQgCQkJPSAkX1BPU1RbJ2VtcElkJ107DQoJCSRiZW5rX3Rhc2xpbXUgCT0gJF9QT1NUWydiZW5rX3Rhc2xpbXUnXTsNCgkJJGJhbmtfaWQgCQk9ICRfUE9TVFsnYmFua19pZCddOw0KCQkkZGF0ZSAJCQk9ICRfUE9TVFsnZGF0ZSddOw0KCQkkY2hlcXVlIAkJPSAkX1BPU1RbJ2NoZXF1ZSddOw0KCQkkZmxhZwkJCT0gImltcHJlc3QiLnRpbWUoKTsJDQoJCSRsYXN0X251bWJlcgk9ICR0aGlzLT5tYXR1bWl6aV9tb2RlbC0+Z2V0UFZMYXN0TnVtYmVyKCk7DQoJCSRuZXdfbnVtYmVyCQk9ICRsYXN0X251bWJlcisxOw0KCQlpZigkbmV3X251bWJlciA8IDEwKQ0KCQl7DQoJCQkkcHZfbnVtYmVyID0gIjAwMCIuJG5ld19udW1iZXI7DQoJCX0NCgkJZWxzZSBpZigkbmV3X251bWJlciA8IDEwMCkNCgkJew0KCQkJJHB2X251bWJlciA9ICIwMCIuJG5ld19udW1iZXI7DQoJCX0NCgkJZWxzZSBpZigkbmV3X251bWJlciA8IDEwMDApDQoJCXsNCgkJCSRwdl9udW1iZXIgPSAiMCIuJG5ld19udW1iZXI7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcHZfbnVtYmVyID0gJG5ld19udW1iZXI7DQoJCX0NCgkJDQoJCSRiYWxhbmNlID0gJHRoaXMtPm1hdHVtaXppX21vZGVsLT5nZXRJbXByZXN0QmFsYW5jZSgkZW1wSWQsIHN0cnRvdGltZSgkZGF0ZSksICRjYXRlZ29yeV9pZCk7DQoJCSR0aGlzLT5kYi0+dHJhbnNfYmVnaW4oKTsgLy9iZWdpbiB0cmFuc2FjdGlvbnMJDQoJCQkkZGF0YSA9IGFycmF5KA0KCQkJCSJjYXRlZ29yeV9pZCI9PiRjYXRlZ29yeV9pZCwNCgkJCQkiYW1vdW50Ij0+JGFtb3VudCwNCgkJCQkiZXhwZW5zZV90eXBlX2lkIj0+MCwNCgkJCQkiZmxhZyI9PiRmbGFnLA0KCQkJCSJlbXBJZCI9PiRlbXBJZCwNCgkJCQkidXNlcklkIj0+JF9TRVNTSU9OWydmYnVzZXJfaWQnXSwNCgkJCQkidHlwZSI9PiJhZGQiLA0KCQkJCSJjaGVxdWUiPT4kY2hlcXVlLA0KCQkJCSJyZWNlaXB0Ij0+JHB2X251bWJlciwNCgkJCQkicmRhdGUiPT5zdHJ0b3RpbWUoJGRhdGUpDQoJCQkpOw0KCQkJJHRoaXMtPmRiLT5pbnNlcnQoImltcHJlc3RfdHJhbnNhY3Rpb25zIiwgJGRhdGEpOw0KCQkJJGRheSAJCT0gZGF0ZSgiZCIsIHN0cnRvdGltZSgkZGF0ZSkpOw0KCQkJJG1vbnRoIAkJPSBkYXRlKCJtIiwgc3RydG90aW1lKCRkYXRlKSk7DQoJCQkkeWVhciAJCT0gZGF0ZSgiWSIsIHN0cnRvdGltZSgkZGF0ZSkpOw0KCQkJJGRhdGEyID0gYXJyYXkoDQoJCQkJJ2RheScJCQkJPT4kZGF5LA0KCQkJCSdtb250aCcJCQkJPT4kbW9udGgsDQoJCQkJJ3llYXInCQkJCT0+JHllYXIsDQoJCQkJJ2RhdGVfc2Vjb25kcycJCT0+c3RydG90aW1lKCRkYXRlKSwNCgkJCQknYW1vdW50JwkJCT0+JGFtb3VudCwNCgkJCQkndHJhbnNhY3RfdHlwZScJCT0+ImV4cGVuc2UiLA0KCQkJCSdmbGFnJwkJCQk9PiRmbGFnLA0KCQkJCSdiYW5rX2lkJwkJCT0+JGJhbmtfaWQsDQoJCQkJJ2RldGFpbHMnCQkJPT4iSW1wcmVzdCINCgkJCSk7DQoJCQkkdGhpcy0+aW5jb21lX21vZGVsLT5pbnNlcnRfZGF0YSgkYmVua190YXNsaW11LiJfdHJhbnNhY3Rpb25zIiwgJGRhdGEyKTsNCgkJaWYoJHRoaXMtPmRiLT50cmFuc19zdGF0dXMoKSA9PT0gRkFMU0UpDQoJCXsNCgkJCSR0aGlzLT5kYi0+dHJhbnNfcm9sbGJhY2soKTsNCgkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+VHJ5IGFnYWluIHBsZWFzZTwvaDQ+IjsNCgkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+ZGItPnRyYW5zX2NvbW1pdCgpOw0KCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5SZWNvcmRlZCBzdWNjZXNzZnVsbHk8L2g0PiI7DQoJCQlyZWRpcmVjdCgkX1NFU1NJT05bJ2N1cnJlbnRfdXJsJ10pOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIGltcHJlc3RCYWxhbmNlcygpDQoJew0KCQkkZGF0YVsnZW1wbG95ZWVzJ10gPSAkdGhpcy0+ZGItPmdldCgnZW1wbG95ZWVzJyktPnJlc3VsdCgpOw0KCQkkZGF0YVsnY2F0ZWdvcmllcyddID0gJHRoaXMtPmRiLT5nZXQoJ2ltcHJlc3RfY2F0ZWdvcmllcycpLT5yZXN1bHQoKTsNCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9hY3J1YWxzL2ltcHJlc3RiYWxhbmNlc192aWV3JywgJGRhdGEpOw0KCQkJJHRoaXMtPmZvb3Rlcl92aWV3cygpOw0KCQkJJHRoaXMtPmZvcm1zX3ZpZXdzKCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+dG9wX3ZpZXdzKCk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnYWNydWFscy9pbXByZXN0YmFsYW5jZXNfdmlldycsICRkYXRhKTsNCgkJCSR0aGlzLT5mb290ZXJfdmlld3MoKTsNCgkJCSR0aGlzLT5mb3Jtc192aWV3cygpOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIHZpZXdBY3J1YWxQYXltZW50cygpDQoJew0KCQkNCgl9DQoJZnVuY3Rpb24gdmlld0FjcnVhbEluY29tZSgpDQoJew0KCQkkZnJvbV9kYXRlIAkJCQkJPSAkdGhpcy0+dXJpLT5zZWdtZW50KDMpOw0KCQkkdG9fZGF0ZSAJCQkJCT0gJHRoaXMtPnVyaS0+c2VnbWVudCg0KTsNCgkJaWYoJGZyb21fZGF0ZSAhPSIiIGFuZCAkdG9fZGF0ZSAhPSIiKQ0KCQl7DQoJCQkkcm93cyAJCQkJCQk9ICR0aGlzLT5pbmNvbWVfbW9kZWwtPmdldEFjcnVhbEluY29tZVJlY29yZHNSb3dzKHN0cnRvdGltZSgkZnJvbV9kYXRlKSwgc3RydG90aW1lKCR0b19kYXRlKSk7DQoJCQkkY29uZmlnWydiYXNlX3VybCddIAkJPSBiYXNlX3VybCgpLidpbmRleC5waHAvYWNydWFscy92aWV3QWNydWFsSW5jb21lLycuJGZyb21fZGF0ZS4iLyIuJHRvX2RhdGU7IC8vc2V0IHRoZSBiYXNlIHVybCBmb3IgcGFnaW5hdGlvbg0KCQkJJGNvbmZpZ1sndG90YWxfcm93cyddIAkJPSAkcm93czsgLy90b3RhbCByb3dzDQoJCQkkY29uZmlnWydwZXJfcGFnZSddIAkJPSAyMDA7IC8vdGhlIG51bWJlciBvZiBwZXIgcGFnZSBmb3IgcGFnaW5hdGlvbg0KCQkJJGNvbmZpZ1sndXJpX3NlZ21lbnQnXSAJCT0gNDsgLy9zZWUgZnJvbSBiYXNlX3VybC4gMyBmb3IgdGhpcyBjYXNlDQoJCQkkY29uZmlnWydmdWxsX3RhZ19vcGVuJ10gCT0gIjxwIGNsYXNzPSdwYWdfbmF2cyc+IjsNCgkJCSRjb25maWdbJ2Z1bGxfdGFnX2Nsb3NlJ10gCT0gIjwvcD4iOw0KCQkJJGNvbmZpZ1snZmlyc3RfbGluayddIAkJPSBUUlVFOw0KCQkJJGNvbmZpZ1snbGFzdF9saW5rJ10gCQk9IFRSVUU7DQoJCQkkY29uZmlnWydkaXNwbGF5X3BhZ2VzJ10gCT0gVFJVRTsgDQoJCQkkY29uZmlnWydjdXJfdGFnX29wZW4nXSAJPSAiPGEgaHJlZj0nIycgaWQ9J2N1cnJlbnRfcGcnPiI7DQoJCQkkY29uZmlnWydjdXJfdGFnX2Nsb3NlJ10gCT0gJzwvYT4nOw0KCQkJJGNvbmZpZ1snbmV4dF9saW5rJ10gCQk9ICdOZXh0JnJhcXVvOyc7DQoJCQkkY29uZmlnWydwcmV2X2xpbmsnXSAJCT0gJyZsYXF1bztQcmV2JzsNCgkJCSR0aGlzLT5wYWdpbmF0aW9uLT5pbml0aWFsaXplKCRjb25maWcpOyAvL2luaXRpYWxpemUgcGFnaW5hdGlvbg0KCQkJJGRhdGFbJ3JlY29yZHMnXSAJCQk9ICR0aGlzLT5pbmNvbWVfbW9kZWwtPmdldEFjcnVhbEluY29tZVJlY29yZHMoc3RydG90aW1lKCRmcm9tX2RhdGUpLCBzdHJ0b3RpbWUoJHRvX2RhdGUpLCAkY29uZmlnWydwZXJfcGFnZSddLCAkdGhpcy0+dXJpLT5zZWdtZW50KDUpKTsNCgkJCSRkYXRhWydwZXJpb2QnXQkJCQk9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5BQ1JVQUwgSU5DT01FIFJFQ09SRFMgRlJPTSAiLiRmcm9tX2RhdGUuIiBUTyAiLiR0b19kYXRlLiI8L2g0PiI7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZGF0YSA9IGFycmF5KCk7DQoJCX0NCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9hY3J1YWxzL2FjcnVhbGluY29tZV9yZWNvcmRzX3ZpZXcnLCAkZGF0YSk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdhY3J1YWxzL2FjcnVhbGluY29tZV9yZWNvcmRzX3ZpZXcnLCAkZGF0YSk7DQoJCQkkdGhpcy0+Zm9vdGVyX3ZpZXdzKCk7DQoJCQkkdGhpcy0+Zm9ybXNfdmlld3MoKTsNCgkJfQ0KCQkNCgl9DQoJZnVuY3Rpb24gdmlld0ltcHJlc3RzUmVjb3JkcygpDQoJew0KCQkkZnJvbV9kYXRlIAkJCQkJPSAkdGhpcy0+dXJpLT5zZWdtZW50KDMpOw0KCQkkdG9fZGF0ZSAJCQkJCT0gJHRoaXMtPnVyaS0+c2VnbWVudCg0KTsNCgkJaWYoJGZyb21fZGF0ZSAhPSIiIGFuZCAkdG9fZGF0ZSAhPSIiKQ0KCQl7DQoJCQkkcm93cyAJCQkJCQk9ICR0aGlzLT5pbmNvbWVfbW9kZWwtPmdldEltcHJlc3RSZWNvcmRzX3Jvd3Moc3RydG90aW1lKCRmcm9tX2RhdGUpLCBzdHJ0b3RpbWUoJHRvX2RhdGUpKTsNCgkJCSRjb25maWdbJ2Jhc2VfdXJsJ10gCQk9IGJhc2VfdXJsKCkuJ2luZGV4LnBocC9hY3J1YWxzL3ZpZXdJbXByZXN0c1JlY29yZHMvJy4kZnJvbV9kYXRlLiIvIi4kdG9fZGF0ZTsgLy9zZXQgdGhlIGJhc2UgdXJsIGZvciBwYWdpbmF0aW9uDQoJCQkkY29uZmlnWyd0b3RhbF9yb3dzJ10gCQk9ICRyb3dzOyAvL3RvdGFsIHJvd3MNCgkJCSRjb25maWdbJ3Blcl9wYWdlJ10gCQk9IDIwMDsgLy90aGUgbnVtYmVyIG9mIHBlciBwYWdlIGZvciBwYWdpbmF0aW9uDQoJCQkkY29uZmlnWyd1cmlfc2VnbWVudCddIAkJPSA0OyAvL3NlZSBmcm9tIGJhc2VfdXJsLiAzIGZvciB0aGlzIGNhc2UNCgkJCSRjb25maWdbJ2Z1bGxfdGFnX29wZW4nXSAJPSAiPHAgY2xhc3M9J3BhZ19uYXZzJz4iOw0KCQkJJGNvbmZpZ1snZnVsbF90YWdfY2xvc2UnXSAJPSAiPC9wPiI7DQoJCQkkY29uZmlnWydmaXJzdF9saW5rJ10gCQk9IFRSVUU7DQoJCQkkY29uZmlnWydsYXN0X2xpbmsnXSAJCT0gVFJVRTsNCgkJCSRjb25maWdbJ2Rpc3BsYXlfcGFnZXMnXSAJPSBUUlVFOyANCgkJCSRjb25maWdbJ2N1cl90YWdfb3BlbiddIAk9ICI8YSBocmVmPScjJyBpZD0nY3VycmVudF9wZyc+IjsNCgkJCSRjb25maWdbJ2N1cl90YWdfY2xvc2UnXSAJPSAnPC9hPic7DQoJCQkkY29uZmlnWyduZXh0X2xpbmsnXSAJCT0gJ05leHQmcmFxdW87JzsNCgkJCSRjb25maWdbJ3ByZXZfbGluayddIAkJPSAnJmxhcXVvO1ByZXYnOw0KCQkJJHRoaXMtPnBhZ2luYXRpb24tPmluaXRpYWxpemUoJGNvbmZpZyk7IC8vaW5pdGlhbGl6ZSBwYWdpbmF0aW9uDQoJCQkkZGF0YVsncmVjb3JkcyddIAkJCT0gJHRoaXMtPmluY29tZV9tb2RlbC0+Z2V0SW1wcmVzdFJlY29yZHMoc3RydG90aW1lKCRmcm9tX2RhdGUpLCBzdHJ0b3RpbWUoJHRvX2RhdGUpLCAkY29uZmlnWydwZXJfcGFnZSddLCAkdGhpcy0+dXJpLT5zZWdtZW50KDUpKTsNCgkJCSRkYXRhWydwZXJpb2QnXQkJCQk9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5JTVBSRVNUIFJFQ09SRFMgRlJPTSAiLiRmcm9tX2RhdGUuIiBUTyAiLiR0b19kYXRlLiI8L2g0PiI7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkZGF0YSA9IGFycmF5KCk7DQoJCX0NCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT50b3Bfdmlld3MoKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9hY3J1YWxzL2ltcHJlc3RfcmVjb3Jkc192aWV3JywgJGRhdGEpOw0KCQkJJHRoaXMtPmZvb3Rlcl92aWV3cygpOw0KCQkJJHRoaXMtPmZvcm1zX3ZpZXdzKCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+dG9wX3ZpZXdzKCk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnYWNydWFscy9pbXByZXN0X3JlY29yZHNfdmlldycsICRkYXRhKTsNCgkJCSR0aGlzLT5mb290ZXJfdmlld3MoKTsNCgkJCSR0aGlzLT5mb3Jtc192aWV3cygpOw0KCQl9DQoJCQ0KCX0NCgkNCglmdW5jdGlvbiByZW1vdmVBY2NvdW50UmVjZWl2YWJsZSgpDQoJew0KCSAJaWYoJF9TRVNTSU9OWydmYmFsbG93X2VkaXQnXSAhPSJZIikNCgkJew0KCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5EZWxldGlvbiBkaXNhYmxlZDwvaDQ+IjsNCgkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCX0NCgkJDQoJCSRhY2NvdW50SWQgCT0gJHRoaXMtPnVyaS0+c2VnbWVudCgzKTsNCgkJJGJhbGFuY2UgPSAkdGhpcy0+aW5jb21lX21vZGVsLT5nZXRBY2NydWFsQWNjb3VudEJhbGFuY2VJbmNvbWUoJGFjY291bnRJZCwgc3RydG90aW1lKGRhdGUoImQtbS1ZIikpKTsNCgkJaWYoJGJhbGFuY2U9PTApDQoJCXsNCgkJCSRxdWVyeSAJCT0gJHRoaXMtPmRiLT53aGVyZShhcnJheSgiYWNjb3VudElkIj0+JGFjY291bnRJZCkpLT5kZWxldGUoImFjY3J1YWxzX2luY29tZWFjY291bnRzIik7DQoJCQlpZigkcXVlcnkpDQoJCQl7DQoJCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5EZWxldGVkIHN1Y2Nlc3NmdWxseTwvaDQ+IjsNCgkJCQlyZWRpcmVjdCgkX1NFU1NJT05bJ2N1cnJlbnRfdXJsJ10pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+VHJ5IGFnYWluIHBsZWFzZSE8L2g0PiI7DQoJCQkJcmVkaXJlY3QoJF9TRVNTSU9OWydjdXJyZW50X3VybCddKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRfU0VTU0lPTlsnbXNnJ10gPSAiPGg0IGNsYXNzPSdzZXNzaW9uX21zZyc+Q2Fubm90IGRlbGV0ZSB0aGlzIGFjY291bnQsIGl0IGhhcyBwZW5kaW5nIGJhbGFuY2U8L2g0PiI7DQoJCQlyZWRpcmVjdCgkX1NFU1NJT05bJ2N1cnJlbnRfdXJsJ10pOw0KCQl9DQoJIH0NCglmdW5jdGlvbiByZW1vdmVBY2NvdW50UGF5YWJsZSgpDQoJew0KCSAJaWYoJF9TRVNTSU9OWydmYmFsbG93X2VkaXQnXSAhPSJZIikNCgkJew0KCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5EZWxldGlvbiBkaXNhYmxlZDwvaDQ+IjsNCgkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCX0NCgkJDQoJCSRhY2NvdW50SWQgCT0gJHRoaXMtPnVyaS0+c2VnbWVudCgzKTsNCgkJJGJhbGFuY2UgPSAkdGhpcy0+bWF0dW1pemlfbW9kZWwtPmdldEFjY3J1YWxBY2NvdW50QmFsYW5jZSgkYWNjb3VudElkLCBzdHJ0b3RpbWUoZGF0ZSgiZC1tLVkiKSkpOw0KCQlpZigkYmFsYW5jZT09MCkNCgkJew0KCQkJJHF1ZXJ5IAkJPSAkdGhpcy0+ZGItPndoZXJlKGFycmF5KCJhY2NvdW50SWQiPT4kYWNjb3VudElkKSktPmRlbGV0ZSgiYWNjcnVhbHNfYWNjb3VudHMiKTsNCgkJCWlmKCRxdWVyeSkNCgkJCXsNCgkJCQkkX1NFU1NJT05bJ21zZyddID0gIjxoNCBjbGFzcz0nc2Vzc2lvbl9tc2cnPkRlbGV0ZWQgc3VjY2Vzc2Z1bGx5PC9oND4iOw0KCQkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5UcnkgYWdhaW4gcGxlYXNlITwvaDQ+IjsNCgkJCQlyZWRpcmVjdCgkX1NFU1NJT05bJ2N1cnJlbnRfdXJsJ10pOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJF9TRVNTSU9OWydtc2cnXSA9ICI8aDQgY2xhc3M9J3Nlc3Npb25fbXNnJz5DYW5ub3QgZGVsZXRlIHRoaXMgYWNjb3VudCwgaXQgaGFzIHBlbmRpbmcgYmFsYW5jZTwvaDQ+IjsNCgkJCXJlZGlyZWN0KCRfU0VTU0lPTlsnY3VycmVudF91cmwnXSk7DQoJCX0NCgkgfQ0KIC8vcGFnZSBmb3JtcyBmdW5jdGlvbiANCglmdW5jdGlvbiBmb3Jtc192aWV3cygpew0KCQlpZigkX1NFU1NJT05bJ2xhbmcnXSA9PSdFbmdsaXNoJykNCgkJew0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2VuL3VzZXJzbWVtYmVyc19mb3Jtc192aWV3Jyk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnZW4vc2V0dGluZ3NfZm9ybXNfdmlldycpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ3VzZXJzbWVtYmVyc19mb3Jtc192aWV3Jyk7DQoJCQkkdGhpcy0+bG9hZC0+dmlldygnc2V0dGluZ3NfZm9ybXNfdmlldycpOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIHRvcF92aWV3cygpew0KCQlpZigkX1NFU1NJT05bJ2xhbmcnXSA9PSdFbmdsaXNoJykNCgkJew0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2VuL3NlY3Rpb25zL2hlYWRlcicpOw0KCQkJJHRoaXMtPmxvYWQtPnZpZXcoJ2VuL3NlY3Rpb25zL21lbnUnKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdzZWN0aW9ucy9oZWFkZXInKTsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdzZWN0aW9ucy9tZW51Jyk7DQoJCX0NCgkJDQoJfQ0KCWZ1bmN0aW9uIGZvb3Rlcl92aWV3cygpew0KCQkNCgkJaWYoJF9TRVNTSU9OWydsYW5nJ10gPT0nRW5nbGlzaCcpDQoJCXsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9zZWN0aW9ucy9mb290ZXInKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5sb2FkLT52aWV3KCdlbi9zZWN0aW9ucy9mb290ZXInKTsNCgkJfQ0KCQkNCgl9DQp9DQoNCi8qIEVuZCBvZiBmaWxlIE1hdHVtaXppLnBocCAqLw0KLyogTG9jYXRpb246IC4vYXBwbGljYXRpb24vY29udHJvbGxlcnMvTWF0dW1pemkucGhwICovDQo=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 617342516391a5619f9a9be13cac1c2b
Eval Count 1
Decode Time 101 ms