Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php eval("?>".base64_decode("PD9waHANCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0..
Decoded Output download
?>b'<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <[email protected]>
// +----------------------------------------------------------------------
//------------------------
// ThinkPHP
//-------------------------
use thinkCache;
use thinkConfig;
use thinkCookie;
use thinkDb;
use thinkDebug;
use thinkexceptionHttpException;
use thinkexceptionHttpResponseException;
use thinkLang;
use thinkLoader;
use thinkLog;
use thinkModel;
use thinkRequest;
use thinkResponse;
use thinkSession;
use thinkUrl;
use thinkView;
if (!function_exists(\'load_trait\')) {
/**
* Traits PHP5.5
* @param string $class trait
* @param string $ext
* @return boolean
*/
function load_trait($class, $ext = EXT)
{
return Loader::import($class, TRAIT_PATH, $ext);
}
}
if (!function_exists(\'exception\')) {
/**
*
*
* @param string $msg
* @param integer $code 0
* @param string $exception
*
* @throws Exception
*/
function exception($msg, $code = 0, $exception = \'\')
{
$e = $exception ?: \'thinkException\';
throw new $e($msg, $code);
}
}
if (!function_exists(\'debug\')) {
/**
*
* @param string $start
* @param string $end
* @param integer|string $dec m
* @return mixed
*/
function debug($start, $end = \'\', $dec = 6)
{
if (\'\' == $end) {
Debug::remark($start);
} else {
return \'m\' == $dec ? Debug::getRangeMem($start, $end) : Debug::getRangeTime($start, $end, $dec);
}
}
}
if (!function_exists(\'lang\')) {
/**
*
* @param string $name
* @param array $vars
* @param string $lang
* @return mixed
*/
function lang($name, $vars = [], $lang = \'\')
{
return Lang::get($name, $vars, $lang);
}
}
if (!function_exists(\'config\')) {
/**
*
* @param string|array $name
* @param mixed $value
* @param string $range
* @return mixed
*/
function config($name = \'\', $value = null, $range = \'\')
{
if (is_null($value) && is_string($name)) {
return 0 === strpos($name, \'?\') ? Config::has(substr($name, 1), $range) : Config::get($name, $range);
} else {
return Config::set($name, $value, $range);
}
}
}
if (!function_exists(\'input\')) {
/**
*
* @param string $key
* @param mixed $default
* @param string $filter
* @return mixed
*/
function input($key = \'\', $default = null, $filter = \'\')
{
if (0 === strpos($key, \'?\')) {
$key = substr($key, 1);
$has = true;
}
if ($pos = strpos($key, \'.\')) {
//
list($method, $key) = explode(\'.\', $key, 2);
if (!in_array($method, [\'get\', \'post\', \'put\', \'patch\', \'delete\', \'route\', \'param\', \'request\', \'session\', \'cookie\', \'server\', \'env\', \'path\', \'file\'])) {
$key = $method . \'.\' . $key;
$method = \'param\';
}
} else {
//
$method = \'param\';
}
if (isset($has)) {
return request()->has($key, $method, $default);
} else {
return request()->$method($key, $default, $filter);
}
}
}
if (!function_exists(\'widget\')) {
/**
* Widget
* @param string $name Widget
* @param array $data
* @return mixed
*/
function widget($name, $data = [])
{
return Loader::action($name, $data, \'widget\');
}
}
if (!function_exists(\'model\')) {
/**
* Model
* @param string $name Model
* @param string $layer
* @param bool $appendSuffix
* @return thinkModel
*/
function model($name = \'\', $layer = \'model\', $appendSuffix = false)
{
return Loader::model($name, $layer, $appendSuffix);
}
}
if (!function_exists(\'validate\')) {
/**
*
* @param string $name
* @param string $layer
* @param bool $appendSuffix
* @return thinkValidate
*/
function validate($name = \'\', $layer = \'validate\', $appendSuffix = false)
{
return Loader::validate($name, $layer, $appendSuffix);
}
}
if (!function_exists(\'db\')) {
/**
*
* @param string $name
* @param array|string $config
* @param bool $force
* @return thinkdbQuery
*/
function db($name = \'\', $config = [], $force = false)
{
return Db::connect($config, $force)->name($name);
}
}
if (!function_exists(\'controller\')) {
/**
* [/]
* @param string $name
* @param string $layer
* @param bool $appendSuffix
* @return thinkController
*/
function controller($name, $layer = \'controller\', $appendSuffix = false)
{
return Loader::controller($name, $layer, $appendSuffix);
}
}
if (!function_exists(\'action\')) {
/**
* [//]
* @param string $url
* @param string|array $vars
* @param string $layer
* @param bool $appendSuffix
* @return mixed
*/
function action($url, $vars = [], $layer = \'controller\', $appendSuffix = false)
{
return Loader::action($url, $vars, $layer, $appendSuffix);
}
}
if (!function_exists(\'import\')) {
/**
* javaImport
* @param string $class
* @param string $baseUrl
* @param string $ext
* @return boolean
*/
function import($class, $baseUrl = \'\', $ext = EXT)
{
return Loader::import($class, $baseUrl, $ext);
}
}
if (!function_exists(\'vendor\')) {
/**
* Vendor
* @param string $class
* @param string $ext
* @return boolean
*/
function vendor($class, $ext = EXT)
{
return Loader::import($class, VENDOR_PATH, $ext);
}
}
if (!function_exists(\'dump\')) {
/**
*
* @param mixed $var
* @param boolean $echo true false
* @param string $label
* @return void|string
*/
function dump($var, $echo = true, $label = null)
{
return Debug::dump($var, $echo, $label);
}
}
if (!function_exists(\'url\')) {
/**
* Url
* @param string $url
* @param string|array $vars
* @param bool|string $suffix URL
* @param bool|string $domain
* @return string
*/
function url($url = \'\', $vars = \'\', $suffix = true, $domain = false)
{
return Url::build($url, $vars, $suffix, $domain);
}
}
if (!function_exists(\'session\')) {
/**
* Session
* @param string|array $name sessionsession
* @param mixed $value session
* @param string $prefix
* @return mixed
*/
function session($name, $value = \'\', $prefix = null)
{
if (is_array($name)) {
//
Session::init($name);
} elseif (is_null($name)) {
//
Session::clear(\'\' === $value ? null : $value);
} elseif (\'\' === $value) {
//
return 0 === strpos($name, \'?\') ? Session::has(substr($name, 1), $prefix) : Session::get($name, $prefix);
} elseif (is_null($value)) {
//
return Session::delete($name, $prefix);
} else {
//
return Session::set($name, $value, $prefix);
}
}
}
if (!function_exists(\'cookie\')) {
/**
* Cookie
* @param string|array $name cookiecookie
* @param mixed $value cookie
* @param mixed $option
* @return mixed
*/
function cookie($name, $value = \'\', $option = null)
{
if (is_array($name)) {
//
Cookie::init($name);
} elseif (is_null($name)) {
//
Cookie::clear($value);
} elseif (\'\' === $value) {
//
return 0 === strpos($name, \'?\') ? Cookie::has(substr($name, 1), $option) : Cookie::get($name, $option);
} elseif (is_null($value)) {
//
return Cookie::delete($name);
} else {
//
return Cookie::set($name, $value, $option);
}
}
}
if (!function_exists(\'cache\')) {
/**
*
* @param mixed $name
* @param mixed $value
* @param mixed $options
* @param string $tag
* @return mixed
*/
function cache($name, $value = \'\', $options = null, $tag = null)
{
if (is_array($options)) {
//
$cache = Cache::connect($options);
} elseif (is_array($name)) {
//
return Cache::connect($name);
} else {
$cache = Cache::init();
}
if (is_null($name)) {
return $cache->clear($value);
} elseif (\'\' === $value) {
//
return 0 === strpos($name, \'?\') ? $cache->has(substr($name, 1)) : $cache->get($name);
} elseif (is_null($value)) {
//
return $cache->rm($name);
} elseif (0 === strpos($name, \'?\') && \'\' !== $value) {
$expire = is_numeric($options) ? $options : null;
return $cache->remember(substr($name, 1), $value, $expire);
} else {
//
if (is_array($options)) {
$expire = isset($options[\'expire\']) ? $options[\'expire\'] : null; //
} else {
$expire = is_numeric($options) ? $options : null; //
}
if (is_null($tag)) {
return $cache->set($name, $value, $expire);
} else {
return $cache->tag($tag)->set($name, $value, $expire);
}
}
}
}
if (!function_exists(\'trace\')) {
/**
*
* @param mixed $log log
* @param string $level
* @return void|array
*/
function trace($log = \'[think]\', $level = \'log\')
{
if (\'[think]\' === $log) {
return Log::getLog();
} else {
Log::record($log, $level);
}
}
}
if (!function_exists(\'request\')) {
/**
* Request
* @return Request
*/
function request()
{
return Request::instance();
}
}
if (!function_exists(\'response\')) {
/**
* Response
* @param mixed $data
* @param int|string $code
* @param array $header
* @param string $type
* @return Response
*/
function response($data = [], $code = 200, $header = [], $type = \'html\')
{
return Response::create($data, $type, $code, $header);
}
}
if (!function_exists(\'view\')) {
/**
*
* @param string $template
* @param array $vars
* @param array $replace
* @param integer $code
* @return thinkresponseView
*/
function view($template = \'\', $vars = [], $replace = [], $code = 200)
{
return Response::create($template, \'view\', $code)->replace($replace)->assign($vars);
}
}
if (!function_exists(\'json\')) {
/**
* thinkresponseJson
* @param mixed $data
* @param integer $code
* @param array $header
* @param array $options
* @return thinkresponseJson
*/
function json($data = [], $code = 200, $header = [], $options = [])
{
return Response::create($data, \'json\', $code, $header, $options);
}
}
if (!function_exists(\'jsonp\')) {
/**
* thinkresponseJsonp
* @param mixed $data
* @param integer $code
* @param array $header
* @param array $options
* @return thinkresponseJsonp
*/
function jsonp($data = [], $code = 200, $header = [], $options = [])
{
return Response::create($data, \'jsonp\', $code, $header, $options);
}
}
if (!function_exists(\'xml\')) {
/**
* thinkresponseXml
* @param mixed $data
* @param integer $code
* @param array $header
* @param array $options
* @return thinkresponseXml
*/
function xml($data = [], $code = 200, $header = [], $options = [])
{
return Response::create($data, \'xml\', $code, $header, $options);
}
}
if (!function_exists(\'redirect\')) {
/**
* thinkresponseRedirect
* @param mixed $url Url::build
* @param array|integer $params
* @param integer $code
* @param array $with
* @return thinkresponseRedirect
*/
function redirect($url = [], $params = [], $code = 302, $with = [])
{
if (is_integer($params)) {
$code = $params;
$params = [];
}
return Response::create($url, \'redirect\', $code)->params($params)->with($with);
}
}
if (!function_exists(\'abort\')) {
/**
* HTTP
* @param integer|Response $code Response
* @param string $message
* @param array $header
*/
function abort($code, $message = null, $header = [])
{
if ($code instanceof Response) {
throw new HttpResponseException($code);
} else {
throw new HttpException($code, $message, null, $header);
}
}
}
if (!function_exists(\'halt\')) {
/**
*
* @param mixed $var
*/
function halt($var)
{
dump($var);
throw new HttpResponseException(new Response);
}
}
if (!function_exists(\'token\')) {
/**
*
* @param string $name
* @param mixed $type
* @return string
*/
function token($name = \'__token__\', $type = \'md5\')
{
$token = Request::instance()->token($name, $type);
return \'<input type="hidden" name="\' . $name . \'" value="\' . $token . \'" />\';
}
}
if (!function_exists(\'load_relation\')) {
/**
*
* @param mixed $resultSet
* @param mixed $relation
* @return array
*/
function load_relation($resultSet, $relation)
{
$item = current($resultSet);
if ($item instanceof Model) {
$item->eagerlyResultSet($resultSet, $relation);
}
return $resultSet;
}
}
if (!function_exists(\'collection\')) {
/**
*
* @param array $resultSet
* @return thinkmodelCollection|thinkCollection
*/
function collection($resultSet)
{
$item = current($resultSet);
if ($item instanceof Model) {
return thinkmodelCollection::make($resultSet);
} else {
return thinkCollection::make($resultSet);
}
}
}
'
Did this file decode correctly?
Original Code
<?php eval("?>".base64_decode("PD9waHANCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyB8IFRoaW5rUEhQIFsgV0UgQ0FOIERPIElUIEpVU1QgVEhJTksgXQ0KLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHwgQ29weXJpZ2h0IChjKSAyMDA2fjIwMTggaHR0cDovL3RoaW5rcGhwLmNuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gfCBMaWNlbnNlZCAoIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCApDQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gfCBBdXRob3I6IGxpdTIxc3QgPGxpdTIxc3RAZ21haWwuY29tPg0KLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFRoaW5rUEhQIOWKqeaJi+WHveaVsA0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnVzZSB0aGlua0NhY2hlOw0KdXNlIHRoaW5rQ29uZmlnOw0KdXNlIHRoaW5rQ29va2llOw0KdXNlIHRoaW5rRGI7DQp1c2UgdGhpbmtEZWJ1ZzsNCnVzZSB0aGlua2V4Y2VwdGlvbkh0dHBFeGNlcHRpb247DQp1c2UgdGhpbmtleGNlcHRpb25IdHRwUmVzcG9uc2VFeGNlcHRpb247DQp1c2UgdGhpbmtMYW5nOw0KdXNlIHRoaW5rTG9hZGVyOw0KdXNlIHRoaW5rTG9nOw0KdXNlIHRoaW5rTW9kZWw7DQp1c2UgdGhpbmtSZXF1ZXN0Ow0KdXNlIHRoaW5rUmVzcG9uc2U7DQp1c2UgdGhpbmtTZXNzaW9uOw0KdXNlIHRoaW5rVXJsOw0KdXNlIHRoaW5rVmlldzsNCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2xvYWRfdHJhaXQnKSkgew0KICAgIC8qKg0KICAgICAqIOW/q+mAn+WvvOWFpVRyYWl0cyBQSFA1LjXku6XkuIrml6DpnIDosIPnlKgNCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICRjbGFzcyB0cmFpdOW6kw0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGV4dCDnsbvlupPlkI7nvIANCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBsb2FkX3RyYWl0KCRjbGFzcywgJGV4dCA9IEVYVCkNCiAgICB7DQogICAgICAgIHJldHVybiBMb2FkZXI6OmltcG9ydCgkY2xhc3MsIFRSQUlUX1BBVEgsICRleHQpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2V4Y2VwdGlvbicpKSB7DQogICAgLyoqDQogICAgICog5oqb5Ye65byC5bi45aSE55CGDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICRtc2cgIOW8guW4uOa2iOaBrw0KICAgICAqIEBwYXJhbSBpbnRlZ2VyICAgJGNvZGUg5byC5bi45Luj56CBIOm7mOiupOS4ujANCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICRleGNlcHRpb24g5byC5bi457G7DQogICAgICoNCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGV4Y2VwdGlvbigkbXNnLCAkY29kZSA9IDAsICRleGNlcHRpb24gPSAnJykNCiAgICB7DQogICAgICAgICRlID0gJGV4Y2VwdGlvbiA/OiAndGhpbmtFeGNlcHRpb24nOw0KICAgICAgICB0aHJvdyBuZXcgJGUoJG1zZywgJGNvZGUpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2RlYnVnJykpIHsNCiAgICAvKioNCiAgICAgKiDorrDlvZXml7bpl7TvvIjlvq7np5LvvInlkozlhoXlrZjkvb/nlKjmg4XlhrUNCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgJHN0YXJ0IOW8gOWni+agh+etvg0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAkZW5kIOe7k+adn+agh+etvg0KICAgICAqIEBwYXJhbSBpbnRlZ2VyfHN0cmluZyAgICAkZGVjIOWwj+aVsOS9jSDlpoLmnpzmmK9tIOihqOekuue7n+iuoeWGheWtmOWNoOeUqA0KICAgICAqIEByZXR1cm4gbWl4ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBkZWJ1Zygkc3RhcnQsICRlbmQgPSAnJywgJGRlYyA9IDYpDQogICAgew0KICAgICAgICBpZiAoJycgPT0gJGVuZCkgew0KICAgICAgICAgICAgRGVidWc6OnJlbWFyaygkc3RhcnQpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICdtJyA9PSAkZGVjID8gRGVidWc6OmdldFJhbmdlTWVtKCRzdGFydCwgJGVuZCkgOiBEZWJ1Zzo6Z2V0UmFuZ2VUaW1lKCRzdGFydCwgJGVuZCwgJGRlYyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdsYW5nJykpIHsNCiAgICAvKioNCiAgICAgKiDojrflj5bor63oqIDlj5jph4/lgLwNCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICRuYW1lIOivreiogOWPmOmHj+WQjQ0KICAgICAqIEBwYXJhbSBhcnJheSAgICAgJHZhcnMg5Yqo5oCB5Y+Y6YeP5YC8DQogICAgICogQHBhcmFtIHN0cmluZyAgICAkbGFuZyDor63oqIANCiAgICAgKiBAcmV0dXJuIG1peGVkDQogICAgICovDQogICAgZnVuY3Rpb24gbGFuZygkbmFtZSwgJHZhcnMgPSBbXSwgJGxhbmcgPSAnJykNCiAgICB7DQogICAgICAgIHJldHVybiBMYW5nOjpnZXQoJG5hbWUsICR2YXJzLCAkbGFuZyk7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29uZmlnJykpIHsNCiAgICAvKioNCiAgICAgKiDojrflj5blkozorr7nva7phY3nva7lj4LmlbANCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICAkbmFtZSDlj4LmlbDlkI0NCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICAgICAkdmFsdWUg5Y+C5pWw5YC8DQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgJHJhbmdlIOS9nOeUqOWfnw0KICAgICAqIEByZXR1cm4gbWl4ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBjb25maWcoJG5hbWUgPSAnJywgJHZhbHVlID0gbnVsbCwgJHJhbmdlID0gJycpDQogICAgew0KICAgICAgICBpZiAoaXNfbnVsbCgkdmFsdWUpICYmIGlzX3N0cmluZygkbmFtZSkpIHsNCiAgICAgICAgICAgIHJldHVybiAwID09PSBzdHJwb3MoJG5hbWUsICc/JykgPyBDb25maWc6OmhhcyhzdWJzdHIoJG5hbWUsIDEpLCAkcmFuZ2UpIDogQ29uZmlnOjpnZXQoJG5hbWUsICRyYW5nZSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gQ29uZmlnOjpzZXQoJG5hbWUsICR2YWx1ZSwgJHJhbmdlKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2lucHV0JykpIHsNCiAgICAvKioNCiAgICAgKiDojrflj5bovpPlhaXmlbDmja4g5pSv5oyB6buY6K6k5YC85ZKM6L+H5rukDQogICAgICogQHBhcmFtIHN0cmluZyAgICAka2V5IOiOt+WPlueahOWPmOmHj+WQjQ0KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgJGRlZmF1bHQg6buY6K6k5YC8DQogICAgICogQHBhcmFtIHN0cmluZyAgICAkZmlsdGVyIOi/h+a7pOaWueazlQ0KICAgICAqIEByZXR1cm4gbWl4ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBpbnB1dCgka2V5ID0gJycsICRkZWZhdWx0ID0gbnVsbCwgJGZpbHRlciA9ICcnKQ0KICAgIHsNCiAgICAgICAgaWYgKDAgPT09IHN0cnBvcygka2V5LCAnPycpKSB7DQogICAgICAgICAgICAka2V5ID0gc3Vic3RyKCRrZXksIDEpOw0KICAgICAgICAgICAgJGhhcyA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRwb3MgPSBzdHJwb3MoJGtleSwgJy4nKSkgew0KICAgICAgICAgICAgLy8g5oyH5a6a5Y+C5pWw5p2l5rqQDQogICAgICAgICAgICBsaXN0KCRtZXRob2QsICRrZXkpID0gZXhwbG9kZSgnLicsICRrZXksIDIpOw0KICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkbWV0aG9kLCBbJ2dldCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdkZWxldGUnLCAncm91dGUnLCAncGFyYW0nLCAncmVxdWVzdCcsICdzZXNzaW9uJywgJ2Nvb2tpZScsICdzZXJ2ZXInLCAnZW52JywgJ3BhdGgnLCAnZmlsZSddKSkgew0KICAgICAgICAgICAgICAgICRrZXkgICAgPSAkbWV0aG9kIC4gJy4nIC4gJGtleTsNCiAgICAgICAgICAgICAgICAkbWV0aG9kID0gJ3BhcmFtJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIOm7mOiupOS4uuiHquWKqOWIpOaWrQ0KICAgICAgICAgICAgJG1ldGhvZCA9ICdwYXJhbSc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlzc2V0KCRoYXMpKSB7DQogICAgICAgICAgICByZXR1cm4gcmVxdWVzdCgpLT5oYXMoJGtleSwgJG1ldGhvZCwgJGRlZmF1bHQpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QoKS0+JG1ldGhvZCgka2V5LCAkZGVmYXVsdCwgJGZpbHRlcik7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCd3aWRnZXQnKSkgew0KICAgIC8qKg0KICAgICAqIOa4suafk+i+k+WHuldpZGdldA0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJG5hbWUgV2lkZ2V05ZCN56ewDQogICAgICogQHBhcmFtIGFycmF5ICAgICAkZGF0YSDkvKDlhaXnmoTlj4LmlbANCiAgICAgKiBAcmV0dXJuIG1peGVkDQogICAgICovDQogICAgZnVuY3Rpb24gd2lkZ2V0KCRuYW1lLCAkZGF0YSA9IFtdKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIExvYWRlcjo6YWN0aW9uKCRuYW1lLCAkZGF0YSwgJ3dpZGdldCcpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21vZGVsJykpIHsNCiAgICAvKioNCiAgICAgKiDlrp7kvovljJZNb2RlbA0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJG5hbWUgTW9kZWzlkI3np7ANCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICRsYXllciDkuJrliqHlsYLlkI3np7ANCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICRhcHBlbmRTdWZmaXgg5piv5ZCm5re75Yqg57G75ZCN5ZCO57yADQogICAgICogQHJldHVybiB0aGlua01vZGVsDQogICAgICovDQogICAgZnVuY3Rpb24gbW9kZWwoJG5hbWUgPSAnJywgJGxheWVyID0gJ21vZGVsJywgJGFwcGVuZFN1ZmZpeCA9IGZhbHNlKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIExvYWRlcjo6bW9kZWwoJG5hbWUsICRsYXllciwgJGFwcGVuZFN1ZmZpeCk7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygndmFsaWRhdGUnKSkgew0KICAgIC8qKg0KICAgICAqIOWunuS+i+WMlumqjOivgeWZqA0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJG5hbWUg6aqM6K+B5Zmo5ZCN56ewDQogICAgICogQHBhcmFtIHN0cmluZyAgICAkbGF5ZXIg5Lia5Yqh5bGC5ZCN56ewDQogICAgICogQHBhcmFtIGJvb2wgICAgICAkYXBwZW5kU3VmZml4IOaYr+WQpua3u+WKoOexu+WQjeWQjue8gA0KICAgICAqIEByZXR1cm4gdGhpbmtWYWxpZGF0ZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCRuYW1lID0gJycsICRsYXllciA9ICd2YWxpZGF0ZScsICRhcHBlbmRTdWZmaXggPSBmYWxzZSkNCiAgICB7DQogICAgICAgIHJldHVybiBMb2FkZXI6OnZhbGlkYXRlKCRuYW1lLCAkbGF5ZXIsICRhcHBlbmRTdWZmaXgpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2RiJykpIHsNCiAgICAvKioNCiAgICAgKiDlrp7kvovljJbmlbDmja7lupPnsbsNCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAkbmFtZSDmk43kvZznmoTmlbDmja7ooajlkI3np7DvvIjkuI3lkKvliY3nvIDvvIkNCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICAkY29uZmlnIOaVsOaNruW6k+mFjee9ruWPguaVsA0KICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICRmb3JjZSDmmK/lkKblvLrliLbph43mlrDov57mjqUNCiAgICAgKiBAcmV0dXJuIHRoaW5rZGJRdWVyeQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGRiKCRuYW1lID0gJycsICRjb25maWcgPSBbXSwgJGZvcmNlID0gZmFsc2UpDQogICAgew0KICAgICAgICByZXR1cm4gRGI6OmNvbm5lY3QoJGNvbmZpZywgJGZvcmNlKS0+bmFtZSgkbmFtZSk7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29udHJvbGxlcicpKSB7DQogICAgLyoqDQogICAgICog5a6e5L6L5YyW5o6n5Yi25ZmoIOagvOW8j++8mlvmqKHlnZcvXeaOp+WItuWZqA0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJG5hbWUg6LWE5rqQ5Zyw5Z2ADQogICAgICogQHBhcmFtIHN0cmluZyAgICAkbGF5ZXIg5o6n5Yi25bGC5ZCN56ewDQogICAgICogQHBhcmFtIGJvb2wgICAgICAkYXBwZW5kU3VmZml4IOaYr+WQpua3u+WKoOexu+WQjeWQjue8gA0KICAgICAqIEByZXR1cm4gdGhpbmtDb250cm9sbGVyDQogICAgICovDQogICAgZnVuY3Rpb24gY29udHJvbGxlcigkbmFtZSwgJGxheWVyID0gJ2NvbnRyb2xsZXInLCAkYXBwZW5kU3VmZml4ID0gZmFsc2UpDQogICAgew0KICAgICAgICByZXR1cm4gTG9hZGVyOjpjb250cm9sbGVyKCRuYW1lLCAkbGF5ZXIsICRhcHBlbmRTdWZmaXgpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicpKSB7DQogICAgLyoqDQogICAgICog6LCD55So5qih5Z2X55qE5pON5L2c5pa55rOVIOWPguaVsOagvOW8jyBb5qih5Z2XL+aOp+WItuWZqC9d5pON5L2cDQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgJHVybCDosIPnlKjlnLDlnYANCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICAkdmFycyDosIPnlKjlj4LmlbAg5pSv5oyB5a2X56ym5Liy5ZKM5pWw57uEDQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgJGxheWVyIOimgeiwg+eUqOeahOaOp+WItuWxguWQjeensA0KICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICRhcHBlbmRTdWZmaXgg5piv5ZCm5re75Yqg57G75ZCN5ZCO57yADQogICAgICogQHJldHVybiBtaXhlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGFjdGlvbigkdXJsLCAkdmFycyA9IFtdLCAkbGF5ZXIgPSAnY29udHJvbGxlcicsICRhcHBlbmRTdWZmaXggPSBmYWxzZSkNCiAgICB7DQogICAgICAgIHJldHVybiBMb2FkZXI6OmFjdGlvbigkdXJsLCAkdmFycywgJGxheWVyLCAkYXBwZW5kU3VmZml4KTsNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdpbXBvcnQnKSkgew0KICAgIC8qKg0KICAgICAqIOWvvOWFpeaJgOmcgOeahOexu+W6kyDlkIxqYXZh55qESW1wb3J0IOacrOWHveaVsOaciee8k+WtmOWKn+iDvQ0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGNsYXNzIOexu+W6k+WRveWQjeepuumXtOWtl+espuS4sg0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGJhc2VVcmwg6LW35aeL6Lev5b6EDQogICAgICogQHBhcmFtIHN0cmluZyAgICAkZXh0IOWvvOWFpeeahOaWh+S7tuaJqeWxleWQjQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGltcG9ydCgkY2xhc3MsICRiYXNlVXJsID0gJycsICRleHQgPSBFWFQpDQogICAgew0KICAgICAgICByZXR1cm4gTG9hZGVyOjppbXBvcnQoJGNsYXNzLCAkYmFzZVVybCwgJGV4dCk7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygndmVuZG9yJykpIHsNCiAgICAvKioNCiAgICAgKiDlv6vpgJ/lr7zlhaXnrKzkuInmlrnmoYbmnrbnsbvlupMg5omA5pyJ56ys5LiJ5pa55qGG5p6255qE57G75bqT5paH5Lu257uf5LiA5pS+5YiwIOezu+e7n+eahFZlbmRvcuebruW9leS4i+mdog0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGNsYXNzIOexu+W6kw0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGV4dCDnsbvlupPlkI7nvIANCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiB2ZW5kb3IoJGNsYXNzLCAkZXh0ID0gRVhUKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIExvYWRlcjo6aW1wb3J0KCRjbGFzcywgVkVORE9SX1BBVEgsICRleHQpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2R1bXAnKSkgew0KICAgIC8qKg0KICAgICAqIOa1j+iniOWZqOWPi+WlveeahOWPmOmHj+i+k+WHug0KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgJHZhciDlj5jph48NCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAgICRlY2hvIOaYr+WQpui+k+WHuiDpu5jorqTkuLp0cnVlIOWmguaenOS4umZhbHNlIOWImei/lOWbnui+k+WHuuWtl+espuS4sg0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGxhYmVsIOagh+etviDpu5jorqTkuLrnqboNCiAgICAgKiBAcmV0dXJuIHZvaWR8c3RyaW5nDQogICAgICovDQogICAgZnVuY3Rpb24gZHVtcCgkdmFyLCAkZWNobyA9IHRydWUsICRsYWJlbCA9IG51bGwpDQogICAgew0KICAgICAgICByZXR1cm4gRGVidWc6OmR1bXAoJHZhciwgJGVjaG8sICRsYWJlbCk7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygndXJsJykpIHsNCiAgICAvKioNCiAgICAgKiBVcmznlJ/miJANCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAkdXJsIOi3r+eUseWcsOWdgA0KICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgICR2YXJzIOWPmOmHjw0KICAgICAqIEBwYXJhbSBib29sfHN0cmluZyAgICRzdWZmaXgg55Sf5oiQ55qEVVJM5ZCO57yADQogICAgICogQHBhcmFtIGJvb2x8c3RyaW5nICAgJGRvbWFpbiDln5/lkI0NCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHVybCgkdXJsID0gJycsICR2YXJzID0gJycsICRzdWZmaXggPSB0cnVlLCAkZG9tYWluID0gZmFsc2UpDQogICAgew0KICAgICAgICByZXR1cm4gVXJsOjpidWlsZCgkdXJsLCAkdmFycywgJHN1ZmZpeCwgJGRvbWFpbik7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnc2Vzc2lvbicpKSB7DQogICAgLyoqDQogICAgICogU2Vzc2lvbueuoeeQhg0KICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgICRuYW1lIHNlc3Npb27lkI3np7DvvIzlpoLmnpzkuLrmlbDnu4TooajnpLrov5vooYxzZXNzaW9u6K6+572uDQogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgJHZhbHVlIHNlc3Npb27lgLwNCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAkcHJlZml4IOWJjee8gA0KICAgICAqIEByZXR1cm4gbWl4ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzZXNzaW9uKCRuYW1lLCAkdmFsdWUgPSAnJywgJHByZWZpeCA9IG51bGwpDQogICAgew0KICAgICAgICBpZiAoaXNfYXJyYXkoJG5hbWUpKSB7DQogICAgICAgICAgICAvLyDliJ3lp4vljJYNCiAgICAgICAgICAgIFNlc3Npb246OmluaXQoJG5hbWUpOw0KICAgICAgICB9IGVsc2VpZiAoaXNfbnVsbCgkbmFtZSkpIHsNCiAgICAgICAgICAgIC8vIOa4hemZpA0KICAgICAgICAgICAgU2Vzc2lvbjo6Y2xlYXIoJycgPT09ICR2YWx1ZSA/IG51bGwgOiAkdmFsdWUpOw0KICAgICAgICB9IGVsc2VpZiAoJycgPT09ICR2YWx1ZSkgew0KICAgICAgICAgICAgLy8g5Yik5pat5oiW6I635Y+WDQogICAgICAgICAgICByZXR1cm4gMCA9PT0gc3RycG9zKCRuYW1lLCAnPycpID8gU2Vzc2lvbjo6aGFzKHN1YnN0cigkbmFtZSwgMSksICRwcmVmaXgpIDogU2Vzc2lvbjo6Z2V0KCRuYW1lLCAkcHJlZml4KTsNCiAgICAgICAgfSBlbHNlaWYgKGlzX251bGwoJHZhbHVlKSkgew0KICAgICAgICAgICAgLy8g5Yig6ZmkDQogICAgICAgICAgICByZXR1cm4gU2Vzc2lvbjo6ZGVsZXRlKCRuYW1lLCAkcHJlZml4KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIOiuvue9rg0KICAgICAgICAgICAgcmV0dXJuIFNlc3Npb246OnNldCgkbmFtZSwgJHZhbHVlLCAkcHJlZml4KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Nvb2tpZScpKSB7DQogICAgLyoqDQogICAgICogQ29va2ll566h55CGDQogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAgJG5hbWUgY29va2ll5ZCN56ew77yM5aaC5p6c5Li65pWw57uE6KGo56S66L+b6KGMY29va2ll6K6+572uDQogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgJHZhbHVlIGNvb2tpZeWAvA0KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICRvcHRpb24g5Y+C5pWwDQogICAgICogQHJldHVybiBtaXhlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGNvb2tpZSgkbmFtZSwgJHZhbHVlID0gJycsICRvcHRpb24gPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzX2FycmF5KCRuYW1lKSkgew0KICAgICAgICAgICAgLy8g5Yid5aeL5YyWDQogICAgICAgICAgICBDb29raWU6OmluaXQoJG5hbWUpOw0KICAgICAgICB9IGVsc2VpZiAoaXNfbnVsbCgkbmFtZSkpIHsNCiAgICAgICAgICAgIC8vIOa4hemZpA0KICAgICAgICAgICAgQ29va2llOjpjbGVhcigkdmFsdWUpOw0KICAgICAgICB9IGVsc2VpZiAoJycgPT09ICR2YWx1ZSkgew0KICAgICAgICAgICAgLy8g6I635Y+WDQogICAgICAgICAgICByZXR1cm4gMCA9PT0gc3RycG9zKCRuYW1lLCAnPycpID8gQ29va2llOjpoYXMoc3Vic3RyKCRuYW1lLCAxKSwgJG9wdGlvbikgOiBDb29raWU6OmdldCgkbmFtZSwgJG9wdGlvbik7DQogICAgICAgIH0gZWxzZWlmIChpc19udWxsKCR2YWx1ZSkpIHsNCiAgICAgICAgICAgIC8vIOWIoOmZpA0KICAgICAgICAgICAgcmV0dXJuIENvb2tpZTo6ZGVsZXRlKCRuYW1lKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIOiuvue9rg0KICAgICAgICAgICAgcmV0dXJuIENvb2tpZTo6c2V0KCRuYW1lLCAkdmFsdWUsICRvcHRpb24pOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY2FjaGUnKSkgew0KICAgIC8qKg0KICAgICAqIOe8k+WtmOeuoeeQhg0KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgJG5hbWUg57yT5a2Y5ZCN56ew77yM5aaC5p6c5Li65pWw57uE6KGo56S66L+b6KGM57yT5a2Y6K6+572uDQogICAgICogQHBhcmFtIG1peGVkICAgICAkdmFsdWUg57yT5a2Y5YC8DQogICAgICogQHBhcmFtIG1peGVkICAgICAkb3B0aW9ucyDnvJPlrZjlj4LmlbANCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICR0YWcg57yT5a2Y5qCH562+DQogICAgICogQHJldHVybiBtaXhlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGNhY2hlKCRuYW1lLCAkdmFsdWUgPSAnJywgJG9wdGlvbnMgPSBudWxsLCAkdGFnID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmIChpc19hcnJheSgkb3B0aW9ucykpIHsNCiAgICAgICAgICAgIC8vIOe8k+WtmOaTjeS9nOeahOWQjOaXtuWIneWni+WMlg0KICAgICAgICAgICAgJGNhY2hlID0gQ2FjaGU6OmNvbm5lY3QoJG9wdGlvbnMpOw0KICAgICAgICB9IGVsc2VpZiAoaXNfYXJyYXkoJG5hbWUpKSB7DQogICAgICAgICAgICAvLyDnvJPlrZjliJ3lp4vljJYNCiAgICAgICAgICAgIHJldHVybiBDYWNoZTo6Y29ubmVjdCgkbmFtZSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkY2FjaGUgPSBDYWNoZTo6aW5pdCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlzX251bGwoJG5hbWUpKSB7DQogICAgICAgICAgICByZXR1cm4gJGNhY2hlLT5jbGVhcigkdmFsdWUpOw0KICAgICAgICB9IGVsc2VpZiAoJycgPT09ICR2YWx1ZSkgew0KICAgICAgICAgICAgLy8g6I635Y+W57yT5a2YDQogICAgICAgICAgICByZXR1cm4gMCA9PT0gc3RycG9zKCRuYW1lLCAnPycpID8gJGNhY2hlLT5oYXMoc3Vic3RyKCRuYW1lLCAxKSkgOiAkY2FjaGUtPmdldCgkbmFtZSk7DQogICAgICAgIH0gZWxzZWlmIChpc19udWxsKCR2YWx1ZSkpIHsNCiAgICAgICAgICAgIC8vIOWIoOmZpOe8k+WtmA0KICAgICAgICAgICAgcmV0dXJuICRjYWNoZS0+cm0oJG5hbWUpOw0KICAgICAgICB9IGVsc2VpZiAoMCA9PT0gc3RycG9zKCRuYW1lLCAnPycpICYmICcnICE9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgICRleHBpcmUgPSBpc19udW1lcmljKCRvcHRpb25zKSA/ICRvcHRpb25zIDogbnVsbDsNCiAgICAgICAgICAgIHJldHVybiAkY2FjaGUtPnJlbWVtYmVyKHN1YnN0cigkbmFtZSwgMSksICR2YWx1ZSwgJGV4cGlyZSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAvLyDnvJPlrZjmlbDmja4NCiAgICAgICAgICAgIGlmIChpc19hcnJheSgkb3B0aW9ucykpIHsNCiAgICAgICAgICAgICAgICAkZXhwaXJlID0gaXNzZXQoJG9wdGlvbnNbJ2V4cGlyZSddKSA/ICRvcHRpb25zWydleHBpcmUnXSA6IG51bGw7IC8v5L+u5aSN5p+l6K+i57yT5a2Y5peg5rOV6K6+572u6L+H5pyf5pe26Ze0DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRleHBpcmUgPSBpc19udW1lcmljKCRvcHRpb25zKSA/ICRvcHRpb25zIDogbnVsbDsgLy/pu5jorqTlv6vmjbfnvJPlrZjorr7nva7ov4fmnJ/ml7bpl7QNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChpc19udWxsKCR0YWcpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICRjYWNoZS0+c2V0KCRuYW1lLCAkdmFsdWUsICRleHBpcmUpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJGNhY2hlLT50YWcoJHRhZyktPnNldCgkbmFtZSwgJHZhbHVlLCAkZXhwaXJlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3RyYWNlJykpIHsNCiAgICAvKioNCiAgICAgKiDorrDlvZXml6Xlv5fkv6Hmga8NCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICRsb2cgbG9n5L+h5oGvIOaUr+aMgeWtl+espuS4suWSjOaVsOe7hA0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJGxldmVsIOaXpeW/l+e6p+WIqw0KICAgICAqIEByZXR1cm4gdm9pZHxhcnJheQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHRyYWNlKCRsb2cgPSAnW3RoaW5rXScsICRsZXZlbCA9ICdsb2cnKQ0KICAgIHsNCiAgICAgICAgaWYgKCdbdGhpbmtdJyA9PT0gJGxvZykgew0KICAgICAgICAgICAgcmV0dXJuIExvZzo6Z2V0TG9nKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBMb2c6OnJlY29yZCgkbG9nLCAkbGV2ZWwpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygncmVxdWVzdCcpKSB7DQogICAgLyoqDQogICAgICog6I635Y+W5b2T5YmNUmVxdWVzdOWvueixoeWunuS+iw0KICAgICAqIEByZXR1cm4gUmVxdWVzdA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHJlcXVlc3QoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFJlcXVlc3Q6Omluc3RhbmNlKCk7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygncmVzcG9uc2UnKSkgew0KICAgIC8qKg0KICAgICAqIOWIm+W7uuaZrumAmiBSZXNwb25zZSDlr7nosaHlrp7kvosNCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICAkZGF0YSAgIOi+k+WHuuaVsOaNrg0KICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlICAg54q25oCB56CBDQogICAgICogQHBhcmFtIGFycmF5ICAgICAgJGhlYWRlciDlpLTkv6Hmga8NCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAkdHlwZQ0KICAgICAqIEByZXR1cm4gUmVzcG9uc2UNCiAgICAgKi8NCiAgICBmdW5jdGlvbiByZXNwb25zZSgkZGF0YSA9IFtdLCAkY29kZSA9IDIwMCwgJGhlYWRlciA9IFtdLCAkdHlwZSA9ICdodG1sJykNCiAgICB7DQogICAgICAgIHJldHVybiBSZXNwb25zZTo6Y3JlYXRlKCRkYXRhLCAkdHlwZSwgJGNvZGUsICRoZWFkZXIpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3ZpZXcnKSkgew0KICAgIC8qKg0KICAgICAqIOa4suafk+aooeadv+i+k+WHug0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgJHRlbXBsYXRlIOaooeadv+aWh+S7tg0KICAgICAqIEBwYXJhbSBhcnJheSAgICAgJHZhcnMg5qih5p2/5Y+Y6YePDQogICAgICogQHBhcmFtIGFycmF5ICAgICAkcmVwbGFjZSDmqKHmnb/mm7/mjaINCiAgICAgKiBAcGFyYW0gaW50ZWdlciAgICRjb2RlIOeKtuaAgeeggQ0KICAgICAqIEByZXR1cm4gdGhpbmtyZXNwb25zZVZpZXcNCiAgICAgKi8NCiAgICBmdW5jdGlvbiB2aWV3KCR0ZW1wbGF0ZSA9ICcnLCAkdmFycyA9IFtdLCAkcmVwbGFjZSA9IFtdLCAkY29kZSA9IDIwMCkNCiAgICB7DQogICAgICAgIHJldHVybiBSZXNwb25zZTo6Y3JlYXRlKCR0ZW1wbGF0ZSwgJ3ZpZXcnLCAkY29kZSktPnJlcGxhY2UoJHJlcGxhY2UpLT5hc3NpZ24oJHZhcnMpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2pzb24nKSkgew0KICAgIC8qKg0KICAgICAqIOiOt+WPlnRoaW5rcmVzcG9uc2VKc29u5a+56LGh5a6e5L6LDQogICAgICogQHBhcmFtIG1peGVkICAgJGRhdGEg6L+U5Zue55qE5pWw5o2uDQogICAgICogQHBhcmFtIGludGVnZXIgJGNvZGUg54q25oCB56CBDQogICAgICogQHBhcmFtIGFycmF5ICAgJGhlYWRlciDlpLTpg6gNCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkb3B0aW9ucyDlj4LmlbANCiAgICAgKiBAcmV0dXJuIHRoaW5rcmVzcG9uc2VKc29uDQogICAgICovDQogICAgZnVuY3Rpb24ganNvbigkZGF0YSA9IFtdLCAkY29kZSA9IDIwMCwgJGhlYWRlciA9IFtdLCAkb3B0aW9ucyA9IFtdKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFJlc3BvbnNlOjpjcmVhdGUoJGRhdGEsICdqc29uJywgJGNvZGUsICRoZWFkZXIsICRvcHRpb25zKTsNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdqc29ucCcpKSB7DQogICAgLyoqDQogICAgICog6I635Y+WdGhpbmtyZXNwb25zZUpzb25w5a+56LGh5a6e5L6LDQogICAgICogQHBhcmFtIG1peGVkICAgJGRhdGEgICAg6L+U5Zue55qE5pWw5o2uDQogICAgICogQHBhcmFtIGludGVnZXIgJGNvZGUgICAg54q25oCB56CBDQogICAgICogQHBhcmFtIGFycmF5ICAgJGhlYWRlciDlpLTpg6gNCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkb3B0aW9ucyDlj4LmlbANCiAgICAgKiBAcmV0dXJuIHRoaW5rcmVzcG9uc2VKc29ucA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGpzb25wKCRkYXRhID0gW10sICRjb2RlID0gMjAwLCAkaGVhZGVyID0gW10sICRvcHRpb25zID0gW10pDQogICAgew0KICAgICAgICByZXR1cm4gUmVzcG9uc2U6OmNyZWF0ZSgkZGF0YSwgJ2pzb25wJywgJGNvZGUsICRoZWFkZXIsICRvcHRpb25zKTsNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCd4bWwnKSkgew0KICAgIC8qKg0KICAgICAqIOiOt+WPlnRoaW5rcmVzcG9uc2VYbWzlr7nosaHlrp7kvosNCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAkZGF0YSAgICDov5Tlm57nmoTmlbDmja4NCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkY29kZSAgICDnirbmgIHnoIENCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkaGVhZGVyICDlpLTpg6gNCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkb3B0aW9ucyDlj4LmlbANCiAgICAgKiBAcmV0dXJuIHRoaW5rcmVzcG9uc2VYbWwNCiAgICAgKi8NCiAgICBmdW5jdGlvbiB4bWwoJGRhdGEgPSBbXSwgJGNvZGUgPSAyMDAsICRoZWFkZXIgPSBbXSwgJG9wdGlvbnMgPSBbXSkNCiAgICB7DQogICAgICAgIHJldHVybiBSZXNwb25zZTo6Y3JlYXRlKCRkYXRhLCAneG1sJywgJGNvZGUsICRoZWFkZXIsICRvcHRpb25zKTsNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdyZWRpcmVjdCcpKSB7DQogICAgLyoqDQogICAgICog6I635Y+WdGhpbmtyZXNwb25zZVJlZGlyZWN05a+56LGh5a6e5L6LDQogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgJHVybCDph43lrprlkJHlnLDlnYAg5pSv5oyBVXJsOjpidWlsZOaWueazleeahOWcsOWdgA0KICAgICAqIEBwYXJhbSBhcnJheXxpbnRlZ2VyICRwYXJhbXMg6aKd5aSW5Y+C5pWwDQogICAgICogQHBhcmFtIGludGVnZXIgICAgICAgJGNvZGUg54q25oCB56CBDQogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgJHdpdGgg6ZqQ5byP5Lyg5Y+CDQogICAgICogQHJldHVybiB0aGlua3Jlc3BvbnNlUmVkaXJlY3QNCiAgICAgKi8NCiAgICBmdW5jdGlvbiByZWRpcmVjdCgkdXJsID0gW10sICRwYXJhbXMgPSBbXSwgJGNvZGUgPSAzMDIsICR3aXRoID0gW10pDQogICAgew0KICAgICAgICBpZiAoaXNfaW50ZWdlcigkcGFyYW1zKSkgew0KICAgICAgICAgICAgJGNvZGUgICA9ICRwYXJhbXM7DQogICAgICAgICAgICAkcGFyYW1zID0gW107DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIFJlc3BvbnNlOjpjcmVhdGUoJHVybCwgJ3JlZGlyZWN0JywgJGNvZGUpLT5wYXJhbXMoJHBhcmFtcyktPndpdGgoJHdpdGgpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Fib3J0JykpIHsNCiAgICAvKioNCiAgICAgKiDmipvlh7pIVFRQ5byC5bi4DQogICAgICogQHBhcmFtIGludGVnZXJ8UmVzcG9uc2UgICAgICAkY29kZSDnirbmgIHnoIEg5oiW6ICFIFJlc3BvbnNl5a+56LGh5a6e5L6LDQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAkbWVzc2FnZSDplJnor6/kv6Hmga8NCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICRoZWFkZXIg5Y+C5pWwDQogICAgICovDQogICAgZnVuY3Rpb24gYWJvcnQoJGNvZGUsICRtZXNzYWdlID0gbnVsbCwgJGhlYWRlciA9IFtdKQ0KICAgIHsNCiAgICAgICAgaWYgKCRjb2RlIGluc3RhbmNlb2YgUmVzcG9uc2UpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVzcG9uc2VFeGNlcHRpb24oJGNvZGUpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oJGNvZGUsICRtZXNzYWdlLCBudWxsLCAkaGVhZGVyKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2hhbHQnKSkgew0KICAgIC8qKg0KICAgICAqIOiwg+ivleWPmOmHj+W5tuS4lOS4reaWrei+k+WHug0KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICR2YXIg6LCD6K+V5Y+Y6YeP5oiW6ICF5L+h5oGvDQogICAgICovDQogICAgZnVuY3Rpb24gaGFsdCgkdmFyKQ0KICAgIHsNCiAgICAgICAgZHVtcCgkdmFyKTsNCiAgICAgICAgdGhyb3cgbmV3IEh0dHBSZXNwb25zZUV4Y2VwdGlvbihuZXcgUmVzcG9uc2UpOw0KICAgIH0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3Rva2VuJykpIHsNCiAgICAvKioNCiAgICAgKiDnlJ/miJDooajljZXku6TniYwNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIOS7pOeJjOWQjeensA0KICAgICAqIEBwYXJhbSBtaXhlZCAgJHR5cGUg5Luk54mM55Sf5oiQ5pa55rOVDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBmdW5jdGlvbiB0b2tlbigkbmFtZSA9ICdfX3Rva2VuX18nLCAkdHlwZSA9ICdtZDUnKQ0KICAgIHsNCiAgICAgICAgJHRva2VuID0gUmVxdWVzdDo6aW5zdGFuY2UoKS0+dG9rZW4oJG5hbWUsICR0eXBlKTsNCiAgICAgICAgcmV0dXJuICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInIC4gJG5hbWUgLiAnIiB2YWx1ZT0iJyAuICR0b2tlbiAuICciIC8+JzsNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdsb2FkX3JlbGF0aW9uJykpIHsNCiAgICAvKioNCiAgICAgKiDlu7bov5/pooTovb3lhaXlhbPogZTmn6Xor6INCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlc3VsdFNldCDmlbDmja7pm4YNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlbGF0aW9uIOWFs+iBlA0KICAgICAqIEByZXR1cm4gYXJyYXkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBsb2FkX3JlbGF0aW9uKCRyZXN1bHRTZXQsICRyZWxhdGlvbikNCiAgICB7DQogICAgICAgICRpdGVtID0gY3VycmVudCgkcmVzdWx0U2V0KTsNCiAgICAgICAgaWYgKCRpdGVtIGluc3RhbmNlb2YgTW9kZWwpIHsNCiAgICAgICAgICAgICRpdGVtLT5lYWdlcmx5UmVzdWx0U2V0KCRyZXN1bHRTZXQsICRyZWxhdGlvbik7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRyZXN1bHRTZXQ7DQogICAgfQ0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29sbGVjdGlvbicpKSB7DQogICAgLyoqDQogICAgICog5pWw57uE6L2s5o2i5Li65pWw5o2u6ZuG5a+56LGhDQogICAgICogQHBhcmFtIGFycmF5ICRyZXN1bHRTZXQg5pWw5o2u6ZuG5pWw57uEDQogICAgICogQHJldHVybiB0aGlua21vZGVsQ29sbGVjdGlvbnx0aGlua0NvbGxlY3Rpb24NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBjb2xsZWN0aW9uKCRyZXN1bHRTZXQpDQogICAgew0KICAgICAgICAkaXRlbSA9IGN1cnJlbnQoJHJlc3VsdFNldCk7DQogICAgICAgIGlmICgkaXRlbSBpbnN0YW5jZW9mIE1vZGVsKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpbmttb2RlbENvbGxlY3Rpb246Om1ha2UoJHJlc3VsdFNldCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gdGhpbmtDb2xsZWN0aW9uOjptYWtlKCRyZXN1bHRTZXQpOw0KICAgICAgICB9DQogICAgfQ0KfQ0K")); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 4b92fc3768c1fb9b98139218f61db130 |
Eval Count | 1 |
Decode Time | 106 ms |