| 1 |
<?php |
<?php |
| 2 |
/** |
/** |
| 3 |
* @package Mambo Open Source |
* @package Mambo |
| 4 |
* @copyright (C) 2005 - 2006 Mambo Foundation Inc. |
* @author Mambo Foundation Inc see README.php |
| 5 |
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL |
* @copyright Mambo Foundation Inc. |
| 6 |
* |
* See COPYRIGHT.php for copyright notices and details. |
| 7 |
* Mambo was originally developed by Miro (www.miro.com.au) in 2000. Miro assigned the copyright in Mambo to The Mambo Foundation in 2005 to ensure |
* @license GNU/GPL Version 2, see LICENSE.php |
| 8 |
* that Mambo remained free Open Source software owned and managed by the community. |
* Mambo is free software; you can redistribute it and/or |
| 9 |
* Mambo is Free Software |
* modify it under the terms of the GNU General Public License |
| 10 |
|
* as published by the Free Software Foundation; version 2 of the License. |
| 11 |
*/ |
*/ |
| 12 |
|
|
| 13 |
/** |
/** |
| 325 |
if ($f) { |
if ($f) { |
| 326 |
while ($f AND !feof($f)) { |
while ($f AND !feof($f)) { |
| 327 |
$line = fgets($f); |
$line = fgets($f); |
| 328 |
$altered = str_replace('$', '$this->', $line); |
$altered = preg_replace('/^\$/', '$this->', $line); |
| 329 |
if ($altered != $line) $code .= $altered; |
if ($altered != $line) $code .= $altered; |
| 330 |
} |
} |
| 331 |
} |
} |
| 337 |
eval($code); |
eval($code); |
| 338 |
|
|
| 339 |
|
|
| 340 |
if (isset($_SERVER['DOCUMENT_ROOT']) AND strlen($_SERVER['DOCUMENT_ROOT'])) { |
/*if (isset($_SERVER['DOCUMENT_ROOT']) AND strlen($_SERVER['DOCUMENT_ROOT'])) { |
| 341 |
$docroot = str_replace('\\', '/', str_replace('\\\\', '\\', $_SERVER['DOCUMENT_ROOT'])); |
$docroot = str_replace('\\', '/', str_replace('\\\\', '\\', $_SERVER['DOCUMENT_ROOT'])); |
| 342 |
} |
} |
| 343 |
else { |
else {*/ |
| 344 |
// Find information about where execution started |
// Find information about where execution started |
| 345 |
$origin = array_pop(debug_backtrace()); |
$origin = array_pop(debug_backtrace()); |
| 346 |
// Find the PHP script at the start, with a fix for Windows slashes |
// Find the PHP script at the start, with a fix for Windows slashes |
| 347 |
$absolutepath = str_replace('\\', '/', $origin['file']); |
$absolutepath = str_replace('\\', '/', $origin['file']); |
| 348 |
$localpath = $_SERVER['PHP_SELF']; |
$localpath = $_SERVER['PHP_SELF']; |
| 349 |
$docroot = substr($absolutepath,0,strpos($absolutepath,$localpath)); |
$docroot = substr($absolutepath,0,strpos($absolutepath,$localpath)); |
| 350 |
} |
/*}*/ |
| 351 |
$mamboroot = str_replace('\\', '/', rtrim($this->rootPath, '\/')); |
$mamboroot = str_replace('\\', '/', rtrim($this->rootPath, '\/')); |
| 352 |
$this->subdirectory = substr($mamboroot, strlen($docroot)); |
$this->subdirectory = substr($mamboroot, strlen($docroot)); |
| 353 |
|
|
| 396 |
* @param unknown_type $database |
* @param unknown_type $database |
| 397 |
*/ |
*/ |
| 398 |
function offlineCheck (&$user, &$database) { |
function offlineCheck (&$user, &$database) { |
| 399 |
if ($this->mosConfig_offline OR file_exists($this->rootPath.'/installation/index.php')) { |
global $adminside; |
| 400 |
|
if (($this->mosConfig_offline && !$adminside) OR file_exists($this->rootPath.'/installation/index.php')) { |
| 401 |
require_once($this->rootPath().'/administrator/includes/admin.php'); |
require_once($this->rootPath().'/administrator/includes/admin.php'); |
| 402 |
session_name(md5($this->mosConfig_live_site)); |
session_name(md5($this->mosConfig_live_site)); |
| 403 |
session_start(); |
session_start(); |
| 419 |
require_once($this->mosConfig_absolute_path.'/includes/phpgettext/error.php'); |
require_once($this->mosConfig_absolute_path.'/includes/phpgettext/error.php'); |
| 420 |
require_once($this->mosConfig_absolute_path.'/includes/mambofunc.php'); |
require_once($this->mosConfig_absolute_path.'/includes/mambofunc.php'); |
| 421 |
require_once($this->mosConfig_absolute_path.'/includes/mambolanguage.class.php'); |
require_once($this->mosConfig_absolute_path.'/includes/mambolanguage.class.php'); |
| 422 |
$this->mosConfig_locale = mosGetParam($_POST, 'lang', $this->mosConfig_locale); |
if (!mosGetParam($_REQUEST, 'lang')); |
| 423 |
|
else $this->mosConfig_locale = mosGetParam($_REQUEST, 'lang', $this->mosConfig_locale); |
| 424 |
$language =& new mamboLanguage($this->mosConfig_locale, $this->rootPath.'/language/'); |
$language =& new mamboLanguage($this->mosConfig_locale, $this->rootPath.'/language/'); |
| 425 |
$languages = $language->getLanguages(); |
$languages = $language->getLanguages(); |
| 426 |
$charset = $language->get('charset'); |
$charset = $language->get('charset'); |
| 428 |
$this->mosConfig_lang = $language->get('lang'); |
$this->mosConfig_lang = $language->get('lang'); |
| 429 |
$this->current_language = $language; |
$this->current_language = $language; |
| 430 |
if (!defined('_ISO')) DEFINE('_ISO','charset='.$charset); |
if (!defined('_ISO')) DEFINE('_ISO','charset='.$charset); |
| 431 |
|
header('Content-type: text/html; '._ISO); |
| 432 |
if (!defined('_DATE_FORMAT_LC')) DEFINE('_DATE_FORMAT_LC', $dateformat); //Uses PHP's strftime Command Format |
if (!defined('_DATE_FORMAT_LC')) DEFINE('_DATE_FORMAT_LC', $dateformat); //Uses PHP's strftime Command Format |
| 433 |
if (!defined('_DATE_FORMAT_LC2')) DEFINE('_DATE_FORMAT_LC2', $dateformat); |
if (!defined('_DATE_FORMAT_LC2')) DEFINE('_DATE_FORMAT_LC2', $dateformat); |
| 434 |
|
|
| 830 |
if (file_exists( "$rootpath/$imgPath" )) $img = "<img src='$config->mosConfig_live_site/images/M_images/arrow.png' alt='arrow' />"; |
if (file_exists( "$rootpath/$imgPath" )) $img = "<img src='$config->mosConfig_live_site/images/M_images/arrow.png' alt='arrow' />"; |
| 831 |
else $img = '>'; |
else $img = '>'; |
| 832 |
} |
} |
| 833 |
|
$uri =& mosUriHelper::getInstance(); |
| 834 |
foreach ($this->_names as $i=>$name) { |
foreach ($this->_names as $i=>$name) { |
| 835 |
|
$uri->setUri($this->_urls[$i]); |
| 836 |
if ($i === $last AND count($customs) == 0) $result .= "$name</span>"; |
if ($i === $last AND count($customs) == 0) $result .= "$name</span>"; |
| 837 |
elseif (strstr($this->_urls[$i], 'view')) $result .= ""; |
elseif (strstr($uri->get('task'), 'view')) $result .= ""; |
| 838 |
else { |
else { |
| 839 |
$sefurl = sefRelToAbs($this->_urls[$i]); |
$sefurl = sefRelToAbs($this->_urls[$i]); |
| 840 |
$result .= "<a href='$sefurl' class='pathway'>$name</a>"; |
$result .= "<a href='$sefurl' class='pathway'>$name</a>"; |
| 1195 |
function &listAll ($type='file', $recurse=false, $fullpath=false) { |
function &listAll ($type='file', $recurse=false, $fullpath=false) { |
| 1196 |
$results = array(); |
$results = array(); |
| 1197 |
if ($dir = @opendir($this->path)) { |
if ($dir = @opendir($this->path)) { |
| 1198 |
while ($file = readdir($dir)) { |
while (false !== ($file = readdir($dir))) { |
| 1199 |
if ($file == '.' OR $file == '..') continue; |
if ($file == '.' OR $file == '..') continue; |
| 1200 |
if (is_dir($this->path.$file)) { |
if (is_dir($this->path.$file)) { |
| 1201 |
if ($recurse) { |
if ($recurse) { |
| 1211 |
} |
} |
| 1212 |
closedir($dir); |
closedir($dir); |
| 1213 |
} |
} |
| 1214 |
|
asort($results); |
| 1215 |
return $results; |
return $results; |
| 1216 |
} |
} |
| 1217 |
|
|
| 1223 |
function soleDir () { |
function soleDir () { |
| 1224 |
$found = ''; |
$found = ''; |
| 1225 |
if ($dir = @opendir($this->path)) { |
if ($dir = @opendir($this->path)) { |
| 1226 |
while ($file = readdir($dir)) { |
while (false !== ($file = readdir($dir))) { |
| 1227 |
if ($file == '.' OR $file == '..') continue; |
if ($file == '.' OR $file == '..') continue; |
| 1228 |
if (is_dir($this->path.$file)) { |
if (is_dir($this->path.$file)) { |
| 1229 |
if ($found) return ''; |
if ($found) return ''; |
| 1560 |
} |
} |
| 1561 |
} |
} |
| 1562 |
} |
} |
| 1563 |
|
if ($Itemid == 0 && !count($result)){ |
| 1564 |
|
$result[0] = new stdclass; |
| 1565 |
|
$result[0]->id = 1; |
| 1566 |
|
$result[0]->link = 'index.php?option=com_frontpage'; |
| 1567 |
|
$result[0]->parent = 0; |
| 1568 |
|
$result[0]->type = 'components'; |
| 1569 |
|
$result[0]->browserNav = 0; |
| 1570 |
|
$result[0]->name = 'Home'; |
| 1571 |
|
} |
| 1572 |
return $result; |
return $result; |
| 1573 |
} |
} |
| 1574 |
|
|
| 1699 |
*/ |
*/ |
| 1700 |
function mosShowVIMenu( &$params ) { |
function mosShowVIMenu( &$params ) { |
| 1701 |
global $my, $cur_template, $Itemid; |
global $my, $cur_template, $Itemid; |
| 1702 |
if (mamboCore::get('mosConfig_shownoauth')) $maxaccess = 0; |
if (mamboCore::get('mosConfig_shownoauth')) $maxaccess = 9999999; |
| 1703 |
else $maxaccess = $my->gid; |
else $maxaccess = $my->getAccessGid(); |
| 1704 |
$rows =& $this->getByParentOrder(0, $params->get('menutype'), $maxaccess); |
$rows =& $this->getByParentOrder(0, $params->get('menutype'), $maxaccess); |
| 1705 |
foreach ($rows as $i=>$row) $crosslink[$row->id] = $i; |
foreach ($rows as $i=>$row) $crosslink[$row->id] = $i; |
| 1706 |
// indent icons |
// indent icons |
| 1786 |
function mosShowHFMenu( &$params, $style=0 ) { |
function mosShowHFMenu( &$params, $style=0 ) { |
| 1787 |
global $my, $cur_template, $Itemid; |
global $my, $cur_template, $Itemid; |
| 1788 |
|
|
| 1789 |
if (mamboCore::get('mosConfig_shownoauth')) $maxaccess = 0; |
if (mamboCore::get('mosConfig_shownoauth')) $maxaccess = 9999999; |
| 1790 |
else $maxaccess = $my->gid; |
else $maxaccess = $my->getAccessGid(); |
| 1791 |
$rows =& $this->getByParentOrder(0, $params->get('menutype'), $maxaccess, true); |
$rows =& $this->getByParentOrder(0, $params->get('menutype'), $maxaccess, true); |
| 1792 |
|
|
| 1793 |
$links = array(); |
$links = array(); |
| 1981 |
if (isset($result[0])) return $result[0]; |
if (isset($result[0])) return $result[0]; |
| 1982 |
return null; |
return null; |
| 1983 |
} |
} |
| 1984 |
|
|
| 1985 |
|
function getBot($element, $folder) { |
| 1986 |
|
$returnBot = ''; |
| 1987 |
|
foreach ($this->_bots as $i=>$bot) { |
| 1988 |
|
if ($bot->folder == $folder && $bot->element == $element){ |
| 1989 |
|
$returnBot = $bot; |
| 1990 |
|
break; |
| 1991 |
|
} |
| 1992 |
|
} |
| 1993 |
|
return $returnBot; |
| 1994 |
|
} |
| 1995 |
} |
} |
| 1996 |
|
|
| 1997 |
/** |
/** |
| 2064 |
$this->grp = mosGetParam( $_SESSION, 'session_grp', 0); |
$this->grp = mosGetParam( $_SESSION, 'session_grp', 0); |
| 2065 |
} |
} |
| 2066 |
/** |
/** |
| 2067 |
|
* User access level |
| 2068 |
|
*/ |
| 2069 |
|
function getAccessGid() { |
| 2070 |
|
static $access; |
| 2071 |
|
if (!isset($access)) { |
| 2072 |
|
$acl = new gacl; |
| 2073 |
|
$access = $this->id > 0 ? 1 : 0; |
| 2074 |
|
$access += $acl->acl_check( 'action', 'access', 'users', $this->usertype, 'frontend', 'special' ); |
| 2075 |
|
} |
| 2076 |
|
return $access; |
| 2077 |
|
} |
| 2078 |
|
/** |
| 2079 |
* Validation and filtering |
* Validation and filtering |
| 2080 |
* @return boolean True is satisfactory |
* @return boolean True is satisfactory |
| 2081 |
*/ |
*/ |
| 2082 |
function check() { |
function check() { |
| 2083 |
Global $mosConfig_absolute_path; |
Global $mosConfig_absolute_path; |
| 2084 |
include $mosConfig_absolute_path . ('/language/english.php'); |
//include $mosConfig_absolute_path . ('/language/english.php'); |
| 2085 |
$this->_error = ''; |
$this->_error = ''; |
| 2086 |
if ($this->name == '') $this->_error = _REGWARN_NAME; |
if ($this->name == '') $this->_error = _REGWARN_NAME; |
| 2087 |
elseif ($this->username == '') $this->_error = _REGWARN_UNAME; |
elseif ($this->username == '') $this->_error = _REGWARN_UNAME; |
| 2555 |
$sql['os'] = "INSERT INTO #__stats_agents (agent,type) VALUES ('$os',1)"; |
$sql['os'] = "INSERT INTO #__stats_agents (agent,type) VALUES ('$os',1)"; |
| 2556 |
$sql['domain'] = "INSERT INTO #__stats_agents (agent,type) VALUES ('$tldomain',2)"; |
$sql['domain'] = "INSERT INTO #__stats_agents (agent,type) VALUES ('$tldomain',2)"; |
| 2557 |
if ($stats) foreach ($stats as $stat) { |
if ($stats) foreach ($stats as $stat) { |
| 2558 |
if ($stat->type == 0) $sql['agents'] = "UPDATE #__stats_agents SET hits=(hits+1) WHERE agent='$browser' AND type=0"; |
if ($stat->type == 0) $sql['browser'] = "UPDATE #__stats_agents SET hits=(hits+1) WHERE agent='$browser' AND type=0"; |
| 2559 |
if ($stat->type == 1) $sql['os'] = "UPDATE #__stats_agents SET hits=(hits+1) WHERE agent='$os' AND type=1"; |
if ($stat->type == 1) $sql['os'] = "UPDATE #__stats_agents SET hits=(hits+1) WHERE agent='$os' AND type=1"; |
| 2560 |
if ($stat->type == 2) $sql['domain'] = "UPDATE #__stats_agents SET hits=(hits+1) WHERE agent='$tldomain' AND type=2"; |
if ($stat->type == 2) $sql['domain'] = "UPDATE #__stats_agents SET hits=(hits+1) WHERE agent='$tldomain' AND type=2"; |
| 2561 |
} |
} |
| 2604 |
<?php |
<?php |
| 2605 |
} |
} |
| 2606 |
} |
} |
| 2607 |
|
/** |
| 2608 |
|
* Render head tags |
| 2609 |
|
* tags are assembled into an associative array with the following elements: |
| 2610 |
|
* - title |
| 2611 |
|
* - meta |
| 2612 |
|
* - mambojavascript |
| 2613 |
|
* - custom (custom head tags) |
| 2614 |
|
* - livebookmark |
| 2615 |
|
* - favicon |
| 2616 |
|
* @param unknown keys - array elements to output (null = output all) |
| 2617 |
|
* @param unknown exclude - array elements to exclude in output |
| 2618 |
|
* |
| 2619 |
|
* Usage: mosShowHead() - to render all tags |
| 2620 |
|
* mosShowHead('title') - to render a single tag |
| 2621 |
|
* mosShowHead(array('title', 'meta')) - to selectively render tags (in order) |
| 2622 |
|
* mosShowHead(null, 'custom') - to exclude a single tag |
| 2623 |
|
* mosShowHead(null, array('custom','favicon')) - to exclude multiple tags |
| 2624 |
|
*/ |
| 2625 |
|
function mosShowHead($keys='', $exclude='') { |
| 2626 |
|
if (!is_array($keys)) |
| 2627 |
|
if ($keys !== '' && !is_null($keys)) |
| 2628 |
|
$keys = array($keys); |
| 2629 |
|
else $keys = array(); |
| 2630 |
|
if (!is_array($exclude)) |
| 2631 |
|
if ($exclude !== '') |
| 2632 |
|
$exclude = array($exclude); |
| 2633 |
|
else $exclude = array(); |
| 2634 |
|
|
| 2635 |
|
$this->_head['output'] = array(); |
| 2636 |
|
|
| 2637 |
|
$head = array();; |
| 2638 |
|
$head['title'] = '<title>'.$this->_head['title'].'</title>'; |
| 2639 |
|
|
|
function mosShowHead () { |
|
|
global $_VERSION; |
|
|
$mosConfig_live_site = mamboCore::get('mosConfig_live_site'); |
|
| 2640 |
$this->appendMetaTag( 'description', mamboCore::get('mosConfig_MetaDesc'), true ); |
$this->appendMetaTag( 'description', mamboCore::get('mosConfig_MetaDesc'), true ); |
| 2641 |
$this->appendMetaTag( 'keywords', mamboCore::get('mosConfig_MetaKeys'), true ); |
$this->appendMetaTag( 'keywords', mamboCore::get('mosConfig_MetaKeys'), true ); |
| 2642 |
echo $this->getHead(); |
$head['meta'] = array(); |
| 2643 |
if (mamboCore::get('mosConfig_sef')) { |
foreach ($this->_head['meta'] as $name=>$meta) { |
| 2644 |
echo "<base href=\"$mosConfig_live_site/\" />\r\n"; |
if ($meta[1]) $head['meta'][] = $meta[1]; |
| 2645 |
|
$head['meta'][] = '<meta name="' . $name . '" content="' . $meta[0] . '" />'; |
| 2646 |
|
if ($meta[2]) $head['meta'][] = $meta[2]; |
| 2647 |
} |
} |
| 2648 |
|
$head['meta'] = implode( "\n", $head['meta'] ); |
| 2649 |
|
|
| 2650 |
$my = mamboCore::get('currentUser'); |
$my = mamboCore::get('currentUser'); |
| 2651 |
if ( $my->id ) { |
$head['mambojavascript'] = $my->id ? '<script type="text/javascript" src="'.mamboCore::get('mosConfig_live_site').'/includes/js/mambojavascript.js"></script>' : ''; |
| 2652 |
?> |
|
| 2653 |
<script language="JavaScript1.2" src="<?php echo $mosConfig_live_site;?>/includes/js/mambojavascript.js" type="text/javascript"></script> |
$head['custom'] = array(); |
| 2654 |
<?php |
foreach ($this->_head['custom'] as $html) |
| 2655 |
} |
if (trim($html) !== '') |
| 2656 |
|
$head['custom'][] = $html; |
| 2657 |
|
if (count($head['custom']) !== 0) |
| 2658 |
|
$head['custom'] = implode( "\n", $head['custom'] ); |
| 2659 |
|
else |
| 2660 |
|
$head['custom'] = ''; |
| 2661 |
|
|
| 2662 |
|
ob_start(); |
| 2663 |
$this->liveBookMark(); |
$this->liveBookMark(); |
| 2664 |
// outputs link tag for page |
$head['livebookmark'] = ob_get_contents(); |
| 2665 |
|
ob_end_clean(); |
| 2666 |
|
|
| 2667 |
$configuration =& mamboCore::getMamboCore(); |
$configuration =& mamboCore::getMamboCore(); |
| 2668 |
?> |
$head['favicon'] = "<link rel=\"shortcut icon\" href=\"".$configuration->getFavIcon()."\" />"; |
|
<link rel="shortcut icon" href="<?php echo $configuration->getFavIcon();?>" /> |
|
|
<?php |
|
|
} |
|
| 2669 |
|
|
| 2670 |
|
foreach($head as $key=>$value) |
| 2671 |
|
$this->_head['output'][$key] = "$value"; |
| 2672 |
|
|
| 2673 |
|
$tags = $this->_head['output']; |
| 2674 |
|
if (count($keys) == 0) { |
| 2675 |
|
foreach($tags as $key=>$value) |
| 2676 |
|
if (!in_array($key, $exclude)) |
| 2677 |
|
if ($value !== '') |
| 2678 |
|
echo trim($value)."\n"; |
| 2679 |
|
} else { |
| 2680 |
|
foreach($keys as $key) |
| 2681 |
|
if (isset($tags[$key])) |
| 2682 |
|
if(trim($tags[$key]) !== '') |
| 2683 |
|
echo trim($tags[$key])."\n"; |
| 2684 |
|
} |
| 2685 |
|
} |
| 2686 |
|
|
| 2687 |
/** |
/** |
| 2688 |
* retained for backward compatability |
* retained for backward compatability |
| 3631 |
//$Debug [$Group][$Number] = "Message, can by with $Value"; |
//$Debug [$Group][$Number] = "Message, can by with $Value"; |
| 3632 |
//$Group[0] - Errors |
//$Group[0] - Errors |
| 3633 |
//$Group[1] - Notice |
//$Group[1] - Notice |
| 3634 |
$Debug[0][0] = "Error, can NOT read file: " . $Value . "<br>"; |
$Debug[0][0] = "Error, can NOT read file: " . $Value . "<br />"; |
| 3635 |
$Debug[0][1] = "Error, can't find maching char \"". $Value ."\" in destination encoding table!" . "<br>"; |
$Debug[0][1] = "Error, can't find maching char \"". $Value ."\" in destination encoding table!" . "<br />"; |
| 3636 |
$Debug[0][2] = "Error, can't find maching char \"". $Value ."\" in source encoding table!" . "<br>"; |
$Debug[0][2] = "Error, can't find maching char \"". $Value ."\" in source encoding table!" . "<br />"; |
| 3637 |
$Debug[0][3] = "Error, you did NOT set variable " . $Value . " in Convert() function." . "<br>"; |
$Debug[0][3] = "Error, you did NOT set variable " . $Value . " in Convert() function." . "<br />"; |
| 3638 |
$Debug[0][4] = "You can NOT convert string from " . $Value . " to " . $Value . "!" . "<BR>"; |
$Debug[0][4] = "You can NOT convert string from " . $Value . " to " . $Value . "!" . "<br />"; |
| 3639 |
$Debug[1][0] = "Notice, you are trying to convert string from ". $Value ." to ". $Value .", don't you feel it's strange? ;-)" . "<br>"; |
$Debug[1][0] = "Notice, you are trying to convert string from ". $Value ." to ". $Value .", don't you feel it's strange? ;-)" . "<br />"; |
| 3640 |
$Debug[1][1] = "Notice, both charsets " . $Value . " are identical! Check encoding tables files." . "<br>"; |
$Debug[1][1] = "Notice, both charsets " . $Value . " are identical! Check encoding tables files." . "<br />"; |
| 3641 |
$Debug[1][2] = "Notice, there is no unicode char in the string you are trying to convert." . "<br>"; |
$Debug[1][2] = "Notice, there is no unicode char in the string you are trying to convert." . "<br />"; |
| 3642 |
|
|
| 3643 |
if (DEBUG_MODE >= $Group) |
if (DEBUG_MODE >= $Group) |
| 3644 |
{ |
{ |
| 3647 |
} // function DebugOutput |
} // function DebugOutput |
| 3648 |
|
|
| 3649 |
} //class ends here |
} //class ends here |
| 3650 |
|
|
| 3651 |
?> |
?> |