diff options
| author | Simon Wisselink <wisskid@users.noreply.github.com> | 2026-02-15 15:23:55 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-15 15:23:55 +0100 |
| commit | 5487e31c4b3fcf7edc4e0da716ac24c9333ae3ba (patch) | |
| tree | 1f7e24cff2d8d0c1ecbbb491ba3d5004fdd93b37 | |
| parent | 12ce28e26562c680bf2ae631c8c6135370222bbb (diff) | |
| download | smarty-5487e31c4b3fcf7edc4e0da716ac24c9333ae3ba.tar.gz smarty-5487e31c4b3fcf7edc4e0da716ac24c9333ae3ba.tar.bz2 smarty-5487e31c4b3fcf7edc4e0da716ac24c9333ae3ba.zip | |
Add support for Backed Enums (#1171)
* Add support for Backed Enums
Fixes #1012
Also added docs (and docs for matches operator)
| -rw-r--r-- | docs/designers/language-basic-syntax/language-syntax-operators.md | 114 | ||||
| -rw-r--r-- | docs/designers/language-variables/language-assigned-variables.md | 87 | ||||
| -rw-r--r-- | docs/features.md | 2 | ||||
| -rw-r--r-- | docs/index.md | 19 | ||||
| -rw-r--r-- | src/Parser/TemplateParser.php | 1148 | ||||
| -rw-r--r-- | src/Parser/TemplateParser.y | 5 | ||||
| -rw-r--r-- | tests/UnitTests/TemplateSource/StaticClass/StaticClassAccessTest.php | 19 |
7 files changed, 823 insertions, 571 deletions
diff --git a/docs/designers/language-basic-syntax/language-syntax-operators.md b/docs/designers/language-basic-syntax/language-syntax-operators.md index 98a56538..965327c3 100644 --- a/docs/designers/language-basic-syntax/language-syntax-operators.md +++ b/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/docs/designers/language-variables/language-assigned-variables.md b/docs/designers/language-variables/language-assigned-variables.md index 9465a89c..5dfa3648 100644 --- a/docs/designers/language-variables/language-assigned-variables.md +++ b/docs/designers/language-variables/language-assigned-variables.md @@ -123,4 +123,89 @@ this will output: ```html name: Zaphod Beeblebrox<br /> email: zaphod@slartibartfast.example.com<br /> -```
\ No newline at end of file +``` + +## Backed Enums (PHP 8.1+) + +Smarty supports accessing properties of [backed enums](https://www.php.net/manual/en/language.enumerations.backed.php) introduced in PHP 8.1. + +### Accessing Enum Properties + +You can access the `name` and `value` properties of backed enum cases: + +```smarty +{* Access enum case properties *} +<option id="{MyEnum::Foo->name}">{MyEnum::Foo->value}</option> +``` + +### Complete Example + +```php +<?php +use Smarty\Smarty; + +// Define a backed enum +enum Status: string { + case Active = 'active'; + case Inactive = 'inactive'; + case Pending = 'pending'; +} + +$smarty = new Smarty(); +$smarty->assign('currentStatus', Status::Active); +$smarty->display('template.tpl'); +``` + +`template.tpl`: + +```smarty +{* Display enum properties *} +Current status: {$currentStatus->name} (value: {$currentStatus->value}) + +{* Use in HTML attributes *} +<select name="status"> + <option value="{Status::Active->value}" {if $currentStatus->name === 'Active'}selected{/if}>Active</option> + <option value="{Status::Inactive->value}" {if $currentStatus->name === 'Inactive'}selected{/if}>Inactive</option> + <option value="{Status::Pending->value}" {if $currentStatus->name === 'Pending'}selected{/if}>Pending</option> +</select> +``` + +This would output: + +```html +Current status: Active (value: active) + +<select name="status"> + <option value="active" selected>Active</option> + <option value="inactive">Inactive</option> + <option value="pending">Pending</option> +</select> +``` + +### Integer-backed Enums + +Integer-backed enums work the same way: + +```php +<?php +enum Priority: int { + case Low = 1; + case Medium = 2; + case High = 3; +} + +$smarty->assign('priority', Priority::High); +``` + +```smarty +{* Access integer enum properties *} +Priority level: {$priority->value} ({$priority->name}) +``` + +Output: + +```html +Priority level: 3 (High) +``` + +> **Note**: Backed enum support requires PHP 8.1 or higher. The enum must be registered or available in the current namespace.
\ No newline at end of file diff --git a/docs/features.md b/docs/features.md index f9a873be..bab9cd1e 100644 --- a/docs/features.md +++ b/docs/features.md @@ -22,6 +22,8 @@ Some of Smarty's features: - [Template Inheritance](api/inheritance.md) for easy management of template content. - [Plugin](api/extending/introduction.md) architecture +- Regex pattern matching with the [`matches`](designers/language-basic-syntax/language-syntax-operators.md#regex-matching-operator) operator +- Support for PHP 8.1+ [backed enums](designers/language-variables/language-assigned-variables.md#backed-enums-php-81) ## Separation of presentation from application code - This means templates can certainly contain logic under the condition diff --git a/docs/index.md b/docs/index.md index e187ffbe..63cf15e0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,6 +8,25 @@ It allows you to write **templates**, using **variables**, **modifiers**, **func <p> The number of pixels is: {math equation="x * y" x=$height y=$width}. </p> + +<p> + {if $email matches "/^[^@]+@[^@]+\.[^@]+$/"} + Valid email address + {else} + Please enter a valid email + {/if} +</p> +``` +```html +<h1>Hello world</h1> + +<p> + The number of pixels is: 307200. +</p> + +<p> + Valid email address +</p> ``` When this template is rendered, with the value "Hello world" for the variable $title, 640 for $width, diff --git a/src/Parser/TemplateParser.php b/src/Parser/TemplateParser.php index 4a769ea8..6414d502 100644 --- a/src/Parser/TemplateParser.php +++ b/src/Parser/TemplateParser.php @@ -264,285 +264,285 @@ class TemplateParser const TP_ARRAYOPEN = 58; const TP_QUOTE = 59; const TP_BACKTICK = 60; - const YY_NO_ACTION = 551; - const YY_ACCEPT_ACTION = 550; - const YY_ERROR_ACTION = 549; + const YY_NO_ACTION = 553; + const YY_ACCEPT_ACTION = 552; + const YY_ERROR_ACTION = 551; - const YY_SZ_ACTTAB = 2726; + const YY_SZ_ACTTAB = 2723; public static $yy_action = array( - 31, 47, 22, 289, 41, 14, 48, 251, 252, 253, - 1, 15, 141, 241, 206, 204, 6, 88, 204, 226, - 243, 203, 114, 109, 405, 204, 221, 265, 222, 104, - 228, 405, 21, 405, 224, 44, 405, 30, 45, 46, - 282, 230, 405, 286, 405, 207, 405, 54, 4, 14, - 302, 184, 334, 310, 229, 15, 5, 86, 251, 252, - 253, 1, 104, 138, 399, 197, 240, 6, 88, 517, - 226, 550, 101, 114, 152, 257, 399, 221, 265, 222, - 143, 212, 399, 21, 260, 452, 44, 13, 143, 45, - 46, 282, 230, 204, 239, 13, 207, 452, 54, 4, - 333, 302, 204, 40, 261, 367, 155, 5, 86, 251, - 252, 253, 1, 142, 102, 271, 87, 367, 6, 88, - 309, 226, 155, 367, 114, 319, 16, 220, 221, 265, - 222, 273, 228, 182, 21, 310, 142, 44, 235, 97, - 45, 46, 282, 230, 174, 286, 272, 207, 54, 54, - 4, 302, 302, 250, 181, 220, 310, 179, 5, 86, - 251, 252, 253, 1, 20, 140, 196, 206, 275, 6, - 88, 54, 226, 315, 302, 114, 188, 264, 452, 221, - 265, 222, 204, 228, 276, 21, 146, 237, 44, 188, - 452, 45, 46, 282, 230, 330, 286, 3, 207, 104, - 54, 4, 145, 302, 302, 288, 98, 311, 25, 5, - 86, 251, 252, 253, 1, 268, 140, 133, 198, 366, - 6, 88, 26, 226, 302, 366, 114, 108, 117, 452, - 221, 265, 222, 33, 228, 233, 21, 162, 53, 44, - 302, 452, 45, 46, 282, 230, 104, 286, 37, 207, - 104, 54, 4, 326, 302, 156, 204, 261, 366, 144, - 5, 86, 251, 252, 253, 1, 268, 139, 401, 206, - 366, 6, 88, 302, 226, 117, 366, 114, 154, 117, - 401, 221, 265, 222, 259, 228, 401, 11, 260, 53, - 44, 204, 24, 45, 46, 282, 230, 204, 286, 161, - 207, 261, 54, 4, 181, 302, 310, 158, 261, 398, - 261, 5, 86, 251, 252, 253, 1, 260, 140, 160, - 193, 398, 6, 88, 36, 226, 273, 398, 114, 260, - 241, 113, 221, 265, 222, 91, 217, 343, 21, 340, - 109, 44, 18, 187, 45, 46, 282, 230, 15, 286, - 241, 207, 472, 54, 4, 187, 302, 242, 268, 472, - 109, 176, 5, 86, 251, 252, 253, 1, 32, 140, - 147, 191, 92, 6, 88, 263, 226, 302, 19, 114, - 260, 53, 262, 221, 265, 222, 163, 228, 328, 21, - 7, 149, 44, 188, 204, 45, 46, 282, 230, 150, - 286, 109, 207, 167, 54, 4, 268, 302, 180, 260, - 231, 170, 472, 5, 86, 251, 252, 253, 1, 472, - 140, 260, 206, 9, 6, 88, 183, 226, 310, 53, - 114, 319, 169, 220, 221, 265, 222, 185, 192, 249, - 21, 325, 294, 44, 295, 317, 45, 46, 282, 230, - 173, 286, 187, 207, 133, 54, 4, 34, 302, 100, - 260, 177, 218, 201, 5, 86, 251, 252, 253, 1, - 23, 142, 303, 206, 40, 6, 88, 488, 90, 321, - 488, 114, 17, 264, 488, 221, 265, 222, 342, 228, - 268, 21, 8, 188, 49, 248, 249, 45, 46, 282, - 230, 267, 286, 9, 207, 322, 54, 4, 93, 302, - 299, 452, 454, 53, 454, 5, 86, 251, 252, 253, - 1, 202, 142, 452, 206, 157, 6, 88, 456, 95, - 456, 453, 114, 223, 10, 260, 221, 265, 222, 229, - 228, 99, 21, 453, 175, 44, 118, 329, 45, 46, - 282, 230, 23, 286, 335, 207, 178, 54, 4, 247, - 302, 188, 164, 35, 165, 186, 5, 86, 254, 292, - 219, 220, 256, 255, 94, 111, 279, 195, 105, 85, - 115, 266, 123, 274, 103, 281, 229, 277, 278, 283, - 159, 229, 7, 284, 96, 285, 208, 287, 297, 293, - 260, 300, 298, 301, 292, 219, 220, 256, 89, 94, - 111, 238, 194, 105, 60, 341, 37, 166, 344, 103, - 168, 331, 277, 278, 38, 332, 188, 321, 321, 321, - 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, - 321, 220, 258, 321, 116, 111, 321, 195, 105, 85, - 321, 321, 263, 321, 103, 19, 321, 277, 278, 262, - 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, - 321, 300, 298, 301, 292, 321, 220, 321, 112, 116, - 321, 321, 205, 121, 72, 321, 321, 321, 321, 103, - 321, 232, 277, 278, 42, 43, 290, 12, 321, 321, - 285, 208, 287, 321, 293, 321, 300, 298, 301, 321, - 321, 304, 305, 306, 307, 308, 292, 321, 220, 211, - 324, 116, 321, 321, 205, 121, 72, 14, 321, 488, - 321, 103, 488, 15, 277, 278, 488, 472, 42, 43, - 290, 12, 285, 208, 287, 321, 293, 321, 300, 298, - 301, 321, 321, 321, 321, 304, 305, 306, 307, 308, - 321, 210, 324, 472, 321, 321, 472, 292, 488, 220, - 472, 321, 110, 321, 321, 205, 124, 51, 321, 122, - 263, 321, 103, 19, 321, 277, 278, 262, 321, 321, - 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, - 298, 301, 292, 321, 220, 321, 321, 116, 321, 321, - 205, 124, 67, 132, 321, 321, 236, 103, 321, 225, - 277, 278, 321, 103, 321, 321, 321, 321, 285, 208, - 287, 321, 293, 321, 300, 298, 301, 321, 321, 321, - 300, 298, 301, 292, 216, 220, 321, 321, 116, 321, - 321, 205, 124, 67, 321, 321, 321, 321, 103, 321, - 321, 277, 278, 321, 321, 321, 321, 321, 321, 285, - 208, 287, 321, 293, 321, 300, 298, 301, 292, 321, - 220, 321, 321, 116, 321, 209, 205, 121, 72, 321, - 321, 321, 321, 103, 321, 488, 277, 278, 488, 321, - 321, 321, 488, 321, 285, 208, 287, 321, 293, 321, - 300, 298, 301, 321, 321, 321, 321, 321, 292, 321, - 220, 321, 321, 116, 323, 321, 205, 124, 78, 321, - 321, 321, 321, 103, 488, 321, 277, 278, 321, 321, - 321, 321, 321, 321, 285, 208, 287, 321, 293, 213, - 215, 298, 301, 292, 321, 220, 321, 321, 110, 321, - 321, 205, 124, 58, 321, 242, 321, 321, 103, 321, - 321, 277, 278, 321, 321, 263, 321, 321, 19, 285, - 208, 287, 262, 293, 321, 300, 298, 301, 321, 321, - 292, 14, 220, 153, 321, 116, 321, 15, 205, 120, - 62, 321, 321, 321, 321, 103, 321, 321, 277, 278, - 321, 321, 321, 321, 321, 321, 285, 208, 287, 321, - 293, 321, 300, 298, 301, 292, 321, 220, 321, 321, - 116, 321, 321, 200, 119, 59, 321, 321, 321, 321, - 103, 321, 321, 277, 278, 321, 321, 321, 321, 321, - 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, - 321, 321, 292, 321, 220, 321, 321, 116, 321, 321, - 205, 106, 84, 321, 321, 321, 321, 103, 321, 321, - 277, 278, 321, 321, 321, 321, 321, 321, 285, 208, - 287, 321, 293, 321, 300, 298, 301, 292, 321, 220, - 321, 321, 116, 321, 321, 205, 107, 83, 321, 321, - 321, 321, 103, 321, 321, 277, 278, 321, 321, 321, - 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, - 298, 301, 321, 321, 292, 321, 220, 321, 321, 116, - 321, 321, 205, 124, 55, 321, 321, 321, 321, 103, - 321, 321, 277, 278, 321, 321, 321, 321, 321, 321, - 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, - 321, 220, 321, 321, 116, 321, 321, 205, 124, 66, - 321, 321, 321, 321, 103, 321, 321, 277, 278, 321, - 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, - 321, 300, 298, 301, 321, 321, 292, 321, 220, 321, - 321, 116, 321, 321, 205, 106, 56, 321, 321, 321, - 321, 103, 321, 321, 277, 278, 321, 321, 321, 321, - 321, 321, 285, 208, 287, 321, 293, 321, 300, 298, - 301, 292, 321, 220, 321, 321, 116, 321, 321, 205, - 124, 65, 321, 321, 321, 321, 103, 321, 321, 277, - 278, 321, 321, 321, 321, 321, 321, 285, 208, 287, - 321, 293, 321, 300, 298, 301, 321, 321, 292, 321, - 220, 321, 321, 116, 321, 321, 205, 124, 57, 321, - 321, 321, 321, 103, 321, 321, 277, 278, 321, 321, - 321, 321, 321, 321, 285, 208, 287, 321, 293, 321, - 300, 298, 301, 292, 321, 220, 321, 321, 116, 321, - 321, 205, 124, 58, 321, 321, 321, 321, 103, 321, - 321, 277, 278, 321, 321, 321, 321, 321, 321, 285, - 208, 287, 321, 293, 321, 300, 298, 301, 321, 321, - 292, 321, 220, 321, 321, 116, 321, 321, 205, 124, - 68, 321, 321, 321, 321, 103, 321, 321, 277, 278, - 321, 321, 321, 321, 321, 321, 285, 208, 287, 321, - 293, 321, 300, 298, 301, 292, 321, 220, 321, 321, - 116, 321, 321, 205, 124, 69, 321, 321, 321, 321, - 103, 321, 321, 277, 278, 321, 321, 321, 321, 321, - 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, - 321, 321, 292, 321, 220, 321, 321, 116, 321, 321, - 205, 124, 70, 321, 321, 321, 321, 103, 321, 321, - 277, 278, 321, 321, 321, 321, 321, 321, 285, 208, - 287, 321, 293, 321, 300, 298, 301, 292, 321, 220, - 321, 321, 116, 321, 321, 205, 124, 71, 321, 321, - 321, 321, 103, 321, 321, 277, 278, 321, 321, 321, - 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, - 298, 301, 321, 321, 292, 321, 220, 321, 321, 116, - 321, 321, 205, 124, 73, 321, 321, 321, 321, 103, - 321, 321, 277, 278, 321, 321, 321, 321, 321, 321, - 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, - 321, 220, 321, 321, 116, 321, 321, 199, 124, 61, - 321, 321, 321, 321, 103, 321, 321, 277, 278, 321, - 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, - 321, 300, 298, 301, 321, 321, 292, 321, 220, 321, - 321, 116, 321, 321, 205, 124, 74, 321, 321, 321, - 321, 103, 321, 321, 277, 278, 321, 321, 321, 321, - 321, 321, 285, 208, 287, 321, 293, 321, 300, 298, - 301, 292, 321, 220, 321, 321, 116, 321, 321, 205, - 124, 75, 321, 321, 321, 321, 103, 321, 321, 277, - 278, 321, 321, 321, 321, 321, 321, 285, 208, 287, - 321, 293, 321, 300, 298, 301, 321, 321, 292, 321, - 220, 321, 321, 116, 321, 321, 205, 124, 76, 321, - 321, 321, 321, 103, 321, 321, 277, 278, 321, 321, - 321, 321, 321, 321, 285, 208, 287, 321, 293, 321, - 300, 298, 301, 292, 321, 220, 321, 321, 116, 321, - 321, 205, 124, 77, 321, 321, 321, 321, 103, 321, - 321, 277, 278, 321, 321, 321, 321, 321, 321, 285, - 208, 287, 321, 293, 321, 300, 298, 301, 321, 321, - 292, 321, 220, 321, 321, 116, 321, 321, 205, 124, - 63, 321, 321, 321, 321, 103, 321, 321, 277, 278, - 321, 321, 321, 321, 321, 321, 285, 208, 287, 321, - 293, 321, 300, 298, 301, 292, 321, 220, 321, 321, - 116, 321, 321, 205, 124, 64, 321, 321, 321, 321, - 103, 321, 321, 277, 278, 321, 321, 321, 321, 321, - 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, - 321, 321, 292, 321, 220, 321, 321, 116, 321, 321, - 205, 124, 79, 321, 321, 321, 321, 103, 321, 321, - 277, 278, 321, 321, 321, 321, 321, 321, 285, 208, - 287, 321, 293, 321, 214, 298, 301, 292, 321, 220, - 321, 321, 116, 321, 321, 205, 124, 80, 321, 321, - 321, 321, 103, 321, 321, 277, 278, 321, 321, 321, - 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, - 298, 301, 321, 321, 292, 321, 220, 321, 321, 116, - 321, 321, 205, 124, 81, 321, 321, 321, 321, 103, - 321, 321, 277, 278, 321, 321, 321, 321, 321, 321, - 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, - 321, 220, 321, 321, 116, 321, 321, 205, 124, 82, - 321, 321, 321, 321, 103, 321, 321, 277, 278, 321, - 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, - 321, 300, 298, 301, 321, 321, 292, 321, 220, 321, - 321, 116, 321, 321, 205, 124, 50, 321, 321, 321, - 321, 103, 321, 321, 277, 278, 321, 321, 321, 321, - 321, 321, 285, 208, 287, 321, 293, 321, 300, 298, - 301, 292, 321, 220, 321, 321, 116, 321, 321, 205, - 124, 52, 321, 321, 321, 321, 103, 321, 321, 277, - 278, 321, 321, 321, 321, 321, 321, 285, 208, 287, - 321, 293, 321, 300, 298, 301, 321, 321, 292, 321, - 220, 321, 321, 116, 321, 321, 205, 137, 321, 321, - 321, 321, 292, 103, 220, 321, 321, 116, 321, 321, - 205, 130, 338, 321, 285, 208, 287, 103, 293, 321, - 300, 298, 301, 321, 321, 321, 291, 321, 285, 208, - 287, 321, 293, 320, 300, 298, 301, 321, 321, 251, - 252, 253, 2, 321, 318, 321, 321, 321, 6, 88, - 321, 321, 321, 321, 114, 321, 321, 151, 221, 265, - 222, 321, 321, 321, 39, 321, 14, 42, 43, 290, - 12, 321, 15, 321, 321, 321, 321, 42, 43, 290, - 12, 321, 321, 321, 304, 305, 306, 307, 308, 313, - 27, 321, 321, 320, 304, 305, 306, 307, 308, 251, - 252, 253, 2, 321, 318, 321, 321, 321, 6, 88, - 263, 321, 321, 19, 114, 321, 321, 262, 221, 265, - 222, 336, 42, 43, 290, 12, 14, 42, 43, 290, - 12, 321, 15, 321, 321, 321, 321, 321, 321, 304, - 305, 306, 307, 308, 304, 305, 306, 307, 308, 314, - 27, 316, 321, 244, 245, 246, 136, 227, 321, 251, - 252, 253, 1, 321, 488, 321, 321, 488, 6, 88, - 3, 488, 472, 321, 114, 321, 280, 321, 221, 265, - 222, 292, 321, 220, 321, 321, 116, 321, 321, 205, - 135, 321, 321, 321, 321, 321, 103, 321, 472, 321, - 321, 472, 321, 488, 321, 472, 321, 285, 208, 287, - 321, 293, 321, 300, 298, 301, 321, 292, 321, 220, - 171, 321, 116, 321, 321, 205, 125, 321, 321, 321, - 260, 321, 103, 47, 22, 289, 41, 321, 48, 321, - 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, - 298, 301, 321, 292, 321, 220, 321, 148, 116, 321, - 321, 205, 126, 321, 321, 321, 321, 260, 103, 321, - 47, 22, 289, 41, 321, 48, 321, 321, 321, 285, - 208, 287, 321, 293, 321, 300, 298, 301, 321, 292, - 321, 220, 321, 172, 116, 321, 321, 205, 127, 321, - 321, 321, 321, 260, 103, 321, 47, 22, 289, 41, - 132, 48, 321, 270, 321, 285, 208, 287, 321, 293, - 103, 300, 298, 301, 321, 292, 321, 220, 321, 321, - 116, 321, 269, 205, 128, 321, 321, 300, 298, 301, - 103, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, - 321, 292, 321, 220, 321, 321, 116, 321, 321, 205, - 129, 321, 321, 321, 321, 321, 103, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 285, 208, 287, - 321, 293, 321, 300, 298, 301, 321, 292, 321, 220, - 321, 321, 116, 321, 204, 205, 131, 321, 321, 321, - 321, 321, 103, 321, 321, 321, 370, 321, 321, 321, - 234, 321, 321, 285, 208, 287, 321, 293, 14, 300, - 298, 301, 321, 292, 15, 220, 414, 452, 116, 321, - 321, 205, 134, 321, 321, 321, 321, 321, 103, 452, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 285, - 208, 287, 321, 293, 321, 300, 298, 301, 452, 321, - 414, 414, 414, 414, 321, 321, 321, 321, 321, 321, - 452, 321, 321, 321, 321, 321, 321, 414, 414, 414, - 414, 414, 227, 321, 321, 321, 321, 321, 321, 488, - 321, 321, 488, 321, 321, 227, 488, 472, 321, 321, - 321, 280, 488, 321, 321, 488, 321, 321, 36, 488, - 472, 321, 321, 321, 280, 321, 321, 321, 321, 321, - 321, 321, 337, 472, 321, 321, 472, 321, 488, 321, - 472, 296, 321, 321, 321, 321, 472, 321, 321, 472, - 321, 488, 321, 472, 29, 42, 43, 290, 12, 321, - 312, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 304, 305, 306, 307, 308, 42, 43, 290, - 12, 321, 321, 42, 43, 290, 12, 189, 42, 43, - 290, 12, 327, 190, 304, 305, 306, 307, 308, 339, - 304, 305, 306, 307, 308, 304, 305, 306, 307, 308, - 42, 43, 290, 12, 321, 321, 42, 43, 290, 12, - 321, 321, 42, 43, 290, 12, 321, 304, 305, 306, - 307, 308, 321, 304, 305, 306, 307, 308, 227, 304, - 305, 306, 307, 308, 28, 488, 321, 321, 488, 321, - 321, 488, 488, 472, 488, 321, 321, 280, 488, 472, - 321, 321, 321, 280, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 472, - 321, 321, 472, 321, 488, 472, 472, 321, 472, 321, - 488, 321, 472, 321, 42, 43, 290, 12, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 304, 305, 306, 307, 308, + 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, 86, 87, 88, 89, 25, 91, 9, 10, 11, @@ -557,8 +557,8 @@ public static $yy_action = array( 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, 101, 31, 24, 66, 20, 68, 28, 29, - 30, 102, 32, 104, 34, 106, 14, 37, 16, 33, + 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, @@ -586,28 +586,28 @@ public static $yy_action = array( 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, 43, 58, 59, 9, 10, 11, 12, 50, + 16, 73, 101, 58, 59, 9, 10, 11, 12, 20, 14, 83, 16, 33, 18, 19, 104, 21, 106, 44, - 24, 66, 101, 68, 28, 29, 30, 6, 32, 8, + 24, 66, 33, 68, 28, 29, 30, 104, 32, 106, 34, 51, 95, 37, 51, 60, 40, 41, 42, 43, - 73, 45, 109, 47, 107, 49, 50, 33, 52, 35, + 73, 45, 43, 47, 107, 49, 50, 109, 52, 50, 83, 77, 64, 65, 58, 59, 9, 10, 11, 12, - 33, 14, 35, 16, 2, 18, 19, 9, 113, 114, + 6, 14, 8, 16, 2, 18, 19, 9, 113, 114, 12, 24, 15, 110, 16, 28, 29, 30, 21, 32, - 21, 34, 34, 109, 37, 7, 8, 40, 41, 42, - 43, 16, 45, 33, 47, 35, 49, 50, 101, 52, - 106, 34, 33, 44, 35, 58, 59, 9, 10, 11, - 12, 65, 14, 46, 16, 73, 18, 19, 33, 77, + 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, 82, 49, 50, 7, - 52, 109, 101, 15, 101, 16, 58, 59, 13, 66, - 67, 68, 69, 13, 71, 72, 14, 74, 75, 76, - 16, 16, 16, 16, 81, 16, 43, 84, 85, 32, - 73, 43, 34, 32, 77, 92, 93, 94, 16, 96, - 83, 98, 99, 100, 66, 67, 68, 69, 16, 71, - 72, 16, 74, 75, 76, 16, 15, 49, 35, 81, - 49, 51, 84, 85, 22, 51, 109, 115, 115, 115, + 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, @@ -633,244 +633,244 @@ public static $yy_action = array( 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, - 115, 115, 115, 81, 115, 9, 84, 85, 12, 115, - 115, 115, 16, 115, 92, 93, 94, 115, 96, 115, - 98, 99, 100, 115, 115, 115, 115, 115, 66, 115, - 68, 115, 115, 71, 112, 115, 74, 75, 76, 115, - 115, 115, 115, 81, 48, 115, 84, 85, 115, 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, 66, 115, 68, 115, 115, 71, 115, - 115, 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, 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, + 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, - 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, + 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, 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, + 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, 115, 115, 66, 115, 68, 115, + 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, 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, + 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, 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, + 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, - 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, + 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, 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, + 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, 115, 115, 66, 115, 68, 115, + 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, 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, + 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, 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, + 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, - 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, + 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, 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, + 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, 115, 115, 66, 115, 68, 115, + 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, 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, + 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, 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, + 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 = -21; - const YY_SHIFT_MAX = 243; + const YY_SHIFT_MAX = 244; public static $yy_shift_ofst = array( - -21, 100, 100, 151, 202, 202, 253, 151, 151, 202, + -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, 151, 355, 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, - 2051, 702, 702, 99, 122, 658, 2041, 2529, 2096, 2551, - 2557, 2101, 2562, 2584, 2590, 2596, 2668, 2668, 2668, 2668, - 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, - 2668, 2668, 2668, 2668, 2668, 2668, 2040, 2413, 172, 24, - 2100, 966, 2111, 45, 182, 24, 24, 172, 172, 101, - 12, 2160, 2165, 643, 221, 92, 255, 296, 366, 366, - 233, -20, 188, -20, 317, 17, 229, 394, 394, 393, - 290, 181, -20, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 12, 12, 68, 14, -21, -21, 2500, 2513, - 2646, 2652, 720, 152, 771, 468, 309, -20, -20, 467, - -20, 325, -20, 325, -20, 37, 37, -20, -20, -20, - -20, 37, 356, 37, 37, 37, 369, 37, 369, 37, - -20, -20, -20, -20, 14, 472, 14, 14, 472, 14, - 458, 12, 12, 12, 12, -21, -21, -21, -21, -21, - -21, 2444, 11, 51, 194, 245, 886, 144, 195, 385, - 337, 431, 488, 106, 485, 469, 477, 497, 500, 437, - 470, 390, 496, 424, 479, 495, 519, 548, 552, 555, - 560, 549, 564, 565, 566, 567, 562, 569, 543, 557, - 561, 558, 582, 458, 592, 568, 571, 595, 570, 574, - 599, 601, 583, 602, + 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 = -86; - const YY_REDUCE_MAX = 190; + const YY_REDUCE_MAX = 192; public static $yy_reduce_ofst = array( 9, 503, 538, 573, 608, 650, 701, 736, 777, 812, - 852, 887, 924, 959, 996, 1031, 1068, 1103, 1140, 1175, - 1212, 1247, 1284, 1319, 1356, 1391, 1428, 1463, 1500, 1535, - 1572, 1607, 1644, 1679, 1716, 1751, 1788, 1823, 1860, 1895, - 1932, 1946, 2125, 2161, 2197, 2233, 2269, 2305, 2341, 2377, - 2157, 2194, 2230, 2249, 742, -85, -85, -85, -85, -85, + 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, 154, 146, 80, 80, 80, 198, 154, - 200, 297, 320, 326, 338, 284, 200, 110, 347, 80, - 80, 80, 377, 384, 80, 80, 80, 80, 80, 80, - 80, 80, 200, 322, 80, 80, 398, 80, 21, 21, - 21, 21, 21, 178, 207, 21, 21, 201, 201, 251, - 201, 254, 201, 291, 201, 224, 224, 201, 201, 201, - 201, 224, 285, 224, 224, 224, 302, 224, 331, 224, - 201, 201, 201, 201, 343, 373, 343, 343, 373, 343, - 407, 404, 404, 404, 404, 456, 459, 462, 474, 461, - 463, + -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(), @@ -976,8 +976,8 @@ public static $yy_action = array( 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, ), @@ -991,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, ), @@ -1030,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, ), @@ -1039,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, ), @@ -1053,6 +1054,7 @@ public static $yy_action = array( array(1, ), array(2, ), array(1, ), + array(17, ), array(34, ), array(17, ), array(17, ), @@ -1083,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, ), @@ -1106,11 +1108,10 @@ public static $yy_action = array( array(32, ), array(34, ), array(16, ), - array(34, ), - array(16, ), array(49, ), array(49, ), array(16, ), + array(16, ), array(51, ), array(51, ), array(16, ), @@ -1220,46 +1221,46 @@ public static $yy_action = array( array(), ); public static $yy_default = array( - 355, 549, 549, 549, 534, 534, 549, 509, 509, 533, - 458, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 395, 374, 395, 549, 549, 549, 400, 549, 549, 549, - 368, 549, 549, 549, 549, 549, 379, 508, 418, 507, - 426, 535, 537, 536, 425, 427, 424, 428, 457, 455, - 402, 406, 407, 397, 400, 368, 549, 439, 549, 395, - 549, 395, 395, 522, 460, 395, 395, 549, 549, 386, - 495, 345, 459, 472, 549, 409, 409, 409, 472, 472, - 460, 395, 549, 395, 395, 389, 460, 549, 549, 409, - 409, 409, 376, 391, 409, 416, 430, 431, 432, 417, - 422, 423, 460, 519, 430, 415, 353, 516, 459, 459, - 459, 459, 459, 549, 474, 472, 488, 365, 375, 549, - 378, 549, 383, 549, 384, 469, 470, 369, 371, 372, - 373, 500, 472, 499, 502, 501, 463, 464, 465, 466, - 385, 381, 382, 377, 387, 510, 390, 392, 511, 448, - 472, 494, 523, 520, 496, 353, 515, 515, 515, 472, - 472, 439, 435, 439, 429, 429, 473, 439, 439, 429, - 429, 351, 549, 549, 549, 429, 439, 449, 549, 549, - 549, 549, 435, 549, 467, 467, 549, 435, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 435, 437, - 549, 521, 549, 488, 549, 549, 549, 549, 549, 444, - 549, 549, 549, 403, 346, 347, 348, 349, 350, 352, - 354, 356, 357, 358, 359, 360, 361, 362, 364, 393, - 394, 490, 491, 492, 514, 388, 512, 513, 433, 442, - 443, 452, 453, 471, 475, 476, 477, 410, 411, 412, - 413, 414, 434, 436, 438, 440, 444, 445, 446, 419, - 420, 421, 447, 450, 451, 485, 483, 461, 462, 498, - 467, 468, 489, 506, 524, 525, 526, 527, 528, 363, - 497, 545, 546, 538, 539, 540, 543, 542, 544, 547, - 548, 541, 530, 532, 531, 529, 503, 486, 484, 482, - 479, 480, 481, 487, 504, 505, 441, 478, 518, 493, - 488, 396, 380, 404, 408, + 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 = 116; const YYSTACKDEPTH = 500; - const YYNSTATE = 345; - const YYNRULE = 204; + const YYNSTATE = 346; + const YYNRULE = 205; const YYERRORSYMBOL = 61; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; @@ -1498,6 +1499,7 @@ 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', @@ -2018,6 +2020,7 @@ public static $yy_action = array( 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 ), @@ -2074,8 +2077,8 @@ public static $yy_action = array( 107 => 6, 123 => 6, 151 => 6, - 186 => 6, - 192 => 6, + 187 => 6, + 193 => 6, 7 => 7, 8 => 8, 150 => 8, @@ -2186,7 +2189,7 @@ public static $yy_action = array( 124 => 124, 125 => 125, 127 => 127, - 189 => 127, + 190 => 127, 128 => 128, 129 => 129, 130 => 130, @@ -2204,7 +2207,7 @@ public static $yy_action = array( 142 => 142, 143 => 143, 144 => 144, - 193 => 144, + 194 => 144, 145 => 145, 147 => 147, 148 => 148, @@ -2235,21 +2238,22 @@ public static $yy_action = array( 182 => 182, 183 => 183, 184 => 184, - 185 => 184, - 187 => 187, + 185 => 185, + 186 => 185, 188 => 188, - 190 => 190, + 189 => 189, 191 => 191, - 194 => 194, + 192 => 192, 195 => 195, 196 => 196, 197 => 197, - 200 => 197, 198 => 198, 201 => 198, 199 => 199, - 202 => 202, + 202 => 199, + 200 => 200, 203 => 203, + 204 => 204, ); // line 245 "src/Parser/TemplateParser.y" public function yy_r0(){ @@ -2960,18 +2964,22 @@ public static $yy_action = array( } // 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, 'property'); + $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 + -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, 'property'); } -// line 1274 "src/Parser/TemplateParser.y" +// line 1273 "src/Parser/TemplateParser.y" public function yy_r179(){ - $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' '; + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property'); } -// line 1278 "src/Parser/TemplateParser.y" +// 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' => ' != ', @@ -2990,8 +2998,8 @@ public static $yy_action = array( $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $lops[$op]; } -// line 1297 "src/Parser/TemplateParser.y" - public function yy_r181(){ +// line 1302 "src/Parser/TemplateParser.y" + public function yy_r182(){ static $tlops = array( 'isdivby' => array('op' => ' % ', 'pre' => '!('), 'isnotdivby' => array('op' => ' % ', 'pre' => '('), @@ -3003,8 +3011,8 @@ public static $yy_action = array( $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $tlops[$op]; } -// line 1310 "src/Parser/TemplateParser.y" - public function yy_r182(){ +// line 1315 "src/Parser/TemplateParser.y" + public function yy_r183(){ static $scond = array ( 'iseven' => '!(1 & ', 'isnoteven' => '(1 & ', @@ -3014,62 +3022,62 @@ public static $yy_action = array( $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $scond[$op]; } -// line 1321 "src/Parser/TemplateParser.y" - public function yy_r183(){ +// line 1326 "src/Parser/TemplateParser.y" + public function yy_r184(){ $this->_retvalue = 'preg_match('; } -// line 1328 "src/Parser/TemplateParser.y" - public function yy_r184(){ +// line 1333 "src/Parser/TemplateParser.y" + public function yy_r185(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } -// line 1339 "src/Parser/TemplateParser.y" - public function yy_r187(){ +// 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 1343 "src/Parser/TemplateParser.y" - public function yy_r188(){ +// line 1348 "src/Parser/TemplateParser.y" + public function yy_r189(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.','; } -// line 1351 "src/Parser/TemplateParser.y" - public function yy_r190(){ +// 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 1355 "src/Parser/TemplateParser.y" - public function yy_r191(){ +// 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 1371 "src/Parser/TemplateParser.y" - public function yy_r194(){ +// 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 1377 "src/Parser/TemplateParser.y" - public function yy_r195(){ +// 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 1382 "src/Parser/TemplateParser.y" - public function yy_r196(){ +// line 1387 "src/Parser/TemplateParser.y" + public function yy_r197(){ $this->_retvalue = new Dq($this, $this->yystack[$this->yyidx + 0]->minor); } -// line 1386 "src/Parser/TemplateParser.y" - public function yy_r197(){ +// line 1391 "src/Parser/TemplateParser.y" + public function yy_r198(){ $this->_retvalue = new Code('(string)'.$this->yystack[$this->yyidx + -1]->minor); } -// line 1390 "src/Parser/TemplateParser.y" - public function yy_r198(){ +// line 1395 "src/Parser/TemplateParser.y" + public function yy_r199(){ $this->_retvalue = new Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')'); } -// line 1394 "src/Parser/TemplateParser.y" - public function yy_r199(){ +// 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 1406 "src/Parser/TemplateParser.y" - public function yy_r202(){ +// line 1411 "src/Parser/TemplateParser.y" + public function yy_r203(){ $this->_retvalue = new Tag($this, $this->yystack[$this->yyidx + 0]->minor); } -// line 1410 "src/Parser/TemplateParser.y" - public function yy_r203(){ +// line 1415 "src/Parser/TemplateParser.y" + public function yy_r204(){ $this->_retvalue = new DqContent($this->yystack[$this->yyidx + 0]->minor); } diff --git a/src/Parser/TemplateParser.y b/src/Parser/TemplateParser.y index e802fa3b..fecd247d 100644 --- a/src/Parser/TemplateParser.y +++ b/src/Parser/TemplateParser.y @@ -1259,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'); diff --git a/tests/UnitTests/TemplateSource/StaticClass/StaticClassAccessTest.php b/tests/UnitTests/TemplateSource/StaticClass/StaticClassAccessTest.php index 7836172c..b3c231ac 100644 --- a/tests/UnitTests/TemplateSource/StaticClass/StaticClassAccessTest.php +++ b/tests/UnitTests/TemplateSource/StaticClass/StaticClassAccessTest.php @@ -64,6 +64,21 @@ class StaticClassAccessTest extends PHPUnit_Smarty $this->assertEquals('3', $this->smarty->fetch($tpl)); } + /** + * test static class constant chain + */ + public function testRegisteredBackedEnum() + { + if (PHP_VERSION_ID < 80100) { + $this->markTestSkipped('Enums only available after PHP >= 8.1'); + return; + } else { + $this->smarty->registerClass('RegisteredBackedEnum', MyBackedEnum::class); + $tpl = $this->smarty->createTemplate('eval:{RegisteredBackedEnum::A->value}'); + $this->assertEquals('3', $this->smarty->fetch($tpl)); + } + } + /** * test static class method */ @@ -134,3 +149,7 @@ class mystaticclass return $i * $i; } } + +if (PHP_VERSION_ID >= 80100) { + eval('enum MyBackedEnum: int { case A = 3; }'); +}
\ No newline at end of file |
