diff --git a/.env b/.env new file mode 100644 index 0000000..759b611 --- /dev/null +++ b/.env @@ -0,0 +1,9 @@ +# config BDD + +DB_CONNECTION=mysql +DB_HOSTNAME=boulayoune.com +DB_DATABASE=projet_folliow +DB_USERNAME= +DB_PASSWORD= + +IMG_PATH= uploads/projects/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index 68b4719..183434a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ /templates_c/ /templates_c/** -.env \ No newline at end of file +.env diff --git a/composer.json b/composer.json index 6354a55..c44dd27 100644 --- a/composer.json +++ b/composer.json @@ -8,13 +8,13 @@ }, "autoload": { "psr-4": { - "Yasse\\Projetphp\\": "src/" + "Guill\\Guillaume\\": "src/" } }, "authors": [ { - "name": "Yasder5", - "email": "102179445+Yasder5@users.noreply.github.com" + "name": "GuillaumeH-Cci", + "email": "guillaume.hess@ccicampus.fr" } ] } diff --git a/composer.lock b/composer.lock index 24506a7..e54fc18 100644 --- a/composer.lock +++ b/composer.lock @@ -227,16 +227,16 @@ }, { "name": "smarty/smarty", - "version": "v5.7.0", + "version": "v5.8.0", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "73da7e90f302175a570662fcb0ba41f57b7a92ab" + "reference": "78d259d3b971c59a0cd719c270cc5cbb740c36a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/73da7e90f302175a570662fcb0ba41f57b7a92ab", - "reference": "73da7e90f302175a570662fcb0ba41f57b7a92ab", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/78d259d3b971c59a0cd719c270cc5cbb740c36a7", + "reference": "78d259d3b971c59a0cd719c270cc5cbb740c36a7", "shasum": "" }, "require": { @@ -291,7 +291,7 @@ "support": { "forum": "https://github.com/smarty-php/smarty/discussions", "issues": "https://github.com/smarty-php/smarty/issues", - "source": "https://github.com/smarty-php/smarty/tree/v5.7.0" + "source": "https://github.com/smarty-php/smarty/tree/v5.8.0" }, "funding": [ { @@ -299,7 +299,7 @@ "type": "github" } ], - "time": "2025-11-19T21:36:38+00:00" + "time": "2026-02-15T14:27:15+00:00" }, { "name": "symfony/polyfill-ctype", diff --git a/controllers/page_controller.php b/controllers/page_controller.php new file mode 100644 index 0000000..c7ff933 --- /dev/null +++ b/controllers/page_controller.php @@ -0,0 +1,17 @@ +_display("help"); + + } + } \ No newline at end of file diff --git a/controllers/project_controller.php b/controllers/project_controller.php index 47f9372..a354734 100644 --- a/controllers/project_controller.php +++ b/controllers/project_controller.php @@ -25,7 +25,7 @@ public function home(){ - $intCategory = 0; + $intCategory = 0; if (!empty($_GET['filter_cat'])) { $intCategory = (int) $_GET['filter_cat']; } @@ -88,87 +88,170 @@ $this->_arrData['arrProject'] = $arrProject; $this->_arrData['arrUser'] = $arrUser; - - - $this->_display("search"); } /** * Fonction d'affichage de la page projet + * @author Christel adapter par Guillaume */ - public function project (){ + public function addedit_project() { + if (!isset($_SESSION['user'])){ // Pas d'utilisateur connecté + header("Location:index.php?ctrl=error&action=error_403"); + exit; + } + + $objProject = new Project; + $objProjectModel = new ProjectModel; + $objCategoryModel = new CategoryModel; + + // dans la cas de modif + if (isset($_GET['id'])){ + $arrProject = $objProjectModel->findOne($_GET['id']); + $objProject->hydrate($arrProject); // BDD + } + + // Tester le formulaire + $arrError = []; + if (count($_POST) > 0) { + + $objProject->hydrate($_POST); // Formulaire + if ($objProject->getTitle() == ""){ + $arrError['title'] = "Le titre est obligatoire"; + } + + if ($objProject->getDescription() == ""){ + $arrError['description'] = "La description est obligatoire"; + } + + if ($objProject->getContent() == ""){ + $arrError['content'] = "Le contenu est obligatoire"; + } + + // Vérification de l'image + $arrTypeAllowed = array('image/jpeg', 'image/png', 'image/webp'); + if ($_FILES['thumbnail']['error'] != 4){ + if (!in_array($_FILES['thumbnail']['type'], $arrTypeAllowed)){ + $arrError['thumbnail'] = "Le type de fichier n'est pas autorisé"; + }else{ + // Vérification des codes d'erreur + switch ($_FILES['thumbnail']['error']){ + case 0 : + // Renommage de l'image + $strImageName = uniqid().".webp"; + + // Récupère le nom de l'image avant changement + $strOldImg = $objProject->getThumbnail(); + // Mise à jour du nom de l'image dans l'objet + $objProject->setThumbnail($strImageName); + break; + case 1 : + case 2 : + $arrError['thumbnail'] = "Le fichier est trop volumineux"; + break; + case 3 : + $arrError['thumbnail'] = "Le fichier a été partiellement téléchargé"; + break; + case 6 : + $arrError['thumbnail'] = "Le répertoire temporaire est manquant"; + break; + default : + $arrError['thumbnail'] = "Erreur sur l'image"; + break; + } + } + + }else{ + // Est-ce que le fichier existe ? + if (is_null($objProject->getThumbnail())){ + $arrError['thumbnail'] = "L'image est obligatoire"; + } + } - $objProjectModel = new ProjectModel; - $arrProject = $objProjectModel->findAll(4); - $arrProjectToDisplay = array(); - foreach($arrProject as $arrDetProject){ - $objProject = new Project; - $objProject->hydrate($arrDetProject); - $arrProjectToDisplay[] = $objProject; - } + // SI pas d'erreur : on traite l'image depuis la bdd + if (count($arrError) == 0){ - $objImageModel = new ImageModel; - $arrImage = $objImageModel->findAllImage(4); - $arrImageToDisplay = array(); - foreach($arrImage as $arrDetImage){ - $objImage = new Image; - $objImage->hydrate($arrDetImage); - $arrImageToDisplay[] = $objImage; - } - //Variable data - $_SESSION['title'] = $_POST['titleProject']??""; - $_SESSION['description'] = $_POST['descProject']??""; - $_SESSION['content'] = $_POST['textProject']??""; - $_SESSION['thumbnail'] = $_FILES['imageThumbnail']['name']??""; - $_SESSION['status'] = 'en_attente'; - $_SESSION['user_id'] = $_SESSION['user']['user_id']; + $boolImageOk = true; + // Redimensionnement de l'image + if (isset($strImageName)){ + $strDest = $_ENV['IMG_PATH'].$strImageName; + $strSource = $_FILES['thumbnail']['tmp_name']; + list($intWidth, $intHeight) = getimagesize($strSource); + + $intDestWidth = 200; $intDestHeight = 250; + $fltDestRatio = $intDestWidth / $intDestHeight; + $fltSourceRatio = $intWidth / $intHeight; + + if ($fltSourceRatio > $fltDestRatio) { + $intCropHeight = $intHeight; + $intCropWidth = (int)round($intHeight * $fltDestRatio); + $intCropX = (int)(($intWidth - $intCropWidth) / 2); + $intCropY = 0; + } else { + $intCropWidth = $intWidth; + $intCropHeight = (int)round($intWidth / $fltDestRatio); + $intCropX = 0; + $intCropY = (int)(($intHeight - $intCropHeight) / 2); + } + + // Condition en fonction de l'extension de l'image + $objDest = imagecreatetruecolor($intDestWidth, $intDestHeight); + switch ($_FILES['thumbnail']['type']) { + case 'image/jpeg' : + $objSource = imagecreatefromjpeg($strSource); + break; + case 'image/png' : + $objSource = imagecreatefrompng($strSource); + break; + case 'image/webp' : + $objSource = imagecreatefromwebp($strSource); + break; + } + + imagecopyresampled($objDest, $objSource, 0, 0, $intCropX, $intCropY, $intDestWidth, $intDestHeight, $intCropWidth, $intCropHeight); + + // Sauvegarde du fichier + $boolImageOk = imagewebp($objDest, $strDest); + imagedestroy($objDest); + imagedestroy($objSource); + } - $objProject = new Project(); + // SI image ok, on balance tout dans la bdd + if ($boolImageOk){ + if (!isset($_GET['id'])){ + $objProject->setUser_id($_SESSION['user']['user_id']); + $boolOk = $objProjectModel->insert($objProject); + } else { + $boolOk = $objProjectModel->updateProject($objProject); + } - /** - * Créer par Besnik le GOAT et l'autre GOAT de Guillaume - * - * @return bool pour savoir si le fichier existe, - * puis déplace vers le fichier uploads avec les images projet des utilisateurs - * Communication avec la BDD - */ - if (($_SESSION['thumbnail'] != null)){ - $strDest = ""; - if ((count($_FILES) > 0) && ($_FILES['imageProject']['error'] != 4)){ - $strDest = 'uploads/projects/'.$_FILES['imageProject']['name']; - move_uploaded_file($_FILES['imageProject']['tmp_name'], $strDest); - } - } + if ($boolOk){ + // Suppression de l'ancienne image + if(isset($strOldImg) && !empty($strOldImg) && isset($strImageName)){ + $strOldFile = $_ENV['IMG_PATH'].$strOldImg; + if (file_exists($strOldFile)) unlink($strOldFile); + } - /** En cas d'appuis sur le bouton d'envoie ou celui de remettre a plus tard - * 1. Changement de status - * 2. Hydratation avec les informations récupéré de l'utilisateur - * 3. Envoie des données à la BDD - */ - if (isset($_POST['sendMessage'])) { - $_SESSION['status'] = 'publié'; - $objProject->hydrate($_SESSION); - $objProject->setThumbnail($strDest); - var_dump($strDest); - var_dump($objProject); - $objProjectModel->insert($objProject); + $_SESSION['success'] = (!isset($_GET['id'])) ? "Le projet a bien été créé" : "Le projet a bien été modifié"; + header("Location:index.php"); + exit; + } else { + $arrError[] = "Erreur lors de l'enregistrement en base de données"; + } + } else { + $arrError['thumbnail'] = "Erreur dans le traitement de l'image"; + } + } + } - } else if (isset($_POST['toContinue'])) { - $objProject->hydrate($_SESSION); - $objProject->setThumbnail($strDest); - $objProjectModel->insert($objProject); - } - - var_dump($_SESSION); - var_dump($objProject); - $this->_arrData['arrProjectToDiplay'] = $arrProjectToDisplay; - $this->_arrData['arrImageToDiplay'] = $arrImageToDisplay; - - $this->_display("project"); - } + // Données pour la vue + $this->_arrData['arrCategory'] = $objCategoryModel->findAllCategory(); + $this->_arrData['objProject'] = $objProject; + $this->_arrData['arrError'] = $arrError; + $this->_display('addedit_project'); + } public function display() { $intId = $_GET['id'] ?? null; @@ -193,74 +276,68 @@ } } - public function sendEmail(){ - if (count($_POST) > 0) { - + public function shareProject(){ + if (count($_POST) > 0) + { $projectId = (int)($_POST['project_id'] ?? 0); $toEmail = trim($_POST['to_email'] ?? ''); - - if ($projectId <= 0 || !filter_var($toEmail, FILTER_VALIDATE_EMAIL)) { - header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=fail"); - exit; - } - + $objProjectModel = new ProjectModel(); $arrProject = $objProjectModel->findOne($projectId); - + if (!$arrProject) { header("Location: index.php?ctrl=project&action=home"); exit; } - + $objProject = new Project(); $objProject->hydrate($arrProject); - - - - $objMail = new PHPMailer(); // Nouvel objet Mail + + $objMail = new PHPMailer(); $objMail->IsSMTP(); - $objMail->Mailer = "smtp"; - $objMail->CharSet = PHPMailer::CHARSET_UTF8; - - $objMail->SMTPDebug = 0; - - - $objMail->SMTPAuth = TRUE; - $objMail->SMTPSecure = "tls"; - $objMail->Port = 587; - $objMail->Host = "smtp.gmail.com"; - $objMail->Username = "projet.folliow@gmail.com"; - $objMail->Password = "dqnw mqbu cwvg enbp"; - + $objMail->Mailer = "smtp"; + $objMail->CharSet = PHPMailer::CHARSET_UTF8; + $objMail->SMTPDebug = 0; + + $objMail->SMTPAuth = true; + $objMail->SMTPSecure = "tls"; + $objMail->Port = 587; + $objMail->Host = 'smtp-relay.brevo.com'; + $objMail->Username = 'a2a67e001@smtp-brevo.com'; + $objMail->Password = 'xsmtpsib-f2af87e12d3db6f1b99802a92c1acda32d45fc32a8446eeed7e49ec91c4ec7ef-AX8Y7YkRWYSmKHwS'; + + // Désactive la vérification du certificat SSL + // Cela permet d'éviter les erreurs liées au certificat, mais réduit la sécurité de la connexion. + $objMail->SMTPOptions = [ + 'ssl' => [ + 'verify_peer' => false, + ], + ]; + + $objMail->IsHTML(true); - - - $objMail->setFrom('projet.folliow@gmail.com', 'Projet Folliow'); - - - // Destinataire + + $objMail->setFrom('projet.folliow@hotmail.com', 'Folliow'); $objMail->addAddress($toEmail); - - // Mail + $objMail->Subject = "Projet : " . $objProject->getTitle(); - - $url = "http://localhost/projet_php/public/index.php?ctrl=project&action=display&id=" . $projectId; - - $objMail->Body = - "
" . $objProject->getDescription() . "
" . - ""; - - // Envoi + redirection + + $url = "https://php.boulayoune.com/index.php?ctrl=project&action=display&id=" . $projectId; + + $this->_arrData['projectTitle'] = $objProject->getTitle(); + $this->_arrData['projectDescription'] = $objProject->getDescription(); + $this->_arrData['projectUrl'] = $url; + + $objMail->Body = $this->_display("mail_message", false); + if ($objMail->Send()) { header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=ok"); } else { - // Pour debug si besoin: echo $objMail->ErrorInfo; exit; header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=fail"); } exit; } - + header("Location: index.php?ctrl=project&action=home"); exit; } @@ -306,4 +383,22 @@ header("Location: index.php"); exit; } - } \ No newline at end of file + + /** + * Page mentions légales + */ + public function mentions(){ + // Afficher + $this->_display("mentions"); + } + + + /** + * Page à propos + */ + public function about(){ + // Afficher + $this->_display("about"); + } + + } diff --git a/controllers/user_controller.php b/controllers/user_controller.php index 1ccd6b2..d981df7 100644 --- a/controllers/user_controller.php +++ b/controllers/user_controller.php @@ -309,4 +309,5 @@ class UserCtrl extends MotherCtrl { $this->_display("useredit"); } + } diff --git a/entities/image_entity.php b/entities/image_entity.php index b919d67..29588a1 100644 --- a/entities/image_entity.php +++ b/entities/image_entity.php @@ -2,11 +2,11 @@ require_once("mother_entity.php"); -/** - * Classe d'un objet Projet - * @author Laura - */ + /** + * Classe d'un objet Projet + * @author Laura + */ class Image extends Entity{ private int $_id; diff --git a/entities/project_entity.php b/entities/project_entity.php index cb8548a..8f5ae79 100644 --- a/entities/project_entity.php +++ b/entities/project_entity.php @@ -7,15 +7,15 @@ require_once("mother_entity.php"); class Project extends Entity{ - private int $_id; - private string $_title; - private string $_description; - private string $_thumbnail; - private string $_content; + private ?int $_id = null; + private string $_title = ""; + private string $_description = ""; + private ?string $_thumbnail = null; + private string $_content = ""; private string $_creation_date; - private string $_status; + private string $_status = "en_attente"; private int $_user; - private int $_category; + private int $_category = 0; private string $_creatorname; private string $_user_image; @@ -33,7 +33,7 @@ class Project extends Entity{ * Récuperation de l'id du Projet * @return int l'id du projet */ - public function getId():int{ + public function getId():?int{ return $this->_id; } @@ -110,7 +110,6 @@ class Project extends Entity{ $this->_content = $content; } - /** * Récupération de la date de création * @param string lang de formatage de la date (par défaut = "fr_FR") @@ -173,7 +172,7 @@ class Project extends Entity{ * Récupération de la catégorie * @return int id de la catégorie */ - public function getCategory(){ + public function getCategory():?int{ return $this->_category; } diff --git a/index.php b/index.php index ae6424c..320007f 100644 --- a/index.php +++ b/index.php @@ -1,7 +1,7 @@ _db->prepare($strRq); @@ -100,6 +100,8 @@ $rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR); $rqPrep->bindValue(":content", $objProject->getContent(), PDO::PARAM_STR); $rqPrep->bindValue(":status", $objProject->getStatus(), PDO::PARAM_STR); + $rqPrep->bindValue(":project_user_id", $objProject->getUser_id(), PDO::PARAM_STR); + $rqPrep->bindValue(":project_category", $objProject->getCategory(), PDO::PARAM_STR); return $rqPrep->execute(); } @@ -108,7 +110,7 @@ * Fonction de recherche d'un seul projet * @param int $intId * @return array - */ + */ public function findOne(int $intId) :array{ $strRq = "SELECT project.*, CONCAT(users.user_firstname, ' ', users.user_name) AS 'project_creatorname', @@ -126,6 +128,12 @@ return $rqPrep->fetch(); } + /** + * Fonction de changement de status (accepter) d'un projet en BDD + * @author Guillaume + * @param int $id l'id du projet + * @return bool Est-ce que la requête s'est bien passée + */ public function accept(int $id){ //SQL pour changer le status en accept @@ -137,6 +145,12 @@ return $this->_db->query($strRq); } + /** + * Fonction de changement de status (refusé) d'un projet en BDD + * @author Guillaume + * @param int $id l'id du projet + * @return bool Est-ce que la requête s'est bien passée + */ public function refuse(int $id){ $strRq = "UPDATE project @@ -145,7 +159,13 @@ return $this->_db->query($strRq); } - + + /** + * Fonction de suppression d'un projet en BDD + * @author Guillaume + * @param int $id l'id du projet + * @return bool Est-ce que la requête s'est bien passée + */ public function delete(int $id){ $strRq = "DELETE FROM project @@ -156,23 +176,58 @@ /** * Fonction de mise à jour d'un projet en BDD + * @author Guillaume * @param object $objProject L'objet utilisateur * @return bool Est-ce que la requête s'est bien passée */ public function updateProject(object $objProject):bool{ + + $strRq = "UPDATE project + SET project_title = :title, + project_description = :description, + project_content = :content, + project_thumbnail = :thumbnail + WHERE project_id = :id"; - $strRq = "UPDATE project - SET project_title = :title, project_description = :description, project_content = :content - WHERE project_id = :id"; - - $rqPrep = $this->_db->prepare($strRq); + $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR); $rqPrep->bindValue(":description", $objProject->getDescription(), PDO::PARAM_STR); $rqPrep->bindValue(":content", $objProject->getContent(), PDO::PARAM_STR); + $rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR); + $rqPrep->bindValue(":id", $objProject->getId(), PDO::PARAM_INT); - - // Executer la requête return $rqPrep->execute(); } + + public function getImagesByProjectId(int $projectId): array { + $strRq = "SELECT image_id, image_name, image_alt + FROM image + WHERE image_project = :id AND image_status = 1"; + + $rqPrep = $this->_db->prepare($strRq); + $rqPrep->bindValue(":id", $projectId, PDO::PARAM_INT); + $rqPrep->execute(); + + return $rqPrep->fetchAll(PDO::FETCH_ASSOC); + } + + public function addImageInProject(string $fileName, int $projectId, string $alt = "Image projet"): bool { + $strRq = "INSERT INTO image ( + image_name, + image_alt, + image_status, + image_project + ) + VALUES (:name, :alt, :status, :project)"; + + $rqPrep = $this->_db->prepare($strRq); + + $rqPrep->bindValue(":name", $fileName, PDO::PARAM_STR); + $rqPrep->bindValue(":alt", $alt, PDO::PARAM_STR); + $rqPrep->bindValue(":status", "en_attente", PDO::PARAM_STR); // Valeur string brute + $rqPrep->bindValue(":project", $projectId, PDO::PARAM_INT); + + return $rqPrep->execute(); + } } \ No newline at end of file diff --git a/uploads/projects/320px-Mad_Researcher_of_the_Ring__Idle_Sprite.webp b/uploads/projects/320px-Mad_Researcher_of_the_Ring__Idle_Sprite.webp deleted file mode 100644 index 13d2019..0000000 Binary files a/uploads/projects/320px-Mad_Researcher_of_the_Ring__Idle_Sprite.webp and /dev/null differ diff --git a/uploads/projects/6998730421d82.webp b/uploads/projects/6998730421d82.webp new file mode 100644 index 0000000..3582ecf Binary files /dev/null and b/uploads/projects/6998730421d82.webp differ diff --git a/uploads/projects/6998793d6b378.webp b/uploads/projects/6998793d6b378.webp new file mode 100644 index 0000000..89961e9 Binary files /dev/null and b/uploads/projects/6998793d6b378.webp differ diff --git a/uploads/projects/6998903db4a2d.webp b/uploads/projects/6998903db4a2d.webp new file mode 100644 index 0000000..70feb5e Binary files /dev/null and b/uploads/projects/6998903db4a2d.webp differ diff --git a/uploads/projects/800px-You_Want_To_Get_Beat__Hurtily__Idle_Sprite.webp b/uploads/projects/800px-You_Want_To_Get_Beat__Hurtily__Idle_Sprite.webp deleted file mode 100644 index 2429e06..0000000 Binary files a/uploads/projects/800px-You_Want_To_Get_Beat__Hurtily__Idle_Sprite.webp and /dev/null differ diff --git a/uploads/projects/Capture d'écran 2025-11-06 161706.png b/uploads/projects/Capture d'écran 2025-11-06 161706.png deleted file mode 100644 index 2b88717..0000000 Binary files a/uploads/projects/Capture d'écran 2025-11-06 161706.png and /dev/null differ diff --git a/uploads/projects/Capture d'écran 2026-01-15 144610.png b/uploads/projects/Capture d'écran 2026-01-15 144610.png deleted file mode 100644 index cd2ab68..0000000 Binary files a/uploads/projects/Capture d'écran 2026-01-15 144610.png and /dev/null differ diff --git a/uploads/projects/Capture d'écran 2026-01-20 140950.png b/uploads/projects/Capture d'écran 2026-01-20 140950.png deleted file mode 100644 index 02b7d0b..0000000 Binary files a/uploads/projects/Capture d'écran 2026-01-20 140950.png and /dev/null differ diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 72ffe23..5451b88 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -6,13 +6,13 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( - 'Yasse\\Projetphp\\' => array($baseDir . '/src'), 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Smarty\\' => array($vendorDir . '/smarty/smarty/src'), 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'), 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'), + 'Guill\\Guillaume\\' => array($baseDir . '/src'), 'GrahamCampbell\\ResultType\\' => array($vendorDir . '/graham-campbell/result-type/src'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index c6819f4..a7c1951 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -14,10 +14,6 @@ class ComposerStaticInit68f8d029d347b4c0c8cdbe33eeb96101 ); public static $prefixLengthsPsr4 = array ( - 'Y' => - array ( - 'Yasse\\Projetphp\\' => 16, - ), 'S' => array ( 'Symfony\\Polyfill\\Php80\\' => 23, @@ -32,6 +28,7 @@ class ComposerStaticInit68f8d029d347b4c0c8cdbe33eeb96101 ), 'G' => array ( + 'Guill\\Guillaume\\' => 16, 'GrahamCampbell\\ResultType\\' => 26, ), 'D' => @@ -41,10 +38,6 @@ class ComposerStaticInit68f8d029d347b4c0c8cdbe33eeb96101 ); public static $prefixDirsPsr4 = array ( - 'Yasse\\Projetphp\\' => - array ( - 0 => __DIR__ . '/../..' . '/src', - ), 'Symfony\\Polyfill\\Php80\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', @@ -69,6 +62,10 @@ class ComposerStaticInit68f8d029d347b4c0c8cdbe33eeb96101 array ( 0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src', ), + 'Guill\\Guillaume\\' => + array ( + 0 => __DIR__ . '/../..' . '/src', + ), 'GrahamCampbell\\ResultType\\' => array ( 0 => __DIR__ . '/..' . '/graham-campbell/result-type/src', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index ae3a4b2..825c8e5 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -230,17 +230,17 @@ }, { "name": "smarty/smarty", - "version": "v5.7.0", - "version_normalized": "5.7.0.0", + "version": "v5.8.0", + "version_normalized": "5.8.0.0", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "73da7e90f302175a570662fcb0ba41f57b7a92ab" + "reference": "78d259d3b971c59a0cd719c270cc5cbb740c36a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/73da7e90f302175a570662fcb0ba41f57b7a92ab", - "reference": "73da7e90f302175a570662fcb0ba41f57b7a92ab", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/78d259d3b971c59a0cd719c270cc5cbb740c36a7", + "reference": "78d259d3b971c59a0cd719c270cc5cbb740c36a7", "shasum": "" }, "require": { @@ -251,7 +251,7 @@ "phpunit/phpunit": "^8.5 || ^7.5", "smarty/smarty-lexer": "^4.0.2" }, - "time": "2025-11-19T21:36:38+00:00", + "time": "2026-02-15T14:27:15+00:00", "type": "library", "extra": { "branch-alias": { @@ -297,7 +297,7 @@ "support": { "forum": "https://github.com/smarty-php/smarty/discussions", "issues": "https://github.com/smarty-php/smarty/issues", - "source": "https://github.com/smarty-php/smarty/tree/v5.7.0" + "source": "https://github.com/smarty-php/smarty/tree/v5.8.0" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 9d8bef7..a49551a 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'yasse/projetphp', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => 'ea3892886993812ca42db7f03050df59d2c2163c', + 'reference' => '18301190fcc0a817bf05ee42b03b5e9388fd9429', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -38,9 +38,9 @@ 'dev_requirement' => false, ), 'smarty/smarty' => array( - 'pretty_version' => 'v5.7.0', - 'version' => '5.7.0.0', - 'reference' => '73da7e90f302175a570662fcb0ba41f57b7a92ab', + 'pretty_version' => 'v5.8.0', + 'version' => '5.8.0.0', + 'reference' => '78d259d3b971c59a0cd719c270cc5cbb740c36a7', 'type' => 'library', 'install_path' => __DIR__ . '/../smarty/smarty', 'aliases' => array(), @@ -85,7 +85,7 @@ 'yasse/projetphp' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => 'ea3892886993812ca42db7f03050df59d2c2163c', + 'reference' => '18301190fcc0a817bf05ee42b03b5e9388fd9429', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md index 5922543..da75ec2 100644 --- a/vendor/smarty/smarty/CHANGELOG.md +++ b/vendor/smarty/smarty/CHANGELOG.md @@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [5.8.0] - 2026-02-15 +- Added support for Backed Enums for php versions >= 8.1 [#1171](https://github.com/smarty-php/smarty/pull/1171) +- Added support for new 'matches' operator doing regex matching [#1169](https://github.com/smarty-php/smarty/pull/1169) +- Update documentation to clarify that include inline is currently not implemented in Smarty v5 [#1152](https://github.com/smarty-php/smarty/issues/1152) +- Support for Laravel Collections style object chaining for objects return from function calls implemented as modifiers [#1151](https://github.com/smarty-php/smarty/issues/1151) + + ## [5.7.0] - 2025-11-19 - PHP 8.5 support diff --git a/vendor/smarty/smarty/CONTRIBUTING.md b/vendor/smarty/smarty/CONTRIBUTING.md index 8dfdf32..9cba362 100644 --- a/vendor/smarty/smarty/CONTRIBUTING.md +++ b/vendor/smarty/smarty/CONTRIBUTING.md @@ -115,5 +115,7 @@ If you are a maintainer, you can publish the document using [mike](https://githu mike deploy 5.x ``` +Then, push the `gh-pages` branch. + ## Attribution This guide is based on the **contributing.md**. [Make your own](https://contributing.md/)! diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md index 98a5653..965327c 100644 --- a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md +++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-operators.md @@ -50,6 +50,120 @@ separated from surrounding elements by spaces. Note that items listed in | is \[not\] odd by | | $a is not odd by $b | \[not\] an odd grouping | ($a / $b) % 2 != 0 | | is in | | $a is in $b | exists in array | in_array($a, $b) | | is \[not\] in | | $a is not in $b | does not exist in array | !in_array($a, $b) | +| matches | | $a matches $b | regex pattern match | preg_match($b, $a) | + +## Regex Matching Operator + +The `matches` operator allows you to test if a string matches a regular expression pattern. + +### Basic Usage + +```smarty +{if "hello" matches "/^[a-z]+$/"} + String matches the pattern! +{/if} + +{if $email matches "/^[^@]+@[^@]+\.[^@]+$/"} + Valid email format +{else} + Invalid email format +{/if} +``` + +### Using Variables + +```smarty +{$pattern = '/^[a-zA-Z0-9]{8,}$/'} +{if $password matches $pattern} + Password meets requirements +{else} + Password must be at least 8 alphanumeric characters +{/if} +``` + +### Pattern Modifiers + +The `matches` operator supports all standard PHP regex modifiers: + +```smarty +{* Case insensitive matching *} +{if "HELLO" matches "/hello/i"} + Matches (case insensitive) +{/if} + +{* Multiline mode *} +{if "line1\nline2" matches "/line2$/m"} + Matches in multiline mode +{/if} + +{* Dot matches newlines *} +{if "hello\nworld" matches "/hello.world/s"} + Matches with dotall modifier +{/if} +``` + +### Complex Conditions + +The `matches` operator can be combined with other operators: + +```smarty +{if $username matches "/^[a-z]+$/" && $username|length > 3} + Valid username +{else} + Username must be lowercase letters and at least 4 characters +{/if} + +{if $input matches "/^[0-9]+$/" || $input matches "/^[a-z]+$/"} + Input is either numeric or lowercase letters +{else} + Invalid input format +{/if} +``` + +### Practical Examples + +**Email Validation:** +```smarty +{if $email matches "/^[^@\s]+@[^@\s]+\.[^@\s]+$/"} + Valid email address +{else} + Please enter a valid email address +{/if} +``` + +**Password Strength:** +```smarty +{if $password matches "/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/"} + Strong password +{else} + Password must contain uppercase, lowercase, numbers and be at least 8 characters +{/if} +``` + +**URL Validation:** +```smarty +{if $url matches "/^https?:\/\/(www\.)?[a-z0-9\-]+(\.[a-z]{2,})+/i"} + Valid URL format +{else} + Please enter a valid URL +{/if} +``` + +**Numeric Validation:** +```smarty +{if $input matches "/^[0-9]+$/"} + Valid numeric input +{else} + Please enter numbers only +{/if} +``` + +### Notes + +- The `matches` operator uses PHP's `preg_match()` function internally +- Pattern delimiters must be valid regex delimiters (typically `/`) +- Invalid patterns will cause PHP warnings but won't break template execution +- For complex regex patterns, consider using variables for better readability ## Ternary You can use the `?:` (or ternary) operator to test one expression and present the value diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md index 0710db7..28d208e 100644 --- a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md +++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md @@ -47,11 +47,13 @@ available within the included template. ## Option Flags -| Name | Description | -|---------|--------------------------------------------------------------------------------------| -| nocache | Disables caching of this subtemplate | -| caching | Enable caching of this subtemplate | -| inline | If set, merge the compile-code of the subtemplate into the compiled calling template | +| Name | Description | +|-----------|--------------------------------------------------------------------------------------| +| nocache | Disables caching of this subtemplate | +| caching | Enable caching of this subtemplate | +| inline \* | If set, merge the compile-code of the subtemplate into the compiled calling template | + +\* The `inline` option flag is currently not implemented in Smarty v5. Using it will not trigger an error, however. ## Examples ```smarty diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md index 9465a89..5dfa364 100644 --- a/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md +++ b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md @@ -123,4 +123,89 @@ this will output: ```html name: Zaphod BeeblebroxThe number of pixels is: {math equation="x * y" x=$height y=$width}.
+ ++ {if $email matches "/^[^@]+@[^@]+\.[^@]+$/"} + Valid email address + {else} + Please enter a valid email + {/if} +
+``` +```html ++ The number of pixels is: 307200. +
+ ++ Valid email address +
``` When this template is rendered, with the value "Hello world" for the variable $title, 640 for $width, diff --git a/vendor/smarty/smarty/src/Cacheresource/File.php b/vendor/smarty/smarty/src/Cacheresource/File.php index 4b4198e..3cb09b5 100644 --- a/vendor/smarty/smarty/src/Cacheresource/File.php +++ b/vendor/smarty/smarty/src/Cacheresource/File.php @@ -127,8 +127,6 @@ class File extends Base && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api'))) < 1 ) { opcache_invalidate($_template->getCached()->filepath, true); - } elseif (function_exists('apc_compile_file')) { - apc_compile_file($_template->getCached()->filepath); } $cached = $_template->getCached(); $cached->timestamp = $cached->exists = is_file($cached->filepath); @@ -223,10 +221,8 @@ class File extends Base $_filepath = (string)$_file; // directory ? if ($_file->isDir()) { - if (!$_cache->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } + // delete folder if empty + @rmdir($_file->getPathname()); } else { // delete only php files if (substr($_filepath, -4) !== '.php') { @@ -279,8 +275,6 @@ class File extends Base && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) ) { opcache_invalidate($_filepath, true); - } elseif (function_exists('apc_delete_file')) { - apc_delete_file($_filepath); } } } diff --git a/vendor/smarty/smarty/src/Lexer/TemplateLexer.php b/vendor/smarty/smarty/src/Lexer/TemplateLexer.php index 2e7f330..8c28448 100644 --- a/vendor/smarty/smarty/src/Lexer/TemplateLexer.php +++ b/vendor/smarty/smarty/src/Lexer/TemplateLexer.php @@ -160,6 +160,7 @@ class TemplateLexer 'LOGOP' => '"<", "==" ... logical operator', 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', 'SCOND' => '"is even" ... if condition', + 'MATCHES' => '"matches" regex operator', ); /** @@ -567,7 +568,7 @@ class TemplateLexer public function yylex3() { if (!isset($this->yy_global_pattern3)) { - $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+(not\\s+)?in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"); + $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+(not\\s+)?in\\s+)|\G(\\s+matches\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); @@ -662,119 +663,124 @@ class TemplateLexer public function yy_r3_10() { - $this->token = \Smarty\Parser\TemplateParser::TP_AS; + $this->token = \Smarty\Parser\TemplateParser::TP_MATCHES; } public function yy_r3_11() { - $this->token = \Smarty\Parser\TemplateParser::TP_TO; + $this->token = \Smarty\Parser\TemplateParser::TP_AS; } public function yy_r3_12() { - $this->token = \Smarty\Parser\TemplateParser::TP_STEP; + $this->token = \Smarty\Parser\TemplateParser::TP_TO; } public function yy_r3_13() { - $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF; + $this->token = \Smarty\Parser\TemplateParser::TP_STEP; } public function yy_r3_14() + { + + $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF; + } + public function yy_r3_15() { $this->token = \Smarty\Parser\TemplateParser::TP_LOGOP; } - public function yy_r3_16() + public function yy_r3_17() { $this->token = \Smarty\Parser\TemplateParser::TP_SLOGOP; } - public function yy_r3_18() + public function yy_r3_19() { $this->token = \Smarty\Parser\TemplateParser::TP_TLOGOP; } - public function yy_r3_21() + public function yy_r3_22() { $this->token = \Smarty\Parser\TemplateParser::TP_SINGLECOND; } - public function yy_r3_24() + public function yy_r3_25() { $this->token = \Smarty\Parser\TemplateParser::TP_NOT; } - public function yy_r3_25() + public function yy_r3_26() { $this->token = \Smarty\Parser\TemplateParser::TP_TYPECAST; } - public function yy_r3_29() + public function yy_r3_30() { $this->token = \Smarty\Parser\TemplateParser::TP_OPENP; } - public function yy_r3_30() + public function yy_r3_31() { $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEP; } - public function yy_r3_31() + public function yy_r3_32() { $this->token = \Smarty\Parser\TemplateParser::TP_OPENB; } - public function yy_r3_32() + public function yy_r3_33() { $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEB; } - public function yy_r3_33() + public function yy_r3_34() { $this->token = \Smarty\Parser\TemplateParser::TP_PTR; } - public function yy_r3_34() + public function yy_r3_35() { $this->token = \Smarty\Parser\TemplateParser::TP_APTR; } - public function yy_r3_35() + public function yy_r3_36() { $this->token = \Smarty\Parser\TemplateParser::TP_EQUAL; } - public function yy_r3_36() + public function yy_r3_37() { $this->token = \Smarty\Parser\TemplateParser::TP_INCDEC; } - public function yy_r3_38() + public function yy_r3_39() { $this->token = \Smarty\Parser\TemplateParser::TP_UNIMATH; } - public function yy_r3_40() + public function yy_r3_41() { $this->token = \Smarty\Parser\TemplateParser::TP_MATH; } - public function yy_r3_42() + public function yy_r3_43() { $this->token = \Smarty\Parser\TemplateParser::TP_AT; } - public function yy_r3_43() + public function yy_r3_44() { $this->token = \Smarty\Parser\TemplateParser::TP_ARRAYOPEN; } - public function yy_r3_44() + public function yy_r3_45() { $this->token = \Smarty\Parser\TemplateParser::TP_HATCH; } - public function yy_r3_45() + public function yy_r3_46() { // resolve conflicts with shorttag and right_delimiter starting with '=' @@ -786,73 +792,73 @@ class TemplateLexer $this->token = \Smarty\Parser\TemplateParser::TP_ATTR; } } - public function yy_r3_46() + public function yy_r3_47() { $this->token = \Smarty\Parser\TemplateParser::TP_NAMESPACE; } - public function yy_r3_49() + public function yy_r3_50() { $this->token = \Smarty\Parser\TemplateParser::TP_ID; } - public function yy_r3_50() + public function yy_r3_51() { $this->token = \Smarty\Parser\TemplateParser::TP_INTEGER; } - public function yy_r3_51() + public function yy_r3_52() { $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK; $this->yypopstate(); } - public function yy_r3_52() + public function yy_r3_53() { $this->token = \Smarty\Parser\TemplateParser::TP_VERT; } - public function yy_r3_53() + public function yy_r3_54() { $this->token = \Smarty\Parser\TemplateParser::TP_DOT; } - public function yy_r3_54() + public function yy_r3_55() { $this->token = \Smarty\Parser\TemplateParser::TP_COMMA; } - public function yy_r3_55() + public function yy_r3_56() { $this->token = \Smarty\Parser\TemplateParser::TP_SEMICOLON; } - public function yy_r3_56() + public function yy_r3_57() { $this->token = \Smarty\Parser\TemplateParser::TP_DOUBLECOLON; } - public function yy_r3_57() + public function yy_r3_58() { $this->token = \Smarty\Parser\TemplateParser::TP_COLON; } - public function yy_r3_58() + public function yy_r3_59() { $this->token = \Smarty\Parser\TemplateParser::TP_QMARK; } - public function yy_r3_59() + public function yy_r3_60() { $this->token = \Smarty\Parser\TemplateParser::TP_HEX; } - public function yy_r3_60() + public function yy_r3_61() { $this->token = \Smarty\Parser\TemplateParser::TP_SPACE; } - public function yy_r3_61() + public function yy_r3_62() { $this->token = \Smarty\Parser\TemplateParser::TP_TEXT; diff --git a/vendor/smarty/smarty/src/Lexer/TemplateLexer.plex b/vendor/smarty/smarty/src/Lexer/TemplateLexer.plex index 282a99c..c3d0160 100644 --- a/vendor/smarty/smarty/src/Lexer/TemplateLexer.plex +++ b/vendor/smarty/smarty/src/Lexer/TemplateLexer.plex @@ -160,6 +160,7 @@ class TemplateLexer 'LOGOP' => '"<", "==" ... logical operator', 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', 'SCOND' => '"is even" ... if condition', + 'MATCHES' => '"matches" regex operator', ); /** @@ -325,6 +326,7 @@ class TemplateLexer tlop = ~\s+is\s+(not\s+)?(odd|even|div)\s+by\s+~ scond = ~\s+is\s+(not\s+)?(odd|even)~ isin = ~\s+is\s+(not\s+)?in\s+~ + matches = ~\s+matches\s+~ as = ~\s+as\s+~ to = ~\s+to\s+~ step = ~\s+step\s+~ @@ -469,6 +471,9 @@ class TemplateLexer isin { $this->token = \Smarty\Parser\TemplateParser::TP_ISIN; } + matches { + $this->token = \Smarty\Parser\TemplateParser::TP_MATCHES; + } as { $this->token = \Smarty\Parser\TemplateParser::TP_AS; } diff --git a/vendor/smarty/smarty/src/Parser/TemplateParser.php b/vendor/smarty/smarty/src/Parser/TemplateParser.php index 772df98..6414d50 100644 --- a/vendor/smarty/smarty/src/Parser/TemplateParser.php +++ b/vendor/smarty/smarty/src/Parser/TemplateParser.php @@ -260,674 +260,710 @@ class TemplateParser const TP_SLOGOP = 54; const TP_TLOGOP = 55; const TP_SINGLECOND = 56; - const TP_ARRAYOPEN = 57; - const TP_QUOTE = 58; - const TP_BACKTICK = 59; - const YY_NO_ACTION = 542; - const YY_ACCEPT_ACTION = 541; - const YY_ERROR_ACTION = 540; + const TP_MATCHES = 57; + const TP_ARRAYOPEN = 58; + const TP_QUOTE = 59; + const TP_BACKTICK = 60; + const YY_NO_ACTION = 553; + const YY_ACCEPT_ACTION = 552; + const YY_ERROR_ACTION = 551; - const YY_SZ_ACTTAB = 2565; + const YY_SZ_ACTTAB = 2723; public static $yy_action = array( - 33, 106, 269, 306, 179, 305, 200, 247, 248, 249, - 1, 264, 138, 237, 202, 361, 6, 87, 284, 222, - 338, 361, 112, 107, 400, 321, 217, 261, 218, 130, - 224, 400, 21, 400, 49, 44, 400, 32, 45, 46, - 278, 226, 400, 282, 400, 203, 400, 53, 4, 139, - 302, 231, 28, 102, 225, 5, 54, 247, 248, 249, - 1, 20, 135, 192, 193, 271, 6, 87, 246, 222, - 216, 29, 112, 229, 7, 159, 217, 261, 218, 140, - 208, 272, 21, 509, 53, 44, 13, 302, 45, 46, - 278, 226, 149, 235, 153, 203, 257, 53, 4, 328, - 302, 302, 256, 304, 143, 5, 54, 247, 248, 249, - 1, 302, 100, 394, 86, 236, 6, 87, 3, 222, - 102, 257, 112, 144, 97, 394, 217, 261, 218, 102, - 224, 394, 21, 256, 446, 44, 178, 305, 45, 46, - 278, 226, 302, 282, 200, 203, 446, 53, 4, 115, - 302, 47, 22, 285, 41, 5, 54, 247, 248, 249, - 1, 139, 137, 267, 202, 141, 6, 87, 14, 222, - 541, 99, 112, 151, 15, 446, 217, 261, 218, 314, - 224, 216, 21, 256, 233, 44, 9, 446, 45, 46, - 278, 226, 325, 282, 268, 203, 53, 53, 4, 302, - 302, 152, 257, 361, 320, 5, 54, 247, 248, 249, - 1, 264, 137, 102, 194, 361, 6, 87, 37, 222, - 102, 361, 112, 257, 89, 316, 217, 261, 218, 314, - 224, 216, 21, 36, 49, 44, 200, 40, 45, 46, - 278, 226, 115, 282, 237, 203, 14, 53, 4, 115, - 302, 238, 15, 155, 107, 5, 54, 247, 248, 249, - 1, 466, 136, 256, 202, 200, 6, 87, 466, 222, - 255, 171, 112, 264, 446, 310, 217, 261, 218, 158, - 224, 257, 11, 142, 157, 44, 446, 183, 45, 46, - 278, 226, 26, 282, 256, 203, 49, 53, 4, 446, - 302, 184, 260, 323, 176, 5, 54, 247, 248, 249, - 1, 446, 137, 264, 189, 291, 6, 87, 183, 222, - 200, 302, 112, 253, 178, 305, 217, 261, 218, 263, - 213, 18, 21, 200, 184, 44, 49, 15, 45, 46, - 278, 226, 146, 282, 269, 203, 25, 53, 4, 220, - 302, 312, 107, 152, 290, 5, 54, 247, 248, 249, - 1, 219, 137, 147, 187, 130, 6, 87, 259, 222, - 16, 19, 112, 256, 167, 258, 217, 261, 218, 111, - 224, 173, 21, 96, 256, 44, 200, 23, 45, 46, - 278, 226, 177, 282, 227, 203, 335, 53, 4, 174, - 302, 180, 305, 170, 90, 5, 54, 247, 248, 249, - 1, 184, 137, 256, 202, 91, 6, 87, 482, 222, - 160, 482, 112, 214, 197, 482, 217, 261, 218, 184, - 188, 181, 21, 245, 302, 44, 164, 140, 45, 46, - 278, 226, 466, 282, 13, 203, 166, 53, 4, 466, - 302, 42, 43, 286, 12, 5, 54, 247, 248, 249, - 1, 264, 139, 447, 202, 40, 6, 87, 293, 294, - 295, 296, 112, 17, 311, 447, 217, 261, 218, 337, - 224, 183, 21, 260, 49, 48, 244, 245, 45, 46, - 278, 226, 24, 282, 303, 203, 8, 53, 4, 92, - 302, 42, 43, 286, 12, 5, 54, 247, 248, 249, - 1, 10, 139, 9, 202, 317, 6, 87, 293, 294, - 295, 296, 112, 116, 299, 35, 217, 261, 218, 225, - 224, 198, 21, 98, 34, 44, 329, 324, 45, 46, - 278, 226, 448, 282, 448, 203, 161, 53, 4, 172, - 302, 129, 175, 225, 232, 5, 54, 288, 215, 216, - 252, 101, 93, 109, 243, 191, 103, 85, 450, 162, - 450, 24, 101, 330, 182, 273, 274, 300, 298, 301, - 250, 251, 281, 204, 283, 113, 289, 262, 300, 298, - 301, 121, 288, 215, 216, 252, 270, 93, 109, 275, - 190, 103, 60, 277, 279, 225, 237, 101, 280, 297, - 273, 274, 129, 239, 199, 266, 107, 281, 204, 283, - 7, 289, 101, 300, 298, 301, 288, 88, 216, 254, - 163, 114, 109, 265, 191, 103, 85, 200, 300, 298, - 301, 101, 200, 259, 273, 274, 19, 165, 326, 362, - 258, 281, 204, 283, 396, 289, 234, 300, 298, 301, - 288, 362, 216, 327, 200, 114, 396, 362, 201, 119, - 72, 336, 396, 37, 259, 101, 393, 19, 273, 274, - 154, 258, 228, 339, 94, 281, 204, 283, 393, 289, - 256, 300, 298, 301, 393, 38, 314, 288, 314, 216, - 314, 314, 114, 207, 319, 201, 119, 72, 314, 314, - 314, 314, 101, 221, 184, 273, 274, 156, 314, 314, - 314, 95, 281, 204, 283, 314, 289, 256, 300, 298, - 301, 314, 314, 314, 288, 314, 216, 314, 314, 108, - 206, 319, 201, 122, 51, 314, 120, 314, 314, 101, - 314, 184, 273, 274, 314, 314, 314, 314, 314, 281, - 204, 283, 314, 289, 314, 300, 298, 301, 288, 314, - 216, 314, 314, 114, 314, 314, 201, 122, 67, 314, - 314, 314, 314, 101, 314, 314, 273, 274, 314, 314, - 314, 314, 314, 281, 204, 283, 314, 289, 314, 300, - 298, 301, 288, 314, 216, 314, 314, 114, 212, 314, - 201, 122, 67, 314, 314, 314, 314, 101, 314, 314, - 273, 274, 314, 314, 314, 314, 314, 281, 204, 283, - 314, 289, 314, 300, 298, 301, 288, 314, 216, 314, - 314, 114, 205, 314, 201, 119, 72, 314, 314, 314, - 314, 101, 314, 314, 273, 274, 314, 314, 314, 314, - 314, 281, 204, 283, 314, 289, 314, 300, 298, 301, - 314, 314, 314, 288, 314, 216, 314, 314, 114, 314, - 318, 201, 122, 78, 314, 314, 314, 314, 101, 314, - 482, 273, 274, 482, 314, 314, 314, 482, 281, 204, - 283, 314, 289, 209, 211, 298, 301, 288, 314, 216, - 314, 314, 108, 314, 314, 201, 122, 58, 314, 238, - 314, 314, 101, 314, 314, 273, 274, 314, 314, 482, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 288, 314, 216, 314, 314, 114, 314, 314, 201, - 118, 64, 314, 314, 314, 314, 101, 314, 314, 273, - 274, 314, 314, 314, 314, 314, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 288, 314, 216, 314, 314, - 114, 314, 314, 196, 117, 59, 314, 314, 314, 314, - 101, 314, 314, 273, 274, 314, 314, 314, 314, 314, - 281, 204, 283, 314, 289, 314, 300, 298, 301, 288, - 314, 216, 314, 314, 114, 314, 314, 201, 104, 84, - 314, 314, 314, 314, 101, 314, 314, 273, 274, 314, - 314, 314, 314, 314, 281, 204, 283, 314, 289, 314, - 300, 298, 301, 288, 314, 216, 314, 314, 114, 314, - 314, 201, 105, 83, 314, 314, 314, 314, 101, 314, - 314, 273, 274, 314, 314, 314, 314, 314, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 288, 314, 216, - 314, 314, 114, 314, 314, 201, 122, 55, 314, 314, - 314, 314, 101, 314, 314, 273, 274, 314, 314, 314, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 288, 314, 216, 314, 314, 114, 314, 314, 201, - 122, 66, 314, 314, 314, 314, 101, 314, 314, 273, - 274, 314, 314, 314, 314, 314, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 288, 314, 216, 314, 314, - 114, 314, 314, 201, 104, 56, 314, 314, 314, 314, - 101, 314, 314, 273, 274, 314, 314, 314, 314, 314, - 281, 204, 283, 314, 289, 314, 300, 298, 301, 288, - 314, 216, 314, 314, 114, 314, 314, 201, 122, 65, - 314, 314, 314, 314, 101, 314, 314, 273, 274, 314, - 314, 314, 314, 314, 281, 204, 283, 314, 289, 314, - 300, 298, 301, 288, 314, 216, 314, 314, 114, 314, - 314, 201, 122, 57, 314, 314, 314, 314, 101, 314, - 314, 273, 274, 314, 314, 314, 314, 314, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 288, 314, 216, - 314, 314, 114, 314, 314, 201, 122, 58, 314, 314, - 314, 314, 101, 314, 314, 273, 274, 314, 314, 314, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 288, 314, 216, 314, 314, 114, 314, 314, 201, - 122, 68, 314, 314, 314, 314, 101, 314, 314, 273, - 274, 314, 314, 314, 314, 314, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 288, 314, 216, 314, 314, - 114, 314, 314, 201, 122, 69, 314, 314, 314, 314, - 101, 314, 314, 273, 274, 314, 314, 314, 314, 314, - 281, 204, 283, 314, 289, 314, 300, 298, 301, 288, - 314, 216, 314, 314, 114, 314, 314, 201, 122, 70, - 314, 314, 314, 314, 101, 314, 314, 273, 274, 314, - 314, 314, 314, 314, 281, 204, 283, 314, 289, 314, - 300, 298, 301, 288, 314, 216, 314, 314, 114, 314, - 314, 201, 122, 71, 314, 314, 314, 314, 101, 314, - 314, 273, 274, 314, 314, 314, 314, 314, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 288, 314, 216, - 314, 314, 114, 314, 314, 201, 122, 73, 314, 314, - 314, 314, 101, 314, 314, 273, 274, 314, 314, 314, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 288, 314, 216, 314, 314, 114, 314, 314, 195, - 122, 61, 314, 314, 314, 314, 101, 314, 314, 273, - 274, 314, 314, 314, 314, 314, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 288, 314, 216, 314, 314, - 114, 314, 314, 201, 122, 62, 314, 314, 314, 314, - 101, 314, 314, 273, 274, 314, 314, 314, 314, 314, - 281, 204, 283, 314, 289, 314, 300, 298, 301, 288, - 314, 216, 314, 314, 114, 314, 314, 201, 122, 63, - 314, 314, 314, 314, 101, 314, 314, 273, 274, 314, - 314, 314, 314, 314, 281, 204, 283, 314, 289, 314, - 300, 298, 301, 288, 314, 216, 314, 314, 114, 314, - 314, 201, 122, 74, 314, 314, 314, 314, 101, 314, - 314, 273, 274, 314, 314, 314, 314, 314, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 288, 314, 216, - 314, 314, 114, 314, 314, 201, 122, 75, 314, 314, - 314, 314, 101, 314, 314, 273, 274, 314, 314, 314, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 288, 314, 216, 314, 314, 114, 314, 314, 201, - 122, 76, 314, 314, 314, 314, 101, 314, 314, 273, - 274, 314, 314, 314, 314, 314, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 288, 314, 216, 314, 314, - 114, 314, 314, 201, 122, 77, 314, 314, 314, 314, - 101, 314, 314, 273, 274, 314, 314, 314, 314, 314, - 281, 204, 283, 314, 289, 314, 300, 298, 301, 288, - 314, 216, 314, 314, 114, 314, 314, 201, 122, 79, - 314, 314, 314, 314, 101, 314, 314, 273, 274, 314, - 314, 314, 314, 314, 281, 204, 283, 314, 289, 314, - 210, 298, 301, 288, 314, 216, 314, 314, 114, 314, - 314, 201, 122, 80, 314, 314, 314, 314, 101, 314, - 314, 273, 274, 314, 314, 314, 314, 314, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 288, 314, 216, - 314, 314, 114, 314, 314, 201, 122, 81, 314, 314, - 314, 314, 101, 314, 314, 273, 274, 314, 314, 314, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 288, 314, 216, 314, 314, 114, 314, 314, 201, - 122, 82, 314, 314, 314, 314, 101, 314, 314, 273, - 274, 314, 314, 314, 314, 314, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 288, 314, 216, 314, 314, - 114, 314, 314, 201, 122, 50, 314, 314, 314, 314, - 101, 314, 314, 273, 274, 314, 314, 314, 314, 314, - 281, 204, 283, 314, 289, 314, 300, 298, 301, 288, - 314, 216, 314, 314, 114, 314, 314, 201, 122, 52, - 314, 314, 314, 314, 101, 314, 314, 273, 274, 314, - 314, 314, 314, 314, 281, 204, 283, 314, 289, 314, - 300, 298, 301, 288, 314, 216, 168, 314, 114, 314, - 314, 201, 134, 314, 314, 314, 256, 314, 101, 47, - 22, 285, 41, 314, 314, 314, 314, 333, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 288, 314, 216, - 145, 314, 114, 314, 314, 201, 128, 314, 314, 314, - 256, 314, 101, 47, 22, 285, 41, 314, 314, 314, - 314, 287, 281, 204, 283, 315, 289, 314, 300, 298, - 301, 247, 248, 249, 2, 314, 313, 314, 314, 314, - 6, 87, 259, 314, 314, 19, 112, 314, 14, 258, - 217, 261, 218, 314, 15, 39, 314, 14, 14, 42, - 43, 286, 12, 15, 15, 314, 314, 314, 42, 43, - 286, 12, 314, 314, 314, 314, 293, 294, 295, 296, - 308, 27, 314, 314, 315, 293, 294, 295, 296, 314, - 247, 248, 249, 2, 314, 313, 314, 110, 314, 6, - 87, 314, 314, 314, 314, 112, 314, 314, 148, 217, - 261, 218, 314, 42, 43, 286, 12, 314, 42, 43, - 286, 12, 314, 314, 314, 314, 314, 314, 314, 314, - 293, 294, 295, 296, 314, 293, 294, 295, 296, 309, - 27, 314, 314, 240, 241, 242, 133, 223, 314, 247, - 248, 249, 1, 314, 482, 314, 314, 482, 6, 87, - 3, 482, 466, 314, 112, 314, 276, 314, 217, 261, - 218, 288, 314, 216, 314, 314, 114, 314, 314, 201, - 132, 314, 314, 314, 314, 314, 101, 314, 466, 314, - 314, 466, 314, 482, 314, 466, 281, 204, 283, 314, - 289, 314, 300, 298, 301, 314, 288, 314, 216, 314, - 200, 114, 314, 314, 201, 123, 314, 314, 314, 314, - 314, 101, 365, 314, 314, 314, 230, 314, 314, 314, - 314, 281, 204, 283, 14, 289, 314, 300, 298, 301, - 15, 314, 288, 446, 216, 314, 169, 114, 314, 314, - 201, 124, 314, 314, 314, 446, 256, 101, 314, 47, - 22, 285, 41, 314, 314, 314, 314, 281, 204, 283, - 314, 289, 314, 300, 298, 301, 314, 288, 314, 216, - 314, 314, 114, 314, 314, 201, 125, 314, 314, 314, - 314, 314, 101, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 281, 204, 283, 314, 289, 314, 300, 298, - 301, 314, 314, 288, 314, 216, 314, 314, 114, 314, - 314, 201, 126, 314, 314, 314, 314, 314, 101, 314, - 314, 314, 314, 314, 314, 314, 314, 314, 281, 204, - 283, 314, 289, 314, 300, 298, 301, 314, 288, 314, - 216, 314, 314, 114, 314, 314, 201, 127, 314, 314, - 314, 314, 314, 101, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 281, 204, 283, 314, 289, 314, 300, - 298, 301, 314, 314, 288, 314, 216, 223, 314, 114, - 314, 314, 201, 131, 482, 314, 314, 482, 314, 101, - 314, 482, 466, 314, 314, 314, 276, 314, 314, 281, - 204, 283, 314, 289, 314, 300, 298, 301, 314, 314, - 409, 314, 314, 314, 314, 314, 314, 314, 466, 314, - 314, 466, 314, 482, 223, 466, 292, 314, 314, 314, - 314, 482, 314, 314, 482, 314, 314, 36, 482, 466, - 314, 223, 446, 276, 409, 409, 409, 409, 482, 314, - 314, 482, 314, 314, 446, 482, 466, 314, 314, 30, - 276, 409, 409, 409, 409, 466, 482, 314, 466, 482, - 482, 314, 466, 482, 466, 314, 314, 314, 276, 314, - 314, 314, 466, 314, 314, 466, 332, 482, 314, 466, - 314, 314, 314, 314, 314, 331, 42, 43, 286, 12, - 466, 314, 314, 466, 314, 482, 314, 466, 314, 42, - 43, 286, 12, 293, 294, 295, 296, 307, 314, 42, - 43, 286, 12, 185, 314, 314, 293, 294, 295, 296, - 186, 314, 314, 314, 322, 314, 293, 294, 295, 296, - 42, 43, 286, 12, 31, 314, 42, 43, 286, 12, - 314, 334, 314, 42, 43, 286, 12, 293, 294, 295, - 296, 314, 314, 293, 294, 295, 296, 314, 314, 314, - 293, 294, 295, 296, 42, 43, 286, 12, 42, 43, - 286, 12, 482, 314, 314, 482, 314, 314, 314, 482, - 466, 293, 294, 295, 296, 293, 294, 295, 296, 314, - 314, 314, 259, 314, 314, 19, 314, 314, 314, 258, - 314, 314, 314, 314, 314, 314, 466, 314, 14, 466, - 150, 482, 314, 466, 15, + 30, 47, 22, 292, 41, 14, 48, 252, 253, 254, + 1, 15, 142, 242, 208, 206, 6, 88, 206, 228, + 244, 205, 114, 109, 406, 206, 223, 266, 224, 103, + 230, 406, 21, 406, 226, 44, 406, 29, 45, 46, + 283, 232, 406, 287, 406, 209, 406, 54, 4, 14, + 304, 186, 333, 290, 231, 15, 5, 86, 252, 253, + 254, 1, 103, 139, 400, 199, 241, 6, 88, 518, + 228, 552, 101, 114, 153, 258, 400, 223, 266, 224, + 144, 213, 400, 21, 261, 453, 44, 13, 144, 45, + 46, 283, 232, 206, 240, 13, 209, 453, 54, 4, + 332, 304, 206, 40, 262, 368, 156, 5, 86, 252, + 253, 254, 1, 143, 102, 272, 87, 368, 6, 88, + 310, 228, 103, 368, 114, 319, 156, 222, 223, 266, + 224, 274, 230, 184, 21, 290, 143, 44, 235, 10, + 45, 46, 283, 232, 175, 287, 273, 209, 54, 54, + 4, 304, 304, 251, 183, 222, 290, 180, 5, 86, + 252, 253, 254, 1, 20, 141, 198, 208, 276, 6, + 88, 54, 228, 315, 304, 114, 190, 265, 453, 223, + 266, 224, 206, 230, 277, 21, 147, 238, 44, 190, + 453, 45, 46, 283, 232, 329, 287, 3, 209, 103, + 54, 4, 146, 304, 304, 289, 98, 311, 23, 5, + 86, 252, 253, 254, 1, 269, 141, 134, 200, 367, + 6, 88, 25, 228, 304, 367, 114, 108, 117, 453, + 223, 266, 224, 34, 230, 233, 21, 167, 53, 44, + 304, 453, 45, 46, 283, 232, 103, 287, 37, 209, + 103, 54, 4, 336, 304, 157, 206, 262, 367, 145, + 5, 86, 252, 253, 254, 1, 269, 140, 402, 208, + 367, 6, 88, 304, 228, 117, 367, 114, 155, 117, + 402, 223, 266, 224, 260, 230, 402, 11, 261, 53, + 44, 206, 24, 45, 46, 283, 232, 206, 287, 166, + 209, 262, 54, 4, 183, 304, 290, 163, 262, 399, + 262, 5, 86, 252, 253, 254, 1, 261, 141, 165, + 195, 399, 6, 88, 36, 228, 274, 399, 114, 261, + 242, 113, 223, 266, 224, 91, 219, 344, 21, 341, + 109, 44, 18, 189, 45, 46, 283, 232, 15, 287, + 242, 209, 473, 54, 4, 189, 304, 243, 269, 473, + 109, 177, 5, 86, 252, 253, 254, 1, 33, 141, + 148, 193, 92, 6, 88, 264, 228, 304, 19, 114, + 261, 53, 263, 223, 266, 224, 159, 230, 327, 21, + 10, 150, 44, 190, 206, 45, 46, 283, 232, 151, + 287, 109, 209, 161, 54, 4, 269, 304, 182, 261, + 118, 171, 168, 5, 86, 252, 253, 254, 1, 16, + 141, 261, 208, 8, 6, 88, 181, 228, 290, 53, + 114, 319, 97, 222, 223, 266, 224, 185, 194, 290, + 21, 325, 297, 44, 298, 317, 45, 46, 283, 232, + 174, 287, 473, 209, 134, 54, 4, 189, 304, 473, + 261, 178, 220, 203, 5, 86, 252, 253, 254, 1, + 187, 143, 250, 208, 40, 6, 88, 489, 90, 321, + 489, 114, 17, 265, 489, 223, 266, 224, 343, 230, + 269, 21, 291, 190, 49, 249, 250, 45, 46, 283, + 232, 268, 287, 8, 209, 322, 54, 4, 7, 304, + 204, 453, 31, 53, 100, 5, 86, 252, 253, 254, + 1, 93, 143, 453, 208, 162, 6, 88, 455, 95, + 455, 454, 114, 225, 9, 261, 223, 266, 224, 231, + 230, 99, 21, 454, 176, 44, 119, 328, 45, 46, + 283, 232, 457, 287, 457, 209, 169, 54, 4, 170, + 304, 190, 32, 32, 334, 335, 5, 86, 179, 295, + 221, 222, 257, 248, 94, 111, 255, 197, 105, 85, + 35, 256, 231, 188, 104, 115, 267, 278, 279, 284, + 164, 124, 275, 280, 96, 286, 210, 288, 282, 296, + 261, 302, 301, 303, 295, 221, 222, 257, 231, 94, + 111, 300, 196, 105, 60, 285, 89, 239, 342, 104, + 158, 160, 278, 279, 37, 330, 190, 345, 331, 38, + 286, 210, 288, 322, 296, 322, 302, 301, 303, 295, + 322, 222, 259, 322, 116, 111, 322, 197, 105, 85, + 322, 322, 264, 322, 104, 19, 322, 278, 279, 263, + 322, 322, 322, 322, 322, 286, 210, 288, 322, 296, + 322, 302, 301, 303, 295, 322, 222, 322, 112, 116, + 322, 322, 207, 121, 71, 322, 322, 322, 322, 104, + 322, 234, 278, 279, 42, 43, 293, 12, 322, 322, + 286, 210, 288, 322, 296, 322, 302, 301, 303, 322, + 322, 305, 306, 307, 308, 309, 295, 322, 222, 212, + 324, 116, 322, 322, 207, 121, 71, 14, 322, 489, + 322, 104, 489, 15, 278, 279, 489, 473, 42, 43, + 293, 12, 286, 210, 288, 322, 296, 322, 302, 301, + 303, 322, 322, 322, 322, 305, 306, 307, 308, 309, + 322, 211, 324, 473, 322, 322, 473, 295, 489, 222, + 473, 322, 110, 322, 322, 207, 125, 51, 322, 123, + 264, 322, 104, 19, 322, 278, 279, 263, 322, 322, + 322, 322, 322, 286, 210, 288, 322, 296, 322, 302, + 301, 303, 295, 322, 222, 322, 322, 116, 322, 322, + 207, 125, 67, 133, 322, 322, 236, 104, 322, 227, + 278, 279, 322, 104, 322, 322, 322, 322, 286, 210, + 288, 322, 296, 322, 302, 301, 303, 322, 322, 322, + 302, 301, 303, 295, 217, 222, 322, 322, 116, 322, + 322, 207, 121, 71, 322, 322, 322, 322, 104, 322, + 322, 278, 279, 322, 322, 322, 322, 322, 322, 286, + 210, 288, 322, 296, 322, 302, 301, 303, 295, 322, + 222, 322, 322, 116, 322, 322, 207, 125, 77, 323, + 322, 322, 322, 104, 322, 322, 278, 279, 322, 322, + 322, 322, 322, 322, 286, 210, 288, 322, 296, 214, + 216, 301, 303, 322, 322, 295, 322, 222, 322, 322, + 116, 322, 322, 207, 125, 67, 322, 322, 322, 322, + 104, 322, 322, 278, 279, 322, 322, 322, 322, 322, + 322, 286, 210, 288, 322, 296, 322, 302, 301, 303, + 295, 322, 222, 322, 322, 110, 322, 218, 207, 125, + 58, 322, 243, 322, 322, 104, 322, 322, 278, 279, + 322, 322, 264, 322, 322, 19, 286, 210, 288, 263, + 296, 322, 302, 301, 303, 322, 322, 295, 14, 222, + 154, 322, 116, 322, 15, 207, 122, 62, 322, 322, + 489, 322, 104, 489, 322, 278, 279, 489, 322, 322, + 322, 322, 322, 286, 210, 288, 322, 296, 322, 302, + 301, 303, 295, 322, 222, 322, 322, 116, 322, 322, + 202, 120, 59, 322, 322, 322, 322, 104, 322, 489, + 278, 279, 322, 322, 322, 322, 322, 322, 286, 210, + 288, 322, 296, 322, 302, 301, 303, 322, 322, 295, + 322, 222, 322, 322, 116, 322, 322, 207, 106, 84, + 322, 322, 322, 322, 104, 322, 322, 278, 279, 322, + 322, 322, 322, 322, 322, 286, 210, 288, 322, 296, + 322, 302, 301, 303, 295, 322, 222, 322, 322, 116, + 322, 322, 207, 107, 83, 322, 322, 322, 322, 104, + 322, 322, 278, 279, 322, 322, 322, 322, 322, 322, + 286, 210, 288, 322, 296, 322, 302, 301, 303, 322, + 322, 295, 322, 222, 322, 322, 116, 322, 322, 207, + 125, 55, 322, 322, 322, 322, 104, 322, 322, 278, + 279, 322, 322, 322, 322, 322, 322, 286, 210, 288, + 322, 296, 322, 302, 301, 303, 295, 322, 222, 322, + 322, 116, 322, 322, 207, 125, 66, 322, 322, 322, + 322, 104, 322, 322, 278, 279, 322, 322, 322, 322, + 322, 322, 286, 210, 288, 322, 296, 322, 302, 301, + 303, 322, 322, 295, 322, 222, 322, 322, 116, 322, + 322, 207, 106, 56, 322, 322, 322, 322, 104, 322, + 322, 278, 279, 322, 322, 322, 322, 322, 322, 286, + 210, 288, 322, 296, 322, 302, 301, 303, 295, 322, + 222, 322, 322, 116, 322, 322, 207, 125, 65, 322, + 322, 322, 322, 104, 322, 322, 278, 279, 322, 322, + 322, 322, 322, 322, 286, 210, 288, 322, 296, 322, + 302, 301, 303, 322, 322, 295, 322, 222, 322, 322, + 116, 322, 322, 207, 125, 57, 322, 322, 322, 322, + 104, 322, 322, 278, 279, 322, 322, 322, 322, 322, + 322, 286, 210, 288, 322, 296, 322, 302, 301, 303, + 295, 322, 222, 322, 322, 116, 322, 322, 207, 125, + 58, 322, 322, 322, 322, 104, 322, 322, 278, 279, + 322, 322, 322, 322, 322, 322, 286, 210, 288, 322, + 296, 322, 302, 301, 303, 322, 322, 295, 322, 222, + 322, 322, 116, 322, 322, 207, 125, 68, 322, 322, + 322, 322, 104, 322, 322, 278, 279, 322, 322, 322, + 322, 322, 322, 286, 210, 288, 322, 296, 322, 302, + 301, 303, 295, 322, 222, 322, 322, 116, 322, 322, + 207, 125, 69, 322, 322, 322, 322, 104, 322, 322, + 278, 279, 322, 322, 322, 322, 322, 322, 286, 210, + 288, 322, 296, 322, 302, 301, 303, 322, 322, 295, + 322, 222, 322, 322, 116, 322, 322, 207, 125, 70, + 322, 322, 322, 322, 104, 322, 322, 278, 279, 322, + 322, 322, 322, 322, 322, 286, 210, 288, 322, 296, + 322, 302, 301, 303, 295, 322, 222, 322, 322, 116, + 322, 322, 207, 125, 72, 322, 322, 322, 322, 104, + 322, 322, 278, 279, 322, 322, 322, 322, 322, 322, + 286, 210, 288, 322, 296, 322, 302, 301, 303, 322, + 322, 295, 322, 222, 322, 322, 116, 322, 322, 201, + 125, 61, 322, 322, 322, 322, 104, 322, 322, 278, + 279, 322, 322, 322, 322, 322, 322, 286, 210, 288, + 322, 296, 322, 302, 301, 303, 295, 322, 222, 322, + 322, 116, 322, 322, 207, 125, 73, 322, 322, 322, + 322, 104, 322, 322, 278, 279, 322, 322, 322, 322, + 322, 322, 286, 210, 288, 322, 296, 322, 302, 301, + 303, 322, 322, 295, 322, 222, 322, 322, 116, 322, + 322, 207, 125, 74, 322, 322, 322, 322, 104, 322, + 322, 278, 279, 322, 322, 322, 322, 322, 322, 286, + 210, 288, 322, 296, 322, 302, 301, 303, 295, 322, + 222, 322, 322, 116, 322, 322, 207, 125, 75, 322, + 322, 322, 322, 104, 322, 322, 278, 279, 322, 322, + 322, 322, 322, 322, 286, 210, 288, 322, 296, 322, + 302, 301, 303, 322, 322, 295, 322, 222, 322, 322, + 116, 322, 322, 207, 125, 76, 322, 322, 322, 322, + 104, 322, 322, 278, 279, 322, 322, 322, 322, 322, + 322, 286, 210, 288, 322, 296, 322, 302, 301, 303, + 295, 322, 222, 322, 322, 116, 322, 322, 207, 125, + 78, 322, 322, 322, 322, 104, 322, 322, 278, 279, + 322, 322, 322, 322, 322, 322, 286, 210, 288, 322, + 296, 322, 215, 301, 303, 322, 322, 295, 322, 222, + 322, 322, 116, 322, 322, 207, 125, 79, 322, 322, + 322, 322, 104, 322, 322, 278, 279, 322, 322, 322, + 322, 322, 322, 286, 210, 288, 322, 296, 322, 302, + 301, 303, 295, 322, 222, 322, 322, 116, 322, 322, + 207, 125, 63, 322, 322, 322, 322, 104, 322, 322, + 278, 279, 322, 322, 322, 322, 322, 322, 286, 210, + 288, 322, 296, 322, 302, 301, 303, 322, 322, 295, + 322, 222, 322, 322, 116, 322, 322, 207, 125, 64, + 322, 322, 322, 322, 104, 322, 322, 278, 279, 322, + 322, 322, 322, 322, 322, 286, 210, 288, 322, 296, + 322, 302, 301, 303, 295, 322, 222, 322, 322, 116, + 322, 322, 207, 125, 80, 322, 322, 322, 322, 104, + 322, 322, 278, 279, 322, 322, 322, 322, 322, 322, + 286, 210, 288, 322, 296, 322, 302, 301, 303, 322, + 322, 295, 322, 222, 322, 322, 116, 322, 322, 207, + 125, 81, 322, 322, 322, 322, 104, 322, 322, 278, + 279, 322, 322, 322, 322, 322, 322, 286, 210, 288, + 322, 296, 322, 302, 301, 303, 295, 322, 222, 322, + 322, 116, 322, 322, 207, 125, 82, 322, 322, 322, + 322, 104, 322, 322, 278, 279, 322, 322, 322, 322, + 322, 322, 286, 210, 288, 322, 296, 322, 302, 301, + 303, 322, 322, 295, 322, 222, 322, 322, 116, 322, + 322, 207, 125, 50, 322, 322, 322, 322, 104, 322, + 322, 278, 279, 322, 322, 322, 322, 322, 322, 286, + 210, 288, 322, 296, 322, 302, 301, 303, 295, 322, + 222, 322, 322, 116, 322, 322, 207, 125, 52, 322, + 322, 322, 322, 104, 322, 322, 278, 279, 322, 322, + 322, 322, 322, 322, 286, 210, 288, 322, 296, 322, + 302, 301, 303, 322, 322, 295, 322, 222, 322, 322, + 116, 322, 322, 207, 138, 322, 322, 322, 322, 295, + 104, 222, 322, 322, 116, 322, 322, 207, 131, 339, + 322, 286, 210, 288, 104, 296, 322, 302, 301, 303, + 322, 322, 322, 294, 322, 286, 210, 288, 322, 296, + 320, 302, 301, 303, 322, 322, 252, 253, 254, 2, + 322, 318, 322, 322, 322, 6, 88, 322, 322, 322, + 322, 114, 322, 322, 152, 223, 266, 224, 322, 322, + 322, 39, 322, 14, 42, 43, 293, 12, 322, 15, + 322, 322, 322, 322, 42, 43, 293, 12, 322, 322, + 322, 305, 306, 307, 308, 309, 313, 26, 322, 322, + 320, 305, 306, 307, 308, 309, 252, 253, 254, 2, + 322, 318, 322, 322, 322, 6, 88, 264, 322, 322, + 19, 114, 322, 322, 263, 223, 266, 224, 337, 42, + 43, 293, 12, 14, 42, 43, 293, 12, 322, 15, + 322, 322, 322, 322, 322, 322, 305, 306, 307, 308, + 309, 305, 306, 307, 308, 309, 314, 26, 316, 322, + 245, 246, 247, 137, 229, 322, 252, 253, 254, 1, + 322, 489, 322, 322, 489, 6, 88, 3, 489, 473, + 322, 114, 322, 281, 322, 223, 266, 224, 295, 322, + 222, 322, 322, 116, 322, 322, 207, 136, 322, 322, + 322, 322, 322, 104, 322, 473, 322, 322, 473, 322, + 489, 322, 473, 322, 286, 210, 288, 322, 296, 322, + 302, 301, 303, 322, 295, 322, 222, 172, 322, 116, + 322, 322, 207, 126, 322, 322, 322, 261, 322, 104, + 47, 22, 292, 41, 322, 48, 322, 322, 322, 322, + 286, 210, 288, 322, 296, 322, 302, 301, 303, 322, + 295, 322, 222, 322, 149, 116, 322, 322, 207, 127, + 322, 322, 322, 322, 261, 104, 322, 47, 22, 292, + 41, 322, 48, 322, 322, 322, 286, 210, 288, 322, + 296, 322, 302, 301, 303, 322, 295, 322, 222, 322, + 173, 116, 322, 322, 207, 128, 322, 322, 322, 322, + 261, 104, 322, 47, 22, 292, 41, 133, 48, 322, + 271, 322, 286, 210, 288, 322, 296, 104, 302, 301, + 303, 322, 295, 322, 222, 322, 322, 116, 322, 270, + 207, 129, 322, 322, 302, 301, 303, 104, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 286, 210, + 288, 322, 296, 322, 302, 301, 303, 322, 295, 322, + 222, 322, 322, 116, 322, 322, 207, 130, 322, 322, + 322, 322, 322, 104, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 286, 210, 288, 322, 296, 322, + 302, 301, 303, 322, 295, 322, 222, 322, 322, 116, + 322, 206, 207, 132, 322, 322, 322, 322, 322, 104, + 322, 322, 322, 371, 322, 322, 322, 237, 322, 322, + 286, 210, 288, 322, 296, 14, 302, 301, 303, 322, + 295, 15, 222, 415, 453, 116, 322, 322, 207, 135, + 322, 322, 322, 322, 322, 104, 453, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 286, 210, 288, 322, + 296, 322, 302, 301, 303, 453, 322, 415, 415, 415, + 415, 322, 322, 322, 322, 322, 322, 453, 322, 322, + 322, 322, 322, 322, 415, 415, 415, 415, 415, 229, + 322, 322, 322, 322, 322, 322, 489, 322, 322, 489, + 322, 322, 229, 489, 473, 322, 322, 322, 281, 489, + 322, 322, 489, 322, 322, 36, 489, 473, 322, 322, + 322, 281, 322, 322, 322, 322, 322, 322, 322, 338, + 473, 322, 322, 473, 322, 489, 322, 473, 299, 322, + 322, 322, 322, 473, 322, 322, 473, 322, 489, 322, + 473, 28, 42, 43, 293, 12, 322, 312, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 305, + 306, 307, 308, 309, 42, 43, 293, 12, 322, 322, + 42, 43, 293, 12, 191, 42, 43, 293, 12, 326, + 192, 305, 306, 307, 308, 309, 340, 305, 306, 307, + 308, 309, 305, 306, 307, 308, 309, 42, 43, 293, + 12, 322, 322, 42, 43, 293, 12, 322, 322, 42, + 43, 293, 12, 322, 305, 306, 307, 308, 309, 322, + 305, 306, 307, 308, 309, 229, 305, 306, 307, 308, + 309, 27, 489, 322, 322, 489, 322, 322, 489, 489, + 473, 489, 322, 322, 281, 489, 473, 322, 322, 322, + 281, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 473, 322, 322, 473, + 322, 489, 473, 473, 322, 473, 322, 489, 322, 473, + 322, 42, 43, 293, 12, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 305, 306, + 307, 308, 309, ); public static $yy_lookahead = array( - 2, 80, 100, 13, 102, 103, 1, 9, 10, 11, - 12, 21, 14, 70, 16, 25, 18, 19, 93, 21, - 77, 31, 24, 80, 13, 104, 28, 29, 30, 104, - 32, 20, 34, 22, 44, 37, 25, 39, 40, 41, - 42, 43, 31, 45, 33, 47, 35, 49, 50, 14, - 52, 16, 12, 17, 43, 57, 58, 9, 10, 11, - 12, 12, 14, 14, 16, 16, 18, 19, 65, 21, - 67, 12, 24, 14, 34, 16, 28, 29, 30, 43, - 32, 32, 34, 1, 49, 37, 50, 52, 40, 41, - 42, 43, 72, 45, 99, 47, 101, 49, 50, 51, - 52, 52, 82, 69, 14, 57, 58, 9, 10, 11, - 12, 52, 14, 13, 16, 15, 18, 19, 15, 21, - 17, 101, 24, 72, 34, 25, 28, 29, 30, 17, - 32, 31, 34, 82, 34, 37, 102, 103, 40, 41, - 42, 43, 52, 45, 1, 47, 46, 49, 50, 46, - 52, 85, 86, 87, 88, 57, 58, 9, 10, 11, - 12, 14, 14, 16, 16, 80, 18, 19, 25, 21, - 61, 62, 24, 72, 31, 34, 28, 29, 30, 65, - 32, 67, 34, 82, 43, 37, 33, 46, 40, 41, - 42, 43, 51, 45, 47, 47, 49, 49, 50, 52, - 52, 99, 101, 13, 51, 57, 58, 9, 10, 11, - 12, 21, 14, 17, 16, 25, 18, 19, 15, 21, - 17, 31, 24, 101, 110, 111, 28, 29, 30, 65, - 32, 67, 34, 15, 44, 37, 1, 2, 40, 41, - 42, 43, 46, 45, 70, 47, 25, 49, 50, 46, - 52, 77, 31, 72, 80, 57, 58, 9, 10, 11, - 12, 43, 14, 82, 16, 1, 18, 19, 50, 21, - 82, 76, 24, 21, 34, 111, 28, 29, 30, 99, - 32, 101, 34, 14, 72, 37, 46, 106, 40, 41, - 42, 43, 27, 45, 82, 47, 44, 49, 50, 34, - 52, 106, 107, 51, 76, 57, 58, 9, 10, 11, - 12, 46, 14, 21, 16, 51, 18, 19, 106, 21, - 1, 52, 24, 69, 102, 103, 28, 29, 30, 16, - 32, 25, 34, 1, 106, 37, 44, 31, 40, 41, - 42, 43, 70, 45, 100, 47, 27, 49, 50, 17, - 52, 59, 80, 99, 93, 57, 58, 9, 10, 11, - 12, 48, 14, 72, 16, 104, 18, 19, 9, 21, - 20, 12, 24, 82, 72, 16, 28, 29, 30, 79, - 32, 76, 34, 33, 82, 37, 1, 2, 40, 41, - 42, 43, 14, 45, 16, 47, 14, 49, 50, 76, - 52, 102, 103, 72, 80, 57, 58, 9, 10, 11, - 12, 106, 14, 82, 16, 80, 18, 19, 9, 21, - 99, 12, 24, 63, 64, 16, 28, 29, 30, 106, - 32, 6, 34, 8, 52, 37, 99, 43, 40, 41, - 42, 43, 43, 45, 50, 47, 99, 49, 50, 50, - 52, 36, 37, 38, 39, 57, 58, 9, 10, 11, - 12, 21, 14, 34, 16, 2, 18, 19, 53, 54, - 55, 56, 24, 15, 59, 46, 28, 29, 30, 21, - 32, 106, 34, 107, 44, 37, 7, 8, 40, 41, - 42, 43, 33, 45, 35, 47, 34, 49, 50, 99, - 52, 36, 37, 38, 39, 57, 58, 9, 10, 11, - 12, 34, 14, 33, 16, 35, 18, 19, 53, 54, - 55, 56, 24, 46, 103, 15, 28, 29, 30, 43, - 32, 64, 34, 81, 33, 37, 35, 51, 40, 41, - 42, 43, 33, 45, 35, 47, 99, 49, 50, 81, - 52, 70, 81, 43, 73, 57, 58, 65, 66, 67, - 68, 80, 70, 71, 7, 73, 74, 75, 33, 99, - 35, 33, 80, 35, 16, 83, 84, 96, 97, 98, - 13, 13, 90, 91, 92, 16, 94, 16, 96, 97, - 98, 16, 65, 66, 67, 68, 16, 70, 71, 14, - 73, 74, 75, 16, 32, 43, 70, 80, 32, 16, - 83, 84, 70, 77, 78, 73, 80, 90, 91, 92, - 34, 94, 80, 96, 97, 98, 65, 16, 67, 68, - 49, 70, 71, 91, 73, 74, 75, 1, 96, 97, - 98, 80, 1, 9, 83, 84, 12, 49, 51, 13, - 16, 90, 91, 92, 13, 94, 16, 96, 97, 98, - 65, 25, 67, 51, 1, 70, 25, 31, 73, 74, - 75, 16, 31, 15, 9, 80, 13, 12, 83, 84, - 72, 16, 48, 35, 76, 90, 91, 92, 25, 94, - 82, 96, 97, 98, 31, 22, 112, 65, 112, 67, - 112, 112, 70, 108, 109, 73, 74, 75, 112, 112, - 112, 112, 80, 48, 106, 83, 84, 72, 112, 112, - 112, 76, 90, 91, 92, 112, 94, 82, 96, 97, - 98, 112, 112, 112, 65, 112, 67, 112, 112, 70, - 108, 109, 73, 74, 75, 112, 77, 112, 112, 80, - 112, 106, 83, 84, 112, 112, 112, 112, 112, 90, - 91, 92, 112, 94, 112, 96, 97, 98, 65, 112, - 67, 112, 112, 70, 112, 112, 73, 74, 75, 112, - 112, 112, 112, 80, 112, 112, 83, 84, 112, 112, - 112, 112, 112, 90, 91, 92, 112, 94, 112, 96, - 97, 98, 65, 112, 67, 112, 112, 70, 105, 112, - 73, 74, 75, 112, 112, 112, 112, 80, 112, 112, - 83, 84, 112, 112, 112, 112, 112, 90, 91, 92, - 112, 94, 112, 96, 97, 98, 65, 112, 67, 112, - 112, 70, 105, 112, 73, 74, 75, 112, 112, 112, - 112, 80, 112, 112, 83, 84, 112, 112, 112, 112, - 112, 90, 91, 92, 112, 94, 112, 96, 97, 98, - 112, 112, 112, 65, 112, 67, 112, 112, 70, 112, - 109, 73, 74, 75, 112, 112, 112, 112, 80, 112, - 9, 83, 84, 12, 112, 112, 112, 16, 90, 91, - 92, 112, 94, 95, 96, 97, 98, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 75, 112, 77, - 112, 112, 80, 112, 112, 83, 84, 112, 112, 48, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 75, 112, 112, 112, 112, 80, 112, 112, 83, - 84, 112, 112, 112, 112, 112, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 65, 112, 67, 112, 112, - 70, 112, 112, 73, 74, 75, 112, 112, 112, 112, - 80, 112, 112, 83, 84, 112, 112, 112, 112, 112, - 90, 91, 92, 112, 94, 112, 96, 97, 98, 65, - 112, 67, 112, 112, 70, 112, 112, 73, 74, 75, - 112, 112, 112, 112, 80, 112, 112, 83, 84, 112, - 112, 112, 112, 112, 90, 91, 92, 112, 94, 112, - 96, 97, 98, 65, 112, 67, 112, 112, 70, 112, - 112, 73, 74, 75, 112, 112, 112, 112, 80, 112, - 112, 83, 84, 112, 112, 112, 112, 112, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 75, 112, 112, - 112, 112, 80, 112, 112, 83, 84, 112, 112, 112, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 75, 112, 112, 112, 112, 80, 112, 112, 83, - 84, 112, 112, 112, 112, 112, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 65, 112, 67, 112, 112, - 70, 112, 112, 73, 74, 75, 112, 112, 112, 112, - 80, 112, 112, 83, 84, 112, 112, 112, 112, 112, - 90, 91, 92, 112, 94, 112, 96, 97, 98, 65, - 112, 67, 112, 112, 70, 112, 112, 73, 74, 75, - 112, 112, 112, 112, 80, 112, 112, 83, 84, 112, - 112, 112, 112, 112, 90, 91, 92, 112, 94, 112, - 96, 97, 98, 65, 112, 67, 112, 112, 70, 112, - 112, 73, 74, 75, 112, 112, 112, 112, 80, 112, - 112, 83, 84, 112, 112, 112, 112, 112, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 75, 112, 112, - 112, 112, 80, 112, 112, 83, 84, 112, 112, 112, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 75, 112, 112, 112, 112, 80, 112, 112, 83, - 84, 112, 112, 112, 112, 112, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 65, 112, 67, 112, 112, - 70, 112, 112, 73, 74, 75, 112, 112, 112, 112, - 80, 112, 112, 83, 84, 112, 112, 112, 112, 112, - 90, 91, 92, 112, 94, 112, 96, 97, 98, 65, - 112, 67, 112, 112, 70, 112, 112, 73, 74, 75, - 112, 112, 112, 112, 80, 112, 112, 83, 84, 112, - 112, 112, 112, 112, 90, 91, 92, 112, 94, 112, - 96, 97, 98, 65, 112, 67, 112, 112, 70, 112, - 112, 73, 74, 75, 112, 112, 112, 112, 80, 112, - 112, 83, 84, 112, 112, 112, 112, 112, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 75, 112, 112, - 112, 112, 80, 112, 112, 83, 84, 112, 112, 112, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 75, 112, 112, 112, 112, 80, 112, 112, 83, - 84, 112, 112, 112, 112, 112, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 65, 112, 67, 112, 112, - 70, 112, 112, 73, 74, 75, 112, 112, 112, 112, - 80, 112, 112, 83, 84, 112, 112, 112, 112, 112, - 90, 91, 92, 112, 94, 112, 96, 97, 98, 65, - 112, 67, 112, 112, 70, 112, 112, 73, 74, 75, - 112, 112, 112, 112, 80, 112, 112, 83, 84, 112, - 112, 112, 112, 112, 90, 91, 92, 112, 94, 112, - 96, 97, 98, 65, 112, 67, 112, 112, 70, 112, - 112, 73, 74, 75, 112, 112, 112, 112, 80, 112, - 112, 83, 84, 112, 112, 112, 112, 112, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 75, 112, 112, - 112, 112, 80, 112, 112, 83, 84, 112, 112, 112, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 75, 112, 112, 112, 112, 80, 112, 112, 83, - 84, 112, 112, 112, 112, 112, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 65, 112, 67, 112, 112, - 70, 112, 112, 73, 74, 75, 112, 112, 112, 112, - 80, 112, 112, 83, 84, 112, 112, 112, 112, 112, - 90, 91, 92, 112, 94, 112, 96, 97, 98, 65, - 112, 67, 112, 112, 70, 112, 112, 73, 74, 75, - 112, 112, 112, 112, 80, 112, 112, 83, 84, 112, - 112, 112, 112, 112, 90, 91, 92, 112, 94, 112, - 96, 97, 98, 65, 112, 67, 112, 112, 70, 112, - 112, 73, 74, 75, 112, 112, 112, 112, 80, 112, - 112, 83, 84, 112, 112, 112, 112, 112, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 75, 112, 112, - 112, 112, 80, 112, 112, 83, 84, 112, 112, 112, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 75, 112, 112, 112, 112, 80, 112, 112, 83, - 84, 112, 112, 112, 112, 112, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 65, 112, 67, 112, 112, - 70, 112, 112, 73, 74, 75, 112, 112, 112, 112, - 80, 112, 112, 83, 84, 112, 112, 112, 112, 112, - 90, 91, 92, 112, 94, 112, 96, 97, 98, 65, - 112, 67, 112, 112, 70, 112, 112, 73, 74, 75, - 112, 112, 112, 112, 80, 112, 112, 83, 84, 112, - 112, 112, 112, 112, 90, 91, 92, 112, 94, 112, - 96, 97, 98, 65, 112, 67, 72, 112, 70, 112, - 112, 73, 74, 112, 112, 112, 82, 112, 80, 85, - 86, 87, 88, 112, 112, 112, 112, 89, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 65, 112, 67, - 72, 112, 70, 112, 112, 73, 74, 112, 112, 112, - 82, 112, 80, 85, 86, 87, 88, 112, 112, 112, - 112, 89, 90, 91, 92, 3, 94, 112, 96, 97, - 98, 9, 10, 11, 12, 112, 14, 112, 112, 112, - 18, 19, 9, 112, 112, 12, 24, 112, 25, 16, - 28, 29, 30, 112, 31, 23, 112, 25, 25, 36, - 37, 38, 39, 31, 31, 112, 112, 112, 36, 37, - 38, 39, 112, 112, 112, 112, 53, 54, 55, 56, - 58, 59, 112, 112, 3, 53, 54, 55, 56, 112, - 9, 10, 11, 12, 112, 14, 112, 20, 112, 18, - 19, 112, 112, 112, 112, 24, 112, 112, 26, 28, - 29, 30, 112, 36, 37, 38, 39, 112, 36, 37, - 38, 39, 112, 112, 112, 112, 112, 112, 112, 112, - 53, 54, 55, 56, 112, 53, 54, 55, 56, 58, - 59, 112, 112, 3, 4, 5, 6, 2, 112, 9, - 10, 11, 12, 112, 9, 112, 112, 12, 18, 19, - 15, 16, 17, 112, 24, 112, 21, 112, 28, 29, - 30, 65, 112, 67, 112, 112, 70, 112, 112, 73, - 74, 112, 112, 112, 112, 112, 80, 112, 43, 112, - 112, 46, 112, 48, 112, 50, 90, 91, 92, 112, - 94, 112, 96, 97, 98, 112, 65, 112, 67, 112, - 1, 70, 112, 112, 73, 74, 112, 112, 112, 112, - 112, 80, 13, 112, 112, 112, 17, 112, 112, 112, - 112, 90, 91, 92, 25, 94, 112, 96, 97, 98, - 31, 112, 65, 34, 67, 112, 72, 70, 112, 112, - 73, 74, 112, 112, 112, 46, 82, 80, 112, 85, - 86, 87, 88, 112, 112, 112, 112, 90, 91, 92, - 112, 94, 112, 96, 97, 98, 112, 65, 112, 67, - 112, 112, 70, 112, 112, 73, 74, 112, 112, 112, - 112, 112, 80, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 90, 91, 92, 112, 94, 112, 96, 97, - 98, 112, 112, 65, 112, 67, 112, 112, 70, 112, - 112, 73, 74, 112, 112, 112, 112, 112, 80, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 90, 91, - 92, 112, 94, 112, 96, 97, 98, 112, 65, 112, - 67, 112, 112, 70, 112, 112, 73, 74, 112, 112, - 112, 112, 112, 80, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 90, 91, 92, 112, 94, 112, 96, - 97, 98, 112, 112, 65, 112, 67, 2, 112, 70, - 112, 112, 73, 74, 9, 112, 112, 12, 112, 80, - 112, 16, 17, 112, 112, 112, 21, 112, 112, 90, - 91, 92, 112, 94, 112, 96, 97, 98, 112, 112, - 2, 112, 112, 112, 112, 112, 112, 112, 43, 112, - 112, 46, 112, 48, 2, 50, 51, 112, 112, 112, - 112, 9, 112, 112, 12, 112, 112, 15, 16, 17, - 112, 2, 34, 21, 36, 37, 38, 39, 9, 112, - 112, 12, 112, 112, 46, 16, 17, 112, 112, 2, - 21, 53, 54, 55, 56, 43, 9, 112, 46, 12, - 48, 112, 50, 16, 17, 112, 112, 112, 21, 112, - 112, 112, 43, 112, 112, 46, 13, 48, 112, 50, - 112, 112, 112, 112, 112, 35, 36, 37, 38, 39, - 43, 112, 112, 46, 112, 48, 112, 50, 112, 36, - 37, 38, 39, 53, 54, 55, 56, 13, 112, 36, - 37, 38, 39, 13, 112, 112, 53, 54, 55, 56, - 13, 112, 112, 112, 51, 112, 53, 54, 55, 56, - 36, 37, 38, 39, 2, 112, 36, 37, 38, 39, - 112, 13, 112, 36, 37, 38, 39, 53, 54, 55, - 56, 112, 112, 53, 54, 55, 56, 112, 112, 112, - 53, 54, 55, 56, 36, 37, 38, 39, 36, 37, - 38, 39, 9, 112, 112, 12, 112, 112, 112, 16, - 17, 53, 54, 55, 56, 53, 54, 55, 56, 112, - 112, 112, 9, 112, 112, 12, 112, 112, 112, 16, - 112, 112, 112, 112, 112, 112, 43, 112, 25, 46, - 27, 48, 112, 50, 31, + 2, 86, 87, 88, 89, 25, 91, 9, 10, 11, + 12, 31, 14, 71, 16, 1, 18, 19, 1, 21, + 78, 79, 24, 81, 13, 1, 28, 29, 30, 17, + 32, 20, 34, 22, 17, 37, 25, 39, 40, 41, + 42, 43, 31, 45, 33, 47, 35, 49, 50, 25, + 52, 104, 105, 106, 43, 31, 58, 59, 9, 10, + 11, 12, 17, 14, 13, 16, 15, 18, 19, 1, + 21, 62, 63, 24, 73, 70, 25, 28, 29, 30, + 43, 32, 31, 34, 83, 34, 37, 50, 43, 40, + 41, 42, 43, 1, 45, 50, 47, 46, 49, 50, + 51, 52, 1, 2, 103, 13, 101, 58, 59, 9, + 10, 11, 12, 14, 14, 16, 16, 25, 18, 19, + 70, 21, 17, 31, 24, 66, 101, 68, 28, 29, + 30, 102, 32, 104, 34, 106, 14, 37, 16, 34, + 40, 41, 42, 43, 77, 45, 47, 47, 49, 49, + 50, 52, 52, 66, 104, 68, 106, 77, 58, 59, + 9, 10, 11, 12, 12, 14, 14, 16, 16, 18, + 19, 49, 21, 114, 52, 24, 109, 110, 34, 28, + 29, 30, 1, 32, 32, 34, 14, 43, 37, 109, + 46, 40, 41, 42, 43, 51, 45, 15, 47, 17, + 49, 50, 14, 52, 52, 95, 34, 13, 27, 58, + 59, 9, 10, 11, 12, 21, 14, 107, 16, 25, + 18, 19, 27, 21, 52, 31, 24, 81, 46, 34, + 28, 29, 30, 12, 32, 14, 34, 16, 44, 37, + 52, 46, 40, 41, 42, 43, 17, 45, 15, 47, + 17, 49, 50, 107, 52, 101, 1, 103, 13, 81, + 58, 59, 9, 10, 11, 12, 21, 14, 13, 16, + 25, 18, 19, 52, 21, 46, 31, 24, 73, 46, + 25, 28, 29, 30, 83, 32, 31, 34, 83, 44, + 37, 1, 2, 40, 41, 42, 43, 1, 45, 101, + 47, 103, 49, 50, 104, 52, 106, 73, 103, 13, + 103, 58, 59, 9, 10, 11, 12, 83, 14, 73, + 16, 25, 18, 19, 15, 21, 102, 31, 24, 83, + 71, 80, 28, 29, 30, 81, 32, 78, 34, 14, + 81, 37, 25, 109, 40, 41, 42, 43, 31, 45, + 71, 47, 43, 49, 50, 109, 52, 78, 21, 50, + 81, 77, 58, 59, 9, 10, 11, 12, 12, 14, + 73, 16, 81, 18, 19, 9, 21, 52, 12, 24, + 83, 44, 16, 28, 29, 30, 101, 32, 51, 34, + 34, 71, 37, 109, 1, 40, 41, 42, 43, 73, + 45, 81, 47, 101, 49, 50, 21, 52, 14, 83, + 16, 73, 101, 58, 59, 9, 10, 11, 12, 20, + 14, 83, 16, 33, 18, 19, 104, 21, 106, 44, + 24, 66, 33, 68, 28, 29, 30, 104, 32, 106, + 34, 51, 95, 37, 51, 60, 40, 41, 42, 43, + 73, 45, 43, 47, 107, 49, 50, 109, 52, 50, + 83, 77, 64, 65, 58, 59, 9, 10, 11, 12, + 6, 14, 8, 16, 2, 18, 19, 9, 113, 114, + 12, 24, 15, 110, 16, 28, 29, 30, 21, 32, + 21, 34, 106, 109, 37, 7, 8, 40, 41, 42, + 43, 16, 45, 33, 47, 35, 49, 50, 34, 52, + 65, 34, 33, 44, 35, 58, 59, 9, 10, 11, + 12, 101, 14, 46, 16, 73, 18, 19, 33, 77, + 35, 34, 24, 48, 34, 83, 28, 29, 30, 43, + 32, 82, 34, 46, 82, 37, 46, 51, 40, 41, + 42, 43, 33, 45, 35, 47, 101, 49, 50, 101, + 52, 109, 33, 33, 35, 35, 58, 59, 82, 66, + 67, 68, 69, 7, 71, 72, 13, 74, 75, 76, + 15, 13, 43, 16, 81, 16, 16, 84, 85, 32, + 73, 16, 16, 14, 77, 92, 93, 94, 16, 96, + 83, 98, 99, 100, 66, 67, 68, 69, 43, 71, + 72, 16, 74, 75, 76, 32, 16, 16, 16, 81, + 49, 49, 84, 85, 15, 51, 109, 35, 51, 22, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 66, + 115, 68, 69, 115, 71, 72, 115, 74, 75, 76, + 115, 115, 9, 115, 81, 12, 115, 84, 85, 16, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 66, 115, 68, 115, 20, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 48, 84, 85, 36, 37, 38, 39, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 115, + 115, 53, 54, 55, 56, 57, 66, 115, 68, 111, + 112, 71, 115, 115, 74, 75, 76, 25, 115, 9, + 115, 81, 12, 31, 84, 85, 16, 17, 36, 37, + 38, 39, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 115, 115, 115, 115, 53, 54, 55, 56, 57, + 115, 111, 112, 43, 115, 115, 46, 66, 48, 68, + 50, 115, 71, 115, 115, 74, 75, 76, 115, 78, + 9, 115, 81, 12, 115, 84, 85, 16, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 71, 115, 115, 74, 81, 115, 48, + 84, 85, 115, 81, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 115, 115, 115, + 98, 99, 100, 66, 108, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 76, 112, + 115, 115, 115, 81, 115, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 97, + 98, 99, 100, 115, 115, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 76, 115, 115, 115, 115, + 81, 115, 115, 84, 85, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 66, 115, 68, 115, 115, 71, 115, 108, 74, 75, + 76, 115, 78, 115, 115, 81, 115, 115, 84, 85, + 115, 115, 9, 115, 115, 12, 92, 93, 94, 16, + 96, 115, 98, 99, 100, 115, 115, 66, 25, 68, + 27, 115, 71, 115, 31, 74, 75, 76, 115, 115, + 9, 115, 81, 12, 115, 84, 85, 16, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 115, 115, 115, 115, 81, 115, 48, + 84, 85, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 115, 115, 66, + 115, 68, 115, 115, 71, 115, 115, 74, 75, 76, + 115, 115, 115, 115, 81, 115, 115, 84, 85, 115, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 66, 115, 68, 115, 115, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 115, 84, 85, 115, 115, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 115, + 115, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 76, 115, 115, 115, 115, 81, 115, 115, 84, + 85, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 66, 115, 68, 115, + 115, 71, 115, 115, 74, 75, 76, 115, 115, 115, + 115, 81, 115, 115, 84, 85, 115, 115, 115, 115, + 115, 115, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 115, 115, 66, 115, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 76, 115, + 115, 115, 115, 81, 115, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 115, 115, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 76, 115, 115, 115, 115, + 81, 115, 115, 84, 85, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 66, 115, 68, 115, 115, 71, 115, 115, 74, 75, + 76, 115, 115, 115, 115, 81, 115, 115, 84, 85, + 115, 115, 115, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 115, 115, 66, 115, 68, + 115, 115, 71, 115, 115, 74, 75, 76, 115, 115, + 115, 115, 81, 115, 115, 84, 85, 115, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 115, 115, 115, 115, 81, 115, 115, + 84, 85, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 115, 115, 66, + 115, 68, 115, 115, 71, 115, 115, 74, 75, 76, + 115, 115, 115, 115, 81, 115, 115, 84, 85, 115, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 66, 115, 68, 115, 115, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 115, 84, 85, 115, 115, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 115, + 115, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 76, 115, 115, 115, 115, 81, 115, 115, 84, + 85, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 66, 115, 68, 115, + 115, 71, 115, 115, 74, 75, 76, 115, 115, 115, + 115, 81, 115, 115, 84, 85, 115, 115, 115, 115, + 115, 115, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 115, 115, 66, 115, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 76, 115, + 115, 115, 115, 81, 115, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 115, 115, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 76, 115, 115, 115, 115, + 81, 115, 115, 84, 85, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 66, 115, 68, 115, 115, 71, 115, 115, 74, 75, + 76, 115, 115, 115, 115, 81, 115, 115, 84, 85, + 115, 115, 115, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 115, 115, 66, 115, 68, + 115, 115, 71, 115, 115, 74, 75, 76, 115, 115, + 115, 115, 81, 115, 115, 84, 85, 115, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 115, 115, 115, 115, 81, 115, 115, + 84, 85, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 115, 115, 66, + 115, 68, 115, 115, 71, 115, 115, 74, 75, 76, + 115, 115, 115, 115, 81, 115, 115, 84, 85, 115, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 66, 115, 68, 115, 115, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 115, 84, 85, 115, 115, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 115, + 115, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 76, 115, 115, 115, 115, 81, 115, 115, 84, + 85, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 66, 115, 68, 115, + 115, 71, 115, 115, 74, 75, 76, 115, 115, 115, + 115, 81, 115, 115, 84, 85, 115, 115, 115, 115, + 115, 115, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 115, 115, 66, 115, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 76, 115, + 115, 115, 115, 81, 115, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 115, 115, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 115, 115, 115, 115, 66, + 81, 68, 115, 115, 71, 115, 115, 74, 75, 90, + 115, 92, 93, 94, 81, 96, 115, 98, 99, 100, + 115, 115, 115, 90, 115, 92, 93, 94, 115, 96, + 3, 98, 99, 100, 115, 115, 9, 10, 11, 12, + 115, 14, 115, 115, 115, 18, 19, 115, 115, 115, + 115, 24, 115, 115, 26, 28, 29, 30, 115, 115, + 115, 23, 115, 25, 36, 37, 38, 39, 115, 31, + 115, 115, 115, 115, 36, 37, 38, 39, 115, 115, + 115, 53, 54, 55, 56, 57, 59, 60, 115, 115, + 3, 53, 54, 55, 56, 57, 9, 10, 11, 12, + 115, 14, 115, 115, 115, 18, 19, 9, 115, 115, + 12, 24, 115, 115, 16, 28, 29, 30, 35, 36, + 37, 38, 39, 25, 36, 37, 38, 39, 115, 31, + 115, 115, 115, 115, 115, 115, 53, 54, 55, 56, + 57, 53, 54, 55, 56, 57, 59, 60, 60, 115, + 3, 4, 5, 6, 2, 115, 9, 10, 11, 12, + 115, 9, 115, 115, 12, 18, 19, 15, 16, 17, + 115, 24, 115, 21, 115, 28, 29, 30, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 115, 115, + 115, 115, 115, 81, 115, 43, 115, 115, 46, 115, + 48, 115, 50, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 115, 66, 115, 68, 73, 115, 71, + 115, 115, 74, 75, 115, 115, 115, 83, 115, 81, + 86, 87, 88, 89, 115, 91, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 115, + 66, 115, 68, 115, 73, 71, 115, 115, 74, 75, + 115, 115, 115, 115, 83, 81, 115, 86, 87, 88, + 89, 115, 91, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 115, 66, 115, 68, 115, + 73, 71, 115, 115, 74, 75, 115, 115, 115, 115, + 83, 81, 115, 86, 87, 88, 89, 71, 91, 115, + 74, 115, 92, 93, 94, 115, 96, 81, 98, 99, + 100, 115, 66, 115, 68, 115, 115, 71, 115, 93, + 74, 75, 115, 115, 98, 99, 100, 81, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 115, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 115, 115, + 115, 115, 115, 81, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 115, 66, 115, 68, 115, 115, 71, + 115, 1, 74, 75, 115, 115, 115, 115, 115, 81, + 115, 115, 115, 13, 115, 115, 115, 17, 115, 115, + 92, 93, 94, 115, 96, 25, 98, 99, 100, 115, + 66, 31, 68, 2, 34, 71, 115, 115, 74, 75, + 115, 115, 115, 115, 115, 81, 46, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 34, 115, 36, 37, 38, + 39, 115, 115, 115, 115, 115, 115, 46, 115, 115, + 115, 115, 115, 115, 53, 54, 55, 56, 57, 2, + 115, 115, 115, 115, 115, 115, 9, 115, 115, 12, + 115, 115, 2, 16, 17, 115, 115, 115, 21, 9, + 115, 115, 12, 115, 115, 15, 16, 17, 115, 115, + 115, 21, 115, 115, 115, 115, 115, 115, 115, 13, + 43, 115, 115, 46, 115, 48, 115, 50, 51, 115, + 115, 115, 115, 43, 115, 115, 46, 115, 48, 115, + 50, 2, 36, 37, 38, 39, 115, 13, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 53, + 54, 55, 56, 57, 36, 37, 38, 39, 115, 115, + 36, 37, 38, 39, 13, 36, 37, 38, 39, 51, + 13, 53, 54, 55, 56, 57, 13, 53, 54, 55, + 56, 57, 53, 54, 55, 56, 57, 36, 37, 38, + 39, 115, 115, 36, 37, 38, 39, 115, 115, 36, + 37, 38, 39, 115, 53, 54, 55, 56, 57, 115, + 53, 54, 55, 56, 57, 2, 53, 54, 55, 56, + 57, 2, 9, 115, 115, 12, 115, 115, 9, 16, + 17, 12, 115, 115, 21, 16, 17, 115, 115, 115, + 21, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 43, 115, 115, 46, + 115, 48, 43, 50, 115, 46, 115, 48, 115, 50, + 115, 36, 37, 38, 39, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 53, 54, + 55, 56, 57, ); - const YY_SHIFT_USE_DFLT = -11; - const YY_SHIFT_MAX = 239; + const YY_SHIFT_USE_DFLT = -21; + const YY_SHIFT_MAX = 244; public static $yy_shift_ofst = array( - -11, 98, 98, 148, 198, 198, 248, 148, 148, 198, - 148, 248, -2, 48, 298, 148, 148, 148, 298, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 348, 148, 148, 148, 148, 148, 398, 148, 148, 148, - 448, 498, 498, 498, 498, 498, 498, 498, 498, 147, - 1962, 1953, 1953, 35, 1952, 2007, 2012, 2413, 2400, 2423, - 2444, 415, 2450, 2457, 2482, 2478, 465, 465, 465, 465, - 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, - 465, 465, 465, 465, 465, 465, 2139, 90, 143, 2011, - 2533, 1963, 36, 103, 143, 143, 90, 90, 235, 2070, - 2075, 634, 59, 636, 641, 663, 359, 359, 203, 221, - 269, 221, 306, 332, 196, 378, 378, 264, 385, 319, - 221, 5, 5, 5, 5, 5, 5, 5, 5, 112, - 112, 82, 5, -11, -11, 2315, 2362, 2379, 2397, 2513, - 49, 665, 409, 218, 221, 221, 458, 221, 382, 221, - 382, 221, 394, 394, 221, 221, 221, 221, 394, 40, - 394, 394, 394, 399, 394, 399, 394, 221, 221, 221, - 221, 5, 463, 5, 5, 463, 5, 462, 112, 112, - 112, -11, -11, -11, -11, -11, -11, 2348, 11, 100, - -10, 190, 881, 141, 265, 292, 252, 425, 479, 350, - 313, 440, 240, 429, 477, 459, 480, 153, 486, 501, - 509, 535, 538, 510, 557, 567, 568, 558, 569, 571, - 575, 580, 585, 587, 562, 572, 576, 586, 593, 462, - 611, 581, 598, 640, 597, 612, 655, 658, 648, 673, + -21, 100, 100, 151, 202, 202, 253, 151, 202, 151, + 151, 253, -2, 49, 304, 151, 151, 151, 304, 151, + 151, 151, 151, 151, 151, 151, 151, 355, 151, 151, + 151, 151, 151, 151, 151, 151, 406, 151, 151, 151, + 457, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 2048, 702, 702, 99, 122, 658, 2038, 2526, 2093, 2548, + 2554, 2098, 2559, 2581, 2587, 2593, 2665, 2665, 2665, 2665, + 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, + 2665, 2665, 2665, 2665, 2665, 2665, 2037, 2410, 172, 24, + 2097, 963, 2108, 45, 182, 24, 24, 172, 172, 101, + 12, 2157, 2162, 221, 643, 92, 255, 296, 366, 366, + 233, -20, 188, -20, 317, 17, 229, 394, 105, 394, + 393, 181, 290, -20, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 12, 12, 68, 14, -21, -21, 2497, + 2510, 2643, 2649, 720, 152, 771, 468, 309, -20, -20, + 467, -20, 325, -20, 325, -20, 37, 37, 409, 37, + 409, 37, -20, -20, -20, -20, 37, 356, 37, 37, + 37, -20, -20, -20, -20, 14, 472, 14, 14, 472, + 14, 12, 474, 12, 12, 12, 12, -21, -21, -21, + -21, -21, -21, 2441, 11, 51, 194, 245, 991, 144, + 195, 385, 337, 464, 488, 399, 485, 469, 477, 497, + 500, 470, 390, 496, 479, 495, 519, 529, 530, 565, + 566, 563, 568, 567, 569, 570, 575, 576, 579, 582, + 539, 557, 583, 474, 595, 571, 572, 600, 601, 574, + 577, 602, 609, 592, 607, ); - const YY_REDUCE_USE_DFLT = -99; - const YY_REDUCE_MAX = 186; + const YY_REDUCE_USE_DFLT = -86; + const YY_REDUCE_MAX = 192; public static $yy_reduce_ofst = array( - 109, 492, 527, 561, 595, 632, 669, 703, 737, 771, - 808, 842, 876, 910, 944, 978, 1012, 1046, 1080, 1114, - 1148, 1182, 1216, 1250, 1284, 1318, 1352, 1386, 1420, 1454, - 1488, 1522, 1556, 1590, 1624, 1658, 1692, 1726, 1760, 1794, - 1828, 1862, 2036, 2071, 2107, 2142, 2178, 2213, 2249, 542, - 1824, 1858, 2104, 481, 114, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 608, 536, 645, 164, - 20, 101, -98, 34, 181, 212, -57, 174, 195, 3, - 254, -5, -79, 228, 228, 228, 180, -5, 222, 51, - 272, 291, 302, 305, 222, -75, 261, 228, 228, 228, - 331, 323, 228, 228, 228, 228, 228, 228, 228, 222, - 299, 228, 228, 360, 228, 102, 102, 102, 102, 102, - 85, 122, 102, 102, 188, 188, 300, 188, 324, 188, - 335, 188, 244, 244, 188, 188, 188, 188, 244, 321, - 244, 244, 244, 337, 244, 347, 244, 188, 188, 188, - 188, 375, 376, 375, 375, 376, 375, 400, 421, 421, - 421, 467, 452, 468, 471, 447, 470, + 9, 503, 538, 573, 608, 650, 701, 736, 777, 812, + 849, 884, 921, 956, 993, 1028, 1065, 1100, 1137, 1172, + 1209, 1244, 1281, 1316, 1353, 1388, 1425, 1460, 1497, 1532, + 1569, 1604, 1641, 1676, 1713, 1748, 1785, 1820, 1857, 1892, + 1929, 1943, 2122, 2158, 2194, 2230, 2266, 2302, 2338, 2374, + 2154, 2191, 2227, 2246, 742, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, 365, 452, -58, 517, + 59, 1, 205, 29, 50, 234, 246, 259, 279, 67, + -53, 87, 5, 146, 154, 80, 80, 80, 198, 154, + 200, 297, 320, 326, 338, 284, 200, 110, 322, 347, + 80, 80, 80, 377, 384, 80, 80, 80, 80, 80, + 80, 80, 80, 200, 333, 80, 80, 398, 80, 25, + 25, 25, 25, 25, 178, 207, 25, 25, 201, 201, + 251, 201, 254, 201, 291, 201, 224, 224, 285, 224, + 302, 224, 201, 201, 201, 201, 224, 311, 224, 224, + 224, 201, 201, 201, 201, 348, 373, 348, 348, 373, + 348, 386, 420, 386, 386, 386, 386, 445, 459, 462, + 486, 455, 458, ); public static $yyExpectedTokens = array( array(), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(2, 9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 39, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(2, 9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 39, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(23, 25, 31, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), array(14, 16, 47, 49, 52, ), - array(23, 25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ), array(14, 16, 49, 52, ), - array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ), - array(20, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(26, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(35, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 51, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, 59, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(2, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), + array(20, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(26, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(35, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 51, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, 60, ), + array(2, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 59, 60, ), array(1, 13, 17, 25, 31, 34, 46, ), array(14, 34, 52, ), array(1, 25, 31, ), - array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ), + array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 59, 60, ), array(9, 12, 16, 25, 27, 31, ), array(9, 12, 16, 25, 31, ), array(17, 43, 50, ), @@ -937,10 +973,11 @@ public static $yy_action = array( array(14, 34, 52, ), array(14, 34, 52, ), array(1, 2, ), + array(17, ), array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 24, 28, 29, 30, ), array(2, 9, 12, 15, 16, 17, 21, 43, 46, 48, 50, ), - array(9, 12, 16, 48, ), array(12, 14, 16, 52, ), + array(9, 12, 16, 48, ), array(1, 13, 25, 31, ), array(1, 13, 25, 31, ), array(1, 13, 25, 31, ), @@ -954,10 +991,11 @@ public static $yy_action = array( array(1, 17, ), array(17, 46, ), array(14, 16, ), + array(17, 34, ), array(14, 16, ), array(1, 51, ), - array(1, 2, ), array(1, 27, ), + array(1, 2, ), array(25, 31, ), array(1, ), array(1, ), @@ -967,6 +1005,7 @@ public static $yy_action = array( array(1, ), array(1, ), array(1, ), + array(1, ), array(17, ), array(17, ), array(1, ), @@ -992,6 +1031,10 @@ public static $yy_action = array( array(25, 31, ), array(43, 50, ), array(43, 50, ), + array(43, 50, ), + array(43, 50, ), + array(43, 50, ), + array(43, 50, ), array(25, 31, ), array(25, 31, ), array(25, 31, ), @@ -1001,10 +1044,6 @@ public static $yy_action = array( array(43, 50, ), array(43, 50, ), array(43, 50, ), - array(43, 50, ), - array(43, 50, ), - array(43, 50, ), - array(43, 50, ), array(25, 31, ), array(25, 31, ), array(25, 31, ), @@ -1015,17 +1054,19 @@ public static $yy_action = array( array(1, ), array(2, ), array(1, ), + array(17, ), array(34, ), array(17, ), array(17, ), array(17, ), + array(17, ), array(), array(), array(), array(), array(), array(), - array(2, 34, 36, 37, 38, 39, 46, 53, 54, 55, 56, ), + array(2, 34, 36, 37, 38, 39, 46, 53, 54, 55, 56, 57, ), array(13, 20, 22, 25, 31, 33, 35, 43, ), array(13, 15, 25, 31, 34, 46, ), array(13, 21, 25, 31, 44, ), @@ -1033,7 +1074,7 @@ public static $yy_action = array( array(9, 12, 16, 48, ), array(34, 43, 46, 51, ), array(27, 34, 46, ), - array(21, 44, 59, ), + array(21, 44, 60, ), array(21, 44, 51, ), array(6, 8, ), array(7, 8, ), @@ -1044,13 +1085,13 @@ public static $yy_action = array( array(34, 46, ), array(34, 46, ), array(33, 35, ), - array(33, 35, ), array(33, 51, ), array(43, 51, ), array(33, 35, ), array(33, 35, ), array(33, 35, ), array(33, 35, ), + array(33, 35, ), array(15, 43, ), array(7, ), array(13, ), @@ -1067,10 +1108,9 @@ public static $yy_action = array( array(32, ), array(34, ), array(16, ), - array(34, ), + array(49, ), + array(49, ), array(16, ), - array(49, ), - array(49, ), array(16, ), array(51, ), array(51, ), @@ -1178,48 +1218,50 @@ public static $yy_action = array( array(), array(), array(), + array(), ); public static $yy_default = array( - 350, 540, 540, 540, 525, 525, 540, 501, 501, 524, - 452, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 390, 369, 390, 540, 540, 540, 395, 540, 540, 540, - 363, 540, 540, 540, 540, 540, 374, 500, 413, 420, - 499, 526, 528, 527, 419, 421, 418, 422, 451, 449, - 397, 401, 402, 392, 395, 363, 433, 540, 390, 540, - 390, 390, 514, 454, 390, 390, 540, 540, 381, 340, - 453, 466, 540, 404, 404, 404, 466, 466, 454, 390, - 540, 390, 390, 384, 454, 540, 540, 404, 404, 404, - 371, 386, 404, 411, 424, 425, 426, 412, 417, 454, - 511, 424, 410, 348, 508, 453, 453, 453, 453, 453, - 540, 468, 466, 482, 360, 370, 540, 373, 540, 378, - 540, 379, 463, 464, 364, 366, 367, 368, 492, 466, - 491, 494, 493, 457, 458, 459, 460, 380, 376, 377, - 372, 382, 502, 385, 387, 503, 442, 466, 488, 515, - 512, 348, 507, 507, 507, 466, 466, 433, 429, 433, - 423, 423, 467, 433, 433, 423, 423, 346, 540, 540, - 540, 423, 433, 443, 540, 540, 540, 540, 429, 540, - 461, 461, 540, 429, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 429, 431, 540, 513, 540, 482, - 540, 540, 540, 540, 540, 438, 540, 540, 540, 398, - 341, 342, 343, 344, 345, 347, 349, 351, 352, 353, - 354, 355, 356, 357, 359, 388, 389, 484, 485, 486, - 506, 383, 504, 505, 427, 436, 437, 446, 447, 465, - 469, 470, 471, 405, 406, 407, 408, 409, 428, 430, - 432, 434, 438, 439, 440, 414, 415, 416, 441, 444, - 445, 479, 477, 516, 517, 518, 519, 455, 456, 490, - 461, 462, 483, 498, 358, 489, 536, 537, 529, 530, - 531, 534, 533, 535, 538, 539, 532, 521, 523, 522, - 520, 495, 480, 478, 476, 473, 474, 475, 481, 496, - 497, 435, 472, 510, 487, 482, 391, 375, 399, 403, + 356, 551, 551, 551, 536, 536, 551, 510, 535, 459, + 510, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 396, 375, 396, 551, 551, 551, 401, 551, 551, 551, + 369, 551, 551, 551, 551, 551, 380, 509, 419, 537, + 427, 539, 538, 426, 428, 425, 429, 458, 456, 508, + 403, 407, 408, 398, 401, 369, 551, 440, 551, 396, + 551, 396, 396, 524, 461, 396, 396, 551, 551, 387, + 496, 346, 460, 551, 473, 410, 410, 410, 473, 473, + 461, 396, 551, 396, 396, 390, 461, 551, 522, 551, + 410, 410, 410, 377, 392, 410, 417, 431, 432, 433, + 418, 423, 424, 461, 520, 431, 416, 354, 517, 460, + 460, 460, 460, 460, 551, 475, 473, 489, 366, 376, + 551, 379, 551, 384, 551, 385, 470, 471, 464, 465, + 466, 467, 370, 372, 373, 374, 501, 473, 500, 503, + 502, 386, 382, 383, 378, 388, 511, 391, 393, 512, + 449, 523, 473, 495, 525, 521, 497, 354, 516, 516, + 516, 473, 473, 440, 436, 440, 430, 430, 474, 440, + 440, 430, 430, 352, 551, 551, 551, 430, 440, 450, + 551, 551, 551, 436, 551, 468, 468, 551, 551, 436, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 436, 438, 551, 489, 551, 551, 551, 551, 551, 551, + 445, 551, 551, 551, 404, 347, 348, 349, 350, 351, + 353, 355, 357, 358, 359, 360, 361, 362, 363, 365, + 394, 395, 491, 492, 493, 515, 389, 513, 514, 434, + 443, 444, 453, 454, 472, 476, 477, 478, 411, 412, + 413, 414, 415, 435, 437, 439, 441, 445, 446, 447, + 498, 499, 420, 421, 422, 448, 451, 452, 486, 484, + 462, 463, 468, 469, 490, 526, 527, 528, 529, 530, + 364, 547, 548, 540, 541, 542, 545, 544, 546, 549, + 550, 543, 532, 534, 533, 531, 487, 485, 483, 480, + 481, 482, 488, 505, 507, 506, 504, 442, 479, 519, + 494, 489, 397, 381, 405, 409, ); - const YYNOCODE = 113; + const YYNOCODE = 116; const YYSTACKDEPTH = 500; - const YYNSTATE = 340; - const YYNRULE = 200; - const YYERRORSYMBOL = 60; + const YYNSTATE = 346; + const YYNRULE = 205; + const YYERRORSYMBOL = 61; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; public static $yyFallback = array( @@ -1262,20 +1304,21 @@ public static $yy_action = array( 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB', 'DOLLAR', 'LOGOP', 'SLOGOP', 'TLOGOP', - 'SINGLECOND', 'ARRAYOPEN', 'QUOTE', 'BACKTICK', - 'error', 'start', 'template', 'literal_e2', - 'literal_e1', 'smartytag', 'tagbody', 'tag', - 'outattr', 'eqoutattr', 'varindexed', 'output', - 'attributes', 'variablevalue', 'value', 'expr', - 'modifierlist', 'statement', 'statements', 'foraction', - 'varvar', 'modparameters', 'attribute', 'nullcoalescing', - 'ternary', 'tlop', 'lop', 'scond', - 'isin', 'array', 'function', 'ns1', - 'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'variablelist', - 'variable', 'object', 'configvariable', 'arrayindex', - 'indexdef', 'varvarele', 'objectchain', 'objectelement', - 'method', 'params', 'modifier', 'modparameter', - 'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent', + 'SINGLECOND', 'MATCHES', 'ARRAYOPEN', 'QUOTE', + 'BACKTICK', 'error', 'start', 'template', + 'literal_e2', 'literal_e1', 'smartytag', 'tagbody', + 'tag', 'outattr', 'eqoutattr', 'varindexed', + 'output', 'attributes', 'variablevalue', 'value', + 'expr', 'modifierlist', 'statement', 'statements', + 'foraction', 'varvar', 'modparameters', 'attribute', + 'nullcoalescing', 'ternary', 'tlop', 'lop', + 'scond', 'isin', 'array', 'matchop', + 'function', 'ns1', 'doublequoted_with_quotes', 'static_class_access', + 'arraydef', 'variablelist', 'variable', 'object', + 'configvariable', 'arrayindex', 'indexdef', 'varvarele', + 'objectchain', 'optobjectchain', 'objectelement', 'method', + 'params', 'modifier', 'modparameter', 'arrayelements', + 'arrayelement', 'doublequoted', 'doublequotedcontent', ); public static $yyRuleName = array( @@ -1357,6 +1400,7 @@ public static $yy_action = array( 'isin ::= ISIN', 'expr ::= expr isin array', 'expr ::= expr isin value', + 'expr ::= expr matchop value', 'nullcoalescing ::= expr QMARK QMARK expr', 'ternary ::= expr QMARK DOLLARID COLON expr', 'ternary ::= expr QMARK value COLON expr', @@ -1428,6 +1472,8 @@ public static $yy_action = array( 'varvarele ::= SIMPELOUTPUT', 'varvarele ::= LDEL expr RDEL', 'object ::= varindexed objectchain', + 'optobjectchain ::=', + 'optobjectchain ::= objectchain', 'objectchain ::= objectelement', 'objectchain ::= objectchain objectelement', 'objectelement ::= PTR ID arrayindex', @@ -1435,7 +1481,7 @@ public static $yy_action = array( 'objectelement ::= PTR LDEL expr RDEL arrayindex', 'objectelement ::= PTR ID LDEL expr RDEL arrayindex', 'objectelement ::= PTR method', - 'function ::= ns1 OPENP variablelist CLOSEP', + 'function ::= ns1 OPENP variablelist CLOSEP optobjectchain', 'method ::= ID OPENP params CLOSEP', 'method ::= DOLLARID OPENP params CLOSEP', 'params ::= params COMMA expr', @@ -1453,12 +1499,14 @@ public static $yy_action = array( 'static_class_access ::= method', 'static_class_access ::= method objectchain', 'static_class_access ::= ID', + 'static_class_access ::= ID objectchain', 'static_class_access ::= DOLLARID arrayindex', 'static_class_access ::= DOLLARID arrayindex objectchain', 'lop ::= LOGOP', 'lop ::= SLOGOP', 'tlop ::= TLOGOP', 'scond ::= SINGLECOND', + 'matchop ::= MATCHES', 'arraydef ::= OPENB arrayelements CLOSEB', 'arraydef ::= ARRAYOPEN arrayelements CLOSEP', 'arrayelements ::= arrayelement', @@ -1794,206 +1842,211 @@ public static $yy_action = array( } public static $yyRuleInfo = array( - array( 0 => 61, 1 => 1 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 4 ), + array( 0 => 62, 1 => 1 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 2 ), array( 0 => 63, 1 => 4 ), - array( 0 => 63, 1 => 1 ), - array( 0 => 64, 1 => 2 ), - array( 0 => 64, 1 => 0 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 0 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 65, 1 => 3 ), + array( 0 => 64, 1 => 4 ), + array( 0 => 64, 1 => 1 ), array( 0 => 65, 1 => 2 ), + array( 0 => 65, 1 => 0 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 0 ), array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 3 ), array( 0 => 66, 1 => 2 ), - array( 0 => 66, 1 => 2 ), + array( 0 => 67, 1 => 1 ), + array( 0 => 67, 1 => 2 ), + array( 0 => 67, 1 => 2 ), + array( 0 => 70, 1 => 2 ), array( 0 => 69, 1 => 2 ), - array( 0 => 68, 1 => 2 ), - array( 0 => 71, 1 => 1 ), - array( 0 => 71, 1 => 1 ), - array( 0 => 71, 1 => 1 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 4 ), - array( 0 => 67, 1 => 5 ), - array( 0 => 67, 1 => 6 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 8 ), - array( 0 => 79, 1 => 2 ), - array( 0 => 79, 1 => 1 ), - array( 0 => 67, 1 => 5 ), - array( 0 => 67, 1 => 7 ), - array( 0 => 67, 1 => 6 ), - array( 0 => 67, 1 => 8 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 4 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 4 ), - array( 0 => 67, 1 => 5 ), - array( 0 => 72, 1 => 2 ), array( 0 => 72, 1 => 1 ), - array( 0 => 72, 1 => 0 ), - array( 0 => 82, 1 => 4 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 4 ), - array( 0 => 78, 1 => 1 ), - array( 0 => 78, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 75, 1 => 1 ), - array( 0 => 75, 1 => 1 ), - array( 0 => 75, 1 => 1 ), - array( 0 => 75, 1 => 2 ), - array( 0 => 75, 1 => 2 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 2 ), - array( 0 => 88, 1 => 1 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 3 ), - array( 0 => 83, 1 => 4 ), - array( 0 => 84, 1 => 5 ), - array( 0 => 84, 1 => 5 ), - array( 0 => 84, 1 => 5 ), - array( 0 => 84, 1 => 4 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 91, 1 => 1 ), - array( 0 => 91, 1 => 1 ), - array( 0 => 95, 1 => 3 ), - array( 0 => 95, 1 => 3 ), - array( 0 => 95, 1 => 1 ), - array( 0 => 95, 1 => 1 ), - array( 0 => 95, 1 => 0 ), - array( 0 => 96, 1 => 1 ), - array( 0 => 96, 1 => 1 ), - array( 0 => 96, 1 => 3 ), - array( 0 => 96, 1 => 1 ), - array( 0 => 98, 1 => 3 ), - array( 0 => 98, 1 => 4 ), - array( 0 => 98, 1 => 3 ), - array( 0 => 98, 1 => 4 ), - array( 0 => 73, 1 => 1 ), - array( 0 => 73, 1 => 1 ), - array( 0 => 70, 1 => 2 ), - array( 0 => 70, 1 => 2 ), - array( 0 => 99, 1 => 2 ), - array( 0 => 99, 1 => 0 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 4 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 4 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 5 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 80, 1 => 1 ), - array( 0 => 80, 1 => 1 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 68, 1 => 6 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 8 ), array( 0 => 80, 1 => 2 ), - array( 0 => 101, 1 => 1 ), - array( 0 => 101, 1 => 1 ), - array( 0 => 101, 1 => 3 ), - array( 0 => 97, 1 => 2 ), - array( 0 => 102, 1 => 1 ), - array( 0 => 102, 1 => 2 ), - array( 0 => 103, 1 => 3 ), - array( 0 => 103, 1 => 3 ), - array( 0 => 103, 1 => 5 ), - array( 0 => 103, 1 => 6 ), - array( 0 => 103, 1 => 2 ), - array( 0 => 90, 1 => 4 ), - array( 0 => 104, 1 => 4 ), - array( 0 => 104, 1 => 4 ), - array( 0 => 105, 1 => 3 ), - array( 0 => 105, 1 => 1 ), - array( 0 => 105, 1 => 0 ), + array( 0 => 80, 1 => 1 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 68, 1 => 7 ), + array( 0 => 68, 1 => 6 ), + array( 0 => 68, 1 => 8 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 73, 1 => 2 ), + array( 0 => 73, 1 => 1 ), + array( 0 => 73, 1 => 0 ), + array( 0 => 83, 1 => 4 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 4 ), + array( 0 => 79, 1 => 1 ), + array( 0 => 79, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 2 ), + array( 0 => 76, 1 => 2 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), array( 0 => 76, 1 => 3 ), array( 0 => 76, 1 => 2 ), - array( 0 => 106, 1 => 3 ), - array( 0 => 106, 1 => 2 ), + array( 0 => 89, 1 => 1 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 84, 1 => 4 ), + array( 0 => 85, 1 => 5 ), + array( 0 => 85, 1 => 5 ), + array( 0 => 85, 1 => 5 ), + array( 0 => 85, 1 => 4 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), + array( 0 => 93, 1 => 1 ), + array( 0 => 93, 1 => 1 ), + array( 0 => 97, 1 => 3 ), + array( 0 => 97, 1 => 3 ), + array( 0 => 97, 1 => 1 ), + array( 0 => 97, 1 => 1 ), + array( 0 => 97, 1 => 0 ), + array( 0 => 98, 1 => 1 ), + array( 0 => 98, 1 => 1 ), + array( 0 => 98, 1 => 3 ), + array( 0 => 98, 1 => 1 ), + array( 0 => 100, 1 => 3 ), + array( 0 => 100, 1 => 4 ), + array( 0 => 100, 1 => 3 ), + array( 0 => 100, 1 => 4 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 71, 1 => 2 ), + array( 0 => 71, 1 => 2 ), + array( 0 => 101, 1 => 2 ), + array( 0 => 101, 1 => 0 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 4 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 4 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 5 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 81, 1 => 1 ), + array( 0 => 81, 1 => 1 ), array( 0 => 81, 1 => 2 ), - array( 0 => 81, 1 => 0 ), - array( 0 => 107, 1 => 2 ), - array( 0 => 107, 1 => 3 ), - array( 0 => 107, 1 => 2 ), - array( 0 => 93, 1 => 1 ), - array( 0 => 93, 1 => 2 ), - array( 0 => 93, 1 => 1 ), - array( 0 => 93, 1 => 2 ), - array( 0 => 93, 1 => 3 ), - array( 0 => 86, 1 => 1 ), - array( 0 => 86, 1 => 1 ), - array( 0 => 85, 1 => 1 ), - array( 0 => 87, 1 => 1 ), - array( 0 => 94, 1 => 3 ), - array( 0 => 94, 1 => 3 ), - array( 0 => 108, 1 => 1 ), + array( 0 => 103, 1 => 1 ), + array( 0 => 103, 1 => 1 ), + array( 0 => 103, 1 => 3 ), + array( 0 => 99, 1 => 2 ), + array( 0 => 105, 1 => 0 ), + array( 0 => 105, 1 => 1 ), + array( 0 => 104, 1 => 1 ), + array( 0 => 104, 1 => 2 ), + array( 0 => 106, 1 => 3 ), + array( 0 => 106, 1 => 3 ), + array( 0 => 106, 1 => 5 ), + array( 0 => 106, 1 => 6 ), + array( 0 => 106, 1 => 2 ), + array( 0 => 92, 1 => 5 ), + array( 0 => 107, 1 => 4 ), + array( 0 => 107, 1 => 4 ), array( 0 => 108, 1 => 3 ), - array( 0 => 108, 1 => 2 ), + array( 0 => 108, 1 => 1 ), array( 0 => 108, 1 => 0 ), + array( 0 => 77, 1 => 3 ), + array( 0 => 77, 1 => 2 ), array( 0 => 109, 1 => 3 ), - array( 0 => 109, 1 => 3 ), - array( 0 => 109, 1 => 1 ), - array( 0 => 92, 1 => 2 ), - array( 0 => 92, 1 => 3 ), + array( 0 => 109, 1 => 2 ), + array( 0 => 82, 1 => 2 ), + array( 0 => 82, 1 => 0 ), array( 0 => 110, 1 => 2 ), - array( 0 => 110, 1 => 1 ), - array( 0 => 111, 1 => 3 ), - array( 0 => 111, 1 => 3 ), + array( 0 => 110, 1 => 3 ), + array( 0 => 110, 1 => 2 ), + array( 0 => 95, 1 => 1 ), + array( 0 => 95, 1 => 2 ), + array( 0 => 95, 1 => 1 ), + array( 0 => 95, 1 => 2 ), + array( 0 => 95, 1 => 2 ), + array( 0 => 95, 1 => 3 ), + array( 0 => 87, 1 => 1 ), + array( 0 => 87, 1 => 1 ), + array( 0 => 86, 1 => 1 ), + array( 0 => 88, 1 => 1 ), + array( 0 => 91, 1 => 1 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), array( 0 => 111, 1 => 1 ), array( 0 => 111, 1 => 3 ), - array( 0 => 111, 1 => 3 ), - array( 0 => 111, 1 => 1 ), - array( 0 => 111, 1 => 1 ), + array( 0 => 111, 1 => 2 ), + array( 0 => 111, 1 => 0 ), + array( 0 => 112, 1 => 3 ), + array( 0 => 112, 1 => 3 ), + array( 0 => 112, 1 => 1 ), + array( 0 => 94, 1 => 2 ), + array( 0 => 94, 1 => 3 ), + array( 0 => 113, 1 => 2 ), + array( 0 => 113, 1 => 1 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 1 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 1 ), + array( 0 => 114, 1 => 1 ), ); public static $yyReduceMap = array( @@ -2013,20 +2066,22 @@ public static $yy_action = array( 64 => 6, 65 => 6, 66 => 6, - 83 => 6, - 88 => 6, + 84 => 6, 89 => 6, - 94 => 6, - 98 => 6, + 90 => 6, + 95 => 6, 99 => 6, - 103 => 6, + 100 => 6, 104 => 6, - 106 => 6, - 122 => 6, - 182 => 6, - 188 => 6, + 105 => 6, + 107 => 6, + 123 => 6, + 151 => 6, + 187 => 6, + 193 => 6, 7 => 7, 8 => 8, + 150 => 8, 9 => 9, 11 => 11, 12 => 12, @@ -2064,21 +2119,21 @@ public static $yy_action = array( 48 => 48, 49 => 49, 58 => 49, - 110 => 49, 111 => 49, - 160 => 49, - 164 => 49, - 168 => 49, - 170 => 49, + 112 => 49, + 163 => 49, + 167 => 49, + 171 => 49, + 173 => 49, 50 => 50, - 112 => 50, - 161 => 50, - 167 => 50, + 113 => 50, + 164 => 50, + 170 => 50, 51 => 51, 52 => 52, 53 => 52, 54 => 54, - 145 => 54, + 146 => 54, 57 => 57, 59 => 59, 60 => 60, @@ -2099,29 +2154,29 @@ public static $yy_action = array( 78 => 78, 79 => 79, 80 => 80, - 81 => 80, - 82 => 82, - 84 => 84, - 86 => 84, - 87 => 84, - 125 => 84, + 81 => 81, + 82 => 81, + 83 => 83, 85 => 85, - 90 => 90, + 87 => 85, + 88 => 85, + 126 => 85, + 86 => 86, 91 => 91, 92 => 92, 93 => 93, - 95 => 95, + 94 => 94, 96 => 96, - 97 => 96, - 100 => 100, + 97 => 97, + 98 => 97, 101 => 101, 102 => 102, - 105 => 105, - 107 => 107, + 103 => 103, + 106 => 106, 108 => 108, - 109 => 108, - 159 => 108, - 113 => 113, + 109 => 109, + 110 => 109, + 162 => 109, 114 => 114, 115 => 115, 116 => 116, @@ -2130,35 +2185,33 @@ public static $yy_action = array( 119 => 119, 120 => 120, 121 => 121, - 123 => 123, + 122 => 122, 124 => 124, - 126 => 126, - 185 => 126, + 125 => 125, 127 => 127, + 190 => 127, 128 => 128, 129 => 129, 130 => 130, 131 => 131, 132 => 132, - 140 => 132, 133 => 133, + 141 => 133, 134 => 134, 135 => 135, - 136 => 135, - 138 => 135, - 139 => 135, - 137 => 137, - 141 => 141, + 136 => 136, + 137 => 136, + 139 => 136, + 140 => 136, + 138 => 138, 142 => 142, 143 => 143, - 189 => 143, 144 => 144, - 146 => 146, + 194 => 144, + 145 => 145, 147 => 147, 148 => 148, 149 => 149, - 150 => 150, - 151 => 151, 152 => 152, 153 => 153, 154 => 154, @@ -2166,14 +2219,14 @@ public static $yy_action = array( 156 => 156, 157 => 157, 158 => 158, - 162 => 162, - 163 => 163, + 159 => 159, + 160 => 160, + 161 => 161, 165 => 165, 166 => 166, + 168 => 168, 169 => 169, - 171 => 171, 172 => 172, - 173 => 173, 174 => 174, 175 => 175, 176 => 176, @@ -2181,21 +2234,26 @@ public static $yy_action = array( 178 => 178, 179 => 179, 180 => 180, - 181 => 180, + 181 => 181, + 182 => 182, 183 => 183, 184 => 184, - 186 => 186, - 187 => 187, - 190 => 190, + 185 => 185, + 186 => 185, + 188 => 188, + 189 => 189, 191 => 191, 192 => 192, - 193 => 193, - 196 => 193, - 194 => 194, - 197 => 194, 195 => 195, + 196 => 196, + 197 => 197, 198 => 198, + 201 => 198, 199 => 199, + 202 => 199, + 200 => 200, + 203 => 203, + 204 => 204, ); // line 245 "src/Parser/TemplateParser.y" public function yy_r0(){ @@ -2537,43 +2595,47 @@ public static $yy_action = array( } // line 685 "src/Parser/TemplateParser.y" public function yy_r78(){ - $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?? '.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor . ',' . $this->yystack[$this->yyidx + -2]->minor . ') '; } -// line 692 "src/Parser/TemplateParser.y" +// line 690 "src/Parser/TemplateParser.y" public function yy_r79(){ - $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -2]->minor,1)); - $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? $_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\') : '.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?? '.$this->yystack[$this->yyidx + 0]->minor; } // line 697 "src/Parser/TemplateParser.y" public function yy_r80(){ + $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -2]->minor,1)); + $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? $_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\') : '.$this->yystack[$this->yyidx + 0]->minor; + } +// line 702 "src/Parser/TemplateParser.y" + public function yy_r81(){ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } -// line 706 "src/Parser/TemplateParser.y" - public function yy_r82(){ +// line 711 "src/Parser/TemplateParser.y" + public function yy_r83(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?: '.$this->yystack[$this->yyidx + 0]->minor; } -// line 716 "src/Parser/TemplateParser.y" - public function yy_r84(){ - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; - } // line 721 "src/Parser/TemplateParser.y" public function yy_r85(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; + } +// line 726 "src/Parser/TemplateParser.y" + public function yy_r86(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } -// line 742 "src/Parser/TemplateParser.y" - public function yy_r90(){ +// line 747 "src/Parser/TemplateParser.y" + public function yy_r91(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -// line 746 "src/Parser/TemplateParser.y" - public function yy_r91(){ - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; - } -// line 750 "src/Parser/TemplateParser.y" +// line 751 "src/Parser/TemplateParser.y" public function yy_r92(){ - $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; } // line 755 "src/Parser/TemplateParser.y" public function yy_r93(){ + $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; + } +// line 760 "src/Parser/TemplateParser.y" + public function yy_r94(){ if (defined($this->yystack[$this->yyidx + 0]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); @@ -2583,16 +2645,16 @@ public static $yy_action = array( $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } } -// line 772 "src/Parser/TemplateParser.y" - public function yy_r95(){ +// line 777 "src/Parser/TemplateParser.y" + public function yy_r96(){ $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')'; } -// line 776 "src/Parser/TemplateParser.y" - public function yy_r96(){ +// line 781 "src/Parser/TemplateParser.y" + public function yy_r97(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -// line 794 "src/Parser/TemplateParser.y" - public function yy_r100(){ +// line 799 "src/Parser/TemplateParser.y" + public function yy_r101(){ if ($this->security && $this->security->static_classes !== array()) { $this->compiler->trigger_template_error('dynamic static class not allowed by security setting'); } @@ -2605,19 +2667,19 @@ public static $yy_action = array( } $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1]; } -// line 809 "src/Parser/TemplateParser.y" - public function yy_r101(){ +// line 814 "src/Parser/TemplateParser.y" + public function yy_r102(){ $prefixVar = $this->compiler->getNewPrefixVariable(); $tmp = $this->compiler->appendCode('', (string) $this->yystack[$this->yyidx + 0]->minor); $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "")); $this->_retvalue = $prefixVar; } -// line 816 "src/Parser/TemplateParser.y" - public function yy_r102(){ +// line 821 "src/Parser/TemplateParser.y" + public function yy_r103(){ $this->_retvalue = $this->compiler->compileModifier($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor); } -// line 829 "src/Parser/TemplateParser.y" - public function yy_r105(){ +// line 834 "src/Parser/TemplateParser.y" + public function yy_r106(){ if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler))) { if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) { $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1]; @@ -2628,21 +2690,21 @@ public static $yy_action = array( $this->compiler->trigger_template_error ('static class \''.$this->yystack[$this->yyidx + -2]->minor.'\' is undefined or not allowed by security setting'); } } -// line 848 "src/Parser/TemplateParser.y" - public function yy_r107(){ +// line 853 "src/Parser/TemplateParser.y" + public function yy_r108(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -// line 856 "src/Parser/TemplateParser.y" - public function yy_r108(){ +// line 861 "src/Parser/TemplateParser.y" + public function yy_r109(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor)); } -// line 883 "src/Parser/TemplateParser.y" - public function yy_r113(){ +// line 888 "src/Parser/TemplateParser.y" + public function yy_r114(){ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1)); $this->_retvalue = array('$_smarty_tpl->hasVariable(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')','$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')'); } -// line 887 "src/Parser/TemplateParser.y" - public function yy_r114(){ +// line 892 "src/Parser/TemplateParser.y" + public function yy_r115(){ if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') { $smarty_var = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); $this->_retvalue = array('true', $smarty_var); @@ -2654,118 +2716,118 @@ public static $yy_action = array( $this->_retvalue = array('true', '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor['var'] . ')'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); } } -// line 901 "src/Parser/TemplateParser.y" - public function yy_r115(){ - $this->_retvalue = array('true', '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor); - } // line 906 "src/Parser/TemplateParser.y" public function yy_r116(){ - $this->_retvalue = array('true', $this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = array('true', '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor); } // line 911 "src/Parser/TemplateParser.y" public function yy_r117(){ + $this->_retvalue = array('true', $this->yystack[$this->yyidx + 0]->minor); + } +// line 916 "src/Parser/TemplateParser.y" + public function yy_r118(){ $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\''); } -// line 915 "src/Parser/TemplateParser.y" - public function yy_r118(){ +// line 920 "src/Parser/TemplateParser.y" + public function yy_r119(){ $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)'; } -// line 919 "src/Parser/TemplateParser.y" - public function yy_r119(){ +// line 924 "src/Parser/TemplateParser.y" + public function yy_r120(){ $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor); } -// line 923 "src/Parser/TemplateParser.y" - public function yy_r120(){ +// line 928 "src/Parser/TemplateParser.y" + public function yy_r121(){ $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)'; } -// line 927 "src/Parser/TemplateParser.y" - public function yy_r121(){ +// line 932 "src/Parser/TemplateParser.y" + public function yy_r122(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor[1]; } -// line 935 "src/Parser/TemplateParser.y" - public function yy_r123(){ +// line 940 "src/Parser/TemplateParser.y" + public function yy_r124(){ $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } -// line 938 "src/Parser/TemplateParser.y" - public function yy_r124(){ +// line 943 "src/Parser/TemplateParser.y" + public function yy_r125(){ $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } -// line 951 "src/Parser/TemplateParser.y" - public function yy_r126(){ +// line 956 "src/Parser/TemplateParser.y" + public function yy_r127(){ return; } -// line 957 "src/Parser/TemplateParser.y" - public function yy_r127(){ +// line 962 "src/Parser/TemplateParser.y" + public function yy_r128(){ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1)); $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')]'; } -// line 961 "src/Parser/TemplateParser.y" - public function yy_r128(){ +// line 966 "src/Parser/TemplateParser.y" + public function yy_r129(){ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor . ')]'; } -// line 966 "src/Parser/TemplateParser.y" - public function yy_r129(){ +// line 971 "src/Parser/TemplateParser.y" + public function yy_r130(){ $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor); $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -2]->minor . ')->'.$this->yystack[$this->yyidx + 0]->minor.']'; } -// line 971 "src/Parser/TemplateParser.y" - public function yy_r130(){ - $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']'; - } -// line 975 "src/Parser/TemplateParser.y" +// line 976 "src/Parser/TemplateParser.y" public function yy_r131(){ - $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']'; + $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']'; } // line 980 "src/Parser/TemplateParser.y" public function yy_r132(){ - $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']'; + $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']'; } // line 985 "src/Parser/TemplateParser.y" public function yy_r133(){ + $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']'; + } +// line 990 "src/Parser/TemplateParser.y" + public function yy_r134(){ $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; } -// line 989 "src/Parser/TemplateParser.y" - public function yy_r134(){ +// line 994 "src/Parser/TemplateParser.y" + public function yy_r135(){ $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; } -// line 992 "src/Parser/TemplateParser.y" - public function yy_r135(){ +// line 997 "src/Parser/TemplateParser.y" + public function yy_r136(){ $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']'; } -// line 998 "src/Parser/TemplateParser.y" - public function yy_r137(){ +// line 1003 "src/Parser/TemplateParser.y" + public function yy_r138(){ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -1]->minor,1)); $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\')]'; } -// line 1015 "src/Parser/TemplateParser.y" - public function yy_r141(){ +// line 1020 "src/Parser/TemplateParser.y" + public function yy_r142(){ $this->_retvalue = '[]'; } -// line 1025 "src/Parser/TemplateParser.y" - public function yy_r142(){ - $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''; - } -// line 1029 "src/Parser/TemplateParser.y" +// line 1030 "src/Parser/TemplateParser.y" public function yy_r143(){ - $this->_retvalue = '\'\''; + $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''; } // line 1034 "src/Parser/TemplateParser.y" public function yy_r144(){ + $this->_retvalue = '\'\''; + } +// line 1039 "src/Parser/TemplateParser.y" + public function yy_r145(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1042 "src/Parser/TemplateParser.y" - public function yy_r146(){ +// line 1047 "src/Parser/TemplateParser.y" + public function yy_r147(){ $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $'); $this->compiler->triggerTagNoCache($var); $this->_retvalue = '$_smarty_tpl->getValue(\''.$var.'\')'; } -// line 1049 "src/Parser/TemplateParser.y" - public function yy_r147(){ +// line 1054 "src/Parser/TemplateParser.y" + public function yy_r148(){ $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } -// line 1056 "src/Parser/TemplateParser.y" - public function yy_r148(){ +// line 1061 "src/Parser/TemplateParser.y" + public function yy_r149(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') { $this->_retvalue = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor; } else { @@ -2773,93 +2835,93 @@ public static $yy_action = array( $this->_retvalue = '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor['var'] . ')'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; } } -// line 1066 "src/Parser/TemplateParser.y" - public function yy_r149(){ +// line 1081 "src/Parser/TemplateParser.y" + public function yy_r152(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -// line 1071 "src/Parser/TemplateParser.y" - public function yy_r150(){ +// line 1086 "src/Parser/TemplateParser.y" + public function yy_r153(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -// line 1076 "src/Parser/TemplateParser.y" - public function yy_r151(){ +// line 1091 "src/Parser/TemplateParser.y" + public function yy_r154(){ if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') { $this->compiler->trigger_template_error (self::ERR1); } $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -// line 1083 "src/Parser/TemplateParser.y" - public function yy_r152(){ +// line 1098 "src/Parser/TemplateParser.y" + public function yy_r155(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor); $this->_retvalue = '->{$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor . ')'.$this->yystack[$this->yyidx + 0]->minor.'}'; } -// line 1091 "src/Parser/TemplateParser.y" - public function yy_r153(){ +// line 1106 "src/Parser/TemplateParser.y" + public function yy_r156(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -// line 1098 "src/Parser/TemplateParser.y" - public function yy_r154(){ +// line 1113 "src/Parser/TemplateParser.y" + public function yy_r157(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -// line 1106 "src/Parser/TemplateParser.y" - public function yy_r155(){ +// line 1121 "src/Parser/TemplateParser.y" + public function yy_r158(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1114 "src/Parser/TemplateParser.y" - public function yy_r156(){ +// line 1129 "src/Parser/TemplateParser.y" + public function yy_r159(){ - if ($this->yystack[$this->yyidx + -3]->minor == 'isset') { + if ($this->yystack[$this->yyidx + -4]->minor == 'isset') { $this->_retvalue = '(true'; - if (count($this->yystack[$this->yyidx + -1]->minor) == 0) { + if (count($this->yystack[$this->yyidx + -2]->minor) == 0) { throw new CompilerException("Invalid number of arguments for isset. isset expects at least one parameter."); } - foreach ($this->yystack[$this->yyidx + -1]->minor as $value) { + foreach ($this->yystack[$this->yyidx + -2]->minor as $value) { if (is_array($value)) { $this->_retvalue .= ' && (' . $value[0] . ' && null !== (' . $value[1] . ' ?? null))'; } else { $this->_retvalue .= ' && (' . $value . ' !== null)'; } } - $this->_retvalue .= ')'; - } elseif ($this->yystack[$this->yyidx + -3]->minor == 'empty') { - if (count($this->yystack[$this->yyidx + -1]->minor) != 1) { + $this->_retvalue .= ')' . $this->yystack[$this->yyidx + 0]->minor; + } elseif ($this->yystack[$this->yyidx + -4]->minor == 'empty') { + if (count($this->yystack[$this->yyidx + -2]->minor) != 1) { throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter."); } - if (is_array($this->yystack[$this->yyidx + -1]->minor[0])) { - $this->_retvalue .= '( !' . $this->yystack[$this->yyidx + -1]->minor[0][0] . ' || empty(' . $this->yystack[$this->yyidx + -1]->minor[0][1] . '))'; + if (is_array($this->yystack[$this->yyidx + -2]->minor[0])) { + $this->_retvalue = '( !' . $this->yystack[$this->yyidx + -2]->minor[0][0] . ' || empty(' . $this->yystack[$this->yyidx + -2]->minor[0][1] . '))' . $this->yystack[$this->yyidx + 0]->minor; } else { - $this->_retvalue = 'false == ' . $this->yystack[$this->yyidx + -1]->minor[0]; + $this->_retvalue = 'false == ' . $this->yystack[$this->yyidx + -2]->minor[0] . $this->yystack[$this->yyidx + 0]->minor; } } else { $p = array(); - foreach ($this->yystack[$this->yyidx + -1]->minor as $value) { + foreach ($this->yystack[$this->yyidx + -2]->minor as $value) { if (is_array($value)) { $p[] = $value[1]; } else { $p[] = $value; } } - $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -3]->minor, $p); + $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -4]->minor, $p) . $this->yystack[$this->yyidx + 0]->minor; } } -// line 1155 "src/Parser/TemplateParser.y" - public function yy_r157(){ +// line 1170 "src/Parser/TemplateParser.y" + public function yy_r160(){ if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') { $this->compiler->trigger_template_error (self::ERR1); } $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; } -// line 1162 "src/Parser/TemplateParser.y" - public function yy_r158(){ +// line 1177 "src/Parser/TemplateParser.y" + public function yy_r161(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } @@ -2868,52 +2930,56 @@ public static $yy_action = array( $this->compiler->appendPrefixCode("getValue('".substr($this->yystack[$this->yyidx + -3]->minor,1).'\')'.';?>'); $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; } -// line 1191 "src/Parser/TemplateParser.y" - public function yy_r162(){ +// line 1206 "src/Parser/TemplateParser.y" + public function yy_r165(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor))); } -// line 1195 "src/Parser/TemplateParser.y" - public function yy_r163(){ +// line 1210 "src/Parser/TemplateParser.y" + public function yy_r166(){ $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)); } -// line 1203 "src/Parser/TemplateParser.y" - public function yy_r165(){ +// line 1218 "src/Parser/TemplateParser.y" + public function yy_r168(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -// line 1211 "src/Parser/TemplateParser.y" - public function yy_r166(){ +// line 1226 "src/Parser/TemplateParser.y" + public function yy_r169(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } -// line 1224 "src/Parser/TemplateParser.y" - public function yy_r169(){ - $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor); - } -// line 1233 "src/Parser/TemplateParser.y" - public function yy_r171(){ - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method'); - } -// line 1238 "src/Parser/TemplateParser.y" +// line 1239 "src/Parser/TemplateParser.y" public function yy_r172(){ - $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method'); - } -// line 1243 "src/Parser/TemplateParser.y" - public function yy_r173(){ - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, ''); + $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor); } // line 1248 "src/Parser/TemplateParser.y" public function yy_r174(){ - $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property'); + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method'); } // line 1253 "src/Parser/TemplateParser.y" public function yy_r175(){ - $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property'); + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method'); } -// line 1259 "src/Parser/TemplateParser.y" +// line 1258 "src/Parser/TemplateParser.y" public function yy_r176(){ - $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' '; + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, ''); } // line 1263 "src/Parser/TemplateParser.y" public function yy_r177(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor); + } +// line 1268 "src/Parser/TemplateParser.y" + public function yy_r178(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property'); + } +// line 1273 "src/Parser/TemplateParser.y" + public function yy_r179(){ + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property'); + } +// line 1279 "src/Parser/TemplateParser.y" + public function yy_r180(){ + $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' '; + } +// line 1283 "src/Parser/TemplateParser.y" + public function yy_r181(){ static $lops = array( 'eq' => ' == ', 'ne' => ' != ', @@ -2932,8 +2998,8 @@ public static $yy_action = array( $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $lops[$op]; } -// line 1282 "src/Parser/TemplateParser.y" - public function yy_r178(){ +// line 1302 "src/Parser/TemplateParser.y" + public function yy_r182(){ static $tlops = array( 'isdivby' => array('op' => ' % ', 'pre' => '!('), 'isnotdivby' => array('op' => ' % ', 'pre' => '('), @@ -2945,8 +3011,8 @@ public static $yy_action = array( $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $tlops[$op]; } -// line 1295 "src/Parser/TemplateParser.y" - public function yy_r179(){ +// line 1315 "src/Parser/TemplateParser.y" + public function yy_r183(){ static $scond = array ( 'iseven' => '!(1 & ', 'isnoteven' => '(1 & ', @@ -2956,58 +3022,62 @@ public static $yy_action = array( $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $scond[$op]; } -// line 1309 "src/Parser/TemplateParser.y" - public function yy_r180(){ +// line 1326 "src/Parser/TemplateParser.y" + public function yy_r184(){ + $this->_retvalue = 'preg_match('; + } +// line 1333 "src/Parser/TemplateParser.y" + public function yy_r185(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } -// line 1320 "src/Parser/TemplateParser.y" - public function yy_r183(){ +// line 1344 "src/Parser/TemplateParser.y" + public function yy_r188(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } -// line 1324 "src/Parser/TemplateParser.y" - public function yy_r184(){ +// line 1348 "src/Parser/TemplateParser.y" + public function yy_r189(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.','; } -// line 1332 "src/Parser/TemplateParser.y" - public function yy_r186(){ +// line 1356 "src/Parser/TemplateParser.y" + public function yy_r191(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1336 "src/Parser/TemplateParser.y" - public function yy_r187(){ +// line 1360 "src/Parser/TemplateParser.y" + public function yy_r192(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1352 "src/Parser/TemplateParser.y" - public function yy_r190(){ +// line 1376 "src/Parser/TemplateParser.y" + public function yy_r195(){ $this->compiler->leaveDoubleQuote(); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this); } -// line 1358 "src/Parser/TemplateParser.y" - public function yy_r191(){ +// line 1382 "src/Parser/TemplateParser.y" + public function yy_r196(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -// line 1363 "src/Parser/TemplateParser.y" - public function yy_r192(){ +// line 1387 "src/Parser/TemplateParser.y" + public function yy_r197(){ $this->_retvalue = new Dq($this, $this->yystack[$this->yyidx + 0]->minor); } -// line 1367 "src/Parser/TemplateParser.y" - public function yy_r193(){ +// line 1391 "src/Parser/TemplateParser.y" + public function yy_r198(){ $this->_retvalue = new Code('(string)'.$this->yystack[$this->yyidx + -1]->minor); } -// line 1371 "src/Parser/TemplateParser.y" - public function yy_r194(){ +// line 1395 "src/Parser/TemplateParser.y" + public function yy_r199(){ $this->_retvalue = new Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')'); } -// line 1375 "src/Parser/TemplateParser.y" - public function yy_r195(){ +// line 1399 "src/Parser/TemplateParser.y" + public function yy_r200(){ $this->_retvalue = new Code('(string)$_smarty_tpl->getValue(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')'); } -// line 1387 "src/Parser/TemplateParser.y" - public function yy_r198(){ +// line 1411 "src/Parser/TemplateParser.y" + public function yy_r203(){ $this->_retvalue = new Tag($this, $this->yystack[$this->yyidx + 0]->minor); } -// line 1391 "src/Parser/TemplateParser.y" - public function yy_r199(){ +// line 1415 "src/Parser/TemplateParser.y" + public function yy_r204(){ $this->_retvalue = new DqContent($this->yystack[$this->yyidx + 0]->minor); } diff --git a/vendor/smarty/smarty/src/Parser/TemplateParser.y b/vendor/smarty/smarty/src/Parser/TemplateParser.y index 544148f..fecd247 100644 --- a/vendor/smarty/smarty/src/Parser/TemplateParser.y +++ b/vendor/smarty/smarty/src/Parser/TemplateParser.y @@ -681,6 +681,11 @@ expr(res) ::= expr(e1) isin(c) value(v). { res = c . e1.',(array)'.v.')'; } + // regex matching + expr(res) ::= expr(e1) matchop(c) value(e2). { + res = c . e2 . ',' . e1 . ') '; +} + // null coalescing nullcoalescing(res) ::= expr(v) QMARK QMARK expr(e2). { res = v.' ?? '.e2; @@ -1062,12 +1067,22 @@ object(res) ::= varindexed(vi) objectchain(oc). { } } + // optional objectchain - empty +optobjectchain(res) ::= . { + res = ''; +} + + // optional objectchain - present +optobjectchain(res) ::= objectchain(oc). { + res = oc; +} + // single element objectchain(res) ::= objectelement(oe). { res = oe; } - // chain of elements + // chain of elements objectchain(res) ::= objectchain(oc) objectelement(oe). { res = oc.oe; } @@ -1111,7 +1126,7 @@ objectelement(res)::= PTR method(f). { // // function // -function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. { +function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP optobjectchain(oc). { if (f == 'isset') { res = '(true'; @@ -1125,15 +1140,15 @@ function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. { res .= ' && (' . $value . ' !== null)'; } } - res .= ')'; + res .= ')' . oc; } elseif (f == 'empty') { if (count(v) != 1) { throw new CompilerException("Invalid number of arguments for empty. empty expects at exactly one parameter."); } if (is_array(v[0])) { - res .= '( !' . v[0][0] . ' || empty(' . v[0][1] . '))'; + res = '( !' . v[0][0] . ' || empty(' . v[0][1] . '))' . oc; } else { - res = 'false == ' . v[0]; + res = 'false == ' . v[0] . oc; } } else { $p = array(); @@ -1144,7 +1159,7 @@ function(res) ::= ns1(f) OPENP variablelist(v) CLOSEP. { $p[] = $value; } } - res = $this->compiler->compileModifierInExpression(f, $p); + res = $this->compiler->compileModifierInExpression(f, $p) . oc; } } @@ -1244,6 +1259,11 @@ static_class_access(res) ::= ID(v). { res = array(v, ''); } + // static class constant with object chain +static_class_access(res) ::= ID(v) objectchain(oc). { + res = array(v, oc); +} + // static class variables static_class_access(res) ::= DOLLARID(v) arrayindex(a). { res = array(v, a, 'property'); @@ -1303,6 +1323,10 @@ scond(res) ::= SINGLECOND(o). { res = $scond[$op]; } +matchop(res) ::= MATCHES(o). { + res = 'preg_match('; +} + // // ARRAY element assignment // diff --git a/vendor/smarty/smarty/src/Smarty.php b/vendor/smarty/smarty/src/Smarty.php index b53a36c..5665ff4 100644 --- a/vendor/smarty/smarty/src/Smarty.php +++ b/vendor/smarty/smarty/src/Smarty.php @@ -54,7 +54,7 @@ class Smarty extends \Smarty\TemplateBase { /** * smarty version */ - const SMARTY_VERSION = '5.7.0'; + const SMARTY_VERSION = '5.8.0'; /** * define caching modes @@ -1344,10 +1344,8 @@ class Smarty extends \Smarty\TemplateBase { } $_filepath = (string)$_file; if ($_file->isDir()) { - if (!$_compile->isDot()) { - // delete folder if empty - @rmdir($_file->getPathname()); - } + // delete folder if empty + @rmdir($_file->getPathname()); } else { // delete only php files if (substr($_filepath, -4) !== '.php') { @@ -1385,8 +1383,6 @@ class Smarty extends \Smarty\TemplateBase { && (!function_exists('ini_get') || strlen(ini_get('opcache.restrict_api')) < 1) ) { opcache_invalidate($_filepath, true); - } elseif (function_exists('apc_delete_file')) { - apc_delete_file($_filepath); } } } diff --git a/vendor/smarty/smarty/src/Template/Compiled.php b/vendor/smarty/smarty/src/Template/Compiled.php index 5a07db0..e5e2aec 100644 --- a/vendor/smarty/smarty/src/Template/Compiled.php +++ b/vendor/smarty/smarty/src/Template/Compiled.php @@ -251,8 +251,6 @@ class Compiled extends GeneratedPhpFile { && (!function_exists('ini_get') || strlen(ini_get("opcache.restrict_api")) < 1) ) { opcache_invalidate($this->filepath, true); - } elseif (function_exists('apc_compile_file')) { - apc_compile_file($this->filepath); } } if (defined('HHVM_VERSION')) { diff --git a/views/_partial/footer.tpl b/views/_partial/footer.tpl index de9e8d7..9eaa238 100644 --- a/views/_partial/footer.tpl +++ b/views/_partial/footer.tpl @@ -13,7 +13,7 @@Vous devez vous connecter pour accéder à cette fonctionnalité
+Ici, vous trouverez de l'aide pour naviguer sur notre site.
+Un haut, dans votre barre de navigation, vous avez un lien pour ajouter un nouveau projet.
+ Il faudra remplir votre projet avec un titre, une description, des images (jusqu'à 20 par projet) et une image de présentation qui apparaitra en illustration dans la liste des projets.
+ Plus votre projet est rempli, plus il sera intéressant pour les autres profils, alors n'hésitez pas à bien le remplir !
Une fois votre projet créé, vous avez la possibilité de modifier son contenu. Si vous êtes bien connecté à votre compte, vous pouvez aller sur votre profil et dans la liste de vos projets, + il vous suffira de cliquer sur "éditer" pour voir toutes les informations apparaitres et changer directement ce que vous souhaitez modifier. + N'oubliez pas de valider vos modifications !
+Si vous êtes bien connecté à votre compte, vous pouvez cliquer sur votre photo de profil en haut à droite de votre écran pour accéder à votre profil. + Vous pourrez ensuite modifier vos informations directement depuis votre profil ! + Simple comme "bonjour" :)
+Si vous avez des questions ? Un problème avec votre compte ? + Vous souhaitez supprimer toutes vos données ou débloquer votre compte suite à une modération ? N'hésitez pas à nous écrire à projet.folliow@hotmail.com !
+Bienvenue dans notre team de modérateurs ! Vous avez maintenant accès à de nouvelles fonctionnalités. + Vous verez le statut de chaque projet et image en dessous de chacun. Si rien n'est mentionné, celà signifie que le projet est déjà approuvé !
+Très bonne question ! En plus du statut du projet ou de l'image, vous avez également accès à 3 boutons : approuver, refuser et supprimer. + Si le projet est valide à nos conditions d'utilisation de Folliow, vous pouvez l'approuver. Si vous pensez qu'il faut légèrement modifier ou adapter, vous pouvez le refuser et l'utilisateur pourra modifier son projet.
+Et si le projet enfreint nos règles d'utilisation, vous pouvez supprimer le projet de l'utilisateur. Attention, cette action est définitive. + N'hésitez pas à signaler un utilisateur à l'administrateur en cas de besoin !
+Si vous avez des questions ? Une fonctionnalité que vous avez du mal à comprendre ? Des suggestions d'amélioration ? N'hésitez pas à nous écrire à projet.folliow@hotmail.com !
+Rien de plus simple ! Si vous êtes connecté à votre compte, un lien "admin" sera visible dans votre barre de navigation. + Cliquez dessus et vous voici dans l'antre réservée à nos fabuleux administrateurs !
+La première fonctionnalité accessible sur votre Dashbord est la maintenance utilisateur. Vous pouvez dans le menu déroulant seléctionner l'utilisateur concerné par votre action. + Un nouveau modérateurs rejoint l'équipe ? Il suffira ensuite de choisir dans le menu déroulant, son nouveau statut ! N'oubliez pas de valider la modification !
+Oh, oh... Quelqu'un n'a pas respecté nos règles de modération et vous devez maintenant supprimer cette utilisateur... Après l'avoir séléctionné, vous pouvez appuyer sur le bouton "supprimer l'utilisateur". + Nous vous demanderons une confirmation avant de finaliser la suppression. Attention ! Cette action est définitive et l'utilisateur perdra tous ses projets !
+Voici la seconde partie de votre Dashbord. Si celà vous semble judicieux ou suite à des suggestions d'utilisateurs, vous pouvez modifier l'intitulé d'une catégorie. + Dans le menu déroulant, choisissez la catégorie concerncée, puis écrivez son nouveau nom dans le champ "nouveau nom de la catégorie". N'oubliez pas de valider le changement !
+Et si vous souhaitez créer une nouvelle catégorie, écrivez son intitulé dans le champ "nom de la nouvelle catégorie" et validez la création. Votre nouvelle catégorie apparait déjà dans le menu déroulant !
+La suppression d'une catégorie n'est pas possible, car beaucoup de projet se retrouveraient orphelins :( Mais avec la modification et la création, vous avez les outils nécessaire pour organiser le classement de tous nos beaux projets.
+Vous avez des questions ? Un problème avec votre espace administrateur ou une suggestion d'amélioration ? N'hésitez pas à nous écrire à projet.folliow@hotmail.com !
+
Folliow est un réseau social de portfolio. Il vous permet de rassembler et mettre en avant tous les projets que vous avez effectué ! + Et si vous êtes rectruteur à la recherche de talents, vous pourrez rechercher les profils en fonction de vos besoins, partager leur contenus et les contacter si vous souhaitez collaborer avec eux.
+En haut à droite de votre écran, vous avez le lien "s'inscrire". Nous demandons certaines informations obligatoires pour l'identification, + ensuite à vous de remplir les informations complémentaires pour alimenter votre profil et permettre aux autres utilisateurs de mieux vous connaitre et vous contacter.
+Lorsque vous consultez un projet, vous pouvez remplir le champ "email" avec l'email de la personne à qui vous souhaitez partager le projet. + Votre contact recevra en moins de 5 minutes, un mail de notre part avec le lien vers le projet en question ! Pratique, n'est-ce pas ?
+Si vous avez des questions, n'hésitez pas à nous écrire à projet.folliow@hotmail.com !
+Une plateforme de portfolio adapté à vos besoins et aux besoins des entreprises. - Créer un portfolio réellement pertinent aux exigences du marché et rentrez - directement en contact avec les entreprises.
-Une plateforme de portfolio adapté à vos besoins et aux besoins des entreprises. + Créer un portfolio réellement pertinent aux exigences du marché et rentrez + directement en contact avec les entreprises.
+Bonjour,
+ ++ Un projet a été partagé avec vous via la plateforme Folliow. +
+ ++ {$projectDescription} +
+ ++ Vous pouvez consulter le projet en cliquant sur le lien ci-dessous : +
+ + + +
+ Cordialement,
+ L’équipe Folliow
+
+ + Dernière mise à jour : +
+{/block} + +{block name="js_footer" append} + +{/block} + +{block name="content"} ++ FOLLIOW est un projet pédagogique réalisé dans le cadre d’un exercice de formation. +
+ +Le site est hébergé sur une infrastructure pédagogique mise à disposition pour le projet :
+ ++ Sauf mention contraire, l’ensemble des contenus présents sur FOLLIOW (textes, visuels, logo, éléments d’interface) + est utilisé dans le cadre du projet et reste la propriété de leurs auteurs respectifs. +
++ Toute reproduction ou réutilisation à des fins commerciales est interdite sans autorisation préalable. +
++ Les éventuels contenus tiers (images, icônes, bibliothèques) restent soumis à leurs licences d’origine. +
++ Le responsable du traitement est l’équipe du projet FOLLIOW (projet pédagogique). +
+ +Selon l’utilisation du site, les données pouvant être collectées sont :
++ Dans le cadre de ce projet pédagogique, les données sont conservées pendant la durée du projet et des évaluations, + puis supprimées ou anonymisées, sauf obligation légale contraire. +
+ +Conformément au RGPD, vous disposez de droits d’accès, de rectification, d’effacement et d’opposition.
++ Pour exercer ces droits, contactez-nous à : + projet.folliow@hotmail.com +
++ Vous pouvez également introduire une réclamation auprès de la CNIL + (www.cnil.fr). +
++ Les informations présentées sur FOLLIOW sont fournies à titre démonstratif dans le cadre d’un projet pédagogique. + L’équipe s’efforce de maintenir le site accessible, sans garantie d’absence d’erreurs ou d’interruptions. +
++ L’équipe FOLLIOW ne pourra être tenue responsable des dommages directs ou indirects résultant de l’utilisation du site, + notamment en cas d’indisponibilité ou de perte de données. +
++ Le site peut contenir des liens vers des sites tiers. FOLLIOW n’exerce aucun contrôle sur ces sites et décline toute + responsabilité quant à leur contenu ou leur disponibilité. +
++ Les présentes mentions légales sont régies par le droit français. En cas de litige, et à défaut d’accord amiable, + les tribunaux français seront seuls compétents. +
++ Pour toute question concernant ces mentions légales ou pour exercer vos droits, vous pouvez nous contacter : +
+Vous devez vous connecter pour accéder à cette fonctionnalité
-Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-Portfolio refusé
+ {/if} + {/if} + - + + -{/block} \ No newline at end of file +{/block} diff --git a/views/search.tpl b/views/search.tpl index 0ea9964..ea255b6 100644 --- a/views/search.tpl +++ b/views/search.tpl @@ -41,7 +41,7 @@ - +